2015-05-14 08:44:38 +02:00
|
|
|
<TMPL_INCLUDE NAME="header.tpl">
|
|
|
|
|
|
|
|
<title>LemonLDAP::NG Manager</title>
|
|
|
|
<link rel="prefetch" href="<TMPL_VAR NAME="STATIC_PREFIX">forms/home.html" />
|
|
|
|
<link rel="prefetch" href="<TMPL_VAR NAME="STATIC_PREFIX">struct.json" />
|
|
|
|
</head>
|
|
|
|
|
2017-01-18 00:17:23 +01:00
|
|
|
<body ng-app="llngManager" ng-controller="TreeCtrl" ng-csp>
|
2015-05-14 08:44:38 +02:00
|
|
|
|
|
|
|
<TMPL_INCLUDE NAME="menubar.tpl">
|
|
|
|
|
|
|
|
<div id="content" class="row container-fluid">
|
|
|
|
|
|
|
|
<TMPL_INCLUDE NAME="tree.tpl">
|
|
|
|
|
|
|
|
<!-- Right(main) div -->
|
2016-01-24 09:05:53 +01:00
|
|
|
<div id="right" class="col-lg-8 col-md-8 col-sm-7 col-xs-12 scrollable" ng-class="{'hidden-xs':showT&&!showM}">
|
2015-05-14 08:44:38 +02:00
|
|
|
<!-- Form container -->
|
|
|
|
<div id="top">
|
|
|
|
<!-- Menu buttons -->
|
2016-01-24 09:05:53 +01:00
|
|
|
<div class="lmmenu navbar navbar-default" ng-class="{'hidden-xs':!showM}">
|
2015-05-14 08:44:38 +02:00
|
|
|
<div class="navbar-collapse" ng-class="{'collapse':!showM}" id="formmenu">
|
|
|
|
<ul class="nav navbar-nav">
|
2016-01-24 09:36:27 +01:00
|
|
|
<li><a class="link" ng-click="home()"><i class="glyphicon glyphicon-home"></i></a></li>
|
|
|
|
<li>
|
|
|
|
<a id="save" class="link" ng-click="save()" tabIndex="-1">
|
|
|
|
<i class="glyphicon glyphicon-cloud-upload"></i>
|
2016-02-08 15:08:26 +01:00
|
|
|
{{translate('save')}}
|
2016-01-24 09:36:27 +01:00
|
|
|
</a>
|
|
|
|
</li>
|
2018-11-26 23:05:05 +01:00
|
|
|
<li >
|
2018-11-28 21:17:05 +01:00
|
|
|
<input id="forcesave" type="checkbox" ng-model="forceSave" uib-tooltip="{{translate('forceSave')}}" tooltip-placement="right" ng-show="confirmNeeded||currentCfg.next" role="checkbox" aria-label="Force save">
|
2018-11-26 23:05:05 +01:00
|
|
|
</li>
|
2016-01-24 09:05:53 +01:00
|
|
|
<li uib-dropdown>
|
|
|
|
<a id="navmenu" name="menu" uib-dropdown-toggle data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><i class="glyphicon glyphicon-cog"></i> {{translate('browse')}} <span class="caret"></span></a>
|
|
|
|
<ul uib-dropdown-menu aria-labelled-by="navmenu">
|
2016-01-20 09:54:51 +01:00
|
|
|
<li ng-class="{'disabled':!currentCfg.prev}"><a class="link" ng-click="currentCfg.prev && getCfg(currentCfg.prev)" title="Configuration {{currentCfg.prev}}"><i class="glyphicon glyphicon-arrow-left"></i> {{translate('previous')}}</a></li>
|
|
|
|
<li ng-class="{'disabled':!currentCfg.next}"><a class="link" ng-click="currentCfg.next && getCfg(currentCfg.next)" title="Configuration {{currentCfg.next}}"><i class="glyphicon glyphicon-arrow-right"></i> {{translate('next')}}</a></a></li>
|
|
|
|
<li><a class="link" ng-click="getCfg('latest')" title="Latest configuration"><i class="glyphicon glyphicon-refresh"></i> {{translate('latest')}}</a></li>
|
|
|
|
</ul>
|
|
|
|
</li>
|
2016-01-20 17:48:05 +01:00
|
|
|
<li><a class="link hidden-xs" ng-click="setShowHelp()"><i class="glyphicon" ng-class="{'glyphicon-eye-close': showH,'glyphicon-eye-open': !showH}" ></i> {{ translate((showH ? 'hideHelp' : 'showHelp')) }}</a></li>
|
2016-02-16 07:21:40 +01:00
|
|
|
<li ng-repeat="button in menu()" ng-include="'menubutton.html'"></li>
|
2016-01-24 09:05:53 +01:00
|
|
|
<li uib-dropdown class="visible-xs">
|
|
|
|
<a id="langmenu" name="menu" uib-dropdown-toggle data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{translate('menu')}} <span class="caret"></span></a>
|
2017-03-24 16:03:40 +01:00
|
|
|
<ul uib-dropdown-menu aria-labelled-by="langmenu" role="grid">
|
|
|
|
<li ng-repeat="link in links"><a href="{{link.target}}" role="row"><i ng-if="link.icon" class="glyphicon glyphicon-{{link.icon}}"></i> {{translate(link.title)}}</a></li>
|
|
|
|
<li ng-repeat="menulink in menulinks"><a href="{{menulink.target}}" role="row"><i ng-if="menulink.icon" class="glyphicon glyphicon-{{menulink.icon}}"></i> {{translate(menulink.title)}}</a></li>
|
2016-01-05 16:11:36 +01:00
|
|
|
<li ng-include="'languages.html'"></li>
|
2020-03-17 21:13:43 +01:00
|
|
|
<TMPL_IF NAME="INSTANCE_NAME">
|
|
|
|
<li><a href="https://lemonldap-ng.org"><TMPL_VAR NAME="INSTANCE_NAME"></a></li>
|
|
|
|
</TMPL_IF>
|
2016-01-05 16:11:36 +01:00
|
|
|
</ul>
|
|
|
|
</li>
|
2015-05-14 08:44:38 +02:00
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
</div>
|
2016-02-16 07:21:40 +01:00
|
|
|
<form class="form-group slide-animate-container" ng-include="formPrefix+form+'.html'" scope="$scope" />
|
2015-05-14 08:44:38 +02:00
|
|
|
</div>
|
|
|
|
<!-- Help container -->
|
2016-02-08 16:44:39 +01:00
|
|
|
<div id="bottom" ng-if="showH" class="hidden-xs">
|
2015-07-23 15:09:17 +02:00
|
|
|
<div class="panel panel-default">
|
2015-12-30 19:32:06 +01:00
|
|
|
<div class="panel-body">
|
2015-12-27 10:14:44 +01:00
|
|
|
<iframe id="helpframe" width="100%" height="100%" ng-src="{{translate('/doc/')+'pages/documentation/current/'+helpUrl}}" frameborder="0"></iframe>
|
2015-07-23 15:09:17 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
2015-05-14 08:44:38 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<!-- HTML recursive templates (used in `ng-repeat... ng-include="'template.html'") -->
|
|
|
|
<!-- Tree nested node template -->
|
|
|
|
<script type="text/ng-template" id="nodes_renderer.html">
|
2015-07-13 14:31:54 +02:00
|
|
|
<div ui-tree-handle class="tree-node panel-info" ng-class="{'bg-info':this.$modelValue===currentNode,'tree-node-default':this.$modelValue!==currentNode}">
|
2015-05-14 08:44:38 +02:00
|
|
|
<!-- Glyph icons -->
|
|
|
|
<span ng-switch="node.nodes||node.nodes_cond?1:((node._nodes&&node._nodes.length>0)||(node._nodes_cond&&node._nodes_cond.length>0)?3:(node.cnodes&&node.cnodes.length>0?2:0))">
|
|
|
|
<!-- Undownloaded nodes (hash data)-->
|
2015-07-13 12:35:06 +02:00
|
|
|
<a class="btn btn-sm" id="a-{{node.id}}" ng-switch-when="2" ng-click="openCnode(this)">
|
2015-05-14 08:44:38 +02:00
|
|
|
<span class="glyphicon glyphicon-chevron-right"></span>
|
|
|
|
</a>
|
|
|
|
<!-- Javascript nodes not yet bind to DOM -->
|
2015-07-13 12:35:06 +02:00
|
|
|
<a class="btn btn-sm" id="a-{{node.id}}" ng-switch-when="3" ng-click="stoggle(this)">
|
2015-05-14 08:44:38 +02:00
|
|
|
<span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed, 'glyphicon-chevron-down': !collapsed}"></span>
|
|
|
|
</a>
|
|
|
|
<!-- Nodes already loaded and binded -->
|
2015-07-13 12:35:06 +02:00
|
|
|
<a class="btn btn-sm" id="a-{{node.id}}" ng-switch-when="1" ng-click="toggle(this)">
|
2015-05-14 08:44:38 +02:00
|
|
|
<span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed, 'glyphicon-chevron-down': !collapsed}"></span>
|
|
|
|
</a>
|
|
|
|
<!-- Leaf -->
|
2015-07-13 12:35:06 +02:00
|
|
|
<a class="btn btn-sm" ng-switch-default ng-click="displayForm(this)">
|
2015-05-14 08:44:38 +02:00
|
|
|
<span class="glyphicon glyphicon-pencil"></span>
|
|
|
|
</a>
|
|
|
|
</span>
|
|
|
|
<!-- Node text with/without translation -->
|
2015-07-13 12:35:06 +02:00
|
|
|
<span id="t-{{node.id}}" ng-if="keyWritable(this)" ng-click="displayForm(this)">{{node.title}}</span>
|
2015-05-14 08:44:38 +02:00
|
|
|
<span id="t-{{node.id}}" ng-if="!keyWritable(this)" ng-click="displayForm(this)" trspan="{{node.title}}" />
|
|
|
|
</div>
|
|
|
|
<!-- Subnodes -->
|
2015-07-13 12:35:06 +02:00
|
|
|
<ol ui-tree-nodes="btn btn-sm" ng-model="node.nodes" ng-class="{hidden: collapsed}">
|
2015-05-14 08:44:38 +02:00
|
|
|
<li ng-repeat="node in node.nodes track by node.id" ui-tree-node ng-include="'nodes_renderer.html'" collapsed="true"></li>
|
|
|
|
</ol>
|
|
|
|
<!-- Filtered subnodes (authParams mechanism) -->
|
2015-07-13 12:35:06 +02:00
|
|
|
<ol ui-tree-nodes="btn btn-sm" ng-model="node.nodes_cond" ng-class="{hidden: collapsed}">
|
2015-05-14 08:44:38 +02:00
|
|
|
<li ng-repeat="(name,node) in node.nodes_cond track by node.id" ng-if="node.show" ui-tree-node ng-include="'nodes_renderer.html'" collapsed="true"></li>
|
|
|
|
</ol>
|
|
|
|
</script>
|
|
|
|
|
2016-01-16 14:08:53 +01:00
|
|
|
<!-- Prompt -->
|
|
|
|
<script type="text/ng-template" id="prompt.html">
|
2017-03-24 16:03:40 +01:00
|
|
|
<div role="alertdialog" aria-labelledby="ptitle" aria-describedby="ptitle">
|
2016-01-16 14:08:53 +01:00
|
|
|
<div class="modal-header">
|
2017-03-24 16:03:40 +01:00
|
|
|
<h3 id="ptitle" class="modal-title" trspan="{{elem('message').title}}" />
|
2016-01-16 14:08:53 +01:00
|
|
|
</div>
|
|
|
|
<div class="modal-body">
|
2017-01-18 00:17:23 +01:00
|
|
|
<div class="input-group maxw">
|
2017-03-24 16:03:40 +01:00
|
|
|
<label class="input-group-addon" id="promptlabel" for="promptinput" trspan="{{elem('message').field}}"/>
|
|
|
|
<input id="promptinput" class="form-control" ng-model="result" aria-describedby="promptlabel"/>
|
2016-01-16 14:08:53 +01:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="modal-footer">
|
2017-03-24 16:03:40 +01:00
|
|
|
<button class="btn btn-primary" id="promptok" ng-click="ok()" trspan="ok" role="button"></button>
|
|
|
|
<button class="btn btn-warning" ng-click="cancel()" trspan="cancel" role="button"></button>
|
2016-01-16 14:08:53 +01:00
|
|
|
</div>
|
2017-03-24 16:03:40 +01:00
|
|
|
</div>
|
2016-01-16 14:08:53 +01:00
|
|
|
</script>
|
|
|
|
|
2015-05-14 08:44:38 +02:00
|
|
|
<!-- Message display -->
|
|
|
|
<script type="text/ng-template" id="message.html">
|
2017-03-24 16:03:40 +01:00
|
|
|
<div role="alertdialog" aria-labelledby="mtitle" aria-describedby="mbody">
|
2015-05-14 08:44:38 +02:00
|
|
|
<div class="modal-header">
|
2017-03-24 16:03:40 +01:00
|
|
|
<h3 id="mtitle" class="modal-title" trspan="{{elem('message').title}}" />
|
2015-05-14 08:44:38 +02:00
|
|
|
</div>
|
2017-03-24 16:03:40 +01:00
|
|
|
<div id="mbody" class="modal-body">
|
2015-05-14 08:44:38 +02:00
|
|
|
<div class="modal-p">{{translateP(elem('message').message)}}</div>
|
|
|
|
<ul class="main-modal-ul" ng-model="elem('message').items">
|
|
|
|
<li ng-repeat="item in elem('message').items" ng-include="'messageitem.html'"/>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
<div class="modal-footer">
|
2017-03-24 16:03:40 +01:00
|
|
|
<button class="btn btn-primary" id="messageok" ng-click="ok()" trspan="ok" role="button"></button>
|
|
|
|
<button class="btn btn-warning" ng-click="cancel()" ng-if="elem('message').displayCancel" trspan="cancel" role="button"></button>
|
2015-05-14 08:44:38 +02:00
|
|
|
</div>
|
2017-03-24 16:03:40 +01:00
|
|
|
</div>
|
2015-05-14 08:44:38 +02:00
|
|
|
</script>
|
|
|
|
|
|
|
|
<script type="text/ng-template" id="messageitem.html">
|
|
|
|
<div class="modal-p">{{translateP(item.message)}}</div>
|
|
|
|
<ul class="modal-ul" ng-model="item.items">
|
|
|
|
<li ng-repeat="item in item.items" ng-include="'messageitem.html'"/>
|
|
|
|
</ul>
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<!-- Password question -->
|
|
|
|
<script type="text/ng-template" id="password.html">
|
2017-03-24 16:03:40 +01:00
|
|
|
<div role="alertdialog" aria-labelledby="pwtitle" aria-describedby="pwtitle">
|
2015-05-14 08:44:38 +02:00
|
|
|
<div class="modal-header">
|
2017-03-24 16:03:40 +01:00
|
|
|
<h3 id="pwtitle" class="modal-title" trspan="enterPassword" />
|
2015-05-14 08:44:38 +02:00
|
|
|
</div>
|
|
|
|
<div class="modal-body">
|
2017-01-18 00:17:23 +01:00
|
|
|
<div class="input-group maxw">
|
2017-03-24 16:03:40 +01:00
|
|
|
<label class="input-group-addon" id="mlabel" for="mdPwd" trspan="password"/>
|
|
|
|
<input id="mdPwd" class="form-control" ng-model="result" aria-describedby="mlabel"/>
|
2015-05-14 08:44:38 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="modal-footer">
|
2017-03-24 16:03:40 +01:00
|
|
|
<button class="btn btn-primary" id="passwordok" ng-click="ok()" trspan="ok" role="button"></button>
|
|
|
|
<button class="btn btn-warning" ng-click="cancel()" trspan="cancel" role="button"></button>
|
2015-05-14 08:44:38 +02:00
|
|
|
</div>
|
2017-03-24 16:03:40 +01:00
|
|
|
</div>
|
2015-05-14 08:44:38 +02:00
|
|
|
</script>
|
|
|
|
|
|
|
|
<!-- Save confirm -->
|
|
|
|
<script type="text/ng-template" id="save.html">
|
2017-03-24 16:03:40 +01:00
|
|
|
<div role="alertdialog" aria-labelledby="stitle" aria-describedby="sbody">
|
2015-05-14 08:44:38 +02:00
|
|
|
<div class="modal-header">
|
2017-03-24 16:03:40 +01:00
|
|
|
<h3 id="stitle" class="modal-title" trspan="savingConfirmation" />
|
2015-05-14 08:44:38 +02:00
|
|
|
</div>
|
2017-03-24 16:03:40 +01:00
|
|
|
<div id="sbody" class="modal-body">
|
2017-01-18 00:17:23 +01:00
|
|
|
<div class="input-group maxw">
|
2017-03-24 16:03:40 +01:00
|
|
|
<label id="slabel" class="input-group-addon" for="longtextinput" trspan="cfgLog"/>
|
|
|
|
<textarea id="longtextinput" rows="5" class="form-control" ng-model="result" aria-describedby="slabel" />
|
2015-05-14 08:44:38 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="modal-footer">
|
2017-03-24 16:03:40 +01:00
|
|
|
<button class="btn btn-primary" id="saveok" ng-click="ok()" trspan="ok" role="button"></button>
|
|
|
|
<button class="btn btn-warning" ng-click="cancel()" trspan="cancel" role="button"></button>
|
2015-05-14 08:44:38 +02:00
|
|
|
</div>
|
2017-03-24 16:03:40 +01:00
|
|
|
</div>
|
2015-05-14 08:44:38 +02:00
|
|
|
</script>
|
|
|
|
|
|
|
|
<TMPL_INCLUDE NAME="scripts.tpl">
|
|
|
|
|
2016-01-18 13:13:16 +01:00
|
|
|
<!-- //if:jsminified
|
|
|
|
<script type="text/javascript" src="<TMPL_VAR NAME="STATIC_PREFIX">js/conftree.min.js"></script>
|
|
|
|
<script type="text/javascript" src="<TMPL_VAR NAME="STATIC_PREFIX">js/filterFunctions.min.js"></script>
|
|
|
|
<script type="text/javascript" src="<TMPL_VAR NAME="STATIC_PREFIX">js/manager.min.js"></script>
|
|
|
|
//else -->
|
|
|
|
<script type="text/javascript" src="<TMPL_VAR NAME="STATIC_PREFIX">js/conftree.js"></script>
|
|
|
|
<script type="text/javascript" src="<TMPL_VAR NAME="STATIC_PREFIX">js/filterFunctions.js"></script>
|
|
|
|
<script type="text/javascript" src="<TMPL_VAR NAME="STATIC_PREFIX">js/manager.js"></script>
|
|
|
|
<!-- //endif -->
|
2015-05-14 08:44:38 +02:00
|
|
|
|
|
|
|
<TMPL_INCLUDE NAME="footer.tpl">
|