Updated ls-if version
This commit is contained in:
parent
9f96d93acc
commit
a430d9a25e
|
@ -178,7 +178,7 @@ use Utopia\Locale\Locale;
|
|||
|
||||
<ul data-ls-loop="sessions" data-ls-as="session" class="list">
|
||||
<li class="clear">
|
||||
<span data-ls-if="true != '{{session.current}}'" style="display: none;"> <!-- From remote session (-logout event) -->
|
||||
<span data-ls-if="true != {{session.current}}" style="display: none;"> <!-- From remote session (-logout event) -->
|
||||
<form class="pull-end"
|
||||
data-appwrite="auth.logoutById"
|
||||
data-scope="console"
|
||||
|
@ -193,7 +193,7 @@ use Utopia\Locale\Locale;
|
|||
</form>
|
||||
</span>
|
||||
|
||||
<span data-ls-if="true == '{{session.current}}'" style="display: none;"> <!-- From current session (+logout event) -->
|
||||
<span data-ls-if="true == {{session.current}}" style="display: none;"> <!-- From current session (+logout event) -->
|
||||
<form class="pull-end"
|
||||
data-appwrite="auth.logoutById"
|
||||
data-scope="console"
|
||||
|
|
|
@ -106,7 +106,7 @@ use Utopia\Locale\Locale;
|
|||
data-singleton="true">
|
||||
</div>
|
||||
|
||||
<div data-ls-if="({{router.params.project}} != undefined)" data-debug="1">
|
||||
<div data-ls-if="({{router.params.project}} != undefined)">
|
||||
<div data-appwrite="projects.get"
|
||||
data-event="load"
|
||||
data-service="console-project"
|
||||
|
|
|
@ -78,7 +78,7 @@
|
|||
<div class="zone xl margin-top-xl clear">
|
||||
<h2 class="margin-bottom">Platforms</h2>
|
||||
|
||||
<div class="box margin-bottom" data-ls-if="0 != {{console-project.platforms.length}} && 'undefined' != '{{console-project.platforms}}'" style="display: none;">
|
||||
<div class="box margin-bottom" data-ls-if="0 != {{console-project.platforms.length}} && undefined !== {{console-project.platforms}}" style="display: none;">
|
||||
<ul data-ls-loop="console-project.platforms" data-ls-as="platform" class="list">
|
||||
<li class="clear">
|
||||
|
||||
|
@ -117,7 +117,7 @@
|
|||
</ul>
|
||||
</div>
|
||||
|
||||
<div data-ls-if="'0' === '{{console-project.platforms.length}}' || 'undefined' === '{{console-project.platforms}}'" class="box dashboard margin-bottom" style="display: none;">
|
||||
<div data-ls-if="0 === {{console-project.platforms.length}} || undefined === {{console-project.platforms}}" class="box dashboard margin-bottom" style="display: none;">
|
||||
<div class="margin-bottom margin-top-small margin-end margin-start">
|
||||
<h3 class="margin-bottom">No Platforms Added to Your Project</h3>
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
<ul class="margin-bottom-xl clear">
|
||||
<li class="pull-start margin-end"><a href="/features"><i class="icon-lamp"></i> Learn More</a></li>
|
||||
<li class="pull-start margin-end"><a href="/docs"><i class="icon-book-open"></i> Docs</a></li>
|
||||
<li class="pull-start margin-end"><a href="/docs"><i class="icon-book-open"></i> Documentation</a></li>
|
||||
<li class="pull-start margin-end"><a href="/support"><i class="icon-lifebuoy"></i> Support</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
|
@ -529,7 +529,7 @@ $scopes = [ // TODO sync with project list
|
|||
data-error="render"
|
||||
data-error-rerender="">
|
||||
|
||||
<div data-ls-if="0 === {{console-tasks.length}} || 'undefined' === '{{console-tasks.length}}'" class="box margin-top margin-bottom" style="display: none;">
|
||||
<div data-ls-if="0 === {{console-tasks.length}} || undefined === {{console-tasks.length}}" class="box margin-top margin-bottom" style="display: none;">
|
||||
<h3>No Tasks Found</h3>
|
||||
|
||||
<p class="margin-bottom-no">You haven't created any task to your project yet.</p>
|
||||
|
@ -563,10 +563,10 @@ $scopes = [ // TODO sync with project list
|
|||
<a data-ls-attrs="href={{task.httpUrl}}" data-ls-bind="{{task.httpUrl}}" target="_blank" class="text-one-liner"></a>
|
||||
</td>
|
||||
<td style="vertical-align: middle">
|
||||
<span data-ls-if="'play' === '{{task.status}}'" style="display: none;">
|
||||
<span data-ls-if="'play' === {{task.status}}" style="display: none;">
|
||||
<span class="tag green"><i class="icon-play"></i> Running </span>
|
||||
</span>
|
||||
<span data-ls-if="'play' !== '{{task.status}}'" style="display: none;">
|
||||
<span data-ls-if="'play' !== {{task.status}}" style="display: none;">
|
||||
<span class="tag red"><i class="icon-pause"></i> Paused </span>
|
||||
</span>
|
||||
</td>
|
||||
|
@ -574,14 +574,14 @@ $scopes = [ // TODO sync with project list
|
|||
<span data-ls-bind="{{task.next|date-time}}" class="note"></span>
|
||||
</td>
|
||||
<td style="vertical-align: middle">
|
||||
<div data-ls-if="'undefined' !== '{{task.previous}}'" class="note">
|
||||
<div data-ls-if="'undefined' !== {{task.previous}}" class="note">
|
||||
<span data-ls-bind="{{task.previous|date-time}}"></span>
|
||||
|
||||
<div data-ls-if="'undefined' !== '{{task.delay}}' && 59 < {{task.delay}}" class="note text-danger margin-top-tiny">
|
||||
<div data-ls-if="'undefined' !== {{task.delay}} && 59 < {{task.delay}}" class="note text-danger margin-top-tiny">
|
||||
<span data-ls-bind="({{task.delay|ms2hum}} Delay)"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div data-ls-if="'undefined' === '{{task.previous}}'" class="note">
|
||||
<div data-ls-if="'undefined' === {{task.previous}}" class="note">
|
||||
None.
|
||||
</div>
|
||||
</td>
|
||||
|
@ -847,7 +847,7 @@ $scopes = [ // TODO sync with project list
|
|||
<button class="danger"><?php echo Locale::getText('console.settings.section.members.labels.leave'); ?></button>
|
||||
</form>
|
||||
|
||||
<div data-ls-if="'false' == '{{member.confirm}}'" class="pull-end margin-end" style="display: none;">
|
||||
<div data-ls-if="false === {{member.confirm}}" class="pull-end margin-end" style="display: none;">
|
||||
<form
|
||||
data-appwrite="auth.inviteResend"
|
||||
data-scope="console"
|
||||
|
@ -866,7 +866,7 @@ $scopes = [ // TODO sync with project list
|
|||
|
||||
<img src="" data-ui-gravatar="{{member.email}}" data-name="{{member.name}}" data-size="100" alt="User Avatar" class="avatar pull-start margin-end" />
|
||||
<div class="margin-bottom-small">
|
||||
<span data-ls-bind="{{member.name}}"></span> <span class="tag" data-ls-bind="{{member.roles.0|id2role}}"></span> <span data-ls-if="'false' == '{{member.confirm}}'" class="tag red" style="display: none;"><?php echo Locale::getText('console.settings.section.members.labels.pending'); ?></span>
|
||||
<span data-ls-bind="{{member.name}}"></span> <span class="tag" data-ls-bind="{{member.roles.0|id2role}}"></span> <span data-ls-if="false === {{member.confirm}}" class="tag red" style="display: none;"><?php echo Locale::getText('console.settings.section.members.labels.pending'); ?></span>
|
||||
</div>
|
||||
<span class="note" data-ls-bind="{{member.email}}"></span>
|
||||
</li>
|
||||
|
|
|
@ -102,15 +102,15 @@ $providers = $this->getParam('providers', []);
|
|||
<span data-ls-bind="{{user.email}}" class="note"></span>
|
||||
</td>
|
||||
<td data-title="Status: ">
|
||||
<span data-ls-if="'{{user.confirm}}' === 'true'">
|
||||
<span data-ls-if="{{user.confirm}} === true">
|
||||
<span class="tag green">Verified</span>
|
||||
</span>
|
||||
|
||||
<span data-ls-if="'{{user.confirm}}' !== 'true'">
|
||||
<span data-ls-if="{{user.confirm}} !== true">
|
||||
<span class="tag">Unverified</span>
|
||||
</span>
|
||||
|
||||
<span data-ls-if="'{{user.status}}' === '<?php echo \Auth\Auth::USER_STATUS_BLOCKED; ?>'">
|
||||
<span data-ls-if="{{user.status}} === <?php echo \Auth\Auth::USER_STATUS_BLOCKED; ?>">
|
||||
<span class="tag red">Blocked</span>
|
||||
</span>
|
||||
</td>
|
||||
|
@ -315,7 +315,7 @@ $providers = $this->getParam('providers', []);
|
|||
|
||||
<span>
|
||||
<?php echo ucfirst($provider); ?>
|
||||
<span data-ls-if="'{{console-project.usersOauth<?php echo ucfirst($provider); ?>Appid}}' == '' || '{{console-project.usersOauth<?php echo ucfirst($provider); ?>Secret}}' == '' || '{{console-project.usersOauth<?php echo ucfirst($provider); ?>Appid}}' == 'undefined' || '{{console-project.usersOauth<?php echo ucfirst($provider); ?>Secret}}' == 'undefined'">
|
||||
<span data-ls-if="{{console-project.usersOauth<?php echo ucfirst($provider); ?>Appid}} === '' || {{console-project.usersOauth<?php echo ucfirst($provider); ?>Secret}} == '' || {{console-project.usersOauth<?php echo ucfirst($provider); ?>Appid}} === undefined || {{console-project.usersOauth<?php echo ucfirst($provider); ?>Secret}} === undefined">
|
||||
<span class="tag red">Disabled</span>
|
||||
</span>
|
||||
</span>
|
||||
|
|
|
@ -26,7 +26,7 @@ use Utopia\Locale\Locale;
|
|||
<li data-state="/console/users/view?id={{router.params.id}}&project={{router.params.project}}">
|
||||
<h2>General</h2>
|
||||
|
||||
<div data-ls-if="'{{user.status}}' === '<?php echo \Auth\Auth::USER_STATUS_BLOCKED; ?>'" style="display: none" class="box padding-small danger margin-bottom-xxl">
|
||||
<div data-ls-if="{{user.status}} === <?php echo \Auth\Auth::USER_STATUS_BLOCKED; ?>" style="display: none" class="box padding-small danger margin-bottom-xxl">
|
||||
This user account is blocked.
|
||||
</div>
|
||||
|
||||
|
@ -38,10 +38,10 @@ use Utopia\Locale\Locale;
|
|||
|
||||
<div class="margin-top-small note" data-ls-bind="Member since {{user.registration|date-text}}"></div>
|
||||
<div class="margin-top-small">
|
||||
<span data-ls-if="'{{user.confirm}}' === 'true'" style="display: none;">
|
||||
<span data-ls-if="{{user.confirm}} === true" style="display: none;">
|
||||
<span class="tag green">Verified</span>
|
||||
</span>
|
||||
<span data-ls-if="'{{user.confirm}}' !== 'true'" style="display: none;">
|
||||
<span data-ls-if="{{user.confirm}} !== true" style="display: none;">
|
||||
<span class="tag">Unverified</span>
|
||||
</span>
|
||||
</div>
|
||||
|
@ -94,7 +94,7 @@ use Utopia\Locale\Locale;
|
|||
<input id="uid" type="text" autocomplete="off" placeholder="" data-ls-bind="{{user.$uid}}" disabled data-forms-copy>
|
||||
</div>
|
||||
|
||||
<div data-ls-if="'{{user.status}}' !== '<?php echo \Auth\Auth::USER_STATUS_BLOCKED; ?>'" style="display: none">
|
||||
<div data-ls-if="{{user.status}} !== <?php echo \Auth\Auth::USER_STATUS_BLOCKED; ?>" style="display: none">
|
||||
<form name="users.updateStatus" class="margin-bottom"
|
||||
data-appwrite="users.updateStatus"
|
||||
data-event="submit"
|
||||
|
@ -108,7 +108,7 @@ use Utopia\Locale\Locale;
|
|||
</form>
|
||||
</div>
|
||||
|
||||
<div data-ls-if="'{{user.status}}' === '<?php echo \Auth\Auth::USER_STATUS_BLOCKED; ?>'" style="display: none">
|
||||
<div data-ls-if="{{user.status}} === <?php echo \Auth\Auth::USER_STATUS_BLOCKED; ?>" style="display: none">
|
||||
<form name="users.updateStatus" class="margin-bottom"
|
||||
data-appwrite="users.updateStatus"
|
||||
data-event="submit"
|
||||
|
@ -136,11 +136,11 @@ use Utopia\Locale\Locale;
|
|||
data-error="render"
|
||||
data-success-rerender="user.update">
|
||||
|
||||
<div data-ls-if="'{{sessions.length}}' === '0'" style="display: none" class="margin-top-xl margin-bottom-xl">
|
||||
<div data-ls-if="{{sessions.length}} === 0" style="display: none" class="margin-top-xl margin-bottom-xl">
|
||||
No sessions available
|
||||
</div>
|
||||
|
||||
<div data-ls-if="'{{sessions.length}}' !== '0'" style="display: none">
|
||||
<div data-ls-if="{{sessions.length}} !== 0" style="display: none">
|
||||
<div class="box margin-bottom">
|
||||
<ul data-ls-loop="sessions" data-ls-as="session" class="list">
|
||||
<li class="clear">
|
||||
|
@ -194,11 +194,11 @@ use Utopia\Locale\Locale;
|
|||
data-success-rerender="logs.load"
|
||||
data-error="">
|
||||
|
||||
<div data-ls-if="'{{logs.length}}' === '0'" style="display: none" class="margin-top-xl margin-bottom-xl">
|
||||
<div data-ls-if="{{logs.length}} === 0" style="display: none" class="margin-top-xl margin-bottom-xl">
|
||||
No logs available
|
||||
</div>
|
||||
|
||||
<div class="box" data-ls-if="'{{logs.length}}' !== '0'" style="display: none">
|
||||
<div class="box" data-ls-if="{{logs.length}} !== 0" style="display: none">
|
||||
<table class="vertical small">
|
||||
<thead>
|
||||
<tr>
|
||||
|
|
|
@ -35,7 +35,7 @@ use Utopia\Locale\Locale;
|
|||
|
||||
<p class="note"><?php echo sprintf($this->escape(Locale::getText('home.auth.join.subtitle')), '<span data-ls-echo="{{api-company.name}}"></span>'); ?></p>
|
||||
|
||||
<div data-ls-if="'{{api-company.logo}}' !== '' || '{{api-company.logo}}' !== 'undefined'">
|
||||
<div data-ls-if="{{api-company.logo}} !== '' || {{api-company.logo}} !== undefined">
|
||||
<div data-ls-style="background: {{api-company.theme-color}}; color: {{api-company.theme-color-contrast}}; width: 100px; height: 100px; line-height: 100px; border-radius: 50%; margin: 0 auto; text-align: center">
|
||||
<img data-ls-attrs="src={{env.API}}/v1/storage/files/{{api-company.logo}}/preview?project={{env.PROJECT}}&height=120" alt="Logo" style="opacity: 0; line-height: 80px; vertical-align: middle; max-width: 80px; max-height: 80px" />
|
||||
</div>
|
||||
|
|
|
@ -90,7 +90,7 @@ $env = $this->getParam('env', '');
|
|||
<i class="icon-cancel" data-ls-ui-alerts-delete data-message="{{alert.id}}"></i>
|
||||
<span data-ls-bind="{{alert.text}}"></span>
|
||||
|
||||
<span data-ls-if="'undefined' !== '{{alert.link}}'" style="display: none;">
|
||||
<span data-ls-if="'undefined' !== {{alert.link}}" style="display: none;">
|
||||
<a data-ls-attrs="href={{alert.link}}" data-ls-ui-alerts-delete data-message="{{alert.id}}"><?php echo Locale::getText('general.alerts.learn'); ?></a>
|
||||
</span>
|
||||
</div>
|
||||
|
|
8
public/dist/scripts/app-all.js
vendored
8
public/dist/scripts/app-all.js
vendored
|
@ -2076,9 +2076,9 @@ let result={};query.split('&').forEach(function(part){if(!part){return;}
|
|||
part=part.split('+').join(' ');let eq=part.indexOf('=');let key=eq>-1?part.substr(0,eq):part;let val=eq>-1?decodeURIComponent(part.substr(eq+1)):'';let from=key.indexOf('[');if(from===-1){result[decodeURIComponent(key)]=val;}
|
||||
else{let to=key.indexOf(']');let index=decodeURIComponent(key.substring(from+1,to));key=decodeURIComponent(key.substring(0,from));if(!result[key]){result[key]=[];}
|
||||
if(!index){result[key].push(val);}
|
||||
else{result[key][index]=val;}}});return result;};let state={setParam:setParam,getParam:getParam,getParams:getParams,getURL:getURL,add:add,change:change,reload:reload,reset:reset,match:match,getCurrent:getCurrent,setCurrent:setCurrent,getPrevious:getPrevious,setPrevious:setPrevious,params:getJsonFromUrl(window.location.search),hash:window.location.hash};return state;},true,false,false);window.ls.container.set('expression',function(container,filter,$as,$prefix){let reg=/(\{{.*?\}})/gi;let paths=[];return{parse:function(string,def,as,prefix){def=def||'';paths=[];return string.replace(reg,function(match)
|
||||
else{result[key][index]=val;}}});return result;};let state={setParam:setParam,getParam:getParam,getParams:getParams,getURL:getURL,add:add,change:change,reload:reload,reset:reset,match:match,getCurrent:getCurrent,setCurrent:setCurrent,getPrevious:getPrevious,setPrevious:setPrevious,params:getJsonFromUrl(window.location.search),hash:window.location.hash};return state;},true,false,false);window.ls.container.set('expression',function(container,filter,$as,$prefix){let reg=/(\{{.*?\}})/gi;let paths=[];return{parse:function(string,def,as,prefix,cast=false){def=def||'';paths=[];return string.replace(reg,function(match)
|
||||
{let reference=match.substring(2,match.length-2).replace('[\'','.').replace('\']','').trim();reference=reference.split('|');let path=(reference[0]||'');let result=container.path(path,undefined,as,prefix);if(!paths.includes(path)){paths.push(path);}
|
||||
result=(null===result||undefined===result)?def:result;result=(typeof result==='object')?JSON.stringify(result):result;if(reference.length>=2){for(let i=1;i<reference.length;i++){result=filter.apply(reference[i],result);}}
|
||||
result=(null===result||undefined===result)?def:result;result=(typeof result==='object')?JSON.stringify(result):result;result=(((typeof result==='object')||(typeof result==='string'))&&cast)?'\''+result+'\'':result;if(reference.length>=2){for(let i=1;i<reference.length;i++){result=filter.apply(reference[i],result);}}
|
||||
return result;});},getPaths:function(){return paths;},}},true,false,false);window.ls.container.set('filter',function(container){let filters={};let add=function(name,callback){filters[name]=callback;return this;};let apply=function(name,value){container.set('$value',value,true,false,false);return container.resolve(filters[name]);};add('uppercase',function($value){return $value.toUpperCase();});add('lowercase',function($value){return $value.toLowerCase();});return{add:add,apply:apply}},true,false,false);window.ls.container.get('filter').add('escape',function(value){if(typeof value!=='string'){return value;}
|
||||
return value.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/\"/g,'"').replace(/\'/g,''').replace(/\//g,'/');});window.ls=window.ls||{};window.ls.container.set('window',window,true,false,false).set('document',window.document,true,false,false).set('element',window.document,true,false,false);window.ls.run=function(window){try{this.view.render(window.document);}
|
||||
catch(error){let handler=window.ls.container.resolve(this.error);handler(error);}};window.ls.error=function(){return function(error){console.error('ls-error',error.message,error.stack,error.toString());}};window.ls.router=window.ls.container.get('router');window.ls.view=window.ls.container.get('view');window.ls.filter=window.ls.container.get('filter');window.ls.container.get('view').add({selector:'data-ls-router',repeat:false,controller:function(element,window,document,view,router){let firstFromServer=(element.getAttribute('data-first-from-server')==='true');let scope={selector:'data-ls-scope',template:false,repeat:true,controller:function(){},};let init=function(route){window.scrollTo(0,0);if(window.document.body.scrollTo){window.document.body.scrollTo(0,0);}
|
||||
|
@ -2106,8 +2106,8 @@ return;}
|
|||
if(element.value!==value){element.value=value;}
|
||||
if(bind){element.addEventListener('input',sync);}}
|
||||
else{if(element.innerText!==value){element.innerHTML=value;}}};let sync=(function(as,prefix){return function(){for(let i=0;i<paths.length;i++){container.path(paths[i],element.value,as,prefix);}}})($as,$prefix);let syntax=element.getAttribute('data-ls-bind');let result=expression.parse(syntax,null,$as,$prefix);let paths=expression.getPaths();echo(result,true);for(let i=0;i<paths.length;i++){container.bind(element,paths[i],function(){echo(expression.parse(syntax,null,$as,$prefix),false);});}}});window.ls.container.get('view').add({selector:'data-ls-if',controller:function(element,expression,container,$as,$prefix){let result='';let syntax=element.getAttribute('data-ls-if')||'';let debug=element.getAttribute('data-debug')||false;let paths=[];let check=function(){if(debug){console.info('debug-ls-if',expression.parse(syntax,'undefined',$as,$prefix));}
|
||||
try{result=!!(eval(expression.parse(syntax,'undefined',$as,$prefix).replace(/(\r\n|\n|\r)/gm,' ')));}
|
||||
catch(error){throw new Error('Failed to evaluate expression "'+syntax+'": '+error);}
|
||||
try{result=!!(eval(expression.parse(syntax,'undefined',$as,$prefix,true).replace(/(\r\n|\n|\r)/gm,' ')));}
|
||||
catch(error){throw new Error('Failed to evaluate expression "'+syntax+' ('+result+')": '+error);}
|
||||
if(debug){console.info('debug-ls-if result:',result);}
|
||||
paths=expression.getPaths();element.$lsSkip=!result;if(!result){element.style.visibility='hidden';element.style.display='none';}
|
||||
else{element.style.removeProperty('display');element.style.removeProperty('visibility');}};check();for(let i=0;i<paths.length;i++){container.bind(element,paths[i],check);}}});window.ls.container.get('view').add({selector:'data-ls-loop',template:false,repeat:false,nested:false,controller:function(element,view,container,window){let expr=element.getAttribute('data-ls-loop');let as=element.getAttribute('data-ls-as');let echo=function(){let array=container.path(expr);array=(!array)?[]:array;while(element.hasChildNodes()){element.removeChild(element.lastChild);element.lastChild=null;}
|
||||
|
|
8
public/dist/scripts/app.js
vendored
8
public/dist/scripts/app.js
vendored
|
@ -62,9 +62,9 @@ let result={};query.split('&').forEach(function(part){if(!part){return;}
|
|||
part=part.split('+').join(' ');let eq=part.indexOf('=');let key=eq>-1?part.substr(0,eq):part;let val=eq>-1?decodeURIComponent(part.substr(eq+1)):'';let from=key.indexOf('[');if(from===-1){result[decodeURIComponent(key)]=val;}
|
||||
else{let to=key.indexOf(']');let index=decodeURIComponent(key.substring(from+1,to));key=decodeURIComponent(key.substring(0,from));if(!result[key]){result[key]=[];}
|
||||
if(!index){result[key].push(val);}
|
||||
else{result[key][index]=val;}}});return result;};let state={setParam:setParam,getParam:getParam,getParams:getParams,getURL:getURL,add:add,change:change,reload:reload,reset:reset,match:match,getCurrent:getCurrent,setCurrent:setCurrent,getPrevious:getPrevious,setPrevious:setPrevious,params:getJsonFromUrl(window.location.search),hash:window.location.hash};return state;},true,false,false);window.ls.container.set('expression',function(container,filter,$as,$prefix){let reg=/(\{{.*?\}})/gi;let paths=[];return{parse:function(string,def,as,prefix){def=def||'';paths=[];return string.replace(reg,function(match)
|
||||
else{result[key][index]=val;}}});return result;};let state={setParam:setParam,getParam:getParam,getParams:getParams,getURL:getURL,add:add,change:change,reload:reload,reset:reset,match:match,getCurrent:getCurrent,setCurrent:setCurrent,getPrevious:getPrevious,setPrevious:setPrevious,params:getJsonFromUrl(window.location.search),hash:window.location.hash};return state;},true,false,false);window.ls.container.set('expression',function(container,filter,$as,$prefix){let reg=/(\{{.*?\}})/gi;let paths=[];return{parse:function(string,def,as,prefix,cast=false){def=def||'';paths=[];return string.replace(reg,function(match)
|
||||
{let reference=match.substring(2,match.length-2).replace('[\'','.').replace('\']','').trim();reference=reference.split('|');let path=(reference[0]||'');let result=container.path(path,undefined,as,prefix);if(!paths.includes(path)){paths.push(path);}
|
||||
result=(null===result||undefined===result)?def:result;result=(typeof result==='object')?JSON.stringify(result):result;if(reference.length>=2){for(let i=1;i<reference.length;i++){result=filter.apply(reference[i],result);}}
|
||||
result=(null===result||undefined===result)?def:result;result=(typeof result==='object')?JSON.stringify(result):result;result=(((typeof result==='object')||(typeof result==='string'))&&cast)?'\''+result+'\'':result;if(reference.length>=2){for(let i=1;i<reference.length;i++){result=filter.apply(reference[i],result);}}
|
||||
return result;});},getPaths:function(){return paths;},}},true,false,false);window.ls.container.set('filter',function(container){let filters={};let add=function(name,callback){filters[name]=callback;return this;};let apply=function(name,value){container.set('$value',value,true,false,false);return container.resolve(filters[name]);};add('uppercase',function($value){return $value.toUpperCase();});add('lowercase',function($value){return $value.toLowerCase();});return{add:add,apply:apply}},true,false,false);window.ls.container.get('filter').add('escape',function(value){if(typeof value!=='string'){return value;}
|
||||
return value.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/\"/g,'"').replace(/\'/g,''').replace(/\//g,'/');});window.ls=window.ls||{};window.ls.container.set('window',window,true,false,false).set('document',window.document,true,false,false).set('element',window.document,true,false,false);window.ls.run=function(window){try{this.view.render(window.document);}
|
||||
catch(error){let handler=window.ls.container.resolve(this.error);handler(error);}};window.ls.error=function(){return function(error){console.error('ls-error',error.message,error.stack,error.toString());}};window.ls.router=window.ls.container.get('router');window.ls.view=window.ls.container.get('view');window.ls.filter=window.ls.container.get('filter');window.ls.container.get('view').add({selector:'data-ls-router',repeat:false,controller:function(element,window,document,view,router){let firstFromServer=(element.getAttribute('data-first-from-server')==='true');let scope={selector:'data-ls-scope',template:false,repeat:true,controller:function(){},};let init=function(route){window.scrollTo(0,0);if(window.document.body.scrollTo){window.document.body.scrollTo(0,0);}
|
||||
|
@ -92,8 +92,8 @@ return;}
|
|||
if(element.value!==value){element.value=value;}
|
||||
if(bind){element.addEventListener('input',sync);}}
|
||||
else{if(element.innerText!==value){element.innerHTML=value;}}};let sync=(function(as,prefix){return function(){for(let i=0;i<paths.length;i++){container.path(paths[i],element.value,as,prefix);}}})($as,$prefix);let syntax=element.getAttribute('data-ls-bind');let result=expression.parse(syntax,null,$as,$prefix);let paths=expression.getPaths();echo(result,true);for(let i=0;i<paths.length;i++){container.bind(element,paths[i],function(){echo(expression.parse(syntax,null,$as,$prefix),false);});}}});window.ls.container.get('view').add({selector:'data-ls-if',controller:function(element,expression,container,$as,$prefix){let result='';let syntax=element.getAttribute('data-ls-if')||'';let debug=element.getAttribute('data-debug')||false;let paths=[];let check=function(){if(debug){console.info('debug-ls-if',expression.parse(syntax,'undefined',$as,$prefix));}
|
||||
try{result=!!(eval(expression.parse(syntax,'undefined',$as,$prefix).replace(/(\r\n|\n|\r)/gm,' ')));}
|
||||
catch(error){throw new Error('Failed to evaluate expression "'+syntax+'": '+error);}
|
||||
try{result=!!(eval(expression.parse(syntax,'undefined',$as,$prefix,true).replace(/(\r\n|\n|\r)/gm,' ')));}
|
||||
catch(error){throw new Error('Failed to evaluate expression "'+syntax+' ('+result+')": '+error);}
|
||||
if(debug){console.info('debug-ls-if result:',result);}
|
||||
paths=expression.getPaths();element.$lsSkip=!result;if(!result){element.style.visibility='hidden';element.style.display='none';}
|
||||
else{element.style.removeProperty('display');element.style.removeProperty('visibility');}};check();for(let i=0;i<paths.length;i++){container.bind(element,paths[i],check);}}});window.ls.container.get('view').add({selector:'data-ls-loop',template:false,repeat:false,nested:false,controller:function(element,view,container,window){let expr=element.getAttribute('data-ls-loop');let as=element.getAttribute('data-ls-as');let echo=function(){let array=container.path(expr);array=(!array)?[]:array;while(element.hasChildNodes()){element.removeChild(element.lastChild);element.lastChild=null;}
|
||||
|
|
|
@ -62,9 +62,9 @@ else{window.history.replaceState({},'',URL);}
|
|||
part=part.split('+').join(' ');let eq=part.indexOf('=');let key=eq>-1?part.substr(0,eq):part;let val=eq>-1?decodeURIComponent(part.substr(eq+1)):'';let from=key.indexOf('[');if(from===-1){result[decodeURIComponent(key)]=val;}
|
||||
else{let to=key.indexOf(']');let index=decodeURIComponent(key.substring(from+1,to));key=decodeURIComponent(key.substring(0,from));if(!result[key]){result[key]=[];}
|
||||
if(!index){result[key].push(val);}
|
||||
else{result[key][index]=val;}}});return result;};let state={setParam:setParam,getParam:getParam,getParams:getParams,getURL:getURL,add:add,change:change,reload:reload,reset:reset,match:match,getCurrent:getCurrent,setCurrent:setCurrent,getPrevious:getPrevious,setPrevious:setPrevious,params:getJsonFromUrl(window.location.search),hash:window.location.hash};return state;},true,false,false);window.ls.container.set('expression',function(container,filter,$as,$prefix){let reg=/(\{{.*?\}})/gi;let paths=[];return{parse:function(string,def,as,prefix){def=def||'';paths=[];return string.replace(reg,function(match)
|
||||
else{result[key][index]=val;}}});return result;};let state={setParam:setParam,getParam:getParam,getParams:getParams,getURL:getURL,add:add,change:change,reload:reload,reset:reset,match:match,getCurrent:getCurrent,setCurrent:setCurrent,getPrevious:getPrevious,setPrevious:setPrevious,params:getJsonFromUrl(window.location.search),hash:window.location.hash};return state;},true,false,false);window.ls.container.set('expression',function(container,filter,$as,$prefix){let reg=/(\{{.*?\}})/gi;let paths=[];return{parse:function(string,def,as,prefix,cast=false){def=def||'';paths=[];return string.replace(reg,function(match)
|
||||
{let reference=match.substring(2,match.length-2).replace('[\'','.').replace('\']','').trim();reference=reference.split('|');let path=(reference[0]||'');let result=container.path(path,undefined,as,prefix);if(!paths.includes(path)){paths.push(path);}
|
||||
result=(null===result||undefined===result)?def:result;result=(typeof result==='object')?JSON.stringify(result):result;if(reference.length>=2){for(let i=1;i<reference.length;i++){result=filter.apply(reference[i],result);}}
|
||||
result=(null===result||undefined===result)?def:result;result=(typeof result==='object')?JSON.stringify(result):result;result=(((typeof result==='object')||(typeof result==='string'))&&cast)?'\''+result+'\'':result;if(reference.length>=2){for(let i=1;i<reference.length;i++){result=filter.apply(reference[i],result);}}
|
||||
return result;});},getPaths:function(){return paths;},}},true,false,false);window.ls.container.set('filter',function(container){let filters={};let add=function(name,callback){filters[name]=callback;return this;};let apply=function(name,value){container.set('$value',value,true,false,false);return container.resolve(filters[name]);};add('uppercase',function($value){return $value.toUpperCase();});add('lowercase',function($value){return $value.toLowerCase();});return{add:add,apply:apply}},true,false,false);window.ls.container.get('filter').add('escape',function(value){if(typeof value!=='string'){return value;}
|
||||
return value.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/\"/g,'"').replace(/\'/g,''').replace(/\//g,'/');});window.ls=window.ls||{};window.ls.container.set('window',window,true,false,false).set('document',window.document,true,false,false).set('element',window.document,true,false,false);window.ls.run=function(window){try{this.view.render(window.document);}
|
||||
catch(error){let handler=window.ls.container.resolve(this.error);handler(error);}};window.ls.error=function(){return function(error){console.error('ls-error',error.message,error.stack,error.toString());}};window.ls.router=window.ls.container.get('router');window.ls.view=window.ls.container.get('view');window.ls.filter=window.ls.container.get('filter');window.ls.container.get('view').add({selector:'data-ls-router',repeat:false,controller:function(element,window,document,view,router){let firstFromServer=(element.getAttribute('data-first-from-server')==='true');let scope={selector:'data-ls-scope',template:false,repeat:true,controller:function(){},};let init=function(route){window.scrollTo(0,0);if(window.document.body.scrollTo){window.document.body.scrollTo(0,0);}
|
||||
|
@ -92,8 +92,8 @@ catch(error){let handler=window.ls.container.resolve(this.error);handler(error);
|
|||
if(element.value!==value){element.value=value;}
|
||||
if(bind){element.addEventListener('input',sync);}}
|
||||
else{if(element.innerText!==value){element.innerHTML=value;}}};let sync=(function(as,prefix){return function(){for(let i=0;i<paths.length;i++){container.path(paths[i],element.value,as,prefix);}}})($as,$prefix);let syntax=element.getAttribute('data-ls-bind');let result=expression.parse(syntax,null,$as,$prefix);let paths=expression.getPaths();echo(result,true);for(let i=0;i<paths.length;i++){container.bind(element,paths[i],function(){echo(expression.parse(syntax,null,$as,$prefix),false);});}}});window.ls.container.get('view').add({selector:'data-ls-if',controller:function(element,expression,container,$as,$prefix){let result='';let syntax=element.getAttribute('data-ls-if')||'';let debug=element.getAttribute('data-debug')||false;let paths=[];let check=function(){if(debug){console.info('debug-ls-if',expression.parse(syntax,'undefined',$as,$prefix));}
|
||||
try{result=!!(eval(expression.parse(syntax,'undefined',$as,$prefix).replace(/(\r\n|\n|\r)/gm,' ')));}
|
||||
catch(error){throw new Error('Failed to evaluate expression "'+syntax+'": '+error);}
|
||||
try{result=!!(eval(expression.parse(syntax,'undefined',$as,$prefix,true).replace(/(\r\n|\n|\r)/gm,' ')));}
|
||||
catch(error){throw new Error('Failed to evaluate expression "'+syntax+' ('+result+')": '+error);}
|
||||
if(debug){console.info('debug-ls-if result:',result);}
|
||||
paths=expression.getPaths();element.$lsSkip=!result;if(!result){element.style.visibility='hidden';element.style.display='none';}
|
||||
else{element.style.removeProperty('display');element.style.removeProperty('visibility');}};check();for(let i=0;i<paths.length;i++){container.bind(element,paths[i],check);}}});window.ls.container.get('view').add({selector:'data-ls-loop',template:false,repeat:false,nested:false,controller:function(element,view,container,window){let expr=element.getAttribute('data-ls-loop');let as=element.getAttribute('data-ls-as');let echo=function(){let array=container.path(expr);array=(!array)?[]:array;while(element.hasChildNodes()){element.removeChild(element.lastChild);element.lastChild=null;}
|
||||
|
|
Loading…
Reference in a new issue