etcweb 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. checksums.yaml +7 -0
  2. data/.bowerrc +3 -0
  3. data/.gitignore +9 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +19 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +36 -0
  9. data/Rakefile +1 -0
  10. data/app/bower_components/jquery/.bower.json +37 -0
  11. data/app/bower_components/jquery/MIT-LICENSE.txt +21 -0
  12. data/app/bower_components/jquery/bower.json +27 -0
  13. data/app/bower_components/jquery/dist/jquery.js +9205 -0
  14. data/app/bower_components/jquery/dist/jquery.min.js +5 -0
  15. data/app/bower_components/jquery/dist/jquery.min.map +1 -0
  16. data/app/bower_components/jquery/src/ajax.js +786 -0
  17. data/app/bower_components/jquery/src/ajax/jsonp.js +89 -0
  18. data/app/bower_components/jquery/src/ajax/load.js +75 -0
  19. data/app/bower_components/jquery/src/ajax/parseJSON.js +13 -0
  20. data/app/bower_components/jquery/src/ajax/parseXML.js +28 -0
  21. data/app/bower_components/jquery/src/ajax/script.js +64 -0
  22. data/app/bower_components/jquery/src/ajax/var/nonce.js +5 -0
  23. data/app/bower_components/jquery/src/ajax/var/rquery.js +3 -0
  24. data/app/bower_components/jquery/src/ajax/xhr.js +136 -0
  25. data/app/bower_components/jquery/src/attributes.js +11 -0
  26. data/app/bower_components/jquery/src/attributes/attr.js +141 -0
  27. data/app/bower_components/jquery/src/attributes/classes.js +158 -0
  28. data/app/bower_components/jquery/src/attributes/prop.js +94 -0
  29. data/app/bower_components/jquery/src/attributes/support.js +35 -0
  30. data/app/bower_components/jquery/src/attributes/val.js +161 -0
  31. data/app/bower_components/jquery/src/callbacks.js +205 -0
  32. data/app/bower_components/jquery/src/core.js +497 -0
  33. data/app/bower_components/jquery/src/core/access.js +60 -0
  34. data/app/bower_components/jquery/src/core/init.js +123 -0
  35. data/app/bower_components/jquery/src/core/parseHTML.js +39 -0
  36. data/app/bower_components/jquery/src/core/ready.js +97 -0
  37. data/app/bower_components/jquery/src/core/var/rsingleTag.js +4 -0
  38. data/app/bower_components/jquery/src/css.js +450 -0
  39. data/app/bower_components/jquery/src/css/addGetHookIf.js +22 -0
  40. data/app/bower_components/jquery/src/css/curCSS.js +57 -0
  41. data/app/bower_components/jquery/src/css/defaultDisplay.js +70 -0
  42. data/app/bower_components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  43. data/app/bower_components/jquery/src/css/support.js +96 -0
  44. data/app/bower_components/jquery/src/css/swap.js +28 -0
  45. data/app/bower_components/jquery/src/css/var/cssExpand.js +3 -0
  46. data/app/bower_components/jquery/src/css/var/getStyles.js +12 -0
  47. data/app/bower_components/jquery/src/css/var/isHidden.js +13 -0
  48. data/app/bower_components/jquery/src/css/var/rmargin.js +3 -0
  49. data/app/bower_components/jquery/src/css/var/rnumnonpx.js +5 -0
  50. data/app/bower_components/jquery/src/data.js +178 -0
  51. data/app/bower_components/jquery/src/data/Data.js +181 -0
  52. data/app/bower_components/jquery/src/data/accepts.js +20 -0
  53. data/app/bower_components/jquery/src/data/var/data_priv.js +5 -0
  54. data/app/bower_components/jquery/src/data/var/data_user.js +5 -0
  55. data/app/bower_components/jquery/src/deferred.js +149 -0
  56. data/app/bower_components/jquery/src/deprecated.js +13 -0
  57. data/app/bower_components/jquery/src/dimensions.js +50 -0
  58. data/app/bower_components/jquery/src/effects.js +648 -0
  59. data/app/bower_components/jquery/src/effects/Tween.js +114 -0
  60. data/app/bower_components/jquery/src/effects/animatedSelector.js +13 -0
  61. data/app/bower_components/jquery/src/event.js +868 -0
  62. data/app/bower_components/jquery/src/event/ajax.js +13 -0
  63. data/app/bower_components/jquery/src/event/alias.js +39 -0
  64. data/app/bower_components/jquery/src/event/support.js +9 -0
  65. data/app/bower_components/jquery/src/exports/amd.js +24 -0
  66. data/app/bower_components/jquery/src/exports/global.js +32 -0
  67. data/app/bower_components/jquery/src/intro.js +44 -0
  68. data/app/bower_components/jquery/src/jquery.js +37 -0
  69. data/app/bower_components/jquery/src/manipulation.js +580 -0
  70. data/app/bower_components/jquery/src/manipulation/_evalUrl.js +18 -0
  71. data/app/bower_components/jquery/src/manipulation/support.js +32 -0
  72. data/app/bower_components/jquery/src/manipulation/var/rcheckableType.js +3 -0
  73. data/app/bower_components/jquery/src/offset.js +207 -0
  74. data/app/bower_components/jquery/src/outro.js +1 -0
  75. data/app/bower_components/jquery/src/queue.js +142 -0
  76. data/app/bower_components/jquery/src/queue/delay.js +22 -0
  77. data/app/bower_components/jquery/src/selector-native.js +172 -0
  78. data/app/bower_components/jquery/src/selector-sizzle.js +14 -0
  79. data/app/bower_components/jquery/src/selector.js +1 -0
  80. data/app/bower_components/jquery/src/serialize.js +111 -0
  81. data/app/bower_components/jquery/src/sizzle/dist/sizzle.js +2067 -0
  82. data/app/bower_components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  83. data/app/bower_components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  84. data/app/bower_components/jquery/src/traversing.js +199 -0
  85. data/app/bower_components/jquery/src/traversing/findFilter.js +100 -0
  86. data/app/bower_components/jquery/src/traversing/var/rneedsContext.js +6 -0
  87. data/app/bower_components/jquery/src/var/arr.js +3 -0
  88. data/app/bower_components/jquery/src/var/class2type.js +4 -0
  89. data/app/bower_components/jquery/src/var/concat.js +5 -0
  90. data/app/bower_components/jquery/src/var/hasOwn.js +5 -0
  91. data/app/bower_components/jquery/src/var/indexOf.js +5 -0
  92. data/app/bower_components/jquery/src/var/pnum.js +3 -0
  93. data/app/bower_components/jquery/src/var/push.js +5 -0
  94. data/app/bower_components/jquery/src/var/rnotwhite.js +3 -0
  95. data/app/bower_components/jquery/src/var/slice.js +5 -0
  96. data/app/bower_components/jquery/src/var/strundefined.js +3 -0
  97. data/app/bower_components/jquery/src/var/support.js +4 -0
  98. data/app/bower_components/jquery/src/var/toString.js +5 -0
  99. data/app/bower_components/jquery/src/wrap.js +79 -0
  100. data/app/stylesheets/application.scss +31 -0
  101. data/app/views/dir.haml +95 -0
  102. data/app/views/etcd_error.haml +5 -0
  103. data/app/views/etcvault_keys_select.haml +6 -0
  104. data/app/views/index.haml +1 -0
  105. data/app/views/key.haml +68 -0
  106. data/app/views/keys.haml +30 -0
  107. data/app/views/layout.haml +20 -0
  108. data/bin/console +14 -0
  109. data/bin/setup +7 -0
  110. data/config.ru +19 -0
  111. data/etcweb.gemspec +37 -0
  112. data/lib/etcweb.rb +6 -0
  113. data/lib/etcweb/app.rb +230 -0
  114. data/lib/etcweb/version.rb +3 -0
  115. metadata +331 -0
@@ -0,0 +1,205 @@
1
+ define([
2
+ "./core",
3
+ "./var/rnotwhite"
4
+ ], function( jQuery, rnotwhite ) {
5
+
6
+ // String to Object options format cache
7
+ var optionsCache = {};
8
+
9
+ // Convert String-formatted options into Object-formatted ones and store in cache
10
+ function createOptions( options ) {
11
+ var object = optionsCache[ options ] = {};
12
+ jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
13
+ object[ flag ] = true;
14
+ });
15
+ return object;
16
+ }
17
+
18
+ /*
19
+ * Create a callback list using the following parameters:
20
+ *
21
+ * options: an optional list of space-separated options that will change how
22
+ * the callback list behaves or a more traditional option object
23
+ *
24
+ * By default a callback list will act like an event callback list and can be
25
+ * "fired" multiple times.
26
+ *
27
+ * Possible options:
28
+ *
29
+ * once: will ensure the callback list can only be fired once (like a Deferred)
30
+ *
31
+ * memory: will keep track of previous values and will call any callback added
32
+ * after the list has been fired right away with the latest "memorized"
33
+ * values (like a Deferred)
34
+ *
35
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
36
+ *
37
+ * stopOnFalse: interrupt callings when a callback returns false
38
+ *
39
+ */
40
+ jQuery.Callbacks = function( options ) {
41
+
42
+ // Convert options from String-formatted to Object-formatted if needed
43
+ // (we check in cache first)
44
+ options = typeof options === "string" ?
45
+ ( optionsCache[ options ] || createOptions( options ) ) :
46
+ jQuery.extend( {}, options );
47
+
48
+ var // Last fire value (for non-forgettable lists)
49
+ memory,
50
+ // Flag to know if list was already fired
51
+ fired,
52
+ // Flag to know if list is currently firing
53
+ firing,
54
+ // First callback to fire (used internally by add and fireWith)
55
+ firingStart,
56
+ // End of the loop when firing
57
+ firingLength,
58
+ // Index of currently firing callback (modified by remove if needed)
59
+ firingIndex,
60
+ // Actual callback list
61
+ list = [],
62
+ // Stack of fire calls for repeatable lists
63
+ stack = !options.once && [],
64
+ // Fire callbacks
65
+ fire = function( data ) {
66
+ memory = options.memory && data;
67
+ fired = true;
68
+ firingIndex = firingStart || 0;
69
+ firingStart = 0;
70
+ firingLength = list.length;
71
+ firing = true;
72
+ for ( ; list && firingIndex < firingLength; firingIndex++ ) {
73
+ if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
74
+ memory = false; // To prevent further calls using add
75
+ break;
76
+ }
77
+ }
78
+ firing = false;
79
+ if ( list ) {
80
+ if ( stack ) {
81
+ if ( stack.length ) {
82
+ fire( stack.shift() );
83
+ }
84
+ } else if ( memory ) {
85
+ list = [];
86
+ } else {
87
+ self.disable();
88
+ }
89
+ }
90
+ },
91
+ // Actual Callbacks object
92
+ self = {
93
+ // Add a callback or a collection of callbacks to the list
94
+ add: function() {
95
+ if ( list ) {
96
+ // First, we save the current length
97
+ var start = list.length;
98
+ (function add( args ) {
99
+ jQuery.each( args, function( _, arg ) {
100
+ var type = jQuery.type( arg );
101
+ if ( type === "function" ) {
102
+ if ( !options.unique || !self.has( arg ) ) {
103
+ list.push( arg );
104
+ }
105
+ } else if ( arg && arg.length && type !== "string" ) {
106
+ // Inspect recursively
107
+ add( arg );
108
+ }
109
+ });
110
+ })( arguments );
111
+ // Do we need to add the callbacks to the
112
+ // current firing batch?
113
+ if ( firing ) {
114
+ firingLength = list.length;
115
+ // With memory, if we're not firing then
116
+ // we should call right away
117
+ } else if ( memory ) {
118
+ firingStart = start;
119
+ fire( memory );
120
+ }
121
+ }
122
+ return this;
123
+ },
124
+ // Remove a callback from the list
125
+ remove: function() {
126
+ if ( list ) {
127
+ jQuery.each( arguments, function( _, arg ) {
128
+ var index;
129
+ while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
130
+ list.splice( index, 1 );
131
+ // Handle firing indexes
132
+ if ( firing ) {
133
+ if ( index <= firingLength ) {
134
+ firingLength--;
135
+ }
136
+ if ( index <= firingIndex ) {
137
+ firingIndex--;
138
+ }
139
+ }
140
+ }
141
+ });
142
+ }
143
+ return this;
144
+ },
145
+ // Check if a given callback is in the list.
146
+ // If no argument is given, return whether or not list has callbacks attached.
147
+ has: function( fn ) {
148
+ return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
149
+ },
150
+ // Remove all callbacks from the list
151
+ empty: function() {
152
+ list = [];
153
+ firingLength = 0;
154
+ return this;
155
+ },
156
+ // Have the list do nothing anymore
157
+ disable: function() {
158
+ list = stack = memory = undefined;
159
+ return this;
160
+ },
161
+ // Is it disabled?
162
+ disabled: function() {
163
+ return !list;
164
+ },
165
+ // Lock the list in its current state
166
+ lock: function() {
167
+ stack = undefined;
168
+ if ( !memory ) {
169
+ self.disable();
170
+ }
171
+ return this;
172
+ },
173
+ // Is it locked?
174
+ locked: function() {
175
+ return !stack;
176
+ },
177
+ // Call all callbacks with the given context and arguments
178
+ fireWith: function( context, args ) {
179
+ if ( list && ( !fired || stack ) ) {
180
+ args = args || [];
181
+ args = [ context, args.slice ? args.slice() : args ];
182
+ if ( firing ) {
183
+ stack.push( args );
184
+ } else {
185
+ fire( args );
186
+ }
187
+ }
188
+ return this;
189
+ },
190
+ // Call all the callbacks with the given arguments
191
+ fire: function() {
192
+ self.fireWith( this, arguments );
193
+ return this;
194
+ },
195
+ // To know if the callbacks have already been called at least once
196
+ fired: function() {
197
+ return !!fired;
198
+ }
199
+ };
200
+
201
+ return self;
202
+ };
203
+
204
+ return jQuery;
205
+ });
@@ -0,0 +1,497 @@
1
+ define([
2
+ "./var/arr",
3
+ "./var/slice",
4
+ "./var/concat",
5
+ "./var/push",
6
+ "./var/indexOf",
7
+ "./var/class2type",
8
+ "./var/toString",
9
+ "./var/hasOwn",
10
+ "./var/support"
11
+ ], function( arr, slice, concat, push, indexOf, class2type, toString, hasOwn, support ) {
12
+
13
+ var
14
+ // Use the correct document accordingly with window argument (sandbox)
15
+ document = window.document,
16
+
17
+ version = "@VERSION",
18
+
19
+ // Define a local copy of jQuery
20
+ jQuery = function( selector, context ) {
21
+ // The jQuery object is actually just the init constructor 'enhanced'
22
+ // Need init if jQuery is called (just allow error to be thrown if not included)
23
+ return new jQuery.fn.init( selector, context );
24
+ },
25
+
26
+ // Support: Android<4.1
27
+ // Make sure we trim BOM and NBSP
28
+ rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
29
+
30
+ // Matches dashed string for camelizing
31
+ rmsPrefix = /^-ms-/,
32
+ rdashAlpha = /-([\da-z])/gi,
33
+
34
+ // Used by jQuery.camelCase as callback to replace()
35
+ fcamelCase = function( all, letter ) {
36
+ return letter.toUpperCase();
37
+ };
38
+
39
+ jQuery.fn = jQuery.prototype = {
40
+ // The current version of jQuery being used
41
+ jquery: version,
42
+
43
+ constructor: jQuery,
44
+
45
+ // Start with an empty selector
46
+ selector: "",
47
+
48
+ // The default length of a jQuery object is 0
49
+ length: 0,
50
+
51
+ toArray: function() {
52
+ return slice.call( this );
53
+ },
54
+
55
+ // Get the Nth element in the matched element set OR
56
+ // Get the whole matched element set as a clean array
57
+ get: function( num ) {
58
+ return num != null ?
59
+
60
+ // Return just the one element from the set
61
+ ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
62
+
63
+ // Return all the elements in a clean array
64
+ slice.call( this );
65
+ },
66
+
67
+ // Take an array of elements and push it onto the stack
68
+ // (returning the new matched element set)
69
+ pushStack: function( elems ) {
70
+
71
+ // Build a new jQuery matched element set
72
+ var ret = jQuery.merge( this.constructor(), elems );
73
+
74
+ // Add the old object onto the stack (as a reference)
75
+ ret.prevObject = this;
76
+ ret.context = this.context;
77
+
78
+ // Return the newly-formed element set
79
+ return ret;
80
+ },
81
+
82
+ // Execute a callback for every element in the matched set.
83
+ // (You can seed the arguments with an array of args, but this is
84
+ // only used internally.)
85
+ each: function( callback, args ) {
86
+ return jQuery.each( this, callback, args );
87
+ },
88
+
89
+ map: function( callback ) {
90
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
91
+ return callback.call( elem, i, elem );
92
+ }));
93
+ },
94
+
95
+ slice: function() {
96
+ return this.pushStack( slice.apply( this, arguments ) );
97
+ },
98
+
99
+ first: function() {
100
+ return this.eq( 0 );
101
+ },
102
+
103
+ last: function() {
104
+ return this.eq( -1 );
105
+ },
106
+
107
+ eq: function( i ) {
108
+ var len = this.length,
109
+ j = +i + ( i < 0 ? len : 0 );
110
+ return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
111
+ },
112
+
113
+ end: function() {
114
+ return this.prevObject || this.constructor(null);
115
+ },
116
+
117
+ // For internal use only.
118
+ // Behaves like an Array's method, not like a jQuery method.
119
+ push: push,
120
+ sort: arr.sort,
121
+ splice: arr.splice
122
+ };
123
+
124
+ jQuery.extend = jQuery.fn.extend = function() {
125
+ var options, name, src, copy, copyIsArray, clone,
126
+ target = arguments[0] || {},
127
+ i = 1,
128
+ length = arguments.length,
129
+ deep = false;
130
+
131
+ // Handle a deep copy situation
132
+ if ( typeof target === "boolean" ) {
133
+ deep = target;
134
+
135
+ // Skip the boolean and the target
136
+ target = arguments[ i ] || {};
137
+ i++;
138
+ }
139
+
140
+ // Handle case when target is a string or something (possible in deep copy)
141
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
142
+ target = {};
143
+ }
144
+
145
+ // Extend jQuery itself if only one argument is passed
146
+ if ( i === length ) {
147
+ target = this;
148
+ i--;
149
+ }
150
+
151
+ for ( ; i < length; i++ ) {
152
+ // Only deal with non-null/undefined values
153
+ if ( (options = arguments[ i ]) != null ) {
154
+ // Extend the base object
155
+ for ( name in options ) {
156
+ src = target[ name ];
157
+ copy = options[ name ];
158
+
159
+ // Prevent never-ending loop
160
+ if ( target === copy ) {
161
+ continue;
162
+ }
163
+
164
+ // Recurse if we're merging plain objects or arrays
165
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
166
+ if ( copyIsArray ) {
167
+ copyIsArray = false;
168
+ clone = src && jQuery.isArray(src) ? src : [];
169
+
170
+ } else {
171
+ clone = src && jQuery.isPlainObject(src) ? src : {};
172
+ }
173
+
174
+ // Never move original objects, clone them
175
+ target[ name ] = jQuery.extend( deep, clone, copy );
176
+
177
+ // Don't bring in undefined values
178
+ } else if ( copy !== undefined ) {
179
+ target[ name ] = copy;
180
+ }
181
+ }
182
+ }
183
+ }
184
+
185
+ // Return the modified object
186
+ return target;
187
+ };
188
+
189
+ jQuery.extend({
190
+ // Unique for each copy of jQuery on the page
191
+ expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
192
+
193
+ // Assume jQuery is ready without the ready module
194
+ isReady: true,
195
+
196
+ error: function( msg ) {
197
+ throw new Error( msg );
198
+ },
199
+
200
+ noop: function() {},
201
+
202
+ isFunction: function( obj ) {
203
+ return jQuery.type(obj) === "function";
204
+ },
205
+
206
+ isArray: Array.isArray,
207
+
208
+ isWindow: function( obj ) {
209
+ return obj != null && obj === obj.window;
210
+ },
211
+
212
+ isNumeric: function( obj ) {
213
+ // parseFloat NaNs numeric-cast false positives (null|true|false|"")
214
+ // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
215
+ // subtraction forces infinities to NaN
216
+ // adding 1 corrects loss of precision from parseFloat (#15100)
217
+ return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
218
+ },
219
+
220
+ isPlainObject: function( obj ) {
221
+ // Not plain objects:
222
+ // - Any object or value whose internal [[Class]] property is not "[object Object]"
223
+ // - DOM nodes
224
+ // - window
225
+ if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
226
+ return false;
227
+ }
228
+
229
+ if ( obj.constructor &&
230
+ !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
231
+ return false;
232
+ }
233
+
234
+ // If the function hasn't returned already, we're confident that
235
+ // |obj| is a plain object, created by {} or constructed with new Object
236
+ return true;
237
+ },
238
+
239
+ isEmptyObject: function( obj ) {
240
+ var name;
241
+ for ( name in obj ) {
242
+ return false;
243
+ }
244
+ return true;
245
+ },
246
+
247
+ type: function( obj ) {
248
+ if ( obj == null ) {
249
+ return obj + "";
250
+ }
251
+ // Support: Android<4.0, iOS<6 (functionish RegExp)
252
+ return typeof obj === "object" || typeof obj === "function" ?
253
+ class2type[ toString.call(obj) ] || "object" :
254
+ typeof obj;
255
+ },
256
+
257
+ // Evaluates a script in a global context
258
+ globalEval: function( code ) {
259
+ var script,
260
+ indirect = eval;
261
+
262
+ code = jQuery.trim( code );
263
+
264
+ if ( code ) {
265
+ // If the code includes a valid, prologue position
266
+ // strict mode pragma, execute code by injecting a
267
+ // script tag into the document.
268
+ if ( code.indexOf("use strict") === 1 ) {
269
+ script = document.createElement("script");
270
+ script.text = code;
271
+ document.head.appendChild( script ).parentNode.removeChild( script );
272
+ } else {
273
+ // Otherwise, avoid the DOM node creation, insertion
274
+ // and removal by using an indirect global eval
275
+ indirect( code );
276
+ }
277
+ }
278
+ },
279
+
280
+ // Convert dashed to camelCase; used by the css and data modules
281
+ // Support: IE9-11+
282
+ // Microsoft forgot to hump their vendor prefix (#9572)
283
+ camelCase: function( string ) {
284
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
285
+ },
286
+
287
+ nodeName: function( elem, name ) {
288
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
289
+ },
290
+
291
+ // args is for internal usage only
292
+ each: function( obj, callback, args ) {
293
+ var value,
294
+ i = 0,
295
+ length = obj.length,
296
+ isArray = isArraylike( obj );
297
+
298
+ if ( args ) {
299
+ if ( isArray ) {
300
+ for ( ; i < length; i++ ) {
301
+ value = callback.apply( obj[ i ], args );
302
+
303
+ if ( value === false ) {
304
+ break;
305
+ }
306
+ }
307
+ } else {
308
+ for ( i in obj ) {
309
+ value = callback.apply( obj[ i ], args );
310
+
311
+ if ( value === false ) {
312
+ break;
313
+ }
314
+ }
315
+ }
316
+
317
+ // A special, fast, case for the most common use of each
318
+ } else {
319
+ if ( isArray ) {
320
+ for ( ; i < length; i++ ) {
321
+ value = callback.call( obj[ i ], i, obj[ i ] );
322
+
323
+ if ( value === false ) {
324
+ break;
325
+ }
326
+ }
327
+ } else {
328
+ for ( i in obj ) {
329
+ value = callback.call( obj[ i ], i, obj[ i ] );
330
+
331
+ if ( value === false ) {
332
+ break;
333
+ }
334
+ }
335
+ }
336
+ }
337
+
338
+ return obj;
339
+ },
340
+
341
+ // Support: Android<4.1
342
+ trim: function( text ) {
343
+ return text == null ?
344
+ "" :
345
+ ( text + "" ).replace( rtrim, "" );
346
+ },
347
+
348
+ // results is for internal usage only
349
+ makeArray: function( arr, results ) {
350
+ var ret = results || [];
351
+
352
+ if ( arr != null ) {
353
+ if ( isArraylike( Object(arr) ) ) {
354
+ jQuery.merge( ret,
355
+ typeof arr === "string" ?
356
+ [ arr ] : arr
357
+ );
358
+ } else {
359
+ push.call( ret, arr );
360
+ }
361
+ }
362
+
363
+ return ret;
364
+ },
365
+
366
+ inArray: function( elem, arr, i ) {
367
+ return arr == null ? -1 : indexOf.call( arr, elem, i );
368
+ },
369
+
370
+ merge: function( first, second ) {
371
+ var len = +second.length,
372
+ j = 0,
373
+ i = first.length;
374
+
375
+ for ( ; j < len; j++ ) {
376
+ first[ i++ ] = second[ j ];
377
+ }
378
+
379
+ first.length = i;
380
+
381
+ return first;
382
+ },
383
+
384
+ grep: function( elems, callback, invert ) {
385
+ var callbackInverse,
386
+ matches = [],
387
+ i = 0,
388
+ length = elems.length,
389
+ callbackExpect = !invert;
390
+
391
+ // Go through the array, only saving the items
392
+ // that pass the validator function
393
+ for ( ; i < length; i++ ) {
394
+ callbackInverse = !callback( elems[ i ], i );
395
+ if ( callbackInverse !== callbackExpect ) {
396
+ matches.push( elems[ i ] );
397
+ }
398
+ }
399
+
400
+ return matches;
401
+ },
402
+
403
+ // arg is for internal usage only
404
+ map: function( elems, callback, arg ) {
405
+ var value,
406
+ i = 0,
407
+ length = elems.length,
408
+ isArray = isArraylike( elems ),
409
+ ret = [];
410
+
411
+ // Go through the array, translating each of the items to their new values
412
+ if ( isArray ) {
413
+ for ( ; i < length; i++ ) {
414
+ value = callback( elems[ i ], i, arg );
415
+
416
+ if ( value != null ) {
417
+ ret.push( value );
418
+ }
419
+ }
420
+
421
+ // Go through every key on the object,
422
+ } else {
423
+ for ( i in elems ) {
424
+ value = callback( elems[ i ], i, arg );
425
+
426
+ if ( value != null ) {
427
+ ret.push( value );
428
+ }
429
+ }
430
+ }
431
+
432
+ // Flatten any nested arrays
433
+ return concat.apply( [], ret );
434
+ },
435
+
436
+ // A global GUID counter for objects
437
+ guid: 1,
438
+
439
+ // Bind a function to a context, optionally partially applying any
440
+ // arguments.
441
+ proxy: function( fn, context ) {
442
+ var tmp, args, proxy;
443
+
444
+ if ( typeof context === "string" ) {
445
+ tmp = fn[ context ];
446
+ context = fn;
447
+ fn = tmp;
448
+ }
449
+
450
+ // Quick check to determine if target is callable, in the spec
451
+ // this throws a TypeError, but we will just return undefined.
452
+ if ( !jQuery.isFunction( fn ) ) {
453
+ return undefined;
454
+ }
455
+
456
+ // Simulated bind
457
+ args = slice.call( arguments, 2 );
458
+ proxy = function() {
459
+ return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
460
+ };
461
+
462
+ // Set the guid of unique handler to the same of original handler, so it can be removed
463
+ proxy.guid = fn.guid = fn.guid || jQuery.guid++;
464
+
465
+ return proxy;
466
+ },
467
+
468
+ now: Date.now,
469
+
470
+ // jQuery.support is not used in Core but other projects attach their
471
+ // properties to it so it needs to exist.
472
+ support: support
473
+ });
474
+
475
+ // Populate the class2type map
476
+ jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
477
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
478
+ });
479
+
480
+ function isArraylike( obj ) {
481
+ var length = obj.length,
482
+ type = jQuery.type( obj );
483
+
484
+ if ( type === "function" || jQuery.isWindow( obj ) ) {
485
+ return false;
486
+ }
487
+
488
+ if ( obj.nodeType === 1 && length ) {
489
+ return true;
490
+ }
491
+
492
+ return type === "array" || length === 0 ||
493
+ typeof length === "number" && length > 0 && ( length - 1 ) in obj;
494
+ }
495
+
496
+ return jQuery;
497
+ });