lady_josephine 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,679 @@
1
+ var iframe, getStyles, curCSS,
2
+ ralpha = /alpha\([^)]*\)/i,
3
+ ropacity = /opacity\s*=\s*([^)]*)/,
4
+ rposition = /^(top|right|bottom|left)$/,
5
+ // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
6
+ // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
7
+ rdisplayswap = /^(none|table(?!-c[ea]).+)/,
8
+ rmargin = /^margin/,
9
+ rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
10
+ rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
11
+ rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
12
+ elemdisplay = { BODY: "block" },
13
+
14
+ cssShow = { position: "absolute", visibility: "hidden", display: "block" },
15
+ cssNormalTransform = {
16
+ letterSpacing: 0,
17
+ fontWeight: 400
18
+ },
19
+
20
+ cssExpand = [ "Top", "Right", "Bottom", "Left" ],
21
+ cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
22
+
23
+ // return a css property mapped to a potentially vendor prefixed property
24
+ function vendorPropName( style, name ) {
25
+
26
+ // shortcut for names that are not vendor prefixed
27
+ if ( name in style ) {
28
+ return name;
29
+ }
30
+
31
+ // check for vendor prefixed names
32
+ var capName = name.charAt(0).toUpperCase() + name.slice(1),
33
+ origName = name,
34
+ i = cssPrefixes.length;
35
+
36
+ while ( i-- ) {
37
+ name = cssPrefixes[ i ] + capName;
38
+ if ( name in style ) {
39
+ return name;
40
+ }
41
+ }
42
+
43
+ return origName;
44
+ }
45
+
46
+ function isHidden( elem, el ) {
47
+ // isHidden might be called from jQuery#filter function;
48
+ // in that case, element will be second argument
49
+ elem = el || elem;
50
+ return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
51
+ }
52
+
53
+ function showHide( elements, show ) {
54
+ var display, elem, hidden,
55
+ values = [],
56
+ index = 0,
57
+ length = elements.length;
58
+
59
+ for ( ; index < length; index++ ) {
60
+ elem = elements[ index ];
61
+ if ( !elem.style ) {
62
+ continue;
63
+ }
64
+
65
+ values[ index ] = jQuery._data( elem, "olddisplay" );
66
+ display = elem.style.display;
67
+ if ( show ) {
68
+ // Reset the inline display of this element to learn if it is
69
+ // being hidden by cascaded rules or not
70
+ if ( !values[ index ] && display === "none" ) {
71
+ elem.style.display = "";
72
+ }
73
+
74
+ // Set elements which have been overridden with display: none
75
+ // in a stylesheet to whatever the default browser style is
76
+ // for such an element
77
+ if ( elem.style.display === "" && isHidden( elem ) ) {
78
+ values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
79
+ }
80
+ } else {
81
+
82
+ if ( !values[ index ] ) {
83
+ hidden = isHidden( elem );
84
+
85
+ if ( display && display !== "none" || !hidden ) {
86
+ jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
87
+ }
88
+ }
89
+ }
90
+ }
91
+
92
+ // Set the display of most of the elements in a second loop
93
+ // to avoid the constant reflow
94
+ for ( index = 0; index < length; index++ ) {
95
+ elem = elements[ index ];
96
+ if ( !elem.style ) {
97
+ continue;
98
+ }
99
+ if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
100
+ elem.style.display = show ? values[ index ] || "" : "none";
101
+ }
102
+ }
103
+
104
+ return elements;
105
+ }
106
+
107
+ jQuery.fn.extend({
108
+ css: function( name, value ) {
109
+ return jQuery.access( this, function( elem, name, value ) {
110
+ var len, styles,
111
+ map = {},
112
+ i = 0;
113
+
114
+ if ( jQuery.isArray( name ) ) {
115
+ styles = getStyles( elem );
116
+ len = name.length;
117
+
118
+ for ( ; i < len; i++ ) {
119
+ map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
120
+ }
121
+
122
+ return map;
123
+ }
124
+
125
+ return value !== undefined ?
126
+ jQuery.style( elem, name, value ) :
127
+ jQuery.css( elem, name );
128
+ }, name, value, arguments.length > 1 );
129
+ },
130
+ show: function() {
131
+ return showHide( this, true );
132
+ },
133
+ hide: function() {
134
+ return showHide( this );
135
+ },
136
+ toggle: function( state ) {
137
+ var bool = typeof state === "boolean";
138
+
139
+ return this.each(function() {
140
+ if ( bool ? state : isHidden( this ) ) {
141
+ jQuery( this ).show();
142
+ } else {
143
+ jQuery( this ).hide();
144
+ }
145
+ });
146
+ }
147
+ });
148
+
149
+ jQuery.extend({
150
+ // Add in style property hooks for overriding the default
151
+ // behavior of getting and setting a style property
152
+ cssHooks: {
153
+ opacity: {
154
+ get: function( elem, computed ) {
155
+ if ( computed ) {
156
+ // We should always get a number back from opacity
157
+ var ret = curCSS( elem, "opacity" );
158
+ return ret === "" ? "1" : ret;
159
+ }
160
+ }
161
+ }
162
+ },
163
+
164
+ // Exclude the following css properties to add px
165
+ cssNumber: {
166
+ "columnCount": true,
167
+ "fillOpacity": true,
168
+ "fontWeight": true,
169
+ "lineHeight": true,
170
+ "opacity": true,
171
+ "orphans": true,
172
+ "widows": true,
173
+ "zIndex": true,
174
+ "zoom": true
175
+ },
176
+
177
+ // Add in properties whose names you wish to fix before
178
+ // setting or getting the value
179
+ cssProps: {
180
+ // normalize float css property
181
+ "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
182
+ },
183
+
184
+ // Get and set the style property on a DOM Node
185
+ style: function( elem, name, value, extra ) {
186
+ // Don't set styles on text and comment nodes
187
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
188
+ return;
189
+ }
190
+
191
+ // Make sure that we're working with the right name
192
+ var ret, type, hooks,
193
+ origName = jQuery.camelCase( name ),
194
+ style = elem.style;
195
+
196
+ name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
197
+
198
+ // gets hook for the prefixed version
199
+ // followed by the unprefixed version
200
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
201
+
202
+ // Check if we're setting a value
203
+ if ( value !== undefined ) {
204
+ type = typeof value;
205
+
206
+ // convert relative number strings (+= or -=) to relative numbers. #7345
207
+ if ( type === "string" && (ret = rrelNum.exec( value )) ) {
208
+ value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
209
+ // Fixes bug #9237
210
+ type = "number";
211
+ }
212
+
213
+ // Make sure that NaN and null values aren't set. See: #7116
214
+ if ( value == null || type === "number" && isNaN( value ) ) {
215
+ return;
216
+ }
217
+
218
+ // If a number was passed in, add 'px' to the (except for certain CSS properties)
219
+ if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
220
+ value += "px";
221
+ }
222
+
223
+ // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
224
+ // but it would mean to define eight (for every problematic property) identical functions
225
+ if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
226
+ style[ name ] = "inherit";
227
+ }
228
+
229
+ // If a hook was provided, use that value, otherwise just set the specified value
230
+ if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
231
+
232
+ // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
233
+ // Fixes bug #5509
234
+ try {
235
+ style[ name ] = value;
236
+ } catch(e) {}
237
+ }
238
+
239
+ } else {
240
+ // If a hook was provided get the non-computed value from there
241
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
242
+ return ret;
243
+ }
244
+
245
+ // Otherwise just get the value from the style object
246
+ return style[ name ];
247
+ }
248
+ },
249
+
250
+ css: function( elem, name, extra, styles ) {
251
+ var num, val, hooks,
252
+ origName = jQuery.camelCase( name );
253
+
254
+ // Make sure that we're working with the right name
255
+ name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
256
+
257
+ // gets hook for the prefixed version
258
+ // followed by the unprefixed version
259
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
260
+
261
+ // If a hook was provided get the computed value from there
262
+ if ( hooks && "get" in hooks ) {
263
+ val = hooks.get( elem, true, extra );
264
+ }
265
+
266
+ // Otherwise, if a way to get the computed value exists, use that
267
+ if ( val === undefined ) {
268
+ val = curCSS( elem, name, styles );
269
+ }
270
+
271
+ //convert "normal" to computed value
272
+ if ( val === "normal" && name in cssNormalTransform ) {
273
+ val = cssNormalTransform[ name ];
274
+ }
275
+
276
+ // Return, converting to number if forced or a qualifier was provided and val looks numeric
277
+ if ( extra === "" || extra ) {
278
+ num = parseFloat( val );
279
+ return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
280
+ }
281
+ return val;
282
+ },
283
+
284
+ // A method for quickly swapping in/out CSS properties to get correct calculations
285
+ swap: function( elem, options, callback, args ) {
286
+ var ret, name,
287
+ old = {};
288
+
289
+ // Remember the old values, and insert the new ones
290
+ for ( name in options ) {
291
+ old[ name ] = elem.style[ name ];
292
+ elem.style[ name ] = options[ name ];
293
+ }
294
+
295
+ ret = callback.apply( elem, args || [] );
296
+
297
+ // Revert the old values
298
+ for ( name in options ) {
299
+ elem.style[ name ] = old[ name ];
300
+ }
301
+
302
+ return ret;
303
+ }
304
+ });
305
+
306
+ // NOTE: we've included the "window" in window.getComputedStyle
307
+ // because jsdom on node.js will break without it.
308
+ if ( window.getComputedStyle ) {
309
+ getStyles = function( elem ) {
310
+ return window.getComputedStyle( elem, null );
311
+ };
312
+
313
+ curCSS = function( elem, name, _computed ) {
314
+ var width, minWidth, maxWidth,
315
+ computed = _computed || getStyles( elem ),
316
+
317
+ // getPropertyValue is only needed for .css('filter') in IE9, see #12537
318
+ ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
319
+ style = elem.style;
320
+
321
+ if ( computed ) {
322
+
323
+ if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
324
+ ret = jQuery.style( elem, name );
325
+ }
326
+
327
+ // A tribute to the "awesome hack by Dean Edwards"
328
+ // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
329
+ // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
330
+ // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
331
+ if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
332
+
333
+ // Remember the original values
334
+ width = style.width;
335
+ minWidth = style.minWidth;
336
+ maxWidth = style.maxWidth;
337
+
338
+ // Put in the new values to get a computed value out
339
+ style.minWidth = style.maxWidth = style.width = ret;
340
+ ret = computed.width;
341
+
342
+ // Revert the changed values
343
+ style.width = width;
344
+ style.minWidth = minWidth;
345
+ style.maxWidth = maxWidth;
346
+ }
347
+ }
348
+
349
+ return ret;
350
+ };
351
+ } else if ( document.documentElement.currentStyle ) {
352
+ getStyles = function( elem ) {
353
+ return elem.currentStyle;
354
+ };
355
+
356
+ curCSS = function( elem, name, _computed ) {
357
+ var left, rs, rsLeft,
358
+ computed = _computed || getStyles( elem ),
359
+ ret = computed ? computed[ name ] : undefined,
360
+ style = elem.style;
361
+
362
+ // Avoid setting ret to empty string here
363
+ // so we don't default to auto
364
+ if ( ret == null && style && style[ name ] ) {
365
+ ret = style[ name ];
366
+ }
367
+
368
+ // From the awesome hack by Dean Edwards
369
+ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
370
+
371
+ // If we're not dealing with a regular pixel number
372
+ // but a number that has a weird ending, we need to convert it to pixels
373
+ // but not position css attributes, as those are proportional to the parent element instead
374
+ // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
375
+ if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
376
+
377
+ // Remember the original values
378
+ left = style.left;
379
+ rs = elem.runtimeStyle;
380
+ rsLeft = rs && rs.left;
381
+
382
+ // Put in the new values to get a computed value out
383
+ if ( rsLeft ) {
384
+ rs.left = elem.currentStyle.left;
385
+ }
386
+ style.left = name === "fontSize" ? "1em" : ret;
387
+ ret = style.pixelLeft + "px";
388
+
389
+ // Revert the changed values
390
+ style.left = left;
391
+ if ( rsLeft ) {
392
+ rs.left = rsLeft;
393
+ }
394
+ }
395
+
396
+ return ret === "" ? "auto" : ret;
397
+ };
398
+ }
399
+
400
+ function setPositiveNumber( elem, value, subtract ) {
401
+ var matches = rnumsplit.exec( value );
402
+ return matches ?
403
+ // Guard against undefined "subtract", e.g., when used as in cssHooks
404
+ Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
405
+ value;
406
+ }
407
+
408
+ function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
409
+ var i = extra === ( isBorderBox ? "border" : "content" ) ?
410
+ // If we already have the right measurement, avoid augmentation
411
+ 4 :
412
+ // Otherwise initialize for horizontal or vertical properties
413
+ name === "width" ? 1 : 0,
414
+
415
+ val = 0;
416
+
417
+ for ( ; i < 4; i += 2 ) {
418
+ // both box models exclude margin, so add it if we want it
419
+ if ( extra === "margin" ) {
420
+ val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
421
+ }
422
+
423
+ if ( isBorderBox ) {
424
+ // border-box includes padding, so remove it if we want content
425
+ if ( extra === "content" ) {
426
+ val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
427
+ }
428
+
429
+ // at this point, extra isn't border nor margin, so remove border
430
+ if ( extra !== "margin" ) {
431
+ val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
432
+ }
433
+ } else {
434
+ // at this point, extra isn't content, so add padding
435
+ val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
436
+
437
+ // at this point, extra isn't content nor padding, so add border
438
+ if ( extra !== "padding" ) {
439
+ val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
440
+ }
441
+ }
442
+ }
443
+
444
+ return val;
445
+ }
446
+
447
+ function getWidthOrHeight( elem, name, extra ) {
448
+
449
+ // Start with offset property, which is equivalent to the border-box value
450
+ var valueIsBorderBox = true,
451
+ val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
452
+ styles = getStyles( elem ),
453
+ isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
454
+
455
+ // some non-html elements return undefined for offsetWidth, so check for null/undefined
456
+ // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
457
+ // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
458
+ if ( val <= 0 || val == null ) {
459
+ // Fall back to computed then uncomputed css if necessary
460
+ val = curCSS( elem, name, styles );
461
+ if ( val < 0 || val == null ) {
462
+ val = elem.style[ name ];
463
+ }
464
+
465
+ // Computed unit is not pixels. Stop here and return.
466
+ if ( rnumnonpx.test(val) ) {
467
+ return val;
468
+ }
469
+
470
+ // we need the check for style in case a browser which returns unreliable values
471
+ // for getComputedStyle silently falls back to the reliable elem.style
472
+ valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
473
+
474
+ // Normalize "", auto, and prepare for extra
475
+ val = parseFloat( val ) || 0;
476
+ }
477
+
478
+ // use the active box-sizing model to add/subtract irrelevant styles
479
+ return ( val +
480
+ augmentWidthOrHeight(
481
+ elem,
482
+ name,
483
+ extra || ( isBorderBox ? "border" : "content" ),
484
+ valueIsBorderBox,
485
+ styles
486
+ )
487
+ ) + "px";
488
+ }
489
+
490
+ // Try to determine the default display value of an element
491
+ function css_defaultDisplay( nodeName ) {
492
+ var doc = document,
493
+ display = elemdisplay[ nodeName ];
494
+
495
+ if ( !display ) {
496
+ display = actualDisplay( nodeName, doc );
497
+
498
+ // If the simple way fails, read from inside an iframe
499
+ if ( display === "none" || !display ) {
500
+ // Use the already-created iframe if possible
501
+ iframe = ( iframe ||
502
+ jQuery("<iframe frameborder='0' width='0' height='0'/>")
503
+ .css( "cssText", "display:block !important" )
504
+ ).appendTo( doc.documentElement );
505
+
506
+ // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
507
+ doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
508
+ doc.write("<!doctype html><html><body>");
509
+ doc.close();
510
+
511
+ display = actualDisplay( nodeName, doc );
512
+ iframe.detach();
513
+ }
514
+
515
+ // Store the correct default display
516
+ elemdisplay[ nodeName ] = display;
517
+ }
518
+
519
+ return display;
520
+ }
521
+
522
+ // Called ONLY from within css_defaultDisplay
523
+ function actualDisplay( name, doc ) {
524
+ var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
525
+ display = jQuery.css( elem[0], "display" );
526
+ elem.remove();
527
+ return display;
528
+ }
529
+
530
+ jQuery.each([ "height", "width" ], function( i, name ) {
531
+ jQuery.cssHooks[ name ] = {
532
+ get: function( elem, computed, extra ) {
533
+ if ( computed ) {
534
+ // certain elements can have dimension info if we invisibly show them
535
+ // however, it must have a current display style that would benefit from this
536
+ return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
537
+ jQuery.swap( elem, cssShow, function() {
538
+ return getWidthOrHeight( elem, name, extra );
539
+ }) :
540
+ getWidthOrHeight( elem, name, extra );
541
+ }
542
+ },
543
+
544
+ set: function( elem, value, extra ) {
545
+ var styles = extra && getStyles( elem );
546
+ return setPositiveNumber( elem, value, extra ?
547
+ augmentWidthOrHeight(
548
+ elem,
549
+ name,
550
+ extra,
551
+ jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
552
+ styles
553
+ ) : 0
554
+ );
555
+ }
556
+ };
557
+ });
558
+
559
+ if ( !jQuery.support.opacity ) {
560
+ jQuery.cssHooks.opacity = {
561
+ get: function( elem, computed ) {
562
+ // IE uses filters for opacity
563
+ return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
564
+ ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
565
+ computed ? "1" : "";
566
+ },
567
+
568
+ set: function( elem, value ) {
569
+ var style = elem.style,
570
+ currentStyle = elem.currentStyle,
571
+ opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
572
+ filter = currentStyle && currentStyle.filter || style.filter || "";
573
+
574
+ // IE has trouble with opacity if it does not have layout
575
+ // Force it by setting the zoom level
576
+ style.zoom = 1;
577
+
578
+ // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
579
+ // if value === "", then remove inline opacity #12685
580
+ if ( ( value >= 1 || value === "" ) &&
581
+ jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
582
+ style.removeAttribute ) {
583
+
584
+ // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
585
+ // if "filter:" is present at all, clearType is disabled, we want to avoid this
586
+ // style.removeAttribute is IE Only, but so apparently is this code path...
587
+ style.removeAttribute( "filter" );
588
+
589
+ // if there is no filter style applied in a css rule or unset inline opacity, we are done
590
+ if ( value === "" || currentStyle && !currentStyle.filter ) {
591
+ return;
592
+ }
593
+ }
594
+
595
+ // otherwise, set new filter values
596
+ style.filter = ralpha.test( filter ) ?
597
+ filter.replace( ralpha, opacity ) :
598
+ filter + " " + opacity;
599
+ }
600
+ };
601
+ }
602
+
603
+ // These hooks cannot be added until DOM ready because the support test
604
+ // for it is not run until after DOM ready
605
+ jQuery(function() {
606
+ if ( !jQuery.support.reliableMarginRight ) {
607
+ jQuery.cssHooks.marginRight = {
608
+ get: function( elem, computed ) {
609
+ if ( computed ) {
610
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
611
+ // Work around by temporarily setting element display to inline-block
612
+ return jQuery.swap( elem, { "display": "inline-block" },
613
+ curCSS, [ elem, "marginRight" ] );
614
+ }
615
+ }
616
+ };
617
+ }
618
+
619
+ // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
620
+ // getComputedStyle returns percent when specified for top/left/bottom/right
621
+ // rather than make the css module depend on the offset module, we just check for it here
622
+ if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
623
+ jQuery.each( [ "top", "left" ], function( i, prop ) {
624
+ jQuery.cssHooks[ prop ] = {
625
+ get: function( elem, computed ) {
626
+ if ( computed ) {
627
+ computed = curCSS( elem, prop );
628
+ // if curCSS returns percentage, fallback to offset
629
+ return rnumnonpx.test( computed ) ?
630
+ jQuery( elem ).position()[ prop ] + "px" :
631
+ computed;
632
+ }
633
+ }
634
+ };
635
+ });
636
+ }
637
+
638
+ });
639
+
640
+ if ( jQuery.expr && jQuery.expr.filters ) {
641
+ jQuery.expr.filters.hidden = function( elem ) {
642
+ // Support: Opera <= 12.12
643
+ // Opera reports offsetWidths and offsetHeights less than zero on some elements
644
+ return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
645
+ (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
646
+ };
647
+
648
+ jQuery.expr.filters.visible = function( elem ) {
649
+ return !jQuery.expr.filters.hidden( elem );
650
+ };
651
+ }
652
+
653
+ // These hooks are used by animate to expand properties
654
+ jQuery.each({
655
+ margin: "",
656
+ padding: "",
657
+ border: "Width"
658
+ }, function( prefix, suffix ) {
659
+ jQuery.cssHooks[ prefix + suffix ] = {
660
+ expand: function( value ) {
661
+ var i = 0,
662
+ expanded = {},
663
+
664
+ // assumes a single number if not a string
665
+ parts = typeof value === "string" ? value.split(" ") : [ value ];
666
+
667
+ for ( ; i < 4; i++ ) {
668
+ expanded[ prefix + cssExpand[ i ] + suffix ] =
669
+ parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
670
+ }
671
+
672
+ return expanded;
673
+ }
674
+ };
675
+
676
+ if ( !rmargin.test( prefix ) ) {
677
+ jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
678
+ }
679
+ });