From 7cb8fbd1849d7a48474aa32614042b2bcb10babb Mon Sep 17 00:00:00 2001 From: Peder Bergebakken Sundt Date: Sun, 12 Nov 2017 19:38:47 +0100 Subject: [PATCH] Add support for svg collections, add svg browser pagination and filtering svg collections must be added manually to the svg directory --- resources/cards/svg.css | 17 ++++++++++ resources/cards/svg.vm | 72 ++++++++++++++++++++++++++++++----------- server.py | 16 ++++++++- svg.py | 22 ++++++++++--- 4 files changed, 103 insertions(+), 24 deletions(-) diff --git a/resources/cards/svg.css b/resources/cards/svg.css index 35c4ee8..489a9da 100644 --- a/resources/cards/svg.css +++ b/resources/cards/svg.css @@ -41,3 +41,20 @@ body >h1, form { text-align: center; } + +h4 { + margin:0; +} + +.splitcontainer { + width: 100%; + overflow: hidden; +} +.splitl { + width: 45%; + float:left; +} +.splitr { + width: 45%; + float:right; +} diff --git a/resources/cards/svg.vm b/resources/cards/svg.vm index 66024a7..56da4ea 100644 --- a/resources/cards/svg.vm +++ b/resources/cards/svg.vm @@ -1,38 +1,74 @@ +SVG list -SVG list - #macro(form) -
-

Upload SVG:

-

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

-
+
+

Upload SVG:

+

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

+
+#end +#macro(pagination) +
+ #set($self = "svg?") + #if($current_collection) + #set($self = "${self}collection=$escape_html($current_collection)&") + #end + #if($filter) + #set($self = "${self}filter=$escape_html($filter)&") + #end + #if($page>1)Previous page - #end + Next page +
#end Return to cardlist - -#form() +
+
+ #form() +
+
+
+

filter

+ + #if($current_collection) + + #end + +
+
+

Collections:

+ No collection + #foreach($collection in $collections) + - $escape_html($collection) + #end +
+
+

Available SVGs:

+#pagination() + +#pagination() + #form() Return to cardlist diff --git a/server.py b/server.py index db558c0..772f641 100755 --- a/server.py +++ b/server.py @@ -124,8 +124,19 @@ async def preview_card(request, template={}): @app.get("/cards/svg") @withTemplate("cards/svg.vm") async def svg_list(request, template={}): - svgs = svg.list_all() + filter = request.args.get("filter") + page = int(request.args.get("page") or 1) + current_collection = request.args.get("collection") + + collections = svg.list_collections() + svgs = svg.list_all(current_collection) + + if filter: + svgs = [i for i in svgs if filter in i] + svgs.sort() + svgs = svgs[(page-1)*100:page*100] + return response.html(template["svg.vm"].merge(locals())) @app.post("/cards/svg") @@ -161,6 +172,9 @@ for j in glob.iglob(os.path.join(config.resourcedir, "**","*"), recursive=True): @app.get(f"/svg/.svg") async def get_svg(request, name): return response.text(svg.get(name), headers={"Content-Type": "image/svg+xml"}) +@app.get(f"/svg//.svg") +async def get_svg(request, collection, name): + return response.text(svg.get(os.path.join(collection, 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 index 438c3d7..98e759f 100644 --- a/svg.py +++ b/svg.py @@ -3,16 +3,28 @@ 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] - - +def list_all(collection = None): + if collection: + for i in glob.glob(os.path.join(config.svgdir, collection, "*.svg")): + yield os.path.join(collection, os.path.basename(i)[:-4]) + else: + for i in glob.glob(os.path.join(config.svgdir, "*.svg")): + yield os.path.basename(i)[:-4] + +@listify_output +def list_collections(): + for i in glob.glob(os.path.join(config.svgdir, "*")): + if not i.endswith(".svg"): + yield os.path.basename(i) + + @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)