Cleanup, add unique IDs tpo card.vm articles, add support for stacking figures, add more flags qhich trigger item layout, add feature to show current stock, fix SVG upload bug

This commit is contained in:
2017-12-26 18:58:17 +01:00
parent 76b66ff555
commit 1aa3c569a8
3 changed files with 48 additions and 36 deletions
+8 -1
View File
@@ -68,7 +68,7 @@ def to_yaml(card):
def from_dir(path): def from_dir(path):
return [from_file(i, in_carddir=False) for i in glob.glob(os.path.join(path, "*.yaml"))] return [from_file(i, in_carddir=False) for i in glob.glob(os.path.join(path, "*.yaml"))]
def from_form(form): def from_form(form):#sanic's request.form
card = Card() card = Card()
for key, val in form.items(): for key, val in form.items():
if not val[0]: continue if not val[0]: continue
@@ -89,6 +89,13 @@ def is_filename_vacant(filename, in_carddir=True):
filename += ".yaml" filename += ".yaml"
return not os.path.exists(filename) return not os.path.exists(filename)
def get_vacant_filename():
i = 1
while 1:
if is_filename_vacant("card-%s" % str(i).zfill(4)):
return "card-%s" % str(i).zfill(4)
i += 1
class open_file:#contextmanager class open_file:#contextmanager
def __init__(self, filename): def __init__(self, filename):
self.filename = filename self.filename = filename
+21 -14
View File
@@ -5,19 +5,27 @@
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
#macro(figure $card) #macro(figure $card)
#if($card.figure_source == "material-icons") #if($card.figure.__contains__(","))
#figure_embed($card.figure.split(",").get(1).strip(), $card.figure_source, "111")
#figure_embed($card.figure.split(",").get(0).strip(), $card.figure_source, "aaa")
#else
#figure_embed($card.figure, $card.figure_source, "aaa")
#end
#end
#macro(figure_embed $figure $source $color)
#if($source == "material-icons")
<!--https://material.io/icons/--> <!--https://material.io/icons/-->
<i class="material-icons figure">$escape_html($card.figure)</i> <i class="material-icons figure">$escape_html($label)</i>
#elseif($card.figure_source == "mdi") #elseif($source == "mdi")
<!--https://materialdesignicons.com/--> <!--https://materialdesignicons.com/-->
<i class="mdi mdi-$escape_html($card.figure)"></i> <i class="mdi mdi-$escape_html($figure)"></i>
#elseif($card.figure_source == "fa") #elseif($source == "fa")
<!--http://fontawesome.io/icons/--> <!--http://fontawesome.io/icons/-->
<i class="fa fa-$escape_html($card.figure)"></i> <i class="fa fa-$escape_html($figure)"></i>
#elseif($card.figure_source == "svg") #elseif($source == "svg")
<!--/cards/svg--> <!--/cards/svg-->
<!--<img class="svg_filter" src="/svg/${escape_html($card.figure)}.svg">--> <!--<img class="svg_filter" src="/svg/${escape_html($figure)}.svg">-->
<img src="/svg/${escape_html($card.figure)}.svg?color=999"> <img src="/svg/${escape_html($figure)}.svg?color=$color">
#end #end
#end #end
#macro(specialFlags $card) #macro(specialFlags $card)
@@ -67,19 +75,18 @@
<title>Cards</title> <title>Cards</title>
#foreach($card in $cards) #foreach($card in $cards)
#set($card_is_item = false) #set($card_is_item = false)
#foreach($flag in ["Consumable", "Title", "Food", "Trinket", "Crafting Material", "Collectible", "Alchemy Material", "Ammo", "Splash", "Thrown", "Draw Card"]) #foreach($flag in ["Consumable", "Title", "Food", "Trinket", "Crafting Material", "Collectible", "Alchemy Material", "Ammo", "Splash", "Thrown", "Draw Card", "Passive", "Melee Weapon", "Arc Weapon", "LoS Weapon"])
#if($card.flags.__contains__($flag)) #set($card_is_item = true) #end #if($card.flags.__contains__($flag)) #set($card_is_item = true) #end
#if($card.flags.__contains__($flag.lower())) #set($card_is_item = true) #end #if($card.flags.__contains__($flag.lower())) #set($card_is_item = true) #end
#end #end
#if($card_is_item) #if($card_is_item)
<article #if class="item" onclick="location.href='creator?filename=$escape_html($card.filename)'"> <article id="$escape_html($card.filename)" #if class="item" onclick="location.href='creator?filename=$escape_html($card.filename)'">
#elseif($card.effects) #elseif($card.effects)
<article #if class="effects" onclick="location.href='creator?filename=$escape_html($card.filename)'"> <article id="$escape_html($card.filename)" #if class="effects" onclick="location.href='creator?filename=$escape_html($card.filename)'">
#else #else
<article onclick="location.href='creator?filename=$escape_html($card.filename)'"> <article id="$escape_html($card.filename)" onclick="location.href='creator?filename=$escape_html($card.filename)'">
#end #end
<h1>$escape_html($card.title)</h1> <h1>$escape_html($card.title)</h1>
<figure> <figure>
+19 -21
View File
@@ -65,14 +65,7 @@ async def show_creator(request):
initialcard = card.from_file(str(request.args["filename"][0])+".yaml") initialcard = card.from_file(str(request.args["filename"][0])+".yaml")
else: else:
initialcard = card.Card() initialcard = card.Card()
initialcard.filename = card.get_vacant_filename()
#find vacant fileame:
i = 1
while 1:
if card.is_filename_vacant("card-%s" % str(i).zfill(4)):
initialcard.filename = "card-%s" % str(i).zfill(4)
break
i += 1
#initialcard.power = "" #initialcard.power = ""
#initialcard.cp = "" #initialcard.cp = ""
#initialcard.steps = "" #initialcard.steps = ""
@@ -88,25 +81,23 @@ async def show_creator(request):#not used atm
#find vacant fileame: #find vacant fileame:
if not initialcard.filename: if not initialcard.filename:
i = 1 initialcard.filename = card.get_vacant_filename()
while 1:
if card.is_filename_vacant("card-%s" % str(i).zfill(4)):
initialcard.filename = "card-%s" % str(i).zfill(4)
break
i += 1
return {"card":initialcard} return {"card":initialcard}
@app.get('/cards/show') @app.get('/cards/show')
@mergeTemplate("cards/card.vm") @mergeTemplate("cards/card.vm")
async def show_cards(request): async def show_cards(request):
if "card" not in request.args:
return response.redirect('/cards/')
cards = [] cards = []
for i in request.args["card"]: if "card" in request.args:
if "/" in i or "\\" in i: for i in request.args["card"]:
return response.redirect('/cards/') if "/" in i or "\\" in i: return response.redirect('/cards/')
cards.append(card.from_file(i+".yaml")) cards.append(card.from_file(i+".yaml"))
elif "stock" in request.args:
for i in card.from_dir(config.carddir):
cards.extend([i]*int(i.copies_owned))
else:
return response.redirect('/cards/')
return locals() return locals()
@app.post('/cards/preview') @app.post('/cards/preview')
@@ -114,6 +105,8 @@ async def show_cards(request):
async def preview_card(request): async def preview_card(request):
cards = [card.from_form(request.form)] cards = [card.from_form(request.form)]
if "save" in request.form: if "save" in request.form:
if not cards[0].filename:
cards[0].filename = card.get_vacant_filename()
card.to_file(cards[0]) card.to_file(cards[0])
was_saved = True was_saved = True
if "delete" in request.form: if "delete" in request.form:
@@ -149,6 +142,11 @@ async def svg_add(request):
name = request.form.get("name") or file.name name = request.form.get("name") or file.name
if name[-4:] == ".svg": name = name[:-4] if name[-4:] == ".svg": name = name[:-4]
page = 1
current_collection = None
collections = svg.list_collections()
filter = None
svg.store(name, file.body) svg.store(name, file.body)
uploaded = True uploaded = True