-
Notifications
You must be signed in to change notification settings - Fork 1
/
speclate-client-module-min.js
1 lines (1 loc) · 8.21 KB
/
speclate-client-module-min.js
1
function specFromRoute(a){var b;return".html"===a.slice(-5)?(b=a.slice(0,-5),""===b&&(b="/index")):"/"===a.slice(-1)?b=a+"index":""===a&&(b="/index"),b+".js"}var extractAssets=function(a){const b={pages:[a.page],components:[],lists:a.lists||[],filters:a.filters||[],mappers:a.mapper?[a.mapper]:[]};for(var c in a.spec)if(a.spec[c].component){b.components.push(a.spec[c].component),a.spec[c].lists&&(b.lists=b.lists.concat(a.spec[c].lists)),a.spec[c].filters&&(b.filters=b.filters.concat(a.spec[c].filters)),a.spec[c].mapper&&(b.mappers=b.mappers.concat(a.spec[c].mapper));var d=a.spec[c].states;for(var e in d)b.components.push(d[e].component),d[e].mapper&&b.mappers.push(d[e].mapper)}var f={};for(var g in b)f[g]=[...new Set(b[g])];return f};function createCommonjsModule(c,a){return a={exports:{}},c(a,a.exports),a.exports}var checkForInputs=function(c,a){return"INPUT"===dom.getTag(c)?dom.setAttribute(c,"value",a):dom.setMarkup(c,a),c},newValue=function(c,a){return"object"==typeof a&&a.regex&&a.value?c.replace(a.regex,a.value):"function"==typeof a?a(c):a},updateNodeWithObject=function(h,i){for(var b in i)switch(b){case"selectors":var a=i[b];for(var c in a){var d=dom.query(h,c);dom.setMarkup(d,a[c])}break;case"className":dom.addClass(h,i[b]);break;case"innerHTML":i[b]&&i[b].regex||"function"==typeof i[b]?h.each(function(){var c=dom.get(this);c.innerHTML=i[b]}):dom.setMarkup(h,i[b]);break;case"innerText":i[b]&&i[b].regex||"function"==typeof i[b]?dom.newValue(h,i[b]):h.text(i[b]);break;default:if(i[b]&&i[b].regex||"function"==typeof i[b]){var e=newValue(dom.getAttribute(h,b),i[b]);dom.setAttribute(h,b,e)}else dom.setAttribute(h,b,i[b]);}return h};function updateNode(j,k,b){if(".id"===k)return j.attr("id",b),j;switch(typeof b){case"string":""!==b&&(j=checkForInputs(j,b));break;case"number":j=checkForInputs(j,b);break;case"boolean":if(!1===b)return j.remove();break;case"object":if(b&&b.length){var d=dom.parent(j);if(1===b.length&&!1===b[0])return d.remove();var e=dom.clone(j);b.forEach(function(a,f){var g=dom.clone(e);0===f&&j.remove();var c=updateNode(g,k,b[f]);dom.append(d,c)})}else j=updateNodeWithObject(j,b);}return j}var updateNode_1=updateNode,dom=createCommonjsModule(function(c,e){e.load=function(c){var a=document.createElement("div");return a.innerHTML=c.trim(),a},e.init=function(b){return b},e.find=function(c,a){return c.querySelectorAll(a)},e.getMarkup=function(c){var a=document.createElement("div");return a.appendChild(c.cloneNode(!0)),a.innerHTML},e.setMarkup=function(c,a){c.innerHTML=a},e.get=function(b){return b},e.setAttribute=function(d,a,b){d.setAttribute(a,b)},e.getAttribute=function(c,a){return c.getAttribute(a)},e.addClass=function(c,a){c.classList.add(a)},e.clone=function(b){return b.cloneNode()},e.append=function(c,a){return c.appendChild(a)},e.parent=function(b){return b.parentNode},e.getTag=function(b){return b.tagName.toUpperCase()},e.getText=function(b){return b.innerText},e.setText=function(c,a){return c.innerText=a,c},e.query=function(c,a){return c.querySelector(a)},e.updateNodes=function(d,e,b){d.forEach(function(c){updateNode_1(c,e,b)})},e.newValue=function(b,a){var c=newValue(e.getText(b),a);e.setText(b,c)}}),dom_1=dom.load,dom_2=dom.init,dom_3=dom.find,dom_4=dom.getMarkup,dom_5=dom.setMarkup,dom_6=dom.get,dom_7=dom.setAttribute,dom_8=dom.getAttribute,dom_9=dom.addClass,dom_10=dom.clone,dom_11=dom.append,dom_12=dom.parent,dom_13=dom.getTag,dom_14=dom.getText,dom_15=dom.setText,dom_16=dom.query,dom_17=dom.updateNodes,dom_18=dom.newValue,doRender=function(f,g){if(!g)return f;g="undefined"==typeof g[0]?[g]:g;var h=g.length;g=g.reverse();var i,a=null;for("string"==typeof f?(i=dom.load(f),a="string"):(i=f,a="dom");h--;)Object.keys(g[h]).forEach(function(b){var a=dom.find(i,b);dom.updateNodes(a,b,g[h][b])});if(dom.getMarkup){if("string"===a)return i.innerHTML;if("dom"===a)return i}else return i.html()},classifyKeys=function(c,a){if(!a.classifyKeys||"undefined"==typeof c)return c;for(var b,h=c.length,i=[];h--;){for(var e in b={},c[h])b["."+e]=c[h][e];i.push(b)}return i},render=doRender,classifyKeys$1=classifyKeys,sizlate={render:render,classifyKeys:classifyKeys$1},sizlateModule=Object.freeze({__proto__:null,default:sizlate,classifyKeys:classifyKeys$1,render:render});function getCjsExportFromNamespace(a){return a&&a["default"]||a}var sizlate$1=getCjsExportFromNamespace(sizlateModule),doSizlate=function(a,b,c){var d={},e={},f=a.spec;for(var g in f){const a="string"==typeof f[g].component;a?e[g]=c[f[g].component][g]:d[g]=f[g]}var h=sizlate$1.render(b,e);return"undefined"==typeof document&&(d.html={"data-speclate-page":a.page,"data-speclate-url":a.route||"unknown"}),sizlate$1.render(h,d)},loadListData=(a,b,c)=>{var d=c.params;if(a.lists){if(a.lists.forEach(c=>{a.data||(a.data=[]),b.lists[c]&&(a.data=a.data.concat(b.lists[c]))}),a.filters&&a.filters.forEach(function(c){if(!b.filters[c])throw new Error("Filter specified does not exist ("+c+") ");a.data=a.data.filter(b.filters[c],{params:d})}),a.mapper&&a.data){if(!b.mappers[a.mapper])throw new Error("Mapper defined but not available ("+a.mapper+"), has it been loaded?");a.data=a.data.map(b.mappers[a.mapper],{params:d})}delete a.lists,delete a.filters,delete a.mapper}return a},isString=a=>"string"==typeof a,isArray=a=>null!=a&&"function"!=typeof a&&a.length,isObject=a=>null!=a&&("object"==typeof a||"function"==typeof a),renderComponents=function(a,b,c){var d=a.spec,e={};for(var f in d){var g=d[f].component,h=c[g];if(g){e[g]||(e[g]={});let j=d[f];if(j=loadListData(j,b,a),0!==j.data.length)e[g][f]=renderComponent(j,h);else if(j.states){const d=j.states.empty;let h={};if(b.mappers[d.mapper]){var i=b.mappers[d.mapper].bind({params:a.params});h.data=i()}e[g][f]=renderComponent(h,c[d.component])}}}return e};function renderComponent(a,b){if(isString(a.data))console.log("String passed into data, should be an array or object");else{if(isArray(a.data)){var c=[];return a.data.slice().reverse().forEach(function(a){var d=sizlate$1.render(b,a);if(d.html)for(var e in d)c.push(d[e]);else c.push(d.innerHTML||d)}),c.join("")}return isObject(a.data)?sizlate$1.render(b,a.data):b}}var pageRender=async(a,b,c,d,e,f,g)=>{if(!e)return!1;d.before&&d.before(null,null,c);const h={};h[b.container]={innerHTML:f.pages[c.page]},sizlate.render(a.html,h);var i=renderComponents(c,f.lists,f.components),j=doSizlate(c,a.html,i);d.after&&d.after(null,j,c),g&&g()};function FetchInstance(a,b,c,d,e){var f=!0;if(f)return fetchPageAssets(a).then(a=>{b.html.setAttribute("data-speclate-page",a.spec.page);pageRender(b,c,a.spec,e,f,a.assets,function(){b.html.classList.remove(d)})}),{active:f,cancel:function(){f=!1}}}const fetchComponent=async a=>{const b=await fetchText(`/components/${a}/${a}.html`);return b},fetchJs=async(a,b)=>{const c=await import(`${b}/${a}.js`);return c.default},fetchPage=async a=>{return await fetchText(`/pages/${a}/${a}.html`)},fetchText=async a=>fetch(a).then(function(a){if(!a.ok)throw Error(a.statusText);return a.text()}).then(function(a){return a}).catch(function(b){console.error(b,a)});var fetchItems=async(a,b,c)=>{const d=await Promise.all(a.map(a=>b(a,c))),e={};return a.forEach((a,b)=>{e[a]=d[b]}),e},fetchPageAssets=async a=>{const b=await import(a),c=b.default,d=extractAssets(c),e={components:await fetchItems(d.components,fetchComponent),pages:await fetchItems([c.page],fetchPage),lists:{mappers:await fetchItems(d.mappers,fetchJs,"/lists/mappers"),filters:await fetchItems(d.filters,fetchJs,"/lists/filters"),lists:await fetchItems(d.lists,fetchJs,"/lists")}};return{spec:c,assets:e}},requests=[];function pageChange(a,b,c,d){var e=d.loadingClass||"loading";c.html.classList.add(e),d.preFetch&&d.preFetch(c.container);var f=specFromRoute(a);c.html.setAttribute("data-speclate-url",a),requests.forEach(a=>{a.cancel()}),requests=[];const g=new FetchInstance(f,c,b,e,d);requests.push(g)}var doPopState=function(a,b,c){return function(){pageChange(document.location.pathname,b,c,a)}};const client=function(a,b){b=b||{},a=a||{};const c={html:"html",container:b.container||"#container"};var d={html:document.querySelector(c.html),container:document.querySelector(c.container)};return window.addEventListener("popstate",doPopState(a,c,d)),{linkHandler:function(b){const e=b.currentTarget,f=e.getAttribute("href");if("http"!==f.slice(0,4)){b.preventDefault();window.history.pushState({},null,f),pageChange(f,c,d,a)}}}};export{client};