diff options
| -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 |