lemonldap-ng/lemonldap-ng-manager/site/htdocs/static/js/diff.js

289 lines
8.8 KiB
JavaScript
Raw Normal View History

// Generated by CoffeeScript 1.12.7
2016-03-21 18:52:48 +01:00
/*
diff.html script
*/
(function() {
var llapp;
2019-10-01 21:42:46 +02:00
llapp = angular.module('llngConfDiff', ['ui.tree', 'ui.bootstrap', 'llApp', 'ngCookies'], [
'$rootScopeProvider', function($rootScopeProvider) {
return $rootScopeProvider.digestTtl(15);
}
]);
2016-03-21 18:52:48 +01:00
llapp.controller('DiffCtrl', [
'$scope', '$http', '$q', '$translator', '$location', function($scope, $http, $q, $translator, $location) {
2016-03-22 21:48:32 +01:00
var buildTree, getCfg, init, pathEvent, readDiff, reverseTree, toNodes;
2016-03-21 18:52:48 +01:00
$scope.links = links;
$scope.menulinks = menulinks;
$scope.staticPrefix = staticPrefix;
$scope.scriptname = scriptname;
$scope.availableLanguages = availableLanguages;
$scope.waiting = true;
$scope.showM = false;
$scope.cfg = [];
2016-03-21 18:52:53 +01:00
$scope.data = {};
2016-03-22 22:48:17 +01:00
$scope.currentNode = null;
2016-03-21 18:52:48 +01:00
$scope.translateTitle = function(node) {
return $translator.translateField(node, 'title');
};
$scope.translateP = $translator.translateP;
$scope.translate = $translator.translate;
2016-03-22 06:56:42 +01:00
$scope.toggle = function(scope) {
return scope.toggle();
};
2016-03-22 22:48:17 +01:00
$scope.stoggle = function(scope, node) {
$scope.currentNode = node;
return scope.toggle();
};
2016-03-21 18:52:48 +01:00
$scope.menuClick = function(button) {
if (button.popup) {
window.open(button.popup);
} else {
if (!button.action) {
button.action = button.title;
}
switch (typeof button.action) {
case 'function':
button.action($scope.currentNode, $scope);
break;
case 'string':
$scope[button.action]();
break;
default:
console.log(typeof button.action);
}
}
return $scope.showM = false;
};
$scope.getLanguage = function(lang) {
$scope.lang = lang;
init();
2016-03-21 18:52:48 +01:00
return $scope.showM = false;
};
getCfg = function(b, n) {
var d;
d = $q.defer();
if (($scope.cfg[b] == null) || $scope.cfg[b] !== n) {
$http.get("" + confPrefix + n).then(function(response) {
var date;
2016-03-22 22:48:17 +01:00
if (response && response.data) {
$scope.cfg[b] = response.data;
date = new Date(response.data.cfgDate * 1000);
$scope.cfg[b].date = date.toLocaleString();
console.log("Metadatas of cfg " + n + " loaded");
return d.resolve('OK');
} else {
return d.reject(response);
}
2016-03-21 18:52:48 +01:00
}, function(response) {
console.log(response);
return d.reject('NOK');
});
} else {
d.resolve();
}
return d.promise;
};
init = function() {
2016-03-21 18:52:50 +01:00
$scope.message = null;
2016-03-23 06:40:46 +01:00
$scope.currentNode = null;
$q.all([
$translator.init($scope.lang), $http.get(staticPrefix + "reverseTree.json").then(function(response) {
var reverseTree;
reverseTree = response.data;
return console.log("Structure loaded");
})
]).then(function() {
var d;
d = $q.defer();
return $http.get(scriptname + "diff/" + $scope.cfg[0].cfgNum + "/" + $scope.cfg[1].cfgNum).then(function(response) {
var data;
data = [];
data = readDiff(response.data[0], response.data[1]);
$scope.data = buildTree(data);
$scope.message = '';
return $scope.waiting = false;
}, function(response) {
return $scope.message = ($scope.translate('error')) + " : " + response.statusLine;
});
2016-03-21 18:52:48 +01:00
});
$scope.activeModule = "conf";
return $scope.myStyle = {
color: '#ffb84d'
};
2016-03-21 18:52:48 +01:00
};
2016-03-22 22:48:14 +01:00
readDiff = function(c1, c2, tr) {
2016-03-22 06:56:42 +01:00
var k, res, tmp, v;
2016-03-22 22:48:14 +01:00
if (tr == null) {
tr = true;
}
2016-03-22 06:56:42 +01:00
res = [];
2016-03-21 18:52:53 +01:00
for (k in c1) {
v = c1[k];
2016-03-22 22:48:14 +01:00
if (tr) {
tmp = {
title: $scope.translate(k),
id: k
};
} else {
tmp = {
title: k
};
}
2016-03-22 06:56:42 +01:00
if (!k.match(/^cfg(?:Num|Log|Author(?:IP)?|Date)$/)) {
if ((v != null) && typeof v === 'object') {
2016-03-22 06:56:42 +01:00
if (v.constructor === 'array') {
tmp.oldvalue = v;
tmp.newvalue = c2[k];
} else if (typeof c2[k] === 'object') {
2016-03-22 22:48:14 +01:00
tmp.nodes = readDiff(c1[k], c2[k], false);
2016-03-22 06:56:42 +01:00
} else {
tmp.oldnodes = toNodes(v, 'old');
}
} else {
tmp.oldvalue = v;
tmp.newvalue = c2[k];
}
res.push(tmp);
}
}
for (k in c2) {
v = c2[k];
if (!((k.match(/^cfg(?:Num|Log|Author(?:IP)?|Date)$/)) || (c1[k] != null))) {
2016-03-22 22:48:14 +01:00
if (tr) {
tmp = {
title: $scope.translate(k),
id: k
};
} else {
tmp = {
title: k
};
}
if ((v != null) && typeof v === 'object') {
2016-03-22 06:56:42 +01:00
if (v.constructor === 'array') {
tmp.newvalue = v;
} else {
console.log("Iteration");
2016-03-22 06:56:42 +01:00
tmp.newnodes = toNodes(v, 'new');
}
} else {
tmp.newvalue = v;
}
res.push(tmp);
}
}
return res;
};
toNodes = function(c, s) {
var k, res, tmp, v;
res = [];
for (k in c) {
v = c[k];
tmp = {
title: k
};
if (typeof v === 'object') {
if (v.constructor === 'array') {
tmp[s + "value"] = v;
} else {
tmp[s + "nodes"] = toNodes(c[k], s);
}
2016-03-21 18:52:53 +01:00
} else {
2016-03-22 06:56:42 +01:00
tmp[s + "value"] = v;
2016-03-21 18:52:53 +01:00
}
2016-03-22 06:56:42 +01:00
res.push(tmp);
2016-03-21 18:52:53 +01:00
}
2016-03-22 06:56:42 +01:00
return res;
};
2016-03-22 21:48:32 +01:00
reverseTree = [];
buildTree = function(data) {
2017-03-15 22:04:04 +01:00
var elem, found, i, j, l, len, len1, len2, m, n, node, offset, path, res;
2016-03-22 21:48:32 +01:00
if (reverseTree == null) {
return data;
}
res = [];
2017-03-15 22:04:04 +01:00
for (j = 0, len = data.length; j < len; j++) {
elem = data[j];
2016-03-22 21:48:32 +01:00
offset = res;
2016-03-22 22:48:14 +01:00
path = reverseTree[elem.id] != null ? reverseTree[elem.id].split('/') : '';
2017-03-15 22:04:04 +01:00
for (l = 0, len1 = path.length; l < len1; l++) {
node = path[l];
2016-03-22 21:48:32 +01:00
if (node.length > 0) {
if (offset.length) {
2017-03-15 22:04:04 +01:00
found = -1;
for (i = m = 0, len2 = offset.length; m < len2; i = ++m) {
n = offset[i];
if (n.id === node) {
found = i;
2016-03-22 21:48:32 +01:00
}
}
2017-03-15 22:04:04 +01:00
if (found !== -1) {
offset = offset[found].nodes;
} else {
2016-03-22 21:48:32 +01:00
offset.push({
2017-03-15 22:04:04 +01:00
id: node,
2016-03-22 22:48:14 +01:00
title: $scope.translate(node),
2016-03-22 21:48:32 +01:00
nodes: []
});
offset = offset[offset.length - 1].nodes;
}
} else {
offset.push({
2017-03-15 22:04:04 +01:00
id: node,
2016-03-22 22:48:14 +01:00
title: $scope.translate(node),
2016-03-22 21:48:32 +01:00
nodes: []
});
offset = offset[0].nodes;
}
}
}
offset.push(elem);
}
return res;
};
$scope.newDiff = function() {
return $location.path("/" + $scope.cfg[0].cfgNum + "/" + $scope.cfg[1].cfgNum);
};
2016-03-21 18:52:48 +01:00
pathEvent = function(event, next, current) {
var n;
n = next.match(new RegExp('#!?/(latest|[0-9]+)(?:/(latest|[0-9]+))?$'));
2016-03-21 18:52:48 +01:00
if (n === null) {
$location.path('/latest');
} else {
2016-03-21 18:52:50 +01:00
$scope.waiting = true;
2016-03-22 21:48:32 +01:00
$q.all([
$translator.init($scope.lang), $http.get(staticPrefix + "reverseTree.json").then(function(response) {
reverseTree = response.data;
return console.log("Structure loaded");
}), getCfg(0, n[1]), n[2] != null ? getCfg(1, n[2]) : void 0
]).then(function() {
2016-03-21 18:52:48 +01:00
if (n[2] != null) {
return init();
} else {
if ($scope.cfg[0].prev) {
2016-03-21 18:52:52 +01:00
$scope.cfg[1] = $scope.cfg[0];
2016-03-22 21:48:32 +01:00
return getCfg(0, $scope.cfg[1].prev).then(function() {
2016-03-21 18:52:48 +01:00
return init();
});
} else {
2016-03-22 21:48:32 +01:00
$scope.data = [];
2016-03-21 18:52:50 +01:00
return $scope.waiting = false;
2016-03-21 18:52:48 +01:00
}
}
2016-03-22 22:48:17 +01:00
}, function() {
$scope.message = $scope.translate('error');
return $scope.waiting = false;
2016-03-21 18:52:48 +01:00
});
}
return true;
};
return $scope.$on('$locationChangeSuccess', pathEvent);
}
]);
}).call(this);