jquerypp-rails 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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)