Skip to content

Commit f04b35a

Browse files
committed
Created HTML HEAD and BODY widgets.
1 parent 1252622 commit f04b35a

2 files changed

Lines changed: 67 additions & 21 deletions

File tree

remi/gui.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,11 @@ def set_title(self, title):
273273

274274
class BODY(Widget):
275275
EVENT_ONLOAD = 'onload'
276+
EVENT_ONERROR = 'onerror'
277+
EVENT_ONONLINE = 'ononline'
278+
EVENT_ONPAGEHIDE = 'onpagehide'
279+
EVENT_ONPAGESHOW = 'onpageshow'
280+
EVENT_ONRESIZE = 'onresize'
276281

277282
def __init__(self, *args, **kwargs):
278283
super(BODY, self).__init__(*args, **kwargs, _type='body')
@@ -282,6 +287,57 @@ def __init__(self, *args, **kwargs):
282287
loading_widget.set_identifier("loading")
283288

284289
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 ()
285341

286342

287343
class Tag(object):

remi/server.py

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -839,33 +839,23 @@ def _process_all(self, func):
839839
attr_call = self.re_attr_call.match(func)
840840

841841
if (func == '/') or (not func):
842-
with self.update_lock:
843-
# render the HTML
844-
html = self.client.root.repr()
845-
846842
self.send_response(200)
847843
self.send_header("Set-Cookie", "remi_session=%s"%(self.session))
848844
self.send_header('Content-type', 'text/html')
849845
self.end_headers()
846+
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+
self.client.body.append(self.client.root)
850+
self.client.page = HTML(children=[self.client.head, self.client.body])
851+
852+
with self.update_lock:
853+
# render the HTML
854+
page_content = self.client.body.repr()
855+
850856
self.wfile.write(encode_text("<!DOCTYPE html>\n"))
857+
self.wfile.write(encode_text(page_content))
851858

852-
self.wfile.write(encode_text("<html>\n<head>\n"))
853-
self.wfile.write(encode_text(
854-
"""<meta content='text/html;charset=utf-8' http-equiv='Content-Type'>
855-
<meta content='utf-8' http-equiv='encoding'>
856-
<meta name="viewport" content="width=device-width, initial-scale=1.0">"""))
857-
self.wfile.write(encode_text(self.client.css_head))
858-
self.wfile.write(encode_text(self.client.html_head))
859-
self.wfile.write(encode_text(self.client.js_head))
860-
self.wfile.write(encode_text("\n<title>%s</title>\n" % self.server.title))
861-
self.wfile.write(encode_text("\n</head>\n<body>\n"))
862-
self.wfile.write(encode_text(self.client.js_body_start))
863-
self.wfile.write(encode_text(self.client.html_body_start))
864-
self.wfile.write(encode_text('<div id="loading"><div id="loading-animation"></div></div>'))
865-
self.wfile.write(encode_text(html))
866-
self.wfile.write(encode_text(self.client.html_body_end))
867-
self.wfile.write(encode_text(self.client.js_body_end))
868-
self.wfile.write(encode_text("</body>\n</html>"))
869859
elif static_file:
870860
filename = self._get_static_file(static_file.groups()[0])
871861
if not filename:

0 commit comments

Comments
 (0)