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,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
+ });