@syncfusion/ej2-maps 19.4.56 → 19.4.57-105067

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 (84) hide show
  1. package/.eslintrc.json +18 -3
  2. package/.github/PULL_REQUEST_TEMPLATE/Bug.md +72 -72
  3. package/.github/PULL_REQUEST_TEMPLATE/Feature.md +49 -49
  4. package/CHANGELOG.md +441 -439
  5. package/README.md +73 -73
  6. package/dist/ej2-maps.umd.min.js +1 -10
  7. package/dist/ej2-maps.umd.min.js.map +1 -1
  8. package/dist/es6/ej2-maps.es2015.js +1161 -638
  9. package/dist/es6/ej2-maps.es2015.js.map +1 -1
  10. package/dist/es6/ej2-maps.es5.js +1200 -678
  11. package/dist/es6/ej2-maps.es5.js.map +1 -1
  12. package/dist/global/ej2-maps.min.js +1 -10
  13. package/dist/global/ej2-maps.min.js.map +1 -1
  14. package/dist/global/index.d.ts +0 -9
  15. package/dist/ts/maps/layers/bing-map.ts +50 -0
  16. package/dist/ts/maps/layers/bubble.ts +290 -0
  17. package/dist/ts/maps/layers/color-mapping.ts +226 -0
  18. package/dist/ts/maps/layers/data-label.ts +418 -0
  19. package/dist/ts/maps/layers/layer-panel.ts +1480 -0
  20. package/dist/ts/maps/layers/legend.ts +2236 -0
  21. package/dist/ts/maps/layers/marker.ts +453 -0
  22. package/dist/ts/maps/layers/navigation-selected-line.ts +167 -0
  23. package/dist/ts/maps/maps.ts +2886 -0
  24. package/dist/ts/maps/model/base.ts +1843 -0
  25. package/dist/ts/maps/model/constants.ts +200 -0
  26. package/dist/ts/maps/model/export-image.ts +178 -0
  27. package/dist/ts/maps/model/export-pdf.ts +170 -0
  28. package/dist/ts/maps/model/interface.ts +823 -0
  29. package/dist/ts/maps/model/print.ts +104 -0
  30. package/dist/ts/maps/model/theme.ts +554 -0
  31. package/dist/ts/maps/user-interaction/annotation.ts +127 -0
  32. package/dist/ts/maps/user-interaction/highlight.ts +233 -0
  33. package/dist/ts/maps/user-interaction/selection.ts +321 -0
  34. package/dist/ts/maps/user-interaction/tooltip.ts +387 -0
  35. package/dist/ts/maps/user-interaction/zoom.ts +1767 -0
  36. package/dist/ts/maps/utils/enum.ts +368 -0
  37. package/dist/ts/maps/utils/helper.ts +3421 -0
  38. package/helper/e2e/index.js +3 -3
  39. package/helper/e2e/maps-helper.js +13 -13
  40. package/license +9 -9
  41. package/package.json +85 -85
  42. package/src/maps/layers/bing-map.d.ts +4 -0
  43. package/src/maps/layers/bing-map.js +16 -3
  44. package/src/maps/layers/bubble.d.ts +1 -2
  45. package/src/maps/layers/bubble.js +7 -12
  46. package/src/maps/layers/data-label.d.ts +1 -4
  47. package/src/maps/layers/data-label.js +32 -35
  48. package/src/maps/layers/layer-panel.d.ts +18 -1
  49. package/src/maps/layers/layer-panel.js +226 -72
  50. package/src/maps/layers/legend.d.ts +5 -2
  51. package/src/maps/layers/legend.js +170 -61
  52. package/src/maps/layers/marker.d.ts +2 -4
  53. package/src/maps/layers/marker.js +49 -48
  54. package/src/maps/layers/navigation-selected-line.d.ts +1 -2
  55. package/src/maps/layers/navigation-selected-line.js +7 -13
  56. package/src/maps/maps-model.d.ts +259 -251
  57. package/src/maps/maps.d.ts +24 -3
  58. package/src/maps/maps.js +152 -90
  59. package/src/maps/model/base-model.d.ts +1025 -1021
  60. package/src/maps/model/base.d.ts +5 -1
  61. package/src/maps/model/base.js +24 -24
  62. package/src/maps/model/constants.d.ts +6 -0
  63. package/src/maps/model/constants.js +6 -0
  64. package/src/maps/model/export-image.d.ts +2 -4
  65. package/src/maps/model/export-image.js +26 -32
  66. package/src/maps/model/export-pdf.d.ts +4 -6
  67. package/src/maps/model/export-pdf.js +27 -35
  68. package/src/maps/model/interface.d.ts +34 -26
  69. package/src/maps/model/print.d.ts +2 -5
  70. package/src/maps/model/print.js +33 -21
  71. package/src/maps/model/theme.js +7 -4
  72. package/src/maps/user-interaction/annotation.d.ts +1 -2
  73. package/src/maps/user-interaction/annotation.js +3 -4
  74. package/src/maps/user-interaction/highlight.d.ts +1 -2
  75. package/src/maps/user-interaction/highlight.js +11 -10
  76. package/src/maps/user-interaction/selection.d.ts +1 -2
  77. package/src/maps/user-interaction/selection.js +42 -19
  78. package/src/maps/user-interaction/tooltip.d.ts +3 -5
  79. package/src/maps/user-interaction/tooltip.js +27 -14
  80. package/src/maps/user-interaction/zoom.d.ts +3 -8
  81. package/src/maps/user-interaction/zoom.js +282 -162
  82. package/src/maps/utils/enum.d.ts +5 -1
  83. package/src/maps/utils/helper.d.ts +1 -1
  84. package/src/maps/utils/helper.js +62 -31
@@ -0,0 +1,321 @@
1
+ /* eslint-disable jsdoc/require-param */
2
+ /* eslint-disable @typescript-eslint/no-unused-vars */
3
+ /* eslint-disable max-len */
4
+ import { Maps } from '../../index';
5
+ import { SelectionSettingsModel, click, ISelectionEventArgs, itemSelection } from '../index';
6
+ import { getElement, createStyle, customizeStyle, removeClass, getTargetElement, getElementByID} from '../utils/helper';
7
+ import { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';
8
+ import { BorderModel } from '../model/base-model';
9
+ /**
10
+ * Selection module class
11
+ */
12
+ export class Selection {
13
+ private maps: Maps;
14
+ /**
15
+ * @private
16
+ */
17
+ public selectionsettings: SelectionSettingsModel;
18
+ /**
19
+ * @private
20
+ */
21
+ public selectionType: string;
22
+ constructor(maps: Maps) {
23
+ this.maps = maps;
24
+ this.addEventListener();
25
+ }
26
+ /**
27
+ * For binding events to selection module
28
+ *
29
+ * @returns {void}
30
+ */
31
+ private addEventListener(): void {
32
+ if (!this.maps.isDestroyed) {
33
+ this.maps.on(click, this.mouseClick, this);
34
+ }
35
+ }
36
+ /**
37
+ * For removing events from selection modue
38
+ *
39
+ * @returns {void}
40
+ */
41
+ private removeEventListener(): void {
42
+ if (this.maps.isDestroyed) {
43
+ return;
44
+ }
45
+ this.maps.off(click, this.mouseClick);
46
+ }
47
+ private mouseClick(targetElement: Element): void {
48
+ if (!isNullOrUndefined(targetElement['type']) && targetElement['type'].indexOf('touch') !== -1 &&
49
+ isNullOrUndefined(targetElement.id)) {
50
+ targetElement = targetElement['target'];
51
+ }
52
+ if (!isNullOrUndefined(targetElement.id) && (targetElement.id.indexOf('LayerIndex') > -1 ||
53
+ targetElement.id.indexOf('NavigationIndex') > -1)) {
54
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
55
+ let shapeData: any;
56
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
+ let data: any;
58
+ let shapeIndex: number;
59
+ let dataIndex: number;
60
+ const layerIndex: number = parseInt(targetElement.id.split('_LayerIndex_')[1].split('_')[0], 10);
61
+ if (targetElement.id.indexOf('shapeIndex') > -1) {
62
+ shapeIndex = parseInt(targetElement.id.split('_shapeIndex_')[1].split('_')[0], 10);
63
+ shapeData = !isNullOrUndefined(this.maps.layers[layerIndex].shapeData['features'])
64
+ && this.maps.layers[layerIndex].shapeData['features']['length'] > shapeIndex ?
65
+ this.maps.layers[layerIndex].shapeData['features'][shapeIndex]['properties'] :
66
+ !isNullOrUndefined(this.maps.layers[layerIndex].shapeData['geometries'])
67
+ && this.maps.layers[layerIndex].shapeData['geometries']['length'] > shapeIndex ?
68
+ this.maps.layers[layerIndex].shapeData['geometries'][shapeIndex]['properties'] : null ;
69
+ dataIndex = parseInt(targetElement.id.split('_dataIndex_')[1].split('_')[0], 10);
70
+ data = isNullOrUndefined(dataIndex) ? null : this.maps.layers[layerIndex].dataSource[dataIndex];
71
+ this.selectionsettings = this.maps.layers[layerIndex].selectionSettings;
72
+ this.selectionType = 'Shape';
73
+ } else if (targetElement.id.indexOf('BubbleIndex') > -1) {
74
+ const bubbleIndex: number = parseInt(targetElement.id.split('_BubbleIndex_')[1].split('_')[0], 10);
75
+ dataIndex = parseInt(targetElement.id.split('_dataIndex_')[1].split('_')[0], 10);
76
+ data = this.maps.layers[layerIndex].bubbleSettings[bubbleIndex].dataSource[dataIndex];
77
+ this.selectionsettings = this.maps.layers[layerIndex].bubbleSettings[bubbleIndex].selectionSettings;
78
+ this.selectionType = 'Bubble';
79
+ } else if (targetElement.id.indexOf('MarkerIndex') > -1) {
80
+ const markerIndex: number = parseInt(targetElement.id.split('_MarkerIndex_')[1].split('_')[0], 10);
81
+ dataIndex = parseInt(targetElement.id.split('_dataIndex_')[1].split('_')[0], 10);
82
+ data = this.maps.layers[layerIndex].markerSettings[markerIndex].dataSource[dataIndex];
83
+ this.selectionsettings = this.maps.layers[layerIndex].markerSettings[markerIndex].selectionSettings;
84
+ this.selectionType = 'Marker';
85
+ } else {
86
+ const index: number = parseInt(targetElement.id.split('_NavigationIndex_')[1].split('_')[0], 10);
87
+ shapeData = null;
88
+ data = {
89
+ latitude: this.maps.layers[layerIndex].navigationLineSettings[index].latitude,
90
+ longitude: this.maps.layers[layerIndex].navigationLineSettings[index].longitude
91
+ };
92
+ this.selectionsettings = this.maps.layers[layerIndex].navigationLineSettings[index].selectionSettings;
93
+ this.selectionType = 'navigationline';
94
+ }
95
+ if (this.selectionsettings.enable) {
96
+ this.selectElement(targetElement, layerIndex, data, shapeData);
97
+ }
98
+ } else if ((this.maps.legendSettings.visible && !this.maps.legendSettings.toggleLegendSettings.enable && this.maps.legendModule) &&
99
+ !isNullOrUndefined(targetElement.id) && targetElement.id.indexOf('_Text') === -1 &&
100
+ (targetElement.id.indexOf(this.maps.element.id + '_Legend_Shape_Index') > -1 ||
101
+ targetElement.id.indexOf(this.maps.element.id + '_Legend_Index') !== -1)) {
102
+ this.maps.legendModule.legendHighLightAndSelection(targetElement, 'selection');
103
+ }
104
+ }
105
+
106
+ /**
107
+ * @private
108
+ */
109
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
110
+ public selectElement(targetElement: Element, layerIndex: number, data: any, shapeData: any): void {
111
+ this.maps.mapSelect = targetElement ? true : false;
112
+ if (this.maps.legendModule && this.maps.legendSettings.visible && targetElement.id.indexOf('_MarkerIndex_') === -1) {
113
+ this.maps.legendModule.shapeHighLightAndSelection(
114
+ targetElement, data, this.selectionsettings, 'selection', layerIndex);
115
+ }
116
+ const shapeToggled: boolean = (targetElement.id.indexOf('shapeIndex') > -1 && this.maps.legendSettings.visible && this.maps.legendModule) ?
117
+ this.maps.legendModule.shapeToggled : true;
118
+ if (shapeToggled) {
119
+ this.selectMap(targetElement, shapeData, data);
120
+ }
121
+ }
122
+
123
+ // eslint-disable-next-line valid-jsdoc
124
+ /**
125
+ * Public method for selection
126
+ */
127
+ public addSelection(layerIndex: number, name: string, enable: boolean): void {
128
+ const targetElement: Element = getTargetElement(layerIndex, name, enable, this.maps);
129
+ if (enable) {
130
+ this.selectMap(targetElement, null, null);
131
+ } else {
132
+ removeClass(targetElement);
133
+ }
134
+ }
135
+ /**
136
+ * Method for selection
137
+ *
138
+ * @param {Element} targetElement - Specifies the target element
139
+ * @param {any} shapeData - Specifies the shape data
140
+ * @param {any} data - Specifies the data
141
+ * @returns {void}
142
+ */
143
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
144
+ private selectMap(targetElement: Element, shapeData: any, data: any): void {
145
+ const layerIndex: number = parseInt(targetElement.id.split('_LayerIndex_')[1].split('_')[0], 10);
146
+ let parentElement: Element;
147
+ let children: HTMLCollection;
148
+ let selectionClass: Element;
149
+ const isLineStringShape: boolean = targetElement.parentElement.id.indexOf('LineString') > -1;
150
+ const selectionsettings: SelectionSettingsModel = this.selectionsettings;
151
+ const border: BorderModel = {
152
+ color: isLineStringShape ? (this.selectionsettings.fill || this.selectionsettings.border.color) : this.selectionsettings.border.color,
153
+ width: isLineStringShape ? (this.selectionsettings.border.width / this.maps.scale) :
154
+ (this.selectionsettings.border.width / (this.selectionType === 'Marker' ? 1 : this.maps.scale)),
155
+ opacity: this.selectionsettings.border.opacity
156
+ };
157
+ const eventArgs: ISelectionEventArgs = {
158
+ opacity: this.selectionsettings.opacity,
159
+ fill: isLineStringShape ? 'transparent' : (this.selectionType !== 'navigationline' ? this.selectionsettings.fill : 'none'),
160
+ border: border,
161
+ name: itemSelection,
162
+ target: targetElement.id,
163
+ cancel: false,
164
+ shapeData: shapeData,
165
+ data: data,
166
+ maps: this.maps
167
+ };
168
+ this.maps.trigger('itemSelection', eventArgs, (observedArgs: ISelectionEventArgs) => {
169
+ eventArgs.border.opacity = isNullOrUndefined(this.selectionsettings.border.opacity) ? this.selectionsettings.opacity : this.selectionsettings.border.opacity;
170
+ if (!eventArgs.cancel) {
171
+ if (targetElement.getAttribute('class') === this.selectionType + 'selectionMapStyle'
172
+ || targetElement.getAttribute('class') === 'LineselectionMapStyle') {
173
+ removeClass(targetElement);
174
+ this.removedSelectionList(targetElement);
175
+ for (let m: number = 0; m < this.maps.shapeSelectionItem.length; m++) {
176
+ if (this.maps.shapeSelectionItem[m] === eventArgs.shapeData) {
177
+ this.maps.shapeSelectionItem.splice(m, 1);
178
+ break;
179
+ }
180
+ }
181
+ if (targetElement.id.indexOf('NavigationIndex') > -1) {
182
+ const index: number = parseInt(targetElement.id.split('_NavigationIndex_')[1].split('_')[0], 10);
183
+ const layerIndex: number = parseInt(targetElement.parentElement.id.split('_LayerIndex_')[1].split('_')[0], 10);
184
+ targetElement.setAttribute(
185
+ 'stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString()
186
+ );
187
+ targetElement.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);
188
+ }
189
+ } else {
190
+ const layetElement: Element = getElementByID(this.maps.element.id + '_Layer_Collections');
191
+ if (!this.selectionsettings.enableMultiSelect &&
192
+ (layetElement.getElementsByClassName(this.selectionType + 'selectionMapStyle').length > 0 ||
193
+ layetElement.getElementsByClassName('LineselectionMapStyle').length > 0)) {
194
+ let eleCount : number = layetElement.getElementsByClassName(this.selectionType + 'selectionMapStyle').length;
195
+ let ele : Element;
196
+ for (let k : number = 0 ; k < eleCount; k++) {
197
+ ele = layetElement.getElementsByClassName(this.selectionType + 'selectionMapStyle')[0];
198
+ removeClass(ele);
199
+ this.removedSelectionList(ele);
200
+ }
201
+ if (layetElement.getElementsByClassName('LineselectionMapStyle').length > 0) {
202
+ eleCount = layetElement.getElementsByClassName('LineselectionMapStyle').length;
203
+ for (let k : number = 0 ; k < eleCount; k++) {
204
+ ele = layetElement.getElementsByClassName('LineselectionMapStyle')[0];
205
+ removeClass(ele);
206
+ this.removedSelectionList(ele);
207
+ }
208
+ }
209
+ if (this.selectionType === 'Shape') {
210
+ this.maps.shapeSelectionItem = [];
211
+ const selectionLength: number = this.maps.selectedElementId.length;
212
+ for (let i: number = 0; i < selectionLength; i++) {
213
+ ele = layetElement.getElementsByClassName(this.selectionType + 'selectionMapStyle')[0];
214
+ removeClass(ele);
215
+ const selectedElementIdIndex: number = this.maps.selectedElementId.indexOf(ele.getAttribute('id'));
216
+ this.maps.selectedElementId.splice(selectedElementIdIndex, 1);
217
+ }
218
+ }
219
+ if (ele.id.indexOf('NavigationIndex') > -1) {
220
+ const index: number = parseInt(targetElement.id.split('_NavigationIndex_')[1].split('_')[0], 10);
221
+ const layerIndex: number = parseInt(targetElement.parentElement.id.split('_LayerIndex_')[1].split('_')[0], 10);
222
+ ele.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());
223
+ ele.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);
224
+ }
225
+ }
226
+ if (!isLineStringShape) {
227
+ if (!getElement(this.selectionType + 'selectionMap')) {
228
+ document.body.appendChild(createStyle(this.selectionType + 'selectionMap',
229
+ this.selectionType + 'selectionMapStyle', eventArgs));
230
+ } else {
231
+ customizeStyle(this.selectionType + 'selectionMap', this.selectionType + 'selectionMapStyle', eventArgs);
232
+ }
233
+ targetElement.setAttribute('class', this.selectionType + 'selectionMapStyle');
234
+ } else {
235
+ if (!getElement('LineselectionMap')) {
236
+ document.body.appendChild(createStyle('LineselectionMap', 'LineselectionMapStyle', eventArgs));
237
+ } else {
238
+ customizeStyle('LineselectionMap', 'LineselectionMapStyle', eventArgs);
239
+ }
240
+ targetElement.setAttribute('class', 'LineselectionMapStyle');
241
+ }
242
+ if (targetElement.getAttribute('class') === 'ShapeselectionMapStyle') {
243
+ this.maps.shapeSelectionClass = getElement(this.selectionType + 'selectionMap');
244
+ this.maps.selectedElementId.push(targetElement.getAttribute('id'));
245
+ this.maps.shapeSelectionItem.push(eventArgs.shapeData);
246
+ }
247
+ if (targetElement.getAttribute('class') === 'MarkerselectionMapStyle') {
248
+ this.maps.markerSelectionClass = getElement(this.selectionType + 'selectionMap');
249
+ this.maps.selectedMarkerElementId.push(targetElement.getAttribute('id'));
250
+ }
251
+ if (targetElement.getAttribute('class') === 'BubbleselectionMapStyle') {
252
+ this.maps.bubbleSelectionClass = getElement(this.selectionType + 'selectionMap');
253
+ this.maps.selectedBubbleElementId.push(targetElement.getAttribute('id'));
254
+ }
255
+ if (targetElement.getAttribute('class') === 'navigationlineselectionMapStyle') {
256
+ this.maps.navigationSelectionClass = getElement(this.selectionType + 'selectionMap');
257
+ this.maps.selectedNavigationElementId.push(targetElement.getAttribute('id'));
258
+ }
259
+ }
260
+ }
261
+ });
262
+ }
263
+ /**
264
+ * Remove legend selection
265
+ */
266
+ // private removeLegendSelection(legendCollection: Object[], targetElement: Element): void {
267
+ // let shape: Element;
268
+ // if (!this.selectionsettings.enableMultiSelect) {
269
+ // for (let i: number = 0; i < legendCollection.length; i++) {
270
+ // for (let data of legendCollection[i]['data']) {
271
+ // shape = getElement(this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +
272
+ // '_shapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex']);
273
+ // removeClass(shape);
274
+ // }
275
+ // }
276
+ // }
277
+ // }
278
+
279
+ /**
280
+ * Get module name.
281
+ *
282
+ * @param {Element} targetElement - Specifies the target element
283
+ * @returns {void}
284
+ * @private
285
+ */
286
+ public removedSelectionList(targetElement: Element): void {
287
+ if (this.selectionType === 'Shape') {
288
+ this.maps.selectedElementId.splice(this.maps.selectedElementId.indexOf(targetElement.getAttribute('id')), 1);
289
+ }
290
+ if (this.selectionType === 'Bubble') {
291
+ this.maps.selectedBubbleElementId.splice(this.maps.selectedBubbleElementId.indexOf(targetElement.getAttribute('id')), 1);
292
+ }
293
+ if (this.selectionType === 'Marker') {
294
+ this.maps.selectedMarkerElementId.splice(this.maps.selectedMarkerElementId.indexOf(targetElement.getAttribute('id')), 1);
295
+ }
296
+ if (this.selectionType === 'navigationline') {
297
+ this.maps.selectedBubbleElementId.splice(this.maps.selectedBubbleElementId.indexOf(targetElement.getAttribute('id')), 1);
298
+ }
299
+ }
300
+
301
+ /**
302
+ * Get module name.
303
+ *
304
+ * @returns {string} - Returns the module name
305
+ */
306
+ protected getModuleName(): string {
307
+ return 'Selection';
308
+ }
309
+
310
+ /**
311
+ * To destroy the selection.
312
+ *
313
+ * @returns {void}
314
+ * @private
315
+ */
316
+ public destroy(): void {
317
+ this.selectionsettings = null;
318
+ this.removeEventListener();
319
+ this.maps = null;
320
+ }
321
+ }