leaflet-html 0.1.6 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/npm-publish.yml +13 -1
- package/README.md +62 -35
- package/dist/leaflet-html.cjs +2 -0
- package/dist/leaflet-html.cjs.map +1 -0
- package/dist/leaflet-html.esm.js +2 -0
- package/dist/leaflet-html.esm.js.map +1 -0
- package/dist/leaflet-html.js +2 -0
- package/dist/leaflet-html.js.map +1 -0
- package/dist/leaflet-html.umd.js +2 -0
- package/dist/leaflet-html.umd.js.map +1 -0
- package/docs/content/_index.md +60 -62
- package/docs/templates/index.html +23 -19
- package/example/geojson/index.html +42 -0
- package/example/index.html +58 -50
- package/example/overlays/index.html +34 -35
- package/package.json +2 -2
- package/src/events.js +3 -0
- package/src/index.js +25 -184
- package/src/l-base-layers.js +16 -0
- package/src/l-control-layers.js +34 -0
- package/src/l-geojson.js +20 -0
- package/src/l-image-overlay.js +41 -0
- package/src/l-lat-lng-bounds.js +20 -0
- package/src/l-layer-group.js +39 -0
- package/src/l-map.js +33 -0
- package/src/l-marker.js +45 -0
- package/src/l-overlay-layers.js +15 -0
- package/src/l-popup.js +23 -0
- package/src/l-tile-layer.js +19 -0
- package/src/l-video-overlay.js +30 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
import { mapAddTo } from "./events.js"
|
2
|
+
|
3
|
+
class LLayerGroup extends HTMLElement {
|
4
|
+
constructor() {
|
5
|
+
super()
|
6
|
+
}
|
7
|
+
|
8
|
+
connectedCallback() {
|
9
|
+
const name = this.getAttribute("name")
|
10
|
+
const group = L.layerGroup()
|
11
|
+
const event = new CustomEvent(mapAddTo, {
|
12
|
+
cancelable: true,
|
13
|
+
bubbles: true,
|
14
|
+
detail: {
|
15
|
+
layer: group,
|
16
|
+
name
|
17
|
+
}
|
18
|
+
})
|
19
|
+
this.dispatchEvent(event)
|
20
|
+
|
21
|
+
this.addEventListener(mapAddTo, (ev) => {
|
22
|
+
ev.stopPropagation()
|
23
|
+
group.addLayer(ev.detail.layer)
|
24
|
+
})
|
25
|
+
|
26
|
+
const observer = new MutationObserver(function(mutations) {
|
27
|
+
mutations.forEach((mutation) => {
|
28
|
+
mutation.removedNodes.forEach((node) => {
|
29
|
+
const leafletId = node.getAttribute("leaflet-id");
|
30
|
+
const layer = group.getLayer(leafletId);
|
31
|
+
group.removeLayer(layer);
|
32
|
+
});
|
33
|
+
});
|
34
|
+
});
|
35
|
+
observer.observe(this, { childList: true })
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
export default LLayerGroup
|
package/src/l-map.js
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
// @ts-check
|
2
|
+
import { layerRemove, mapAddTo } from "./events.js"
|
3
|
+
|
4
|
+
class LMap extends HTMLElement {
|
5
|
+
constructor() {
|
6
|
+
super()
|
7
|
+
|
8
|
+
this.map = null
|
9
|
+
this.addEventListener("map:bounds", (ev) => {
|
10
|
+
const { bounds, method } = ev.detail
|
11
|
+
this.map[method](bounds)
|
12
|
+
})
|
13
|
+
}
|
14
|
+
|
15
|
+
connectedCallback() {
|
16
|
+
this.map = L.map(this)
|
17
|
+
const center = this.getAttribute("center")
|
18
|
+
const zoom = this.getAttribute("zoom")
|
19
|
+
if ((center !== null) && (zoom !== null)) {
|
20
|
+
this.map.setView(JSON.parse(center), parseInt(zoom))
|
21
|
+
}
|
22
|
+
this.addEventListener(mapAddTo, (ev) => {
|
23
|
+
const layer = ev.detail.layer
|
24
|
+
layer.addTo(this.map)
|
25
|
+
})
|
26
|
+
|
27
|
+
this.addEventListener(layerRemove, (ev) => {
|
28
|
+
this.map.remove(ev.detail.layer)
|
29
|
+
})
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
export default LMap
|
package/src/l-marker.js
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
import { mapAddTo, popupAdd } from "./events.js";
|
2
|
+
|
3
|
+
class LMarker extends HTMLElement {
|
4
|
+
static observedAttributes = ["lat-lng", "opacity"]
|
5
|
+
|
6
|
+
constructor() {
|
7
|
+
super()
|
8
|
+
this.layer = null
|
9
|
+
}
|
10
|
+
|
11
|
+
connectedCallback() {
|
12
|
+
const latLng = JSON.parse(this.getAttribute("lat-lng"))
|
13
|
+
const opacity = parseFloat(this.getAttribute("opacity") || "1.0")
|
14
|
+
this.layer = L.marker(latLng, { opacity });
|
15
|
+
this.setAttribute("leaflet-id", L.stamp(this.layer))
|
16
|
+
|
17
|
+
this.addEventListener(popupAdd, (ev) => {
|
18
|
+
const { content } = ev.detail
|
19
|
+
this.layer.bindPopup(content)
|
20
|
+
})
|
21
|
+
|
22
|
+
const event = new CustomEvent(mapAddTo, {
|
23
|
+
cancelable: true,
|
24
|
+
bubbles: true,
|
25
|
+
detail: {
|
26
|
+
layer: this.layer
|
27
|
+
}
|
28
|
+
})
|
29
|
+
this.dispatchEvent(event)
|
30
|
+
}
|
31
|
+
|
32
|
+
attributeChangedCallback(name, _oldValue, newValue) {
|
33
|
+
if (this.layer !== null) {
|
34
|
+
if (name === "lat-lng") {
|
35
|
+
this.layer.setLatLng(JSON.parse(newValue))
|
36
|
+
}
|
37
|
+
if (name === "opacity") {
|
38
|
+
this.layer.setOpacity(parseFloat(newValue))
|
39
|
+
}
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
|
45
|
+
export default LMarker
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { mapAddTo } from "./events.js"
|
2
|
+
|
3
|
+
class LOverlayLayers extends HTMLElement {
|
4
|
+
constructor() {
|
5
|
+
super()
|
6
|
+
}
|
7
|
+
|
8
|
+
connectedCallback() {
|
9
|
+
this.addEventListener(mapAddTo, (ev) => {
|
10
|
+
ev.detail["type"] = "overlay"
|
11
|
+
})
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
export default LOverlayLayers
|
package/src/l-popup.js
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
import { popupAdd } from "./events.js"
|
2
|
+
|
3
|
+
class LPopup extends HTMLElement {
|
4
|
+
constructor() {
|
5
|
+
super()
|
6
|
+
}
|
7
|
+
|
8
|
+
connectedCallback() {
|
9
|
+
const content = this.getAttribute("content")
|
10
|
+
const event = new CustomEvent(popupAdd, {
|
11
|
+
cancelable: true,
|
12
|
+
bubbles: true,
|
13
|
+
detail: {
|
14
|
+
content
|
15
|
+
}
|
16
|
+
})
|
17
|
+
this.dispatchEvent(event)
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
|
22
|
+
export default LPopup
|
23
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { mapAddTo } from "./events.js"
|
2
|
+
|
3
|
+
class LTileLayer extends HTMLElement {
|
4
|
+
constructor() {
|
5
|
+
super()
|
6
|
+
}
|
7
|
+
|
8
|
+
connectedCallback() {
|
9
|
+
const name = this.getAttribute("name")
|
10
|
+
const urlTemplate = this.getAttribute("url-template")
|
11
|
+
const attribution = this.getAttribute("attribution")
|
12
|
+
const options = { attribution }
|
13
|
+
const layer = L.tileLayer(urlTemplate, options)
|
14
|
+
const event = new CustomEvent(mapAddTo, { detail: { name, layer }, bubbles: true})
|
15
|
+
this.dispatchEvent(event)
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
export default LTileLayer
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import { mapAddTo } from "./events.js"
|
2
|
+
|
3
|
+
class LVideoOverlay extends HTMLElement {
|
4
|
+
constructor() {
|
5
|
+
super()
|
6
|
+
}
|
7
|
+
|
8
|
+
connectedCallback() {
|
9
|
+
const url = JSON.parse(this.getAttribute("url"))
|
10
|
+
const bounds = JSON.parse(this.getAttribute("bounds"))
|
11
|
+
const options = {
|
12
|
+
opacity: parseFloat(this.getAttribute("opacity") || "1.0"),
|
13
|
+
alt: this.getAttribute("alt") || "",
|
14
|
+
autoplay: true,
|
15
|
+
muted: true,
|
16
|
+
playsInline: true
|
17
|
+
}
|
18
|
+
const layer = L.videoOverlay(url, bounds, options)
|
19
|
+
this.dispatchEvent(new CustomEvent(mapAddTo, {
|
20
|
+
cancelable: true,
|
21
|
+
bubbles: true,
|
22
|
+
detail: {
|
23
|
+
layer
|
24
|
+
}
|
25
|
+
}))
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
export default LVideoOverlay
|
30
|
+
|