param { * } node param { String } eventName param { Function } callback param { Boolean } useCapture type captureObject = { capture : boolean ; passive : boolean ; } ; export function off ( node , eventName , callback , useCapture ) { if ( node . removeEventListener ) { node . removeEventListener ( eventName , callback , useCapture || false ) ; } } param { * } node param { String } eventName param { Function } callback param { Boolean } useCapture return { Object } example export function on ( node , eventName , callback , useCapture ) { if ( node . addEventListener ) { node . addEventListener ( eventName , callback , useCapture || false ) ; } return { off : ( ) => off ( node , eventName , callback , useCapture ) , } ; } param { * } node param { String } eventName param { Function } callback param { Boolean } useCapture return { Function } export function once ( node , eventName , callback , useCapture ) { return on ( node , eventName , function __fn ( ... args ) { callback . apply ( this , args ) ; off ( node , eventName , __fn , useCapture ) ; } , useCapture ) ; }