Update web/templates/entry_edit.html

This commit is contained in:
Joshua Laymon 2025-08-14 22:45:33 +00:00
parent c0a8150be9
commit 32201bc589

View File

@ -17,84 +17,85 @@
</div> </div>
<!-- Card --> <!-- Card -->
<div class="card entry-form modern-form"> <div class="card entry-form modern-form" style="padding: 24px;">
<form id="entry-edit-form" method="post"> <form id="entry-edit-form" method="post">
{% csrf_token %} {% csrf_token %}
<div class="f-grid"> <div class="f-grid">
<div class="f-row"> <div class="f-row">
<div class="f-label">Subject</div> <div class="f-label" style="font-weight: 600; font-size: 1.05em;">Subject</div>
<div class="f-control"> <div class="f-control">
{{ form.subject }} {{ form.subject }}
</div> </div>
</div> </div>
<div class="f-row tall"> <div class="f-row tall">
<div class="f-label">Illustration</div> <div class="f-label" style="font-weight: 600; font-size: 1.05em;">Illustration</div>
<div class="f-control"> <div class="f-control">
{{ form.illustration }} {{ form.illustration }}
</div> </div>
</div> </div>
<div class="f-row tall"> <div class="f-row tall">
<div class="f-label">Application</div> <div class="f-label" style="font-weight: 600; font-size: 1.05em;">Application</div>
<div class="f-control"> <div class="f-control">
{{ form.application }} {{ form.application }}
</div> </div>
</div> </div>
<div class="f-row"> <div class="f-row">
<div class="f-label">Scripture</div> <div class="f-label" style="font-weight: 600; font-size: 1.05em;">Scripture</div>
<div class="f-control"> <div class="f-control">
{{ form.scripture_raw }} {{ form.scripture_raw }}
</div> </div>
</div> </div>
<div class="f-row"> <div class="f-row">
<div class="f-label">Source</div> <div class="f-label" style="font-weight: 600; font-size: 1.05em;">Source</div>
<div class="f-control"> <div class="f-control">
{{ form.source }} {{ form.source }}
</div> </div>
</div> </div>
<div class="f-row"> <div class="f-row">
<div class="f-label">Talk Title</div> <div class="f-label" style="font-weight: 600; font-size: 1.05em;">Talk Title</div>
<div class="f-control"> <div class="f-control">
{{ form.talk_title }} {{ form.talk_title }}
</div> </div>
</div> </div>
<div class="f-row"> <div class="f-row">
<div class="f-label">Talk Number</div> <div class="f-label" style="font-weight: 600; font-size: 1.05em;">Talk Number</div>
<div class="f-control"> <div class="f-control">
{{ form.talk_number }} {{ form.talk_number }}
</div> </div>
</div> </div>
<div class="f-row"> <!-- Combined row for Entry Code + Date Added + Date Edited -->
<div class="f-label">Entry Code</div> <div class="f-row" style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px;">
<div class="f-control"> <div>
{{ form.entry_code }} <div class="f-label" style="font-weight: 600; font-size: 1.05em;">Entry Code</div>
<div class="f-control">
{{ form.entry_code }}
</div>
</div> </div>
</div> <div>
<div class="f-label" style="font-weight: 600; font-size: 1.05em;">Date Added</div>
<div class="f-row"> <div class="f-control">
<div class="f-label">Date Added</div> {{ form.date_added }}
<div class="f-control"> </div>
{{ form.date_added }}
</div> </div>
</div> <div>
<div class="f-label" style="font-weight: 600; font-size: 1.05em;">Date Edited</div>
<div class="f-row"> <div class="f-control">
<div class="f-label">Date Edited</div> {{ form.date_edited }}
<div class="f-control"> </div>
{{ form.date_edited }}
</div> </div>
</div> </div>
</div> </div>
<!-- bottom actions (hidden by CSS if you prefer only the top bar) --> <!-- bottom actions -->
<div class="form-actions bottom-actions"> <div class="form-actions bottom-actions" style="margin-top: 20px;">
<a class="btn btn-secondary" href="{% url 'entry_view' entry.id %}">Cancel</a> <a class="btn btn-secondary" href="{% url 'entry_view' entry.id %}">Cancel</a>
<button class="btn btn-primary">Save</button> <button class="btn btn-primary">Save</button>
</div> </div>
@ -102,10 +103,9 @@
</div> </div>
</div> </div>
<!-- Talk title auto-fill (same behavior as entry_add) --> <!-- Talk title auto-fill & auto-date -->
<script> <script>
(function () { (function () {
// Location of your mapping file
const talksUrl = "{% static 'talks.json' %}"; const talksUrl = "{% static 'talks.json' %}";
function wireAutofill(talkMap) { function wireAutofill(talkMap) {
@ -113,13 +113,11 @@
const titleEl = document.getElementById("id_talk_title"); const titleEl = document.getElementById("id_talk_title");
if (!numberEl || !titleEl) return; if (!numberEl || !titleEl) return;
// Consider "-" or "—" as empty (lets autofill replace them)
const isEffectivelyEmpty = (s) => { const isEffectivelyEmpty = (s) => {
const t = (s || "").trim(); const t = (s || "").trim();
return t === "" || t === "-" || t === "—"; return t === "" || t === "-" || t === "—";
}; };
// Track if user has typed something custom
let userTyped = false; let userTyped = false;
titleEl.addEventListener("input", () => { titleEl.addEventListener("input", () => {
@ -136,18 +134,14 @@
titleEl.value = mapped; titleEl.value = mapped;
titleEl.dataset.autofilled = "1"; titleEl.dataset.autofilled = "1";
} else if (titleEl.dataset.autofilled === "1") { } else if (titleEl.dataset.autofilled === "1") {
// Previously autofilled but new number has no title: clear it
titleEl.value = ""; titleEl.value = "";
titleEl.dataset.autofilled = "0"; titleEl.dataset.autofilled = "0";
} }
} }
} }
// Change -> try to fill
numberEl.addEventListener("change", maybeAutofill); numberEl.addEventListener("change", maybeAutofill);
// Initial fill on page load:
// If current title is empty/hyphen, allow autofill; otherwise respect user text
if (isEffectivelyEmpty(titleEl.value)) { if (isEffectivelyEmpty(titleEl.value)) {
userTyped = false; userTyped = false;
maybeAutofill(); maybeAutofill();
@ -156,11 +150,20 @@
} }
} }
// Fetch the mapping; if it fails, no worries—form still works
fetch(talksUrl, {cache: "no-store"}) fetch(talksUrl, {cache: "no-store"})
.then(r => r.ok ? r.json() : {}) .then(r => r.ok ? r.json() : {})
.then(map => wireAutofill(map)) .then(map => wireAutofill(map))
.catch(() => wireAutofill({})); .catch(() => wireAutofill({}));
// Auto-fill today's date for Date Edited if empty
const dateEditedEl = document.getElementById("id_date_edited");
if (dateEditedEl && !dateEditedEl.value) {
const today = new Date();
const yyyy = today.getFullYear();
const mm = String(today.getMonth() + 1).padStart(2, '0');
const dd = String(today.getDate()).padStart(2, '0');
dateEditedEl.value = `${yyyy}-${mm}-${dd}`;
}
})(); })();
</script> </script>
{% endblock %} {% endblock %}