8000 clean pylist.py and add a very hacky sync between list items and it's… · testnest/pyscript@71873b6 · GitHub
[go: up one dir, main page]

Skip to content

Commit 71873b6

Browse files
committed
clean pylist.py and add a very hacky sync between list items and it's rendered versions
1 parent 7c71ba6 commit 71873b6

File tree

3 files changed

+31
-13
lines changed

3 files changed

+31
-13
lines changed

pyscriptjs/examples/pylist.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
11
from datetime import datetime as dt
2-
from xml.dom.pulldom import END_ELEMENT
3-
from js import console, HTMLElement, document
4-
5-
6-
class PyList(PyListTemplate):
7-
pass
8-
92

103
class PyItem(PyItemTemplate):
114
def on_click(self, evt=None):
@@ -14,8 +7,10 @@ def on_click(self, evt=None):
147

158
self.select('input').element.checked = self.data['done']
169

10+
class PyList(PyListTemplate):
11+
item_class = PyItem
1712

1813
def add_task(*ags, **kws):
1914
task = { "content": new_task_content.value, "done": False, "created_at": dt.now() }
20-
myList.add(PyItem(task, labels=['content'], state_key="done"))
15+
myList.add(task, labels=['content'], state_key="done")
2116
new_task_content.clear()

pyscriptjs/src/components/pyrepl.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,10 @@ export class PyRepl extends BaseEvalElement {
199199
}
200200

201201
postEvaluate(): void {
202+
203+
this.outputElement.hidden = false;
204+
this.outputElement.style.display = 'block';
205+
202206
if (this.hasAttribute('auto-generate')) {
203207
let nextExecId = parseInt(this.getAttribute('exec-id')) + 1;
204208
const newPyRepl = document.createElement("py-repl");

pyscriptjs/src/interpreter.ts

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ let pyodideReadyPromise;
66
let pyodide;
77

88
let additional_definitions = `
9-
from js import document, setInterval, console
9+
from js import document, setInterval, console, setTimeout
1010
import micropip
11+
import time
1112
import asyncio
1213
import io, base64, sys
1314
@@ -195,7 +196,7 @@ class PyItemTemplate(Element):
195196
def _post_append(self):
196197
pass
197198
198-
def strike(self, value):
199+
def strike(self, value, extra=None):
199200
if value:
200201
self.add_class("line-through")
201202
else:
@@ -222,14 +223,32 @@ class PyListTemplate:
222223
return [c.data for c in self._children]
223224
224225
def render_children(self):
225-
return [c.element.innerHTML.replace("\\n", "") for c in self._children]
226+
out = []
227+
binds = {}
228+
for i, c in enumerate(self._children):
229+
txt = c.element.innerHTML
230+
rnd = str(time.time()).replace(".", "")[-5:]
231+
new_id = f"{c.element.id}-{i}-{rnd}"
232+
binds[new_id] = c.element.id
233+
txt = txt.replace(">", f" id='{new_id}'>")
234+
print(txt)
235+
236+
def foo(evt):
237+
console.log(evt)
238+
evtEl = evt.srcElement
239+
srcEl = Element(binds[evtEl.id])
240+
srcEl.element.onclick()
241+
evtEl.classList = srcEl.element.classList
242+
243+
for new_id, old_id in binds.items():
244+
Element(new_id).element.onclick = foo
226245
227246
def connect(self):
228-
self.md = main_div = document.createElement('div');
247+
self.md = main_div = document.createElement('div')
229248
main_div.id = self._id + "-list-tasks-container"
230249
231250
if self.theme:
232-
self.theme.theme_it(main_div)
251+
self.theme.theme_it(main_div)
233252
234253
self.parent.appendChild(main_div)
235254

0 commit comments

Comments
 (0)
0