@@ -10,6 +10,7 @@ import windowListener from './decorators/windowListener'
1010import customEvent from './decorators/customEvent'
1111import isCapture from './decorators/isCapture'
1212import getEffect from './decorators/getEffect'
13+ import bodyMode from './decorators/bodyMode'
1314import trackRemoval from './decorators/trackRemoval'
1415
1516/* Utils */
@@ -26,6 +27,7 @@ import cssStyle from './style'
2627@customEvent
2728@isCapture
2829@getEffect
30+ @bodyMode
2931@trackRemoval
3032class ReactTooltip extends React . Component {
3133
@@ -58,6 +60,9 @@ class ReactTooltip extends React.Component {
5860 scrollHide : PropTypes . bool ,
5961 resizeHide : PropTypes . bool ,
6062 wrapper : PropTypes . string ,
63+ bodyMode : PropTypes . bool ,
64+ possibleCustomEvents : PropTypes . string ,
65+ possibleCustomEventsOff : PropTypes . string ,
6166 clickable : PropTypes . bool
6267 } ;
6368
@@ -93,6 +98,8 @@ class ReactTooltip extends React.Component {
9398 ariaProps : parseAria ( props ) , // aria- and role attributes
9499 isEmptyTip : false ,
95100 disable : false ,
101+ possibleCustomEvents : props . possibleCustomEvents || '' ,
102+ possibleCustomEventsOff : props . possibleCustomEventsOff || '' ,
96103 originTooltip : null ,
97104 isMultiline : false
98105 }
@@ -131,6 +138,7 @@ class ReactTooltip extends React.Component {
131138 if ( insecure ) {
132139 this . setStyleHeader ( ) // Set the style to the <link>
133140 }
141+
134142 this . bindListener ( ) // Bind listener for tooltip
135143 this . bindWindowEvents ( resizeHide ) // Bind global event for static method
136144 }
@@ -206,25 +214,34 @@ class ReactTooltip extends React.Component {
206214 let targetArray = this . getTargetArray ( id )
207215
208216 targetArray . forEach ( target => {
209- const isCaptureMode = this . isCapture ( target )
210- const effect = this . getEffect ( target )
211217 if ( target . getAttribute ( 'currentItem' ) === null ) {
212218 target . setAttribute ( 'currentItem' , 'false' )
213219 }
214220 this . unbindBasicListener ( target )
215-
216221 if ( this . isCustomEvent ( target ) ) {
217- this . customBindListener ( target )
218- return
219- }
220-
221- target . addEventListener ( 'mouseenter' , this . showTooltip , isCaptureMode )
222- if ( effect === 'float' ) {
223- target . addEventListener ( 'mousemove' , this . updateTooltip , isCaptureMode )
222+ this . customUnbindListener ( target )
224223 }
225- target . addEventListener ( 'mouseleave' , this . hideTooltip , isCaptureMode )
226224 } )
227225
226+ if ( this . isBodyMode ( ) ) {
227+ this . bindBodyListener ( targetArray )
228+ } else {
229+ targetArray . forEach ( target => {
230+ const isCaptureMode = this . isCapture ( target )
231+ const effect = this . getEffect ( target )
232+ if ( this . isCustomEvent ( target ) ) {
233+ this . customBindListener ( target )
234+ return
235+ }
236+
237+ target . addEventListener ( 'mouseenter' , this . showTooltip , isCaptureMode )
238+ if ( effect === 'float' ) {
239+ target . addEventListener ( 'mousemove' , this . updateTooltip , isCaptureMode )
240+ }
241+ target . addEventListener ( 'mouseleave' , this . hideTooltip , isCaptureMode )
242+ } )
243+ }
244+
228245 // Global event to hide tooltip
229246 if ( globalEventOff ) {
230247 window . removeEventListener ( globalEventOff , this . hideTooltip )
@@ -240,11 +257,15 @@ class ReactTooltip extends React.Component {
240257 */
241258 unbindListener ( ) {
242259 const { id, globalEventOff} = this . props
243- const targetArray = this . getTargetArray ( id )
244- targetArray . forEach ( target => {
245- this . unbindBasicListener ( target )
246- if ( this . isCustomEvent ( target ) ) this . customUnbindListener ( target )
247- } )
260+ if ( this . isBodyMode ( ) ) {
261+ this . unbindBodyListener ( )
262+ } else {
263+ const targetArray = this . getTargetArray ( id )
264+ targetArray . forEach ( target => {
265+ this . unbindBasicListener ( target )
266+ if ( this . isCustomEvent ( target ) ) this . customUnbindListener ( target )
267+ } )
268+ }
248269
249270 if ( globalEventOff ) window . removeEventListener ( globalEventOff , this . hideTooltip )
250271 this . unbindRemovalTracker ( )
0 commit comments