feat(geomap): load leaflet

This commit is contained in:
Elian Doran 2025-01-20 19:18:29 +02:00
parent e1952fe6b8
commit 94a0403981
No known key found for this signature in database
5 changed files with 53 additions and 4 deletions

17
package-lock.json generated
View File

@ -16,6 +16,7 @@
"@mermaid-js/layout-elk": "0.1.7", "@mermaid-js/layout-elk": "0.1.7",
"@mind-elixir/node-menu": "1.0.3", "@mind-elixir/node-menu": "1.0.3",
"@triliumnext/express-partial-content": "1.0.1", "@triliumnext/express-partial-content": "1.0.1",
"@types/leaflet": "1.9.16",
"@types/react-dom": "18.3.5", "@types/react-dom": "18.3.5",
"archiver": "7.0.1", "archiver": "7.0.1",
"async-mutex": "0.5.0", "async-mutex": "0.5.0",
@ -67,6 +68,7 @@
"jsplumb": "2.15.6", "jsplumb": "2.15.6",
"katex": "0.16.21", "katex": "0.16.21",
"knockout": "3.5.1", "knockout": "3.5.1",
"leaflet": "1.9.4",
"mark.js": "8.11.1", "mark.js": "8.11.1",
"marked": "15.0.6", "marked": "15.0.6",
"mermaid": "11.4.1", "mermaid": "11.4.1",
@ -3847,6 +3849,15 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"node_modules/@types/leaflet": {
"version": "1.9.16",
"resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.16.tgz",
"integrity": "sha512-wzZoyySUxkgMZ0ihJ7IaUIblG8Rdc8AbbZKLneyn+QjYsj5q1QU7TEKYqwTr10BGSzY5LI7tJk9Ifo+mEjdFRw==",
"license": "MIT",
"dependencies": {
"@types/geojson": "*"
}
},
"node_modules/@types/linkify-it": { "node_modules/@types/linkify-it": {
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
@ -11437,6 +11448,12 @@
"safe-buffer": "~5.1.0" "safe-buffer": "~5.1.0"
} }
}, },
"node_modules/leaflet": {
"version": "1.9.4",
"resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz",
"integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==",
"license": "BSD-2-Clause"
},
"node_modules/limiter": { "node_modules/limiter": {
"version": "1.1.5", "version": "1.1.5",
"resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz",

View File

@ -61,6 +61,7 @@
"@mermaid-js/layout-elk": "0.1.7", "@mermaid-js/layout-elk": "0.1.7",
"@mind-elixir/node-menu": "1.0.3", "@mind-elixir/node-menu": "1.0.3",
"@triliumnext/express-partial-content": "1.0.1", "@triliumnext/express-partial-content": "1.0.1",
"@types/leaflet": "1.9.16",
"@types/react-dom": "18.3.5", "@types/react-dom": "18.3.5",
"archiver": "7.0.1", "archiver": "7.0.1",
"async-mutex": "0.5.0", "async-mutex": "0.5.0",
@ -112,6 +113,7 @@
"jsplumb": "2.15.6", "jsplumb": "2.15.6",
"katex": "0.16.21", "katex": "0.16.21",
"knockout": "3.5.1", "knockout": "3.5.1",
"leaflet": "1.9.4",
"mark.js": "8.11.1", "mark.js": "8.11.1",
"marked": "15.0.6", "marked": "15.0.6",
"mermaid": "11.4.1", "mermaid": "11.4.1",

View File

@ -106,6 +106,11 @@ const HIGHLIGHT_JS: Library = {
} }
}; };
const LEAFLET: Library = {
js: [ "node_modules/leaflet/dist/leaflet.js" ],
css: [ "node_modules/leaflet/dist/leaflet.css" ],
}
async function requireLibrary(library: Library) { async function requireLibrary(library: Library) {
if (library.css) { if (library.css) {
library.css.map((cssUrl) => requireCss(cssUrl)); library.css.map((cssUrl) => requireCss(cssUrl));
@ -196,5 +201,6 @@ export default {
MERMAID, MERMAID,
MARKJS, MARKJS,
I18NEXT, I18NEXT,
HIGHLIGHT_JS HIGHLIGHT_JS,
LEAFLET
}; };

View File

@ -1,9 +1,21 @@
import library_loader from "../services/library_loader.js";
import NoteContextAwareWidget from "./note_context_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
const TPL = `\ const TPL = `\
<div class="geo-map-widget"> <div class="geo-map-widget">
Map goes here. <style>
</div>` .note-detail-geo-map,
.geo-map-widget,
.geo-map-container {
height: 100%;
overflow: hidden;
}
</style>
<div class="geo-map-container"></div>
</div>
`
export default class GeoMapWidget extends NoteContextAwareWidget { export default class GeoMapWidget extends NoteContextAwareWidget {
@ -12,7 +24,17 @@ export default class GeoMapWidget extends NoteContextAwareWidget {
} }
doRender() { doRender() {
this.$widget = $(TPL) this.$widget = $(TPL);
const $container = this.$widget.find(".geo-map-container");
library_loader.requireLibrary(library_loader.LEAFLET)
.then(() => {
//@ts-ignore
L.map($container[0], {
});
});
} }
} }

View File

@ -105,6 +105,8 @@ async function register(app: express.Application) {
app.use(`/${assetPath}/node_modules/mind-elixir/dist/`, persistentCacheStatic(path.join(srcRoot, "..", "node_modules/mind-elixir/dist/"))); app.use(`/${assetPath}/node_modules/mind-elixir/dist/`, persistentCacheStatic(path.join(srcRoot, "..", "node_modules/mind-elixir/dist/")));
app.use(`/${assetPath}/node_modules/@mind-elixir/node-menu/dist/`, persistentCacheStatic(path.join(srcRoot, "..", "node_modules/@mind-elixir/node-menu/dist/"))); app.use(`/${assetPath}/node_modules/@mind-elixir/node-menu/dist/`, persistentCacheStatic(path.join(srcRoot, "..", "node_modules/@mind-elixir/node-menu/dist/")));
app.use(`/${assetPath}/node_modules/@highlightjs/cdn-assets/`, persistentCacheStatic(path.join(srcRoot, "..", "node_modules/@highlightjs/cdn-assets/"))); app.use(`/${assetPath}/node_modules/@highlightjs/cdn-assets/`, persistentCacheStatic(path.join(srcRoot, "..", "node_modules/@highlightjs/cdn-assets/")));
app.use(`/${assetPath}/node_modules/leaflet/dist/`, persistentCacheStatic(path.join(srcRoot, "..", "node_modules/leaflet/dist/")));
} }
export default { export default {