jquerypp-rails 1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. data/.document +5 -0
  2. data/.gitignore +7 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +24 -0
  6. data/Rakefile +2 -0
  7. data/jquerypp-rails.gemspec +20 -0
  8. data/lib/jquerypp/generators/jquerypp/install/install_generator.rb +49 -0
  9. data/lib/jquerypp/rails/engine.rb +8 -0
  10. data/lib/jquerypp/rails/version.rb +6 -0
  11. data/lib/jquerypp/rails.rb +8 -0
  12. data/lib/jquerypp-rails.rb +1 -0
  13. data/vendor/assets/javascripts/jquerypp.js +5419 -0
  14. data/vendor/assets/javascripts/lib/jquery.animate.js +326 -0
  15. data/vendor/assets/javascripts/lib/jquery.compare.js +75 -0
  16. data/vendor/assets/javascripts/lib/jquery.cookie.js +118 -0
  17. data/vendor/assets/javascripts/lib/jquery.dimensions.js +191 -0
  18. data/vendor/assets/javascripts/lib/jquery.event.default.js +115 -0
  19. data/vendor/assets/javascripts/lib/jquery.event.destroyed.js +23 -0
  20. data/vendor/assets/javascripts/lib/jquery.event.drag.js +727 -0
  21. data/vendor/assets/javascripts/lib/jquery.event.drop.js +457 -0
  22. data/vendor/assets/javascripts/lib/jquery.event.fastfix.js +95 -0
  23. data/vendor/assets/javascripts/lib/jquery.event.hover.js +266 -0
  24. data/vendor/assets/javascripts/lib/jquery.event.key.js +156 -0
  25. data/vendor/assets/javascripts/lib/jquery.event.livehack.js +174 -0
  26. data/vendor/assets/javascripts/lib/jquery.event.pause.js +92 -0
  27. data/vendor/assets/javascripts/lib/jquery.event.resize.js +47 -0
  28. data/vendor/assets/javascripts/lib/jquery.event.swipe.js +133 -0
  29. data/vendor/assets/javascripts/lib/jquery.fills.js +249 -0
  30. data/vendor/assets/javascripts/lib/jquery.form_params.js +167 -0
  31. data/vendor/assets/javascripts/lib/jquery.lang.json.js +196 -0
  32. data/vendor/assets/javascripts/lib/jquery.lang.vector.js +214 -0
  33. data/vendor/assets/javascripts/lib/jquery.range.js +861 -0
  34. data/vendor/assets/javascripts/lib/jquery.selection.js +232 -0
  35. data/vendor/assets/javascripts/lib/jquery.styles.js +103 -0
  36. data/vendor/assets/javascripts/lib/jquery.within.js +94 -0
  37. metadata +81 -0
@@ -0,0 +1,266 @@
1
+ // Dependencies:
2
+ //
3
+ // - jquery.event.hover.js
4
+ // - jquery.event.livehack.js
5
+
6
+ (function($){
7
+ /**
8
+ * @class jQuery.Hover
9
+ * @plugin jquery/event/hover
10
+ * @download http://jmvcsite.heroku.com/pluginify?plugins[]=jquery/event/hover/hover.js
11
+ * @parent jQuery.event.hover
12
+ *
13
+ * Creates a new hover. The constructor should not be called directly.
14
+ *
15
+ * An instance of `$.Hover` is passed as the second argument to each
16
+ * [jQuery.event.hover] event handler:
17
+ *
18
+ * $('#menu').on("hoverinit", function(ev, hover) {
19
+ * // Set the hover distance to 20px
20
+ * hover.distance(20);
21
+ * });
22
+ */
23
+ $.Hover = function(){
24
+ this._delay = $.Hover.delay;
25
+ this._distance = $.Hover.distance;
26
+ this._leave = $.Hover.leave
27
+ };
28
+ /**
29
+ * @Static
30
+ */
31
+ $.extend($.Hover,{
32
+ /**
33
+ * @attribute delay
34
+ *
35
+ * `$.Hover.delay` is the delay (in milliseconds) after which the hover is
36
+ * activated by default.
37
+ *
38
+ * Set this value as a global default. The default is 100ms.
39
+ *
40
+ * // Set the global hover delay to 1 second
41
+ * $.Hover.delay = 1000;
42
+ */
43
+ delay: 100,
44
+ /**
45
+ * @attribute distance
46
+ *
47
+ * `$.Hover.distance` is the maximum distance (in pixels) that the mouse is allowed to
48
+ * travel within the time of [jQuery.Hover.delay] in order to activate a hover.
49
+ *
50
+ * Set this value as a global default. The default is 10px.
51
+ *
52
+ * // Set the global hover distance to 1 pixel
53
+ * $.Hover.distance = 1;
54
+ */
55
+ distance: 10,
56
+ leave : 0
57
+ })
58
+
59
+ /**
60
+ * @Prototype
61
+ */
62
+ $.extend($.Hover.prototype,{
63
+ /**
64
+ * `hover.delay(time)` sets the delay (in ms) for this hover.
65
+ * This method should only be used in [jQuery.event.hover.hoverinit hoverinit]:
66
+ *
67
+ * $('.hoverable').on('hoverinit', function(ev, hover) {
68
+ * // Set the delay to 500ms
69
+ * hover.delay(500);
70
+ * });
71
+ *
72
+ * @param {Number} delay the number of milliseconds used to determine a hover
73
+ * @return {$.Hover} The hover object
74
+ */
75
+ delay: function( delay ) {
76
+ this._delay = delay;
77
+ return this;
78
+ },
79
+ /**
80
+ * `hover.distance(px) sets the maximum distance (in pixels) the mouse is allowed to travel in order to activate
81
+ * the hover. This method should only be used in [jQuery.event.hover.hoverinit hoverinit]:
82
+ *
83
+ * $('.hoverable').on('hoverinit', function(ev, hover) {
84
+ * // Set the distance to 1px
85
+ * hover.distance(1);
86
+ * });
87
+ *
88
+ * @param {Number} distance the max distance in pixels a mouse can move to be considered a hover
89
+ * @return {$.Hover} The hover object
90
+ */
91
+ distance: function( distance ) {
92
+ this._distance = distance;
93
+ return this;
94
+ },
95
+ /**
96
+ * `hover.leave(delay)` sets a delay for how long the hover should stay active after the mouse left.
97
+ * This method should only be used in [jQuery.event.hover.hoverinit hoverinit]:
98
+ *
99
+ * $('.hoverable').on('hoverinit', function(ev, hover) {
100
+ * // Stay active for another second after the mouse left
101
+ * hover.leave(1000);
102
+ * });
103
+ *
104
+ * @param {Number} delay the number of milliseconds the hover should stay active after the mouse leaves
105
+ * @return {$.Hover} The hover object
106
+ */
107
+ leave : function(leave){
108
+ this._leave = leave;
109
+ return this;
110
+ }
111
+ })
112
+ var event = $.event,
113
+ handle = event.handle,
114
+ onmouseenter = function(ev){
115
+ // now start checking mousemoves to update location
116
+ var delegate = ev.delegateTarget || ev.currentTarget;
117
+ var selector = ev.handleObj.selector;
118
+ // prevents another mouseenter until current has run its course
119
+ if($.data(delegate,"_hover"+selector)) {
120
+ return;
121
+ }
122
+ $.data(delegate,"_hover"+selector, true)
123
+ var loc = {
124
+ pageX : ev.pageX,
125
+ pageY : ev.pageY
126
+ },
127
+ // The current distance
128
+ dist = 0,
129
+ // Timer that checks for the distance travelled
130
+ timer,
131
+ enteredEl = this,
132
+ // If we are hovered
133
+ hovered = false,
134
+ // The previous event
135
+ lastEv = ev,
136
+ // The $.Hover instance passed to events
137
+ hover = new $.Hover(),
138
+ // timer if hover.leave has been called
139
+ leaveTimer,
140
+ // Callback for triggering hoverleave
141
+ callHoverLeave = function(){
142
+ $.each(event.find(delegate, ["hoverleave"], selector), function(){
143
+ this.call(enteredEl, ev, hover)
144
+ })
145
+ cleanUp();
146
+ },
147
+ mousemove = function(ev){
148
+ clearTimeout(leaveTimer);
149
+ // Update the distance and location
150
+ dist += Math.pow( ev.pageX-loc.pageX, 2 ) + Math.pow( ev.pageY-loc.pageY, 2 );
151
+ loc = {
152
+ pageX : ev.pageX,
153
+ pageY : ev.pageY
154
+ }
155
+ lastEv = ev
156
+ },
157
+ mouseleave = function(ev){
158
+ clearTimeout(timer);
159
+ if(hovered) {
160
+ // go right away
161
+ if(hover._leave === 0){
162
+ callHoverLeave();
163
+ }else{
164
+ clearTimeout(leaveTimer);
165
+ // leave the hover after the time set in hover.leave(time)
166
+ leaveTimer = setTimeout(function(){
167
+ callHoverLeave();
168
+ }, hover._leave)
169
+ }
170
+ }else{
171
+ cleanUp();
172
+ }
173
+ },
174
+ cleanUp = function(){
175
+ // Unbind all events and data
176
+ $(enteredEl).unbind("mouseleave",mouseleave)
177
+ $(enteredEl).unbind("mousemove",mousemove);
178
+ $.removeData(delegate,"_hover"+selector)
179
+ };
180
+
181
+ // Bind the mousemove event
182
+ $(enteredEl).bind("mousemove",mousemove).bind("mouseleave", mouseleave);
183
+ // call hoverinit for each element with the hover instance
184
+ $.each(event.find(delegate, ["hoverinit"], selector), function(){
185
+ this.call(enteredEl, ev, hover)
186
+ })
187
+
188
+ timer = setTimeout(function(){
189
+ // check that we aren't moving around
190
+ if(dist < hover._distance && $(enteredEl).queue().length == 0){
191
+ $.each(event.find(delegate, ["hoverenter"], selector), function(){
192
+ this.call(enteredEl, lastEv, hover)
193
+ })
194
+ hovered = true;
195
+ return;
196
+ }else{
197
+ // Reset distance and timer
198
+ dist = 0;
199
+ timer = setTimeout(arguments.callee, hover._delay)
200
+ }
201
+ }, hover._delay)
202
+
203
+ };
204
+
205
+ /**
206
+ * @add jQuery.event.special
207
+ */
208
+ // Attach events
209
+ event.setupHelper( [
210
+ /**
211
+ * @attribute hoverinit
212
+ * @parent jQuery.event.hover
213
+ *
214
+ * `hoverinit` is called when a hover is about to start (on `mouseenter`). Listen for `hoverinit` events to configure
215
+ * [jQuery.Hover::delay delay] and [jQuery.Hover::distance distance]
216
+ * for this specific event:
217
+ *
218
+ * $(".option").on("hoverinit", function(ev, hover){
219
+ * //set the distance to 10px
220
+ * hover.distance(10);
221
+ * //set the delay to 200ms
222
+ * hover.delay(10);
223
+ * // End the hover one second after the mouse leaves
224
+ * hover.leave(1000);
225
+ * })
226
+ */
227
+ "hoverinit",
228
+ /**
229
+ * @attribute hoverenter
230
+ * @parent jQuery.event.hover
231
+ *
232
+ * `hoverenter` events are called when the mouses less than [jQuery.Hover.prototype.distance] pixels in
233
+ * [jQuery.Hover.prototype.delay delay] milliseconds.
234
+ *
235
+ * $(".option").on("hoverenter", function(ev, hover){
236
+ * $(this).addClass("hovering");
237
+ * })
238
+ */
239
+ "hoverenter",
240
+ /**
241
+ * @attribute hoverleave
242
+ * @parent jQuery.event.hover
243
+ *
244
+ * `hoverleave` is called when the mouse leaves an element that has been hovered.
245
+ *
246
+ * $(".option").on("hoverleave", function(ev, hover){
247
+ * $(this).removeClass("hovering");
248
+ * })
249
+ */
250
+ "hoverleave",
251
+ /**
252
+ * @attribute hovermove
253
+ * @parent jQuery.event.hover
254
+ *
255
+ * `hovermove` is called when a `mousemove` occurs on an element that has been hovered.
256
+ *
257
+ * $(".option").on("hovermove", function(ev, hover){
258
+ * // not sure why you would want to listen for this
259
+ * // but we provide it just in case
260
+ * })
261
+ */
262
+ "hovermove"], "mouseenter", onmouseenter )
263
+
264
+
265
+
266
+ })(jQuery)
@@ -0,0 +1,156 @@
1
+ // - jquery.event.key.js
2
+ (function($){
3
+ var keymap = {},
4
+ reverseKeyMap = {},
5
+ currentBrowser = jQuery.uaMatch(navigator.userAgent).browser;
6
+
7
+ /**
8
+ * @hide
9
+ * @parent jQuery.Event.prototype.key
10
+ *
11
+ * Allows you to set alternate key maps or overwrite existing key codes.
12
+ * For example::
13
+ *
14
+ * $.event.key({"~" : 177});
15
+ *
16
+ * @param {Object} map A map of character - keycode pairs.
17
+ */
18
+ $.event.key = function(browser, map){
19
+ if(browser === undefined) {
20
+ return keymap;
21
+ }
22
+
23
+ if(map === undefined) {
24
+ map = browser;
25
+ browser = currentBrowser;
26
+ }
27
+
28
+ // extend the keymap
29
+ if(!keymap[browser]) {
30
+ keymap[browser] = {};
31
+ }
32
+ $.extend(keymap[browser], map);
33
+ // and also update the reverse keymap
34
+ if(!reverseKeyMap[browser]) {
35
+ reverseKeyMap[browser] = {};
36
+ }
37
+ for(var name in map){
38
+ reverseKeyMap[browser][map[name]] = name;
39
+ }
40
+ };
41
+
42
+ $.event.key({
43
+ // backspace
44
+ '\b':'8',
45
+
46
+ // tab
47
+ '\t':'9',
48
+
49
+ // enter
50
+ '\r':'13',
51
+
52
+ // special
53
+ 'shift':'16','ctrl':'17','alt':'18',
54
+
55
+ // others
56
+ 'pause-break':'19',
57
+ 'caps':'20',
58
+ 'escape':'27',
59
+ 'num-lock':'144',
60
+ 'scroll-lock':'145',
61
+ 'print' : '44',
62
+
63
+ // navigation
64
+ 'page-up':'33','page-down':'34','end':'35','home':'36',
65
+ 'left':'37','up':'38','right':'39','down':'40','insert':'45','delete':'46',
66
+
67
+ // normal characters
68
+ ' ':'32',
69
+ '0':'48','1':'49','2':'50','3':'51','4':'52','5':'53','6':'54','7':'55','8':'56','9':'57',
70
+ 'a':'65','b':'66','c':'67','d':'68','e':'69','f':'70','g':'71','h':'72','i':'73','j':'74','k':'75','l':'76','m':'77',
71
+ 'n':'78','o':'79','p':'80','q':'81','r':'82','s':'83','t':'84','u':'85','v':'86','w':'87','x':'88','y':'89','z':'90',
72
+ // normal-characters, numpad
73
+ 'num0':'96','num1':'97','num2':'98','num3':'99','num4':'100','num5':'101','num6':'102','num7':'103','num8':'104','num9':'105',
74
+ '*':'106','+':'107','-':'109','.':'110',
75
+ // normal-characters, others
76
+ '/':'111',
77
+ ';':'186',
78
+ '=':'187',
79
+ ',':'188',
80
+ '-':'189',
81
+ '.':'190',
82
+ '/':'191',
83
+ '`':'192',
84
+ '[':'219',
85
+ '\\':'220',
86
+ ']':'221',
87
+ "'":'222',
88
+
89
+ // ignore these, you shouldn't use them
90
+ 'left window key':'91','right window key':'92','select key':'93',
91
+
92
+
93
+ 'f1':'112','f2':'113','f3':'114','f4':'115','f5':'116','f6':'117',
94
+ 'f7':'118','f8':'119','f9':'120','f10':'121','f11':'122','f12':'123'
95
+ });
96
+
97
+ /**
98
+ * @parent jQuery.event.key
99
+ * @plugin jquery/event/key
100
+ * @function jQuery.Event.prototype.keyName
101
+ *
102
+ * Returns a string representation of the key pressed:
103
+ *
104
+ * $("input").on('keypress', function(ev){
105
+ * if(ev.keyName() == 'ctrl') {
106
+ * $(this).addClass('highlight');
107
+ * }
108
+ * });
109
+ *
110
+ * The key names mapped by default can be found in the [jQuery.event.key jQuery.event.key overview].
111
+ *
112
+ * @return {String} The string representation of of the key pressed.
113
+ */
114
+ jQuery.Event.prototype.keyName = function(){
115
+ var event = this,
116
+ test = /\w/,
117
+ // It can be either keyCode or charCode.
118
+ // Look both cases up in the reverse key map and converted to a string
119
+ key_Key = reverseKeyMap[currentBrowser][(event.keyCode || event.which)+""],
120
+ char_Key = String.fromCharCode(event.keyCode || event.which),
121
+ key_Char = event.charCode && reverseKeyMap[currentBrowser][event.charCode+""],
122
+ char_Char = event.charCode && String.fromCharCode(event.charCode);
123
+
124
+ if( char_Char && test.test(char_Char) ) {
125
+ // string representation of event.charCode
126
+ return char_Char.toLowerCase()
127
+ }
128
+ if( key_Char && test.test(key_Char) ) {
129
+ // reverseKeyMap representation of event.charCode
130
+ return char_Char.toLowerCase()
131
+ }
132
+ if( char_Key && test.test(char_Key) ) {
133
+ // string representation of event.keyCode
134
+ return char_Key.toLowerCase()
135
+ }
136
+ if( key_Key && test.test(key_Key) ) {
137
+ // reverseKeyMap representation of event.keyCode
138
+ return key_Key.toLowerCase()
139
+ }
140
+
141
+ if (event.type == 'keypress'){
142
+ // keypress doesn't capture everything
143
+ return event.keyCode ? String.fromCharCode(event.keyCode) : String.fromCharCode(event.which)
144
+ }
145
+
146
+ if (!event.keyCode && event.which) {
147
+ // event.which
148
+ return String.fromCharCode(event.which)
149
+ }
150
+
151
+ // default
152
+ return reverseKeyMap[currentBrowser][event.keyCode+""]
153
+ }
154
+
155
+
156
+ })(jQuery)
@@ -0,0 +1,174 @@
1
+ // - jquery.event.livehack.js
2
+ (function() {
3
+
4
+ var event = jQuery.event,
5
+
6
+ //helper that finds handlers by type and calls back a function, this is basically handle
7
+ // events - the events object
8
+ // types - an array of event types to look for
9
+ // callback(type, handlerFunc, selector) - a callback
10
+ // selector - an optional selector to filter with, if there, matches by selector
11
+ // if null, matches anything, otherwise, matches with no selector
12
+ findHelper = function( events, types, callback, selector ) {
13
+ var t, type, typeHandlers, all, h, handle,
14
+ namespaces, namespace,
15
+ match;
16
+ for ( t = 0; t < types.length; t++ ) {
17
+ type = types[t];
18
+ all = type.indexOf(".") < 0;
19
+ if (!all ) {
20
+ namespaces = type.split(".");
21
+ type = namespaces.shift();
22
+ namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");
23
+ }
24
+ typeHandlers = (events[type] || []).slice(0);
25
+
26
+ for ( h = 0; h < typeHandlers.length; h++ ) {
27
+ handle = typeHandlers[h];
28
+
29
+ match = (all || namespace.test(handle.namespace));
30
+
31
+ if(match){
32
+ if(selector){
33
+ if (handle.selector === selector ) {
34
+ callback(type, handle.origHandler || handle.handler);
35
+ }
36
+ } else if (selector === null){
37
+ callback(type, handle.origHandler || handle.handler, handle.selector);
38
+ }
39
+ else if (!handle.selector ) {
40
+ callback(type, handle.origHandler || handle.handler);
41
+
42
+ }
43
+ }
44
+
45
+
46
+ }
47
+ }
48
+ };
49
+
50
+ /**
51
+ * Finds event handlers of a given type on an element.
52
+ * @param {HTMLElement} el
53
+ * @param {Array} types an array of event names
54
+ * @param {String} [selector] optional selector
55
+ * @return {Array} an array of event handlers
56
+ */
57
+ event.find = function( el, types, selector ) {
58
+ var events = ( $._data(el) || {} ).events,
59
+ handlers = [],
60
+ t, liver, live;
61
+
62
+ if (!events ) {
63
+ return handlers;
64
+ }
65
+ findHelper(events, types, function( type, handler ) {
66
+ handlers.push(handler);
67
+ }, selector);
68
+ return handlers;
69
+ };
70
+ /**
71
+ * Finds all events. Group by selector.
72
+ * @param {HTMLElement} el the element
73
+ * @param {Array} types event types
74
+ */
75
+ event.findBySelector = function( el, types ) {
76
+ var events = $._data(el).events,
77
+ selectors = {},
78
+ //adds a handler for a given selector and event
79
+ add = function( selector, event, handler ) {
80
+ var select = selectors[selector] || (selectors[selector] = {}),
81
+ events = select[event] || (select[event] = []);
82
+ events.push(handler);
83
+ };
84
+
85
+ if (!events ) {
86
+ return selectors;
87
+ }
88
+ //first check live:
89
+ /*$.each(events.live || [], function( i, live ) {
90
+ if ( $.inArray(live.origType, types) !== -1 ) {
91
+ add(live.selector, live.origType, live.origHandler || live.handler);
92
+ }
93
+ });*/
94
+ //then check straight binds
95
+ findHelper(events, types, function( type, handler, selector ) {
96
+ add(selector || "", type, handler);
97
+ }, null);
98
+
99
+ return selectors;
100
+ };
101
+ event.supportTouch = "ontouchend" in document;
102
+
103
+ $.fn.respondsTo = function( events ) {
104
+ if (!this.length ) {
105
+ return false;
106
+ } else {
107
+ //add default ?
108
+ return event.find(this[0], $.isArray(events) ? events : [events]).length > 0;
109
+ }
110
+ };
111
+ $.fn.triggerHandled = function( event, data ) {
112
+ event = (typeof event == "string" ? $.Event(event) : event);
113
+ this.trigger(event, data);
114
+ return event.handled;
115
+ };
116
+ /**
117
+ * Only attaches one event handler for all types ...
118
+ * @param {Array} types llist of types that will delegate here
119
+ * @param {Object} startingEvent the first event to start listening to
120
+ * @param {Object} onFirst a function to call
121
+ */
122
+ event.setupHelper = function( types, startingEvent, onFirst ) {
123
+ if (!onFirst ) {
124
+ onFirst = startingEvent;
125
+ startingEvent = null;
126
+ }
127
+ var add = function( handleObj ) {
128
+
129
+ var bySelector, selector = handleObj.selector || "";
130
+ if ( selector ) {
131
+ bySelector = event.find(this, types, selector);
132
+ if (!bySelector.length ) {
133
+ $(this).delegate(selector, startingEvent, onFirst);
134
+ }
135
+ }
136
+ else {
137
+ //var bySelector = event.find(this, types, selector);
138
+ if (!event.find(this, types, selector).length ) {
139
+ event.add(this, startingEvent, onFirst, {
140
+ selector: selector,
141
+ delegate: this
142
+ });
143
+ }
144
+
145
+ }
146
+
147
+ },
148
+ remove = function( handleObj ) {
149
+ var bySelector, selector = handleObj.selector || "";
150
+ if ( selector ) {
151
+ bySelector = event.find(this, types, selector);
152
+ if (!bySelector.length ) {
153
+ $(this).undelegate(selector, startingEvent, onFirst);
154
+ }
155
+ }
156
+ else {
157
+ if (!event.find(this, types, selector).length ) {
158
+ event.remove(this, startingEvent, onFirst, {
159
+ selector: selector,
160
+ delegate: this
161
+ });
162
+ }
163
+ }
164
+ };
165
+ $.each(types, function() {
166
+ event.special[this] = {
167
+ add: add,
168
+ remove: remove,
169
+ setup: function() {},
170
+ teardown: function() {}
171
+ };
172
+ });
173
+ };
174
+ })(jQuery)
@@ -0,0 +1,92 @@
1
+ // Dependencies:
2
+ //
3
+ // - jquery.event.pause.js
4
+ // - jquery.event.default.js
5
+
6
+ (function($){
7
+
8
+
9
+ var current,
10
+ rnamespaces = /\.(.*)$/,
11
+ returnFalse = function(){return false},
12
+ returnTrue = function(){return true};
13
+
14
+ $.Event.prototype.isPaused = returnFalse
15
+
16
+ /**
17
+ * @function jQuery.Event.prototype.pause
18
+ * @parent jQuery.event.pause
19
+ *
20
+ * `event.paused()` pauses an event (to be resumed later):
21
+ *
22
+ * $('.tab').on('show', function(ev) {
23
+ * ev.pause();
24
+ * // Resume the event after 1 second
25
+ * setTimeout(function() {
26
+ * ev.resume();
27
+ * }, 1000);
28
+ * });
29
+ */
30
+ $.Event.prototype.pause = function(){
31
+ // stop the event from continuing temporarily
32
+ // keep the current state of the event ...
33
+ this.pausedState = {
34
+ isDefaultPrevented : this.isDefaultPrevented() ?
35
+ returnTrue : returnFalse,
36
+ isPropagationStopped : this.isPropagationStopped() ?
37
+ returnTrue : returnFalse
38
+ };
39
+
40
+ this.stopImmediatePropagation();
41
+ this.preventDefault();
42
+ this.isPaused = returnTrue;
43
+ };
44
+
45
+ /**
46
+ * @function jQuery.Event.prototype.resume
47
+ * @parent jQuery.event.pause
48
+ *
49
+ * `event.resume()` resumes a paused event:
50
+ *
51
+ * $('.tab').on('show', function(ev) {
52
+ * ev.pause();
53
+ * // Resume the event after 1 second
54
+ * setTimeout(function() {
55
+ * ev.resume();
56
+ * }, 1000);
57
+ * });
58
+ */
59
+ $.Event.prototype.resume = function(){
60
+ // temporarily remove all event handlers of this type
61
+ var handleObj = this.handleObj,
62
+ currentTarget = this.currentTarget;
63
+ // temporarily overwrite special handle
64
+ var origType = jQuery.event.special[ handleObj.origType ],
65
+ origHandle = origType && origType.handle;
66
+
67
+ if(!origType){
68
+ jQuery.event.special[ handleObj.origType ] = {};
69
+ }
70
+ jQuery.event.special[ handleObj.origType ].handle = function(ev){
71
+ // remove this once we have passed the handleObj
72
+ if(ev.handleObj === handleObj && ev.currentTarget === currentTarget){
73
+ if(!origType){
74
+ delete jQuery.event.special[ handleObj.origType ];
75
+ } else {
76
+ jQuery.event.special[ handleObj.origType ].handle = origHandle;
77
+ }
78
+ }
79
+ }
80
+ delete this.pausedState;
81
+ // reset stuff
82
+ this.isPaused = this.isImmediatePropagationStopped = returnFalse;
83
+
84
+ if(!this.isPropagationStopped()){
85
+ // fire the event again, no events will get fired until
86
+ // same currentTarget / handler
87
+ $.event.trigger(this, [], this.target);
88
+ }
89
+
90
+ };
91
+
92
+ })(jQuery)