Harald Wolff 2018-03-12 09:27:40 +01:00
commit 9d4d3f9980
11 changed files with 134 additions and 3 deletions

View File

@ -12,7 +12,6 @@ def init(hserver):
manager = WebManager( hserver )
root.setChild( "manage", manager)
root.setDefault("manage")
root.setChild("_browse", TreeBrowser())

View File

@ -1,5 +1,6 @@
<html>
<head>
<meta charset="UTF-8"/>
<title>HServer Management</title>
<style>
<%include ("style_css",self)%>

View File

@ -78,3 +78,11 @@ body,p,div {
position: relative;
left: 50px;
}
#editor {
min-width: 600px;
min-height: 400px;
}

View File

@ -7,8 +7,7 @@ import hserver.api
from hserver.request import Request
from hserver.headers import Headers
from hserver.templates import Template
from hserver.templatemod import TemplateModule
from hserver.templates import Template,TemplateModule
import hserver.run
import hserver.systemplates

View File

@ -0,0 +1,8 @@
import hserver
server = hserver.HServer()
server.run()

View File

@ -45,6 +45,10 @@ class WebObject(WebCallable,Aquisition):
def __delitem__(self,name):
delattr( self, name )
def __contains__(self,name):
o = getattr(self,name,None)
return not o is None
def setDefault(self,default):
self.__default = default
@ -77,7 +81,10 @@ class WebObject(WebCallable,Aquisition):
def __call__(self,request,o = None):
if not self.__default is None:
request.redirect( request.pathwalker().walked() + "/" + self.__default )
elif "index_html" in self:
request.redirect( request.pathwalker().walked() + "/index_html" )
request.getContentFile().write("<html><head><title>No Content</title></head><body>Sorry, no content here!</body></html>")
def attribute(self,name,default):

View File

@ -0,0 +1,5 @@
from hserver.templates.templates import Template
from hserver.templates.templatemodule import TemplateModule
from hserver.templates.dpage import DPage

View File

@ -0,0 +1,40 @@
<form action="<%=request.self()%>" method="POST" enctype="multipart/form-data" accept-charset="utf-8">
<input type="submit" value="Speichern"/><br/>
<textarea id="editor" name="content"><%=self.source(request)%></textarea><br/>
<input type="submit" value="Speichern"/>
</form>
<div id="preview">
<iframe id="preview-frame" name="preview" src=""></iframe>
</div>
<script type="text/javascript">
var previewTimeout;
function preview_loaded(){
var preview = document.getElementById("preview-frame");
preview.src = "data:text/html;charset=utf-8," + this.responseText;
}
function preview(){
var editor = document.getElementById("editor");
var fdata = new FormData();
fdata.set( "content", editor.value );
var r = new XMLHttpRequest();
r.open("POST","<%=request.self(-1)%>/preview",true);
r.onload = preview_loaded;
r.send(fdata);
}
function sourcechanged(){
clearTimeout(previewTimeout);
previewTimeout = setTimeout( preview, 2000 );
}
editor = document.getElementById("editor");
editor.addEventListener("input", sourcechanged );
</script>

View File

@ -0,0 +1,64 @@
import hserver.api
from hserver.templates import Template
from hserver.api import WebObject,WebCallable
from objectbroker import Persistence
import os
import os.path
from simplelog import log
class DPage(WebObject,Persistence):
NOPERSIST = ("_DPage__template")
_wo_manage = Template( base = os.path.dirname( __file__ ), template = "dpage.html" )
def __init__(self, source = None):
self.__template = None
if source is None:
self.__source = """<!DOCTYPE html>
<html>
<head>
<title>DPage Template</title>
</head>
<body>DPage Body</body>
</html>"""
else:
self.__source = source
def source(self, request):
if "content" in request.getForm():
source = request.getForm()["content"].value()
self.__source = source
self.__template = None
return self.__source
def __call__(self,request,o = None):
return self.template()(request, o = o )
def provide(self, name):
tmpl = getattr(self, name)
if (isinstance(tmpl, DPage)):
return tmpl.template()
return None
def template(self):
if (self.__template is None):
self.__template = Template( source = self.__source, provider = self )
return self.__template
def _preview(self,request, o = None):
if "content" in request.getForm():
source = request.getForm()["content"].value()
tmpl = Template( source = source, provider = self )
tmpl(request)
preview = WebCallable( method = _preview )
hserver.api.DPage = DPage