UNPKG

@anywhichway/lazui

Version:

Single page apps and lazy loading sites with minimal JavaScript or client build processes.

29 lines (28 loc) 1.01 kB
const sleep = async (ms) => new Promise(resolve => setTimeout(resolve, ms)); const parseState = (text,JSON) => { const ref = {}; if(text) { const parts = text.split(" "); ref.id = parts.shift(); ref.observe = []; const observed = parts.find((part) => part.startsWith("observe:")); if(observed) { ref.observe = observed.split(":")[1].split(","); } return ref; } return ref; } const usestate = async({el,attribute,root,lazui,recurse}) => {; await window.lazuiStatesReady; const {getState,JSON,handleDirective} = lazui, {id=el.id,observe,json} = parseState(attribute.value,JSON); let state = getState(id,{root}); if(!state && id) { await sleep(250); state = getState(id,{root}); if(!state) throw new Error(`Can't find state: ${id}`); } Object.defineProperty(el,"__state__",{enumerable:false,configurable:true,value:state}); }; export {usestate}