Pure JS TODOs demo
Download Counter demo
<h1>TODOs</h1>
<any>
<ul>
<li>Loading...</li>
</ul>
</any>
<script>
const box = scope()
const { htmlCallbackEffect, effect } = box
const element = document.querySelector('any')
box.todos = JSON.parse(localStorage.getItem('todos')) ?? []
element.innerHTML = ''
element.appendChild(htmlCallbackEffect(() =>
'<ul>' + (box.todos.length !== 0 ? box.todos.map((e, i) => `<li>${e} <a style=` +
`"cursor: pointer" onclick="box.todos = box.todos.filter((e, i) => i != ${i})">Remove</a></li>`
).join('') : '<li>No TODOs.</li>') + '</ul>', 'todos'
))
effect(() => {
localStorage.setItem('todos', JSON.stringify(box.todos))
}, 'todos')
</script>
<br>
<button onclick="let x = prompt(); if(x) box.todos = [...box.todos, x]">Add item</button><br>
<button onclick="box.todos = []">Clear all</button>