From 4a7931077ef349093faf3bac0756cce2cb6304c2 Mon Sep 17 00:00:00 2001 From: Peder Bergebakken Sundt Date: Sun, 15 Oct 2017 11:31:29 +0200 Subject: [PATCH] Add SVG option for icons --- resources/cards/svg.css | 43 ++++++++++++++++++++++++++++++++ resources/cards/svg.vm | 36 +++++++++++++++++++++++++++ server.py | 54 +++++++++++++++++++++++++++++++---------- svg.py | 18 ++++++++++++++ svgs/.folder | 0 5 files changed, 138 insertions(+), 13 deletions(-) create mode 100644 resources/cards/svg.css create mode 100644 resources/cards/svg.vm create mode 100644 svg.py create mode 100644 svgs/.folder diff --git a/resources/cards/svg.css b/resources/cards/svg.css new file mode 100644 index 0000000..4459fef --- /dev/null +++ b/resources/cards/svg.css @@ -0,0 +1,43 @@ +ul { + margin: 0; + padding: 0; +} + +li { + list-style-type: none; + display: inline-block; + width: 10em; + height: 10em; + padding: 0; + margin: 1em 0.3em; + overflow: hidden; + border: solid 1px black; + border-radius: 0.2em; +} +li:hover { + border-color: #888; + background-color: #ddf; +} + +li h1 { + text-align: center; + font-size: 1em; + line-height: 1em; +} + +img { + display: block; + max-width: 100%; + max-height: 6.8em; + width: auto; + height: 6.8em; + margin: 0 auto; + + /*filter: invert(1) opacity(0.8);*/ + filter: opacity(0.8); +} + +body >h1, +form { + text-align: center; +} diff --git a/resources/cards/svg.vm b/resources/cards/svg.vm new file mode 100644 index 0000000..b319d78 --- /dev/null +++ b/resources/cards/svg.vm @@ -0,0 +1,36 @@ + + + +#macro(form) +
+

Upload SVG:

+

+
+ + + + #if($uploaded) + Upload was successfull! + #end +

+
+#end + +Return to cardlist + +#form() + +

Available SVGs:

+ + + +#form() + +Return to cardlist diff --git a/server.py b/server.py index 384df80..1e26809 100755 --- a/server.py +++ b/server.py @@ -3,6 +3,7 @@ import sys, os, airspeed, glob from sanic import Sanic, response from common import withTemplate, withResource import card +import svg import config app = Sanic() @@ -39,26 +40,53 @@ async def show_cards(request, template={}): @app.post('/cards/preview') @withTemplate("cards/card.vm") async def preview_card(request, template={}): - cards = [card.Card()] - - for key, val in request.form.items(): - if not val[0]: continue - if type(getattr(card.Card, key)) in (tuple, list): - setattr(cards[0], key, val) - else: - setattr(cards[0], key, val[0]) - + cards = [card.from_form(request.form)] + if "save" in request.form: + card.to_file(cards[0]) + was_saved = True + if "delete" in request.form: + card.del_file(cards[0]) + was_deleted = True return response.html(template["card.vm"].merge(locals())) -#add static files: +@app.get("/cards/svg") +@withTemplate("cards/svg.vm") +async def svg_list(request, template={}): + svgs = svg.list_all() + svgs.sort() + return response.html(template["svg.vm"].merge(locals())) + +@app.post("/cards/svg") +@withTemplate("cards/svg.vm") +async def svg_add(request, template={}): + file = request.files.get("file") + name = request.form.get("name") or file.name + if name[-4:] == ".svg": name = name[:-4] + + svg.store(name, file.body) + + uploaded = True + svgs = svg.list_all() + return response.html(template["svg.vm"].merge(locals())) + +#add static resources: for i in glob.iglob(os.path.join(config.resourcedir, "**","*"), recursive=True): - if i.split(".")[-1] in ("html", "css", "js"): + filetype = i.split('.')[-1] + if filetype in ("html", "css", "js"): i = os.path.relpath(i, config.resourcedir) - print(i) + print("Adding static resource", repr(i)) + if filetype == "js": filetype = "javascript" + @app.get(f"/{i}") @withResource(i) async def card_style(request, file={}): - return response.text(tuple(file.values())[0], headers={"Content-Type": f"text/{i.split('.')[-1]}"}) + file = tuple(file.values())[0] + return response.text(file, headers={"Content-Type": f"text/{filetype}"}) + +#add svgs: +@app.get(f"/svg/.svg") +async def get_svg(request, name): + return response.text(svg.get(name), headers={"Content-Type": "image/svg+xml"}) if __name__ == "__main__": app.run(host="0.0.0.0", port=8000) diff --git a/svg.py b/svg.py new file mode 100644 index 0000000..438c3d7 --- /dev/null +++ b/svg.py @@ -0,0 +1,18 @@ +import glob, os +import config +from common import memoize, listify_output + +@listify_output +def list_all(): + for i in glob.glob(os.path.join(config.svgdir, "*.svg")): + yield os.path.basename(i)[:-4] + + +@memoize +def get(name): + with open(os.path.join(config.svgdir, f"{name}.svg"), "r") as f: + return f.read() + +def store(name, data): + with open(os.path.join(config.svgdir, f"{name}.svg"), "wb" if type(data) is bytes else "w") as f: + return f.write(data) diff --git a/svgs/.folder b/svgs/.folder new file mode 100644 index 0000000..e69de29