This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* event handler utility | |
* @param {element} element DOM element to attach event listener | |
* @param {object} context The context the handler will be run in - can be overriden | |
* @return {function} Specify event | |
*/ | |
function event(element, context){ | |
// Assume modern browser | |
var pasteeater = false | |
// Check to see whether we're dealing with an old browser | |
// and change pasteeater to true if old browser detected | |
if(!element.addEventListener && element.attachEvent){ | |
pasteeater = true | |
} | |
/** | |
* specify event | |
* @param {string} event The event name | |
* @return {function} Add handler | |
*/ | |
return function(event){ | |
/** | |
* attach handler | |
* @param {function} handler event handler | |
* @param {object} data Any extra data to pass to the handler | |
* @param {object} _context Override the context the handler is run in | |
* @return {function} Function to remove event listener | |
*/ | |
return function(handler, data, _context){ | |
context = _context || context | |
if(!handler.call){ | |
throw Error('Callback is not a function') | |
} | |
// create new handler function based on arguments passed | |
var _handler = function(){ | |
handler.call(context || element, event, data) | |
} | |
// fallback for old browsers | |
if(pasteeater){ | |
element.attachEvent("on"+event, _handler) | |
} else { | |
element.addEventListener(event, _handler, false) | |
} | |
/** | |
* remove handler | |
* @return {function} Call this function to remove event listener | |
*/ | |
return function(){ | |
// fallback for old browsers | |
if(pasteeater){ | |
element.detachEvent("on"+event, _handler) | |
} else { | |
element.removeEventListener(event, _handler, false) | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment