25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 

1 satır
100 KiB

  1. var jsonAppObj=function(options){var self=this;console.log(),this.json={setup:{},blocks:{},parts:{},functions:{},do:{},on:{},shortcuts:{},texts:{},data:{},var:{}},this.app=this.json;var alertObj={},alertValues={};this.params={},this.javascriptReservedWord=["abstract","arguments","await","boolean","break","byte","case","catch","char","class","const","continue","debugger","default","delete","do","double","else","enum","eval","export","extends","false","final","finally","float","for","function","goto","if","implements","import","in","instanceof","int","interface","let","long","native","new","null","package","private","protected","public","return","short","static","super","switch","synchronized","this","throw","throws","transient","true","try","typeof","var","void","volatile","while","with","yield","Array","Date","eval","function","hasOwnProperty","Infinity","isFinite","isNaN","isPrototypeOf","length","Math","NaN","name","Number","Object","prototype","String","toString","undefined","valueOf","getClass","java","JavaArray","javaClass","JavaObject","JavaPackage","alert","all","anchor","anchors","area","assign","blur","button","checkbox","clearInterval","clearTimeout","clientInformation","close","closed","confirm","constructor","crypto","decodeURI","decodeURIComponent","defaultStatus","document","element","elements","embed","embeds","encodeURI","encodeURIComponent","escape","event","fileUpload","focus","form","forms","frame","innerHeight","innerWidth","layer","layers","link","location","mimeTypes","navigate","navigator","frames","frameRate","hidden","history","image","images","offscreenBuffering","open","opener","option","outerHeight","outerWidth","packages","pageXOffset","pageYOffset","parent","parseFloat","parseInt","password","pkcs11","plugin","prompt","propertyIsEnum","radio","reset","screenX","screenY","scroll","secure","select","self","setInterval","setTimeout","status","submit","taint","text","textarea","top","unescape","untaint","window","onblur","onclick","onerror","onfocus","onkeydown","onkeypress","onkeyup","onmouseover","onload","onmouseup","onmousedown","onsubmit"];var nodes={extend:["setup","blocks","parts","css","actions","texts","data","functions"],params:["style","on","matchMedia","action","code","roles","plugins","css"],exclude:["setup","container","selector","info","note","comment","lang","tag","plugins","template"]};const FORMAT_REGEX={email:/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/,url:/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/,ip:/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,date:/^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/,color:/^#(?:[0-9a-fA-F]{3}){1,2}$|#(?:[0-9a-fA-F]{3,4}){1,2}$/};this.jsonToSchema=function(e,t={}){if("function"==typeof e)throw new TypeError("Can not convert a function");if(void 0===e)return{};if("string"==typeof e)return FORMAT_REGEX.url.test(e)?{type:"string",format:"url"}:FORMAT_REGEX.email.test(e)?{type:"string",format:"email"}:FORMAT_REGEX.ip.test(e)?{type:"string",format:"ip"}:FORMAT_REGEX.date.test(e)?{type:"string",format:"date"}:FORMAT_REGEX.color.test(e)?{type:"string",format:"color"}:{type:"string"};if("boolean"==typeof e)return{type:"boolean"};if("number"==typeof e)return Number.isInteger(e)?{type:"integer"}:{type:"number"};if(Array.isArray(e)){let t={type:"array"};if(!e.length)return t.items={},t;let s=e.map(self.jsonToSchema);return s.every((e=>self.isEqual(e,s[0])))?t.items=s[0]:t.items={oneOf:unique(s)},t}if(null===e)return{type:"null"};let s={type:"object"};return Object.keys(e).length?(s.properties=Object.keys(e).reduce(((t,s)=>(t[s]=self.jsonToSchema(e[s]),t)),{}),s):s},this.isEqual=function(e,t){return JSON.stringify(e)==JSON.stringify(t)},this.dataStorage={_storage:new WeakMap,set:function(e,t,s){this._storage.has(e)||this._storage.set(e,new Map),this._storage.get(e).set(t,s)},get:function(e,t){return this._storage.get(e).get(t)},has:function(e,t){return this._storage.has(e)&&this._storage.get(e).has(t)},remove:function(e,t){var s=this._storage.get(e).delete(t);return 0===!this._storage.get(e).size&&this._storage.delete(e),s}},this.extend=function(e){if("boolean"==typeof arguments[0]&&1==arguments[0])return deepExtend(e);e=e||{};for(var t=1;t<arguments.length;t++)if(arguments[t])for(var s in arguments[t])arguments[t].hasOwnProperty(s)&&(e[s]=arguments[t][s]);return e};var deepExtend=function(e){e=e||{};for(var t=1;t<arguments.length;t++){var s=arguments[t];if(s)for(var l in s)s.hasOwnProperty(l)&&("object"==typeof s[l]&&null!==s[l]?s[l]instanceof Array?e[l]=s[l].slice(0):e[l]=deepExtend(e[l],s[l]):e[l]=s[l])}return e},database,auth,storage;this.var=function(e,t){if(!Array.isArray(e)){var s,l,r;if(e.path&&!e.name&&(s=self.path(e.path,t,".")),"string"==typeof e)s=self.replaceProperties(e,t),r=self.docElement("self.json.var."+s);else{var o=self.replaceProperties(e,t);s=o.name,l=o.value;var n=o.operator,a=o.type;if(s){var i="self.json.var."+s,f=i.substr(i.lastIndexOf(".")+1),c=i.substr(0,i.lastIndexOf(".")),u=self.docElement(c);if(void 0!==l){switch(l=self.actionResult(l,t),a){case"string":l=String(l);break;case"number":l=Number(l);break;case"boolean":l=Boolean(l);break;case"array":case"object":l=JSON.parse(l)}if(u&&f){switch(n){case"+=":u[f]+=l;break;case"-=":u[f]-=l;break;case"/=":u[f]/=l;break;case"*=":u[f]*=l;break;default:u[f]=l}r=u[f]}else self.docElement(i,l)}else o.push?u&&f&&u[f]&&(u[f]=u[f].push(o.push),r=u[f]):o.extend?u&&f&&u[f]&&(u[f]=self.extend({},u[f],o.extend),r=u[f]):r=u[f]}else self.log("var name undefined"),self.log(e),r=void 0;e.do&&e.do.length>0&&(self.log("this.var params.do"),self.log(e.do),self.do(e.do,void 0,t))}return r}for(var d in e)self.var(e[d],t)},this.find=function(e,t){if(e.in)return self.replaceProperties(e.in,t).filter((function(t){if(e.value)if("string"==typeof e.value){if(JSON.stringify(t).indexOf(e.value)>=0)return t}else for(var s in e.value)if(e.value[s]==t[s])return t}))},this.array=function(e,t){for(var s in t&&(e=self.replacePropertyWithPrefix(e,"result",t)),e){var l=self.replaceProperties(e[s],t);e[s]=l}var r=self.element({path:e.name})||[];return e.push&&(Array.isArray(e.push)?r.push(...e.push):r.push(e.push)),e.unshift&&r.unshift(...e.unshift),e.pop?r.pop(e.pop):e.shift?r.shift(e.shift):void self.element({path:e.name,value:r})},this.replace=function(e,t){e=self.replacePropertyWithPrefix(e,"result",t);var s=self.element({path:e.path})||[],l=e.to||"",r=typeof s;switch("string"!==r&&(s=JSON.stringify(s)),e.from&&(s=self.replaceAll(s,e.from,l)),r){case"number":s=Number(s);break;case"boolean":s=Boolean(s);break;case"object":s=JSON.parse(s)}return self.element({path:e.path,value:s})},this.unshift=function(e,t){for(var s in e){var l=self.replaceProperties(s,t),r=self.replaceProperties(e[s],t);if(r){var o=self.element({path:l})||[];o.unshift(r),self.element({path:l,value:o})}}},this.set=function(e,t){if(Array.isArray(e))for(var s of e)self.set(s,t);else for(var l in e){var r=e[l];r&&(r=self.replaceProperties(r,t,!1)),r&&t&&(r=self.replacePropertyWithPrefix(r,"result",t)),self.element({path:l,value:r})}},this.get=function(e){return e.startsWith("'")?String(e.match(/\'([^\']*)\'/)[1]):e.startsWith("Boolean")?Boolean(e.match(/Boolean\(([^\)]*)\)/)[0]):e.startsWith("Number")?Number(e.match(/Number\(([^\)]*)\)/)[0]):e.startsWith("String")?String(e.match(/String\(([^\)]*)\)/)[0]):self.docElement(e)},this.getJSON=function(e,t){var s=new XMLHttpRequest;s.open("GET",e,!0),s.responseType="json",s.onload=function(){var e=s.status;t(200===e?null:e,s.response)},s.send()},this.listeners={},this.resizeActions={},this.firebaseVerifyUser=function(e){if(self.log("firebaseVerifyUser"),self.params.oobCode){var t=self.params.oobCode;auth.applyActionCode(t).then((function(e){self.alert({icon:"success",title:"titVerifyEmail",html:"msgVerifyEmail",confirmButtonText:"btnOk",confirm:function(){window.location.href="/app/index.html"}})})).catch((function(e){self.log("error"),self.alert({icon:"error",title:"titWarning",html:e.code+" - "+e.message,confirmButtonText:"btnOk",confirm:function(){window.location.href="/app/index.html"}})}))}self.do(e)},this.sendMail=function(e){self.log("sendMail");var t={Host:"smtp.mailgun.com",Username:"vito@nuvolaria.com",Password:"bee02191be84c784a665fa98c61e03ce-915161b7-d32cb9d0",From:e.from,To:e.to,Subject:e.subject,Body:e.html};Email.send(t).then((e=>self.alert({icon:"success",title:"titEmailSuccess",confirmButtonText:"btnClose"})))};var x=[{if:3},function(){},3,[]];this.firebaseAddListener=function(e){if(database){e.action&&(self.listeners[e.path]||(self.listeners[e.path]=[]),self.listeners[e.path].push(e.action));var t=database.ref(e.path);t.off(),e.orderByChild&&(t=t.orderByChild(e.orderByChild)),e.orderByKey&&(t=t.orderByKey(e.orderByKey)),e.orderByValue&&(t=t.orderByValue(e.orderByValue)),e.equalTo&&(t=t.equalTo(e.equalTo)),e.startAt&&(t=t.startAt(e.startAt)),e.startAfter&&(t=t.startAfter(e.startAfter)),e.endAt&&(t=t.endAt(e.endAt)),e.endBefore&&(t=t.endBefore(e.endBefore)),e.limitToFirst&&(t=t.limitToFirst(e.limitToFirst)),e.limitToLast&&(t=t.limitToLast(e.limitToLast)),e.where&&(t=t.where(e.where[0],e.where[1],e.where[2]));t.on("value",firebaseEvent)}else self.log("database undefined")};var firebaseEvent=function(e){console.log(e.val());e.ref;if(void 0!==e.val()){var t=e.val(),s=e.ref.toString().split(/\.\w+\//)[1];if(self.log("firebaseEvent: "+s),t)self.localDbUpdate(t,s);else{var l=self.element({path:"self.json.var.db."+self.replaceAll(s,"/",".")});l&&(l=null)}}};this.localDbUpdate=function(e,t){e=Object.fromEntries(Object.entries(e).reverse()),self.element({path:"self.json.var.db."+self.replaceAll(t,"/","."),value:e}),void 0!==self.listeners[t]&&null!==self.listeners[t]&&self.listeners[t].length>0&&(e.path=t,self.listeners[t]&&(self.methods.firebaseEvent.action(e),self.do(self.listeners[t],void 0,e)))},this.firebaseRemoveListener=function(e){(self.log("firebaseRemoveListener"),self.listeners[e.path])&&(delete self.listeners[e.path],database.ref(e.path).off())},this.firebaseRemove=function(e,t){var s;if(self.log("firebaseRemove"),self.log(e),database)return(e?database.ref().child(e):database.ref()).remove((function(e){null==e?(self.log("set SUCCESS"),s={success:!0}):(self.log("set ERROR"),s={success:!1,error:e}),t&&t(s)}));self.log("database not initialized")},this.firebaseSet=function(e,t,s){var l;if(database)return(e?database.ref().child(e):database.ref()).set(t,(function(e){null==e?(self.log("set SUCCESS"),l={success:!0}):(self.log("set ERROR"),l={success:!1,error:e}),s&&s(l)}));self.log("database not initialized")},this.firebaseUpdate=function(e,t,s){var l;if(self.log("firebaseUpdate"),self.log("path"),self.log(e),self.log("value"),self.log(t),database)return(e?database.ref().child(e):database.ref()).update(t,(function(e){null==e?(self.log("update SUCCESS"),l={success:!0}):(self.log("update ERROR"),l={success:!1,error:e}),s&&s(l)}));self.log("database not initialized")},this.firebasePush=function(e,t,s){var l;if(self.log("firebasePush"),self.log(e),database)return(e?database.ref().child(e):database.ref()).push(t,(function(e){null==e?(self.log("push SUCCESS"),l={success:!0}):(self.log("push ERROR"),l={success:!1,error:e}),s&&s(l)}));self.log("database not initialized")},this.firebaseGetPart=function(e){self.log("firebaseGetPart");let t=self.replaceAll(e.localPath,".","/");if(self.log("localPath:"+e.localPath),!self.partContainers[e.localPath])return self.partContainers[e.localPath]=[],self.partContainers[e.localPath].push(e),dbRef=database.ref().child(t),dbRef.once("value").then((function(e){if(e){if(self.log("firebaseGetPart SUCCESS"),self.log(e),void 0!==e.val()){window.dbVal=e.val();var t=e.val();if(self.log("dbVal"),self.log(t),null!==t){let s=e.ref.toString().split(/\.\w+\//)[1],l=self.replaceAll(s,"/",".");for(partObj of(self.log("dbPath: "+s),self.log("localPath: "+l),self.element({path:l,value:t}),self.partContainers[l])){let e=self.replacePropertyWithPrefix(t,"setup",partObj.setup);e=self.replacePropertyWithPrefix(e,"arg",partObj.arg),self.extendJsonFromElement(e),self.html(e,partObj.container)}}}}else self.log("firebaseGetPart ERROR"),result={success:!1,error:8}}));self.partContainers[e.localPath].push(e)},this.firebaseIncrease=function(e){console.log("firebaseIncrease"),self.firebaseGet(e.path,(function(t){if(console.log(t),t.success)if(null===t.data||void 0===t.data||"number"==typeof t.data){var s=Number(t.data)+1;console.log("counter:"+s),self.firebaseSet(e.path,s,(function(t){t.success?(self.log("firebaseIncrease SUCCESS"),e.on&&e.on.success&&self.do(e.on.success,void 0,t)):e.on&&e.on.error&&self.do(e.on.error,void 0,t)}))}else e.on&&e.on.error&&self.do(e.on.error,void 0,t);else e.on&&e.on.error&&self.do(e.on.error,void 0,t)}))},this.firebaseGet=function(e,t){self.log("firebaseGet:"+e);var s={success:!1,error:7};return dbRef=e?database.ref().child(e):database.ref(),dbRef.once("value").then((function(e){if(e){if(self.log("get SUCCESS"),s={success:!0,error:null,data:e.val()},void 0!==e.val()){var l=e.val();l||(l={});var r=e.ref.toString().split(/\.\w+\//)[1];self.log("dbPath: "+r),self.localDbUpdate(l,r)}}else self.log("get ERROR"),s={success:!1,error:8};t(s)}))},this.stringToKey=function(e){return e.replace(/\./g,"%2E")},this.keyToString=function(e){return e.replace(/%2E/g,".")},this.firebaseKey=this.getKey=function(e){return database.ref(e).child(e).push().getKey()},this.exist=function(e){return console.log("selector"),console.log(e),console.log(Boolean(self.query(e))),Boolean(self.query(e))},this.count=function(e){return self.queryAll(e).length};var log=function(e,t){self.log(e),self.log(t)};this.classSelector=function(e){0==e.indexOf(".")&&(e=String(e).substr(1));let t=e.split(" ");e=t[0];var s=new RegExp("[-][[]");return e&&e.match(s)&&(e=t[1]),e&&e.match(s)&&(e=t[2]),e},this.selector=function(e,t,s){var l;if(e){if("string"==typeof e)return e;if(Array.isArray(e))return e;var r;e.selector||e.container?r=e.selector||e.container:t&&(r=t.selector||t.container);var o=e.attr?e.attr:{},n=o.id?o.id:e.id,a=o.class?o.class:e.class,i=o.value?o.value:e.value;return i=(o["data-value"]?o["data-value"]:e["data-value"])||i,n&&(n=self.replaceProperties(n)),i&&(i=self.replaceProperties(i)),a&&(a=self.replaceProperties(a)),a&&(a=self.classSelector(a)),n?l="#"+n:i&&a?l="."+a+'[data-value="'+i+'"]':i&&e.tag?l=e.tag+'[data-value="'+i+'"]':a&&s?l="."+a:e.tag?(l=e.tag,r?(l=r+" > "+e.tag,s||(l+=":eq("+self.count(l)+")")):s||(l+=":eq("+self.count(l)+")")):l=r,l}},this.stringify=function(e){if("object"!=typeof e)return e;try{return JSON.stringify(e)}catch(t){return e}},this.parse=function(e){if("string"!=typeof e)return e;try{return JSON.parse(e)}catch(t){return e}},self.setupId=0,this.replacePropertyWithPrefix=function(e,t,s){var l;return(l="object"==typeof e?self.stringify(e):String(e))&&l.indexOf("{"+t)>=0?(l=(l=l.replace(new RegExp('"{'+t+'[:\\s]?([\\w\\d\\s\\.\\|]*)}"',"g"),(function(e,t){if(t){let l=self.replaceUndefined({match:e,path:t,root:s,removeUndefined:!0});return void 0===l?'""':"object"==typeof l?JSON.stringify(l):"string"==typeof l?'"'+l+'"':l}return"object"==typeof s?JSON.stringify(s):"string"==typeof s?'"'+s+'"':s}))).replace(new RegExp("{"+t+"[:\\s]?([\\w\\d\\s\\.]*)}","g"),(function(e,t){if(t){let l=self.replaceUndefined({match:e,path:t,root:s,removeUndefined:!0});return void 0===l?"":"object"==typeof l?JSON.stringify(l):l}return"object"==typeof s?JSON.stringify(s):s})),self.isJsonString(l)?self.parse(l):l):e},this.replaceResult=function(e,t){var s,l;"object"==typeof e&&((r=self.cloneObject(e))&&r.on&&(s=self.cloneObject(r.on),delete r.on),r&&r.success&&(l=self.cloneObject(r.success),delete r.success),e=self.stringify(e));if(e="string"!=typeof t?self.replaceAll(e,'"{result}"',JSON.stringify(t)):self.replaceAll(e,"{result}",t),self.isJson(e)){var r=self.parse(e);return s&&(r.on=s),l&&(r.success=l),r}return e},this.langText=function(e){if(e){var t=e;return"string"==typeof e?self.json.texts[e]?"object"==typeof(t=self.json.texts[e])&&(t=t[self.json.setup.language]||t.en||t[Object.keys[0]]):t=e:"object"==typeof e&&(t=e[self.json.setup.language]||e.en||e[Object.keys[0]]),t}return e},this.lang=function(e,t){if(!t)return self.json.setup.language;var s=self.replaceProperties(e,t);self.json.setup.language=s,self.log("lang"),self.log(s),document.querySelectorAll("[data-text]").forEach((function(e,t){var s=self.dataStorage.get(e,"params"),l=self.dataStorage.get(e,"selector");self.html(s,{selector:l})}))};var isClipboardWritingAllowed=function(){return new Promise((function(e,t){try{navigator.permissions.query({name:"clipboard-write"}).then((function(t){self.log(t),e("granted"==t.state)}))}catch(e){t(e)}}))};this.codeSearch=function(e){let t=e.selector||e.container;if(t&&e.word){var s=self.query(t),l=ace.edit(s);l.find(e.word,{wrap:!0,caseSensitive:!0,wholeWord:!0,regExp:!1,preventScroll:!1});l.session.selection.clearSelection(),l.setOption("highlightActiveLine",!0)}},this.ace=function(e,t){var s=e.selector||e.container||self.selector(t),l=e.value;if(e.blocks&&self.json.blocks&&(self.json.blocks[e.blocks]?l=self.json.blocks[e.blocks]:self.log('"code" method can\'t find in "blocks" the element '+e.blocks)),e.module){let t=self.replaceProperties(e.module);t&&void 0!==self.modules[t]?l=self.modules[t]:self.log('"code" method can\'t find the file '+e.file)}e.var&&(self.json.var?l=self.var(e.var):self.log('"code" method can\'t find the variable '+e.blocks));var r=self.query(s);if(r){var o=ace.edit(r);if(e.do&&"set"!=e.do){if("get"==e.do)return JSON.parse(o.getValue());if("update"==e.do)self.uiUpdate();else if("search"==e.do){if(e.word){o.find(e.word,{wrap:!0,caseSensitive:!0,wholeWord:!0,regExp:!1,preventScroll:!1});o.session.selection.clearSelection(),o.setOption("highlightActiveLine",!0)}}else if("find"==e.do)o.execCommand("find");else if("copy"==e.do){o.selectAll();let e=o.getCopyText();isClipboardWritingAllowed().then((function(t){t&&navigator.clipboard.writeText(e).then((function(){o.getSession().selection.clearSelection()}))})).catch((function(e){self.log("Cannot copy to clipboard",e)}))}else self.log('"code" function requires value param')}else{e.theme&&o.setTheme(e.theme);var n=e.mode||"ace/mode/json";o.getSession().setMode(n),e.options&&o.setOptions(e.options);var a,i=self.extend({},e.style);if(self.css({style:i},{selector:s}),"string"==typeof l)a="ace/mode/json"==n?JSON.stringify(JSON.parse(l),null,"\t"):l;else if("ace/mode/json"==n)a=JSON.stringify(l,null,"\t");else a=self.docElement(l.function)(l.params);if(a){var f=a.split(/\r\n|\r|\n/).length;r.style.height=Number(21*f)+"px",o.setValue(a,-1),self.uiUpdate()}if(e.on){var c=self.attribute(r,"id");self.codeChangeFunctions[c]=e.on,e.on.change&&o.on("change",(function(e,t){if(self.isJson(t.getValue())){var s=JSON.parse(t.getValue()),l=self.codeChangeFunctions[t.container.id].change,r=self.replaceResult(l,s);self.do(r)}}))}}}else self.log('"code" method can\'t select the container'),self.log("container"),self.log(s),self.log("element"),self.log(r)},this.codeChangeFunctions={},this.editorChangeFunctions={},this.quillElements={},this.text=function(e,t,s){var l,r,o,n,a,i;if("object"==typeof e?(t&&t.isConnected?(i=t,a=self.elementToSelector(i)):(a=self.selector(self.extend({},e,t)),i=self.query(a)),r=e.case,o=e.args,l="object"==typeof e&&(e.key||e.string)||e):"string"==typeof e&&(l=e,t&&(t.isConnected?(i=t,a=self.dataStorage.get(i,"selector")):(a=self.selector(t),i=self.query(a)))),"string"==typeof l&&(l=self.replaceProperties(l,o)),e&&e.lang)n=self.langText(e.lang),n=self.replaceProperties(n,o),r&&(n=self.textCase(n,r)),i&&(i.textContent=n,self.attribute(i,"data-text",!0),self.dataStorage.set(i,"params",e));else{if(!l)return e;if(n=l.lang?self.langText(l.lang):l,n=self.replaceProperties(n,o),r&&(n=self.textCase(n,r)),!i)return n;self.json.texts[l]&&(self.attribute(i,"data-text",!0),self.dataStorage.set(i,"params",e)),e.style&&self.css({style:e.style},{selector:a}),i.textContent=n}};var caseUp=function(e){return e.toUpperCase()},caseDown=function(e){return e.toLowerCase()},capitalize=function(e){return self.capitalize(e)},sortField;this.textCase=function(e,t){if(e){var s=e;switch(t){case"up":s=s.toUpperCase();break;case"down":s=s.toLowerCase();break;case"capitalize":s=self.capitalize(s)}return s}self.log("textParam undefined in textCase")},this.replaceUndefined=function(e){let t,s;return void 0!==typeof e.path&&(e.path.indexOf("|")>0&&([e.path,s]=e.path.split("|")),t=self.element({path:e.path,root:e.root})),null!=t&&null!=t||(void 0!==typeof s?t=s:e.removeUndefined?t="":(t=e.match,self.log(t+" not found","yellow"))),t},this.replaceProperties=function(params,args,removeUndefined){var paramsString,paramOn,paramDo,paramSuccess,paramError,paramEvents,paramConfirm;if("string"==typeof params)paramsString=params;else{var paramsObj=self.cloneObject(params);paramsObj&&(paramsObj.on&&(paramOn=paramsObj.on,delete paramsObj.on),paramsObj.success&&(paramSuccess=paramsObj.success,delete paramsObj.success),paramsObj.error&&(paramError=paramsObj.error,delete paramsObj.error),paramsObj.events&&(paramEvents=paramsObj.events,delete paramsObj.events),paramsObj.confirm&&(paramConfirm=paramsObj.confirm,delete paramsObj.confirm),paramsObj.do&&(paramDo=paramsObj.do,delete paramsObj.do)),paramsString=JSON.stringify(paramsObj)}if(paramsString&&paramsString.indexOf("{")>=0){if(paramsString=paramsString.replace(/\"\{([\w\s\.]+)\}\"/g,(function(e,t,s,l){var r;return t&&(r=self.replaceUndefined({match:"{"+e+"}",path:t,removeUndefined:removeUndefined}))?r.isConnected?self.elementToSelector(r):"string"!=typeof r?self.stringify(r):'"'+r+'"':'""'})),paramsString=paramsString.replace(/\{(\w+\:)?([\w\s\->|\/=\.:#&;,\[\]\']+)\}/g,(function(match,p1,p2,offset,string){var value;if(p1){if(p1.endsWith(":"))if(p1=p1.slice(0,-1),self.functions[p1]){let e=p2.split("|");value=self.function({name:p1,arguments:[e]})}else switch(p1){case"visible":var element=document.querySelector(p2);value=element&&self.isVisible(element);break;case"number":value=Number(p2);break;case"string":value=String(p2);break;case"js":try{value=eval(p2)}catch(e){value="",self.log("javascript error on "+p2),self.log(e)}break;case"wp":case"wordpress":value=self.docElement("self.json.setup.wordpress."+p2)??match;break;case"plugins":value=self.json.resources.pluginsFunctions[p2],value=value&&!Array.isArray(value)?[value]:[];break;case"database":case"db":value=self.docElement("self.json.var.db."+self.replaceProperties(p2,args));break;case"media":value=self.json.setup&&self.json.data.media&&self.docElement("self.json.data.media."+p2)||match;break;case"color":value=self.json.data&&self.json.data.colors&&self.docElement("self.json.data.colors."+p2)||match;break;case"class":value=self.json.data&&self.json.data.class&&self.docElement("self.json.data.class."+p2)||match;break;case"text":value=self.langText(p2);break;case"param":value=self.params[p2]||"";break;case"height":var element=document.querySelector(p2);value=element?element.offsetHeight+"px":"0px";break;case"offsetWidth":var element=document.querySelector(p2);value=element?element.offsetWidth:"0";break;case"width":var element=document.querySelector(p2);value=element?element.offsetWidth+"px":"0px";break;case"local":value=self.methods.local.get(p2);break;case"ace":var element=document.querySelector(p2);if(element){var editor=ace.edit(element);value=JSON.parse(editor.getValue())}break;case"shuffle":value=self.element({path:p2}),value=self.methods.shuffle(value);break;case"select":case"input":case"value":var element=document.querySelector(p2);value=element?String(element.value||""):"";break;case"user":value="in"==p2?self.userIn():"out"==p2?self.userOut():self.user(p2)||match;break;case"length":var varObj=self.element({path:p2});varObj?value="object"==typeof varObj?Object.keys(varObj).length:varObj.length:self.log(p2+" is undefined");break;case"Date":case"time":value="timeZone"==p2?(new Intl.DateTimeFormat).resolvedOptions().timeZone:"weekday"==p2?self.weekday():"stamp"==p2||"timestamp"==p2||"getTimestamp"==p2?self.getTimestamp():"getDay"==p2?(new Date).getDay():"getDate"==p2?(new Date).getDate():"getMonth"==p2?(new Date).getMonth():"getFullYear"==p2?(new Date).getFullYear():"getTime"==p2?(new Date).getTime():"getSeconds"==p2?(new Date).getSeconds():"getMinutes"==p2?(new Date).getMinutes():"getHours"==p2?(new Date).getHours():p2+"=NULL";break;case"now":default:break;case"month":var month="today"==p2||null==p2?(new Date).getMonth():Number(p2);value=self.month(month);break;case"weekday":var day="today"==p2||null==p2?(new Date).getDay():Number(p2);value=self.calendar({index:Number(day),unit:"weekday",format:"long"});break;case"weekdayNarrow":var day="today"==p2||null==p2?(new Date).getDay():Number(p2);value=self.calendar({index:Number(day),unit:"weekday",format:"narrow"});break;case"weekdayShort":var day="today"==p2||null==p2?(new Date).getDay():Number(p2);value=self.calendar({index:Number(day),unit:"weekday",format:"short"});break;case"moment":var timeFormat=p2||"";value=moment().format(timeFormat);break;case"dayjs":var timeFormat=p2||"";value=dayjs().format(timeFormat);break;case"Math":value=self.Math(p2);break;case"action":case"do":self.log("do"),self.log("p2"),self.log(p2),value=self.do(p2);break;case"method":var method=self.element({path:p2,root:self.methods});value=method?method(args):match;break;case"function":var func=self.element({path:p2,root:self.functions});value=func?func(args):match;break;case"on":args?(self.onResult=args,value=self.docElement("self.onResult."+p2),delete self.onResult):value=match;break;case"ajax":args?(self.ajaxResult=args,value=self.docElement("self.ajaxResult."+p2),delete self.ajaxResult):value=match;break;case"if":p2=self.replaceProperties(p2);var ifArr=p2.split("|");self.js(ifArr[0])&&(value=!0),ifArr.length>1&&value&&(value=ifArr[1]),ifArr.length>2&&!value&&(value=ifArr[2]);break;case"random":value=String(Math.floor(Number(p2)*Math.random()));break;case"getKey":case"firebaseKey":value=self.firebaseKey(p2);break;case"window":value=self.docElement(p2)||match}}else if(p2){let e=p2.split(" ")[0];self.functions[e]?(value=self.function({name:e}),value=self.element({path:p2,root:value}),console.log(e),console.log(value)):value=self.replaceUndefined({match:match,path:p2,removeUndefined:removeUndefined})}return value&&value.isConnected&&(value=self.elementToSelector(value)),value||(removeUndefined?value="":null==typeof value&&self.log(match+" is undefined","yellow")),"string"!=typeof value&&(value=self.stringify(value)),value})),paramsString.startsWith("{js:")&&paramsString.endsWith("}")&&(paramsString=self.js(paramsString.substr(4,paramsString.length-1-4))),self.isJsonString(paramsString)){var paramsObj=self.parse(paramsString);return paramOn&&(paramsObj.on=paramOn),paramDo&&(paramsObj.do=paramDo),paramConfirm&&(paramsObj.confirm=paramConfirm),paramSuccess&&(paramsObj.success=paramSuccess),paramError&&(paramsObj.success=paramError),paramEvents&&(paramsObj.events=paramEvents),paramsObj}return paramsString}return paramOn&&(params.on=paramOn),paramDo&&(params.do=paramDo),paramConfirm&&(params.confirm=paramConfirm),paramSuccess&&(params.success=paramSuccess),paramError&&(params.error=paramError),paramEvents&&(params.events=paramEvents),params},this.isJsonString=function(e){try{JSON.parse(e)}catch(e){return!1}return!0},this.isJson=function(e){e="string"!=typeof e?JSON.stringify(e):e;try{e=JSON.parse(e)}catch(e){return!1}return"object"==typeof e&&null!==e},this.replaceStringInObject=function(e,t,s){var l,r;return l="string"==typeof e?e:JSON.stringify(e),r="string"==typeof s?s:JSON.stringify(s),l=self.replaceAll(l,t,r),self.isJson(l)?self.parse(l):l},this.replaceItems=function(e,t,s){var l,r=s||"item";if(l="string"==typeof e?e:JSON.stringify(e),"object"==typeof t||Array.isArray(t)){l=self.replaceAll(l,'"{'+r+'}"',JSON.stringify(t));for(let e in t)l="object"==typeof t[e]?self.replaceAll(l,'"{'+r+":"+e+'}"',JSON.stringify(t[e])):self.replaceAll(l,"{"+r+":"+e+"}",t[e])}else l=self.replaceAll(l,"{"+r+"}",String(t));return l=l.replace(/(\"\s*)\{item\:(\w+)\}(\s*\")/g,(function(e,s,l,r,o,n){var a;return"object"==typeof(a=t&&t[l]||"")?a=self.stringify(a):Array.isArray(a)||(a=s+a+r),a})),self.isJson(l)?self.parse(l):l},this.color=function(e,t){var s=self.replaceProperties(e,t);if(self.json.data&&self.json.data.colors)return self.json.data.colors[s]},this.empty=function(e){var t=self.query(e);if(t)for(;t.firstChild;)t.removeChild(t.firstChild);else self.log('"empty" is unable to select element'),self.log(e)},this.isArray=function(e){return Array.isArray(self.js(e))},this.isVisible=function(e){return"none"!==e.style.display&&!self.hasClass(e,"d-none")},this.isHidden=function(e){return null===e.offsetParent},this.isDisplay=function(e,t){return e.style.display===t},this.inViewport=function(e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)},this.outViewport=function(e){return!self.outViewport(e)},this.notClass=function(e,t){return!self.hasClass(e,t)},this.hasClass=function(e,t){return e.classList?e.classList.contains(t):!!e.className.match(new RegExp("(\\s|^)"+t+"(\\s|$)"))},this.addClass=function(e,t){e.classList?e.classList.add(t):self.hasClass(e,t)||(e.className+=" "+t)},this.removeClass=function(e,t){if(e.classList)e.classList.remove(t);else if(self.hasClass(e,t)){var s=new RegExp("(\\s|^)"+t+"(\\s|$)");e.className=e.className.replace(s," ")}},this.toggleClass=function(e,t){self.hasClass(e,t)?self.removeClass(e,t):self.addClass(e,t)},this.choose=this.select=function(e,t,s){if(Array.isArray(e))for(var l of e)self.choose(l,s);else{var r,o,n;if(n=e["data-value"],e.id&&(r=self.replaceProperties(e.id,s)),e.class&&(o=self.replaceProperties(e.class,s)),n&&(n=self.replaceProperties(n,s)),e.selection){var a=e.selection,i=self.selector({class:o});if(document.querySelectorAll("."+o).forEach((function(e,t){self.removeClass(e,a)})),r||n){i=self.selector({id:r,class:o,"data-value":n});document.querySelectorAll(i).forEach((function(e,t){self.addClass(e,a)}))}}else self.hide({selector:{class:o}}),self.show({selector:{id:r,class:o,"data-value":n}});self.uiUpdate()}},this.toggle=function(e,t,s){if(self.log("toggle"),self.log(e),Array.isArray(e))for(var l in e)self.toggle(e[l],t,s);else{var r;r="string"==typeof e?e:self.selector(e.selector||e.container,void 0,!0)||self.selector(t,void 0,!0);var o=self.query(r);self.isVisible(o)?self.out(e,t,s):self.in(e,t,s)}},this.in=function(e,t,s){if(Array.isArray(e))for(var l in e)self.in(e[l],t,s);else{var r;r="string"==typeof e?e:self.selector(e.selector||e.container,void 0,!0)||self.selector(t,void 0,!0);var o=e.transition||"fadeIn",n=e.duration||"500ms",a=[{show:{selector:r}}],i=[{do:self.resizeEvent}];e.on&&e.on.start&&a.push(e.on.start),e.on&&e.on.end&&i.push(e.on.end);var f={animate:{selector:r,transition:o,duration:n,on:{start:a,end:i}}};self.do(f,void 0,s)}},this.out=function(e,t,s){if(Array.isArray(e))for(var l in e)self.out(e[l],t);else{var r;r="string"==typeof e?e:self.selector(e.selector||e.container,void 0,!0)||self.selector(t,void 0,!0);var o=e.transition||"fadeOut",n=e.duration||"500ms",a=[],i=[{hide:{selector:r}},{do:self.resizeEvent}];e.on&&e.on.start&&a.push(e.on.start),e.on&&e.on.end&&i.push(e.on.end);var f={animate:{selector:r,transition:o,duration:n,on:{start:a,end:i}}};self.do(f,void 0,s)}},this.show=function(e,t,s){var l;if(Array.isArray(e))for(var r in e)self.show(e[r],t);else l="string"==typeof e?e:self.selector(e.selector||e.container,void 0,!0)||self.selector(t,void 0,!0),self.queryAll(l).forEach((function(e,t){self.removeClass(e,"hidden"),self.removeClass(e,"opacity-0"),self.removeClass(e,"invisible"),self.removeClass(e,"d-none"),e.style.visibility="visible"}))},this.hide=function(e,t,s){var l;if(Array.isArray(e))for(var r in e)self.hide(e[r],t);else l="string"==typeof e?e:self.selector(e.selector||e.container,void 0,!0)||self.selector(t,void 0,!0),self.queryAll(l).forEach((function(e,t){self.addClass(e,"hidden")}))},this.matchMedia=function(e,t){window.matchMedia(t).addListener((function(t){t.matches&&self.do(e)}))},this.addFirebaseTag=function(e){var t,s=e.database;if(s)if("string"==typeof(s=self.replaceProperties(s))?t=s:(t=s.path,s.success),t){var l=self.selector(e,void 0,!1),r=self.queryAll(l);r&&r.forEach((function(r,o){var n={path:t};0==document.querySelectorAll('[data-firebase="'+t+'"]').length&&(n.action=[],s.success&&n.action.push(s.success)),r?(r.setAttribute("data-firebase",t),self.dataStorage.set(r,"data-template",e)):(self.log("!element selector:"+l+" / firebase path:"+t),self.log("params"),self.log(e)),void 0!==s.orderByChild&&(n.orderByChild=s.orderByChild),void 0!==s.equalTo&&(n.equalTo=s.equalTo),self.firebaseAddListener(n)}))}else self.log("data object requires path parameter"),self.log(e)},this.dbObject=function(e){var t="self.json.var.db."+self.replaceAll(e,"/",".");return self.docElement(t)},this.only=function(e,t){return t?t==self.user("uid"):!(!!e&&String(e).split(","))||e.indexOf(self.userRole())>=0},this.extendJsonFromElement=function(e){var t=self.cloneObject(e);t.resources&&self.extendJson(self.json,{resources:t.resources}),t.plugins&&self.extendJson(self.json,{plugins:t.plugins}),t.parts&&self.extendJson(self.json,{parts:t.parts}),t.blocks&&self.extendJson(self.json,{blocks:t.parts}),t.shortcuts&&self.extendJson(self.json,{shortcuts:t.shortcuts}),t.css&&self.extendJson(self.json,{css:t.css}),t.setup&&self.extendJson(self.json,{setup:t.setup}),t.data&&self.extendJson(self.json,{data:t.data}),t.var&&self.extendJson(self.json,{var:t.var}),t.texts&&self.extendJson(self.json,{texts:t.texts})},this.query=function(e,t){if(e){"object"==typeof e&&(e=self.selector(e,void 0,!0));var s=e.split(/[ >]+/);for(var l in t||(t=document),s)if(t&&t[0]&&(t=t[0]),t&&t.isConnected){var r=s[l],o=r.match(/(.*):eq\((\d*)\)/);if(o){var n=String(o[1]),a=Number(o[2]);n.startsWith(".")&&(n="."+self.classSelector(n)),t=t.querySelectorAll(n)[a]}else r.startsWith(".")&&(r="."+self.classSelector(r)),t=t.querySelectorAll(r)[0]}else t=void 0;return t||self.log("can't find the element \""+e+'" ("query" function)'),t}},this.queryAll=function(e,t){if(e){if(Array.isArray(e)){let t=self.queryAll(e[0]);e.shift();for(let s of e)t=Array.prototype.slice.call(t).concat(Array.prototype.slice.call(self.queryAll(s)));return t}var s=e.split(/[ >]+/);for(var l in t||(t=document),s)if(t&&t[0]&&(t=t[0]),t&&t.isConnected){var r=s[l],o=r.match(/([^:]*):eq\((\d*)\)/);if(o){var n=String(o[1]),a=Number(o[2]);n.startsWith(".")&&(n="."+self.classSelector(n)),t=t.querySelectorAll(n)[a],l==s.length-1&&t&&(t=[t])}else r.startsWith(".")&&(n="."+self.classSelector(r)),t=t.querySelectorAll(r)}else t=[];return t||self.log("No element selected by "+e),t}console.log("%cDOM queryAll requires selector argument","color: orange")},this.jitcss=function(e){if(e.indexOf("-[")>-1){let t=e.split(" ");for(cl of(self.log("jitcss"),t)){self.log(cl);let e=[...cl.matchAll(new RegExp("([^-]+)[-][[](.+)]","g"))];self.log("jitcss"),self.log(e)}}},this.compileClasses=function(e){var t=e;if(self.json.shortcuts&&self.json.shortcuts.class)for(shortcut in self.json.shortcuts.class)e.indexOf(shortcut)>-1&&(t=self.replaceAll(e,shortcut,self.json.shortcuts.class[shortcut]));if(e.indexOf("(")>=0){t="";let s=e.split(" ");for(cl of s)if(cl.indexOf("(")>=0&&cl.endsWith(")")){let e=cl.split("(");e[1]=e[1].slice(0,-1),Boolean(self.js(e[1]))&&(""!==t&&(t+=" "),t+=e[0])}else""!==t&&(t+=" "),t+=cl;e==t&&(self.log("wrong dynamic class syntax"),self.log(e))}return t},this.createElement=function(e,t){var s=e.selector||e.container||self.selector(t),l=self.query(s),r=self.selector(e,t),o=[];if(l){e||(e={});var n=document.createElement(e.tag);l.appendChild(n),e.attr&&e.attr.class&&(e.attr.class=self.compileClasses(e.attr.class)),self.dataStorage.set(n,"code",e),self.dataStorage.set(n,"key",e.key),o.push(n),e.attr&&self.setAttributes(o,e.attr),e.style&&self.css(e,r)}return o},this.do=this.action=this.execute=function(e,t,s){if(null!=e){"string"==typeof e&&(e=self.replaceProperties(e,s));let a=self.pluginsRequired(e);if(a.length>0)self.pluginsLoader(a,self.do,[e,t,s]);else if(Array.isArray(e))for(var l of e)self.do(l,t,s);else if("object"==typeof e){if((null==e.if||self.if(e.if))&&self.only(e.roles,e.user))if(e.tag){var r=self.selector(e,t);self.extendJsonFromElement(e);self.createElement(e,t);if(e.matchMedia)for(var o in e.matchMedia)self.matchMedia(e.matchMedia[o],o);if(e.html)self.html(e.html,r,s);else for(var n in e)nodes.exclude.indexOf(n)<0&&nodes.params.indexOf(n)<0&&self.nested({key:n,obj:e[n],selector:{selector:r},args:s});self.on(e.on,{selector:r})}else{r=self.selector(e,t);for(var n in e)nodes.exclude.indexOf(n)<0&&nodes.params.indexOf(n)<0&&self.nested({key:n,obj:e[n],selector:r,args:s});e.on&&self.on(e.on,{selector:r})}}else{if("function"==typeof e)return e(t);self.log("can't execute: "+e)}}},this.callback=function(e){if(e){var t=e.to;let l;e.var&&(t="var "+e.var);let r=e.element;if(r&&r.isConnected&&(e.value=self.elementToSelector(r)),t){var s=self.context(t);self.element({path:t,value:e.value,root:s})}e.do&&self.do(e.do,l)}},this.nested=function(e){let t=self.pluginsRequired(e.key);if(t.length>0)self.pluginsLoader(t,self.nested,[e]);else if(e.key.startsWith("set "))self.setData({key:e.key.substr(4),value:e.obj});else if(e.key.startsWith("var ")||e.key.startsWith("data ")||e.key.startsWith("set "))console.log('%cdeprecated key: "'+e.key+'". Use "set key": "value"}',"color:orange"),self.setData({key:e.key,value:e.obj});else{var s=self.element({path:e.key,root:self.methods});if(s){self.log("METHOD: "+e.key,"grey"),s(e.obj,e.selector,e.args)}else{let t,s;if(self.json.parts&&(s=self.element({path:self.replaceAll(e.key,":","."),root:self.json.parts})),s){self.log("PART: "+e.key,"grey");var l=e.obj;(l=self.replaceProperties(l)).selector=l.selector||e.selector,l.setup&&(l=l.setup),t=self.replacePropertyWithPrefix(s,"setup",l),t=self.replacePropertyWithPrefix(t,"arguments",l),self.extendJsonFromElement(t),self.do(t,e.selector,l)}else if(self.json&&self.json.functions&&e.key&&self.json.functions[e.key]){self.log("FUNCTION: "+e.key,"grey");let t=self.replaceProperties(e.obj,void 0,!0);if(t&&Array.isArray(t)||(t=[t]),self.json.functions[e.key].requires){let s=[];for(let t of self.json.functions[e.key].requires)self.pluginsLoaded[t]||s.push({name:t,version:""});s.length>0?self.pluginsLoader(s,self.function,[{name:e.key,arguments:t}]):(self.log("Plugins already loaded: "+e.key,"grey"),self.function({name:e.key,arguments:t}))}else self.log("Function without plugin required: "+e.key,"grey"),self.function({name:e.key,arguments:t})}else{var r=self.element({path:e.key,root:window});if("function"==typeof r)self.log("WINDOW function: "+e.key,"grey"),r(self.replaceProperties(e.obj,void 0,!0));else if(void 0!==r)self.log("window."+e.key+" is not a function","red");else if(e.selector){self.log("TAG: "+e.key,"grey");let t=self.pluginsRequiredByTag(e.obj,e.key);if(t.length>0){let s=[e.obj,e.selector,e.key];self.pluginsLoader(t,self.htmlTag,s)}else self.htmlTag(e.obj,e.selector,e.key)}else self.log(e.key+" not found","red")}}}},this.setData=function(e){let t={};t[e.key]=e.value,self.set(t)},this.partContainers={},this.pluginsRequiredByTag=function(e,t){if(self.json.resources){const o=self.json.resources.pluginsTags,n=self.json.resources.pluginsAttr;var s=[];if(o[t]&&!self.pluginsLoaded[o[t].name]&&s.push(o[t]),"string"==typeof e);else if("object"==typeof e){for(var l of Array.isArray(e)?e:[e])if(l.attr){var r="data-icon";l.attr[r]&&n[r]&&!self.pluginsLoaded[n[r].name]&&s.push(n[r])}}return s}return!1},this.calendar=function(e,t){const s="en"!==self.json.setup.language?self.json.setup.language:"en-US";let l,r;if(e.unit){switch(e.unit){case"month":const t=e.format||"long";var o=new Intl.DateTimeFormat(s,{month:t}).format;l=[...Array(12).keys()].map((e=>o(new Date(Date.UTC(2021,e))))),r=(new Date).getMonth();break;case"weekday":const n=e.format||"long";o=new Intl.DateTimeFormat(s,{weekday:n}).format;l=[...Array(7).keys()].map((e=>o(new Date(Date.UTC(2021,5,e))))),r=self.weekday();break;default:self.log('"calendar" function can\'t recognize "unit" parameter'),self.log(e.unit)}if(l){if(void 0!==e.index){return e.index=self.js(e.index),l[Number(self.replaceProperties(e.index,t))]}return l[r]}self.log('"calendar" function can\'t recognize "unit" or "format" parameters')}else self.log('"calendar" function requires "unit" parameter')},this.month=function(e,t="long"){const s="en"!==self.json.setup.language?self.json.setup.language:"en-GB",l=new Intl.DateTimeFormat(s,{month:t}).format,r=[...Array(12).keys()].map((e=>l(new Date(Date.UTC(2021,e)))));return void 0!==e?r[Number(self.replaceProperties(e))]:r},this.weekday=function(e,t){const s="en"!==self.json.setup.language?self.json.setup.language:"en-GB",l=new Intl.DateTimeFormat(s,{weekday:t}).format,r=[...Array(7).keys()].map((e=>l(new Date(Date.UTC(2021,5,e)))));var o;void 0!==e?o=r[Number(self.replaceProperties(e))]:o=r;return o},this.method=function(e,t){if("string"==typeof e)return self.docElement(e);if(null==e.if||self.if(e.if,void 0,t)){if(self.notEmptyObject(e)){var s=Object.keys(e)[0],l=self.docElement(s),r=e[s];return Array.isArray(r)||(r=[r]),l?"function"==typeof l?l(...r):l:(self.log("unknown function"),self.log(e),e)}}else;},this.Number=function(e,t){return self.log("Number"),self.method({Number:e},t)},this.String=function(e,t){return self.log("String"),self.method({String:e},t)},this.Math=function(e,t){return self.method(e,t,"Math")},this.dayjs=function(e,t){return self.method(e,t,"dayjs")},this.moment=function(e,t){return self.method(e,t,"moment")},this.dynamicCss=function(e,t,s){if(s.indexOf("{")>=0){(l=self.dataStorage.get(element,"resize"))||(l={}),l[t]=s;var l=self.dataStorage.set(element,"resize",l);self.resizeActions[e]||(self.resizeActions[e]={}),self.resizeActions[e][t]=s;self.replaceProperties(s)}else{var r={};r[t]=s,self.css({style:r})}},this.li=function(e,t){if(Array.isArray(e))for(var s in e)self.li(e[s],t);else if(e.items){var l="string"==typeof e.items?self.json.items[e.items]:e.items;for(var s in delete e.items,l)self.only(l[s].roles)&&self.li(self.replaceItems(e,l[s]),t)}else"string"==typeof e&&(e={html:e}),e.tag="li",self.do(e,t)},this.remove=function(e,t,s){var l=self.selector(e.selector||self.selector(t));if(l){var r=self.queryAll(l);r&&r.forEach((function(e,t){e.remove()}))}},this.dispatchEvent=function(e,t,s){var l=self.selector(e.selector||self.selector(t));if(l){var r=self.queryAll(l);r&&r.forEach((function(t,s){t.dispatchEvent(new Event(e.name))}))}},this.html=function(e,t,s){if(e)if(Array.isArray(e))for(var l of e)self.html(l,t,s);else{var r=self.selector(e.selector||e.container)||self.selector(t);if(r){var o=self.query(r);if(o)if("string"==typeof e){var n=self.replaceProperties(e,s);n&&("object"==typeof n?self.do(n,{selector:r},s):"string"==typeof n&&(o.innerHTML+=n))}else if((e.empty||"empty"==e.do)&&(o.innerHTML="",delete e.empty),e.tag)self.do(e,r,s);else if(e.html){var a=self.replaceProperties(e.html,s);self.html(a,{selector:r})}else if(e.lang){var i=e.lang[self.json.setup.language]||e.lang.en||e.lang[Object.keys[0]];if(Array.isArray(i)){var f=[];for(var c of i)f.push({p:c});self.html(f,t,s)}else o.innerHTML=self.replaceProperties(i,s);o&&(self.attribute(o,"data-text",!0),self.dataStorage.set(o,"params",e))}else if(e.text)o.textContent=self.replaceProperties(e.text,s);else if(e.append)o.innerHTML+=self.replaceProperties(e.append,s);else if(e.prepend)o.innerHTML=self.replaceProperties(e.prepend,s)+o.innerHTML;else if(e.blocks)self.blocks(e.blocks,{selector:r},s);else{let l=self.cloneObject(e);l.style&&delete l.style,l.attr&&delete l.attr,console.warn("UNKNOWN TAG"),console.warn(e),self.do(l,{selector:r},s),o.isConnected&&(e.attr&&self.setAttributes(o,e.attr,s),e.style&&self.css(e,t,s))}}else self.log('"html" object requires selector property',"red"),self.log(e)}else self.log('"html" object without params')},this.setAttributes=function(e,t,s){for(var l in t)t[l]?self.attribute(e,l,self.replaceResult(t[l],s)):self.attribute(e,l,"")},this.attribute=function(e,t,s){if(void 0===typeof s)return Array.isArray(e)?e[0].getAttribute(t):e.getAttribute(t);Array.isArray(e)||(e=[e]),e.forEach((function(e,l){"boolean"==typeof s&&s?e.setAttribute(t,""):e.setAttribute(t,self.replaceProperties(s))}))},this.attr=function(e,t,s){self.css(self.replaceProperties(e),t,s)},this.styleElement=function(e,t,s){for(var l in e)l.startsWith("--")?t.style.setProperty(l,self.replaceProperties(e[l],s)):t.style[l]=self.replaceProperties(e[l],s)},this.css=function(e,t,s){if(Array.isArray(e))for(var l of e)self.css(l,t,s);else{var r=self.selector(e.selector||e.container,void 0,!0)||self.selector(t,void 0,!0),o=self.queryAll(r);o?o.forEach((function(l,o){l?("object"==typeof e.style&&self.styleElement(e.style,l,s),e.addClass&&self.addClass(l,e.addClass),e.removeClass&&self.removeClass(l,e.removeClass),e.toggleClass&&self.toggleClass(l,e.toggleClass)):(self.log('the function "css" can\'t find the selector '+r),self.log(e),self.log(t))})):(self.log('"css" function is unable to select: '+r),self.log("params"),self.log(e),self.log("selectorParams"),self.log(t))}},this.numberToHour=function(e){var t=e.value/e.max,s=Math.round(1440*t),l=parseInt(s/60),r=s-60*l;return String(l<10?"0":"")+String(l)+":"+(String(r<10?"0":"")+String(r))},this.hourToNumber=function(e){var t=e.value.split(":"),s=(60*Number(t[0])+Number(t[1]))/1440;return Math.round(s*e.max)},this.pannellum=function(e,t,s){self.log("pannellum");var l=e.selector||e.container,r=self.selector(l)||self.selector(t),o=self.query(r);pannellum.viewer(o,e)},this.qrcode=function(e,t,s){self.log("qrcode");var l=e.selector||e.container,r=self.selector(l)||self.selector(t),o=self.query(r);self.log(r),self.log("element"),self.log(o);var n={text:self.replaceProperties(e.text,s)||"jsonic.io",width:e.size||128,height:e.size||128,useSVG:!0,colorDark:e.colorDark||"#000000",colorLight:e.colorLight||"#ffffff",correctLevel:QRCode.CorrectLevel.H};self.log("QRCodeOptions"),self.log(n),o.textContent="";var a=new QRCode(o,n);return self.log("qrcode"),self.log(a),a},this.weekdaysShort=function(e,t){t||(t=caseUp);var s="en",l=fixo.getFixoLanguage(),r=fixo.getUserLanguage();s=fixo.device?l:r;var o=self.cloneObject(moment.localeData(s).weekdays());o[7]=o[0],o.shift();for(var n=0;n<7;n++)e&&(o[n]=o[n].substr(0,e)),t&&(o[n]=t(o[n]));return o},this.weekDaysToString=function(e){var t="";for(var s in e)e[s]&&(""!==t&&(t+="/"),t+=self.weekdaysShort(3,capitalize)[s]);return t};var dynamicSort=function(e){var t=1;return e.reverse&&(t=-1),sortField=e.field,function(e,s){return(e[sortField]<s[sortField]?-1:e[sortField]>s[sortField]?1:0)*t}};this.sort=function(e){return void 0!==e.object?Array.isArray(e.object)?e.object.sort(dynamicSort({field:e.field,reverse:e.reverse})):self.objectToArray({object:e.object,add:e.add}).sort(dynamicSort({field:e.field,reverse:e.reverse})):(self.log("sort of undefined"),[])},this.objectToArray=function(e){var t=[],s=e.object;if(void 0!==s)for(var l in s)s[l].id=l,e.add&&(s[l]=Object.assign(s[l],e.add)),t.push(s[l]);return t},this.equal=function(e,t){return e&&t?JSON.stringify(e).replace('"',"")==JSON.stringify(t).replace('"',""):e==t};var escapeRegExp=function(e){return e.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")};this.replaceAll=function(e,t,s){if(void 0===e)return e;{let l;if(l="string"==typeof e?e:JSON.stringify(e),e)return t?(l=String(e).replace(new RegExp(escapeRegExp(t),"g"),s),"object"==typeof e&&l?JSON.parse(l):l):e}},this.capitalize=function(e){return e.replace(/\b\w/g,(e=>e.toUpperCase()))},this.getPageName=function(e){var t=e.lastIndexOf("/")+1;return e.substr(t).split(".")[0]},this.goToMainUrl=function(){window.location=self.mainUrl},this.getParameterByName=function(e,t){t||(t=window.location.href),e=e.replace(/[\[\]]/g,"\\$&");var s=new RegExp("[?&]"+e+"(=([^&#]*)|&|#|$)").exec(t);return s?s[2]?decodeURIComponent(s[2].replace(/\+/g," ")):"":null};var paramsToObject=function(e){return e=e.split("#")[0],JSON.parse('{"'+e.replace(/"/g,'\\"').replace(/&/g,'","').replace(/=/g,'":"')+'"}')},objectToParams=function(e){var t="";for(var s in e)t+="&"+s+"="+e[s];return t&&(t=t.substr(1)),encodeURI(t)};this.getParams=function(){var e={},t=window.location.href.split("#")[0];if(t.indexOf("?")>-1){var s=decodeURI(t.split("?")[1]);if(self.log(s),s){var l=self.getParameterByName("k",t);e=l?self.atob(l):paramsToObject(s)}}return e},this.atob=function(e){self.log("atob");var t=paramsToObject(atob(e));return t.h&&(t.h=String(parseInt(String(t.h),36))),t.c&&(t.c=String(parseInt(String(t.c),36))),t.n&&(t.n=String(parseInt(String(t.n),36)),t.n="+"+t.n),self.log(t),t},this.btoa=function(e){return self.log("btoa"),e.h&&(e.h=Number(e.h).toString(36)),e.c&&(e.c=Number(e.c).toString(36)),e.n&&(e.n.startsWith("+")&&(e.n=e.n.substr(1)),e.n=e.n.replace(/ /g,""),e.n=e.n.replace(/-/g,""),e.n=Number(e.n).toString(36)),self.log(e),btoa(objectToParams(e))},this.colorToRgba=function(e,t){var s;if("white"==e&&(e="#fff"),"black"==e&&(e="#000"),/^#([A-Fa-f0-9]{3}){1,2}$/.test(e))return 3==(s=e.substring(1).split("")).length&&(s=[s[0],s[0],s[1],s[1],s[2],s[2]]),"rgba("+[(s="0x"+s.join(""))>>16&255,s>>8&255,255&s].join(",")+","+t+")";self.log("Bad Hex:"+e)};var hueToRGB=function(e,t,s){return 6*(s=s<0?s+1:s>1?s-1:s)<1?e+(t-e)*s*6:2*s<1?t:3*s<2?e+(t-e)*(.66666-s)*6:e},HSLToRGB=function(e){var t,s,l=e[0],r=e[1],o=e[2];return[hueToRGB(t=2*o-(s=o<=.5?o*(r+1):o+r-o*r),s,l+.33333),hueToRGB(t,s,l),hueToRGB(t,s,l-.33333)]},packRGB=function(e){var t=Math.round(255*e[0]),s=Math.round(255*e[1]),l=Math.round(255*e[2]);return(t<16?"0":"")+t.toString(16)+(s<16?"0":"")+s.toString(16)+(l<16?"0":"")+l.toString(16)};this.degToRGB=function(e){return packRGB(HSLToRGB([e/360,1,.5]))},this.stripHtml=function(e){var t=document.createElement("DIV");return t.innerHTML=e,t.textContent||t.innerText||""},this.log=function(e,t){self.json.setup&&self.json.setup.log&&("string"==typeof e?console.log("%c"+e,"color:"+t):console.log(e))};var varlog=function(e){self.log(e),self.log(window[e])},alertInterval;this.logJson=function(e){self.log(JSON.stringify(e))},this.getTimestamp=function(){return Math.floor(Date.now())},this.cloneObject=function(e){var t=JSON.stringify(e);return self.parse(t)},this.setElement=function(e,t){var s=window,l=e.split("."),r=l.pop();if("frame"==l[0]){l.shift();var o=l.shift();o&&null!==document.getElementById(o)&&(s=document.getElementById(o).contentWindow)}else"admin"==l[0]&&(l.shift(),s=fixoAdmin);for(var n=0;n<l.length;n++)s[l[n]]?s=s[l[n]]:t&&(s[l[n]]={});s[r]=t},this.context=function(e){return/^(setup|var|data|texts|parts)[\.\s]/.test(e)?self.json:window},this.element=function(e){let t,s=self.replaceProperties(e.path,e.args),l=e.value&&"string"==typeof e.value?self.replaceProperties(e.value,e.args):e.value;return t=e.root?e.root:self.context(s),self.docElement(s,l,t,e.delete)},this.docElement=function(e,t,s,l){s||(s=window);for(var r=e.split(/[.\s]+/),o=r.pop(),n=0;n<r.length;n++)s[r[n]]?s=s[r[n]]:null!=t&&(s[r[n]]={},s=s[r[n]]);return void 0!==t&&("string"==typeof t&&(t=self.js(t)),s[o]=t),l&&delete s[o],s[o]&&s[o].isConnected?self.elementToSelector(s[o]):s[o]},this.timeToMs=function(e){var t=e.match(/(\d+)(\w+)/);if(!t)return Number(e);var s=Number(t[0]),l=t[1],r={ms:1,s:1e3,m:6e4,h:36e5,d:864e5,milliseconds:1,seconds:1e3,minutes:6e4,hours:36e5,days:864e5};if(s){if(r[l])return s*r[l];self.log("wrong unit in the time string [value][unit]: "+e)}else self.log("wrong value in the time string [value][unit]: "+e)},this.intervals={},this.timer=function(e,t){let s=self.replaceProperties(e.name);if(s||(s=self.getTimestamp()+Math.random(1e3)),void 0!==e.play&&0==e.play)self.intervals[s]&&self.clearInterval({name:s},t),self.timeouts[s]&&self.clearTimeout({name:s},t);else if(void 0!==e.every){let l=self.replaceProperties(e.every);l&&self.setInterval({name:s,duration:l,do:e.do},t)}else if(void 0!==e.after){let l=self.replaceProperties(e.after);l?self.setTimeout({name:s,duration:l,do:e.do},t):self.do(e.do,null,t)}},this.setInterval=function(e,t){e.name&&e.duration?(self.intervals[e.name]&&clearInterval(self.intervals[e.name]),self.do(e.do),self.intervals[e.name]=setInterval((function(){return self.do(e.do),e.name}),Number(e.duration))):self.log('"setInterval" function requires "name" and "duration" parameters')},this.clearInterval=function(e,t){self.intervals[e.name]&&(clearInterval(self.intervals[e.name]),delete self.intervals[e.name])},this.timeouts={},this.setTimeout=function(e,t){e.name&&e.duration?(self.timeouts[e.name]&&clearInterval(self.timeouts[e.name]),self.timeouts[e.name]=setTimeout((function(){return self.do(e.do),e.name}),Number(e.duration))):self.log('"setTimeout" function requires "name" and "duration" parameters')},this.clearTimeout=function(e,t){self.timeouts[e.name]&&(clearTimeout(self.timeouts[e.name]),delete self.timeouts[e.name])},this.on=function(e,t){var s,l=t?self.selector(t):e.selector;for(var r in l&&((s=self.query(l))?self.dataStorage.set(s,"onData",{on:e,selector:l}):(self.log("can't find the element \""+l+'" ("on" function)'),self.log("params"),self.log(e),self.log("selectorParams"),self.log(t))),e)if("init"==r)self.do(e.init,t);else if("hashchange"==r)self.onHashChange.push(e.hashchange),window.addEventListener("hashchange",(function(){self.json.setup.page.hash=window.location.hash.substr(1),self.do(self.onHashChange),self.uiUpdate()}));else if("scroll"==r)self.onScroll.push(e.scroll),window.addEventListener("scroll",(function(){self.do(self.onScroll)}));else if("resize"==r)self.onResize.push(e.resize),window.addEventListener("resize",(function(){self.do(self.onResize)}));else if("in"==r){if(l){new IntersectionObserver(((e,t)=>{e.forEach((function(e){if(1==e.intersectionRatio){var t=e.target;"true"!==t.getAttribute("in")&&(t.setAttribute("in","true"),self.onEvent(e.target,{type:"in"}))}}))}),{rootMargin:"0px",threshold:[0,1]}).observe(self.query(l))}}else if("inViewport"==r){if(l){new IntersectionObserver(((e,t)=>{e.forEach((function(e){e.intersectionRatio>0&&self.onEvent(e.target,{type:"inViewport"})}))}),{rootMargin:"0px",threshold:[0,1]}).observe(self.query(l))}}else if("outViewport"==r){const e=new IntersectionObserver(((e,t)=>{e.forEach((function(e){0==e.intersectionRatio&&self.onEvent(e.target,{type:"outViewport"})}))}),{rootMargin:"0px",threshold:[0,1]}),t=self.query(l);e.observe(t)}else"selector"!==r&&s&&(s.addEventListener(r,(function(e){s.setAttribute("listener","true"),self.onEvent(this,e)})),"mousedown"!=r&&"mouseup"!=r&&"click"!=r||(s.style.cursor="pointer"))},this.money=function(e){var t=Math.round(100*Number(e))/100,s=String(t);return t==Math.floor(t)&&(s+=",00"),s=String(s).replace(".",",")},this.offcanvas=function(e){self.log("offcanvas"),self.log("params"),self.log(e);var t=e.selector||e.container,s=self.selector(t),l=self.query(s);self.log("offcanvas"),self.log(e),self.log("selector"),self.log(s),self.log("element"),self.log(l),l?"hide"==e.do?self.css({removeClass:"show"},e):new bootstrap.Offcanvas(l).show():self.log('"offcanvas" method can\'t find the selected element')},this.elementToSelector=function(e){if(e.id)return"#"+e.id;if(e.dataset?.value){if(1===document.querySelectorAll(`[data-value="${e.dataset.value}"]`).length)return`[data-value="${e.dataset.value}"]`}if(e.classList&&e.classList.length>0)for(const t of e.classList)if(t){if(1===document.querySelectorAll("."+t).length)return"."+t}const t=e.tagName.toLowerCase();if(1===document.querySelectorAll(t).length)return t;let s=[];for(;e.parentNode;){let t=e.tagName.toLowerCase();t+=`:nth-child(${Array.from(e.parentNode.children).indexOf(e)+1})`,s.unshift(t),e=e.parentNode}return s.join(" > ")},this.onEvent=function(e,t){var s,l=self.dataStorage.get(e,"onData"),r=(self.dataStorage.get(e,"code"),e.getAttribute("data-value"),self.elementToSelector(e));t.type&&l.on&&l.on[t.type];if(l.on)if("2"==t.button&&"mousedown"==t.type)l.on.contextmenu&&(s=l.on.contextmenu);else if(t.type&&l.on[t.type]){var o=l.on[t.type];o&&(o.shiftKey&&t.shiftKey?("shiftKey",s=o.shiftKey):o.altKey&&t.altKey?("altKey",s=o.altKey):o.cmdKey&&t.cmdKey?("cmdKey",s=o.cmdKey):o.shiftKey||o.altKey||o.cmdKey||(s=l.on[t.type]))}if(s){if(t.target){var n,a=t.target.id,i=t.target.className,f=t.target.dataset.value,c=t.target.dataset.selector;c=self.replaceAll(c,'"',"'"),s=self.stringify(s),"string"!=typeof a&&(a=""),"string"!=typeof i&&(i=""),n=self.replaceAll(s,"{on:target.id}",a),n=self.replaceAll(n,"{on:altKey}",t.altKey),n=self.replaceAll(n,"{on:target.className}",i),n=self.replaceAll(n,"{on:target.data-value}",f),n=self.replaceAll(n,"{on:target.dataset.value}",f),n=self.replaceAll(n,"{on:target.dataset.selector}",c),n=self.replaceAll(n,"{on:which}",t.which),n=self.replaceAll(n,"{on:clientY}",t.clientY),n=self.replaceAll(n,"{on:clientX}",t.clientX),n=self.replaceAll(n,"{on:value}",f),n=self.replaceAll(n,"{on:dragging}",t.which>0),s=this.isJson(n)?self.parse(n):n}var u=l.args;self.do(s,{selector:r},u)}},this.pluginsFunctionAvailable=[],self.pluginsLoader=function(e,t,s){var l=[];for(pack of e)if(null==self.pluginsLoaded[pack.name]){self.log("require plugin "+pack.name,"grey");var r=self.findPlugin(pack.name);let e;var o;for(item of(r?(o=r.files||r,e=r.version):(o=self.json.resources.pluginsFiles[pack.name],e=pack.version),self.pluginsLoaded[pack.name]=e,Array.isArray(o)||(o=[o]),o)){var n=self.replaceAll(item.url,"{version}",e);self.findUrl(l,n)||l.push({name:item.name,url:n,type:item.type})}}if(l.length>0){let e=[];l.forEach((function(t){e.push(loadPlugin({name:t.name,url:t.url,type:t.type,rel:t.rel,as:t.as,content:t.content}))})),Promise.all(e).then((function(e){t(...s)})).catch((function(e){self.log("failed to load error"),self.log(item),self.log(e)}))}},this.pluginsRequired=function(e){if(self.json.resources){const o=self.json.resources.pluginsFunctions;var t=[];if("string"==typeof e)o[e]&&(self.pluginsLoaded[o[e].name]||t.push(o[e]));else if("object"==typeof e){for(var s of Array.isArray(e)?e:[e])for(var l in s){var r=l.indexOf(".")>=0?l.substr(0,l.indexOf(".")):l;o[r]&&(self.pluginsLoaded[o[r].name]||t.push(o[r]))}}return t}return[]},this.functionName=function(e){if("object"==e){const t=Object.keys(e)[0];if(["database","ace","moment","dayjs"].indexOf(t)>=0)return t}},this.for=function(e,t,s){let l=self.selector(e.selector||e.container)||self.selector(t),r=e.id||e.name;if(e.of){var o=self.replaceProperties(e.of,s);if(o&&(e.html&&(e.do?Array.isArray(e.do)||(e.do=[e.do]):e.do=[],e.do.push({html:e.html})),"object"==typeof o)){let t=0;for(var n in o){if("object"==typeof(c=o[n])&&(c.key=n,c.index=n),"object"==typeof c.output)for(let e in c.output){"string"==typeof(u=c.output[e])?u=self.js(u,s):"object"==typeof u&&(u=self.replaceProperties(u,s)),c=self.replaceItems(c,u,e)}if(e.do.length>0){let s=e.do;if(e.var&&(self.element({path:e.var,value:c,root:self.json.var}),s=self.replacePropertyWithPrefix(s,"index:"+e.var,n)),r&&(s=self.replacePropertyWithPrefix(s,"index:"+r,n),s=self.replacePropertyWithPrefix(s,r,c)),e.delay){e.delay=self.replaceProperties(e.delay);let l=e.var||r;self.timer({name:"t"+l+n,after:t*e.delay,do:s})}else self.do(s,{selector:l})}t+=1}}}else if(void 0!==e.from&&void 0!==e.to){var a=self.js(self.replaceProperties(e.step))||1,i=self.js(self.replaceProperties(e.from))||0,f=self.js(self.replaceProperties(e.to));if(void 0!==f)for(n=Number(i);n<=Number(f);n+=Number(a)){var c;if(e.var&&self.element({path:e.var,value:n,root:self.json.var}),(c=self.replaceItems(e,String(n),r)).output&&"object"==typeof c.output)for(let e in c.output){var u;"string"==typeof(u=c.output[e])?u=self.js(u,s):"object"==typeof u&&(u=self.replaceProperties(u,s)),c=self.replaceItems(c,u,e)}c.do&&(e.do=self.replacePropertyWithPrefix(c.do,"index:"+r,n),self.do(c.do,t,s)),c.html&&(e.html=self.replacePropertyWithPrefix(c.html,"index:"+r,n),self.html(c.html,t))}}else self.log('"for" element requires "value" or "from" and "to" parameters'),self.log(e)},this.htmlTag=function(e,t,s,l){if(Array.isArray(e))for(var r in e)self.htmlTag(e[r],t,s,l);else{let r=s.indexOf(" ");if(r>0){let t=s.substr(r+1);if(s=s.slice(0,r),t){"object"!=typeof e&&(e={text:String(e)}),e.attr||(e.attr={});let s=t.split(" ");var o="";for(let t of s){if(new RegExp("([_a-zA-Z]+[_a-zA-Z0-9-]*)=(.+)").test(t)){let s=t.split("=");e.attr[s[0]]=s[1]}else o+=" "+t}e.attr.class?e.attr.class=e.attr.class+o:e.attr.class=o}}let n=self.createTagParams(e,s,l);self.do(n,t),e.database&&self.addFirebaseTag(self.extend({},e,t))}},this.createTagParams=function(e,t,s){if(!s)switch(t){case"header":case"main":case"footer":case"div":case"p":s="html";break;case"img":s="src";break;default:s="text"}var l={};return"string"==typeof e?l[s]=e:l=e,l.tag=t,l},this.onResize=[],this.onHashChange=[],this.onScroll=[],this.notEmptyObject=function(e){return e&&Object.keys(e).length>0},this.run=function(e,t,s){if(Array.isArray(e))for(var l in e)self.run(e[l],t,s);else{var r;if("object"==typeof e)r=self.cloneObject(e);else{if("string"!=typeof e)return"function"==typeof e?e(s):e;r=self.replaceProperties(e)}if("object"==typeof r){var o=r.selector||r.container;o||(o=t),"string"==typeof o&&(o={selector:o});var n={};for(key in r)if(nodes.extend.indexOf(key)>=0){var a={};a[key]=r[key],self.extendJson(self.json,a)}else["setup","container","selector","resources","on","do"].indexOf(key)<0&&(n[key]=r[key]);if(r.on&&self.on(r.on,o),r.do&&self.do(r.do,o,s),self.notEmptyObject(n))return self.do(n,o,s)}}},this.inputValue=function(e){var t=self.selector(e.selector||e.container);return document.querySelector(t).value},this.part=this.block=function(e,t,s){let l,r,o;"string"==typeof e.do&&self.json.parts?(self.log("PART: "+e.do,"brown"),e.do=self.replaceProperties(e.do),r="object"==typeof e.do?e.do:self.element({path:self.replaceAll(e.do,":","."),root:self.json.parts})):"object"==typeof e.do&&(r=e.do),r&&(e.arguments&&(o=self.replaceProperties(e.arguments)),"object"==typeof e.arguments&&(o=e.arguments.setup?e.arguments.setup:e.arguments,o.selector=o.selector||e.selector),l=self.replacePropertyWithPrefix(r,"setup",o),l=self.replacePropertyWithPrefix(l,"arguments",o),self.extendJsonFromElement(l),self.do(l,e.selector,o))},this.blocks=function(e,t,s){if(Array.isArray(e))for(var l in e)self.blocks(e[l],t,s);else if("string"==typeof e){var r=self.replaceProperties(e,s),o=self.element({path:"self.json.blocks."+r});o?self.run(o,t,s):self.log("library component not found: "+e)}else self.run(e,t,s)},this.uiUpdate=function(e){window.dispatchEvent(new Event("resize"))},this.resizeEvent=function(e){for(var t in self.resizeActions){var s=self.query(t);for(var l in self.resizeActions[t])if("action"==l)self.do(self.resizeActions[s].action,{selector:t});else{var r=self.resizeActions[t][l],o=self.replaceProperties(r)||"";s.style[l]=o}}},this.pageFullScreen=function(e){self.log("pageFullScreen"),e?self.addClass(document.querySelector("body"),"fullscreen"):self.removeClass(document.querySelector("body"),"fullscreen")},this.link=function(e,t){e=self.replaceProperties(e,t),window.location.href=e},this.reload=function(){location.reload()},this.gotoHomePage=function(){self.gotoPage(self.homePage())},this.homePage=function(){if(self.json.pages){if(Object.keys(self.json.pages).length>0)return self.json.pages.home?"home":Object.keys(self.json.pages)[0];self.log('No pages in "pages" node')}else self.log('Can\'t find the "pages" node')},this.updateCodeEditors=function(){var e=document.querySelectorAll(".ace_editor");e&&e.forEach((function(e,t){ace.edit(e).renderer.updateFull(!0)}))},this.gotoPage=function(e,t){if(self.log("page"),self.log("pageId"),self.log(e),self.log("fromHash"),self.log(t),!e)return self.json.setup.page;if(self.json.pages)if(self.json.pages[e]){var s=self.json.pages[e];if(e!==self.json.setup.page.id||t!==self.json.setup.page.hash){t?self.json.setup.page.hash=t:delete self.json.setup.page.hash;self.json.pages[e].fullscreen;var l=s.roles?String(s.roles).split(","):void 0;self.params.d||!s.roles||l.indexOf(self.userRole())>=0?(e!==self.json.setup.page.id&&(self.json.setup.page.id=e,self.json.setup.page.title=s.title,self.json.setup.page.roles=s.roles,self.hide({class:"page"}),self.in({class:"page","data-value":e,transition:"fadeIn"}),self.uiUpdate()),s.update&&self.do(s.update),s.init&&self.do(s.init),self.log(s),s.on&&self.on(s.on,{selector:".page[data-value="+e+"]"})):"guest"==self.userRole()||self.alert("Non hai i privilegi per accedere a questa pagina")}}else self.log("Can't find the page \""+e+'"');else self.log('Can\'t find the main node "pages"')},this.getTime=function(e){var t=parseInt(e/1e3),s=parseInt(t/60);return t-=60*s,s<10&&(s="0"+s),t<10&&(t="0"+t),s+":"+t},this.sortablejs=function(e,t,s){let l=self.selector(e.selector||e.container,void 0,!0)||self.selector(t,void 0,!0),r=self.query(l);self.log("container"),self.log(l),self.log("query"),self.log(r);Sortable.create(r)},this.alert=function(e,t){var s=self.cloneObject(e);if(s){if(s.do&&"fire"!==s.do)return Swal[s.do](e);"string"==typeof s&&(s=self.text({string:s,args:t})),"number"==typeof s&&(s=String(s)),void 0!==s.title&&(s.title=self.text({string:s.title,args:t})),s.html&&"string"==typeof s.html&&(s.html=self.replaceProperties(s.html,t)),void 0!==s.text&&(s.text=self.text({string:s.text,args:t})),s.inputValue&&(s.inputValue=self.text({string:s.inputValue,args:t})),s.cancelButtonText&&(s.cancelButtonText=self.text({string:s.cancelButtonText,args:t})),s.confirmButtonText&&(s.confirmButtonText=self.text({string:s.confirmButtonText,args:t})),s.denyButtonText&&(s.denyButtonText=self.text({string:s.denyButtonText,args:t})),s.inputPlaceholder&&(s.inputPlaceholder=self.text({string:s.inputPlaceholder,args:t})),s.validationMessage&&(s.validationMessage=self.text({string:s.validationMessage,args:t})),s.footer&&(s.footer=self.text({string:s.footer,args:t})),s.upload&&(s.html='<form class="box" method="post" action="" enctype="multipart/form-data"><div class="drop-zone"><div class="drop-zone-caption">'+self.text("dragAndDropFiles")+'</div><span class="btn btn-primary btn-file" style="position: relative"><span>'+self.text("chooseFiles")+'</span><input type="file" accept=".ply, .obj, .stl" class="drop-zone-file" name="files[]"></span></div></form> '),alertObj.confirm=s.confirm,alertObj.cancel=s.cancel,alertObj.deny=s.deny,alertObj.on=s.on,alertObj.id=s.id,delete s.on;var l=s.html||s.blocks;l&&(s.html=" ");var r,o=self.replaceProperties(s,t);if(s.animate){var n=s.animate.in||s.animate,a=s.animate.out||s.animate;s.animate.in&&(n=s.animate.in.transition||s.animate.in),s.animate.out&&(a=s.animate.out.transition||s.animate.out),o.showClass={popup:"animate__animated animate__faster animate__animated animate__"+n},o.hideClass={popup:"animate__animated animate__faster animate__animated animate__"+a}}o.icon&&"string"!=typeof o.icon&&(r=self.cloneObject(o.icon),delete o.icon),delete o.blocks,delete o.onUpload,delete o.upload,o.confirm&&delete o.confirm,o.cancel&&delete o.cancel,o.timerProgressBar&&(o.onBeforeOpen=function(){alertInterval=setInterval((()=>{const e=Swal.getContent();if(e){const t=e.querySelector("b");t&&(t.textContent=self.getTime(Swal.getTimerLeft()))}}),100)},o.onClose=function(){clearInterval(alertInterval)}),Swal.fire(o).then((e=>{e.value;alertObj.on&&(alertObj.on.value&&e.value&&(alertObj.id&&(alertValues[alertObj.id]=e.value),alertValues.value=e.value,setTimeout((function(){alertObj.on.value=self.replacePropertyWithPrefix(alertObj.on.value,"alert",alertValues),self.do(alertObj.on.value,void 0,e.value)}),500)),alertObj.on.isConfirmed&&e.isConfirmed&&(alertObj.id&&(alertValues[alertObj.id]=e.isConfirmed),alertObj.on.isConfirmed=self.replacePropertyWithPrefix(alertObj.on.isConfirmed,"alert",alertValues),alertObj.on.isConfirmed=self.replacePropertyWithPrefix(alertObj.on.isConfirmed,"alert",e),self.do(alertObj.on.isConfirmed,void 0,e.value)),alertObj.on.isDenied&&e.isDenied&&(alertObj.on.isDenied=self.replacePropertyWithPrefix(alertObj.on.isDenied,"alert",e),self.do(alertObj.on.isDenied,void 0,e.value)),alertObj.on.isDismissed&&e.isDismissed&&(alertObj.on.isDismissed=self.replacePropertyWithPrefix(alertObj.on.isDismissed,"alert",e),self.do(alertObj.on.isDismissed,void 0,e.dismiss)),console.log("alertValues"),console.log(alertValues))})),l&&self.do(l,{selector:"#swal2-html-container"}),r&&(self.do(r,{selector:".swal2-icon"}),self.css({selector:".swal2-icon",style:{border:"0px solid transparent"}}),self.show({selector:".swal2-icon"})),o.on&&o.on.init&&self.do(o.on.init)}},this.findKey=function(e,t){return e.filter((function(e){return Boolean(e[t])}))};var formatBytes=function(e,t){if(0==e)return"0 Byte";var s=t+1||3,l=Math.floor(Math.log(e)/Math.log(1e3));return parseFloat((e/Math.pow(1e3,l)).toFixed(s))+" "+["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"][l]};this.userRole=function(){switch(Boolean(self.user("uid"))){case!0:return"user";case!1:return"guest"}},this.userIn=function(){return Boolean(self.user("uid"))},this.userOut=function(){return!self.user("uid")},this.user=function(e){return auth&&auth.currentUser?"firstName"==e?self.firstName(auth.currentUser.displayName):auth.currentUser[e]?auth.currentUser[e]:e?void 0:auth.currentUser:void 0},this.firstName=function(e){return e?e.split(" ")[0]:""},this.userUid=function(){return auth?auth.currentUser.uid:void 0},this.userVerified=function(){return auth?auth.currentUser.emailVerified:void 0},this.thunkableMessage=function(e,t){t&&t(e)},this.onMessage={alert:"test"},this.processMessage=function(e){self.alert("processMessage"),self.do(self.onMessage,e)},this.thunkable=function(e,t){if(e.postMessage){var s=self.replaceProperties(e.postMessage,t);if(s)try{ThunkableWebviewerExtension.postMessage(s)}catch(e){}else self.log('in function "thunkable" "postMessage" parameter is wrong')}if(e.receiveMessage){self.onMessage=e.receiveMessage;try{ThunkableWebviewerExtension.receiveMessage(self.processMessage)}catch(e){}}},this.extendFunctions=function(e){for(var t in e)if(e[t].js)try{self.functions[t]=new Function(e[t].js)}catch(s){console.log("ERROR creating function %c"+t,"color:orange;"),self.log(e[t].js),self.log(s.message)}else self.log(t+" function requires js property")},this.function=function(e,t){if(e.name&&e.js)self.functions[e.name]=new Function(e.js);else if(e.name&&!e.js)if(self.functions[e.name]){e.arguments&&Array.isArray(e.arguments)||(e.arguments=[e.arguments]);try{return self.functions[e.name](...e.arguments)}catch(t){console.log("ERROR in function %c"+e.name,"color:orange;"),console.log("obj"),console.log(e),console.log("function"),console.log(self.json.functions[e.name]),console.log(t.message)}}else console.log("ERROR function undefined %c"+e.name,"color:orange;");else if(e.js)return e.arguments&&Array.isArray(e.arguments),new Function(e.js).call(null,e.arguments)},this.eval=this.js=function(code,args){code=self.replaceProperties(code,args);try{return eval(code)}catch(e){return code}},this.if=function(params,selectorParams,args){if("object"!=typeof params)return Boolean(self.js(params,args));var conditionString="if",condition;if(void 0!==params.is){if("string"==typeof params.is){let isReplaced=self.replaceProperties(params.is,args,!0);self.log(isReplaced,"grey");try{condition=Boolean(eval(isReplaced)),self.log(isReplaced+" is "+condition,"grey")}catch(e){self.log(isReplaced,"red"),self.log('"if" condition wrong',"red"),self.log(e,"red")}conditionString+=" is "+params.is}else if(Array.isArray(params.is)){let i=0;if(params.is[i],"="===params.is[i+1])condition=Boolean(eval(params.is[i]+"==="+params.is[i+2]))}}else if(void 0!==params.not)condition=!Boolean(eval(self.replaceProperties(params.not,args,!0))),"string"==typeof params.not&&(conditionString+=" not "+params.not);else if(params.regexp){const e=new RegExp(params.regexp);condition=Boolean(e.test(params.string))}else if(params.isArray)condition=self.isArray(params.isArray),conditionString+="isArray "+params.isArray;else if(params.exist){let e=self.element({path:params.exist});condition=e,self.log('"if" exist '+params.exist,"grey")}else if(params.value&&params.in)condition=self.valueInJson(self.replaceProperties(params.in,args,!0),self.replaceProperties(params.value)),self.log('"if" value '+self.replaceProperties(params.value)+" in array is "+condition,"grey");else if(params.key&&params.in)condition=self.keyInJson(self.replaceProperties(params.in,args,!0),self.replaceProperties(params.key)),self.log('"if" key '+self.replaceProperties(params.key)+" in object is "+condition,"grey");else{let e=self.selector(params.selector||params.container,void 0)||self.selector(selectorParams,void 0);if(e){if(params.exist&&(condition=Boolean(self.exist(e)),conditionString+=" "+e+" exist "+params.exist),params.hasClass){var element=self.query(e);condition=Boolean(self.hasClass(element,params.hasClass)),conditionString+=" "+e+" hasClass "+params.hasClass}if(params.isVisible){var element=self.query(e);condition=Boolean(self.isVisible(element,params.isVisible)),conditionString+=" "+e+" isVisible"}if(params.isHidden){var element=self.query(e);condition=Boolean(self.isHidden(element,params.isHidden)),conditionString+=" "+e+" isHidden"}if(params.inViewport){var element=self.query(e);condition=Boolean(self.inViewport(element,params.inViewport)),conditionString+=" "+e+" inViewport"}if(params.outViewport){var element=self.query(e);condition=Boolean(self.outViewport(element,params.outViewport)),conditionString+=" "+e+" outViewport"}if(params.isDisplay){var element=self.query(e);condition=Boolean(self.isDisplay(element,params.isDisplay)),conditionString+=" "+e+" isDisplay "+params.isDisplay}}else self.log('the "if" function requires "is" or "not" parameter')}if(condition){if(params.then)return"object"==typeof params.then?self.do(params.then):"string"==typeof params.then?self.replaceProperties(params.then):params.then;self.log('the "if" function requires "then" parameter')}else if(params.else)return"object"==typeof params.else?self.do(params.else):"string"==typeof params.else?self.replaceProperties(params.else):params.else},this.switch=function(e,t){var s,l;return e.expression?s=String(self.js(e.expression,t)):self.log('"switch" function requires "expression" parameter'),e.cases?void 0!==s&&e.cases[s]?l="object"==typeof e.cases[s]?self.do(e.cases[s],void 0,t):e.cases[s]:e.cases.default&&(self.log("default"),self.log(e.cases.default),l="object"==typeof e.cases.default?self.do(e.cases.default,void 0,t):e.cases.default):(self.log('"switch" function requires "cases" parameter'),self.log("answer"),self.log(l)),l},this.delay=function(e,t,s){self.log("delay"),self.log("selector"),self.log(t);var l=e.duration||1e3;l=Number(self.replaceProperties(l,s)),self.log(l),e.do&&setTimeout((function(){self.do(e.do,t,s)}),l)},this.firebasePasswordReset=function(e,t,s){firebase.auth().useDeviceLanguage(),auth.sendPasswordResetEmail(e).then((function(){t&&self.do(t)})).catch((function(e){s&&self.do(s,void 0,e.message)}))},this.firebaseUpdateProfile=function(e,t,s){self.log("firebaseUpdateProfile"),self.log(e),auth.currentUser.updateProfile(e).then((function(){self.log("User Profile Updated Successfully"),t&&self.do(t)})).catch((function(e){s&&self.do(s,void 0,e.message)}))},this.firebaseRegister=function(e,t,s){e.email&&e.password&&auth.createUserWithEmailAndPassword(e.email,e.password).then((t=>{self.log(t.user);firebase.auth().currentUser;e.success&&self.do(e.success)})).catch((t=>{e.error&&self.do(e.error,void 0,t.message)}))},this.firebaseLogin=function(e){self.log("firebaseLogin"),self.log(e),auth&&auth.signInWithEmailAndPassword(String(e.email),String(e.password)).then((t=>{firebase.auth().currentUser.emailVerified?e.success&&self.do(self.replaceResult(e,void 0,t)):self.sendEmailVerification(e)})).catch((t=>{self.log("error.code"),self.log(t.code),e.error&&self.do(self.replaceResult(e,void 0,t.message))}))},this.firebaseLogout=function(e){self.log("firebaseLogout"),firebase.auth().signOut().then((function(){self.log("firebaseLogout SUCCESS"),self.log(e.success),e.success&&(localStorage.clear(),self.do(e.success))})).catch((function(t){self.log("firebaseLogout ERROR"),self.log(t),e.error&&self.do(e.error)}))},this.sendEmailVerification=function(e){self.log("sendEmailVerification");var t=firebase.auth().currentUser;firebase.auth().languageCode="it";var s=e.success||self.reload;t.sendEmailVerification().then((function(){firebase.auth().signOut(),self.alert({icon:"success",title:"verifyingemail",html:"msgverifyingemail",showConfirmButton:!1,confirm:s})}))},this.path=function(e,t,s){var l="",r=s||"/";if("string"==typeof e)l=self.replaceProperties(e,t);else for(var o in e)pathObj=e[o],""!==l&&(l+=r),pathObj.string?l+=String(pathObj.string):pathObj.number?l+=Number(pathObj.number):pathObj.function&&(l+=self.doFunctionByName(pathObj.function,window,""));return l},this.executeFunctionByName=function(e,t){if(e){for(var s=[].slice.call(arguments).splice(2),l=e.split("."),r=l.pop(),o=0;o<l.length;o++)t=t[l[o]];if(void 0!==t[r])return t[r].apply(t,s)}else self.log("executeFunctionByName"),self.log("functionName undefined")},this.functions={},this.methods={run:function(e,t,s){self.run(e,t,s)},delay:function(e,t,s){self.delay(e,t,s)},ajax:function(e,t,s){self.ajax(e,t,s)},do:function(e,t,s){self.do(e,t,s)},module:function(e,t,s){self.module(e,s)},js:function(e,t,s){self.js(e,s)},function:function(e,t,s){self.function(e,s)},dispatchEvent:function(e,t,s){self.dispatchEvent(e,s)},lang:function(e,t,s){self.lang(e,s)},find:function(e,t,s){self.find(e,s)},page:function(e,t,s){self.page(e,s)},for:function(e,t,s){self.for(e,t,s)},if:function(e,t,s){self.if(e,t,s)},switch:function(e,t,s){self.switch(e,s)},set:function(e,t,s){self.set(e,s)},data:{set:function(e,t){for(var s in e){var l=e[s];l&&(l=self.replaceProperties(l,t)),l&&t&&(l=self.replacePropertyWithPrefix(l,"result",t)),self.element({path:s,value:l})}},get:function(e){return self.element(e)},delete:function(e,t){var s=self.replaceProperties(e,t);alert(s),self.objToDelete=self.element({path:s}),delete self.objToDelete},add:function(e,t){for(var s in e){var l=self.replaceProperties(s,t),r=self.replaceProperties(e[s],t);if(r){var o=self.element({path:l})||"";o+=String(r),self.element({path:l,value:o})}}},sum:function(e,t){for(var s in console.log('%cdeprecated key "sum". Use set{x: "{x}+1"}',"color:orange"),console.log(e),console.log(t),e){var l=self.replaceProperties(s,t),r=self.replaceProperties(e[s],t);if(r){var o=self.element({path:l})||0;o+=Number(r),self.element({path:l,value:o})}}},sub:function(e,t){for(var s in console.log('%cdeprecated key "sub". Use set{x: "{x}+1"}',"color:orange"),console.log(e),console.log(t),e){var l=self.replaceProperties(s,t),r=self.replaceProperties(e[s],t);if(r){var o=self.element({path:l})||0;o-=Number(r),self.element({path:l,value:o})}}},push:function(e,t){for(var s in e){var l=self.replaceProperties(s,t),r=self.replaceProperties(e[s],t);if(r){var o=self.element({path:l})||[];o.push(r),self.element({path:l,value:o})}}}},text:function(e,t,s){self.text(e,t,s)},html:function(e,t,s){self.html(e,t,s)},attr:function(e,t,s){self.attr(e,t,s)},empty:function(e,t,s){self.empty(e,s)},delete:function(e,t){var s=self.replaceProperties(e,t),l=self.element({path:s});self.log(JSON.stringify(l)),self.element({path:s,delete:!0}),self.log(l)},add:function(e,t,s){for(var l in e){var r=self.replaceProperties(l,s),o=self.replaceProperties(e[l],s);if(o){var n=self.element({path:r})||"";n+=String(o),self.element({path:r,value:n})}}},sum:function(e,t,s){for(var l in e){var r=self.replaceProperties(l,s),o=self.replaceProperties(e[l],s);if(o){var n=self.element({path:r})||0;n+=Number(o),self.element({path:r,value:n})}}},sub:function(e,t,s){for(var l in e){var r=self.replaceProperties(l,s),o=self.replaceProperties(e[l],s);if(o){var n=self.element({path:r})||0;n-=Number(o),self.element({path:r,value:n})}}},push:function(e,t,s){for(var l in e){var r=self.replaceProperties(l,s),o=self.replaceProperties(e[l],s);if(o){var n=self.element({path:r})||[];n.push(o),self.element({path:r,value:n}),self.log("push obj"),self.log(n)}}},calendar:function(e,t,s){self.calendar(e,s)},array:function(e,t,s){self.array(e,s)},replace:function(e,t,s){self.replace(e,s)},shuffle:function(e){let t,s=e.length;for(;0!=s;)t=Math.floor(Math.random()*s),s--,[e[s],e[t]]=[e[t],e[s]];return e},alert:function(e,t,s){self.alert(e,s)},offcanvas:function(e,t,s){self.offcanvas(e,s)},out:function(e,t,s){self.out(e,t,s)},qrcode:function(e,t,s){self.qrcode(e,t,s)},hide:function(e,t,s){self.hide(e,t,s)},show:function(e,t,s){self.show(e,t,s)},toggle:function(e,t,s){self.toggle(e,t,s)},sortablejs:function(e,t,s){self.sortablejs(e,s)},lottie:function(e,t,s){self.lottie(e,t,s)},chart:function(e,t,s){var l=self.selector(t),r=self.query(l);r.innerHTML='<canvas width="100%" height="100%"></canvas>';const o=r.querySelector("canvas");new Chart(o,self.replaceProperties(e))},animate:function(e,t,s){self.animate(e,t,s)},uiUpdate:function(e,t,s){self.uiUpdate(e,s)},swiper:{data:{},init:function(e,t,s){setTimeout((function(){console.log("swiper inited"),console.log(t||e.selector),console.log(e.options);var s=e.options;self.methods.swiper.data[e.name]=new Swiper(self.selector(t||e.selector),s),console.log(self.methods.swiper.data[e.name])}),1e3)}},link:function(e,t,s){self.link(e,s)},scroll:function(e,t,s){self.scroll(e,s)},reload:function(e,t,s){self.reload(e,s)},timer:function(e,t,s){self.timer(e,s)},setInterval:function(e,t,s){self.setInterval(e,s)},clearInterval:function(e,t,s){self.clearInterval(e,s)},setTimeout:function(e,t,s){self.setTimeout(e,s)},clearTimeout:function(e,t,s){self.clearTimeout(e,s)},local:{set:function(e){for(var t in e){var s=e[t];s&&(s=self.replaceProperties(s)),"object"==typeof s&&(s=JSON.stringify(s)),localStorage.setItem(t,s)}},get:function(e){var t=localStorage.getItem(e);return t&&self.isJsonString(t)&&(t=JSON.parse(t)),t},remove:function(e){localStorage.removeItem(e)},clear:function(){localStorage.clear()}},storage:{_storage:new WeakMap,set:function(e,t,s){self.methods.storage._storage.has(e)||self.methods.storage._storage.set(e,new Map),self.methods.storage._storage.get(e).set(t,s)},get:function(e,t){return self.methods.storage._storage.get(e).get(t)},has:function(e,t){return self.methods.storage._storage.has(e)&&self.methods.storage._storage.get(e).has(t)},remove:function(e,t){var s=self.methods.storage._storage.get(e).delete(t);return 0===!self.methods.storage._storage.get(e).size&&self.methods.storage._storage.delete(e),s}},choose:function(e,t,s){self.choose(e,t,s)},remove:function(e,t,s){self.remove(e,t,s)},part:function(e,t,s){self.part(e,t,s)},blocks:function(e,t,s){self.part(e,t,s)},block:function(e,t,s){self.part(e,t,s)},ace:function(e,t,s){self.ace(e,t,s)},code:function(e,t,s){self.code(e,t,s)},database:function(e,t,s){self.database(e,s)},firebase:function(e,t,s){self.firebase(e,s)},firebaseEvent:{action:function(e){var t=e.path;delete e.path,document.querySelectorAll('[data-firebase="'+t+'"]').forEach((function(t,s){var l="self.json.var.db."+self.replaceAll(t.getAttribute("data-firebase"),"/","."),r=(self.docElement(l),e[t.getAttribute("data-value")]),o=self.dataStorage.get(t,"data-template");if("UL"==t.tagName){var n=o.li||o.template;t.innerHTML="";var a=e;for(itemKey in a){(u=a[itemKey]).key=itemKey;var i=self.replaceItems(n,u,"item")||"",f=t.getAttribute("data-selector");self.li(i,{selector:f})}}else if("SPAN"==t.tagName||"P"==t.tagName)t.textContent=r;else if("SVG"==t.tagName);else{if(o.blocks||o.html){var c=o.html||o.blocks;t.innerHTML="";a=e;for(itemKey in self.log("newObj"),self.log(e),a){var u;(u=a[itemKey]).key=itemKey;i=self.replaceProperties(c,void 0,u)||"";self.html(i,{selector:f})}}o.init&&self.do(o.init)}}))}},auth:{init:function(e,t,s){self.log("auth init"),(auth=firebase.auth()).onAuthStateChanged((t=>{self.json.var.user=t,t?(self.log("authStateChanged: USER\n"),self.log("name: "+self.user("displayName")+"\nemail: "+t.email+"\nuid:"+t.uid)):self.log("authStateChanged: GUEST\n"),self.do(e.onAuthStateChanged)}))},sendEmailVerification:function(e,t,s){self.sendEmailVerification(e)},login:function(e,t,s){self.log("params.auth"),self.log(e.auth),self.log(s);var l=self.replaceProperties(e.auth,s);self.log("fba"),self.log(l);var r=self.cloneObject(l);self.log("fbAuth"),self.log(r),e.success&&(r.success=e.success),e.error&&(r.error=e.error),self.firebaseLogin(r,e.success,e.error)},register:function(e,t,s){var l=self.replaceProperties(e.auth,s);l.success=e.success,l.error=e.error,self.firebaseRegister(l,e.success,e.error)},updateProfile:function(e,t,s){e.profile=self.replaceProperties(e.profile,s),self.firebaseUpdateProfile(e.profile,e.success,e.error)},passwordReset:function(e,t,s){e.email=self.replaceProperties(e.email,s),self.firebasePasswordReset(e.email,e.success,e.error)},logout:function(e,t,s){self.firebaseLogout(e)}},thunkable:function(e,t,s){self.thunkable(e,s)},modelViewer:{events:{},on:function(e){let t=self.selector(e.selector||e.container),s=self.query(t);if(self.log("modelViewer on"),self.log("container"),self.log(t),self.log("element"),self.log(s),s){self.methods.modelViewer.events[t]={};var l="load";e[l]&&(self.methods.modelViewer.events[t][l]=e[l],self.log("modelViewer element"),self.log(s),s.addEventListener(l,(e=>{self.log("modelViewer event"),self.log(e);let t=e.path[0].getAttribute("data-selector");self.log(t),self.do(self.methods.modelViewer.events[t][e.type])})))}},set:function(e){let t=self.query(self.selector(e.selector||e.container));if(t){if(e.color){let s=e.color.split(",").map((e=>parseFloat(e)));self.log("Changing color to: ",s);const[l]=t.model.materials;l.pbrMetallicRoughness.setBaseColorFactor(s)}e.exposure&&(t.exposure=e.exposure),e.shadow&&(t.shadowIntensity=e.shadow),e.orientation&&(t.orientation=e.orientation)}}}},this.googleSignInPopup=function(){self.log("googleSignInPopup");var e=new firebase.auth.GoogleAuthProvider;firebase.auth().useDeviceLanguage(),firebase.auth().signInWithPopup(e).then((e=>{e.credential.accessToken,e.user;window.location.reload()})).catch((e=>{e.code,e.message,e.email,e.credential}))},this.console=function(e,t){if("string"==typeof e.log&&e.color){var s=e.color||"white";console.log("%c"+self.replaceProperties(e.log),"color:"+s)}else console.log(self.replaceProperties(e.log||e))},this.module=function(e,t){if("string"==typeof e){var s=self.replaceProperties(e,t);return self.element({root:self.modules,path:s})}if(e.name)if(e.value){var l=self.replaceProperties(e.name,t),r=self.replaceProperties(r,t);self.log("module"),self.log(l),self.log("value"),self.log(r),self.log(r.app.html.div.div[0].text.lang.en),self.modules[l]=r}else e.url&&self.addModule(e)},this.db=function(e,t){if(self.log("db"),"string"==typeof e){var s=self.replaceProperties(e,t);return self.log("paramsReplaced"),self.log(s),self.log(self.var("db."+s,t)),self.var("db."+s,t)}},this.firebase=function(e,t){if(e.initializeApp){var s=self.replaceProperties(e.initializeApp);firebase.initializeApp(s)}else self.database(e,t)},this.database=function(e,t){if("init"==e.do)database=firebase.database(),self.log("database"),self.log(database);else if(database){if("string"==typeof e)return self.db(e,t);if(e)if(e.path&&(e.path=self.path(e.path,t)),e.value&&(e.value=self.replaceProperties(e.value,t),self.log("params.value post replace"),self.log(e.value)),"init"==e.do);else if("increase"==e.do)self.firebaseIncrease(e);else if("get"==e.do)self.firebaseGet(e.path,(function(t){t.success?t.data?(self.log("firebase get SUCCESS"),self.log(e.success),e.on&&e.on.success&&self.do(e.on.success,void 0,t)):(self.log("firebase get no result.data ERROR"),e.on&&e.on.error&&self.do(e.on.error)):(self.log("firebase get ERROR"),e.on&&e.on.error&&self.do(e.on.error,void 0,t))}));else if("new"==e.do&&e.value){var s=self.getKey(e.path);self.firebaseSet(e.path+"/"+s,e.value,(function(t){t.success?(self.log("firebase set SUCCESS"),e.on&&e.on.success&&self.do(e.on.success,void 0,t)):(self.log("firebase set ERROR"),e.on&&e.on.error&&self.do(e.on.error,void 0,t))}))}else"remove"==e.do&&e.path?self.firebaseRemove(e.path,(function(t){t.success?(self.log("firebase set SUCCESS"),e.on&&e.on.success&&self.do(e.on.success,void 0,t)):(self.log("firebase set ERROR"),e.on&&e.on.error&&self.do(e.on.error,void 0,t))})):"addListener"==e.do?self.firebaseAddListener(e):"removeListener"==e.do?self.firebaseRemoveListener(e):"update"==e.do?e.value?self.firebaseUpdate(e.path,e.value,(function(t){t.success?(self.log("firebase update SUCCESS"),e.on&&e.on.success&&self.do(e.on.success,void 0,t)):(self.log("firebase update ERROR"),e.on&&e.on.error&&self.do(e.on.error,void 0,t))})):self.log("data update requires value param"):"push"==e.do?e.value?self.firebasePush(e.path,e.value,(function(t){t.success?(self.log("firebase push SUCCESS"),e.on&&e.on.success&&self.do(e.on.success,void 0,t)):(self.log("firebase push ERROR"),e.on&&e.on.error&&self.do(e.on.error,void 0,t))})):self.log("data push requires value param"):e.value&&self.firebaseSet(e.path,e.value,(function(t){t.success?(self.log("firebase set SUCCESS"),e.on&&e.on.success&&self.do(e.on.success,void 0,t)):(self.log("firebase set ERROR"),e.on&&e.on.error&&self.do(e.on.error,void 0,t))}))}else self.log('"database" function needs to be initialised')},this.ajax=function(e,t,s){if(e.url){var l,r=self.replaceProperties(e.url,s);e.data&&(l=JSON.stringify(self.replaceProperties(e.data,s)));var o=e.type||"POST",n=new XMLHttpRequest;n.open(o,r,!0),n.onload=function(){if(self.log("onload"),self.log(this),this.status>=200&&this.status<400){var t={},s=this.response;s=s.replace(/(\\\")/g,"&quot;");try{s=decodeURI(s)}catch(e){console.log("decodeURI error"),console.log(e)}t.response=self.parse(s),t.status=this.status,t.header=this.getAllResponseHeaders().split("\r\n").reduce(((e,t)=>{let[s,l]=t.split(": ");return e[s]=l,e}),{}),self.log("result"),self.log(t),e.success&&self.do(e.success,void 0,t)}else e.error&&self.do(e.error,void 0,"Server error")},n.onerror=function(t){self.log("error"),self.log(t),self.log("this"),self.log(this),e.error&&self.do(e.error,void 0,"Server unavailable")},l?n.send(l):n.send()}else self.log("ajax method requires url parameter")},this.openFullscreen=function(e){var t=document.getElementById(e);screenfull.isEnabled&&screenfull.request(t)},this.closeFullscreen=function(){screenfull.off("change")},this.scroll=function(e){var t=self.selector(e.selector||e.container),s=document.querySelector(t);if(s){var l=document.body.getBoundingClientRect().top;window.scrollTo({top:s.getBoundingClientRect().top-l,behavior:"smooth"})}else self.log("scroll to unknown element: "+t)};var getClickPosition=function(e){var t=getPosition(e.currentTarget);e.clientX,t.x,e.clientY,t.y};function getPosition(e){for(var t=0,s=0;e;)t+=e.offsetLeft-e.scrollLeft+e.clientLeft,s+=e.offsetTop-e.scrollTop+e.clientTop,e=e.offsetParent;return{x:t,y:s}}function findKey(e,t){for([k,v]of Object.entries(e)){if(k==t)return v;if("object"==typeof v&&null!==v){let e=findKey(v,t);if(e)return e}}}this.animate=function(e,t,s){new Promise(((l,r)=>{let o=self.selector(e.selector||e.container,void 0,!0)||self.selector(t,void 0,!0);var n=e.transition||e;n=self.replaceProperties(n,s);const a=e.duration||"0.5s",i=`animate__${n}`;if(o){var f=self.queryAll(o);function c(t){e.on&&e.on.end&&self.do(e.on.end,{selector:o}),t.stopPropagation(),f&&f.forEach((function(e,t){e&&e.classList.remove("animate__animated",i)})),l("Animation ended")}f&&f.forEach((function(e,t){e?(e.classList.add("animate__animated",i),e.style.setProperty("--animate-duration",a)):(console.log("element"),console.log(e))})),e.on&&e.on.start&&self.do(e.on.start,{selector:o}),e.style&&self.css(e,t),f&&f.forEach((function(e,t){e&&e.addEventListener("animationend",c,{once:!0})}))}else self.log("animate function without selector"),self.log(e),self.log(t)}))},this.addClassRule=function(e,t){var s="{";for(var l in t)"object"==typeof t[l]?self.addClassRule(e+" "+l,t[l]):s+=l+":"+t[l]+";";s+="}",self.styleObj.sheet.insertRule(e+" "+s)},this.addApplyRule=function(e,t){self.styleObj.sheet.insertRule(e+" {@apply "+t+"}")},this.findPlugin=function(e){if(!self.json.plugins)return!1;for(var t of self.json.plugins)if(t.name==e)return t},this.defineCss=function(e){if(self.log("defineCss"),self.styleObj=document.createElement("style"),document.head.appendChild(self.styleObj),self.styleObj.appendChild(document.createTextNode("")),e)if(Array.isArray(e))for(var t of e)for(var s in t){let e=self.replaceProperties(t[s]);self.addClassRule(s,e)}else for(var s in e){let t=self.replaceProperties(e[s]);self.addClassRule(s,t)}if(self.pluginsLoaded.tailwindcss){self.findPlugin("tailwindcss");var l=self.json.setup.config.tailwindcss?self.json.setup.config.tailwindcss:{preflight:!1};tailwind?tailwind.config=l:console.log("tailwind object is undefined")}},this.hash=function(e,t){self.log("hash");e=self.replaceProperties(e,t);self.log(e),window.location.hash=e},this.page=function(e,t){self.log("page");e=self.replaceProperties(e,t);self.log(e),e.startsWith("#")?window.location.hash=e:window.location.href=e},this.hashChangeEvent=function(){self.log("hashChangeEvent"),self.log(window.location.hash)},this.lookup=function(e,t){for(var s in e){var l=e[s];if(t==s)return[t,l];if("object"==typeof l&&!Array.isArray(l)){var r=lookup(l,t);if(r&&r[0]==t)return r}if(Array.isArray(l))for(var o=0;o<l.length;++o){var n=lookup(l[o],t);if(n&&n[0]==t)return n}}return null},this.findValues=function(e,t){let s=[...JSON.stringify(e).matchAll(new RegExp('"?'+t+'"?:s*"([^,"]+)',"gi"))];var l=[];for(var r of s)l.push(r[1]);return l},this.keyInJson=function(e,t){return Boolean(JSON.stringify(e).match(new RegExp('"?'+t+'"?:')))},this.valueInJson=function(e,t){return Boolean(JSON.stringify(e).match(new RegExp('"?'+t+'"?')))},this.start=function(){let e;if(self.log("start"),window.addEventListener("beforeinstallprompt",(t=>{t.preventDefault(),e=t})),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",(e=>{self.json.setup.darkMode=!!e.matches&&"dark"})),self.json.iconset){if(!self.pluginsLoaded.iconify){let e=self.json.resources.pluginsFunctions.iconify;return self.pluginsLoader([e],self.start),!1}var t;for(var s in t=self.json.iconset[0]?self.json.iconset:[self.json.iconset])Iconify.addCollection(t[s])?self.log("added iconset "+t[s].prefix):self.log("can\t add iconset "+t[s].prefix)}window.addEventListener("resize",self.resizeEvent),self.json.setup.page||(self.json.setup.page={}),self.json.setup.page.hash=window.location.hash.substr(1);var l=self.json.selector||self.json.container;self.json.on&&self.on(self.json.on,l)},this.extendJson=function(e,t){for(var s in t.css&&self.defineCss(t.css),t.functions&&self.extendFunctions(t.functions),t)if("on"==s)for(var l in t[s])"string"!=typeof t[s][l]?(e[s][l]||(e[s][l]=[]),e[s][l].push(t[s][l])):e[s][l]=t[s][l];else if("parts"==s||"shortcuts"==s)for(var l in t[s])"string"!=typeof t[s][l]?e[s][l]=self.extend({},e[s][l],t[s][l]):e[s][l]=t[s][l];else"iconset"==s||"plugins"==s?(e[s]||(e[s]=[]),e[s]=e[s].concat(t[s])):"css"==s||(e[s]=self.extend({},e[s],t[s]));return e},this.loadModuleFromDb=function(e){self.log("loadModuleFromDb"),self.firebaseGet("jsonic",(function(t){if(t.success)for(codeKey in self.log("firebase get SUCCESS"),t.data)t.data[codeKey].code&&self.extendJson(json,t.data[codeKey].code);else self.log("firebase get ERROR");self.do(e)}))},this.modules={},this.modulesLoading={},this.fileType=function(e){return/(?:\.([^.]+))?$/.exec(e)[1]},this.jsoncToJson=function(e){return e.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm,"$1").replace(/\r/,"\n").replace(/\n[\n]+/,"\n")},this.loadModule=function(e){if(!self.modulesLoading[e.name]&&!self.modules[e.name])return self.modulesLoading[e.name]=!0,new Promise((function(t,s){const l=new XMLHttpRequest;l.open("GET",e.url),l.onload=function(){self.modulesLoading[e.name]=!1;let s=l.responseText;"jsonc"==self.fileType(l.responseURL)&&(s=self.jsoncToJson(s));const r=JSON.parse(s);self.isJson(r)?(self.modules[e.name]=r,self.extendJson(self.json,r),self.log("Loaded module "+e.name,"grey")):self.log("Wrong JSON in module "+e.name,"red"),t()},l.onerror=function(){self.modulesLoading[e.name]=!1},l.send()}));self.log("Module "+e.name+" already loaded","orange")};var loadPlugin=function(e){return new Promise((function(t,s){var l="script",r="text/javascript";"script"==e.type?(l="script",r="text/javascript"):"module"==e.type?(l="script",r="module"):"tailwind-config"==e.type?(l="script",r="tailwind-config"):"link"==e.type?(l="link",r="text/css"):"font"==e.type&&(l="link",r=void 0);let o=document.createElement(l);e.content&&o.appendChild(document.createTextNode(e.content)),o.async=!1,o.onload=function(){self.pluginsLoaded[e.name]={version:"1.0.0"},self.log("Loaded plugin "+e.name,"grey"),t(e.url)},o.onerror=function(){self.log("Error loading plugin "+e.url,"red"),s(e.url)},"script"===l?(e.url&&(o.src=e.url),o.location=document.body,o.type=r||"text/javascript",document.body.appendChild(o)):"link"===l&&(o.rel=e.rel||"stylesheet",o.location=document.head,e.url&&(o.href=e.url),r&&(o.type=r),e.as&&(o.as=e.as),document.head.appendChild(o))}))};function toJsonNode(e){let t={};if(1==e.nodeType&&e.attributes.length>0){t.attr={};for(let s=0;s<e.attributes.length;s++){let l=e.attributes.item(s);t.attr[l.nodeName]=l.nodeValue}}if(e.hasChildNodes())for(let s=0;s<e.childNodes.length;s++){let l=e.childNodes.item(s),r=l.nodeName;3==l.nodeType&&"#text"==r?/^\s+$/.test(l.nodeValue)||(t.text=l.nodeValue):void 0===t[r]?t[r]=toJsonNode(l):(Array.isArray(t[r])||(t[r]=[t[r]]),t[r].push(toJsonNode(l)))}return t}function clearSelection(){window.getSelection?window.getSelection().removeAllRanges():document.selection&&document.selection.empty()}this.uiLoaded={},this.pluginsLoaded={},this.findUrl=function(e,t){for(var s of e)if(s.url==t)return!0},this.loadPlugins=function(){var e=[];if(self.json.plugins)for(var t in self.json.plugins){var s=self.json.plugins[t],l=s.version||"";if(!s.ondemand)if(s.url)self.findUrl(e,s.url)||e.push({name:s.name,url:s.url,type:s.type});else{var r=s.files||self.json.resources.pluginsFiles[s.name];for(item of(Array.isArray(r)||(r=[r]),r)){var o=self.replaceAll(item.url,"{version}",l);s.params&&(o+="?"+s.params);let t=s.name||item.name;o&&self.findUrl(e,o)||e.push({name:t,url:o,type:item.type,content:item.content})}}}for(fontName of self.findValues(self.json,"font-family"))self.json.resources.googleFonts.indexOf(fontName)>=0&&(fontName=self.replaceAll(fontName," ","+"),e.push({type:"link",url:"https://fonts.googleapis.com/css2?family="+fontName}));let n=[];e.forEach((function(e){e.url?n.push(loadPlugin({name:e.name,url:e.url,type:e.type,rel:e.rel,as:e.as,content:e.content})):loadPlugin({name:e.name,url:e.url,type:e.type,rel:e.rel,as:e.as,content:e.content})})),Promise.all(n).then((function(){self.start()})).catch((function(e){self.log("Failed to load"),self.log(e)}))},this.modulesList=function(e){var t=[];if(e)for(key in e){var s=self.replaceProperties(e[key]);t=t.concat(s)}return self.replaceProperties(e)},this.loadModules=function(){if(self.json.setup.modules){var e=self.replaceProperties(self.json.setup.modules),t=[];e.forEach((function(e){self.modulesLoading[e.name]||self.modules[e.name]||t.push(self.loadModule(e))})),Promise.all(t).then((function(){self.loadPlugins()})).catch((function(e){self.log("Failed to load"),self.log(e)}))}else self.loadPlugins()},this.moduleExecuted={},this.addModule=function(e){if(self.modules[e.name])e.success&&self.do(e.success);else{var t=[];t.push(self.loadModule(e)),Promise.all(t).then((function(){if(!self.moduleExecuted[e.name]){var t=self.modules[e.name];t.html&&(self.moduleExecuted[e.name]=!0,self.html(t.html))}e.success&&self.do(e.success)})).catch((function(t){self.log("Failed to load"),self.log(t),e.error&&self.do(e.error)}))}},this.loadModuleGlobal=function(){self.log("loadModuleGlobal");var e=[],t=[];for(let e in self.json.setup.modules){var s=self.replaceProperties(self.json.setup.modules[e]);t=t.concat(self.cloneObject(s))}for(let s of t)e.push(self.loadModule(s));Promise.all(e).then((function(){self.loadModules()})).catch((function(e){self.log("Failed to load"),self.log(e)}))},this.code=function(e,t){let s=self.selector(e.selector||e.container)||self.selector(t);self.log("this.code"),self.log("container"),self.log(s);var l=s.slice(1),r=ace.edit(l),o=e.value;if(e.do&&"set"!=e.do){if("get"==e.do)return r.getValue();self.log('"code" function requires value param')}else{e.theme&&r.setTheme(e.theme);var n=e.mode||"ace/mode/json";r.getSession().setMode(n);self.extend({background:"rgba(255,255,255,0)"},e.style);var a,i=self.extend({fontSize:"11pt",selectionStyle:"line",highlightActiveLine:!1,wrap:!0,showLineNumbers:!1,showGutter:!1,fixedWidthGutter:!1,readOnly:!0},e.options);if(r.setOptions(i),"string"==typeof o)a="ace/mode/json"==n?JSON.stringify(JSON.parse(o),null,"\t"):o;else if("ace/mode/json"==n)a=JSON.stringify(o,null,"\t");else a=self.docElement(o.function)(o.params);a.split(/\r\n|\r|\n/).length;r.setValue(a,-1)}},this.init=function(e,t){if(console.log("init"),"string"==typeof e){let s=[{name:"app",url:e}],l=t?t.split(","):[];for(let e of l)s.push({name:e,url:"jsonic/modules/"+e+".json"});self.json.setup={modules:s}}else e&&self.extendJson(self.json,e),e.css&&self.defineCss(e.css);self.loadModuleGlobal()},this.htmlToJson=function(e){let t=(new DOMParser).parseFromString(e,"text/xml");return JSON.stringify(toJsonNode(t),null,"\t")},this.elementToJson=function(e){let t=document.querySelector(e);return self.htmlToJson(t.getHTML())},this.importHtml=function(e){if(e||(e=prompt("html/xml")),e){let t=self.htmlToJson(e),s=document.createElement("textarea");s.value=t,s.style="position: absolute; z-index: 999999; background: white; width:100vw; height:100vh",document.body.appendChild(s),s.addEventListener("click",(function(){s.remove(),navigator.clipboard.writeText(s.value).then((()=>console.log("copied!")))}))}},"object"==typeof options||options&&self.init(arguments[0],arguments[1])},jsonApp=new jsonAppObj,js=jsonApp,jsonic=jsonApp;