// Generated by CoffeeScript 1.12.8 /* * LemonLDAP::NG Notifications Explorer client */ (function() { var llapp, max, menu, overScheme, scheme; max = 25; scheme = [ function(v) { return "groupBy=substr(uid,1)"; }, function(v) { return "uid=" + v + "*&groupBy=uid"; }, function(v) { return "uid=" + v; } ]; overScheme = function(v, level, over) { console.log('overScheme => level', level, 'over', over); if (level === 1 && v.length > over) { return "uid=" + v + "*&groupBy=substr(uid," + (level + over + 1) + ")"; } else { return null; } }; menu = { actives: [ { title: 'markAsDone', icon: 'check' } ], done: [ { title: 'deleteNotification', icon: 'trash' } ], "new": [ { title: 'save', icon: 'save' } ], home: [] }; llapp = angular.module('llngNotificationsExplorer', ['ui.tree', 'ui.bootstrap', 'llApp']); llapp.controller('NotificationsExplorerCtrl', [ '$scope', '$translator', '$location', '$q', '$http', '$uibModal', function($scope, $translator, $location, $q, $http, $uibModal) { var autoId, c, dateToString; $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.showT = true; $scope.showForm = false; $scope.data = []; $scope.form = {}; $scope.formPost = {}; $scope.currentScope = null; $scope.currentNotification = null; $scope.menu = menu; $scope.translateP = $translator.translateP; $scope.translate = $translator.translate; $scope.translateTitle = function(node) { return $translator.translateField(node, 'title'); }; $scope.menuClick = function(button) { if (button.popup) { window.open(button.popup); } else { 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.markAsDone = function() { $scope.waiting = true; return $http.put(scriptname + "notifications/" + $scope.type + "/" + $scope.currentNotification.uid + "_" + $scope.currentNotification.reference, { done: 1 }).then(function(response) { $scope.currentNotification = null; $scope.currentScope.remove(); $scope.message = { title: 'notificationDeleted' }; $scope.showModal("alert.html"); $scope.waiting = false; return $scope.init(); }, function(response) { $scope.message = { title: 'notificationNotDeleted', message: response.statusText }; $scope.showModal("alert.html"); $scope.waiting = false; return $scope.init(); }); }; $scope.deleteNotification = function() { $scope.waiting = true; return $http['delete'](scriptname + "notifications/" + $scope.type + "/" + $scope.currentNotification.uid + "_" + $scope.currentNotification.reference + "_" + $scope.currentNotification.done).then(function(response) { $scope.currentNotification = null; $scope.currentScope.remove(); $scope.message = { title: 'notificationPurged' }; $scope.showModal("alert.html"); $scope.waiting = false; return $scope.init(); }, function(response) { $scope.message = { title: 'notificationNotPurged', message: response.statusText }; $scope.showModal("alert.html"); $scope.waiting = false; return $scope.init(); }); }; $scope.stoggle = function(scope) { var node; node = scope.$modelValue; if (node.nodes.length === 0) { $scope.updateTree(node.value, node.nodes, node.level, node.over, node.query, node.count); } return scope.toggle(); }; $scope.notifDate = function(s) { var d; if (s != null) { if (s.match(/(\d{4})-(\d{2})-(\d{2})/)) { s = s.substr(0, 4) + s.substr(5, 2) + s.substr(8, 2); } d = new Date(s.substr(0, 4), s.substr(4, 2) - 1, s.substr(6, 2)); return d.toLocaleDateString(); } return ''; }; $scope.getLanguage = function(lang) { $scope.lang = lang; if ($scope.form.date) { $scope.form.date = new Date(); } else { $scope.form = 'white'; } $scope.init(); return $scope.showM = false; }; $scope.$on('$locationChangeSuccess', function(event, next, current) { var n; n = next.match(/#!?\/(\w+)/); $scope.type = n != null ? n[1] : 'actives'; if ($scope.type === 'new') { return $scope.displayCreateForm(); } else { $scope.showForm = false; return $scope.init(); } }); autoId = 0; $scope.updateTree = function(value, node, level, over, currentQuery, count) { var query, tmp; $scope.waiting = true; query = scheme[level](value, currentQuery); if (count > max) { if (tmp = overScheme(value, level, over)) { over++; query = tmp; level = level - 1; } else { over = 0; } } else { over = 0; } if ($scope.type === 'done' || $scope.type === 'actives') { $http.get(scriptname + "notifications/" + $scope.type + "?" + query).then(function(response) { var data, i, len, n, ref; data = response.data; if (data.result) { ref = data.values; for (i = 0, len = ref.length; i < len; i++) { n = ref[i]; autoId++; n.id = "node" + autoId; if (level < scheme.length - 1) { n.nodes = []; n.level = level + 1; n.query = query; n.over = over; } node.push(n); } if (value === '') { $scope.total = data.total; } } return $scope.waiting = false; }, function(resp) { return $scope.waiting = false; }); } console.log("Selection", $scope.type); $scope.activesStyle = { color: '#777' }; $scope.doneStyle = { color: '#777' }; $scope.newStyle = { color: '#777' }; if ($scope.type === 'actives') { $scope.activesStyle = { color: '#333' }; } if ($scope.type === 'done') { return $scope.doneStyle = { color: '#333' }; } }; $scope.displayNotification = function(scope) { var node, notificationId; $scope.waiting = true; $scope.currentScope = scope; node = scope.$modelValue; notificationId = node.notification.replace(/#/g, '_'); if ($scope.type === 'actives') { notificationId = node.uid + "_" + node.reference; } $http.get(scriptname + "notifications/" + $scope.type + "/" + notificationId).then(function(response) { var e, notif; $scope.currentNotification = { uid: node.uid, reference: node.reference, condition: node.condition }; if ($scope.type === 'done') { $scope.currentNotification.done = response.data.done; } try { console.log("Try to parse a JSON formated notification..."); notif = JSON.parse(response.data.notifications); $scope.currentNotification.date = $scope.notifDate(notif.date); $scope.currentNotification.text = notif.text; $scope.currentNotification.title = notif.title; $scope.currentNotification.subtitle = notif.subtitle; $scope.currentNotification.check = notif.check; } catch (error) { e = error; console.log("Unable to parse JSON"); $scope.currentNotification.notifications = response.data.notifications; } return $scope.waiting = false; }, function(resp) { return $scope.waiting = false; }); return $scope.showT = false; }; $scope.showModal = function(tpl, init) { var d, modalInstance; modalInstance = $uibModal.open({ templateUrl: tpl, controller: 'ModalInstanceCtrl', size: 'lg', resolve: { elem: function() { return function(s) { return $scope[s]; }; }, set: function() { return function(f, s) { return $scope[f] = s; }; }, init: function() { return init; } } }); d = $q.defer(); return modalInstance.result.then(function(msgok) { $scope.message = { title: '', message: '' }; return d.resolve(msgok); }, function(msgnok) { $scope.message = { title: '', message: '' }; return d.reject(msgnok); }); }; $scope.save = function() { if ($scope.form.uid && $scope.form.reference && $scope.form.xml) { $scope.waiting = true; $scope.formPost.uid = $scope.form.uid; if ($scope.form.date) { $scope.formPost.date = dateToString($scope.form.date); } $scope.formPost.reference = $scope.form.reference; $scope.formPost.condition = $scope.form.condition; $scope.formPost.xml = $scope.form.xml; $http.post('notifications/actives', $scope.formPost).then(function(response) { var data; data = response.data; $scope.form = {}; if (data.result === 1) { $scope.message = { title: 'notificationCreated' }; } else { $scope.message = { title: 'notificationNotCreated', message: data.error }; } $scope.showModal("alert.html"); $scope.waiting = false; return $scope.form.date = new Date(); }, function(response) { $scope.message = { title: 'notificationNotCreated', message: response.statusText }; $scope.showModal("alert.html"); $scope.waiting = false; return $scope.form.date = new Date(); }); } else { $scope.message = { title: 'incompleteForm' }; $scope.showModal("alert.html"); } return $scope.form.date = new Date(); }; $scope.init = function() { $scope.waiting = true; $scope.showM = false; $scope.showT = false; $scope.data = []; $scope.currentScope = null; $scope.currentNotification = null; $q.all([$translator.init($scope.lang), $scope.updateTree('', $scope.data, 0, 0)]).then(function() { return $scope.waiting = false; }, function(resp) { return $scope.waiting = false; }); $scope.activeModule = "notifications"; return $scope.myStyle = { color: '#ffb84d' }; }; $scope.displayCreateForm = function() { $scope.activesStyle = { color: '#777' }; $scope.doneStyle = { color: '#777' }; $scope.newStyle = { color: '#333' }; $scope.waiting = true; return $translator.init($scope.lang).then(function() { $scope.currentNotification = null; $scope.showForm = true; $scope.data = []; $scope.waiting = false; return $scope.form.date = new Date(); }); }; c = $location.path().match(/^\/(\w+)/); $scope.type = c ? c[1] : 'actives'; $scope.popupopen = function() { return $scope.popup.opened = true; }; $scope.dateOptions = { startingDay: 1, minDate: new Date() }; $scope.popup = { opened: false }; return dateToString = function(dt) { var day, month, year; year = dt.getFullYear(); month = dt.getMonth() + 1; if (month < 10) { month = "0" + month; } day = dt.getDate(); if (day < 10) { day = "0" + day; } return year + "-" + month + "-" + day; }; } ]); }).call(this);