@progress/kendo-charts 1.27.1 → 1.28.0-dev.202303070933

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.
@@ -92,7 +92,7 @@ var INSIDE_END = "insideEnd";
92
92
  var INSIDE_BASE = "insideBase";
93
93
  var OUTSIDE_END = "outsideEnd";
94
94
 
95
- var MOUSEWHEEL = "DOMMouseScroll mousewheel";
95
+ var MOUSEWHEEL = "wheel";
96
96
  var MOUSEWHEEL_DELAY = 150;
97
97
  var MOUSEWHEEL_ZOOM_RATE = 0.3;
98
98
 
@@ -5,16 +5,16 @@ import { DateCategoryAxis, Point } from '../core';
5
5
  import { MOUSEWHEEL_DELAY, MOUSEWHEEL, SELECT_START, SELECT, SELECT_END } from './constants';
6
6
 
7
7
  import { LEFT, RIGHT, MIN_VALUE, MAX_VALUE, X } from '../common/constants';
8
- import { addClass, Class, removeClass, deepExtend, elementStyles, eventElement, setDefaultOptions, limitValue, round, bindEvents, unbindEvents, mousewheelDelta, hasClasses } from '../common';
8
+ import { addClass, Class, removeClass, eventCoordinates, deepExtend, elementStyles, eventElement, setDefaultOptions, limitValue, round, bindEvents, unbindEvents, mousewheelDelta, hasClasses } from '../common';
9
9
  import { parseDate } from '../date-utils';
10
10
 
11
11
  var ZOOM_ACCELERATION = 3;
12
12
  var SELECTOR_HEIGHT_ADJUST = 0.1;
13
13
 
14
- function createDiv(className) {
14
+ function createDiv(classNames) {
15
15
  var element = document.createElement("div");
16
- if (className) {
17
- element.className = className;
16
+ if (classNames) {
17
+ element.className = classNames;
18
18
  }
19
19
 
20
20
  return element;
@@ -65,7 +65,7 @@ var Selection = (function (Class) {
65
65
 
66
66
  Selection.prototype.createElements = function createElements () {
67
67
  var options = this.options;
68
- var wrapper = this.wrapper = createDiv("k-selector");
68
+ var wrapper = this.wrapper = createDiv("k-selector k-pointer-events-none");
69
69
  elementStyles(wrapper, {
70
70
  top: options.offset.top,
71
71
  left: options.offset.left,
@@ -73,18 +73,21 @@ var Selection = (function (Class) {
73
73
  height: options.height,
74
74
  direction: 'ltr'
75
75
  });
76
- var selection = this.selection = createDiv("k-selection");
77
- this.leftMask = createDiv("k-mask");
78
- this.rightMask = createDiv("k-mask");
76
+
77
+ var selection = this.selection = createDiv("k-selection k-pointer-events-none");
78
+
79
+ this.leftMask = createDiv("k-mask k-pointer-events-none");
80
+ this.rightMask = createDiv("k-mask k-pointer-events-none");
79
81
 
80
82
  wrapper.appendChild(this.leftMask);
81
83
  wrapper.appendChild(this.rightMask);
82
84
  wrapper.appendChild(selection);
83
85
 
84
- selection.appendChild(createDiv("k-selection-bg"));
86
+ var body = this.body = createDiv("k-selection-bg k-pointer-events-none");
87
+ selection.appendChild(body);
85
88
 
86
- var leftHandle = this.leftHandle = createDiv("k-handle k-left-handle");
87
- var rightHandle = this.rightHandle = createDiv("k-handle k-right-handle");
89
+ var leftHandle = this.leftHandle = createDiv("k-handle k-left-handle k-pointer-events-auto");
90
+ var rightHandle = this.rightHandle = createDiv("k-handle k-right-handle k-pointer-events-auto");
88
91
  leftHandle.appendChild(createDiv());
89
92
  rightHandle.appendChild(createDiv());
90
93
 
@@ -119,10 +122,10 @@ var Selection = (function (Class) {
119
122
 
120
123
  if (this.options.mousewheel !== false) {
121
124
  this._mousewheelHandler = this._mousewheel.bind(this);
122
- bindEvents(this.wrapper, ( obj = {}, obj[ MOUSEWHEEL ] = this._mousewheelHandler, obj ));
125
+ bindEvents(this.chartElement, ( obj = {}, obj[ MOUSEWHEEL ] = this._mousewheelHandler, obj ));
123
126
  }
124
127
 
125
- this._domEvents = DomEventsBuilder.create(this.wrapper, {
128
+ this._domEvents = DomEventsBuilder.create(this.chartElement, {
126
129
  stopPropagation: true, // applicable for the jQuery UserEvents
127
130
  start: this._start.bind(this),
128
131
  move: this._move.bind(this),
@@ -184,9 +187,10 @@ var Selection = (function (Class) {
184
187
 
185
188
  if (this.wrapper) {
186
189
  if (this._mousewheelHandler) {
187
- unbindEvents(this.wrapper, ( obj = {}, obj[ MOUSEWHEEL ] = this._mousewheelHandler, obj ));
190
+ unbindEvents(this.chartElement, ( obj = {}, obj[ MOUSEWHEEL ] = this._mousewheelHandler, obj ));
188
191
  this._mousewheelHandler = null;
189
192
  }
193
+
190
194
  this.chartElement.removeChild(this.wrapper);
191
195
  this.wrapper = null;
192
196
  }
@@ -201,18 +205,35 @@ var Selection = (function (Class) {
201
205
  };
202
206
  };
203
207
 
208
+ Selection.prototype._pointInPane = function _pointInPane (x, y) {
209
+ var paneBox = this.categoryAxis.pane.box;
210
+ var modelCoords = this.chart._toModelCoordinates(x, y);
211
+ return paneBox.containsPoint(modelCoords);
212
+ };
213
+
204
214
  Selection.prototype._start = function _start (e) {
205
215
  var options = this.options;
206
216
  var target = eventElement(e);
207
-
208
217
  if (this._state || !target) {
209
218
  return;
210
219
  }
211
220
 
221
+ var coords = eventCoordinates(e);
222
+ var inPane = this._pointInPane(coords.x, coords.y);
223
+ if (!inPane) {
224
+ return;
225
+ }
226
+
227
+ var handle = closestHandle(target);
228
+ var bodyRect = this.body.getBoundingClientRect();
229
+ var inBody = !handle && coords.x >= bodyRect.x && coords.x <= bodyRect.x + bodyRect.width &&
230
+ coords.y >= bodyRect.y && coords.y <= bodyRect.y + bodyRect.height;
231
+
212
232
  this.chart._unsetActivePoint();
213
233
  this._state = {
214
- moveTarget: closestHandle(target) || target,
234
+ moveTarget: handle,
215
235
  startLocation: e.x ? e.x.location : 0,
236
+ inBody: inBody,
216
237
  range: {
217
238
  from: this._index(options.from),
218
239
  to: this._index(options.to)
@@ -263,14 +284,14 @@ var Selection = (function (Class) {
263
284
  var scale = elementStyles(this.wrapper, "width").width / (categoryAxis.categoriesCount() - 1);
264
285
  var offset = Math.round(delta / scale) * (reverse ? -1 : 1);
265
286
 
266
- if (!target) {
287
+ if (!target && !state.inBody) {
267
288
  return;
268
289
  }
269
290
 
270
- var leftHandle = hasClasses(target, "k-left-handle");
271
- var rightHandle = hasClasses(target, "k-right-handle");
291
+ var leftHandle = target && hasClasses(target, "k-left-handle");
292
+ var rightHandle = target && hasClasses(target, "k-right-handle");
272
293
 
273
- if (hasClasses(target, "k-selection k-selection-bg")) {
294
+ if (state.inBody) {
274
295
  range.from = Math.min(
275
296
  Math.max(min, from - offset),
276
297
  max - span
@@ -349,6 +370,7 @@ var Selection = (function (Class) {
349
370
  range.to = Math.min(range.from + span, max);
350
371
 
351
372
  this._start(e);
373
+
352
374
  if (this._state) {
353
375
  this._state.range = range;
354
376
  this.trigger(SELECT, this._rangeEventArgs(range));
@@ -361,7 +383,7 @@ var Selection = (function (Class) {
361
383
 
362
384
  var delta = mousewheelDelta(e);
363
385
 
364
- this._start({ target: this.selection });
386
+ this._start(e);
365
387
 
366
388
  if (this._state) {
367
389
  var range = this._state.range;
@@ -399,6 +421,12 @@ var Selection = (function (Class) {
399
421
 
400
422
  Selection.prototype._gesturestart = function _gesturestart (e) {
401
423
  var options = this.options;
424
+ var touch = e.touches[0];
425
+ var inPane = this._pointInPane(touch.pageX, touch.pageY);
426
+
427
+ if (!inPane) {
428
+ return;
429
+ }
402
430
 
403
431
  this._state = {
404
432
  range: {
@@ -423,6 +451,10 @@ var Selection = (function (Class) {
423
451
  };
424
452
 
425
453
  Selection.prototype._gesturechange = function _gesturechange (e) {
454
+ if (!this._state) {
455
+ return;
456
+ }
457
+
426
458
  var ref = this;
427
459
  var chart = ref.chart;
428
460
  var state = ref._state;
@@ -2,9 +2,9 @@ export default function hasClasses(element, classNames) {
2
2
  if (element.className) {
3
3
  var names = classNames.split(" ");
4
4
  for (var idx = 0; idx < names.length; idx++) {
5
- if (element.className.indexOf(names[idx]) !== -1) {
5
+ if (element.className.indexOf && element.className.indexOf(names[idx]) !== -1) {
6
6
  return true;
7
7
  }
8
8
  }
9
9
  }
10
- }
10
+ }
@@ -9,21 +9,23 @@ import {
9
9
 
10
10
  import { Layer } from './layer';
11
11
  import { Location } from '../location';
12
-
13
12
  import {
14
13
  proxy,
15
14
  on,
16
15
  off,
17
16
  toHyphens,
18
- toPixels
17
+ toPixels,
18
+ convertToHtml
19
19
  } from '../utils';
20
+ import TemplateService from '../../services/template-service';
20
21
 
21
22
  var CLICK = "click";
22
23
  var MOUSE_ENTER = "mouseenter";
23
24
  var MOUSE_LEAVE = "mouseleave";
24
25
 
25
26
  var extend = Object.assign;
26
- var MARKER_CLASS = ".k-marker";
27
+ var MARKER_CLASS_NAME = "k-marker";
28
+ var MARKER_CLASS = "." + MARKER_CLASS_NAME;
27
29
 
28
30
  export var MarkerLayer = (function (Layer) {
29
31
  function MarkerLayer(map, options) {
@@ -153,11 +155,9 @@ export var MarkerLayer = (function (Layer) {
153
155
  };
154
156
 
155
157
  MarkerLayer.prototype._markerClick = function _markerClick (e) {
156
- var marker = e.target._kendoNode;
158
+ var marker = e.currentTarget._kendoNode;
157
159
 
158
160
  var args = {
159
- // marker: $(e.target).data('kendoMarker'),
160
- // marker: e.target.getAttribute("data-kendoMarker"),
161
161
  layer: this,
162
162
  layerIndex: this._layerIndex(),
163
163
  marker: marker,
@@ -198,7 +198,8 @@ setDefaultOptions(MarkerLayer, {
198
198
  zIndex: 1000,
199
199
  autoBind: true,
200
200
  locationField: 'location',
201
- titleField: 'title'
201
+ titleField: 'title',
202
+ template: ""
202
203
  });
203
204
 
204
205
  export var Marker = (function (Class) {
@@ -276,9 +277,17 @@ export var Marker = (function (Class) {
276
277
  if (!this.element) {
277
278
  var options = this.options;
278
279
  var layer = this.layer;
279
-
280
280
  var element = document.createElement('span');
281
- addClass(element, 'k-marker k-icon k-i-marker-' + toHyphens(options.shape || 'pin'));
281
+ addClass(element, MARKER_CLASS_NAME);
282
+
283
+ if (this.options.template) {
284
+ var templateFn = this._compileTemplate(this.options.template);
285
+ var templateHtml = templateFn(this.dataItem);
286
+ var templateElement = convertToHtml(templateHtml);
287
+ element.appendChild(templateElement);
288
+ } else {
289
+ addClass(element, 'k-icon k-i-marker-' + toHyphens(options.shape || 'pin'));
290
+ }
282
291
 
283
292
  if (options.title) {
284
293
  element.setAttribute("title", options.title);
@@ -337,6 +346,13 @@ export var Marker = (function (Class) {
337
346
  return args;
338
347
  };
339
348
 
349
+ Marker.prototype._compileTemplate = function _compileTemplate (template) {
350
+ return TemplateService.compile(template, {
351
+ paramName: "dataItem",
352
+ useWithBlock: false
353
+ });
354
+ };
355
+
340
356
  Marker.create = function create (arg, defaults) {
341
357
  if (arg instanceof Marker) {
342
358
  return arg;
@@ -60,13 +60,13 @@ import {
60
60
  import {
61
61
  removeChildren,
62
62
  setDefaultEvents,
63
- toHyphens,
64
63
  proxy,
65
64
  now,
66
65
  on,
67
66
  off,
68
67
  getSupportedFeatures,
69
- convertToHtml
68
+ convertToHtml,
69
+ renderPos
70
70
  } from './utils';
71
71
 
72
72
  import {
@@ -100,20 +100,6 @@ var layersMap = {
100
100
  };
101
101
  layersMap[MARKER] = MarkerLayer;
102
102
 
103
- function renderPos(pos) {
104
- var result = [];
105
-
106
- if (pos) {
107
- var parts = toHyphens(pos).split("-");
108
-
109
- for (var i = 0; i < parts.length; i++) {
110
- result.push("k-pos-" + parts[i]);
111
- }
112
- }
113
-
114
- return result.join(" ");
115
- }
116
-
117
103
  var Map = (function (Observable) {
118
104
  function Map(element, options, themeOptions, context) {
119
105
  if ( options === void 0 ) options = {};
@@ -445,4 +445,18 @@ export var now = function () {
445
445
 
446
446
  export var noop = function () {};
447
447
 
448
+ export var renderPos = function (pos) {
449
+ var result = [];
450
+
451
+ if (pos) {
452
+ var parts = toHyphens(pos).split("-");
453
+
454
+ for (var i = 0; i < parts.length; i++) {
455
+ result.push("k-pos-" + parts[i]);
456
+ }
457
+ }
458
+
459
+ return result.join(" ");
460
+ };
461
+
448
462
  /* eslint-enable arrow-body-style */
@@ -10,8 +10,8 @@ TemplateService.register = function register (userImplementation) {
10
10
  current = userImplementation;
11
11
  };
12
12
 
13
- TemplateService.compile = function compile (template) {
14
- return current.compile(template);
13
+ TemplateService.compile = function compile (template, options) {
14
+ return current.compile(template, options);
15
15
  };
16
16
 
17
17
  export default TemplateService;
@@ -189,7 +189,10 @@ setDefaultOptions(StockChart, {
189
189
  visible: false
190
190
  },
191
191
  tooltip: {
192
- visible: true
192
+ visible: false
193
+ },
194
+ highlight: {
195
+ visible: false
193
196
  },
194
197
  line: {
195
198
  width: 2
@@ -206,4 +209,4 @@ setDefaultOptions(StockChart, {
206
209
  }
207
210
  });
208
211
 
209
- export default StockChart;
212
+ export default StockChart;
@@ -92,7 +92,7 @@ const INSIDE_END = "insideEnd";
92
92
  const INSIDE_BASE = "insideBase";
93
93
  const OUTSIDE_END = "outsideEnd";
94
94
 
95
- const MOUSEWHEEL = "DOMMouseScroll mousewheel";
95
+ const MOUSEWHEEL = "wheel";
96
96
  const MOUSEWHEEL_DELAY = 150;
97
97
  const MOUSEWHEEL_ZOOM_RATE = 0.3;
98
98
 
@@ -5,16 +5,16 @@ import { DateCategoryAxis, Point } from '../core';
5
5
  import { MOUSEWHEEL_DELAY, MOUSEWHEEL, SELECT_START, SELECT, SELECT_END } from './constants';
6
6
 
7
7
  import { LEFT, RIGHT, MIN_VALUE, MAX_VALUE, X } from '../common/constants';
8
- import { addClass, Class, removeClass, deepExtend, elementStyles, eventElement, setDefaultOptions, limitValue, round, bindEvents, unbindEvents, mousewheelDelta, hasClasses } from '../common';
8
+ import { addClass, Class, removeClass, eventCoordinates, deepExtend, elementStyles, eventElement, setDefaultOptions, limitValue, round, bindEvents, unbindEvents, mousewheelDelta, hasClasses } from '../common';
9
9
  import { parseDate } from '../date-utils';
10
10
 
11
11
  const ZOOM_ACCELERATION = 3;
12
12
  const SELECTOR_HEIGHT_ADJUST = 0.1;
13
13
 
14
- function createDiv(className) {
14
+ function createDiv(classNames) {
15
15
  const element = document.createElement("div");
16
- if (className) {
17
- element.className = className;
16
+ if (classNames) {
17
+ element.className = classNames;
18
18
  }
19
19
 
20
20
  return element;
@@ -61,7 +61,7 @@ class Selection extends Class {
61
61
 
62
62
  createElements() {
63
63
  const options = this.options;
64
- const wrapper = this.wrapper = createDiv("k-selector");
64
+ const wrapper = this.wrapper = createDiv("k-selector k-pointer-events-none");
65
65
  elementStyles(wrapper, {
66
66
  top: options.offset.top,
67
67
  left: options.offset.left,
@@ -69,18 +69,21 @@ class Selection extends Class {
69
69
  height: options.height,
70
70
  direction: 'ltr'
71
71
  });
72
- const selection = this.selection = createDiv("k-selection");
73
- this.leftMask = createDiv("k-mask");
74
- this.rightMask = createDiv("k-mask");
72
+
73
+ const selection = this.selection = createDiv("k-selection k-pointer-events-none");
74
+
75
+ this.leftMask = createDiv("k-mask k-pointer-events-none");
76
+ this.rightMask = createDiv("k-mask k-pointer-events-none");
75
77
 
76
78
  wrapper.appendChild(this.leftMask);
77
79
  wrapper.appendChild(this.rightMask);
78
80
  wrapper.appendChild(selection);
79
81
 
80
- selection.appendChild(createDiv("k-selection-bg"));
82
+ const body = this.body = createDiv("k-selection-bg k-pointer-events-none");
83
+ selection.appendChild(body);
81
84
 
82
- const leftHandle = this.leftHandle = createDiv("k-handle k-left-handle");
83
- const rightHandle = this.rightHandle = createDiv("k-handle k-right-handle");
85
+ const leftHandle = this.leftHandle = createDiv("k-handle k-left-handle k-pointer-events-auto");
86
+ const rightHandle = this.rightHandle = createDiv("k-handle k-right-handle k-pointer-events-auto");
84
87
  leftHandle.appendChild(createDiv());
85
88
  rightHandle.appendChild(createDiv());
86
89
 
@@ -113,12 +116,12 @@ class Selection extends Class {
113
116
  bindEvents() {
114
117
  if (this.options.mousewheel !== false) {
115
118
  this._mousewheelHandler = this._mousewheel.bind(this);
116
- bindEvents(this.wrapper, {
119
+ bindEvents(this.chartElement, {
117
120
  [ MOUSEWHEEL ]: this._mousewheelHandler
118
121
  });
119
122
  }
120
123
 
121
- this._domEvents = DomEventsBuilder.create(this.wrapper, {
124
+ this._domEvents = DomEventsBuilder.create(this.chartElement, {
122
125
  stopPropagation: true, // applicable for the jQuery UserEvents
123
126
  start: this._start.bind(this),
124
127
  move: this._move.bind(this),
@@ -174,11 +177,12 @@ class Selection extends Class {
174
177
 
175
178
  if (this.wrapper) {
176
179
  if (this._mousewheelHandler) {
177
- unbindEvents(this.wrapper, {
180
+ unbindEvents(this.chartElement, {
178
181
  [ MOUSEWHEEL ]: this._mousewheelHandler
179
182
  });
180
183
  this._mousewheelHandler = null;
181
184
  }
185
+
182
186
  this.chartElement.removeChild(this.wrapper);
183
187
  this.wrapper = null;
184
188
  }
@@ -193,18 +197,35 @@ class Selection extends Class {
193
197
  };
194
198
  }
195
199
 
200
+ _pointInPane(x, y) {
201
+ const paneBox = this.categoryAxis.pane.box;
202
+ const modelCoords = this.chart._toModelCoordinates(x, y);
203
+ return paneBox.containsPoint(modelCoords);
204
+ }
205
+
196
206
  _start(e) {
197
207
  const options = this.options;
198
208
  const target = eventElement(e);
199
-
200
209
  if (this._state || !target) {
201
210
  return;
202
211
  }
203
212
 
213
+ const coords = eventCoordinates(e);
214
+ const inPane = this._pointInPane(coords.x, coords.y);
215
+ if (!inPane) {
216
+ return;
217
+ }
218
+
219
+ const handle = closestHandle(target);
220
+ const bodyRect = this.body.getBoundingClientRect();
221
+ const inBody = !handle && coords.x >= bodyRect.x && coords.x <= bodyRect.x + bodyRect.width &&
222
+ coords.y >= bodyRect.y && coords.y <= bodyRect.y + bodyRect.height;
223
+
204
224
  this.chart._unsetActivePoint();
205
225
  this._state = {
206
- moveTarget: closestHandle(target) || target,
226
+ moveTarget: handle,
207
227
  startLocation: e.x ? e.x.location : 0,
228
+ inBody,
208
229
  range: {
209
230
  from: this._index(options.from),
210
231
  to: this._index(options.to)
@@ -251,14 +272,14 @@ class Selection extends Class {
251
272
  const scale = elementStyles(this.wrapper, "width").width / (categoryAxis.categoriesCount() - 1);
252
273
  const offset = Math.round(delta / scale) * (reverse ? -1 : 1);
253
274
 
254
- if (!target) {
275
+ if (!target && !state.inBody) {
255
276
  return;
256
277
  }
257
278
 
258
- const leftHandle = hasClasses(target, "k-left-handle");
259
- const rightHandle = hasClasses(target, "k-right-handle");
279
+ const leftHandle = target && hasClasses(target, "k-left-handle");
280
+ const rightHandle = target && hasClasses(target, "k-right-handle");
260
281
 
261
- if (hasClasses(target, "k-selection k-selection-bg")) {
282
+ if (state.inBody) {
262
283
  range.from = Math.min(
263
284
  Math.max(min, from - offset),
264
285
  max - span
@@ -335,6 +356,7 @@ class Selection extends Class {
335
356
  range.to = Math.min(range.from + span, max);
336
357
 
337
358
  this._start(e);
359
+
338
360
  if (this._state) {
339
361
  this._state.range = range;
340
362
  this.trigger(SELECT, this._rangeEventArgs(range));
@@ -345,7 +367,7 @@ class Selection extends Class {
345
367
  _mousewheel(e) {
346
368
  let delta = mousewheelDelta(e);
347
369
 
348
- this._start({ target: this.selection });
370
+ this._start(e);
349
371
 
350
372
  if (this._state) {
351
373
  const range = this._state.range;
@@ -383,6 +405,12 @@ class Selection extends Class {
383
405
 
384
406
  _gesturestart(e) {
385
407
  const options = this.options;
408
+ const touch = e.touches[0];
409
+ const inPane = this._pointInPane(touch.pageX, touch.pageY);
410
+
411
+ if (!inPane) {
412
+ return;
413
+ }
386
414
 
387
415
  this._state = {
388
416
  range: {
@@ -407,6 +435,10 @@ class Selection extends Class {
407
435
  }
408
436
 
409
437
  _gesturechange(e) {
438
+ if (!this._state) {
439
+ return;
440
+ }
441
+
410
442
  const { chart, _state: state, options, categoryAxis } = this;
411
443
  const range = state.range;
412
444
  const p0 = chart._toModelCoordinates(e.touches[0].x.location).x;
@@ -2,9 +2,9 @@ export default function hasClasses(element, classNames) {
2
2
  if (element.className) {
3
3
  const names = classNames.split(" ");
4
4
  for (let idx = 0; idx < names.length; idx++) {
5
- if (element.className.indexOf(names[idx]) !== -1) {
5
+ if (element.className.indexOf && element.className.indexOf(names[idx]) !== -1) {
6
6
  return true;
7
7
  }
8
8
  }
9
9
  }
10
- }
10
+ }
@@ -9,21 +9,23 @@ import {
9
9
 
10
10
  import { Layer } from './layer';
11
11
  import { Location } from '../location';
12
-
13
12
  import {
14
13
  proxy,
15
14
  on,
16
15
  off,
17
16
  toHyphens,
18
- toPixels
17
+ toPixels,
18
+ convertToHtml
19
19
  } from '../utils';
20
+ import TemplateService from '../../services/template-service';
20
21
 
21
22
  const CLICK = "click";
22
23
  const MOUSE_ENTER = "mouseenter";
23
24
  const MOUSE_LEAVE = "mouseleave";
24
25
 
25
26
  const extend = Object.assign;
26
- const MARKER_CLASS = ".k-marker";
27
+ const MARKER_CLASS_NAME = "k-marker";
28
+ const MARKER_CLASS = "." + MARKER_CLASS_NAME;
27
29
 
28
30
  export class MarkerLayer extends Layer {
29
31
  constructor(map, options) {
@@ -141,11 +143,9 @@ export class MarkerLayer extends Layer {
141
143
  }
142
144
 
143
145
  _markerClick(e) {
144
- const marker = e.target._kendoNode;
146
+ const marker = e.currentTarget._kendoNode;
145
147
 
146
148
  let args = {
147
- // marker: $(e.target).data('kendoMarker'),
148
- // marker: e.target.getAttribute("data-kendoMarker"),
149
149
  layer: this,
150
150
  layerIndex: this._layerIndex(),
151
151
  marker: marker,
@@ -184,7 +184,8 @@ setDefaultOptions(MarkerLayer, {
184
184
  zIndex: 1000,
185
185
  autoBind: true,
186
186
  locationField: 'location',
187
- titleField: 'title'
187
+ titleField: 'title',
188
+ template: ""
188
189
  });
189
190
 
190
191
  export class Marker extends Class {
@@ -258,9 +259,17 @@ export class Marker extends Class {
258
259
  if (!this.element) {
259
260
  let options = this.options;
260
261
  let layer = this.layer;
261
-
262
- const element = document.createElement('span');
263
- addClass(element, 'k-marker k-icon k-i-marker-' + toHyphens(options.shape || 'pin'));
262
+ let element = document.createElement('span');
263
+ addClass(element, MARKER_CLASS_NAME);
264
+
265
+ if (this.options.template) {
266
+ const templateFn = this._compileTemplate(this.options.template);
267
+ const templateHtml = templateFn(this.dataItem);
268
+ const templateElement = convertToHtml(templateHtml);
269
+ element.appendChild(templateElement);
270
+ } else {
271
+ addClass(element, 'k-icon k-i-marker-' + toHyphens(options.shape || 'pin'));
272
+ }
264
273
 
265
274
  if (options.title) {
266
275
  element.setAttribute("title", options.title);
@@ -319,6 +328,13 @@ export class Marker extends Class {
319
328
  return args;
320
329
  }
321
330
 
331
+ _compileTemplate(template) {
332
+ return TemplateService.compile(template, {
333
+ paramName: "dataItem",
334
+ useWithBlock: false
335
+ });
336
+ }
337
+
322
338
  static create(arg, defaults) {
323
339
  if (arg instanceof Marker) {
324
340
  return arg;