aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorHsieh Chin Fan <pham@topo.tw>2024-11-04 23:17:18 +0800
committerHsieh Chin Fan <pham@topo.tw>2024-11-04 23:17:18 +0800
commitc4c8903b148ce75dd2470203e9faf93e3a42b15b (patch)
treeba8684d5edaf0b897da85b1a70e1fededdefbaca
parent9d9fb5652086dad99f9b0f4b32b57b49568a5ead (diff)
parent71810f684724245f17b5cee72be030f4a2467cca (diff)
Merge branch 'addon'
-rw-r--r--.gitignore19
-rw-r--r--DEVELOPING.md51
-rw-r--r--README.md3
-rw-r--r--addon/icons/default-0.pngbin0 -> 535 bytes
-rw-r--r--addon/icons/default-1.pngbin0 -> 769 bytes
-rw-r--r--addon/icons/default-2.pngbin0 -> 1122 bytes
-rw-r--r--addon/icons/default.icobin15406 -> 0 bytes
-rw-r--r--addon/index.js (renamed from addon/index.mjs)6
-rw-r--r--addon/manifest.json15
-rw-r--r--addon/src/dumbymap.mjs5
-rw-r--r--addon/src/renderers/leaflet.mjs4
-rw-r--r--addon/src/renderers/maplibre.mjs4
-rw-r--r--addon/src/renderers/openlayers.mjs4
-rw-r--r--package.json3
-rwxr-xr-xscripts/addon.sh9
-rw-r--r--scripts/rollup.config.js29
-rw-r--r--src/dumbyUtils.mjs2
17 files changed, 112 insertions, 42 deletions
diff --git a/.gitignore b/.gitignore
index 4602e8a..84e6d3f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,12 +1,21 @@
1# node
2node_modules/
3package-lock.json
4pnpm-lock.yaml
5src/css/easymde.min.css
6
7# output
1dist/ 8dist/
2docs/ 9docs/
10
11# addon
12addon.zip
3addon/**js 13addon/**js
14addon/renderers/**js
4addon/**css 15addon/**css
5!addon/index** 16!addon/index**
6!addon/background** 17!addon/background**
18!addon/src
19
20# others
7doc-coverage/ 21doc-coverage/
8node_modules/
9package-lock.json
10pnpm-lock.yaml
11mapclay
12src/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
5The 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
11To install the project dependencies run
12
13```sh
14# install dependencies
15npm install
16
17# install rollup or use npx
18npm install -g rollup standard
19```
20
21
22## Style guidelines
23
24We 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```
27npm run lint
28```
29
30
31## Linking Package
32
33```sh
34# without code minified
35npm build
36
37# with code minified
38PRODUCTION=true npm build
39```
40
41## Firefox Addon
42
431. To build addon(after `dist/` is generated from `npm build`), run
44
45```sh
46npm run addon
47```
48
492. Then go to `about:debugging` page in Firfox Browser, then press `This Firefox` for extension page
50
513. Press `Load Temporary Add-on...`, then select `manifest.json` in `addon/`
diff --git a/README.md b/README.md
index 47d3542..59472d0 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,9 @@
2 2
3This library generate web maps from [Semantic HTML], just play around with [demo page](https://outdoorsafetylab.github.io/dumbymap/) 3This 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}
24const contentSelector = contentSelectors[url.host] 24const contentSelector = contentSelectors[url.host]
25 25
26const simpleRender = mapclay.renderWith(config => ({ 26const 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 @@
1import { generateMaps } from '../../dist/dumbymap.mjs'
2import { renderWith } from '../../node_modules/mapclay/dist/mapclay.mjs'
3
4globalThis.generateMaps = generateMaps
5globalThis.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 @@
1import { default as Leaflet } from '../../../node_modules/mapclay/dist/renderers/leaflet.mjs'
2
3if (!globalThis.mapclayRenderers) globalThis.mapclayRenderers = {}
4globalThis.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 @@
1import { default as Maplibre } from '../../../node_modules/mapclay/dist/renderers/maplibre.mjs'
2
3if (!globalThis.mapclayRenderers) globalThis.mapclayRenderers = {}
4globalThis.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 @@
1import { default as Openlayers } from '../../../node_modules/mapclay/dist/renderers/openlayers.mjs'
2
3if (!globalThis.mapclayRenderers) globalThis.mapclayRenderers = {}
4globalThis.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
3mkdir -p addon/css
4ln -f src/css/dumbymap.css addon/css/dumbymap.css
5
6mkdir -p addon/renderers/
7rollup addon/src/renderers/* --dir addon/renderers
8
9rollup 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'
6import { bundleStats } from 'rollup-plugin-bundle-stats' 6import { bundleStats } from 'rollup-plugin-bundle-stats'
7 7
8const prod = process.env.PRODUCTION 8const prod = process.env.PRODUCTION
9const addon = process.env.ADDON 9const watch = process.env.ROLLUP_WATCH
10 10
11function resolve (file, origin) { 11function 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