1
0
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:
Fabio Pliger
2022-04-20 20:03:23 -05:00
parent 7c71ba6fde
commit 71873b6b50
3 changed files with 31 additions and 13 deletions

View File

@@ -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()

View File

@@ -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");

View File

@@ -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,10 +223,28 @@ 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: