diff options
| author | Hsieh Chin Fan <pham@topo.tw> | 2024-10-30 23:03:13 +0800 |
|---|---|---|
| committer | Hsieh Chin Fan <pham@topo.tw> | 2024-10-31 11:31:00 +0800 |
| commit | 3e78ee2ffbb9f10f4d8fa30723f02a752fa402e1 (patch) | |
| tree | e0c516aea43f2577a524688974b2da5cc34cc01a /addon | |
| parent | 2a01edfbe920db25ca752371b889b08dce9025ac (diff) | |
feat: add context menu-item to disable custom menu
Diffstat (limited to 'addon')
| -rw-r--r-- | addon/background.js | 23 | ||||
| -rw-r--r-- | addon/index.mjs | 9 |
2 files changed, 27 insertions, 5 deletions
diff --git a/addon/background.js b/addon/background.js index ac742ab..c723b4c 100644 --- a/addon/background.js +++ b/addon/background.js | |||
| @@ -4,7 +4,23 @@ browser.contextMenus.create( | |||
| 4 | { | 4 | { |
| 5 | id: 'map-inline-add', | 5 | id: 'map-inline-add', |
| 6 | title: 'Add Links and Maps by content', | 6 | title: 'Add Links and Maps by content', |
| 7 | contexts: ['page'], | 7 | contexts: ['all'], |
| 8 | }, | ||
| 9 | ) | ||
| 10 | |||
| 11 | browser.contextMenus.create( | ||
| 12 | { | ||
| 13 | id: 'map-inline-menu', | ||
| 14 | title: 'Enable Menu', | ||
| 15 | type: 'checkbox', | ||
| 16 | checked: true, | ||
| 17 | contexts: ['all'], | ||
| 18 | }, | ||
| 19 | ) | ||
| 20 | |||
| 21 | browser.contextMenus.create( | ||
| 22 | { | ||
| 23 | type: 'separator', | ||
| 8 | }, | 24 | }, |
| 9 | ) | 25 | ) |
| 10 | 26 | ||
| @@ -12,16 +28,17 @@ browser.contextMenus.create( | |||
| 12 | { | 28 | { |
| 13 | id: 'map-inline-open', | 29 | id: 'map-inline-open', |
| 14 | title: 'Open in DumbyMap', | 30 | title: 'Open in DumbyMap', |
| 15 | contexts: ['page', 'selection'], | 31 | contexts: ['all'], |
| 16 | }, | 32 | }, |
| 17 | () => browser.runtime.lastError, | 33 | () => browser.runtime.lastError, |
| 18 | ) | 34 | ) |
| 19 | 35 | ||
| 20 | browser.contextMenus.onClicked.addListener((info, tab) => { | 36 | browser.contextMenus.onClicked.addListener((info, tab) => { |
| 21 | const id = info.menuItemId | 37 | const id = info.menuItemId |
| 38 | const checked = info.checked | ||
| 22 | if (!id.match(/^map-inline/)) return | 39 | if (!id.match(/^map-inline/)) return |
| 23 | 40 | ||
| 24 | browser.tabs.sendMessage(tab.id, id) | 41 | browser.tabs.sendMessage(tab.id, { id, checked }) |
| 25 | }) | 42 | }) |
| 26 | 43 | ||
| 27 | browser.browserAction.onClicked.addListener((info) => { | 44 | browser.browserAction.onClicked.addListener((info) => { |
diff --git a/addon/index.mjs b/addon/index.mjs index 10af4bd..dd8fa11 100644 --- a/addon/index.mjs +++ b/addon/index.mjs | |||
| @@ -35,16 +35,21 @@ const simpleRender = mapclay.renderWith(config => ({ | |||
| 35 | }, | 35 | }, |
| 36 | })) | 36 | })) |
| 37 | 37 | ||
| 38 | const container = document.querySelector(contentSelector ?? 'main') ?? document.body | ||
| 39 | |||
| 38 | browser.runtime.onMessage.addListener((message, sender, sendResponse) => { | 40 | browser.runtime.onMessage.addListener((message, sender, sendResponse) => { |
| 39 | /* eslint-disable-next-line no-console */ | 41 | /* eslint-disable-next-line no-console */ |
| 40 | console.log('receive message', message) | 42 | console.log('receive message', message) |
| 41 | sendResponse('received') | 43 | sendResponse('received') |
| 42 | if (message === 'map-inline-add') { | 44 | if (message.id === 'map-inline-add') { |
| 43 | generateMaps(document.querySelector(contentSelector ?? 'main') ?? document.body, { | 45 | generateMaps(container, { |
| 44 | crs: url.searchParams.get('crs') ?? 'EPSG:4326', | 46 | crs: url.searchParams.get('crs') ?? 'EPSG:4326', |
| 45 | render: simpleRender, | 47 | render: simpleRender, |
| 46 | }) | 48 | }) |
| 47 | return Promise.resolve('done') | 49 | return Promise.resolve('done') |
| 50 | } else if (message.id === 'map-inline-menu') { | ||
| 51 | container.dataset.menu = message.checked ? 'enabled' : 'disabled' | ||
| 52 | return Promise.resolve('done') | ||
| 48 | } | 53 | } |
| 49 | return false | 54 | return false |
| 50 | }) | 55 | }) |