You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

155 lines
4.6 KiB

{% extends "base.html" %}
{% set active_page = "spells" %}
{% block title %}Spell List{% endblock %}
{% block content %}
<div class="uk-flex uk-flex-center uk-margin-bottom uk-margin-top">
<h1 class="uk-text-center"><strong>Legends of Palisma</strong>Spell Reference</h1>
</div>
<div class="uk-flex uk-flex-bottom uk-flex-center uk-margin-small-bottom">
<div>
<label for="spell_level">Spell Level</label>
<input type="number" name="spell_level" id="spell_level" class="uk-input" value="0">
</div>
<div class="uk-margin-left">
<div>
<label for="divine_toggle">Divine</label>
<input type="checkbox" name="divine_toggle" id="divine_toggle" class="uk-checkbox" checked>
</div>
<div>
<label for="arcane_toggle">Arcane</label>
<input type="checkbox" name="arcane_toggle" id="arcane_toggle" class="uk-checkbox" checked>
</div>
</div>
</div>
<div class="uk-flex uk-flex-bottom uk-flex-center uk-margin-large-bottom">
<div>
<label for="spell_query">Name Search</label>
<input type="text" name="spell_query" id="spell_query" class="uk-input"/>
</div>
<div class="uk-margin-left">
<button class="uk-button uk-button-primary" onclick="applyFilters();">Filter</button>
</div>
</div>
<hr class="uk-divider-icon">
{% if spells %}
<div class="uk-grid-medium uk-grid-match uk-flex-center" uk-grid>
{% for spell in spells %}
<div class="acks-npc-card" id="{{ spell.dom_id }}">
<div class="uk-card uk-card-body uk-card-default uk-box-shadow-hover-large">
<h4 class="uk-card-title uk-margin-small-top">{{ spell.name }}</h4>
<ul>
<li>Arcane: {{ spell.arcane }}</li>
<li>Divine: {{ spell.divine }}</li>
<li>Duration: {{ spell.duration }}</li>
<li>Range: {{ spell.range }}</li>
</ul>
<div>
{{ spell.description }}
</div>
</div>
</div>
{% endfor %}
</div>
{% endif %}
<script type="text/javascript">
var spells = [{% for spell in spells %} {{ spell.roll20_format | tojson }}, {% endfor %}];
function filterSpell(filters, spell) {
function name2id(name) {
return "#" + name.toLowerCase().replace(/[\*',]/g, "").replace(/\s/g, "_");
}
let hide = false;
// Handle search query filtering
if(filters.spell_query) {
if(spell.name.toLowerCase().indexOf(filters.spell_query.toLowerCase()) < 0) {
hide = true;
}
}
// Handle school and level filtering
if(!filters.arcane_included && spell.is_arcane) {
hide = true;
}
if(!filters.divine_included && spell.is_divine) {
hide = true;
}
if(filters.spell_level > 0) {
if(spell.is_arcane && spell.arcane != filters.spell_level) {
hide = true;
}
if(spell.is_divine && spell.divine != filters.spell_level) {
hide = true;
}
}
// Hide this spell-card if appropriate
if(hide) {
document.querySelector(name2id(spell.name)).classList.add('uk-hidden');
}
}
function resetFiltering() {
var hidden_spells = document.querySelectorAll("div.acks-npc-card.uk-hidden");
for(let hd of hidden_spells) {
hd.classList.remove('uk-hidden');
}
}
function applyFilters() {
resetFiltering();
filters = {
spell_level: document.querySelector('#spell_level').value,
spell_query: document.querySelector('#spell_query').value,
arcane_included: document.querySelector('#arcane_toggle').checked,
divine_included: document.querySelector('#divine_toggle').checked,
};
spells.forEach((spell, index) => { filterSpell(filters, spell); });
}
</script>
<style>
table.item-table, table.item-table th {
font-size: 12px;
}
div.stat-block > div {
text-align: center;
padding: 3px;
width: 26px;
}
div.stat-block > div > div:first-child {
font-weight: bold;
color: green;
}
div.stat-block > div > div:last-child {
font-weight: bold;
font-size: 12px;
color: #888;
}
div.save-block > div > div:first-child {
font-weight: bold;
color: purple;
}
div.save-block > div > div:last-child {
font-weight: bold;
font-size: 12px;
color: #888;
}
div.acks-npc-card {
width: 400px;
}
h1 strong {
display: block;
font-size: 50%;
opacity: 0.65;
}
</style>
{% endblock %}