Start on the colorscheme system

This commit is contained in:
2017-12-26 19:03:31 +01:00
parent 3c85e84272
commit 20c51df49a
8 changed files with 147 additions and 10 deletions
+59
View File
@@ -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
View File
+5 -1
View File
@@ -4,6 +4,7 @@ try:
from html5print import HTMLBeautifier from html5print import HTMLBeautifier
except ModuleNotFoundError: except ModuleNotFoundError:
pass pass
#import colorscheme#imported later instead to avoid problems with cyclic imports
import config import config
def readfile(path, binary=False): def readfile(path, binary=False):
@@ -102,6 +103,8 @@ def withResource(path, binary=False):
return decorator return decorator
def mergeTemplate(path): def mergeTemplate(path):
import colorscheme
filename = os.path.join(config.resourcedir, path) filename = os.path.join(config.resourcedir, path)
if config.cache: if config.cache:
template = airspeed.Template(readfile(filename), filename) template = airspeed.Template(readfile(filename), filename)
@@ -121,7 +124,8 @@ def mergeTemplate(path):
objects.update({ objects.update({
"strip_unit": strip_unit, "strip_unit": strip_unit,
"escape_html": escape_html, "escape_html": escape_html,
"escape_url":escape_url}) "escape_url": escape_url,
"get_colorscheme":colorscheme.get})
if config.prettifyHTML: if config.prettifyHTML:
return response.html(HTMLBeautifier.beautify( return response.html(HTMLBeautifier.beautify(
+1
View File
@@ -2,5 +2,6 @@ cache = False
resourcedir = "resources/" resourcedir = "resources/"
carddir = "cards/" carddir = "cards/"
svgdir = "svgs/" svgdir = "svgs/"
colordir = "colorschemes/"
prettifyHTML = False#requires html5print module, only applies to html processed by airspeed prettifyHTML = False#requires html5print module, only applies to html processed by airspeed
svg_page_size = 150 svg_page_size = 150
+27 -9
View File
@@ -47,9 +47,20 @@ article {
grid-gap: 1.5mm 1.5mm; grid-gap: 1.5mm 1.5mm;
border-style: solid; border-style: solid;
border-width: 2mm; border-width: 2mm;
border-color: #4a4a4a; border-color: var(--color-border);
background-color: #4a4a4a; background-color: var(--color-card-bg);
cursor: pointer; 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 { article.effects {
grid-template-columns: 4fr 3fr; grid-template-columns: 4fr 3fr;
@@ -69,7 +80,8 @@ article.item {
} }
article >* { article >* {
background-color: #ddd; color: var(--color-main);
background-color: var(--color-main-bg);
text-align: center; text-align: center;
line-height: 1.4em; line-height: 1.4em;
padding: 0 1mm; padding: 0 1mm;
@@ -82,26 +94,32 @@ article h1 {
font-size: 1.2em; font-size: 1.2em;
line-height: 1.1em; line-height: 1.1em;
font-weight: 600; font-weight: 600;
background-color: var(--color-header-bg);
color: var(--color-header);
} }
article figure { article figure {
grid-area: figure; grid-area: figure;
background: #2f2f2f; background: var(--color-figure-bg);
border-radius: 0; border-radius: 0;
margin: -1.5mm 1.5mm; margin: -1.5mm 1.5mm;
overflow: hidden; overflow: hidden;
position: relative;
} }
article figure * { article figure >* {
color: #999; color: var(--color-figure);
position: absolute;
top:0;right:0;left:0;bottom:0;
} }
article figure img{ article figure img {
padding: 1mm 0; padding: 1mm 0;
display: block; display: block;
height: calc(100% - 2mm); height: calc(100% - 2mm);
margin: auto auto; margin: auto auto;
} }
article figure img.svg_filter{ article figure img.svg_filter{
/*causes DPI issues when printing*/
filter: filter:
brightness(0) brightness(0)
invert(1) invert(1)
@@ -131,10 +149,10 @@ article.effects ul {
article section { article section {
grid-area: bar; grid-area: bar;
background-color: #111; background-color: var(--color-costbar-bg);
border-radius: 0; border-radius: 0;
margin: 0 -2mm; margin: 0 -2mm;
color: #eee; color: var(--color-costbar);
display: flex; display: flex;
flex-direction: row; flex-direction: row;
flex-wrap: nowrap; flex-wrap: nowrap;
View File
+14
View File
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<link rel="stylesheet" href="colors.css">
#foreach($colorscheme in $colorschemes)
<section>
#if($colorscheme.filename)
$escape_html($colorscheme.filename)
#else
Default Scheme
#end
<iframe>
</iframe>
</section>
#end
+41
View File
@@ -3,6 +3,7 @@ import sys, os, airspeed, glob
from sanic import Sanic, response from sanic import Sanic, response
from common import mergeTemplate, withResource, call from common import mergeTemplate, withResource, call
import card import card
import colorscheme
import svg import svg
import config import config
@@ -114,6 +115,46 @@ async def preview_card(request):
was_deleted = True was_deleted = True
return locals() 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") @app.get("/cards/svg")
@mergeTemplate("cards/svg.vm") @mergeTemplate("cards/svg.vm")
async def svg_list(request): async def svg_list(request):