Lemonldap-NG-Manager
view release on metacpan or search on metacpan
site/js-src/manager.js view on Meta::CPAN
/*
LemonLDAP::NG Manager client
This is the main app file. Other are:
- struct.json and js/confTree.js that contains the full tree
- translate.json that contains the keywords translation
This file contains:
- the AngularJS controller
*/
var llapp;
llapp = angular.module('llngManager', ['ui.tree', 'ui.bootstrap', 'llApp', 'ngCookies']);
/*
Main AngularJS controller
*/
llapp.controller('TreeCtrl', [
'$scope',
'$http',
'$location',
'$q',
'$uibModal',
'$translator',
'$cookies',
'$htmlParams',
'$timeout',
function($scope,
$http,
$location,
$q,
$uibModal,
$translator,
$cookies,
$htmlParams,
$timeout) {
var _checkSaveResponse,
_download,
_getAll,
_stoggle,
c,
idinc,
pathEvent,
readError,
setDefault,
setHelp;
$scope.links = window.links;
$scope.menu = $htmlParams.menu;
$scope.menulinks = window.menulinks;
$scope.staticPrefix = window.staticPrefix;
$scope.formPrefix = window.formPrefix;
$scope.availableLanguages = window.availableLanguages;
$scope.waiting = true;
$scope.showM = false;
$scope.showT = false;
$scope.form = 'home';
$scope.currentCfg = {};
$scope.clipboardAvailable = Boolean(navigator.clipboard);
$scope.confPrefix = window.confPrefix;
$scope.message = {};
$scope.result = '';
// Import translations functions
$scope.translateTitle = function(node) {
return $translator.translateField(node,
'title');
};
$scope.translateP = $translator.translateP;
$scope.translate = $translator.translate;
// HELP DISPLAY
$scope.helpUrl = 'start.html#configuration';
$scope.setShowHelp = function(val) {
var d;
if (val == null) {
val = !$scope.showH;
}
$scope.showH = val;
d = new Date(Date.now());
d.setFullYear(d.getFullYear() + 1);
return $cookies.put('showhelp',
(val ? 'true' : 'false'), {
"expires": d
});
};
$scope.showH = $cookies.get('showhelp') === 'false' ? false : true;
if ($scope.showH == null) {
$scope.setShowHelp(true);
}
// INTERCEPT AJAX ERRORS
readError = function(response) {
var e,
j;
e = response.status;
j = response.statusLine;
$scope.waiting = false;
if (e === 403) {
$scope.message = {
title: 'forbidden',
message: '',
items: []
};
} else if (e === 401) {
console.debug('Authentication needed');
$scope.message = {
title: 'authenticationNeeded',
message: '__waitOrF5__',
items: []
};
} else if (e === 400) {
$scope.message = {
title: 'badRequest',
message: j,
items: []
};
} else if (e > 0) {
$scope.message = {
title: 'badRequest',
message: j,
items: []
site/js-src/manager.js view on Meta::CPAN
var a,
data,
len,
o;
data = response.data;
// Manage datas errors
if (!data) {
d.reject('Empty response from server');
} else if (data.error) {
if (data.error.match(/setDefault$/)) {
if (node['default']) {
node.nodes = node['default'].slice(0);
} else {
node.nodes = [];
}
delete node.cnodes;
d.resolve('Set data to default value');
} else {
d.reject(`Server return an error: ${data.error}`);
}
} else {
// Store datas
delete node.cnodes;
if (!node.type) {
node.type = 'keyTextContainer';
}
node.nodes = [];
// TODO: try/catch
for (o = 0, len = data.length; o < len; o++) {
a = data[o];
if (a.template) {
a._nodes = templates(a.template,
a.title);
}
node.nodes.push(a);
if (a.type.match(/^rule$/)) {
console.debug("Parse rule AuthnLevel as integer");
if (a.level && typeof a.level === 'string') {
a.level = parseInt(a.level,
10);
}
}
}
d.resolve('OK');
}
return $scope.waiting = false;
},
function(response) {
readError(response);
return d.reject('');
});
return d.promise;
};
$scope.openCnode = function(scope) {
return $scope.download(scope).then(function() {
return scope.toggle();
});
};
$scope.copyPath = function() {
var text = $scope.breadCrumb.join(" » ");
navigator.clipboard.writeText(text).then(function () {
$scope.$apply(function () {
$scope.copySuccess = true;
$timeout(function() {
$scope.copySuccess = false;
}, 400);
});
});
};
setHelp = function(scope) {
while (!scope.$modelValue.help && scope.$parentNodeScope) {
scope = scope.$parentNodeScope;
}
return $scope.helpUrl = scope.$modelValue.help || 'start.html#configuration';
};
// Form management
// `currentNode` contains the last select node
// method `diplayForm()`:
// - set the `form` property to the name of the form to download
// (`text` by default or `home` for node without `type` property)
// - launch getKeys to set `node.data`
// - hide tree when in XS size
$scope.getTrPath = function(scope) {
var path = [];
var trpath = [];
var current = scope;
var safetycount = 0;
while (current && current.$modelValue && safetycount < 100) {
safetycount = safetycount + 1;
if (current.$modelValue.title && current.$modelValue.title != path[0]) {
trpath.unshift(scope.translate(current.$modelValue.title));
path.unshift(current.$modelValue.title);
}
current = current.$parent;
}
return trpath;
};
$scope.displayForm = function(scope) {
var f,
len,
n,
node,
o,
ref;
node = scope.$modelValue;
if (node.cnodes) {
$scope.download(scope);
}
if (node._nodes) {
$scope.stoggle(scope);
}
$scope.currentNode = node;
$scope.currentScope = scope;
f = node.type ? node.type : 'text';
if (node.nodes || node._nodes || node.cnodes) {
$scope.form = f !== 'text' ? f : 'mini';
( run in 0.672 second using v1.01-cache-2.11-cpan-84e82930d8c )