From 63c784bd2152ebd80dbe3f0a00e1f4fab3989d45 Mon Sep 17 00:00:00 2001
From: Eric Lien
Date: Thu, 30 May 2013 02:53:24 -0700
Subject: [PATCH 1/8] I can't believe it works, but I managed to come up with a
new jquery plugin pattern than I don't dispise, using actual prototypes and
decent javascript OOP :D
---
jquery.eventually.js | 75 +++++++++++++++++++++++++-------------------
1 file changed, 43 insertions(+), 32 deletions(-)
diff --git a/jquery.eventually.js b/jquery.eventually.js
index 71108a9..aeeb946 100755
--- a/jquery.eventually.js
+++ b/jquery.eventually.js
@@ -1,14 +1,11 @@
(function($) {
- var methods = {
- init : function(){
- return;
- },
- before : before,
- on : on,
- after : after,
- trigger : trigger,
- };
+ function Eventually(methodOrOptions){
+ this.version = "1.0.3";
+ this.plugin_name = "jQuery.eventually";
+ }
+
+ Eventually.prototype.init = function(){ return true; }
/**
* Private function which actually registers events and a callback to eventually
@@ -18,12 +15,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.registerEventMY = 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.each(
function(){
+ //NOTE!: 'this' refers to a particular dom element in this scope!
+
//bind handler on our event
$(this).on(event, data, handler);
@@ -46,10 +45,11 @@
/**
* Creates and runs jQuery events on selections
*/
- function triggerEvent(jqselections, eventname, eventObj){
+ Eventually.prototype.triggerEventMY = function(eventname, eventObj){
var e = jQuery.Event(eventname);
e.original_event = eventObj;
- jqselections.trigger(e);
+ //running jquerys trigger method on selections!
+ this.trigger(e);
return e;
}
@@ -59,8 +59,8 @@
* @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.beforeMY = function(event, data, handler) {
+ this.registerEventMY(event, 'before_'+event, data, handler);
}
/**
@@ -69,8 +69,8 @@
* @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.onMY = function(event, data, handler) {
+ this.registerEventMY(event, 'on_'+event, data, handler);
}
/**
@@ -79,8 +79,8 @@
* @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.afterMY = function(event, data, handler) {
+ this.registerEventMY(event, 'after_'+event, data, handler);
}
/**
@@ -91,16 +91,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.triggerMY = 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.triggerEventMY('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.triggerEventMY('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.triggerEventMY('after_'+event, eventObj);
return true;
}
}
@@ -115,16 +115,27 @@
return false;
}
- $.fn.eventually = function(methodOrOptions) {
- this.version = '1.0.2';
+ $.fn.eventually = function(methodOrOptions){
+ //extend plugin function with new instance of Object
+ $.extend(this, new Eventually());
+ //possibly do some setup, here, if needed
+
+ //alias and/or register callable methods
+ this.public = {
+ 'on': this.onMY,
+ 'before': this.beforeMY,
+ 'after': this.afterMY,
+ 'trigger': this.triggerMY,
+ };
- if ( methods[methodOrOptions] ) {
- return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
+ //run public methods or init, or report error (never ever touch any of this!)
+ if( this.public[ methodOrOptions ] ){
+ return this.public[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
}else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ){
// Default to "init"
- return methods.init.apply( this, arguments );
+ return this.init.apply( this, arguments );
}else{
- $.error( 'Method ' + method + ' does not exist on jQuery.eventually' );
+ $.error( 'Method ' + methodOrOptions + ' does not exist on '+this.plugin_name );
}
- }
+ }
}(jQuery));
\ No newline at end of file
From 4e9be64d52988ef4a159986b2e01f5026dbf4ff8 Mon Sep 17 00:00:00 2001
From: Eric Lien
Date: Thu, 30 May 2013 02:55:49 -0700
Subject: [PATCH 2/8] fix versions before merge with master
---
eventually.jquery.json | 2 +-
package.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/eventually.jquery.json b/eventually.jquery.json
index 86f078d..2c1c292 100755
--- a/eventually.jquery.json
+++ b/eventually.jquery.json
@@ -7,7 +7,7 @@
"events",
"pub-sub"
],
- "version": "1.0.2",
+ "version": "1.0.3",
"author": {
"name": "Eric Lien",
"email": "liener.meat@gmail.com"
diff --git a/package.json b/package.json
index 0741d93..c0e203a 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.3",
"homepage": "https://github.com/lienmeat/jquery-eventually",
"author": {
"name": "Eric Lien",
From 9ce07a78118b0b56b7a90e1bdddaf54f34ac1442 Mon Sep 17 00:00:00 2001
From: lienmeat
Date: Thu, 30 May 2013 11:17:42 -0700
Subject: [PATCH 3/8] finished refining what I believe to be the best possible
jquery plugin template
---
jquery.eventually.js | 78 ++++++++++++++++++++++++--------------------
test/test.js | 5 ++-
2 files changed, 45 insertions(+), 38 deletions(-)
diff --git a/jquery.eventually.js b/jquery.eventually.js
index aeeb946..1cb5ff1 100755
--- a/jquery.eventually.js
+++ b/jquery.eventually.js
@@ -1,11 +1,25 @@
(function($) {
- function Eventually(methodOrOptions){
- this.version = "1.0.3";
- this.plugin_name = "jQuery.eventually";
+ function Eventually(jquery, config){
+ //version information
+ this.version = "1.0.4";
+ //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 true; }
+ Eventually.prototype.init = function(){ return this.jquery; }
/**
* Private function which actually registers events and a callback to eventually
@@ -15,11 +29,11 @@
* @param object data Data to bind pass to event
* @param function handler Function to handle the event
*/
- Eventually.prototype.registerEventMY = function(orig_event, event, data, handler){
+ 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
- this.each(
+ this.jquery.each(
function(){
//NOTE!: 'this' refers to a particular dom element in this scope!
@@ -45,11 +59,11 @@
/**
* Creates and runs jQuery events on selections
*/
- Eventually.prototype.triggerEventMY = function(eventname, eventObj){
+ Eventually.prototype.triggerEvent = function(eventname, eventObj){
var e = jQuery.Event(eventname);
e.original_event = eventObj;
//running jquerys trigger method on selections!
- this.trigger(e);
+ 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
*/
- Eventually.prototype.beforeMY = function(event, data, handler) {
- this.registerEventMY(event, 'before_'+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
*/
- Eventually.prototype.onMY = function(event, data, handler) {
- this.registerEventMY(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
*/
- Eventually.prototype.afterMY = function(event, data, handler) {
- this.registerEventMY(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!
*/
- Eventually.prototype.triggerMY = function(event, eventObj){
+ Eventually.prototype.trigger = function(event, eventObj){
var eventObj = eventObj || {};
//create befor and run it
- var bevent = this.triggerEventMY('before_'+event, eventObj);
+ 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 = this.triggerEventMY('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 = this.triggerEventMY('after_'+event, eventObj);
+ var aevent = this.triggerEvent('after_'+event, eventObj);
return true;
}
}
@@ -112,30 +129,21 @@
eventObj.preventDefault();
}
//return false. This trigger did not complete cleanly.
- return false;
+ return false;
}
$.fn.eventually = function(methodOrOptions){
- //extend plugin function with new instance of Object
- $.extend(this, new Eventually());
- //possibly do some setup, here, if needed
-
- //alias and/or register callable methods
- this.public = {
- 'on': this.onMY,
- 'before': this.beforeMY,
- 'after': this.afterMY,
- 'trigger': this.triggerMY,
- };
+ //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);
- //run public methods or init, or report error (never ever touch any of this!)
- if( this.public[ methodOrOptions ] ){
- return this.public[ 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 this.init.apply( this, arguments );
+ return obj.init.apply( obj, arguments );
}else{
- $.error( 'Method ' + methodOrOptions + ' does not exist on '+this.plugin_name );
+ $.error( 'Method ' + methodOrOptions + ' does not exist on '+obj.plugin_name );
}
}
}(jQuery));
\ No newline at end of file
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() {
From 4f84ffaaecd8712dcac936c3150ee88e7e5efdde Mon Sep 17 00:00:00 2001
From: lienmeat
Date: Thu, 30 May 2013 11:20:14 -0700
Subject: [PATCH 4/8] added version info cause I forgot on last commit
---
eventually.jquery.json | 2 +-
package.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/eventually.jquery.json b/eventually.jquery.json
index 2c1c292..7b3f7f0 100755
--- a/eventually.jquery.json
+++ b/eventually.jquery.json
@@ -7,7 +7,7 @@
"events",
"pub-sub"
],
- "version": "1.0.3",
+ "version": "1.0.4",
"author": {
"name": "Eric Lien",
"email": "liener.meat@gmail.com"
diff --git a/package.json b/package.json
index c0e203a..e5906a0 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.3",
+ "version": "1.0.4",
"homepage": "https://github.com/lienmeat/jquery-eventually",
"author": {
"name": "Eric Lien",
From e0b05910b9f858a0e5f9ced1c6be3337dc119d31 Mon Sep 17 00:00:00 2001
From: Eric Lien
Date: Fri, 31 May 2013 10:36:22 -0700
Subject: [PATCH 5/8] Remove link in test/index.html, don't want it.
---
test/index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
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 @@