1
0
Fork 0
mirror of synced 2024-06-27 02:31:04 +12:00

New JS build

This commit is contained in:
eldadfux 2019-08-22 08:56:25 +03:00
parent 3958002953
commit 49942a13dd
2 changed files with 30 additions and 32 deletions

View file

@ -2366,9 +2366,9 @@ return rounded+abbr}
window.ls.container.get('view').add({selector:'data-acl',controller:function(element,document,router,alerts){document.body.classList.remove('console');document.body.classList.remove('home');document.body.classList.add(router.getCurrent().view.scope);if(!router.getCurrent().view.project){document.body.classList.add('hide-nav');document.body.classList.remove('show-nav');}
else{document.body.classList.add('show-nav');document.body.classList.remove('hide-nav');}
if('/console'===router.getCurrent().path){document.body.classList.add('index');}
else{document.body.classList.remove('index');}}}).add({selector:'data-cookie-policy',repeat:false,controller:function(element,alerts,cookie){if(!cookie.get('cookie-alert')){let text=element.dataset['cookiePolicy']||'';alerts.add({text:text,class:'cookie-alert',link:'/policy/cookies',callback:function(){cookie.set('cookie-alert','true',365*10);}},0);}}}).add({selector:'data-ls-ui-alerts',controller:function(element,window,view){window.document.addEventListener('alerted',function(){view.render(element);},true);}}).add({selector:'data-ls-ui-alerts-delete',controller:function(document,element,alerts,expression){let message=expression.parse(element.dataset['message']);let remove=function(){alerts.remove(message);};element.addEventListener('click',remove);}}).add({selector:'data-forms-headers',repeat:false,controller:function(element){let key=document.createElement('input');let value=document.createElement('input');let wrap=document.createElement('div');let cell1=document.createElement('div');let cell2=document.createElement('div');key.type='text';key.className='margin-bottom-no';key.placeholder='Key';value.type='text';value.className='margin-bottom-no';value.placeholder='Value';wrap.className='row thin margin-bottom-small';cell1.className='col span-6';cell2.className='col span-6';element.parentNode.insertBefore(wrap,element);cell1.appendChild(key);cell2.appendChild(value);wrap.appendChild(cell1);wrap.appendChild(cell2);key.addEventListener('input',function(){syncA();});value.addEventListener('input',function(){syncA();});element.addEventListener('change',function(){syncB();});let syncA=function(){element.value=key.value.toLowerCase()+':'+value.value.toLowerCase();};let syncB=function(){let split=element.value.toLowerCase().split(':');key.value=split[0]||'';value.value=split[1]||'';key.value=key.value.trim();value.value=value.value.trim();};syncB();}}).add({selector:'data-prism',repeat:false,controller:function(window,document,element,alerts){Prism.highlightElement(element);let copy=document.createElement('i');copy.className='icon-docs copy';copy.title='Copy to Clipboard';copy.addEventListener('click',function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand('copy');alerts.add({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:'error'},3000);}
window.getSelection().removeAllRanges();});element.parentNode.parentNode.appendChild(copy);}}).add({selector:'data-code-example',repeat:false,controller:function(window,document,element,cookie){let prefix=element.dataset['codeExample']||'unknown';element.addEventListener('change',function(){select(element.value);});let select=function(value){for(let i=0;i<element.length;i++){document.body.classList.remove(prefix+'-'+element.options[i].value);}
document.body.classList.add(prefix+'-'+value);cookie.set('language-'+prefix,value,365);document.dispatchEvent(new CustomEvent('updated-language-'+prefix));};document.addEventListener('updated-language-'+prefix,function(){element.value=cookie.get('language-'+prefix);});let def=cookie.get('language-'+prefix)||element.options[0].value;select(def);element.value=def;}}).add({selector:'data-ls-ui-chart',repeat:false,controller:function(element,container,date,document){let child=document.createElement('canvas');child.width=500;child.height=175;let stats=container.get('usage');if(!stats||!stats['requests']||!stats['requests']['data']){return;}
else{document.body.classList.remove('index');}}}).add({selector:'data-cookie-policy',controller:function(element,alerts,cookie){if(!cookie.get('cookie-alert')){let text=element.dataset['cookiePolicy']||'';alerts.add({text:text,class:'cookie-alert',link:'/policy/cookies',callback:function(){cookie.set('cookie-alert','true',365*10);}},0);}}}).add({selector:'data-ls-ui-alerts',controller:function(element,window,view){window.document.addEventListener('alerted',function(){view.render(element);},true);}}).add({selector:'data-ls-ui-alerts-delete',controller:function(document,element,alerts,expression){let message=expression.parse(element.dataset['message']);let remove=function(){alerts.remove(message);};element.addEventListener('click',remove);}}).add({selector:'data-forms-headers',controller:function(element){let key=document.createElement('input');let value=document.createElement('input');let wrap=document.createElement('div');let cell1=document.createElement('div');let cell2=document.createElement('div');key.type='text';key.className='margin-bottom-no';key.placeholder='Key';value.type='text';value.className='margin-bottom-no';value.placeholder='Value';wrap.className='row thin margin-bottom-small';cell1.className='col span-6';cell2.className='col span-6';element.parentNode.insertBefore(wrap,element);cell1.appendChild(key);cell2.appendChild(value);wrap.appendChild(cell1);wrap.appendChild(cell2);key.addEventListener('input',function(){syncA();});value.addEventListener('input',function(){syncA();});element.addEventListener('change',function(){syncB();});let syncA=function(){element.value=key.value.toLowerCase()+':'+value.value.toLowerCase();};let syncB=function(){let split=element.value.toLowerCase().split(':');key.value=split[0]||'';value.value=split[1]||'';key.value=key.value.trim();value.value=value.value.trim();};syncB();}}).add({selector:'data-prism',controller:function(window,document,element,alerts){Prism.highlightElement(element);let copy=document.createElement('i');copy.className='icon-docs copy';copy.title='Copy to Clipboard';copy.addEventListener('click',function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand('copy');alerts.add({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:'error'},3000);}
window.getSelection().removeAllRanges();});element.parentNode.parentNode.appendChild(copy);}}).add({selector:'data-code-example',controller:function(window,document,element,cookie){let prefix=element.dataset['codeExample']||'unknown';element.addEventListener('change',function(){select(element.value);});let select=function(value){for(let i=0;i<element.length;i++){document.body.classList.remove(prefix+'-'+element.options[i].value);}
document.body.classList.add(prefix+'-'+value);cookie.set('language-'+prefix,value,365);document.dispatchEvent(new CustomEvent('updated-language-'+prefix));};document.addEventListener('updated-language-'+prefix,function(){element.value=cookie.get('language-'+prefix);});let def=cookie.get('language-'+prefix)||element.options[0].value;select(def);element.value=def;}}).add({selector:'data-ls-ui-chart',controller:function(element,container,date,document){let child=document.createElement('canvas');child.width=500;child.height=175;let stats=container.get('usage');if(!stats||!stats['requests']||!stats['requests']['data']){return;}
let config={type:'line',data:{labels:[],datasets:[{label:'Requests',backgroundColor:'rgba(230, 248, 253, 0.3)',borderColor:'#29b5d9',borderWidth:2,data:[0,0,0,0,0,0,0],fill:true}]},options:{responsive:true,title:{display:false,text:'Stats'},legend:{display:false},tooltips:{mode:'index',intersect:false,caretPadding:0},hover:{mode:'nearest',intersect:true},scales:{xAxes:[{display:false}],yAxes:[{display:false,}]}}};for(let i=0;i<stats['requests']['data'].length;i++){config.data.datasets[0].data[i]=stats['requests']['data'][i].value;config.data.labels[i]=date.format('d F Y',stats['requests']['data'][i].date);}
let chart=container.get('chart');if(chart){}
element.innerHTML='';element.appendChild(child);container.set('chart',new Chart(child.getContext('2d'),config),true);element.dataset['canvas']=true;}});(function(window){"use strict";window.ls.view.add({selector:'data-service',controller:function(element,view,container,form,alerts,expression,window){let action=element.dataset['service'];let service=element.dataset['name']||action;let event=element.dataset['event'];let confirm=element.dataset['confirm']||'';let loading=element.dataset['loading']||'';let loaderId=null;let scope=element.dataset['scope']||'sdk';let debug=!!(element.dataset['debug']);let success=(element.dataset['success']||'');let failure=(element.dataset['failure']||'');success=(success&&success!='')?success.split(',').map(element=>element.trim()):[];failure=(failure&&failure!='')?failure.split(',').map(element=>element.trim()):[];if(debug)console.log('%c[service init]: '+action+' ('+service+')','color:red');let callbacks={'reset':function(){return function(){if('FORM'===element.tagName){return element.reset();}
@ -2405,7 +2405,7 @@ switch(events[y].trim()){case'load':exec();break;case'none':break;case'click':ca
if(debug)console.log('%cregistered: "'+events[y].trim()+'" ('+service+')','color:blue');}}});})(window);(function(window){"use strict";window.ls.container.get('view').add({'selector':'data-analytics-event','controller':function(element){var action=element.getAttribute('data-event-action')||'click';element.addEventListener(action,function(){var category=element.getAttribute('data-event-category')||'undefined';var label=element.getAttribute('data-event-label')||'undefined';if(!ga){console.error('Google Analytics ga object is not available');}
ga('send',{hitType:'event',eventCategory:category,eventAction:action,eventLabel:label});});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({'selector':'data-analytics-pageview','controller':function(window,router){if(!ga){console.error('Google Analytics ga object is not available');}
var company=router.params['company']||null;if(!company){}
ga('set','page',window.location.pathname);ga('set','dimension1',company);ga('send','pageview');}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-clone',repeat:false,controller:function(element,document,view){var template=element.innerHTML.toString();var label=element.dataset['label']||'Add';var icon=element.dataset['icon']||null;var target=element.dataset['target']||null;var first=parseInt(element.dataset['first']||1);var button=document.createElement('button');button.type='button';button.innerText=' '+label+' ';button.classList.add('margin-end');button.classList.add('margin-bottom-small');button.classList.add('reverse');if(icon){var iconElement=document.createElement('i');iconElement.className=icon;button.insertBefore(iconElement,button.firstChild);}
ga('set','page',window.location.pathname);ga('set','dimension1',company);ga('send','pageview');}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-clone',controller:function(element,document,view){var template=element.innerHTML.toString();var label=element.dataset['label']||'Add';var icon=element.dataset['icon']||null;var target=element.dataset['target']||null;var first=parseInt(element.dataset['first']||1);var button=document.createElement('button');button.type='button';button.innerText=' '+label+' ';button.classList.add('margin-end');button.classList.add('margin-bottom-small');button.classList.add('reverse');if(icon){var iconElement=document.createElement('i');iconElement.className=icon;button.insertBefore(iconElement,button.firstChild);}
if(target){target=document.getElementById(target);}
button.addEventListener('click',function(){var clone=document.createElement(element.tagName);if(element.name){clone.name=element.name;}
clone.innerHTML=template;clone.className=element.className;view.render(clone);if(target){target.appendChild(clone);}
@ -2413,7 +2413,7 @@ else{button.parentNode.insertBefore(clone,button);}
clone.querySelector('input').focus();Array.prototype.slice.call(clone.querySelectorAll('[data-remove]')).map(function(obj){obj.addEventListener('click',function(){clone.parentNode.removeChild(clone);obj.scrollIntoView({behavior:'smooth'});});});Array.prototype.slice.call(clone.querySelectorAll('[data-up]')).map(function(obj){obj.addEventListener('click',function(){if(clone.previousElementSibling){clone.parentNode.insertBefore(clone,clone.previousElementSibling);obj.scrollIntoView({behavior:'smooth'});}});});Array.prototype.slice.call(clone.querySelectorAll('[data-down]')).map(function(obj){obj.addEventListener('click',function(){if(clone.nextElementSibling){clone.parentNode.insertBefore(clone.nextElementSibling,clone);obj.scrollIntoView({behavior:'smooth'});}});});});element.parentNode.insertBefore(button,element.nextSibling);element.parentNode.removeChild(element);if(first){button.click();}}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-code',controller:function(element){let div=document.createElement('div');let pre=document.createElement('pre');let code=document.createElement('code');let copy=document.createElement('i');div.appendChild(pre);pre.appendChild(code);element.parentNode.appendChild(div);element.parentNode.appendChild(copy);div.className='ide';pre.className='line-numbers';code.className='prism language-json';copy.className='icon-docs copy';copy.title='Copy to Clipboard';copy.addEventListener('click',function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand('copy');alerts.add({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:'error'},3000);}
window.getSelection().removeAllRanges();});let check=function(){if(!element.value){return;}
let value=JSON.stringify(JSON.parse(element.value),null,4);code.innerHTML=value;Prism.highlightElement(code);div.scrollTop=0;}
element.addEventListener('change',check);check();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-color',repeat:false,controller:function(element){var preview=document.createElement('div');var picker=document.createElement('input');picker.type='color';preview.className='color-preview';preview.appendChild(picker);picker.addEventListener('change',syncA);picker.addEventListener('input',syncA);element.addEventListener('input',update);element.addEventListener('change',update);function update(){if(element.validity.valid){preview.style.background=element.value;syncB();}}
element.addEventListener('change',check);check();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-color',controller:function(element){var preview=document.createElement('div');var picker=document.createElement('input');picker.type='color';preview.className='color-preview';preview.appendChild(picker);picker.addEventListener('change',syncA);picker.addEventListener('input',syncA);element.addEventListener('input',update);element.addEventListener('change',update);function update(){if(element.validity.valid){preview.style.background=element.value;syncB();}}
function syncA(){element.value=picker.value;update();}
function syncB(){picker.value=element.value;}
element.parentNode.insertBefore(preview,element);update();syncB();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-copy',controller:function(element,alerts,document,window){var button=window.document.createElement('i');button.type='button';button.className='icon-docs note copy';button.style.cursor='pointer';element.parentNode.insertBefore(button,element.nextSibling);var copy=function(event){window.getSelection().removeAllRanges();var range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand('copy');alerts.add({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:'error'},3000);}
@ -2429,19 +2429,19 @@ list['filters-'+filter.key]=params[key][i];}}}}
return list;};let apply=function(params){let cached=container.get(name);cached=(cached)?cached.params:[];params=Object.assign(cached,params);container.set(name,{name:name,params:params,query:serialize(params),forward:parseInt(params.offset)+parseInt(params.limit),backward:parseInt(params.offset)-parseInt(params.limit),keys:flatten(params)},true,name);document.dispatchEvent(new CustomEvent(name+'-changed',{bubbles:false,cancelable:true}));};switch(element.tagName){case'INPUT':break;case'TEXTAREA':break;case'BUTTON':element.addEventListener('click',function(){apply(JSON.parse(expression.parse(element.dataset['params']||'{}')));});break;case'FORM':element.addEventListener('input',function(){apply(form.toJson(element));});element.addEventListener('change',function(){apply(form.toJson(element));});element.addEventListener('reset',function(){setTimeout(function(){apply(form.toJson(element));},0);});events=events.trim().split(',');for(let y=0;y<events.length;y++){if(events[y]==='init'){element.addEventListener('rendered',function(){apply(form.toJson(element));},{once:true});}
else{}
element.setAttribute('data-event','none');}
break;default:break;}}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-parent-down',repeat:false,controller:function(element){var target=element.dataset['target']||null;target=(target)?element.closest(target):element.parentNode;element.addEventListener('click',function(){if(target.nextElementSibling){target.parentNode.insertBefore(target.nextElementSibling,target);element.scrollIntoView({behavior:'smooth'});}});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-parent-remove',repeat:false,controller:function(element){var target=element.dataset['target']||null;target=(target)?element.closest(target):element.parentNode;element.addEventListener('click',function(){target.parentNode.removeChild(target);element.scrollIntoView({behavior:'smooth'});});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-parent-up',repeat:false,controller:function(element){var target=element.dataset['target']||null;target=(target)?element.closest(target):element.parentNode;element.addEventListener('click',function(){if(target.previousElementSibling){target.parentNode.insertBefore(target,target.previousElementSibling);element.scrollIntoView({behavior:'smooth'});}});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-password-meter',repeat:false,controller:function(element,window){var calc=function(password){var score=0;if(!password)
break;default:break;}}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-parent-down',controller:function(element){var target=element.dataset['target']||null;target=(target)?element.closest(target):element.parentNode;element.addEventListener('click',function(){if(target.nextElementSibling){target.parentNode.insertBefore(target.nextElementSibling,target);element.scrollIntoView({behavior:'smooth'});}});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-parent-remove',controller:function(element){var target=element.dataset['target']||null;target=(target)?element.closest(target):element.parentNode;element.addEventListener('click',function(){target.parentNode.removeChild(target);element.scrollIntoView({behavior:'smooth'});});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-parent-up',controller:function(element){var target=element.dataset['target']||null;target=(target)?element.closest(target):element.parentNode;element.addEventListener('click',function(){if(target.previousElementSibling){target.parentNode.insertBefore(target,target.previousElementSibling);element.scrollIntoView({behavior:'smooth'});}});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-password-meter',controller:function(element,window){var calc=function(password){var score=0;if(!password)
return score;var letters=new window.Object();for(var i=0;i<password.length;i++){letters[password[i]]=(letters[password[i]]||0)+1;score+=5.0/letters[password[i]];}
var variations={digits:/\d/.test(password),lower:/[a-z]/.test(password),upper:/[A-Z]/.test(password),nonWords:/\W/.test(password)};var variationCount=0;for(var check in variations){if(variations.hasOwnProperty(check)){variationCount+=(variations[check]===true)?1:0;}}
score+=(variationCount-1)*10;return parseInt(score);};var callback=function(){var score=calc(this.value);if(''===this.value)
return meter.className='password-meter';if(score>60)
return meter.className='password-meter strong';if(score>30)
return meter.className='password-meter medium';if(score>=0)
return meter.className='password-meter weak';};var meter=window.document.createElement('div');meter.className='password-meter';element.parentNode.insertBefore(meter,element.nextSibling);element.addEventListener('change',callback);element.addEventListener('keypress',callback);element.addEventListener('keyup',callback);element.addEventListener('keydown',callback);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-pell',repeat:false,controller:function(element,window,document,markdown){var div=document.createElement('div');element.className='pell hide';div.className='input pell';element.parentNode.insertBefore(div,element);element.tabIndex=-1;var turndownService=new TurndownService();turndownService.addRule('underline',{filter:['u'],replacement:function(content){return'__'+content+'__'}});var editor=window.pell.init({element:div,onChange:function onChange(html){element.value=turndownService.turndown(html);},defaultParagraphSeparator:'p',actions:[{name:'bold',icon:'<i class="icon-bold"></i>'},{name:'underline',icon:'<i class="icon-underline"></i>'},{name:'italic',icon:'<i class="icon-italic"></i>'},{name:'olist',icon:'<i class="icon-list-numbered"></i>'},{name:'ulist',icon:'<i class="icon-list-bullet"></i>'}]});element.addEventListener('change',function(){editor.content.innerHTML=markdown.render(element.value);});editor.content.setAttribute('placeholder',element.placeholder);editor.content.innerHTML=markdown.render(element.value);editor.content.tabIndex=0;editor.content.onkeydown=function preventTab(event){if(event.which===9){event.preventDefault();if(document.activeElement){var focussable=Array.prototype.filter.call(document.querySelectorAll('a:not([disabled]), button:not([disabled]), select:not([disabled]), input[type=text]:not([disabled]), input[type=checkbox]:not([disabled]), [tabindex]:not([disabled]):not([tabindex="-1"])'),function(element){return element.offsetWidth>0||element.offsetHeight>0||element===document.activeElement});var index=focussable.indexOf(document.activeElement);if(index>-1){if(event.shiftKey){var prevElement=focussable[index-1]||focussable[focussable.length-1];prevElement.focus();}
else{var nextElement=focussable[index+1]||focussable[0];nextElement.focus();}}}}};var clean=function(e){e.stopPropagation();e.preventDefault();var clipboardData=e.clipboardData||window.clipboardData;window.pell.exec('insertText',clipboardData.getData('Text'));return true;};div.addEventListener('paste',clean);div.addEventListener('drop',clean);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-remove',repeat:false,controller:function(element){Array.prototype.slice.call(element.querySelectorAll('[data-remove]')).map(function(obj){obj.addEventListener('click',function(){element.parentNode.removeChild(element);});});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-switch',repeat:false,controller:function(element){let input=window.document.createElement('input');input.type='checkbox';input.className='switch';let syncA=function(){element.value=(input.checked)?'on':'off';};let syncB=function(){input.checked=(element.value==='on');};input.addEventListener('input',syncA);input.addEventListener('change',syncA);element.addEventListener('input',syncB);element.addEventListener('change',syncB);syncA();element.parentNode.insertBefore(input,element);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-text-count',repeat:false,controller:function(element){var counter=document.createElement('span');counter.className='counter';element.parentNode.insertBefore(counter,element.nextSibling);var count=function(){if(0<=element.maxLength){counter.innerText=(element.maxLength-element.value.length).toString()+' / '+element.maxLength;}
else{var words=(element.value!=='')?element.value.trim().split(' ').length:0;counter.innerText=words+' words and '+element.value.length.toString()+' chars';}};element.addEventListener('keyup',count);element.addEventListener('change',count);element.addEventListener('cut',count);element.addEventListener('paste',count);element.addEventListener('drop',count);count();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-text-direction',repeat:false,controller:function(element){var rtlStock='^ا^ب^ت^ث^ج^ح^خ^د^ذ^ر^ز^س^ش^ص^ض^ط^ظ^ع^غ^ف^ق^ك^ل^م^ن^ه^و^ي^א^ב^ג^ד^ה^ו^ז^ח^ט^י^כ^ך^ל^מ^ם^נ^ן^ס^ע^פ^ף^צ^ץ^ק^ר^ש^ת^';var special=['\n',' ','״','"','_','\'','!','@','#','$','^','&','%','*','(',')','+','=','-','[',']','\\','/','{','}','|',':','<','>','?',',','.','0','1','2','3','4','5','6','7','8','9'];var setDirection=function(){var value=(element.value[0])?element.value:'';var direction='ltr';var align='left';for(var i=0;i<value.length;i++){if(-1===special.indexOf(value[i])){var firstChar=value[i];break;}}
return meter.className='password-meter weak';};var meter=window.document.createElement('div');meter.className='password-meter';element.parentNode.insertBefore(meter,element.nextSibling);element.addEventListener('change',callback);element.addEventListener('keypress',callback);element.addEventListener('keyup',callback);element.addEventListener('keydown',callback);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-pell',controller:function(element,window,document,markdown){var div=document.createElement('div');element.className='pell hide';div.className='input pell';element.parentNode.insertBefore(div,element);element.tabIndex=-1;var turndownService=new TurndownService();turndownService.addRule('underline',{filter:['u'],replacement:function(content){return'__'+content+'__'}});var editor=window.pell.init({element:div,onChange:function onChange(html){element.value=turndownService.turndown(html);},defaultParagraphSeparator:'p',actions:[{name:'bold',icon:'<i class="icon-bold"></i>'},{name:'underline',icon:'<i class="icon-underline"></i>'},{name:'italic',icon:'<i class="icon-italic"></i>'},{name:'olist',icon:'<i class="icon-list-numbered"></i>'},{name:'ulist',icon:'<i class="icon-list-bullet"></i>'}]});element.addEventListener('change',function(){editor.content.innerHTML=markdown.render(element.value);});editor.content.setAttribute('placeholder',element.placeholder);editor.content.innerHTML=markdown.render(element.value);editor.content.tabIndex=0;editor.content.onkeydown=function preventTab(event){if(event.which===9){event.preventDefault();if(document.activeElement){var focussable=Array.prototype.filter.call(document.querySelectorAll('a:not([disabled]), button:not([disabled]), select:not([disabled]), input[type=text]:not([disabled]), input[type=checkbox]:not([disabled]), [tabindex]:not([disabled]):not([tabindex="-1"])'),function(element){return element.offsetWidth>0||element.offsetHeight>0||element===document.activeElement});var index=focussable.indexOf(document.activeElement);if(index>-1){if(event.shiftKey){var prevElement=focussable[index-1]||focussable[focussable.length-1];prevElement.focus();}
else{var nextElement=focussable[index+1]||focussable[0];nextElement.focus();}}}}};var clean=function(e){e.stopPropagation();e.preventDefault();var clipboardData=e.clipboardData||window.clipboardData;window.pell.exec('insertText',clipboardData.getData('Text'));return true;};div.addEventListener('paste',clean);div.addEventListener('drop',clean);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-remove',controller:function(element){Array.prototype.slice.call(element.querySelectorAll('[data-remove]')).map(function(obj){obj.addEventListener('click',function(){element.parentNode.removeChild(element);});});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-switch',controller:function(element){let input=window.document.createElement('input');input.type='checkbox';input.className='switch';let syncA=function(){element.value=(input.checked)?'on':'off';};let syncB=function(){input.checked=(element.value==='on');};input.addEventListener('input',syncA);input.addEventListener('change',syncA);element.addEventListener('input',syncB);element.addEventListener('change',syncB);syncA();element.parentNode.insertBefore(input,element);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-text-count',controller:function(element){var counter=document.createElement('span');counter.className='counter';element.parentNode.insertBefore(counter,element.nextSibling);var count=function(){if(0<=element.maxLength){counter.innerText=(element.maxLength-element.value.length).toString()+' / '+element.maxLength;}
else{var words=(element.value!=='')?element.value.trim().split(' ').length:0;counter.innerText=words+' words and '+element.value.length.toString()+' chars';}};element.addEventListener('keyup',count);element.addEventListener('change',count);element.addEventListener('cut',count);element.addEventListener('paste',count);element.addEventListener('drop',count);count();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-text-direction',controller:function(element){var rtlStock='^ا^ب^ت^ث^ج^ح^خ^د^ذ^ر^ز^س^ش^ص^ض^ط^ظ^ع^غ^ف^ق^ك^ل^م^ن^ه^و^ي^א^ב^ג^ד^ה^ו^ז^ח^ט^י^כ^ך^ל^מ^ם^נ^ן^ס^ע^פ^ף^צ^ץ^ק^ר^ש^ת^';var special=['\n',' ','״','"','_','\'','!','@','#','$','^','&','%','*','(',')','+','=','-','[',']','\\','/','{','}','|',':','<','>','?',',','.','0','1','2','3','4','5','6','7','8','9'];var setDirection=function(){var value=(element.value[0])?element.value:'';var direction='ltr';var align='left';for(var i=0;i<value.length;i++){if(-1===special.indexOf(value[i])){var firstChar=value[i];break;}}
if(-1<rtlStock.indexOf('^'+firstChar+'^')){direction='rtl';align='right';}
element.style.direction=direction;element.style.textAlign=align;};element.addEventListener('keyup',setDirection);element.addEventListener('change',setDirection);element.addEventListener('cut',setDirection);element.addEventListener('paste',setDirection);element.addEventListener('drop',setDirection);setDirection();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-text-resize',repeat:false,controller:function(element,window){function resize(){var scrollLeft=window.pageXOffset||(window.document.documentElement||window.document.body.parentNode||window.document.body).scrollLeft;var scrollTop=window.pageYOffset||(window.document.documentElement||window.document.body.parentNode||window.document.body).scrollTop;var offset=element.offsetHeight-element.clientHeight;element.style.height='auto';element.style.height=element.scrollHeight+offset+'px';window.scrollTo(scrollLeft,scrollTop);}
element.addEventListener('keyup',resize);element.addEventListener('change',resize);element.addEventListener('cut',resize);element.addEventListener('paste',resize);element.addEventListener('drop',resize);window.addEventListener('resize',resize);resize();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-upload',repeat:false,controller:function(element,container,alerts,expression,env){var scope=element.dataset['scope'];var labelButton=element.dataset['labelButton']||'Upload';var labelLoading=element.dataset['labelLoading']||'Uploading...';var previewWidth=element.dataset['previewWidth']||200;var previewHeight=element.dataset['previewHeight']||200;var accept=element.dataset['accept']||'';var required=(element.dataset['required']||false);var multiple=(element.dataset['multiple']||false);var className=(element.dataset['class']||'upload');var max=parseInt((element.dataset['max']||4));var sdk=(scope==='sdk')?container.get('sdk'):container.get('console');var output=(element.value)?((multiple)?JSON.parse(element.value):[element.value]):[];var total=0;var wrapper=document.createElement('div');var input=document.createElement('input');var upload=document.createElement('div');var preview=document.createElement('ul');var progress=document.createElement('div');var count=document.createElement('div');wrapper.className=className;input.type='file';input.accept=accept;input.required=required;input.multiple=multiple;input.tabIndex=-1;count.className='count';upload.className='button reverse margin-bottom';upload.innerHTML='<i class="icon icon-upload"></i> '+labelButton;upload.tabIndex=0;preview.className='preview';progress.className='progress';progress.style.width='0%';progress.style.display='none';var humanFileSize=function(bytes,si){var thresh=si?1000:1024;if(Math.abs(bytes)<thresh){return bytes+' B';}
element.style.direction=direction;element.style.textAlign=align;};element.addEventListener('keyup',setDirection);element.addEventListener('change',setDirection);element.addEventListener('cut',setDirection);element.addEventListener('paste',setDirection);element.addEventListener('drop',setDirection);setDirection();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-text-resize',controller:function(element,window){function resize(){var scrollLeft=window.pageXOffset||(window.document.documentElement||window.document.body.parentNode||window.document.body).scrollLeft;var scrollTop=window.pageYOffset||(window.document.documentElement||window.document.body.parentNode||window.document.body).scrollTop;var offset=element.offsetHeight-element.clientHeight;element.style.height='auto';element.style.height=element.scrollHeight+offset+'px';window.scrollTo(scrollLeft,scrollTop);}
element.addEventListener('keyup',resize);element.addEventListener('change',resize);element.addEventListener('cut',resize);element.addEventListener('paste',resize);element.addEventListener('drop',resize);window.addEventListener('resize',resize);resize();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-upload',controller:function(element,container,alerts,expression,env){var scope=element.dataset['scope'];var labelButton=element.dataset['labelButton']||'Upload';var labelLoading=element.dataset['labelLoading']||'Uploading...';var previewWidth=element.dataset['previewWidth']||200;var previewHeight=element.dataset['previewHeight']||200;var accept=element.dataset['accept']||'';var required=(element.dataset['required']||false);var multiple=(element.dataset['multiple']||false);var className=(element.dataset['class']||'upload');var max=parseInt((element.dataset['max']||4));var sdk=(scope==='sdk')?container.get('sdk'):container.get('console');var output=(element.value)?((multiple)?JSON.parse(element.value):[element.value]):[];var total=0;var wrapper=document.createElement('div');var input=document.createElement('input');var upload=document.createElement('div');var preview=document.createElement('ul');var progress=document.createElement('div');var count=document.createElement('div');wrapper.className=className;input.type='file';input.accept=accept;input.required=required;input.multiple=multiple;input.tabIndex=-1;count.className='count';upload.className='button reverse margin-bottom';upload.innerHTML='<i class="icon icon-upload"></i> '+labelButton;upload.tabIndex=0;preview.className='preview';progress.className='progress';progress.style.width='0%';progress.style.display='none';var humanFileSize=function(bytes,si){var thresh=si?1000:1024;if(Math.abs(bytes)<thresh){return bytes+' B';}
var units=si?['KB','MB','GB','TB','PB','EB','ZB','YB']:['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'];var u=-1;do{bytes/=thresh;++u;}while(Math.abs(bytes)>=thresh&&u<units.length-1);return bytes.toFixed(1)+' '+units[u];};var onComplete=function(message){alerts.remove(message);input.disabled=false;upload.classList.remove('disabled');progress.style.width='0%';progress.style.display='none';};var render=function(files){if(!Array.isArray(files)){files=[files];}
preview.innerHTML='';count.innerHTML='0 / '+max;files.map(function(obj){console.log('1',obj);var file=document.createElement('li');var image=document.createElement('img');image.src=image.src=env.API+'/storage/files/'+obj+'/preview?width='+previewWidth+'&height='+previewHeight;file.className='file avatar';file.tabIndex=0;file.appendChild(image);count.innerHTML=files.length+' / '+max;preview.appendChild(file);if((files.length>=max)){input.disabled=true;upload.classList.add('disabled');}
else{input.disabled=false;upload.classList.remove('disabled');}
@ -2449,7 +2449,7 @@ var remove=(function(obj){return function(event){output=(Array.isArray(output))?
sdk.storage.createFile(files[0],read,write,1).then(function(response){response.map(function(obj){if(!Array.isArray(output)){throw new Error('Can\'t append new file to non array value');}
output[output.length]=obj['$uid'];});onComplete(message);render(output);},function(error){alerts.add({text:'An error occurred!',class:''},3000);onComplete(message);});input.disabled=true;});element.addEventListener('change',function(){if(!element.value){return;}
output=(multiple)?JSON.parse(element.value):[element.value];render(output);});upload.addEventListener('keypress',function(){input.click();});element.parentNode.insertBefore(wrapper,element);wrapper.appendChild(preview);wrapper.appendChild(progress);wrapper.appendChild(upload);if(multiple){wrapper.appendChild(count);}
upload.appendChild(input);render(output);}});})(window);(function(window){"use strict";window.ls.view.add({selector:'data-general-oauth',repeat:false,controller:function(element,env,expression){let provider=expression.parse(element.dataset['authOauth']||'');let success=expression.parse(element.dataset['success']||'');let failure=expression.parse(element.dataset['failure']||'');element.href=env.API+'/oauth/'+provider+'?project='+env.PROJECT
upload.appendChild(input);render(output);}});})(window);(function(window){"use strict";window.ls.view.add({selector:'data-general-oauth',controller:function(element,env,expression){let provider=expression.parse(element.dataset['authOauth']||'');let success=expression.parse(element.dataset['success']||'');let failure=expression.parse(element.dataset['failure']||'');element.href=env.API+'/oauth/'+provider+'?project='+env.PROJECT
+'&success='+encodeURIComponent(success)
+'&failure='+encodeURIComponent(failure);}});})(window);(function(window){window.ls.container.get('view').add({'selector':'data-page-title','repeat':true,'controller':function(element,document,expression){document.title=expression.parse(element.getAttribute('data-page-title'))||document.title;}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-setup',controller:function(element,console,form){element.addEventListener('submit',function(event){event.preventDefault();let formData=form.toJson(element);formData['name']=formData['name']||(element.dataset['defaultName']||'');console.teams.createTeam(formData['name']||'').then(function(data){let team=data['$uid'];formData=JSON.parse(JSON.stringify(formData).replace(new RegExp('{{teamId}}','g'),team));console.projects.createProject(formData['name'],team).then(function(project){window.location.href='/console?project='+project['$uid'];},function(){throw new Error('Failed to setup project');});},function(){throw new Error('Setup failed creating project team');});})}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-switch',controller:function(element,router,document){let check=function(c){if(!element.value){return;}
if(element.value===router.params.project){return;}
@ -2465,7 +2465,7 @@ element.classList.add('modal');if(!buttonAlias){buttonElements.forEach((button)=
let open=function(){document.documentElement.classList.add('modal-open');document.dispatchEvent(new CustomEvent('modal-open',{bubbles:false,cancelable:true}));element.classList.add('open');element.classList.remove('close');};let close=function(){document.documentElement.classList.remove('modal-open');element.classList.add('close');element.classList.remove('open');};if(name){document.querySelectorAll("[data-ui-modal-ref='"+name+"']").forEach(function(elem){elem.addEventListener('click',open);});}
if(openEvent){document.addEventListener(openEvent,open);}
buttonElements.forEach((button)=>{button.addEventListener('click',open);});document.addEventListener('keydown',function(event){if(event.which===27){close();}});element.addEventListener('blur',close);let closeButtons=element.querySelectorAll('[data-ui-modal-close]');for(let i=0;i<closeButtons.length;i++){closeButtons[i].addEventListener('click',close);}
document.addEventListener('modal-close',close);element.addEventListener('submit',close);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ls-ui-open',repeat:false,controller:function(element,window){let def=(element.classList.contains('open'))?'open':'close';let buttonClass=element.dataset['buttonClass']||'ls-ui-open';let buttonText=element.dataset['buttonText']||'';let buttonIcon=element.dataset['buttonIcon']||'';let hover=element.hasAttribute('data-hover');let blur=element.hasAttribute('data-blur');let button=window.document.createElement('button');let isTouch=function(){return'ontouchstart'in window||navigator.maxTouchPoints;};button.innerText=buttonText;button.className=buttonClass;button.tabIndex=1;button.type='button';if(buttonIcon){let icon=window.document.createElement('i');icon.className=buttonIcon;button.insertBefore(icon,button.firstChild);}
document.addEventListener('modal-close',close);element.addEventListener('submit',close);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ls-ui-open',controller:function(element,window){let def=(element.classList.contains('open'))?'open':'close';let buttonClass=element.dataset['buttonClass']||'ls-ui-open';let buttonText=element.dataset['buttonText']||'';let buttonIcon=element.dataset['buttonIcon']||'';let hover=element.hasAttribute('data-hover');let blur=element.hasAttribute('data-blur');let button=window.document.createElement('button');let isTouch=function(){return'ontouchstart'in window||navigator.maxTouchPoints;};button.innerText=buttonText;button.className=buttonClass;button.tabIndex=1;button.type='button';if(buttonIcon){let icon=window.document.createElement('i');icon.className=buttonIcon;button.insertBefore(icon,button.firstChild);}
if(def==='close'){element.classList.add('close');element.classList.remove('open');}
else{element.classList.add('open');element.classList.remove('close');}
button.addEventListener('click',function(){element.classList.toggle('open');element.classList.toggle('close');});if(hover&&!isTouch()){element.addEventListener('mouseover',function(){element.classList.add('open');element.classList.remove('close');});element.addEventListener('mouseout',function(){element.classList.add('close');element.classList.remove('open');});}
@ -2474,7 +2474,6 @@ while(el=el.parentNode){if((el.nodeName||el.tagName).toLowerCase()===tagName.toL
return null;};if(blur){button.addEventListener('blur',closeDelay);}
element.addEventListener('click',function(event){let target=findParent('a',event.target);if(!target){return false;}
if(!target.href){return false;}
closeDelay();});element.insertBefore(button,element.firstChild);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ls-ui-paging',repeat:true,controller:function(document,element,expression){var sum=expression.parse(element.dataset['sum'])||0;var offset=expression.parse(element.dataset['offset'])||0;var limit=expression.parse(element.dataset['limit'])||0;if(offset===0||limit===0){element.innerHTML='1 / 1';return true;}
var total=Math.ceil(sum/limit);var current=Math.ceil(offset/limit)+1;element.innerHTML=(total>0)?current+' / '+total:'';}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ui-phases',controller:function(element,window,document,expression,router){var tabs=document.createElement('ul');var container=document.createElement('div');var titles=Array.prototype.slice.call(element.getElementsByTagName('h2'));var next=Array.prototype.slice.call(element.querySelectorAll('[data-next]'));var previous=Array.prototype.slice.call(element.querySelectorAll('[data-previous]'));var position=0;var init=false;for(var i=0;i<element.children.length;i++){var tabState=expression.parse(element.children[i].dataset['state']||'');if(tabState===(window.location.pathname+window.location.search).substring(0,tabState.length)){position=i;}}
closeDelay();});element.insertBefore(button,element.firstChild);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ui-phases',controller:function(element,window,document,expression,router){var tabs=document.createElement('ul');var container=document.createElement('div');var titles=Array.prototype.slice.call(element.getElementsByTagName('h2'));var next=Array.prototype.slice.call(element.querySelectorAll('[data-next]'));var previous=Array.prototype.slice.call(element.querySelectorAll('[data-previous]'));var position=0;var init=false;for(var i=0;i<element.children.length;i++){var tabState=expression.parse(element.children[i].dataset['state']||'');if(tabState===(window.location.pathname+window.location.search).substring(0,tabState.length)){position=i;}}
var setTab=function(index){var tabState=expression.parse(element.children[index].dataset['state']||'');var url='';if((tabState!=='')&&(tabState!==window.location.pathname+window.location.search)){var parser=document.createElement('a');parser.href=tabState;url=(!init)?parser.pathname+window.location.search:tabState;console.log(parser.pathname+window.location.search,tabState);if(position!=index){window.history.pushState({},'',url);router.reset();}}
element.children[position].classList.remove('selected');element.children[index].classList.add('selected');tabs.children[position].classList.remove('selected');tabs.children[index].classList.add('selected');position=index;document.dispatchEvent(new CustomEvent('tab-changed'));init=true;};tabs.classList.add('tabs');container.classList.add('container');container.classList.add('close');container.dataset['lsUiOpen']='';container.dataset['buttonClass']='icon icon-down-dir';titles.map(function(obj,i){var title=document.createElement('li');title.innerHTML=obj.innerHTML;title.className=obj.className;title.tabIndex=0;tabs.appendChild(title);title.addEventListener('click',function(){setTab(i);});title.addEventListener('keyup',function(){if(event.which===13){setTab(i);}});});next.map(function(obj){obj.addEventListener('click',function(){setTab(position+1)});});previous.map(function(obj){obj.addEventListener('click',function(){setTab(position-1)});});setTab(position);container.appendChild(tabs);element.parentNode.insertBefore(container,element);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ls-ui-trigger',repeat:false,controller:function(element,document){let trigger=element.dataset['lsUiTrigger'];let event=element.dataset['event']||'click';element.addEventListener(event,function(){console.log(element,trigger);document.dispatchEvent(new CustomEvent(trigger));});}});})(window);
element.children[position].classList.remove('selected');element.children[index].classList.add('selected');tabs.children[position].classList.remove('selected');tabs.children[index].classList.add('selected');position=index;document.dispatchEvent(new CustomEvent('tab-changed'));init=true;};tabs.classList.add('tabs');container.classList.add('container');container.classList.add('close');container.dataset['lsUiOpen']='';container.dataset['buttonClass']='icon icon-down-dir';titles.map(function(obj,i){var title=document.createElement('li');title.innerHTML=obj.innerHTML;title.className=obj.className;title.tabIndex=0;tabs.appendChild(title);title.addEventListener('click',function(){setTab(i);});title.addEventListener('keyup',function(){if(event.which===13){setTab(i);}});});next.map(function(obj){obj.addEventListener('click',function(){setTab(position+1)});});previous.map(function(obj){obj.addEventListener('click',function(){setTab(position-1)});});setTab(position);container.appendChild(tabs);element.parentNode.insertBefore(container,element);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ls-ui-trigger',controller:function(element,document){let trigger=element.dataset['lsUiTrigger'];let event=element.dataset['event']||'click';element.addEventListener(event,function(){console.log(element,trigger);document.dispatchEvent(new CustomEvent(trigger));});}});})(window);

View file

@ -273,9 +273,9 @@ return rounded+abbr}
window.ls.container.get('view').add({selector:'data-acl',controller:function(element,document,router,alerts){document.body.classList.remove('console');document.body.classList.remove('home');document.body.classList.add(router.getCurrent().view.scope);if(!router.getCurrent().view.project){document.body.classList.add('hide-nav');document.body.classList.remove('show-nav');}
else{document.body.classList.add('show-nav');document.body.classList.remove('hide-nav');}
if('/console'===router.getCurrent().path){document.body.classList.add('index');}
else{document.body.classList.remove('index');}}}).add({selector:'data-cookie-policy',repeat:false,controller:function(element,alerts,cookie){if(!cookie.get('cookie-alert')){let text=element.dataset['cookiePolicy']||'';alerts.add({text:text,class:'cookie-alert',link:'/policy/cookies',callback:function(){cookie.set('cookie-alert','true',365*10);}},0);}}}).add({selector:'data-ls-ui-alerts',controller:function(element,window,view){window.document.addEventListener('alerted',function(){view.render(element);},true);}}).add({selector:'data-ls-ui-alerts-delete',controller:function(document,element,alerts,expression){let message=expression.parse(element.dataset['message']);let remove=function(){alerts.remove(message);};element.addEventListener('click',remove);}}).add({selector:'data-forms-headers',repeat:false,controller:function(element){let key=document.createElement('input');let value=document.createElement('input');let wrap=document.createElement('div');let cell1=document.createElement('div');let cell2=document.createElement('div');key.type='text';key.className='margin-bottom-no';key.placeholder='Key';value.type='text';value.className='margin-bottom-no';value.placeholder='Value';wrap.className='row thin margin-bottom-small';cell1.className='col span-6';cell2.className='col span-6';element.parentNode.insertBefore(wrap,element);cell1.appendChild(key);cell2.appendChild(value);wrap.appendChild(cell1);wrap.appendChild(cell2);key.addEventListener('input',function(){syncA();});value.addEventListener('input',function(){syncA();});element.addEventListener('change',function(){syncB();});let syncA=function(){element.value=key.value.toLowerCase()+':'+value.value.toLowerCase();};let syncB=function(){let split=element.value.toLowerCase().split(':');key.value=split[0]||'';value.value=split[1]||'';key.value=key.value.trim();value.value=value.value.trim();};syncB();}}).add({selector:'data-prism',repeat:false,controller:function(window,document,element,alerts){Prism.highlightElement(element);let copy=document.createElement('i');copy.className='icon-docs copy';copy.title='Copy to Clipboard';copy.addEventListener('click',function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand('copy');alerts.add({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:'error'},3000);}
window.getSelection().removeAllRanges();});element.parentNode.parentNode.appendChild(copy);}}).add({selector:'data-code-example',repeat:false,controller:function(window,document,element,cookie){let prefix=element.dataset['codeExample']||'unknown';element.addEventListener('change',function(){select(element.value);});let select=function(value){for(let i=0;i<element.length;i++){document.body.classList.remove(prefix+'-'+element.options[i].value);}
document.body.classList.add(prefix+'-'+value);cookie.set('language-'+prefix,value,365);document.dispatchEvent(new CustomEvent('updated-language-'+prefix));};document.addEventListener('updated-language-'+prefix,function(){element.value=cookie.get('language-'+prefix);});let def=cookie.get('language-'+prefix)||element.options[0].value;select(def);element.value=def;}}).add({selector:'data-ls-ui-chart',repeat:false,controller:function(element,container,date,document){let child=document.createElement('canvas');child.width=500;child.height=175;let stats=container.get('usage');if(!stats||!stats['requests']||!stats['requests']['data']){return;}
else{document.body.classList.remove('index');}}}).add({selector:'data-cookie-policy',controller:function(element,alerts,cookie){if(!cookie.get('cookie-alert')){let text=element.dataset['cookiePolicy']||'';alerts.add({text:text,class:'cookie-alert',link:'/policy/cookies',callback:function(){cookie.set('cookie-alert','true',365*10);}},0);}}}).add({selector:'data-ls-ui-alerts',controller:function(element,window,view){window.document.addEventListener('alerted',function(){view.render(element);},true);}}).add({selector:'data-ls-ui-alerts-delete',controller:function(document,element,alerts,expression){let message=expression.parse(element.dataset['message']);let remove=function(){alerts.remove(message);};element.addEventListener('click',remove);}}).add({selector:'data-forms-headers',controller:function(element){let key=document.createElement('input');let value=document.createElement('input');let wrap=document.createElement('div');let cell1=document.createElement('div');let cell2=document.createElement('div');key.type='text';key.className='margin-bottom-no';key.placeholder='Key';value.type='text';value.className='margin-bottom-no';value.placeholder='Value';wrap.className='row thin margin-bottom-small';cell1.className='col span-6';cell2.className='col span-6';element.parentNode.insertBefore(wrap,element);cell1.appendChild(key);cell2.appendChild(value);wrap.appendChild(cell1);wrap.appendChild(cell2);key.addEventListener('input',function(){syncA();});value.addEventListener('input',function(){syncA();});element.addEventListener('change',function(){syncB();});let syncA=function(){element.value=key.value.toLowerCase()+':'+value.value.toLowerCase();};let syncB=function(){let split=element.value.toLowerCase().split(':');key.value=split[0]||'';value.value=split[1]||'';key.value=key.value.trim();value.value=value.value.trim();};syncB();}}).add({selector:'data-prism',controller:function(window,document,element,alerts){Prism.highlightElement(element);let copy=document.createElement('i');copy.className='icon-docs copy';copy.title='Copy to Clipboard';copy.addEventListener('click',function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand('copy');alerts.add({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:'error'},3000);}
window.getSelection().removeAllRanges();});element.parentNode.parentNode.appendChild(copy);}}).add({selector:'data-code-example',controller:function(window,document,element,cookie){let prefix=element.dataset['codeExample']||'unknown';element.addEventListener('change',function(){select(element.value);});let select=function(value){for(let i=0;i<element.length;i++){document.body.classList.remove(prefix+'-'+element.options[i].value);}
document.body.classList.add(prefix+'-'+value);cookie.set('language-'+prefix,value,365);document.dispatchEvent(new CustomEvent('updated-language-'+prefix));};document.addEventListener('updated-language-'+prefix,function(){element.value=cookie.get('language-'+prefix);});let def=cookie.get('language-'+prefix)||element.options[0].value;select(def);element.value=def;}}).add({selector:'data-ls-ui-chart',controller:function(element,container,date,document){let child=document.createElement('canvas');child.width=500;child.height=175;let stats=container.get('usage');if(!stats||!stats['requests']||!stats['requests']['data']){return;}
let config={type:'line',data:{labels:[],datasets:[{label:'Requests',backgroundColor:'rgba(230, 248, 253, 0.3)',borderColor:'#29b5d9',borderWidth:2,data:[0,0,0,0,0,0,0],fill:true}]},options:{responsive:true,title:{display:false,text:'Stats'},legend:{display:false},tooltips:{mode:'index',intersect:false,caretPadding:0},hover:{mode:'nearest',intersect:true},scales:{xAxes:[{display:false}],yAxes:[{display:false,}]}}};for(let i=0;i<stats['requests']['data'].length;i++){config.data.datasets[0].data[i]=stats['requests']['data'][i].value;config.data.labels[i]=date.format('d F Y',stats['requests']['data'][i].date);}
let chart=container.get('chart');if(chart){}
element.innerHTML='';element.appendChild(child);container.set('chart',new Chart(child.getContext('2d'),config),true);element.dataset['canvas']=true;}});(function(window){"use strict";window.ls.view.add({selector:'data-service',controller:function(element,view,container,form,alerts,expression,window){let action=element.dataset['service'];let service=element.dataset['name']||action;let event=element.dataset['event'];let confirm=element.dataset['confirm']||'';let loading=element.dataset['loading']||'';let loaderId=null;let scope=element.dataset['scope']||'sdk';let debug=!!(element.dataset['debug']);let success=(element.dataset['success']||'');let failure=(element.dataset['failure']||'');success=(success&&success!='')?success.split(',').map(element=>element.trim()):[];failure=(failure&&failure!='')?failure.split(',').map(element=>element.trim()):[];if(debug)console.log('%c[service init]: '+action+' ('+service+')','color:red');let callbacks={'reset':function(){return function(){if('FORM'===element.tagName){return element.reset();}
@ -312,7 +312,7 @@ switch(events[y].trim()){case'load':exec();break;case'none':break;case'click':ca
if(debug)console.log('%cregistered: "'+events[y].trim()+'" ('+service+')','color:blue');}}});})(window);(function(window){"use strict";window.ls.container.get('view').add({'selector':'data-analytics-event','controller':function(element){var action=element.getAttribute('data-event-action')||'click';element.addEventListener(action,function(){var category=element.getAttribute('data-event-category')||'undefined';var label=element.getAttribute('data-event-label')||'undefined';if(!ga){console.error('Google Analytics ga object is not available');}
ga('send',{hitType:'event',eventCategory:category,eventAction:action,eventLabel:label});});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({'selector':'data-analytics-pageview','controller':function(window,router){if(!ga){console.error('Google Analytics ga object is not available');}
var company=router.params['company']||null;if(!company){}
ga('set','page',window.location.pathname);ga('set','dimension1',company);ga('send','pageview');}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-clone',repeat:false,controller:function(element,document,view){var template=element.innerHTML.toString();var label=element.dataset['label']||'Add';var icon=element.dataset['icon']||null;var target=element.dataset['target']||null;var first=parseInt(element.dataset['first']||1);var button=document.createElement('button');button.type='button';button.innerText=' '+label+' ';button.classList.add('margin-end');button.classList.add('margin-bottom-small');button.classList.add('reverse');if(icon){var iconElement=document.createElement('i');iconElement.className=icon;button.insertBefore(iconElement,button.firstChild);}
ga('set','page',window.location.pathname);ga('set','dimension1',company);ga('send','pageview');}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-clone',controller:function(element,document,view){var template=element.innerHTML.toString();var label=element.dataset['label']||'Add';var icon=element.dataset['icon']||null;var target=element.dataset['target']||null;var first=parseInt(element.dataset['first']||1);var button=document.createElement('button');button.type='button';button.innerText=' '+label+' ';button.classList.add('margin-end');button.classList.add('margin-bottom-small');button.classList.add('reverse');if(icon){var iconElement=document.createElement('i');iconElement.className=icon;button.insertBefore(iconElement,button.firstChild);}
if(target){target=document.getElementById(target);}
button.addEventListener('click',function(){var clone=document.createElement(element.tagName);if(element.name){clone.name=element.name;}
clone.innerHTML=template;clone.className=element.className;view.render(clone);if(target){target.appendChild(clone);}
@ -320,7 +320,7 @@ else{button.parentNode.insertBefore(clone,button);}
clone.querySelector('input').focus();Array.prototype.slice.call(clone.querySelectorAll('[data-remove]')).map(function(obj){obj.addEventListener('click',function(){clone.parentNode.removeChild(clone);obj.scrollIntoView({behavior:'smooth'});});});Array.prototype.slice.call(clone.querySelectorAll('[data-up]')).map(function(obj){obj.addEventListener('click',function(){if(clone.previousElementSibling){clone.parentNode.insertBefore(clone,clone.previousElementSibling);obj.scrollIntoView({behavior:'smooth'});}});});Array.prototype.slice.call(clone.querySelectorAll('[data-down]')).map(function(obj){obj.addEventListener('click',function(){if(clone.nextElementSibling){clone.parentNode.insertBefore(clone.nextElementSibling,clone);obj.scrollIntoView({behavior:'smooth'});}});});});element.parentNode.insertBefore(button,element.nextSibling);element.parentNode.removeChild(element);if(first){button.click();}}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-code',controller:function(element){let div=document.createElement('div');let pre=document.createElement('pre');let code=document.createElement('code');let copy=document.createElement('i');div.appendChild(pre);pre.appendChild(code);element.parentNode.appendChild(div);element.parentNode.appendChild(copy);div.className='ide';pre.className='line-numbers';code.className='prism language-json';copy.className='icon-docs copy';copy.title='Copy to Clipboard';copy.addEventListener('click',function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand('copy');alerts.add({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:'error'},3000);}
window.getSelection().removeAllRanges();});let check=function(){if(!element.value){return;}
let value=JSON.stringify(JSON.parse(element.value),null,4);code.innerHTML=value;Prism.highlightElement(code);div.scrollTop=0;}
element.addEventListener('change',check);check();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-color',repeat:false,controller:function(element){var preview=document.createElement('div');var picker=document.createElement('input');picker.type='color';preview.className='color-preview';preview.appendChild(picker);picker.addEventListener('change',syncA);picker.addEventListener('input',syncA);element.addEventListener('input',update);element.addEventListener('change',update);function update(){if(element.validity.valid){preview.style.background=element.value;syncB();}}
element.addEventListener('change',check);check();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-color',controller:function(element){var preview=document.createElement('div');var picker=document.createElement('input');picker.type='color';preview.className='color-preview';preview.appendChild(picker);picker.addEventListener('change',syncA);picker.addEventListener('input',syncA);element.addEventListener('input',update);element.addEventListener('change',update);function update(){if(element.validity.valid){preview.style.background=element.value;syncB();}}
function syncA(){element.value=picker.value;update();}
function syncB(){picker.value=element.value;}
element.parentNode.insertBefore(preview,element);update();syncB();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-copy',controller:function(element,alerts,document,window){var button=window.document.createElement('i');button.type='button';button.className='icon-docs note copy';button.style.cursor='pointer';element.parentNode.insertBefore(button,element.nextSibling);var copy=function(event){window.getSelection().removeAllRanges();var range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand('copy');alerts.add({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:'error'},3000);}
@ -336,19 +336,19 @@ list['filters-'+filter.key]=params[key][i];}}}}
return list;};let apply=function(params){let cached=container.get(name);cached=(cached)?cached.params:[];params=Object.assign(cached,params);container.set(name,{name:name,params:params,query:serialize(params),forward:parseInt(params.offset)+parseInt(params.limit),backward:parseInt(params.offset)-parseInt(params.limit),keys:flatten(params)},true,name);document.dispatchEvent(new CustomEvent(name+'-changed',{bubbles:false,cancelable:true}));};switch(element.tagName){case'INPUT':break;case'TEXTAREA':break;case'BUTTON':element.addEventListener('click',function(){apply(JSON.parse(expression.parse(element.dataset['params']||'{}')));});break;case'FORM':element.addEventListener('input',function(){apply(form.toJson(element));});element.addEventListener('change',function(){apply(form.toJson(element));});element.addEventListener('reset',function(){setTimeout(function(){apply(form.toJson(element));},0);});events=events.trim().split(',');for(let y=0;y<events.length;y++){if(events[y]==='init'){element.addEventListener('rendered',function(){apply(form.toJson(element));},{once:true});}
else{}
element.setAttribute('data-event','none');}
break;default:break;}}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-parent-down',repeat:false,controller:function(element){var target=element.dataset['target']||null;target=(target)?element.closest(target):element.parentNode;element.addEventListener('click',function(){if(target.nextElementSibling){target.parentNode.insertBefore(target.nextElementSibling,target);element.scrollIntoView({behavior:'smooth'});}});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-parent-remove',repeat:false,controller:function(element){var target=element.dataset['target']||null;target=(target)?element.closest(target):element.parentNode;element.addEventListener('click',function(){target.parentNode.removeChild(target);element.scrollIntoView({behavior:'smooth'});});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-parent-up',repeat:false,controller:function(element){var target=element.dataset['target']||null;target=(target)?element.closest(target):element.parentNode;element.addEventListener('click',function(){if(target.previousElementSibling){target.parentNode.insertBefore(target,target.previousElementSibling);element.scrollIntoView({behavior:'smooth'});}});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-password-meter',repeat:false,controller:function(element,window){var calc=function(password){var score=0;if(!password)
break;default:break;}}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-parent-down',controller:function(element){var target=element.dataset['target']||null;target=(target)?element.closest(target):element.parentNode;element.addEventListener('click',function(){if(target.nextElementSibling){target.parentNode.insertBefore(target.nextElementSibling,target);element.scrollIntoView({behavior:'smooth'});}});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-parent-remove',controller:function(element){var target=element.dataset['target']||null;target=(target)?element.closest(target):element.parentNode;element.addEventListener('click',function(){target.parentNode.removeChild(target);element.scrollIntoView({behavior:'smooth'});});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-parent-up',controller:function(element){var target=element.dataset['target']||null;target=(target)?element.closest(target):element.parentNode;element.addEventListener('click',function(){if(target.previousElementSibling){target.parentNode.insertBefore(target,target.previousElementSibling);element.scrollIntoView({behavior:'smooth'});}});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-password-meter',controller:function(element,window){var calc=function(password){var score=0;if(!password)
return score;var letters=new window.Object();for(var i=0;i<password.length;i++){letters[password[i]]=(letters[password[i]]||0)+1;score+=5.0/letters[password[i]];}
var variations={digits:/\d/.test(password),lower:/[a-z]/.test(password),upper:/[A-Z]/.test(password),nonWords:/\W/.test(password)};var variationCount=0;for(var check in variations){if(variations.hasOwnProperty(check)){variationCount+=(variations[check]===true)?1:0;}}
score+=(variationCount-1)*10;return parseInt(score);};var callback=function(){var score=calc(this.value);if(''===this.value)
return meter.className='password-meter';if(score>60)
return meter.className='password-meter strong';if(score>30)
return meter.className='password-meter medium';if(score>=0)
return meter.className='password-meter weak';};var meter=window.document.createElement('div');meter.className='password-meter';element.parentNode.insertBefore(meter,element.nextSibling);element.addEventListener('change',callback);element.addEventListener('keypress',callback);element.addEventListener('keyup',callback);element.addEventListener('keydown',callback);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-pell',repeat:false,controller:function(element,window,document,markdown){var div=document.createElement('div');element.className='pell hide';div.className='input pell';element.parentNode.insertBefore(div,element);element.tabIndex=-1;var turndownService=new TurndownService();turndownService.addRule('underline',{filter:['u'],replacement:function(content){return'__'+content+'__'}});var editor=window.pell.init({element:div,onChange:function onChange(html){element.value=turndownService.turndown(html);},defaultParagraphSeparator:'p',actions:[{name:'bold',icon:'<i class="icon-bold"></i>'},{name:'underline',icon:'<i class="icon-underline"></i>'},{name:'italic',icon:'<i class="icon-italic"></i>'},{name:'olist',icon:'<i class="icon-list-numbered"></i>'},{name:'ulist',icon:'<i class="icon-list-bullet"></i>'}]});element.addEventListener('change',function(){editor.content.innerHTML=markdown.render(element.value);});editor.content.setAttribute('placeholder',element.placeholder);editor.content.innerHTML=markdown.render(element.value);editor.content.tabIndex=0;editor.content.onkeydown=function preventTab(event){if(event.which===9){event.preventDefault();if(document.activeElement){var focussable=Array.prototype.filter.call(document.querySelectorAll('a:not([disabled]), button:not([disabled]), select:not([disabled]), input[type=text]:not([disabled]), input[type=checkbox]:not([disabled]), [tabindex]:not([disabled]):not([tabindex="-1"])'),function(element){return element.offsetWidth>0||element.offsetHeight>0||element===document.activeElement});var index=focussable.indexOf(document.activeElement);if(index>-1){if(event.shiftKey){var prevElement=focussable[index-1]||focussable[focussable.length-1];prevElement.focus();}
else{var nextElement=focussable[index+1]||focussable[0];nextElement.focus();}}}}};var clean=function(e){e.stopPropagation();e.preventDefault();var clipboardData=e.clipboardData||window.clipboardData;window.pell.exec('insertText',clipboardData.getData('Text'));return true;};div.addEventListener('paste',clean);div.addEventListener('drop',clean);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-remove',repeat:false,controller:function(element){Array.prototype.slice.call(element.querySelectorAll('[data-remove]')).map(function(obj){obj.addEventListener('click',function(){element.parentNode.removeChild(element);});});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-switch',repeat:false,controller:function(element){let input=window.document.createElement('input');input.type='checkbox';input.className='switch';let syncA=function(){element.value=(input.checked)?'on':'off';};let syncB=function(){input.checked=(element.value==='on');};input.addEventListener('input',syncA);input.addEventListener('change',syncA);element.addEventListener('input',syncB);element.addEventListener('change',syncB);syncA();element.parentNode.insertBefore(input,element);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-text-count',repeat:false,controller:function(element){var counter=document.createElement('span');counter.className='counter';element.parentNode.insertBefore(counter,element.nextSibling);var count=function(){if(0<=element.maxLength){counter.innerText=(element.maxLength-element.value.length).toString()+' / '+element.maxLength;}
else{var words=(element.value!=='')?element.value.trim().split(' ').length:0;counter.innerText=words+' words and '+element.value.length.toString()+' chars';}};element.addEventListener('keyup',count);element.addEventListener('change',count);element.addEventListener('cut',count);element.addEventListener('paste',count);element.addEventListener('drop',count);count();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-text-direction',repeat:false,controller:function(element){var rtlStock='^ا^ب^ت^ث^ج^ح^خ^د^ذ^ر^ز^س^ش^ص^ض^ط^ظ^ع^غ^ف^ق^ك^ل^م^ن^ه^و^ي^א^ב^ג^ד^ה^ו^ז^ח^ט^י^כ^ך^ל^מ^ם^נ^ן^ס^ע^פ^ף^צ^ץ^ק^ר^ש^ת^';var special=['\n',' ','״','"','_','\'','!','@','#','$','^','&','%','*','(',')','+','=','-','[',']','\\','/','{','}','|',':','<','>','?',',','.','0','1','2','3','4','5','6','7','8','9'];var setDirection=function(){var value=(element.value[0])?element.value:'';var direction='ltr';var align='left';for(var i=0;i<value.length;i++){if(-1===special.indexOf(value[i])){var firstChar=value[i];break;}}
return meter.className='password-meter weak';};var meter=window.document.createElement('div');meter.className='password-meter';element.parentNode.insertBefore(meter,element.nextSibling);element.addEventListener('change',callback);element.addEventListener('keypress',callback);element.addEventListener('keyup',callback);element.addEventListener('keydown',callback);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-pell',controller:function(element,window,document,markdown){var div=document.createElement('div');element.className='pell hide';div.className='input pell';element.parentNode.insertBefore(div,element);element.tabIndex=-1;var turndownService=new TurndownService();turndownService.addRule('underline',{filter:['u'],replacement:function(content){return'__'+content+'__'}});var editor=window.pell.init({element:div,onChange:function onChange(html){element.value=turndownService.turndown(html);},defaultParagraphSeparator:'p',actions:[{name:'bold',icon:'<i class="icon-bold"></i>'},{name:'underline',icon:'<i class="icon-underline"></i>'},{name:'italic',icon:'<i class="icon-italic"></i>'},{name:'olist',icon:'<i class="icon-list-numbered"></i>'},{name:'ulist',icon:'<i class="icon-list-bullet"></i>'}]});element.addEventListener('change',function(){editor.content.innerHTML=markdown.render(element.value);});editor.content.setAttribute('placeholder',element.placeholder);editor.content.innerHTML=markdown.render(element.value);editor.content.tabIndex=0;editor.content.onkeydown=function preventTab(event){if(event.which===9){event.preventDefault();if(document.activeElement){var focussable=Array.prototype.filter.call(document.querySelectorAll('a:not([disabled]), button:not([disabled]), select:not([disabled]), input[type=text]:not([disabled]), input[type=checkbox]:not([disabled]), [tabindex]:not([disabled]):not([tabindex="-1"])'),function(element){return element.offsetWidth>0||element.offsetHeight>0||element===document.activeElement});var index=focussable.indexOf(document.activeElement);if(index>-1){if(event.shiftKey){var prevElement=focussable[index-1]||focussable[focussable.length-1];prevElement.focus();}
else{var nextElement=focussable[index+1]||focussable[0];nextElement.focus();}}}}};var clean=function(e){e.stopPropagation();e.preventDefault();var clipboardData=e.clipboardData||window.clipboardData;window.pell.exec('insertText',clipboardData.getData('Text'));return true;};div.addEventListener('paste',clean);div.addEventListener('drop',clean);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-remove',controller:function(element){Array.prototype.slice.call(element.querySelectorAll('[data-remove]')).map(function(obj){obj.addEventListener('click',function(){element.parentNode.removeChild(element);});});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-switch',controller:function(element){let input=window.document.createElement('input');input.type='checkbox';input.className='switch';let syncA=function(){element.value=(input.checked)?'on':'off';};let syncB=function(){input.checked=(element.value==='on');};input.addEventListener('input',syncA);input.addEventListener('change',syncA);element.addEventListener('input',syncB);element.addEventListener('change',syncB);syncA();element.parentNode.insertBefore(input,element);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-text-count',controller:function(element){var counter=document.createElement('span');counter.className='counter';element.parentNode.insertBefore(counter,element.nextSibling);var count=function(){if(0<=element.maxLength){counter.innerText=(element.maxLength-element.value.length).toString()+' / '+element.maxLength;}
else{var words=(element.value!=='')?element.value.trim().split(' ').length:0;counter.innerText=words+' words and '+element.value.length.toString()+' chars';}};element.addEventListener('keyup',count);element.addEventListener('change',count);element.addEventListener('cut',count);element.addEventListener('paste',count);element.addEventListener('drop',count);count();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-text-direction',controller:function(element){var rtlStock='^ا^ب^ت^ث^ج^ح^خ^د^ذ^ر^ز^س^ش^ص^ض^ط^ظ^ع^غ^ف^ق^ك^ل^م^ن^ه^و^ي^א^ב^ג^ד^ה^ו^ז^ח^ט^י^כ^ך^ל^מ^ם^נ^ן^ס^ע^פ^ף^צ^ץ^ק^ר^ש^ת^';var special=['\n',' ','״','"','_','\'','!','@','#','$','^','&','%','*','(',')','+','=','-','[',']','\\','/','{','}','|',':','<','>','?',',','.','0','1','2','3','4','5','6','7','8','9'];var setDirection=function(){var value=(element.value[0])?element.value:'';var direction='ltr';var align='left';for(var i=0;i<value.length;i++){if(-1===special.indexOf(value[i])){var firstChar=value[i];break;}}
if(-1<rtlStock.indexOf('^'+firstChar+'^')){direction='rtl';align='right';}
element.style.direction=direction;element.style.textAlign=align;};element.addEventListener('keyup',setDirection);element.addEventListener('change',setDirection);element.addEventListener('cut',setDirection);element.addEventListener('paste',setDirection);element.addEventListener('drop',setDirection);setDirection();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-text-resize',repeat:false,controller:function(element,window){function resize(){var scrollLeft=window.pageXOffset||(window.document.documentElement||window.document.body.parentNode||window.document.body).scrollLeft;var scrollTop=window.pageYOffset||(window.document.documentElement||window.document.body.parentNode||window.document.body).scrollTop;var offset=element.offsetHeight-element.clientHeight;element.style.height='auto';element.style.height=element.scrollHeight+offset+'px';window.scrollTo(scrollLeft,scrollTop);}
element.addEventListener('keyup',resize);element.addEventListener('change',resize);element.addEventListener('cut',resize);element.addEventListener('paste',resize);element.addEventListener('drop',resize);window.addEventListener('resize',resize);resize();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-upload',repeat:false,controller:function(element,container,alerts,expression,env){var scope=element.dataset['scope'];var labelButton=element.dataset['labelButton']||'Upload';var labelLoading=element.dataset['labelLoading']||'Uploading...';var previewWidth=element.dataset['previewWidth']||200;var previewHeight=element.dataset['previewHeight']||200;var accept=element.dataset['accept']||'';var required=(element.dataset['required']||false);var multiple=(element.dataset['multiple']||false);var className=(element.dataset['class']||'upload');var max=parseInt((element.dataset['max']||4));var sdk=(scope==='sdk')?container.get('sdk'):container.get('console');var output=(element.value)?((multiple)?JSON.parse(element.value):[element.value]):[];var total=0;var wrapper=document.createElement('div');var input=document.createElement('input');var upload=document.createElement('div');var preview=document.createElement('ul');var progress=document.createElement('div');var count=document.createElement('div');wrapper.className=className;input.type='file';input.accept=accept;input.required=required;input.multiple=multiple;input.tabIndex=-1;count.className='count';upload.className='button reverse margin-bottom';upload.innerHTML='<i class="icon icon-upload"></i> '+labelButton;upload.tabIndex=0;preview.className='preview';progress.className='progress';progress.style.width='0%';progress.style.display='none';var humanFileSize=function(bytes,si){var thresh=si?1000:1024;if(Math.abs(bytes)<thresh){return bytes+' B';}
element.style.direction=direction;element.style.textAlign=align;};element.addEventListener('keyup',setDirection);element.addEventListener('change',setDirection);element.addEventListener('cut',setDirection);element.addEventListener('paste',setDirection);element.addEventListener('drop',setDirection);setDirection();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-text-resize',controller:function(element,window){function resize(){var scrollLeft=window.pageXOffset||(window.document.documentElement||window.document.body.parentNode||window.document.body).scrollLeft;var scrollTop=window.pageYOffset||(window.document.documentElement||window.document.body.parentNode||window.document.body).scrollTop;var offset=element.offsetHeight-element.clientHeight;element.style.height='auto';element.style.height=element.scrollHeight+offset+'px';window.scrollTo(scrollLeft,scrollTop);}
element.addEventListener('keyup',resize);element.addEventListener('change',resize);element.addEventListener('cut',resize);element.addEventListener('paste',resize);element.addEventListener('drop',resize);window.addEventListener('resize',resize);resize();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-upload',controller:function(element,container,alerts,expression,env){var scope=element.dataset['scope'];var labelButton=element.dataset['labelButton']||'Upload';var labelLoading=element.dataset['labelLoading']||'Uploading...';var previewWidth=element.dataset['previewWidth']||200;var previewHeight=element.dataset['previewHeight']||200;var accept=element.dataset['accept']||'';var required=(element.dataset['required']||false);var multiple=(element.dataset['multiple']||false);var className=(element.dataset['class']||'upload');var max=parseInt((element.dataset['max']||4));var sdk=(scope==='sdk')?container.get('sdk'):container.get('console');var output=(element.value)?((multiple)?JSON.parse(element.value):[element.value]):[];var total=0;var wrapper=document.createElement('div');var input=document.createElement('input');var upload=document.createElement('div');var preview=document.createElement('ul');var progress=document.createElement('div');var count=document.createElement('div');wrapper.className=className;input.type='file';input.accept=accept;input.required=required;input.multiple=multiple;input.tabIndex=-1;count.className='count';upload.className='button reverse margin-bottom';upload.innerHTML='<i class="icon icon-upload"></i> '+labelButton;upload.tabIndex=0;preview.className='preview';progress.className='progress';progress.style.width='0%';progress.style.display='none';var humanFileSize=function(bytes,si){var thresh=si?1000:1024;if(Math.abs(bytes)<thresh){return bytes+' B';}
var units=si?['KB','MB','GB','TB','PB','EB','ZB','YB']:['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'];var u=-1;do{bytes/=thresh;++u;}while(Math.abs(bytes)>=thresh&&u<units.length-1);return bytes.toFixed(1)+' '+units[u];};var onComplete=function(message){alerts.remove(message);input.disabled=false;upload.classList.remove('disabled');progress.style.width='0%';progress.style.display='none';};var render=function(files){if(!Array.isArray(files)){files=[files];}
preview.innerHTML='';count.innerHTML='0 / '+max;files.map(function(obj){console.log('1',obj);var file=document.createElement('li');var image=document.createElement('img');image.src=image.src=env.API+'/storage/files/'+obj+'/preview?width='+previewWidth+'&height='+previewHeight;file.className='file avatar';file.tabIndex=0;file.appendChild(image);count.innerHTML=files.length+' / '+max;preview.appendChild(file);if((files.length>=max)){input.disabled=true;upload.classList.add('disabled');}
else{input.disabled=false;upload.classList.remove('disabled');}
@ -356,7 +356,7 @@ var remove=(function(obj){return function(event){output=(Array.isArray(output))?
sdk.storage.createFile(files[0],read,write,1).then(function(response){response.map(function(obj){if(!Array.isArray(output)){throw new Error('Can\'t append new file to non array value');}
output[output.length]=obj['$uid'];});onComplete(message);render(output);},function(error){alerts.add({text:'An error occurred!',class:''},3000);onComplete(message);});input.disabled=true;});element.addEventListener('change',function(){if(!element.value){return;}
output=(multiple)?JSON.parse(element.value):[element.value];render(output);});upload.addEventListener('keypress',function(){input.click();});element.parentNode.insertBefore(wrapper,element);wrapper.appendChild(preview);wrapper.appendChild(progress);wrapper.appendChild(upload);if(multiple){wrapper.appendChild(count);}
upload.appendChild(input);render(output);}});})(window);(function(window){"use strict";window.ls.view.add({selector:'data-general-oauth',repeat:false,controller:function(element,env,expression){let provider=expression.parse(element.dataset['authOauth']||'');let success=expression.parse(element.dataset['success']||'');let failure=expression.parse(element.dataset['failure']||'');element.href=env.API+'/oauth/'+provider+'?project='+env.PROJECT
upload.appendChild(input);render(output);}});})(window);(function(window){"use strict";window.ls.view.add({selector:'data-general-oauth',controller:function(element,env,expression){let provider=expression.parse(element.dataset['authOauth']||'');let success=expression.parse(element.dataset['success']||'');let failure=expression.parse(element.dataset['failure']||'');element.href=env.API+'/oauth/'+provider+'?project='+env.PROJECT
+'&success='+encodeURIComponent(success)
+'&failure='+encodeURIComponent(failure);}});})(window);(function(window){window.ls.container.get('view').add({'selector':'data-page-title','repeat':true,'controller':function(element,document,expression){document.title=expression.parse(element.getAttribute('data-page-title'))||document.title;}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-setup',controller:function(element,console,form){element.addEventListener('submit',function(event){event.preventDefault();let formData=form.toJson(element);formData['name']=formData['name']||(element.dataset['defaultName']||'');console.teams.createTeam(formData['name']||'').then(function(data){let team=data['$uid'];formData=JSON.parse(JSON.stringify(formData).replace(new RegExp('{{teamId}}','g'),team));console.projects.createProject(formData['name'],team).then(function(project){window.location.href='/console?project='+project['$uid'];},function(){throw new Error('Failed to setup project');});},function(){throw new Error('Setup failed creating project team');});})}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-switch',controller:function(element,router,document){let check=function(c){if(!element.value){return;}
if(element.value===router.params.project){return;}
@ -372,7 +372,7 @@ element.classList.add('modal');if(!buttonAlias){buttonElements.forEach((button)=
let open=function(){document.documentElement.classList.add('modal-open');document.dispatchEvent(new CustomEvent('modal-open',{bubbles:false,cancelable:true}));element.classList.add('open');element.classList.remove('close');};let close=function(){document.documentElement.classList.remove('modal-open');element.classList.add('close');element.classList.remove('open');};if(name){document.querySelectorAll("[data-ui-modal-ref='"+name+"']").forEach(function(elem){elem.addEventListener('click',open);});}
if(openEvent){document.addEventListener(openEvent,open);}
buttonElements.forEach((button)=>{button.addEventListener('click',open);});document.addEventListener('keydown',function(event){if(event.which===27){close();}});element.addEventListener('blur',close);let closeButtons=element.querySelectorAll('[data-ui-modal-close]');for(let i=0;i<closeButtons.length;i++){closeButtons[i].addEventListener('click',close);}
document.addEventListener('modal-close',close);element.addEventListener('submit',close);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ls-ui-open',repeat:false,controller:function(element,window){let def=(element.classList.contains('open'))?'open':'close';let buttonClass=element.dataset['buttonClass']||'ls-ui-open';let buttonText=element.dataset['buttonText']||'';let buttonIcon=element.dataset['buttonIcon']||'';let hover=element.hasAttribute('data-hover');let blur=element.hasAttribute('data-blur');let button=window.document.createElement('button');let isTouch=function(){return'ontouchstart'in window||navigator.maxTouchPoints;};button.innerText=buttonText;button.className=buttonClass;button.tabIndex=1;button.type='button';if(buttonIcon){let icon=window.document.createElement('i');icon.className=buttonIcon;button.insertBefore(icon,button.firstChild);}
document.addEventListener('modal-close',close);element.addEventListener('submit',close);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ls-ui-open',controller:function(element,window){let def=(element.classList.contains('open'))?'open':'close';let buttonClass=element.dataset['buttonClass']||'ls-ui-open';let buttonText=element.dataset['buttonText']||'';let buttonIcon=element.dataset['buttonIcon']||'';let hover=element.hasAttribute('data-hover');let blur=element.hasAttribute('data-blur');let button=window.document.createElement('button');let isTouch=function(){return'ontouchstart'in window||navigator.maxTouchPoints;};button.innerText=buttonText;button.className=buttonClass;button.tabIndex=1;button.type='button';if(buttonIcon){let icon=window.document.createElement('i');icon.className=buttonIcon;button.insertBefore(icon,button.firstChild);}
if(def==='close'){element.classList.add('close');element.classList.remove('open');}
else{element.classList.add('open');element.classList.remove('close');}
button.addEventListener('click',function(){element.classList.toggle('open');element.classList.toggle('close');});if(hover&&!isTouch()){element.addEventListener('mouseover',function(){element.classList.add('open');element.classList.remove('close');});element.addEventListener('mouseout',function(){element.classList.add('close');element.classList.remove('open');});}
@ -381,7 +381,6 @@ while(el=el.parentNode){if((el.nodeName||el.tagName).toLowerCase()===tagName.toL
return null;};if(blur){button.addEventListener('blur',closeDelay);}
element.addEventListener('click',function(event){let target=findParent('a',event.target);if(!target){return false;}
if(!target.href){return false;}
closeDelay();});element.insertBefore(button,element.firstChild);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ls-ui-paging',repeat:true,controller:function(document,element,expression){var sum=expression.parse(element.dataset['sum'])||0;var offset=expression.parse(element.dataset['offset'])||0;var limit=expression.parse(element.dataset['limit'])||0;if(offset===0||limit===0){element.innerHTML='1 / 1';return true;}
var total=Math.ceil(sum/limit);var current=Math.ceil(offset/limit)+1;element.innerHTML=(total>0)?current+' / '+total:'';}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ui-phases',controller:function(element,window,document,expression,router){var tabs=document.createElement('ul');var container=document.createElement('div');var titles=Array.prototype.slice.call(element.getElementsByTagName('h2'));var next=Array.prototype.slice.call(element.querySelectorAll('[data-next]'));var previous=Array.prototype.slice.call(element.querySelectorAll('[data-previous]'));var position=0;var init=false;for(var i=0;i<element.children.length;i++){var tabState=expression.parse(element.children[i].dataset['state']||'');if(tabState===(window.location.pathname+window.location.search).substring(0,tabState.length)){position=i;}}
closeDelay();});element.insertBefore(button,element.firstChild);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ui-phases',controller:function(element,window,document,expression,router){var tabs=document.createElement('ul');var container=document.createElement('div');var titles=Array.prototype.slice.call(element.getElementsByTagName('h2'));var next=Array.prototype.slice.call(element.querySelectorAll('[data-next]'));var previous=Array.prototype.slice.call(element.querySelectorAll('[data-previous]'));var position=0;var init=false;for(var i=0;i<element.children.length;i++){var tabState=expression.parse(element.children[i].dataset['state']||'');if(tabState===(window.location.pathname+window.location.search).substring(0,tabState.length)){position=i;}}
var setTab=function(index){var tabState=expression.parse(element.children[index].dataset['state']||'');var url='';if((tabState!=='')&&(tabState!==window.location.pathname+window.location.search)){var parser=document.createElement('a');parser.href=tabState;url=(!init)?parser.pathname+window.location.search:tabState;console.log(parser.pathname+window.location.search,tabState);if(position!=index){window.history.pushState({},'',url);router.reset();}}
element.children[position].classList.remove('selected');element.children[index].classList.add('selected');tabs.children[position].classList.remove('selected');tabs.children[index].classList.add('selected');position=index;document.dispatchEvent(new CustomEvent('tab-changed'));init=true;};tabs.classList.add('tabs');container.classList.add('container');container.classList.add('close');container.dataset['lsUiOpen']='';container.dataset['buttonClass']='icon icon-down-dir';titles.map(function(obj,i){var title=document.createElement('li');title.innerHTML=obj.innerHTML;title.className=obj.className;title.tabIndex=0;tabs.appendChild(title);title.addEventListener('click',function(){setTab(i);});title.addEventListener('keyup',function(){if(event.which===13){setTab(i);}});});next.map(function(obj){obj.addEventListener('click',function(){setTab(position+1)});});previous.map(function(obj){obj.addEventListener('click',function(){setTab(position-1)});});setTab(position);container.appendChild(tabs);element.parentNode.insertBefore(container,element);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ls-ui-trigger',repeat:false,controller:function(element,document){let trigger=element.dataset['lsUiTrigger'];let event=element.dataset['event']||'click';element.addEventListener(event,function(){console.log(element,trigger);document.dispatchEvent(new CustomEvent(trigger));});}});})(window);
element.children[position].classList.remove('selected');element.children[index].classList.add('selected');tabs.children[position].classList.remove('selected');tabs.children[index].classList.add('selected');position=index;document.dispatchEvent(new CustomEvent('tab-changed'));init=true;};tabs.classList.add('tabs');container.classList.add('container');container.classList.add('close');container.dataset['lsUiOpen']='';container.dataset['buttonClass']='icon icon-down-dir';titles.map(function(obj,i){var title=document.createElement('li');title.innerHTML=obj.innerHTML;title.className=obj.className;title.tabIndex=0;tabs.appendChild(title);title.addEventListener('click',function(){setTab(i);});title.addEventListener('keyup',function(){if(event.which===13){setTab(i);}});});next.map(function(obj){obj.addEventListener('click',function(){setTab(position+1)});});previous.map(function(obj){obj.addEventListener('click',function(){setTab(position-1)});});setTab(position);container.appendChild(tabs);element.parentNode.insertBefore(container,element);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ls-ui-trigger',controller:function(element,document){let trigger=element.dataset['lsUiTrigger'];let event=element.dataset['event']||'click';element.addEventListener(event,function(){console.log(element,trigger);document.dispatchEvent(new CustomEvent(trigger));});}});})(window);