aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorHsieh Chin Fan <pham@topo.tw>2024-10-30 23:03:13 +0800
committerHsieh Chin Fan <pham@topo.tw>2024-10-31 11:31:00 +0800
commit3e78ee2ffbb9f10f4d8fa30723f02a752fa402e1 (patch)
treee0c516aea43f2577a524688974b2da5cc34cc01a
parent2a01edfbe920db25ca752371b889b08dce9025ac (diff)
feat: add context menu-item to disable custom menu
-rw-r--r--addon/background.js23
-rw-r--r--addon/index.mjs9
-rw-r--r--src/dumbymap.mjs2
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
11browser.contextMenus.create(
12 {
13 id: 'map-inline-menu',
14 title: 'Enable Menu',
15 type: 'checkbox',
16 checked: true,
17 contexts: ['all'],
18 },
19)
20
21browser.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
20browser.contextMenus.onClicked.addListener((info, tab) => { 36browser.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
27browser.browserAction.onClicked.addListener((info) => { 44browser.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
38const container = document.querySelector(contentSelector ?? 'main') ?? document.body
39
38browser.runtime.onMessage.addListener((message, sender, sendResponse) => { 40browser.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')