pwaLUPMIS2/node_modules/.vite/deps/ol-ext_control_LayerSwitcher.js
2026-03-04 12:59:40 +01:00

1041 lines
33 KiB
JavaScript

import {
Heatmap_default,
VectorTile_default
} from "./chunk-YUMATXXX.js";
import {
Image_default
} from "./chunk-E7S7Q7VV.js";
import {
element_default
} from "./chunk-S3QBQTEW.js";
import "./chunk-V7WRBSQ6.js";
import "./chunk-W7BDJOQY.js";
import "./chunk-7JXPN73Q.js";
import "./chunk-E53S5GN6.js";
import {
Tile_default
} from "./chunk-UNDFRJ2M.js";
import {
Vector_default
} from "./chunk-T3TT2KJN.js";
import "./chunk-HM3IY3H4.js";
import "./chunk-JFXZSSOM.js";
import "./chunk-ZUI5NXIU.js";
import "./chunk-I4Q72WOW.js";
import "./chunk-RTVPCGIJ.js";
import "./chunk-MSWSBYBR.js";
import "./chunk-QCJTGAWF.js";
import "./chunk-CAVOO5JW.js";
import {
Control_default
} from "./chunk-VRTURNK3.js";
import "./chunk-2C73OZ6M.js";
import "./chunk-M5TTSD4C.js";
import "./chunk-ZCRXKB7J.js";
import "./chunk-RW3V7S4F.js";
import "./chunk-PAB2HIXK.js";
import "./chunk-I6K7MRGV.js";
import "./chunk-PGWX4545.js";
import "./chunk-AYBYZSAV.js";
import "./chunk-YLJGUH5Z.js";
import "./chunk-AZGMK675.js";
import "./chunk-BHVDQB66.js";
import "./chunk-6EWLK2BW.js";
import "./chunk-7XMWB3J4.js";
import "./chunk-5D2XPBR2.js";
import "./chunk-SHUBVYN4.js";
import "./chunk-FM44FOIC.js";
import "./chunk-LMC3RO5P.js";
import "./chunk-X52LGBOS.js";
import "./chunk-QFCIXVZ3.js";
import "./chunk-A3RXLHYB.js";
import "./chunk-ZLPTRF2L.js";
import "./chunk-54BTDBAD.js";
import "./chunk-UPTVWZ45.js";
import "./chunk-5XHD7RSF.js";
import "./chunk-Q5ZULJHM.js";
import {
unByKey
} from "./chunk-NGFXCWUF.js";
import "./chunk-K25ZO44T.js";
import {
intersects
} from "./chunk-SRXHWJOY.js";
import "./chunk-5RHQVMYD.js";
import "./chunk-DC5AMYBS.js";
// node_modules/ol-ext/control/LayerSwitcher.js
var ol_control_LayerSwitcher = class olcontrolLayerSwitcher extends Control_default {
constructor(options) {
options = options || {};
var element = element_default.create("DIV", {
className: options.switcherClass || "ol-layerswitcher"
});
super({
element,
target: options.target
});
var self = this;
this.dcount = 0;
this.show_progress = options.show_progress;
this.oninfo = typeof options.oninfo == "function" ? options.oninfo : null;
this.onextent = typeof options.onextent == "function" ? options.onextent : null;
this.hasextent = options.extent || options.onextent;
this.hastrash = options.trash;
this.reordering = options.reordering !== false;
this._layers = [];
this._layerGroup = options.layerGroup && options.layerGroup.getLayers ? options.layerGroup : null;
this.onchangeCheck = typeof options.onchangeCheck == "function" ? options.onchangeCheck : null;
if (typeof options.displayInLayerSwitcher === "function") {
this.displayInLayerSwitcher = options.displayInLayerSwitcher;
}
if (!options.target) {
element.classList.add("ol-unselectable");
element.classList.add("ol-control");
element.classList.add(options.collapsed !== false ? "ol-collapsed" : "ol-forceopen");
if (options.counter) element.classList.add("ol-counter");
this.counter = element_default.create("SPAN", {
class: "ol-counter",
text: 0,
parent: element
});
this.button = element_default.create("BUTTON", {
type: "button",
parent: element
});
this.button.addEventListener("touchstart", function(e) {
element.classList.toggle("ol-forceopen");
element.classList.add("ol-collapsed");
self.dispatchEvent({ type: "toggle", collapsed: element.classList.contains("ol-collapsed") });
e.preventDefault();
self.overflow();
});
this.button.addEventListener("click", function() {
element.classList.toggle("ol-forceopen");
element.classList.add("ol-collapsed");
self.dispatchEvent({ type: "toggle", collapsed: !element.classList.contains("ol-forceopen") });
self.overflow();
});
if (options.mouseover) {
element.addEventListener("mouseleave", function() {
element.classList.add("ol-collapsed");
self.dispatchEvent({ type: "toggle", collapsed: true });
});
element.addEventListener("mouseover", function() {
element.classList.remove("ol-collapsed");
self.dispatchEvent({ type: "toggle", collapsed: false });
});
}
if (options.minibar)
options.noScroll = true;
if (!options.noScroll) {
this.topv = element_default.create("DIV", {
className: "ol-switchertopdiv",
parent: element,
click: function() {
self.overflow("+50%");
}
});
this.botv = element_default.create("DIV", {
className: "ol-switcherbottomdiv",
parent: element,
click: function() {
self.overflow("-50%");
}
});
}
this._noScroll = options.noScroll;
}
this.panel_ = element_default.create("UL", {
className: "panel"
});
this.panelContainer_ = element_default.create("DIV", {
className: "panel-container",
html: this.panel_,
parent: element
});
if (!options.target && !options.noScroll) {
element_default.addListener(this.panel_, "mousewheel DOMMouseScroll onmousewheel", function(e) {
if (self.overflow(Math.max(-1, Math.min(1, e.wheelDelta || -e.detail)))) {
e.stopPropagation();
e.preventDefault();
}
});
}
this.header_ = element_default.create("LI", {
className: "ol-header",
parent: this.panel_
});
this.set("drawDelay", options.drawDelay || 0);
this.set("selection", options.selection);
if (options.minibar) {
setTimeout((function() {
var mbar = element_default.scrollDiv(this.panelContainer_, {
mousewheel: true,
vertical: true,
minibar: true
});
this.on(["drawlist", "toggle"], function() {
mbar.refresh();
});
}).bind(this));
}
}
/** Test if a layer should be displayed in the switcher
* @param {ol.layer} layer
* @return {boolean} true if the layer is displayed
*/
displayInLayerSwitcher(layer) {
return layer.get("displayInLayerSwitcher") !== false;
}
/**
* Set the map instance the control is associated with.
* @param {_ol_Map_} map The map instance.
*/
setMap(map) {
super.setMap(map);
this.drawPanel();
if (this._listener) {
for (var i in this._listener) {
unByKey(this._listener[i]);
}
}
this._listener = null;
if (map) {
this._listener = {
moveend: map.on("moveend", this.viewChange.bind(this)),
size: map.on("change:size", this.overflow.bind(this))
};
if (this._layerGroup) {
this._listener.change = this._layerGroup.getLayers().on("change:length", this.drawPanel.bind(this));
} else {
this._listener.change = map.getLayerGroup().getLayers().on("change:length", this.drawPanel.bind(this));
}
}
}
/** Show control
*/
show() {
this.element.classList.add("ol-forceopen");
this.overflow();
this.dispatchEvent({ type: "toggle", collapsed: false });
}
/** Hide control
*/
hide() {
this.element.classList.remove("ol-forceopen");
this.overflow();
this.dispatchEvent({ type: "toggle", collapsed: true });
}
/** Toggle control
*/
toggle() {
this.element.classList.toggle("ol-forceopen");
this.overflow();
this.dispatchEvent({ type: "toggle", collapsed: !this.isOpen() });
}
/** Is control open
* @return {boolean}
*/
isOpen() {
return this.element.classList.contains("ol-forceopen");
}
/** Add a custom header
* @param {Element|string} html content html
*/
setHeader(html) {
element_default.setHTML(this.header_, html);
}
/** Calculate overflow and add scrolls
* @param {Number} dir scroll direction -1|0|1|'+50%'|'-50%'
* @private
*/
overflow(dir) {
if (this.button && !this._noScroll) {
if (element_default.hidden(this.panel_)) {
element_default.setStyle(this.element, { height: "auto" });
return;
}
var h = element_default.outerHeight(this.element);
var hp = element_default.outerHeight(this.panel_);
var dh = this.button.offsetTop + element_default.outerHeight(this.button);
var top = this.panel_.offsetTop - dh;
if (hp > h - dh) {
element_default.setStyle(this.element, { height: "100%" });
var li = this.panel_.querySelectorAll("li.ol-visible .li-content")[0];
var lh = li ? 2 * element_default.getStyle(li, "height") : 0;
switch (dir) {
case 1:
top += lh;
break;
case -1:
top -= lh;
break;
case "+50%":
top += Math.round(h / 2);
break;
case "-50%":
top -= Math.round(h / 2);
break;
default:
break;
}
if (top + hp <= h - 3 * dh / 2) {
top = h - 3 * dh / 2 - hp;
element_default.hide(this.botv);
} else {
element_default.show(this.botv);
}
if (top >= 0) {
top = 0;
element_default.hide(this.topv);
} else {
element_default.show(this.topv);
}
element_default.setStyle(this.panel_, { top: top + "px" });
return true;
} else {
element_default.setStyle(this.element, { height: "auto" });
element_default.setStyle(this.panel_, { top: 0 });
element_default.hide(this.botv);
element_default.hide(this.topv);
return false;
}
} else
return false;
}
/** Set the layer associated with a li
* @param {Element} li
* @param {ol.layer} layer
* @private
*/
_setLayerForLI(li, layer) {
var listeners = [];
if (layer.getLayers) {
listeners.push(layer.getLayers().on("change:length", this.drawPanel.bind(this)));
}
if (li) {
listeners.push(layer.on("change:opacity", (function() {
this.setLayerOpacity(layer, li);
}).bind(this)));
listeners.push(layer.on("change:visible", (function() {
this.setLayerVisibility(layer, li);
}).bind(this)));
}
listeners.push(layer.on("propertychange", (function(e) {
if (e.key === "displayInLayerSwitcher" || e.key === "openInLayerSwitcher" || e.key === "title" || e.key === "name") {
this.drawPanel(e);
}
}).bind(this)));
this._layers.push({ li, layer, listeners });
}
/** Set opacity for a layer
* @param {ol.layer.Layer} layer
* @param {Element} li the list element
* @private
*/
setLayerOpacity(layer, li) {
var i = li.querySelector(".layerswitcher-opacity-cursor");
if (i) {
i.style.left = layer.getOpacity() * 100 + "%";
}
this.dispatchEvent({ type: "layer:opacity", layer });
}
/** Set visibility for a layer
* @param {ol.layer.Layer} layer
* @param {Element} li the list element
* @api
*/
setLayerVisibility(layer, li) {
var i = li.querySelector(".ol-visibility");
if (i) {
i.checked = layer.getVisible();
}
if (layer.getVisible()) {
li.classList.add("ol-visible");
} else {
li.classList.remove("ol-visible");
}
this.dispatchEvent({ type: "layer:visible", layer });
}
/** Clear layers associated with li
* @private
*/
_clearLayerForLI() {
this._layers.forEach(function(li) {
li.listeners.forEach(function(l) {
unByKey(l);
});
});
this._layers = [];
}
/** Get the layer associated with a li
* @param {Element} li
* @return {ol.layer}
* @private
*/
_getLayerForLI(li) {
for (var i = 0, l; l = this._layers[i]; i++) {
if (l.li === li) {
return l.layer;
}
}
return null;
}
/**
* On view change hide layer depending on resolution / extent
* @private
*/
viewChange() {
this.panel_.querySelectorAll("li").forEach((function(li) {
var l = this._getLayerForLI(li);
if (l) {
if (this.testLayerVisibility(l)) {
li.classList.remove("ol-layer-hidden");
} else {
li.classList.add("ol-layer-hidden");
}
}
}).bind(this));
}
/** Get control panel
* @api
*/
getPanel() {
return this.panelContainer_;
}
/** Draw the panel control (prevent multiple draw due to layers manipulation on the map with a delay function)
* @api
*/
drawPanel() {
if (!this.getMap())
return;
var self = this;
this.dcount++;
setTimeout(function() {
self.drawPanel_();
}, this.get("drawDelay") || 0);
}
/** Delayed draw panel control
* @private
*/
drawPanel_() {
if (--this.dcount || this.dragging_) {
return;
}
var scrollTop = this.panelContainer_.scrollTop;
this._clearLayerForLI();
this.panel_.querySelectorAll("li").forEach((function(li) {
if (!li.classList.contains("ol-header")) li.remove();
}).bind(this));
if (this._layerGroup) {
this.drawList(this.panel_, this._layerGroup.getLayers());
} else if (this.getMap()) {
this.drawList(this.panel_, this.getMap().getLayers());
}
this.panelContainer_.scrollTop = scrollTop;
if (this.counter) {
this.counter.innerHTML = this.panel_.parentNode.querySelectorAll("ul.panel > li:not(.ol-header)").length;
}
}
/** Change layer visibility according to the baselayer option
* @param {ol.layer}
* @param {Array<ol.layer>} related layers
* @private
*/
switchLayerVisibility(l, layers) {
if (!l.get("baseLayer")) {
l.setVisible(!l.getVisible());
} else {
if (!l.getVisible()) {
l.setVisible(true);
}
layers.forEach(function(li) {
if (l !== li && li.get("baseLayer") && li.getVisible()) {
li.setVisible(false);
}
});
}
}
/** Check if layer is on the map (depending on resolution / zoom and extent)
* @param {ol.layer}
* @return {boolean}
* @private
*/
testLayerVisibility(layer) {
if (!this.getMap())
return true;
var res = this.getMap().getView().getResolution();
var zoom = this.getMap().getView().getZoom();
if (layer.getMaxResolution() <= res || layer.getMinResolution() >= res) {
return false;
} else if (layer.getMinZoom && (layer.getMinZoom() >= zoom || layer.getMaxZoom() < zoom)) {
return false;
} else {
var ex0 = layer.getExtent();
if (ex0) {
var ex = this.getMap().getView().calculateExtent(this.getMap().getSize());
return intersects(ex, ex0);
}
return true;
}
}
/** Start ordering the list
* @param {event} e drag event
* @private
*/
dragOrdering_(e) {
e.stopPropagation();
e.preventDefault();
var self = this;
var elt = e.currentTarget.parentNode.parentNode;
var start = true;
var panel = this.panel_;
var pageY;
var pageY0 = e.pageY || e.touches && e.touches.length && e.touches[0].pageY || e.changedTouches && e.changedTouches.length && e.changedTouches[0].pageY;
var target, dragElt;
var layer, group;
elt.parentNode.classList.add("drag");
function stop() {
if (target) {
var drop = layer;
var isSelected = self.getSelection() === drop;
if (drop && target) {
var collection;
if (group) {
collection = group.getLayers();
} else {
collection = self._layerGroup ? self._layerGroup.getLayers() : self.getMap().getLayers();
}
var layers = collection.getArray();
for (var i = 0; i < layers.length; i++) {
if (layers[i] == drop) {
collection.removeAt(i);
break;
}
}
for (var j = 0; j < layers.length; j++) {
if (layers[j] === target) {
if (i > j) {
collection.insertAt(j, drop);
} else {
collection.insertAt(j + 1, drop);
}
break;
}
}
}
if (isSelected) self.selectLayer(drop);
self.dispatchEvent({ type: "reorder-end", layer: drop, group });
}
elt.parentNode.querySelectorAll("li").forEach(function(li) {
li.classList.remove("dropover");
li.classList.remove("dropover-after");
li.classList.remove("dropover-before");
});
elt.classList.remove("drag");
elt.parentNode.classList.remove("drag");
self.element.classList.remove("drag");
if (dragElt)
dragElt.remove();
element_default.removeListener(document, "mousemove touchmove", move);
element_default.removeListener(document, "mouseup touchend touchcancel", stop);
}
function move(e2) {
pageY = e2.pageY || e2.touches && e2.touches.length && e2.touches[0].pageY || e2.changedTouches && e2.changedTouches.length && e2.changedTouches[0].pageY;
if (start && Math.abs(pageY0 - pageY) > 2) {
start = false;
elt.classList.add("drag");
layer = self._getLayerForLI(elt);
target = false;
group = self._getLayerForLI(elt.parentNode.parentNode);
dragElt = element_default.create("LI", {
className: "ol-dragover",
html: elt.innerHTML,
style: {
position: "absolute",
"z-index": 1e4,
left: elt.offsetLeft,
opacity: 0.5,
width: element_default.outerWidth(elt),
height: element_default.getStyle(elt, "height")
},
parent: panel
});
self.element.classList.add("drag");
self.dispatchEvent({ type: "reorder-start", layer, group });
}
if (!start) {
e2.preventDefault();
e2.stopPropagation();
element_default.setStyle(dragElt, { top: pageY - element_default.offsetRect(panel).top + panel.scrollTop + 5 });
var li;
if (!e2.touches) {
li = e2.target;
if (e2.target.shadowRoot) {
li = e2.composedPath()[0];
}
} else {
li = document.elementFromPoint(e2.touches[0].clientX, e2.touches[0].clientY);
while (li.shadowRoot) {
li = li.shadowRoot.elementFromPoint(e2.touches[0].clientX, e2.touches[0].clientY);
}
}
if (li.classList.contains("ol-switcherbottomdiv")) {
self.overflow(-1);
} else if (li.classList.contains("ol-switchertopdiv")) {
self.overflow(1);
}
while (li && li.tagName !== "LI") {
li = li.parentNode;
}
if (!li || !li.classList.contains("dropover")) {
elt.parentNode.querySelectorAll("li").forEach(function(li2) {
li2.classList.remove("dropover");
li2.classList.remove("dropover-after");
li2.classList.remove("dropover-before");
});
}
if (li && li.parentNode.classList.contains("drag") && li !== elt) {
target = self._getLayerForLI(li);
if (target && !target.get("allwaysOnTop") == !layer.get("allwaysOnTop")) {
li.classList.add("dropover");
li.classList.add(elt.offsetTop < li.offsetTop ? "dropover-after" : "dropover-before");
} else {
target = false;
}
element_default.show(dragElt);
} else {
target = false;
if (li === elt)
element_default.hide(dragElt);
else
element_default.show(dragElt);
}
if (!target)
dragElt.classList.add("forbidden");
else
dragElt.classList.remove("forbidden");
}
}
element_default.addListener(document, "mousemove touchmove", move);
element_default.addListener(document, "mouseup touchend touchcancel", stop);
}
/** Change opacity on drag
* @param {event} e drag event
* @private
*/
dragOpacity_(e) {
e.stopPropagation();
e.preventDefault();
var self = this;
var elt = e.target;
var layer = this._getLayerForLI(elt.parentNode.parentNode.parentNode);
if (!layer)
return;
var x = e.pageX || e.touches && e.touches.length && e.touches[0].pageX || e.changedTouches && e.changedTouches.length && e.changedTouches[0].pageX;
var start = element_default.getStyle(elt, "left") - x;
self.dragging_ = true;
function stop() {
element_default.removeListener(document, "mouseup touchend touchcancel", stop);
element_default.removeListener(document, "mousemove touchmove", move);
self.dragging_ = false;
}
function move(e2) {
var x2 = e2.pageX || e2.touches && e2.touches.length && e2.touches[0].pageX || e2.changedTouches && e2.changedTouches.length && e2.changedTouches[0].pageX;
var delta = (start + x2) / element_default.getStyle(elt.parentNode, "width");
var opacity = Math.max(0, Math.min(1, delta));
element_default.setStyle(elt, { left: opacity * 100 + "%" });
elt.parentNode.nextElementSibling.innerHTML = Math.round(opacity * 100);
layer.setOpacity(opacity);
}
element_default.addListener(document, "mouseup touchend touchcancel", stop);
element_default.addListener(document, "mousemove touchmove", move);
}
/** Render a list of layer
* @param {Elemen} element to render
* @layers {Array{ol.layer}} list of layer to show
* @api stable
* @private
*/
drawList(ul, collection) {
var self = this;
var layers = collection.getArray();
var setVisibility = function(e) {
e.stopPropagation();
e.preventDefault();
var l = self._getLayerForLI(this.parentNode.parentNode);
self.switchLayerVisibility(l, collection);
if (self.get("selection") && l.getVisible()) {
self.selectLayer(l);
}
if (self.onchangeCheck) {
self.onchangeCheck(l);
}
};
function onInfo(e) {
e.stopPropagation();
e.preventDefault();
var l = self._getLayerForLI(this.parentNode.parentNode);
self.oninfo(l);
self.dispatchEvent({ type: "info", layer: l });
}
function zoomExtent(e) {
e.stopPropagation();
e.preventDefault();
var l = self._getLayerForLI(this.parentNode.parentNode);
if (self.onextent) {
self.onextent(l);
} else {
self.getMap().getView().fit(l.getExtent(), self.getMap().getSize());
}
self.dispatchEvent({ type: "extent", layer: l });
}
function removeLayer(e) {
e.stopPropagation();
e.preventDefault();
var li = this.parentNode.parentNode.parentNode.parentNode;
var layer, group = self._getLayerForLI(li);
if (group) {
layer = self._getLayerForLI(this.parentNode.parentNode);
group.getLayers().remove(layer);
if (group.getLayers().getLength() == 0 && !group.get("noSwitcherDelete")) {
removeLayer.call(li.querySelectorAll(".layerTrash")[0], e);
}
} else {
li = this.parentNode.parentNode;
self.getMap().removeLayer(self._getLayerForLI(li));
}
}
function createLi(layer) {
if (!this.displayInLayerSwitcher(layer)) {
this._setLayerForLI(null, layer);
return;
}
var li = element_default.create("LI", {
className: (layer.getVisible() ? "ol-visible " : " ") + (layer.get("baseLayer") ? "baselayer" : ""),
parent: ul
});
this._setLayerForLI(li, layer);
if (this._selectedLayer === layer) {
li.classList.add("ol-layer-select");
}
var layer_buttons = element_default.create("DIV", {
className: "ol-layerswitcher-buttons",
parent: li
});
var d = element_default.create("DIV", {
className: "li-content",
parent: li
});
var input = element_default.create("INPUT", {
type: layer.get("baseLayer") ? "radio" : "checkbox",
className: "ol-visibility",
checked: layer.getVisible(),
click: function(e) {
setVisibility.bind(this)(e);
setTimeout(function() {
e.target.checked = layer.getVisible();
});
},
on: {
// Set opacity on keydown
keydown: (function(e) {
switch (e.key) {
// Change opacity on arrow
case "ArrowLeft":
case "ArrowRight": {
e.preventDefault();
e.stopPropagation();
var delta = e.key === "ArrowLeft" ? -0.1 : 0.1;
var opacity2 = Math.min(1, Math.max(0, layer.getOpacity() + delta));
layer.setOpacity(opacity2);
break;
}
// Select on enter
case "Enter": {
if (self.get("selection")) {
e.preventDefault();
e.stopPropagation();
self.selectLayer(layer);
}
break;
}
// Expend
case "-":
case "+": {
if (layer.getLayers) {
this._focus = layer;
layer.set("openInLayerSwitcher", !layer.get("openInLayerSwitcher"));
}
}
// Move up dans down
// fallthrough
case "ArrowUp":
case "ArrowDown": {
if (e.ctrlKey && this.reordering) {
e.preventDefault();
e.stopPropagation();
var pos = collection.getArray().indexOf(layer);
if (pos > -1) {
if (e.key === "ArrowDown") {
if (pos > 0) {
collection.remove(layer);
collection.insertAt(pos - 1, layer);
self._focus = layer;
self.dispatchEvent({ type: "reorder-end", layer });
}
} else {
if (pos < collection.getLength() - 1) {
collection.remove(layer);
collection.insertAt(pos + 1, layer);
self._focus = layer;
self.dispatchEvent({ type: "reorder-end", layer });
}
}
}
}
break;
}
default: {
var group = this._getLayerForLI(ul.parentNode);
this.dispatchEvent({ type: "layer:keydown", key: e.key, group, li, layer, originalEvent: e });
}
}
}).bind(this)
},
parent: d
});
if (layer === self._focus) {
input.focus();
self.overflow();
}
var label = element_default.create("LABEL", {
title: layer.get("title") || layer.get("name"),
click: setVisibility,
style: {
userSelect: "none"
},
parent: d
});
label.addEventListener("selectstart", function() {
return false;
});
element_default.create("SPAN", {
html: layer.get("title") || layer.get("name"),
click: (function(e) {
if (this.get("selection")) {
e.stopPropagation();
this.selectLayer(layer);
}
}).bind(this),
parent: label
});
if (this.reordering) {
if (i < layers.length - 1 && (layer.get("allwaysOnTop") || !layers[i + 1].get("allwaysOnTop")) || i > 0 && (!layer.get("allwaysOnTop") || layers[i - 1].get("allwaysOnTop"))) {
element_default.create("DIV", {
className: "layerup ol-noscroll",
title: this.tip.up,
on: { "mousedown touchstart": function(e) {
self.dragOrdering_(e);
} },
parent: layer_buttons
});
}
}
if (layer.getLayers) {
var nb = 0;
layer.getLayers().forEach(function(l) {
if (self.displayInLayerSwitcher(l))
nb++;
});
if (nb) {
element_default.create("DIV", {
className: layer.get("openInLayerSwitcher") ? "collapse-layers" : "expend-layers",
title: this.tip.plus,
click: function() {
var l = self._getLayerForLI(this.parentNode.parentNode);
l.set("openInLayerSwitcher", !l.get("openInLayerSwitcher"));
},
parent: layer_buttons
});
}
}
if (this.oninfo) {
element_default.create("DIV", {
className: "layerInfo",
title: this.tip.info,
click: onInfo,
parent: layer_buttons
});
}
if (this.hastrash && !layer.get("noSwitcherDelete")) {
element_default.create("DIV", {
className: "layerTrash",
title: this.tip.trash,
click: removeLayer,
parent: layer_buttons
});
}
if (this.hasextent && layers[i].getExtent()) {
var ex = layers[i].getExtent();
if (ex.length == 4 && ex[0] < ex[2] && ex[1] < ex[3]) {
element_default.create("DIV", {
className: "layerExtent",
title: this.tip.extent,
click: zoomExtent,
parent: layer_buttons
});
}
}
if (this.show_progress && layer instanceof Tile_default) {
var p = element_default.create("DIV", {
className: "layerswitcher-progress",
parent: d
});
this.setprogress_(layer);
layer.layerswitcher_progress = element_default.create("DIV", { parent: p });
}
var opacity = element_default.create("DIV", {
className: "layerswitcher-opacity",
// Click on the opacity line
click: function(e) {
if (e.target !== this)
return;
e.stopPropagation();
e.preventDefault();
var op = Math.max(0, Math.min(1, e.offsetX / element_default.getStyle(this, "width")));
self._getLayerForLI(this.parentNode.parentNode).setOpacity(op);
this.parentNode.querySelectorAll(".layerswitcher-opacity-label")[0].innerHTML = Math.round(op * 100);
},
parent: d
});
element_default.create("DIV", {
className: "layerswitcher-opacity-cursor ol-noscroll",
style: { left: layer.getOpacity() * 100 + "%" },
on: {
"mousedown touchstart": function(e) {
self.dragOpacity_(e);
}
},
parent: opacity
});
element_default.create("DIV", {
className: "layerswitcher-opacity-label",
html: Math.round(layer.getOpacity() * 100),
parent: d
});
if (layer.getLayers) {
li.classList.add("ol-layer-group");
if (layer.get("openInLayerSwitcher") === true) {
var ul2 = element_default.create("UL", {
parent: li
});
this.drawList(ul2, layer.getLayers());
}
}
li.classList.add(this.getLayerClass(layer));
this.dispatchEvent({ type: "drawlist", layer, li });
}
for (var i = layers.length - 1; i >= 0; i--) {
createLi.call(this, layers[i]);
}
this.viewChange();
if (ul === this.panel_) {
this.overflow("");
this._focus = null;
}
}
/** Select a layer
* @param {ol.layer.Layer} layer
* @returns {string} the layer classname
* @api
*/
getLayerClass(layer) {
if (!layer)
return "none";
if (layer.getLayers)
return "ol-layer-group";
if (layer instanceof Vector_default)
return "ol-layer-vector";
if (layer instanceof VectorTile_default)
return "ol-layer-vectortile";
if (layer instanceof Tile_default)
return "ol-layer-tile";
if (layer instanceof Image_default)
return "ol-layer-image";
if (layer instanceof Heatmap_default)
return "ol-layer-heatmap";
if (layer.getFeatures)
return "ol-layer-vectorimage";
return "unknown";
}
/** Select a layer
* @param {ol.layer.Layer} layer
* @api
*/
selectLayer(layer, silent) {
if (!layer) {
if (!this.getMap())
return;
layer = this.getMap().getLayers().item(this.getMap().getLayers().getLength() - 1);
}
this._selectedLayer = layer;
if (this.element.querySelector("input.ol-visibility:focus")) {
this._focus = layer;
}
this.drawPanel();
if (!silent) {
this.dispatchEvent({ type: "select", layer });
}
}
/** Get selected layer
* @returns {ol.layer.Layer}
*/
getSelection() {
return this._selectedLayer;
}
/** Handle progress bar for a layer
* @private
*/
setprogress_(layer) {
if (!layer.layerswitcher_progress) {
var loaded = 0;
var loading = 0;
var draw = function() {
if (loading === loaded) {
loading = loaded = 0;
element_default.setStyle(layer.layerswitcher_progress, { width: 0 });
} else {
element_default.setStyle(layer.layerswitcher_progress, { width: (loaded / loading * 100).toFixed(1) + "%" });
}
};
layer.getSource().on("tileloadstart", function() {
loading++;
draw();
});
layer.getSource().on("tileloadend", function() {
loaded++;
draw();
});
layer.getSource().on("tileloaderror", function() {
loaded++;
draw();
});
}
}
};
ol_control_LayerSwitcher.prototype.tip = {
up: "up/down",
down: "down",
info: "informations...",
extent: "zoom to extent",
trash: "remove layer",
plus: "expand/shrink"
};
var LayerSwitcher_default = ol_control_LayerSwitcher;
export {
LayerSwitcher_default as default
};
//# sourceMappingURL=ol-ext_control_LayerSwitcher.js.map