Start on the colorscheme system
This commit is contained in:
@@ -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
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user