etcweb 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.bowerrc +3 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +19 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +36 -0
- data/Rakefile +1 -0
- data/app/bower_components/jquery/.bower.json +37 -0
- data/app/bower_components/jquery/MIT-LICENSE.txt +21 -0
- data/app/bower_components/jquery/bower.json +27 -0
- data/app/bower_components/jquery/dist/jquery.js +9205 -0
- data/app/bower_components/jquery/dist/jquery.min.js +5 -0
- data/app/bower_components/jquery/dist/jquery.min.map +1 -0
- data/app/bower_components/jquery/src/ajax.js +786 -0
- data/app/bower_components/jquery/src/ajax/jsonp.js +89 -0
- data/app/bower_components/jquery/src/ajax/load.js +75 -0
- data/app/bower_components/jquery/src/ajax/parseJSON.js +13 -0
- data/app/bower_components/jquery/src/ajax/parseXML.js +28 -0
- data/app/bower_components/jquery/src/ajax/script.js +64 -0
- data/app/bower_components/jquery/src/ajax/var/nonce.js +5 -0
- data/app/bower_components/jquery/src/ajax/var/rquery.js +3 -0
- data/app/bower_components/jquery/src/ajax/xhr.js +136 -0
- data/app/bower_components/jquery/src/attributes.js +11 -0
- data/app/bower_components/jquery/src/attributes/attr.js +141 -0
- data/app/bower_components/jquery/src/attributes/classes.js +158 -0
- data/app/bower_components/jquery/src/attributes/prop.js +94 -0
- data/app/bower_components/jquery/src/attributes/support.js +35 -0
- data/app/bower_components/jquery/src/attributes/val.js +161 -0
- data/app/bower_components/jquery/src/callbacks.js +205 -0
- data/app/bower_components/jquery/src/core.js +497 -0
- data/app/bower_components/jquery/src/core/access.js +60 -0
- data/app/bower_components/jquery/src/core/init.js +123 -0
- data/app/bower_components/jquery/src/core/parseHTML.js +39 -0
- data/app/bower_components/jquery/src/core/ready.js +97 -0
- data/app/bower_components/jquery/src/core/var/rsingleTag.js +4 -0
- data/app/bower_components/jquery/src/css.js +450 -0
- data/app/bower_components/jquery/src/css/addGetHookIf.js +22 -0
- data/app/bower_components/jquery/src/css/curCSS.js +57 -0
- data/app/bower_components/jquery/src/css/defaultDisplay.js +70 -0
- data/app/bower_components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
- data/app/bower_components/jquery/src/css/support.js +96 -0
- data/app/bower_components/jquery/src/css/swap.js +28 -0
- data/app/bower_components/jquery/src/css/var/cssExpand.js +3 -0
- data/app/bower_components/jquery/src/css/var/getStyles.js +12 -0
- data/app/bower_components/jquery/src/css/var/isHidden.js +13 -0
- data/app/bower_components/jquery/src/css/var/rmargin.js +3 -0
- data/app/bower_components/jquery/src/css/var/rnumnonpx.js +5 -0
- data/app/bower_components/jquery/src/data.js +178 -0
- data/app/bower_components/jquery/src/data/Data.js +181 -0
- data/app/bower_components/jquery/src/data/accepts.js +20 -0
- data/app/bower_components/jquery/src/data/var/data_priv.js +5 -0
- data/app/bower_components/jquery/src/data/var/data_user.js +5 -0
- data/app/bower_components/jquery/src/deferred.js +149 -0
- data/app/bower_components/jquery/src/deprecated.js +13 -0
- data/app/bower_components/jquery/src/dimensions.js +50 -0
- data/app/bower_components/jquery/src/effects.js +648 -0
- data/app/bower_components/jquery/src/effects/Tween.js +114 -0
- data/app/bower_components/jquery/src/effects/animatedSelector.js +13 -0
- data/app/bower_components/jquery/src/event.js +868 -0
- data/app/bower_components/jquery/src/event/ajax.js +13 -0
- data/app/bower_components/jquery/src/event/alias.js +39 -0
- data/app/bower_components/jquery/src/event/support.js +9 -0
- data/app/bower_components/jquery/src/exports/amd.js +24 -0
- data/app/bower_components/jquery/src/exports/global.js +32 -0
- data/app/bower_components/jquery/src/intro.js +44 -0
- data/app/bower_components/jquery/src/jquery.js +37 -0
- data/app/bower_components/jquery/src/manipulation.js +580 -0
- data/app/bower_components/jquery/src/manipulation/_evalUrl.js +18 -0
- data/app/bower_components/jquery/src/manipulation/support.js +32 -0
- data/app/bower_components/jquery/src/manipulation/var/rcheckableType.js +3 -0
- data/app/bower_components/jquery/src/offset.js +207 -0
- data/app/bower_components/jquery/src/outro.js +1 -0
- data/app/bower_components/jquery/src/queue.js +142 -0
- data/app/bower_components/jquery/src/queue/delay.js +22 -0
- data/app/bower_components/jquery/src/selector-native.js +172 -0
- data/app/bower_components/jquery/src/selector-sizzle.js +14 -0
- data/app/bower_components/jquery/src/selector.js +1 -0
- data/app/bower_components/jquery/src/serialize.js +111 -0
- data/app/bower_components/jquery/src/sizzle/dist/sizzle.js +2067 -0
- data/app/bower_components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
- data/app/bower_components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
- data/app/bower_components/jquery/src/traversing.js +199 -0
- data/app/bower_components/jquery/src/traversing/findFilter.js +100 -0
- data/app/bower_components/jquery/src/traversing/var/rneedsContext.js +6 -0
- data/app/bower_components/jquery/src/var/arr.js +3 -0
- data/app/bower_components/jquery/src/var/class2type.js +4 -0
- data/app/bower_components/jquery/src/var/concat.js +5 -0
- data/app/bower_components/jquery/src/var/hasOwn.js +5 -0
- data/app/bower_components/jquery/src/var/indexOf.js +5 -0
- data/app/bower_components/jquery/src/var/pnum.js +3 -0
- data/app/bower_components/jquery/src/var/push.js +5 -0
- data/app/bower_components/jquery/src/var/rnotwhite.js +3 -0
- data/app/bower_components/jquery/src/var/slice.js +5 -0
- data/app/bower_components/jquery/src/var/strundefined.js +3 -0
- data/app/bower_components/jquery/src/var/support.js +4 -0
- data/app/bower_components/jquery/src/var/toString.js +5 -0
- data/app/bower_components/jquery/src/wrap.js +79 -0
- data/app/stylesheets/application.scss +31 -0
- data/app/views/dir.haml +95 -0
- data/app/views/etcd_error.haml +5 -0
- data/app/views/etcvault_keys_select.haml +6 -0
- data/app/views/index.haml +1 -0
- data/app/views/key.haml +68 -0
- data/app/views/keys.haml +30 -0
- data/app/views/layout.haml +20 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/config.ru +19 -0
- data/etcweb.gemspec +37 -0
- data/lib/etcweb.rb +6 -0
- data/lib/etcweb/app.rb +230 -0
- data/lib/etcweb/version.rb +3 -0
- metadata +331 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
define([
|
2
|
+
"../ajax"
|
3
|
+
], function( jQuery ) {
|
4
|
+
|
5
|
+
jQuery._evalUrl = function( url ) {
|
6
|
+
return jQuery.ajax({
|
7
|
+
url: url,
|
8
|
+
type: "GET",
|
9
|
+
dataType: "script",
|
10
|
+
async: false,
|
11
|
+
global: false,
|
12
|
+
"throws": true
|
13
|
+
});
|
14
|
+
};
|
15
|
+
|
16
|
+
return jQuery._evalUrl;
|
17
|
+
|
18
|
+
});
|
@@ -0,0 +1,32 @@
|
|
1
|
+
define([
|
2
|
+
"../var/support"
|
3
|
+
], function( support ) {
|
4
|
+
|
5
|
+
(function() {
|
6
|
+
var fragment = document.createDocumentFragment(),
|
7
|
+
div = fragment.appendChild( document.createElement( "div" ) ),
|
8
|
+
input = document.createElement( "input" );
|
9
|
+
|
10
|
+
// Support: Safari<=5.1
|
11
|
+
// Check state lost if the name is set (#11217)
|
12
|
+
// Support: Windows Web Apps (WWA)
|
13
|
+
// `name` and `type` must use .setAttribute for WWA (#14901)
|
14
|
+
input.setAttribute( "type", "radio" );
|
15
|
+
input.setAttribute( "checked", "checked" );
|
16
|
+
input.setAttribute( "name", "t" );
|
17
|
+
|
18
|
+
div.appendChild( input );
|
19
|
+
|
20
|
+
// Support: Safari<=5.1, Android<4.2
|
21
|
+
// Older WebKit doesn't clone checked state correctly in fragments
|
22
|
+
support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
|
23
|
+
|
24
|
+
// Support: IE<=11+
|
25
|
+
// Make sure textarea (and checkbox) defaultValue is properly cloned
|
26
|
+
div.innerHTML = "<textarea>x</textarea>";
|
27
|
+
support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
|
28
|
+
})();
|
29
|
+
|
30
|
+
return support;
|
31
|
+
|
32
|
+
});
|
@@ -0,0 +1,207 @@
|
|
1
|
+
define([
|
2
|
+
"./core",
|
3
|
+
"./var/strundefined",
|
4
|
+
"./core/access",
|
5
|
+
"./css/var/rnumnonpx",
|
6
|
+
"./css/curCSS",
|
7
|
+
"./css/addGetHookIf",
|
8
|
+
"./css/support",
|
9
|
+
|
10
|
+
"./core/init",
|
11
|
+
"./css",
|
12
|
+
"./selector" // contains
|
13
|
+
], function( jQuery, strundefined, access, rnumnonpx, curCSS, addGetHookIf, support ) {
|
14
|
+
|
15
|
+
var docElem = window.document.documentElement;
|
16
|
+
|
17
|
+
/**
|
18
|
+
* Gets a window from an element
|
19
|
+
*/
|
20
|
+
function getWindow( elem ) {
|
21
|
+
return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
|
22
|
+
}
|
23
|
+
|
24
|
+
jQuery.offset = {
|
25
|
+
setOffset: function( elem, options, i ) {
|
26
|
+
var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
|
27
|
+
position = jQuery.css( elem, "position" ),
|
28
|
+
curElem = jQuery( elem ),
|
29
|
+
props = {};
|
30
|
+
|
31
|
+
// Set position first, in-case top/left are set even on static elem
|
32
|
+
if ( position === "static" ) {
|
33
|
+
elem.style.position = "relative";
|
34
|
+
}
|
35
|
+
|
36
|
+
curOffset = curElem.offset();
|
37
|
+
curCSSTop = jQuery.css( elem, "top" );
|
38
|
+
curCSSLeft = jQuery.css( elem, "left" );
|
39
|
+
calculatePosition = ( position === "absolute" || position === "fixed" ) &&
|
40
|
+
( curCSSTop + curCSSLeft ).indexOf("auto") > -1;
|
41
|
+
|
42
|
+
// Need to be able to calculate position if either
|
43
|
+
// top or left is auto and position is either absolute or fixed
|
44
|
+
if ( calculatePosition ) {
|
45
|
+
curPosition = curElem.position();
|
46
|
+
curTop = curPosition.top;
|
47
|
+
curLeft = curPosition.left;
|
48
|
+
|
49
|
+
} else {
|
50
|
+
curTop = parseFloat( curCSSTop ) || 0;
|
51
|
+
curLeft = parseFloat( curCSSLeft ) || 0;
|
52
|
+
}
|
53
|
+
|
54
|
+
if ( jQuery.isFunction( options ) ) {
|
55
|
+
options = options.call( elem, i, curOffset );
|
56
|
+
}
|
57
|
+
|
58
|
+
if ( options.top != null ) {
|
59
|
+
props.top = ( options.top - curOffset.top ) + curTop;
|
60
|
+
}
|
61
|
+
if ( options.left != null ) {
|
62
|
+
props.left = ( options.left - curOffset.left ) + curLeft;
|
63
|
+
}
|
64
|
+
|
65
|
+
if ( "using" in options ) {
|
66
|
+
options.using.call( elem, props );
|
67
|
+
|
68
|
+
} else {
|
69
|
+
curElem.css( props );
|
70
|
+
}
|
71
|
+
}
|
72
|
+
};
|
73
|
+
|
74
|
+
jQuery.fn.extend({
|
75
|
+
offset: function( options ) {
|
76
|
+
if ( arguments.length ) {
|
77
|
+
return options === undefined ?
|
78
|
+
this :
|
79
|
+
this.each(function( i ) {
|
80
|
+
jQuery.offset.setOffset( this, options, i );
|
81
|
+
});
|
82
|
+
}
|
83
|
+
|
84
|
+
var docElem, win,
|
85
|
+
elem = this[ 0 ],
|
86
|
+
box = { top: 0, left: 0 },
|
87
|
+
doc = elem && elem.ownerDocument;
|
88
|
+
|
89
|
+
if ( !doc ) {
|
90
|
+
return;
|
91
|
+
}
|
92
|
+
|
93
|
+
docElem = doc.documentElement;
|
94
|
+
|
95
|
+
// Make sure it's not a disconnected DOM node
|
96
|
+
if ( !jQuery.contains( docElem, elem ) ) {
|
97
|
+
return box;
|
98
|
+
}
|
99
|
+
|
100
|
+
// Support: BlackBerry 5, iOS 3 (original iPhone)
|
101
|
+
// If we don't have gBCR, just use 0,0 rather than error
|
102
|
+
if ( typeof elem.getBoundingClientRect !== strundefined ) {
|
103
|
+
box = elem.getBoundingClientRect();
|
104
|
+
}
|
105
|
+
win = getWindow( doc );
|
106
|
+
return {
|
107
|
+
top: box.top + win.pageYOffset - docElem.clientTop,
|
108
|
+
left: box.left + win.pageXOffset - docElem.clientLeft
|
109
|
+
};
|
110
|
+
},
|
111
|
+
|
112
|
+
position: function() {
|
113
|
+
if ( !this[ 0 ] ) {
|
114
|
+
return;
|
115
|
+
}
|
116
|
+
|
117
|
+
var offsetParent, offset,
|
118
|
+
elem = this[ 0 ],
|
119
|
+
parentOffset = { top: 0, left: 0 };
|
120
|
+
|
121
|
+
// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
|
122
|
+
if ( jQuery.css( elem, "position" ) === "fixed" ) {
|
123
|
+
// Assume getBoundingClientRect is there when computed position is fixed
|
124
|
+
offset = elem.getBoundingClientRect();
|
125
|
+
|
126
|
+
} else {
|
127
|
+
// Get *real* offsetParent
|
128
|
+
offsetParent = this.offsetParent();
|
129
|
+
|
130
|
+
// Get correct offsets
|
131
|
+
offset = this.offset();
|
132
|
+
if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
|
133
|
+
parentOffset = offsetParent.offset();
|
134
|
+
}
|
135
|
+
|
136
|
+
// Add offsetParent borders
|
137
|
+
parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
|
138
|
+
parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
|
139
|
+
}
|
140
|
+
|
141
|
+
// Subtract parent offsets and element margins
|
142
|
+
return {
|
143
|
+
top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
|
144
|
+
left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
|
145
|
+
};
|
146
|
+
},
|
147
|
+
|
148
|
+
offsetParent: function() {
|
149
|
+
return this.map(function() {
|
150
|
+
var offsetParent = this.offsetParent || docElem;
|
151
|
+
|
152
|
+
while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
|
153
|
+
offsetParent = offsetParent.offsetParent;
|
154
|
+
}
|
155
|
+
|
156
|
+
return offsetParent || docElem;
|
157
|
+
});
|
158
|
+
}
|
159
|
+
});
|
160
|
+
|
161
|
+
// Create scrollLeft and scrollTop methods
|
162
|
+
jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
|
163
|
+
var top = "pageYOffset" === prop;
|
164
|
+
|
165
|
+
jQuery.fn[ method ] = function( val ) {
|
166
|
+
return access( this, function( elem, method, val ) {
|
167
|
+
var win = getWindow( elem );
|
168
|
+
|
169
|
+
if ( val === undefined ) {
|
170
|
+
return win ? win[ prop ] : elem[ method ];
|
171
|
+
}
|
172
|
+
|
173
|
+
if ( win ) {
|
174
|
+
win.scrollTo(
|
175
|
+
!top ? val : window.pageXOffset,
|
176
|
+
top ? val : window.pageYOffset
|
177
|
+
);
|
178
|
+
|
179
|
+
} else {
|
180
|
+
elem[ method ] = val;
|
181
|
+
}
|
182
|
+
}, method, val, arguments.length, null );
|
183
|
+
};
|
184
|
+
});
|
185
|
+
|
186
|
+
// Support: Safari<7+, Chrome<37+
|
187
|
+
// Add the top/left cssHooks using jQuery.fn.position
|
188
|
+
// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
|
189
|
+
// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280
|
190
|
+
// getComputedStyle returns percent when specified for top/left/bottom/right;
|
191
|
+
// rather than make the css module depend on the offset module, just check for it here
|
192
|
+
jQuery.each( [ "top", "left" ], function( i, prop ) {
|
193
|
+
jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
|
194
|
+
function( elem, computed ) {
|
195
|
+
if ( computed ) {
|
196
|
+
computed = curCSS( elem, prop );
|
197
|
+
// If curCSS returns percentage, fallback to offset
|
198
|
+
return rnumnonpx.test( computed ) ?
|
199
|
+
jQuery( elem ).position()[ prop ] + "px" :
|
200
|
+
computed;
|
201
|
+
}
|
202
|
+
}
|
203
|
+
);
|
204
|
+
});
|
205
|
+
|
206
|
+
return jQuery;
|
207
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
}));
|
@@ -0,0 +1,142 @@
|
|
1
|
+
define([
|
2
|
+
"./core",
|
3
|
+
"./data/var/data_priv",
|
4
|
+
"./deferred",
|
5
|
+
"./callbacks"
|
6
|
+
], function( jQuery, data_priv ) {
|
7
|
+
|
8
|
+
jQuery.extend({
|
9
|
+
queue: function( elem, type, data ) {
|
10
|
+
var queue;
|
11
|
+
|
12
|
+
if ( elem ) {
|
13
|
+
type = ( type || "fx" ) + "queue";
|
14
|
+
queue = data_priv.get( elem, type );
|
15
|
+
|
16
|
+
// Speed up dequeue by getting out quickly if this is just a lookup
|
17
|
+
if ( data ) {
|
18
|
+
if ( !queue || jQuery.isArray( data ) ) {
|
19
|
+
queue = data_priv.access( elem, type, jQuery.makeArray(data) );
|
20
|
+
} else {
|
21
|
+
queue.push( data );
|
22
|
+
}
|
23
|
+
}
|
24
|
+
return queue || [];
|
25
|
+
}
|
26
|
+
},
|
27
|
+
|
28
|
+
dequeue: function( elem, type ) {
|
29
|
+
type = type || "fx";
|
30
|
+
|
31
|
+
var queue = jQuery.queue( elem, type ),
|
32
|
+
startLength = queue.length,
|
33
|
+
fn = queue.shift(),
|
34
|
+
hooks = jQuery._queueHooks( elem, type ),
|
35
|
+
next = function() {
|
36
|
+
jQuery.dequeue( elem, type );
|
37
|
+
};
|
38
|
+
|
39
|
+
// If the fx queue is dequeued, always remove the progress sentinel
|
40
|
+
if ( fn === "inprogress" ) {
|
41
|
+
fn = queue.shift();
|
42
|
+
startLength--;
|
43
|
+
}
|
44
|
+
|
45
|
+
if ( fn ) {
|
46
|
+
|
47
|
+
// Add a progress sentinel to prevent the fx queue from being
|
48
|
+
// automatically dequeued
|
49
|
+
if ( type === "fx" ) {
|
50
|
+
queue.unshift( "inprogress" );
|
51
|
+
}
|
52
|
+
|
53
|
+
// Clear up the last queue stop function
|
54
|
+
delete hooks.stop;
|
55
|
+
fn.call( elem, next, hooks );
|
56
|
+
}
|
57
|
+
|
58
|
+
if ( !startLength && hooks ) {
|
59
|
+
hooks.empty.fire();
|
60
|
+
}
|
61
|
+
},
|
62
|
+
|
63
|
+
// Not public - generate a queueHooks object, or return the current one
|
64
|
+
_queueHooks: function( elem, type ) {
|
65
|
+
var key = type + "queueHooks";
|
66
|
+
return data_priv.get( elem, key ) || data_priv.access( elem, key, {
|
67
|
+
empty: jQuery.Callbacks("once memory").add(function() {
|
68
|
+
data_priv.remove( elem, [ type + "queue", key ] );
|
69
|
+
})
|
70
|
+
});
|
71
|
+
}
|
72
|
+
});
|
73
|
+
|
74
|
+
jQuery.fn.extend({
|
75
|
+
queue: function( type, data ) {
|
76
|
+
var setter = 2;
|
77
|
+
|
78
|
+
if ( typeof type !== "string" ) {
|
79
|
+
data = type;
|
80
|
+
type = "fx";
|
81
|
+
setter--;
|
82
|
+
}
|
83
|
+
|
84
|
+
if ( arguments.length < setter ) {
|
85
|
+
return jQuery.queue( this[0], type );
|
86
|
+
}
|
87
|
+
|
88
|
+
return data === undefined ?
|
89
|
+
this :
|
90
|
+
this.each(function() {
|
91
|
+
var queue = jQuery.queue( this, type, data );
|
92
|
+
|
93
|
+
// Ensure a hooks for this queue
|
94
|
+
jQuery._queueHooks( this, type );
|
95
|
+
|
96
|
+
if ( type === "fx" && queue[0] !== "inprogress" ) {
|
97
|
+
jQuery.dequeue( this, type );
|
98
|
+
}
|
99
|
+
});
|
100
|
+
},
|
101
|
+
dequeue: function( type ) {
|
102
|
+
return this.each(function() {
|
103
|
+
jQuery.dequeue( this, type );
|
104
|
+
});
|
105
|
+
},
|
106
|
+
clearQueue: function( type ) {
|
107
|
+
return this.queue( type || "fx", [] );
|
108
|
+
},
|
109
|
+
// Get a promise resolved when queues of a certain type
|
110
|
+
// are emptied (fx is the type by default)
|
111
|
+
promise: function( type, obj ) {
|
112
|
+
var tmp,
|
113
|
+
count = 1,
|
114
|
+
defer = jQuery.Deferred(),
|
115
|
+
elements = this,
|
116
|
+
i = this.length,
|
117
|
+
resolve = function() {
|
118
|
+
if ( !( --count ) ) {
|
119
|
+
defer.resolveWith( elements, [ elements ] );
|
120
|
+
}
|
121
|
+
};
|
122
|
+
|
123
|
+
if ( typeof type !== "string" ) {
|
124
|
+
obj = type;
|
125
|
+
type = undefined;
|
126
|
+
}
|
127
|
+
type = type || "fx";
|
128
|
+
|
129
|
+
while ( i-- ) {
|
130
|
+
tmp = data_priv.get( elements[ i ], type + "queueHooks" );
|
131
|
+
if ( tmp && tmp.empty ) {
|
132
|
+
count++;
|
133
|
+
tmp.empty.add( resolve );
|
134
|
+
}
|
135
|
+
}
|
136
|
+
resolve();
|
137
|
+
return defer.promise( obj );
|
138
|
+
}
|
139
|
+
});
|
140
|
+
|
141
|
+
return jQuery;
|
142
|
+
});
|
@@ -0,0 +1,22 @@
|
|
1
|
+
define([
|
2
|
+
"../core",
|
3
|
+
"../queue",
|
4
|
+
"../effects" // Delay is optional because of this dependency
|
5
|
+
], function( jQuery ) {
|
6
|
+
|
7
|
+
// Based off of the plugin by Clint Helfers, with permission.
|
8
|
+
// http://blindsignals.com/index.php/2009/07/jquery-delay/
|
9
|
+
jQuery.fn.delay = function( time, type ) {
|
10
|
+
time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
|
11
|
+
type = type || "fx";
|
12
|
+
|
13
|
+
return this.queue( type, function( next, hooks ) {
|
14
|
+
var timeout = setTimeout( next, time );
|
15
|
+
hooks.stop = function() {
|
16
|
+
clearTimeout( timeout );
|
17
|
+
};
|
18
|
+
});
|
19
|
+
};
|
20
|
+
|
21
|
+
return jQuery.fn.delay;
|
22
|
+
});
|
@@ -0,0 +1,172 @@
|
|
1
|
+
define([
|
2
|
+
"./core"
|
3
|
+
], function( jQuery ) {
|
4
|
+
|
5
|
+
/*
|
6
|
+
* Optional (non-Sizzle) selector module for custom builds.
|
7
|
+
*
|
8
|
+
* Note that this DOES NOT SUPPORT many documented jQuery
|
9
|
+
* features in exchange for its smaller size:
|
10
|
+
*
|
11
|
+
* Attribute not equal selector
|
12
|
+
* Positional selectors (:first; :eq(n); :odd; etc.)
|
13
|
+
* Type selectors (:input; :checkbox; :button; etc.)
|
14
|
+
* State-based selectors (:animated; :visible; :hidden; etc.)
|
15
|
+
* :has(selector)
|
16
|
+
* :not(complex selector)
|
17
|
+
* custom selectors via Sizzle extensions
|
18
|
+
* Leading combinators (e.g., $collection.find("> *"))
|
19
|
+
* Reliable functionality on XML fragments
|
20
|
+
* Requiring all parts of a selector to match elements under context
|
21
|
+
* (e.g., $div.find("div > *") now matches children of $div)
|
22
|
+
* Matching against non-elements
|
23
|
+
* Reliable sorting of disconnected nodes
|
24
|
+
* querySelectorAll bug fixes (e.g., unreliable :focus on WebKit)
|
25
|
+
*
|
26
|
+
* If any of these are unacceptable tradeoffs, either use Sizzle or
|
27
|
+
* customize this stub for the project's specific needs.
|
28
|
+
*/
|
29
|
+
|
30
|
+
var docElem = window.document.documentElement,
|
31
|
+
selector_hasDuplicate,
|
32
|
+
matches = docElem.matches ||
|
33
|
+
docElem.webkitMatchesSelector ||
|
34
|
+
docElem.mozMatchesSelector ||
|
35
|
+
docElem.oMatchesSelector ||
|
36
|
+
docElem.msMatchesSelector,
|
37
|
+
selector_sortOrder = function( a, b ) {
|
38
|
+
// Flag for duplicate removal
|
39
|
+
if ( a === b ) {
|
40
|
+
selector_hasDuplicate = true;
|
41
|
+
return 0;
|
42
|
+
}
|
43
|
+
|
44
|
+
var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );
|
45
|
+
|
46
|
+
if ( compare ) {
|
47
|
+
// Disconnected nodes
|
48
|
+
if ( compare & 1 ) {
|
49
|
+
|
50
|
+
// Choose the first element that is related to our document
|
51
|
+
if ( a === document || jQuery.contains(document, a) ) {
|
52
|
+
return -1;
|
53
|
+
}
|
54
|
+
if ( b === document || jQuery.contains(document, b) ) {
|
55
|
+
return 1;
|
56
|
+
}
|
57
|
+
|
58
|
+
// Maintain original order
|
59
|
+
return 0;
|
60
|
+
}
|
61
|
+
|
62
|
+
return compare & 4 ? -1 : 1;
|
63
|
+
}
|
64
|
+
|
65
|
+
// Not directly comparable, sort on existence of method
|
66
|
+
return a.compareDocumentPosition ? -1 : 1;
|
67
|
+
};
|
68
|
+
|
69
|
+
jQuery.extend({
|
70
|
+
find: function( selector, context, results, seed ) {
|
71
|
+
var elem, nodeType,
|
72
|
+
i = 0;
|
73
|
+
|
74
|
+
results = results || [];
|
75
|
+
context = context || document;
|
76
|
+
|
77
|
+
// Same basic safeguard as Sizzle
|
78
|
+
if ( !selector || typeof selector !== "string" ) {
|
79
|
+
return results;
|
80
|
+
}
|
81
|
+
|
82
|
+
// Early return if context is not an element or document
|
83
|
+
if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
|
84
|
+
return [];
|
85
|
+
}
|
86
|
+
|
87
|
+
if ( seed ) {
|
88
|
+
while ( (elem = seed[i++]) ) {
|
89
|
+
if ( jQuery.find.matchesSelector(elem, selector) ) {
|
90
|
+
results.push( elem );
|
91
|
+
}
|
92
|
+
}
|
93
|
+
} else {
|
94
|
+
jQuery.merge( results, context.querySelectorAll(selector) );
|
95
|
+
}
|
96
|
+
|
97
|
+
return results;
|
98
|
+
},
|
99
|
+
unique: function( results ) {
|
100
|
+
var elem,
|
101
|
+
duplicates = [],
|
102
|
+
i = 0,
|
103
|
+
j = 0;
|
104
|
+
|
105
|
+
selector_hasDuplicate = false;
|
106
|
+
results.sort( selector_sortOrder );
|
107
|
+
|
108
|
+
if ( selector_hasDuplicate ) {
|
109
|
+
while ( (elem = results[i++]) ) {
|
110
|
+
if ( elem === results[ i ] ) {
|
111
|
+
j = duplicates.push( i );
|
112
|
+
}
|
113
|
+
}
|
114
|
+
while ( j-- ) {
|
115
|
+
results.splice( duplicates[ j ], 1 );
|
116
|
+
}
|
117
|
+
}
|
118
|
+
|
119
|
+
return results;
|
120
|
+
},
|
121
|
+
text: function( elem ) {
|
122
|
+
var node,
|
123
|
+
ret = "",
|
124
|
+
i = 0,
|
125
|
+
nodeType = elem.nodeType;
|
126
|
+
|
127
|
+
if ( !nodeType ) {
|
128
|
+
// If no nodeType, this is expected to be an array
|
129
|
+
while ( (node = elem[i++]) ) {
|
130
|
+
// Do not traverse comment nodes
|
131
|
+
ret += jQuery.text( node );
|
132
|
+
}
|
133
|
+
} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
|
134
|
+
// Use textContent for elements
|
135
|
+
return elem.textContent;
|
136
|
+
} else if ( nodeType === 3 || nodeType === 4 ) {
|
137
|
+
return elem.nodeValue;
|
138
|
+
}
|
139
|
+
// Do not include comment or processing instruction nodes
|
140
|
+
|
141
|
+
return ret;
|
142
|
+
},
|
143
|
+
contains: function( a, b ) {
|
144
|
+
var adown = a.nodeType === 9 ? a.documentElement : a,
|
145
|
+
bup = b && b.parentNode;
|
146
|
+
return a === bup || !!( bup && bup.nodeType === 1 && adown.contains(bup) );
|
147
|
+
},
|
148
|
+
isXMLDoc: function( elem ) {
|
149
|
+
return (elem.ownerDocument || elem).documentElement.nodeName !== "HTML";
|
150
|
+
},
|
151
|
+
expr: {
|
152
|
+
attrHandle: {},
|
153
|
+
match: {
|
154
|
+
bool: /^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$/i,
|
155
|
+
needsContext: /^[\x20\t\r\n\f]*[>+~]/
|
156
|
+
}
|
157
|
+
}
|
158
|
+
});
|
159
|
+
|
160
|
+
jQuery.extend( jQuery.find, {
|
161
|
+
matches: function( expr, elements ) {
|
162
|
+
return jQuery.find( expr, null, null, elements );
|
163
|
+
},
|
164
|
+
matchesSelector: function( elem, expr ) {
|
165
|
+
return matches.call( elem, expr );
|
166
|
+
},
|
167
|
+
attr: function( elem, name ) {
|
168
|
+
return elem.getAttribute( name );
|
169
|
+
}
|
170
|
+
});
|
171
|
+
|
172
|
+
});
|