@progress/kendo-charts 1.22.0 → 1.23.0-dev.202201111041

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.
Files changed (57) hide show
  1. package/dist/cdn/js/kendo-charts.js +1 -1
  2. package/dist/cdn/main.js +1 -1
  3. package/dist/es/common/keys.js +25 -0
  4. package/dist/es/common.js +1 -0
  5. package/dist/es/drawing-utils.js +27 -3
  6. package/dist/es/main.js +1 -0
  7. package/dist/es/map/attribution.js +157 -0
  8. package/dist/es/map/crs.js +277 -0
  9. package/dist/es/map/datums.js +16 -0
  10. package/dist/es/map/extent.js +129 -0
  11. package/dist/es/map/layers/bubble.js +185 -0
  12. package/dist/es/map/layers/layer.js +140 -0
  13. package/dist/es/map/layers/marker.js +348 -0
  14. package/dist/es/map/layers/shape.js +390 -0
  15. package/dist/es/map/layers/tile.js +481 -0
  16. package/dist/es/map/location.js +201 -0
  17. package/dist/es/map/map.js +930 -0
  18. package/dist/es/map/navigator.js +174 -0
  19. package/dist/es/map/scroller/draggable.js +454 -0
  20. package/dist/es/map/scroller/fx.js +119 -0
  21. package/dist/es/map/scroller/observable.js +151 -0
  22. package/dist/es/map/scroller/scroller.js +746 -0
  23. package/dist/es/map/scroller/user-events.js +712 -0
  24. package/dist/es/map/utils.js +459 -0
  25. package/dist/es/map/zoom.js +139 -0
  26. package/dist/es/map.js +1 -0
  27. package/dist/es/services/map-service.js +15 -0
  28. package/dist/es2015/common/keys.js +25 -0
  29. package/dist/es2015/common.js +1 -0
  30. package/dist/es2015/drawing-utils.js +43 -3
  31. package/dist/es2015/main.js +1 -0
  32. package/dist/es2015/map/attribution.js +147 -0
  33. package/dist/es2015/map/crs.js +233 -0
  34. package/dist/es2015/map/datums.js +16 -0
  35. package/dist/es2015/map/extent.js +115 -0
  36. package/dist/es2015/map/layers/bubble.js +167 -0
  37. package/dist/es2015/map/layers/layer.js +134 -0
  38. package/dist/es2015/map/layers/marker.js +328 -0
  39. package/dist/es2015/map/layers/shape.js +370 -0
  40. package/dist/es2015/map/layers/tile.js +455 -0
  41. package/dist/es2015/map/location.js +193 -0
  42. package/dist/es2015/map/map.js +906 -0
  43. package/dist/es2015/map/navigator.js +169 -0
  44. package/dist/es2015/map/scroller/draggable.js +418 -0
  45. package/dist/es2015/map/scroller/fx.js +112 -0
  46. package/dist/es2015/map/scroller/observable.js +143 -0
  47. package/dist/es2015/map/scroller/scroller.js +716 -0
  48. package/dist/es2015/map/scroller/user-events.js +694 -0
  49. package/dist/es2015/map/utils.js +459 -0
  50. package/dist/es2015/map/zoom.js +134 -0
  51. package/dist/es2015/map.js +1 -0
  52. package/dist/es2015/services/map-service.js +15 -0
  53. package/dist/npm/main.d.ts +1 -0
  54. package/dist/npm/main.js +6180 -342
  55. package/dist/npm/map.d.ts +4 -0
  56. package/dist/systemjs/kendo-charts.js +1 -1
  57. package/package.json +1 -1
@@ -0,0 +1,930 @@
1
+ import {
2
+ geometry as g
3
+ } from '@progress/kendo-drawing';
4
+
5
+ import {
6
+ addClass,
7
+ setDefaultOptions,
8
+ valueOrDefault,
9
+ defined,
10
+ mousewheelDelta,
11
+ limitValue,
12
+ deepExtend,
13
+ isArray
14
+ } from '../common';
15
+
16
+ import {
17
+ EPSG3857
18
+ } from './crs';
19
+
20
+ import {
21
+ Attribution
22
+ } from './attribution';
23
+
24
+ import {
25
+ Navigator
26
+ } from './navigator';
27
+
28
+ import {
29
+ ZoomControl
30
+ } from './zoom';
31
+
32
+ import {
33
+ Location
34
+ } from './location';
35
+
36
+ import {
37
+ Extent
38
+ } from './extent';
39
+
40
+ import {
41
+ TileLayer
42
+ } from './layers/tile';
43
+
44
+ import {
45
+ BubbleLayer
46
+ } from './layers/bubble';
47
+
48
+ import {
49
+ ShapeLayer
50
+ } from './layers/shape';
51
+
52
+ import {
53
+ MarkerLayer
54
+ } from './layers/marker';
55
+
56
+ import {
57
+ removeChildren,
58
+ setDefaultEvents,
59
+ toHyphens,
60
+ proxy,
61
+ now,
62
+ on,
63
+ off,
64
+ elementOffset,
65
+ getSupportedFeatures,
66
+ convertToHtml
67
+ } from './utils';
68
+
69
+ import {
70
+ Scroller
71
+ } from './scroller/scroller';
72
+
73
+ import {
74
+ Observable
75
+ } from './scroller/observable';
76
+
77
+ import MapService from './../services/map-service';
78
+
79
+ var math = Math,
80
+ min = math.min,
81
+ pow = math.pow,
82
+ Point = g.Point,
83
+ MARKER = "marker",
84
+ LOCATION = "location",
85
+ FRICTION = 0.9,
86
+ FRICTION_MOBILE = 0.93,
87
+ MOUSEWHEEL = 'DOMMouseScroll mousewheel',
88
+ VELOCITY_MULTIPLIER = 5,
89
+ DEFAULT_ZOOM_RATE = 1;
90
+
91
+ var layersMap = {
92
+ bubble: BubbleLayer,
93
+ shape: ShapeLayer,
94
+ tile: TileLayer
95
+ };
96
+ layersMap[MARKER] = MarkerLayer;
97
+
98
+ function renderPos(pos) {
99
+ var result = [];
100
+
101
+ if (pos) {
102
+ var parts = toHyphens(pos).split("-");
103
+
104
+ for (var i = 0; i < parts.length; i++) {
105
+ result.push("k-pos-" + parts[i]);
106
+ }
107
+ }
108
+
109
+ return result.join(" ");
110
+ }
111
+
112
+ var Map = (function (Observable) {
113
+ function Map(element, options, themeOptions, context) {
114
+ if ( options === void 0 ) options = {};
115
+ if ( themeOptions === void 0 ) themeOptions = {};
116
+ if ( context === void 0 ) context = {};
117
+
118
+ Observable.call(this);
119
+
120
+ this.support = getSupportedFeatures();
121
+
122
+ this.initObserver(context);
123
+ this.initServices(context);
124
+
125
+ this._initOptions(options);
126
+ this.bind(this.events, options);
127
+ this.crs = new EPSG3857();
128
+
129
+ this._initElement(element);
130
+
131
+ this._viewOrigin = this._getOrigin();
132
+
133
+ this._initScroller();
134
+ this._initMarkers();
135
+ this._initControls();
136
+ this._initLayers();
137
+ this._reset();
138
+
139
+ this._mousewheelHandler = this._mousewheel.bind(this);
140
+ on(this.element, MOUSEWHEEL, this._mousewheelHandler);
141
+ }
142
+
143
+ if ( Observable ) Map.__proto__ = Observable;
144
+ Map.prototype = Object.create( Observable && Observable.prototype );
145
+ Map.prototype.constructor = Map;
146
+
147
+ Map.prototype.destroy = function destroy () {
148
+ var this$1 = this;
149
+
150
+ this.scroller.destroy();
151
+
152
+ if (this.navigator) {
153
+ this.navigator.destroy();
154
+ }
155
+ if (this.attribution) {
156
+ this.attribution.destroy();
157
+ }
158
+ if (this.zoomControl) {
159
+ this.zoomControl.destroy();
160
+ }
161
+
162
+ if (isArray(this.markers)) {
163
+ this.markers.forEach(function (markerLayer) {
164
+ markerLayer.destroy();
165
+ });
166
+ } else {
167
+ this.markers.destroy();
168
+ }
169
+
170
+ for (var i = 0; i < this.layers.length; i++) {
171
+ this$1.layers[i].destroy();
172
+ }
173
+
174
+ off(this.element, MOUSEWHEEL, this._mousewheelHandler);
175
+
176
+ Observable.prototype.destroy.call(this);
177
+ };
178
+
179
+ Map.prototype._initOptions = function _initOptions (options) {
180
+ this.options = deepExtend({}, this.options, options);
181
+ };
182
+
183
+ Map.prototype._initElement = function _initElement (element) {
184
+ this.element = element;
185
+
186
+ addClass(element, "k-map");
187
+ element.style.position = "relative";
188
+ element.setAttribute("data-role", "map");
189
+ removeChildren(element);
190
+
191
+
192
+ var div = convertToHtml("<div />");
193
+ this.element.appendChild(div);
194
+ };
195
+
196
+ Map.prototype.initServices = function initServices (context) {
197
+ if ( context === void 0 ) context = {};
198
+
199
+ this.widgetService = new MapService(this, context);
200
+ };
201
+
202
+ Map.prototype.initObserver = function initObserver (context) {
203
+ if ( context === void 0 ) context = {};
204
+
205
+ this.observers = [];
206
+ this.addObserver(context.observer);
207
+ };
208
+
209
+ Map.prototype.addObserver = function addObserver (observer) {
210
+ if (observer) {
211
+ this.observers.push(observer);
212
+ }
213
+ };
214
+
215
+ Map.prototype.removeObserver = function removeObserver (observer) {
216
+ var index = this.observers.indexOf(observer);
217
+
218
+ if (index >= 0) {
219
+ this.observers.splice(index, 1);
220
+ }
221
+ };
222
+
223
+ Map.prototype.requiresHandlers = function requiresHandlers (eventNames) {
224
+ var observers = this.observers;
225
+
226
+ for (var idx = 0; idx < observers.length; idx++) {
227
+ if (observers[idx].requiresHandlers(eventNames)) {
228
+ return true;
229
+ }
230
+ }
231
+ };
232
+
233
+ Map.prototype.trigger = function trigger (name, args) {
234
+ if ( args === void 0 ) args = {};
235
+
236
+ args.sender = this;
237
+
238
+ var observers = this.observers;
239
+ var isDefaultPrevented = false;
240
+
241
+ for (var idx = 0; idx < observers.length; idx++) {
242
+ if (observers[idx].trigger(name, args)) {
243
+ isDefaultPrevented = true;
244
+ }
245
+ }
246
+
247
+ if (!isDefaultPrevented) {
248
+ Observable.prototype.trigger.call(this, name, args);
249
+ }
250
+
251
+ return isDefaultPrevented;
252
+ };
253
+
254
+ Map.prototype._notifyObserver = function _notifyObserver (name, args) {
255
+ if ( args === void 0 ) args = {};
256
+
257
+ args.sender = this;
258
+
259
+ var observers = this.observers;
260
+ var isDefaultPrevented = false;
261
+
262
+ for (var idx = 0; idx < observers.length; idx++) {
263
+ if (observers[idx].trigger(name, args)) {
264
+ isDefaultPrevented = true;
265
+ }
266
+ }
267
+
268
+ return isDefaultPrevented;
269
+ };
270
+
271
+ Map.prototype.zoom = function zoom (level) {
272
+ var options = this.options;
273
+ var result;
274
+
275
+ if (defined(level)) {
276
+ var zoomLevel = math.round(limitValue(level, options.minZoom, options.maxZoom));
277
+
278
+ if (options.zoom !== zoomLevel) {
279
+ options.zoom = zoomLevel;
280
+ this._reset();
281
+ }
282
+ result = this;
283
+ } else {
284
+ result = options.zoom;
285
+ }
286
+
287
+ return result;
288
+ };
289
+
290
+ Map.prototype.center = function center (center$1) {
291
+ var result;
292
+
293
+ if (center$1) {
294
+ this.options.center = Location.create(center$1).toArray();
295
+ this._reset();
296
+ result = this;
297
+ } else {
298
+ result = Location.create(this.options.center);
299
+ }
300
+
301
+ return result;
302
+ };
303
+
304
+ Map.prototype.extent = function extent (extent$1) {
305
+ var result;
306
+
307
+ if (extent$1) {
308
+ this._setExtent(extent$1);
309
+ result = this;
310
+ } else {
311
+ result = this._getExtent();
312
+ }
313
+
314
+ return result;
315
+ };
316
+
317
+ Map.prototype.setOptions = function setOptions (options) {
318
+ Observable.prototype.setOptions.call(this, options);
319
+ this._reset();
320
+ };
321
+
322
+ Map.prototype.locationToLayer = function locationToLayer (location, zoom) {
323
+ var clamp = !this.options.wraparound;
324
+ var locationObject = Location.create(location);
325
+
326
+ return this.crs.toPoint(locationObject, this._layerSize(zoom), clamp);
327
+ };
328
+
329
+ Map.prototype.layerToLocation = function layerToLocation (point, zoom) {
330
+ var clamp = !this.options.wraparound;
331
+ var pointObject = Point.create(point);
332
+
333
+ return this.crs.toLocation(pointObject, this._layerSize(zoom), clamp);
334
+ };
335
+
336
+ Map.prototype.locationToView = function locationToView (location) {
337
+ var locationObject = Location.create(location);
338
+ var origin = this.locationToLayer(this._viewOrigin);
339
+ var point = this.locationToLayer(locationObject);
340
+
341
+ return point.translateWith(origin.scale(-1));
342
+ };
343
+
344
+ Map.prototype.viewToLocation = function viewToLocation (point, zoom) {
345
+ var origin = this.locationToLayer(this._getOrigin(), zoom);
346
+ var pointObject = Point.create(point);
347
+ var pointResult = pointObject.clone().translateWith(origin);
348
+
349
+ return this.layerToLocation(pointResult, zoom);
350
+ };
351
+
352
+ Map.prototype.eventOffset = function eventOffset (e) {
353
+ var x;
354
+ var y;
355
+ var offset = elementOffset(this.element);
356
+
357
+ if ((e.x && e.x[LOCATION]) || (e.y && e.y[LOCATION])) {
358
+ x = e.x[LOCATION] - offset.left;
359
+ y = e.y[LOCATION] - offset.top;
360
+ } else {
361
+ var event = e.originalEvent || e;
362
+ x = valueOrDefault(event.pageX, event.clientX) - offset.left;
363
+ y = valueOrDefault(event.pageY, event.clientY) - offset.top;
364
+ }
365
+
366
+ var point = new g.Point(x, y);
367
+
368
+ return point;
369
+ };
370
+
371
+ Map.prototype.eventToView = function eventToView (e) {
372
+ var cursor = this.eventOffset(e);
373
+ return this.locationToView(this.viewToLocation(cursor));
374
+ };
375
+
376
+ Map.prototype.eventToLayer = function eventToLayer (e) {
377
+ return this.locationToLayer(this.eventToLocation(e));
378
+ };
379
+
380
+ Map.prototype.eventToLocation = function eventToLocation (e) {
381
+ var cursor = this.eventOffset(e);
382
+ return this.viewToLocation(cursor);
383
+ };
384
+
385
+ Map.prototype.viewSize = function viewSize () {
386
+ var element = this.element;
387
+ var scale = this._layerSize();
388
+ var width = element.clientWidth;
389
+
390
+ if (!this.options.wraparound) {
391
+ width = min(scale, width);
392
+ }
393
+
394
+ return {
395
+ width: width,
396
+ height: min(scale, element.clientHeight)
397
+ };
398
+ };
399
+
400
+ Map.prototype.exportVisual = function exportVisual () {
401
+ this._reset();
402
+ return false;
403
+ };
404
+
405
+ Map.prototype._setOrigin = function _setOrigin (origin, zoom) {
406
+ var size = this.viewSize(),
407
+ topLeft;
408
+
409
+ var originLocation = this._origin = Location.create(origin);
410
+ topLeft = this.locationToLayer(originLocation, zoom);
411
+ topLeft.x += size.width / 2;
412
+ topLeft.y += size.height / 2;
413
+ this.options.center = this.layerToLocation(topLeft, zoom).toArray();
414
+
415
+ return this;
416
+ };
417
+
418
+ Map.prototype._getOrigin = function _getOrigin (invalidate) {
419
+ var size = this.viewSize(),
420
+ topLeft;
421
+
422
+ if (invalidate || !this._origin) {
423
+ topLeft = this.locationToLayer(this.center());
424
+ topLeft.x -= size.width / 2;
425
+ topLeft.y -= size.height / 2;
426
+ this._origin = this.layerToLocation(topLeft);
427
+ }
428
+
429
+ return this._origin;
430
+ };
431
+
432
+ Map.prototype._setExtent = function _setExtent (newExtent) {
433
+ var this$1 = this;
434
+
435
+ var raw = Extent.create(newExtent);
436
+ var se = raw.se.clone();
437
+
438
+ if (this.options.wraparound && se.lng < 0 && newExtent.nw.lng > 0) {
439
+ se.lng = 180 + (180 + se.lng);
440
+ }
441
+
442
+ var extent = new Extent(raw.nw, se);
443
+ this.center(extent.center());
444
+ var width = this.element.clientWidth;
445
+ var height = this.element.clientHeight;
446
+ var zoom;
447
+
448
+ for (zoom = this.options.maxZoom; zoom >= this.options.minZoom; zoom--) {
449
+ var topLeft = this$1.locationToLayer(extent.nw, zoom);
450
+ var bottomRight = this$1.locationToLayer(extent.se, zoom);
451
+ var layerWidth = math.abs(bottomRight.x - topLeft.x);
452
+ var layerHeight = math.abs(bottomRight.y - topLeft.y);
453
+
454
+ if (layerWidth <= width && layerHeight <= height) {
455
+ break;
456
+ }
457
+ }
458
+
459
+ this.zoom(zoom);
460
+ };
461
+
462
+ Map.prototype._getExtent = function _getExtent () {
463
+ var nw = this._getOrigin();
464
+ var bottomRight = this.locationToLayer(nw);
465
+ var size = this.viewSize();
466
+
467
+ bottomRight.x += size.width;
468
+ bottomRight.y += size.height;
469
+
470
+ var se = this.layerToLocation(bottomRight);
471
+
472
+ return new Extent(nw, se);
473
+ };
474
+
475
+ Map.prototype._zoomAround = function _zoomAround (pivot, level) {
476
+ this._setOrigin(this.layerToLocation(pivot, level), level);
477
+ this.zoom(level);
478
+ };
479
+
480
+ Map.prototype._initControls = function _initControls () {
481
+ var controls = this.options.controls;
482
+ if (controls.attribution) {
483
+ this._createAttribution(controls.attribution);
484
+ }
485
+
486
+ if (!this.support.mobileOS) {
487
+ if (controls.navigator) {
488
+ this._createNavigator(controls.navigator);
489
+ }
490
+
491
+ if (controls.zoom) {
492
+ this._createZoomControl(controls.zoom);
493
+ }
494
+ }
495
+ };
496
+
497
+ Map.prototype._createControlElement = function _createControlElement (options, defaultPosition) {
498
+ var pos = options.position || defaultPosition;
499
+ var posSelector = '.' + renderPos(pos).replace(' ', '.');
500
+ var wrap = this.element.querySelector('.k-map-controls' + posSelector) || [];
501
+
502
+ if (wrap.length === 0) {
503
+ var div$1 = document.createElement("div");
504
+ addClass(div$1, 'k-map-controls ' + renderPos(pos));
505
+ wrap = div$1;
506
+ this.element.appendChild(wrap);
507
+ }
508
+
509
+ var div = document.createElement("div");
510
+
511
+ wrap.appendChild(div);
512
+
513
+ return div;
514
+ };
515
+
516
+ Map.prototype._createAttribution = function _createAttribution (options) {
517
+ var element = this._createControlElement(options, 'bottomRight');
518
+ this.attribution = new Attribution(element, options);
519
+ };
520
+
521
+ Map.prototype._createNavigator = function _createNavigator (options) {
522
+ var element = this._createControlElement(options, 'topLeft');
523
+ var navigator = this.navigator = new Navigator(element, options);
524
+
525
+ this._navigatorPan = this._navigatorPan.bind(this);
526
+ navigator.bind('pan', this._navigatorPan);
527
+
528
+ this._navigatorCenter = this._navigatorCenter.bind(this);
529
+ navigator.bind('center', this._navigatorCenter);
530
+ };
531
+
532
+ Map.prototype._navigatorPan = function _navigatorPan (e) {
533
+ var scroller = this.scroller;
534
+ var x = scroller.scrollLeft + e.x;
535
+ var y = scroller.scrollTop - e.y;
536
+ var bounds = this._virtualSize;
537
+ var width = this.element.clientWidth;
538
+ var height = this.element.clientHeight;
539
+
540
+ // TODO: Move limits to scroller
541
+ x = limitValue(x, bounds.x.min, bounds.x.max - width);
542
+ y = limitValue(y, bounds.y.min, bounds.y.max - height);
543
+
544
+ this.scroller.one('scroll', proxy(this._scrollEnd, this));
545
+
546
+ this.scroller.scrollTo(-x, -y);
547
+ };
548
+
549
+ Map.prototype._navigatorCenter = function _navigatorCenter () {
550
+ this.center(this.options.center);
551
+ };
552
+
553
+ Map.prototype._createZoomControl = function _createZoomControl (options) {
554
+ var element = this._createControlElement(options, 'topLeft');
555
+ var zoomControl = this.zoomControl = new ZoomControl(element, options);
556
+
557
+ this._zoomControlChange = this._zoomControlChange.bind(this);
558
+ zoomControl.bind('change', this._zoomControlChange);
559
+ };
560
+
561
+ Map.prototype._zoomControlChange = function _zoomControlChange (e) {
562
+ if (!this.trigger('zoomStart', { originalEvent: e })) {
563
+ this.zoom(this.zoom() + e.delta);
564
+
565
+ this.trigger('zoomEnd', {
566
+ originalEvent: e
567
+ });
568
+ }
569
+ };
570
+
571
+ Map.prototype._initScroller = function _initScroller () {
572
+ var friction = this.support.mobileOS ? FRICTION_MOBILE : FRICTION;
573
+ var zoomable = this.options.zoomable !== false;
574
+ var scroller = this.scroller = new Scroller(this.element.children[0], {
575
+ friction: friction,
576
+ velocityMultiplier: VELOCITY_MULTIPLIER,
577
+ zoom: zoomable,
578
+ mousewheelScrolling: false,
579
+ supportDoubleTap: true
580
+ });
581
+
582
+ scroller.bind('scroll', proxy(this._scroll, this));
583
+ scroller.bind('scrollEnd', proxy(this._scrollEnd, this));
584
+
585
+ scroller.userEvents.bind('gesturestart', proxy(this._scaleStart, this));
586
+ scroller.userEvents.bind('gestureend', proxy(this._scale, this));
587
+ scroller.userEvents.bind('doubleTap', proxy(this._doubleTap, this));
588
+ scroller.userEvents.bind('tap', proxy(this._tap, this));
589
+
590
+ this.scrollElement = scroller.scrollElement;
591
+ };
592
+
593
+ Map.prototype._initLayers = function _initLayers () {
594
+ var this$1 = this;
595
+
596
+ var defs = this.options.layers,
597
+ layers = this.layers = [];
598
+
599
+ for (var i = 0; i < defs.length; i++) {
600
+ var options = defs[i];
601
+
602
+ var layer = this$1._createLayer(options);
603
+ layers.push(layer);
604
+ }
605
+ };
606
+
607
+ Map.prototype._createLayer = function _createLayer (options) {
608
+ var type = options.type || 'shape';
609
+ var layerDefaults = this.options.layerDefaults[type];
610
+ var layerOptions = type === MARKER ?
611
+ deepExtend({}, this.options.markerDefaults, options) :
612
+ deepExtend({}, layerDefaults, options);
613
+
614
+ var layerConstructor = layersMap[type];
615
+ var layer = new layerConstructor(this, layerOptions);
616
+
617
+ if (type === MARKER) {
618
+ this.markers = layer;
619
+ }
620
+
621
+ return layer;
622
+ };
623
+
624
+ /* eslint-disable arrow-body-style */
625
+ Map.prototype._initMarkers = function _initMarkers () {
626
+ var markerLayers = (this.options.layers || []).filter(function (x) {
627
+ return x && x.type === MARKER;
628
+ });
629
+
630
+ if (markerLayers.length > 0) {
631
+ // render the markers from options.layers
632
+ // instead of options.markers
633
+ return;
634
+ }
635
+
636
+ this.markers = new MarkerLayer(this, this.options.markerDefaults);
637
+ this.markers.add(this.options.markers);
638
+ };
639
+ /* eslint-enable arrow-body-style */
640
+
641
+ Map.prototype._scroll = function _scroll (e) {
642
+ var origin = this.locationToLayer(this._viewOrigin).round();
643
+ var movable = e.sender.movable;
644
+ var offset = new g.Point(movable.x, movable.y).scale(-1).scale(1 / movable.scale);
645
+
646
+ origin.x += offset.x;
647
+ origin.y += offset.y;
648
+ this._scrollOffset = offset;
649
+
650
+ this._setOrigin(this.layerToLocation(origin));
651
+
652
+ this.trigger('pan', {
653
+ originalEvent: e,
654
+ origin: this._getOrigin(),
655
+ center: this.center()
656
+ });
657
+ };
658
+
659
+ Map.prototype._scrollEnd = function _scrollEnd (e) {
660
+ if (!this._scrollOffset || !this._panComplete()) {
661
+ return;
662
+ }
663
+
664
+ this._scrollOffset = null;
665
+ this._panEndTimestamp = now();
666
+
667
+ this.trigger('panEnd', {
668
+ originalEvent: e,
669
+ origin: this._getOrigin(),
670
+ center: this.center()
671
+ });
672
+ };
673
+
674
+ Map.prototype._panComplete = function _panComplete () {
675
+ return now() - (this._panEndTimestamp || 0) > 50;
676
+ };
677
+
678
+ Map.prototype._scaleStart = function _scaleStart (e) {
679
+ if (this.trigger('zoomStart', { originalEvent: e })) {
680
+ var touch = e.touches[1];
681
+
682
+ if (touch) {
683
+ touch.cancel();
684
+ }
685
+ }
686
+ };
687
+
688
+ Map.prototype._scale = function _scale (e) {
689
+ var scale = this.scroller.movable.scale;
690
+ var zoom = this._scaleToZoom(scale);
691
+ var gestureCenter = new g.Point(e.center.x, e.center.y);
692
+ var centerLocation = this.viewToLocation(gestureCenter, zoom);
693
+ var centerPoint = this.locationToLayer(centerLocation, zoom);
694
+ var originPoint = centerPoint.translate(-gestureCenter.x, -gestureCenter.y);
695
+
696
+ this._zoomAround(originPoint, zoom);
697
+
698
+ this.trigger('zoomEnd', {
699
+ originalEvent: e
700
+ });
701
+ };
702
+
703
+ Map.prototype._scaleToZoom = function _scaleToZoom (scaleDelta) {
704
+ var scale = this._layerSize() * scaleDelta;
705
+ var tiles = scale / this.options.minSize;
706
+ var zoom = math.log(tiles) / math.log(2);
707
+
708
+ return math.round(zoom);
709
+ };
710
+
711
+ Map.prototype._reset = function _reset () {
712
+ if (this.attribution) {
713
+ this.attribution.filter(this.center(), this.zoom());
714
+ }
715
+
716
+ this._viewOrigin = this._getOrigin(true);
717
+
718
+ this._resetScroller();
719
+
720
+ this.trigger('beforeReset');
721
+ this.trigger('reset');
722
+ };
723
+
724
+ Map.prototype._resetScroller = function _resetScroller () {
725
+ var scroller = this.scroller;
726
+ var x = scroller.dimensions.x;
727
+ var y = scroller.dimensions.y;
728
+ var scale = this._layerSize();
729
+ var nw = this.extent().nw;
730
+ var topLeft = this.locationToLayer(nw).round();
731
+
732
+ scroller.movable.round = true;
733
+ scroller.reset();
734
+ scroller.userEvents.cancel();
735
+
736
+ var zoom = this.zoom();
737
+
738
+ scroller.dimensions.forcedMinScale = pow(2, this.options.minZoom - zoom);
739
+ scroller.dimensions.maxScale = pow(2, this.options.maxZoom - zoom);
740
+
741
+ var xBounds = {
742
+ min: -topLeft.x,
743
+ max: scale - topLeft.x
744
+ };
745
+
746
+ var yBounds = {
747
+ min: -topLeft.y,
748
+ max: scale - topLeft.y
749
+ };
750
+
751
+ if (this.options.wraparound) {
752
+ xBounds.max = 20 * scale;
753
+ xBounds.min = -xBounds.max;
754
+ }
755
+
756
+ if (this.options.pannable === false) {
757
+ var viewSize = this.viewSize();
758
+ xBounds.min = yBounds.min = 0;
759
+ xBounds.max = viewSize.width;
760
+ yBounds.max = viewSize.height;
761
+ }
762
+
763
+ x.makeVirtual();
764
+ y.makeVirtual();
765
+
766
+ x.virtualSize(xBounds.min, xBounds.max);
767
+ y.virtualSize(yBounds.min, yBounds.max);
768
+
769
+ this._virtualSize = {
770
+ x: xBounds,
771
+ y: yBounds
772
+ };
773
+ };
774
+
775
+ // kept for API compatibility, not used
776
+ Map.prototype._renderLayers = function _renderLayers () {
777
+ };
778
+
779
+ Map.prototype._layerSize = function _layerSize (zoom) {
780
+ var newZoom = valueOrDefault(zoom, this.options.zoom);
781
+ return this.options.minSize * pow(2, newZoom);
782
+ };
783
+
784
+ Map.prototype._tap = function _tap (e) {
785
+ if (!this._panComplete()) {
786
+ return;
787
+ }
788
+
789
+ var cursor = this.eventOffset(e);
790
+
791
+ this.trigger('click', {
792
+ originalEvent: e,
793
+ location: this.viewToLocation(cursor)
794
+ });
795
+ };
796
+
797
+ Map.prototype._doubleTap = function _doubleTap (e) {
798
+ var options = this.options;
799
+
800
+ if (options.zoomable !== false) {
801
+ if (!this.trigger('zoomStart', { originalEvent: e })) {
802
+ var toZoom = this.zoom() + DEFAULT_ZOOM_RATE;
803
+ var cursor = this.eventOffset(e);
804
+ var location = this.viewToLocation(cursor);
805
+ var postZoom = this.locationToLayer(location, toZoom);
806
+ var origin = postZoom.translate(-cursor.x, -cursor.y);
807
+
808
+ this._zoomAround(origin, toZoom);
809
+
810
+ this.trigger('zoomEnd', {
811
+ originalEvent: e
812
+ });
813
+ }
814
+ }
815
+ };
816
+
817
+ Map.prototype._mousewheel = function _mousewheel (e) {
818
+ e.preventDefault();
819
+ // let delta = dataviz.mwDelta(e) > 0 ? -1 : 1;
820
+ var delta = mousewheelDelta(e) > 0 ? -1 : 1;
821
+ var options = this.options;
822
+ var fromZoom = this.zoom();
823
+ var toZoom = limitValue(fromZoom + delta, options.minZoom, options.maxZoom);
824
+
825
+ if (options.zoomable !== false && toZoom !== fromZoom) {
826
+ if (!this.trigger('zoomStart', { originalEvent: e })) {
827
+ var cursor = this.eventOffset(e);
828
+ var location = this.viewToLocation(cursor);
829
+ var postZoom = this.locationToLayer(location, toZoom);
830
+ var origin = postZoom.translate(-cursor.x, -cursor.y);
831
+
832
+ this._zoomAround(origin, toZoom);
833
+
834
+ this.trigger('zoomEnd', {
835
+ originalEvent: e
836
+ });
837
+ }
838
+ }
839
+ };
840
+
841
+ return Map;
842
+ }(Observable));
843
+
844
+ setDefaultOptions(Map, {
845
+ name: 'Map',
846
+ controls: {
847
+ attribution: true,
848
+ navigator: {
849
+ panStep: 100
850
+ },
851
+ zoom: true
852
+ },
853
+ layers: [],
854
+ layerDefaults: {
855
+ shape: {
856
+ style: {
857
+ fill: {
858
+ color: '#fff'
859
+ },
860
+ stroke: {
861
+ color: '#aaa',
862
+ width: 0.5
863
+ }
864
+ }
865
+ },
866
+ bubble: {
867
+ style: {
868
+ fill: {
869
+ color: '#fff',
870
+ opacity: 0.5
871
+ },
872
+ stroke: {
873
+ color: '#aaa',
874
+ width: 0.5
875
+ }
876
+ }
877
+ },
878
+ marker: {
879
+ shape: 'pinTarget',
880
+ tooltip: {
881
+ position: 'top'
882
+ }
883
+ }
884
+ },
885
+ center: [
886
+ 0,
887
+ 0
888
+ ],
889
+ zoom: 3,
890
+ minSize: 256,
891
+ minZoom: 1,
892
+ maxZoom: 19,
893
+ markers: [],
894
+ markerDefaults: {
895
+ shape: 'pinTarget',
896
+ tooltip: {
897
+ position: 'top'
898
+ }
899
+ },
900
+ wraparound: true,
901
+ // If set to true, GeoJSON layer "Point" features will be rendered as markers.
902
+ // Otherwise, the points will be rendered as circles.
903
+ // Defaults to `true` for KUI/jQuery, `false` everywhere else.
904
+ renderPointsAsMarkers: false
905
+ });
906
+
907
+ setDefaultEvents(Map, [
908
+ 'beforeReset',
909
+ 'click',
910
+ 'markerActivate',
911
+ 'markerClick',
912
+ 'markerCreated',
913
+
914
+ // Events for implementing custom tooltips.
915
+ 'markerMouseEnter',
916
+ 'markerMouseLeave',
917
+
918
+ 'pan',
919
+ 'panEnd',
920
+ 'reset',
921
+ 'shapeClick',
922
+ 'shapeCreated',
923
+ 'shapeFeatureCreated',
924
+ 'shapeMouseEnter',
925
+ 'shapeMouseLeave',
926
+ 'zoomEnd',
927
+ 'zoomStart'
928
+ ]);
929
+
930
+ export default Map;