Add language flag (closes: #587)

This commit is contained in:
Xavier Guimard 2017-02-16 07:37:47 +00:00
parent 0a0e4056cd
commit 4405e3667e
28 changed files with 162 additions and 83 deletions

View File

@ -25,7 +25,10 @@ llapp = angular.module 'llApp', []
llapp.provider '$translator', ->
res = {}
# Language detection
if navigator
c = decodeURIComponent(document.cookie)
if c.match /llnglanguage=(\w+)/
res.lang = RegExp.$1
else if navigator
langs = []
langs2 = []
nlangs = [ navigator.language ]
@ -68,6 +71,9 @@ llapp.provider '$translator', ->
res.last = ''
res.init = (lang) ->
lang = res.lang unless 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

View File

@ -17,9 +17,12 @@ LemonLDAP::NG base app module
llapp = angular.module('llApp', []);
llapp.provider('$translator', function() {
var al, j, k, langs, langs2, len, len1, nl, nlangs, ref, res;
var al, c, j, k, langs, langs2, len, len1, nl, nlangs, ref, res;
res = {};
if (navigator) {
c = decodeURIComponent(document.cookie);
if (c.match(/llnglanguage=(\w+)/)) {
res.lang = RegExp.$1;
} else if (navigator) {
langs = [];
langs2 = [];
nlangs = [navigator.language];
@ -69,6 +72,9 @@ LemonLDAP::NG base app module
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;

View File

@ -1 +1 @@
(function(){var a;a=angular.module("llApp",[]);a.provider("$translator",function(){var l,h,f,g,e,m,i,b,c,d,n;n={};if(navigator){g=[];e=[];c=[navigator.language];if(navigator.languages){c=navigator.languages}for(h=0,m=c.length;h<m;h++){b=c[h];d=window.availableLanguages;for(f=0,i=d.length;f<i;f++){l=d[f];if(l===b){g.push(l)}else{if(l.substring(0,1)===b.substring(0,1)){e.push(l)}}}}n.lang=g[0]?g[0]:e[0]?e[0]:"en"}else{n.lang="en"}n.deferredTr=[];n.translationFields={};n.translate=function(j){if(n.translationFields[j]){j=n.translationFields[j]}return j};n.translateField=function(j,k){return n.translate(j[k])};n.translateP=function(j){if(j&&n.translationFields.portal){j=j.replace(/__(\w+)__/g,function(o,k){return n.translate(k)})}return j};this.$get=["$q","$http",function(j,k){n.last="";n.init=function(p){var o;if(!p){p=n.lang}o=j.defer();if(n.last!==p){n.last=p;k.get(window.staticPrefix+"languages/"+p+".json").then(function(t){var u,q,s,r;n.translationFields=t.data;r=n.deferredTr;for(q=0,s=r.length;q<s;q++){u=r[q];u.e[u.f](n.translationFields[u.m])}n.deferredTr=[];return o.resolve("Translation files loaded")},function(q){return o.reject("")})}else{o.resolve("No change")}return o.promise};return n}];return this});a.directive("trspan",["$translator",function(b){return{restrict:"A",replace:false,transclude:true,scope:{trspan:"@"},link:function(d,e,c){if(b.translationFields.portal){c.trspan=b.translate(c.trspan)}else{b.deferredTr.push({e:e,f:"text",m:c.trspan})}return e.text(c.trspan)},template:""}}]);a.provider("$htmlParams",function(){this.$get=function(){var b;b={};return{set:function(c,d){return b[c]=d},menu:function(){return b.menu},params:function(){return b.params}}};return this});a.directive("script",["$htmlParams",function(b){return{restrict:"E",terminal:true,compile:function(g,c){var h,d,f;if(f=c.type.match(/text\/(menu|parameters)/)){try{return b.set(f[1],JSON.parse(g[0].text))}catch(d){h=d;console.log("Parsing error:",h)}}}}}]);a.controller("ModalInstanceCtrl",["$scope","$uibModalInstance","elem","set","init",function(b,f,e,i,h){var d,c,g;g=null;b.elem=e;b.set=i;b.result=h;b.staticPrefix=window.staticPrefix;d=e("currentNode");b.translateP=e("translateP");if(d){c=d.data;b.currentNode=d}b.ok=function(){i("result",b.result);return f.close(true)};b.cancel=function(){if(d){b.currentNode.data=c}return f.dismiss("cancel")};return b.inSelect=function(o){var m,l,k,n;n=b.currentNode.select;for(l=0,k=n.length;l<k;l++){m=n[l];if(m.k===o){return true}}return false}}]);a.directive("onReadFile",["$parse",function(b){return{restrict:"A",scope:false,link:function(f,d,c){var e;e=b(c.onReadFile);return d.on("change",function(h){var g;g=new FileReader();g.onload=function(i){return f.$apply(function(){return e(f,{$fileContent:i.target.result})})};return g.readAsText((h.srcElement||h.target).files[0])})}}}]);a.directive("resizer",["$document",function(d){var b,c;b=null;c=null;return function(g,f,e){var h,i;f.on("mousedown",function(j){if(e.resizer==="vertical"){c=$(e.resizerRight).width()+$(e.resizerLeft).width()}else{b=$(e.resizerTop).height()+$(e.resizerBottom).height()}j.preventDefault();d.on("mousemove",h);return d.on("mouseup",i)});h=function(k){var j,l;if(e.resizer==="vertical"){j=k.pageX;if(e.resizerMax&&j>e.resizerMax){j=parseInt(e.resizerMax)}$(e.resizerLeft).css({width:j+"px"});return $(e.resizerRight).css({width:(c-j)+"px"})}else{l=k.pageY-$("#navbar").height();$(e.resizerTop).css({height:l+"px"});return $(e.resizerBottom).css({height:(b-l)+"px"})}};return i=function(){d.unbind("mousemove",h);return d.unbind("mouseup",i)}}}]);a.factory("$lmhttp",["$q","$location",function(b,c){return{responseError:function(d){if(d.status===401&&window.portal){return window.location=(window.portal+"?url=")+window.btoa(window.location).replace(/\//,"_")}else{return b.reject(d)}}}}]);a.config(["$httpProvider",function(b){return b.interceptors.push("$lmhttp")}])}).call(this);
(function(){var a;a=angular.module("llApp",[]);a.provider("$translator",function(){var m,p,i,g,h,f,n,l,b,d,e,o;o={};p=decodeURIComponent(document.cookie);if(p.match(/llnglanguage=(\w+)/)){o.lang=RegExp.$1}else{if(navigator){h=[];f=[];d=[navigator.language];if(navigator.languages){d=navigator.languages}for(i=0,n=d.length;i<n;i++){b=d[i];e=window.availableLanguages;for(g=0,l=e.length;g<l;g++){m=e[g];if(m===b){h.push(m)}else{if(m.substring(0,1)===b.substring(0,1)){f.push(m)}}}}o.lang=h[0]?h[0]:f[0]?f[0]:"en"}else{o.lang="en"}}o.deferredTr=[];o.translationFields={};o.translate=function(c){if(o.translationFields[c]){c=o.translationFields[c]}return c};o.translateField=function(c,j){return o.translate(c[j])};o.translateP=function(c){if(c&&o.translationFields.portal){c=c.replace(/__(\w+)__/g,function(k,j){return o.translate(j)})}return c};this.$get=["$q","$http",function(c,j){o.last="";o.init=function(q){var k;if(!q){q=o.lang}k=new Date();k.setTime(k.getTime()+30*86400000);document.cookie="llnglanguage="+q+"; expires="+(k.toUTCString())+"; path=/";k=c.defer();if(o.last!==q){o.last=q;j.get(window.staticPrefix+"languages/"+q+".json").then(function(u){var v,r,t,s;o.translationFields=u.data;s=o.deferredTr;for(r=0,t=s.length;r<t;r++){v=s[r];v.e[v.f](o.translationFields[v.m])}o.deferredTr=[];return k.resolve("Translation files loaded")},function(r){return k.reject("")})}else{k.resolve("No change")}return k.promise};return o}];return this});a.directive("trspan",["$translator",function(b){return{restrict:"A",replace:false,transclude:true,scope:{trspan:"@"},link:function(d,e,c){if(b.translationFields.portal){c.trspan=b.translate(c.trspan)}else{b.deferredTr.push({e:e,f:"text",m:c.trspan})}return e.text(c.trspan)},template:""}}]);a.provider("$htmlParams",function(){this.$get=function(){var b;b={};return{set:function(c,d){return b[c]=d},menu:function(){return b.menu},params:function(){return b.params}}};return this});a.directive("script",["$htmlParams",function(b){return{restrict:"E",terminal:true,compile:function(g,c){var h,d,f;if(f=c.type.match(/text\/(menu|parameters)/)){try{return b.set(f[1],JSON.parse(g[0].text))}catch(d){h=d;console.log("Parsing error:",h)}}}}}]);a.controller("ModalInstanceCtrl",["$scope","$uibModalInstance","elem","set","init",function(b,f,e,i,h){var d,c,g;g=null;b.elem=e;b.set=i;b.result=h;b.staticPrefix=window.staticPrefix;d=e("currentNode");b.translateP=e("translateP");if(d){c=d.data;b.currentNode=d}b.ok=function(){i("result",b.result);return f.close(true)};b.cancel=function(){if(d){b.currentNode.data=c}return f.dismiss("cancel")};return b.inSelect=function(o){var m,l,k,n;n=b.currentNode.select;for(l=0,k=n.length;l<k;l++){m=n[l];if(m.k===o){return true}}return false}}]);a.directive("onReadFile",["$parse",function(b){return{restrict:"A",scope:false,link:function(f,d,c){var e;e=b(c.onReadFile);return d.on("change",function(h){var g;g=new FileReader();g.onload=function(i){return f.$apply(function(){return e(f,{$fileContent:i.target.result})})};return g.readAsText((h.srcElement||h.target).files[0])})}}}]);a.directive("resizer",["$document",function(d){var b,c;b=null;c=null;return function(g,f,e){var h,i;f.on("mousedown",function(j){if(e.resizer==="vertical"){c=$(e.resizerRight).width()+$(e.resizerLeft).width()}else{b=$(e.resizerTop).height()+$(e.resizerBottom).height()}j.preventDefault();d.on("mousemove",h);return d.on("mouseup",i)});h=function(k){var j,l;if(e.resizer==="vertical"){j=k.pageX;if(e.resizerMax&&j>e.resizerMax){j=parseInt(e.resizerMax)}$(e.resizerLeft).css({width:j+"px"});return $(e.resizerRight).css({width:(c-j)+"px"})}else{l=k.pageY-$("#navbar").height();$(e.resizerTop).css({height:l+"px"});return $(e.resizerBottom).css({height:(b-l)+"px"})}};return i=function(){d.unbind("mousemove",h);return d.unbind("mouseup",i)}}}]);a.factory("$lmhttp",["$q","$location",function(b,c){return{responseError:function(d){if(d.status===401&&window.portal){return window.location=(window.portal+"?url=")+window.btoa(window.location).replace(/\//,"_")}else{return b.reject(d)}}}}]);a.config(["$httpProvider",function(b){return b.interceptors.push("$lmhttp")}])}).call(this);

View File

@ -11,7 +11,7 @@ translatePage = (lang) ->
translationFields = data
$("[trspan]").each ->
args = $(this).attr('trspan').split(',')
txt = args.shift()
txt = translate args.shift()
for v in args
txt.replace /%[ds]/, v
$(this).text txt
@ -115,6 +115,21 @@ ping = ->
window.ping = ping
getCookie = (cname) ->
name = cname + "="
ca = decodeURIComponent(document.cookie).split ';'
re = new RegExp('^ *'+cname+'=')
for c in ca
if c.match re
c = c.replace re, ''
return c
return ''
setCookie = (name, value, exdays) ->
d = new Date()
d.setTime d.getTime() + exdays*86400000
document.cookie = "#{name}=#{value}; expires=#{d.toUTCString()}; path=/"
# Initialization
datas = {}
$(document).ready ->
@ -186,21 +201,35 @@ $(document).ready ->
$("p.removeOther a").attr "href", link
# Language detection
if navigator
langs = []
langs2 = []
nlangs = [ navigator.language ]
if navigator.languages
nlangs = navigator.languages
for nl in nlangs
lang = getCookie 'llnglanguage'
if !lang
if navigator
langs = []
langs2 = []
nlangs = [ navigator.language ]
if navigator.languages
nlangs = navigator.languages
for al in window.availableLanguages
if al == nl
langs.push al
else if al.substring(0, 1) == nl.substring(0, 1)
langs2.push al
lang = if langs[0] then langs[0] else if langs2[0] then langs2[0] else 'en';
else
lang = 'en'
langdiv += "<img class=\"langicon\" src=\"#{window.staticPrefix}common/#{al}.png\" title=\"#{al}\"> "
for nl in nlangs
if al == nl
langs.push al
else if al.substring(0, 1) == nl.substring(0, 1)
langs2.push al
lang = if langs[0] then langs[0] else if langs2[0] then langs2[0] else 'en'
else
lang = 'en'
translatePage(lang)
# Build language icons
langdiv = ''
for al in window.availableLanguages
langdiv += "<img class=\"langicon\" src=\"#{window.staticPrefix}common/#{al}.png\" title=\"#{al}\"> "
$('#languages').html langdiv
$('.langicon').on 'click', () ->
lang = $(this).attr 'title'
setCookie 'llnglanguage', lang
translatePage lang
# Ping if asked
if datas['pingInterval'] and datas['pingInterval'] > 0
@ -210,5 +239,4 @@ $(document).ready ->
$(".localeDate").each ->
s = new Date($(this).attr("val")*1000)
$(this).text s.toLocaleString()
translatePage(lang)

Binary file not shown.

After

Width:  |  Height:  |  Size: 599 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

View File

@ -5,7 +5,7 @@ LemonLDAP::NG Portal jQuery scripts
*/
(function() {
var datas, getOrder, getValues, isHiddenFormValueSet, ping, restoreOrder, setSelector, translate, translatePage, translationFields,
var datas, getCookie, getOrder, getValues, isHiddenFormValueSet, ping, restoreOrder, setCookie, setSelector, translate, translatePage, translationFields,
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
translationFields = {};
@ -16,7 +16,7 @@ LemonLDAP::NG Portal jQuery scripts
$("[trspan]").each(function() {
var args, i, len, txt, v;
args = $(this).attr('trspan').split(',');
txt = args.shift();
txt = translate(args.shift());
for (i = 0, len = args.length; i < len; i++) {
v = args[i];
txt.replace(/%[ds]/, v);
@ -123,10 +123,32 @@ LemonLDAP::NG Portal jQuery scripts
window.ping = ping;
getCookie = function(cname) {
var c, ca, i, len, name, re;
name = cname + "=";
ca = decodeURIComponent(document.cookie).split(';');
re = new RegExp('^ *' + cname + '=');
for (i = 0, len = ca.length; i < len; i++) {
c = ca[i];
if (c.match(re)) {
c = c.replace(re, '');
return c;
}
}
return '';
};
setCookie = function(name, value, exdays) {
var d;
d = new Date();
d.setTime(d.getTime() + exdays * 86400000);
return document.cookie = name + "=" + value + "; expires=" + (d.toUTCString()) + "; path=/";
};
datas = {};
$(document).ready(function() {
var action, al, authMenuTabs, back_url, i, j, lang, langs, langs2, len, len1, link, menuIndex, menuTabs, method, nl, nlangs, ref;
var action, al, authMenuTabs, back_url, i, j, l, lang, langdiv, langs, langs2, len, len1, len2, link, menuIndex, menuTabs, method, nl, nlangs, ref, ref1;
datas = getValues();
window.datas = datas;
if (datas['antiframe'] && top !== self) {
@ -182,38 +204,54 @@ LemonLDAP::NG Portal jQuery scripts
link = $("p.removeOther a").attr("href") + "&method=" + method + "&url=" + btoa(back_url);
$("p.removeOther a").attr("href", link);
}
if (navigator) {
langs = [];
langs2 = [];
nlangs = [navigator.language];
if (navigator.languages) {
nlangs = navigator.languages;
}
for (i = 0, len = nlangs.length; i < len; i++) {
nl = nlangs[i];
lang = getCookie('llnglanguage');
if (!lang) {
if (navigator) {
langs = [];
langs2 = [];
nlangs = [navigator.language];
if (navigator.languages) {
nlangs = navigator.languages;
}
ref = window.availableLanguages;
for (j = 0, len1 = ref.length; j < len1; j++) {
al = ref[j];
if (al === nl) {
langs.push(al);
} else if (al.substring(0, 1) === nl.substring(0, 1)) {
langs2.push(al);
for (i = 0, len = ref.length; i < len; i++) {
al = ref[i];
langdiv += "<img class=\"langicon\" src=\"" + window.staticPrefix + "common/" + al + ".png\" title=\"" + al + "\"> ";
for (j = 0, len1 = nlangs.length; j < len1; j++) {
nl = nlangs[j];
if (al === nl) {
langs.push(al);
} else if (al.substring(0, 1) === nl.substring(0, 1)) {
langs2.push(al);
}
}
}
lang = langs[0] ? langs[0] : langs2[0] ? langs2[0] : 'en';
} else {
lang = 'en';
}
lang = langs[0] ? langs[0] : langs2[0] ? langs2[0] : 'en';
} else {
lang = 'en';
}
translatePage(lang);
langdiv = '';
ref1 = window.availableLanguages;
for (l = 0, len2 = ref1.length; l < len2; l++) {
al = ref1[l];
langdiv += "<img class=\"langicon\" src=\"" + window.staticPrefix + "common/" + al + ".png\" title=\"" + al + "\"> ";
}
$('#languages').html(langdiv);
$('.langicon').on('click', function() {
lang = $(this).attr('title');
setCookie('llnglanguage', lang);
return translatePage(lang);
});
if (datas['pingInterval'] && datas['pingInterval'] > 0) {
window.setTimeout(ping, datas['pingInterval']);
}
$(".localeDate").each(function() {
return $(".localeDate").each(function() {
var s;
s = new Date($(this).attr("val") * 1000);
return $(this).text(s.toLocaleString());
});
return translatePage(lang);
});
}).call(this);

View File

@ -1 +1 @@
(function(){var e,i,d,a,j,h,f,b,k,c,g=[].indexOf||function(o){for(var n=0,m=this.length;n<m;n++){if(n in this&&this[n]===o){return n}}return -1};c={};k=function(l){return $.getJSON(window.staticPrefix+"languages/"+l+".json",function(m){c=m;$("[trspan]").each(function(){var q,r,o,n,p;q=$(this).attr("trspan").split(",");n=q.shift();for(r=0,o=q.length;r<o;r++){p=q[r];n.replace(/%[ds]/,p)}return $(this).text(n)});return $("[trmsg]").each(function(){return $(this).text(b("PE"+($(this).attr("trmsg"))))})})};b=function(l){if(c[l]){return c[l]}else{return l}};window.translate=b;d=function(){var l;l={};$("script[type='application/init']").each(function(){var q,n,m,p,o;try{o=JSON.parse($(this).text());p=[];for(m in o){p.push(l[m]=o[m])}return p}catch(n){q=n;console.log("Parsing error",q);return console.log("JSON",$(this).text())}});return l};f="#appslist";i=function(){return $.ajax({type:"POST",url:e.scriptname,data:{storeAppsListOrder:$(f).sortable("toArray").join()},dataType:"json"})};h=function(){var n,m,q,y,l,u,p,r,o,t,w,s,x;t=$(f);if(!((t!=null)&&e.appslistorder)){return null}n=e.appslistorder.split(",");u=t.sortable("toArray");w=[];for(q=0,r=u.length;q<r;q++){x=u[q];w[x]=x}for(p=0,o=n.length;p<o;p++){l=n[p];if(g.call(w,l)>=0){y=w[l];m=$(f+".ui-sortable").children("#"+y);s=$(f+".ui-sortable").children("#"+l);m.remove();$(f+".ui-sortable").filter(":first").append(s)}}return 1};a=function(l){return $("#lmhidden_"+l).length};j=function(){return $.ajax({type:"POST",url:e.scriptname,data:{ping:1},dataType:"json",success:function(l){if(l.auth){return setTimeout(j,e.pingInterval)}else{return location.reload(true)}}})};window.ping=j;e={};$(document).ready(function(){var x,w,z,v,A,y,C,t,s,B,r,q,u,o,m,n,l,p;e=d();window.datas=e;if(e.antiframe&&top!==self){top.location.href=location.href}$("#appslist").sortable({axis:"y",cursor:"move",opacity:0.5,revert:true,items:"> div.category",update:function(){return i()}});h();$("div.message").fadeIn("slow");$("input[name=timezone]").val(-(new Date().getTimezoneOffset()/60));o=$("#menu").tabs({active:0});u=$('#menu a[href="#'+e.displaytab+'"]').parent().index();if(u<0){u=0}o.tabs("option","active",u);z=$("#authMenu").tabs({active:0});if(e.choicetab){z.tabs("option","active",$('#authMenu a[href="#'+e.choicetab+'"]').parent().index())}if(e.login){$("input[type=password]:first").focus()}else{$("input[type!=hidden]:first").focus()}if(e.newwindow){$("#appslist a").attr("target","_blank")}if($("p.removeOther").length){x=$("form.login").attr("action");m=$("form.login").attr("method");v="";if(x.indexOf("?")!==-1){x.substring(0,x.indexOf("?"))+"?"}else{v=x+"?"}$("form.login input[type=hidden]").each(function(D){return v+="&"+$(this).attr("name")+"="+$(this).val()});q=$("p.removeOther a").attr("href")+"&method="+m+"&url="+btoa(v);$("p.removeOther a").attr("href",q)}if(navigator){t=[];s=[];l=[navigator.language];if(navigator.languages){l=navigator.languages}for(A=0,B=l.length;A<B;A++){n=l[A];p=window.availableLanguages;for(y=0,r=p.length;y<r;y++){w=p[y];if(w===n){t.push(w)}else{if(w.substring(0,1)===n.substring(0,1)){s.push(w)}}}}C=t[0]?t[0]:s[0]?s[0]:"en"}else{C="en"}if(e.pingInterval&&e.pingInterval>0){window.setTimeout(j,e.pingInterval)}$(".localeDate").each(function(){var D;D=new Date($(this).attr("val")*1000);return $(this).text(D.toLocaleString())});return k(C)})}).call(this);
(function(){var e,g,j,d,a,k,i,m,f,b,l,c,h=[].indexOf||function(p){for(var o=0,n=this.length;o<n;o++){if(o in this&&this[o]===p){return o}}return -1};c={};l=function(n){return $.getJSON(window.staticPrefix+"languages/"+n+".json",function(o){c=o;$("[trspan]").each(function(){var s,t,q,p,r;s=$(this).attr("trspan").split(",");p=b(s.shift());for(t=0,q=s.length;t<q;t++){r=s[t];p.replace(/%[ds]/,r)}return $(this).text(p)});return $("[trmsg]").each(function(){return $(this).text(b("PE"+($(this).attr("trmsg"))))})})};b=function(n){if(c[n]){return c[n]}else{return n}};window.translate=b;d=function(){var n;n={};$("script[type='application/init']").each(function(){var s,p,o,r,q;try{q=JSON.parse($(this).text());r=[];for(o in q){r.push(n[o]=q[o])}return r}catch(p){s=p;console.log("Parsing error",s);return console.log("JSON",$(this).text())}});return n};f="#appslist";j=function(){return $.ajax({type:"POST",url:e.scriptname,data:{storeAppsListOrder:$(f).sortable("toArray").join()},dataType:"json"})};i=function(){var p,o,s,A,n,x,r,t,q,w,y,u,z;w=$(f);if(!((w!=null)&&e.appslistorder)){return null}p=e.appslistorder.split(",");x=w.sortable("toArray");y=[];for(s=0,t=x.length;s<t;s++){z=x[s];y[z]=z}for(r=0,q=p.length;r<q;r++){n=p[r];if(h.call(y,n)>=0){A=y[n];o=$(f+".ui-sortable").children("#"+A);u=$(f+".ui-sortable").children("#"+n);o.remove();$(f+".ui-sortable").filter(":first").append(u)}}return 1};a=function(n){return $("#lmhidden_"+n).length};k=function(){return $.ajax({type:"POST",url:e.scriptname,data:{ping:1},dataType:"json",success:function(n){if(n.auth){return setTimeout(k,e.pingInterval)}else{return location.reload(true)}}})};window.ping=k;g=function(q){var t,o,r,n,p,s;p=q+"=";o=decodeURIComponent(document.cookie).split(";");s=new RegExp("^ *"+q+"=");for(r=0,n=o.length;r<n;r++){t=o[r];if(t.match(s)){t=t.replace(s,"");return t}}return""};m=function(n,p,o){var q;q=new Date();q.setTime(q.getTime()+o*86400000);return document.cookie=n+"="+p+"; expires="+(q.toUTCString())+"; path=/"};e={};$(document).ready(function(){var D,C,F,B,G,E,A,I,y,x,w,H,u,t,s,z,q,p,o,n,r,v;e=d();window.datas=e;if(e.antiframe&&top!==self){top.location.href=location.href}$("#appslist").sortable({axis:"y",cursor:"move",opacity:0.5,revert:true,items:"> div.category",update:function(){return j()}});i();$("div.message").fadeIn("slow");$("input[name=timezone]").val(-(new Date().getTimezoneOffset()/60));q=$("#menu").tabs({active:0});z=$('#menu a[href="#'+e.displaytab+'"]').parent().index();if(z<0){z=0}q.tabs("option","active",z);F=$("#authMenu").tabs({active:0});if(e.choicetab){F.tabs("option","active",$('#authMenu a[href="#'+e.choicetab+'"]').parent().index())}if(e.login){$("input[type=password]:first").focus()}else{$("input[type!=hidden]:first").focus()}if(e.newwindow){$("#appslist a").attr("target","_blank")}if($("p.removeOther").length){D=$("form.login").attr("action");p=$("form.login").attr("method");B="";if(D.indexOf("?")!==-1){D.substring(0,D.indexOf("?"))+"?"}else{B=D+"?"}$("form.login input[type=hidden]").each(function(J){return B+="&"+$(this).attr("name")+"="+$(this).val()});s=$("p.removeOther a").attr("href")+"&method="+p+"&url="+btoa(B);$("p.removeOther a").attr("href",s)}I=g("llnglanguage");if(!I){if(navigator){x=[];w=[];n=[navigator.language];if(navigator.languages){n=navigator.languages}r=window.availableLanguages;for(G=0,H=r.length;G<H;G++){C=r[G];y+='<img class="langicon" src="'+window.staticPrefix+"common/"+C+'.png" title="'+C+'"> ';for(E=0,u=n.length;E<u;E++){o=n[E];if(C===o){x.push(C)}else{if(C.substring(0,1)===o.substring(0,1)){w.push(C)}}}}I=x[0]?x[0]:w[0]?w[0]:"en"}else{I="en"}}l(I);y="";v=window.availableLanguages;for(A=0,t=v.length;A<t;A++){C=v[A];y+='<img class="langicon" src="'+window.staticPrefix+"common/"+C+'.png" title="'+C+'"> '}$("#languages").html(y);$(".langicon").on("click",function(){I=$(this).attr("title");m("llnglanguage",I);return l(I)});if(e.pingInterval&&e.pingInterval>0){window.setTimeout(k,e.pingInterval)}return $(".localeDate").each(function(){var J;J=new Date($(this).attr("val")*1000);return $(this).text(J.toLocaleString())})})}).call(this);

View File

@ -4,7 +4,7 @@
<div id="logincontent" class="container">
<TMPL_IF NAME="AUTH_ERROR">
<div class="message message-<TMPL_VAR NAME="AUTH_ERROR_TYPE"> alert"><span trmsg="<TMPL_VAR NAME="AUTH_ERROR">"></span></div>
<div class="message message-<TMPL_VAR NAME="AUTH_ERROR_TYPE"> alert"><span trmsg="<TMPL_VAR NAME="AUTH_ERROR">"></span> <span id="languages"></span></div>
</TMPL_IF>
<TMPL_IF AUTH_LOOP>

View File

@ -61,7 +61,7 @@
</ul>
<div class="user navbar-right">
<p class="navbar-text"><span trspan="connectedAs">Connected as</span> <TMPL_VAR NAME="AUTH_USER"></p>
<p class="navbar-text"><span trspan="connectedAs">Connected as</span> <TMPL_VAR NAME="AUTH_USER"> <span id="languages"></span></p>
</div>
</div>

View File

@ -1,4 +1,4 @@
<p><img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/logo-lock.png" /></p>
<p><img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/logo-lock.png" /></p>
<h1>
<span trspan="welcomeOnPortal">Welcome on your secured authentication portal.</span>
</h1>

View File

@ -3,7 +3,7 @@
<div id="content">
<div id="content-all">
<div class="title">
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/logo-info.png" />
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/logo-info.png" />
<span trspan="confirmation">Confirmation</span>
</div>
<hr class="solid" />

View File

@ -4,5 +4,5 @@
<a href="http://lemonldap-ng.org" target="_blank">LemonLDAP::NG</a>,
<span trspan="gplSoft">free software covered by the GPL license</span>.
</p>
<a href="http://lemonldap-ng.org" target="_blank"><img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/llng-logo-32.png" alt="LemonLDAP::NG logo" /></a>
<a href="http://lemonldap-ng.org" target="_blank"><img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/llng-logo-32.png" alt="LemonLDAP::NG logo" /></a>

View File

@ -3,7 +3,7 @@
<div id="content">
<div id="content-all">
<div class="title">
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/logo-warn.png" />
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/logo-warn.png" />
<span trspan="warning">Warning</span>
</div>
<p></p>

View File

@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title><span trspan="authPortal">Authentication portal</span></title>
<title trspan="authPortal">Authentication portal</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="cache-control" content="no-cache" />
@ -11,9 +11,9 @@
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
</TMPL_IF>
<!-- //if:cssminified
<link rel="stylesheet" type="text/css" href="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/css/styles.min.css" />
<link rel="stylesheet" type="text/css" href="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/css/styles.min.css" />
//else -->
<link rel="stylesheet" type="text/css" href="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/css/styles.css" />
<link rel="stylesheet" type="text/css" href="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/css/styles.css" />
<!-- //endif -->
<TMPL_INCLUDE NAME="../common/background.tpl">
<link href="<TMPL_VAR NAME="STATIC_PREFIX">common/favicon.ico" rel="icon" type="image/vnd.microsoft.icon" sizes="16x16 32x32 48x48 64x64 128x128" />

View File

@ -3,7 +3,7 @@
<div id="content">
<div id="content-all">
<div class="title">
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/logo-info.png" />
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/logo-info.png" />
<span trspan="info">Information</span>
</div>
<hr class="solid" />

View File

@ -22,7 +22,7 @@
<h1 trspan="openSSOSession">Open your SSO session</h1>
<hr class="solid" />
<TMPL_IF NAME="AUTH_ERROR">
<p><span class="text-error" trmsg="<TMPL_VAR NAME="AUTH_ERROR">"></span></p>
<p><span class="text-error" trmsg="<TMPL_VAR NAME="AUTH_ERROR">"></span> <span id="languages"></span></p>
</TMPL_IF>
<!-- tabs -->
@ -122,7 +122,7 @@
<h1 trspan="openSSOSession">Open your SSO session</h1>
<hr class="solid" />
<TMPL_IF NAME="AUTH_ERROR">
<p><span class="text-error" trmsg="<TMPL_VAR NAME="AUTH_ERROR">"></span></p>
<p><span class="text-error" trmsg="<TMPL_VAR NAME="AUTH_ERROR">"></span> <span id="languages"></span></p>
</TMPL_IF>
<form action="#" method="post" class="login">
<TMPL_VAR NAME="HIDDEN_INPUTS">
@ -152,7 +152,7 @@
<h1 trspan="openSSOSession">Open your SSO session</h1>
<hr class="solid" />
<TMPL_IF NAME="AUTH_ERROR">
<p><span class="text-error" trmsg="<TMPL_VAR NAME="AUTH_ERROR">"></span></p>
<p><span class="text-error" trmsg="<TMPL_VAR NAME="AUTH_ERROR">"></span> <span id="languages"></span></p>
</TMPL_IF>
<form action="#" method="post" class="login">
<TMPL_VAR NAME="HIDDEN_INPUTS">
@ -182,7 +182,7 @@
<h1 trspan="openSSOSession">Open your SSO session</h1>
<hr class="solid" />
<TMPL_IF NAME="AUTH_ERROR">
<p><span class="text-error" trmsg="<TMPL_VAR NAME="AUTH_ERROR">"></span></p>
<p><span class="text-error" trmsg="<TMPL_VAR NAME="AUTH_ERROR">"></span> <span id="languages"></span></p>
</TMPL_IF>
<form action="#" method="post" class="login">
<TMPL_VAR NAME="HIDDEN_INPUTS">
@ -212,7 +212,7 @@
<h1 trspan="openSSOSession">Open your SSO session</h1>
<hr class="solid" />
<TMPL_IF NAME="AUTH_ERROR">
<p><span class="text-error" trmsg"<TMPL_VAR NAME="AUTH_ERROR">"></span></p>
<p><span class="text-error" trmsg"<TMPL_VAR NAME="AUTH_ERROR">"></span> <span id="languages"></span></p>
</TMPL_IF>
<form action="#" method="post" class="login <TMPL_VAR NAME="module">">
<TMPL_VAR NAME="HIDDEN_INPUTS">
@ -257,12 +257,12 @@
<div id="content-all">
<div class="title">
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/logo-info.png" />
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/logo-info.png" />
<span trspan="pwdChange">Password change</span>
</div>
<hr class="solid" />
<TMPL_IF NAME="AUTH_ERROR">
<p class="text-error" trmsg="<TMPL_VAR NAME="AUTH_ERROR">"></p>
<p class="text-error" trmsg="<TMPL_VAR NAME="AUTH_ERROR">"> <span id="languages"></span></p>
</TMPL_IF>
<TMPL_INCLUDE NAME="password.tpl">
</div>
@ -272,12 +272,12 @@
<TMPL_IF NAME="PORTAL_URL">
<div id="content-all">
<div class="title">
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/logo-info.png" />
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/logo-info.png" />
<span trspan="SSOSessionInactive">SSO session inactive</span>
</div>
<hr class="solid" />
<TMPL_IF NAME="AUTH_ERROR">
<p class="text-error" trmsg="<TMPL_VAR NAME="AUTH_ERROR">"></p>
<p class="text-error" trmsg="<TMPL_VAR NAME="AUTH_ERROR">"> <span id="languages"></span></p>
</TMPL_IF>
<TMPL_IF NAME="MSG">
<div id="content-all-info">
@ -285,7 +285,7 @@
</div>
</TMPL_IF>
<p>
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/arrow.png" /><a href="<TMPL_VAR NAME="PORTAL_URL">" class="positive"><span trspan="goToPortal">Go to portal</span></a>
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/arrow.png" /><a href="<TMPL_VAR NAME="PORTAL_URL">" class="positive"><span trspan="goToPortal">Go to portal</span></a>
</p>
</div>
</TMPL_IF>
@ -293,15 +293,15 @@
<TMPL_IF NAME="LOGOUT_URL">
<div id="content-all">
<div class="title">
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/logo-info.png" />
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/logo-info.png" />
<span trspan="closeSSO">Close your SSO session</span>
</div>
<hr class="solid" />
<TMPL_IF NAME="AUTH_ERROR">
<p class="text-error" trmsg="<TMPL_VAR NAME="AUTH_ERROR">"></p>
<p class="text-error" trmsg="<TMPL_VAR NAME="AUTH_ERROR">"> <span id="languages"></span></p>
</TMPL_IF>
<p>
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/arrow.png" /><a href="<TMPL_VAR NAME="LOGOUT_URL">" class="negative"><span trspan="logout">Logout</span></a>
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/arrow.png" /><a href="<TMPL_VAR NAME="LOGOUT_URL">" class="negative"><span trspan="logout">Logout</span></a>
</p>
</div>
</TMPL_IF>

View File

@ -3,7 +3,7 @@
<div id="content">
<div id="content-all">
<div class="title">
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/logo-ok.png" />
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/logo-ok.png" />
<span trspan="forgotPwd">Forgot your password?</span>
</div>
<hr class="solid" />

View File

@ -11,6 +11,7 @@
</TMPL_IF>
<p>
<span class="text-error"><span trspan="connectedAs">Connected as</span>: <u><TMPL_VAR NAME="AUTH_USER"></u></span>
<span id="languages"></span>
</p>
<div id="menu">

View File

@ -3,7 +3,7 @@
<div id="content">
<div id="content-all">
<div class="title">
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/logo-ok.png" />
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/logo-ok.png" />
<span trspan="gotNewMessages">You have some new messages</span>
</div>
<hr class="solid" />

View File

@ -3,7 +3,7 @@
<div id="content">
<div id="content-left">
<p><img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/logo-lock.png" /></p>
<p><img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/logo-lock.png" /></p>
</div>
<div id="content-right">
@ -21,7 +21,7 @@
<TMPL_IF NAME="PORTAL_URL">
<p>
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/arrow.png" /><a href="<TMPL_VAR NAME="PORTAL_URL">" class="positive"><span trspan="goToPortal">Go to portal</span></a>
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/arrow.png" /><a href="<TMPL_VAR NAME="PORTAL_URL">" class="positive"><span trspan="goToPortal">Go to portal</span></a>
</p>
</TMPL_IF>

View File

@ -3,7 +3,7 @@
<div id="content">
<div id="content-all">
<div class="title">
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/logo-ok.png" />
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/logo-ok.png" />
<span trspan="createAccount">Create an account</span>
</div>
<hr class="solid" />

View File

@ -41,13 +41,13 @@
<TMPL_IF NAME="DISPLAY_RESETPASSWORD">
<p>
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/arrow.png" /><a href="<TMPL_VAR NAME="MAIL_URL">?skin=<TMPL_VAR NAME="SKIN"><TMPL_IF NAME="key">&<TMPL_VAR NAME="CHOICE_PARAM">=<TMPL_VAR NAME="key"></TMPL_IF>"><span trspan="resetPwd">Reset my password</span></a>
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/arrow.png" /><a href="<TMPL_VAR NAME="MAIL_URL">?skin=<TMPL_VAR NAME="SKIN"><TMPL_IF NAME="key">&<TMPL_VAR NAME="CHOICE_PARAM">=<TMPL_VAR NAME="key"></TMPL_IF>"><span trspan="resetPwd">Reset my password</span></a>
</p>
</TMPL_IF>
<TMPL_IF NAME="DISPLAY_REGISTER">
<p>
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/arrow.png" /><a href="<TMPL_VAR NAME="REGISTER_URL">?skin=<TMPL_VAR NAME="SKIN"><TMPL_IF NAME="key">&<TMPL_VAR NAME="CHOICE_PARAM">=<TMPL_VAR NAME="key"></TMPL_IF>"><span trspan="createAccount">Create an account</span></a>
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/arrow.png" /><a href="<TMPL_VAR NAME="REGISTER_URL">?skin=<TMPL_VAR NAME="SKIN"><TMPL_IF NAME="key">&<TMPL_VAR NAME="CHOICE_PARAM">=<TMPL_VAR NAME="key"></TMPL_IF>"><span trspan="createAccount">Create an account</span></a>
</p>
</TMPL_IF>

View File

@ -33,7 +33,7 @@
<hr class="solid" />
<p>
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/arrow.png" /><a href="<TMPL_VAR NAME="PORTAL_URL">" class="positive"><span trspan="goToPortal">Go to portal</span></a>
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/arrow.png" /><a href="<TMPL_VAR NAME="PORTAL_URL">" class="positive"><span trspan="goToPortal">Go to portal</span></a>
</p>
</div>
</div>

View File

@ -8,15 +8,15 @@
<hr class="solid" />
<p id="u2fPermission" trspan="u2fPermission">You may be prompted to allow the site permission to access your security keys. After granting permission, the device will start to blink.</p>
<p id="register">
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/arrow.png" />
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/arrow.png" />
<span trspan="register">Register</span>
</p>
<p id="verify">
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/arrow.png" />
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/arrow.png" />
<span trspan="verify">Verify</span>
</p>
<p>
<img src="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/images/arrow.png" />
<img src="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/images/arrow.png" />
<a id="goback" href="" class="positive">
<span trspan="goToPortal">Go to portal</span>
</a>

View File

@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title><span trspan="authPortal">Authentication portal</span></title>
<title trspan="authPortal">Authentication portal</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="cache-control" content="no-cache" />
@ -11,9 +11,9 @@
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
</TMPL_IF>
<!-- //if:cssminified
<link rel="stylesheet" type="text/css" href="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/css/styles.min.css" />
<link rel="stylesheet" type="text/css" href="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/css/styles.min.css" />
//else -->
<link rel="stylesheet" type="text/css" href="<TMPL_VAR NAME="SKIN_PATH">/<TMPL_VAR NAME="SKIN">/css/styles.css" />
<link rel="stylesheet" type="text/css" href="<TMPL_VAR NAME="STATIC_PREFIX">/<TMPL_VAR NAME="SKIN">/css/styles.css" />
<!-- //endif -->
<TMPL_INCLUDE NAME="../common/background.tpl">
<link href="<TMPL_VAR NAME="STATIC_PREFIX">common/favicon.ico" rel="icon" type="image/vnd.microsoft.icon" sizes="16x16 32x32 48x48 64x64 128x128" />

View File

@ -3,7 +3,7 @@
<div id="logincontent">
<TMPL_IF NAME="AUTH_ERROR">
<div class="message <TMPL_VAR NAME="AUTH_ERROR_TYPE">"><ul><li trmsg="<TMPL_VAR NAME="AUTH_ERROR">"></li></ul></div>
<div class="message <TMPL_VAR NAME="AUTH_ERROR_TYPE">"><ul><li><span trmsg="<TMPL_VAR NAME="AUTH_ERROR">"></span> <span id="languages"></span></li></ul></div>
</TMPL_IF>
<div class="loginlogo"></div>

View File

@ -8,7 +8,7 @@
<div id="menu">
<div class="user"><span trspan="connectedAs">Connected as</span> <TMPL_VAR NAME="AUTH_USER"></div>
<div class="user"><span trspan="connectedAs">Connected as</span> <TMPL_VAR NAME="AUTH_USER"> <span id="languages"></span></div>
<TMPL_IF DISPLAY_MODULES>
<!-- Tabs list -->