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

505 lines
16 KiB
JavaScript

import {
element_default
} from "./chunk-S3QBQTEW.js";
import "./chunk-I4Q72WOW.js";
import {
Pointer_default
} from "./chunk-RTVPCGIJ.js";
import {
Interaction_default
} from "./chunk-MSWSBYBR.js";
import "./chunk-QCJTGAWF.js";
import "./chunk-CAVOO5JW.js";
import "./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 {
Overlay_default
} from "./chunk-C6SRSVJF.js";
import "./chunk-BHVDQB66.js";
import "./chunk-6EWLK2BW.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 "./chunk-SRXHWJOY.js";
import "./chunk-5RHQVMYD.js";
import "./chunk-DC5AMYBS.js";
// node_modules/ol-ext/interaction/DragOverlay.js
var ol_interaction_DragOverlay = class olinteractionDragOverlay extends Pointer_default {
constructor(options) {
options = options || {};
var offset = options.offset || [0, 0];
var centerOnClick = options.centerOnClick || false;
super({
// start draging on an overlay
handleDownEvent: function(evt) {
var res = evt.frameState.viewState.resolution;
var coordinate = [evt.coordinate[0] + offset[0] * res, evt.coordinate[1] - offset[1] * res];
if (/^(BUTTON|A)$/.test(evt.originalEvent.target.tagName)) {
this._dragging = false;
return true;
}
if (this._dragging) {
if (centerOnClick) {
this._dragging.setPosition(coordinate, true);
}
var coordinateInitial = this._dragging.getPosition();
this._dragging.offsetClick = [coordinate[0] - coordinateInitial[0], coordinate[1] - coordinateInitial[1]];
this.dispatchEvent({
type: "dragstart",
overlay: this._dragging,
originalEvent: evt.originalEvent,
frameState: evt.frameState,
coordinate: coordinateInitial
});
return true;
}
return false;
},
// Drag
handleDragEvent: function(evt) {
var res = evt.frameState.viewState.resolution;
var coordinate = [evt.coordinate[0] + offset[0] * res, evt.coordinate[1] - offset[1] * res];
if (this._dragging) {
coordinate = [coordinate[0] - this._dragging.offsetClick[0], coordinate[1] - this._dragging.offsetClick[1]];
this._dragging.setPosition(coordinate, true);
this.dispatchEvent({
type: "dragging",
overlay: this._dragging,
originalEvent: evt.originalEvent,
frameState: evt.frameState,
coordinate
});
}
},
// Stop dragging
handleUpEvent: function(evt) {
var res = evt.frameState.viewState.resolution;
var coordinate = [evt.coordinate[0] + offset[0] * res, evt.coordinate[1] - offset[1] * res];
if (this._dragging) {
coordinate = [coordinate[0] - this._dragging.offsetClick[0], coordinate[1] - this._dragging.offsetClick[1]];
this.dispatchEvent({
type: "dragend",
overlay: this._dragging,
originalEvent: evt.originalEvent,
frameState: evt.frameState,
coordinate
});
this._dragging = false;
return true;
}
return false;
}
});
this._overlays = [];
if (!(options.overlays instanceof Array)) options.overlays = [options.overlays];
options.overlays.forEach(this.addOverlay.bind(this));
}
/** Add an overlay to the interacton
* @param {ol.Overlay} ov
*/
addOverlay(ov) {
for (var i = 0, o; o = this._overlays[i]; i++) {
if (o === ov)
return;
}
var element = ov.getElement();
if (element.parentElement && element.parentElement.classList.contains("ol-overlaycontainer-stopevent")) {
console.warn("[DragOverlay.addOverlay] overlay must be created with stopEvent set to false!");
return;
}
var handler = (function() {
if (this.getMap() === ov.getMap()) {
this._dragging = ov;
}
}).bind(this);
this._overlays.push({
overlay: ov,
listener: handler
});
element.parentNode.addEventListener("pointerdown", handler);
}
/** Remove an overlay from the interacton
* @param {ol.Overlay} ov
*/
removeOverlay(ov) {
for (var i = 0, o; o = this._overlays[i]; i++) {
if (o.overlay === ov) {
var l = this._overlays.splice(i, 1)[0];
ov.getElement().parentNode.removeEventListener("pointerdown", l.listener);
break;
}
}
}
};
var DragOverlay_default = ol_interaction_DragOverlay;
// node_modules/ol-ext/overlay/Fixed.js
var ol_Overlay_Fixed = class olOverlayFixed extends Overlay_default {
constructor(options) {
super(options);
}
/** Prevent modifying position and use a force argument to force positionning.
* @param {ol.coordinate} position
* @param {boolean} force true to change the position, default false
*/
setPosition(position, force) {
if (this.getMap() && position) {
this._pixel = this.getMap().getPixelFromCoordinate(position);
}
super.setPosition(position);
if (force) {
super.updatePixelPosition();
}
}
/** Update position according the pixel position
*/
updatePixelPosition() {
if (this.getMap() && this._pixel && this.getPosition()) {
var pixel = this.getMap().getPixelFromCoordinate(this.getPosition());
if (Math.round(pixel[0] * 1e3) !== Math.round(this._pixel[0] * 1e3) || Math.round(pixel[0] * 1e3) !== Math.round(this._pixel[0] * 1e3)) {
this.setPosition(this.getMap().getCoordinateFromPixel(this._pixel));
}
}
}
};
var Fixed_default = ol_Overlay_Fixed;
// node_modules/ol-ext/interaction/TouchCursor.js
var ol_interaction_TouchCursor = class olinteractionTouchCursor extends DragOverlay_default {
constructor(options) {
options = options || {};
var overlay = new Fixed_default({
className: ("ol-touch-cursor " + (options.className || "")).trim(),
positioning: "top-left",
element: element_default.create("DIV", {}),
stopEvent: false
});
super({
centerOnClick: false,
//offset: [-20,-20],
overlays: overlay
});
this.overlay = overlay;
this.setAnchor(options.anchor || "left");
this._listeners = {};
this.ctouch = new Interaction_default({
handleEvent: (function(e) {
if (!/drag/.test(e.type) && this.getMap()) {
e.coordinate = this.overlay.getPosition();
e.pixel = this.getMap().getPixelFromCoordinate(e.coordinate);
this._lastEvent = e;
} else {
var res = e.frameState.viewState.resolution;
var cosa = Math.cos(e.frameState.viewState.rotation);
var sina = Math.sin(e.frameState.viewState.rotation);
var width = this.getOverlayElement().clientWidth / 2;
var style = getComputedStyle(this.getOverlayElement());
var offset = [-width - parseInt(style.marginLeft), -width - parseInt(style.marginTop)];
if (this._anchor === "center") offset[0] = 0;
e.coordinate = [
e.coordinate[0] + cosa * offset[0] * res + sina * offset[1] * res,
e.coordinate[1] + sina * offset[0] * res - cosa * offset[1] * res
];
e.pixel = this.getMap().getPixelFromCoordinate(e.coordinate);
}
return true;
}).bind(this)
});
this.ctouch.set("onTop", true);
this.setPosition(options.coordinate, true);
this.set("maxButtons", options.maxButtons || 5);
if (options.buttons) {
if (options.buttons.length > this.get("maxButtons")) {
this.set("maxButtons", options.buttons.length);
}
var elt = this.overlay.element;
var begin = options.buttons.length > 4 ? 0 : 1;
options.buttons.forEach((function(b, i) {
if (i < 5) {
element_default.create("DIV", {
className: ((b.className || "") + " ol-button ol-button-" + (i + begin)).trim(),
html: element_default.create("DIV", { html: b.html }),
click: b.click,
on: b.on,
parent: elt
});
}
}));
}
var dragging = false;
var start = false;
this.on("dragstart", function(e) {
this._pixel = this.getMap().getPixelFromCoordinate(this.overlay.getPosition());
start = e;
return !e.overlay;
});
this.on("dragend", (function(e) {
this._pixel = this.getMap().getPixelFromCoordinate(this.overlay.getPosition());
if (!e.overlay)
return true;
if (dragging) {
this.dispatchEvent({
type: "dragend",
dragging,
originalEvent: e.originalEvent,
frameState: e.frameState,
pixel: this._pixel,
coordinate: this.overlay.getPosition()
});
dragging = false;
} else {
if (e.originalEvent.target === this.overlay.element) {
this.dispatchEvent({
type: "click",
dragging,
originalEvent: e.originalEvent,
frameState: e.frameState,
pixel: this._pixel,
coordinate: this.overlay.getPosition()
});
}
}
return false;
}).bind(this));
this.on("dragging", (function(e) {
this._pixel = this.getMap().getPixelFromCoordinate(this.overlay.getPosition());
if (!e.overlay) {
return true;
}
dragging = true;
if (start) {
this.dispatchEvent({
type: "dragstart",
dragging,
originalEvent: start.originalEvent,
frameState: e.frameState,
pixel: this._pixel,
coordinate: start.coordinate
});
start = false;
}
this.dispatchEvent({
type: "dragging",
dragging,
originalEvent: e.originalEvent,
frameState: e.frameState,
pixel: this._pixel,
coordinate: this.overlay.getPosition()
});
return false;
}).bind(this));
}
/**
* Remove the interaction from its current map, if any, and attach it to a new
* map, if any. Pass `null` to just remove the interaction from the current map.
* @param {_ol_Map_} map Map.
* @api stable
*/
setMap(map) {
if (this.getMap()) {
this.getMap().removeInteraction(this.ctouch);
if (this.getActive())
this.getMap().removeOverlay(this.overlay);
}
for (let l in this._listeners) {
unByKey(this._listeners[l]);
}
this._listeners = {};
super.setMap(map);
if (map) {
if (this.getActive()) {
map.addOverlay(this.overlay);
setTimeout((function() {
this.setPosition(this.getPosition() || map.getView().getCenter());
}).bind(this));
}
map.addInteraction(this.ctouch);
this._listeners.addInteraction = map.getInteractions().on("add", (function(e) {
if (!e.element.get("onTop")) {
map.removeInteraction(this.ctouch);
map.addInteraction(this.ctouch);
}
}).bind(this));
}
}
/** Set anchor position
* @param {string} pos "left", "center" or "right"
* @api
*/
setAnchor(pos) {
var positions = ["left", "right", "center"];
if (positions.indexOf(pos) >= 0) {
positions.forEach((function(k) {
this.getOverlayElement().classList.remove("ol-touch-cursor-" + k);
}).bind(this));
this.getOverlayElement().classList.add("ol-touch-cursor-" + pos);
this._anchor = pos;
}
}
/**
* Activate or deactivate the interaction.
* @param {boolean} active Active.
* @param {ol.coordinate|null} position position of the cursor (when activating), default viewport center.
* @observable
* @api
*/
setActive(b, position) {
if (b !== this.getActive()) {
if (this.ctouch) this.ctouch.setActive(b);
if (!b) {
this.setPosition();
this.overlay.element.classList.remove("active");
if (this._activate)
clearTimeout(this._activate);
if (this.getMap())
this.getMap().removeOverlay(this.overlay);
} else {
if (this.getMap()) {
this.getMap().addOverlay(this.overlay);
}
if (position) {
this.setPosition(position);
} else if (this.getMap()) {
this.setPosition(this.getMap().getView().getCenter());
}
this._activate = setTimeout((function() {
this.overlay.element.classList.add("active");
}).bind(this), 100);
}
super.setActive(b);
} else if (position) {
this.setPosition(position);
} else if (this.getMap()) {
this.setPosition(this.getMap().getView().getCenter());
}
}
/** Set the position of the target
* @param {ol.coordinate} coord
*/
setPosition(coord) {
this.overlay.setPosition(coord, true);
if (this.getMap() && coord) {
this._pixel = this.getMap().getPixelFromCoordinate(coord);
}
}
/** Offset the target position
* @param {ol.coordinate} coord
*/
offsetPosition(coord) {
var pos = this.overlay.getPosition();
if (pos) {
this.overlay.setPosition([pos[0] + coord[0], pos[1] + coord[1]]);
}
}
/** Get the position of the target
* @return {ol.coordinate}
*/
getPosition() {
return this.overlay.getPosition();
}
/** Get pixel position
* @return {ol.pixel}
*/
getPixel() {
if (this.getMap()) {
return this.getMap().getPixelFromCoordinate(this.getPosition());
}
}
/** Get cursor overlay
* @return {ol.Overlay}
*/
getOverlay() {
return this.overlay;
}
/** Get cursor overlay element
* @return {Element}
*/
getOverlayElement() {
return this.overlay.element;
}
/** Get cursor button element
* @param {string|number} button the button className or the button index
* @return {Element}
*/
getButtonElement(button) {
if (typeof button === "number")
return this.getOverlayElement().getElementsByClassName("ol-button")[button];
return this.getOverlayElement().getElementsByClassName(button)[0];
}
/** Remove a button element
* @param {string|number|undefined} button the button className or the button index, if undefined remove all buttons, default remove all
* @return {Element}
*/
removeButton(button) {
if (button === void 0) {
var buttons = this.getOverlayElement().getElementsByClassName("ol-button");
for (var i = buttons.length - 1; i >= 0; i--) {
this.getOverlayElement().removeChild(buttons[i]);
}
} else {
var elt = this.getButtonElement(button);
if (elt)
this.getOverlayElement().removeChild(elt);
}
}
/** Add a button element
* @param {*} button
* @param {string} options.className button class name
* @param {DOMElement|string} options.html button content
* @param {function} options.click onclick function
* @param {*} options.on an object with
* @param {boolean} options.before
*/
addButton(b) {
var buttons = this.getOverlayElement().getElementsByClassName("ol-button");
var max = this.get("maxButtons") || 5;
if (buttons.length >= max) {
console.error("[ol/interaction/TouchCursor~addButton] too many button on the cursor (max=" + max + ")...");
return;
}
var button = element_default.create("DIV", {
className: ((b.className || "") + " ol-button").trim(),
html: element_default.create("DIV", { html: b.html }),
click: b.click,
on: b.on
});
if (!b.before || buttons.length === 0) {
this.getOverlayElement().appendChild(button);
} else {
this.getOverlayElement().insertBefore(button, buttons[0]);
}
var start = buttons.length >= max ? 0 : 1;
for (let i = 0; i < buttons.length; i++) {
buttons[i].className = buttons[i].className.replace(/ol-button-\d/g, "").trim() + " ol-button-" + (i + start);
}
}
};
var TouchCursor_default = ol_interaction_TouchCursor;
export {
TouchCursor_default as default
};
//# sourceMappingURL=ol-ext_interaction_TouchCursor.js.map