Update web/templates/entry_view.html
This commit is contained in:
@@ -467,9 +467,30 @@ function showToast(message, duration = 3000) {
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- Highlighter: uses exact DB field names -->
|
<!-- Highlighter: robust triggers (DOMContentLoaded + pageshow + readyState) -->
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener("DOMContentLoaded", async () => {
|
(function(){
|
||||||
|
// EXACT field -> selector mapping for your template IDs
|
||||||
|
const fieldToSelector = {
|
||||||
|
subject: "#subject-list",
|
||||||
|
illustration: "#illustration-text",
|
||||||
|
application: "#application-text",
|
||||||
|
scripture_raw: "#scripture-text",
|
||||||
|
source: "#source-text",
|
||||||
|
talk_title: "#talk_title-text",
|
||||||
|
talk_number: "#talk_title-text",
|
||||||
|
};
|
||||||
|
|
||||||
|
// Kickoff with multiple safety nets so it also runs after bfcache restores
|
||||||
|
if (document.readyState === "complete" || document.readyState === "interactive") {
|
||||||
|
run();
|
||||||
|
} else {
|
||||||
|
document.addEventListener("DOMContentLoaded", run, { once: true });
|
||||||
|
}
|
||||||
|
// pageshow fires on bfcache restores and some soft navigations
|
||||||
|
window.addEventListener("pageshow", run);
|
||||||
|
|
||||||
|
async function run() {
|
||||||
// Respect per-user toggle
|
// Respect per-user toggle
|
||||||
let enabled = true;
|
let enabled = true;
|
||||||
try {
|
try {
|
||||||
@@ -497,17 +518,6 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|||||||
}
|
}
|
||||||
if (!q || !fields.length) return;
|
if (!q || !fields.length) return;
|
||||||
|
|
||||||
// Exact field -> selector mapping for your template IDs
|
|
||||||
const fieldToSelector = {
|
|
||||||
subject: "#subject-list",
|
|
||||||
illustration: "#illustration-text",
|
|
||||||
application: "#application-text",
|
|
||||||
scripture_raw: "#scripture-text",
|
|
||||||
source: "#source-text",
|
|
||||||
talk_title: "#talk_title-text",
|
|
||||||
talk_number: "#talk_title-text",
|
|
||||||
};
|
|
||||||
|
|
||||||
// Tokenize like your search (keep quoted phrases, strip * and ?)
|
// Tokenize like your search (keep quoted phrases, strip * and ?)
|
||||||
const tokens = tokenize(q).map(t => t.replaceAll("*","").replaceAll("?","")).filter(Boolean);
|
const tokens = tokenize(q).map(t => t.replaceAll("*","").replaceAll("?","")).filter(Boolean);
|
||||||
if (!tokens.length) return;
|
if (!tokens.length) return;
|
||||||
@@ -515,11 +525,12 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|||||||
// Highlight only within fields that were searched
|
// Highlight only within fields that were searched
|
||||||
for (const f of fields) {
|
for (const f of fields) {
|
||||||
const sel = fieldToSelector[f];
|
const sel = fieldToSelector[f];
|
||||||
if (!sel) continue; // ignore fields not shown on page
|
if (!sel) continue;
|
||||||
const container = document.querySelector(sel);
|
const container = document.querySelector(sel);
|
||||||
if (!container) continue;
|
if (!container) continue;
|
||||||
for (const tok of tokens) highlightAll(container, tok);
|
for (const tok of tokens) highlightAll(container, tok);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ---- helpers ----
|
// ---- helpers ----
|
||||||
function tokenize(s) {
|
function tokenize(s) {
|
||||||
@@ -572,7 +583,8 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|||||||
while (walker.nextNode()) nodes.push(walker.currentNode);
|
while (walker.nextNode()) nodes.push(walker.currentNode);
|
||||||
nodes.forEach(cb);
|
nodes.forEach(cb);
|
||||||
}
|
}
|
||||||
});
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
Reference in New Issue
Block a user