lady_josephine 0.0.1

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.
Files changed (304) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +32 -0
  4. data/app/assets/fonts/lady_josephine/icons/icons.eot +0 -0
  5. data/app/assets/fonts/lady_josephine/icons/icons.svg +215 -0
  6. data/app/assets/fonts/lady_josephine/icons/icons.ttf +0 -0
  7. data/app/assets/fonts/lady_josephine/icons/icons.woff +0 -0
  8. data/app/assets/javascripts/lady_josephine/blocks/facebook.js +25 -0
  9. data/app/assets/javascripts/lady_josephine/blocks/instagram.js +22 -0
  10. data/app/assets/javascripts/lady_josephine/blocks/soundcloud.js +24 -0
  11. data/app/assets/javascripts/lady_josephine/blocks/twitter.js +25 -0
  12. data/app/assets/javascripts/lady_josephine/blocks/vimeo.js +55 -0
  13. data/app/assets/javascripts/lady_josephine/blocks/youtube.js +64 -0
  14. data/app/assets/javascripts/lady_josephine/editor.js +40 -0
  15. data/app/assets/javascripts/lady_josephine/lady_josephine.js +4 -0
  16. data/app/assets/javascripts/lady_josephine/lady_josephine_view.js +6 -0
  17. data/app/assets/stylesheets/lady_josephine/content.sass +33 -0
  18. data/app/assets/stylesheets/lady_josephine/icons.sass +175 -0
  19. data/app/assets/stylesheets/lady_josephine/lady_josephine.sass +6 -0
  20. data/app/assets/stylesheets/lady_josephine/sir_trevor.sass +619 -0
  21. data/app/assets/stylesheets/lady_josephine/vars.sass +36 -0
  22. data/app/controllers/lady_josephine/application_controller.rb +4 -0
  23. data/app/controllers/lady_josephine/editor_controller.rb +40 -0
  24. data/app/controllers/lady_josephine/images_controller.rb +26 -0
  25. data/app/helpers/lady_josephine/helper.rb +25 -0
  26. data/app/helpers/lady_josephine/sir_trevor_helper.rb +172 -0
  27. data/app/models/lady_josephine/concerns/model.rb +29 -0
  28. data/app/models/lady_josephine/concerns/pingable.rb +28 -0
  29. data/app/models/lady_josephine/concerns/server_uuid.rb +24 -0
  30. data/app/models/lady_josephine/concerns/sir_trevor_images.rb +38 -0
  31. data/app/models/lady_josephine/image.rb +41 -0
  32. data/app/uploader/lady_josephine/base_uploader.rb +47 -0
  33. data/app/uploader/lady_josephine/image_uploader.rb +149 -0
  34. data/app/views/lady_josephine/blocks/_audio_block.haml +2 -0
  35. data/app/views/lady_josephine/blocks/_definition_block.haml +4 -0
  36. data/app/views/lady_josephine/blocks/_divider_block.haml +2 -0
  37. data/app/views/lady_josephine/blocks/_extended_image_block.haml +63 -0
  38. data/app/views/lady_josephine/blocks/_extended_quote_block.haml +5 -0
  39. data/app/views/lady_josephine/blocks/_extended_tweet_block.haml +2 -0
  40. data/app/views/lady_josephine/blocks/_facebook_post_block.haml +2 -0
  41. data/app/views/lady_josephine/blocks/_heading_block.haml +2 -0
  42. data/app/views/lady_josephine/blocks/_html_block.haml +1 -0
  43. data/app/views/lady_josephine/blocks/_instagram_block.haml +2 -0
  44. data/app/views/lady_josephine/blocks/_list_block.haml +3 -0
  45. data/app/views/lady_josephine/blocks/_quote_block.haml +5 -0
  46. data/app/views/lady_josephine/blocks/_text_block.html.haml +2 -0
  47. data/app/views/lady_josephine/blocks/_video_block.haml +9 -0
  48. data/config/routes.rb +9 -0
  49. data/db/migrate/20160222151500_lady_josephine_image.rb +18 -0
  50. data/lib/generators/lady_josephine_migration/USAGE +9 -0
  51. data/lib/generators/lady_josephine_migration/lady_josephine_migration_generator.rb +17 -0
  52. data/lib/generators/lady_josephine_migration/templates/migration.rb +9 -0
  53. data/lib/lady_josephine.rb +18 -0
  54. data/lib/lady_josephine/engine.rb +18 -0
  55. data/lib/lady_josephine/redcarpet/custom_markdown_formatter.rb +63 -0
  56. data/lib/lady_josephine/renderer/sir_trevor_renderer.rb +16 -0
  57. data/lib/lady_josephine/version.rb +3 -0
  58. data/lib/lady_josephine/whitelist.rb +26 -0
  59. data/lib/tasks/lady_josephine_tasks.rake +4 -0
  60. data/spec/controllers/lady_josephine/editor_controller_spec.rb +58 -0
  61. data/spec/dummy/README.rdoc +28 -0
  62. data/spec/dummy/Rakefile +6 -0
  63. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  64. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  65. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  66. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  67. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  68. data/spec/dummy/bin/bundle +3 -0
  69. data/spec/dummy/bin/rails +4 -0
  70. data/spec/dummy/bin/rake +4 -0
  71. data/spec/dummy/bin/setup +29 -0
  72. data/spec/dummy/config.ru +4 -0
  73. data/spec/dummy/config/application.rb +26 -0
  74. data/spec/dummy/config/boot.rb +5 -0
  75. data/spec/dummy/config/database.yml +25 -0
  76. data/spec/dummy/config/environment.rb +5 -0
  77. data/spec/dummy/config/environments/development.rb +41 -0
  78. data/spec/dummy/config/environments/production.rb +79 -0
  79. data/spec/dummy/config/environments/test.rb +42 -0
  80. data/spec/dummy/config/initializers/assets.rb +11 -0
  81. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  82. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  83. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  84. data/spec/dummy/config/initializers/inflections.rb +16 -0
  85. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  86. data/spec/dummy/config/initializers/session_store.rb +3 -0
  87. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  88. data/spec/dummy/config/locales/en.yml +23 -0
  89. data/spec/dummy/config/routes.rb +4 -0
  90. data/spec/dummy/config/secrets.yml +22 -0
  91. data/spec/dummy/db/development.sqlite3 +0 -0
  92. data/spec/dummy/db/schema.rb +16 -0
  93. data/spec/dummy/db/test.sqlite3 +0 -0
  94. data/spec/dummy/log/bla +0 -0
  95. data/spec/dummy/public/404.html +67 -0
  96. data/spec/dummy/public/422.html +67 -0
  97. data/spec/dummy/public/500.html +66 -0
  98. data/spec/dummy/public/favicon.ico +0 -0
  99. data/spec/spec_helper.rb +17 -0
  100. data/vendor/assets/components/Eventable/README.md +12 -0
  101. data/vendor/assets/components/Eventable/bower.json +10 -0
  102. data/vendor/assets/components/Eventable/component.json +11 -0
  103. data/vendor/assets/components/Eventable/eventable.js +207 -0
  104. data/vendor/assets/components/Eventable/package.json +15 -0
  105. data/vendor/assets/components/jquery-autosize/bower.json +30 -0
  106. data/vendor/assets/components/jquery-autosize/demo.html +36 -0
  107. data/vendor/assets/components/jquery-autosize/jquery.autosize.js +273 -0
  108. data/vendor/assets/components/jquery-autosize/jquery.autosize.min.js +6 -0
  109. data/vendor/assets/components/jquery-autosize/package.json +32 -0
  110. data/vendor/assets/components/jquery-autosize/readme.md +216 -0
  111. data/vendor/assets/components/jquery/AUTHORS.txt +163 -0
  112. data/vendor/assets/components/jquery/CONTRIBUTING.md +216 -0
  113. data/vendor/assets/components/jquery/Gruntfile.js +496 -0
  114. data/vendor/assets/components/jquery/MIT-LICENSE.txt +21 -0
  115. data/vendor/assets/components/jquery/README.md +415 -0
  116. data/vendor/assets/components/jquery/build/release-notes.js +59 -0
  117. data/vendor/assets/components/jquery/build/release.js +246 -0
  118. data/vendor/assets/components/jquery/component.json +13 -0
  119. data/vendor/assets/components/jquery/composer.json +35 -0
  120. data/vendor/assets/components/jquery/jquery-migrate.js +496 -0
  121. data/vendor/assets/components/jquery/jquery-migrate.min.js +3 -0
  122. data/vendor/assets/components/jquery/jquery.js +9597 -0
  123. data/vendor/assets/components/jquery/jquery.min.js +5 -0
  124. data/vendor/assets/components/jquery/jquery.min.map +1 -0
  125. data/vendor/assets/components/jquery/package.json +39 -0
  126. data/vendor/assets/components/jquery/speed/benchmark.js +15 -0
  127. data/vendor/assets/components/jquery/speed/benchmarker.css +65 -0
  128. data/vendor/assets/components/jquery/speed/benchmarker.js +181 -0
  129. data/vendor/assets/components/jquery/speed/closest.html +39 -0
  130. data/vendor/assets/components/jquery/speed/css.html +82 -0
  131. data/vendor/assets/components/jquery/speed/event.html +58 -0
  132. data/vendor/assets/components/jquery/speed/filter.html +183 -0
  133. data/vendor/assets/components/jquery/speed/find.html +179 -0
  134. data/vendor/assets/components/jquery/speed/index.html +72 -0
  135. data/vendor/assets/components/jquery/speed/jquery-basis.js +6238 -0
  136. data/vendor/assets/components/jquery/speed/slice.vs.concat.html +47 -0
  137. data/vendor/assets/components/jquery/src/ajax.js +851 -0
  138. data/vendor/assets/components/jquery/src/ajax/jsonp.js +80 -0
  139. data/vendor/assets/components/jquery/src/ajax/script.js +86 -0
  140. data/vendor/assets/components/jquery/src/ajax/xhr.js +207 -0
  141. data/vendor/assets/components/jquery/src/attributes.js +661 -0
  142. data/vendor/assets/components/jquery/src/callbacks.js +196 -0
  143. data/vendor/assets/components/jquery/src/core.js +949 -0
  144. data/vendor/assets/components/jquery/src/css.js +679 -0
  145. data/vendor/assets/components/jquery/src/data.js +340 -0
  146. data/vendor/assets/components/jquery/src/deferred.js +141 -0
  147. data/vendor/assets/components/jquery/src/deprecated.js +4 -0
  148. data/vendor/assets/components/jquery/src/dimensions.js +41 -0
  149. data/vendor/assets/components/jquery/src/effects.js +730 -0
  150. data/vendor/assets/components/jquery/src/event-alias.js +15 -0
  151. data/vendor/assets/components/jquery/src/event.js +991 -0
  152. data/vendor/assets/components/jquery/src/exports.js +18 -0
  153. data/vendor/assets/components/jquery/src/intro.js +20 -0
  154. data/vendor/assets/components/jquery/src/manipulation.js +796 -0
  155. data/vendor/assets/components/jquery/src/offset.js +169 -0
  156. data/vendor/assets/components/jquery/src/outro.js +2 -0
  157. data/vendor/assets/components/jquery/src/queue.js +147 -0
  158. data/vendor/assets/components/jquery/src/serialize.js +99 -0
  159. data/vendor/assets/components/jquery/src/sizzle-jquery.js +9 -0
  160. data/vendor/assets/components/jquery/src/support.js +241 -0
  161. data/vendor/assets/components/jquery/src/traversing.js +275 -0
  162. data/vendor/assets/components/jquery/test/csp.php +16 -0
  163. data/vendor/assets/components/jquery/test/data/1x1.jpg +0 -0
  164. data/vendor/assets/components/jquery/test/data/ajax/unreleasedXHR.html +25 -0
  165. data/vendor/assets/components/jquery/test/data/atom+xml.php +4 -0
  166. data/vendor/assets/components/jquery/test/data/badcall.js +1 -0
  167. data/vendor/assets/components/jquery/test/data/badjson.js +1 -0
  168. data/vendor/assets/components/jquery/test/data/cleanScript.html +10 -0
  169. data/vendor/assets/components/jquery/test/data/core/cc_on.html +22 -0
  170. data/vendor/assets/components/jquery/test/data/dashboard.xml +11 -0
  171. data/vendor/assets/components/jquery/test/data/dimensions/documentLarge.html +17 -0
  172. data/vendor/assets/components/jquery/test/data/dimensions/documentSmall.html +21 -0
  173. data/vendor/assets/components/jquery/test/data/echoData.php +1 -0
  174. data/vendor/assets/components/jquery/test/data/echoQuery.php +1 -0
  175. data/vendor/assets/components/jquery/test/data/errorWithText.php +5 -0
  176. data/vendor/assets/components/jquery/test/data/etag.php +21 -0
  177. data/vendor/assets/components/jquery/test/data/evalScript.php +1 -0
  178. data/vendor/assets/components/jquery/test/data/event/longLoadScript.php +4 -0
  179. data/vendor/assets/components/jquery/test/data/event/promiseReady.html +17 -0
  180. data/vendor/assets/components/jquery/test/data/event/syncReady.html +23 -0
  181. data/vendor/assets/components/jquery/test/data/headers.php +18 -0
  182. data/vendor/assets/components/jquery/test/data/if_modified_since.php +20 -0
  183. data/vendor/assets/components/jquery/test/data/iframe.html +8 -0
  184. data/vendor/assets/components/jquery/test/data/jquery-1.8.2.ajax_xhr.min.js +2 -0
  185. data/vendor/assets/components/jquery/test/data/json.php +13 -0
  186. data/vendor/assets/components/jquery/test/data/json_obj.js +1 -0
  187. data/vendor/assets/components/jquery/test/data/jsonp.php +14 -0
  188. data/vendor/assets/components/jquery/test/data/manipulation/iframe-denied.html +36 -0
  189. data/vendor/assets/components/jquery/test/data/name.html +1 -0
  190. data/vendor/assets/components/jquery/test/data/name.php +24 -0
  191. data/vendor/assets/components/jquery/test/data/nocontent.php +5 -0
  192. data/vendor/assets/components/jquery/test/data/offset/absolute.html +41 -0
  193. data/vendor/assets/components/jquery/test/data/offset/body.html +26 -0
  194. data/vendor/assets/components/jquery/test/data/offset/fixed.html +34 -0
  195. data/vendor/assets/components/jquery/test/data/offset/relative.html +31 -0
  196. data/vendor/assets/components/jquery/test/data/offset/scroll.html +39 -0
  197. data/vendor/assets/components/jquery/test/data/offset/static.html +31 -0
  198. data/vendor/assets/components/jquery/test/data/offset/table.html +43 -0
  199. data/vendor/assets/components/jquery/test/data/params_html.php +12 -0
  200. data/vendor/assets/components/jquery/test/data/readywaitasset.js +1 -0
  201. data/vendor/assets/components/jquery/test/data/readywaitloader.js +25 -0
  202. data/vendor/assets/components/jquery/test/data/script.php +11 -0
  203. data/vendor/assets/components/jquery/test/data/selector/html5_selector.html +114 -0
  204. data/vendor/assets/components/jquery/test/data/selector/sizzle_cache.html +21 -0
  205. data/vendor/assets/components/jquery/test/data/statusText.php +5 -0
  206. data/vendor/assets/components/jquery/test/data/support/bodyBackground.html +28 -0
  207. data/vendor/assets/components/jquery/test/data/support/shrinkWrapBlocks.html +23 -0
  208. data/vendor/assets/components/jquery/test/data/support/testElementCrash.html +17 -0
  209. data/vendor/assets/components/jquery/test/data/test.html +7 -0
  210. data/vendor/assets/components/jquery/test/data/test.js +3 -0
  211. data/vendor/assets/components/jquery/test/data/test.php +7 -0
  212. data/vendor/assets/components/jquery/test/data/test2.html +5 -0
  213. data/vendor/assets/components/jquery/test/data/test3.html +3 -0
  214. data/vendor/assets/components/jquery/test/data/testinit.js +269 -0
  215. data/vendor/assets/components/jquery/test/data/testrunner.js +368 -0
  216. data/vendor/assets/components/jquery/test/data/testsuite.css +155 -0
  217. data/vendor/assets/components/jquery/test/data/text.php +12 -0
  218. data/vendor/assets/components/jquery/test/data/ua.txt +272 -0
  219. data/vendor/assets/components/jquery/test/data/with_fries.xml +25 -0
  220. data/vendor/assets/components/jquery/test/data/with_fries_over_jsonp.php +7 -0
  221. data/vendor/assets/components/jquery/test/delegatetest.html +228 -0
  222. data/vendor/assets/components/jquery/test/hovertest.html +158 -0
  223. data/vendor/assets/components/jquery/test/index.html +330 -0
  224. data/vendor/assets/components/jquery/test/localfile.html +75 -0
  225. data/vendor/assets/components/jquery/test/networkerror.html +84 -0
  226. data/vendor/assets/components/jquery/test/polluted.php +110 -0
  227. data/vendor/assets/components/jquery/test/readywait.html +70 -0
  228. data/vendor/assets/components/jquery/test/unit/ajax.js +1971 -0
  229. data/vendor/assets/components/jquery/test/unit/attributes.js +1332 -0
  230. data/vendor/assets/components/jquery/test/unit/callbacks.js +326 -0
  231. data/vendor/assets/components/jquery/test/unit/core.js +1332 -0
  232. data/vendor/assets/components/jquery/test/unit/css.js +1036 -0
  233. data/vendor/assets/components/jquery/test/unit/data.js +636 -0
  234. data/vendor/assets/components/jquery/test/unit/deferred.js +440 -0
  235. data/vendor/assets/components/jquery/test/unit/deprecated.js +1 -0
  236. data/vendor/assets/components/jquery/test/unit/dimensions.js +461 -0
  237. data/vendor/assets/components/jquery/test/unit/effects.js +2050 -0
  238. data/vendor/assets/components/jquery/test/unit/event.js +2690 -0
  239. data/vendor/assets/components/jquery/test/unit/exports.js +7 -0
  240. data/vendor/assets/components/jquery/test/unit/manipulation.js +2242 -0
  241. data/vendor/assets/components/jquery/test/unit/offset.js +549 -0
  242. data/vendor/assets/components/jquery/test/unit/queue.js +316 -0
  243. data/vendor/assets/components/jquery/test/unit/selector.js +185 -0
  244. data/vendor/assets/components/jquery/test/unit/serialize.js +146 -0
  245. data/vendor/assets/components/jquery/test/unit/support.js +384 -0
  246. data/vendor/assets/components/jquery/test/unit/traversing.js +667 -0
  247. data/vendor/assets/components/jquery/test/xhtml.php +5 -0
  248. data/vendor/assets/components/sir-trevor-js/CHANGELOG.md +44 -0
  249. data/vendor/assets/components/sir-trevor-js/Gemfile +3 -0
  250. data/vendor/assets/components/sir-trevor-js/Gemfile.lock +10 -0
  251. data/vendor/assets/components/sir-trevor-js/Gruntfile.js +109 -0
  252. data/vendor/assets/components/sir-trevor-js/MIT-LICENCE +20 -0
  253. data/vendor/assets/components/sir-trevor-js/Readme.md +84 -0
  254. data/vendor/assets/components/sir-trevor-js/bower.json +21 -0
  255. data/vendor/assets/components/sir-trevor-js/component.json +42 -0
  256. data/vendor/assets/components/sir-trevor-js/contributing.md +74 -0
  257. data/vendor/assets/components/sir-trevor-js/examples-component/component.json +14 -0
  258. data/vendor/assets/components/sir-trevor-js/examples-component/index.html +33 -0
  259. data/vendor/assets/components/sir-trevor-js/examples-component/index.js +29 -0
  260. data/vendor/assets/components/sir-trevor-js/examples-component/javascript/example_block.js +203 -0
  261. data/vendor/assets/components/sir-trevor-js/examples-component/javascript/limit_chars.js +46 -0
  262. data/vendor/assets/components/sir-trevor-js/examples-component/sir-trevor.gif +0 -0
  263. data/vendor/assets/components/sir-trevor-js/locales/cn.js +51 -0
  264. data/vendor/assets/components/sir-trevor-js/locales/de.js +51 -0
  265. data/vendor/assets/components/sir-trevor-js/locales/es.js +51 -0
  266. data/vendor/assets/components/sir-trevor-js/locales/fi.js +51 -0
  267. data/vendor/assets/components/sir-trevor-js/locales/fr.js +51 -0
  268. data/vendor/assets/components/sir-trevor-js/locales/pt.js +52 -0
  269. data/vendor/assets/components/sir-trevor-js/package.json +23 -0
  270. data/vendor/assets/components/sir-trevor-js/sir-trevor-icons.css +6 -0
  271. data/vendor/assets/components/sir-trevor-js/sir-trevor.css +393 -0
  272. data/vendor/assets/components/sir-trevor-js/sir-trevor.css.map +7 -0
  273. data/vendor/assets/components/sir-trevor-js/sir-trevor.js +5481 -0
  274. data/vendor/assets/components/sir-trevor-js/sir-trevor.min.js +13 -0
  275. data/vendor/assets/components/underscore/CNAME +1 -0
  276. data/vendor/assets/components/underscore/CONTRIBUTING.md +9 -0
  277. data/vendor/assets/components/underscore/LICENSE +22 -0
  278. data/vendor/assets/components/underscore/README.md +19 -0
  279. data/vendor/assets/components/underscore/Rakefile +10 -0
  280. data/vendor/assets/components/underscore/docs/docco.css +192 -0
  281. data/vendor/assets/components/underscore/docs/favicon.ico +0 -0
  282. data/vendor/assets/components/underscore/docs/images/background.png +0 -0
  283. data/vendor/assets/components/underscore/docs/images/underscore.png +0 -0
  284. data/vendor/assets/components/underscore/docs/underscore.html +823 -0
  285. data/vendor/assets/components/underscore/favicon.ico +0 -0
  286. data/vendor/assets/components/underscore/index.html +2467 -0
  287. data/vendor/assets/components/underscore/index.js +1 -0
  288. data/vendor/assets/components/underscore/package.json +16 -0
  289. data/vendor/assets/components/underscore/test/arrays.js +200 -0
  290. data/vendor/assets/components/underscore/test/chaining.js +59 -0
  291. data/vendor/assets/components/underscore/test/collections.js +453 -0
  292. data/vendor/assets/components/underscore/test/functions.js +265 -0
  293. data/vendor/assets/components/underscore/test/index.html +44 -0
  294. data/vendor/assets/components/underscore/test/objects.js +570 -0
  295. data/vendor/assets/components/underscore/test/speed.js +75 -0
  296. data/vendor/assets/components/underscore/test/utility.js +266 -0
  297. data/vendor/assets/components/underscore/test/vendor/jquery.js +9404 -0
  298. data/vendor/assets/components/underscore/test/vendor/jslitmus.js +670 -0
  299. data/vendor/assets/components/underscore/test/vendor/qunit.css +235 -0
  300. data/vendor/assets/components/underscore/test/vendor/qunit.js +1977 -0
  301. data/vendor/assets/components/underscore/test/vendor/runner.js +98 -0
  302. data/vendor/assets/components/underscore/underscore-min.js +1 -0
  303. data/vendor/assets/components/underscore/underscore.js +1226 -0
  304. metadata +473 -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,661 @@
1
+ var nodeHook, boolHook,
2
+ rclass = /[\t\r\n]/g,
3
+ rreturn = /\r/g,
4
+ rfocusable = /^(?:input|select|textarea|button|object)$/i,
5
+ rclickable = /^(?:a|area)$/i,
6
+ rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
7
+ ruseDefault = /^(?:checked|selected)$/i,
8
+ getSetAttribute = jQuery.support.getSetAttribute,
9
+ getSetInput = jQuery.support.input;
10
+
11
+ jQuery.fn.extend({
12
+ attr: function( name, value ) {
13
+ return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
14
+ },
15
+
16
+ removeAttr: function( name ) {
17
+ return this.each(function() {
18
+ jQuery.removeAttr( this, name );
19
+ });
20
+ },
21
+
22
+ prop: function( name, value ) {
23
+ return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
24
+ },
25
+
26
+ removeProp: function( name ) {
27
+ name = jQuery.propFix[ name ] || name;
28
+ return this.each(function() {
29
+ // try/catch handles cases where IE balks (such as removing a property on window)
30
+ try {
31
+ this[ name ] = undefined;
32
+ delete this[ name ];
33
+ } catch( e ) {}
34
+ });
35
+ },
36
+
37
+ addClass: function( value ) {
38
+ var classes, elem, cur, clazz, j,
39
+ i = 0,
40
+ len = this.length,
41
+ proceed = typeof value === "string" && value;
42
+
43
+ if ( jQuery.isFunction( value ) ) {
44
+ return this.each(function( j ) {
45
+ jQuery( this ).addClass( value.call( this, j, this.className ) );
46
+ });
47
+ }
48
+
49
+ if ( proceed ) {
50
+ // The disjunction here is for better compressibility (see removeClass)
51
+ classes = ( value || "" ).match( core_rnotwhite ) || [];
52
+
53
+ for ( ; i < len; i++ ) {
54
+ elem = this[ i ];
55
+ cur = elem.nodeType === 1 && ( elem.className ?
56
+ ( " " + elem.className + " " ).replace( rclass, " " ) :
57
+ " "
58
+ );
59
+
60
+ if ( cur ) {
61
+ j = 0;
62
+ while ( (clazz = classes[j++]) ) {
63
+ if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
64
+ cur += clazz + " ";
65
+ }
66
+ }
67
+ elem.className = jQuery.trim( cur );
68
+
69
+ }
70
+ }
71
+ }
72
+
73
+ return this;
74
+ },
75
+
76
+ removeClass: function( value ) {
77
+ var classes, elem, cur, clazz, j,
78
+ i = 0,
79
+ len = this.length,
80
+ proceed = arguments.length === 0 || typeof value === "string" && value;
81
+
82
+ if ( jQuery.isFunction( value ) ) {
83
+ return this.each(function( j ) {
84
+ jQuery( this ).removeClass( value.call( this, j, this.className ) );
85
+ });
86
+ }
87
+ if ( proceed ) {
88
+ classes = ( value || "" ).match( core_rnotwhite ) || [];
89
+
90
+ for ( ; i < len; i++ ) {
91
+ elem = this[ i ];
92
+ // This expression is here for better compressibility (see addClass)
93
+ cur = elem.nodeType === 1 && ( elem.className ?
94
+ ( " " + elem.className + " " ).replace( rclass, " " ) :
95
+ ""
96
+ );
97
+
98
+ if ( cur ) {
99
+ j = 0;
100
+ while ( (clazz = classes[j++]) ) {
101
+ // Remove *all* instances
102
+ while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
103
+ cur = cur.replace( " " + clazz + " ", " " );
104
+ }
105
+ }
106
+ elem.className = value ? jQuery.trim( cur ) : "";
107
+ }
108
+ }
109
+ }
110
+
111
+ return this;
112
+ },
113
+
114
+ toggleClass: function( value, stateVal ) {
115
+ var type = typeof value,
116
+ isBool = typeof stateVal === "boolean";
117
+
118
+ if ( jQuery.isFunction( value ) ) {
119
+ return this.each(function( i ) {
120
+ jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
121
+ });
122
+ }
123
+
124
+ return this.each(function() {
125
+ if ( type === "string" ) {
126
+ // toggle individual class names
127
+ var className,
128
+ i = 0,
129
+ self = jQuery( this ),
130
+ state = stateVal,
131
+ classNames = value.match( core_rnotwhite ) || [];
132
+
133
+ while ( (className = classNames[ i++ ]) ) {
134
+ // check each className given, space separated list
135
+ state = isBool ? state : !self.hasClass( className );
136
+ self[ state ? "addClass" : "removeClass" ]( className );
137
+ }
138
+
139
+ // Toggle whole class name
140
+ } else if ( type === core_strundefined || type === "boolean" ) {
141
+ if ( this.className ) {
142
+ // store className if set
143
+ jQuery._data( this, "__className__", this.className );
144
+ }
145
+
146
+ // If the element has a class name or if we're passed "false",
147
+ // then remove the whole classname (if there was one, the above saved it).
148
+ // Otherwise bring back whatever was previously saved (if anything),
149
+ // falling back to the empty string if nothing was stored.
150
+ this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
151
+ }
152
+ });
153
+ },
154
+
155
+ hasClass: function( selector ) {
156
+ var className = " " + selector + " ",
157
+ i = 0,
158
+ l = this.length;
159
+ for ( ; i < l; i++ ) {
160
+ if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
161
+ return true;
162
+ }
163
+ }
164
+
165
+ return false;
166
+ },
167
+
168
+ val: function( value ) {
169
+ var ret, hooks, isFunction,
170
+ elem = this[0];
171
+
172
+ if ( !arguments.length ) {
173
+ if ( elem ) {
174
+ hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
175
+
176
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
177
+ return ret;
178
+ }
179
+
180
+ ret = elem.value;
181
+
182
+ return typeof ret === "string" ?
183
+ // handle most common string cases
184
+ ret.replace(rreturn, "") :
185
+ // handle cases where value is null/undef or number
186
+ ret == null ? "" : ret;
187
+ }
188
+
189
+ return;
190
+ }
191
+
192
+ isFunction = jQuery.isFunction( value );
193
+
194
+ return this.each(function( i ) {
195
+ var val,
196
+ self = jQuery(this);
197
+
198
+ if ( this.nodeType !== 1 ) {
199
+ return;
200
+ }
201
+
202
+ if ( isFunction ) {
203
+ val = value.call( this, i, self.val() );
204
+ } else {
205
+ val = value;
206
+ }
207
+
208
+ // Treat null/undefined as ""; convert numbers to string
209
+ if ( val == null ) {
210
+ val = "";
211
+ } else if ( typeof val === "number" ) {
212
+ val += "";
213
+ } else if ( jQuery.isArray( val ) ) {
214
+ val = jQuery.map(val, function ( value ) {
215
+ return value == null ? "" : value + "";
216
+ });
217
+ }
218
+
219
+ hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
220
+
221
+ // If set returns undefined, fall back to normal setting
222
+ if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
223
+ this.value = val;
224
+ }
225
+ });
226
+ }
227
+ });
228
+
229
+ jQuery.extend({
230
+ valHooks: {
231
+ option: {
232
+ get: function( elem ) {
233
+ // attributes.value is undefined in Blackberry 4.7 but
234
+ // uses .value. See #6932
235
+ var val = elem.attributes.value;
236
+ return !val || val.specified ? elem.value : elem.text;
237
+ }
238
+ },
239
+ select: {
240
+ get: function( elem ) {
241
+ var value, option,
242
+ options = elem.options,
243
+ index = elem.selectedIndex,
244
+ one = elem.type === "select-one" || index < 0,
245
+ values = one ? null : [],
246
+ max = one ? index + 1 : options.length,
247
+ i = index < 0 ?
248
+ max :
249
+ one ? index : 0;
250
+
251
+ // Loop through all the selected options
252
+ for ( ; i < max; i++ ) {
253
+ option = options[ i ];
254
+
255
+ // oldIE doesn't update selected after form reset (#2551)
256
+ if ( ( option.selected || i === index ) &&
257
+ // Don't return options that are disabled or in a disabled optgroup
258
+ ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
259
+ ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
260
+
261
+ // Get the specific value for the option
262
+ value = jQuery( option ).val();
263
+
264
+ // We don't need an array for one selects
265
+ if ( one ) {
266
+ return value;
267
+ }
268
+
269
+ // Multi-Selects return an array
270
+ values.push( value );
271
+ }
272
+ }
273
+
274
+ return values;
275
+ },
276
+
277
+ set: function( elem, value ) {
278
+ var values = jQuery.makeArray( value );
279
+
280
+ jQuery(elem).find("option").each(function() {
281
+ this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
282
+ });
283
+
284
+ if ( !values.length ) {
285
+ elem.selectedIndex = -1;
286
+ }
287
+ return values;
288
+ }
289
+ }
290
+ },
291
+
292
+ attr: function( elem, name, value ) {
293
+ var hooks, notxml, ret,
294
+ nType = elem.nodeType;
295
+
296
+ // don't get/set attributes on text, comment and attribute nodes
297
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
298
+ return;
299
+ }
300
+
301
+ // Fallback to prop when attributes are not supported
302
+ if ( typeof elem.getAttribute === core_strundefined ) {
303
+ return jQuery.prop( elem, name, value );
304
+ }
305
+
306
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
307
+
308
+ // All attributes are lowercase
309
+ // Grab necessary hook if one is defined
310
+ if ( notxml ) {
311
+ name = name.toLowerCase();
312
+ hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
313
+ }
314
+
315
+ if ( value !== undefined ) {
316
+
317
+ if ( value === null ) {
318
+ jQuery.removeAttr( elem, name );
319
+
320
+ } else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
321
+ return ret;
322
+
323
+ } else {
324
+ elem.setAttribute( name, value + "" );
325
+ return value;
326
+ }
327
+
328
+ } else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
329
+ return ret;
330
+
331
+ } else {
332
+
333
+ // In IE9+, Flash objects don't have .getAttribute (#12945)
334
+ // Support: IE9+
335
+ if ( typeof elem.getAttribute !== core_strundefined ) {
336
+ ret = elem.getAttribute( name );
337
+ }
338
+
339
+ // Non-existent attributes return null, we normalize to undefined
340
+ return ret == null ?
341
+ undefined :
342
+ ret;
343
+ }
344
+ },
345
+
346
+ removeAttr: function( elem, value ) {
347
+ var name, propName,
348
+ i = 0,
349
+ attrNames = value && value.match( core_rnotwhite );
350
+
351
+ if ( attrNames && elem.nodeType === 1 ) {
352
+ while ( (name = attrNames[i++]) ) {
353
+ propName = jQuery.propFix[ name ] || name;
354
+
355
+ // Boolean attributes get special treatment (#10870)
356
+ if ( rboolean.test( name ) ) {
357
+ // Set corresponding property to false for boolean attributes
358
+ // Also clear defaultChecked/defaultSelected (if appropriate) for IE<8
359
+ if ( !getSetAttribute && ruseDefault.test( name ) ) {
360
+ elem[ jQuery.camelCase( "default-" + name ) ] =
361
+ elem[ propName ] = false;
362
+ } else {
363
+ elem[ propName ] = false;
364
+ }
365
+
366
+ // See #9699 for explanation of this approach (setting first, then removal)
367
+ } else {
368
+ jQuery.attr( elem, name, "" );
369
+ }
370
+
371
+ elem.removeAttribute( getSetAttribute ? name : propName );
372
+ }
373
+ }
374
+ },
375
+
376
+ attrHooks: {
377
+ type: {
378
+ set: function( elem, value ) {
379
+ if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
380
+ // Setting the type on a radio button after the value resets the value in IE6-9
381
+ // Reset value to default in case type is set after value during creation
382
+ var val = elem.value;
383
+ elem.setAttribute( "type", value );
384
+ if ( val ) {
385
+ elem.value = val;
386
+ }
387
+ return value;
388
+ }
389
+ }
390
+ }
391
+ },
392
+
393
+ propFix: {
394
+ tabindex: "tabIndex",
395
+ readonly: "readOnly",
396
+ "for": "htmlFor",
397
+ "class": "className",
398
+ maxlength: "maxLength",
399
+ cellspacing: "cellSpacing",
400
+ cellpadding: "cellPadding",
401
+ rowspan: "rowSpan",
402
+ colspan: "colSpan",
403
+ usemap: "useMap",
404
+ frameborder: "frameBorder",
405
+ contenteditable: "contentEditable"
406
+ },
407
+
408
+ prop: function( elem, name, value ) {
409
+ var ret, hooks, notxml,
410
+ nType = elem.nodeType;
411
+
412
+ // don't get/set properties on text, comment and attribute nodes
413
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
414
+ return;
415
+ }
416
+
417
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
418
+
419
+ if ( notxml ) {
420
+ // Fix name and attach hooks
421
+ name = jQuery.propFix[ name ] || name;
422
+ hooks = jQuery.propHooks[ name ];
423
+ }
424
+
425
+ if ( value !== undefined ) {
426
+ if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
427
+ return ret;
428
+
429
+ } else {
430
+ return ( elem[ name ] = value );
431
+ }
432
+
433
+ } else {
434
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
435
+ return ret;
436
+
437
+ } else {
438
+ return elem[ name ];
439
+ }
440
+ }
441
+ },
442
+
443
+ propHooks: {
444
+ tabIndex: {
445
+ get: function( elem ) {
446
+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
447
+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
448
+ var attributeNode = elem.getAttributeNode("tabindex");
449
+
450
+ return attributeNode && attributeNode.specified ?
451
+ parseInt( attributeNode.value, 10 ) :
452
+ rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
453
+ 0 :
454
+ undefined;
455
+ }
456
+ }
457
+ }
458
+ });
459
+
460
+ // Hook for boolean attributes
461
+ boolHook = {
462
+ get: function( elem, name ) {
463
+ var
464
+ // Use .prop to determine if this attribute is understood as boolean
465
+ prop = jQuery.prop( elem, name ),
466
+
467
+ // Fetch it accordingly
468
+ attr = typeof prop === "boolean" && elem.getAttribute( name ),
469
+ detail = typeof prop === "boolean" ?
470
+
471
+ getSetInput && getSetAttribute ?
472
+ attr != null :
473
+ // oldIE fabricates an empty string for missing boolean attributes
474
+ // and conflates checked/selected into attroperties
475
+ ruseDefault.test( name ) ?
476
+ elem[ jQuery.camelCase( "default-" + name ) ] :
477
+ !!attr :
478
+
479
+ // fetch an attribute node for properties not recognized as boolean
480
+ elem.getAttributeNode( name );
481
+
482
+ return detail && detail.value !== false ?
483
+ name.toLowerCase() :
484
+ undefined;
485
+ },
486
+ set: function( elem, value, name ) {
487
+ if ( value === false ) {
488
+ // Remove boolean attributes when set to false
489
+ jQuery.removeAttr( elem, name );
490
+ } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
491
+ // IE<8 needs the *property* name
492
+ elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
493
+
494
+ // Use defaultChecked and defaultSelected for oldIE
495
+ } else {
496
+ elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
497
+ }
498
+
499
+ return name;
500
+ }
501
+ };
502
+
503
+ // fix oldIE value attroperty
504
+ if ( !getSetInput || !getSetAttribute ) {
505
+ jQuery.attrHooks.value = {
506
+ get: function( elem, name ) {
507
+ var ret = elem.getAttributeNode( name );
508
+ return jQuery.nodeName( elem, "input" ) ?
509
+
510
+ // Ignore the value *property* by using defaultValue
511
+ elem.defaultValue :
512
+
513
+ ret && ret.specified ? ret.value : undefined;
514
+ },
515
+ set: function( elem, value, name ) {
516
+ if ( jQuery.nodeName( elem, "input" ) ) {
517
+ // Does not return so that setAttribute is also used
518
+ elem.defaultValue = value;
519
+ } else {
520
+ // Use nodeHook if defined (#1954); otherwise setAttribute is fine
521
+ return nodeHook && nodeHook.set( elem, value, name );
522
+ }
523
+ }
524
+ };
525
+ }
526
+
527
+ // IE6/7 do not support getting/setting some attributes with get/setAttribute
528
+ if ( !getSetAttribute ) {
529
+
530
+ // Use this for any attribute in IE6/7
531
+ // This fixes almost every IE6/7 issue
532
+ nodeHook = jQuery.valHooks.button = {
533
+ get: function( elem, name ) {
534
+ var ret = elem.getAttributeNode( name );
535
+ return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
536
+ ret.value :
537
+ undefined;
538
+ },
539
+ set: function( elem, value, name ) {
540
+ // Set the existing or create a new attribute node
541
+ var ret = elem.getAttributeNode( name );
542
+ if ( !ret ) {
543
+ elem.setAttributeNode(
544
+ (ret = elem.ownerDocument.createAttribute( name ))
545
+ );
546
+ }
547
+
548
+ ret.value = value += "";
549
+
550
+ // Break association with cloned elements by also using setAttribute (#9646)
551
+ return name === "value" || value === elem.getAttribute( name ) ?
552
+ value :
553
+ undefined;
554
+ }
555
+ };
556
+
557
+ // Set contenteditable to false on removals(#10429)
558
+ // Setting to empty string throws an error as an invalid value
559
+ jQuery.attrHooks.contenteditable = {
560
+ get: nodeHook.get,
561
+ set: function( elem, value, name ) {
562
+ nodeHook.set( elem, value === "" ? false : value, name );
563
+ }
564
+ };
565
+
566
+ // Set width and height to auto instead of 0 on empty string( Bug #8150 )
567
+ // This is for removals
568
+ jQuery.each([ "width", "height" ], function( i, name ) {
569
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
570
+ set: function( elem, value ) {
571
+ if ( value === "" ) {
572
+ elem.setAttribute( name, "auto" );
573
+ return value;
574
+ }
575
+ }
576
+ });
577
+ });
578
+ }
579
+
580
+
581
+ // Some attributes require a special call on IE
582
+ // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
583
+ if ( !jQuery.support.hrefNormalized ) {
584
+ jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
585
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
586
+ get: function( elem ) {
587
+ var ret = elem.getAttribute( name, 2 );
588
+ return ret == null ? undefined : ret;
589
+ }
590
+ });
591
+ });
592
+
593
+ // href/src property should get the full normalized URL (#10299/#12915)
594
+ jQuery.each([ "href", "src" ], function( i, name ) {
595
+ jQuery.propHooks[ name ] = {
596
+ get: function( elem ) {
597
+ return elem.getAttribute( name, 4 );
598
+ }
599
+ };
600
+ });
601
+ }
602
+
603
+ if ( !jQuery.support.style ) {
604
+ jQuery.attrHooks.style = {
605
+ get: function( elem ) {
606
+ // Return undefined in the case of empty string
607
+ // Note: IE uppercases css property names, but if we were to .toLowerCase()
608
+ // .cssText, that would destroy case senstitivity in URL's, like in "background"
609
+ return elem.style.cssText || undefined;
610
+ },
611
+ set: function( elem, value ) {
612
+ return ( elem.style.cssText = value + "" );
613
+ }
614
+ };
615
+ }
616
+
617
+ // Safari mis-reports the default selected property of an option
618
+ // Accessing the parent's selectedIndex property fixes it
619
+ if ( !jQuery.support.optSelected ) {
620
+ jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
621
+ get: function( elem ) {
622
+ var parent = elem.parentNode;
623
+
624
+ if ( parent ) {
625
+ parent.selectedIndex;
626
+
627
+ // Make sure that it also works with optgroups, see #5701
628
+ if ( parent.parentNode ) {
629
+ parent.parentNode.selectedIndex;
630
+ }
631
+ }
632
+ return null;
633
+ }
634
+ });
635
+ }
636
+
637
+ // IE6/7 call enctype encoding
638
+ if ( !jQuery.support.enctype ) {
639
+ jQuery.propFix.enctype = "encoding";
640
+ }
641
+
642
+ // Radios and checkboxes getter/setter
643
+ if ( !jQuery.support.checkOn ) {
644
+ jQuery.each([ "radio", "checkbox" ], function() {
645
+ jQuery.valHooks[ this ] = {
646
+ get: function( elem ) {
647
+ // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
648
+ return elem.getAttribute("value") === null ? "on" : elem.value;
649
+ }
650
+ };
651
+ });
652
+ }
653
+ jQuery.each([ "radio", "checkbox" ], function() {
654
+ jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
655
+ set: function( elem, value ) {
656
+ if ( jQuery.isArray( value ) ) {
657
+ return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
658
+ }
659
+ }
660
+ });
661
+ });