maplibre-gl-layer 0.2.2 → 0.2.3
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/README.md +3 -0
- package/dist/maplibre-gl-layer.d.ts +2 -0
- package/dist/maplibre-gl-layer.js +40 -34
- package/dist/maplibre-gl-layer.umd.cjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,9 +16,11 @@ export declare class LayerControl implements IControl {
|
|
|
16
16
|
private addedSources;
|
|
17
17
|
private addedLayers;
|
|
18
18
|
private layerDialog;
|
|
19
|
+
private layerChangeCallback;
|
|
19
20
|
constructor(options: LayerControlOptions);
|
|
20
21
|
onAdd(map: Map): HTMLElement;
|
|
21
22
|
onRemove(): void;
|
|
23
|
+
on(type: string, callback: (layer: Layer) => void): void;
|
|
22
24
|
private getPosition;
|
|
23
25
|
private createButton;
|
|
24
26
|
private changeLayer;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
class
|
|
1
|
+
var g = Object.defineProperty;
|
|
2
|
+
var m = (c, e, t) => e in c ? g(c, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : c[e] = t;
|
|
3
|
+
var s = (c, e, t) => m(c, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
+
class b {
|
|
5
5
|
constructor(e, t) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
s(this, "dialog");
|
|
7
|
+
s(this, "options");
|
|
8
|
+
s(this, "layerChangeCallback", () => {
|
|
9
9
|
});
|
|
10
10
|
this.options = e, this.dialog = document.createElement("dialog"), this.dialog.classList.add("maplibregl-ctrl-layer-dialog"), document.body.appendChild(this.dialog), this.dialog.addEventListener("click", () => {
|
|
11
11
|
this.dialog.close();
|
|
@@ -42,17 +42,19 @@ class m {
|
|
|
42
42
|
t === "top-right" ? (l = `${i.y}px`, o = `${i.x - this.dialog.clientWidth - 12}px`) : t === "top-left" ? (l = `${i.y}px`, o = `${i.x + i.width + 12}px`) : t === "bottom-right" ? (l = `${i.y - this.dialog.clientHeight + i.height}px`, o = `${i.x - this.dialog.clientWidth - 12}px`) : t === "bottom-left" && (l = `${i.y - this.dialog.clientHeight + i.height}px`, o = `${i.x + i.width + 12}px`), this.dialog.style.setProperty("top", l), this.dialog.style.setProperty("left", o);
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
class
|
|
45
|
+
class L {
|
|
46
46
|
constructor(e) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
47
|
+
s(this, "map", null);
|
|
48
|
+
s(this, "options");
|
|
49
|
+
s(this, "container");
|
|
50
|
+
s(this, "currentLayer");
|
|
51
|
+
s(this, "currentInitStyle", null);
|
|
52
|
+
s(this, "addedSources", {});
|
|
53
|
+
s(this, "addedLayers", []);
|
|
54
|
+
s(this, "layerDialog");
|
|
55
|
+
s(this, "layerChangeCallback", () => {
|
|
56
|
+
});
|
|
57
|
+
this.options = e, this.container = document.createElement("div"), this.container.classList.add("maplibregl-ctrl", "maplibregl-ctrl-group"), this.currentLayer = e.layers.find((t) => t.checked) || e.layers[0], this.layerDialog = new b(this.options, this.currentLayer), this.layerDialog.on("layerchange", (t) => {
|
|
56
58
|
this.changeLayer(t), this.layerDialog.close();
|
|
57
59
|
});
|
|
58
60
|
}
|
|
@@ -69,6 +71,9 @@ class b {
|
|
|
69
71
|
var e;
|
|
70
72
|
(e = this.container.parentNode) == null || e.removeChild(this.container);
|
|
71
73
|
}
|
|
74
|
+
on(e, t) {
|
|
75
|
+
e === "layerchange" && (this.layerChangeCallback = t);
|
|
76
|
+
}
|
|
72
77
|
getPosition() {
|
|
73
78
|
if (!this.map) return null;
|
|
74
79
|
const e = this.map._controlPositions;
|
|
@@ -81,39 +86,40 @@ class b {
|
|
|
81
86
|
return t.classList.add("maplibregl-ctrl-icon"), e.appendChild(t), e;
|
|
82
87
|
}
|
|
83
88
|
changeLayer(e) {
|
|
89
|
+
var u;
|
|
84
90
|
if (!this.map) return;
|
|
85
91
|
const t = this.currentInitStyle.layers, i = this.map.getStyle().layers, l = i.filter(
|
|
86
|
-
(
|
|
92
|
+
(a) => !t.some((r) => r.id === a.id)
|
|
87
93
|
);
|
|
88
94
|
this.addedLayers = [...this.addedLayers, ...l];
|
|
89
95
|
const o = t.filter(
|
|
90
|
-
(
|
|
96
|
+
(a) => !i.some((r) => r.id === a.id)
|
|
91
97
|
);
|
|
92
98
|
this.addedLayers = this.addedLayers.filter(
|
|
93
|
-
(
|
|
94
|
-
), this.addedLayers.forEach((
|
|
95
|
-
const
|
|
96
|
-
|
|
99
|
+
(a) => !o.some((r) => r.id === a.id)
|
|
100
|
+
), this.addedLayers.forEach((a) => {
|
|
101
|
+
const r = i.find((y) => y.id === a.id);
|
|
102
|
+
a.filter = r == null ? void 0 : r.filter;
|
|
97
103
|
});
|
|
98
104
|
const d = this.currentInitStyle.sources, n = this.map.getStyle().sources, h = {};
|
|
99
|
-
Object.entries(n).forEach(([
|
|
100
|
-
Object.keys(d).includes(
|
|
105
|
+
Object.entries(n).forEach(([a, r]) => {
|
|
106
|
+
Object.keys(d).includes(a) || (h[a] = r);
|
|
101
107
|
}), this.addedSources = { ...this.addedSources, ...h }, Object.keys(d).filter(
|
|
102
|
-
(
|
|
103
|
-
).forEach((
|
|
104
|
-
delete this.addedSources[
|
|
108
|
+
(a) => !Object.keys(n).includes(a)
|
|
109
|
+
).forEach((a) => {
|
|
110
|
+
delete this.addedSources[a];
|
|
105
111
|
}), this.map.setStyle(e.style, {
|
|
106
|
-
transformStyle: (
|
|
112
|
+
transformStyle: (a, r) => {
|
|
107
113
|
const y = {
|
|
108
|
-
...
|
|
109
|
-
sources: { ...
|
|
110
|
-
layers:
|
|
114
|
+
...r,
|
|
115
|
+
sources: { ...r.sources, ...this.addedSources },
|
|
116
|
+
layers: r.layers.concat(this.addedLayers)
|
|
111
117
|
};
|
|
112
118
|
return this.currentInitStyle = y, y;
|
|
113
119
|
}
|
|
114
|
-
});
|
|
120
|
+
}), this.currentLayer = e, (u = this.layerChangeCallback) == null || u.call(this, e);
|
|
115
121
|
}
|
|
116
122
|
}
|
|
117
123
|
export {
|
|
118
|
-
|
|
124
|
+
L as LayerControl
|
|
119
125
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(n,a){typeof exports=="object"&&typeof module<"u"?a(exports):typeof define=="function"&&define.amd?define(["exports"],a):(n=typeof globalThis<"u"?globalThis:n||self,a(n["maplibre-gl-layer"]={}))})(this,function(n){"use strict";var b=Object.defineProperty;var L=(n,a,h)=>a in n?b(n,a,{enumerable:!0,configurable:!0,writable:!0,value:h}):n[a]=h;var o=(n,a,h)=>L(n,typeof a!="symbol"?a+"":a,h);class a{constructor(e,t){o(this,"dialog");o(this,"options");o(this,"layerChangeCallback",()=>{});this.options=e,this.dialog=document.createElement("dialog"),this.dialog.classList.add("maplibregl-ctrl-layer-dialog"),document.body.appendChild(this.dialog),this.dialog.addEventListener("click",()=>{this.dialog.close()});const i=document.createElement("div");i.classList.add("maplibregl-ctrl-layer-dialog-content"),i.addEventListener("click",s=>{s.stopPropagation()}),this.dialog.appendChild(i),this.options.layers.forEach(s=>{const d=document.createElement("div");d.classList.add("maplibregl-ctrl-layer-dialog-item");const y=document.createElement("label");d.appendChild(y);const c=document.createElement("input");c.setAttribute("type","radio"),c.setAttribute("name","layer"),t.name===s.name&&c.setAttribute("checked","checked"),c.addEventListener("change",()=>{var g;(g=this.layerChangeCallback)==null||g.call(this,s)}),y.appendChild(c);const u=document.createElement("span");u.textContent=s.name,y.appendChild(u),i.appendChild(d)})}open(e,t=null){this.dialog.showModal(),this.setPosition(e,t)}close(){this.dialog.close()}on(e,t){e==="layerchange"&&(this.layerChangeCallback=t)}setPosition(e,t){const i=e.getBoundingClientRect();let s="",d="";t==="top-right"?(s=`${i.y}px`,d=`${i.x-this.dialog.clientWidth-12}px`):t==="top-left"?(s=`${i.y}px`,d=`${i.x+i.width+12}px`):t==="bottom-right"?(s=`${i.y-this.dialog.clientHeight+i.height}px`,d=`${i.x-this.dialog.clientWidth-12}px`):t==="bottom-left"&&(s=`${i.y-this.dialog.clientHeight+i.height}px`,d=`${i.x+i.width+12}px`),this.dialog.style.setProperty("top",s),this.dialog.style.setProperty("left",d)}}class h{constructor(e){o(this,"map",null);o(this,"options");o(this,"container");o(this,"currentLayer");o(this,"currentInitStyle",null);o(this,"addedSources",{});o(this,"addedLayers",[]);o(this,"layerDialog");o(this,"layerChangeCallback",()=>{});this.options=e,this.container=document.createElement("div"),this.container.classList.add("maplibregl-ctrl","maplibregl-ctrl-group"),this.currentLayer=e.layers.find(t=>t.checked)||e.layers[0],this.layerDialog=new a(this.options,this.currentLayer),this.layerDialog.on("layerchange",t=>{this.changeLayer(t),this.layerDialog.close()})}onAdd(e){this.map=e,this.currentInitStyle=this.map.getStyle(),this.currentInitStyle||this.map.once("style.load",()=>{this.map&&(this.currentInitStyle=this.map.getStyle())});const t=this.createButton();return t.addEventListener("click",()=>{this.layerDialog.open(t,this.getPosition())}),this.container.appendChild(t),this.container}onRemove(){var e;(e=this.container.parentNode)==null||e.removeChild(this.container)}on(e,t){e==="layerchange"&&(this.layerChangeCallback=t)}getPosition(){if(!this.map)return null;const e=this.map._controlPositions;return e["top-left"].querySelector(".maplibregl-ctrl-layer")?"top-left":e["top-right"].querySelector(".maplibregl-ctrl-layer")?"top-right":e["bottom-left"].querySelector(".maplibregl-ctrl-layer")?"bottom-left":e["bottom-right"].querySelector(".maplibregl-ctrl-layer")?"bottom-right":null}createButton(){const e=document.createElement("button");e.classList.add("maplibregl-ctrl-layer"),e.setAttribute("title","Change map style"),e.setAttribute("aria-label","Change map style");const t=document.createElement("i");return t.classList.add("maplibregl-ctrl-icon"),e.appendChild(t),e}changeLayer(e){var m;if(!this.map)return;const t=this.currentInitStyle.layers,i=this.map.getStyle().layers,s=i.filter(l=>!t.some(r=>r.id===l.id));this.addedLayers=[...this.addedLayers,...s];const d=t.filter(l=>!i.some(r=>r.id===l.id));this.addedLayers=this.addedLayers.filter(l=>!d.some(r=>r.id===l.id)),this.addedLayers.forEach(l=>{const r=i.find(p=>p.id===l.id);l.filter=r==null?void 0:r.filter});const y=this.currentInitStyle.sources,c=this.map.getStyle().sources,u={};Object.entries(c).forEach(([l,r])=>{Object.keys(y).includes(l)||(u[l]=r)}),this.addedSources={...this.addedSources,...u},Object.keys(y).filter(l=>!Object.keys(c).includes(l)).forEach(l=>{delete this.addedSources[l]}),this.map.setStyle(e.style,{transformStyle:(l,r)=>{const p={...r,sources:{...r.sources,...this.addedSources},layers:r.layers.concat(this.addedLayers)};return this.currentInitStyle=p,p}}),this.currentLayer=e,(m=this.layerChangeCallback)==null||m.call(this,e)}}n.LayerControl=h,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"})});
|