@@ -1818,33 +1818,53 @@ d3 = function() {
18181818 return this . each ( d3_selection_on ( type , listener , capture ) ) ;
18191819 } ;
18201820 function d3_selection_on ( type , listener , capture ) {
1821- var name = "__on" + type , i = type . indexOf ( "." ) ;
1821+ var name = "__on" + type , i = type . indexOf ( "." ) , wrap = d3_selection_onListener ;
18221822 if ( i > 0 ) type = type . substring ( 0 , i ) ;
1823+ var filter = d3_selection_onFilters . get ( type ) ;
1824+ if ( filter ) type = filter , wrap = d3_selection_onFilter ;
18231825 function onRemove ( ) {
1824- var wrapper = this [ name ] ;
1825- if ( wrapper ) {
1826- this . removeEventListener ( type , wrapper , wrapper . $ ) ;
1826+ var l = this [ name ] ;
1827+ if ( l ) {
1828+ this . removeEventListener ( type , l , l . $ ) ;
18271829 delete this [ name ] ;
18281830 }
18291831 }
18301832 function onAdd ( ) {
1831- var node = this , args = d3_array ( arguments ) ;
1833+ var l = wrap ( listener , d3_array ( arguments ) ) ;
18321834 onRemove . call ( this ) ;
1833- this . addEventListener ( type , this [ name ] = wrapper , wrapper . $ = capture ) ;
1834- wrapper . _ = listener ;
1835- function wrapper ( e ) {
1836- var o = d3 . event ;
1837- d3 . event = e ;
1838- args [ 0 ] = node . __data__ ;
1839- try {
1840- listener . apply ( node , args ) ;
1841- } finally {
1842- d3 . event = o ;
1843- }
1844- }
1835+ this . addEventListener ( type , this [ name ] = l , l . $ = capture ) ;
1836+ l . _ = listener ;
18451837 }
18461838 return listener ? onAdd : onRemove ;
18471839 }
1840+ var d3_selection_onFilters = d3 . map ( {
1841+ mouseenter : "mouseover" ,
1842+ mouseleave : "mouseout"
1843+ } ) ;
1844+ d3_selection_onFilters . forEach ( function ( k ) {
1845+ if ( "on" + k in document ) d3_selection_onFilters . remove ( k ) ;
1846+ } ) ;
1847+ function d3_selection_onListener ( listener , argumentz ) {
1848+ return function ( e ) {
1849+ var o = d3 . event ;
1850+ d3 . event = e ;
1851+ argumentz [ 0 ] = this . __data__ ;
1852+ try {
1853+ listener . apply ( this , argumentz ) ;
1854+ } finally {
1855+ d3 . event = o ;
1856+ }
1857+ } ;
1858+ }
1859+ function d3_selection_onFilter ( listener , argumentz ) {
1860+ var l = d3_selection_onListener ( listener , argumentz ) ;
1861+ return function ( e ) {
1862+ var target = this , related = e . relatedTarget ;
1863+ if ( ! related || related !== target && ! ( related . compareDocumentPosition ( target ) & 8 ) ) {
1864+ l . call ( target , e ) ;
1865+ }
1866+ } ;
1867+ }
18481868 d3_selectionPrototype . each = function ( callback ) {
18491869 return d3_selection_each ( this , function ( node , i , j ) {
18501870 callback . call ( node , node . __data__ , i , j ) ;
0 commit comments