From d12a419e1743a4ea99cb5b8fc60ce7312d34c6b0 Mon Sep 17 00:00:00 2001 From: Brian Richwine Date: Thu, 2 Apr 2026 11:57:51 -0400 Subject: [PATCH 1/4] Add permalink toggle feature --- examples/minimal/project.ptx | 1 + examples/minimal/publication/publication.ptx | 3 ++ js/pretext_add_on.js | 33 ++++++++++++++++++++ xsl/pretext-html.xsl | 29 +++++++++++++++++ xsl/publisher-variables.xsl | 2 ++ 5 files changed, 68 insertions(+) diff --git a/examples/minimal/project.ptx b/examples/minimal/project.ptx index 379654359b..bb08519360 100644 --- a/examples/minimal/project.ptx +++ b/examples/minimal/project.ptx @@ -11,6 +11,7 @@ source/main.ptx publication/publication.ptx output/html + ../../xsl/pretext-html.xsl latex diff --git a/examples/minimal/publication/publication.ptx b/examples/minimal/publication/publication.ptx index 35f1284488..5bd7720b44 100644 --- a/examples/minimal/publication/publication.ptx +++ b/examples/minimal/publication/publication.ptx @@ -4,4 +4,7 @@ + + + diff --git a/js/pretext_add_on.js b/js/pretext_add_on.js index da1d951e7c..092a9a6802 100644 --- a/js/pretext_add_on.js +++ b/js/pretext_add_on.js @@ -113,8 +113,41 @@ window.addEventListener("DOMContentLoaded", function() { copyPermalink(link); }); }); + + if (typeof ptx_default_settings !== 'undefined' && ptx_default_settings.permalink_button) { + initPermalinkToggle(); + } }); +function setPermalinkVisibility(visible) { + document.querySelectorAll('div.autopermalink').forEach(function(el) { + el.style.display = visible ? '' : 'none'; + }); +} + +function initPermalinkToggle() { + const stored = localStorage.getItem('ptx_permalink_visible'); + const initiallyVisible = stored === 'true'; + + setPermalinkVisibility(initiallyVisible); + + const btn = document.getElementById('permalink-toggle-button'); + if (!btn) return; + + btn.setAttribute('aria-pressed', String(initiallyVisible)); + btn.setAttribute('aria-label', initiallyVisible ? 'Disable Permalinks' : 'Enable Permalinks'); + btn.querySelector('.name').textContent = initiallyVisible ? 'Disable Permalinks' : 'Enable Permalinks'; + + btn.addEventListener('click', function() { + const nowVisible = btn.getAttribute('aria-pressed') !== 'true'; + setPermalinkVisibility(nowVisible); + btn.setAttribute('aria-pressed', String(nowVisible)); + btn.setAttribute('aria-label', nowVisible ? 'Disable Permalinks' : 'Enable Permalinks'); + btn.querySelector('.name').textContent = nowVisible ? 'Disable Permalinks' : 'Enable Permalinks'; + localStorage.setItem('ptx_permalink_visible', String(nowVisible)); + }); +} + window.addEventListener("load",function(event) { diff --git a/xsl/pretext-html.xsl b/xsl/pretext-html.xsl index f0884659ab..6b3b8c1f68 100644 --- a/xsl/pretext-html.xsl +++ b/xsl/pretext-html.xsl @@ -12102,6 +12102,15 @@ along with MathBook XML. If not, see . + + + + @@ -13879,7 +13878,8 @@ TODO: - + + From 263d912a48ae34c06294a47719564a863a46b71b Mon Sep 17 00:00:00 2001 From: Brian Richwine Date: Thu, 2 Apr 2026 18:29:11 -0400 Subject: [PATCH 3/4] i18n enable/disable permalink text --- js/pretext_add_on.js | 6 ++++-- xsl/localizations/en-US.xml | 3 +++ xsl/pretext-html.xsl | 24 +++++++++++++++++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/js/pretext_add_on.js b/js/pretext_add_on.js index cc7375f49f..472b9cbd5d 100644 --- a/js/pretext_add_on.js +++ b/js/pretext_add_on.js @@ -133,7 +133,9 @@ function initPermalinkToggle() { if (!btn) return; let permalinksVisible = initiallyVisible; - const initialLabel = initiallyVisible ? 'Disable Permalinks' : 'Enable Permalinks'; + const enableLabel = btn.dataset.enableLabel; + const disableLabel = btn.dataset.disableLabel; + const initialLabel = initiallyVisible ? disableLabel : enableLabel; btn.setAttribute('aria-label', initialLabel); btn.title = initialLabel; btn.querySelector('.icon').textContent = initiallyVisible ? 'link_off' : 'link'; @@ -141,7 +143,7 @@ function initPermalinkToggle() { btn.addEventListener('click', function() { permalinksVisible = !permalinksVisible; setPermalinkVisibility(permalinksVisible); - const label = permalinksVisible ? 'Disable Permalinks' : 'Enable Permalinks'; + const label = permalinksVisible ? disableLabel : enableLabel; btn.setAttribute('aria-label', label); btn.title = label; btn.querySelector('.icon').textContent = permalinksVisible ? 'link_off' : 'link'; diff --git a/xsl/localizations/en-US.xml b/xsl/localizations/en-US.xml index 19bcff6567..d0f7f6924f 100644 --- a/xsl/localizations/en-US.xml +++ b/xsl/localizations/en-US.xml @@ -333,6 +333,9 @@ along with PreTeXt. If not, see . Copy heading and permalink for + + Enable Permalinks + Disable Permalinks diff --git a/xsl/pretext-html.xsl b/xsl/pretext-html.xsl index 21c78bf1cf..f0e8684eed 100644 --- a/xsl/pretext-html.xsl +++ b/xsl/pretext-html.xsl @@ -12103,7 +12103,29 @@ along with MathBook XML. If not, see . -