Showing
5 changed files
with
67 additions
and
47 deletions
@@ -221,7 +221,7 @@ export default class TbGoogleMap { | @@ -221,7 +221,7 @@ export default class TbGoogleMap { | ||
221 | /* eslint-enable no-undef */ | 221 | /* eslint-enable no-undef */ |
222 | 222 | ||
223 | /* eslint-disable no-undef */ | 223 | /* eslint-disable no-undef */ |
224 | - createMarker(location, settings, onClickListener, markerArgs) { | 224 | + createMarker(location, dsIndex, settings, onClickListener, markerArgs) { |
225 | var marker; | 225 | var marker; |
226 | if (settings.showLabel) { | 226 | if (settings.showLabel) { |
227 | marker = new MarkerWithLabel({ | 227 | marker = new MarkerWithLabel({ |
@@ -244,7 +244,7 @@ export default class TbGoogleMap { | @@ -244,7 +244,7 @@ export default class TbGoogleMap { | ||
244 | }); | 244 | }); |
245 | 245 | ||
246 | if (settings.displayTooltip) { | 246 | if (settings.displayTooltip) { |
247 | - this.createTooltip(marker, settings.tooltipPattern, settings.tooltipReplaceInfo, settings.autocloseTooltip, markerArgs); | 247 | + this.createTooltip(marker, dsIndex, settings, markerArgs); |
248 | } | 248 | } |
249 | 249 | ||
250 | if (onClickListener) { | 250 | if (onClickListener) { |
@@ -261,13 +261,13 @@ export default class TbGoogleMap { | @@ -261,13 +261,13 @@ export default class TbGoogleMap { | ||
261 | /* eslint-enable no-undef */ | 261 | /* eslint-enable no-undef */ |
262 | 262 | ||
263 | /* eslint-disable no-undef */ | 263 | /* eslint-disable no-undef */ |
264 | - createTooltip(marker, pattern, replaceInfo, autoClose, markerArgs) { | 264 | + createTooltip(marker, dsIndex, settings, markerArgs) { |
265 | var popup = new google.maps.InfoWindow({ | 265 | var popup = new google.maps.InfoWindow({ |
266 | content: '' | 266 | content: '' |
267 | }); | 267 | }); |
268 | var map = this; | 268 | var map = this; |
269 | marker.addListener('click', function() { | 269 | marker.addListener('click', function() { |
270 | - if (autoClose) { | 270 | + if (settings.autocloseTooltip) { |
271 | map.tooltips.forEach((tooltip) => { | 271 | map.tooltips.forEach((tooltip) => { |
272 | tooltip.popup.close(); | 272 | tooltip.popup.close(); |
273 | }); | 273 | }); |
@@ -277,8 +277,8 @@ export default class TbGoogleMap { | @@ -277,8 +277,8 @@ export default class TbGoogleMap { | ||
277 | this.tooltips.push( { | 277 | this.tooltips.push( { |
278 | markerArgs: markerArgs, | 278 | markerArgs: markerArgs, |
279 | popup: popup, | 279 | popup: popup, |
280 | - pattern: pattern, | ||
281 | - replaceInfo: replaceInfo | 280 | + locationSettings: settings, |
281 | + dsIndex: dsIndex | ||
282 | }); | 282 | }); |
283 | } | 283 | } |
284 | /* eslint-enable no-undef */ | 284 | /* eslint-enable no-undef */ |
@@ -298,7 +298,7 @@ export default class TbImageMap { | @@ -298,7 +298,7 @@ export default class TbImageMap { | ||
298 | onMarkerIconReady(iconInfo); | 298 | onMarkerIconReady(iconInfo); |
299 | } | 299 | } |
300 | 300 | ||
301 | - createMarker(position, settings, onClickListener, markerArgs) { | 301 | + createMarker(position, dsIndex, settings, onClickListener, markerArgs) { |
302 | var pos = this.posFunction(position.x, position.y); | 302 | var pos = this.posFunction(position.x, position.y); |
303 | var x = pos.x * this.width; | 303 | var x = pos.x * this.width; |
304 | var y = pos.y * this.height; | 304 | var y = pos.y * this.height; |
@@ -319,7 +319,7 @@ export default class TbImageMap { | @@ -319,7 +319,7 @@ export default class TbImageMap { | ||
319 | }); | 319 | }); |
320 | 320 | ||
321 | if (settings.displayTooltip) { | 321 | if (settings.displayTooltip) { |
322 | - this.createTooltip(marker, settings.tooltipPattern, settings.tooltipReplaceInfo, settings.autocloseTooltip, markerArgs); | 322 | + this.createTooltip(marker, dsIndex, settings, markerArgs); |
323 | } | 323 | } |
324 | 324 | ||
325 | if (onClickListener) { | 325 | if (onClickListener) { |
@@ -348,15 +348,15 @@ export default class TbImageMap { | @@ -348,15 +348,15 @@ export default class TbImageMap { | ||
348 | } | 348 | } |
349 | } | 349 | } |
350 | 350 | ||
351 | - createTooltip(marker, pattern, replaceInfo, autoClose, markerArgs) { | 351 | + createTooltip(marker, dsIndex, settings, markerArgs) { |
352 | var popup = L.popup(); | 352 | var popup = L.popup(); |
353 | popup.setContent(''); | 353 | popup.setContent(''); |
354 | - marker.bindPopup(popup, {autoClose: autoClose, closeOnClick: false}); | 354 | + marker.bindPopup(popup, {autoClose: settings.autocloseTooltip, closeOnClick: false}); |
355 | this.tooltips.push( { | 355 | this.tooltips.push( { |
356 | markerArgs: markerArgs, | 356 | markerArgs: markerArgs, |
357 | popup: popup, | 357 | popup: popup, |
358 | - pattern: pattern, | ||
359 | - replaceInfo: replaceInfo | 358 | + locationSettings: settings, |
359 | + dsIndex: dsIndex | ||
360 | }); | 360 | }); |
361 | } | 361 | } |
362 | 362 |
@@ -210,14 +210,30 @@ export default class TbMapWidgetV2 { | @@ -210,14 +210,30 @@ export default class TbMapWidgetV2 { | ||
210 | 210 | ||
211 | var tbMap = this; | 211 | var tbMap = this; |
212 | 212 | ||
213 | - function updateLocationLabel(location) { | ||
214 | - if (location.settings.showLabel && location.settings.labelReplaceInfo.variables.length) { | ||
215 | - location.settings.labelText = fillPattern(location.settings.label, | ||
216 | - location.settings.labelReplaceInfo, tbMap.subscription.data); | 213 | + function updateLocationLabel(location, dataMap) { |
214 | + if (location.settings.showLabel) { | ||
215 | + if (location.settings.useLabelFunction && location.settings.labelFunction) { | ||
216 | + try { | ||
217 | + location.settings.label = location.settings.labelFunction(dataMap.dataMap, dataMap.dsDataMap, location.dsIndex); | ||
218 | + } catch (e) { | ||
219 | + location.settings.label = null; | ||
220 | + } | ||
221 | + if (location.settings.label) { | ||
222 | + var datasources = tbMap.subscription.datasources; | ||
223 | + location.settings.label = tbMap.utils.createLabelFromDatasource(datasources[location.dsIndex], location.settings.label); | ||
224 | + location.settings.labelReplaceInfo = processPattern(location.settings.label, datasources, location.dsIndex); | ||
225 | + location.settings.labelText = location.settings.label; | ||
226 | + } | ||
227 | + } | ||
228 | + if (location.settings.labelReplaceInfo.variables.length) { | ||
229 | + location.settings.labelText = fillPattern(location.settings.label, | ||
230 | + location.settings.labelReplaceInfo, tbMap.subscription.data); | ||
231 | + } | ||
217 | tbMap.map.updateMarkerLabel(location.marker, location.settings); | 232 | tbMap.map.updateMarkerLabel(location.marker, location.settings); |
218 | } | 233 | } |
219 | } | 234 | } |
220 | 235 | ||
236 | + | ||
221 | function calculateLocationColor(location, dataMap) { | 237 | function calculateLocationColor(location, dataMap) { |
222 | if (location.settings.useColorFunction && location.settings.colorFunction) { | 238 | if (location.settings.useColorFunction && location.settings.colorFunction) { |
223 | var color; | 239 | var color; |
@@ -267,7 +283,7 @@ export default class TbMapWidgetV2 { | @@ -267,7 +283,7 @@ export default class TbMapWidgetV2 { | ||
267 | } | 283 | } |
268 | 284 | ||
269 | function updateLocationStyle(location, dataMap) { | 285 | function updateLocationStyle(location, dataMap) { |
270 | - updateLocationLabel(location); | 286 | + updateLocationLabel(location, dataMap); |
271 | var color = calculateLocationColor(location, dataMap); | 287 | var color = calculateLocationColor(location, dataMap); |
272 | var image = calculateLocationMarkerImage(location, dataMap); | 288 | var image = calculateLocationMarkerImage(location, dataMap); |
273 | updateLocationColor(location, color, image); | 289 | updateLocationColor(location, color, image); |
@@ -281,7 +297,7 @@ export default class TbMapWidgetV2 { | @@ -281,7 +297,7 @@ export default class TbMapWidgetV2 { | ||
281 | if (image && (!location.settings.currentImage || !angular.equals(location.settings.currentImage, image))) { | 297 | if (image && (!location.settings.currentImage || !angular.equals(location.settings.currentImage, image))) { |
282 | location.settings.currentImage = image; | 298 | location.settings.currentImage = image; |
283 | } | 299 | } |
284 | - location.marker = tbMap.map.createMarker(markerLocation, location.settings, | 300 | + location.marker = tbMap.map.createMarker(markerLocation, location.dsIndex, location.settings, |
285 | function (event) { | 301 | function (event) { |
286 | tbMap.callbacks.onLocationClick(location); | 302 | tbMap.callbacks.onLocationClick(location); |
287 | locationRowClick(event, location); | 303 | locationRowClick(event, location); |
@@ -401,25 +417,11 @@ export default class TbMapWidgetV2 { | @@ -401,25 +417,11 @@ export default class TbMapWidgetV2 { | ||
401 | settings: angular.copy(tbMap.locationSettings) | 417 | settings: angular.copy(tbMap.locationSettings) |
402 | }; | 418 | }; |
403 | if (location.settings.showLabel) { | 419 | if (location.settings.showLabel) { |
404 | - if (location.settings.useLabelFunction && location.settings.labelFunction) { | ||
405 | - try { | ||
406 | - location.settings.label = location.settings.labelFunction(dataMap.dataMap, dataMap.dsDataMap, location.dsIndex); | ||
407 | - } catch (e) { | ||
408 | - location.settings.label = null; | ||
409 | - } | ||
410 | - } | ||
411 | location.settings.label = tbMap.utils.createLabelFromDatasource(currentDatasource, location.settings.label); | 420 | location.settings.label = tbMap.utils.createLabelFromDatasource(currentDatasource, location.settings.label); |
412 | location.settings.labelReplaceInfo = processPattern(location.settings.label, datasources, currentDatasourceIndex); | 421 | location.settings.labelReplaceInfo = processPattern(location.settings.label, datasources, currentDatasourceIndex); |
413 | location.settings.labelText = location.settings.label; | 422 | location.settings.labelText = location.settings.label; |
414 | } | 423 | } |
415 | if (location.settings.displayTooltip) { | 424 | if (location.settings.displayTooltip) { |
416 | - if (location.settings.useTooltipFunction && location.settings.tooltipFunction) { | ||
417 | - try { | ||
418 | - location.settings.tooltipPattern = location.settings.tooltipFunction(dataMap.dataMap, dataMap.dsDataMap, location.dsIndex); | ||
419 | - } catch (e) { | ||
420 | - location.settings.tooltipPattern = null; | ||
421 | - } | ||
422 | - } | ||
423 | location.settings.tooltipPattern = tbMap.utils.createLabelFromDatasource(currentDatasource, location.settings.tooltipPattern); | 425 | location.settings.tooltipPattern = tbMap.utils.createLabelFromDatasource(currentDatasource, location.settings.tooltipPattern); |
424 | location.settings.tooltipReplaceInfo = processPattern(location.settings.tooltipPattern, datasources, currentDatasourceIndex); | 426 | location.settings.tooltipReplaceInfo = processPattern(location.settings.tooltipPattern, datasources, currentDatasourceIndex); |
425 | } | 427 | } |
@@ -457,6 +459,25 @@ export default class TbMapWidgetV2 { | @@ -457,6 +459,25 @@ export default class TbMapWidgetV2 { | ||
457 | } | 459 | } |
458 | } | 460 | } |
459 | 461 | ||
462 | + function createTooltipContent(tooltip, data, datasources) { | ||
463 | + var content; | ||
464 | + var settings = tooltip.locationSettings; | ||
465 | + if (settings.useTooltipFunction && settings.tooltipFunction) { | ||
466 | + var dataMap = toLabelValueMap(data, datasources); | ||
467 | + try { | ||
468 | + settings.tooltipPattern = settings.tooltipFunction(dataMap.dataMap, dataMap.dsDataMap, tooltip.dsIndex); | ||
469 | + } catch (e) { | ||
470 | + settings.tooltipPattern = null; | ||
471 | + } | ||
472 | + if (settings.tooltipPattern) { | ||
473 | + settings.tooltipPattern = tbMap.utils.createLabelFromDatasource(datasources[tooltip.dsIndex], settings.tooltipPattern); | ||
474 | + settings.tooltipReplaceInfo = processPattern(settings.tooltipPattern, datasources, tooltip.dsIndex); | ||
475 | + } | ||
476 | + } | ||
477 | + content = fillPattern(settings.tooltipPattern, settings.tooltipReplaceInfo, data); | ||
478 | + return fillPatternWithActions(content, 'onTooltipAction', tooltip.markerArgs); | ||
479 | + } | ||
480 | + | ||
460 | if (this.map && this.map.inited() && this.subscription) { | 481 | if (this.map && this.map.inited() && this.subscription) { |
461 | if (this.subscription.data) { | 482 | if (this.subscription.data) { |
462 | if (!this.locations) { | 483 | if (!this.locations) { |
@@ -465,10 +486,9 @@ export default class TbMapWidgetV2 { | @@ -465,10 +486,9 @@ export default class TbMapWidgetV2 { | ||
465 | updateLocations(this.subscription.data, this.subscription.datasources); | 486 | updateLocations(this.subscription.data, this.subscription.datasources); |
466 | } | 487 | } |
467 | var tooltips = this.map.getTooltips(); | 488 | var tooltips = this.map.getTooltips(); |
468 | - for (var t=0; t < tooltips.length; t++) { | 489 | + for (var t = 0; t < tooltips.length; t++) { |
469 | var tooltip = tooltips[t]; | 490 | var tooltip = tooltips[t]; |
470 | - var text = fillPattern(tooltip.pattern, tooltip.replaceInfo, this.subscription.data); | ||
471 | - text = fillPatternWithActions(text, 'onTooltipAction', tooltip.markerArgs); | 491 | + var text = createTooltipContent(tooltip, this.subscription.data, this.subscription.datasources); |
472 | tooltip.popup.setContent(text); | 492 | tooltip.popup.setContent(text); |
473 | } | 493 | } |
474 | } | 494 | } |
@@ -126,7 +126,7 @@ export default class TbOpenStreetMap { | @@ -126,7 +126,7 @@ export default class TbOpenStreetMap { | ||
126 | onMarkerIconReady(iconInfo); | 126 | onMarkerIconReady(iconInfo); |
127 | } | 127 | } |
128 | 128 | ||
129 | - createMarker(location, settings, onClickListener, markerArgs) { | 129 | + createMarker(location, dsIndex, settings, onClickListener, markerArgs) { |
130 | var marker = L.marker(location, {}); | 130 | var marker = L.marker(location, {}); |
131 | var opMap = this; | 131 | var opMap = this; |
132 | this.createMarkerIcon(marker, settings, (iconInfo) => { | 132 | this.createMarkerIcon(marker, settings, (iconInfo) => { |
@@ -140,7 +140,7 @@ export default class TbOpenStreetMap { | @@ -140,7 +140,7 @@ export default class TbOpenStreetMap { | ||
140 | }); | 140 | }); |
141 | 141 | ||
142 | if (settings.displayTooltip) { | 142 | if (settings.displayTooltip) { |
143 | - this.createTooltip(marker, settings.tooltipPattern, settings.tooltipReplaceInfo, settings.autocloseTooltip, markerArgs); | 143 | + this.createTooltip(marker, dsIndex, settings, markerArgs); |
144 | } | 144 | } |
145 | 145 | ||
146 | if (onClickListener) { | 146 | if (onClickListener) { |
@@ -154,15 +154,15 @@ export default class TbOpenStreetMap { | @@ -154,15 +154,15 @@ export default class TbOpenStreetMap { | ||
154 | this.map.removeLayer(marker); | 154 | this.map.removeLayer(marker); |
155 | } | 155 | } |
156 | 156 | ||
157 | - createTooltip(marker, pattern, replaceInfo, autoClose, markerArgs) { | 157 | + createTooltip(marker, dsIndex, settings, markerArgs) { |
158 | var popup = L.popup(); | 158 | var popup = L.popup(); |
159 | popup.setContent(''); | 159 | popup.setContent(''); |
160 | - marker.bindPopup(popup, {autoClose: autoClose, closeOnClick: false}); | 160 | + marker.bindPopup(popup, {autoClose: settings.autocloseTooltip, closeOnClick: false}); |
161 | this.tooltips.push( { | 161 | this.tooltips.push( { |
162 | markerArgs: markerArgs, | 162 | markerArgs: markerArgs, |
163 | popup: popup, | 163 | popup: popup, |
164 | - pattern: pattern, | ||
165 | - replaceInfo: replaceInfo | 164 | + locationSettings: settings, |
165 | + dsIndex: dsIndex | ||
166 | }); | 166 | }); |
167 | } | 167 | } |
168 | 168 |
@@ -224,7 +224,7 @@ export default class TbTencentMap { | @@ -224,7 +224,7 @@ export default class TbTencentMap { | ||
224 | /* eslint-enable no-undef */ | 224 | /* eslint-enable no-undef */ |
225 | 225 | ||
226 | /* eslint-disable no-undef */ | 226 | /* eslint-disable no-undef */ |
227 | - createMarker(location, settings, onClickListener, markerArgs) { | 227 | + createMarker(location, dsIndex, settings, onClickListener, markerArgs) { |
228 | var marker = new qq.maps.Marker({ | 228 | var marker = new qq.maps.Marker({ |
229 | position: location | 229 | position: location |
230 | }); | 230 | }); |
@@ -247,7 +247,7 @@ export default class TbTencentMap { | @@ -247,7 +247,7 @@ export default class TbTencentMap { | ||
247 | }); | 247 | }); |
248 | 248 | ||
249 | if (settings.displayTooltip) { | 249 | if (settings.displayTooltip) { |
250 | - this.createTooltip(marker, settings.tooltipPattern, settings.tooltipReplaceInfo, settings.autocloseTooltip, markerArgs); | 250 | + this.createTooltip(marker, dsIndex, settings, markerArgs); |
251 | } | 251 | } |
252 | 252 | ||
253 | if (onClickListener) { | 253 | if (onClickListener) { |
@@ -268,13 +268,13 @@ export default class TbTencentMap { | @@ -268,13 +268,13 @@ export default class TbTencentMap { | ||
268 | /* eslint-enable no-undef */ | 268 | /* eslint-enable no-undef */ |
269 | 269 | ||
270 | /* eslint-disable no-undef */ | 270 | /* eslint-disable no-undef */ |
271 | - createTooltip(marker, pattern, replaceInfo, autoClose, markerArgs) { | 271 | + createTooltip(marker, dsIndex, settings, markerArgs) { |
272 | var popup = new qq.maps.InfoWindow({ | 272 | var popup = new qq.maps.InfoWindow({ |
273 | map :this.map | 273 | map :this.map |
274 | }); | 274 | }); |
275 | var map = this; | 275 | var map = this; |
276 | qq.maps.event.addListener(marker, 'click', function() { | 276 | qq.maps.event.addListener(marker, 'click', function() { |
277 | - if (autoClose) { | 277 | + if (settings.autocloseTooltip) { |
278 | map.tooltips.forEach((tooltip) => { | 278 | map.tooltips.forEach((tooltip) => { |
279 | tooltip.popup.close(); | 279 | tooltip.popup.close(); |
280 | }); | 280 | }); |
@@ -285,8 +285,8 @@ export default class TbTencentMap { | @@ -285,8 +285,8 @@ export default class TbTencentMap { | ||
285 | this.tooltips.push( { | 285 | this.tooltips.push( { |
286 | markerArgs: markerArgs, | 286 | markerArgs: markerArgs, |
287 | popup: popup, | 287 | popup: popup, |
288 | - pattern: pattern, | ||
289 | - replaceInfo: replaceInfo | 288 | + locationSettings: settings, |
289 | + dsIndex: dsIndex | ||
290 | }); | 290 | }); |
291 | } | 291 | } |
292 | /* eslint-enable no-undef */ | 292 | /* eslint-enable no-undef */ |