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:
@@ -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,
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
for (let initializer of $postInitializers){
|
for (let initializer of $postInitializers){
|
||||||
initializer();
|
initializer();
|
||||||
}
|
}
|
||||||
}, 5000);
|
}, 3000);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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(){
|
||||||
|
|||||||
Reference in New Issue
Block a user