@matdata/yasqe 5.18.0 → 5.19.0

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.
@@ -76,6 +76,7 @@ export default function get(): {
76
76
  queryingDisabled: string | undefined;
77
77
  prefixCcApi: string;
78
78
  showFormatButton: boolean;
79
+ showMapButton: boolean;
79
80
  checkConstructVariables: boolean;
80
81
  snippets: import("./").Snippet[];
81
82
  showSnippetsBar: boolean;
@@ -110,6 +110,7 @@ SELECT * WHERE {
110
110
  queryingDisabled: undefined,
111
111
  prefixCcApi: prefixCcApi,
112
112
  showFormatButton: true,
113
+ showMapButton: true,
113
114
  checkConstructVariables: true,
114
115
  snippets: [
115
116
  {
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../../../packages/yasqe/src/defaults.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;AAC5C,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,MAAM,CAAC,OAAO,UAAU,GAAG;IACzB,MAAM,WAAW,GAAG,yCAAyC,CAAC;IAC9D,MAAM,MAAM,GAAkC;QAC5C,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE;;;;WAIA;QACP,yBAAyB,EAAE;YACzB,SAAS,EAAE,IAAI;SAChB;QACD,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE;YACV,WAAW,EAAE,IAAU,UAAW,CAAC,IAAI,CAAC,OAAO,CAAO,UAAW,CAAC,IAAI,CAAC,KAAK,EAAQ,UAAW,CAAC,IAAI,CAAC,MAAM,CAAC;SAC7G;QACD,sBAAsB,EAAE,KAAK;QAC7B,OAAO,EAAE,CAAC,gBAAgB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,uBAAuB,CAAC;QACxG,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,IAAI;QACjB,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE,EAAE;QAClB,SAAS,EAAE;YAKT,YAAY,EAAE,UAAU,MAAW;gBACjC,MAAM,KAAK,GAAU,MAAM,CAAC;gBAC5B,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,CAAC;YACD,cAAc,EAAE,UAAU,MAAW;gBACnC,MAAM,KAAK,GAAU,MAAM,CAAC;gBAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC;gBACnD,IAAI,UAAU,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;oBAE/D,OAAO,KAAK;yBACT,MAAM,EAAE;yBACR,YAAY,CACX,EAAE,EACF,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,CAAC,EAAE,EAC3E,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CACpE,CAAC;gBACN,CAAC;qBAAM,CAAC;oBAEN,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvG,CAAC;YACH,CAAC;YACD,QAAQ,EAAE,UAAU,MAAW;gBAC7B,MAAM,KAAK,GAAU,MAAM,CAAC;gBAC5B,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,CAAC;YACD,cAAc,EAAE,UAAU,MAAW;gBACnC,MAAM,KAAK,GAAU,MAAM,CAAC;gBAC5B,KAAK,CAAC,aAAa,EAAE,CAAC;YACxB,CAAC;YACD,cAAc,EAAE,UAAU,MAAW;gBACnC,MAAM,KAAK,GAAU,MAAM,CAAC;gBAC5B,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,CAAC;YACD,QAAQ,EAAE,UAAU,MAAW;gBAC7B,MAAM,KAAK,GAAU,MAAM,CAAC;gBAC5B,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,CAAC;YAED,WAAW,EAAE,UAAU,MAAW;gBAChC,MAAM,KAAK,GAAU,MAAM,CAAC;gBAC5B,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAChC,CAAC;YACD,YAAY,EAAE,UAAU,MAAW;gBACjC,MAAM,KAAK,GAAU,MAAM,CAAC;gBAC5B,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAChC,CAAC;YACD,GAAG,EAAE,UAAU,MAAW;gBACxB,MAAM,KAAK,GAAU,MAAM,CAAC;gBAC5B,KAAK,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC;YAC/B,CAAC;YACD,GAAG,EAAE,UAAU,MAAW;gBACxB,MAAM,KAAK,GAAU,MAAM,CAAC;gBAC5B,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC3B,CAAC;SACF;QAED,mBAAmB,EAAE,UAAU,KAAY;YACzC,OAAO,CACL,QAAQ,CAAC,QAAQ,CAAC,QAAQ;gBAC1B,IAAI;gBACJ,QAAQ,CAAC,QAAQ,CAAC,IAAI;gBACtB,QAAQ,CAAC,QAAQ,CAAC,QAAQ;gBAC1B,QAAQ,CAAC,QAAQ,CAAC,MAAM;gBACxB,GAAG;gBACH,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CACnD,CAAC;QACJ,CAAC;QACD,aAAa,EAAE,SAAS;QAExB,eAAe,EAAE,SAAS;QAE1B,gBAAgB,EAAE,UAAU,KAAY;YACtC,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,aAAa,EAAE,UAAU,KAAY;YAGnC,IAAI,EAAE,GAAG,EAAE,CAAC;YACZ,IAAI,IAAI,GAAQ,KAAK,CAAC,MAAM,CAAC;YAC7B,IAAU,IAAK,CAAC,EAAE;gBAAE,EAAE,GAAS,IAAK,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,IAAI,IAAI,KAAU,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC9D,IAAI,IAAI,EAAE,CAAC;oBACT,IAAU,IAAK,CAAC,EAAE;wBAAE,EAAE,GAAS,IAAK,CAAC,EAAE,CAAC;oBACxC,MAAM;gBACR,CAAC;YACH,CAAC;YACD,OAAO,QAAQ,GAAG,EAAE,GAAG,QAAQ,CAAC;QAClC,CAAC;QACD,iBAAiB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;QAEpC,eAAe,EAAE,IAAI;QAErB,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,OAAO;QACrB,gBAAgB,EAAE,SAAS;QAC3B,WAAW,EAAE,WAAW;QACxB,gBAAgB,EAAE,IAAI;QACtB,uBAAuB,EAAE,IAAI;QAC7B,QAAQ,EAAE;YACR;gBACE,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,4CAA4C;gBAClD,KAAK,EAAE,aAAa;aACrB;YACD;gBACE,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,gEAAgE;gBACtE,KAAK,EAAE,aAAa;aACrB;YACD;gBACE,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,wBAAwB;gBAC9B,KAAK,EAAE,aAAa;aACrB;YACD;gBACE,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,UAAU;aAClB;YACD;gBACE,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,6BAA6B;gBACnC,KAAK,EAAE,UAAU;aAClB;SACF;QACD,eAAe,EAAE,IAAI;KACtB,CAAC;IACF,MAAM,aAAa,GAAuB;QACxC,aAAa,EAAE,SAAS;QACxB,QAAQ,EAAE,4BAA4B;QACtC,MAAM,EAAE,MAAM;QACd,iBAAiB,EAAE,uBAAuB;QAC1C,kBAAkB,EAAE,2CAA2C;QAC/D,kBAAkB,EAAE,sBAAsB;QAC1C,WAAW,EAAE,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,EAAE;QACX,eAAe,EAAE,KAAK;QACtB,wBAAwB,EAAE,KAAK;QAC/B,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,SAAS;KACtB,CAAC;IACF,uCAAY,MAAM,KAAE,aAAa,IAAG;AACtC,CAAC"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../../../packages/yasqe/src/defaults.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import "./scss/yasqe.scss";
2
2
  import "./scss/buttons.scss";
3
+ import "leaflet/dist/leaflet.css";
3
4
  import { Prefixes } from "./prefixUtils";
4
5
  import * as sparql11Mode from "../grammar/tokenizer";
5
6
  import { Storage as YStorage } from "@matdata/yasgui-utils";
@@ -53,6 +54,9 @@ export declare class Yasqe extends CodeMirror {
53
54
  private hamburgerBtn;
54
55
  private hamburgerMenu;
55
56
  private shareBtn;
57
+ private mapBtn;
58
+ private mapPopup;
59
+ private closeMapPopupHandler;
56
60
  private isFullscreen;
57
61
  private horizontalResizeWrapper?;
58
62
  private snippetsBar?;
@@ -78,6 +82,12 @@ export declare class Yasqe extends CodeMirror {
78
82
  private drawButtons;
79
83
  private toggleHamburgerMenu;
80
84
  private closeHamburgerMenu;
85
+ private toggleMapPopup;
86
+ private createMapPopup;
87
+ toggleMapWidget(anchorPoint?: {
88
+ x: number;
89
+ y: number;
90
+ }): void;
81
91
  toggleFullscreen(): void;
82
92
  getIsFullscreen(): boolean;
83
93
  private insertSnippet;
@@ -222,6 +232,7 @@ export declare class Yasqe extends CodeMirror {
222
232
  queryingDisabled: string | undefined;
223
233
  prefixCcApi: string;
224
234
  showFormatButton: boolean;
235
+ showMapButton: boolean;
225
236
  checkConstructVariables: boolean;
226
237
  snippets: Snippet[];
227
238
  showSnippetsBar: boolean;
@@ -355,6 +366,7 @@ export interface Config extends Partial<CodeMirror.EditorConfiguration> {
355
366
  queryingDisabled: string | undefined;
356
367
  prefixCcApi: string;
357
368
  showFormatButton: boolean;
369
+ showMapButton: boolean;
358
370
  checkConstructVariables: boolean;
359
371
  snippets: Snippet[];
360
372
  showSnippetsBar: boolean;
@@ -9,6 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  import "./scss/yasqe.scss";
11
11
  import "./scss/buttons.scss";
12
+ import "leaflet/dist/leaflet.css";
12
13
  import { findFirstPrefixLine } from "./prefixFold";
13
14
  import { getPrefixesFromQuery, addPrefixes, removePrefixes } from "./prefixUtils";
14
15
  import { getPreviousNonWsToken, getNextNonWsToken, getCompleteToken } from "./tokenUtils";
@@ -22,6 +23,8 @@ import { mergeWith, escape } from "lodash-es";
22
23
  import getDefaults from "./defaults";
23
24
  import CodeMirror from "./CodeMirror";
24
25
  import { spfmt } from "sparql-formatter";
26
+ import * as L from "leaflet";
27
+ import { coordinatesToWkt, wrapWktLiteral } from "./mapWidget";
25
28
  const TOAST_DEFAULT_DURATION = 3000;
26
29
  const TOAST_WARNING_DURATION = 4000;
27
30
  const TOAST_WARNING_DELAY = 500;
@@ -491,6 +494,21 @@ export class Yasqe extends CodeMirror {
491
494
  formatBtn.setAttribute("aria-label", "Format query");
492
495
  buttons.appendChild(formatBtn);
493
496
  }
497
+ if (this.config.showMapButton) {
498
+ this.mapBtn = document.createElement("button");
499
+ addClass(this.mapBtn, "yasqe_mapButton");
500
+ const mapIcon = document.createElement("i");
501
+ addClass(mapIcon, "fas");
502
+ addClass(mapIcon, "fa-map-location-dot");
503
+ mapIcon.setAttribute("aria-hidden", "true");
504
+ this.mapBtn.appendChild(mapIcon);
505
+ this.mapBtn.onclick = (event) => {
506
+ this.toggleMapPopup(buttons, { x: event.clientX, y: event.clientY });
507
+ };
508
+ this.mapBtn.title = "Open map";
509
+ this.mapBtn.setAttribute("aria-label", "Open map");
510
+ buttons.appendChild(this.mapBtn);
511
+ }
494
512
  this.fullscreenBtn = document.createElement("button");
495
513
  addClass(this.fullscreenBtn, "yasqe_fullscreenButton");
496
514
  const fullscreenIcon = document.createElement("i");
@@ -590,6 +608,23 @@ export class Yasqe extends CodeMirror {
590
608
  };
591
609
  this.hamburgerMenu.appendChild(formatItem);
592
610
  }
611
+ if (this.config.showMapButton) {
612
+ const mapItem = document.createElement("button");
613
+ mapItem.className = "yasqe_hamburgerMenuItem";
614
+ const mapIconMenu = document.createElement("i");
615
+ addClass(mapIconMenu, "fas");
616
+ addClass(mapIconMenu, "fa-map-location-dot");
617
+ mapIconMenu.setAttribute("aria-hidden", "true");
618
+ mapItem.appendChild(mapIconMenu);
619
+ const mapLabel = document.createElement("span");
620
+ mapLabel.textContent = "Open map";
621
+ mapItem.appendChild(mapLabel);
622
+ mapItem.onclick = (event) => {
623
+ this.closeHamburgerMenu();
624
+ this.toggleMapPopup(buttons, { x: event.clientX, y: event.clientY });
625
+ };
626
+ this.hamburgerMenu.appendChild(mapItem);
627
+ }
593
628
  const fullscreenItem = document.createElement("button");
594
629
  fullscreenItem.className = "yasqe_hamburgerMenuItem";
595
630
  const fullscreenIconMenu = document.createElement("i");
@@ -636,6 +671,248 @@ export class Yasqe extends CodeMirror {
636
671
  removeClass(this.hamburgerMenu, "active");
637
672
  this.hamburgerBtn.setAttribute("aria-expanded", "false");
638
673
  }
674
+ toggleMapPopup(buttons, anchorPoint) {
675
+ var _a;
676
+ if (this.mapPopup) {
677
+ (_a = this.closeMapPopupHandler) === null || _a === void 0 ? void 0 : _a.call(this);
678
+ return;
679
+ }
680
+ this.createMapPopup(buttons, anchorPoint);
681
+ }
682
+ createMapPopup(buttons, anchorPoint) {
683
+ this.mapPopup = document.createElement("div");
684
+ this.mapPopup.className = "yasqe_mapPopup";
685
+ buttons.appendChild(this.mapPopup);
686
+ const header = document.createElement("div");
687
+ header.className = "yasqe_mapPopup_header";
688
+ const title = document.createElement("div");
689
+ title.className = "yasqe_mapPopup_title";
690
+ title.textContent = "Create WKT";
691
+ header.appendChild(title);
692
+ const closeBtn = document.createElement("button");
693
+ closeBtn.className = "yasqe_mapPopup_close";
694
+ closeBtn.setAttribute("aria-label", "Close map");
695
+ closeBtn.innerHTML = "&times;";
696
+ header.appendChild(closeBtn);
697
+ this.mapPopup.appendChild(header);
698
+ const mapContainer = document.createElement("div");
699
+ mapContainer.className = "yasqe_mapPopup_map";
700
+ this.mapPopup.appendChild(mapContainer);
701
+ const geometryControls = document.createElement("div");
702
+ geometryControls.className = "yasqe_mapPopup_geometryControls leaflet-bar";
703
+ mapContainer.appendChild(geometryControls);
704
+ const hint = document.createElement("div");
705
+ hint.className = "yasqe_mapPopup_hint";
706
+ hint.textContent = "Click the map to add coordinates";
707
+ this.mapPopup.appendChild(hint);
708
+ const preview = document.createElement("textarea");
709
+ preview.className = "yasqe_mapPopup_preview";
710
+ preview.readOnly = true;
711
+ preview.rows = 2;
712
+ this.mapPopup.appendChild(preview);
713
+ const actions = document.createElement("div");
714
+ actions.className = "yasqe_mapPopup_actions";
715
+ const undoBtn = document.createElement("button");
716
+ undoBtn.className = "yasqe_btn yasqe_btn-sm";
717
+ undoBtn.textContent = "Undo";
718
+ const clearBtn = document.createElement("button");
719
+ clearBtn.className = "yasqe_btn yasqe_btn-sm";
720
+ clearBtn.textContent = "Clear";
721
+ const insertBtn = document.createElement("button");
722
+ insertBtn.className = "yasqe_btn yasqe_btn-sm";
723
+ insertBtn.textContent = "Insert WKT";
724
+ actions.appendChild(undoBtn);
725
+ actions.appendChild(clearBtn);
726
+ actions.appendChild(insertBtn);
727
+ this.mapPopup.appendChild(actions);
728
+ let geometryType = "POINT";
729
+ let coordinates = [];
730
+ let marker;
731
+ let shape;
732
+ const geometryButtons = {};
733
+ const getMapAccentColor = () => {
734
+ const accent = getComputedStyle(this.rootEl).getPropertyValue("--yasgui-accent-color").trim();
735
+ return accent || "#337ab7";
736
+ };
737
+ const map = L.map(mapContainer, {
738
+ zoomControl: true,
739
+ attributionControl: true,
740
+ }).setView([51.505, -0.09], 2);
741
+ map.getContainer().style.cursor = "crosshair";
742
+ L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
743
+ attribution: "&copy; OpenStreetMap contributors",
744
+ maxZoom: 19,
745
+ }).addTo(map);
746
+ L.DomEvent.disableClickPropagation(geometryControls);
747
+ L.DomEvent.disableScrollPropagation(geometryControls);
748
+ const updatePreview = () => {
749
+ const wkt = coordinatesToWkt(geometryType, coordinates);
750
+ preview.value = wkt || "";
751
+ insertBtn.disabled = !wkt;
752
+ undoBtn.disabled = coordinates.length === 0;
753
+ clearBtn.disabled = coordinates.length === 0;
754
+ };
755
+ const redrawGeometry = () => {
756
+ if (marker) {
757
+ map.removeLayer(marker);
758
+ marker = undefined;
759
+ }
760
+ if (shape) {
761
+ map.removeLayer(shape);
762
+ shape = undefined;
763
+ }
764
+ const latLngs = coordinates.map((coord) => L.latLng(coord.lat, coord.lng));
765
+ const accentColor = getMapAccentColor();
766
+ if (geometryType === "POINT" && latLngs.length > 0) {
767
+ marker = L.marker(latLngs[latLngs.length - 1]).addTo(map);
768
+ }
769
+ else if (geometryType === "LINESTRING" && latLngs.length > 0) {
770
+ shape = L.polyline(latLngs, { color: accentColor }).addTo(map);
771
+ }
772
+ else if (geometryType === "POLYGON" && latLngs.length > 0) {
773
+ shape = L.polygon(latLngs, { color: accentColor }).addTo(map);
774
+ }
775
+ updatePreview();
776
+ };
777
+ const updateGeometryButtons = () => {
778
+ for (const type of ["POINT", "LINESTRING", "POLYGON"]) {
779
+ const button = geometryButtons[type];
780
+ if (!button)
781
+ continue;
782
+ button.classList.toggle("active", type === geometryType);
783
+ button.setAttribute("aria-pressed", type === geometryType ? "true" : "false");
784
+ }
785
+ };
786
+ const createGeometryButton = (type, iconClass, label) => {
787
+ const button = document.createElement("button");
788
+ button.type = "button";
789
+ button.className = "yasqe_mapPopup_geometryBtn";
790
+ button.title = label;
791
+ button.setAttribute("aria-label", label);
792
+ button.setAttribute("aria-pressed", "false");
793
+ const icon = document.createElement("i");
794
+ addClass(icon, "fas");
795
+ addClass(icon, iconClass);
796
+ icon.setAttribute("aria-hidden", "true");
797
+ button.appendChild(icon);
798
+ button.onclick = (event) => {
799
+ event.preventDefault();
800
+ event.stopPropagation();
801
+ if (geometryType === type)
802
+ return;
803
+ geometryType = type;
804
+ coordinates = [];
805
+ updateGeometryButtons();
806
+ redrawGeometry();
807
+ };
808
+ geometryControls.appendChild(button);
809
+ return button;
810
+ };
811
+ geometryButtons.POINT = createGeometryButton("POINT", "fa-location-dot", "Point");
812
+ geometryButtons.LINESTRING = createGeometryButton("LINESTRING", "fa-slash", "LineString");
813
+ geometryButtons.POLYGON = createGeometryButton("POLYGON", "fa-draw-polygon", "Polygon");
814
+ updateGeometryButtons();
815
+ const closePopup = () => {
816
+ var _a;
817
+ document.removeEventListener("keydown", handleKeyDown);
818
+ document.body.removeEventListener("click", closeOnOutsideClick, true);
819
+ map.remove();
820
+ (_a = this.mapPopup) === null || _a === void 0 ? void 0 : _a.remove();
821
+ this.mapPopup = undefined;
822
+ this.closeMapPopupHandler = undefined;
823
+ };
824
+ const handleKeyDown = (event) => {
825
+ if (event.key === "Escape") {
826
+ closePopup();
827
+ }
828
+ };
829
+ const closeOnOutsideClick = (event) => {
830
+ var _a;
831
+ if (!this.mapPopup)
832
+ return;
833
+ if (this.mapPopup.contains(event.target) || ((_a = this.mapBtn) === null || _a === void 0 ? void 0 : _a.contains(event.target)))
834
+ return;
835
+ closePopup();
836
+ };
837
+ map.on("click", (event) => {
838
+ const coordinate = { lat: event.latlng.lat, lng: event.latlng.lng };
839
+ if (geometryType === "POINT") {
840
+ coordinates = [coordinate];
841
+ }
842
+ else {
843
+ coordinates.push(coordinate);
844
+ }
845
+ redrawGeometry();
846
+ });
847
+ undoBtn.onclick = () => {
848
+ coordinates.pop();
849
+ redrawGeometry();
850
+ };
851
+ clearBtn.onclick = () => {
852
+ coordinates = [];
853
+ redrawGeometry();
854
+ };
855
+ insertBtn.onclick = () => {
856
+ const wkt = coordinatesToWkt(geometryType, coordinates);
857
+ if (!wkt)
858
+ return;
859
+ this.replaceSelection(wrapWktLiteral(wkt));
860
+ closePopup();
861
+ };
862
+ closeBtn.onclick = () => closePopup();
863
+ this.closeMapPopupHandler = closePopup;
864
+ document.addEventListener("keydown", handleKeyDown);
865
+ document.body.addEventListener("click", closeOnOutsideClick, true);
866
+ const positionPopup = () => {
867
+ if (!this.mapPopup)
868
+ return;
869
+ const popupWidth = this.mapPopup.offsetWidth || this.mapPopup.scrollWidth || 520;
870
+ const popupHeight = this.mapPopup.offsetHeight || this.mapPopup.scrollHeight || this.mapPopup.clientHeight;
871
+ const viewportWidth = window.innerWidth;
872
+ const viewportHeight = window.innerHeight;
873
+ this.mapPopup.style.position = "fixed";
874
+ this.mapPopup.style.bottom = "auto";
875
+ if (anchorPoint) {
876
+ const padding = 20;
877
+ let left = anchorPoint.x + 12;
878
+ let top = anchorPoint.y + 12;
879
+ if (left + popupWidth > viewportWidth - padding) {
880
+ left = Math.max(padding, anchorPoint.x - popupWidth - 12);
881
+ }
882
+ if (top + popupHeight > viewportHeight - padding) {
883
+ top = Math.max(padding, anchorPoint.y - popupHeight - 12);
884
+ }
885
+ this.mapPopup.style.left = `${Math.max(padding, left)}px`;
886
+ this.mapPopup.style.top = `${Math.max(padding, top)}px`;
887
+ this.mapPopup.style.right = "auto";
888
+ return;
889
+ }
890
+ const buttonsRect = buttons.getBoundingClientRect();
891
+ const fallbackLeft = Math.min(viewportWidth - popupWidth - 20, Math.max(20, buttonsRect.right - popupWidth));
892
+ this.mapPopup.style.left = `${Math.max(20, fallbackLeft)}px`;
893
+ this.mapPopup.style.top = "20px";
894
+ this.mapPopup.style.right = "auto";
895
+ };
896
+ if (typeof window !== "undefined" && typeof window.requestAnimationFrame === "function") {
897
+ window.requestAnimationFrame(() => {
898
+ positionPopup();
899
+ map.invalidateSize();
900
+ });
901
+ }
902
+ else {
903
+ setTimeout(() => {
904
+ positionPopup();
905
+ map.invalidateSize();
906
+ }, 0);
907
+ }
908
+ redrawGeometry();
909
+ }
910
+ toggleMapWidget(anchorPoint) {
911
+ const buttons = this.getWrapperElement().querySelector(".yasqe_buttons");
912
+ if (!buttons || !(buttons instanceof HTMLDivElement))
913
+ return;
914
+ this.toggleMapPopup(buttons, anchorPoint);
915
+ }
639
916
  toggleFullscreen() {
640
917
  var _a, _b;
641
918
  this.isFullscreen = !this.isFullscreen;
@@ -1477,11 +1754,12 @@ export class Yasqe extends CodeMirror {
1477
1754
  this.setSize(null, "100%");
1478
1755
  }
1479
1756
  destroy() {
1480
- var _a, _b;
1757
+ var _a, _b, _c;
1481
1758
  this.abortQuery();
1759
+ (_a = this.closeMapPopupHandler) === null || _a === void 0 ? void 0 : _a.call(this);
1482
1760
  this.unregisterEventListeners();
1483
- (_a = this.horizontalResizeWrapper) === null || _a === void 0 ? void 0 : _a.removeEventListener("mousedown", this.initDrag, false);
1484
- (_b = this.horizontalResizeWrapper) === null || _b === void 0 ? void 0 : _b.removeEventListener("dblclick", this.expandEditor);
1761
+ (_b = this.horizontalResizeWrapper) === null || _b === void 0 ? void 0 : _b.removeEventListener("mousedown", this.initDrag, false);
1762
+ (_c = this.horizontalResizeWrapper) === null || _c === void 0 ? void 0 : _c.removeEventListener("dblclick", this.expandEditor);
1485
1763
  if (this.snippetsClickHandler) {
1486
1764
  document.removeEventListener("click", this.snippetsClickHandler);
1487
1765
  this.snippetsClickHandler = undefined;