nl_tokens: EVENT HANDLERS
pl_tokens: function registerEventHandlers ( cm ) { var d = cm . display ; on ( d . scroller , "mousedown" , operation ( cm , onMouseDown ) ) ; on ( d . scroller , "dblclick" , operation ( cm , e_preventDefault ) ) ; on ( d . lineSpace , "selectstart" , function ( e ) { if ( ! mouseEventInWidget ( d , e ) ) e_preventDefault ( e ) ; } ) ; // Gecko browsers fire contextmenu *after* opening the menu, at // which point we can't mess with it anymore. Context menu is // handled in onMouseDown for Gecko. if ( ! gecko ) on ( d . scroller , "contextmenu" , function ( e ) { onContextMenu ( cm , e ) ; } ) ; on ( d . scroller , "scroll" , function ( ) { setScrollTop ( cm , d . scroller . scrollTop ) ; setScrollLeft ( cm , d . scroller . scrollLeft , true ) ; signal ( cm , "scroll" , cm ) ; } ) ; on ( d . scrollbarV , "scroll" , function ( ) { setScrollTop ( cm , d . scrollbarV . scrollTop ) ; } ) ; on ( d . scrollbarH , "scroll" , function ( ) { setScrollLeft ( cm , d . scrollbarH . scrollLeft ) ; } ) ; <mask> ( d . scroller , "mousewheel" , function ( e ) { onScrollWheel ( cm , e ) ; } ) ; on ( d . scroller , "DOMMouseScroll" , function ( e ) { onScrollWheel ( cm , e ) ; } ) ; function reFocus ( ) { if ( cm . view . focused ) setTimeout ( bind ( focusInput , cm ) , 0 ) ; } on ( d . scrollbarH , "mousedown" , reFocus ) ; on ( d . scrollbarV , "mousedown" , reFocus ) ; // Prevent wrapper from ever scrolling on ( d . wrapper , "scroll" , function ( ) { d . wrapper . scrollTop = d . wrapper . scrollLeft = 0 ; } ) ; on ( window , "resize" , function resizeHandler ( ) { // Might be a text scaling operation, clear size caches. d . cachedCharWidth = d . cachedTextHeight = null ; clearCaches ( cm ) ; if ( d . wrapper . parentNode ) updateDisplay ( cm , true ) ; else off ( window , "resize" , resizeHandler ) ; } ) ; on ( d . input , "keyup" , operation ( cm , function ( e ) { if ( cm . options . onKeyEvent && cm . options . onKeyEvent ( cm , addStop ( e ) ) ) return ; if ( e_prop ( e , "keyCode" ) == 16 ) cm . view . sel . shift = false ; } ) ) ; on ( d . input , "input" , bind ( fastPoll , cm ) ) ; on ( d . input , "keydown" , operation ( cm , onKeyDown ) ) ; on ( d . input , "keypress" , operation ( cm , onKeyPress ) ) ; on ( d . input , "focus" , bind ( onFocus , cm ) ) ; on ( d . input , "blur" , bind ( onBlur , cm ) ) ; function drag_ ( e ) { if ( cm . options . onDragEvent && cm . options . onDragEvent ( cm , addStop ( e ) ) ) return ; e_stop ( e ) ; } if ( cm . options . dragDrop ) { on ( d . scroller , "dragstart" , function ( e ) { onDragStart ( cm , e ) ; } ) ; on ( d . scroller , "dragenter" , drag_ ) ; on ( d . scroller , "dragover" , drag_ ) ; on ( d . scroller , "drop" , operation ( cm , onDrop ) ) ; } on ( d . scroller , "paste" , function ( ) { focusInput ( cm ) ; fastPoll ( cm ) ; } ) ; on ( d . input , "paste" , function ( ) { d . pasteIncoming = true ; fastPoll ( cm ) ; } ) ; function prepareCopy ( ) { if ( d . inaccurateSelection ) { d . prevInput = "" ; d . inaccurateSelection = false ; d . input . value = cm . getSelection ( ) ; selectInput ( d . input ) ; } } on ( d . input , "cut" , prepareCopy ) ; on ( d . input , "copy" , prepareCopy ) ; // Needed to handle Tab key in KHTML if ( khtml ) on ( d . sizer , "mouseup" , function ( ) { if ( document . activeElement == d . input ) d . input . blur ( ) ; focusInput ( cm ) ; } ) ; }