diff options
author | Hsieh Chin Fan <pham@topo.tw> | 2024-11-04 23:17:18 +0800 |
---|---|---|
committer | Hsieh Chin Fan <pham@topo.tw> | 2024-11-04 23:17:18 +0800 |
commit | c4c8903b148ce75dd2470203e9faf93e3a42b15b (patch) | |
tree | ba8684d5edaf0b897da85b1a70e1fededdefbaca | |
parent | 9d9fb5652086dad99f9b0f4b32b57b49568a5ead (diff) | |
parent | 71810f684724245f17b5cee72be030f4a2467cca (diff) |
Merge branch 'addon'
-rw-r--r-- | .gitignore | 19 | ||||
-rw-r--r-- | DEVELOPING.md | 51 | ||||
-rw-r--r-- | README.md | 3 | ||||
-rw-r--r-- | addon/icons/default-0.png | bin | 0 -> 535 bytes | |||
-rw-r--r-- | addon/icons/default-1.png | bin | 0 -> 769 bytes | |||
-rw-r--r-- | addon/icons/default-2.png | bin | 0 -> 1122 bytes | |||
-rw-r--r-- | addon/icons/default.ico | bin | 15406 -> 0 bytes | |||
-rw-r--r-- | addon/index.js (renamed from addon/index.mjs) | 6 | ||||
-rw-r--r-- | addon/manifest.json | 15 | ||||
-rw-r--r-- | addon/src/dumbymap.mjs | 5 | ||||
-rw-r--r-- | addon/src/renderers/leaflet.mjs | 4 | ||||
-rw-r--r-- | addon/src/renderers/maplibre.mjs | 4 | ||||
-rw-r--r-- | addon/src/renderers/openlayers.mjs | 4 | ||||
-rw-r--r-- | package.json | 3 | ||||
-rwxr-xr-x | scripts/addon.sh | 9 | ||||
-rw-r--r-- | scripts/rollup.config.js | 29 | ||||
-rw-r--r-- | src/dumbyUtils.mjs | 2 |
17 files changed, 112 insertions, 42 deletions
@@ -1,12 +1,21 @@ | |||
1 | # node | ||
2 | node_modules/ | ||
3 | package-lock.json | ||
4 | pnpm-lock.yaml | ||
5 | src/css/easymde.min.css | ||
6 | |||
7 | # output | ||
1 | dist/ | 8 | dist/ |
2 | docs/ | 9 | docs/ |
10 | |||
11 | # addon | ||
12 | addon.zip | ||
3 | addon/**js | 13 | addon/**js |
14 | addon/renderers/**js | ||
4 | addon/**css | 15 | addon/**css |
5 | !addon/index** | 16 | !addon/index** |
6 | !addon/background** | 17 | !addon/background** |
18 | !addon/src | ||
19 | |||
20 | # others | ||
7 | doc-coverage/ | 21 | doc-coverage/ |
8 | node_modules/ | ||
9 | package-lock.json | ||
10 | pnpm-lock.yaml | ||
11 | mapclay | ||
12 | src/css/easymde.min.css | ||
diff --git a/DEVELOPING.md b/DEVELOPING.md new file mode 100644 index 0000000..687e389 --- /dev/null +++ b/DEVELOPING.md | |||
@@ -0,0 +1,51 @@ | |||
1 | ## Setting up development environment | ||
2 | |||
3 | ### Installing dependencies | ||
4 | |||
5 | The minimum requirements are: | ||
6 | - GNU Bash | ||
7 | - [GNU Coreutils](https://www.gnu.org/software/coreutils/) | ||
8 | - Git | ||
9 | - Node.js (version 16 and above) | ||
10 | |||
11 | To install the project dependencies run | ||
12 | |||
13 | ```sh | ||
14 | # install dependencies | ||
15 | npm install | ||
16 | |||
17 | # install rollup or use npx | ||
18 | npm install -g rollup standard | ||
19 | ``` | ||
20 | |||
21 | |||
22 | ## Style guidelines | ||
23 | |||
24 | We use [StandardJS](https://standardjs.com/) with pre-defined ESLint rules to ensure a consistent coding style and catch potential bugs. For checking lint, run | ||
25 | |||
26 | ``` | ||
27 | npm run lint | ||
28 | ``` | ||
29 | |||
30 | |||
31 | ## Linking Package | ||
32 | |||
33 | ```sh | ||
34 | # without code minified | ||
35 | npm build | ||
36 | |||
37 | # with code minified | ||
38 | PRODUCTION=true npm build | ||
39 | ``` | ||
40 | |||
41 | ## Firefox Addon | ||
42 | |||
43 | 1. To build addon(after `dist/` is generated from `npm build`), run | ||
44 | |||
45 | ```sh | ||
46 | npm run addon | ||
47 | ``` | ||
48 | |||
49 | 2. Then go to `about:debugging` page in Firfox Browser, then press `This Firefox` for extension page | ||
50 | |||
51 | 3. Press `Load Temporary Add-on...`, then select `manifest.json` in `addon/` | ||
@@ -2,6 +2,9 @@ | |||
2 | 2 | ||
3 | This library generate web maps from [Semantic HTML], just play around with [demo page](https://outdoorsafetylab.github.io/dumbymap/) | 3 | This library generate web maps from [Semantic HTML], just play around with [demo page](https://outdoorsafetylab.github.io/dumbymap/) |
4 | 4 | ||
5 | > [!IMPORTANT] | ||
6 | > For build steps about firefox addon, please visit `DEVELOPING.md` | ||
7 | |||
5 | > [!CAUTION] | 8 | > [!CAUTION] |
6 | > DumbyMap is not in production stage. API is not stable now, use it carefully | 9 | > DumbyMap is not in production stage. API is not stable now, use it carefully |
7 | 10 | ||
diff --git a/addon/icons/default-0.png b/addon/icons/default-0.png new file mode 100644 index 0000000..ead58eb --- /dev/null +++ b/addon/icons/default-0.png | |||
Binary files differ | |||
diff --git a/addon/icons/default-1.png b/addon/icons/default-1.png new file mode 100644 index 0000000..5d364aa --- /dev/null +++ b/addon/icons/default-1.png | |||
Binary files differ | |||
diff --git a/addon/icons/default-2.png b/addon/icons/default-2.png new file mode 100644 index 0000000..260c83f --- /dev/null +++ b/addon/icons/default-2.png | |||
Binary files differ | |||
diff --git a/addon/icons/default.ico b/addon/icons/default.ico deleted file mode 100644 index 2ddf495..0000000 --- a/addon/icons/default.ico +++ /dev/null | |||
Binary files differ | |||
diff --git a/addon/index.mjs b/addon/index.js index dd8fa11..2ce3423 100644 --- a/addon/index.mjs +++ b/addon/index.js | |||
@@ -23,14 +23,14 @@ const contentSelectors = { | |||
23 | } | 23 | } |
24 | const contentSelector = contentSelectors[url.host] | 24 | const contentSelector = contentSelectors[url.host] |
25 | 25 | ||
26 | const simpleRender = mapclay.renderWith(config => ({ | 26 | const simpleRender = globalThis.renderWith(config => ({ |
27 | use: use ?? 'Leaflet', | 27 | use: use ?? 'Leaflet', |
28 | width: '100%', | 28 | width: '100%', |
29 | height: '200px', | 29 | height: '200px', |
30 | XYZ: 'https://tile.openstreetmap.jp/styles/osm-bright/512/{z}/{x}/{y}.png', | 30 | XYZ: 'https://tile.openstreetmap.jp/styles/osm-bright/512/{z}/{x}/{y}.png', |
31 | ...config, | 31 | ...config, |
32 | aliases: { | 32 | aliases: { |
33 | use: mapclay.renderers, | 33 | use: globalThis.mapclayRenderer, |
34 | ...(config.aliases ?? {}), | 34 | ...(config.aliases ?? {}), |
35 | }, | 35 | }, |
36 | })) | 36 | })) |
@@ -42,7 +42,7 @@ browser.runtime.onMessage.addListener((message, sender, sendResponse) => { | |||
42 | console.log('receive message', message) | 42 | console.log('receive message', message) |
43 | sendResponse('received') | 43 | sendResponse('received') |
44 | if (message.id === 'map-inline-add') { | 44 | if (message.id === 'map-inline-add') { |
45 | generateMaps(container, { | 45 | globalThis.generateMaps(container, { |
46 | crs: url.searchParams.get('crs') ?? 'EPSG:4326', | 46 | crs: url.searchParams.get('crs') ?? 'EPSG:4326', |
47 | render: simpleRender, | 47 | render: simpleRender, |
48 | }) | 48 | }) |
diff --git a/addon/manifest.json b/addon/manifest.json index e7bcbcf..92baf30 100644 --- a/addon/manifest.json +++ b/addon/manifest.json | |||
@@ -1,12 +1,14 @@ | |||
1 | { | 1 | { |
2 | "manifest_version": 2, | 2 | "manifest_version": 2, |
3 | "name": "DumbyMap", | 3 | "name": "MapInline", |
4 | "version": "1.0", | 4 | "version": "1.0", |
5 | 5 | ||
6 | "description": "Add interatctive Map", | 6 | "description": "Add Interatctive Map", |
7 | 7 | ||
8 | "icons": { | 8 | "icons": { |
9 | "48": "icons/default.ico" | 9 | "16": "icons/default-0.png", |
10 | "32": "icons/default-1.png", | ||
11 | "48": "icons/default-2.png" | ||
10 | }, | 12 | }, |
11 | 13 | ||
12 | "browser_action": { | 14 | "browser_action": { |
@@ -22,8 +24,11 @@ | |||
22 | "https://prosemirror.net/examples/*" | 24 | "https://prosemirror.net/examples/*" |
23 | ], | 25 | ], |
24 | "js": [ | 26 | "js": [ |
25 | "dumbymap.mjs", | 27 | "renderers/leaflet.js", |
26 | "index.mjs" | 28 | "renderers/maplibre.js", |
29 | "renderers/openlayers.js", | ||
30 | "dumbymap.js", | ||
31 | "index.js" | ||
27 | ], | 32 | ], |
28 | "css": [ | 33 | "css": [ |
29 | "css/dumbymap.css" | 34 | "css/dumbymap.css" |
diff --git a/addon/src/dumbymap.mjs b/addon/src/dumbymap.mjs new file mode 100644 index 0000000..07af342 --- /dev/null +++ b/addon/src/dumbymap.mjs | |||
@@ -0,0 +1,5 @@ | |||
1 | import { generateMaps } from '../../dist/dumbymap.mjs' | ||
2 | import { renderWith } from '../../node_modules/mapclay/dist/mapclay.mjs' | ||
3 | |||
4 | globalThis.generateMaps = generateMaps | ||
5 | globalThis.renderWith = renderWith | ||
diff --git a/addon/src/renderers/leaflet.mjs b/addon/src/renderers/leaflet.mjs new file mode 100644 index 0000000..8e056f9 --- /dev/null +++ b/addon/src/renderers/leaflet.mjs | |||
@@ -0,0 +1,4 @@ | |||
1 | import { default as Leaflet } from '../../../node_modules/mapclay/dist/renderers/leaflet.mjs' | ||
2 | |||
3 | if (!globalThis.mapclayRenderers) globalThis.mapclayRenderers = {} | ||
4 | globalThis.mapclayRenderers.Leaflet = Leaflet | ||
diff --git a/addon/src/renderers/maplibre.mjs b/addon/src/renderers/maplibre.mjs new file mode 100644 index 0000000..753af86 --- /dev/null +++ b/addon/src/renderers/maplibre.mjs | |||
@@ -0,0 +1,4 @@ | |||
1 | import { default as Maplibre } from '../../../node_modules/mapclay/dist/renderers/maplibre.mjs' | ||
2 | |||
3 | if (!globalThis.mapclayRenderers) globalThis.mapclayRenderers = {} | ||
4 | globalThis.mapclayRenderers.Maplibre = Maplibre | ||
diff --git a/addon/src/renderers/openlayers.mjs b/addon/src/renderers/openlayers.mjs new file mode 100644 index 0000000..2c42757 --- /dev/null +++ b/addon/src/renderers/openlayers.mjs | |||
@@ -0,0 +1,4 @@ | |||
1 | import { default as Openlayers } from '../../../node_modules/mapclay/dist/renderers/openlayers.mjs' | ||
2 | |||
3 | if (!globalThis.mapclayRenderers) globalThis.mapclayRenderers = {} | ||
4 | globalThis.mapclayRenderers.Openlayers = Openlayers | ||
diff --git a/package.json b/package.json index 28661da..a137ca1 100644 --- a/package.json +++ b/package.json | |||
@@ -26,7 +26,8 @@ | |||
26 | "style": "scripts/stylelint.sh", | 26 | "style": "scripts/stylelint.sh", |
27 | "docs": "jsdoc -c scripts/jsdoc.conf src/; xdg-open http://localhost:8080/docs/", | 27 | "docs": "jsdoc -c scripts/jsdoc.conf src/; xdg-open http://localhost:8080/docs/", |
28 | "prepack": "npm run lint && npm run style && npm run build", | 28 | "prepack": "npm run lint && npm run style && npm run build", |
29 | "addon": "mkdir -p addon/css; cp src/css/dumbymap.css addon/css; ADDON=true rollup -c scripts/rollup.config.js --watch", | 29 | "addon": "scripts/addon.sh", |
30 | "addon.zip": "cd addon; zip -r ../addon.zip *", | ||
30 | "dev-addon": "web-ext run -s addon" | 31 | "dev-addon": "web-ext run -s addon" |
31 | }, | 32 | }, |
32 | "devDependencies": { | 33 | "devDependencies": { |
diff --git a/scripts/addon.sh b/scripts/addon.sh new file mode 100755 index 0000000..3b7bf3b --- /dev/null +++ b/scripts/addon.sh | |||
@@ -0,0 +1,9 @@ | |||
1 | #! /bin/bash | ||
2 | |||
3 | mkdir -p addon/css | ||
4 | ln -f src/css/dumbymap.css addon/css/dumbymap.css | ||
5 | |||
6 | mkdir -p addon/renderers/ | ||
7 | rollup addon/src/renderers/* --dir addon/renderers | ||
8 | |||
9 | rollup addon/src/dumbymap.mjs --file addon/dumbymap.js | ||
diff --git a/scripts/rollup.config.js b/scripts/rollup.config.js index 547260b..b3a6139 100644 --- a/scripts/rollup.config.js +++ b/scripts/rollup.config.js | |||
@@ -6,7 +6,7 @@ import { join } from 'path' | |||
6 | import { bundleStats } from 'rollup-plugin-bundle-stats' | 6 | import { bundleStats } from 'rollup-plugin-bundle-stats' |
7 | 7 | ||
8 | const prod = process.env.PRODUCTION | 8 | const prod = process.env.PRODUCTION |
9 | const addon = process.env.ADDON | 9 | const watch = process.env.ROLLUP_WATCH |
10 | 10 | ||
11 | function resolve (file, origin) { | 11 | function resolve (file, origin) { |
12 | // Your way to resolve local include path | 12 | // Your way to resolve local include path |
@@ -79,31 +79,6 @@ export default [ | |||
79 | ] | 79 | ] |
80 | .map(config => ({ ...general, ...config })) | 80 | .map(config => ({ ...general, ...config })) |
81 | .filter(config => { | 81 | .filter(config => { |
82 | if (addon) return config.input.match(/dumbymap/) | 82 | if (watch) return config.input.match(/editor/) |
83 | if (!prod) return config.input.match(/editor/) | ||
84 | return true | 83 | return true |
85 | }) | 84 | }) |
86 | .map(config => { | ||
87 | if (!addon) return config | ||
88 | |||
89 | config.output.forEach(o => { o.dir = './addon' }) | ||
90 | config.plugins.push({ | ||
91 | name: 'remove-exports', | ||
92 | transform (code, id) { | ||
93 | if (id.includes(config.input)) { | ||
94 | // remove export keyword for addon | ||
95 | const transformedCode = code.replace(/\n(\s*)export\s*/g, '$1') | ||
96 | return { | ||
97 | code: [ | ||
98 | transformedCode, | ||
99 | 'globalThis.generateMaps = generateMaps', | ||
100 | 'globalThis.mapclay = mapclay', | ||
101 | ].join('\n'), | ||
102 | } | ||
103 | } | ||
104 | return null | ||
105 | }, | ||
106 | }) | ||
107 | |||
108 | return config | ||
109 | }) | ||
diff --git a/src/dumbyUtils.mjs b/src/dumbyUtils.mjs index 8110e82..975833b 100644 --- a/src/dumbyUtils.mjs +++ b/src/dumbyUtils.mjs | |||
@@ -144,7 +144,7 @@ export const addGeoSchemeByText = async (node) => { | |||
144 | 144 | ||
145 | // Return anchor element with Geo Scheme | 145 | // Return anchor element with Geo Scheme |
146 | const a = document.createElement('a') | 146 | const a = document.createElement('a') |
147 | a.className = 'not-geolink from-geocoding' | 147 | a.className = 'not-geolink from-text' |
148 | a.href = `geo:0,0?xy=${x},${y}` | 148 | a.href = `geo:0,0?xy=${x},${y}` |
149 | a.textContent = match.at(0) | 149 | a.textContent = match.at(0) |
150 | return a | 150 | return a |