Skip to content

Commit 99bf5ec

Browse files
authored
Merge branch 'master' into current_target_fix
2 parents 4f89a2d + 871b77c commit 99bf5ec

File tree

5 files changed

+77
-13
lines changed

5 files changed

+77
-13
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ className | data-class | String | | extra custom class, can use !importan
6969
delayShow | data-delay-show | Number | | `<p data-tip="tooltip" data-delay-show='1000'></p>` or `<ReactTooltip delayShow={1000} />`
7070
insecure | null | Bool | true, false | Whether to inject the style header into the page dynamically (violates CSP style-src but is a convenient default)
7171
border | data-border | Bool | true, false | Add one pixel white border
72-
getContent | null | Func or Array | () => {}, [() => {}, Interval] | Generate the tip content dynamically
72+
getContent | null | Func or Array | (dataTip) => {}, [(dataTip) => {}, Interval] | Generate the tip content dynamically
7373
afterShow | null | Func | () => {} | Function that will be called after tooltip show
7474
afterHide | null | Func | () => {} | Function that will be called after tooltip hide
7575
disable | data-tip-disable | Bool | true, false | Disable the tooltip behaviour, default is false

example/src/index.js

+21
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,27 @@ class Test extends React.Component {
248248
</div>
249249
</pre>
250250
</div>
251+
<div className="section">
252+
<h4 className='title'>Compute or enrich tip content</h4>
253+
<p className="sub-title"></p>
254+
<div className="example-jsx">
255+
<div className="side">
256+
<a data-for='enrich' data-tip='sooooo cute'>(❂‿❂)</a>
257+
</div>
258+
<div className="side">
259+
<a data-for='enrich' data-tip='really high'>(❂‿❂)</a>
260+
</div>
261+
<ReactTooltip id='enrich' getContent={(dataTip) => `This little buddy is ${dataTip}`}/>
262+
</div>
263+
<br />
264+
<pre className='example-pre'>
265+
<div>
266+
<p>{"<a data-for='enrich' data-tip='sooooo cute'>(❂‿❂)</a>\n" +
267+
"<a data-for='enrich' data-tip='really high'>(❂‿❂)</a>\n" +
268+
"<ReactTooltip id='enrich' getContent={(dataTip) => `This little buddy is ${dataTip}`}/>"}</p>
269+
</div>
270+
</pre>
271+
</div>
251272
<div className="section">
252273
<h4 className='title'>Test Scrolling</h4>
253274
<p className="sub-title"></p>

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
}

src/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -237,9 +237,9 @@ class ReactTooltip extends React.Component {
237237
let content
238238
if (getContent) {
239239
if (Array.isArray(getContent)) {
240-
content = getContent[0] && getContent[0]()
240+
content = getContent[0] && getContent[0](this.state.originTooltip)
241241
} else {
242-
content = getContent()
242+
content = getContent(this.state.originTooltip)
243243
}
244244
}
245245

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';
@@ -1807,9 +1829,9 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
18071829
var content = void 0;
18081830
if (getContent) {
18091831
if (Array.isArray(getContent)) {
1810-
content = getContent[0] && getContent[0]();
1832+
content = getContent[0] && getContent[0](this.state.originTooltip);
18111833
} else {
1812-
content = getContent();
1834+
content = getContent(this.state.originTooltip);
18131835
}
18141836
}
18151837

0 commit comments

Comments
 (0)