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.
@@ -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
@@ -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
+