Skip to content

Commit a6d0031

Browse files
committed
add PyListTemplate and PyItemTemplate so that classes implementing list and list item widgets can subclass from it and hide complexity to users
1 parent 280fd53 commit a6d0031

File tree

3 files changed

+63
-13
lines changed

3 files changed

+63
-13
lines changed

pyscriptjs/examples/pylist.py

Lines changed: 60 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,19 @@ def create(what, id_=None, classes=''):
1414
add_classes(element, classes)
1515
return Element(id_, element)
1616

17+
class PyWidgetTheme:
18+
def __init__(self, main_style_classes):
19+
self.main_style_classes = main_style_classes
20+
21+
def theme_it(self, widget):
22+
for klass in self.main_style_classes.split(' '):
23+
widget.classList.add(klass)
24+
25+
26+
class PyListTemplate:
27+
theme = PyWidgetTheme("flex flex-col-reverse mt-4")
28+
1729

18-
class PyList:
1930
def __init__(self, parent):
2031
self.parent = parent
2132
self._children = []
@@ -25,8 +36,8 @@ def connect(self):
2536
self.md = main_div = document.createElement('div');
2637
main_div.id = self.id + "-list-tasks-container"
2738

28-
for klass in "flex flex-col-reverse mt-4".split(' '):
29-
main_div.classList.add(klass)
39+
if self.theme:
40+
self.theme.theme_it(main_div)
3041

3142
self.parent.appendChild(main_div)
3243

@@ -35,12 +46,24 @@ def add(self, data, labels):
3546
return self._add(child)
3647

3748
def _add(self, child_elem):
38-
self._children.append(child_elem)
3949
console.log("appending child", child_elem.element)
50+
self.pre_child_append(child_elem)
51+
child_elem.pre_append()
52+
self._children.append(child_elem)
4053
self.md.appendChild(child_elem.create().element)
54+
child_elem.post_append()
55+
self.child_appended(child_elem)
4156
return child_elem
4257

43-
class PyItem(Element):
58+
def pre_child_append(self, child):
59+
pass
60+
61+
def child_appended(self, child):
62+
"""Overwrite me to define logic"""
63+
pass
64+
65+
66+
class PyItemTemplate(Element):
4467
def __init__(self, parent, data, labels):
4568
self._parent = parent
4669
self.id = f"{self._parent.id}-c-{len(self._parent._children)}"
@@ -63,22 +86,48 @@ def create(self):
6386
</label>
6487
"""
6588

66-
check = new_child.select('input').element
67-
check.onclick = self.check_task
89+
# check = new_child.select('input').element
90+
# check.onclick = self.check_task
6891
console.log('returning')
6992
return new_child
7093

71-
def check_task(self, evt=None):
72-
self.data['done'] = not self.data['done']
73-
if self.data['done']:
94+
def on_click(self, evt):
95+
pass
96+
97+
def pre_append(self):
98+
pass
99+
100+
def post_append(self):
101+
self.element.click = self.on_click
102+
self.element.onclick = self.on_click
103+
104+
self._post_append()
105+
106+
def _post_append(self):
107+
pass
108+
109+
def strike(self, value):
110+
if value:
74111
self.add_class("line-through")
75112
else:
76113
self.remove_class("line-through")
114+
77115

116+
class PyList(PyListTemplate):
117+
pass
118+
119+
120+
class PyItem(PyItemTemplate):
121+
def on_click(self, evt=None):
122+
self.data['done'] = not self.data['done']
123+
self.strike(self.data['done'])
78124

125+
self.select('input').element.checked = self.data['done']
126+
127+
79128
def add_task(*ags, **kws):
80129
console.log(new_task_content.value)
81-
console.log('adding', myList)
130+
console.log('adding1', myList)
82131
task = {
83132
"content": new_task_content.value,
84133
"done": False,

pyscriptjs/src/App.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
for (let initializer of $postInitializers){
5454
initializer();
5555
}
56-
}, 5000);
56+
}, 3000);
5757
5858
}
5959

pyscriptjs/src/components/base.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,13 +176,14 @@ export class BaseEvalElement extends HTMLElement {
176176
}
177177

178178
connectedCallback() {
179-
console.log(this.name, 'connected!!!!')
179+
console.log(this.name, 'OOOOOOO connected!!!!')
180180
this.eval(this.code).then(() => {
181181
this.proxy = this.proxyClass(this);
182182
console.log('proxy', this.proxy);
183183
this.proxy.connect();
184184
this.registerWidget();
185185
});
186+
console.log(this.name, 'DOOOOONE connected!!!!')
186187
}
187188

188189
async registerWidget(){

0 commit comments

Comments
 (0)