guff-compass 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (186) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +21 -0
  3. data/.gitignore +6 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +21 -0
  6. data/demo/bower_components/jquery/.bower.json +21 -0
  7. data/demo/bower_components/jquery/.editorconfig +43 -0
  8. data/demo/bower_components/jquery/.gitattributes +2 -0
  9. data/demo/bower_components/jquery/.gitignore +14 -0
  10. data/demo/bower_components/jquery/.gitmodules +6 -0
  11. data/demo/bower_components/jquery/.jshintrc +17 -0
  12. data/demo/bower_components/jquery/.mailmap +94 -0
  13. data/demo/bower_components/jquery/AUTHORS.txt +170 -0
  14. data/demo/bower_components/jquery/CONTRIBUTING.md +216 -0
  15. data/demo/bower_components/jquery/Gruntfile.js +594 -0
  16. data/demo/bower_components/jquery/MIT-LICENSE.txt +21 -0
  17. data/demo/bower_components/jquery/README.md +398 -0
  18. data/demo/bower_components/jquery/bower.json +11 -0
  19. data/demo/bower_components/jquery/build/release-notes.js +59 -0
  20. data/demo/bower_components/jquery/build/release.js +316 -0
  21. data/demo/bower_components/jquery/component.json +15 -0
  22. data/demo/bower_components/jquery/composer.json +35 -0
  23. data/demo/bower_components/jquery/jquery-migrate.js +511 -0
  24. data/demo/bower_components/jquery/jquery-migrate.min.js +3 -0
  25. data/demo/bower_components/jquery/jquery.js +9789 -0
  26. data/demo/bower_components/jquery/jquery.min.js +6 -0
  27. data/demo/bower_components/jquery/jquery.min.map +1 -0
  28. data/demo/bower_components/jquery/package.json +38 -0
  29. data/demo/bower_components/jquery/speed/benchmark.js +15 -0
  30. data/demo/bower_components/jquery/speed/benchmarker.css +65 -0
  31. data/demo/bower_components/jquery/speed/benchmarker.js +181 -0
  32. data/demo/bower_components/jquery/speed/closest.html +39 -0
  33. data/demo/bower_components/jquery/speed/css.html +82 -0
  34. data/demo/bower_components/jquery/speed/event.html +58 -0
  35. data/demo/bower_components/jquery/speed/filter.html +183 -0
  36. data/demo/bower_components/jquery/speed/find.html +179 -0
  37. data/demo/bower_components/jquery/speed/index.html +72 -0
  38. data/demo/bower_components/jquery/speed/jquery-basis.js +6238 -0
  39. data/demo/bower_components/jquery/speed/slice.vs.concat.html +47 -0
  40. data/demo/bower_components/jquery/src/.jshintrc +27 -0
  41. data/demo/bower_components/jquery/src/ajax.js +855 -0
  42. data/demo/bower_components/jquery/src/ajax/jsonp.js +80 -0
  43. data/demo/bower_components/jquery/src/ajax/script.js +86 -0
  44. data/demo/bower_components/jquery/src/ajax/xhr.js +207 -0
  45. data/demo/bower_components/jquery/src/attributes.js +659 -0
  46. data/demo/bower_components/jquery/src/callbacks.js +197 -0
  47. data/demo/bower_components/jquery/src/core.js +981 -0
  48. data/demo/bower_components/jquery/src/css.js +661 -0
  49. data/demo/bower_components/jquery/src/data.js +336 -0
  50. data/demo/bower_components/jquery/src/deferred.js +141 -0
  51. data/demo/bower_components/jquery/src/deprecated.js +11 -0
  52. data/demo/bower_components/jquery/src/dimensions.js +41 -0
  53. data/demo/bower_components/jquery/src/effects.js +732 -0
  54. data/demo/bower_components/jquery/src/event-alias.js +32 -0
  55. data/demo/bower_components/jquery/src/event.js +995 -0
  56. data/demo/bower_components/jquery/src/exports.js +21 -0
  57. data/demo/bower_components/jquery/src/intro.js +20 -0
  58. data/demo/bower_components/jquery/src/manipulation.js +744 -0
  59. data/demo/bower_components/jquery/src/offset.js +169 -0
  60. data/demo/bower_components/jquery/src/outro.js +2 -0
  61. data/demo/bower_components/jquery/src/queue.js +146 -0
  62. data/demo/bower_components/jquery/src/serialize.js +99 -0
  63. data/demo/bower_components/jquery/src/sizzle-jquery.js +7 -0
  64. data/demo/bower_components/jquery/src/support.js +246 -0
  65. data/demo/bower_components/jquery/src/traversing.js +283 -0
  66. data/demo/bower_components/jquery/src/wrap.js +66 -0
  67. data/demo/bower_components/jquery/test/.jshintignore +3 -0
  68. data/demo/bower_components/jquery/test/.jshintrc +60 -0
  69. data/demo/bower_components/jquery/test/data/1x1.jpg +0 -0
  70. data/demo/bower_components/jquery/test/data/ajax/unreleasedXHR.html +25 -0
  71. data/demo/bower_components/jquery/test/data/atom+xml.php +4 -0
  72. data/demo/bower_components/jquery/test/data/badcall.js +1 -0
  73. data/demo/bower_components/jquery/test/data/badjson.js +1 -0
  74. data/demo/bower_components/jquery/test/data/cleanScript.html +10 -0
  75. data/demo/bower_components/jquery/test/data/core/cc_on.html +22 -0
  76. data/demo/bower_components/jquery/test/data/dashboard.xml +11 -0
  77. data/demo/bower_components/jquery/test/data/dimensions/documentLarge.html +17 -0
  78. data/demo/bower_components/jquery/test/data/dimensions/documentSmall.html +21 -0
  79. data/demo/bower_components/jquery/test/data/echoData.php +1 -0
  80. data/demo/bower_components/jquery/test/data/echoQuery.php +1 -0
  81. data/demo/bower_components/jquery/test/data/errorWithJSON.php +6 -0
  82. data/demo/bower_components/jquery/test/data/errorWithText.php +5 -0
  83. data/demo/bower_components/jquery/test/data/etag.php +21 -0
  84. data/demo/bower_components/jquery/test/data/evalScript.php +1 -0
  85. data/demo/bower_components/jquery/test/data/event/focusElem.html +16 -0
  86. data/demo/bower_components/jquery/test/data/event/longLoadScript.php +4 -0
  87. data/demo/bower_components/jquery/test/data/event/promiseReady.html +17 -0
  88. data/demo/bower_components/jquery/test/data/event/syncReady.html +23 -0
  89. data/demo/bower_components/jquery/test/data/headers.php +18 -0
  90. data/demo/bower_components/jquery/test/data/if_modified_since.php +20 -0
  91. data/demo/bower_components/jquery/test/data/iframe.html +8 -0
  92. data/demo/bower_components/jquery/test/data/jquery-1.9.1.ajax_xhr.min.js +5 -0
  93. data/demo/bower_components/jquery/test/data/json.php +13 -0
  94. data/demo/bower_components/jquery/test/data/json_obj.js +1 -0
  95. data/demo/bower_components/jquery/test/data/jsonp.php +14 -0
  96. data/demo/bower_components/jquery/test/data/manipulation/iframe-denied.html +36 -0
  97. data/demo/bower_components/jquery/test/data/name.html +1 -0
  98. data/demo/bower_components/jquery/test/data/name.php +24 -0
  99. data/demo/bower_components/jquery/test/data/nocontent.php +5 -0
  100. data/demo/bower_components/jquery/test/data/offset/absolute.html +41 -0
  101. data/demo/bower_components/jquery/test/data/offset/body.html +26 -0
  102. data/demo/bower_components/jquery/test/data/offset/fixed.html +34 -0
  103. data/demo/bower_components/jquery/test/data/offset/relative.html +31 -0
  104. data/demo/bower_components/jquery/test/data/offset/scroll.html +39 -0
  105. data/demo/bower_components/jquery/test/data/offset/static.html +31 -0
  106. data/demo/bower_components/jquery/test/data/offset/table.html +43 -0
  107. data/demo/bower_components/jquery/test/data/params_html.php +12 -0
  108. data/demo/bower_components/jquery/test/data/readywaitasset.js +1 -0
  109. data/demo/bower_components/jquery/test/data/readywaitloader.js +25 -0
  110. data/demo/bower_components/jquery/test/data/script.php +11 -0
  111. data/demo/bower_components/jquery/test/data/selector/html5_selector.html +114 -0
  112. data/demo/bower_components/jquery/test/data/selector/sizzle_cache.html +21 -0
  113. data/demo/bower_components/jquery/test/data/statusText.php +5 -0
  114. data/demo/bower_components/jquery/test/data/support/bodyBackground.html +28 -0
  115. data/demo/bower_components/jquery/test/data/support/boxSizing.html +19 -0
  116. data/demo/bower_components/jquery/test/data/support/csp.js +3 -0
  117. data/demo/bower_components/jquery/test/data/support/csp.php +22 -0
  118. data/demo/bower_components/jquery/test/data/support/shrinkWrapBlocks.html +23 -0
  119. data/demo/bower_components/jquery/test/data/support/testElementCrash.html +17 -0
  120. data/demo/bower_components/jquery/test/data/test.html +7 -0
  121. data/demo/bower_components/jquery/test/data/test.js +3 -0
  122. data/demo/bower_components/jquery/test/data/test.php +7 -0
  123. data/demo/bower_components/jquery/test/data/test2.html +5 -0
  124. data/demo/bower_components/jquery/test/data/test3.html +3 -0
  125. data/demo/bower_components/jquery/test/data/testinit.js +264 -0
  126. data/demo/bower_components/jquery/test/data/testrunner.js +371 -0
  127. data/demo/bower_components/jquery/test/data/testsuite.css +155 -0
  128. data/demo/bower_components/jquery/test/data/text.php +12 -0
  129. data/demo/bower_components/jquery/test/data/ua.txt +272 -0
  130. data/demo/bower_components/jquery/test/data/with_fries.xml +25 -0
  131. data/demo/bower_components/jquery/test/data/with_fries_over_jsonp.php +7 -0
  132. data/demo/bower_components/jquery/test/delegatetest.html +228 -0
  133. data/demo/bower_components/jquery/test/hovertest.html +158 -0
  134. data/demo/bower_components/jquery/test/index.html +337 -0
  135. data/demo/bower_components/jquery/test/jquery.js +5 -0
  136. data/demo/bower_components/jquery/test/localfile.html +75 -0
  137. data/demo/bower_components/jquery/test/networkerror.html +84 -0
  138. data/demo/bower_components/jquery/test/readywait.html +70 -0
  139. data/demo/bower_components/jquery/test/unit/ajax.js +2016 -0
  140. data/demo/bower_components/jquery/test/unit/attributes.js +1388 -0
  141. data/demo/bower_components/jquery/test/unit/callbacks.js +342 -0
  142. data/demo/bower_components/jquery/test/unit/core.js +1360 -0
  143. data/demo/bower_components/jquery/test/unit/css.js +1056 -0
  144. data/demo/bower_components/jquery/test/unit/data.js +645 -0
  145. data/demo/bower_components/jquery/test/unit/deferred.js +436 -0
  146. data/demo/bower_components/jquery/test/unit/deprecated.js +8 -0
  147. data/demo/bower_components/jquery/test/unit/dimensions.js +472 -0
  148. data/demo/bower_components/jquery/test/unit/effects.js +2242 -0
  149. data/demo/bower_components/jquery/test/unit/event.js +2755 -0
  150. data/demo/bower_components/jquery/test/unit/exports.js +7 -0
  151. data/demo/bower_components/jquery/test/unit/manipulation.js +2120 -0
  152. data/demo/bower_components/jquery/test/unit/offset.js +559 -0
  153. data/demo/bower_components/jquery/test/unit/queue.js +314 -0
  154. data/demo/bower_components/jquery/test/unit/selector.js +172 -0
  155. data/demo/bower_components/jquery/test/unit/serialize.js +148 -0
  156. data/demo/bower_components/jquery/test/unit/support.js +370 -0
  157. data/demo/bower_components/jquery/test/unit/traversing.js +797 -0
  158. data/demo/bower_components/jquery/test/unit/wrap.js +265 -0
  159. data/demo/bower_components/jquery/test/xhtml.php +5 -0
  160. data/demo/index.html +347 -0
  161. data/demo/styles/main.css +208 -0
  162. data/demo/styles/main.scss +138 -0
  163. data/docs/docco.css +506 -0
  164. data/docs/guff.html +1127 -0
  165. data/docs/public/fonts/aller-bold.eot +0 -0
  166. data/docs/public/fonts/aller-bold.ttf +0 -0
  167. data/docs/public/fonts/aller-bold.woff +0 -0
  168. data/docs/public/fonts/aller-light.eot +0 -0
  169. data/docs/public/fonts/aller-light.ttf +0 -0
  170. data/docs/public/fonts/aller-light.woff +0 -0
  171. data/docs/public/fonts/novecento-bold.eot +0 -0
  172. data/docs/public/fonts/novecento-bold.ttf +0 -0
  173. data/docs/public/fonts/novecento-bold.woff +0 -0
  174. data/docs/public/stylesheets/normalize.css +375 -0
  175. data/guff.gemspec +16 -0
  176. data/guff.scss +514 -0
  177. data/gulpfile.js +67 -0
  178. data/lib/guff.rb +4 -0
  179. data/lib/stylesheets/_guff.scss +514 -0
  180. data/package.json +19 -0
  181. data/src/_functions.scss +57 -0
  182. data/src/_mixins.scss +301 -0
  183. data/src/_reset.scss +67 -0
  184. data/src/_settings.scss +22 -0
  185. data/src/_typography.scss +67 -0
  186. metadata +259 -0
@@ -0,0 +1,80 @@
1
+ var oldCallbacks = [],
2
+ rjsonp = /(=)\?(?=&|$)|\?\?/;
3
+
4
+ // Default jsonp settings
5
+ jQuery.ajaxSetup({
6
+ jsonp: "callback",
7
+ jsonpCallback: function() {
8
+ var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
9
+ this[ callback ] = true;
10
+ return callback;
11
+ }
12
+ });
13
+
14
+ // Detect, normalize options and install callbacks for jsonp requests
15
+ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
16
+
17
+ var callbackName, overwritten, responseContainer,
18
+ jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
19
+ "url" :
20
+ typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
21
+ );
22
+
23
+ // Handle iff the expected data type is "jsonp" or we have a parameter to set
24
+ if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
25
+
26
+ // Get callback name, remembering preexisting value associated with it
27
+ callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
28
+ s.jsonpCallback() :
29
+ s.jsonpCallback;
30
+
31
+ // Insert callback into url or form data
32
+ if ( jsonProp ) {
33
+ s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
34
+ } else if ( s.jsonp !== false ) {
35
+ s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
36
+ }
37
+
38
+ // Use data converter to retrieve json after script execution
39
+ s.converters["script json"] = function() {
40
+ if ( !responseContainer ) {
41
+ jQuery.error( callbackName + " was not called" );
42
+ }
43
+ return responseContainer[ 0 ];
44
+ };
45
+
46
+ // force json dataType
47
+ s.dataTypes[ 0 ] = "json";
48
+
49
+ // Install callback
50
+ overwritten = window[ callbackName ];
51
+ window[ callbackName ] = function() {
52
+ responseContainer = arguments;
53
+ };
54
+
55
+ // Clean-up function (fires after converters)
56
+ jqXHR.always(function() {
57
+ // Restore preexisting value
58
+ window[ callbackName ] = overwritten;
59
+
60
+ // Save back as free
61
+ if ( s[ callbackName ] ) {
62
+ // make sure that re-using the options doesn't screw things around
63
+ s.jsonpCallback = originalSettings.jsonpCallback;
64
+
65
+ // save the callback name for future use
66
+ oldCallbacks.push( callbackName );
67
+ }
68
+
69
+ // Call if it was a function and we have a response
70
+ if ( responseContainer && jQuery.isFunction( overwritten ) ) {
71
+ overwritten( responseContainer[ 0 ] );
72
+ }
73
+
74
+ responseContainer = overwritten = undefined;
75
+ });
76
+
77
+ // Delegate to script
78
+ return "script";
79
+ }
80
+ });
@@ -0,0 +1,86 @@
1
+ // Install script dataType
2
+ jQuery.ajaxSetup({
3
+ accepts: {
4
+ script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
5
+ },
6
+ contents: {
7
+ script: /(?:java|ecma)script/
8
+ },
9
+ converters: {
10
+ "text script": function( text ) {
11
+ jQuery.globalEval( text );
12
+ return text;
13
+ }
14
+ }
15
+ });
16
+
17
+ // Handle cache's special case and global
18
+ jQuery.ajaxPrefilter( "script", function( s ) {
19
+ if ( s.cache === undefined ) {
20
+ s.cache = false;
21
+ }
22
+ if ( s.crossDomain ) {
23
+ s.type = "GET";
24
+ s.global = false;
25
+ }
26
+ });
27
+
28
+ // Bind script tag hack transport
29
+ jQuery.ajaxTransport( "script", function(s) {
30
+
31
+ // This transport only deals with cross domain requests
32
+ if ( s.crossDomain ) {
33
+
34
+ var script,
35
+ head = document.head || jQuery("head")[0] || document.documentElement;
36
+
37
+ return {
38
+
39
+ send: function( _, callback ) {
40
+
41
+ script = document.createElement("script");
42
+
43
+ script.async = true;
44
+
45
+ if ( s.scriptCharset ) {
46
+ script.charset = s.scriptCharset;
47
+ }
48
+
49
+ script.src = s.url;
50
+
51
+ // Attach handlers for all browsers
52
+ script.onload = script.onreadystatechange = function( _, isAbort ) {
53
+
54
+ if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
55
+
56
+ // Handle memory leak in IE
57
+ script.onload = script.onreadystatechange = null;
58
+
59
+ // Remove the script
60
+ if ( script.parentNode ) {
61
+ script.parentNode.removeChild( script );
62
+ }
63
+
64
+ // Dereference the script
65
+ script = null;
66
+
67
+ // Callback if not abort
68
+ if ( !isAbort ) {
69
+ callback( 200, "success" );
70
+ }
71
+ }
72
+ };
73
+
74
+ // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
75
+ // Use native DOM manipulation to avoid our domManip AJAX trickery
76
+ head.insertBefore( script, head.firstChild );
77
+ },
78
+
79
+ abort: function() {
80
+ if ( script ) {
81
+ script.onload( undefined, true );
82
+ }
83
+ }
84
+ };
85
+ }
86
+ });
@@ -0,0 +1,207 @@
1
+ var xhrCallbacks, xhrSupported,
2
+ xhrId = 0,
3
+ // #5280: Internet Explorer will keep connections alive if we don't abort on unload
4
+ xhrOnUnloadAbort = window.ActiveXObject && function() {
5
+ // Abort all pending requests
6
+ var key;
7
+ for ( key in xhrCallbacks ) {
8
+ xhrCallbacks[ key ]( undefined, true );
9
+ }
10
+ };
11
+
12
+ // Functions to create xhrs
13
+ function createStandardXHR() {
14
+ try {
15
+ return new window.XMLHttpRequest();
16
+ } catch( e ) {}
17
+ }
18
+
19
+ function createActiveXHR() {
20
+ try {
21
+ return new window.ActiveXObject("Microsoft.XMLHTTP");
22
+ } catch( e ) {}
23
+ }
24
+
25
+ // Create the request object
26
+ // (This is still attached to ajaxSettings for backward compatibility)
27
+ jQuery.ajaxSettings.xhr = window.ActiveXObject ?
28
+ /* Microsoft failed to properly
29
+ * implement the XMLHttpRequest in IE7 (can't request local files),
30
+ * so we use the ActiveXObject when it is available
31
+ * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
32
+ * we need a fallback.
33
+ */
34
+ function() {
35
+ return !this.isLocal && createStandardXHR() || createActiveXHR();
36
+ } :
37
+ // For all other browsers, use the standard XMLHttpRequest object
38
+ createStandardXHR;
39
+
40
+ // Determine support properties
41
+ xhrSupported = jQuery.ajaxSettings.xhr();
42
+ jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
43
+ xhrSupported = jQuery.support.ajax = !!xhrSupported;
44
+
45
+ // Create transport if the browser can provide an xhr
46
+ if ( xhrSupported ) {
47
+
48
+ jQuery.ajaxTransport(function( s ) {
49
+ // Cross domain only allowed if supported through XMLHttpRequest
50
+ if ( !s.crossDomain || jQuery.support.cors ) {
51
+
52
+ var callback;
53
+
54
+ return {
55
+ send: function( headers, complete ) {
56
+
57
+ // Get a new xhr
58
+ var handle, i,
59
+ xhr = s.xhr();
60
+
61
+ // Open the socket
62
+ // Passing null username, generates a login popup on Opera (#2865)
63
+ if ( s.username ) {
64
+ xhr.open( s.type, s.url, s.async, s.username, s.password );
65
+ } else {
66
+ xhr.open( s.type, s.url, s.async );
67
+ }
68
+
69
+ // Apply custom fields if provided
70
+ if ( s.xhrFields ) {
71
+ for ( i in s.xhrFields ) {
72
+ xhr[ i ] = s.xhrFields[ i ];
73
+ }
74
+ }
75
+
76
+ // Override mime type if needed
77
+ if ( s.mimeType && xhr.overrideMimeType ) {
78
+ xhr.overrideMimeType( s.mimeType );
79
+ }
80
+
81
+ // X-Requested-With header
82
+ // For cross-domain requests, seeing as conditions for a preflight are
83
+ // akin to a jigsaw puzzle, we simply never set it to be sure.
84
+ // (it can always be set on a per-request basis or even using ajaxSetup)
85
+ // For same-domain requests, won't change header if already provided.
86
+ if ( !s.crossDomain && !headers["X-Requested-With"] ) {
87
+ headers["X-Requested-With"] = "XMLHttpRequest";
88
+ }
89
+
90
+ // Need an extra try/catch for cross domain requests in Firefox 3
91
+ try {
92
+ for ( i in headers ) {
93
+ xhr.setRequestHeader( i, headers[ i ] );
94
+ }
95
+ } catch( err ) {}
96
+
97
+ // Do send the request
98
+ // This may raise an exception which is actually
99
+ // handled in jQuery.ajax (so no try/catch here)
100
+ xhr.send( ( s.hasContent && s.data ) || null );
101
+
102
+ // Listener
103
+ callback = function( _, isAbort ) {
104
+ var status, responseHeaders, statusText, responses;
105
+
106
+ // Firefox throws exceptions when accessing properties
107
+ // of an xhr when a network error occurred
108
+ // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
109
+ try {
110
+
111
+ // Was never called and is aborted or complete
112
+ if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
113
+
114
+ // Only called once
115
+ callback = undefined;
116
+
117
+ // Do not keep as active anymore
118
+ if ( handle ) {
119
+ xhr.onreadystatechange = jQuery.noop;
120
+ if ( xhrOnUnloadAbort ) {
121
+ delete xhrCallbacks[ handle ];
122
+ }
123
+ }
124
+
125
+ // If it's an abort
126
+ if ( isAbort ) {
127
+ // Abort it manually if needed
128
+ if ( xhr.readyState !== 4 ) {
129
+ xhr.abort();
130
+ }
131
+ } else {
132
+ responses = {};
133
+ status = xhr.status;
134
+ responseHeaders = xhr.getAllResponseHeaders();
135
+
136
+ // When requesting binary data, IE6-9 will throw an exception
137
+ // on any attempt to access responseText (#11426)
138
+ if ( typeof xhr.responseText === "string" ) {
139
+ responses.text = xhr.responseText;
140
+ }
141
+
142
+ // Firefox throws an exception when accessing
143
+ // statusText for faulty cross-domain requests
144
+ try {
145
+ statusText = xhr.statusText;
146
+ } catch( e ) {
147
+ // We normalize with Webkit giving an empty statusText
148
+ statusText = "";
149
+ }
150
+
151
+ // Filter status for non standard behaviors
152
+
153
+ // If the request is local and we have data: assume a success
154
+ // (success with no data won't get notified, that's the best we
155
+ // can do given current implementations)
156
+ if ( !status && s.isLocal && !s.crossDomain ) {
157
+ status = responses.text ? 200 : 404;
158
+ // IE - #1450: sometimes returns 1223 when it should be 204
159
+ } else if ( status === 1223 ) {
160
+ status = 204;
161
+ }
162
+ }
163
+ }
164
+ } catch( firefoxAccessException ) {
165
+ if ( !isAbort ) {
166
+ complete( -1, firefoxAccessException );
167
+ }
168
+ }
169
+
170
+ // Call complete if needed
171
+ if ( responses ) {
172
+ complete( status, statusText, responses, responseHeaders );
173
+ }
174
+ };
175
+
176
+ if ( !s.async ) {
177
+ // if we're in sync mode we fire the callback
178
+ callback();
179
+ } else if ( xhr.readyState === 4 ) {
180
+ // (IE6 & IE7) if it's in cache and has been
181
+ // retrieved directly we need to fire the callback
182
+ setTimeout( callback );
183
+ } else {
184
+ handle = ++xhrId;
185
+ if ( xhrOnUnloadAbort ) {
186
+ // Create the active xhrs callbacks list if needed
187
+ // and attach the unload handler
188
+ if ( !xhrCallbacks ) {
189
+ xhrCallbacks = {};
190
+ jQuery( window ).unload( xhrOnUnloadAbort );
191
+ }
192
+ // Add to list of active xhrs callbacks
193
+ xhrCallbacks[ handle ] = callback;
194
+ }
195
+ xhr.onreadystatechange = callback;
196
+ }
197
+ },
198
+
199
+ abort: function() {
200
+ if ( callback ) {
201
+ callback( undefined, true );
202
+ }
203
+ }
204
+ };
205
+ }
206
+ });
207
+ }
@@ -0,0 +1,659 @@
1
+ var nodeHook, boolHook,
2
+ rclass = /[\t\r\n\f]/g,
3
+ rreturn = /\r/g,
4
+ rfocusable = /^(?:input|select|textarea|button|object)$/i,
5
+ rclickable = /^(?:a|area)$/i,
6
+ ruseDefault = /^(?:checked|selected)$/i,
7
+ getSetAttribute = jQuery.support.getSetAttribute,
8
+ getSetInput = jQuery.support.input;
9
+
10
+ jQuery.fn.extend({
11
+ attr: function( name, value ) {
12
+ return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
13
+ },
14
+
15
+ removeAttr: function( name ) {
16
+ return this.each(function() {
17
+ jQuery.removeAttr( this, name );
18
+ });
19
+ },
20
+
21
+ prop: function( name, value ) {
22
+ return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
23
+ },
24
+
25
+ removeProp: function( name ) {
26
+ name = jQuery.propFix[ name ] || name;
27
+ return this.each(function() {
28
+ // try/catch handles cases where IE balks (such as removing a property on window)
29
+ try {
30
+ this[ name ] = undefined;
31
+ delete this[ name ];
32
+ } catch( e ) {}
33
+ });
34
+ },
35
+
36
+ addClass: function( value ) {
37
+ var classes, elem, cur, clazz, j,
38
+ i = 0,
39
+ len = this.length,
40
+ proceed = typeof value === "string" && value;
41
+
42
+ if ( jQuery.isFunction( value ) ) {
43
+ return this.each(function( j ) {
44
+ jQuery( this ).addClass( value.call( this, j, this.className ) );
45
+ });
46
+ }
47
+
48
+ if ( proceed ) {
49
+ // The disjunction here is for better compressibility (see removeClass)
50
+ classes = ( value || "" ).match( core_rnotwhite ) || [];
51
+
52
+ for ( ; i < len; i++ ) {
53
+ elem = this[ i ];
54
+ cur = elem.nodeType === 1 && ( elem.className ?
55
+ ( " " + elem.className + " " ).replace( rclass, " " ) :
56
+ " "
57
+ );
58
+
59
+ if ( cur ) {
60
+ j = 0;
61
+ while ( (clazz = classes[j++]) ) {
62
+ if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
63
+ cur += clazz + " ";
64
+ }
65
+ }
66
+ elem.className = jQuery.trim( cur );
67
+
68
+ }
69
+ }
70
+ }
71
+
72
+ return this;
73
+ },
74
+
75
+ removeClass: function( value ) {
76
+ var classes, elem, cur, clazz, j,
77
+ i = 0,
78
+ len = this.length,
79
+ proceed = arguments.length === 0 || typeof value === "string" && value;
80
+
81
+ if ( jQuery.isFunction( value ) ) {
82
+ return this.each(function( j ) {
83
+ jQuery( this ).removeClass( value.call( this, j, this.className ) );
84
+ });
85
+ }
86
+ if ( proceed ) {
87
+ classes = ( value || "" ).match( core_rnotwhite ) || [];
88
+
89
+ for ( ; i < len; i++ ) {
90
+ elem = this[ i ];
91
+ // This expression is here for better compressibility (see addClass)
92
+ cur = elem.nodeType === 1 && ( elem.className ?
93
+ ( " " + elem.className + " " ).replace( rclass, " " ) :
94
+ ""
95
+ );
96
+
97
+ if ( cur ) {
98
+ j = 0;
99
+ while ( (clazz = classes[j++]) ) {
100
+ // Remove *all* instances
101
+ while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
102
+ cur = cur.replace( " " + clazz + " ", " " );
103
+ }
104
+ }
105
+ elem.className = value ? jQuery.trim( cur ) : "";
106
+ }
107
+ }
108
+ }
109
+
110
+ return this;
111
+ },
112
+
113
+ toggleClass: function( value, stateVal ) {
114
+ var type = typeof value;
115
+
116
+ if ( typeof stateVal === "boolean" && type === "string" ) {
117
+ return stateVal ? this.addClass( value ) : this.removeClass( value );
118
+ }
119
+
120
+ if ( jQuery.isFunction( value ) ) {
121
+ return this.each(function( i ) {
122
+ jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
123
+ });
124
+ }
125
+
126
+ return this.each(function() {
127
+ if ( type === "string" ) {
128
+ // toggle individual class names
129
+ var className,
130
+ i = 0,
131
+ self = jQuery( this ),
132
+ classNames = value.match( core_rnotwhite ) || [];
133
+
134
+ while ( (className = classNames[ i++ ]) ) {
135
+ // check each className given, space separated list
136
+ if ( self.hasClass( className ) ) {
137
+ self.removeClass( className );
138
+ } else {
139
+ self.addClass( className );
140
+ }
141
+ }
142
+
143
+ // Toggle whole class name
144
+ } else if ( type === core_strundefined || type === "boolean" ) {
145
+ if ( this.className ) {
146
+ // store className if set
147
+ jQuery._data( this, "__className__", this.className );
148
+ }
149
+
150
+ // If the element has a class name or if we're passed "false",
151
+ // then remove the whole classname (if there was one, the above saved it).
152
+ // Otherwise bring back whatever was previously saved (if anything),
153
+ // falling back to the empty string if nothing was stored.
154
+ this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
155
+ }
156
+ });
157
+ },
158
+
159
+ hasClass: function( selector ) {
160
+ var className = " " + selector + " ",
161
+ i = 0,
162
+ l = this.length;
163
+ for ( ; i < l; i++ ) {
164
+ if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
165
+ return true;
166
+ }
167
+ }
168
+
169
+ return false;
170
+ },
171
+
172
+ val: function( value ) {
173
+ var ret, hooks, isFunction,
174
+ elem = this[0];
175
+
176
+ if ( !arguments.length ) {
177
+ if ( elem ) {
178
+ hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
179
+
180
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
181
+ return ret;
182
+ }
183
+
184
+ ret = elem.value;
185
+
186
+ return typeof ret === "string" ?
187
+ // handle most common string cases
188
+ ret.replace(rreturn, "") :
189
+ // handle cases where value is null/undef or number
190
+ ret == null ? "" : ret;
191
+ }
192
+
193
+ return;
194
+ }
195
+
196
+ isFunction = jQuery.isFunction( value );
197
+
198
+ return this.each(function( i ) {
199
+ var val;
200
+
201
+ if ( this.nodeType !== 1 ) {
202
+ return;
203
+ }
204
+
205
+ if ( isFunction ) {
206
+ val = value.call( this, i, jQuery( this ).val() );
207
+ } else {
208
+ val = value;
209
+ }
210
+
211
+ // Treat null/undefined as ""; convert numbers to string
212
+ if ( val == null ) {
213
+ val = "";
214
+ } else if ( typeof val === "number" ) {
215
+ val += "";
216
+ } else if ( jQuery.isArray( val ) ) {
217
+ val = jQuery.map(val, function ( value ) {
218
+ return value == null ? "" : value + "";
219
+ });
220
+ }
221
+
222
+ hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
223
+
224
+ // If set returns undefined, fall back to normal setting
225
+ if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
226
+ this.value = val;
227
+ }
228
+ });
229
+ }
230
+ });
231
+
232
+ jQuery.extend({
233
+ valHooks: {
234
+ option: {
235
+ get: function( elem ) {
236
+ // Use proper attribute retrieval(#6932, #12072)
237
+ var val = jQuery.find.attr( elem, "value" );
238
+ return val != null ?
239
+ val :
240
+ elem.text;
241
+ }
242
+ },
243
+ select: {
244
+ get: function( elem ) {
245
+ var value, option,
246
+ options = elem.options,
247
+ index = elem.selectedIndex,
248
+ one = elem.type === "select-one" || index < 0,
249
+ values = one ? null : [],
250
+ max = one ? index + 1 : options.length,
251
+ i = index < 0 ?
252
+ max :
253
+ one ? index : 0;
254
+
255
+ // Loop through all the selected options
256
+ for ( ; i < max; i++ ) {
257
+ option = options[ i ];
258
+
259
+ // oldIE doesn't update selected after form reset (#2551)
260
+ if ( ( option.selected || i === index ) &&
261
+ // Don't return options that are disabled or in a disabled optgroup
262
+ ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
263
+ ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
264
+
265
+ // Get the specific value for the option
266
+ value = jQuery( option ).val();
267
+
268
+ // We don't need an array for one selects
269
+ if ( one ) {
270
+ return value;
271
+ }
272
+
273
+ // Multi-Selects return an array
274
+ values.push( value );
275
+ }
276
+ }
277
+
278
+ return values;
279
+ },
280
+
281
+ set: function( elem, value ) {
282
+ var optionSet, option,
283
+ options = elem.options,
284
+ values = jQuery.makeArray( value ),
285
+ i = options.length;
286
+
287
+ while ( i-- ) {
288
+ option = options[ i ];
289
+ if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {
290
+ optionSet = true;
291
+ }
292
+ }
293
+
294
+ // force browsers to behave consistently when non-matching value is set
295
+ if ( !optionSet ) {
296
+ elem.selectedIndex = -1;
297
+ }
298
+ return values;
299
+ }
300
+ }
301
+ },
302
+
303
+ attr: function( elem, name, value ) {
304
+ var hooks, ret,
305
+ nType = elem.nodeType;
306
+
307
+ // don't get/set attributes on text, comment and attribute nodes
308
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
309
+ return;
310
+ }
311
+
312
+ // Fallback to prop when attributes are not supported
313
+ if ( typeof elem.getAttribute === core_strundefined ) {
314
+ return jQuery.prop( elem, name, value );
315
+ }
316
+
317
+ // All attributes are lowercase
318
+ // Grab necessary hook if one is defined
319
+ if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
320
+ name = name.toLowerCase();
321
+ hooks = jQuery.attrHooks[ name ] ||
322
+ ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
323
+ }
324
+
325
+ if ( value !== undefined ) {
326
+
327
+ if ( value === null ) {
328
+ jQuery.removeAttr( elem, name );
329
+
330
+ } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
331
+ return ret;
332
+
333
+ } else {
334
+ elem.setAttribute( name, value + "" );
335
+ return value;
336
+ }
337
+
338
+ } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
339
+ return ret;
340
+
341
+ } else {
342
+ ret = jQuery.find.attr( elem, name );
343
+
344
+ // Non-existent attributes return null, we normalize to undefined
345
+ return ret == null ?
346
+ undefined :
347
+ ret;
348
+ }
349
+ },
350
+
351
+ removeAttr: function( elem, value ) {
352
+ var name, propName,
353
+ i = 0,
354
+ attrNames = value && value.match( core_rnotwhite );
355
+
356
+ if ( attrNames && elem.nodeType === 1 ) {
357
+ while ( (name = attrNames[i++]) ) {
358
+ propName = jQuery.propFix[ name ] || name;
359
+
360
+ // Boolean attributes get special treatment (#10870)
361
+ if ( jQuery.expr.match.bool.test( name ) ) {
362
+ // Set corresponding property to false
363
+ if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
364
+ elem[ propName ] = false;
365
+ // Support: IE<9
366
+ // Also clear defaultChecked/defaultSelected (if appropriate)
367
+ } else {
368
+ elem[ jQuery.camelCase( "default-" + name ) ] =
369
+ elem[ propName ] = false;
370
+ }
371
+
372
+ // See #9699 for explanation of this approach (setting first, then removal)
373
+ } else {
374
+ jQuery.attr( elem, name, "" );
375
+ }
376
+
377
+ elem.removeAttribute( getSetAttribute ? name : propName );
378
+ }
379
+ }
380
+ },
381
+
382
+ attrHooks: {
383
+ type: {
384
+ set: function( elem, value ) {
385
+ if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
386
+ // Setting the type on a radio button after the value resets the value in IE6-9
387
+ // Reset value to default in case type is set after value during creation
388
+ var val = elem.value;
389
+ elem.setAttribute( "type", value );
390
+ if ( val ) {
391
+ elem.value = val;
392
+ }
393
+ return value;
394
+ }
395
+ }
396
+ }
397
+ },
398
+
399
+ propFix: {
400
+ "for": "htmlFor",
401
+ "class": "className"
402
+ },
403
+
404
+ prop: function( elem, name, value ) {
405
+ var ret, hooks, notxml,
406
+ nType = elem.nodeType;
407
+
408
+ // don't get/set properties on text, comment and attribute nodes
409
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
410
+ return;
411
+ }
412
+
413
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
414
+
415
+ if ( notxml ) {
416
+ // Fix name and attach hooks
417
+ name = jQuery.propFix[ name ] || name;
418
+ hooks = jQuery.propHooks[ name ];
419
+ }
420
+
421
+ if ( value !== undefined ) {
422
+ return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
423
+ ret :
424
+ ( elem[ name ] = value );
425
+
426
+ } else {
427
+ return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
428
+ ret :
429
+ elem[ name ];
430
+ }
431
+ },
432
+
433
+ propHooks: {
434
+ tabIndex: {
435
+ get: function( elem ) {
436
+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
437
+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
438
+ // Use proper attribute retrieval(#12072)
439
+ var tabindex = jQuery.find.attr( elem, "tabindex" );
440
+
441
+ return tabindex ?
442
+ parseInt( tabindex, 10 ) :
443
+ rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
444
+ 0 :
445
+ -1;
446
+ }
447
+ }
448
+ }
449
+ });
450
+
451
+ // Hooks for boolean attributes
452
+ boolHook = {
453
+ set: function( elem, value, name ) {
454
+ if ( value === false ) {
455
+ // Remove boolean attributes when set to false
456
+ jQuery.removeAttr( elem, name );
457
+ } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
458
+ // IE<8 needs the *property* name
459
+ elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
460
+
461
+ // Use defaultChecked and defaultSelected for oldIE
462
+ } else {
463
+ elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
464
+ }
465
+
466
+ return name;
467
+ }
468
+ };
469
+ jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
470
+ var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;
471
+
472
+ jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
473
+ function( elem, name, isXML ) {
474
+ var fn = jQuery.expr.attrHandle[ name ],
475
+ ret = isXML ?
476
+ undefined :
477
+ /* jshint eqeqeq: false */
478
+ (jQuery.expr.attrHandle[ name ] = undefined) !=
479
+ getter( elem, name, isXML ) ?
480
+
481
+ name.toLowerCase() :
482
+ null;
483
+ jQuery.expr.attrHandle[ name ] = fn;
484
+ return ret;
485
+ } :
486
+ function( elem, name, isXML ) {
487
+ return isXML ?
488
+ undefined :
489
+ elem[ jQuery.camelCase( "default-" + name ) ] ?
490
+ name.toLowerCase() :
491
+ null;
492
+ };
493
+ });
494
+
495
+ // fix oldIE attroperties
496
+ if ( !getSetInput || !getSetAttribute ) {
497
+ jQuery.attrHooks.value = {
498
+ set: function( elem, value, name ) {
499
+ if ( jQuery.nodeName( elem, "input" ) ) {
500
+ // Does not return so that setAttribute is also used
501
+ elem.defaultValue = value;
502
+ } else {
503
+ // Use nodeHook if defined (#1954); otherwise setAttribute is fine
504
+ return nodeHook && nodeHook.set( elem, value, name );
505
+ }
506
+ }
507
+ };
508
+ }
509
+
510
+ // IE6/7 do not support getting/setting some attributes with get/setAttribute
511
+ if ( !getSetAttribute ) {
512
+
513
+ // Use this for any attribute in IE6/7
514
+ // This fixes almost every IE6/7 issue
515
+ nodeHook = {
516
+ set: function( elem, value, name ) {
517
+ // Set the existing or create a new attribute node
518
+ var ret = elem.getAttributeNode( name );
519
+ if ( !ret ) {
520
+ elem.setAttributeNode(
521
+ (ret = elem.ownerDocument.createAttribute( name ))
522
+ );
523
+ }
524
+
525
+ ret.value = value += "";
526
+
527
+ // Break association with cloned elements by also using setAttribute (#9646)
528
+ return name === "value" || value === elem.getAttribute( name ) ?
529
+ value :
530
+ undefined;
531
+ }
532
+ };
533
+ jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =
534
+ // Some attributes are constructed with empty-string values when not defined
535
+ function( elem, name, isXML ) {
536
+ var ret;
537
+ return isXML ?
538
+ undefined :
539
+ (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
540
+ ret.value :
541
+ null;
542
+ };
543
+ jQuery.valHooks.button = {
544
+ get: function( elem, name ) {
545
+ var ret = elem.getAttributeNode( name );
546
+ return ret && ret.specified ?
547
+ ret.value :
548
+ undefined;
549
+ },
550
+ set: nodeHook.set
551
+ };
552
+
553
+ // Set contenteditable to false on removals(#10429)
554
+ // Setting to empty string throws an error as an invalid value
555
+ jQuery.attrHooks.contenteditable = {
556
+ set: function( elem, value, name ) {
557
+ nodeHook.set( elem, value === "" ? false : value, name );
558
+ }
559
+ };
560
+
561
+ // Set width and height to auto instead of 0 on empty string( Bug #8150 )
562
+ // This is for removals
563
+ jQuery.each([ "width", "height" ], function( i, name ) {
564
+ jQuery.attrHooks[ name ] = {
565
+ set: function( elem, value ) {
566
+ if ( value === "" ) {
567
+ elem.setAttribute( name, "auto" );
568
+ return value;
569
+ }
570
+ }
571
+ };
572
+ });
573
+ }
574
+
575
+
576
+ // Some attributes require a special call on IE
577
+ // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
578
+ if ( !jQuery.support.hrefNormalized ) {
579
+ // href/src property should get the full normalized URL (#10299/#12915)
580
+ jQuery.each([ "href", "src" ], function( i, name ) {
581
+ jQuery.propHooks[ name ] = {
582
+ get: function( elem ) {
583
+ return elem.getAttribute( name, 4 );
584
+ }
585
+ };
586
+ });
587
+ }
588
+
589
+ if ( !jQuery.support.style ) {
590
+ jQuery.attrHooks.style = {
591
+ get: function( elem ) {
592
+ // Return undefined in the case of empty string
593
+ // Note: IE uppercases css property names, but if we were to .toLowerCase()
594
+ // .cssText, that would destroy case senstitivity in URL's, like in "background"
595
+ return elem.style.cssText || undefined;
596
+ },
597
+ set: function( elem, value ) {
598
+ return ( elem.style.cssText = value + "" );
599
+ }
600
+ };
601
+ }
602
+
603
+ // Safari mis-reports the default selected property of an option
604
+ // Accessing the parent's selectedIndex property fixes it
605
+ if ( !jQuery.support.optSelected ) {
606
+ jQuery.propHooks.selected = {
607
+ get: function( elem ) {
608
+ var parent = elem.parentNode;
609
+
610
+ if ( parent ) {
611
+ parent.selectedIndex;
612
+
613
+ // Make sure that it also works with optgroups, see #5701
614
+ if ( parent.parentNode ) {
615
+ parent.parentNode.selectedIndex;
616
+ }
617
+ }
618
+ return null;
619
+ }
620
+ };
621
+ }
622
+
623
+ jQuery.each([
624
+ "tabIndex",
625
+ "readOnly",
626
+ "maxLength",
627
+ "cellSpacing",
628
+ "cellPadding",
629
+ "rowSpan",
630
+ "colSpan",
631
+ "useMap",
632
+ "frameBorder",
633
+ "contentEditable"
634
+ ], function() {
635
+ jQuery.propFix[ this.toLowerCase() ] = this;
636
+ });
637
+
638
+ // IE6/7 call enctype encoding
639
+ if ( !jQuery.support.enctype ) {
640
+ jQuery.propFix.enctype = "encoding";
641
+ }
642
+
643
+ // Radios and checkboxes getter/setter
644
+ jQuery.each([ "radio", "checkbox" ], function() {
645
+ jQuery.valHooks[ this ] = {
646
+ set: function( elem, value ) {
647
+ if ( jQuery.isArray( value ) ) {
648
+ return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
649
+ }
650
+ }
651
+ };
652
+ if ( !jQuery.support.checkOn ) {
653
+ jQuery.valHooks[ this ].get = function( elem ) {
654
+ // Support: Webkit
655
+ // "" is returned instead of "on" if a value isn't specified
656
+ return elem.getAttribute("value") === null ? "on" : elem.value;
657
+ };
658
+ }
659
+ });