Update web/templates/entry_view.html

This commit is contained in:
Joshua Laymon 2025-08-15 22:26:08 +00:00
parent 87cc038f64
commit b2b7aa6231

View File

@ -1,87 +1,92 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block body_class %}themed-bg{% endblock %}
{% load static %} {% load static %}
{% block body_class %}themed-bg{% endblock %}
{% block content %} {% block content %}
<div class="result-wrap"> <div class="container">
<!-- Toolbar -->
<!-- Top bar: back + counter + clear Prev/Next -->
<div class="result-toolbar"> <div class="result-toolbar">
<div class="rt-left"> <div class="rt-left">
<a class="btn btn-secondary" href="{% url 'search' %}">← Back to Search</a> <a class="btn btn-secondary" href="{% url 'search' %}">← Back to Results</a>
{% if count %} <span class="rt-count">#{{ entry.id }}</span>
<span class="rt-count">{{ position }} of {{ count }}</span>
{% endif %}
</div> </div>
<div class="rt-right"> <div class="rt-right">
<form method="get" action="{% url 'nav_prev' %}" class="inline"> <a class="btn btn-primary" href="{% url 'entry_view' entry.next_id %}">Next</a>
<!-- send current zero-based index (position-1); view will subtract 1 -->
<input type="hidden" name="i" value="{{ position|add:'-1' }}">
<button class="btn btn-lg" {% if position <= 1 %}disabled{% endif %}> Prev</button>
</form>
<form method="get" action="{% url 'nav_next' %}" class="inline">
<!-- send current zero-based index (position-1); view will add 1 -->
<input type="hidden" name="i" value="{{ position|add:'-1' }}">
<button class="btn btn-lg btn-primary" {% if position >= count %}disabled{% endif %}>Next </button>
</form>
{% if user.is_authenticated and user.is_staff %} <!-- Share button -->
<a class="btn btn-outline" href="{% url 'entry_edit' entry.id %}">Unlock / Edit</a> <button id="share-btn" class="btn btn-primary" style="margin-left:6px;">
<a class="btn btn-danger" href="{% url 'entry_delete' entry.id %}">Delete</a> <span style="display:flex;align-items:center;gap:4px;">
{% endif %} <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path d="M13.5 1a1.5 1.5 0 0 1 1.5 1.5v3a.5.5 0 0 1-1 0V2.707l-6.146 6.147a.5.5 0 0 1-.708-.708L13.293 2H11.5a.5.5 0 0 1 0-1h3z"/>
<path d="M3.5 5a1.5 1.5 0 0 0-1.5 1.5v7A1.5 1.5 0 0 0 3.5 15h7a1.5 1.5 0 0 0 1.5-1.5V9a.5.5 0 0 1 1 0v4.5A2.5 2.5 0 0 1 10.5 16h-7A2.5 2.5 0 0 1 1 13.5v-7A2.5 2.5 0 0 1 3.5 4H8a.5.5 0 0 1 0 1H3.5z"/>
</svg>
Share
</span>
</button>
<a class="btn btn-secondary" href="{% url 'entry_edit' entry.id %}">Edit</a>
</div> </div>
</div> </div>
<!-- Main card --> <!-- Card -->
<div class="result-card"> <div class="card entry-view">
<!-- SUBJECT pills (WOL-linked) --> <div class="entry-section">
<div class="subject-pills"> <div class="entry-label">Subject</div>
{% if subject_list %} <div class="entry-value">{{ entry.subject|default:"—" }}</div>
{% for s in subject_list %}
<a
class="chip chip-subject"
href="https://wol.jw.org/en/wol/s/r1/lp-e?q={{ s }}"
target="_blank" rel="noopener noreferrer"
title="Search WOL for {{ s }}"
>{{ s }}</a>
{% endfor %}
{% else %}
<span class="chip chip-muted">(no subject)</span>
{% endif %}
</div> </div>
<!-- ILLUSTRATION --> <div class="entry-section">
<div class="section"> <div class="entry-label">Illustration</div>
<div class="section-label">Illustration</div> <div class="entry-value" id="illustration-text">{{ entry.illustration|linebreaksbr|default:"—" }}</div>
<div class="section-body lead-text">
{{ entry.illustration|linebreaksbr|default:"—" }}
</div>
</div> </div>
<!-- APPLICATION --> <div class="entry-section">
<div class="section"> <div class="entry-label">Application</div>
<div class="section-label">Application</div> <div class="entry-value" id="application-text">{{ entry.application|linebreaksbr|default:"—" }}</div>
<div class="section-body lead-text">
{{ entry.application|linebreaksbr|default:"—" }}
</div>
</div> </div>
<!-- Meta (smaller) --> <!-- Meta -->
<div class="meta-grid"> <div class="meta-grid">
<div class="meta-item">
<div class="meta-label">Scripture</div>
<div class="meta-value">{{ entry.scripture_raw|default:"—" }}</div>
</div>
<!-- Fixed Source block -->
<div class="meta-item"> <div class="meta-item">
<div class="meta-label">Source</div> <div class="meta-label">Source</div>
<div class="meta-value"> <div class="meta-value">
{% if entry.source %} {% if entry.source %}
{% with s=entry.source %} {% with s=entry.source|default:"" %}
{% with sl=s|lower %} {% with sl=s|lower|cut:" " %}
{% if sl|slice:":2" == "wp" or sl|slice:":2" == "ws" or sl|slice:":2" == "yb" or sl|slice:":2" == "km" or sl|slice:":3" == "mwb" or sl|slice:":1" == "w" or sl|slice:":1" == "g" or sl|slice:":2" == "ap" or sl|slice:":3" == "apf" or sl|slice:":2" == "be" or sl|slice:":2" == "bh" or sl|slice:":2" == "br" or sl|slice:":2" == "bt" or sl|slice:":3" == "btg" or sl|slice:":2" == "cf" or sl|slice:":2" == "cl" or sl|slice:":2" == "ct" or sl|slice:":2" == "dp" or sl|slice:":2" == "fg" or sl|slice:":2" == "fy" or sl|slice:":2" == "gt" or sl|slice:":2" == "hb" or sl|slice:":2" == "im" or sl|slice:":2" == "ip" or sl|slice:":2" == "it" or sl|slice:":2" == "jv" or sl|slice:":2" == "ka" or sl|slice:":2" == "kj" or sl|slice:":2" == "kl" or sl|slice:":2" == "lf" or sl|slice:":3" == "lff" or sl|slice:":2" == "ll" or sl|slice:":2" == "ly" or sl|slice:":2" == "my" or sl|slice:":2" == "od" or sl|slice:":2" == "pe" or sl|slice:":2" == "po" or sl|slice:":2" == "pt" or sl|slice:":2" == "rr" or sl|slice:":2" == "rs" or sl|slice:":2" == "sg" or sl|slice:":2" == "sh" or sl|slice:":2" == "si" or sl|slice:":2" == "td" or sl|slice:":2" == "tp" or sl|slice:":2" == "tr" or sl|slice:":2" == "ts" or sl|slice:":2" == "un" %} {% if
sl|slice:":2" == "w " or sl|startswith:"w" or
sl|slice:":2" == "wp" or sl|slice:":2" == "ws" or sl|slice:":1" == "g" or
sl|slice:":2" == "yb" or sl|slice:":2" == "kt" or
sl|slice:":2" == "km" or sl|slice:":3" == "mwb" or
sl|slice:":2" == "ap" or sl|slice:":3" == "apf" or sl|slice:":2" == "be" or sl|slice:":2" == "bh" or
sl|slice:":2" == "br" or sl|slice:":2" == "bt" or sl|slice:":3" == "btg" or sl|slice:":2" == "cf" or
sl|slice:":2" == "cl" or sl|slice:":2" == "ct" or sl|slice:":2" == "dp" or sl|slice:":2" == "fg" or
sl|slice:":2" == "fy" or sl|slice:":2" == "gt" or sl|slice:":2" == "hb" or sl|slice:":2" == "im" or
sl|slice:":2" == "ip" or sl|slice:":2" == "it" or sl|slice:":2" == "jv" or sl|slice:":2" == "ka" or
sl|slice:":2" == "kj" or sl|slice:":2" == "kl" or sl|slice:":2" == "lf" or sl|slice:":3" == "lff" or
sl|slice:":2" == "ll" or sl|slice:":2" == "ly" or sl|slice:":2" == "my" or sl|slice:":2" == "od" or
sl|slice:":2" == "pe" or sl|slice:":2" == "po" or sl|slice:":2" == "pt" or sl|slice:":2" == "rr" or
sl|slice:":2" == "rs" or sl|slice:":2" == "sg" or sl|slice:":2" == "sh" or sl|slice:":2" == "si" or
sl|slice:":2" == "td" or sl|slice:":2" == "tp" or sl|slice:":2" == "tr" or sl|slice:":2" == "ts" or
sl|slice:":2" == "un"
%}
<a class="chip chip-link" <a class="chip chip-link"
href="https://wol.jw.org/en/wol/l/r1/lp-e?q={{ s|urlencode }}" href="https://wol.jw.org/en/wol/l/r1/lp-e?q={{ s|urlencode }}"
target="_blank" rel="noopener noreferrer">{{ s }}</a> target="_blank" rel="noopener noreferrer">
{{ s }}
</a>
{% else %} {% else %}
<a class="chip chip-link" <a class="chip chip-link"
href="https://www.google.com/search?q={{ s|urlencode }}" href="https://www.google.com/search?q={{ s|urlencode }}"
target="_blank" rel="noopener noreferrer">{{ s }}</a> target="_blank" rel="noopener noreferrer">
{{ s }}
</a>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% endwith %} {% endwith %}
@ -90,64 +95,54 @@
</div> </div>
<div class="meta-item"> <div class="meta-item">
<div class="meta-label">Scripture</div> <div class="meta-label">Talk Title</div>
<div class="meta-value"> <div class="meta-value">{{ entry.talk_title|default:"—" }}</div>
{% if scripture_list %}
{% for sc in scripture_list %}
<a class="chip chip-link"
href="https://wol.jw.org/en/wol/l/r1/lp-e?q={{ sc|urlencode }}"
target="_blank" rel="noopener noreferrer">{{ sc }}</a>
{% endfor %}
{% else %}—{% endif %}
</div>
</div> </div>
<div class="meta-item"> <div class="meta-item">
<div class="meta-label">Code</div> <div class="meta-label">Talk Number</div>
<div class="meta-value">{{ entry.talk_number|default:"—" }}</div>
</div>
<div class="meta-item">
<div class="meta-label">Entry Code</div>
<div class="meta-value">{{ entry.entry_code|default:"—" }}</div> <div class="meta-value">{{ entry.entry_code|default:"—" }}</div>
</div> </div>
<div class="meta-item"> <div class="meta-item">
<div class="meta-label">Talk</div> <div class="meta-label">Date Added</div>
<div class="meta-value"> <div class="meta-value">{{ entry.date_added|date:"Y-m-d" }}</div>
{% if entry.talk_title %}{{ entry.talk_title }}{% else %}—{% endif %}
{% if entry.talk_number %}<span class="chip chip-muted">#{{ entry.talk_number }}</span>{% endif %}
</div>
</div> </div>
<div class="meta-item"> <div class="meta-item">
<div class="meta-label">Dates</div> <div class="meta-label">Date Edited</div>
<div class="meta-value small"> <div class="meta-value">{{ entry.date_edited|date:"Y-m-d" }}</div>
{% if entry.date_added %}Added: {{ entry.date_added }}{% else %}Added: —{% endif %}
{% if entry.date_edited %} • Edited: {{ entry.date_edited }}{% endif %}
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<style> <!-- Toast -->
.subject-pills{ <div id="copy-toast"
display:flex; style="position:fixed;bottom:20px;left:50%;transform:translateX(-50%);
flex-wrap:wrap; background:#333;color:#fff;padding:10px 16px;border-radius:6px;
gap:10px; font-size:14px;display:none;z-index:9999;">
margin:0 0 10px; The Illustration was copied to the clipboard
} </div>
.chip-subject{
font-weight:700; <script>
font-size:16px; document.getElementById('share-btn').addEventListener('click', function() {
padding:8px 14px; const illustration = document.getElementById('illustration-text').innerText.trim();
border-radius:999px; const application = document.getElementById('application-text').innerText.trim();
background:#eef5fc; const textToCopy = illustration + " " + application;
border:1px solid #d7e6f7;
color:#0f172a; navigator.clipboard.writeText(textToCopy).then(() => {
text-decoration:none; const toast = document.getElementById('copy-toast');
text-transform: capitalize; /* Capitalize each word */ toast.style.display = 'block';
} setTimeout(() => { toast.style.display = 'none'; }, 5000);
.chip-subject:hover{ }).catch(err => {
background:#e2effc; alert('Failed to copy: ' + err);
border-color:#c9def5; });
} });
</style> </script>
{% endblock %} {% endblock %}