// Generated by CoffeeScript 1.12.7 /* LemonLDAP::NG base app module This file contains: - 3 AngularJS directives (HTML attributes): * `on-read-file` to get file content * `resizer` to resize HTML div * `trspan` to set translated message in HTML content - a AngularJS factory to handle 401 Ajax responses */ (function() { var llapp; llapp = angular.module('llApp', ['ngAria']); llapp.provider('$translator', function() { var al, c, j, k, langs, langs2, len, len1, nl, nlangs, re, ref, res; res = {}; c = decodeURIComponent(document.cookie); if (c.match(/llnglanguage=(\w+)/)) { res.lang = RegExp.$1; } else if (navigator) { langs = []; langs2 = []; nlangs = [navigator.language]; if (navigator.languages) { nlangs = navigator.languages; } for (j = 0, len = nlangs.length; j < len; j++) { nl = nlangs[j]; console.log('Navigator lang', nl); ref = window.availableLanguages; for (k = 0, len1 = ref.length; k < len1; k++) { al = ref[k]; console.log(' Available lang', al); re = new RegExp('^' + al + '-?'); if (nl.match(re)) { console.log(' Matching lang =', al); langs.push(al); } else if (al.substring(0, 1) === nl.substring(0, 1)) { langs2.push(al); } } } res.lang = langs[0] ? langs[0] : langs2[0] ? langs2[0] : 'en'; } else { res.lang = 'en'; } console.log('Selected lang ->', res.lang); res.deferredTr = []; res.translationFields = {}; res.translate = function(s) { if (res.translationFields[s]) { s = res.translationFields[s]; } return s; }; res.translateField = function(node, field) { return res.translate(node[field]); }; res.translateP = function(s) { if (s && res.translationFields.portal) { s = s.replace(/__(\w+)__/g, function(match, w) { return res.translate(w); }); } return s; }; this.$get = [ '$q', '$http', function($q, $http) { res.last = ''; res.init = function(lang) { var d; if (!lang) { lang = res.lang; } d = new Date(); d.setTime(d.getTime() + 30 * 86400000); document.cookie = "llnglanguage=" + lang + "; expires=" + (d.toUTCString()) + "; path=/"; d = $q.defer(); if (res.last !== lang) { res.last = lang; $http.get(window.staticPrefix + "languages/" + lang + ".json").then(function(response) { var h, l, len2, ref1; res.translationFields = response.data; ref1 = res.deferredTr; for (l = 0, len2 = ref1.length; l < len2; l++) { h = ref1[l]; h.e[h.f](res.translationFields[h.m]); } res.deferredTr = []; return d.resolve("Translation files loaded"); }, function(response) { return d.reject(''); }); } else { d.resolve("No change"); } return d.promise; }; return res; } ]; return this; }); llapp.directive('trspan', [ '$translator', function($translator) { return { restrict: 'A', replace: false, transclude: true, scope: { trspan: "@" }, link: function(scope, elem, attr) { if ($translator.translationFields.portal) { attr.trspan = $translator.translate(attr.trspan); } else { $translator.deferredTr.push({ e: elem, f: 'text', m: attr.trspan }); } return elem.text(attr.trspan); }, template: '' }; } ]); llapp.provider('$htmlParams', function() { this.$get = function() { var params; params = {}; return { set: function(key, obj) { return params[key] = obj; }, menu: function() { return params.menu; }, params: function() { return params.params; } }; }; return this; }); llapp.directive('script', [ '$htmlParams', function($htmlParams) { return { restrict: 'E', terminal: true, compile: function(element, attr) { var e, t; if (attr.type && (t = attr.type.match(/text\/(menu|parameters)/))) { try { return $htmlParams.set(t[1], JSON.parse(element[0].text)); } catch (error) { e = error; console.log("Parsing error:", e); } } } }; } ]); llapp.controller('ModalInstanceCtrl', [ '$scope', '$uibModalInstance', 'elem', 'set', 'init', function($scope, $uibModalInstance, elem, set, init) { var currentNode, oldValue, oldvalue; oldvalue = null; $scope.elem = elem; $scope.set = set; $scope.result = init; $scope.staticPrefix = window.staticPrefix; currentNode = elem('currentNode'); $scope.translateP = elem('translateP'); if (currentNode) { oldValue = currentNode.data; $scope.currentNode = currentNode; } $scope.ok = function() { set('result', $scope.result); return $uibModalInstance.close(true); }; $scope.cancel = function() { if (currentNode) { $scope.currentNode.data = oldValue; } return $uibModalInstance.dismiss('cancel'); }; return $scope.inSelect = function(value) { var i, j, len, ref; ref = $scope.currentNode.select; for (j = 0, len = ref.length; j < len; j++) { i = ref[j]; if (i.k === value) { return true; } } return false; }; } ]); llapp.directive('onReadFile', [ '$parse', function($parse) { return { restrict: 'A', scope: false, link: function(scope, element, attrs) { var fn; fn = $parse(attrs.onReadFile); return element.on('change', function(onChangeEvent) { var reader; reader = new FileReader(); reader.onload = function(onLoadEvent) { return scope.$apply(function() { return fn(scope, { $fileContent: onLoadEvent.target.result }); }); }; return reader.readAsText((onChangeEvent.srcElement || onChangeEvent.target).files[0]); }); } }; } ]); llapp.directive('resizer', [ '$document', function($document) { var hsize, rsize; hsize = null; rsize = null; return function($scope, $element, $attrs) { var mousemove, mouseup; $element.on('mousedown', function(event) { if ($attrs.resizer === 'vertical') { rsize = $($attrs.resizerRight).width() + $($attrs.resizerLeft).width(); } else { hsize = $($attrs.resizerTop).height() + $($attrs.resizerBottom).height(); } event.preventDefault(); $document.on('mousemove', mousemove); return $document.on('mouseup', mouseup); }); mousemove = function(event) { var x, y; if ($attrs.resizer === 'vertical') { x = event.pageX; if ($attrs.resizerMax && x > $attrs.resizerMax) { x = parseInt($attrs.resizerMax); } $($attrs.resizerLeft).css({ width: x + "px" }); return $($attrs.resizerRight).css({ width: (rsize - x) + "px" }); } else { y = event.pageY - $('#navbar').height(); $($attrs.resizerTop).css({ height: y + "px" }); return $($attrs.resizerBottom).css({ height: (hsize - y) + "px" }); } }; return mouseup = function() { $document.unbind('mousemove', mousemove); return $document.unbind('mouseup', mouseup); }; }; } ]); /* * Authentication system * * If a 401 code is returned and if "Authorization" header contains an url, * user is redirected to this url (but target is replaced by location.href */ llapp.factory('$lmhttp', [ '$q', '$location', function($q, $location) { return { responseError: function(rejection) { if (rejection.status === 401 && window.portal) { return window.location = (window.portal + "?url=") + window.btoa(window.location).replace(/\//, '_'); } else { return $q.reject(rejection); } } }; } ]); llapp.config([ '$httpProvider', function($httpProvider) { return $httpProvider.interceptors.push('$lmhttp'); } ]); }).call(this);