@vaadin/bundles 25.3.0-alpha13 → 25.3.0-alpha14
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_vaadin_map_node_modules_ol_control_MousePosition_js.js +6 -6
- package/node_modules_vaadin_map_node_modules_ol_control_MousePosition_js.js.map +1 -1
- package/node_modules_vaadin_map_node_modules_ol_control_ZoomToExtent_js.js +10 -1
- package/node_modules_vaadin_map_node_modules_ol_control_ZoomToExtent_js.js.map +1 -1
- package/node_modules_vaadin_map_node_modules_ol_events_SnapEvent_js.js +5 -0
- package/node_modules_vaadin_map_node_modules_ol_events_SnapEvent_js.js.map +1 -1
- package/node_modules_vaadin_map_node_modules_ol_featureloader_js.js +9 -8
- package/node_modules_vaadin_map_node_modules_ol_featureloader_js.js.map +1 -1
- package/node_modules_vaadin_map_node_modules_ol_geom_GeometryCollection_js.js +1 -1
- package/node_modules_vaadin_map_node_modules_ol_geom_GeometryCollection_js.js.map +1 -1
- package/node_modules_vaadin_map_node_modules_ol_geom_flat_clip_js.js +172 -0
- package/node_modules_vaadin_map_node_modules_ol_geom_flat_clip_js.js.map +1 -0
- package/node_modules_vaadin_map_node_modules_ol_geom_flat_length_js-_95bd5.js +58 -0
- package/node_modules_vaadin_map_node_modules_ol_geom_flat_length_js-_95bd5.js.map +1 -0
- package/{node_modules_vaadin_map_node_modules_ol_render_VectorContext_js-node_modules_vaadin_map_node_-a1378d.js → node_modules_vaadin_map_node_modules_ol_geom_flat_lineoffset_js-node_modules_vaadin_map_node_-304640.js} +244 -5
- package/node_modules_vaadin_map_node_modules_ol_geom_flat_lineoffset_js-node_modules_vaadin_map_node_-304640.js.map +1 -0
- package/node_modules_vaadin_map_node_modules_ol_geom_flat_lineoffset_js-node_modules_vaadin_map_node_-7a9288.js +383 -0
- package/node_modules_vaadin_map_node_modules_ol_geom_flat_lineoffset_js-node_modules_vaadin_map_node_-7a9288.js.map +1 -0
- package/node_modules_vaadin_map_node_modules_ol_geom_flat_lineoffset_js.js +243 -0
- package/node_modules_vaadin_map_node_modules_ol_geom_flat_lineoffset_js.js.map +1 -0
- package/node_modules_vaadin_map_node_modules_ol_geom_flat_textpath_js.js +18 -5
- package/node_modules_vaadin_map_node_modules_ol_geom_flat_textpath_js.js.map +1 -1
- package/node_modules_vaadin_map_node_modules_ol_interaction_DragAndDrop_js.js +8 -8
- package/node_modules_vaadin_map_node_modules_ol_interaction_DragAndDrop_js.js.map +1 -1
- package/{node_modules_vaadin_map_node_modules_ol_render_VectorContext_js-_279c0.js → node_modules_vaadin_map_node_modules_ol_render_VectorContext_js.js} +2 -2
- package/node_modules_vaadin_map_node_modules_ol_render_VectorContext_js.js.map +1 -0
- package/node_modules_vaadin_map_node_modules_ol_render_canvas_LineStringBuilder_js.js +17 -7
- package/node_modules_vaadin_map_node_modules_ol_render_canvas_LineStringBuilder_js.js.map +1 -1
- package/node_modules_vaadin_map_node_modules_ol_render_canvas_ZIndexContext_js-_abc10.js +18 -15
- package/node_modules_vaadin_map_node_modules_ol_render_canvas_ZIndexContext_js-_abc10.js.map +1 -1
- package/node_modules_vaadin_map_node_modules_ol_render_canvas_ZIndexContext_js-_abc11.js +18 -15
- package/node_modules_vaadin_map_node_modules_ol_render_canvas_ZIndexContext_js-_abc11.js.map +1 -1
- package/node_modules_vaadin_map_node_modules_ol_renderer_Layer_js.js +21 -1
- package/node_modules_vaadin_map_node_modules_ol_renderer_Layer_js.js.map +1 -1
- package/node_modules_vaadin_map_node_modules_ol_source_Source_js.js +34 -3
- package/node_modules_vaadin_map_node_modules_ol_source_Source_js.js.map +1 -1
- package/package.json +135 -135
- package/vaadin-bundle.json +1824 -1812
- package/vaadin.js +2725 -1726
- package/vaadin.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_Feature_js.js +30 -16
- package/vendors-node_modules_vaadin_map_node_modules_ol_Feature_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_Overlay_js.js +6 -6
- package/vendors-node_modules_vaadin_map_node_modules_ol_Overlay_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_control_FullScreen_js.js +7 -7
- package/vendors-node_modules_vaadin_map_node_modules_ol_control_FullScreen_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_control_OverviewMap_js.js +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_control_OverviewMap_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_control_ScaleLine_js.js +6 -6
- package/vendors-node_modules_vaadin_map_node_modules_ol_control_ScaleLine_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_control_ZoomSlider_js.js +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_control_ZoomSlider_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_control_js.js +34 -25
- package/vendors-node_modules_vaadin_map_node_modules_ol_control_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_Draw_js.js +146 -943
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_Draw_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_Extent_js.js +111 -34
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_Extent_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_Link_js.js +3 -3
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_Link_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_Modify_js.js +1055 -219
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_Modify_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_Select_js.js +129 -57
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_Select_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_Snap_js.js +74 -80
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_Snap_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_Translate_js.js +11 -11
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_Translate_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_js.js +54 -54
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_tracing_js.js +801 -0
- package/vendors-node_modules_vaadin_map_node_modules_ol_interaction_tracing_js.js.map +1 -0
- package/vendors-node_modules_vaadin_map_node_modules_ol_render_Feature_js.js +36 -20
- package/vendors-node_modules_vaadin_map_node_modules_ol_render_Feature_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_render_canvas_BuilderGroup_js.js +17 -279
- package/vendors-node_modules_vaadin_map_node_modules_ol_render_canvas_BuilderGroup_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_render_canvas_Builder_js.js +16 -7
- package/vendors-node_modules_vaadin_map_node_modules_ol_render_canvas_Builder_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_render_canvas_ExecutorGroup_js.js +53 -17
- package/vendors-node_modules_vaadin_map_node_modules_ol_render_canvas_ExecutorGroup_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_render_canvas_Executor_js.js +336 -38
- package/vendors-node_modules_vaadin_map_node_modules_ol_render_canvas_Executor_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_render_canvas_Immediate_js.js +75 -42
- package/vendors-node_modules_vaadin_map_node_modules_ol_render_canvas_Immediate_js.js.map +1 -1
- package/{node_modules_vaadin_map_node_modules_ol_render_canvas_PolygonBuilder_js.js → vendors-node_modules_vaadin_map_node_modules_ol_render_canvas_PolygonBuilder_js.js} +77 -11
- package/vendors-node_modules_vaadin_map_node_modules_ol_render_canvas_PolygonBuilder_js.js.map +1 -0
- package/vendors-node_modules_vaadin_map_node_modules_ol_render_canvas_TextBuilder_js.js +210 -16
- package/vendors-node_modules_vaadin_map_node_modules_ol_render_canvas_TextBuilder_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_renderer_canvas_Layer_js.js +88 -32
- package/vendors-node_modules_vaadin_map_node_modules_ol_renderer_canvas_Layer_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_renderer_canvas_VectorLayer_js.js +62 -22
- package/vendors-node_modules_vaadin_map_node_modules_ol_renderer_canvas_VectorLayer_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_renderer_vector_js.js +2 -2
- package/vendors-node_modules_vaadin_map_node_modules_ol_renderer_vector_js.js.map +1 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_source_Vector_js.js +135 -81
- package/vendors-node_modules_vaadin_map_node_modules_ol_source_Vector_js.js.map +1 -1
- package/node_modules_vaadin_map_node_modules_ol_render_VectorContext_js-_279c0.js.map +0 -1
- package/node_modules_vaadin_map_node_modules_ol_render_VectorContext_js-_279c1.js +0 -144
- package/node_modules_vaadin_map_node_modules_ol_render_VectorContext_js-_279c1.js.map +0 -1
- package/node_modules_vaadin_map_node_modules_ol_render_VectorContext_js-node_modules_vaadin_map_node_-a1378d.js.map +0 -1
- package/node_modules_vaadin_map_node_modules_ol_render_canvas_PolygonBuilder_js.js.map +0 -1
- package/node_modules_vaadin_map_node_modules_ol_style_js.js +0 -48
- package/node_modules_vaadin_map_node_modules_ol_style_js.js.map +0 -1
- package/vendors-node_modules_vaadin_map_node_modules_ol_geom_js-node_modules_vaadin_map_node_modules_-f0f4bb.js +0 -769
- package/vendors-node_modules_vaadin_map_node_modules_ol_geom_js-node_modules_vaadin_map_node_modules_-f0f4bb.js.map +0 -1
|
@@ -11,14 +11,14 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
11
11
|
/* harmony export */ "ExtentEvent": () => (/* binding */ ExtentEvent),
|
|
12
12
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
13
13
|
/* harmony export */ });
|
|
14
|
-
/* harmony import */ var
|
|
15
|
-
/* harmony import */ var
|
|
14
|
+
/* harmony import */ var _Feature_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Feature.js */ "./node_modules/@vaadin/map/node_modules/ol/Feature.js");
|
|
15
|
+
/* harmony import */ var _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../MapBrowserEventType.js */ "./node_modules/@vaadin/map/node_modules/ol/MapBrowserEventType.js");
|
|
16
16
|
/* harmony import */ var _coordinate_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../coordinate.js */ "./node_modules/@vaadin/map/node_modules/ol/coordinate.js");
|
|
17
17
|
/* harmony import */ var _events_Event_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../events/Event.js */ "./node_modules/@vaadin/map/node_modules/ol/events/Event.js");
|
|
18
18
|
/* harmony import */ var _events_condition_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../events/condition.js */ "./node_modules/@vaadin/map/node_modules/ol/events/condition.js");
|
|
19
|
-
/* harmony import */ var
|
|
20
|
-
/* harmony import */ var
|
|
21
|
-
/* harmony import */ var
|
|
19
|
+
/* harmony import */ var _extent_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../extent.js */ "./node_modules/@vaadin/map/node_modules/ol/extent.js");
|
|
20
|
+
/* harmony import */ var _geom_Point_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../geom/Point.js */ "./node_modules/@vaadin/map/node_modules/ol/geom/Point.js");
|
|
21
|
+
/* harmony import */ var _geom_Polygon_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../geom/Polygon.js */ "./node_modules/@vaadin/map/node_modules/ol/geom/Polygon.js");
|
|
22
22
|
/* harmony import */ var _layer_Vector_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../layer/Vector.js */ "./node_modules/@vaadin/map/node_modules/ol/layer/Vector.js");
|
|
23
23
|
/* harmony import */ var _proj_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../proj.js */ "./node_modules/@vaadin/map/node_modules/ol/proj.js");
|
|
24
24
|
/* harmony import */ var _source_Vector_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../source/Vector.js */ "./node_modules/@vaadin/map/node_modules/ol/source/Vector.js");
|
|
@@ -47,6 +47,11 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
47
47
|
* takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
|
|
48
48
|
* boolean to indicate whether that event should be handled.
|
|
49
49
|
* Default is {@link module:ol/events/condition.always}.
|
|
50
|
+
* @property {import("../events/condition.js").Condition|null} [createCondition=null] A function that
|
|
51
|
+
* takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
|
|
52
|
+
* boolean to indicate whether that event should be handled to create a new extent.
|
|
53
|
+
* If `null`, the `condition` will also be used as `createCondition`.
|
|
54
|
+
* @property {boolean} [drag=false] An extent can be dragged.
|
|
50
55
|
* @property {import("../extent.js").Extent} [extent] Initial extent. Defaults to no
|
|
51
56
|
* initial extent.
|
|
52
57
|
* @property {import("../style/Style.js").StyleLike} [boxStyle]
|
|
@@ -100,11 +105,11 @@ class ExtentEvent extends _events_Event_js__WEBPACK_IMPORTED_MODULE_1__["default
|
|
|
100
105
|
|
|
101
106
|
/***
|
|
102
107
|
* @template Return
|
|
103
|
-
* @typedef {import("../Observable").OnSignature<import("../Observable").EventTypes, import("../events/Event.js").default, Return> &
|
|
104
|
-
* import("../Observable").OnSignature<import("../ObjectEventType").Types|
|
|
105
|
-
* 'change:active', import("../Object").ObjectEvent, Return> &
|
|
106
|
-
* import("../Observable").OnSignature<'extentchanged', ExtentEvent, Return> &
|
|
107
|
-
* import("../Observable").CombinedOnSignature<import("../Observable").EventTypes|import("../ObjectEventType").Types|
|
|
108
|
+
* @typedef {import("../Observable.js").OnSignature<import("../Observable.js").EventTypes, import("../events/Event.js").default, Return> &
|
|
109
|
+
* import("../Observable.js").OnSignature<import("../ObjectEventType.js").Types|
|
|
110
|
+
* 'change:active', import("../Object.js").ObjectEvent, Return> &
|
|
111
|
+
* import("../Observable.js").OnSignature<'extentchanged', ExtentEvent, Return> &
|
|
112
|
+
* import("../Observable.js").CombinedOnSignature<import("../Observable.js").EventTypes|import("../ObjectEventType.js").Types|
|
|
108
113
|
* 'change:active'|'extentchanged', Return>} ExtentOnSignature
|
|
109
114
|
*/
|
|
110
115
|
|
|
@@ -112,7 +117,8 @@ class ExtentEvent extends _events_Event_js__WEBPACK_IMPORTED_MODULE_1__["default
|
|
|
112
117
|
* @classdesc
|
|
113
118
|
* Allows the user to draw a vector box by clicking and dragging on the map.
|
|
114
119
|
* Once drawn, the vector box can be modified by dragging its vertices or edges.
|
|
115
|
-
*
|
|
120
|
+
* The interaction can also be configured with an initial extent and a `createCondition`
|
|
121
|
+
* to prevent the creation of a new extent on `pointerdown`, if desired.
|
|
116
122
|
*
|
|
117
123
|
* @fires ExtentEvent
|
|
118
124
|
* @api
|
|
@@ -127,12 +133,12 @@ class Extent extends _Pointer_js__WEBPACK_IMPORTED_MODULE_2__["default"] {
|
|
|
127
133
|
super(/** @type {import("./Pointer.js").Options} */ (options));
|
|
128
134
|
|
|
129
135
|
/***
|
|
130
|
-
* @type {ExtentOnSignature<import("../events").EventsKey>}
|
|
136
|
+
* @type {ExtentOnSignature<import("../events.js").EventsKey>}
|
|
131
137
|
*/
|
|
132
138
|
this.on;
|
|
133
139
|
|
|
134
140
|
/***
|
|
135
|
-
* @type {ExtentOnSignature<import("../events").EventsKey>}
|
|
141
|
+
* @type {ExtentOnSignature<import("../events.js").EventsKey>}
|
|
136
142
|
*/
|
|
137
143
|
this.once;
|
|
138
144
|
|
|
@@ -148,6 +154,18 @@ class Extent extends _Pointer_js__WEBPACK_IMPORTED_MODULE_2__["default"] {
|
|
|
148
154
|
*/
|
|
149
155
|
this.condition_ = options.condition ? options.condition : _events_condition_js__WEBPACK_IMPORTED_MODULE_3__.always;
|
|
150
156
|
|
|
157
|
+
/**
|
|
158
|
+
* @type {import("../events/condition.js").Condition}
|
|
159
|
+
* @private
|
|
160
|
+
*/
|
|
161
|
+
this.createCondition_ = options.createCondition || this.condition_;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* @type {boolean}
|
|
165
|
+
* @private
|
|
166
|
+
*/
|
|
167
|
+
this.drag_ = options.drag || false;
|
|
168
|
+
|
|
151
169
|
/**
|
|
152
170
|
* Extent of the drawn box
|
|
153
171
|
* @type {import("../extent.js").Extent}
|
|
@@ -279,17 +297,31 @@ class Extent extends _Pointer_js__WEBPACK_IMPORTED_MODULE_2__["default"] {
|
|
|
279
297
|
|
|
280
298
|
/**
|
|
281
299
|
* @param {import("../MapBrowserEvent.js").default} mapBrowserEvent pointer move event
|
|
300
|
+
* @return {boolean} The event was handled.
|
|
282
301
|
* @private
|
|
283
302
|
*/
|
|
284
303
|
handlePointerMove_(mapBrowserEvent) {
|
|
285
304
|
const pixel = mapBrowserEvent.pixel;
|
|
286
305
|
const map = mapBrowserEvent.map;
|
|
306
|
+
const draggable =
|
|
307
|
+
this.drag_ &&
|
|
308
|
+
(0,_extent_js__WEBPACK_IMPORTED_MODULE_7__.containsCoordinate)(this.extent_, mapBrowserEvent.coordinate);
|
|
287
309
|
|
|
288
310
|
let vertex = this.snapToVertex_(pixel, map);
|
|
289
|
-
if (!vertex) {
|
|
311
|
+
if (!vertex && this.createCondition_(mapBrowserEvent) && !draggable) {
|
|
290
312
|
vertex = map.getCoordinateFromPixelInternal(pixel);
|
|
291
313
|
}
|
|
292
|
-
|
|
314
|
+
if (draggable && !vertex) {
|
|
315
|
+
this.getMap().getViewport().classList.add('ol-grab');
|
|
316
|
+
} else {
|
|
317
|
+
this.getMap().getViewport().classList.remove('ol-grab');
|
|
318
|
+
}
|
|
319
|
+
if (vertex) {
|
|
320
|
+
this.updatePointerFeature_(vertex);
|
|
321
|
+
return true;
|
|
322
|
+
}
|
|
323
|
+
this.noVertexFeature_();
|
|
324
|
+
return false;
|
|
293
325
|
}
|
|
294
326
|
|
|
295
327
|
/**
|
|
@@ -302,9 +334,9 @@ class Extent extends _Pointer_js__WEBPACK_IMPORTED_MODULE_2__["default"] {
|
|
|
302
334
|
|
|
303
335
|
if (!extentFeature) {
|
|
304
336
|
if (!extent) {
|
|
305
|
-
extentFeature = new
|
|
337
|
+
extentFeature = new _Feature_js__WEBPACK_IMPORTED_MODULE_8__["default"]({});
|
|
306
338
|
} else {
|
|
307
|
-
extentFeature = new
|
|
339
|
+
extentFeature = new _Feature_js__WEBPACK_IMPORTED_MODULE_8__["default"]((0,_geom_Polygon_js__WEBPACK_IMPORTED_MODULE_9__.fromExtent)(extent));
|
|
308
340
|
}
|
|
309
341
|
this.extentFeature_ = extentFeature;
|
|
310
342
|
this.extentOverlay_.getSource().addFeature(extentFeature);
|
|
@@ -312,7 +344,7 @@ class Extent extends _Pointer_js__WEBPACK_IMPORTED_MODULE_2__["default"] {
|
|
|
312
344
|
if (!extent) {
|
|
313
345
|
extentFeature.setGeometry(undefined);
|
|
314
346
|
} else {
|
|
315
|
-
extentFeature.setGeometry((0,
|
|
347
|
+
extentFeature.setGeometry((0,_geom_Polygon_js__WEBPACK_IMPORTED_MODULE_9__.fromExtent)(extent));
|
|
316
348
|
}
|
|
317
349
|
}
|
|
318
350
|
return extentFeature;
|
|
@@ -320,22 +352,35 @@ class Extent extends _Pointer_js__WEBPACK_IMPORTED_MODULE_2__["default"] {
|
|
|
320
352
|
|
|
321
353
|
/**
|
|
322
354
|
* @param {import("../coordinate.js").Coordinate} vertex location of feature
|
|
355
|
+
* @param {boolean} [createIfNotExists] create the feature if it does not exist
|
|
323
356
|
* @return {Feature} vertex as feature
|
|
324
357
|
* @private
|
|
325
358
|
*/
|
|
326
|
-
|
|
359
|
+
updatePointerFeature_(vertex, createIfNotExists = true) {
|
|
327
360
|
let vertexFeature = this.vertexFeature_;
|
|
328
|
-
if (!vertexFeature) {
|
|
329
|
-
vertexFeature = new
|
|
361
|
+
if (createIfNotExists && !vertexFeature) {
|
|
362
|
+
vertexFeature = new _Feature_js__WEBPACK_IMPORTED_MODULE_8__["default"](new _geom_Point_js__WEBPACK_IMPORTED_MODULE_10__["default"](vertex));
|
|
330
363
|
this.vertexFeature_ = vertexFeature;
|
|
331
364
|
this.vertexOverlay_.getSource().addFeature(vertexFeature);
|
|
332
|
-
}
|
|
365
|
+
}
|
|
366
|
+
if (vertexFeature) {
|
|
333
367
|
const geometry = vertexFeature.getGeometry();
|
|
334
368
|
geometry.setCoordinates(vertex);
|
|
335
369
|
}
|
|
336
370
|
return vertexFeature;
|
|
337
371
|
}
|
|
338
372
|
|
|
373
|
+
/**
|
|
374
|
+
* Remove the vertex feature if it exists.
|
|
375
|
+
* @private
|
|
376
|
+
*/
|
|
377
|
+
noVertexFeature_() {
|
|
378
|
+
if (this.vertexFeature_) {
|
|
379
|
+
this.vertexOverlay_.getSource().removeFeature(this.vertexFeature_);
|
|
380
|
+
this.vertexFeature_ = null;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
339
384
|
/**
|
|
340
385
|
* @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
|
|
341
386
|
* @return {boolean} `false` to stop event propagation.
|
|
@@ -343,19 +388,23 @@ class Extent extends _Pointer_js__WEBPACK_IMPORTED_MODULE_2__["default"] {
|
|
|
343
388
|
*/
|
|
344
389
|
handleEvent(mapBrowserEvent) {
|
|
345
390
|
if (!mapBrowserEvent.originalEvent || !this.condition_(mapBrowserEvent)) {
|
|
391
|
+
this.noVertexFeature_();
|
|
346
392
|
return true;
|
|
347
393
|
}
|
|
394
|
+
|
|
395
|
+
let handled = this.handlingDownUpSequence;
|
|
396
|
+
|
|
348
397
|
//display pointer (if not dragging)
|
|
349
398
|
if (
|
|
350
|
-
mapBrowserEvent.type ==
|
|
399
|
+
mapBrowserEvent.type == _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_11__["default"].POINTERMOVE &&
|
|
351
400
|
!this.handlingDownUpSequence
|
|
352
401
|
) {
|
|
353
|
-
this.handlePointerMove_(mapBrowserEvent);
|
|
402
|
+
handled = this.handlePointerMove_(mapBrowserEvent);
|
|
354
403
|
}
|
|
355
404
|
//call pointer to determine up/down/drag
|
|
356
405
|
super.handleEvent(mapBrowserEvent);
|
|
357
406
|
//return false to stop propagation
|
|
358
|
-
return
|
|
407
|
+
return !handled;
|
|
359
408
|
}
|
|
360
409
|
|
|
361
410
|
/**
|
|
@@ -411,13 +460,22 @@ class Extent extends _Pointer_js__WEBPACK_IMPORTED_MODULE_2__["default"] {
|
|
|
411
460
|
getOpposingPoint([extent[2], y]),
|
|
412
461
|
);
|
|
413
462
|
}
|
|
414
|
-
//no snap - new bbox
|
|
463
|
+
//no snap - new bbox or dragging existing bbox
|
|
415
464
|
} else {
|
|
416
465
|
vertex = map.getCoordinateFromPixelInternal(pixel);
|
|
417
|
-
|
|
418
|
-
this.
|
|
466
|
+
let drag = false;
|
|
467
|
+
if (this.drag_) {
|
|
468
|
+
if ((0,_extent_js__WEBPACK_IMPORTED_MODULE_7__.containsCoordinate)(extent, vertex)) {
|
|
469
|
+
this.pointerHandler_ = getDragHandler(extent, vertex);
|
|
470
|
+
drag = true;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
if (!drag && this.createCondition_(mapBrowserEvent)) {
|
|
474
|
+
this.setExtent([vertex[0], vertex[1], vertex[0], vertex[1]]);
|
|
475
|
+
this.pointerHandler_ = getPointHandler(vertex);
|
|
476
|
+
}
|
|
419
477
|
}
|
|
420
|
-
return
|
|
478
|
+
return !!this.pointerHandler_; //event handled; start downup sequence
|
|
421
479
|
}
|
|
422
480
|
|
|
423
481
|
/**
|
|
@@ -429,7 +487,7 @@ class Extent extends _Pointer_js__WEBPACK_IMPORTED_MODULE_2__["default"] {
|
|
|
429
487
|
if (this.pointerHandler_) {
|
|
430
488
|
const pixelCoordinate = mapBrowserEvent.coordinate;
|
|
431
489
|
this.setExtent(this.pointerHandler_(pixelCoordinate));
|
|
432
|
-
this.
|
|
490
|
+
this.updatePointerFeature_(pixelCoordinate, false);
|
|
433
491
|
}
|
|
434
492
|
}
|
|
435
493
|
|
|
@@ -443,7 +501,7 @@ class Extent extends _Pointer_js__WEBPACK_IMPORTED_MODULE_2__["default"] {
|
|
|
443
501
|
this.pointerHandler_ = null;
|
|
444
502
|
//If bbox is zero area, set to null;
|
|
445
503
|
const extent = this.getExtentInternal();
|
|
446
|
-
if (!extent || (0,
|
|
504
|
+
if (!extent || (0,_extent_js__WEBPACK_IMPORTED_MODULE_7__.getArea)(extent) === 0) {
|
|
447
505
|
this.setExtent(null);
|
|
448
506
|
}
|
|
449
507
|
return false; //Stop handling downup sequence
|
|
@@ -480,6 +538,7 @@ class Extent extends _Pointer_js__WEBPACK_IMPORTED_MODULE_2__["default"] {
|
|
|
480
538
|
*
|
|
481
539
|
* @return {import("../extent.js").Extent} Drawn extent in the view projection.
|
|
482
540
|
* @api
|
|
541
|
+
* @deprecated Use {@link module:ol/interaction/Extent~Extent#getExtent} instead.
|
|
483
542
|
*/
|
|
484
543
|
getExtentInternal() {
|
|
485
544
|
return this.extent_;
|
|
@@ -529,7 +588,7 @@ function getDefaultPointerStyleFunction() {
|
|
|
529
588
|
*/
|
|
530
589
|
function getPointHandler(fixedPoint) {
|
|
531
590
|
return function (point) {
|
|
532
|
-
return (0,
|
|
591
|
+
return (0,_extent_js__WEBPACK_IMPORTED_MODULE_7__.boundingExtent)([fixedPoint, point]);
|
|
533
592
|
};
|
|
534
593
|
}
|
|
535
594
|
|
|
@@ -541,17 +600,35 @@ function getPointHandler(fixedPoint) {
|
|
|
541
600
|
function getEdgeHandler(fixedP1, fixedP2) {
|
|
542
601
|
if (fixedP1[0] == fixedP2[0]) {
|
|
543
602
|
return function (point) {
|
|
544
|
-
return (0,
|
|
603
|
+
return (0,_extent_js__WEBPACK_IMPORTED_MODULE_7__.boundingExtent)([fixedP1, [point[0], fixedP2[1]]]);
|
|
545
604
|
};
|
|
546
605
|
}
|
|
547
606
|
if (fixedP1[1] == fixedP2[1]) {
|
|
548
607
|
return function (point) {
|
|
549
|
-
return (0,
|
|
608
|
+
return (0,_extent_js__WEBPACK_IMPORTED_MODULE_7__.boundingExtent)([fixedP1, [fixedP2[0], point[1]]]);
|
|
550
609
|
};
|
|
551
610
|
}
|
|
552
611
|
return null;
|
|
553
612
|
}
|
|
554
613
|
|
|
614
|
+
/**
|
|
615
|
+
* @param {import("../extent.js").Extent} extent The extent that will be dragged
|
|
616
|
+
* @param {import("../coordinate.js").Coordinate} vertex The vertex that drag delta is calculated from
|
|
617
|
+
* @return {PointerHandler|null} event handler
|
|
618
|
+
*/
|
|
619
|
+
function getDragHandler(extent, vertex) {
|
|
620
|
+
return function (point) {
|
|
621
|
+
const deltaX = point[0] - vertex[0];
|
|
622
|
+
const deltaY = point[1] - vertex[1];
|
|
623
|
+
return [
|
|
624
|
+
extent[0] + deltaX,
|
|
625
|
+
extent[1] + deltaY,
|
|
626
|
+
extent[2] + deltaX,
|
|
627
|
+
extent[3] + deltaY,
|
|
628
|
+
];
|
|
629
|
+
};
|
|
630
|
+
}
|
|
631
|
+
|
|
555
632
|
/**
|
|
556
633
|
* @param {import("../extent.js").Extent} extent extent
|
|
557
634
|
* @return {Array<Array<import("../coordinate.js").Coordinate>>} extent line segments
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vendors-node_modules_vaadin_map_node_modules_ol_interaction_Extent_js.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACoC;AACwB;AAMlC;AACa;AACO;AACO;AAChB;AAC8B;AACtB;AACL;AACO;AACM;AACP;;AAE9C;AACA,aAAa,QAAQ;AACrB,cAAc,4CAA4C;AAC1D,YAAY,iDAAiD;AAC7D;AACA,eAAe,wCAAwC;AACvD,cAAc,+BAA+B;AAC7C;AACA,cAAc,uCAAuC;AACrD;AACA,kBAAkB;AAClB,cAAc,QAAQ;AACtB;AACA,cAAc,uCAAuC;AACrD;AACA,kBAAkB;AAClB,cAAc,SAAS;AACvB;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,2CAA2C;AACjE;AACA;AACO,0BAA0B,wDAAK;AACtC;AACA,aAAa,+BAA+B;AAC5C;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,iFAAiF;AAC9F;;AAEA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,iDAAiD;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mDAAkB;AACvC;AACA,aAAa,SAAS;AACtB;AACA;AACA;;AAEA,qBAAqB,gCAAgC;;AAErD;AACA,cAAc;AACd;AACA;;AAEA;AACA,cAAc;AACd;AACA;;AAEA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,8DAA8D,wDAAM;;AAEpE;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,8BAA8B,wDAAW;AACzC,kBAAkB,yDAAY;AAC9B;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,cAAc;AACd;AACA;AACA,8BAA8B,wDAAW;AACzC,kBAAkB,yDAAY;AAC9B;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA,aAAa,6BAA6B;AAC1C,aAAa,6BAA6B;AAC1C,cAAc,4CAA4C;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,wEAAwB;AAChC,QAAQ,wEAAwB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,gEAAgB;AACnC;;AAEA;AACA,UAAU,wDAAkB;AAC5B;AACA;AACA;AACA,6BAA6B,+DAAyB;AACtD,6BAA6B,+DAAyB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,yCAAyC;AACtD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,+BAA+B;AAC5C,cAAc,SAAS;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,mDAAO,GAAG;AACtC,QAAQ;AACR,4BAA4B,mDAAO,CAAC,4DAAiB;AACrD;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR,kCAAkC,4DAAiB;AACnD;AACA;AACA;AACA;;AAEA;AACA,aAAa,uCAAuC;AACpD,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA,0BAA0B,mDAAO,KAAK,sDAAK;AAC3C;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,yCAAyC;AACtD,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4EAA+B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,yCAAyC;AACtD,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;;AAEA;AACA;AACA,aAAa,yCAAyC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,yCAAyC;AACtD,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oDAAO;AAC1B;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA,aAAa,6BAA6B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,+BAA+B;AAC7C;AACA;AACA;AACA,WAAW,sDAAY;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,+BAA+B;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,+BAA+B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,2CAA2C;AACvD;AACA;AACA,gBAAgB,oEAAkB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,2CAA2C;AACvD;AACA;AACA,gBAAgB,oEAAkB;AAClC;AACA;AACA;AACA;;AAEA;AACA,WAAW,uCAAuC;AAClD,YAAY,iFAAiF;AAC7F;AACA;AACA;AACA,WAAW,2DAAc;AACzB;AACA;;AAEA;AACA,WAAW,uCAAuC;AAClD,WAAW,uCAAuC;AAClD,YAAY,qBAAqB;AACjC;AACA;AACA;AACA;AACA,aAAa,2DAAc;AAC3B;AACA;AACA;AACA;AACA,aAAa,2DAAc;AAC3B;AACA;AACA;AACA;;AAEA;AACA,WAAW,+BAA+B;AAC1C,YAAY,qDAAqD;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,MAAM,EAAC","sources":["webpack://@vaadin/bundles/./node_modules/@vaadin/map/node_modules/ol/interaction/Extent.js"],"sourcesContent":["/**\n * @module ol/interaction/Extent\n */\nimport Feature from '../Feature.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport {\n closestOnSegment,\n distance as coordinateDistance,\n squaredDistance as squaredCoordinateDistance,\n squaredDistanceToSegment,\n} from '../coordinate.js';\nimport Event from '../events/Event.js';\nimport {always} from '../events/condition.js';\nimport {boundingExtent, getArea} from '../extent.js';\nimport Point from '../geom/Point.js';\nimport {fromExtent as polygonFromExtent} from '../geom/Polygon.js';\nimport VectorLayer from '../layer/Vector.js';\nimport {toUserExtent} from '../proj.js';\nimport VectorSource from '../source/Vector.js';\nimport {createEditingStyle} from '../style/Style.js';\nimport PointerInteraction from './Pointer.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.always}.\n * @property {import(\"../extent.js\").Extent} [extent] Initial extent. Defaults to no\n * initial extent.\n * @property {import(\"../style/Style.js\").StyleLike} [boxStyle]\n * Style for the drawn extent box. Defaults to the `Polygon` editing style\n * documented in {@link module:ol/style/Style~Style}\n * @property {number} [pixelTolerance=10] Pixel tolerance for considering the\n * pointer close enough to a segment or vertex for editing.\n * @property {import(\"../style/Style.js\").StyleLike} [pointerStyle]\n * Style for the cursor used to draw the extent. Defaults to the `Point` editing style\n * documented in {@link module:ol/style/Style~Style}\n * @property {boolean} [wrapX=false] Wrap the drawn extent across multiple maps\n * in the X direction? Only affects visuals, not functionality.\n */\n\n/**\n * @enum {string}\n */\nconst ExtentEventType = {\n /**\n * Triggered after the extent is changed\n * @event ExtentEvent#extentchanged\n * @api\n */\n EXTENTCHANGED: 'extentchanged',\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/Extent~Extent} instances are\n * instances of this type.\n */\nexport class ExtentEvent extends Event {\n /**\n * @param {import(\"../extent.js\").Extent} extent the new extent\n */\n constructor(extent) {\n super(ExtentEventType.EXTENTCHANGED);\n\n /**\n * The current extent.\n * @type {import(\"../extent.js\").Extent}\n * @api\n */\n this.extent = extent;\n }\n}\n\n/**\n * @typedef {function (import(\"../coordinate.js\").Coordinate): import(\"../extent.js\").Extent} PointerHandler\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature<import(\"../Observable\").EventTypes, import(\"../events/Event.js\").default, Return> &\n * import(\"../Observable\").OnSignature<import(\"../ObjectEventType\").Types|\n * 'change:active', import(\"../Object\").ObjectEvent, Return> &\n * import(\"../Observable\").OnSignature<'extentchanged', ExtentEvent, Return> &\n * import(\"../Observable\").CombinedOnSignature<import(\"../Observable\").EventTypes|import(\"../ObjectEventType\").Types|\n * 'change:active'|'extentchanged', Return>} ExtentOnSignature\n */\n\n/**\n * @classdesc\n * Allows the user to draw a vector box by clicking and dragging on the map.\n * Once drawn, the vector box can be modified by dragging its vertices or edges.\n * This interaction is only supported for mouse devices.\n *\n * @fires ExtentEvent\n * @api\n */\nclass Extent extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options || {};\n\n super(/** @type {import(\"./Pointer.js\").Options} */ (options));\n\n /***\n * @type {ExtentOnSignature<import(\"../events\").EventsKey>}\n */\n this.on;\n\n /***\n * @type {ExtentOnSignature<import(\"../events\").EventsKey>}\n */\n this.once;\n\n /***\n * @type {ExtentOnSignature<void>}\n */\n this.un;\n\n /**\n * Condition\n * @type {import(\"../events/condition.js\").Condition}\n * @private\n */\n this.condition_ = options.condition ? options.condition : always;\n\n /**\n * Extent of the drawn box\n * @type {import(\"../extent.js\").Extent}\n * @private\n */\n this.extent_ = null;\n\n /**\n * Handler for pointer move events\n * @type {PointerHandler|null}\n * @private\n */\n this.pointerHandler_ = null;\n\n /**\n * Pixel threshold to snap to extent\n * @type {number}\n * @private\n */\n this.pixelTolerance_ =\n options.pixelTolerance !== undefined ? options.pixelTolerance : 10;\n\n /**\n * Is the pointer snapped to an extent vertex\n * @type {boolean}\n * @private\n */\n this.snappedToVertex_ = false;\n\n /**\n * Feature for displaying the visible extent\n * @type {Feature}\n * @private\n */\n this.extentFeature_ = null;\n\n /**\n * Feature for displaying the visible pointer\n * @type {Feature<Point>}\n * @private\n */\n this.vertexFeature_ = null;\n\n if (!options) {\n options = {};\n }\n\n /**\n * Layer for the extentFeature\n * @type {VectorLayer}\n * @private\n */\n this.extentOverlay_ = new VectorLayer({\n source: new VectorSource({\n useSpatialIndex: false,\n wrapX: !!options.wrapX,\n }),\n style: options.boxStyle\n ? options.boxStyle\n : getDefaultExtentStyleFunction(),\n updateWhileAnimating: true,\n updateWhileInteracting: true,\n });\n\n /**\n * Layer for the vertexFeature\n * @type {VectorLayer}\n * @private\n */\n this.vertexOverlay_ = new VectorLayer({\n source: new VectorSource({\n useSpatialIndex: false,\n wrapX: !!options.wrapX,\n }),\n style: options.pointerStyle\n ? options.pointerStyle\n : getDefaultPointerStyleFunction(),\n updateWhileAnimating: true,\n updateWhileInteracting: true,\n });\n\n if (options.extent) {\n this.setExtent(options.extent);\n }\n }\n\n /**\n * @param {import(\"../pixel.js\").Pixel} pixel cursor location\n * @param {import(\"../Map.js\").default} map map\n * @return {import(\"../coordinate.js\").Coordinate|null} snapped vertex on extent\n * @private\n */\n snapToVertex_(pixel, map) {\n const pixelCoordinate = map.getCoordinateFromPixelInternal(pixel);\n const sortByDistance = function (a, b) {\n return (\n squaredDistanceToSegment(pixelCoordinate, a) -\n squaredDistanceToSegment(pixelCoordinate, b)\n );\n };\n const extent = this.getExtentInternal();\n if (extent) {\n //convert extents to line segments and find the segment closest to pixelCoordinate\n const segments = getSegments(extent);\n segments.sort(sortByDistance);\n const closestSegment = segments[0];\n\n let vertex = closestOnSegment(pixelCoordinate, closestSegment);\n const vertexPixel = map.getPixelFromCoordinateInternal(vertex);\n\n //if the distance is within tolerance, snap to the segment\n if (coordinateDistance(pixel, vertexPixel) <= this.pixelTolerance_) {\n //test if we should further snap to a vertex\n const pixel1 = map.getPixelFromCoordinateInternal(closestSegment[0]);\n const pixel2 = map.getPixelFromCoordinateInternal(closestSegment[1]);\n const squaredDist1 = squaredCoordinateDistance(vertexPixel, pixel1);\n const squaredDist2 = squaredCoordinateDistance(vertexPixel, pixel2);\n const dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));\n this.snappedToVertex_ = dist <= this.pixelTolerance_;\n if (this.snappedToVertex_) {\n vertex =\n squaredDist1 > squaredDist2 ? closestSegment[1] : closestSegment[0];\n }\n return vertex;\n }\n }\n return null;\n }\n\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent pointer move event\n * @private\n */\n handlePointerMove_(mapBrowserEvent) {\n const pixel = mapBrowserEvent.pixel;\n const map = mapBrowserEvent.map;\n\n let vertex = this.snapToVertex_(pixel, map);\n if (!vertex) {\n vertex = map.getCoordinateFromPixelInternal(pixel);\n }\n this.createOrUpdatePointerFeature_(vertex);\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent extent\n * @return {Feature} extent as featrue\n * @private\n */\n createOrUpdateExtentFeature_(extent) {\n let extentFeature = this.extentFeature_;\n\n if (!extentFeature) {\n if (!extent) {\n extentFeature = new Feature({});\n } else {\n extentFeature = new Feature(polygonFromExtent(extent));\n }\n this.extentFeature_ = extentFeature;\n this.extentOverlay_.getSource().addFeature(extentFeature);\n } else {\n if (!extent) {\n extentFeature.setGeometry(undefined);\n } else {\n extentFeature.setGeometry(polygonFromExtent(extent));\n }\n }\n return extentFeature;\n }\n\n /**\n * @param {import(\"../coordinate.js\").Coordinate} vertex location of feature\n * @return {Feature} vertex as feature\n * @private\n */\n createOrUpdatePointerFeature_(vertex) {\n let vertexFeature = this.vertexFeature_;\n if (!vertexFeature) {\n vertexFeature = new Feature(new Point(vertex));\n this.vertexFeature_ = vertexFeature;\n this.vertexOverlay_.getSource().addFeature(vertexFeature);\n } else {\n const geometry = vertexFeature.getGeometry();\n geometry.setCoordinates(vertex);\n }\n return vertexFeature;\n }\n\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @override\n */\n handleEvent(mapBrowserEvent) {\n if (!mapBrowserEvent.originalEvent || !this.condition_(mapBrowserEvent)) {\n return true;\n }\n //display pointer (if not dragging)\n if (\n mapBrowserEvent.type == MapBrowserEventType.POINTERMOVE &&\n !this.handlingDownUpSequence\n ) {\n this.handlePointerMove_(mapBrowserEvent);\n }\n //call pointer to determine up/down/drag\n super.handleEvent(mapBrowserEvent);\n //return false to stop propagation\n return false;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n const pixel = mapBrowserEvent.pixel;\n const map = mapBrowserEvent.map;\n\n const extent = this.getExtentInternal();\n let vertex = this.snapToVertex_(pixel, map);\n\n //find the extent corner opposite the passed corner\n const getOpposingPoint = function (point) {\n let x_ = null;\n let y_ = null;\n if (point[0] == extent[0]) {\n x_ = extent[2];\n } else if (point[0] == extent[2]) {\n x_ = extent[0];\n }\n if (point[1] == extent[1]) {\n y_ = extent[3];\n } else if (point[1] == extent[3]) {\n y_ = extent[1];\n }\n if (x_ !== null && y_ !== null) {\n return [x_, y_];\n }\n return null;\n };\n if (vertex && extent) {\n const x =\n vertex[0] == extent[0] || vertex[0] == extent[2] ? vertex[0] : null;\n const y =\n vertex[1] == extent[1] || vertex[1] == extent[3] ? vertex[1] : null;\n\n //snap to point\n if (x !== null && y !== null) {\n this.pointerHandler_ = getPointHandler(getOpposingPoint(vertex));\n //snap to edge\n } else if (x !== null) {\n this.pointerHandler_ = getEdgeHandler(\n getOpposingPoint([x, extent[1]]),\n getOpposingPoint([x, extent[3]]),\n );\n } else if (y !== null) {\n this.pointerHandler_ = getEdgeHandler(\n getOpposingPoint([extent[0], y]),\n getOpposingPoint([extent[2], y]),\n );\n }\n //no snap - new bbox\n } else {\n vertex = map.getCoordinateFromPixelInternal(pixel);\n this.setExtent([vertex[0], vertex[1], vertex[0], vertex[1]]);\n this.pointerHandler_ = getPointHandler(vertex);\n }\n return true; //event handled; start downup sequence\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n if (this.pointerHandler_) {\n const pixelCoordinate = mapBrowserEvent.coordinate;\n this.setExtent(this.pointerHandler_(pixelCoordinate));\n this.createOrUpdatePointerFeature_(pixelCoordinate);\n }\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n this.pointerHandler_ = null;\n //If bbox is zero area, set to null;\n const extent = this.getExtentInternal();\n if (!extent || getArea(extent) === 0) {\n this.setExtent(null);\n }\n return false; //Stop handling downup sequence\n }\n\n /**\n * Remove the interaction from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../Map.js\").default} map Map.\n * @override\n */\n setMap(map) {\n this.extentOverlay_.setMap(map);\n this.vertexOverlay_.setMap(map);\n super.setMap(map);\n }\n\n /**\n * Returns the current drawn extent in the view projection (or user projection if set)\n *\n * @return {import(\"../extent.js\").Extent} Drawn extent in the view projection.\n * @api\n */\n getExtent() {\n return toUserExtent(\n this.getExtentInternal(),\n this.getMap().getView().getProjection(),\n );\n }\n\n /**\n * Returns the current drawn extent in the view projection\n *\n * @return {import(\"../extent.js\").Extent} Drawn extent in the view projection.\n * @api\n */\n getExtentInternal() {\n return this.extent_;\n }\n\n /**\n * Manually sets the drawn extent, using the view projection.\n *\n * @param {import(\"../extent.js\").Extent} extent Extent\n * @api\n */\n setExtent(extent) {\n //Null extent means no bbox\n this.extent_ = extent ? extent : null;\n this.createOrUpdateExtentFeature_(extent);\n this.dispatchEvent(new ExtentEvent(this.extent_));\n }\n}\n\n/**\n * Returns the default style for the drawn bbox\n *\n * @return {import(\"../style/Style.js\").StyleFunction} Default Extent style\n */\nfunction getDefaultExtentStyleFunction() {\n const style = createEditingStyle();\n return function (feature, resolution) {\n return style['Polygon'];\n };\n}\n\n/**\n * Returns the default style for the pointer\n *\n * @return {import(\"../style/Style.js\").StyleFunction} Default pointer style\n */\nfunction getDefaultPointerStyleFunction() {\n const style = createEditingStyle();\n return function (feature, resolution) {\n return style['Point'];\n };\n}\n\n/**\n * @param {import(\"../coordinate.js\").Coordinate} fixedPoint corner that will be unchanged in the new extent\n * @return {function (import(\"../coordinate.js\").Coordinate): import(\"../extent.js\").Extent} event handler\n */\nfunction getPointHandler(fixedPoint) {\n return function (point) {\n return boundingExtent([fixedPoint, point]);\n };\n}\n\n/**\n * @param {import(\"../coordinate.js\").Coordinate} fixedP1 first corner that will be unchanged in the new extent\n * @param {import(\"../coordinate.js\").Coordinate} fixedP2 second corner that will be unchanged in the new extent\n * @return {PointerHandler|null} event handler\n */\nfunction getEdgeHandler(fixedP1, fixedP2) {\n if (fixedP1[0] == fixedP2[0]) {\n return function (point) {\n return boundingExtent([fixedP1, [point[0], fixedP2[1]]]);\n };\n }\n if (fixedP1[1] == fixedP2[1]) {\n return function (point) {\n return boundingExtent([fixedP1, [fixedP2[0], point[1]]]);\n };\n }\n return null;\n}\n\n/**\n * @param {import(\"../extent.js\").Extent} extent extent\n * @return {Array<Array<import(\"../coordinate.js\").Coordinate>>} extent line segments\n */\nfunction getSegments(extent) {\n return [\n [\n [extent[0], extent[1]],\n [extent[0], extent[3]],\n ],\n [\n [extent[0], extent[3]],\n [extent[2], extent[3]],\n ],\n [\n [extent[2], extent[3]],\n [extent[2], extent[1]],\n ],\n [\n [extent[2], extent[1]],\n [extent[0], extent[1]],\n ],\n ];\n}\n\nexport default Extent;\n"],"names":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"vendors-node_modules_vaadin_map_node_modules_ol_interaction_Extent_js.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACoC;AACwB;AAMlC;AACa;AACO;AAC2B;AACpC;AAC8B;AACtB;AACL;AACO;AACM;AACP;;AAE9C;AACA,aAAa,QAAQ;AACrB,cAAc,4CAA4C;AAC1D,YAAY,iDAAiD;AAC7D;AACA,eAAe,wCAAwC;AACvD,cAAc,iDAAiD;AAC/D,YAAY,iDAAiD;AAC7D;AACA;AACA,cAAc,SAAS;AACvB,cAAc,+BAA+B;AAC7C;AACA,cAAc,uCAAuC;AACrD;AACA,kBAAkB;AAClB,cAAc,QAAQ;AACtB;AACA,cAAc,uCAAuC;AACrD;AACA,kBAAkB;AAClB,cAAc,SAAS;AACvB;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,2CAA2C;AACjE;AACA;AACO,0BAA0B,wDAAK;AACtC;AACA,aAAa,+BAA+B;AAC5C;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,iFAAiF;AAC9F;;AAEA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,iDAAiD;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mDAAkB;AACvC;AACA,aAAa,SAAS;AACtB;AACA;AACA;;AAEA,qBAAqB,gCAAgC;;AAErD;AACA,cAAc;AACd;AACA;;AAEA;AACA,cAAc;AACd;AACA;;AAEA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,8DAA8D,wDAAM;;AAEpE;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,8BAA8B,wDAAW;AACzC,kBAAkB,yDAAY;AAC9B;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,cAAc;AACd;AACA;AACA,8BAA8B,wDAAW;AACzC,kBAAkB,yDAAY;AAC9B;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA,aAAa,6BAA6B;AAC1C,aAAa,6BAA6B;AAC1C,cAAc,4CAA4C;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,wEAAwB;AAChC,QAAQ,wEAAwB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,gEAAgB;AACnC;;AAEA;AACA,UAAU,wDAAkB;AAC5B;AACA;AACA;AACA,6BAA6B,+DAAyB;AACtD,6BAA6B,+DAAyB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,yCAAyC;AACtD,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,8DAAkB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,+BAA+B;AAC5C,cAAc,SAAS;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,mDAAO,GAAG;AACtC,QAAQ;AACR,4BAA4B,mDAAO,CAAC,4DAAiB;AACrD;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR,kCAAkC,4DAAiB;AACnD;AACA;AACA;AACA;;AAEA;AACA,aAAa,uCAAuC;AACpD,aAAa,SAAS;AACtB,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA,0BAA0B,mDAAO,KAAK,uDAAK;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,yCAAyC;AACtD,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,8BAA8B,4EAA+B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,yCAAyC;AACtD,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,YAAY,8DAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,iBAAiB;AACpD;;AAEA;AACA;AACA,aAAa,yCAAyC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,yCAAyC;AACtD,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mDAAO;AAC1B;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA,aAAa,6BAA6B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,+BAA+B;AAC7C;AACA;AACA;AACA,WAAW,sDAAY;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,+BAA+B;AAC7C;AACA,sBAAsB,qDAAqD;AAC3E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,+BAA+B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,2CAA2C;AACvD;AACA;AACA,gBAAgB,oEAAkB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,2CAA2C;AACvD;AACA;AACA,gBAAgB,oEAAkB;AAClC;AACA;AACA;AACA;;AAEA;AACA,WAAW,uCAAuC;AAClD,YAAY,iFAAiF;AAC7F;AACA;AACA;AACA,WAAW,0DAAc;AACzB;AACA;;AAEA;AACA,WAAW,uCAAuC;AAClD,WAAW,uCAAuC;AAClD,YAAY,qBAAqB;AACjC;AACA;AACA;AACA;AACA,aAAa,0DAAc;AAC3B;AACA;AACA;AACA;AACA,aAAa,0DAAc;AAC3B;AACA;AACA;AACA;;AAEA;AACA,WAAW,+BAA+B;AAC1C,WAAW,uCAAuC;AAClD,YAAY,qBAAqB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,+BAA+B;AAC1C,YAAY,qDAAqD;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,MAAM,EAAC","sources":["webpack://@vaadin/bundles/./node_modules/@vaadin/map/node_modules/ol/interaction/Extent.js"],"sourcesContent":["/**\n * @module ol/interaction/Extent\n */\nimport Feature from '../Feature.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport {\n closestOnSegment,\n distance as coordinateDistance,\n squaredDistance as squaredCoordinateDistance,\n squaredDistanceToSegment,\n} from '../coordinate.js';\nimport Event from '../events/Event.js';\nimport {always} from '../events/condition.js';\nimport {boundingExtent, containsCoordinate, getArea} from '../extent.js';\nimport Point from '../geom/Point.js';\nimport {fromExtent as polygonFromExtent} from '../geom/Polygon.js';\nimport VectorLayer from '../layer/Vector.js';\nimport {toUserExtent} from '../proj.js';\nimport VectorSource from '../source/Vector.js';\nimport {createEditingStyle} from '../style/Style.js';\nimport PointerInteraction from './Pointer.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.always}.\n * @property {import(\"../events/condition.js\").Condition|null} [createCondition=null] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled to create a new extent.\n * If `null`, the `condition` will also be used as `createCondition`.\n * @property {boolean} [drag=false] An extent can be dragged.\n * @property {import(\"../extent.js\").Extent} [extent] Initial extent. Defaults to no\n * initial extent.\n * @property {import(\"../style/Style.js\").StyleLike} [boxStyle]\n * Style for the drawn extent box. Defaults to the `Polygon` editing style\n * documented in {@link module:ol/style/Style~Style}\n * @property {number} [pixelTolerance=10] Pixel tolerance for considering the\n * pointer close enough to a segment or vertex for editing.\n * @property {import(\"../style/Style.js\").StyleLike} [pointerStyle]\n * Style for the cursor used to draw the extent. Defaults to the `Point` editing style\n * documented in {@link module:ol/style/Style~Style}\n * @property {boolean} [wrapX=false] Wrap the drawn extent across multiple maps\n * in the X direction? Only affects visuals, not functionality.\n */\n\n/**\n * @enum {string}\n */\nconst ExtentEventType = {\n /**\n * Triggered after the extent is changed\n * @event ExtentEvent#extentchanged\n * @api\n */\n EXTENTCHANGED: 'extentchanged',\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/Extent~Extent} instances are\n * instances of this type.\n */\nexport class ExtentEvent extends Event {\n /**\n * @param {import(\"../extent.js\").Extent} extent the new extent\n */\n constructor(extent) {\n super(ExtentEventType.EXTENTCHANGED);\n\n /**\n * The current extent.\n * @type {import(\"../extent.js\").Extent}\n * @api\n */\n this.extent = extent;\n }\n}\n\n/**\n * @typedef {function (import(\"../coordinate.js\").Coordinate): import(\"../extent.js\").Extent} PointerHandler\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n * import(\"../Observable.js\").OnSignature<import(\"../ObjectEventType.js\").Types|\n * 'change:active', import(\"../Object.js\").ObjectEvent, Return> &\n * import(\"../Observable.js\").OnSignature<'extentchanged', ExtentEvent, Return> &\n * import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|import(\"../ObjectEventType.js\").Types|\n * 'change:active'|'extentchanged', Return>} ExtentOnSignature\n */\n\n/**\n * @classdesc\n * Allows the user to draw a vector box by clicking and dragging on the map.\n * Once drawn, the vector box can be modified by dragging its vertices or edges.\n * The interaction can also be configured with an initial extent and a `createCondition`\n * to prevent the creation of a new extent on `pointerdown`, if desired.\n *\n * @fires ExtentEvent\n * @api\n */\nclass Extent extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options || {};\n\n super(/** @type {import(\"./Pointer.js\").Options} */ (options));\n\n /***\n * @type {ExtentOnSignature<import(\"../events.js\").EventsKey>}\n */\n this.on;\n\n /***\n * @type {ExtentOnSignature<import(\"../events.js\").EventsKey>}\n */\n this.once;\n\n /***\n * @type {ExtentOnSignature<void>}\n */\n this.un;\n\n /**\n * Condition\n * @type {import(\"../events/condition.js\").Condition}\n * @private\n */\n this.condition_ = options.condition ? options.condition : always;\n\n /**\n * @type {import(\"../events/condition.js\").Condition}\n * @private\n */\n this.createCondition_ = options.createCondition || this.condition_;\n\n /**\n * @type {boolean}\n * @private\n */\n this.drag_ = options.drag || false;\n\n /**\n * Extent of the drawn box\n * @type {import(\"../extent.js\").Extent}\n * @private\n */\n this.extent_ = null;\n\n /**\n * Handler for pointer move events\n * @type {PointerHandler|null}\n * @private\n */\n this.pointerHandler_ = null;\n\n /**\n * Pixel threshold to snap to extent\n * @type {number}\n * @private\n */\n this.pixelTolerance_ =\n options.pixelTolerance !== undefined ? options.pixelTolerance : 10;\n\n /**\n * Is the pointer snapped to an extent vertex\n * @type {boolean}\n * @private\n */\n this.snappedToVertex_ = false;\n\n /**\n * Feature for displaying the visible extent\n * @type {Feature}\n * @private\n */\n this.extentFeature_ = null;\n\n /**\n * Feature for displaying the visible pointer\n * @type {Feature<Point>}\n * @private\n */\n this.vertexFeature_ = null;\n\n if (!options) {\n options = {};\n }\n\n /**\n * Layer for the extentFeature\n * @type {VectorLayer}\n * @private\n */\n this.extentOverlay_ = new VectorLayer({\n source: new VectorSource({\n useSpatialIndex: false,\n wrapX: !!options.wrapX,\n }),\n style: options.boxStyle\n ? options.boxStyle\n : getDefaultExtentStyleFunction(),\n updateWhileAnimating: true,\n updateWhileInteracting: true,\n });\n\n /**\n * Layer for the vertexFeature\n * @type {VectorLayer}\n * @private\n */\n this.vertexOverlay_ = new VectorLayer({\n source: new VectorSource({\n useSpatialIndex: false,\n wrapX: !!options.wrapX,\n }),\n style: options.pointerStyle\n ? options.pointerStyle\n : getDefaultPointerStyleFunction(),\n updateWhileAnimating: true,\n updateWhileInteracting: true,\n });\n\n if (options.extent) {\n this.setExtent(options.extent);\n }\n }\n\n /**\n * @param {import(\"../pixel.js\").Pixel} pixel cursor location\n * @param {import(\"../Map.js\").default} map map\n * @return {import(\"../coordinate.js\").Coordinate|null} snapped vertex on extent\n * @private\n */\n snapToVertex_(pixel, map) {\n const pixelCoordinate = map.getCoordinateFromPixelInternal(pixel);\n const sortByDistance = function (a, b) {\n return (\n squaredDistanceToSegment(pixelCoordinate, a) -\n squaredDistanceToSegment(pixelCoordinate, b)\n );\n };\n const extent = this.getExtentInternal();\n if (extent) {\n //convert extents to line segments and find the segment closest to pixelCoordinate\n const segments = getSegments(extent);\n segments.sort(sortByDistance);\n const closestSegment = segments[0];\n\n let vertex = closestOnSegment(pixelCoordinate, closestSegment);\n const vertexPixel = map.getPixelFromCoordinateInternal(vertex);\n\n //if the distance is within tolerance, snap to the segment\n if (coordinateDistance(pixel, vertexPixel) <= this.pixelTolerance_) {\n //test if we should further snap to a vertex\n const pixel1 = map.getPixelFromCoordinateInternal(closestSegment[0]);\n const pixel2 = map.getPixelFromCoordinateInternal(closestSegment[1]);\n const squaredDist1 = squaredCoordinateDistance(vertexPixel, pixel1);\n const squaredDist2 = squaredCoordinateDistance(vertexPixel, pixel2);\n const dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));\n this.snappedToVertex_ = dist <= this.pixelTolerance_;\n if (this.snappedToVertex_) {\n vertex =\n squaredDist1 > squaredDist2 ? closestSegment[1] : closestSegment[0];\n }\n return vertex;\n }\n }\n return null;\n }\n\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent pointer move event\n * @return {boolean} The event was handled.\n * @private\n */\n handlePointerMove_(mapBrowserEvent) {\n const pixel = mapBrowserEvent.pixel;\n const map = mapBrowserEvent.map;\n const draggable =\n this.drag_ &&\n containsCoordinate(this.extent_, mapBrowserEvent.coordinate);\n\n let vertex = this.snapToVertex_(pixel, map);\n if (!vertex && this.createCondition_(mapBrowserEvent) && !draggable) {\n vertex = map.getCoordinateFromPixelInternal(pixel);\n }\n if (draggable && !vertex) {\n this.getMap().getViewport().classList.add('ol-grab');\n } else {\n this.getMap().getViewport().classList.remove('ol-grab');\n }\n if (vertex) {\n this.updatePointerFeature_(vertex);\n return true;\n }\n this.noVertexFeature_();\n return false;\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent extent\n * @return {Feature} extent as featrue\n * @private\n */\n createOrUpdateExtentFeature_(extent) {\n let extentFeature = this.extentFeature_;\n\n if (!extentFeature) {\n if (!extent) {\n extentFeature = new Feature({});\n } else {\n extentFeature = new Feature(polygonFromExtent(extent));\n }\n this.extentFeature_ = extentFeature;\n this.extentOverlay_.getSource().addFeature(extentFeature);\n } else {\n if (!extent) {\n extentFeature.setGeometry(undefined);\n } else {\n extentFeature.setGeometry(polygonFromExtent(extent));\n }\n }\n return extentFeature;\n }\n\n /**\n * @param {import(\"../coordinate.js\").Coordinate} vertex location of feature\n * @param {boolean} [createIfNotExists] create the feature if it does not exist\n * @return {Feature} vertex as feature\n * @private\n */\n updatePointerFeature_(vertex, createIfNotExists = true) {\n let vertexFeature = this.vertexFeature_;\n if (createIfNotExists && !vertexFeature) {\n vertexFeature = new Feature(new Point(vertex));\n this.vertexFeature_ = vertexFeature;\n this.vertexOverlay_.getSource().addFeature(vertexFeature);\n }\n if (vertexFeature) {\n const geometry = vertexFeature.getGeometry();\n geometry.setCoordinates(vertex);\n }\n return vertexFeature;\n }\n\n /**\n * Remove the vertex feature if it exists.\n * @private\n */\n noVertexFeature_() {\n if (this.vertexFeature_) {\n this.vertexOverlay_.getSource().removeFeature(this.vertexFeature_);\n this.vertexFeature_ = null;\n }\n }\n\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @override\n */\n handleEvent(mapBrowserEvent) {\n if (!mapBrowserEvent.originalEvent || !this.condition_(mapBrowserEvent)) {\n this.noVertexFeature_();\n return true;\n }\n\n let handled = this.handlingDownUpSequence;\n\n //display pointer (if not dragging)\n if (\n mapBrowserEvent.type == MapBrowserEventType.POINTERMOVE &&\n !this.handlingDownUpSequence\n ) {\n handled = this.handlePointerMove_(mapBrowserEvent);\n }\n //call pointer to determine up/down/drag\n super.handleEvent(mapBrowserEvent);\n //return false to stop propagation\n return !handled;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n const pixel = mapBrowserEvent.pixel;\n const map = mapBrowserEvent.map;\n\n const extent = this.getExtentInternal();\n let vertex = this.snapToVertex_(pixel, map);\n\n //find the extent corner opposite the passed corner\n const getOpposingPoint = function (point) {\n let x_ = null;\n let y_ = null;\n if (point[0] == extent[0]) {\n x_ = extent[2];\n } else if (point[0] == extent[2]) {\n x_ = extent[0];\n }\n if (point[1] == extent[1]) {\n y_ = extent[3];\n } else if (point[1] == extent[3]) {\n y_ = extent[1];\n }\n if (x_ !== null && y_ !== null) {\n return [x_, y_];\n }\n return null;\n };\n if (vertex && extent) {\n const x =\n vertex[0] == extent[0] || vertex[0] == extent[2] ? vertex[0] : null;\n const y =\n vertex[1] == extent[1] || vertex[1] == extent[3] ? vertex[1] : null;\n\n //snap to point\n if (x !== null && y !== null) {\n this.pointerHandler_ = getPointHandler(getOpposingPoint(vertex));\n //snap to edge\n } else if (x !== null) {\n this.pointerHandler_ = getEdgeHandler(\n getOpposingPoint([x, extent[1]]),\n getOpposingPoint([x, extent[3]]),\n );\n } else if (y !== null) {\n this.pointerHandler_ = getEdgeHandler(\n getOpposingPoint([extent[0], y]),\n getOpposingPoint([extent[2], y]),\n );\n }\n //no snap - new bbox or dragging existing bbox\n } else {\n vertex = map.getCoordinateFromPixelInternal(pixel);\n let drag = false;\n if (this.drag_) {\n if (containsCoordinate(extent, vertex)) {\n this.pointerHandler_ = getDragHandler(extent, vertex);\n drag = true;\n }\n }\n if (!drag && this.createCondition_(mapBrowserEvent)) {\n this.setExtent([vertex[0], vertex[1], vertex[0], vertex[1]]);\n this.pointerHandler_ = getPointHandler(vertex);\n }\n }\n return !!this.pointerHandler_; //event handled; start downup sequence\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n if (this.pointerHandler_) {\n const pixelCoordinate = mapBrowserEvent.coordinate;\n this.setExtent(this.pointerHandler_(pixelCoordinate));\n this.updatePointerFeature_(pixelCoordinate, false);\n }\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n this.pointerHandler_ = null;\n //If bbox is zero area, set to null;\n const extent = this.getExtentInternal();\n if (!extent || getArea(extent) === 0) {\n this.setExtent(null);\n }\n return false; //Stop handling downup sequence\n }\n\n /**\n * Remove the interaction from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../Map.js\").default} map Map.\n * @override\n */\n setMap(map) {\n this.extentOverlay_.setMap(map);\n this.vertexOverlay_.setMap(map);\n super.setMap(map);\n }\n\n /**\n * Returns the current drawn extent in the view projection (or user projection if set)\n *\n * @return {import(\"../extent.js\").Extent} Drawn extent in the view projection.\n * @api\n */\n getExtent() {\n return toUserExtent(\n this.getExtentInternal(),\n this.getMap().getView().getProjection(),\n );\n }\n\n /**\n * Returns the current drawn extent in the view projection\n *\n * @return {import(\"../extent.js\").Extent} Drawn extent in the view projection.\n * @api\n * @deprecated Use {@link module:ol/interaction/Extent~Extent#getExtent} instead.\n */\n getExtentInternal() {\n return this.extent_;\n }\n\n /**\n * Manually sets the drawn extent, using the view projection.\n *\n * @param {import(\"../extent.js\").Extent} extent Extent\n * @api\n */\n setExtent(extent) {\n //Null extent means no bbox\n this.extent_ = extent ? extent : null;\n this.createOrUpdateExtentFeature_(extent);\n this.dispatchEvent(new ExtentEvent(this.extent_));\n }\n}\n\n/**\n * Returns the default style for the drawn bbox\n *\n * @return {import(\"../style/Style.js\").StyleFunction} Default Extent style\n */\nfunction getDefaultExtentStyleFunction() {\n const style = createEditingStyle();\n return function (feature, resolution) {\n return style['Polygon'];\n };\n}\n\n/**\n * Returns the default style for the pointer\n *\n * @return {import(\"../style/Style.js\").StyleFunction} Default pointer style\n */\nfunction getDefaultPointerStyleFunction() {\n const style = createEditingStyle();\n return function (feature, resolution) {\n return style['Point'];\n };\n}\n\n/**\n * @param {import(\"../coordinate.js\").Coordinate} fixedPoint corner that will be unchanged in the new extent\n * @return {function (import(\"../coordinate.js\").Coordinate): import(\"../extent.js\").Extent} event handler\n */\nfunction getPointHandler(fixedPoint) {\n return function (point) {\n return boundingExtent([fixedPoint, point]);\n };\n}\n\n/**\n * @param {import(\"../coordinate.js\").Coordinate} fixedP1 first corner that will be unchanged in the new extent\n * @param {import(\"../coordinate.js\").Coordinate} fixedP2 second corner that will be unchanged in the new extent\n * @return {PointerHandler|null} event handler\n */\nfunction getEdgeHandler(fixedP1, fixedP2) {\n if (fixedP1[0] == fixedP2[0]) {\n return function (point) {\n return boundingExtent([fixedP1, [point[0], fixedP2[1]]]);\n };\n }\n if (fixedP1[1] == fixedP2[1]) {\n return function (point) {\n return boundingExtent([fixedP1, [fixedP2[0], point[1]]]);\n };\n }\n return null;\n}\n\n/**\n * @param {import(\"../extent.js\").Extent} extent The extent that will be dragged\n * @param {import(\"../coordinate.js\").Coordinate} vertex The vertex that drag delta is calculated from\n * @return {PointerHandler|null} event handler\n */\nfunction getDragHandler(extent, vertex) {\n return function (point) {\n const deltaX = point[0] - vertex[0];\n const deltaY = point[1] - vertex[1];\n return [\n extent[0] + deltaX,\n extent[1] + deltaY,\n extent[2] + deltaX,\n extent[3] + deltaY,\n ];\n };\n}\n\n/**\n * @param {import(\"../extent.js\").Extent} extent extent\n * @return {Array<Array<import(\"../coordinate.js\").Coordinate>>} extent line segments\n */\nfunction getSegments(extent) {\n return [\n [\n [extent[0], extent[1]],\n [extent[0], extent[3]],\n ],\n [\n [extent[0], extent[3]],\n [extent[2], extent[3]],\n ],\n [\n [extent[2], extent[3]],\n [extent[2], extent[1]],\n ],\n [\n [extent[2], extent[1]],\n [extent[0], extent[1]],\n ],\n ];\n}\n\nexport default Extent;\n"],"names":[],"sourceRoot":""}
|
|
@@ -11,8 +11,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
11
11
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
12
12
|
/* harmony export */ });
|
|
13
13
|
/* harmony import */ var _MapEventType_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../MapEventType.js */ "./node_modules/@vaadin/map/node_modules/ol/MapEventType.js");
|
|
14
|
-
/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../events/EventType.js */ "./node_modules/@vaadin/map/node_modules/ol/events/EventType.js");
|
|
15
14
|
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../events.js */ "./node_modules/@vaadin/map/node_modules/ol/events.js");
|
|
15
|
+
/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../events/EventType.js */ "./node_modules/@vaadin/map/node_modules/ol/events/EventType.js");
|
|
16
16
|
/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/@vaadin/map/node_modules/ol/math.js");
|
|
17
17
|
/* harmony import */ var _Interaction_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Interaction.js */ "./node_modules/@vaadin/map/node_modules/ol/interaction/Interaction.js");
|
|
18
18
|
/**
|
|
@@ -318,7 +318,7 @@ class Link extends _Interaction_js__WEBPACK_IMPORTED_MODULE_1__["default"] {
|
|
|
318
318
|
return;
|
|
319
319
|
}
|
|
320
320
|
const view = map.getView();
|
|
321
|
-
if (!view) {
|
|
321
|
+
if (!view || !view.isDef()) {
|
|
322
322
|
return;
|
|
323
323
|
}
|
|
324
324
|
|
|
@@ -438,7 +438,7 @@ class Link extends _Interaction_js__WEBPACK_IMPORTED_MODULE_1__["default"] {
|
|
|
438
438
|
return;
|
|
439
439
|
}
|
|
440
440
|
const view = map.getView();
|
|
441
|
-
if (!view) {
|
|
441
|
+
if (!view || !view.isDef()) {
|
|
442
442
|
return;
|
|
443
443
|
}
|
|
444
444
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vendors-node_modules_vaadin_map_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/@vaadin/map/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":""}
|
|
1
|
+
{"version":3,"file":"vendors-node_modules_vaadin_map_node_modules_ol_interaction_Link_js.js","mappings":";;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AAC8C;AACK;AACJ;AACZ;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/@vaadin/map/node_modules/ol/interaction/Link.js"],"sourcesContent":["/**\n * @module ol/interaction/Link\n */\nimport MapEventType from '../MapEventType.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport EventType from '../events/EventType.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 || !view.isDef()) {\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 || !view.isDef()) {\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":""}
|