Line wrap toggle for editor and paste viewer with remembered preference (#130)
CI / test (pull_request) Successful in 26s
CI / docker (pull_request) Skipped

- wrap toggle button on /new editor and paste view (accent active state)
- flips white-space pre <-> pre-wrap on the code body
- shared localStorage preference palette-wrap, default off
- settings checkbox reads and writes the same preference
This commit is contained in:
fen
2026-09-09 22:31:07 -05:00
parent 19cb8d1d45
commit 3ac575a2dc
4 changed files with 59 additions and 0 deletions
+23
View File
@@ -22,6 +22,9 @@
<div class="gutter" id="gutter">1</div>
<textarea class="editor" id="content" placeholder="Paste your code, text, or notes here…" spellcheck="false"></textarea>
</div>
<div class="editor-tools">
<button class="iconbtn wrap-toggle" id="wrap-toggle" type="button" title="Toggle line wrap" aria-label="Toggle line wrap" aria-pressed="false">wrap</button>
</div>
<div class="created-banner" id="created"></div>
<div class="actionbar">
<span class="hint">Ctrl+Enter to create</span>
@@ -291,5 +294,25 @@ window.addEventListener('pageshow', e => {
document.addEventListener('keydown', e => {
if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') { e.preventDefault(); create(); }
});
// #130: line wrap toggle, shared preference with the viewer (palette-wrap)
(function () {
var el = document.getElementById('content');
var btn = document.getElementById('wrap-toggle');
function apply(on) {
el.classList.toggle('wrap', on);
btn.setAttribute('aria-pressed', on ? 'true' : 'false');
}
var on = false;
try { on = localStorage.getItem('palette-wrap') === 'true'; } catch (e) {}
apply(on);
btn.addEventListener('click', function () {
on = !on;
try { localStorage.setItem('palette-wrap', on ? 'true' : 'false'); } catch (e) {}
apply(on);
});
// follow changes made in settings on other tabs/pages
document.addEventListener('palette-wrapchange', function (e) { apply(e.detail); });
})();
</script>
{{template "foot" .}}