diff --git a/chrome.html b/chrome.html index 87fad454..151f8ac9 100644 --- a/chrome.html +++ b/chrome.html @@ -187,6 +187,20 @@ display: grid; place-items: center; line-height: 1; box-shadow: 0 0 0 2px var(--bg); } .dlbtn.done .dlbadge { background: #4fd1a5; } .dlbtn.err .dlbadge { background: #f6768a; } + /* Website-language chip inside the address bar (Firefox-style, next to the + bookmark star). Two-letter uppercase code shows the language sites see us + in — Accept-Language + navigator.language. Same setting the Anti- + fingerprinting Language row edits; both stay in sync via settings-update. */ + .langchip { flex: none; display: inline-flex; align-items: center; gap: 3px; + height: 24px; padding: 0 5px 0 4px; border: none; border-radius: 6px; + background: transparent; cursor: pointer; color: var(--dim); + font: 600 10.5px/1 system-ui, -apple-system, Segoe UI, Roboto, sans-serif; + letter-spacing: .04em; } + .langchip:hover { background: var(--line2); color: var(--ink); } + .langchip.on { color: var(--acid); } + .langchip svg { width: 15px; height: 15px; fill: none; stroke: currentColor; + stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; } + .langchip .lcode { min-width: 16px; text-align: center; } /* indeterminate loading bar under the toolbar — collapses when idle so it doesn't take a permanent 2px strip below the address bar */ .loadbar { height: 0; overflow: hidden; background: transparent; transition: height .12s linear; } @@ -286,7 +300,7 @@ its width and pushed the registry button and the star out past the bar's right edge. */ #url { flex: 1 1 0; min-width: 0; } - .secbadge, .pwchip, .star, .regbtn, .zoomchip { flex: none; } + .secbadge, .pwchip, .star, .regbtn, .zoomchip, .langchip { flex: none; } /* Zoom indicator — only shown when the active tab isn't at 100 %. Click resets (Ctrl+0); Ctrl +/- and Ctrl+wheel step the level. */ .zoomchip { border: none; background: transparent; color: var(--mut); cursor: pointer; padding: 2px 5px; @@ -490,6 +504,13 @@ makes it installable (Chrome's omnibox icon). Filled once the app is installed; click then opens it or removes it. --> + +
@@ -694,6 +715,41 @@ T.getDownloads && T.getDownloads().then(renderDownloads); T.onDownloads && T.onDownloads(renderDownloads); + // ---- website-language pill: shows the language sites see us in ---- + // "AUTO" (2-letter tone) when following the OS locale; a two-letter + // uppercase code (e.g. "DE", "PT") when a specific language is pinned. + // Same setting the Anti-fingerprinting Language row edits; both stay in + // sync via T.onSettingsUpdate below. + const langBtn = $("langBtn"), langCode = $("langCode"); + let systemLocaleCached = "en-US"; + function short(tag) { return String(tag || "").split("-")[0].toUpperCase().slice(0, 2) || "??"; } + function renderLang(s) { + if (!s) return; + const auto = (s.languageMode || "show") === "show"; + if (auto) { + langBtn.classList.remove("on"); + langCode.textContent = "AUTO"; + langBtn.title = `Website language: automatic (OS: ${systemLocaleCached}). Click to change.`; + } else { + const tag = (s.languageMode === "manual" && s.languageValue) ? s.languageValue + : (s.languageMode === "spoof" && s.languageSpoof) ? s.languageSpoof + : (s.languageMode === "hide") ? "en-US" : systemLocaleCached; + langBtn.classList.add("on"); + langCode.textContent = short(tag); + langBtn.title = `Websites see you in ${tag}. Click to change.`; + } + } + langBtn.onclick = () => { + const r = langBtn.getBoundingClientRect(); + T.websiteLanguageMenu && T.websiteLanguageMenu({ x: Math.round(r.left), y: Math.round(r.bottom + 4) }); + }; + // Locale is optional (older main.js won't expose it) — render on settings + // either way so the chip works even without it. + (T.systemLocale ? T.systemLocale() : Promise.resolve("en-US")) + .then((loc) => { systemLocaleCached = loc || "en-US"; return T.getSettings(); }) + .then(renderLang).catch(() => {}); + T.onSettingsUpdate && T.onSettingsUpdate(renderLang); + // ---- extension dock ---- // One toolbar button per registered addon sidebar-panel, plus a static // "coming soon" placeholder for Aegis (the built-in BCH wallet, in diff --git a/main.js b/main.js index ddc7f8d0..ffecc380 100644 --- a/main.js +++ b/main.js @@ -4045,6 +4045,72 @@ ipcMain.handle("tab-context-menu-popup", (e, tabId, rect) => { popup.popup({ window: win, x, y }); return true; }); +// Website-language quick switch — a native menu anchored under the toolbar +// pill. Same setting the Anti-fingerprinting Language row edits: "auto" +// (languageMode="show", follow OS) or a specific BCP-47 tag +// (languageMode="manual", languageValue=Changes apply immediately and are saved for next time.
-The language sites serve you in — Wikipedia, YouTube, news sites, and anything else that has a localised version. Sent as your Accept-Language header and navigator.language. Automatic follows your operating system; pick a language to override it. The same setting lives under Privacy → Anti-fingerprinting → Language for advanced modes (Spoof, Hide).
Silent Mode components that live alongside Theseus — the system-wide resolver and the built-in wallet. Each ships with its own install / update / on-off controls.
+Silent Mode components that live alongside Theseus — each with its own on/off, updates and settings page.
-.bch / .x / other BCNR TLDs;
- Theseus keeps working either way, since it has its own built-in resolver.
- A local daemon that resolves BCDN names for every browser on this machine (Chrome, Edge, Firefox, etc.), not just Theseus. Turning it off means non-Theseus browsers stop resolving .bch / .x / other BCNR TLDs; Theseus keeps working either way, since it has its own built-in resolver.
Uninstall the resolver from this machine. Theseus itself keeps working — its built-in resolver isn't affected.
+C:\ProgramData\Ariadne\. Prompts for admin.Multi-chain wallet (BCH, BTC, TRX, ETH, SOL, SC, DGB) that ships in the box. Bundled with Theseus, but updates are delivered over-the-air: new signed versions land without a Theseus release. Runs entirely inside this browser — never system-wide.
+ +