From 20c51df49a2402e4101b6d6571204a4e5daa74a8 Mon Sep 17 00:00:00 2001 From: Peder Bergebakken Sundt Date: Tue, 26 Dec 2017 19:03:31 +0100 Subject: [PATCH] Start on the colorscheme system --- colorscheme.py | 59 ++++++++++++++++++++++++++++++++++++++ colorschemes/.folder | 0 common.py | 6 +++- config.py | 1 + resources/cards/card.css | 36 +++++++++++++++++------ resources/cards/colors.css | 0 resources/cards/colors.vm | 14 +++++++++ server.py | 41 ++++++++++++++++++++++++++ 8 files changed, 147 insertions(+), 10 deletions(-) create mode 100644 colorscheme.py create mode 100644 colorschemes/.folder create mode 100644 resources/cards/colors.css create mode 100644 resources/cards/colors.vm diff --git a/colorscheme.py b/colorscheme.py new file mode 100644 index 0000000..55ba4c1 --- /dev/null +++ b/colorscheme.py @@ -0,0 +1,59 @@ +import glob, os +from common import Model, wrap_output +import config + +class ColorScheme(Model): + filename = "" + border = "4a4a4a" + card_bg = "4a4a4a" + main_bg = "ddd" + main = "000" + header = "ddd" + header_bg = "111" + figure = "aaa" + figure_bg = "2a2a2a" + costbar = "eee" + costbar_bg = "111" + +def get(filename): + if not filename: + return ColorScheme() + with open(os.path.join(config.colordir, f"{filename}.yaml"), "r") as f: + return from_yaml(f.read(), filename=filename) +def store(colorscheme): + assert colorscheme.filename, "no filename set" + + with open(os.path.join(config.colordir, f"{filename}.yaml"), "w") as f: + f.write(to_yaml(colorscheme)) +def delete(filename): + if type(filename) is ColorScheme: + assert filename.filename, "no filename set" + filename = filename.filename + os.remove(os.path.join(config.colordir, f"{filename}.yaml")) + +@wrap_output(list) +def list_all(): + yield ColorScheme() + for i in glob.glob(os.path.join(config.colordir, "*.yaml")): + yield get(os.path.basename(i)[:-5]) + +def from_yaml(data, filename="from_yaml"): + colorscheme = ColorScheme() + colorscheme.filename = filename + for key, val in load(data).items(): + setattr(colorscheme, key, val) + return colorscheme +def to_yaml(colorscheme): + out = {} + for key in dir(colorscheme): + if "_" not in key[0] and key != "filename": + val = getattr(colorscheme, key) + if (val or val==0) and val != getattr(ColorScheme, key): + out[key] = val + return dump(out, default_flow_style=False) +def from_form(form):#sanic's request.form + colorscheme = ColorScheme() + for key, val in form.items(): + if not val[0]: continue + setattr(colorscheme, key, val[0].strip()) + return colorscheme diff --git a/colorschemes/.folder b/colorschemes/.folder new file mode 100644 index 0000000..e69de29 diff --git a/common.py b/common.py index 740d0e0..e4c6da6 100644 --- a/common.py +++ b/common.py @@ -4,6 +4,7 @@ try: from html5print import HTMLBeautifier except ModuleNotFoundError: pass +#import colorscheme#imported later instead to avoid problems with cyclic imports import config def readfile(path, binary=False): @@ -102,6 +103,8 @@ def withResource(path, binary=False): return decorator def mergeTemplate(path): + import colorscheme + filename = os.path.join(config.resourcedir, path) if config.cache: template = airspeed.Template(readfile(filename), filename) @@ -121,7 +124,8 @@ def mergeTemplate(path): objects.update({ "strip_unit": strip_unit, "escape_html": escape_html, - "escape_url":escape_url}) + "escape_url": escape_url, + "get_colorscheme":colorscheme.get}) if config.prettifyHTML: return response.html(HTMLBeautifier.beautify( diff --git a/config.py b/config.py index 1295397..aaec97a 100644 --- a/config.py +++ b/config.py @@ -2,5 +2,6 @@ cache = False resourcedir = "resources/" carddir = "cards/" svgdir = "svgs/" +colordir = "colorschemes/" prettifyHTML = False#requires html5print module, only applies to html processed by airspeed svg_page_size = 150 diff --git a/resources/cards/card.css b/resources/cards/card.css index 6be5e22..70314f4 100644 --- a/resources/cards/card.css +++ b/resources/cards/card.css @@ -47,9 +47,20 @@ article { grid-gap: 1.5mm 1.5mm; border-style: solid; border-width: 2mm; - border-color: #4a4a4a; - background-color: #4a4a4a; + border-color: var(--color-border); + background-color: var(--color-card-bg); cursor: pointer; + + --color-border: #4a4a4a; + --color-card-bg: #4a4a4a; + --color-main: #000; + --color-main-bg: #ddd; + --color-header-bg: #111; + --color-header: #ddd; + --color-figure-bg: #2a2a2a; + --color-figure: #aaa; + --color-costbar-bg: #111; + --color-costbar: #eee; } article.effects { grid-template-columns: 4fr 3fr; @@ -69,7 +80,8 @@ article.item { } article >* { - background-color: #ddd; + color: var(--color-main); + background-color: var(--color-main-bg); text-align: center; line-height: 1.4em; padding: 0 1mm; @@ -82,26 +94,32 @@ article h1 { font-size: 1.2em; line-height: 1.1em; font-weight: 600; + background-color: var(--color-header-bg); + color: var(--color-header); } article figure { grid-area: figure; - background: #2f2f2f; + background: var(--color-figure-bg); border-radius: 0; margin: -1.5mm 1.5mm; overflow: hidden; + position: relative; } -article figure * { - color: #999; +article figure >* { + color: var(--color-figure); + position: absolute; + top:0;right:0;left:0;bottom:0; } -article figure img{ +article figure img { padding: 1mm 0; display: block; height: calc(100% - 2mm); margin: auto auto; } article figure img.svg_filter{ + /*causes DPI issues when printing*/ filter: brightness(0) invert(1) @@ -131,10 +149,10 @@ article.effects ul { article section { grid-area: bar; - background-color: #111; + background-color: var(--color-costbar-bg); border-radius: 0; margin: 0 -2mm; - color: #eee; + color: var(--color-costbar); display: flex; flex-direction: row; flex-wrap: nowrap; diff --git a/resources/cards/colors.css b/resources/cards/colors.css new file mode 100644 index 0000000..e69de29 diff --git a/resources/cards/colors.vm b/resources/cards/colors.vm new file mode 100644 index 0000000..6a25029 --- /dev/null +++ b/resources/cards/colors.vm @@ -0,0 +1,14 @@ + + + +#foreach($colorscheme in $colorschemes) +
+ #if($colorscheme.filename) + $escape_html($colorscheme.filename) + #else + Default Scheme + #end + +
+#end diff --git a/server.py b/server.py index f7de7a4..9284ead 100755 --- a/server.py +++ b/server.py @@ -3,6 +3,7 @@ import sys, os, airspeed, glob from sanic import Sanic, response from common import mergeTemplate, withResource, call import card +import colorscheme import svg import config @@ -114,6 +115,46 @@ async def preview_card(request): was_deleted = True return locals() +@app.get("/cards/colors") +@mergeTemplate("cards/colors.vm") +async def get_color_picker(request): + colorschemes = colorscheme.list_all() + print(colorschemes) + return locals() + +@app.get("/card/colors/preview") +@mergeTemplate("cards/card.vm") +async def get_color_preview(request): + cards = [card.Card()] + cards[0].colorscheme = request.args.get(schemename) or "" + cards[0].title = cards[0].colorscheme or "Default Colors" + cards[0].figure = "" + cards[0].figure_source = "" + cards[0].description = "This is a description" + cards[0].steps = ["Do A", "Then B"] + cards[0].cost = "Something" + cards[0].power = 5 + cards[0].cp = 50 + + return locals() + +@app.post("/card/colors/preview") +@mergeTemplate("cards/card.vm") +async def get_color_preview(request): + cards = [card.Card()] + cards[0].colorscheme = request.args.get(schemename) or "" + cards[0].title = cards[0].colorscheme or "Default Colors" + cards[0].figure = "" + cards[0].figure_source = "" + cards[0].description = "This is a description" + cards[0].steps = ["Do A", "Then B"] + cards[0].cost = "Something" + cards[0].power = 5 + cards[0].cp = 50 + + return locals() + + @app.get("/cards/svg") @mergeTemplate("cards/svg.vm") async def svg_list(request):