nl_tokens: Internal function proxied by Delegate#off
pl_tokens: function off ( that , listenerList , root , eventType , selector , handler ) { var listener , nextListener , firstListener , specificList , singleEventType ; if ( ! eventType ) { for ( singleEventType <mask> listenerList ) { if ( listenerList . hasOwnProperty ( singleEventType ) ) { off . call ( that , that , listenerList , root , singleEventType , selector , handler ) ; } } return ; } specificList = listenerList [ eventType ] ; if ( ! specificList ) { return ; } // Support a separated list of event types if ( eventType . indexOf ( SEPARATOR ) !== - 1 ) { eventType . split ( SEPARATOR ) . forEach ( function ( eventType ) { off . call ( that , that , listenerList , root , eventType , selector , handler ) ; } ) ; return ; } // Remove only parameter matches if specified listener = firstListener = specificList . first ; do { if ( ( ! selector || selector === listener . s ) && ( ! handler || handler === listener . h ) ) { // listener.next will be undefined after listener is removed, so save a reference here nextListener = listener . next ; specificList . remove ( listener ) ; listener = nextListener ; } else { listener = listener . next ; } } while ( listener && listener !== firstListener ) ; // All listeners removed if ( ! specificList . length ) { delete listenerList [ eventType ] ; // Remove the main handler root . removeEventListener ( eventType , that . handle , false ) ; } }