new migration in apps.applets to seed wallet applet models; many expanded styles in wallet.js, chiefly concerned w. wallet-oriented FTs tbh; some intermittent Windows cache errors quashed in dash view ITs; apps.dash.views & .urls now support wallet applets; apps.lyric.models now discerns tithe coins (available for purchase soon); new styles across many scss files, again many concerning wallet applets but also applets more generally and also unorthodox media query parameters to make UX more usable; a slew of new wallet partials
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
Disco DeDisco
2026-03-11 00:58:24 -04:00
parent 791510b46d
commit aa1cef6e7b
18 changed files with 441 additions and 83 deletions

View File

@@ -1,64 +1,15 @@
{% extends "core/base.html" %}
{% load static %}
{% block title_text %}Dashboard{% endblock title_text %}
{% block header_text %}<span>Dash</span>board{% endblock header_text %}
{% block title_text %}Dashwallet{% endblock title_text %}
{% block header_text %}<span>Dash</span>wallet{% endblock header_text %}
{% block content %}
<div class="wallet-page">
<h1>Wallet</h1>
<section class="wallet-balances">
<div><i class="fa-solid fa-ticket"></i>: <span id="id_writs_balance">{{ wallet.writs }}</span></div>
<div>Esteem: <span id="id_esteem_balance">{{ wallet.esteem }}</span></div>
</section>
<section class="wallet-tokens">
{% if coin %}
<div id="id_coin_on_a_string" class="token">
<i class="fa-solid fa-clover"></i>
<div class="token-tooltip">
<h4>{{ coin.tooltip_name }}</h4>
<p>{{ coin.tooltip_description }}</p>
{% if coin.tooltip_shoptalk %}
<small><em>{{ coin.tooltip_shoptalk }}</em></small>
{% endif %}
<p class="expiry">{{ coin.tooltip_expiry }}</p>
</div>
</div>
{% endif %}
{% for token in free_tokens %}
<div id="id_free_token_{{ forloop.counter0 }}" 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 %}
<p class="expiry">{{ token.tooltip_expiry }}</p>
</div>
</div>
{% endfor %}
</section>
<section id="id_payment_methods">
<h2>Payment Methods</h2>
<button id="id_add_payment_method">Add Payment Method</button>
<div id="id_stripe_payment_element"></div>
<button id="id_save_payment_method" hidden>Save Card</button>
</section>
<section id="id_tithe_token_shop">
<h2>Tithe Tokens</h2>
<div class="token-bundle">
<span><i class="fa-solid fa-piggy-bank"></i> Tithe Token ×1</span>
<span>+ Writ bonus</span>
</div>
</section>
{% include "apps/applets/_partials/_gear.html" with menu_id="id_wallet_applet_menu" %}
{% include "apps/wallet/_partials/_applets.html" %}
</div>
<div id="id_tooltip_portal" class="token-tooltip"></div>
<script src="https://js.stripe.com/v3/"></script>
<script src="{% static "apps/scripts/wallet.js" %}"></script>
{% endblock content %}
{% endblock content %}

View File

@@ -0,0 +1,19 @@
<section
id="id_wallet_balances"
style="--applet-cols: {{ entry.applet.grid_cols }}; --applet-rows: {{ entry.applet.grid_rows }};"
>
<div><i class="fa-solid fa-ticket"></i>: <span id="id_writs_balance">{{ wallet.writs }}</span></div>
<div>Esteem: <span id="id_esteem_balance">{{ wallet.esteem }}</span></div>
<div id="id_tithe_token_shop">
<div class="token-bundle" data-qty="1" data-price-cents="100">
<span class="bundle-qty">1 Tithe Token</span>
<span class="bundle-writs">+144 Writs</span>
<span class="bundle-price">$1.00</span>
</div>
<div class="token-bundle" data-qty="5" data-price-cents="400">
<span class="bundle-qty">5 Tithe Tokens</span>
<span class="bundle-writs">+750 Writs</span>
<span class="bundle-price">$4.00</span>
</div>
</div>
</section>

View File

@@ -0,0 +1,10 @@
<section
id="id_payment_methods"
style="--applet-cols: {{ entry.applet.grid_cols }}; --applet-rows: {{ entry.applet.grid_rows }};"
>
<h2>Payment Methods</h2>
<button id="id_add_payment_method">Add Payment Method</button>
<div id="id_stripe_payment_element"></div>
<button id="id_save_payment_method" hidden>Save Card</button>
<button id="id_cancel_payment_method" hidden>Cancel</button>
</section>

View File

@@ -0,0 +1,53 @@
<section
class="wallet-tokens"
style="--applet-cols: {{ entry.applet.grid_cols }}; --applet-rows: {{ entry.applet.grid_rows }};"
>
{% if coin %}
<div id="id_coin_on_a_string" class="token">
<i class="fa-solid fa-clover"></i>
<div class="token-tooltip">
<h4>{{ coin.tooltip_name }}</h4>
<p>{{ coin.tooltip_description }}</p>
{% if coin.tooltip_shoptalk %}
<small><em>{{ coin.tooltip_shoptalk }}</em></small>
{% endif %}
<p class="expiry">{{ coin.tooltip_expiry }}</p>
</div>
</div>
{% endif %}
{% for token in free_tokens %}
<div id="id_free_token_{{ forloop.counter0 }}" 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 %}
<p class="expiry">{{ token.tooltip_expiry }}</p>
</div>
</div>
{% endfor %}
{% for token in tithe_tokens %}
<div id="id_tithe_token_{{ forloop.counter0 }}" class="token">
<i class="fa-solid fa-piggy-bank"></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 %}
<p class="expiry">{{ token.tooltip_expiry }}</p>
</div>
</div>
{% empty %}
<div id="id_tithe_token_empty" class="token token--empty">
<i class="fa-solid fa-piggy-bank"></i>
<div class="token-tooltip">
<h4>Tithe Token</h4>
<p>0 owned</p>
<p class="expiry">purchase one above</p>
</div>
</div>
{% endfor %}
</section>

View File

@@ -0,0 +1,27 @@
<div id="id_wallet_applets_container">
<div id="id_wallet_applet_menu" style="display:none;">
<form
hx-post="{% url "toggle_wallet_applets" %}"
hx-target="#id_wallet_applets_container"
hx-swap="outerHTML"
>
{% csrf_token %}
{% for entry in applets %}
<label>
<input
type="checkbox"
name="applets"
value="{{ entry.applet.slug }}"
{% if entry.visible %}checked{% endif %}
>
{{ entry.applet.name }}
</label>
{% endfor %}
<div class="menu-btns">
<button type="submit" class="btn btn-confirm">OK</button>
<button type="button" class="btn btn-cancel applet-menu-cancel">NVM</button>
</div>
</form>
</div>
{% include "apps/applets/_partials/_applets.html" %}
</div>