Two new settings under Settings > Appearance > Toolbar: urlBarSize: wide (default) | medium | compact searchBoxSize: hidden | compact | normal (default) | wide Applied as data-attrs on the .bar element in chrome.html; CSS switches the flex-basis of .urlwrap and the width of .searchbox. min-width on .urlwrap guards against squeezing the URL invisible. Settings-set now broadcasts settings-update to the chrome renderer, so resizing takes effect live without a relaunch. Same channel is exposed for future chrome-side settings. Motivation: the extension dock grew a per-addon button per install, and the URL bar (flex:1) had been eating all the remaining space. Users who want more room for extensions can now shrink or hide the search box and cap the URL bar width.
72 lines
4.6 KiB
JavaScript
72 lines
4.6 KiB
JavaScript
const { contextBridge, ipcRenderer } = require("electron");
|
|
contextBridge.exposeInMainWorld("theseus", {
|
|
navigate: (input) => ipcRenderer.invoke("navigate", input),
|
|
search: (q) => ipcRenderer.invoke("search", q),
|
|
newTab: () => ipcRenderer.invoke("new-tab"),
|
|
closeTab: (id) => ipcRenderer.invoke("close-tab", id),
|
|
switchTab: (id) => ipcRenderer.invoke("switch-tab", id),
|
|
moveTab: (id, targetId, place) => ipcRenderer.invoke("move-tab", id, targetId, place),
|
|
suggestAddress: (query, rect) => ipcRenderer.invoke("suggest-address", query, rect),
|
|
closeAddressPicker: () => ipcRenderer.invoke("close-address-picker"),
|
|
addressCursor: (dir) => ipcRenderer.invoke("address-cursor", dir),
|
|
togglePwFill: (rect) => ipcRenderer.invoke("toggle-pw-fill", rect),
|
|
onPwAvailability: (cb) => ipcRenderer.on("pw-availability", (_e, d) => cb(d)),
|
|
// Update chip: chrome subscribes to update-available; clicking the chip's
|
|
// download button opens the URL in the system browser; ✕ dismisses for
|
|
// the current session.
|
|
onUpdateAvailable: (cb) => ipcRenderer.on("update-available", (_e, d) => cb(d)),
|
|
openUpdateDownload: (url) => ipcRenderer.invoke("open-update-download", url),
|
|
installUpdateNow: () => ipcRenderer.invoke("install-update-now"),
|
|
dismissUpdate: () => ipcRenderer.invoke("dismiss-update"),
|
|
goHome: () => ipcRenderer.invoke("go-home"),
|
|
back: () => ipcRenderer.invoke("go-back"),
|
|
forward: () => ipcRenderer.invoke("go-forward"),
|
|
reload: (hard) => ipcRenderer.invoke("reload", !!hard),
|
|
stop: () => ipcRenderer.invoke("stop"),
|
|
toggleTor: () => ipcRenderer.invoke("toggle-tor"),
|
|
openSettings: () => ipcRenderer.invoke("open-settings"),
|
|
getSettings: () => ipcRenderer.invoke("settings-get"),
|
|
onSettingsUpdate: (cb) => ipcRenderer.on("settings-update", (_e, d) => cb(d)),
|
|
toggleSiteInfo: (rect) => ipcRenderer.invoke("toggle-site-info", rect),
|
|
switchToBcnr: () => ipcRenderer.invoke("switch-to-bcnr"),
|
|
setChromeHeight: (h) => ipcRenderer.invoke("set-chrome-height", h),
|
|
getSearchEngines: () => ipcRenderer.invoke("search-engines"),
|
|
setSearchEngine: (id) => ipcRenderer.invoke("set-search-engine", id),
|
|
addEngine: (eng) => ipcRenderer.invoke("add-engine", eng),
|
|
removeEngine: (id) => ipcRenderer.invoke("remove-engine", id),
|
|
toggleEnginePicker: (rect) => ipcRenderer.invoke("toggle-engine-picker", rect),
|
|
onEngines: (cb) => ipcRenderer.on("engines", (_e, d) => cb(d)),
|
|
getBookmarks: () => ipcRenderer.invoke("bookmarks-get"),
|
|
addBookmark: (bm) => ipcRenderer.invoke("bookmark-add", bm),
|
|
updateBookmark: (url, patch) => ipcRenderer.invoke("bookmark-update", url, patch),
|
|
removeBookmark: (url) => ipcRenderer.invoke("bookmark-remove", url),
|
|
onBookmarks: (cb) => ipcRenderer.on("bookmarks", (_e, d) => cb(d)),
|
|
onNav: (cb) => ipcRenderer.on("nav", (_e, d) => cb(d)),
|
|
onTor: (cb) => ipcRenderer.on("tor", (_e, d) => cb(d)),
|
|
onTabs: (cb) => ipcRenderer.on("tabs", (_e, d) => cb(d)),
|
|
tabReload: (id) => ipcRenderer.invoke("tab-reload", id),
|
|
tabDuplicate: (id) => ipcRenderer.invoke("tab-duplicate", id),
|
|
tabMute: (id, on) => ipcRenderer.invoke("tab-mute", id, on),
|
|
tabGroup: (id, color) => ipcRenderer.invoke("tab-group", id, color),
|
|
tabGroupToggle: (color) => ipcRenderer.invoke("tab-group-toggle", color),
|
|
tabBookmark: (id) => ipcRenderer.invoke("tab-bookmark", id),
|
|
onAddressPicked: (cb) => ipcRenderer.on("address-picked", (_e, url) => cb(url)),
|
|
onBcnrOffer: (cb) => ipcRenderer.on("bcnr-offer", (_e, d) => cb(d)),
|
|
// Collision-mode (BCNR ↔ ICANN) live switcher for the active tab
|
|
collisionSwitch: (arg) => ipcRenderer.invoke("collision-switch", arg),
|
|
collisionState: () => ipcRenderer.invoke("collision-state"),
|
|
// Downloads — the toolbar button subscribes to `downloads` to update its
|
|
// badge, and toggleDownloads opens/closes the floating panel.
|
|
getDownloads: () => ipcRenderer.invoke("downloads-get"),
|
|
toggleDownloads: (rect) => ipcRenderer.invoke("toggle-downloads", rect),
|
|
onDownloads: (cb) => ipcRenderer.on("downloads", (_e, d) => cb(d)),
|
|
// Add-on sidebar: toggle, open on a specific panel, close, or subscribe
|
|
// to state (visibility + which panel is active + the panel list). The
|
|
// extension dock in chrome.html renders one button per panel and calls
|
|
// openSidebar / closeSidebar accordingly.
|
|
toggleSidebar: () => ipcRenderer.invoke("sidebar-toggle"),
|
|
openSidebar: (panelId) => ipcRenderer.invoke("sidebar-open", panelId),
|
|
closeSidebar: () => ipcRenderer.invoke("sidebar-close"),
|
|
sidebarState: () => ipcRenderer.invoke("sidebar-state"),
|
|
onSidebarState: (cb) => ipcRenderer.on("sidebar-state", (_e, d) => cb(d)),
|
|
});
|