Write on the margins of the internet. Powered by the AT Protocol. margin.at
extension web atproto comments

Extension shortcut toggles sidebar instead of just open

seth.computer 5a80e380 6d37abbd

verified
+29 -8
+23 -6
extension/src/entrypoints/background.ts
··· 340 340 } 341 341 } 342 342 343 + let sidePanelOpen = false; 344 + 345 + browser.runtime.onConnect.addListener((port) => { 346 + if (port.name === 'sidepanel') { 347 + sidePanelOpen = true; 348 + port.onDisconnect.addListener(() => { 349 + sidePanelOpen = false; 350 + }); 351 + } 352 + }); 353 + 343 354 browser.commands?.onCommand.addListener((command) => { 344 - if (command === 'open-sidebar') { 355 + if (command === 'toggle-sidebar') { 345 356 const browserAny = browser as any; 346 357 if (browserAny.sidePanel) { 347 358 chrome.windows.getCurrent((win) => { 348 359 if (win?.id) { 349 - browserAny.sidePanel.open({ windowId: win.id }).catch((err: Error) => { 350 - console.error('Could not open side panel:', err); 351 - }); 360 + if (sidePanelOpen && typeof browserAny.sidePanel.close === 'function') { 361 + browserAny.sidePanel.close({ windowId: win.id }).catch((err: Error) => { 362 + console.error('Could not close side panel:', err); 363 + }); 364 + } else { 365 + browserAny.sidePanel.open({ windowId: win.id }).catch((err: Error) => { 366 + console.error('Could not open side panel:', err); 367 + }); 368 + } 352 369 } 353 370 }); 354 371 } else if (browserAny.sidebarAction) { 355 - browserAny.sidebarAction.open().catch((err: Error) => { 356 - console.warn('Could not open Firefox sidebar:', err); 372 + browserAny.sidebarAction.toggle().catch((err: Error) => { 373 + console.warn('Could not toggle Firefox sidebar:', err); 357 374 }); 358 375 } 359 376 return;
+4
extension/src/entrypoints/sidepanel/main.tsx
··· 1 1 import React from 'react'; 2 2 import ReactDOM from 'react-dom/client'; 3 + import { browser } from 'wxt/browser'; 3 4 import App from '@/components/sidepanel/App'; 4 5 import '@/assets/styles.css'; 6 + 7 + // Connect a port so the background script can track open/closed state 8 + browser.runtime.connect({ name: 'sidepanel' }); 5 9 6 10 ReactDOM.createRoot(document.getElementById('root')!).render( 7 11 <React.StrictMode>
+2 -2
extension/wxt.config.ts
··· 40 40 128: '/icons/icon-128.png', 41 41 }, 42 42 commands: { 43 - 'open-sidebar': { 43 + 'toggle-sidebar': { 44 44 suggested_key: { 45 45 default: 'Alt+M', 46 46 mac: 'Alt+M', 47 47 }, 48 - description: 'Open Margin sidebar', 48 + description: 'Toggle Margin sidebar', 49 49 }, 50 50 'annotate-selection': { 51 51 suggested_key: {