diff --git a/eventually.jquery.json b/eventually.jquery.json index 86f078d..b34aa42 100755 --- a/eventually.jquery.json +++ b/eventually.jquery.json @@ -7,7 +7,7 @@ "events", "pub-sub" ], - "version": "1.0.2", + "version": "1.0.6", "author": { "name": "Eric Lien", "email": "liener.meat@gmail.com" diff --git a/jquery.eventually.js b/jquery.eventually.js index 71108a9..7ac064f 100755 --- a/jquery.eventually.js +++ b/jquery.eventually.js @@ -1,14 +1,25 @@ (function($) { - var methods = { - init : function(){ - return; - }, - before : before, - on : on, - after : after, - trigger : trigger, - }; + function Eventually(jquery, config){ + //version information + this.version = "1.0.6"; + //name of $.fn. (for own use, and also for $.fn.) + this.plugin_name = "eventually"; + //instance of jquery passed to $.fn. + this.jquery = jquery; + //config passed to $.fn. + this.config = config; + + //register/alias methods $.fn. is allowed to access (init is a given!) + this.public_methods = { + 'on': this.on, + 'before': this.before, + 'after': this.after, + 'trigger': this.trigger, + }; + } + + Eventually.prototype.init = function(){ return this.jquery; } /** * Private function which actually registers events and a callback to eventually @@ -18,12 +29,14 @@ * @param object data Data to bind pass to event * @param function handler Function to handle the event */ - function registerEvent(jqselections, orig_event, event, data, handler){ - var data = data || {}; + Eventually.prototype.registerEvent = function(orig_event, event, data, handler){ + var data = data || {}; var handler = handler || function(data){ return; }; //loop over selections, binding handler to event - jqselections.each( + this.jquery.each( function(){ + //NOTE!: 'this' refers to a particular dom element in this scope! + //bind handler on our event $(this).on(event, data, handler); @@ -31,9 +44,9 @@ //on this dom element if(!this.eventually_listeners){ this.eventually_listeners = {}; - }if(!this.eventually_listeners[event]){ + }if(!this.eventually_listeners[orig_event]){ //no eventually listener for this event and element yet, - this.eventually_listeners[event] = true; + this.eventually_listeners[orig_event] = true; //create one $(this).on(orig_event, function(e){ $(this).eventually('trigger', orig_event, e); @@ -46,10 +59,11 @@ /** * Creates and runs jQuery events on selections */ - function triggerEvent(jqselections, eventname, eventObj){ + Eventually.prototype.triggerEvent = function(eventname, eventObj){ var e = jQuery.Event(eventname); e.original_event = eventObj; - jqselections.trigger(e); + //running jquerys trigger method on selections! + this.jquery.trigger(e); return e; } @@ -59,8 +73,9 @@ * @param object data Data that will be available under event.data property in listener. * @param function handler Function to call when event is triggered that will handle the event */ - function before(event, data, handler) { - registerEvent(this, event, 'befor'+event, data, handler); + Eventually.prototype.before = function(event, data, handler) { + this.registerEvent(event, 'before_'+event, data, handler); + return this.jquery; } /** @@ -69,8 +84,9 @@ * @param object data Data that will be available under event.data property in listener. * @param function handler Function to call when event is triggered that will handle the event */ - function on(event, data, handler) { - registerEvent(this, event, 'on_'+event, data, handler); + Eventually.prototype.on = function(event, data, handler) { + this.registerEvent(event, 'on_'+event, data, handler); + return this.jquery; } /** @@ -79,8 +95,9 @@ * @param object data Data that will be available under event.data property in listener. * @param function handler Function to call when event is triggered that will handle the event */ - function after(event, data, handler) { - registerEvent(this, event, 'after_'+event, data, handler); + Eventually.prototype.after = function(event, data, handler) { + this.registerEvent(event, 'after_'+event, data, handler); + return this.jquery; } /** @@ -91,16 +108,16 @@ * @return bool True if all before and on listeners fired and didn't stop propagation, false otherwise. * This will cause events to stop propagating on actual dom events! */ - function trigger(event, eventObj){ + Eventually.prototype.trigger = function(event, eventObj){ var eventObj = eventObj || {}; //create befor and run it - var bevent = triggerEvent(this, 'befor'+event, eventObj); - //if befor was not killed, create and run the on_ + var bevent = this.triggerEvent('before_'+event, eventObj); + //if before_ was not killed, create and run the on_ if(!bevent.isDefaultPrevented() && !bevent.isPropagationStopped() && !bevent.isImmediatePropagationStopped()){ - var oevent = triggerEvent(this, 'on_'+event, eventObj); + var oevent = this.triggerEvent('on_'+event, eventObj); //if on_ was not killed, create and run the after_ if(!oevent.isDefaultPrevented() && !oevent.isPropagationStopped() && !oevent.isImmediatePropagationStopped()){ - var aevent = triggerEvent(this, 'after_'+event, eventObj); + var aevent = this.triggerEvent('after_'+event, eventObj); return true; } } @@ -112,19 +129,21 @@ eventObj.preventDefault(); } //return false. This trigger did not complete cleanly. - return false; + return false; } - $.fn.eventually = function(methodOrOptions) { - this.version = '1.0.2'; + $.fn.eventually = function(methodOrOptions){ + //Instantiate plugin object with instance of jquery as argument, so it has it, and any config options it might need + var obj = new Eventually(this, methodOrOptions); - if ( methods[methodOrOptions] ) { - return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 )); + //run public methods or init, or report error (Please never touch any of this! It shouldn't need to change!) + if( obj.public_methods[ methodOrOptions ] ){ + return obj.public_methods[ methodOrOptions ].apply( obj, Array.prototype.slice.call( arguments, 1 )); }else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ){ // Default to "init" - return methods.init.apply( this, arguments ); + return obj.init.apply( obj, arguments ); }else{ - $.error( 'Method ' + method + ' does not exist on jQuery.eventually' ); + $.error( 'Method ' + methodOrOptions + ' does not exist on '+obj.plugin_name ); } - } + } }(jQuery)); \ No newline at end of file diff --git a/package.json b/package.json index 0741d93..51b1ad9 100755 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "jquery-eventually", "title": "jQuery Event Library ", "description": "Extends the jquery event system to make before and after events automatic and simple", - "version": "1.0.2", + "version": "1.0.6", "homepage": "https://github.com/lienmeat/jquery-eventually", "author": { "name": "Eric Lien", diff --git a/test/index.html b/test/index.html index b58afea..15e5c32 100755 --- a/test/index.html +++ b/test/index.html @@ -10,7 +10,7 @@

- jQuery Eventually Plugin Test Suite + jQuery Eventually Plugin Test Suite jQuery 1.7.2 jQuery 1.8.3 diff --git a/test/test.js b/test/test.js index 4980d28..81ba11e 100755 --- a/test/test.js +++ b/test/test.js @@ -1,9 +1,8 @@ module("eventually"); test("Constructor", function() { - var v1 = $(window).eventually(); - var v2 = $(window).eventually(); - equal( v1, v2, "Calling eventually() multiple times must return the same thing."); + var v1 = $(document).eventually(); + ok( v1.jquery, "Calling eventually() returns jquery instance."); }); test("Basic on() and trigger() test", function() {