Illustrations/web/templates/stats.html

108 lines
4.0 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% extends "base.html" %}
{% block body_class %}themed-bg{% endblock %}
{% block content %}
<div class="container">
<h1 class="page-title">Statistics</h1>
<div class="card" style="padding:16px; margin-bottom:16px;">
<div class="meta-grid">
<div>
<div class="meta-label">Total Illustrations</div>
<div class="subject-title" style="margin:0">{{ total }}</div>
</div>
<div>
<div class="meta-label">Added in last 30 days</div>
<div class="subject-title" style="margin:0">{{ last30 }}</div>
</div>
<div>
<div class="meta-label">Added in last 365 days</div>
<div class="subject-title" style="margin:0">{{ last365 }}</div>
</div>
</div>
</div>
<!-- Sparkline (simple bars) -->
<div class="card" style="padding:16px; margin-bottom:16px;">
<div class="meta-label">Adds by Month (last 12)</div>
<div style="display:flex; align-items:flex-end; gap:6px; height:140px; margin-top:8px;">
{% for label, value, height in heights %}
<div title="{{ label }} = {{ value }}"
style="width:22px; height:{{ height }}px; background:#cfe3f6; border:1px solid #bcd4ee; border-radius:6px;"></div>
{% endfor %}
</div>
<div class="small muted" style="margin-top:6px;">
{% for label, value in series %}{% if not forloop.last %}{{ label }} · {% else %}{{ label }}{% endif %}{% endfor %}
</div>
</div>
<!-- Top subjects -->
<div class="card" style="padding:16px; margin-bottom:16px;">
<div class="meta-label">Top Subjects</div>
<div style="display:flex; flex-wrap:wrap; gap:8px; margin-top:8px;">
{% for s in top_subjects %}
<span class="chip chip-muted">{{ s.name }} ({{ s.count }})</span>
{% empty %}
<span class="muted">No subjects.</span>
{% endfor %}
</div>
</div>
<!-- Scripture usage -->
<div class="card" style="padding:16px; margin-bottom:16px;">
<h3 style="margin:0 0 10px;">Scripture Usage</h3>
<div class="chip" style="margin-bottom:10px;"><strong>Avg. refs per scripture-bearing entry:</strong>&nbsp;{{ avg_refs_per_entry }}</div>
<div style="display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px;">
<div>
<h4 style="margin:0 0 6px;">Top 10 Books</h4>
<ol class="small" style="margin:0; padding-left:18px;">
{% for book, cnt in top_books %}
<li><strong>{{ book }}</strong> — {{ cnt }}</li>
{% empty %}
<li class="muted">No data yet.</li>
{% endfor %}
</ol>
</div>
<div>
<h4 style="margin:0 0 6px;">Top 10 Scriptures</h4>
<ol class="small" style="margin:0; padding-left:18px;">
{% for ref, cnt in top_refs %}
<li><strong>{{ ref }}</strong> — {{ cnt }}</li>
{% empty %}
<li class="muted">No data yet.</li>
{% endfor %}
</ol>
</div>
</div>
</div>
<!-- Tools: Scripture normalizer -->
<div class="card" style="padding:16px; margin-bottom:24px;">
<div class="meta-label">Tools</div>
<div class="small muted" style="margin:6px 0 10px;">
Normalize scripture references (abbreviations, separators, repeat book names where needed).
</div>
<div style="display:flex; gap:10px; flex-wrap:wrap;">
<!-- Dryrun -->
<form method="get" action="{% url 'normalize_scripture' %}">
<input type="hidden" name="limit" value="">
<button class="btn btn-secondary">Preview (dryrun)</button>
</form>
{% if user.is_authenticated and user.is_staff %}
<!-- Apply -->
<form method="post" action="{% url 'normalize_scripture' %}">
{% csrf_token %}
<button class="btn btn-danger" onclick="return confirm('Apply normalization to ALL entries? This will modify scripture_raw fields.');">
Apply to all
</button>
</form>
{% endif %}
</div>
<div class="small muted" style="margin-top:8px;">
Tip: you can pass <code>?limit=1000</code> on the preview URL to test a subset.
</div>
</div>
</div>
{% endblock %}