unpoly-rails 0.20.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of unpoly-rails might be problematic. Click here for more details.

Files changed (339) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.ruby-version +2 -0
  4. data/.yardopts +1 -0
  5. data/CHANGELOG.md +577 -0
  6. data/Gemfile +8 -0
  7. data/Gemfile.lock +42 -0
  8. data/LICENSE +22 -0
  9. data/README.md +75 -0
  10. data/README_RAILS.md +116 -0
  11. data/Rakefile +45 -0
  12. data/bower.json +26 -0
  13. data/design/animation-ghosting.txt +72 -0
  14. data/design/design.txt +34 -0
  15. data/design/draft.html.erb +48 -0
  16. data/design/draft.rb +9 -0
  17. data/design/ghost-debugging.txt +118 -0
  18. data/design/homepage.txt +236 -0
  19. data/design/rename.txt +0 -0
  20. data/dist/unpoly-bootstrap3.css +5 -0
  21. data/dist/unpoly-bootstrap3.js +28 -0
  22. data/dist/unpoly-bootstrap3.min.css +1 -0
  23. data/dist/unpoly-bootstrap3.min.js +1 -0
  24. data/dist/unpoly.css +98 -0
  25. data/dist/unpoly.js +9041 -0
  26. data/dist/unpoly.min.css +1 -0
  27. data/dist/unpoly.min.js +3 -0
  28. data/lib/assets/javascripts/unpoly-bootstrap3.js.coffee +2 -0
  29. data/lib/assets/javascripts/unpoly-bootstrap3/form-ext.js.coffee +1 -0
  30. data/lib/assets/javascripts/unpoly-bootstrap3/layout-ext.js.coffee +5 -0
  31. data/lib/assets/javascripts/unpoly-bootstrap3/modal-ext.js.coffee +11 -0
  32. data/lib/assets/javascripts/unpoly-bootstrap3/navigation-ext.js.coffee +3 -0
  33. data/lib/assets/javascripts/unpoly.js.coffee +20 -0
  34. data/lib/assets/javascripts/unpoly/browser.js.coffee +252 -0
  35. data/lib/assets/javascripts/unpoly/bus.js.coffee +393 -0
  36. data/lib/assets/javascripts/unpoly/flow.js.coffee +809 -0
  37. data/lib/assets/javascripts/unpoly/form.js.coffee +864 -0
  38. data/lib/assets/javascripts/unpoly/history.js.coffee +204 -0
  39. data/lib/assets/javascripts/unpoly/layout.js.coffee +529 -0
  40. data/lib/assets/javascripts/unpoly/link.js.coffee +496 -0
  41. data/lib/assets/javascripts/unpoly/log.js.coffee +73 -0
  42. data/lib/assets/javascripts/unpoly/modal.js.coffee +509 -0
  43. data/lib/assets/javascripts/unpoly/module.js.coffee +4 -0
  44. data/lib/assets/javascripts/unpoly/motion.js.coffee +690 -0
  45. data/lib/assets/javascripts/unpoly/navigation.js.coffee +219 -0
  46. data/lib/assets/javascripts/unpoly/popup.js.coffee +409 -0
  47. data/lib/assets/javascripts/unpoly/proxy.js.coffee +521 -0
  48. data/lib/assets/javascripts/unpoly/rails.js.coffee +36 -0
  49. data/lib/assets/javascripts/unpoly/syntax.js.coffee +337 -0
  50. data/lib/assets/javascripts/unpoly/tooltip.js.coffee +183 -0
  51. data/lib/assets/javascripts/unpoly/util.js.coffee +1593 -0
  52. data/lib/assets/stylesheets/unpoly-bootstrap3.css.sass +1 -0
  53. data/lib/assets/stylesheets/unpoly-bootstrap3/modal-ext.css.sass +9 -0
  54. data/lib/assets/stylesheets/unpoly.css.sass +1 -0
  55. data/lib/assets/stylesheets/unpoly/close.css.sass +2 -0
  56. data/lib/assets/stylesheets/unpoly/error.css.sass +15 -0
  57. data/lib/assets/stylesheets/unpoly/link.css.sass +2 -0
  58. data/lib/assets/stylesheets/unpoly/modal.css.sass +69 -0
  59. data/lib/assets/stylesheets/unpoly/popup.css.sass +8 -0
  60. data/lib/assets/stylesheets/unpoly/tooltip.css.sass +42 -0
  61. data/lib/unpoly-rails.rb +7 -0
  62. data/lib/unpoly/rails/engine.rb +6 -0
  63. data/lib/unpoly/rails/inspector.rb +78 -0
  64. data/lib/unpoly/rails/inspector_accessor.rb +30 -0
  65. data/lib/unpoly/rails/request_echo_headers.rb +27 -0
  66. data/lib/unpoly/rails/request_method_cookie.rb +36 -0
  67. data/lib/unpoly/rails/version.rb +9 -0
  68. data/spec_app/.firefox-version +1 -0
  69. data/spec_app/.gitignore +17 -0
  70. data/spec_app/.rspec +2 -0
  71. data/spec_app/Bowerfile +3 -0
  72. data/spec_app/Gemfile +29 -0
  73. data/spec_app/Gemfile.lock +212 -0
  74. data/spec_app/README.rdoc +28 -0
  75. data/spec_app/Rakefile +6 -0
  76. data/spec_app/app/assets/images/.keep +0 -0
  77. data/spec_app/app/assets/javascripts/application.js +20 -0
  78. data/spec_app/app/assets/stylesheets/application.css +17 -0
  79. data/spec_app/app/assets/stylesheets/blocks/card.css.sass +11 -0
  80. data/spec_app/app/assets/stylesheets/blocks/controls.css.sass +7 -0
  81. data/spec_app/app/assets/stylesheets/blocks/menu.css.sass +13 -0
  82. data/spec_app/app/assets/stylesheets/blocks/panel.css.sass +8 -0
  83. data/spec_app/app/assets/stylesheets/jasmine_specs.css +5 -0
  84. data/spec_app/app/controllers/application_controller.rb +6 -0
  85. data/spec_app/app/controllers/concerns/.keep +0 -0
  86. data/spec_app/app/controllers/test_controller.rb +28 -0
  87. data/spec_app/app/helpers/application_helper.rb +2 -0
  88. data/spec_app/app/mailers/.keep +0 -0
  89. data/spec_app/app/models/concerns/.keep +0 -0
  90. data/spec_app/app/views/layouts/application.html.erb +12 -0
  91. data/spec_app/bin/bundle +3 -0
  92. data/spec_app/bin/rails +8 -0
  93. data/spec_app/bin/rake +8 -0
  94. data/spec_app/bin/setup +29 -0
  95. data/spec_app/bin/spring +18 -0
  96. data/spec_app/config.ru +4 -0
  97. data/spec_app/config/application.rb +26 -0
  98. data/spec_app/config/boot.rb +3 -0
  99. data/spec_app/config/database.yml +25 -0
  100. data/spec_app/config/environment.rb +5 -0
  101. data/spec_app/config/environments/development.rb +41 -0
  102. data/spec_app/config/environments/production.rb +79 -0
  103. data/spec_app/config/environments/test.rb +42 -0
  104. data/spec_app/config/initializers/assets.rb +11 -0
  105. data/spec_app/config/initializers/backtrace_silencers.rb +7 -0
  106. data/spec_app/config/initializers/bower_rails.rb +16 -0
  107. data/spec_app/config/initializers/cookies_serializer.rb +3 -0
  108. data/spec_app/config/initializers/filter_parameter_logging.rb +4 -0
  109. data/spec_app/config/initializers/inflections.rb +16 -0
  110. data/spec_app/config/initializers/mime_types.rb +4 -0
  111. data/spec_app/config/initializers/session_store.rb +3 -0
  112. data/spec_app/config/initializers/wrap_parameters.rb +14 -0
  113. data/spec_app/config/locales/en.yml +23 -0
  114. data/spec_app/config/routes.rb +8 -0
  115. data/spec_app/config/secrets.yml +22 -0
  116. data/spec_app/db/schema.rb +23 -0
  117. data/spec_app/db/seeds.rb +7 -0
  118. data/spec_app/lib/assets/.keep +0 -0
  119. data/spec_app/lib/tasks/.keep +0 -0
  120. data/spec_app/lib/tasks/cucumber.rake +65 -0
  121. data/spec_app/log/.keep +0 -0
  122. data/spec_app/public/404.html +67 -0
  123. data/spec_app/public/422.html +67 -0
  124. data/spec_app/public/500.html +66 -0
  125. data/spec_app/public/favicon.ico +0 -0
  126. data/spec_app/public/robots.txt +5 -0
  127. data/spec_app/script/cucumber +10 -0
  128. data/spec_app/spec/controllers/test_controller_spec.rb +76 -0
  129. data/spec_app/spec/javascripts/helpers/append_fixture.js.coffee +8 -0
  130. data/spec_app/spec/javascripts/helpers/browser_switches.js.coffee +9 -0
  131. data/spec_app/spec/javascripts/helpers/index.js.coffee +1 -0
  132. data/spec_app/spec/javascripts/helpers/knife.js.coffee +69 -0
  133. data/spec_app/spec/javascripts/helpers/last_request.js.coffee +22 -0
  134. data/spec_app/spec/javascripts/helpers/mock_ajax.js.coffee +5 -0
  135. data/spec_app/spec/javascripts/helpers/mock_clock.js.coffee +2 -0
  136. data/spec_app/spec/javascripts/helpers/remove_body_margin.js.coffee +5 -0
  137. data/spec_app/spec/javascripts/helpers/reset_knife.js.coffee +2 -0
  138. data/spec_app/spec/javascripts/helpers/reset_path.js.coffee +8 -0
  139. data/spec_app/spec/javascripts/helpers/reset_up.js.coffee +4 -0
  140. data/spec_app/spec/javascripts/helpers/restore_body_scroll.js.coffee +2 -0
  141. data/spec_app/spec/javascripts/helpers/set_timer.js.coffee +3 -0
  142. data/spec_app/spec/javascripts/helpers/to_be_around.js.coffee +5 -0
  143. data/spec_app/spec/javascripts/helpers/to_be_blank.js.coffee +5 -0
  144. data/spec_app/spec/javascripts/helpers/to_be_given.js.coffee +5 -0
  145. data/spec_app/spec/javascripts/helpers/to_be_missing.js.coffee +5 -0
  146. data/spec_app/spec/javascripts/helpers/to_be_present.js.coffee +5 -0
  147. data/spec_app/spec/javascripts/helpers/to_end_with.js.coffee +8 -0
  148. data/spec_app/spec/javascripts/helpers/to_equal_jquery.js.coffee +9 -0
  149. data/spec_app/spec/javascripts/helpers/to_have_request_method.js.coffee +8 -0
  150. data/spec_app/spec/javascripts/helpers/trigger.js.coffee +68 -0
  151. data/spec_app/spec/javascripts/support/jasmine.yml +51 -0
  152. data/spec_app/spec/javascripts/up/bus_spec.js.coffee +122 -0
  153. data/spec_app/spec/javascripts/up/flow_spec.js.coffee +755 -0
  154. data/spec_app/spec/javascripts/up/form_spec.js.coffee +471 -0
  155. data/spec_app/spec/javascripts/up/history_spec.js.coffee +96 -0
  156. data/spec_app/spec/javascripts/up/layout_spec.js.coffee +318 -0
  157. data/spec_app/spec/javascripts/up/link_spec.js.coffee +340 -0
  158. data/spec_app/spec/javascripts/up/modal_spec.js.coffee +265 -0
  159. data/spec_app/spec/javascripts/up/motion_spec.js.coffee +306 -0
  160. data/spec_app/spec/javascripts/up/navigation_spec.js.coffee +132 -0
  161. data/spec_app/spec/javascripts/up/popup_spec.js.coffee +220 -0
  162. data/spec_app/spec/javascripts/up/proxy_spec.js.coffee +371 -0
  163. data/spec_app/spec/javascripts/up/rails_spec.js.coffee +101 -0
  164. data/spec_app/spec/javascripts/up/syntax_spec.js.coffee +99 -0
  165. data/spec_app/spec/javascripts/up/tooltip_spec.js.coffee +60 -0
  166. data/spec_app/spec/javascripts/up/util_spec.js.coffee +325 -0
  167. data/spec_app/spec/spec_helper.rb +62 -0
  168. data/spec_app/test/controllers/.keep +0 -0
  169. data/spec_app/test/fixtures/.keep +0 -0
  170. data/spec_app/test/helpers/.keep +0 -0
  171. data/spec_app/test/integration/.keep +0 -0
  172. data/spec_app/test/mailers/.keep +0 -0
  173. data/spec_app/test/models/.keep +0 -0
  174. data/spec_app/test/test_helper.rb +10 -0
  175. data/spec_app/vendor/assets/.bowerrc +3 -0
  176. data/spec_app/vendor/assets/bower.json +8 -0
  177. data/spec_app/vendor/assets/bower_components/jasmine-ajax/.bower.json +43 -0
  178. data/spec_app/vendor/assets/bower_components/jasmine-ajax/MIT.LICENSE +20 -0
  179. data/spec_app/vendor/assets/bower_components/jasmine-ajax/README.markdown +289 -0
  180. data/spec_app/vendor/assets/bower_components/jasmine-ajax/bower.json +35 -0
  181. data/spec_app/vendor/assets/bower_components/jasmine-ajax/lib/mock-ajax.js +733 -0
  182. data/spec_app/vendor/assets/bower_components/jasmine-ajax/package.json +26 -0
  183. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/2.0.2.md +50 -0
  184. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/2.99.md +14 -0
  185. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/3.0.md +28 -0
  186. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/3.1.0.md +24 -0
  187. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/3.1.1.md +23 -0
  188. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/3.2.0.md +20 -0
  189. data/spec_app/vendor/assets/bower_components/jasmine-fixture/.bower.json +27 -0
  190. data/spec_app/vendor/assets/bower_components/jasmine-fixture/.gitignore +8 -0
  191. data/spec_app/vendor/assets/bower_components/jasmine-fixture/.npmignore +8 -0
  192. data/spec_app/vendor/assets/bower_components/jasmine-fixture/LICENSE.txt +24 -0
  193. data/spec_app/vendor/assets/bower_components/jasmine-fixture/README.md +118 -0
  194. data/spec_app/vendor/assets/bower_components/jasmine-fixture/bower.json +17 -0
  195. data/spec_app/vendor/assets/bower_components/jasmine-fixture/dist/jasmine-fixture.js +433 -0
  196. data/spec_app/vendor/assets/bower_components/jasmine-fixture/dist/jasmine-fixture.min.js +5 -0
  197. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/basic-usage-spec.coffee +14 -0
  198. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/helpers/invariants.coffee +17 -0
  199. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/helpers/spec-within-a-spec.coffee +24 -0
  200. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/helpers/tmp-files.coffee +8 -0
  201. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/support/jasmine1-testem-config.json +11 -0
  202. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/support/jasmine2-testem-config.json +11 -0
  203. data/spec_app/vendor/assets/bower_components/jasmine-fixture/vendor/js/jquery-1.11.0.js +10337 -0
  204. data/spec_app/vendor/assets/bower_components/jasmine-fixture/vendor/js/jquery-1.8.3.js +9472 -0
  205. data/spec_app/vendor/assets/bower_components/jasmine-fixture/vendor/js/jquery-2.1.0.js +9111 -0
  206. data/spec_app/vendor/assets/bower_components/jasmine-jquery/.bower.json +26 -0
  207. data/spec_app/vendor/assets/bower_components/jasmine-jquery/CONTRIBUTING.md +28 -0
  208. data/spec_app/vendor/assets/bower_components/jasmine-jquery/Gruntfile.js +49 -0
  209. data/spec_app/vendor/assets/bower_components/jasmine-jquery/LICENSE +20 -0
  210. data/spec_app/vendor/assets/bower_components/jasmine-jquery/README.md +367 -0
  211. data/spec_app/vendor/assets/bower_components/jasmine-jquery/bower.json +15 -0
  212. data/spec_app/vendor/assets/bower_components/jasmine-jquery/lib/jasmine-jquery.js +838 -0
  213. data/spec_app/vendor/assets/bower_components/jasmine-jquery/package.json +35 -0
  214. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/fixture_with_checkbox_with_checked.html +6 -0
  215. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/fixture_with_javascript.html +1 -0
  216. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/fixture_with_javascript_block.html +1 -0
  217. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/javascripts/jasmine_javascript_click.js +1 -0
  218. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/javascripts/jasmine_javascript_hover.js +1 -0
  219. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/json/jasmine_json_test.json +1 -0
  220. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/real_non_mocked_fixture.html +1 -0
  221. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/real_non_mocked_fixture_style.css +1 -0
  222. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/suites/jasmine-jquery-spec.js +1842 -0
  223. data/spec_app/vendor/assets/bower_components/jasmine/.bower.json +50 -0
  224. data/spec_app/vendor/assets/bower_components/jasmine/CONTRIBUTING.md +130 -0
  225. data/spec_app/vendor/assets/bower_components/jasmine/GOALS_2.0.md +64 -0
  226. data/spec_app/vendor/assets/bower_components/jasmine/MANIFEST.in +5 -0
  227. data/spec_app/vendor/assets/bower_components/jasmine/MIT.LICENSE +20 -0
  228. data/spec_app/vendor/assets/bower_components/jasmine/README.md +73 -0
  229. data/spec_app/vendor/assets/bower_components/jasmine/RELEASE.md +73 -0
  230. data/spec_app/vendor/assets/bower_components/jasmine/bower.json +41 -0
  231. data/spec_app/vendor/assets/bower_components/jasmine/images/jasmine-horizontal.png +0 -0
  232. data/spec_app/vendor/assets/bower_components/jasmine/images/jasmine-horizontal.svg +102 -0
  233. data/spec_app/vendor/assets/bower_components/jasmine/images/jasmine_favicon.png +0 -0
  234. data/spec_app/vendor/assets/bower_components/jasmine/lib/console/console.js +190 -0
  235. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core.js +37 -0
  236. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/boot.js +143 -0
  237. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/example/node_example/lib/jasmine_examples/Player.js +24 -0
  238. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/example/node_example/lib/jasmine_examples/Song.js +9 -0
  239. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/jasmine-html.js +446 -0
  240. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/jasmine.css +58 -0
  241. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/jasmine.js +3298 -0
  242. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/json2.js +489 -0
  243. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/node_boot.js +41 -0
  244. data/spec_app/vendor/assets/bower_components/jasmine/package.json +34 -0
  245. data/spec_app/vendor/assets/bower_components/jasmine/requirements.txt +1 -0
  246. data/spec_app/vendor/assets/bower_components/jquery/.bower.json +38 -0
  247. data/spec_app/vendor/assets/bower_components/jquery/MIT-LICENSE.txt +21 -0
  248. data/spec_app/vendor/assets/bower_components/jquery/bower.json +28 -0
  249. data/spec_app/vendor/assets/bower_components/jquery/dist/jquery.js +9210 -0
  250. data/spec_app/vendor/assets/bower_components/jquery/dist/jquery.min.js +5 -0
  251. data/spec_app/vendor/assets/bower_components/jquery/dist/jquery.min.map +1 -0
  252. data/spec_app/vendor/assets/bower_components/jquery/src/ajax.js +786 -0
  253. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/jsonp.js +89 -0
  254. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/load.js +75 -0
  255. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/parseJSON.js +13 -0
  256. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/parseXML.js +28 -0
  257. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/script.js +64 -0
  258. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/var/nonce.js +5 -0
  259. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/var/rquery.js +3 -0
  260. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/xhr.js +136 -0
  261. data/spec_app/vendor/assets/bower_components/jquery/src/attributes.js +11 -0
  262. data/spec_app/vendor/assets/bower_components/jquery/src/attributes/attr.js +141 -0
  263. data/spec_app/vendor/assets/bower_components/jquery/src/attributes/classes.js +158 -0
  264. data/spec_app/vendor/assets/bower_components/jquery/src/attributes/prop.js +94 -0
  265. data/spec_app/vendor/assets/bower_components/jquery/src/attributes/support.js +35 -0
  266. data/spec_app/vendor/assets/bower_components/jquery/src/attributes/val.js +161 -0
  267. data/spec_app/vendor/assets/bower_components/jquery/src/callbacks.js +205 -0
  268. data/spec_app/vendor/assets/bower_components/jquery/src/core.js +502 -0
  269. data/spec_app/vendor/assets/bower_components/jquery/src/core/access.js +60 -0
  270. data/spec_app/vendor/assets/bower_components/jquery/src/core/init.js +123 -0
  271. data/spec_app/vendor/assets/bower_components/jquery/src/core/parseHTML.js +39 -0
  272. data/spec_app/vendor/assets/bower_components/jquery/src/core/ready.js +97 -0
  273. data/spec_app/vendor/assets/bower_components/jquery/src/core/var/rsingleTag.js +4 -0
  274. data/spec_app/vendor/assets/bower_components/jquery/src/css.js +450 -0
  275. data/spec_app/vendor/assets/bower_components/jquery/src/css/addGetHookIf.js +22 -0
  276. data/spec_app/vendor/assets/bower_components/jquery/src/css/curCSS.js +57 -0
  277. data/spec_app/vendor/assets/bower_components/jquery/src/css/defaultDisplay.js +70 -0
  278. data/spec_app/vendor/assets/bower_components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  279. data/spec_app/vendor/assets/bower_components/jquery/src/css/support.js +96 -0
  280. data/spec_app/vendor/assets/bower_components/jquery/src/css/swap.js +28 -0
  281. data/spec_app/vendor/assets/bower_components/jquery/src/css/var/cssExpand.js +3 -0
  282. data/spec_app/vendor/assets/bower_components/jquery/src/css/var/getStyles.js +12 -0
  283. data/spec_app/vendor/assets/bower_components/jquery/src/css/var/isHidden.js +13 -0
  284. data/spec_app/vendor/assets/bower_components/jquery/src/css/var/rmargin.js +3 -0
  285. data/spec_app/vendor/assets/bower_components/jquery/src/css/var/rnumnonpx.js +5 -0
  286. data/spec_app/vendor/assets/bower_components/jquery/src/data.js +178 -0
  287. data/spec_app/vendor/assets/bower_components/jquery/src/data/Data.js +181 -0
  288. data/spec_app/vendor/assets/bower_components/jquery/src/data/accepts.js +20 -0
  289. data/spec_app/vendor/assets/bower_components/jquery/src/data/var/data_priv.js +5 -0
  290. data/spec_app/vendor/assets/bower_components/jquery/src/data/var/data_user.js +5 -0
  291. data/spec_app/vendor/assets/bower_components/jquery/src/deferred.js +149 -0
  292. data/spec_app/vendor/assets/bower_components/jquery/src/deprecated.js +13 -0
  293. data/spec_app/vendor/assets/bower_components/jquery/src/dimensions.js +50 -0
  294. data/spec_app/vendor/assets/bower_components/jquery/src/effects.js +648 -0
  295. data/spec_app/vendor/assets/bower_components/jquery/src/effects/Tween.js +114 -0
  296. data/spec_app/vendor/assets/bower_components/jquery/src/effects/animatedSelector.js +13 -0
  297. data/spec_app/vendor/assets/bower_components/jquery/src/event.js +868 -0
  298. data/spec_app/vendor/assets/bower_components/jquery/src/event/ajax.js +13 -0
  299. data/spec_app/vendor/assets/bower_components/jquery/src/event/alias.js +39 -0
  300. data/spec_app/vendor/assets/bower_components/jquery/src/event/support.js +9 -0
  301. data/spec_app/vendor/assets/bower_components/jquery/src/exports/amd.js +24 -0
  302. data/spec_app/vendor/assets/bower_components/jquery/src/exports/global.js +32 -0
  303. data/spec_app/vendor/assets/bower_components/jquery/src/intro.js +44 -0
  304. data/spec_app/vendor/assets/bower_components/jquery/src/jquery.js +37 -0
  305. data/spec_app/vendor/assets/bower_components/jquery/src/manipulation.js +580 -0
  306. data/spec_app/vendor/assets/bower_components/jquery/src/manipulation/_evalUrl.js +18 -0
  307. data/spec_app/vendor/assets/bower_components/jquery/src/manipulation/support.js +32 -0
  308. data/spec_app/vendor/assets/bower_components/jquery/src/manipulation/var/rcheckableType.js +3 -0
  309. data/spec_app/vendor/assets/bower_components/jquery/src/offset.js +207 -0
  310. data/spec_app/vendor/assets/bower_components/jquery/src/outro.js +1 -0
  311. data/spec_app/vendor/assets/bower_components/jquery/src/queue.js +142 -0
  312. data/spec_app/vendor/assets/bower_components/jquery/src/queue/delay.js +22 -0
  313. data/spec_app/vendor/assets/bower_components/jquery/src/selector-native.js +172 -0
  314. data/spec_app/vendor/assets/bower_components/jquery/src/selector-sizzle.js +14 -0
  315. data/spec_app/vendor/assets/bower_components/jquery/src/selector.js +1 -0
  316. data/spec_app/vendor/assets/bower_components/jquery/src/serialize.js +111 -0
  317. data/spec_app/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.js +2067 -0
  318. data/spec_app/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  319. data/spec_app/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  320. data/spec_app/vendor/assets/bower_components/jquery/src/traversing.js +199 -0
  321. data/spec_app/vendor/assets/bower_components/jquery/src/traversing/findFilter.js +100 -0
  322. data/spec_app/vendor/assets/bower_components/jquery/src/traversing/var/rneedsContext.js +6 -0
  323. data/spec_app/vendor/assets/bower_components/jquery/src/var/arr.js +3 -0
  324. data/spec_app/vendor/assets/bower_components/jquery/src/var/class2type.js +4 -0
  325. data/spec_app/vendor/assets/bower_components/jquery/src/var/concat.js +5 -0
  326. data/spec_app/vendor/assets/bower_components/jquery/src/var/hasOwn.js +5 -0
  327. data/spec_app/vendor/assets/bower_components/jquery/src/var/indexOf.js +5 -0
  328. data/spec_app/vendor/assets/bower_components/jquery/src/var/pnum.js +3 -0
  329. data/spec_app/vendor/assets/bower_components/jquery/src/var/push.js +5 -0
  330. data/spec_app/vendor/assets/bower_components/jquery/src/var/rnotwhite.js +3 -0
  331. data/spec_app/vendor/assets/bower_components/jquery/src/var/slice.js +5 -0
  332. data/spec_app/vendor/assets/bower_components/jquery/src/var/strundefined.js +3 -0
  333. data/spec_app/vendor/assets/bower_components/jquery/src/var/support.js +4 -0
  334. data/spec_app/vendor/assets/bower_components/jquery/src/var/toString.js +5 -0
  335. data/spec_app/vendor/assets/bower_components/jquery/src/wrap.js +79 -0
  336. data/spec_app/vendor/assets/javascripts/.keep +0 -0
  337. data/spec_app/vendor/assets/stylesheets/.keep +0 -0
  338. data/unpoly-rails.gemspec +24 -0
  339. metadata +423 -0
@@ -0,0 +1,4 @@
1
+ ###*
2
+ @module up
3
+ ###
4
+ window.up = {}
@@ -0,0 +1,690 @@
1
+ ###*
2
+ Animation
3
+ =========
4
+
5
+ Whenever you update a page fragment (through methods like
6
+ [`up.replace`](/up.replace) or UJS attributes like [`up-target`](/up-target))
7
+ you can animate the change.
8
+
9
+ For instance, when you replace a selector `.list` with a new `.list`
10
+ from the server, you can add an `up-transition="cross-fade"` attribute
11
+ to smoothly fade out the old `.list` while fading in the new `.list`:
12
+
13
+ <a href="/users" up-target=".list" up-transition="cross-fade">Show users</a>
14
+
15
+ When we morph between an old an new element, we call it a *transition*.
16
+ In contrast, when we animate a new element without simultaneously removing an
17
+ old element, we call it an *animation*.
18
+
19
+ An example for an animation is opening a new dialog, which we can animate
20
+ using the `up-animation` attribute:
21
+
22
+ <a href="/users" up-modal=".list" up-animation="move-from-top">Show users</a>
23
+
24
+ Unpoly ships with a number of predefined [animations](/up.animate#named-animation)
25
+ and [transitions](/up.morph#named-animation).
26
+ You can also easily [define your own animations](/up.animation)
27
+ or [transitions](/up.transition) using Javascript or CSS.
28
+
29
+ @class up.motion
30
+ ###
31
+ up.motion = (($) ->
32
+
33
+ u = up.util
34
+
35
+ animations = {}
36
+ defaultAnimations = {}
37
+ transitions = {}
38
+ defaultTransitions = {}
39
+
40
+ ###*
41
+ Sets default options for animations and transitions.
42
+
43
+ @property up.motion.config
44
+ @param {Number} [config.duration=300]
45
+ @param {Number} [config.delay=0]
46
+ @param {String} [config.easing='ease']
47
+ @param {Boolean} [config.enabled=true]
48
+ Whether animation is enabled.
49
+
50
+ Set this to `false` to disable animation globally.
51
+ This can be useful in full-stack integration tests like a Selenium test suite.
52
+
53
+ Regardless of this setting, all animations will be skipped on browsers
54
+ that do not support [CSS transitions](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions).
55
+ @stable
56
+ ###
57
+ config = u.config
58
+ duration: 300
59
+ delay: 0
60
+ easing: 'ease'
61
+ enabled: true
62
+
63
+ reset = ->
64
+ animations = u.copy(defaultAnimations)
65
+ transitions = u.copy(defaultTransitions)
66
+ config.reset()
67
+
68
+ ###*
69
+ Returns whether Unpoly will perform animations.
70
+
71
+ Animations will be performed if the browser supports
72
+ [CSS transitions](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions)
73
+ and if [`up.motion.config.enabled`](/up.motion.config) is set to `true` (which is the default).
74
+
75
+ @function up.motion.isEnabled
76
+ @return {Boolean}
77
+ @stable
78
+ ###
79
+ isEnabled = ->
80
+ config.enabled && up.browser.canCssTransition()
81
+
82
+ ###*
83
+ Applies the given animation to the given element.
84
+
85
+ \#\#\#\# Example
86
+
87
+ up.animate('.warning', 'fade-in');
88
+
89
+ You can pass additional options:
90
+
91
+ up.animate('warning', '.fade-in', {
92
+ delay: 1000,
93
+ duration: 250,
94
+ easing: 'linear'
95
+ });
96
+
97
+ \#\#\#\# Named animations
98
+
99
+ The following animations are pre-defined:
100
+
101
+ | `fade-in` | Changes the element's opacity from 0% to 100% |
102
+ | `fade-out` | Changes the element's opacity from 100% to 0% |
103
+ | `move-to-top` | Moves the element upwards until it exits the screen at the top edge |
104
+ | `move-from-top` | Moves the element downwards from beyond the top edge of the screen until it reaches its current position |
105
+ | `move-to-bottom` | Moves the element downwards until it exits the screen at the bottom edge |
106
+ | `move-from-bottom` | Moves the element upwards from beyond the bottom edge of the screen until it reaches its current position |
107
+ | `move-to-left` | Moves the element leftwards until it exists the screen at the left edge |
108
+ | `move-from-left` | Moves the element rightwards from beyond the left edge of the screen until it reaches its current position |
109
+ | `move-to-right` | Moves the element rightwards until it exists the screen at the right edge |
110
+ | `move-from-right` | Moves the element leftwards from beyond the right edge of the screen until it reaches its current position |
111
+ | `none` | An animation that has no visible effect. Sounds useless at first, but can save you a lot of `if` statements. |
112
+
113
+ You can define additional named animations using [`up.animation`](/up.animation).
114
+
115
+ \#\#\#\# Animating CSS properties directly
116
+
117
+ By passing an object instead of an animation name, you can animate
118
+ the CSS properties of the given element:
119
+
120
+ var $warning = $('.warning');
121
+ $warning.css({ opacity: 0 });
122
+ up.animate($warning, { opacity: 1 });
123
+
124
+ \#\#\#\# Multiple animations on the same element
125
+
126
+ Unpoly doesn't allow more than one concurrent animation on the same element.
127
+
128
+ If you attempt to animate an element that is already being animated,
129
+ the previous animation will instantly jump to its last frame before
130
+ the new animation begins.
131
+
132
+ @function up.animate
133
+ @param {Element|jQuery|String} elementOrSelector
134
+ The element to animate.
135
+ @param {String|Function|Object} animation
136
+ Can either be:
137
+
138
+ - The animation's name
139
+ - A function performing the animation
140
+ - An object of CSS attributes describing the last frame of the animation
141
+ @param {Number} [options.duration=300]
142
+ The duration of the animation, in milliseconds.
143
+ @param {Number} [options.delay=0]
144
+ The delay before the animation starts, in milliseconds.
145
+ @param {String} [options.easing='ease']
146
+ The timing function that controls the animation's acceleration.
147
+ See [W3C documentation](http://www.w3.org/TR/css3-transitions/#transition-timing-function)
148
+ for a list of pre-defined timing functions.
149
+ @return {Promise}
150
+ A promise for the animation's end.
151
+ @stable
152
+ ###
153
+ animate = (elementOrSelector, animation, options) ->
154
+ $element = $(elementOrSelector)
155
+ finish($element)
156
+ options = animateOptions(options)
157
+ if animation == 'none' || animation == false
158
+ none()
159
+ else if u.isFunction(animation)
160
+ assertIsDeferred(animation($element, options), animation)
161
+ else if u.isString(animation)
162
+ animate($element, findAnimation(animation), options)
163
+ else if u.isHash(animation)
164
+ if isEnabled()
165
+ u.cssAnimate($element, animation, options)
166
+ else
167
+ # Directly set the last frame
168
+ $element.css(animation)
169
+ u.resolvedDeferred()
170
+ else
171
+ u.error("Unknown animation type for %o", animation)
172
+
173
+ ###*
174
+ Extracts animation-related options from the given options hash.
175
+ If `$element` is given, also inspects the element for animation-related
176
+ attributes like `up-easing` or `up-duration`.
177
+
178
+ @function up.motion.animateOptions
179
+ @internal
180
+ ###
181
+ animateOptions = (allOptions, $element = null) ->
182
+ allOptions = u.options(allOptions)
183
+ options = {}
184
+ options.easing = u.option(allOptions.easing, $element?.attr('up-easing'), config.easing)
185
+ options.duration = Number(u.option(allOptions.duration, $element?.attr('up-duration'), config.duration))
186
+ options.delay = Number(u.option(allOptions.delay, $element?.attr('up-delay'), config.delay))
187
+ options
188
+
189
+ findAnimation = (name) ->
190
+ animations[name] or u.error("Unknown animation %o", name)
191
+
192
+ GHOSTING_PROMISE_KEY = 'up-ghosting-promise'
193
+
194
+ withGhosts = ($old, $new, options, block) ->
195
+
196
+ oldCopy = undefined
197
+ newCopy = undefined
198
+ oldScrollTop = undefined
199
+ newScrollTop = undefined
200
+
201
+ $viewport = up.layout.viewportOf($old)
202
+
203
+ u.temporaryCss $new, display: 'none', ->
204
+ # Within this block, $new is hidden but $old is visible
205
+ oldCopy = prependCopy($old, $viewport)
206
+ oldCopy.$ghost.addClass('up-destroying')
207
+ oldCopy.$bounds.addClass('up-destroying')
208
+ # Remember the previous scroll position in case we will reveal $new below.
209
+ oldScrollTop = $viewport.scrollTop()
210
+ # $viewport.scrollTop(oldScrollTop + 1)
211
+
212
+ u.temporaryCss $old, display: 'none', ->
213
+ # Within this block, $old is hidden but $new is visible
214
+ up.layout.revealOrRestoreScroll($new, options)
215
+ newCopy = prependCopy($new, $viewport)
216
+ newScrollTop = $viewport.scrollTop()
217
+
218
+ # Since we have scrolled the viewport (containing both $old and $new),
219
+ # we must shift the old copy so it looks like it it is still sitting
220
+ # in the same position.
221
+ oldCopy.moveTop(newScrollTop - oldScrollTop)
222
+
223
+ # Hide $old since we no longer need it.
224
+ $old.hide()
225
+
226
+ # We will let $new take up space in the element flow, but hide it.
227
+ # The user will only see the two animated ghosts until the transition
228
+ # is over.
229
+ # Note that we must **not** use `visibility: hidden` to hide the new
230
+ # element. This would delay browser painting until the element is
231
+ # shown again, causing a flicker while the browser is painting.
232
+ showNew = u.temporaryCss($new, opacity: '0')
233
+
234
+ promise = block(oldCopy.$ghost, newCopy.$ghost)
235
+
236
+ # Make a way to look at $old and $new and see if an animation is
237
+ # already in progress. If someone attempted a new animation on the
238
+ # same elements, the stored promises would be resolved by the second
239
+ # animation call, making the transition jump to the last frame instantly.
240
+ $old.data(GHOSTING_PROMISE_KEY, promise)
241
+ $new.data(GHOSTING_PROMISE_KEY, promise)
242
+
243
+ promise.then ->
244
+ $old.removeData(GHOSTING_PROMISE_KEY)
245
+ $new.removeData(GHOSTING_PROMISE_KEY)
246
+ # Now that the transition is over we show $new again.
247
+ showNew()
248
+ oldCopy.$bounds.remove()
249
+ newCopy.$bounds.remove()
250
+
251
+ promise
252
+
253
+ ###*
254
+ Completes all [animations](/up.animate) and [transitions](/up.morph)
255
+ for the given element by jumping to the last animation frame instantly.
256
+
257
+ All callbacks chained to the original animation's promise will be called.
258
+
259
+ Does nothing if the given element is not currently animating.
260
+
261
+ @function up.motion.finish
262
+ @param {Element|jQuery|String} elementOrSelector
263
+ @stable
264
+ ###
265
+ finish = (elementOrSelector) ->
266
+ $(elementOrSelector).each ->
267
+ $element = $(this)
268
+ u.finishCssAnimate($element)
269
+ finishGhosting($element)
270
+
271
+ finishGhosting = ($element) ->
272
+ if existingGhosting = $element.data(GHOSTING_PROMISE_KEY)
273
+ up.puts('Canceling existing ghosting on %o', $element)
274
+ existingGhosting.resolve?()
275
+
276
+ assertIsDeferred = (object, source) ->
277
+ if u.isDeferred(object)
278
+ object
279
+ else
280
+ u.error("Did not return a promise with .then and .resolve methods: %o", source)
281
+
282
+ ###*
283
+ Performs an animated transition between two elements.
284
+ Transitions are implement by performing two animations in parallel,
285
+ causing one element to disappear and the other to appear.
286
+
287
+ Note that the transition does not remove any elements from the DOM.
288
+ The first element will remain in the DOM, albeit hidden using `display: none`.
289
+
290
+ \#\#\#\# Named transitions
291
+
292
+ The following transitions are pre-defined:
293
+
294
+ | `cross-fade` | Fades out the first element. Simultaneously fades in the second element. |
295
+ | `move-up` | Moves the first element upwards until it exits the screen at the top edge. Simultaneously moves the second element upwards from beyond the bottom edge of the screen until it reaches its current position. |
296
+ | `move-down` | Moves the first element downwards until it exits the screen at the bottom edge. Simultaneously moves the second element downwards from beyond the top edge of the screen until it reaches its current position. |
297
+ | `move-left` | Moves the first element leftwards until it exists the screen at the left edge. Simultaneously moves the second element leftwards from beyond the right edge of the screen until it reaches its current position. |
298
+ | `move-right` | Moves the first element rightwards until it exists the screen at the right edge. Simultaneously moves the second element rightwards from beyond the left edge of the screen until it reaches its current position. |
299
+ | `none` | A transition that has no visible effect. Sounds useless at first, but can save you a lot of `if` statements. |
300
+
301
+ You can define additional named transitions using [`up.transition`](/up.transition).
302
+
303
+ You can also compose a transition from two [named animations](/named-animations).
304
+ separated by a slash character (`/`):
305
+
306
+ - `move-to-bottom/fade-in`
307
+ - `move-to-left/move-from-top`
308
+
309
+ \#\#\#\# Implementation details
310
+
311
+ During a transition both the old and new element occupy
312
+ the same position on the screen.
313
+
314
+ Since the CSS layout flow will usually not allow two elements to
315
+ overlay the same space, Unpoly:
316
+
317
+ - The old and new elements are cloned
318
+ - The old element is removed from the layout flow using `display: hidden`
319
+ - The new element is hidden, but still leaves space in the layout flow by setting `visibility: hidden`
320
+ - The clones are [absolutely positioned](https://developer.mozilla.org/en-US/docs/Web/CSS/position#Absolute_positioning)
321
+ over the original elements.
322
+ - The transition is applied to the cloned elements.
323
+ At no point will the hidden, original elements be animated.
324
+ - When the transition has finished, the clones are removed from the DOM and the new element is shown.
325
+ The old element remains hidden in the DOM.
326
+
327
+ @function up.morph
328
+ @param {Element|jQuery|String} source
329
+ @param {Element|jQuery|String} target
330
+ @param {Function|String} transitionOrName
331
+ @param {Number} [options.duration=300]
332
+ The duration of the animation, in milliseconds.
333
+ @param {Number} [options.delay=0]
334
+ The delay before the animation starts, in milliseconds.
335
+ @param {String} [options.easing='ease']
336
+ The timing function that controls the transition's acceleration.
337
+ See [W3C documentation](http://www.w3.org/TR/css3-transitions/#transition-timing-function)
338
+ for a list of pre-defined timing functions.
339
+ @param {Boolean} [options.reveal=false]
340
+ Whether to reveal the new element by scrolling its parent viewport.
341
+ @return {Promise}
342
+ A promise for the transition's end.
343
+ @stable
344
+ ###
345
+ morph = (source, target, transitionOrName, options) ->
346
+ if transitionOrName == 'none'
347
+ transitionOrName = false
348
+
349
+ $old = $(source)
350
+ $new = $(target)
351
+
352
+ ensureMorphable($old, transitionOrName)
353
+ ensureMorphable($new, transitionOrName)
354
+
355
+ up.log.group ('Morphing %o to %o (using %o)' if transitionOrName), source, target, transitionOrName, ->
356
+
357
+ parsedOptions = u.only(options, 'reveal', 'restoreScroll', 'source')
358
+ parsedOptions = u.extend(parsedOptions, animateOptions(options))
359
+
360
+ if isEnabled()
361
+ finish($old)
362
+ finish($new)
363
+
364
+ if !transitionOrName
365
+ return skipMorph($old, $new, parsedOptions)
366
+ else if animation = animations[transitionOrName]
367
+ skipMorph($old, $new, parsedOptions)
368
+ return animate($new, animation, parsedOptions)
369
+ else if transition = u.presence(transitionOrName, u.isFunction) || transitions[transitionOrName]
370
+ return withGhosts $old, $new, parsedOptions, ($oldGhost, $newGhost) ->
371
+ transitionPromise = transition($oldGhost, $newGhost, parsedOptions)
372
+ assertIsDeferred(transitionPromise, transitionOrName)
373
+ else if u.isString(transitionOrName) && transitionOrName.indexOf('/') >= 0
374
+ parts = transitionOrName.split('/')
375
+ transition = ($old, $new, options) ->
376
+ resolvableWhen(
377
+ animate($old, parts[0], options),
378
+ animate($new, parts[1], options)
379
+ )
380
+ return morph($old, $new, transition, parsedOptions)
381
+ else
382
+ u.error("Unknown transition %o", transitionOrName)
383
+ else
384
+ return skipMorph($old, $new, parsedOptions)
385
+
386
+ ensureMorphable = ($element, transition) ->
387
+ if transition && $element.parents('body').length == 0
388
+ element = $element.get(0)
389
+ u.error("Can't morph a <%s> element (%o)", element.tagName, element)
390
+
391
+
392
+ ###*
393
+ This causes the side effects of a successful transition, but instantly.
394
+ We use this to skip morphing for old browsers, or when the developer
395
+ decides to only animate the new element (i.e. no real ghosting or transition) .
396
+
397
+ @internal
398
+ ###
399
+ skipMorph = ($old, $new, options) ->
400
+ # Simply hide the old element, which would be the side effect of withGhosts(...) below.
401
+ $old.hide()
402
+ # Since we cannot rely on withGhosts to control the scroll position
403
+ # in this branch, we need to do it ourselves.
404
+ up.layout.revealOrRestoreScroll($new, options)
405
+
406
+ ###*
407
+ @internal
408
+ ###
409
+ prependCopy = ($element, $viewport) ->
410
+ elementDims = u.measure($element, relative: true, inner: true)
411
+
412
+ $ghost = $element.clone()
413
+ $ghost.find('script').remove()
414
+ $ghost.css
415
+ # If the element had a layout context before, make sure the
416
+ # ghost will have layout context as well (and vice versa).
417
+ position: if $element.css('position') == 'static' then 'static' else 'relative'
418
+ top: ''
419
+ right: ''
420
+ bottom: ''
421
+ left: ''
422
+ width: '100%'
423
+ height: '100%'
424
+ $ghost.addClass('up-ghost')
425
+
426
+ # Wrap the ghost in another container so its margin can expand
427
+ # freely. If we would position the element directly (old implementation),
428
+ # it would gain a layout context which cannot be crossed by margins.
429
+ $bounds = $('<div class="up-bounds"></div>')
430
+ $bounds.css(position: 'absolute')
431
+ $bounds.css(elementDims)
432
+
433
+ top = elementDims.top
434
+
435
+ moveTop = (diff) ->
436
+ if diff != 0
437
+ top += diff
438
+ $bounds.css(top: top)
439
+
440
+ $ghost.appendTo($bounds)
441
+ $bounds.insertBefore($element)
442
+
443
+ # In theory, $ghost should now sit over $element perfectly.
444
+ # However, $element might collapse its margin against a previous sibling
445
+ # element, and $ghost does not have the same sibling.
446
+ # So we manually correct $ghost's top position so it aligns with $element.
447
+ moveTop($element.offset().top - $ghost.offset().top)
448
+
449
+ $fixedElements = up.layout.fixedChildren($ghost)
450
+ for fixedElement in $fixedElements
451
+ u.fixedToAbsolute(fixedElement, $viewport)
452
+
453
+ $ghost: $ghost
454
+ $bounds: $bounds
455
+ moveTop: moveTop
456
+
457
+ ###*
458
+ Defines a named transition.
459
+
460
+ Here is the definition of the pre-defined `cross-fade` animation:
461
+
462
+ up.transition('cross-fade', ($old, $new, options) ->
463
+ up.motion.when(
464
+ up.animate($old, 'fade-out', options),
465
+ up.animate($new, 'fade-in', options)
466
+ )
467
+ )
468
+
469
+ It is recommended that your transitions use [`up.animate`](/up.animate),
470
+ passing along the `options` that were passed to you.
471
+
472
+ If you choose to *not* use `up.animate` and roll your own
473
+ logic instead, your code must honor the following contract:
474
+
475
+ 1. It must honor the passed options.
476
+ 2. It must *not* remove any of the given elements from the DOM.
477
+ 3. It returns a promise that is resolved when the transition ends
478
+ 4. The returned promise responds to a `resolve()` function that
479
+ instantly jumps to the last transition frame and resolves the promise.
480
+
481
+ Calling [`up.animate`](/up.animate) with an object argument
482
+ will take care of all these points.
483
+
484
+ @function up.transition
485
+ @param {String} name
486
+ @param {Function} transition
487
+ @stable
488
+ ###
489
+ transition = (name, transition) ->
490
+ transitions[name] = transition
491
+
492
+ ###*
493
+ Defines a named animation.
494
+
495
+ Here is the definition of the pre-defined `fade-in` animation:
496
+
497
+ up.animation('fade-in', function($ghost, options) {
498
+ $ghost.css(opacity: 0);
499
+ up.animate($ghost, { opacity: 1 }, options);
500
+ })
501
+
502
+ It is recommended that your definitions always end by calling
503
+ calling [`up.animate`](/up.animate) with an object argument, passing along
504
+ the `options` that were passed to you.
505
+
506
+ If you choose to *not* use `up.animate` and roll your own
507
+ animation code instead, your code must honor the following contract:
508
+
509
+ 1. It must honor the passed options.
510
+ 2. It must *not* remove the passed element from the DOM.
511
+ 3. It returns a promise that is resolved when the animation ends
512
+ 4. The returned promise responds to a `resolve()` function that
513
+ instantly jumps to the last animation frame and resolves the promise.
514
+
515
+ Calling [`up.animate`](/up.animate) with an object argument
516
+ will take care of all these points.
517
+
518
+ @function up.animation
519
+ @param {String} name
520
+ @param {Function} animation
521
+ @stable
522
+ ###
523
+ animation = (name, animation) ->
524
+ animations[name] = animation
525
+
526
+ snapshot = ->
527
+ defaultAnimations = u.copy(animations)
528
+ defaultTransitions = u.copy(transitions)
529
+
530
+ ###*
531
+ Returns a new promise that resolves once all promises in arguments resolve.
532
+
533
+ Other then [`$.when` from jQuery](https://api.jquery.com/jquery.when/),
534
+ the combined promise will have a `resolve` method. This `resolve` method
535
+ will resolve all the wrapped promises.
536
+
537
+ @function up.motion.when
538
+ @param promises...
539
+ @return A new promise.
540
+ @experimental
541
+ ###
542
+ resolvableWhen = u.resolvableWhen
543
+
544
+ ###*
545
+ Returns a no-op animation or transition which has no visual effects
546
+ and completes instantly.
547
+
548
+ @function up.motion.none
549
+ @return {Promise}
550
+ A resolved promise
551
+ @stable
552
+ ###
553
+ none = u.resolvedDeferred
554
+
555
+ animation('none', none)
556
+
557
+ animation('fade-in', ($ghost, options) ->
558
+ $ghost.css(opacity: 0)
559
+ animate($ghost, { opacity: 1 }, options)
560
+ )
561
+
562
+ animation('fade-out', ($ghost, options) ->
563
+ $ghost.css(opacity: 1)
564
+ animate($ghost, { opacity: 0 }, options)
565
+ )
566
+
567
+ animation('move-to-top', ($ghost, options) ->
568
+ box = u.measure($ghost)
569
+ travelDistance = box.top + box.height
570
+ $ghost.css('margin-top': '0px')
571
+ animate($ghost, { 'margin-top': "-#{travelDistance}px" }, options)
572
+ )
573
+
574
+ animation('move-from-top', ($ghost, options) ->
575
+ box = u.measure($ghost)
576
+ travelDistance = box.top + box.height
577
+ $ghost.css('margin-top': "-#{travelDistance}px")
578
+ animate($ghost, { 'margin-top': '0px' }, options)
579
+ )
580
+
581
+ animation('move-to-bottom', ($ghost, options) ->
582
+ box = u.measure($ghost)
583
+ travelDistance = u.clientSize().height - box.top
584
+ $ghost.css('margin-top': '0px')
585
+ animate($ghost, { 'margin-top': "#{travelDistance}px" }, options)
586
+ )
587
+
588
+ animation('move-from-bottom', ($ghost, options) ->
589
+ box = u.measure($ghost)
590
+ travelDistance = u.clientSize().height - box.top
591
+ $ghost.css('margin-top': "#{travelDistance}px")
592
+ animate($ghost, { 'margin-top': '0px' }, options)
593
+ )
594
+
595
+ animation('move-to-left', ($ghost, options) ->
596
+ box = u.measure($ghost)
597
+ travelDistance = box.left + box.width
598
+ $ghost.css('margin-left': '0px')
599
+ animate($ghost, { 'margin-left': "-#{travelDistance}px" }, options)
600
+ )
601
+
602
+ animation('move-from-left', ($ghost, options) ->
603
+ box = u.measure($ghost)
604
+ travelDistance = box.left + box.width
605
+ $ghost.css('margin-left': "-#{travelDistance}px")
606
+ animate($ghost, { 'margin-left': '0px' }, options)
607
+ )
608
+
609
+ animation('move-to-right', ($ghost, options) ->
610
+ box = u.measure($ghost)
611
+ travelDistance = u.clientSize().width - box.left
612
+ $ghost.css('margin-left': '0px')
613
+ animate($ghost, { 'margin-left': "#{travelDistance}px" }, options)
614
+ )
615
+
616
+ animation('move-from-right', ($ghost, options) ->
617
+ box = u.measure($ghost)
618
+ travelDistance = u.clientSize().width - box.left
619
+ $ghost.css('margin-left': "#{travelDistance}px")
620
+ animate($ghost, { 'margin-left': '0px' }, options)
621
+ )
622
+
623
+ animation('roll-down', ($ghost, options) ->
624
+ fullHeight = $ghost.height()
625
+ styleMemo = u.temporaryCss($ghost,
626
+ height: '0px'
627
+ overflow: 'hidden'
628
+ )
629
+ animate($ghost, { height: "#{fullHeight}px" }, options).then(styleMemo)
630
+ )
631
+
632
+ transition('none', none)
633
+
634
+ transition('move-left', ($old, $new, options) ->
635
+ resolvableWhen(
636
+ animate($old, 'move-to-left', options),
637
+ animate($new, 'move-from-right', options)
638
+ )
639
+ )
640
+
641
+ transition('move-right', ($old, $new, options) ->
642
+ resolvableWhen(
643
+ animate($old, 'move-to-right', options),
644
+ animate($new, 'move-from-left', options)
645
+ )
646
+ )
647
+
648
+ transition('move-up', ($old, $new, options) ->
649
+ resolvableWhen(
650
+ animate($old, 'move-to-top', options),
651
+ animate($new, 'move-from-bottom', options)
652
+ )
653
+ )
654
+
655
+ transition('move-down', ($old, $new, options) ->
656
+ resolvableWhen(
657
+ animate($old, 'move-to-bottom', options),
658
+ animate($new, 'move-from-top', options)
659
+ )
660
+ )
661
+
662
+ transition('cross-fade', ($old, $new, options) ->
663
+ resolvableWhen(
664
+ animate($old, 'fade-out', options),
665
+ animate($new, 'fade-in', options)
666
+ )
667
+ )
668
+
669
+ up.on 'up:framework:boot', snapshot
670
+ up.on 'up:framework:reset', reset
671
+
672
+ morph: morph
673
+ animate: animate
674
+ animateOptions: animateOptions
675
+ finish: finish
676
+ transition: transition
677
+ animation: animation
678
+ config: config
679
+ isEnabled: isEnabled
680
+ defaults: -> u.error('up.motion.defaults(...) no longer exists. Set values on he up.motion.config property instead.')
681
+ none: none
682
+ when: resolvableWhen
683
+ prependCopy: prependCopy
684
+
685
+ )(jQuery)
686
+
687
+ up.transition = up.motion.transition
688
+ up.animation = up.motion.animation
689
+ up.morph = up.motion.morph
690
+ up.animate = up.motion.animate