leaflet-html 0.1.6 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|