@vaadin/bundles 25.0.0-alpha1 → 25.0.0-alpha10
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/node_modules_ol_ImageCanvas_js.js +76 -83
- package/node_modules_ol_ImageCanvas_js.js.map +1 -1
- package/node_modules_ol_TileRange_js.js +128 -110
- package/node_modules_ol_TileRange_js.js.map +1 -1
- package/node_modules_ol_Tile_js.js +279 -0
- package/node_modules_ol_Tile_js.js.map +1 -0
- package/node_modules_ol_VectorRenderTile_js.js +428 -143
- package/node_modules_ol_VectorRenderTile_js.js.map +1 -1
- package/node_modules_ol_VectorTile_js.js +405 -119
- package/node_modules_ol_VectorTile_js.js.map +1 -1
- package/node_modules_ol_control_MousePosition_js.js +327 -0
- package/node_modules_ol_control_MousePosition_js.js.map +1 -0
- package/node_modules_ol_control_ZoomToExtent_js.js +118 -0
- package/node_modules_ol_control_ZoomToExtent_js.js.map +1 -0
- package/node_modules_ol_events_SnapEvent_js.js +79 -0
- package/node_modules_ol_events_SnapEvent_js.js.map +1 -0
- package/node_modules_ol_featureloader_js.js +205 -0
- package/node_modules_ol_featureloader_js.js.map +1 -0
- package/node_modules_ol_geom_Circle_js.js +300 -0
- package/node_modules_ol_geom_Circle_js.js.map +1 -0
- package/node_modules_ol_geom_GeometryCollection_js.js +369 -0
- package/node_modules_ol_geom_GeometryCollection_js.js.map +1 -0
- package/node_modules_ol_geom_MultiPoint_js.js +228 -0
- package/node_modules_ol_geom_MultiPoint_js.js.map +1 -0
- package/node_modules_ol_geom_flat_center_js.js +47 -0
- package/node_modules_ol_geom_flat_center_js.js.map +1 -0
- package/node_modules_ol_geom_flat_geodesic_js.js +123 -88
- package/node_modules_ol_geom_flat_geodesic_js.js.map +1 -1
- package/node_modules_ol_geom_flat_interpolate_js.js +230 -0
- package/node_modules_ol_geom_flat_interpolate_js.js.map +1 -0
- package/node_modules_ol_geom_flat_length_js-_375a0.js +58 -0
- package/node_modules_ol_geom_flat_length_js-_375a0.js.map +1 -0
- package/node_modules_ol_geom_flat_length_js-_375a1.js +58 -0
- package/node_modules_ol_geom_flat_length_js-_375a1.js.map +1 -0
- package/node_modules_ol_geom_flat_length_js-_375a2.js +58 -0
- package/node_modules_ol_geom_flat_length_js-_375a2.js.map +1 -0
- package/node_modules_ol_geom_flat_length_js-_375a3.js +58 -0
- package/node_modules_ol_geom_flat_length_js-_375a3.js.map +1 -0
- package/node_modules_ol_geom_flat_length_js-_375a4.js +58 -0
- package/node_modules_ol_geom_flat_length_js-_375a4.js.map +1 -0
- package/node_modules_ol_geom_flat_linechunk_js.js +76 -0
- package/node_modules_ol_geom_flat_linechunk_js.js.map +1 -0
- package/node_modules_ol_geom_flat_straightchunk_js.js +68 -0
- package/node_modules_ol_geom_flat_straightchunk_js.js.map +1 -0
- package/node_modules_ol_geom_flat_textpath_js.js +178 -0
- package/node_modules_ol_geom_flat_textpath_js.js.map +1 -0
- package/node_modules_ol_interaction_DblClickDragZoom_js.js +285 -0
- package/node_modules_ol_interaction_DblClickDragZoom_js.js.map +1 -0
- package/node_modules_ol_interaction_DragAndDrop_js.js +351 -0
- package/node_modules_ol_interaction_DragAndDrop_js.js.map +1 -0
- package/node_modules_ol_interaction_DragRotateAndZoom_js.js +159 -0
- package/node_modules_ol_interaction_DragRotateAndZoom_js.js.map +1 -0
- package/node_modules_ol_layer_Vector_js-_49290.js +110 -0
- package/node_modules_ol_layer_Vector_js-_49290.js.map +1 -0
- package/node_modules_ol_layer_Vector_js-_49291.js +110 -0
- package/node_modules_ol_layer_Vector_js-_49291.js.map +1 -0
- package/node_modules_ol_layer_Vector_js-_49292.js +110 -0
- package/node_modules_ol_layer_Vector_js-_49292.js.map +1 -0
- package/node_modules_ol_layer_Vector_js-_49293.js +110 -0
- package/node_modules_ol_layer_Vector_js-_49293.js.map +1 -0
- package/node_modules_ol_loadingstrategy_js.js +95 -0
- package/node_modules_ol_loadingstrategy_js.js.map +1 -0
- package/node_modules_ol_render_VectorContext_js-_3ad60.js +144 -0
- package/node_modules_ol_render_VectorContext_js-_3ad60.js.map +1 -0
- package/node_modules_ol_render_VectorContext_js-_3ad61.js +144 -0
- package/node_modules_ol_render_VectorContext_js-_3ad61.js.map +1 -0
- package/node_modules_ol_render_VectorContext_js-node_modules_ol_render_canvas_hitdetect_js.js +372 -0
- package/node_modules_ol_render_VectorContext_js-node_modules_ol_render_canvas_hitdetect_js.js.map +1 -0
- package/node_modules_ol_render_canvas_ImageBuilder_js.js +318 -0
- package/node_modules_ol_render_canvas_ImageBuilder_js.js.map +1 -0
- package/node_modules_ol_render_canvas_Instruction_js.js +66 -0
- package/node_modules_ol_render_canvas_Instruction_js.js.map +1 -0
- package/node_modules_ol_render_canvas_LineStringBuilder_js.js +187 -0
- package/node_modules_ol_render_canvas_LineStringBuilder_js.js.map +1 -0
- package/node_modules_ol_render_canvas_PolygonBuilder_js.js +276 -0
- package/node_modules_ol_render_canvas_PolygonBuilder_js.js.map +1 -0
- package/node_modules_ol_render_canvas_ZIndexContext_js-_fab20.js +156 -0
- package/node_modules_ol_render_canvas_ZIndexContext_js-_fab20.js.map +1 -0
- package/node_modules_ol_render_canvas_ZIndexContext_js-_fab21.js +156 -0
- package/node_modules_ol_render_canvas_ZIndexContext_js-_fab21.js.map +1 -0
- package/node_modules_ol_render_js-node_modules_ol_render_VectorContext_js.js +301 -0
- package/node_modules_ol_render_js-node_modules_ol_render_VectorContext_js.js.map +1 -0
- package/node_modules_ol_renderer_Layer_js.js +219 -0
- package/node_modules_ol_renderer_Layer_js.js.map +1 -0
- package/node_modules_ol_source_Source_js.js +256 -0
- package/node_modules_ol_source_Source_js.js.map +1 -0
- package/node_modules_ol_source_VectorEventType_js-node_modules_ol_structs_RBush_js.js +318 -0
- package/node_modules_ol_source_VectorEventType_js-node_modules_ol_structs_RBush_js.js.map +1 -0
- package/node_modules_ol_source_VectorEventType_js.js +80 -0
- package/node_modules_ol_source_VectorEventType_js.js.map +1 -0
- package/node_modules_ol_structs_RBush_js.js +242 -0
- package/node_modules_ol_structs_RBush_js.js.map +1 -0
- package/node_modules_ol_style_js.js +2 -1
- package/node_modules_ol_style_js.js.map +1 -1
- package/node_modules_rbush_rbush_min_js.js +16 -0
- package/node_modules_rbush_rbush_min_js.js.map +1 -0
- package/package.json +142 -142
- package/vaadin-bundle.json +4064 -3801
- package/vaadin.js +45025 -54784
- package/vaadin.js.map +1 -1
- package/vendors-node_modules_dompurify_dist_purify_es_mjs.js +26 -21
- package/vendors-node_modules_dompurify_dist_purify_es_mjs.js.map +1 -1
- package/vendors-node_modules_dompurify_dist_purify_js.js +26 -21
- package/vendors-node_modules_dompurify_dist_purify_js.js.map +1 -1
- package/vendors-node_modules_marked_lib_marked_esm_js.js +2097 -2508
- package/vendors-node_modules_marked_lib_marked_esm_js.js.map +1 -1
- package/vendors-node_modules_marked_lib_marked_umd_js.js +2164 -2556
- package/vendors-node_modules_marked_lib_marked_umd_js.js.map +1 -1
- package/vendors-node_modules_ol_Feature_js.js +360 -0
- package/vendors-node_modules_ol_Feature_js.js.map +1 -0
- package/vendors-node_modules_ol_Geolocation_js.js +352 -293
- package/vendors-node_modules_ol_Geolocation_js.js.map +1 -1
- package/vendors-node_modules_ol_ImageTile_js.js +494 -0
- package/vendors-node_modules_ol_ImageTile_js.js.map +1 -0
- package/vendors-node_modules_ol_Overlay_js.js +606 -0
- package/vendors-node_modules_ol_Overlay_js.js.map +1 -0
- package/vendors-node_modules_ol_control_FullScreen_js.js +417 -0
- package/vendors-node_modules_ol_control_FullScreen_js.js.map +1 -0
- package/vendors-node_modules_ol_control_OverviewMap_js.js +711 -0
- package/vendors-node_modules_ol_control_OverviewMap_js.js.map +1 -0
- package/vendors-node_modules_ol_control_ScaleLine_js.js +509 -0
- package/vendors-node_modules_ol_control_ScaleLine_js.js.map +1 -0
- package/vendors-node_modules_ol_control_ZoomSlider_js.js +418 -0
- package/vendors-node_modules_ol_control_ZoomSlider_js.js.map +1 -0
- package/vendors-node_modules_ol_control_js.js +490 -0
- package/vendors-node_modules_ol_control_js.js.map +1 -0
- package/vendors-node_modules_ol_geom_LineString_js.js +574 -0
- package/vendors-node_modules_ol_geom_LineString_js.js.map +1 -0
- package/vendors-node_modules_ol_geom_MultiLineString_js.js +405 -0
- package/vendors-node_modules_ol_geom_MultiLineString_js.js.map +1 -0
- package/vendors-node_modules_ol_geom_MultiPolygon_js.js +773 -0
- package/vendors-node_modules_ol_geom_MultiPolygon_js.js.map +1 -0
- package/vendors-node_modules_ol_geom_js-node_modules_ol_geom_flat_length_js.js +769 -0
- package/vendors-node_modules_ol_geom_js-node_modules_ol_geom_flat_length_js.js.map +1 -0
- package/vendors-node_modules_ol_index_js.js +526 -675
- package/vendors-node_modules_ol_index_js.js.map +1 -1
- package/vendors-node_modules_ol_interaction_Draw_js.js +2777 -0
- package/vendors-node_modules_ol_interaction_Draw_js.js.map +1 -0
- package/vendors-node_modules_ol_interaction_Extent_js.js +586 -0
- package/vendors-node_modules_ol_interaction_Extent_js.js.map +1 -0
- package/vendors-node_modules_ol_interaction_Link_js.js +489 -0
- package/vendors-node_modules_ol_interaction_Link_js.js.map +1 -0
- package/vendors-node_modules_ol_interaction_Modify_js.js +1841 -0
- package/vendors-node_modules_ol_interaction_Modify_js.js.map +1 -0
- package/vendors-node_modules_ol_interaction_Select_js.js +623 -0
- package/vendors-node_modules_ol_interaction_Select_js.js.map +1 -0
- package/vendors-node_modules_ol_interaction_Snap_js.js +982 -0
- package/vendors-node_modules_ol_interaction_Snap_js.js.map +1 -0
- package/vendors-node_modules_ol_interaction_Translate_js.js +466 -0
- package/vendors-node_modules_ol_interaction_Translate_js.js.map +1 -0
- package/vendors-node_modules_ol_interaction_js.js +872 -0
- package/vendors-node_modules_ol_interaction_js.js.map +1 -0
- package/vendors-node_modules_ol_layer_Graticule_js.js +1374 -989
- package/vendors-node_modules_ol_layer_Graticule_js.js.map +1 -1
- package/vendors-node_modules_ol_render_Feature_js.js +546 -0
- package/vendors-node_modules_ol_render_Feature_js.js.map +1 -0
- package/vendors-node_modules_ol_render_canvas_BuilderGroup_js.js +897 -0
- package/vendors-node_modules_ol_render_canvas_BuilderGroup_js.js.map +1 -0
- package/vendors-node_modules_ol_render_canvas_Builder_js.js +907 -0
- package/vendors-node_modules_ol_render_canvas_Builder_js.js.map +1 -0
- package/vendors-node_modules_ol_render_canvas_ExecutorGroup_js.js +539 -0
- package/vendors-node_modules_ol_render_canvas_ExecutorGroup_js.js.map +1 -0
- package/vendors-node_modules_ol_render_canvas_Executor_js.js +1715 -0
- package/vendors-node_modules_ol_render_canvas_Executor_js.js.map +1 -0
- package/vendors-node_modules_ol_render_canvas_Immediate_js.js +1208 -0
- package/vendors-node_modules_ol_render_canvas_Immediate_js.js.map +1 -0
- package/vendors-node_modules_ol_render_canvas_TextBuilder_js.js +825 -0
- package/vendors-node_modules_ol_render_canvas_TextBuilder_js.js.map +1 -0
- package/vendors-node_modules_ol_renderer_canvas_Layer_js.js +654 -0
- package/vendors-node_modules_ol_renderer_canvas_Layer_js.js.map +1 -0
- package/vendors-node_modules_ol_renderer_canvas_VectorLayer_js.js +1044 -0
- package/vendors-node_modules_ol_renderer_canvas_VectorLayer_js.js.map +1 -0
- package/vendors-node_modules_ol_renderer_vector_js.js +460 -0
- package/vendors-node_modules_ol_renderer_vector_js.js.map +1 -0
- package/vendors-node_modules_ol_source_Vector_js.js +2091 -0
- package/vendors-node_modules_ol_source_Vector_js.js.map +1 -0
- package/node_modules_ol_ImageTile_js.js +0 -177
- package/node_modules_ol_ImageTile_js.js.map +0 -1
- package/node_modules_ol_render_js.js +0 -131
- package/node_modules_ol_render_js.js.map +0 -1
- package/node_modules_ol_structs_LRUCache_js.js +0 -275
- package/node_modules_ol_structs_LRUCache_js.js.map +0 -1
- package/node_modules_ol_tilecoord_js.js +0 -115
- package/node_modules_ol_tilecoord_js.js.map +0 -1
- package/vendors-node_modules_ol_TileCache_js.js +0 -461
- package/vendors-node_modules_ol_TileCache_js.js.map +0 -1
- package/vendors-node_modules_ol_Tile_js.js +0 -330
- package/vendors-node_modules_ol_Tile_js.js.map +0 -1
- package/vendors-node_modules_ol_style_Text_js.js +0 -509
- package/vendors-node_modules_ol_style_Text_js.js.map +0 -1
- package/vendors-node_modules_rbush_index_js.js +0 -531
- package/vendors-node_modules_rbush_index_js.js.map +0 -1
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
(self["webpackChunk_vaadin_bundles"] = self["webpackChunk_vaadin_bundles"] || []).push([["vendors-node_modules_ol_interaction_Link_js"],{
|
|
2
|
+
|
|
3
|
+
/***/ "./node_modules/ol/interaction/Link.js":
|
|
4
|
+
/*!*********************************************!*\
|
|
5
|
+
!*** ./node_modules/ol/interaction/Link.js ***!
|
|
6
|
+
\*********************************************/
|
|
7
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
8
|
+
|
|
9
|
+
__webpack_require__.r(__webpack_exports__);
|
|
10
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
11
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
12
|
+
/* harmony export */ });
|
|
13
|
+
/* harmony import */ var _MapEventType_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../MapEventType.js */ "./node_modules/ol/MapEventType.js");
|
|
14
|
+
/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../events/EventType.js */ "./node_modules/ol/events/EventType.js");
|
|
15
|
+
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../events.js */ "./node_modules/ol/events.js");
|
|
16
|
+
/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/ol/math.js");
|
|
17
|
+
/* harmony import */ var _Interaction_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Interaction.js */ "./node_modules/ol/interaction/Interaction.js");
|
|
18
|
+
/**
|
|
19
|
+
* @module ol/interaction/Link
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @param {number} number A number.
|
|
29
|
+
* @return {number} A number with at most 5 decimal places.
|
|
30
|
+
*/
|
|
31
|
+
function to5(number) {
|
|
32
|
+
return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.toFixed)(number, 5);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @param {string} string A string.
|
|
37
|
+
* @return {number} A number representing the string.
|
|
38
|
+
*/
|
|
39
|
+
function readNumber(string) {
|
|
40
|
+
return parseFloat(string);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @param {number} number A number.
|
|
45
|
+
* @return {string} A string representing the number.
|
|
46
|
+
*/
|
|
47
|
+
function writeNumber(number) {
|
|
48
|
+
return to5(number).toString();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @param {number} a A number.
|
|
53
|
+
* @param {number} b A number.
|
|
54
|
+
* @return {boolean} The numbers are different.
|
|
55
|
+
*/
|
|
56
|
+
function differentNumber(a, b) {
|
|
57
|
+
if (isNaN(a)) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
return a !== readNumber(writeNumber(b));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @param {Array<number>} a An array of two numbers.
|
|
65
|
+
* @param {Array<number>} b An array of two numbers.
|
|
66
|
+
* @return {boolean} The arrays are different.
|
|
67
|
+
*/
|
|
68
|
+
function differentArray(a, b) {
|
|
69
|
+
return differentNumber(a[0], b[0]) || differentNumber(a[1], b[1]);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** @typedef {'x'|'y'|'z'|'r'|'l'} Params */
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* @typedef {function(string):void} Callback
|
|
76
|
+
*/
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @typedef {Object} Options
|
|
80
|
+
* @property {boolean|import('../View.js').AnimationOptions} [animate=true] Animate view transitions.
|
|
81
|
+
* @property {Array<Params>} [params=['x', 'y', 'z', 'r', 'l']] Properties to track. Default is to track
|
|
82
|
+
* `x` (center x), `y` (center y), `z` (zoom), `r` (rotation) and `l` (layers).
|
|
83
|
+
* @property {boolean} [replace=false] Replace the current URL without creating the new entry in browser history.
|
|
84
|
+
* By default, changes in the map state result in a new entry being added to the browser history.
|
|
85
|
+
* @property {string} [prefix=''] By default, the URL will be updated with search parameters x, y, z, and r. To
|
|
86
|
+
* avoid collisions with existing search parameters that your application uses, you can supply a custom prefix for
|
|
87
|
+
* the ones used by this interaction (e.g. 'ol:').
|
|
88
|
+
*/
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* @classdesc
|
|
92
|
+
* An interaction that synchronizes the map state with the URL.
|
|
93
|
+
*
|
|
94
|
+
* @api
|
|
95
|
+
*/
|
|
96
|
+
class Link extends _Interaction_js__WEBPACK_IMPORTED_MODULE_1__["default"] {
|
|
97
|
+
/**
|
|
98
|
+
* @param {Options} [options] Link options.
|
|
99
|
+
*/
|
|
100
|
+
constructor(options) {
|
|
101
|
+
super();
|
|
102
|
+
|
|
103
|
+
options = Object.assign(
|
|
104
|
+
{
|
|
105
|
+
animate: true,
|
|
106
|
+
params: ['x', 'y', 'z', 'r', 'l'],
|
|
107
|
+
replace: false,
|
|
108
|
+
prefix: '',
|
|
109
|
+
},
|
|
110
|
+
options || {},
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
let animationOptions;
|
|
114
|
+
if (options.animate === true) {
|
|
115
|
+
animationOptions = {duration: 250};
|
|
116
|
+
} else if (!options.animate) {
|
|
117
|
+
animationOptions = null;
|
|
118
|
+
} else {
|
|
119
|
+
animationOptions = options.animate;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @type {import('../View.js').AnimationOptions|null}
|
|
124
|
+
* @private
|
|
125
|
+
*/
|
|
126
|
+
this.animationOptions_ = animationOptions;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* @type {Object<Params, boolean>}
|
|
130
|
+
* @private
|
|
131
|
+
*/
|
|
132
|
+
this.params_ = options.params.reduce((acc, value) => {
|
|
133
|
+
acc[value] = true;
|
|
134
|
+
return acc;
|
|
135
|
+
}, {});
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* @private
|
|
139
|
+
* @type {boolean}
|
|
140
|
+
*/
|
|
141
|
+
this.replace_ = options.replace;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* @private
|
|
145
|
+
* @type {string}
|
|
146
|
+
*/
|
|
147
|
+
this.prefix_ = options.prefix;
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* @private
|
|
151
|
+
* @type {!Array<import("../events.js").EventsKey>}
|
|
152
|
+
*/
|
|
153
|
+
this.listenerKeys_ = [];
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* @private
|
|
157
|
+
* @type {boolean}
|
|
158
|
+
*/
|
|
159
|
+
this.initial_ = true;
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* @private
|
|
163
|
+
*/
|
|
164
|
+
this.updateState_ = this.updateState_.bind(this);
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* The tracked parameter callbacks.
|
|
168
|
+
* @private
|
|
169
|
+
* @type {Object<string, Callback>}
|
|
170
|
+
*/
|
|
171
|
+
this.trackedCallbacks_ = {};
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* The tracked parameter values.
|
|
175
|
+
* @private
|
|
176
|
+
* @type {Object<string, string|null>}
|
|
177
|
+
*/
|
|
178
|
+
this.trackedValues_ = {};
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* @private
|
|
183
|
+
* @param {string} name A parameter name.
|
|
184
|
+
* @return {string} A name with the prefix applied.
|
|
185
|
+
*/
|
|
186
|
+
getParamName_(name) {
|
|
187
|
+
if (!this.prefix_) {
|
|
188
|
+
return name;
|
|
189
|
+
}
|
|
190
|
+
return this.prefix_ + name;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* @private
|
|
195
|
+
* @param {URLSearchParams} params The search params.
|
|
196
|
+
* @param {string} name The unprefixed parameter name.
|
|
197
|
+
* @return {string|null} The parameter value.
|
|
198
|
+
*/
|
|
199
|
+
get_(params, name) {
|
|
200
|
+
return params.get(this.getParamName_(name));
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* @private
|
|
205
|
+
* @param {URLSearchParams} params The search params.
|
|
206
|
+
* @param {string} name The unprefixed parameter name.
|
|
207
|
+
* @param {string} value The param value.
|
|
208
|
+
*/
|
|
209
|
+
set_(params, name, value) {
|
|
210
|
+
if (!(name in this.params_)) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
params.set(this.getParamName_(name), value);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* @private
|
|
218
|
+
* @param {URLSearchParams} params The search params.
|
|
219
|
+
* @param {string} name The unprefixed parameter name.
|
|
220
|
+
*/
|
|
221
|
+
delete_(params, name) {
|
|
222
|
+
if (!(name in this.params_)) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
params.delete(this.getParamName_(name));
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* @param {import("../Map.js").default|null} map Map.
|
|
230
|
+
* @override
|
|
231
|
+
*/
|
|
232
|
+
setMap(map) {
|
|
233
|
+
const oldMap = this.getMap();
|
|
234
|
+
super.setMap(map);
|
|
235
|
+
if (map === oldMap) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
if (oldMap) {
|
|
239
|
+
this.unregisterListeners_(oldMap);
|
|
240
|
+
}
|
|
241
|
+
if (map) {
|
|
242
|
+
this.initial_ = true;
|
|
243
|
+
this.updateState_();
|
|
244
|
+
this.registerListeners_(map);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* @param {import("../Map.js").default} map Map.
|
|
250
|
+
* @private
|
|
251
|
+
*/
|
|
252
|
+
registerListeners_(map) {
|
|
253
|
+
this.listenerKeys_.push(
|
|
254
|
+
(0,_events_js__WEBPACK_IMPORTED_MODULE_2__.listen)(map, _MapEventType_js__WEBPACK_IMPORTED_MODULE_3__["default"].MOVEEND, this.updateUrl_, this),
|
|
255
|
+
(0,_events_js__WEBPACK_IMPORTED_MODULE_2__.listen)(map.getLayerGroup(), _events_EventType_js__WEBPACK_IMPORTED_MODULE_4__["default"].CHANGE, this.updateUrl_, this),
|
|
256
|
+
(0,_events_js__WEBPACK_IMPORTED_MODULE_2__.listen)(map, 'change:layergroup', this.handleChangeLayerGroup_, this),
|
|
257
|
+
);
|
|
258
|
+
|
|
259
|
+
if (!this.replace_) {
|
|
260
|
+
addEventListener('popstate', this.updateState_);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* @param {import("../Map.js").default} map Map.
|
|
266
|
+
* @private
|
|
267
|
+
*/
|
|
268
|
+
unregisterListeners_(map) {
|
|
269
|
+
for (let i = 0, ii = this.listenerKeys_.length; i < ii; ++i) {
|
|
270
|
+
(0,_events_js__WEBPACK_IMPORTED_MODULE_2__.unlistenByKey)(this.listenerKeys_[i]);
|
|
271
|
+
}
|
|
272
|
+
this.listenerKeys_.length = 0;
|
|
273
|
+
|
|
274
|
+
if (!this.replace_) {
|
|
275
|
+
removeEventListener('popstate', this.updateState_);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
const url = new URL(window.location.href);
|
|
279
|
+
const params = url.searchParams;
|
|
280
|
+
this.delete_(params, 'x');
|
|
281
|
+
this.delete_(params, 'y');
|
|
282
|
+
this.delete_(params, 'z');
|
|
283
|
+
this.delete_(params, 'r');
|
|
284
|
+
this.delete_(params, 'l');
|
|
285
|
+
window.history.replaceState(null, '', url);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* @private
|
|
290
|
+
*/
|
|
291
|
+
handleChangeLayerGroup_() {
|
|
292
|
+
const map = this.getMap();
|
|
293
|
+
if (!map) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
this.unregisterListeners_(map);
|
|
297
|
+
this.registerListeners_(map);
|
|
298
|
+
this.initial_ = true;
|
|
299
|
+
this.updateUrl_();
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* @private
|
|
304
|
+
*/
|
|
305
|
+
updateState_() {
|
|
306
|
+
const url = new URL(window.location.href);
|
|
307
|
+
const params = url.searchParams;
|
|
308
|
+
for (const key in this.trackedCallbacks_) {
|
|
309
|
+
const value = params.get(key);
|
|
310
|
+
if (key in this.trackedCallbacks_ && value !== this.trackedValues_[key]) {
|
|
311
|
+
this.trackedValues_[key] = value;
|
|
312
|
+
this.trackedCallbacks_[key](value);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
const map = this.getMap();
|
|
317
|
+
if (!map) {
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
const view = map.getView();
|
|
321
|
+
if (!view) {
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
let updateView = false;
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* @type {import('../View.js').AnimationOptions}
|
|
329
|
+
*/
|
|
330
|
+
const viewProperties = {};
|
|
331
|
+
|
|
332
|
+
const zoom = readNumber(this.get_(params, 'z'));
|
|
333
|
+
if ('z' in this.params_ && differentNumber(zoom, view.getZoom())) {
|
|
334
|
+
updateView = true;
|
|
335
|
+
viewProperties.zoom = zoom;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
const rotation = readNumber(this.get_(params, 'r'));
|
|
339
|
+
if ('r' in this.params_ && differentNumber(rotation, view.getRotation())) {
|
|
340
|
+
updateView = true;
|
|
341
|
+
viewProperties.rotation = rotation;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
const center = [
|
|
345
|
+
readNumber(this.get_(params, 'x')),
|
|
346
|
+
readNumber(this.get_(params, 'y')),
|
|
347
|
+
];
|
|
348
|
+
if (
|
|
349
|
+
('x' in this.params_ || 'y' in this.params_) &&
|
|
350
|
+
differentArray(center, view.getCenter())
|
|
351
|
+
) {
|
|
352
|
+
updateView = true;
|
|
353
|
+
viewProperties.center = center;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
if (updateView) {
|
|
357
|
+
if (!this.initial_ && this.animationOptions_) {
|
|
358
|
+
view.animate(Object.assign(viewProperties, this.animationOptions_));
|
|
359
|
+
} else {
|
|
360
|
+
if (viewProperties.center) {
|
|
361
|
+
view.setCenter(viewProperties.center);
|
|
362
|
+
}
|
|
363
|
+
if ('zoom' in viewProperties) {
|
|
364
|
+
view.setZoom(viewProperties.zoom);
|
|
365
|
+
}
|
|
366
|
+
if ('rotation' in viewProperties) {
|
|
367
|
+
view.setRotation(viewProperties.rotation);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
const layers = map.getAllLayers();
|
|
373
|
+
const layersParam = this.get_(params, 'l');
|
|
374
|
+
if (
|
|
375
|
+
'l' in this.params_ &&
|
|
376
|
+
layersParam &&
|
|
377
|
+
layersParam.length === layers.length
|
|
378
|
+
) {
|
|
379
|
+
for (let i = 0, ii = layers.length; i < ii; ++i) {
|
|
380
|
+
const value = parseInt(layersParam[i]);
|
|
381
|
+
if (!isNaN(value)) {
|
|
382
|
+
const visible = Boolean(value);
|
|
383
|
+
const layer = layers[i];
|
|
384
|
+
if (layer.getVisible() !== visible) {
|
|
385
|
+
layer.setVisible(visible);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Register a listener for a URL search parameter. The callback will be called with a new value
|
|
394
|
+
* when the corresponding search parameter changes due to history events (e.g. browser navigation).
|
|
395
|
+
*
|
|
396
|
+
* @param {string} key The URL search parameter.
|
|
397
|
+
* @param {Callback} callback The function to call when the search parameter changes.
|
|
398
|
+
* @return {string|null} The initial value of the search parameter (or null if absent from the URL).
|
|
399
|
+
* @api
|
|
400
|
+
*/
|
|
401
|
+
track(key, callback) {
|
|
402
|
+
this.trackedCallbacks_[key] = callback;
|
|
403
|
+
const url = new URL(window.location.href);
|
|
404
|
+
const params = url.searchParams;
|
|
405
|
+
const value = params.get(key);
|
|
406
|
+
this.trackedValues_[key] = value;
|
|
407
|
+
return value;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* Update the URL with a new search parameter value. If the value is null, it will be
|
|
412
|
+
* deleted from the search parameters.
|
|
413
|
+
*
|
|
414
|
+
* @param {string} key The URL search parameter.
|
|
415
|
+
* @param {string|null} value The updated value (or null to remove it from the URL).
|
|
416
|
+
* @api
|
|
417
|
+
*/
|
|
418
|
+
update(key, value) {
|
|
419
|
+
const url = new URL(window.location.href);
|
|
420
|
+
const params = url.searchParams;
|
|
421
|
+
if (value === null) {
|
|
422
|
+
params.delete(key);
|
|
423
|
+
} else {
|
|
424
|
+
params.set(key, value);
|
|
425
|
+
}
|
|
426
|
+
if (key in this.trackedValues_) {
|
|
427
|
+
this.trackedValues_[key] = value;
|
|
428
|
+
}
|
|
429
|
+
this.updateHistory_(url);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* @private
|
|
434
|
+
*/
|
|
435
|
+
updateUrl_() {
|
|
436
|
+
const map = this.getMap();
|
|
437
|
+
if (!map) {
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
const view = map.getView();
|
|
441
|
+
if (!view) {
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
const center = view.getCenter();
|
|
446
|
+
const zoom = view.getZoom();
|
|
447
|
+
const rotation = view.getRotation();
|
|
448
|
+
|
|
449
|
+
const layers = map.getAllLayers();
|
|
450
|
+
const visibilities = new Array(layers.length);
|
|
451
|
+
for (let i = 0, ii = layers.length; i < ii; ++i) {
|
|
452
|
+
visibilities[i] = layers[i].getVisible() ? '1' : '0';
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
const url = new URL(window.location.href);
|
|
456
|
+
const params = url.searchParams;
|
|
457
|
+
|
|
458
|
+
this.set_(params, 'x', writeNumber(center[0]));
|
|
459
|
+
this.set_(params, 'y', writeNumber(center[1]));
|
|
460
|
+
this.set_(params, 'z', writeNumber(zoom));
|
|
461
|
+
this.set_(params, 'r', writeNumber(rotation));
|
|
462
|
+
this.set_(params, 'l', visibilities.join(''));
|
|
463
|
+
|
|
464
|
+
this.updateHistory_(url);
|
|
465
|
+
this.initial_ = false;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
/**
|
|
469
|
+
* @private
|
|
470
|
+
* @param {URL} url The URL.
|
|
471
|
+
*/
|
|
472
|
+
updateHistory_(url) {
|
|
473
|
+
if (url.href !== window.location.href) {
|
|
474
|
+
if (this.initial_ || this.replace_) {
|
|
475
|
+
window.history.replaceState(history.state, '', url);
|
|
476
|
+
} else {
|
|
477
|
+
window.history.pushState(null, '', url);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Link);
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
/***/ })
|
|
487
|
+
|
|
488
|
+
}])
|
|
489
|
+
//# sourceMappingURL=vendors-node_modules_ol_interaction_Link_js.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendors-node_modules_ol_interaction_Link_js.js","mappings":";;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AAC8C;AACC;AACI;AAChB;AACQ;;AAE3C;AACA,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB;AACA;AACA,SAAS,iDAAO;AAChB;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,eAAe;AAC1B,WAAW,eAAe;AAC1B,YAAY,SAAS;AACrB;AACA;AACA;AACA;;AAEA,cAAc,qBAAqB;;AAEnC;AACA,aAAa,uBAAuB;AACpC;;AAEA;AACA,aAAa,QAAQ;AACrB,cAAc,+CAA+C;AAC7D,cAAc,eAAe;AAC7B;AACA,cAAc,SAAS;AACvB;AACA,cAAc,QAAQ;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAW;AAC9B;AACA,aAAa,SAAS;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,mBAAmB;AACnB;;AAEA;AACA;AACA,0BAA0B;AAC1B,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,KAAK,IAAI;;AAET;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B,aAAa,QAAQ;AACrB,cAAc,aAAa;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,kCAAkC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,6BAA6B;AAC1C;AACA;AACA;AACA;AACA,MAAM,kDAAM,MAAM,gEAAoB;AACtC,MAAM,kDAAM,sBAAsB,mEAAgB;AAClD,MAAM,kDAAM;AACZ;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,6BAA6B;AAC1C;AACA;AACA;AACA,oDAAoD,QAAQ;AAC5D,MAAM,yDAAa;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,UAAU;AACvB,cAAc,aAAa;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA,iEAAe,IAAI,EAAC","sources":["webpack://@vaadin/bundles/./node_modules/ol/interaction/Link.js"],"sourcesContent":["/**\n * @module ol/interaction/Link\n */\nimport MapEventType from '../MapEventType.js';\nimport EventType from '../events/EventType.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {toFixed} from '../math.js';\nimport Interaction from './Interaction.js';\n\n/**\n * @param {number} number A number.\n * @return {number} A number with at most 5 decimal places.\n */\nfunction to5(number) {\n return toFixed(number, 5);\n}\n\n/**\n * @param {string} string A string.\n * @return {number} A number representing the string.\n */\nfunction readNumber(string) {\n return parseFloat(string);\n}\n\n/**\n * @param {number} number A number.\n * @return {string} A string representing the number.\n */\nfunction writeNumber(number) {\n return to5(number).toString();\n}\n\n/**\n * @param {number} a A number.\n * @param {number} b A number.\n * @return {boolean} The numbers are different.\n */\nfunction differentNumber(a, b) {\n if (isNaN(a)) {\n return false;\n }\n return a !== readNumber(writeNumber(b));\n}\n\n/**\n * @param {Array<number>} a An array of two numbers.\n * @param {Array<number>} b An array of two numbers.\n * @return {boolean} The arrays are different.\n */\nfunction differentArray(a, b) {\n return differentNumber(a[0], b[0]) || differentNumber(a[1], b[1]);\n}\n\n/** @typedef {'x'|'y'|'z'|'r'|'l'} Params */\n\n/**\n * @typedef {function(string):void} Callback\n */\n\n/**\n * @typedef {Object} Options\n * @property {boolean|import('../View.js').AnimationOptions} [animate=true] Animate view transitions.\n * @property {Array<Params>} [params=['x', 'y', 'z', 'r', 'l']] Properties to track. Default is to track\n * `x` (center x), `y` (center y), `z` (zoom), `r` (rotation) and `l` (layers).\n * @property {boolean} [replace=false] Replace the current URL without creating the new entry in browser history.\n * By default, changes in the map state result in a new entry being added to the browser history.\n * @property {string} [prefix=''] By default, the URL will be updated with search parameters x, y, z, and r. To\n * avoid collisions with existing search parameters that your application uses, you can supply a custom prefix for\n * the ones used by this interaction (e.g. 'ol:').\n */\n\n/**\n * @classdesc\n * An interaction that synchronizes the map state with the URL.\n *\n * @api\n */\nclass Link extends Interaction {\n /**\n * @param {Options} [options] Link options.\n */\n constructor(options) {\n super();\n\n options = Object.assign(\n {\n animate: true,\n params: ['x', 'y', 'z', 'r', 'l'],\n replace: false,\n prefix: '',\n },\n options || {},\n );\n\n let animationOptions;\n if (options.animate === true) {\n animationOptions = {duration: 250};\n } else if (!options.animate) {\n animationOptions = null;\n } else {\n animationOptions = options.animate;\n }\n\n /**\n * @type {import('../View.js').AnimationOptions|null}\n * @private\n */\n this.animationOptions_ = animationOptions;\n\n /**\n * @type {Object<Params, boolean>}\n * @private\n */\n this.params_ = options.params.reduce((acc, value) => {\n acc[value] = true;\n return acc;\n }, {});\n\n /**\n * @private\n * @type {boolean}\n */\n this.replace_ = options.replace;\n\n /**\n * @private\n * @type {string}\n */\n this.prefix_ = options.prefix;\n\n /**\n * @private\n * @type {!Array<import(\"../events.js\").EventsKey>}\n */\n this.listenerKeys_ = [];\n\n /**\n * @private\n * @type {boolean}\n */\n this.initial_ = true;\n\n /**\n * @private\n */\n this.updateState_ = this.updateState_.bind(this);\n\n /**\n * The tracked parameter callbacks.\n * @private\n * @type {Object<string, Callback>}\n */\n this.trackedCallbacks_ = {};\n\n /**\n * The tracked parameter values.\n * @private\n * @type {Object<string, string|null>}\n */\n this.trackedValues_ = {};\n }\n\n /**\n * @private\n * @param {string} name A parameter name.\n * @return {string} A name with the prefix applied.\n */\n getParamName_(name) {\n if (!this.prefix_) {\n return name;\n }\n return this.prefix_ + name;\n }\n\n /**\n * @private\n * @param {URLSearchParams} params The search params.\n * @param {string} name The unprefixed parameter name.\n * @return {string|null} The parameter value.\n */\n get_(params, name) {\n return params.get(this.getParamName_(name));\n }\n\n /**\n * @private\n * @param {URLSearchParams} params The search params.\n * @param {string} name The unprefixed parameter name.\n * @param {string} value The param value.\n */\n set_(params, name, value) {\n if (!(name in this.params_)) {\n return;\n }\n params.set(this.getParamName_(name), value);\n }\n\n /**\n * @private\n * @param {URLSearchParams} params The search params.\n * @param {string} name The unprefixed parameter name.\n */\n delete_(params, name) {\n if (!(name in this.params_)) {\n return;\n }\n params.delete(this.getParamName_(name));\n }\n\n /**\n * @param {import(\"../Map.js\").default|null} map Map.\n * @override\n */\n setMap(map) {\n const oldMap = this.getMap();\n super.setMap(map);\n if (map === oldMap) {\n return;\n }\n if (oldMap) {\n this.unregisterListeners_(oldMap);\n }\n if (map) {\n this.initial_ = true;\n this.updateState_();\n this.registerListeners_(map);\n }\n }\n\n /**\n * @param {import(\"../Map.js\").default} map Map.\n * @private\n */\n registerListeners_(map) {\n this.listenerKeys_.push(\n listen(map, MapEventType.MOVEEND, this.updateUrl_, this),\n listen(map.getLayerGroup(), EventType.CHANGE, this.updateUrl_, this),\n listen(map, 'change:layergroup', this.handleChangeLayerGroup_, this),\n );\n\n if (!this.replace_) {\n addEventListener('popstate', this.updateState_);\n }\n }\n\n /**\n * @param {import(\"../Map.js\").default} map Map.\n * @private\n */\n unregisterListeners_(map) {\n for (let i = 0, ii = this.listenerKeys_.length; i < ii; ++i) {\n unlistenByKey(this.listenerKeys_[i]);\n }\n this.listenerKeys_.length = 0;\n\n if (!this.replace_) {\n removeEventListener('popstate', this.updateState_);\n }\n\n const url = new URL(window.location.href);\n const params = url.searchParams;\n this.delete_(params, 'x');\n this.delete_(params, 'y');\n this.delete_(params, 'z');\n this.delete_(params, 'r');\n this.delete_(params, 'l');\n window.history.replaceState(null, '', url);\n }\n\n /**\n * @private\n */\n handleChangeLayerGroup_() {\n const map = this.getMap();\n if (!map) {\n return;\n }\n this.unregisterListeners_(map);\n this.registerListeners_(map);\n this.initial_ = true;\n this.updateUrl_();\n }\n\n /**\n * @private\n */\n updateState_() {\n const url = new URL(window.location.href);\n const params = url.searchParams;\n for (const key in this.trackedCallbacks_) {\n const value = params.get(key);\n if (key in this.trackedCallbacks_ && value !== this.trackedValues_[key]) {\n this.trackedValues_[key] = value;\n this.trackedCallbacks_[key](value);\n }\n }\n\n const map = this.getMap();\n if (!map) {\n return;\n }\n const view = map.getView();\n if (!view) {\n return;\n }\n\n let updateView = false;\n\n /**\n * @type {import('../View.js').AnimationOptions}\n */\n const viewProperties = {};\n\n const zoom = readNumber(this.get_(params, 'z'));\n if ('z' in this.params_ && differentNumber(zoom, view.getZoom())) {\n updateView = true;\n viewProperties.zoom = zoom;\n }\n\n const rotation = readNumber(this.get_(params, 'r'));\n if ('r' in this.params_ && differentNumber(rotation, view.getRotation())) {\n updateView = true;\n viewProperties.rotation = rotation;\n }\n\n const center = [\n readNumber(this.get_(params, 'x')),\n readNumber(this.get_(params, 'y')),\n ];\n if (\n ('x' in this.params_ || 'y' in this.params_) &&\n differentArray(center, view.getCenter())\n ) {\n updateView = true;\n viewProperties.center = center;\n }\n\n if (updateView) {\n if (!this.initial_ && this.animationOptions_) {\n view.animate(Object.assign(viewProperties, this.animationOptions_));\n } else {\n if (viewProperties.center) {\n view.setCenter(viewProperties.center);\n }\n if ('zoom' in viewProperties) {\n view.setZoom(viewProperties.zoom);\n }\n if ('rotation' in viewProperties) {\n view.setRotation(viewProperties.rotation);\n }\n }\n }\n\n const layers = map.getAllLayers();\n const layersParam = this.get_(params, 'l');\n if (\n 'l' in this.params_ &&\n layersParam &&\n layersParam.length === layers.length\n ) {\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const value = parseInt(layersParam[i]);\n if (!isNaN(value)) {\n const visible = Boolean(value);\n const layer = layers[i];\n if (layer.getVisible() !== visible) {\n layer.setVisible(visible);\n }\n }\n }\n }\n }\n\n /**\n * Register a listener for a URL search parameter. The callback will be called with a new value\n * when the corresponding search parameter changes due to history events (e.g. browser navigation).\n *\n * @param {string} key The URL search parameter.\n * @param {Callback} callback The function to call when the search parameter changes.\n * @return {string|null} The initial value of the search parameter (or null if absent from the URL).\n * @api\n */\n track(key, callback) {\n this.trackedCallbacks_[key] = callback;\n const url = new URL(window.location.href);\n const params = url.searchParams;\n const value = params.get(key);\n this.trackedValues_[key] = value;\n return value;\n }\n\n /**\n * Update the URL with a new search parameter value. If the value is null, it will be\n * deleted from the search parameters.\n *\n * @param {string} key The URL search parameter.\n * @param {string|null} value The updated value (or null to remove it from the URL).\n * @api\n */\n update(key, value) {\n const url = new URL(window.location.href);\n const params = url.searchParams;\n if (value === null) {\n params.delete(key);\n } else {\n params.set(key, value);\n }\n if (key in this.trackedValues_) {\n this.trackedValues_[key] = value;\n }\n this.updateHistory_(url);\n }\n\n /**\n * @private\n */\n updateUrl_() {\n const map = this.getMap();\n if (!map) {\n return;\n }\n const view = map.getView();\n if (!view) {\n return;\n }\n\n const center = view.getCenter();\n const zoom = view.getZoom();\n const rotation = view.getRotation();\n\n const layers = map.getAllLayers();\n const visibilities = new Array(layers.length);\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n visibilities[i] = layers[i].getVisible() ? '1' : '0';\n }\n\n const url = new URL(window.location.href);\n const params = url.searchParams;\n\n this.set_(params, 'x', writeNumber(center[0]));\n this.set_(params, 'y', writeNumber(center[1]));\n this.set_(params, 'z', writeNumber(zoom));\n this.set_(params, 'r', writeNumber(rotation));\n this.set_(params, 'l', visibilities.join(''));\n\n this.updateHistory_(url);\n this.initial_ = false;\n }\n\n /**\n * @private\n * @param {URL} url The URL.\n */\n updateHistory_(url) {\n if (url.href !== window.location.href) {\n if (this.initial_ || this.replace_) {\n window.history.replaceState(history.state, '', url);\n } else {\n window.history.pushState(null, '', url);\n }\n }\n }\n}\n\nexport default Link;\n"],"names":[],"sourceRoot":""}
|