new apps.epic app migrations for token expiration & cooldown; reject token renamed to return token everywhere; new mapps.epic.models & .views for expiration & cooldown; new apps.dash.views to manage stacking of like Token types not just in the kit bag but in the Gameboard's Game Kit applet & in the Dashwallet's Tokens applet; Free Tokens now display correctly in kit bag; apps.lyric.admin now ensures superuser cannot grant Free Tokens without an expiration date; corresponding tests in .tests.integrated.test_admin.TokenAdminFormTest; screendumps occurring for every test, regardless of passfail status, after one fail fixed in FTs.base; FTs.test_gatekeeper.GameKitInsertTest.test_free_token_insert_via_kit_consumed_on_confirm, for test purposes only, ensures starting Free Token deleted before fresh one assigned w. full 7d expiration battery

This commit is contained in:
Disco DeDisco
2026-03-15 16:08:34 -04:00
parent 18ba242647
commit 2e24175ec8
16 changed files with 244 additions and 69 deletions

View File

@@ -32,21 +32,18 @@
</div>
</div>
{% endif %}
{% for token in free_tokens %}
<div id="id_kit_free_token_{{ forloop.counter0 }}" class="token">
{% if free_tokens %}
{% with free_tokens.0 as token %}
<div id="id_kit_free_token" class="token">
<i class="fa-solid fa-coins"></i>
<div class="token-tooltip">
<h4>{{ token.tooltip_name }}</h4>
<p>
{{ token.tooltip_description }}
</p>
{% if token.tooltip_shoptalk %}
<small><em>{{ token.tooltip_shoptalk }}</em></small>
{% endif %}
<h4>{{ token.tooltip_name }}{% if free_count > 1 %} <span class="token-count">(×{{ free_count }})</span>{% endif %}</h4>
<p>{{ token.tooltip_description }}</p>
<p class="expiry">{{ token.tooltip_expiry }}</p>
</div>
</div>
{% endfor %}
{% endwith %}
{% endif %}
<div id="id_kit_card_deck" class="kit-item"><i class="fa-regular fa-id-badge"></i></div>
<div id="id_kit_dice_set" class="kit-item"><i class="fa-solid fa-dice"></i></div>
</div>

View File

@@ -35,12 +35,12 @@
<div class="token-panel">
<div class="token-denomination">1</div>
<span class="token-insert-label">INSERT TOKEN TO PLAY</span>
<span class="token-reject-label">PUSH TO REJECT</span>
<span class="token-return-label">PUSH TO RETURN</span>
</div>
{% if user_can_reject %}
<form method="POST" action="{% url 'epic:reject_token' room.id %}" style="display:contents">
<form method="POST" action="{% url 'epic:return_token' room.id %}" style="display:contents">
{% csrf_token %}
<button type="submit" class="token-reject-btn" aria-label="Push to reject"></button>
<button type="submit" class="token-return-btn" aria-label="Push to return"></button>
</form>
{% endif %}
</div>