Skip to content

Commit fed8376

Browse files
committed
Fixed import order.
1 parent f04b35a commit fed8376

2 files changed

Lines changed: 156 additions & 109 deletions

File tree

remi/gui.py

Lines changed: 147 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -235,111 +235,6 @@ def onchange(self):
235235
return ()
236236

237237

238-
class HTML(Tag):
239-
def __init__(self, **kwargs):
240-
super(HTML, self).__init__(*args, **kwargs, _type='html')
241-
242-
head = HEAD()
243-
body = BODY()
244-
self.add_child('head', head)
245-
self.add_child('body', body)
246-
247-
248-
class HEAD(Tag):
249-
def __init__(self, title, js, css, html, **kwargs):
250-
super(HEAD, self).__init__(*args, **kwargs, _type='head')
251-
self.add_child('meta',
252-
"""<meta content='text/html;charset=utf-8' http-equiv='Content-Type'>
253-
<meta content='utf-8' http-equiv='encoding'>
254-
<meta name="viewport" content="width=device-width, initial-scale=1.0">""")
255-
256-
self.set_css(css)
257-
self.set_html(html)
258-
self.set_javascript(js)
259-
self.set_title(title)
260-
261-
def set_javascript(self, js):
262-
self.add_child("js", js)
263-
264-
def set_html(self, html):
265-
self.add_child("html", html)
266-
267-
def set_css(self, css):
268-
self.add_child("css", css)
269-
270-
def set_title(self, title):
271-
self.add_child('title', "<title>%s</title>" % title)
272-
273-
274-
class BODY(Widget):
275-
EVENT_ONLOAD = 'onload'
276-
EVENT_ONERROR = 'onerror'
277-
EVENT_ONONLINE = 'ononline'
278-
EVENT_ONPAGEHIDE = 'onpagehide'
279-
EVENT_ONPAGESHOW = 'onpageshow'
280-
EVENT_ONRESIZE = 'onresize'
281-
282-
def __init__(self, *args, **kwargs):
283-
super(BODY, self).__init__(*args, **kwargs, _type='body')
284-
loading_anim = Widget()
285-
loading_anim.set_identifier("loading-animation")
286-
loading_widget = Widget(children=[loading_anim])
287-
loading_widget.set_identifier("loading")
288-
289-
self.append(loading_widget)
290-
291-
@decorate_set_on_listener("(self, emitter)")
292-
@decorate_event_js("""sendCallback('%(emitter_identifier)s','%(event_name)s');
293-
event.stopPropagation();event.preventDefault();
294-
return false;""")
295-
def onload(self):
296-
"""Called when page gets loaded."""
297-
return ()
298-
299-
@decorate_set_on_listener("(self, emitter)")
300-
@decorate_event_js("""
301-
function(message, source, lineno, colno, error){
302-
var params={};params['message']=message;
303-
params['source']=source;
304-
params['lineno']=lineno;
305-
params['colno']=colno;
306-
sendCallbackParam('%(emitter_identifier)s','%(event_name)s',params);
307-
return false;
308-
}""")
309-
def onerror(self, message, source, lineno, colno):
310-
"""Called when an error occurs."""
311-
print("DOCUMENT ERROR: " + message)
312-
return (message, source, lineno, colno)
313-
314-
@decorate_set_on_listener("(self, emitter)")
315-
@decorate_event_js("""sendCallback('%(emitter_identifier)s','%(event_name)s');
316-
event.stopPropagation();event.preventDefault();
317-
return false;""")
318-
def ononline(self):
319-
return ()
320-
321-
@decorate_set_on_listener("(self, emitter)")
322-
@decorate_event_js("""sendCallback('%(emitter_identifier)s','%(event_name)s');
323-
event.stopPropagation();event.preventDefault();
324-
return false;""")
325-
def onpagehide(self):
326-
return ()
327-
328-
@decorate_set_on_listener("(self, emitter)")
329-
@decorate_event_js("""sendCallback('%(emitter_identifier)s','%(event_name)s');
330-
event.stopPropagation();event.preventDefault();
331-
return false;""")
332-
def onpageshow(self):
333-
return ()
334-
335-
@decorate_set_on_listener("(self, emitter)")
336-
@decorate_event_js("""sendCallback('%(emitter_identifier)s','%(event_name)s');
337-
event.stopPropagation();event.preventDefault();
338-
return false;""")
339-
def onresize(self):
340-
return ()
341-
342-
343238
class Tag(object):
344239
"""
345240
Tag is the base class of the framework. It represents an element that can be added to the GUI,
@@ -1038,6 +933,153 @@ def set_on_key_down_listener(self, callback, *userdata):
1038933
self.onkeydown.connect(callback, *userdata)
1039934

1040935

936+
class HTML(Tag):
937+
def __init__(self, *args, **kwargs):
938+
super(HTML, self).__init__(*args, _type='html', **kwargs)
939+
self._classes = []
940+
941+
def repr(self, changed_widgets={}):
942+
"""It is used to automatically represent the object to HTML format
943+
packs all the attributes, children and so on.
944+
945+
Args:
946+
changed_widgets (dict): A dictionary containing a collection of tags that have to be updated.
947+
The tag that have to be updated is the key, and the value is its textual repr.
948+
"""
949+
local_changed_widgets = {}
950+
innerHTML = ''
951+
for k in self._render_children_list:
952+
s = self.children[k]
953+
if isinstance(s, Tag):
954+
innerHTML = innerHTML + s.repr(local_changed_widgets)
955+
elif isinstance(s, type('')):
956+
innerHTML = innerHTML + s
957+
elif isinstance(s, type(u'')):
958+
innerHTML = innerHTML + s.encode('utf-8')
959+
else:
960+
innerHTML = innerHTML + repr(s)
961+
innerHTML += '\n'
962+
return ''.join(('<', self.type, '>\n', innerHTML, '\n</', self.type, '>'))
963+
964+
965+
class HEAD(Tag):
966+
def __init__(self, title, js, css, html, *args, **kwargs):
967+
super(HEAD, self).__init__(*args, _type='head', **kwargs)
968+
self.add_child('meta',
969+
"""<meta content='text/html;charset=utf-8' http-equiv='Content-Type'>
970+
<meta content='utf-8' http-equiv='encoding'>
971+
<meta name="viewport" content="width=device-width, initial-scale=1.0">""")
972+
self._classes = []
973+
self.set_css(css)
974+
self.set_html(html)
975+
self.set_javascript(js)
976+
self.set_title(title)
977+
978+
def set_javascript(self, js):
979+
self.add_child("js", js)
980+
981+
def set_html(self, html):
982+
self.add_child("html", html)
983+
984+
def set_css(self, css):
985+
self.add_child("css", css)
986+
987+
def set_title(self, title):
988+
self.add_child('title', "<title>%s</title>" % title)
989+
990+
def repr(self, changed_widgets={}):
991+
"""It is used to automatically represent the object to HTML format
992+
packs all the attributes, children and so on.
993+
994+
Args:
995+
changed_widgets (dict): A dictionary containing a collection of tags that have to be updated.
996+
The tag that have to be updated is the key, and the value is its textual repr.
997+
"""
998+
local_changed_widgets = {}
999+
innerHTML = ''
1000+
for k in self._render_children_list:
1001+
s = self.children[k]
1002+
if isinstance(s, Tag):
1003+
innerHTML = innerHTML + s.repr(local_changed_widgets)
1004+
elif isinstance(s, type('')):
1005+
innerHTML = innerHTML + s
1006+
elif isinstance(s, type(u'')):
1007+
innerHTML = innerHTML + s.encode('utf-8')
1008+
else:
1009+
innerHTML = innerHTML + repr(s)
1010+
innerHTML += '\n'
1011+
return ''.join(('<', self.type, '>\n', innerHTML, '\n</', self.type, '>'))
1012+
1013+
1014+
class BODY(Widget):
1015+
EVENT_ONLOAD = 'onload'
1016+
EVENT_ONERROR = 'onerror'
1017+
EVENT_ONONLINE = 'ononline'
1018+
EVENT_ONPAGEHIDE = 'onpagehide'
1019+
EVENT_ONPAGESHOW = 'onpageshow'
1020+
EVENT_ONRESIZE = 'onresize'
1021+
1022+
def __init__(self, *args, **kwargs):
1023+
super(BODY, self).__init__(*args, _type='body', **kwargs)
1024+
loading_anim = Widget()
1025+
loading_anim.set_identifier("loading-animation")
1026+
loading_widget = Widget(children=[loading_anim])
1027+
loading_widget.set_identifier("loading")
1028+
1029+
self.append(loading_widget)
1030+
1031+
@decorate_set_on_listener("(self, emitter)")
1032+
@decorate_event_js("""sendCallback('%(emitter_identifier)s','%(event_name)s');
1033+
event.stopPropagation();event.preventDefault();
1034+
return false;""")
1035+
def onload(self):
1036+
"""Called when page gets loaded."""
1037+
return ()
1038+
1039+
@decorate_set_on_listener("(self, emitter)")
1040+
@decorate_event_js("""
1041+
function(message, source, lineno, colno, error){
1042+
var params={};params['message']=message;
1043+
params['source']=source;
1044+
params['lineno']=lineno;
1045+
params['colno']=colno;
1046+
sendCallbackParam('%(emitter_identifier)s','%(event_name)s',params);
1047+
return false;
1048+
}""")
1049+
def onerror(self, message, source, lineno, colno):
1050+
"""Called when an error occurs."""
1051+
print("DOCUMENT ERROR: " + message)
1052+
return (message, source, lineno, colno)
1053+
1054+
@decorate_set_on_listener("(self, emitter)")
1055+
@decorate_event_js("""sendCallback('%(emitter_identifier)s','%(event_name)s');
1056+
event.stopPropagation();event.preventDefault();
1057+
return false;""")
1058+
def ononline(self):
1059+
return ()
1060+
1061+
@decorate_set_on_listener("(self, emitter)")
1062+
@decorate_event_js("""sendCallback('%(emitter_identifier)s','%(event_name)s');
1063+
event.stopPropagation();event.preventDefault();
1064+
return false;""")
1065+
def onpagehide(self):
1066+
return ()
1067+
1068+
@decorate_set_on_listener("(self, emitter)")
1069+
@decorate_event_js("""sendCallback('%(emitter_identifier)s','%(event_name)s');
1070+
event.stopPropagation();event.preventDefault();
1071+
return false;""")
1072+
def onpageshow(self):
1073+
return ()
1074+
1075+
@decorate_set_on_listener("(self, emitter)")
1076+
@decorate_event_js("""sendCallback('%(emitter_identifier)s','%(event_name)s');
1077+
event.stopPropagation();event.preventDefault();
1078+
return false;""")
1079+
def onresize(self):
1080+
return ()
1081+
1082+
10411083
class GridBox(Widget):
10421084
"""It contains widgets automatically aligning them to the grid.
10431085
Does not permit children absolute positioning.

remi/server.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
import cgi
5252
import weakref
5353

54+
from remi import gui
55+
5456

5557
clients = {}
5658
runtimeInstances = weakref.WeakValueDictionary()
@@ -844,14 +846,17 @@ def _process_all(self, func):
844846
self.send_header('Content-type', 'text/html')
845847
self.end_headers()
846848

847-
self.client.head = HEAD(self.server.title, self.client.js_head, self.client.css_head, self.client.html_head)
848-
self.client.body = BODY()
849+
#WARNING !!! MUTUAL/CIRCUAL import???
850+
self.client.head = gui.HEAD(self.server.title, self.client.js_head + '\n' + self.client.js_body_end, self.client.css_head, self.client.html_head)
851+
self.client.body = gui.BODY()
849852
self.client.body.append(self.client.root)
850-
self.client.page = HTML(children=[self.client.head, self.client.body])
853+
self.client.page = gui.HTML()
854+
self.client.page.add_child('head', self.client.head)
855+
self.client.page.add_child('body', self.client.body)
851856

852857
with self.update_lock:
853858
# render the HTML
854-
page_content = self.client.body.repr()
859+
page_content = self.client.page.repr()
855860

856861
self.wfile.write(encode_text("<!DOCTYPE html>\n"))
857862
self.wfile.write(encode_text(page_content))

0 commit comments

Comments
 (0)