import { Reactive } from './lib/ReactiveObject' import { compileToString } from './lib/templateRenderer' const virtualDomBody = `

{count}


{text}

` const appState = new Reactive({ count: 0, text: '' }); // run code to compile the templated virtualDomBody into a play body const templatedVirtualDom = eval(compileToString(virtualDomBody)) // equivalent to mounted() on svelte or vue window.addEventListener('load', () => { const documentBody = document.getElementById('app') documentBody.innerHTML = templatedVirtualDom Object.keys(appState.contents).forEach((e) => { const querySelector = "data-token-" + e.split("").map(c => c.charCodeAt(0).toString(16).padStart(2, "0")).join("") const listeningElements = document.querySelectorAll(`[${querySelector}]`) listeningElements.forEach((elm) => { appState.listen(e, (change) => elm.textContent = change); }) }) let elms = documentBody.querySelectorAll('*[d-click]') elms.forEach((e) => { event.preventDefault(); const clickFunction = e.getAttribute("d-click") e.addEventListener('click', () => { eval(clickFunction) }) }) let modelElms = document.querySelectorAll('*[d-model]') modelElms.forEach((e) => { const modelName = e.getAttribute("d-model") e.addEventListener('input', (event) => { appState.contents[modelName] = event.target.value }) }) })