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 | |
parent | 2a01edfbe920db25ca752371b889b08dce9025ac (diff) |
feat: add context menu-item to disable custom menu
-rw-r--r-- | addon/background.js | 23 | ||||
-rw-r--r-- | addon/index.mjs | 9 | ||||
-rw-r--r-- | src/dumbymap.mjs | 2 |
3 files changed, 29 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 | }) |
diff --git a/src/dumbymap.mjs b/src/dumbymap.mjs index dd5ae79..4562612 100644 --- a/src/dumbymap.mjs +++ b/src/dumbymap.mjs | |||
@@ -534,6 +534,8 @@ export const generateMaps = (container, { | |||
534 | 534 | ||
535 | /** MENU: Menu Items for Context Menu */ | 535 | /** MENU: Menu Items for Context Menu */ |
536 | container.oncontextmenu = e => { | 536 | container.oncontextmenu = e => { |
537 | if (container.dataset.menu === 'disabled') return | ||
538 | |||
537 | container.querySelectorAll('.dumby-menu').forEach(m => m.remove()) | 539 | container.querySelectorAll('.dumby-menu').forEach(m => m.remove()) |
538 | const map = e.target.closest('.mapclay') | 540 | const map = e.target.closest('.mapclay') |
539 | const block = e.target.closest('.dumby-block') | 541 | const block = e.target.closest('.dumby-block') |