Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitee1db16

Browse files
committed
move templates to interpreter
1 parenta6d0031 commitee1db16

File tree

2 files changed

+134
-118
lines changed

2 files changed

+134
-118
lines changed

‎pyscriptjs/examples/pylist.py

Lines changed: 5 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -3,116 +3,6 @@
33
fromjsimportconsole,HTMLElement,document
44

55

6-
defadd_classes(element,class_list):
7-
forklassinclass_list.split(' '):
8-
element.classList.add(klass)
9-
10-
defcreate(what,id_=None,classes=''):
11-
element=document.createElement(what)
12-
ifid_:
13-
element.id=id_
14-
add_classes(element,classes)
15-
returnElement(id_,element)
16-
17-
classPyWidgetTheme:
18-
def__init__(self,main_style_classes):
19-
self.main_style_classes=main_style_classes
20-
21-
deftheme_it(self,widget):
22-
forklassinself.main_style_classes.split(' '):
23-
widget.classList.add(klass)
24-
25-
26-
classPyListTemplate:
27-
theme=PyWidgetTheme("flex flex-col-reverse mt-4")
28-
29-
30-
def__init__(self,parent):
31-
self.parent=parent
32-
self._children= []
33-
self.id=self.parent.id
34-
35-
defconnect(self):
36-
self.md=main_div=document.createElement('div');
37-
main_div.id=self.id+"-list-tasks-container"
38-
39-
ifself.theme:
40-
self.theme.theme_it(main_div)
41-
42-
self.parent.appendChild(main_div)
43-
44-
defadd(self,data,labels):
45-
child=PyItem(self,data,labels)
46-
returnself._add(child)
47-
48-
def_add(self,child_elem):
49-
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)
53-
self.md.appendChild(child_elem.create().element)
54-
child_elem.post_append()
55-
self.child_appended(child_elem)
56-
returnchild_elem
57-
58-
defpre_child_append(self,child):
59-
pass
60-
61-
defchild_appended(self,child):
62-
"""Overwrite me to define logic"""
63-
pass
64-
65-
66-
classPyItemTemplate(Element):
67-
def__init__(self,parent,data,labels):
68-
self._parent=parent
69-
self.id=f"{self._parent.id}-c-{len(self._parent._children)}"
70-
self.data=data
71-
self.data['id']=self.id
72-
self.labels=labels
73-
74-
super().__init__(self.id)
75-
76-
defcreate(self):
77-
console.log('creating section')
78-
new_child=create('section',self.id,"task bg-white my-1")
79-
console.log('creating values')
80-
values=' - '.join([self.data[f]forfinself.labels])
81-
console.log('creating innerHtml')
82-
new_child._element.innerHTML=f"""
83-
<label for="flex items-center p-2 ">
84-
<input class="mr-2" type="checkbox" class="task-check">
85-
<p class="m-0 inline">{values}</p>
86-
</label>
87-
"""
88-
89-
# check = new_child.select('input').element
90-
# check.onclick = self.check_task
91-
console.log('returning')
92-
returnnew_child
93-
94-
defon_click(self,evt):
95-
pass
96-
97-
defpre_append(self):
98-
pass
99-
100-
defpost_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-
defstrike(self,value):
110-
ifvalue:
111-
self.add_class("line-through")
112-
else:
113-
self.remove_class("line-through")
114-
115-
1166
classPyList(PyListTemplate):
1177
pass
1188

@@ -124,14 +14,11 @@ def on_click(self, evt=None):
12414

12515
self.select('input').element.checked=self.data['done']
12616

17+
defdisplay(self):
18+
returnself.data['content']
19+
12720

12821
defadd_task(*ags,**kws):
129-
console.log(new_task_content.value)
130-
console.log('adding1',myList)
131-
task= {
132-
"content":new_task_content.value,
133-
"done":False,
134-
"created_at":dt.now()
135-
}
136-
myList.add(task, ['content'])
22+
task= {"content":new_task_content.value,"done":False,"created_at":dt.now() }
23+
myList.add(PyItem(task,labels=['content'],state_key="done"))
13724
new_task_content.clear()

‎pyscriptjs/src/interpreter.ts

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ class Element:
5151
self._id = element_id
5252
self._element = element
5353
54+
@property
55+
def id(self):
56+
return self._id
57+
5458
@property
5559
def element(self):
5660
"""Return the dom element"""
@@ -115,6 +119,131 @@ class Element:
115119
def add_class(self, classname):
116120
self.element.classList.add(classname)
117121
122+
def add_classes(element, class_list):
123+
for klass in class_list.split(' '):
124+
element.classList.add(klass)
125+
126+
def create(what, id_=None, classes=''):
127+
element = document.createElement(what)
128+
if id_:
129+
element.id = id_
130+
add_classes(element, classes)
131+
return Element(id_, element)
132+
133+
class PyWidgetTheme:
134+
def __init__(self, main_style_classes):
135+
self.main_style_classes = main_style_classes
136+
137+
def theme_it(self, widget):
138+
for klass in self.main_style_classes.split(' '):
139+
widget.classList.add(klass)
140+
141+
142+
class PyListTemplate:
143+
theme = PyWidgetTheme("flex flex-col-reverse mt-4")
144+
145+
146+
def __init__(self, parent):
147+
self.parent = parent
148+
self._children = []
149+
self._id = self.parent.id
150+
151+
def connect(self):
152+
self.md = main_div = document.createElement('div');
153+
main_div.id = self._id + "-list-tasks-container"
154+
155+
if self.theme:
156+
self.theme.theme_it(main_div)
157+
158+
self.parent.appendChild(main_div)
159+
160+
def add(self, child):
161+
child.register_parent(self)
162+
return self._add(child)
163+
164+
def _add(self, child_elem):
165+
console.log("appending child", child_elem.element)
166+
self.pre_child_append(child_elem)
167+
child_elem.pre_append()
168+
self._children.append(child_elem)
169+
self.md.appendChild(child_elem.create().element)
170+
child_elem.post_append()
171+
self.child_appended(child_elem)
172+
return child_elem
173+
174+
def pre_child_append(self, child):
175+
pass
176+
177+
def child_appended(self, child):
178+
"""Overwrite me to define logic"""
179+
pass
180+
181+
182+
class PyItemTemplate(Element):
183+
label_fields = None
184+
185+
def __init__(self, data, labels=None, state_key=None, parent=None):
186+
self.data = data
187+
188+
self.register_parent(parent)
189+
190+
if not labels:
191+
labels = list(self.data.keys())
192+
self.labels = labels
193+
194+
self.state_key = state_key
195+
196+
super().__init__(self._id)
197+
198+
def register_parent(self, parent):
199+
self._parent = parent
200+
if parent:
201+
self._id = f"{self._parent._id}-c-{len(self._parent._children)}"
202+
self.data['id'] = self._id
203+
else:
204+
self._id = None
205+
206+
def create(self):
207+
console.log('creating section')
208+
new_child = create('section', self._id, "task bg-white my-1")
209+
console.log('creating values')
210+
211+
console.log('creating innerHtml')
212+
new_child._element.innerHTML = f"""
213+
<label for="flex items-center p-2 ">
214+
<input class="mr-2" type="checkbox" class="task-check">
215+
<p class="m-0 inline">{self.render_content()}</p>
216+
</label>
217+
"""
218+
219+
console.log('returning')
220+
return new_child
221+
222+
def on_click(self, evt):
223+
pass
224+
225+
def pre_append(self):
226+
pass
227+
228+
def post_append(self):
229+
self.element.click = self.on_click
230+
self.element.onclick = self.on_click
231+
232+
self._post_append()
233+
234+
def _post_append(self):
235+
pass
236+
237+
def strike(self, value):
238+
if value:
239+
self.add_class("line-through")
240+
else:
241+
self.remove_class("line-through")
242+
243+
def render_content(self):
244+
return ' - '.join([self.data[f] for f in self.labels])
245+
246+
118247
class OutputCtxManager:
119248
def __init__(self, out=None, output_to_console=True, append=True):
120249
self._out = out

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp