diff --git a/scripts/boxesserver b/scripts/boxesserver
index a92ab80..dc0b29a 100755
--- a/scripts/boxesserver
+++ b/scripts/boxesserver
@@ -98,7 +98,7 @@ class BServer:
self.staticdir = os.path.join(os.path.dirname(__file__), '../static/')
- def arg2html(self, a, prefix):
+ def arg2html(self, a, prefix, defaults={}):
name = a.option_strings[0].replace("-", "")
if isinstance(a, argparse._HelpAction):
return ""
@@ -106,24 +106,26 @@ class BServer:
if prefix and name.startswith(prefix + '_'):
viewname = name[len(prefix)+1:]
+ default = defaults.get(name, None)
+
row = """
%s | %%s | %s |
\n""" % \
(viewname, a.help or "")
if (isinstance(a, argparse._StoreAction) and
hasattr(a.type, "html")):
- input = a.type.html(name, a.default)
+ input = a.type.html(name, default or a.default)
elif a.dest == "layout":
val = a.default.split("\n")
input = """""" % \
- (name, max((len(l) for l in val))+10, len(val)+1, a.default)
+ (name, max((len(l) for l in val))+10, len(val)+1, default or a.default)
elif a.choices:
options = "\n".join(
("""""" %
- (e, ' selected="selected"' if e == a.default else "",
+ (e, ' selected="selected"' if e == (default or a.default) else "",
e) for e in a.choices))
input = """\n""" % (name, options)
else:
input = """""" % \
- (name, a.default)
+ (name, default or a.default)
return row % input
@@ -148,7 +150,7 @@ class BServer:
"""
- def args2html(self, name, box, action=""):
+ def args2html(self, name, box, action="", defaults={}):
result = ["""
@@ -183,7 +185,7 @@ class BServer:
for a in group._group_actions:
if a.dest in ("input", "output"):
continue
- result.append(self.arg2html(a, prefix))
+ result.append(self.arg2html(a, prefix, defaults))
result.append("")
groupid += 1
result.append("""
@@ -349,13 +351,20 @@ Create boxes and more with a laser cutter!
start_response(status, headers)
return self.menu()
+ args = [unquote_plus(arg) for arg in
+ environ['QUERY_STRING'].split("&")]
- args = ["--"+unquote_plus(arg) for arg in environ['QUERY_STRING'].split("&")]
- if "--render=1" not in args:
+ if "render=1" not in args:
+ defaults = { }
+ for a in args:
+ kv = a.split('=')
+ if len(kv) == 2:
+ k, v = kv
+ defaults[k] = cgi.escape(v, True)
start_response(status, headers)
- return self.args2html(name, box, "./" + name)
+ return self.args2html(name, box, "./" + name, defaults=defaults)
else:
- args = [a for a in args if a != "--render=1"]
+ args = ["--"+ arg for arg in args if arg != "render=1"]
try:
box.parseArgs(args)
except (ArgumentParserError) as e: