/** * jQuery.Intercept - Event Delegation with jQuery  * Copyright (c) 2008 Ariel Flesler aflesler(at)gmail(dot)com | http://flesler.blogspot.com * Dual licensed under MIT and GPL. * Date: 3/9/2008 * * @projectDescription Easily make DOM elements, watch for events from its descendants. * @author Ariel Flesler * @version 1.1.2 * * @id jQuery.fn.intercept * @method * @param {String} eventname The name of the event to watch for. * @param {Hash} handler Hash of functions, where each key is a simple selector, and the value, a handler. * @return {jQuery} Returns the same jQuery object, for chaining. * * @see http://icant.co.uk/sandbox/eventdelegation/ * * Notes: * - The hash can receive a "self" selector that will match the DOM element, intercepting the events, * - Handlers are checked in the order the are added to the hash, several calls to the plugin *   add new handlers, which are added to the bottom, thus they will be checked last. */;(function( $ ){var $intercept = $.intercept = function( e, h, f ){$('html').intercept( e, h, f );};$.fn.intercept = function( event, handlers, fn ){var temp, el, stored;if( fn ){//3 arguments overloadtemp = {};temp[handlers] = fn;handlers = temp;}return this.each(function(){el = this;$.each( event.split(' '), function( i, name ){//support whitespace separated eventsstored = $.data( el, name + '.intercept' );if( !stored ){$.data( el, name + '.intercept', $.extend({}, handlers) );$.event.add( el, name, $intercept.handle );}else$.extend( stored, handlers );//update, the old ones have priority.});});};$intercept.absolute = /[\s>+~]/;$intercept.handle = function( e ){var handlers = $.data( this, e.type + '.intercept' ),//retrieve the handlerstarget = e.target,$target = $(target),selector, ret;if( !handlers ) return;for( selector in handlers ){ if( selector == 'self' && target == this  || $intercept.absolute.test(selector)  ? $(selector).index(target) != -1 : $target.is(selector) )ret = handlers[selector].apply(target, arguments) !== false && ret;}return ret;};})(jQuery);
