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

Minor updates

This commit is contained in:
eldadfux 2019-08-07 16:02:14 +03:00
parent b2bc28804c
commit 8fdc48a577
7 changed files with 41 additions and 137 deletions

View file

@ -154,7 +154,7 @@ use Utopia\Locale\Locale;
</span>
<div class="note info margin-top-small">
<img data-ls-attrs="src={{env.API}}/v1/avatars/flags/{{session.geo.isoCode}}?width=80&height=80" class="avatar xs margin-end-small inline" />
<img data-ls-attrs="src={{env.API}}/avatars/flags/{{session.geo.isoCode}}?width=80&height=80" class="avatar xs margin-end-small inline" />
<small data-ls-bind="{{session.ip}}"></small> / <small data-ls-bind="{{session.geo.country}}"></small>
</div>
</li>
@ -187,11 +187,11 @@ use Utopia\Locale\Locale;
<td data-title="<?php echo $this->escape(Locale::getText('console.account.section.security.recent-activity.date')); ?>: "><span data-ls-bind="{{log.time|date-time}}"></span></td>
<td data-title="<?php echo $this->escape(Locale::getText('console.account.section.security.recent-activity.event')); ?>: "><span data-ls-bind="{{log.event}}"></span></td>
<td data-title="<?php echo $this->escape(Locale::getText('console.account.section.security.recent-activity.client')); ?>: ">
<img data-ls-attrs="src={{env.API}}/v1/avatars/browsers/{{log.client.short_name|lowerCase}}?width=80&height=80,title={{log.client.name}},alt={{log.client.name}}" class="avatar xs inline margin-end-small" />
<img data-ls-attrs="src={{env.API}}/avatars/browsers/{{log.client.short_name|lowerCase}}?width=80&height=80,title={{log.client.name}},alt={{log.client.name}}" class="avatar xs inline margin-end-small" />
<span data-ls-bind="{{log.client.name}} {{log.client.version}} on {{log.model}} {{log.OS.name}} {{log.OS.version}}"></span>
</td>
<td data-title="<?php echo $this->escape(Locale::getText('console.account.section.security.recent-activity.location')); ?>: ">
<img data-ls-attrs="src={{env.API}}/v1/avatars/flags/{{log.geo.isoCode}}?width=80&height=80" class="avatar xs inline margin-end-small" />
<img data-ls-attrs="src={{env.API}}/avatars/flags/{{log.geo.isoCode}}?width=80&height=80" class="avatar xs inline margin-end-small" />
<span data-ls-bind="{{log.geo.country}}"></span>
</td>
<td data-title="<?php echo $this->escape(Locale::getText('console.account.section.security.recent-activity.ip')); ?>: "><span data-ls-bind="{{log.ip}}"></span></td>

View file

@ -1,7 +1,7 @@
<footer class="clear margin-top-xl">
<ul class="copyright pull-start">
<li>
<a href="https://github.com/appwrite" target="_blank">Github Project</a>
<a href="https://github.com/appwrite" target="_blank">Github Repository</a>
</li>
<li>
<a href="https://github.com/appwrite/appwrite/issues/new?body=%0A%0A%0A---%0AAppwrite Version:%20<?php echo VERSION; ?>" target="_blank">Open an Issue</a>

View file

@ -88,7 +88,7 @@ $graph = $this->getParam('graph', false);
<div xdata-ls-template="template-{{platform.type}}-update" data-type="script"></div>
</div>
<form class="pull-end margin-end" data-service="projects.deletePlatform" data-scope="console" data-event="submit" data-confirm="Are you sure you want to delete this platform?" data-success="alert" data-success-alert-text="Deleted platform successfully" data-error="alert" data-error-alert-text="Failed to delete platform">
<form class="pull-end margin-end" data-service="projects.deletePlatform" data-scope="console" data-event="submit" data-confirm="Are you sure you want to delete this platform?" data-success="alert" data-success-param-alert-text="Deleted platform successfully" data-error="alert" data-failure-param-alert-text="Failed to delete platform">
<input type="hidden" name="projectId" data-ls-bind="{{console-project.$uid}}">
<input type="hidden" name="platformId" data-ls-bind="{{platform.$uid}}">
@ -138,7 +138,7 @@ $graph = $this->getParam('graph', false);
<h1>New Website</h1>
<form data-service="projects.createPlatform" data-scope="console" data-event="submit" data-success="alert,trigger,reset" data-success-alert="Created new platform successfully" data-success-triggers="platform.new,modal-close" data-error="alert" data-error-alert="Failed to create platform">
<form data-service="projects.createPlatform" data-scope="console" data-event="submit" data-success="alert,reload,reset" data-success-alert="Created new platform successfully" data-success-triggers="platform.new,modal-close" data-error="alert" data-error-alert="Failed to create platform">
<input type="hidden" name="projectId" data-ls-bind="{{console-project.$uid}}">
<input type="hidden" name="type" data-ls-bind="web">

View file

@ -2365,22 +2365,21 @@ 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('cp-cookie-alert')){let text=element.dataset['cookiePolicy']||'';alerts.send({text:text,class:'cookie-alert',link:'/policy/cookies',remove:function(){cookie.set('cp-cookie-alert','true',365*10);}},0);}}}).add({selector:'data-billing-invoice-print',controller:function(element,expression,sdk){let id=expression.parse(element.dataset['billingInvoicePrint']||'');element.href=sdk.billing.invoices.getForPrint(id);}}).add({selector:'data-billing-invoice-download',controller:function(element,expression,sdk){let id=expression.parse(element.dataset['billingInvoiceDownload']||'');element.href=sdk.billing.invoices.getForDownload(id);}}).add({selector:'data-auto-cc-master',controller:function(element,expression,document){let price=parseInt(expression.parse(element.dataset['autoCcMaster']||'0'));let check=function(){if(element.checked&&0===price){document.body.classList.add('free-plan');document.dispatchEvent(new CustomEvent('set-free-plan',{bubbles:false,cancelable:true}));}
else if(element.checked){document.body.classList.remove('free-plan');document.dispatchEvent(new CustomEvent('unset-free-plan',{bubbles:false,cancelable:true}));}};element.addEventListener('change',check);check();}}).add({selector:'data-auto-cc-slave',controller:function(element){document.addEventListener('set-free-plan',function(){element.checked=true;});document.addEventListener('unset-free-plan',function(){element.checked=false;});}}).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-ls-ui-chart-line',repeat:true,controller:function(element,document,expression){new Chartist.Line(element,{labels:['16.05','17.05','18.05','19.05','20.05'],series:[[12,9,7,8,5],[2,1,3.5,7,3],[1,3,4,5,6],[2,6,10,5,9],[3,1,1,8,3]]},{height:'300px',width:'100%',fullWidth:true,showArea:true,chartPadding:{right:30}});}}).add({selector:'data-ls-ui-chart-pie',repeat:true,controller:function(element,document,expression){new Chartist.Pie(element,{series:[20,10,30,40]},{donut:true,donutSolid:true,showLabel:true});}}).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.send({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.send({text:"Failed to copy text ",class:'error'},3000);}
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.send({text:text,class:'cookie-alert',link:'/policy/cookies',remove: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.send({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.send({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;}
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.container.get('view').add({selector:'data-service',repeat:false,controller:function(element,view,container,form,alerts,expression,window,router){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 callback=(element.dataset['callbacks']||'');callback=(callback&&callback!='')?callback.trim().split(','):[];if(debug)console.log('%c[service init]: '+action+' ('+service+')','color:red');let callbacks={'reset':function(){return function(){if('FORM'===element.tagName){return element.reset();}
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.container.get('view').add({selector:'data-service',repeat:false,controller:function(element,view,container,form,alerts,expression,window,router){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.trim().split(','):[];failure=(failure&&failure!='')?failure.trim().split(','):[];if(debug)console.log('%c[service init]: '+action+' ('+service+')','color:red');let callbacks={'reset':function(){return function(){if('FORM'===element.tagName){return element.reset();}
throw new Error('This callback is only valid for forms');}},'alert':function(text){return function(alerts){alerts.send({text:text,class:'success'},3000);}},'redirect':function(){return function(router){let url=expression.parse(element.dataset['successRedirectUrl'])||'/';router.change(url);}},'reload':function(){return function(router){router.reload();}},};let getParams=function getParams(func){const REGEX_COMMENTS=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;const REGEX_FUNCTION_PARAMS=/(?:\s*(?:function\s*[^(]*)?\s*)((?:[^'"]|(?:(?:(['"])(?:(?:.*?[^\\]\2)|\2))))*?)\s*(?=(?:=>)|{)/m;const REGEX_PARAMETERS_VALUES=/\s*([\w\\$]+)\s*(?:=\s*((?:(?:(['"])(?:\3|(?:.*?[^\\]\3)))((\s*\+\s*)(?:(?:(['"])(?:\6|(?:.*?[^\\]\6)))|(?:[\w$]*)))*)|.*?))?\s*(?:,|$)/gm;let functionAsString=func.toString();let params=[];let match;functionAsString=functionAsString.replace(REGEX_COMMENTS,'');functionAsString=functionAsString.match(REGEX_FUNCTION_PARAMS)[1];if(functionAsString.charAt(0)==='('){functionAsString=functionAsString.slice(1,-1);}
while(match=REGEX_PARAMETERS_VALUES.exec(functionAsString)){params.push(match[1]);}
return params;}
let resolve=function(target,prefix='param',data={}){let args=getParams(target);if(debug)console.log('%c[form data]: ','color:green',data);return target.apply(target,args.map(function(value){let result=null;if(!value){return null;}
console.log(prefix+value.charAt(0).toUpperCase()+value.slice(1))
let resolve=function(target,prefix='param',data={}){if(!target){return function(){};}
let args=getParams(target);if(debug)console.log('%c[form data]: ','color:green',data);return target.apply(target,args.map(function(value){let result=null;if(!value){return null;}
if(element.dataset[prefix+value.charAt(0).toUpperCase()+value.slice(1)]){result=expression.parse(element.dataset[prefix+value.charAt(0).toUpperCase()+value.slice(1)]);}
if(data[value]){result=data[value];}
if(!result){result='';}
if(debug)console.log('%c[param resolved]: ('+service+') '+value+'='+result,'color:#808080');console.log(result);return result;}));};let exec=function(event){element.$lsSkip=true;if(debug)console.log('%c[executed]: '+scope+'.'+action,'color:yellow',event,element,document.body.contains(element));if(!document.body.contains(element)){element=undefined;return false;}
if(debug)console.log('%c[param resolved]: ('+service+') '+value+'='+result,'color:#808080');return result;}));};let exec=function(event){element.$lsSkip=true;if(debug)console.log('%c[executed]: '+scope+'.'+action,'color:yellow',event,element,document.body.contains(element));if(!document.body.contains(element)){element=undefined;return false;}
if(event){event.preventDefault();}
if(confirm){if(window.confirm(confirm)!==true){return false;}}
if(loading){loaderId=alerts.send({text:loading,class:''},0);}
@ -2388,11 +2387,10 @@ let method=container.path(scope+'.'+action);if(!method){throw new Error('Method
let result=resolve(method,'param',('FORM'===element.tagName)?form.toJson(element):{});if(!result){return;}
result.then(function(data){if(loaderId!==null){alerts.remove(loaderId);}
if(!element){return;}
try{container.set(service.replace('.','-'),data,true,true);if(debug)console.log('%cservice ready: "'+service.replace('.','-')+'"','color:green');if(debug)console.log('%cservice:','color:blue',container.get(service.replace('.','-')));}catch(e){container.set(service.replace('.','-'),{},true);}
for(let i=0;i<callback.length;i++){container.resolve(resolve(callbacks[callback[i]],'successParam'+callback[i].charAt(0).toUpperCase()+callback[i].slice(1),{}));}
container.set(service.replace('.','-'),data,true,true);if(debug)console.log('%cservice ready: "'+service.replace('.','-')+'"','color:green');if(debug)console.log('%cservice:','color:blue',container.get(service.replace('.','-')));for(let i=0;i<success.length;i++){container.resolve(resolve(callbacks[success[i]],'successParam'+success[i].charAt(0).toUpperCase()+success[i].slice(1),{}));}
element.$lsSkip=false;view.render(element);},function(exception){if(loaderId!==null){alerts.remove(loaderId);}
if(!element){return;}
for(let i=0;i<callback.length;i++){container.resolve(resolve(callbacks[callback[i]],'failureParam',{}));}
for(let i=0;i<failure.length;i++){container.resolve(resolve(callbacks[failure[i]],'failureParam'+failure[i].charAt(0).toUpperCase()+failure[i].slice(1),{}));}
element.$lsSkip=false;view.render(element);});};let events=event.trim().split(',');for(let y=0;y<events.length;y++){if(''===events[y]){continue;}
switch(events[y].trim()){case'load':exec();break;case'none':break;case'click':case'change':case'keypress':case'keydown':case'keyup':case'input':case'submit':element.addEventListener(events[y],exec);break;default:document.addEventListener(events[y],exec);}
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');}

View file

@ -272,22 +272,21 @@ 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('cp-cookie-alert')){let text=element.dataset['cookiePolicy']||'';alerts.send({text:text,class:'cookie-alert',link:'/policy/cookies',remove:function(){cookie.set('cp-cookie-alert','true',365*10);}},0);}}}).add({selector:'data-billing-invoice-print',controller:function(element,expression,sdk){let id=expression.parse(element.dataset['billingInvoicePrint']||'');element.href=sdk.billing.invoices.getForPrint(id);}}).add({selector:'data-billing-invoice-download',controller:function(element,expression,sdk){let id=expression.parse(element.dataset['billingInvoiceDownload']||'');element.href=sdk.billing.invoices.getForDownload(id);}}).add({selector:'data-auto-cc-master',controller:function(element,expression,document){let price=parseInt(expression.parse(element.dataset['autoCcMaster']||'0'));let check=function(){if(element.checked&&0===price){document.body.classList.add('free-plan');document.dispatchEvent(new CustomEvent('set-free-plan',{bubbles:false,cancelable:true}));}
else if(element.checked){document.body.classList.remove('free-plan');document.dispatchEvent(new CustomEvent('unset-free-plan',{bubbles:false,cancelable:true}));}};element.addEventListener('change',check);check();}}).add({selector:'data-auto-cc-slave',controller:function(element){document.addEventListener('set-free-plan',function(){element.checked=true;});document.addEventListener('unset-free-plan',function(){element.checked=false;});}}).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-ls-ui-chart-line',repeat:true,controller:function(element,document,expression){new Chartist.Line(element,{labels:['16.05','17.05','18.05','19.05','20.05'],series:[[12,9,7,8,5],[2,1,3.5,7,3],[1,3,4,5,6],[2,6,10,5,9],[3,1,1,8,3]]},{height:'300px',width:'100%',fullWidth:true,showArea:true,chartPadding:{right:30}});}}).add({selector:'data-ls-ui-chart-pie',repeat:true,controller:function(element,document,expression){new Chartist.Pie(element,{series:[20,10,30,40]},{donut:true,donutSolid:true,showLabel:true});}}).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.send({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.send({text:"Failed to copy text ",class:'error'},3000);}
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.send({text:text,class:'cookie-alert',link:'/policy/cookies',remove: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.send({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.send({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;}
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.container.get('view').add({selector:'data-service',repeat:false,controller:function(element,view,container,form,alerts,expression,window,router){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 callback=(element.dataset['callbacks']||'');callback=(callback&&callback!='')?callback.trim().split(','):[];if(debug)console.log('%c[service init]: '+action+' ('+service+')','color:red');let callbacks={'reset':function(){return function(){if('FORM'===element.tagName){return element.reset();}
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.container.get('view').add({selector:'data-service',repeat:false,controller:function(element,view,container,form,alerts,expression,window,router){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.trim().split(','):[];failure=(failure&&failure!='')?failure.trim().split(','):[];if(debug)console.log('%c[service init]: '+action+' ('+service+')','color:red');let callbacks={'reset':function(){return function(){if('FORM'===element.tagName){return element.reset();}
throw new Error('This callback is only valid for forms');}},'alert':function(text){return function(alerts){alerts.send({text:text,class:'success'},3000);}},'redirect':function(){return function(router){let url=expression.parse(element.dataset['successRedirectUrl'])||'/';router.change(url);}},'reload':function(){return function(router){router.reload();}},};let getParams=function getParams(func){const REGEX_COMMENTS=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;const REGEX_FUNCTION_PARAMS=/(?:\s*(?:function\s*[^(]*)?\s*)((?:[^'"]|(?:(?:(['"])(?:(?:.*?[^\\]\2)|\2))))*?)\s*(?=(?:=>)|{)/m;const REGEX_PARAMETERS_VALUES=/\s*([\w\\$]+)\s*(?:=\s*((?:(?:(['"])(?:\3|(?:.*?[^\\]\3)))((\s*\+\s*)(?:(?:(['"])(?:\6|(?:.*?[^\\]\6)))|(?:[\w$]*)))*)|.*?))?\s*(?:,|$)/gm;let functionAsString=func.toString();let params=[];let match;functionAsString=functionAsString.replace(REGEX_COMMENTS,'');functionAsString=functionAsString.match(REGEX_FUNCTION_PARAMS)[1];if(functionAsString.charAt(0)==='('){functionAsString=functionAsString.slice(1,-1);}
while(match=REGEX_PARAMETERS_VALUES.exec(functionAsString)){params.push(match[1]);}
return params;}
let resolve=function(target,prefix='param',data={}){let args=getParams(target);if(debug)console.log('%c[form data]: ','color:green',data);return target.apply(target,args.map(function(value){let result=null;if(!value){return null;}
console.log(prefix+value.charAt(0).toUpperCase()+value.slice(1))
let resolve=function(target,prefix='param',data={}){if(!target){return function(){};}
let args=getParams(target);if(debug)console.log('%c[form data]: ','color:green',data);return target.apply(target,args.map(function(value){let result=null;if(!value){return null;}
if(element.dataset[prefix+value.charAt(0).toUpperCase()+value.slice(1)]){result=expression.parse(element.dataset[prefix+value.charAt(0).toUpperCase()+value.slice(1)]);}
if(data[value]){result=data[value];}
if(!result){result='';}
if(debug)console.log('%c[param resolved]: ('+service+') '+value+'='+result,'color:#808080');console.log(result);return result;}));};let exec=function(event){element.$lsSkip=true;if(debug)console.log('%c[executed]: '+scope+'.'+action,'color:yellow',event,element,document.body.contains(element));if(!document.body.contains(element)){element=undefined;return false;}
if(debug)console.log('%c[param resolved]: ('+service+') '+value+'='+result,'color:#808080');return result;}));};let exec=function(event){element.$lsSkip=true;if(debug)console.log('%c[executed]: '+scope+'.'+action,'color:yellow',event,element,document.body.contains(element));if(!document.body.contains(element)){element=undefined;return false;}
if(event){event.preventDefault();}
if(confirm){if(window.confirm(confirm)!==true){return false;}}
if(loading){loaderId=alerts.send({text:loading,class:''},0);}
@ -295,11 +294,10 @@ let method=container.path(scope+'.'+action);if(!method){throw new Error('Method
let result=resolve(method,'param',('FORM'===element.tagName)?form.toJson(element):{});if(!result){return;}
result.then(function(data){if(loaderId!==null){alerts.remove(loaderId);}
if(!element){return;}
try{container.set(service.replace('.','-'),data,true,true);if(debug)console.log('%cservice ready: "'+service.replace('.','-')+'"','color:green');if(debug)console.log('%cservice:','color:blue',container.get(service.replace('.','-')));}catch(e){container.set(service.replace('.','-'),{},true);}
for(let i=0;i<callback.length;i++){container.resolve(resolve(callbacks[callback[i]],'successParam'+callback[i].charAt(0).toUpperCase()+callback[i].slice(1),{}));}
container.set(service.replace('.','-'),data,true,true);if(debug)console.log('%cservice ready: "'+service.replace('.','-')+'"','color:green');if(debug)console.log('%cservice:','color:blue',container.get(service.replace('.','-')));for(let i=0;i<success.length;i++){container.resolve(resolve(callbacks[success[i]],'successParam'+success[i].charAt(0).toUpperCase()+success[i].slice(1),{}));}
element.$lsSkip=false;view.render(element);},function(exception){if(loaderId!==null){alerts.remove(loaderId);}
if(!element){return;}
for(let i=0;i<callback.length;i++){container.resolve(resolve(callbacks[callback[i]],'failureParam',{}));}
for(let i=0;i<failure.length;i++){container.resolve(resolve(callbacks[failure[i]],'failureParam'+failure[i].charAt(0).toUpperCase()+failure[i].slice(1),{}));}
element.$lsSkip=false;view.render(element);});};let events=event.trim().split(',');for(let y=0;y<events.length;y++){if(''===events[y]){continue;}
switch(events[y].trim()){case'load':exec();break;case'none':break;case'click':case'change':case'keypress':case'keydown':case'keyup':case'input':case'submit':element.addEventListener(events[y],exec);break;default:document.addEventListener(events[y],exec);}
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');}

View file

@ -33,69 +33,15 @@ window.ls.container.get('view')
selector: 'data-cookie-policy',
repeat: false,
controller: function(element, alerts, cookie) {
if(!cookie.get('cp-cookie-alert')) {
if(!cookie.get('cookie-alert')) {
let text = element.dataset['cookiePolicy'] || '';
alerts.send({text: text, class: 'cookie-alert', link: '/policy/cookies', remove: function () {
cookie.set('cp-cookie-alert', 'true', 365 * 10); // 10 years
}}, 0);
cookie.set('cookie-alert', 'true', 365 * 10); // 10 years
}}, 0);
}
}
})
.add({
selector: 'data-billing-invoice-print',
controller: function(element, expression, sdk) {
let id = expression.parse(element.dataset['billingInvoicePrint'] || '');
element.href = sdk.billing.invoices.getForPrint(id);
}
})
.add({
selector: 'data-billing-invoice-download',
controller: function(element, expression, sdk) {
let id = expression.parse(element.dataset['billingInvoiceDownload'] || '');
element.href = sdk.billing.invoices.getForDownload(id);
}
})
.add({
selector: 'data-auto-cc-master',
controller: function(element, expression, document) {
let price = parseInt(expression.parse(element.dataset['autoCcMaster'] || '0'));
let check = function () {
if(element.checked && 0 === price) {
document.body.classList.add('free-plan');
document.dispatchEvent(new CustomEvent('set-free-plan', {
bubbles: false,
cancelable: true
}));
}
else if(element.checked) {
document.body.classList.remove('free-plan');
document.dispatchEvent(new CustomEvent('unset-free-plan', {
bubbles: false,
cancelable: true
}));
}
};
element.addEventListener('change', check);
check();
}
})
.add({
selector: 'data-auto-cc-slave',
controller: function(element) {
document.addEventListener('set-free-plan', function () {
element.checked = true;
});
document.addEventListener('unset-free-plan', function () {
element.checked = false;
});
}
})
.add({
selector: 'data-ls-ui-alerts',
controller: function(element, window, view) {
@ -116,46 +62,6 @@ window.ls.container.get('view')
element.addEventListener('click', remove);
}
})
.add({
selector: 'data-ls-ui-chart-line',
repeat: true,
controller: function(element, document, expression) {
new Chartist.Line(element, {
labels: ['16.05', '17.05', '18.05', '19.05', '20.05'],
series: [
[12, 9, 7, 8, 5],
[2, 1, 3.5, 7, 3],
[1, 3, 4, 5, 6],
[2, 6, 10, 5, 9],
[3, 1, 1, 8, 3]
]
}, {
height: '300px',
width: '100%',
fullWidth: true,
showArea: true,
//showPoint: false,
chartPadding: {
right: 30
}
});
}
})
.add({
selector: 'data-ls-ui-chart-pie',
repeat: true,
controller: function(element, document, expression) {
new Chartist.Pie(element, {
series: [20, 10, 30, 40]
}, {
donut: true,
donutSolid: true,
showLabel: true
});
}
})
.add({
selector: 'data-forms-headers',
repeat: false,

View file

@ -14,9 +14,11 @@
let loaderId = null;
let scope = element.dataset['scope'] || 'sdk'; // Free text
let debug = !!(element.dataset['debug']); // Free text
let callback = (element.dataset['callbacks'] || '');
let success = (element.dataset['success'] || '');
let failure = (element.dataset['failure'] || '');
callback = (callback && callback != '') ? callback.trim().split(',') : [];
success = (success && success != '') ? success.trim().split(',') : [];
failure = (failure && failure != '') ? failure.trim().split(',') : [];
if (debug) console.log('%c[service init]: ' + action + ' (' + service + ')', 'color:red');
@ -113,6 +115,10 @@
}
let resolve = function(target, prefix = 'param', data = {}) {
if (!target) {
return function() {};
}
let args = getParams(target);
if (debug) console.log('%c[form data]: ', 'color:green', data);
@ -129,7 +135,6 @@
* 2. Get from element data-param-state-*
* 3. Get from element form object-*
*/
console.log(prefix + value.charAt(0).toUpperCase() + value.slice(1))
if(element.dataset[prefix + value.charAt(0).toUpperCase() + value.slice(1)]) {
result = expression.parse(element.dataset[prefix + value.charAt(0).toUpperCase() + value.slice(1)]);
}
@ -143,7 +148,7 @@
}
if (debug) console.log('%c[param resolved]: (' + service + ') ' + value + '=' + result, 'color:#808080');
console.log(result);
return result;
}));
};
@ -194,16 +199,13 @@ console.log(result);
return;
}
try {
container.set(service.replace('.', '-'), data, true, true);
if (debug) console.log('%cservice ready: "' + service.replace('.', '-') + '"', 'color:green');
if (debug) console.log('%cservice:', 'color:blue', container.get(service.replace('.', '-')));
} catch (e) {
container.set(service.replace('.', '-'), {}, true);
}
container.set(service.replace('.', '-'), data, true, true);
if (debug) console.log('%cservice ready: "' + service.replace('.', '-') + '"', 'color:green');
if (debug) console.log('%cservice:', 'color:blue', container.get(service.replace('.', '-')));
for (let i = 0; i < callback.length; i++) { // Trigger success callbacks
container.resolve(resolve(callbacks[callback[i]], 'successParam' + callback[i].charAt(0).toUpperCase() + callback[i].slice(1), {}));
for (let i = 0; i < success.length; i++) { // Trigger success callbacks
container.resolve(resolve(callbacks[success[i]], 'successParam' + success[i].charAt(0).toUpperCase() + success[i].slice(1), {}));
}
element.$lsSkip = false;
@ -217,9 +219,9 @@ console.log(result);
if(!element) {
return;
}
for (let i = 0; i < callback.length; i++) { // Trigger success callbacks
container.resolve(resolve(callbacks[callback[i]], 'failureParam', {}));
for (let i = 0; i < failure.length; i++) { // Trigger success callbacks
container.resolve(resolve(callbacks[failure[i]], 'failureParam' + failure[i].charAt(0).toUpperCase() + failure[i].slice(1), {}));
}
element.$lsSkip = false;