1
0
mirror of https://github.com/pyscript/pyscript.git synced 2022-05-01 19:47:48 +03:00

add PyListTemplate and PyItemTemplate so that classes implementing list and list item widgets can subclass from it and hide complexity to users

This commit is contained in:
Fabio Pliger
2022-04-20 12:48:25 -05:00
parent 280fd53aba
commit a6d00318c3
3 changed files with 63 additions and 13 deletions

View File

@@ -14,8 +14,19 @@ def create(what, id_=None, classes=''):
add_classes(element, classes) add_classes(element, classes)
return Element(id_, element) return Element(id_, element)
class PyWidgetTheme:
def __init__(self, main_style_classes):
self.main_style_classes = main_style_classes
def theme_it(self, widget):
for klass in self.main_style_classes.split(' '):
widget.classList.add(klass)
class PyListTemplate:
theme = PyWidgetTheme("flex flex-col-reverse mt-4")
class PyList:
def __init__(self, parent): def __init__(self, parent):
self.parent = parent self.parent = parent
self._children = [] self._children = []
@@ -25,8 +36,8 @@ class PyList:
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"
for klass in "flex flex-col-reverse mt-4".split(' '): if self.theme:
main_div.classList.add(klass) self.theme.theme_it(main_div)
self.parent.appendChild(main_div) self.parent.appendChild(main_div)
@@ -35,12 +46,24 @@ class PyList:
return self._add(child) return self._add(child)
def _add(self, child_elem): def _add(self, child_elem):
self._children.append(child_elem)
console.log("appending child", child_elem.element) console.log("appending child", child_elem.element)
self.pre_child_append(child_elem)
child_elem.pre_append()
self._children.append(child_elem)
self.md.appendChild(child_elem.create().element) self.md.appendChild(child_elem.create().element)
child_elem.post_append()
self.child_appended(child_elem)
return child_elem return child_elem
class PyItem(Element): def pre_child_append(self, child):
pass
def child_appended(self, child):
"""Overwrite me to define logic"""
pass
class PyItemTemplate(Element):
def __init__(self, parent, data, labels): def __init__(self, parent, data, labels):
self._parent = parent self._parent = parent
self.id = f"{self._parent.id}-c-{len(self._parent._children)}" self.id = f"{self._parent.id}-c-{len(self._parent._children)}"
@@ -63,22 +86,48 @@ class PyItem(Element):
</label> </label>
""" """
check = new_child.select('input').element # check = new_child.select('input').element
check.onclick = self.check_task # check.onclick = self.check_task
console.log('returning') console.log('returning')
return new_child return new_child
def check_task(self, evt=None): def on_click(self, evt):
self.data['done'] = not self.data['done'] pass
if self.data['done']:
def pre_append(self):
pass
def post_append(self):
self.element.click = self.on_click
self.element.onclick = self.on_click
self._post_append()
def _post_append(self):
pass
def strike(self, value):
if value:
self.add_class("line-through") self.add_class("line-through")
else: else:
self.remove_class("line-through") self.remove_class("line-through")
class PyList(PyListTemplate):
pass
class PyItem(PyItemTemplate):
def on_click(self, evt=None):
self.data['done'] = not self.data['done']
self.strike(self.data['done'])
self.select('input').element.checked = self.data['done']
def add_task(*ags, **kws): def add_task(*ags, **kws):
console.log(new_task_content.value) console.log(new_task_content.value)
console.log('adding', myList) console.log('adding1', myList)
task = { task = {
"content": new_task_content.value, "content": new_task_content.value,
"done": False, "done": False,

View File

@@ -53,7 +53,7 @@
for (let initializer of $postInitializers){ for (let initializer of $postInitializers){
initializer(); initializer();
} }
}, 5000); }, 3000);
} }

View File

@@ -176,13 +176,14 @@ export class BaseEvalElement extends HTMLElement {
} }
connectedCallback() { connectedCallback() {
console.log(this.name, 'connected!!!!') console.log(this.name, 'OOOOOOO connected!!!!')
this.eval(this.code).then(() => { this.eval(this.code).then(() => {
this.proxy = this.proxyClass(this); this.proxy = this.proxyClass(this);
console.log('proxy', this.proxy); console.log('proxy', this.proxy);
this.proxy.connect(); this.proxy.connect();
this.registerWidget(); this.registerWidget();
}); });
console.log(this.name, 'DOOOOONE connected!!!!')
} }
async registerWidget(){ async registerWidget(){