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.
- data/.document +5 -0
- data/.gitignore +7 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +24 -0
- data/Rakefile +2 -0
- data/jquerypp-rails.gemspec +20 -0
- data/lib/jquerypp/generators/jquerypp/install/install_generator.rb +49 -0
- data/lib/jquerypp/rails/engine.rb +8 -0
- data/lib/jquerypp/rails/version.rb +6 -0
- data/lib/jquerypp/rails.rb +8 -0
- data/lib/jquerypp-rails.rb +1 -0
- data/vendor/assets/javascripts/jquerypp.js +5419 -0
- data/vendor/assets/javascripts/lib/jquery.animate.js +326 -0
- data/vendor/assets/javascripts/lib/jquery.compare.js +75 -0
- data/vendor/assets/javascripts/lib/jquery.cookie.js +118 -0
- data/vendor/assets/javascripts/lib/jquery.dimensions.js +191 -0
- data/vendor/assets/javascripts/lib/jquery.event.default.js +115 -0
- data/vendor/assets/javascripts/lib/jquery.event.destroyed.js +23 -0
- data/vendor/assets/javascripts/lib/jquery.event.drag.js +727 -0
- data/vendor/assets/javascripts/lib/jquery.event.drop.js +457 -0
- data/vendor/assets/javascripts/lib/jquery.event.fastfix.js +95 -0
- data/vendor/assets/javascripts/lib/jquery.event.hover.js +266 -0
- data/vendor/assets/javascripts/lib/jquery.event.key.js +156 -0
- data/vendor/assets/javascripts/lib/jquery.event.livehack.js +174 -0
- data/vendor/assets/javascripts/lib/jquery.event.pause.js +92 -0
- data/vendor/assets/javascripts/lib/jquery.event.resize.js +47 -0
- data/vendor/assets/javascripts/lib/jquery.event.swipe.js +133 -0
- data/vendor/assets/javascripts/lib/jquery.fills.js +249 -0
- data/vendor/assets/javascripts/lib/jquery.form_params.js +167 -0
- data/vendor/assets/javascripts/lib/jquery.lang.json.js +196 -0
- data/vendor/assets/javascripts/lib/jquery.lang.vector.js +214 -0
- data/vendor/assets/javascripts/lib/jquery.range.js +861 -0
- data/vendor/assets/javascripts/lib/jquery.selection.js +232 -0
- data/vendor/assets/javascripts/lib/jquery.styles.js +103 -0
- data/vendor/assets/javascripts/lib/jquery.within.js +94 -0
- 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)
|