/
handleElementEvents.js
83 lines (69 loc) · 2.22 KB
/
handleElementEvents.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import Util from '../Util/Util'
function parseEvent(map, selector, isTooltip) {
var ele = Util.$(selector),
elClassList = ele.attr('class'),
type = elClassList.indexOf('jvm-region') === -1 ? 'marker' : 'region',
code = type === 'region' ? ele.attr('data-code') : ele.attr('data-index'),
event = `${type}:select`
// Init tooltip event
if (isTooltip) {
event = `${type}.tooltip:show`
}
return {
event,
type,
code,
element: type === 'region' ? map.regions[code].element : map.markers[code].element,
tooltipText: type === 'region' ? map.mapData.paths[code].name || '' : (map.markers[code].config.name || '')
}
}
export default function handleElementEvents() {
const map = this
// When the mouse is over the region/marker | When the mouse is out the region/marker
this.container.delegate('.jvm-element', 'mouseover mouseout', function (event) {
const data = parseEvent(map, this, true)
const showTooltip = map.params.showTooltip
if (event.type === 'mouseover') {
const defaultPrevented = event.defaultPrevented
if (!defaultPrevented) {
data.element.hover(true)
if (showTooltip) {
map.tooltip.text(data.tooltipText)
map.tooltip.show()
map.emit(data.event, [map.tooltip, data.code])
}
}
} else {
data.element.hover(false)
if (showTooltip) {
map.tooltip.hide()
}
}
})
// When the click is released
this.container.delegate('.jvm-element', 'mouseup', function (event) {
const data = parseEvent(map, this)
if (
data.type === 'region' && map.params.regionsSelectable ||
data.type === 'marker' && map.params.markersSelectable &&
!event.defaultPrevented
) {
const ele = data.element
// We're checking if regions/markers|SelectableOne option is presented
// clear all selected regions/markers
if (map.params[`${data.type}sSelectableOne`]) {
map.clearSelected(`${data.type}s`)
}
if (data.element.isSelected) {
ele.select(false)
} else {
ele.select(true)
}
map.emit(data.event, [
data.code,
ele.isSelected,
map.getSelected(`${data.type}s`)
])
}
})
}