Skip to content

Commit 871b77c

Browse files
authored
Merge pull request #384 from P0lip/master
Detach custom event listener
2 parents e56cf3e + 6d7b3fa commit 871b77c

File tree

3 files changed

+56
-12
lines changed

3 files changed

+56
-12
lines changed

src/decorators/customEvent.js

+25-4
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,27 @@ const setUntargetItems = function (currentTarget, targetArray) {
3333
}
3434
}
3535

36-
let customListener
36+
const customListeners = {
37+
id: '9b69f92e-d3fe-498b-b1b4-c5e63a51b0cf',
38+
set (target, event, listener) {
39+
if (this.id in target) {
40+
const map = target[this.id]
41+
map[event] = listener
42+
} else {
43+
// this is workaround for WeakMap, which is not supported in older browsers, such as IE
44+
Object.defineProperty(target, this.id, {
45+
configurable: true,
46+
value: { [event]: listener }
47+
})
48+
}
49+
},
50+
get (target, event) {
51+
const map = target[this.id]
52+
if (map !== undefined) {
53+
return map[event]
54+
}
55+
}
56+
}
3757

3858
export default function (target) {
3959
target.prototype.isCustomEvent = function (ele) {
@@ -48,8 +68,9 @@ export default function (target) {
4868
const dataEventOff = ele.getAttribute('data-event-off') || eventOff
4969

5070
dataEvent.split(' ').forEach(event => {
51-
ele.removeEventListener(event, customListener)
52-
customListener = checkStatus.bind(this, dataEventOff)
71+
ele.removeEventListener(event, customListeners.get(ele, event))
72+
const customListener = checkStatus.bind(this, dataEventOff)
73+
customListeners.set(ele, event, customListener)
5374
ele.addEventListener(event, customListener, false)
5475
})
5576
if (dataEventOff) {
@@ -66,7 +87,7 @@ export default function (target) {
6687
const dataEvent = event || ele.getAttribute('data-event')
6788
const dataEventOff = eventOff || ele.getAttribute('data-event-off')
6889

69-
ele.removeEventListener(dataEvent, customListener)
90+
ele.removeEventListener(dataEvent, customListeners.get(ele, event))
7091
if (dataEventOff) ele.removeEventListener(dataEventOff, this.hideTooltip)
7192
}
7293
}

standalone/react-tooltip.js

+28-6
Original file line numberDiff line numberDiff line change
@@ -1240,8 +1240,9 @@ exports.default = function (target) {
12401240
var dataEventOff = ele.getAttribute('data-event-off') || eventOff;
12411241

12421242
dataEvent.split(' ').forEach(function (event) {
1243-
ele.removeEventListener(event, customListener);
1244-
customListener = checkStatus.bind(_this, dataEventOff);
1243+
ele.removeEventListener(event, customListeners.get(ele, event));
1244+
var customListener = checkStatus.bind(_this, dataEventOff);
1245+
customListeners.set(ele, event, customListener);
12451246
ele.addEventListener(event, customListener, false);
12461247
});
12471248
if (dataEventOff) {
@@ -1261,11 +1262,13 @@ exports.default = function (target) {
12611262
var dataEvent = event || ele.getAttribute('data-event');
12621263
var dataEventOff = eventOff || ele.getAttribute('data-event-off');
12631264

1264-
ele.removeEventListener(dataEvent, customListener);
1265+
ele.removeEventListener(dataEvent, customListeners.get(ele, event));
12651266
if (dataEventOff) ele.removeEventListener(dataEventOff, this.hideTooltip);
12661267
};
12671268
};
12681269

1270+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1271+
12691272
/**
12701273
* Custom events to control showing and hiding of tooltip
12711274
*
@@ -1302,7 +1305,26 @@ var setUntargetItems = function setUntargetItems(currentTarget, targetArray) {
13021305
}
13031306
};
13041307

1305-
var customListener = void 0;
1308+
var customListeners = {
1309+
id: '9b69f92e-d3fe-498b-b1b4-c5e63a51b0cf',
1310+
set: function set(target, event, listener) {
1311+
if (this.id in target) {
1312+
var map = target[this.id];
1313+
map[event] = listener;
1314+
} else {
1315+
Object.defineProperty(target, this.id, {
1316+
configurable: true,
1317+
value: _defineProperty({}, event, listener)
1318+
});
1319+
}
1320+
},
1321+
get: function get(target, event) {
1322+
var map = target[this.id];
1323+
if (map !== undefined) {
1324+
return map[event];
1325+
}
1326+
}
1327+
};
13061328

13071329
},{}],14:[function(require,module,exports){
13081330
'use strict';
@@ -1806,9 +1828,9 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
18061828
var content = void 0;
18071829
if (getContent) {
18081830
if (Array.isArray(getContent)) {
1809-
content = getContent[0] && getContent[0]();
1831+
content = getContent[0] && getContent[0](this.state.originTooltip);
18101832
} else {
1811-
content = getContent();
1833+
content = getContent(this.state.originTooltip);
18121834
}
18131835
}
18141836

0 commit comments

Comments
 (0)