lemonldap-ng/lemonldap-ng-manager/site/coffee/diff.coffee

227 lines
5.7 KiB
CoffeeScript
Raw Normal View History

2016-03-21 18:52:48 +01:00
###
diff.html script
###
2019-10-01 21:42:46 +02:00
llapp = angular.module 'llngConfDiff', ['ui.tree', 'ui.bootstrap', 'llApp', 'ngCookies'] , ['$rootScopeProvider', ($rootScopeProvider) -> $rootScopeProvider.digestTtl(15)]
2016-03-21 18:52:48 +01:00
llapp.controller 'DiffCtrl', [ '$scope', '$http', '$q', '$translator', '$location', ($scope, $http, $q, $translator, $location) ->
$scope.links = links
$scope.menulinks = menulinks
$scope.staticPrefix = staticPrefix
$scope.scriptname = scriptname
#$scope.formPrefix = formPrefix
$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
# Import translations functions
$scope.translateTitle = (node) ->
return $translator.translateField node, 'title'
$scope.translateP = $translator.translateP
$scope.translate = $translator.translate
2016-03-22 06:56:42 +01:00
$scope.toggle = (scope) ->
scope.toggle()
2016-03-22 22:48:17 +01:00
$scope.stoggle = (scope,node) ->
$scope.currentNode = node
scope.toggle()
2016-03-21 18:52:48 +01:00
# Handle menu items
$scope.menuClick = (button) ->
if button.popup
window.open button.popup
else
button.action = button.title unless button.action
switch typeof button.action
when 'function'
button.action $scope.currentNode, $scope
when 'string'
$scope[button.action]()
else
console.log typeof button.action
$scope.showM = false
# Function to change interface language
$scope.getLanguage = (lang) ->
$scope.lang = lang
init()
2016-03-21 18:52:48 +01:00
$scope.showM = false
# function `getCfg(b,n)`:
# Download configuration metadatas
#
#@param b local conf (0 or 1)
#@param n cfgNumber
getCfg = (b,n) ->
d = $q.defer()
if not $scope.cfg[b]? or $scope.cfg[b] != n
$http.get("#{confPrefix}#{n}").then (response) ->
2016-03-22 22:48:17 +01:00
if response and 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"
d.resolve 'OK'
else
d.reject response
2016-03-21 18:52:48 +01:00
, (response) ->
console.log response
d.reject 'NOK'
else
d.resolve()
2016-03-21 18:52:50 +01:00
return d.promise
2016-03-21 18:52:48 +01:00
# Intialization function
# Simply set $scope.waiting to false during $translator and tree root
# initialization
init = ->
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 (response) ->
reverseTree = response.data
console.log "Structure loaded"
]
.then ->
d = $q.defer()
$http.get("#{scriptname}diff/#{$scope.cfg[0].cfgNum}/#{$scope.cfg[1].cfgNum}").then (response) ->
data = []
data = readDiff(response.data[0],response.data[1])
$scope.data = buildTree(data)
$scope.message = ''
$scope.waiting = false
, (response) ->
$scope.message = "#{$scope.translate('error')} : #{response.statusLine}"
# Colorized link
$scope.activeModule = "conf"
$scope.myStyle = {color: '#ffb84d'}
$scope.bannerStyle = {'background-color': "#{window.bannerColor}"}
2016-03-21 18:52:48 +01:00
2016-03-22 22:48:14 +01:00
readDiff = (c1,c2,tr=true) ->
2016-03-22 06:56:42 +01:00
res = []
2016-03-21 18:52:53 +01:00
for k,v of c1
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
unless k.match /^cfg(?:Num|Log|Author(?:IP)?|Date)$/
if v? and 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,v of c2
unless (k.match /^cfg(?:Num|Log|Author(?:IP)?|Date)$/) or c1[k]?
2016-03-22 22:48:14 +01:00
if tr
tmp =
title: $scope.translate(k)
id: k
else
tmp = title: k
if v? and 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 = (c,s) ->
res = []
for k,v of c
2016-03-22 22:48:14 +01:00
tmp = title:k
2016-03-22 06:56:42 +01:00
if typeof v == 'object'
if v.constructor == 'array'
tmp["#{s}value"] = v
else
tmp["#{s}nodes"] = toNodes c[k], s
else
tmp["#{s}value"] = v
res.push tmp
return res
2016-03-21 18:52:53 +01:00
2016-03-22 21:48:32 +01:00
reverseTree = []
buildTree = (data) ->
return data unless reverseTree?
res = []
for elem in data
offset = res
2016-03-22 22:48:14 +01:00
path = if reverseTree[elem.id]? then reverseTree[elem.id].split '/' else ''
2016-03-22 21:48:32 +01:00
for node in path
if node.length > 0
if offset.length
2017-03-15 22:04:04 +01:00
found = -1
for n,i in offset
if n.id == node
#offset = n.nodes
found = i
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 = ->
$location.path("/#{$scope.cfg[0].cfgNum}/#{$scope.cfg[1].cfgNum}")
2016-03-21 18:52:48 +01:00
pathEvent = (event, next, current) ->
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-21 18:52:48 +01:00
$q.all [
2016-03-21 18:52:50 +01:00
$translator.init $scope.lang
2016-03-22 21:48:32 +01:00
$http.get("#{staticPrefix}reverseTree.json").then (response) ->
reverseTree = response.data
console.log "Structure loaded"
2016-03-21 18:52:48 +01:00
getCfg 0, n[1]
getCfg 1, n[2] if n[2]?
]
2016-03-22 22:48:17 +01:00
.then ->
2016-03-21 18:52:48 +01:00
if n[2]?
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
getCfg 0, $scope.cfg[1].prev
2016-03-21 18:52:48 +01:00
.then ->
init()
else
2016-03-22 21:48:32 +01:00
$scope.data = []
2016-03-21 18:52:50 +01:00
$scope.waiting = false
2016-03-22 22:48:17 +01:00
, ->
$scope.message = $scope.translate('error')
$scope.waiting = false
2016-03-21 18:52:48 +01:00
true
$scope.$on '$locationChangeSuccess', pathEvent
]