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
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(
+1
View File
@@ -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
+27 -9
View File
@@ -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;
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 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):