Added arrays support
This commit is contained in:
parent
c73188ccf9
commit
e02d47bf50
11 changed files with 229 additions and 169 deletions
|
@ -152,7 +152,7 @@
|
|||
<input type="hidden" id="rulesInit" name="rules" data-cast-to="array-empty">
|
||||
|
||||
<div data-ls-if="({{project-collection.rules.length}})">
|
||||
<ul data-ls-loop="project-collection.rules" data-ls-as="rule">
|
||||
<ul data-ls-loop="project-collection.rules" data-ls-as="rule" class="sortable">
|
||||
<li data-forms-remove data-forms-move-up data-forms-move-down>
|
||||
<div class="toggle list sorts" data-ls-ui-open>
|
||||
<i class="icon-up-open pull-end margin-top-tiny"></i>
|
||||
|
@ -160,18 +160,18 @@
|
|||
|
||||
<h4 class="margin-bottom">
|
||||
<div class="pull-start margin-end-large margin-bottom-small">
|
||||
<button type="button" class="margin-bottom strip" data-move-down><i class="icon-down-dir"></i></button>
|
||||
<button type="button" class="margin-bottom strip" data-move-up><i class="icon-up-dir"></i></button>
|
||||
<button type="button" class="margin-bottom strip round" data-move-down><i class="icon-down-dir"></i></button>
|
||||
<button type="button" class="margin-bottom strip round" data-move-up><i class="icon-up-dir"></i></button>
|
||||
</div>
|
||||
|
||||
<span data-ls-bind="{{rule.label}}"></span>
|
||||
|
||||
<span data-ls-if="({{rule.array}}.toString() == 'false')">
|
||||
<span class="text-fade text-size-small" data-ls-bind=" ({{rule.type}}) "></span>
|
||||
<span class="text-fade text-size-small" data-ls-bind=" {{rule.type}} "></span>
|
||||
</span>
|
||||
|
||||
<span data-ls-if="({{rule.array}}.toString() == 'true')">
|
||||
<span class="text-size-small text-fade" data-ls-bind=" ({{rule.type}} / array) "></span>
|
||||
<span class="text-size-small text-fade" data-ls-bind=" {{rule.type}}[] "></span>
|
||||
</span>
|
||||
|
||||
<div data-ls-if="{{rule.required}}.toString() == 'true'">
|
||||
|
|
|
@ -5,155 +5,156 @@
|
|||
data-scope="sdk"
|
||||
data-event="load,database.updateCollection"
|
||||
data-name="project-collection">
|
||||
</div>
|
||||
|
||||
<div
|
||||
data-service="database.getDocument"
|
||||
data-param-collection-id="{{router.params.collection}}"
|
||||
data-param-document-id="{{router.params.id}}"
|
||||
data-scope="sdk"
|
||||
data-event="load"
|
||||
data-name="project-document">
|
||||
<div
|
||||
data-service="database.getDocument"
|
||||
data-param-collection-id="{{router.params.collection}}"
|
||||
data-param-document-id="{{router.params.id}}"
|
||||
data-scope="sdk"
|
||||
data-event="load"
|
||||
data-name="project-document"
|
||||
data-success="default">
|
||||
|
||||
<div class="cover">
|
||||
<h1 class="zone xl margin-bottom-large">
|
||||
<a data-ls-attrs="href=/console/database/collection?id={{router.params.collection}}&project={{router.params.project}}" class="back text-size-small"><i class="icon-left-open"></i> Collection</a>
|
||||
<div class="cover">
|
||||
<h1 class="zone xl margin-bottom-large">
|
||||
<a data-ls-attrs="href=/console/database/collection?id={{router.params.collection}}&project={{router.params.project}}" class="back text-size-small"><i class="icon-left-open"></i> Collection</a>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<span data-ls-bind="{{project-collection.name}} Document"> </span>
|
||||
</h1>
|
||||
</div>
|
||||
<span data-ls-bind="{{project-collection.name}} Document"> </span>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="zone xl">
|
||||
<ul class="phases clear" data-ui-phases data-selected="{{router.params.tab}}">
|
||||
<li data-state="/console/database/document?id={{router.params.id}}&collection={{router.params.collection}}&project={{router.params.project}}">
|
||||
<h2>Update</h2>
|
||||
<div class="zone xl">
|
||||
<ul class="phases clear" data-ui-phases data-selected="{{router.params.tab}}">
|
||||
<li data-state="/console/database/document?id={{router.params.id}}&collection={{router.params.collection}}&project={{router.params.project}}">
|
||||
<h2>Update</h2>
|
||||
|
||||
<div class="row responsive margin-top-negative">
|
||||
<div class="col span-8 margin-bottom">
|
||||
<form
|
||||
data-analytics-event="submit"
|
||||
data-analytics-category="console"
|
||||
data-analytics-label="Update Database Document"
|
||||
data-service="database.updateDocument"
|
||||
data-scope="sdk"
|
||||
data-event="submit"
|
||||
data-success="alert,trigger"
|
||||
data-success-param-alert-text="Updated document successfully"
|
||||
data-success-param-trigger-events="database.updateDocument"
|
||||
data-failure="alert"
|
||||
data-failure-param-alert-text="Failed to update document"
|
||||
data-failure-param-alert-classname="error">
|
||||
<div class="row responsive margin-top-negative">
|
||||
<div class="col span-8 margin-bottom">
|
||||
<form
|
||||
data-analytics-event="submit"
|
||||
data-analytics-category="console"
|
||||
data-analytics-label="Update Database Document"
|
||||
data-service="database.updateDocument"
|
||||
data-scope="sdk"
|
||||
data-event="submit"
|
||||
data-success="alert,trigger"
|
||||
data-success-param-alert-text="Updated document successfully"
|
||||
data-success-param-trigger-events="database.updateDocument"
|
||||
data-failure="alert"
|
||||
data-failure-param-alert-text="Failed to update document"
|
||||
data-failure-param-alert-classname="error">
|
||||
|
||||
<label> </label>
|
||||
<label> </label>
|
||||
|
||||
<div class="box">
|
||||
<div class="box">
|
||||
|
||||
<input name="documentId" type="hidden" data-ls-bind="{{project-document.$id}}" />
|
||||
<input name="collectionId" type="hidden" data-ls-bind="{{project-document.$collection}}" />
|
||||
<input name="documentId" type="hidden" data-ls-bind="{{project-document.$id}}" />
|
||||
<input name="collectionId" type="hidden" data-ls-bind="{{project-document.$collection}}" />
|
||||
|
||||
<fieldset name="data" data-cast-to="object">
|
||||
<ul data-ls-loop="project-collection.rules" data-ls-as="rule">
|
||||
<li>
|
||||
<label class="margin-bottom-no">
|
||||
<span data-ls-bind="{{rule.label}}"></span>
|
||||
<span data-ls-if="{{rule.array}}.toString() == 'true'">
|
||||
<span class="text-size-small text-fade"> (Array)</span>
|
||||
</span>
|
||||
</label>
|
||||
|
||||
<fieldset name="data" data-cast-to="object">
|
||||
<ul data-ls-loop="project-collection.rules" data-ls-as="rule">
|
||||
<li>
|
||||
<label class="margin-bottom-no">
|
||||
<span data-ls-bind="{{rule.label}}"></span>
|
||||
<span data-ls-if="{{rule.array}}.toString() == 'true'">
|
||||
<span class="text-size-small text-fade"> (Array)</span>
|
||||
</span>
|
||||
</label>
|
||||
|
||||
|
||||
<div data-ls-if="{{rule.required}}.toString() == 'true'" class="margin-bottom-small">
|
||||
<span class="text-size-xs text-danger text-fade">required</span>
|
||||
</div>
|
||||
<div data-ls-if="{{rule.required}}.toString() == 'true'" class="margin-bottom-small">
|
||||
<span class="text-size-xs text-danger text-fade">required</span>
|
||||
</div>
|
||||
|
||||
<div data-ls-if="({{rule.required}}.toString() == 'false')" class="margin-bottom-small">
|
||||
<span class="text-size-xs text-fade">optional</span>
|
||||
</div>
|
||||
<div data-ls-if="({{rule.required}}.toString() == 'false')" class="margin-bottom-small">
|
||||
<span class="text-size-xs text-fade">optional</span>
|
||||
</div>
|
||||
|
||||
<div data-ls-if="({{rule.array}}.toString() == 'false')">
|
||||
<div data-ls-template="template-{{rule.type}}-form" data-type="script" class="margin-bottom"></div>
|
||||
</div>
|
||||
<div data-ls-if="({{rule.array}}.toString() == 'false')">
|
||||
<div data-ls-template="template-{{rule.type}}-form" data-type="script" class="margin-bottom"></div>
|
||||
</div>
|
||||
|
||||
<div data-ls-if="({{rule.array}}.toString() == 'true')">
|
||||
<div data-ls-template="template-array-form" data-type="script" class="margin-bottom"></div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<div class="toggle margin-bottom margin-top" data-ls-ui-open>
|
||||
<i class="icon-plus pull-end margin-top-tiny"></i>
|
||||
<i class="icon-minus pull-end margin-top-tiny"></i>
|
||||
<div data-ls-if="({{rule.array}}.toString() == 'true')">
|
||||
<div data-ls-template="template-array-form" data-type="script" class="margin-bottom"></div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<h3 class="margin-bottom-large">Permissions</h3>
|
||||
|
||||
<label for="collection-read">Read Permissions <span class="text-size-small">(<a data-ls-attrs="href={{env.HOME}}/docs/permissions" target="_blank">Learn more</a>)</span></label>
|
||||
<input type="hidden" id="collection-read" name="read" data-forms-tags data-cast-to="json" data-ls-bind="{{project-document.$permissions.read}}" placeholder="User ID, Team ID or Role" />
|
||||
|
||||
<label for="collection-write">Write Permissions <span class="text-size-small">(<a data-ls-attrs="href={{env.HOME}}/docs/permissions" target="_blank">Learn more</a>)</label>
|
||||
<input type="hidden" id="collection-write" name="write" data-forms-tags data-cast-to="json" data-ls-bind="{{project-collection.$permissions.write}}" placeholder="User ID, Team ID or Role" />
|
||||
<div class="toggle margin-bottom margin-top" data-ls-ui-open>
|
||||
<i class="icon-plus pull-end margin-top-tiny"></i>
|
||||
<i class="icon-minus pull-end margin-top-tiny"></i>
|
||||
|
||||
<h3 class="margin-bottom-large">Permissions</h3>
|
||||
|
||||
<label for="collection-read">Read Permissions <span class="text-size-small">(<a data-ls-attrs="href={{env.HOME}}/docs/permissions" target="_blank">Learn more</a>)</span></label>
|
||||
<input type="hidden" id="collection-read" name="read" data-forms-tags data-cast-to="json" data-ls-bind="{{project-document.$permissions.read}}" placeholder="User ID, Team ID or Role" />
|
||||
|
||||
<label for="collection-write">Write Permissions <span class="text-size-small">(<a data-ls-attrs="href={{env.HOME}}/docs/permissions" target="_blank">Learn more</a>)</label>
|
||||
<input type="hidden" id="collection-write" name="write" data-forms-tags data-cast-to="json" data-ls-bind="{{project-collection.$permissions.write}}" placeholder="User ID, Team ID or Role" />
|
||||
</div>
|
||||
|
||||
<button>Update</button>
|
||||
</div>
|
||||
|
||||
<button>Update</button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col span-4 sticky-top">
|
||||
|
||||
<div data-ls-if="({{router.params.id}})">
|
||||
<label>Document ID</label>
|
||||
<div class="input-copy margin-bottom">
|
||||
<input type="text" autocomplete="off" placeholder="" data-ls-bind="{{project-document.$id}}" disabled data-forms-copy class="margin-bottom-no" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
<div class="col span-4 sticky-top">
|
||||
|
||||
<div data-ls-if="({{router.params.id}})">
|
||||
<label>Document ID</label>
|
||||
<label>Collection ID</label>
|
||||
<div class="input-copy margin-bottom">
|
||||
<input type="text" autocomplete="off" placeholder="" data-ls-bind="{{project-document.$id}}" disabled data-forms-copy class="margin-bottom-no" />
|
||||
<input type="text" autocomplete="off" placeholder="" data-ls-bind="{{project-collection.$id}}" disabled data-forms-copy class="margin-bottom-no" />
|
||||
</div>
|
||||
|
||||
<form name="database.deleteDocument" class="margin-bottom"
|
||||
data-analytics-event="submit"
|
||||
data-analytics-category="console"
|
||||
data-analytics-label="Delete Collection Document"
|
||||
data-service="database.deleteDocument"
|
||||
data-event="submit"
|
||||
data-param-collection-id="{{router.params.id}}"
|
||||
data-confirm="Are you sure you want to delete this collection?"
|
||||
data-success="alert,trigger,redirect"
|
||||
data-success-param-alert-text="Document deleted successfully"
|
||||
data-success-param-trigger-events="database.deleteDocument"
|
||||
data-success-param-redirect-url="/console/database?project={{router.params.project}}"
|
||||
data-failure="alert"
|
||||
data-failure-param-alert-text="Failed to delete collection"
|
||||
data-failure-param-alert-classname="error">
|
||||
|
||||
<button type="submit" class="danger fill">Delete Document</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li data-state="/console/database/document/api?id={{router.params.id}}&collection={{router.params.collection}}&project={{router.params.project}}">
|
||||
<h2>API</h2>
|
||||
|
||||
<label>Collection ID</label>
|
||||
<div class="input-copy margin-bottom">
|
||||
<input type="text" autocomplete="off" placeholder="" data-ls-bind="{{project-collection.$id}}" disabled data-forms-copy class="margin-bottom-no" />
|
||||
<div class="row responsive">
|
||||
<div class="col span-3">
|
||||
<ul>
|
||||
<li>
|
||||
<a data-ls-attrs="href=/console/database/document/api?id={{router.params.id}}&collection={{router.params.collection}}&project={{router.params.project}}#api-response"><i class="icon-angle-circled-right margin-start-negative-tiny margin-end-tiny"></i> Response</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col span-9">
|
||||
<h3 id="api-response">Response</h3>
|
||||
<input type="hidden" data-ls-bind="{{project-document}}" data-forms-code />
|
||||
</div>
|
||||
|
||||
<form name="database.deleteDocument" class="margin-bottom"
|
||||
data-analytics-event="submit"
|
||||
data-analytics-category="console"
|
||||
data-analytics-label="Delete Collection Document"
|
||||
data-service="database.deleteDocument"
|
||||
data-event="submit"
|
||||
data-param-collection-id="{{router.params.id}}"
|
||||
data-confirm="Are you sure you want to delete this collection?"
|
||||
data-success="alert,trigger,redirect"
|
||||
data-success-param-alert-text="Document deleted successfully"
|
||||
data-success-param-trigger-events="database.deleteDocument"
|
||||
data-success-param-redirect-url="/console/database?project={{router.params.project}}"
|
||||
data-failure="alert"
|
||||
data-failure-param-alert-text="Failed to delete collection"
|
||||
data-failure-param-alert-classname="error">
|
||||
|
||||
<button type="submit" class="danger fill">Delete Document</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li data-state="/console/database/document/api?id={{router.params.id}}&collection={{router.params.collection}}&project={{router.params.project}}">
|
||||
<h2>API</h2>
|
||||
|
||||
<div class="row responsive">
|
||||
<div class="col span-3">
|
||||
<ul>
|
||||
<li>
|
||||
<a data-ls-attrs="href=/console/database/document/api?id={{router.params.id}}&collection={{router.params.collection}}&project={{router.params.project}}#api-response"><i class="icon-angle-circled-right margin-start-negative-tiny margin-end-tiny"></i> Response</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col span-9">
|
||||
<h3 id="api-response">Response</h3>
|
||||
<input type="hidden" data-ls-bind="{{project-document}}" data-forms-code />
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -166,6 +167,10 @@
|
|||
<textarea data-ls-attrs="name={{rule.key}},{{rule.required|documentRequired}}" type="text" autocomplete="off" data-ls-bind="{{project-document|documentLabel}}" data-forms-text-direction data-forms-text-count></textarea>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="template-text-form-array">
|
||||
<textarea data-ls-attrs="name={{rule.key}},{{rule.required|documentRequired}}" type="text" autocomplete="off" data-ls-bind="{{node}}" data-forms-text-direction data-forms-text-count></textarea>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="template-numeric-form">
|
||||
<input data-ls-attrs="name={{rule.key}},{{rule.required|documentRequired}}" type="number" autocomplete="off" data-ls-bind="{{project-document|documentLabel}}" />
|
||||
</script>
|
||||
|
@ -177,27 +182,20 @@
|
|||
<script type="text/html" id="template-array-form">
|
||||
<input type="hidden" data-ls-attrs="name={{rule.key}},{{rule.required|documentRequired}}" data-cast-to="array-empty">
|
||||
|
||||
<!-- <div data-forms-remove data-forms-move-up data-forms-move-down class="row thin margin-bottom-small">
|
||||
<div class="col span-3">
|
||||
<button type="button" data-remove class="strip"><i class="icon-cancel"></i></button>
|
||||
<button type="button" data-move-up class="strip"><i class="icon-up-dir"></i></button>
|
||||
<button type="button" data-move-down class="strip"><i class="icon-down-dir"></i></button>
|
||||
</div>
|
||||
<div class="col span-9">
|
||||
<div data-ls-template="template-{{rule.type}}-form" data-type="script" class="margin-bottom"></div>
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<!--
|
||||
|
||||
<div data-forms-clone="" data-label="Add" data-first="1" data-forms-remove data-forms-move-up data-forms-move-down class="row thin margin-bottom-small">
|
||||
<div class="col span-3">
|
||||
<button type="button" data-remove class="strip"><i class="icon-cancel"></i></button>
|
||||
<button type="button" data-move-up class="strip"><i class="icon-up-dir"></i></button>
|
||||
<button type="button" data-move-down class="strip"><i class="icon-down-dir"></i></button>
|
||||
</div>
|
||||
<div class="col span-9">
|
||||
<div data-ls-template="template-{{rule.type}}-form" data-type="script" class="margin-bottom"></div>
|
||||
</div>
|
||||
</div> -->
|
||||
<ul data-ls-loop="project-document.{{rule.key}}" data-ls-as="node" class="sortable">
|
||||
<li data-forms-remove data-forms-move-up data-forms-move-down>
|
||||
<div class="row responsive margin-bottom-small">
|
||||
<div class="col span-3">
|
||||
<button type="button" class="margin-bottom strip round" data-remove><i class="icon-cancel"></i></button>
|
||||
<button type="button" class="margin-bottom strip round" data-move-down><i class="icon-down-dir"></i></button>
|
||||
<button type="button" class="margin-bottom strip round" data-move-up><i class="icon-up-dir"></i></button>
|
||||
</div>
|
||||
<div class="col span-9">
|
||||
<div data-ls-template="template-{{rule.type}}-form-array" data-type="script" class="margin-bottom"></div>
|
||||
</div>
|
||||
<div class="col span-1">
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</script>
|
11
public/dist/scripts/app-all.js
vendored
11
public/dist/scripts/app-all.js
vendored
|
@ -57,7 +57,7 @@ if(success===undefined){throw new Error('Missing required parameter: "success"')
|
|||
if(failure===undefined){throw new Error('Missing required parameter: "failure"');}
|
||||
let path='/account/sessions/oauth2/{provider}'.replace(new RegExp('{provider}','g'),provider);let payload={};if(success){payload['success']=success;}
|
||||
if(failure){payload['failure']=failure;}
|
||||
payload['project']=config.project;payload['key']=config.key;let query=Object.keys(payload).map(key=>key+'='+encodeURIComponent(payload[key])).join('&');return config.endpoint+path+((query)?'?'+query:'');},deleteSession:function(sessionId){if(sessionId===undefined){throw new Error('Missing required parameter: "sessionId"');}
|
||||
payload['project']=config.project;payload['key']=config.key;let query=Object.keys(payload).map(key=>key+'='+encodeURIComponent(payload[key])).join('&');console.log(config);return config.endpoint+path+((query)?'?'+query:'');},deleteSession:function(sessionId){if(sessionId===undefined){throw new Error('Missing required parameter: "sessionId"');}
|
||||
let path='/account/sessions/{sessionId}'.replace(new RegExp('{sessionId}','g'),sessionId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},createVerification:function(url){if(url===undefined){throw new Error('Missing required parameter: "url"');}
|
||||
let path='/account/verification';let payload={};if(url){payload['url']=url;}
|
||||
return http.post(path,{'content-type':'application/json',},payload);},updateVerification:function(userId,secret){if(userId===undefined){throw new Error('Missing required parameter: "userId"');}
|
||||
|
@ -2410,7 +2410,7 @@ catch(error){throw new Error('Failed to evaluate expression "'+syntax+' (resulte
|
|||
if(debug){console.info('debug-ls-if result:',result);}
|
||||
paths=expression.getPaths();let prv=element.$lsSkip;element.$lsSkip=!result;if(!result){element.style.visibility='hidden';element.style.display='none';}
|
||||
else{element.style.removeProperty('display');element.style.removeProperty('visibility');}
|
||||
if(prv===true&&element.$lsSkip===false){view.render(element)}};check();for(let i=0;i<paths.length;i++){let path=paths[i].split('.');while(path.length){container.bind(element,path.join('.'),check);path.pop();}}}});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 debug=element.getAttribute('data-debug')||false;let echo=function(){let array=container.path(expr);array=(!array)?[]:array;let watch=!!(array&&array.__proxy);while(element.hasChildNodes()){element.removeChild(element.lastChild);element.lastChild=null;}
|
||||
if(prv===true&&element.$lsSkip===false){view.render(element)}};check();for(let i=0;i<paths.length;i++){let path=paths[i].split('.');while(path.length){container.bind(element,path.join('.'),check);path.pop();}}}});window.ls.container.get('view').add({selector:'data-ls-loop',template:false,repeat:false,nested:false,controller:function(element,view,container,window,expression){let expr=expression.parse(element.getAttribute('data-ls-loop'));let as=element.getAttribute('data-ls-as');let debug=element.getAttribute('data-debug')||false;let echo=function(){let array=container.path(expr);array=(!array)?[]:array;let watch=!!(array&&array.__proxy);while(element.hasChildNodes()){element.removeChild(element.lastChild);element.lastChild=null;}
|
||||
if(array instanceof Array&&typeof array!=='object'){throw new Error('Reference value must be array or object. '+(typeof array)+' given');}
|
||||
let children=[];element.$lsSkip=true;element.style.visibility=(0===array.length)?'hidden':'visible';for(let prop in array){if(!array.hasOwnProperty(prop)){continue;}
|
||||
children[prop]=template.cloneNode(true);element.appendChild(children[prop]);(index=>{let context=expr+'.'+index;container.addNamespace(as,context);if(debug){console.info('debug-ls-loop','index',index);console.info('debug-ls-loop','context',context);console.info('debug-ls-loop','context-path',container.path(context).name);console.info('debug-ls-loop','namespaces',container.namespaces);}
|
||||
|
@ -2582,7 +2582,7 @@ let thresh=1000;if(Math.abs($value)<thresh){return $value+" B";}
|
|||
let units=["kB","MB","GB","TB","PB","EB","ZB","YB"];let u=-1;do{$value/=thresh;++u;}while(Math.abs($value)>=thresh&&u<units.length-1);return($value.toFixed(1)+'<span class="text-size-small unit">'+
|
||||
units[u]+"</span>");}).add("statsTotal",function($value){if(!$value){return 0;}
|
||||
$value=abbreviate($value,1,false,false);return $value==="0"?"N/A":$value;}).add("isEmptyObject",function($value){return((Object.keys($value).length===0&&$value.constructor===Object)||$value.length===0)}).add("activeDomainsCount",function($value){let result=[];if(Array.isArray($value)){result=$value.filter(function(node){return(node.verification&&node.certificateId);});}
|
||||
console.log(result);return result.length;}).add("documentLabel",function($value,rule,filter){let value=($value!==null&&$value[rule['key']]!==undefined)?$value[rule['key']]:null;switch(rule['type']){case'bool':case'boolean':return(value)?'true':'false';break;case'numeric':console.log(value);return(value&&value.toString)?value.toString():value;break;default:return value;break;}}).add("documentRequired",function($value,rule,filter){if(!$value||$value==='false'){return'';}
|
||||
return result.length;}).add("documentLabel",function($value,rule,filter){let value=($value!==null&&$value[rule['key']]!==undefined)?$value[rule['key']]:null;switch(rule['type']){case'bool':case'boolean':return(value)?'true':'false';break;case'numeric':return(value&&value.toString)?value.toString():value;break;default:return value;break;}}).add("documentRequired",function($value,rule,filter){if(!$value||$value==='false'){return'';}
|
||||
return'required';});function abbreviate(number,maxPlaces,forcePlaces,forceLetter){number=Number(number);forceLetter=forceLetter||false;if(forceLetter!==false){return annotate(number,maxPlaces,forcePlaces,forceLetter);}
|
||||
let abbr;if(number>=1e12){abbr="T";}else if(number>=1e9){abbr="B";}else if(number>=1e6){abbr="M";}else if(number>=1e3){abbr="K";}else{abbr="";}
|
||||
return annotate(number,maxPlaces,forcePlaces,abbr);}
|
||||
|
@ -2601,7 +2601,10 @@ throw new Error("This callback is only valid for forms");};},alert:function(text
|
|||
return url;}}else{if(typeof value!=="undefined"&&value!==null){var separator=url.indexOf("?")!==-1?"&":"?";hash=url.split("#");url=hash[0]+separator+key+"="+value;if(typeof hash[1]!=="undefined"&&hash[1]!==null){url+="#"+hash[1];}
|
||||
return url;}else{return url;}}};keys=keys.split(",").map(element=>element.trim());return function(serviceForm,router,window){let url=window.location.href;keys.map(node=>{node=node.split("=");let key=node[0]||"";let name=node[1]||key;let value=getValue(key,"param",serviceForm);url=updateQueryString(name,value?value:null,url);});if(url!==window.location.href){window.history.pushState({},"",url);router.reset();}};},trigger:function(events){return function(document){events=events.trim().split(",");for(let i=0;i<events.length;i++){if(""===events[i]){continue;}
|
||||
if(debug)
|
||||
console.log("%c[event triggered]: "+events[i],"color:green");document.dispatchEvent(new CustomEvent(events[i]));}};}};let getParams=function getParams(func){const REGEX_COMMENTS=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;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);}
|
||||
console.log("%c[event triggered]: "+events[i],"color:green");document.dispatchEvent(new CustomEvent(events[i]));}};},default:function(){let collection=container.get('project-collection');let document=container.get('project-document');console.log(collection);console.log(document);if(collection&&document&&collection.$id===document.$id){for(const[key,value]of Object.entries(document)){delete document[key];}
|
||||
if(collection.rules){for(let index=0;index<collection.rules.length;index++){const element=collection.rules[index];switch(element.type){case'text':case'email':case'url':case'ip':document[element.key]=element.default||'';break;case'numeric':document[element.key]=element.default||0;break;case'boolean':document[element.key]=element.default||false;break;default:document[element.key]=null;break;}
|
||||
if(element.array){document[element.key]=[];}}}
|
||||
console.log(document);}}};let getParams=function getParams(func){const REGEX_COMMENTS=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;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 getValue=function(key,prefix,data){let result=null;if(!key){return null;}
|
||||
let attrKey=prefix+key.charAt(0).toUpperCase()+key.slice(1);if(element.dataset[attrKey]){result=expression.parse(element.dataset[attrKey]);if(element.dataset[attrKey+"CastTo"]==="array"){result=result.split(",");}}
|
||||
|
|
2
public/dist/scripts/app-dep.js
vendored
2
public/dist/scripts/app-dep.js
vendored
|
@ -57,7 +57,7 @@ if(success===undefined){throw new Error('Missing required parameter: "success"')
|
|||
if(failure===undefined){throw new Error('Missing required parameter: "failure"');}
|
||||
let path='/account/sessions/oauth2/{provider}'.replace(new RegExp('{provider}','g'),provider);let payload={};if(success){payload['success']=success;}
|
||||
if(failure){payload['failure']=failure;}
|
||||
payload['project']=config.project;payload['key']=config.key;let query=Object.keys(payload).map(key=>key+'='+encodeURIComponent(payload[key])).join('&');return config.endpoint+path+((query)?'?'+query:'');},deleteSession:function(sessionId){if(sessionId===undefined){throw new Error('Missing required parameter: "sessionId"');}
|
||||
payload['project']=config.project;payload['key']=config.key;let query=Object.keys(payload).map(key=>key+'='+encodeURIComponent(payload[key])).join('&');console.log(config);return config.endpoint+path+((query)?'?'+query:'');},deleteSession:function(sessionId){if(sessionId===undefined){throw new Error('Missing required parameter: "sessionId"');}
|
||||
let path='/account/sessions/{sessionId}'.replace(new RegExp('{sessionId}','g'),sessionId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},createVerification:function(url){if(url===undefined){throw new Error('Missing required parameter: "url"');}
|
||||
let path='/account/verification';let payload={};if(url){payload['url']=url;}
|
||||
return http.post(path,{'content-type':'application/json',},payload);},updateVerification:function(userId,secret){if(userId===undefined){throw new Error('Missing required parameter: "userId"');}
|
||||
|
|
9
public/dist/scripts/app.js
vendored
9
public/dist/scripts/app.js
vendored
|
@ -126,7 +126,7 @@ catch(error){throw new Error('Failed to evaluate expression "'+syntax+' (resulte
|
|||
if(debug){console.info('debug-ls-if result:',result);}
|
||||
paths=expression.getPaths();let prv=element.$lsSkip;element.$lsSkip=!result;if(!result){element.style.visibility='hidden';element.style.display='none';}
|
||||
else{element.style.removeProperty('display');element.style.removeProperty('visibility');}
|
||||
if(prv===true&&element.$lsSkip===false){view.render(element)}};check();for(let i=0;i<paths.length;i++){let path=paths[i].split('.');while(path.length){container.bind(element,path.join('.'),check);path.pop();}}}});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 debug=element.getAttribute('data-debug')||false;let echo=function(){let array=container.path(expr);array=(!array)?[]:array;let watch=!!(array&&array.__proxy);while(element.hasChildNodes()){element.removeChild(element.lastChild);element.lastChild=null;}
|
||||
if(prv===true&&element.$lsSkip===false){view.render(element)}};check();for(let i=0;i<paths.length;i++){let path=paths[i].split('.');while(path.length){container.bind(element,path.join('.'),check);path.pop();}}}});window.ls.container.get('view').add({selector:'data-ls-loop',template:false,repeat:false,nested:false,controller:function(element,view,container,window,expression){let expr=expression.parse(element.getAttribute('data-ls-loop'));let as=element.getAttribute('data-ls-as');let debug=element.getAttribute('data-debug')||false;let echo=function(){let array=container.path(expr);array=(!array)?[]:array;let watch=!!(array&&array.__proxy);while(element.hasChildNodes()){element.removeChild(element.lastChild);element.lastChild=null;}
|
||||
if(array instanceof Array&&typeof array!=='object'){throw new Error('Reference value must be array or object. '+(typeof array)+' given');}
|
||||
let children=[];element.$lsSkip=true;element.style.visibility=(0===array.length)?'hidden':'visible';for(let prop in array){if(!array.hasOwnProperty(prop)){continue;}
|
||||
children[prop]=template.cloneNode(true);element.appendChild(children[prop]);(index=>{let context=expr+'.'+index;container.addNamespace(as,context);if(debug){console.info('debug-ls-loop','index',index);console.info('debug-ls-loop','context',context);console.info('debug-ls-loop','context-path',container.path(context).name);console.info('debug-ls-loop','namespaces',container.namespaces);}
|
||||
|
@ -298,7 +298,7 @@ let thresh=1000;if(Math.abs($value)<thresh){return $value+" B";}
|
|||
let units=["kB","MB","GB","TB","PB","EB","ZB","YB"];let u=-1;do{$value/=thresh;++u;}while(Math.abs($value)>=thresh&&u<units.length-1);return($value.toFixed(1)+'<span class="text-size-small unit">'+
|
||||
units[u]+"</span>");}).add("statsTotal",function($value){if(!$value){return 0;}
|
||||
$value=abbreviate($value,1,false,false);return $value==="0"?"N/A":$value;}).add("isEmptyObject",function($value){return((Object.keys($value).length===0&&$value.constructor===Object)||$value.length===0)}).add("activeDomainsCount",function($value){let result=[];if(Array.isArray($value)){result=$value.filter(function(node){return(node.verification&&node.certificateId);});}
|
||||
console.log(result);return result.length;}).add("documentLabel",function($value,rule,filter){let value=($value!==null&&$value[rule['key']]!==undefined)?$value[rule['key']]:null;switch(rule['type']){case'bool':case'boolean':return(value)?'true':'false';break;case'numeric':console.log(value);return(value&&value.toString)?value.toString():value;break;default:return value;break;}}).add("documentRequired",function($value,rule,filter){if(!$value||$value==='false'){return'';}
|
||||
return result.length;}).add("documentLabel",function($value,rule,filter){let value=($value!==null&&$value[rule['key']]!==undefined)?$value[rule['key']]:null;switch(rule['type']){case'bool':case'boolean':return(value)?'true':'false';break;case'numeric':return(value&&value.toString)?value.toString():value;break;default:return value;break;}}).add("documentRequired",function($value,rule,filter){if(!$value||$value==='false'){return'';}
|
||||
return'required';});function abbreviate(number,maxPlaces,forcePlaces,forceLetter){number=Number(number);forceLetter=forceLetter||false;if(forceLetter!==false){return annotate(number,maxPlaces,forcePlaces,forceLetter);}
|
||||
let abbr;if(number>=1e12){abbr="T";}else if(number>=1e9){abbr="B";}else if(number>=1e6){abbr="M";}else if(number>=1e3){abbr="K";}else{abbr="";}
|
||||
return annotate(number,maxPlaces,forcePlaces,abbr);}
|
||||
|
@ -317,7 +317,10 @@ throw new Error("This callback is only valid for forms");};},alert:function(text
|
|||
return url;}}else{if(typeof value!=="undefined"&&value!==null){var separator=url.indexOf("?")!==-1?"&":"?";hash=url.split("#");url=hash[0]+separator+key+"="+value;if(typeof hash[1]!=="undefined"&&hash[1]!==null){url+="#"+hash[1];}
|
||||
return url;}else{return url;}}};keys=keys.split(",").map(element=>element.trim());return function(serviceForm,router,window){let url=window.location.href;keys.map(node=>{node=node.split("=");let key=node[0]||"";let name=node[1]||key;let value=getValue(key,"param",serviceForm);url=updateQueryString(name,value?value:null,url);});if(url!==window.location.href){window.history.pushState({},"",url);router.reset();}};},trigger:function(events){return function(document){events=events.trim().split(",");for(let i=0;i<events.length;i++){if(""===events[i]){continue;}
|
||||
if(debug)
|
||||
console.log("%c[event triggered]: "+events[i],"color:green");document.dispatchEvent(new CustomEvent(events[i]));}};}};let getParams=function getParams(func){const REGEX_COMMENTS=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;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);}
|
||||
console.log("%c[event triggered]: "+events[i],"color:green");document.dispatchEvent(new CustomEvent(events[i]));}};},default:function(){let collection=container.get('project-collection');let document=container.get('project-document');console.log(collection);console.log(document);if(collection&&document&&collection.$id===document.$id){for(const[key,value]of Object.entries(document)){delete document[key];}
|
||||
if(collection.rules){for(let index=0;index<collection.rules.length;index++){const element=collection.rules[index];switch(element.type){case'text':case'email':case'url':case'ip':document[element.key]=element.default||'';break;case'numeric':document[element.key]=element.default||0;break;case'boolean':document[element.key]=element.default||false;break;default:document[element.key]=null;break;}
|
||||
if(element.array){document[element.key]=[];}}}
|
||||
console.log(document);}}};let getParams=function getParams(func){const REGEX_COMMENTS=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;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 getValue=function(key,prefix,data){let result=null;if(!key){return null;}
|
||||
let attrKey=prefix+key.charAt(0).toUpperCase()+key.slice(1);if(element.dataset[attrKey]){result=expression.parse(element.dataset[attrKey]);if(element.dataset[attrKey+"CastTo"]==="array"){result=result.split(",");}}
|
||||
|
|
2
public/dist/styles/default-ltr.css
vendored
2
public/dist/styles/default-ltr.css
vendored
File diff suppressed because one or more lines are too long
2
public/dist/styles/default-rtl.css
vendored
2
public/dist/styles/default-rtl.css
vendored
File diff suppressed because one or more lines are too long
|
@ -126,7 +126,7 @@ catch(error){throw new Error('Failed to evaluate expression "'+syntax+' (resulte
|
|||
if(debug){console.info('debug-ls-if result:',result);}
|
||||
paths=expression.getPaths();let prv=element.$lsSkip;element.$lsSkip=!result;if(!result){element.style.visibility='hidden';element.style.display='none';}
|
||||
else{element.style.removeProperty('display');element.style.removeProperty('visibility');}
|
||||
if(prv===true&&element.$lsSkip===false){view.render(element)}};check();for(let i=0;i<paths.length;i++){let path=paths[i].split('.');while(path.length){container.bind(element,path.join('.'),check);path.pop();}}}});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 debug=element.getAttribute('data-debug')||false;let echo=function(){let array=container.path(expr);array=(!array)?[]:array;let watch=!!(array&&array.__proxy);while(element.hasChildNodes()){element.removeChild(element.lastChild);element.lastChild=null;}
|
||||
if(prv===true&&element.$lsSkip===false){view.render(element)}};check();for(let i=0;i<paths.length;i++){let path=paths[i].split('.');while(path.length){container.bind(element,path.join('.'),check);path.pop();}}}});window.ls.container.get('view').add({selector:'data-ls-loop',template:false,repeat:false,nested:false,controller:function(element,view,container,window,expression){let expr=expression.parse(element.getAttribute('data-ls-loop'));let as=element.getAttribute('data-ls-as');let debug=element.getAttribute('data-debug')||false;let echo=function(){let array=container.path(expr);array=(!array)?[]:array;let watch=!!(array&&array.__proxy);while(element.hasChildNodes()){element.removeChild(element.lastChild);element.lastChild=null;}
|
||||
if(array instanceof Array&&typeof array!=='object'){throw new Error('Reference value must be array or object. '+(typeof array)+' given');}
|
||||
let children=[];element.$lsSkip=true;element.style.visibility=(0===array.length)?'hidden':'visible';for(let prop in array){if(!array.hasOwnProperty(prop)){continue;}
|
||||
children[prop]=template.cloneNode(true);element.appendChild(children[prop]);(index=>{let context=expr+'.'+index;container.addNamespace(as,context);if(debug){console.info('debug-ls-loop','index',index);console.info('debug-ls-loop','context',context);console.info('debug-ls-loop','context-path',container.path(context).name);console.info('debug-ls-loop','namespaces',container.namespaces);}
|
||||
|
|
|
@ -367,8 +367,6 @@ window.ls.filter
|
|||
});
|
||||
}
|
||||
|
||||
console.log(result);
|
||||
|
||||
return result.length;
|
||||
})
|
||||
.add("documentLabel", function($value, rule, filter) {
|
||||
|
@ -381,7 +379,6 @@ window.ls.filter
|
|||
break;
|
||||
|
||||
case 'numeric':
|
||||
console.log(value);
|
||||
return (value && value.toString) ? value.toString() : value;
|
||||
break;
|
||||
|
||||
|
@ -396,7 +393,8 @@ window.ls.filter
|
|||
}
|
||||
|
||||
return 'required';
|
||||
});
|
||||
})
|
||||
;
|
||||
|
||||
function abbreviate(number, maxPlaces, forcePlaces, forceLetter) {
|
||||
number = Number(number);
|
||||
|
|
|
@ -143,6 +143,52 @@
|
|||
document.dispatchEvent(new CustomEvent(events[i]));
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
default: function() {
|
||||
let collection = container.get('project-collection');
|
||||
let document = container.get('project-document');
|
||||
console.log(collection);
|
||||
console.log(document);
|
||||
|
||||
if(collection && document && collection.$id === document.$id) {
|
||||
for (const [key, value] of Object.entries(document)) {
|
||||
delete document[key];
|
||||
}
|
||||
|
||||
if(collection.rules) {
|
||||
for (let index = 0; index < collection.rules.length; index++) {
|
||||
const element = collection.rules[index];
|
||||
|
||||
switch (element.type) {
|
||||
case 'text':
|
||||
case 'email':
|
||||
case 'url':
|
||||
case 'ip':
|
||||
document[element.key] = element.default || '';
|
||||
break;
|
||||
|
||||
case 'numeric':
|
||||
document[element.key] = element.default || 0;
|
||||
break;
|
||||
|
||||
case 'boolean':
|
||||
document[element.key] = element.default || false;
|
||||
break;
|
||||
|
||||
default:
|
||||
document[element.key] = null;
|
||||
break;
|
||||
}
|
||||
|
||||
if(element.array) {
|
||||
document[element.key] = [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log(document);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -79,8 +79,20 @@
|
|||
border-bottom: solid 1px #efefef;
|
||||
}
|
||||
|
||||
ul {
|
||||
li {
|
||||
ul.sortable {
|
||||
> li {
|
||||
[data-move-up].round, [data-move-down].round, [data-remove].round {
|
||||
background: var(--config-color-focus);
|
||||
color: var(--config-color-background-fade);
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
line-height: 25px;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
.func-margin-end(5px);
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
[data-move-up] {
|
||||
opacity: 0;
|
||||
|
|
Loading…
Reference in a new issue