mirror of
https://github.com/pyscript/pyscript.git
synced 2022-05-01 19:47:48 +03:00
clean pylist.py and add a very hacky sync between list items and it's rendered versions
This commit is contained in:
@@ -1,11 +1,4 @@
|
|||||||
from datetime import datetime as dt
|
from datetime import datetime as dt
|
||||||
from xml.dom.pulldom import END_ELEMENT
|
|
||||||
from js import console, HTMLElement, document
|
|
||||||
|
|
||||||
|
|
||||||
class PyList(PyListTemplate):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class PyItem(PyItemTemplate):
|
class PyItem(PyItemTemplate):
|
||||||
def on_click(self, evt=None):
|
def on_click(self, evt=None):
|
||||||
@@ -14,8 +7,10 @@ class PyItem(PyItemTemplate):
|
|||||||
|
|
||||||
self.select('input').element.checked = self.data['done']
|
self.select('input').element.checked = self.data['done']
|
||||||
|
|
||||||
|
class PyList(PyListTemplate):
|
||||||
|
item_class = PyItem
|
||||||
|
|
||||||
def add_task(*ags, **kws):
|
def add_task(*ags, **kws):
|
||||||
task = { "content": new_task_content.value, "done": False, "created_at": dt.now() }
|
task = { "content": new_task_content.value, "done": False, "created_at": dt.now() }
|
||||||
myList.add(PyItem(task, labels=['content'], state_key="done"))
|
myList.add(task, labels=['content'], state_key="done")
|
||||||
new_task_content.clear()
|
new_task_content.clear()
|
||||||
|
|||||||
@@ -199,6 +199,10 @@ export class PyRepl extends BaseEvalElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
postEvaluate(): void {
|
postEvaluate(): void {
|
||||||
|
|
||||||
|
this.outputElement.hidden = false;
|
||||||
|
this.outputElement.style.display = 'block';
|
||||||
|
|
||||||
if (this.hasAttribute('auto-generate')) {
|
if (this.hasAttribute('auto-generate')) {
|
||||||
let nextExecId = parseInt(this.getAttribute('exec-id')) + 1;
|
let nextExecId = parseInt(this.getAttribute('exec-id')) + 1;
|
||||||
const newPyRepl = document.createElement("py-repl");
|
const newPyRepl = document.createElement("py-repl");
|
||||||
|
|||||||
@@ -6,8 +6,9 @@ let pyodideReadyPromise;
|
|||||||
let pyodide;
|
let pyodide;
|
||||||
|
|
||||||
let additional_definitions = `
|
let additional_definitions = `
|
||||||
from js import document, setInterval, console
|
from js import document, setInterval, console, setTimeout
|
||||||
import micropip
|
import micropip
|
||||||
|
import time
|
||||||
import asyncio
|
import asyncio
|
||||||
import io, base64, sys
|
import io, base64, sys
|
||||||
|
|
||||||
@@ -195,7 +196,7 @@ class PyItemTemplate(Element):
|
|||||||
def _post_append(self):
|
def _post_append(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def strike(self, value):
|
def strike(self, value, extra=None):
|
||||||
if value:
|
if value:
|
||||||
self.add_class("line-through")
|
self.add_class("line-through")
|
||||||
else:
|
else:
|
||||||
@@ -222,14 +223,32 @@ class PyListTemplate:
|
|||||||
return [c.data for c in self._children]
|
return [c.data for c in self._children]
|
||||||
|
|
||||||
def render_children(self):
|
def render_children(self):
|
||||||
return [c.element.innerHTML.replace("\\n", "") for c in self._children]
|
out = []
|
||||||
|
binds = {}
|
||||||
|
for i, c in enumerate(self._children):
|
||||||
|
txt = c.element.innerHTML
|
||||||
|
rnd = str(time.time()).replace(".", "")[-5:]
|
||||||
|
new_id = f"{c.element.id}-{i}-{rnd}"
|
||||||
|
binds[new_id] = c.element.id
|
||||||
|
txt = txt.replace(">", f" id='{new_id}'>")
|
||||||
|
print(txt)
|
||||||
|
|
||||||
|
def foo(evt):
|
||||||
|
console.log(evt)
|
||||||
|
evtEl = evt.srcElement
|
||||||
|
srcEl = Element(binds[evtEl.id])
|
||||||
|
srcEl.element.onclick()
|
||||||
|
evtEl.classList = srcEl.element.classList
|
||||||
|
|
||||||
|
for new_id, old_id in binds.items():
|
||||||
|
Element(new_id).element.onclick = foo
|
||||||
|
|
||||||
def connect(self):
|
def connect(self):
|
||||||
self.md = main_div = document.createElement('div');
|
self.md = main_div = document.createElement('div')
|
||||||
main_div.id = self._id + "-list-tasks-container"
|
main_div.id = self._id + "-list-tasks-container"
|
||||||
|
|
||||||
if self.theme:
|
if self.theme:
|
||||||
self.theme.theme_it(main_div)
|
self.theme.theme_it(main_div)
|
||||||
|
|
||||||
self.parent.appendChild(main_div)
|
self.parent.appendChild(main_div)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user