refactor(theseus/settings): drop Toolbar block from General, fold Registries into General

Two housekeeping changes to Settings > General:

- Toolbar block (Address bar size + Search box size selects) removed —
  the toolbar drag handles landed in 0.3.15 do the same job in-place,
  and the discrete presets were duplicating that. Underlying settings
  keys and drag-set widthPx values still live in main; the UI dropdown
  was the only thing gone.

- Registries section merged into General as a subheading. Sidebar
  navigation entry "Registries" removed; the naming section is now
  reachable from Settings > General. Collision-policy radios + reset-
  remembered-choices + Ariadne install/turn on/off/uninstall/update
  card all move as-is. No IDs changed, so the JS wiring (radios,
  ariadne buttons, collision summary) rebinds against the same nodes.

The naming section stub stays commented so the section-nav JS doesn't
crash if it looks up the old id.
This commit is contained in:
Local Dev 2026-09-08 00:31:59 +02:00
parent 93655f6a55
commit 8514989c58

View file

@ -145,7 +145,6 @@
<a data-sec="general" class="active">General</a> <a data-sec="general" class="active">General</a>
<a data-sec="search">Search</a> <a data-sec="search">Search</a>
<a data-sec="passwords">Passwords</a> <a data-sec="passwords">Passwords</a>
<a data-sec="naming">Registries</a>
<a data-sec="performance">Performance</a> <a data-sec="performance">Performance</a>
<a data-sec="privacy">Privacy</a> <a data-sec="privacy">Privacy</a>
<a data-sec="addons">Extensions</a> <a data-sec="addons">Extensions</a>
@ -177,27 +176,46 @@
</button> </button>
</div> </div>
<h2 class="sub" style="margin-top:1.8rem">Toolbar</h2> <h2 class="sub" style="margin-top:1.8rem">Registries</h2>
<p class="subd">Shrink the address bar and search box to make more room for extension icons.</p> <p class="subd">How Theseus picks between the <b>BCNR / BCDN</b> and <b>ICANN / IANA</b>, when a name exists in both.</p>
<div class="row"> <div class="row" style="flex-direction:column;align-items:stretch;gap:10px">
<div class="txt"><div class="t">Address bar size</div><div class="d">Wide fills the row; compact leaves space for the extension dock.</div></div> <div class="txt"><div class="t">Collision policy</div>
<div class="ctl"> <div class="d">A name only exists in both registries when its TLD isn't BCNR-unique (e.g. <code>.de</code>). BCNR-unique TLDs (that only exist on BCNR) never conflict.</div></div>
<select id="urlBarSize"> <div id="policyList" style="display:flex;flex-direction:column;gap:6px">
<option value="wide">Wide (default)</option> <label class="polrow"><input type="radio" name="collisionPolicy" value="bcnr-first"><span><b>BCDN first</b> <span class="pmuted">— BCDN wins conflicts; falls back to ICANN for anything BCDN doesn't have.</span></span></label>
<option value="medium">Medium</option> <label class="polrow"><input type="radio" name="collisionPolicy" value="icann-first"><span><b>ICANN first</b> <span class="pmuted">— ICANN wins conflicts; BCDN fills gaps for non-ICANN TLDs.</span></span></label>
<option value="compact">Compact</option> <label class="polrow"><input type="radio" name="collisionPolicy" value="soft"><span><b>Ask each time</b> <span class="pmuted">— an "Open with…" prompt on conflict, remembered per name or per TLD.</span></span></label>
</select>
</div> </div>
</div> </div>
<div class="row"> <div class="row" style="flex-direction:column;align-items:stretch;gap:8px">
<div class="txt"><div class="t">Search box</div><div class="d">Right-side quick-search that uses the engine you pick above.</div></div> <div class="txt"><div class="t">Remembered choices</div>
<div class="ctl"> <div class="d">"Always use …" picks you made from the switcher or the prompt. Reset them to be asked again.</div></div>
<select id="searchBoxSize"> <div id="colSummary" class="pmuted" style="font-size:12.5px"></div>
<option value="wide">Wide (400 px)</option> <div><button id="resetCollisions" class="btn">Reset remembered choices</button></div>
<option value="normal">Normal (300 px)</option> </div>
<option value="compact">Compact (180 px)</option> <div class="row" style="flex-direction:column;align-items:stretch;gap:8px">
<option value="hidden">Hidden</option> <div class="txt">
</select> <div class="t">System-wide resolver — Ariadne's Thread</div>
<div class="d">
A local daemon that resolves BCDN names for <b>every browser on this machine</b>
(Chrome, Edge, Firefox, etc.), not just Theseus. Turning it off means non-Theseus
browsers stop resolving <code>.bch</code> / <code>.x</code> / other BCNR TLDs;
Theseus keeps working either way, since it has its own built-in resolver.
</div>
</div>
<div id="ariadneStatus" class="pmuted" style="font-size:12.5px">checking…</div>
<div style="display:flex;gap:8px;flex-wrap:wrap">
<button id="ariadneStart" class="btn" hidden>Turn on</button>
<button id="ariadneStop" class="btn" hidden>Turn off</button>
<button id="ariadneInstall" class="btn" hidden>Install</button>
<button id="ariadneUpdate" class="btn" hidden>Update</button>
<button id="ariadneUninstall" class="btn" hidden style="color:#f6768a;border-color:rgba(246,118,138,.35)">Uninstall</button>
<button id="ariadneRefresh" class="btn">Refresh</button>
</div>
<div id="ariadneMissing" class="pmuted" style="font-size:12px" hidden>
Ariadne's Thread isn't installed on this machine. Click <b>Install</b> above
to run the bundled installer, or grab it manually from
<a href="https://silentmode.st/tools/">silentmode.st/tools</a>.
</div> </div>
</div> </div>
</section> </section>
@ -296,50 +314,8 @@
</div> </div>
</section> </section>
<!-- NAMING --> <!-- NAMING -->
<section id="naming" hidden> <!-- Registries moved into General (above). -->
<h1>Registries</h1>
<p class="lede">How Theseus picks between the <b>BCNR / BCDN</b> and <b>ICANN / IANA</b>, when a name exists in both.</p>
<div class="row" style="flex-direction:column;align-items:stretch;gap:10px">
<div class="txt"><div class="t">Collision policy</div>
<div class="d">A name only exists in both registries when its TLD isn't BCNR-unique (e.g. <code>.de</code>). BCNR-unique TLDs (that only exist on BCNR) never conflict.</div></div>
<div id="policyList" style="display:flex;flex-direction:column;gap:6px">
<label class="polrow"><input type="radio" name="collisionPolicy" value="bcnr-first"><span><b>BCDN first</b> <span class="pmuted">— BCDN wins conflicts; falls back to ICANN for anything BCDN doesn't have.</span></span></label>
<label class="polrow"><input type="radio" name="collisionPolicy" value="icann-first"><span><b>ICANN first</b> <span class="pmuted">— ICANN wins conflicts; BCDN fills gaps for non-ICANN TLDs.</span></span></label>
<label class="polrow"><input type="radio" name="collisionPolicy" value="soft"><span><b>Ask each time</b> <span class="pmuted">— an "Open with…" prompt on conflict, remembered per name or per TLD.</span></span></label>
</div>
</div>
<div class="row" style="flex-direction:column;align-items:stretch;gap:8px">
<div class="txt"><div class="t">Remembered choices</div>
<div class="d">"Always use …" picks you made from the switcher or the prompt. Reset them to be asked again.</div></div>
<div id="colSummary" class="pmuted" style="font-size:12.5px"></div>
<div><button id="resetCollisions" class="btn">Reset remembered choices</button></div>
</div>
<div class="row" style="flex-direction:column;align-items:stretch;gap:8px">
<div class="txt">
<div class="t">System-wide resolver — Ariadne's Thread</div>
<div class="d">
A local daemon that resolves BCDN names for <b>every browser on this machine</b>
(Chrome, Edge, Firefox, etc.), not just Theseus. Turning it off means non-Theseus
browsers stop resolving <code>.bch</code> / <code>.x</code> / other BCNR TLDs;
Theseus keeps working either way, since it has its own built-in resolver.
</div>
</div>
<div id="ariadneStatus" class="pmuted" style="font-size:12.5px">checking…</div>
<div style="display:flex;gap:8px;flex-wrap:wrap">
<button id="ariadneStart" class="btn" hidden>Turn on</button>
<button id="ariadneStop" class="btn" hidden>Turn off</button>
<button id="ariadneInstall" class="btn" hidden>Install</button>
<button id="ariadneUpdate" class="btn" hidden>Update</button>
<button id="ariadneUninstall" class="btn" hidden style="color:#f6768a;border-color:rgba(246,118,138,.35)">Uninstall</button>
<button id="ariadneRefresh" class="btn">Refresh</button>
</div>
<div id="ariadneMissing" class="pmuted" style="font-size:12px" hidden>
Ariadne's Thread isn't installed on this machine. Click <b>Install</b> above
to run the bundled installer, or grab it manually from
<a href="https://silentmode.st/tools/">silentmode.st/tools</a>.
</div>
</div>
</section>
<!-- PERFORMANCE --> <!-- PERFORMANCE -->
<section id="performance" hidden> <section id="performance" hidden>
<h1>Performance</h1> <h1>Performance</h1>
@ -741,14 +717,9 @@
const wm = document.getElementById("webrtcMode"); const wm = document.getElementById("webrtcMode");
wm.value = s.webrtcMode || "public_only"; wm.value = s.webrtcMode || "public_only";
wm.onchange = () => C.set("webrtcMode", wm.value); wm.onchange = () => C.set("webrtcMode", wm.value);
// Toolbar sizing — pushes to main which broadcasts settings-update back // Toolbar sizing dropdowns removed — the toolbar drag-handles do the
// to the chrome renderer, so the URL bar / search box resize live. // same job in-place. The stored urlBarSize / searchBoxSize + the drag-
const ub = document.getElementById("urlBarSize"); // set widthPx settings still exist in main; they just have no UI here.
ub.value = s.urlBarSize || "wide";
ub.onchange = () => C.set("urlBarSize", ub.value);
const sb = document.getElementById("searchBoxSize");
sb.value = s.searchBoxSize || "normal";
sb.onchange = () => C.set("searchBoxSize", sb.value);
document.getElementById("engAdd").onclick = () => { document.getElementById("engAdd").onclick = () => {
const name = document.getElementById("engName").value.trim(); const name = document.getElementById("engName").value.trim();
const url = document.getElementById("engUrl").value.trim(); const url = document.getElementById("engUrl").value.trim();