etcweb 1.0.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.
- 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,158 @@
|
|
|
1
|
+
define([
|
|
2
|
+
"../core",
|
|
3
|
+
"../var/rnotwhite",
|
|
4
|
+
"../var/strundefined",
|
|
5
|
+
"../data/var/data_priv",
|
|
6
|
+
"../core/init"
|
|
7
|
+
], function( jQuery, rnotwhite, strundefined, data_priv ) {
|
|
8
|
+
|
|
9
|
+
var rclass = /[\t\r\n\f]/g;
|
|
10
|
+
|
|
11
|
+
jQuery.fn.extend({
|
|
12
|
+
addClass: function( value ) {
|
|
13
|
+
var classes, elem, cur, clazz, j, finalValue,
|
|
14
|
+
proceed = typeof value === "string" && value,
|
|
15
|
+
i = 0,
|
|
16
|
+
len = this.length;
|
|
17
|
+
|
|
18
|
+
if ( jQuery.isFunction( value ) ) {
|
|
19
|
+
return this.each(function( j ) {
|
|
20
|
+
jQuery( this ).addClass( value.call( this, j, this.className ) );
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if ( proceed ) {
|
|
25
|
+
// The disjunction here is for better compressibility (see removeClass)
|
|
26
|
+
classes = ( value || "" ).match( rnotwhite ) || [];
|
|
27
|
+
|
|
28
|
+
for ( ; i < len; i++ ) {
|
|
29
|
+
elem = this[ i ];
|
|
30
|
+
cur = elem.nodeType === 1 && ( elem.className ?
|
|
31
|
+
( " " + elem.className + " " ).replace( rclass, " " ) :
|
|
32
|
+
" "
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
if ( cur ) {
|
|
36
|
+
j = 0;
|
|
37
|
+
while ( (clazz = classes[j++]) ) {
|
|
38
|
+
if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
|
|
39
|
+
cur += clazz + " ";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// only assign if different to avoid unneeded rendering.
|
|
44
|
+
finalValue = jQuery.trim( cur );
|
|
45
|
+
if ( elem.className !== finalValue ) {
|
|
46
|
+
elem.className = finalValue;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return this;
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
removeClass: function( value ) {
|
|
56
|
+
var classes, elem, cur, clazz, j, finalValue,
|
|
57
|
+
proceed = arguments.length === 0 || typeof value === "string" && value,
|
|
58
|
+
i = 0,
|
|
59
|
+
len = this.length;
|
|
60
|
+
|
|
61
|
+
if ( jQuery.isFunction( value ) ) {
|
|
62
|
+
return this.each(function( j ) {
|
|
63
|
+
jQuery( this ).removeClass( value.call( this, j, this.className ) );
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
if ( proceed ) {
|
|
67
|
+
classes = ( value || "" ).match( rnotwhite ) || [];
|
|
68
|
+
|
|
69
|
+
for ( ; i < len; i++ ) {
|
|
70
|
+
elem = this[ i ];
|
|
71
|
+
// This expression is here for better compressibility (see addClass)
|
|
72
|
+
cur = elem.nodeType === 1 && ( elem.className ?
|
|
73
|
+
( " " + elem.className + " " ).replace( rclass, " " ) :
|
|
74
|
+
""
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
if ( cur ) {
|
|
78
|
+
j = 0;
|
|
79
|
+
while ( (clazz = classes[j++]) ) {
|
|
80
|
+
// Remove *all* instances
|
|
81
|
+
while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
|
|
82
|
+
cur = cur.replace( " " + clazz + " ", " " );
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Only assign if different to avoid unneeded rendering.
|
|
87
|
+
finalValue = value ? jQuery.trim( cur ) : "";
|
|
88
|
+
if ( elem.className !== finalValue ) {
|
|
89
|
+
elem.className = finalValue;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return this;
|
|
96
|
+
},
|
|
97
|
+
|
|
98
|
+
toggleClass: function( value, stateVal ) {
|
|
99
|
+
var type = typeof value;
|
|
100
|
+
|
|
101
|
+
if ( typeof stateVal === "boolean" && type === "string" ) {
|
|
102
|
+
return stateVal ? this.addClass( value ) : this.removeClass( value );
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if ( jQuery.isFunction( value ) ) {
|
|
106
|
+
return this.each(function( i ) {
|
|
107
|
+
jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return this.each(function() {
|
|
112
|
+
if ( type === "string" ) {
|
|
113
|
+
// Toggle individual class names
|
|
114
|
+
var className,
|
|
115
|
+
i = 0,
|
|
116
|
+
self = jQuery( this ),
|
|
117
|
+
classNames = value.match( rnotwhite ) || [];
|
|
118
|
+
|
|
119
|
+
while ( (className = classNames[ i++ ]) ) {
|
|
120
|
+
// Check each className given, space separated list
|
|
121
|
+
if ( self.hasClass( className ) ) {
|
|
122
|
+
self.removeClass( className );
|
|
123
|
+
} else {
|
|
124
|
+
self.addClass( className );
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Toggle whole class name
|
|
129
|
+
} else if ( type === strundefined || type === "boolean" ) {
|
|
130
|
+
if ( this.className ) {
|
|
131
|
+
// store className if set
|
|
132
|
+
data_priv.set( this, "__className__", this.className );
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// If the element has a class name or if we're passed `false`,
|
|
136
|
+
// then remove the whole classname (if there was one, the above saved it).
|
|
137
|
+
// Otherwise bring back whatever was previously saved (if anything),
|
|
138
|
+
// falling back to the empty string if nothing was stored.
|
|
139
|
+
this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || "";
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
},
|
|
143
|
+
|
|
144
|
+
hasClass: function( selector ) {
|
|
145
|
+
var className = " " + selector + " ",
|
|
146
|
+
i = 0,
|
|
147
|
+
l = this.length;
|
|
148
|
+
for ( ; i < l; i++ ) {
|
|
149
|
+
if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
});
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
define([
|
|
2
|
+
"../core",
|
|
3
|
+
"../core/access",
|
|
4
|
+
"./support"
|
|
5
|
+
], function( jQuery, access, support ) {
|
|
6
|
+
|
|
7
|
+
var rfocusable = /^(?:input|select|textarea|button)$/i;
|
|
8
|
+
|
|
9
|
+
jQuery.fn.extend({
|
|
10
|
+
prop: function( name, value ) {
|
|
11
|
+
return access( this, jQuery.prop, name, value, arguments.length > 1 );
|
|
12
|
+
},
|
|
13
|
+
|
|
14
|
+
removeProp: function( name ) {
|
|
15
|
+
return this.each(function() {
|
|
16
|
+
delete this[ jQuery.propFix[ name ] || name ];
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
jQuery.extend({
|
|
22
|
+
propFix: {
|
|
23
|
+
"for": "htmlFor",
|
|
24
|
+
"class": "className"
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
prop: function( elem, name, value ) {
|
|
28
|
+
var ret, hooks, notxml,
|
|
29
|
+
nType = elem.nodeType;
|
|
30
|
+
|
|
31
|
+
// Don't get/set properties on text, comment and attribute nodes
|
|
32
|
+
if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
|
|
37
|
+
|
|
38
|
+
if ( notxml ) {
|
|
39
|
+
// Fix name and attach hooks
|
|
40
|
+
name = jQuery.propFix[ name ] || name;
|
|
41
|
+
hooks = jQuery.propHooks[ name ];
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if ( value !== undefined ) {
|
|
45
|
+
return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
|
|
46
|
+
ret :
|
|
47
|
+
( elem[ name ] = value );
|
|
48
|
+
|
|
49
|
+
} else {
|
|
50
|
+
return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
|
|
51
|
+
ret :
|
|
52
|
+
elem[ name ];
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
propHooks: {
|
|
57
|
+
tabIndex: {
|
|
58
|
+
get: function( elem ) {
|
|
59
|
+
return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
|
|
60
|
+
elem.tabIndex :
|
|
61
|
+
-1;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
if ( !support.optSelected ) {
|
|
68
|
+
jQuery.propHooks.selected = {
|
|
69
|
+
get: function( elem ) {
|
|
70
|
+
var parent = elem.parentNode;
|
|
71
|
+
if ( parent && parent.parentNode ) {
|
|
72
|
+
parent.parentNode.selectedIndex;
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
jQuery.each([
|
|
80
|
+
"tabIndex",
|
|
81
|
+
"readOnly",
|
|
82
|
+
"maxLength",
|
|
83
|
+
"cellSpacing",
|
|
84
|
+
"cellPadding",
|
|
85
|
+
"rowSpan",
|
|
86
|
+
"colSpan",
|
|
87
|
+
"useMap",
|
|
88
|
+
"frameBorder",
|
|
89
|
+
"contentEditable"
|
|
90
|
+
], function() {
|
|
91
|
+
jQuery.propFix[ this.toLowerCase() ] = this;
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
define([
|
|
2
|
+
"../var/support"
|
|
3
|
+
], function( support ) {
|
|
4
|
+
|
|
5
|
+
(function() {
|
|
6
|
+
var input = document.createElement( "input" ),
|
|
7
|
+
select = document.createElement( "select" ),
|
|
8
|
+
opt = select.appendChild( document.createElement( "option" ) );
|
|
9
|
+
|
|
10
|
+
input.type = "checkbox";
|
|
11
|
+
|
|
12
|
+
// Support: iOS<=5.1, Android<=4.2+
|
|
13
|
+
// Default value for a checkbox should be "on"
|
|
14
|
+
support.checkOn = input.value !== "";
|
|
15
|
+
|
|
16
|
+
// Support: IE<=11+
|
|
17
|
+
// Must access selectedIndex to make default options select
|
|
18
|
+
support.optSelected = opt.selected;
|
|
19
|
+
|
|
20
|
+
// Support: Android<=2.3
|
|
21
|
+
// Options inside disabled selects are incorrectly marked as disabled
|
|
22
|
+
select.disabled = true;
|
|
23
|
+
support.optDisabled = !opt.disabled;
|
|
24
|
+
|
|
25
|
+
// Support: IE<=11+
|
|
26
|
+
// An input loses its value after becoming a radio
|
|
27
|
+
input = document.createElement( "input" );
|
|
28
|
+
input.value = "t";
|
|
29
|
+
input.type = "radio";
|
|
30
|
+
support.radioValue = input.value === "t";
|
|
31
|
+
})();
|
|
32
|
+
|
|
33
|
+
return support;
|
|
34
|
+
|
|
35
|
+
});
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
define([
|
|
2
|
+
"../core",
|
|
3
|
+
"./support",
|
|
4
|
+
"../core/init"
|
|
5
|
+
], function( jQuery, support ) {
|
|
6
|
+
|
|
7
|
+
var rreturn = /\r/g;
|
|
8
|
+
|
|
9
|
+
jQuery.fn.extend({
|
|
10
|
+
val: function( value ) {
|
|
11
|
+
var hooks, ret, isFunction,
|
|
12
|
+
elem = this[0];
|
|
13
|
+
|
|
14
|
+
if ( !arguments.length ) {
|
|
15
|
+
if ( elem ) {
|
|
16
|
+
hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
|
|
17
|
+
|
|
18
|
+
if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
|
|
19
|
+
return ret;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
ret = elem.value;
|
|
23
|
+
|
|
24
|
+
return typeof ret === "string" ?
|
|
25
|
+
// Handle most common string cases
|
|
26
|
+
ret.replace(rreturn, "") :
|
|
27
|
+
// Handle cases where value is null/undef or number
|
|
28
|
+
ret == null ? "" : ret;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
isFunction = jQuery.isFunction( value );
|
|
35
|
+
|
|
36
|
+
return this.each(function( i ) {
|
|
37
|
+
var val;
|
|
38
|
+
|
|
39
|
+
if ( this.nodeType !== 1 ) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if ( isFunction ) {
|
|
44
|
+
val = value.call( this, i, jQuery( this ).val() );
|
|
45
|
+
} else {
|
|
46
|
+
val = value;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Treat null/undefined as ""; convert numbers to string
|
|
50
|
+
if ( val == null ) {
|
|
51
|
+
val = "";
|
|
52
|
+
|
|
53
|
+
} else if ( typeof val === "number" ) {
|
|
54
|
+
val += "";
|
|
55
|
+
|
|
56
|
+
} else if ( jQuery.isArray( val ) ) {
|
|
57
|
+
val = jQuery.map( val, function( value ) {
|
|
58
|
+
return value == null ? "" : value + "";
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
|
|
63
|
+
|
|
64
|
+
// If set returns undefined, fall back to normal setting
|
|
65
|
+
if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
|
|
66
|
+
this.value = val;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
jQuery.extend({
|
|
73
|
+
valHooks: {
|
|
74
|
+
option: {
|
|
75
|
+
get: function( elem ) {
|
|
76
|
+
var val = jQuery.find.attr( elem, "value" );
|
|
77
|
+
return val != null ?
|
|
78
|
+
val :
|
|
79
|
+
// Support: IE10-11+
|
|
80
|
+
// option.text throws exceptions (#14686, #14858)
|
|
81
|
+
jQuery.trim( jQuery.text( elem ) );
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
select: {
|
|
85
|
+
get: function( elem ) {
|
|
86
|
+
var value, option,
|
|
87
|
+
options = elem.options,
|
|
88
|
+
index = elem.selectedIndex,
|
|
89
|
+
one = elem.type === "select-one" || index < 0,
|
|
90
|
+
values = one ? null : [],
|
|
91
|
+
max = one ? index + 1 : options.length,
|
|
92
|
+
i = index < 0 ?
|
|
93
|
+
max :
|
|
94
|
+
one ? index : 0;
|
|
95
|
+
|
|
96
|
+
// Loop through all the selected options
|
|
97
|
+
for ( ; i < max; i++ ) {
|
|
98
|
+
option = options[ i ];
|
|
99
|
+
|
|
100
|
+
// IE6-9 doesn't update selected after form reset (#2551)
|
|
101
|
+
if ( ( option.selected || i === index ) &&
|
|
102
|
+
// Don't return options that are disabled or in a disabled optgroup
|
|
103
|
+
( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) &&
|
|
104
|
+
( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
|
|
105
|
+
|
|
106
|
+
// Get the specific value for the option
|
|
107
|
+
value = jQuery( option ).val();
|
|
108
|
+
|
|
109
|
+
// We don't need an array for one selects
|
|
110
|
+
if ( one ) {
|
|
111
|
+
return value;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Multi-Selects return an array
|
|
115
|
+
values.push( value );
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return values;
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
set: function( elem, value ) {
|
|
123
|
+
var optionSet, option,
|
|
124
|
+
options = elem.options,
|
|
125
|
+
values = jQuery.makeArray( value ),
|
|
126
|
+
i = options.length;
|
|
127
|
+
|
|
128
|
+
while ( i-- ) {
|
|
129
|
+
option = options[ i ];
|
|
130
|
+
if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {
|
|
131
|
+
optionSet = true;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Force browsers to behave consistently when non-matching value is set
|
|
136
|
+
if ( !optionSet ) {
|
|
137
|
+
elem.selectedIndex = -1;
|
|
138
|
+
}
|
|
139
|
+
return values;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// Radios and checkboxes getter/setter
|
|
146
|
+
jQuery.each([ "radio", "checkbox" ], function() {
|
|
147
|
+
jQuery.valHooks[ this ] = {
|
|
148
|
+
set: function( elem, value ) {
|
|
149
|
+
if ( jQuery.isArray( value ) ) {
|
|
150
|
+
return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
if ( !support.checkOn ) {
|
|
155
|
+
jQuery.valHooks[ this ].get = function( elem ) {
|
|
156
|
+
return elem.getAttribute("value") === null ? "on" : elem.value;
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
});
|