unpoly-rails 0.61.1 → 2.0.0.pre.rc4

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.

Potentially problematic release.


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

Files changed (340) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -1
  3. data/CHANGELOG.md +85 -2
  4. data/README.md +3 -11
  5. data/README_RAILS.md +295 -14
  6. data/dist/unpoly-bootstrap3.css +9 -14
  7. data/dist/unpoly-bootstrap3.js +4 -18
  8. data/dist/unpoly-bootstrap3.min.css +1 -1
  9. data/dist/unpoly-bootstrap3.min.js +1 -1
  10. data/dist/unpoly-bootstrap4.css +9 -0
  11. data/dist/unpoly-bootstrap4.js +16 -0
  12. data/dist/unpoly-bootstrap4.min.css +1 -0
  13. data/dist/unpoly-bootstrap4.min.js +1 -0
  14. data/dist/unpoly-bootstrap5.css +9 -0
  15. data/dist/unpoly-bootstrap5.js +14 -0
  16. data/dist/unpoly-bootstrap5.min.css +1 -0
  17. data/dist/unpoly-bootstrap5.min.js +1 -0
  18. data/dist/unpoly-migrate.js +1213 -0
  19. data/dist/unpoly-migrate.min.js +1 -0
  20. data/dist/unpoly.css +109 -140
  21. data/dist/unpoly.js +15368 -10444
  22. data/dist/unpoly.min.css +1 -1
  23. data/dist/unpoly.min.js +6 -4
  24. data/lib/unpoly-rails.rb +9 -3
  25. data/lib/unpoly/rails/change.rb +372 -0
  26. data/lib/unpoly/rails/change/cache.rb +26 -0
  27. data/lib/unpoly/rails/change/context.rb +80 -0
  28. data/lib/unpoly/rails/change/field.rb +117 -0
  29. data/lib/unpoly/rails/change/field_definition.rb +74 -0
  30. data/lib/unpoly/rails/change/layer.rb +60 -0
  31. data/lib/unpoly/rails/controller.rb +47 -0
  32. data/lib/unpoly/rails/error.rb +5 -0
  33. data/lib/unpoly/rails/request_echo_headers.rb +2 -2
  34. data/lib/unpoly/rails/version.rb +1 -1
  35. data/lib/unpoly/tasks.rb +45 -0
  36. metadata +43 -313
  37. data/.gitignore +0 -10
  38. data/.ruby-version +0 -1
  39. data/Gemfile +0 -8
  40. data/Gemfile.lock +0 -45
  41. data/Rakefile +0 -145
  42. data/bower.json +0 -27
  43. data/design/animation-ghosting.txt +0 -72
  44. data/design/design.txt +0 -34
  45. data/design/draft.html.erb +0 -48
  46. data/design/draft.rb +0 -9
  47. data/design/es6.js +0 -32
  48. data/design/ghost-debugging.txt +0 -118
  49. data/design/homepage.txt +0 -236
  50. data/design/ie11.txt +0 -9
  51. data/design/measure_import_node.js +0 -330
  52. data/design/measure_jquery/element_list.js +0 -41
  53. data/design/measure_jquery/up.on_vs_addEventListener.js +0 -56
  54. data/design/positioning.txt +0 -28
  55. data/design/query-params-in-form-actions/cases.html +0 -125
  56. data/design/rename.txt +0 -0
  57. data/design/test_rejected_promise.txt +0 -5
  58. data/design/unpoly errors.txt +0 -19
  59. data/lib/assets/javascripts/unpoly-bootstrap3.coffee +0 -2
  60. data/lib/assets/javascripts/unpoly-bootstrap3/feedback-ext.coffee +0 -5
  61. data/lib/assets/javascripts/unpoly-bootstrap3/form-ext.coffee +0 -1
  62. data/lib/assets/javascripts/unpoly-bootstrap3/modal-ext.coffee +0 -14
  63. data/lib/assets/javascripts/unpoly-bootstrap3/viewport-ext.coffee +0 -5
  64. data/lib/assets/javascripts/unpoly.coffee +0 -28
  65. data/lib/assets/javascripts/unpoly/browser.coffee.erb +0 -240
  66. data/lib/assets/javascripts/unpoly/classes/body_shifter.coffee +0 -36
  67. data/lib/assets/javascripts/unpoly/classes/cache.coffee +0 -127
  68. data/lib/assets/javascripts/unpoly/classes/compile_pass.coffee +0 -93
  69. data/lib/assets/javascripts/unpoly/classes/config.coffee +0 -9
  70. data/lib/assets/javascripts/unpoly/classes/css_transition.coffee +0 -118
  71. data/lib/assets/javascripts/unpoly/classes/divertible_chain.coffee +0 -39
  72. data/lib/assets/javascripts/unpoly/classes/event_listener.coffee +0 -116
  73. data/lib/assets/javascripts/unpoly/classes/extract_cascade.coffee +0 -86
  74. data/lib/assets/javascripts/unpoly/classes/extract_plan.coffee +0 -111
  75. data/lib/assets/javascripts/unpoly/classes/field_observer.coffee +0 -80
  76. data/lib/assets/javascripts/unpoly/classes/focus_follower.coffee +0 -29
  77. data/lib/assets/javascripts/unpoly/classes/follow_variant.coffee +0 -56
  78. data/lib/assets/javascripts/unpoly/classes/html_parser.coffee +0 -46
  79. data/lib/assets/javascripts/unpoly/classes/motion_controller.coffee +0 -157
  80. data/lib/assets/javascripts/unpoly/classes/params.coffee.erb +0 -543
  81. data/lib/assets/javascripts/unpoly/classes/record.coffee +0 -22
  82. data/lib/assets/javascripts/unpoly/classes/rect.js +0 -21
  83. data/lib/assets/javascripts/unpoly/classes/request.coffee +0 -246
  84. data/lib/assets/javascripts/unpoly/classes/response.coffee +0 -157
  85. data/lib/assets/javascripts/unpoly/classes/reveal_motion.coffee +0 -102
  86. data/lib/assets/javascripts/unpoly/classes/scroll_motion.coffee +0 -67
  87. data/lib/assets/javascripts/unpoly/classes/selector.coffee +0 -60
  88. data/lib/assets/javascripts/unpoly/classes/store/memory.coffee +0 -26
  89. data/lib/assets/javascripts/unpoly/classes/store/session.coffee +0 -59
  90. data/lib/assets/javascripts/unpoly/classes/tether.coffee +0 -105
  91. data/lib/assets/javascripts/unpoly/classes/url_set.coffee +0 -32
  92. data/lib/assets/javascripts/unpoly/cookie.coffee +0 -56
  93. data/lib/assets/javascripts/unpoly/element.coffee.erb +0 -1126
  94. data/lib/assets/javascripts/unpoly/event.coffee.erb +0 -445
  95. data/lib/assets/javascripts/unpoly/feedback.coffee +0 -353
  96. data/lib/assets/javascripts/unpoly/form.coffee.erb +0 -1069
  97. data/lib/assets/javascripts/unpoly/fragment.coffee.erb +0 -927
  98. data/lib/assets/javascripts/unpoly/framework.coffee +0 -67
  99. data/lib/assets/javascripts/unpoly/history.coffee +0 -268
  100. data/lib/assets/javascripts/unpoly/legacy.coffee +0 -60
  101. data/lib/assets/javascripts/unpoly/link.coffee.erb +0 -622
  102. data/lib/assets/javascripts/unpoly/log.coffee +0 -248
  103. data/lib/assets/javascripts/unpoly/modal.coffee.erb +0 -825
  104. data/lib/assets/javascripts/unpoly/motion.coffee.erb +0 -668
  105. data/lib/assets/javascripts/unpoly/namespace.coffee.erb +0 -5
  106. data/lib/assets/javascripts/unpoly/popup.coffee.erb +0 -515
  107. data/lib/assets/javascripts/unpoly/protocol.coffee +0 -298
  108. data/lib/assets/javascripts/unpoly/proxy.coffee +0 -672
  109. data/lib/assets/javascripts/unpoly/radio.coffee +0 -60
  110. data/lib/assets/javascripts/unpoly/rails.coffee +0 -24
  111. data/lib/assets/javascripts/unpoly/syntax.coffee.erb +0 -477
  112. data/lib/assets/javascripts/unpoly/toast.coffee +0 -67
  113. data/lib/assets/javascripts/unpoly/tooltip.coffee +0 -276
  114. data/lib/assets/javascripts/unpoly/util.coffee.erb +0 -1676
  115. data/lib/assets/javascripts/unpoly/viewport.coffee.erb +0 -830
  116. data/lib/assets/stylesheets/unpoly-bootstrap3.sass +0 -1
  117. data/lib/assets/stylesheets/unpoly-bootstrap3/modal-ext.sass +0 -27
  118. data/lib/assets/stylesheets/unpoly.sass +0 -1
  119. data/lib/assets/stylesheets/unpoly/close.sass +0 -2
  120. data/lib/assets/stylesheets/unpoly/dom.sass +0 -5
  121. data/lib/assets/stylesheets/unpoly/layout.sass +0 -2
  122. data/lib/assets/stylesheets/unpoly/link.sass +0 -2
  123. data/lib/assets/stylesheets/unpoly/modal.sass +0 -116
  124. data/lib/assets/stylesheets/unpoly/popup.sass +0 -7
  125. data/lib/assets/stylesheets/unpoly/toast.sass +0 -33
  126. data/lib/assets/stylesheets/unpoly/tooltip.sass +0 -62
  127. data/lib/unpoly/rails/inspector.rb +0 -149
  128. data/lib/unpoly/rails/inspector_accessor.rb +0 -30
  129. data/package.json +0 -38
  130. data/spec_app/.firefox-version +0 -1
  131. data/spec_app/.gitignore +0 -17
  132. data/spec_app/.rspec +0 -2
  133. data/spec_app/Gemfile +0 -30
  134. data/spec_app/Gemfile.lock +0 -229
  135. data/spec_app/README.rdoc +0 -28
  136. data/spec_app/Rakefile +0 -6
  137. data/spec_app/app/assets/images/.keep +0 -0
  138. data/spec_app/app/assets/images/favicon.png +0 -0
  139. data/spec_app/app/assets/images/grid.png +0 -0
  140. data/spec_app/app/assets/javascripts/bootstrap_manifest.coffee +0 -6
  141. data/spec_app/app/assets/javascripts/integration_test.coffee +0 -6
  142. data/spec_app/app/assets/javascripts/jasmine_specs.coffee +0 -6
  143. data/spec_app/app/assets/stylesheets/_helpers.sass +0 -5
  144. data/spec_app/app/assets/stylesheets/bootstrap_manifest.sass +0 -2
  145. data/spec_app/app/assets/stylesheets/integration_test.sass +0 -88
  146. data/spec_app/app/assets/stylesheets/jasmine_specs.sass +0 -20
  147. data/spec_app/app/controllers/application_controller.rb +0 -14
  148. data/spec_app/app/controllers/binding_test_controller.rb +0 -51
  149. data/spec_app/app/controllers/compiler_test_controller.rb +0 -5
  150. data/spec_app/app/controllers/css_test_controller.rb +0 -5
  151. data/spec_app/app/controllers/error_test_controller.rb +0 -5
  152. data/spec_app/app/controllers/form_test/basics_controller.rb +0 -14
  153. data/spec_app/app/controllers/form_test/redirects_controller.rb +0 -17
  154. data/spec_app/app/controllers/form_test/uploads_controller.rb +0 -15
  155. data/spec_app/app/controllers/hash_test_controller.rb +0 -5
  156. data/spec_app/app/controllers/method_test_controller.rb +0 -16
  157. data/spec_app/app/controllers/motion_test_controller.rb +0 -5
  158. data/spec_app/app/controllers/pages_controller.rb +0 -9
  159. data/spec_app/app/controllers/replace_test_controller.rb +0 -5
  160. data/spec_app/app/controllers/reveal_test_controller.rb +0 -5
  161. data/spec_app/app/controllers/scroll_test_controller.rb +0 -5
  162. data/spec_app/app/helpers/application_helper.rb +0 -2
  163. data/spec_app/app/mailers/.keep +0 -0
  164. data/spec_app/app/models/concerns/.keep +0 -0
  165. data/spec_app/app/views/compiler_test/timestamp.erb +0 -9
  166. data/spec_app/app/views/css_test/modal.erb +0 -47
  167. data/spec_app/app/views/css_test/modal_contents.erb +0 -5
  168. data/spec_app/app/views/css_test/modal_contents_wide.erb +0 -5
  169. data/spec_app/app/views/css_test/popup.erb +0 -81
  170. data/spec_app/app/views/css_test/popup_contents.erb +0 -5
  171. data/spec_app/app/views/css_test/tooltip.erb +0 -48
  172. data/spec_app/app/views/error_test/trigger.erb +0 -80
  173. data/spec_app/app/views/error_test/unexpected_response.erb +0 -3
  174. data/spec_app/app/views/form_test/basics/new.erb +0 -60
  175. data/spec_app/app/views/form_test/redirects/new.erb +0 -27
  176. data/spec_app/app/views/form_test/redirects/target.erb +0 -4
  177. data/spec_app/app/views/form_test/submission_result.erb +0 -30
  178. data/spec_app/app/views/form_test/uploads/new.erb +0 -44
  179. data/spec_app/app/views/hash_test/unpoly.erb +0 -30
  180. data/spec_app/app/views/hash_test/vanilla.erb +0 -13
  181. data/spec_app/app/views/layouts/integration_test.erb +0 -22
  182. data/spec_app/app/views/layouts/jasmine_rails/spec_runner.html.erb +0 -20
  183. data/spec_app/app/views/method_test/form_target.erb +0 -17
  184. data/spec_app/app/views/method_test/page1.erb +0 -11
  185. data/spec_app/app/views/method_test/page2.erb +0 -6
  186. data/spec_app/app/views/motion_test/animations.erb +0 -16
  187. data/spec_app/app/views/motion_test/transitions.erb +0 -13
  188. data/spec_app/app/views/pages/start.erb +0 -79
  189. data/spec_app/app/views/replace_test/_nav.erb +0 -6
  190. data/spec_app/app/views/replace_test/page1.erb +0 -14
  191. data/spec_app/app/views/replace_test/page2.erb +0 -14
  192. data/spec_app/app/views/replace_test/table.erb +0 -16
  193. data/spec_app/app/views/reveal_test/long1.erb +0 -17
  194. data/spec_app/app/views/reveal_test/long2.erb +0 -17
  195. data/spec_app/app/views/reveal_test/within_document_viewport.erb +0 -24
  196. data/spec_app/app/views/reveal_test/within_overflowing_div_viewport.erb +0 -28
  197. data/spec_app/app/views/scroll_test/long1.erb +0 -30
  198. data/spec_app/bin/bundle +0 -3
  199. data/spec_app/bin/rails +0 -8
  200. data/spec_app/bin/rake +0 -8
  201. data/spec_app/bin/setup +0 -29
  202. data/spec_app/bin/spring +0 -18
  203. data/spec_app/config.ru +0 -4
  204. data/spec_app/config/application.rb +0 -28
  205. data/spec_app/config/boot.rb +0 -3
  206. data/spec_app/config/database.yml +0 -25
  207. data/spec_app/config/environment.rb +0 -5
  208. data/spec_app/config/environments/development.rb +0 -41
  209. data/spec_app/config/environments/production.rb +0 -79
  210. data/spec_app/config/environments/test.rb +0 -42
  211. data/spec_app/config/initializers/assets.rb +0 -19
  212. data/spec_app/config/initializers/backtrace_silencers.rb +0 -7
  213. data/spec_app/config/initializers/bower_rails.rb +0 -16
  214. data/spec_app/config/initializers/cookies_serializer.rb +0 -3
  215. data/spec_app/config/initializers/filter_parameter_logging.rb +0 -4
  216. data/spec_app/config/initializers/inflections.rb +0 -16
  217. data/spec_app/config/initializers/mime_types.rb +0 -4
  218. data/spec_app/config/initializers/session_store.rb +0 -3
  219. data/spec_app/config/initializers/wrap_parameters.rb +0 -14
  220. data/spec_app/config/locales/en.yml +0 -23
  221. data/spec_app/config/routes.rb +0 -30
  222. data/spec_app/config/secrets.yml +0 -22
  223. data/spec_app/db/schema.rb +0 -23
  224. data/spec_app/db/seeds.rb +0 -7
  225. data/spec_app/lib/assets/.keep +0 -0
  226. data/spec_app/lib/tasks/.keep +0 -0
  227. data/spec_app/lib/tasks/cucumber.rake +0 -65
  228. data/spec_app/log/.keep +0 -0
  229. data/spec_app/public/404.html +0 -67
  230. data/spec_app/public/422.html +0 -67
  231. data/spec_app/public/500.html +0 -66
  232. data/spec_app/public/favicon.ico +0 -0
  233. data/spec_app/public/robots.txt +0 -5
  234. data/spec_app/script/cucumber +0 -10
  235. data/spec_app/spec/controllers/binding_test_controller_spec.rb +0 -248
  236. data/spec_app/spec/javascripts/helpers/agent_detector.coffee +0 -20
  237. data/spec_app/spec/javascripts/helpers/async_sequence.js.coffee +0 -103
  238. data/spec_app/spec/javascripts/helpers/browser_switches.js.coffee +0 -21
  239. data/spec_app/spec/javascripts/helpers/enable_logging.js.coffee +0 -2
  240. data/spec_app/spec/javascripts/helpers/fixture.js.coffee +0 -25
  241. data/spec_app/spec/javascripts/helpers/index.js.coffee +0 -1
  242. data/spec_app/spec/javascripts/helpers/jquery_no_conflict.js +0 -1
  243. data/spec_app/spec/javascripts/helpers/knife.js.coffee +0 -69
  244. data/spec_app/spec/javascripts/helpers/last_request.js.coffee +0 -25
  245. data/spec_app/spec/javascripts/helpers/mock_ajax.js.coffee +0 -8
  246. data/spec_app/spec/javascripts/helpers/mock_clock.js.coffee +0 -2
  247. data/spec_app/spec/javascripts/helpers/parse_form_data.js.coffee +0 -24
  248. data/spec_app/spec/javascripts/helpers/promise_state.js +0 -18
  249. data/spec_app/spec/javascripts/helpers/protect_jasmine_runner.coffee +0 -12
  250. data/spec_app/spec/javascripts/helpers/remove_body_margin.js.coffee +0 -8
  251. data/spec_app/spec/javascripts/helpers/reset_history.js.coffee +0 -23
  252. data/spec_app/spec/javascripts/helpers/reset_knife.js.coffee +0 -2
  253. data/spec_app/spec/javascripts/helpers/reset_up.js.coffee +0 -25
  254. data/spec_app/spec/javascripts/helpers/restore_body_scroll.js.coffee +0 -5
  255. data/spec_app/spec/javascripts/helpers/show_lib_versions.coffee +0 -12
  256. data/spec_app/spec/javascripts/helpers/spec_util.coffee +0 -47
  257. data/spec_app/spec/javascripts/helpers/to_be_around.js.coffee +0 -8
  258. data/spec_app/spec/javascripts/helpers/to_be_array.coffee +0 -5
  259. data/spec_app/spec/javascripts/helpers/to_be_attached.coffee +0 -9
  260. data/spec_app/spec/javascripts/helpers/to_be_blank.js.coffee +0 -8
  261. data/spec_app/spec/javascripts/helpers/to_be_detached.coffee +0 -9
  262. data/spec_app/spec/javascripts/helpers/to_be_element.js.coffee +0 -8
  263. data/spec_app/spec/javascripts/helpers/to_be_error.coffee +0 -8
  264. data/spec_app/spec/javascripts/helpers/to_be_given.js.coffee +0 -8
  265. data/spec_app/spec/javascripts/helpers/to_be_hidden.js.coffee +0 -8
  266. data/spec_app/spec/javascripts/helpers/to_be_jquery.js.coffee +0 -5
  267. data/spec_app/spec/javascripts/helpers/to_be_missing.js.coffee +0 -8
  268. data/spec_app/spec/javascripts/helpers/to_be_present.js.coffee +0 -8
  269. data/spec_app/spec/javascripts/helpers/to_be_scrolled_to.coffee +0 -11
  270. data/spec_app/spec/javascripts/helpers/to_be_visible.js.coffee +0 -9
  271. data/spec_app/spec/javascripts/helpers/to_contain.js.coffee +0 -8
  272. data/spec_app/spec/javascripts/helpers/to_end_with.js.coffee +0 -11
  273. data/spec_app/spec/javascripts/helpers/to_equal_jquery.js.coffee +0 -8
  274. data/spec_app/spec/javascripts/helpers/to_equal_node_list.coffee +0 -7
  275. data/spec_app/spec/javascripts/helpers/to_equal_via_is_equal.js.coffee +0 -7
  276. data/spec_app/spec/javascripts/helpers/to_have_class.js.coffee +0 -10
  277. data/spec_app/spec/javascripts/helpers/to_have_descendant.js.coffee +0 -10
  278. data/spec_app/spec/javascripts/helpers/to_have_length.js.coffee +0 -8
  279. data/spec_app/spec/javascripts/helpers/to_have_opacity.coffee +0 -15
  280. data/spec_app/spec/javascripts/helpers/to_have_own_property.js.coffee +0 -8
  281. data/spec_app/spec/javascripts/helpers/to_have_request_method.js.coffee +0 -16
  282. data/spec_app/spec/javascripts/helpers/to_have_text.js.coffee +0 -9
  283. data/spec_app/spec/javascripts/helpers/to_have_unhandled_rejections.coffee +0 -18
  284. data/spec_app/spec/javascripts/helpers/to_match_list.coffee +0 -14
  285. data/spec_app/spec/javascripts/helpers/to_match_selector.coffee +0 -8
  286. data/spec_app/spec/javascripts/helpers/to_match_text.js.coffee +0 -13
  287. data/spec_app/spec/javascripts/helpers/to_match_url.coffee +0 -14
  288. data/spec_app/spec/javascripts/helpers/trigger.js.coffee +0 -200
  289. data/spec_app/spec/javascripts/helpers/wait_until_dom_ready.js.coffee +0 -5
  290. data/spec_app/spec/javascripts/support/jasmine.yml +0 -51
  291. data/spec_app/spec/javascripts/up/browser_spec.js.coffee +0 -150
  292. data/spec_app/spec/javascripts/up/classes/cache_spec.js.coffee +0 -82
  293. data/spec_app/spec/javascripts/up/classes/config_spec.coffee +0 -24
  294. data/spec_app/spec/javascripts/up/classes/divertible_chain_spec.coffee +0 -45
  295. data/spec_app/spec/javascripts/up/classes/focus_tracker_spec.coffee +0 -34
  296. data/spec_app/spec/javascripts/up/classes/params_spec.coffee +0 -557
  297. data/spec_app/spec/javascripts/up/classes/request_spec.coffee +0 -50
  298. data/spec_app/spec/javascripts/up/classes/scroll_motion_spec.js.coffee +0 -51
  299. data/spec_app/spec/javascripts/up/classes/store/memory_spec.js.coffee +0 -70
  300. data/spec_app/spec/javascripts/up/classes/store/session_spec.js.coffee +0 -114
  301. data/spec_app/spec/javascripts/up/element_spec.coffee +0 -897
  302. data/spec_app/spec/javascripts/up/event_spec.js.coffee +0 -530
  303. data/spec_app/spec/javascripts/up/feedback_spec.js.coffee +0 -401
  304. data/spec_app/spec/javascripts/up/form_spec.js.coffee +0 -1527
  305. data/spec_app/spec/javascripts/up/fragment_spec.js.coffee +0 -2598
  306. data/spec_app/spec/javascripts/up/history_spec.js.coffee +0 -340
  307. data/spec_app/spec/javascripts/up/jquery_spec.js.coffee +0 -4
  308. data/spec_app/spec/javascripts/up/legacy_spec.js.coffee +0 -27
  309. data/spec_app/spec/javascripts/up/link_spec.js.coffee +0 -1093
  310. data/spec_app/spec/javascripts/up/log_spec.js.coffee +0 -119
  311. data/spec_app/spec/javascripts/up/modal_spec.js.coffee +0 -917
  312. data/spec_app/spec/javascripts/up/motion_spec.js.coffee +0 -582
  313. data/spec_app/spec/javascripts/up/popup_spec.js.coffee +0 -507
  314. data/spec_app/spec/javascripts/up/protocol_spec.js.coffee +0 -39
  315. data/spec_app/spec/javascripts/up/proxy_spec.js.coffee +0 -1137
  316. data/spec_app/spec/javascripts/up/radio_spec.js.coffee +0 -212
  317. data/spec_app/spec/javascripts/up/rails_spec.js.coffee +0 -118
  318. data/spec_app/spec/javascripts/up/spec_spec.js.coffee +0 -9
  319. data/spec_app/spec/javascripts/up/syntax_spec.js.coffee +0 -304
  320. data/spec_app/spec/javascripts/up/toast_spec.js.coffee +0 -37
  321. data/spec_app/spec/javascripts/up/tooltip_spec.js.coffee +0 -163
  322. data/spec_app/spec/javascripts/up/util_spec.js.coffee +0 -1420
  323. data/spec_app/spec/javascripts/up/viewport_spec.js.coffee +0 -655
  324. data/spec_app/spec/spec_helper.rb +0 -62
  325. data/spec_app/test/controllers/.keep +0 -0
  326. data/spec_app/test/fixtures/.keep +0 -0
  327. data/spec_app/test/helpers/.keep +0 -0
  328. data/spec_app/test/integration/.keep +0 -0
  329. data/spec_app/test/mailers/.keep +0 -0
  330. data/spec_app/test/models/.keep +0 -0
  331. data/spec_app/test/test_helper.rb +0 -10
  332. data/spec_app/vendor/asset-libs/es6-promise-4.1.6/es6-promise.auto.js +0 -1159
  333. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.bower.json +0 -43
  334. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.gitignore +0 -6
  335. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.npmignore +0 -10
  336. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.pairs +0 -6
  337. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.travis.yml +0 -56
  338. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/jasmine-ajax.js +0 -790
  339. data/spec_app/vendor/assets/.keep +0 -0
  340. data/unpoly-rails.gemspec +0 -24
@@ -1,655 +0,0 @@
1
- u = up.util
2
- e = up.element
3
- $ = jQuery
4
-
5
- describe 'up.viewport', ->
6
-
7
- describe 'JavaScript functions', ->
8
-
9
- describe 'up.reveal', ->
10
-
11
- beforeEach ->
12
- up.viewport.config.revealSnap = 0
13
-
14
- describe 'when the viewport is the document', ->
15
-
16
- beforeEach ->
17
- $body = $('body')
18
-
19
- @$elements = []
20
- @$container = $('<div class="container">').prependTo($body)
21
- @$container.css(opacity: 0.2) # reduce flashing during test runs
22
-
23
- @clientHeight = up.viewport.rootHeight()
24
-
25
- elementPlans = [
26
- { height: @clientHeight, backgroundColor: 'yellow' }, # [0]
27
- { height: '50px', backgroundColor: 'cyan' }, # [1]
28
- { height: '5000px', backgroundColor: 'orange' } # [2]
29
- ]
30
-
31
- for elementPlan in elementPlans
32
- $element = $('<div>').css(elementPlan)
33
- $element.appendTo(@$container)
34
- @$elements.push($element)
35
-
36
- afterEach ->
37
- @$container.remove()
38
-
39
- $documentViewport = ->
40
- $(up.viewport.root())
41
-
42
- it 'reveals the given element', asyncSpec (next) ->
43
- up.reveal(@$elements[0])
44
-
45
- next =>
46
- # ---------------------
47
- # [0] 0 .......... ch-1
48
- # ---------------------
49
- # [1] ch+0 ...... ch+49
50
- # [2] ch+50 ... ch+5049
51
- expect($documentViewport().scrollTop()).toBe(0)
52
-
53
- up.reveal(@$elements[1])
54
-
55
- next =>
56
- # ---------------------
57
- # [0] 0 .......... ch-1
58
- # [1] ch+0 ...... ch+49
59
- # ---------------------
60
- # [2] ch+50 ... ch+5049
61
- expect($documentViewport().scrollTop()).toBe(50)
62
-
63
- up.reveal(@$elements[2])
64
-
65
- next =>
66
- # [0] 0 .......... ch-1
67
- # [1] ch+0 ...... ch+49
68
- # ---------------------
69
- # [2] ch+50 ... ch+5049
70
- # ---------------------
71
- expect($documentViewport().scrollTop()).toBe(@clientHeight + 50)
72
-
73
- it "includes the element's top margin in the revealed area", asyncSpec (next) ->
74
- @$elements[1].css('margin-top': '20px')
75
- up.reveal(@$elements[1])
76
- next => expect($(document).scrollTop()).toBe(50 + 20)
77
-
78
- it "includes the element's bottom margin in the revealed area", asyncSpec (next) ->
79
- @$elements[1].css('margin-bottom': '20px')
80
- up.reveal(@$elements[2])
81
- next => expect($(document).scrollTop()).toBe(@clientHeight + 50 + 20)
82
-
83
- it 'snaps to the top if the space above the future-visible area is smaller than the value of config.revealSnap', asyncSpec (next) ->
84
- up.viewport.config.revealSnap = 30
85
-
86
- @$elements[0].css(height: '20px')
87
-
88
- up.reveal(@$elements[2])
89
-
90
- next =>
91
- # [0] 0 ............ 19
92
- # [1] 20 ........... 69
93
- # ---------------------
94
- # [2] 70 ......... 5069
95
- # ---------------------
96
- expect($(document).scrollTop()).toBe(70)
97
-
98
- # Even though we're revealing the second element, the viewport
99
- # snaps to the top edge.
100
- up.reveal(@$elements[1])
101
-
102
- next =>
103
- # ---------------------
104
- # [0] 0 ............ 19
105
- # [1] 20 ........... 69
106
- # ---------------------
107
- # [2] 70 ......... 5069
108
- expect($(document).scrollTop()).toBe(0)
109
-
110
- it 'does not snap to the top if it would un-reveal an element at the bottom edge of the screen (bugfix)', asyncSpec (next) ->
111
- up.viewport.config.revealSnap = 100
112
-
113
- up.reveal(@$elements[1])
114
-
115
- next =>
116
- # ---------------------
117
- # [0] 0 .......... ch-1
118
- # [1] ch+0 ...... ch+49
119
- # ---------------------
120
- # [2] ch+50 ... ch+5049
121
- expect($(document).scrollTop()).toBe(50)
122
-
123
-
124
- it 'scrolls far enough so the element is not obstructed by an element fixed to the top', asyncSpec (next) ->
125
- $topNav = $fixture('[up-fixed=top]').css(
126
- position: 'fixed',
127
- top: '0',
128
- left: '0',
129
- right: '0'
130
- height: '100px'
131
- )
132
-
133
- up.reveal(@$elements[0])
134
-
135
- next =>
136
- # ---------------------
137
- # [F] 0 ............ 99
138
- # [0] 0 .......... ch-1
139
- # ---------------------
140
- # [1] ch+0 ...... ch+49
141
- # [2] ch+50 ... ch+5049
142
- expect($(document).scrollTop()).toBe(0) # would need to be -100
143
-
144
- up.reveal(@$elements[1])
145
-
146
- next =>
147
- # ---------------------
148
- # [F] 0 ............ 99
149
- # [0] 00000 ...... ch-1
150
- # [1] ch+0 ...... ch+49
151
- # ---------------------
152
- # [2] ch+50 ... ch+5049
153
- expect($(document).scrollTop()).toBe(50)
154
-
155
- up.reveal(@$elements[2])
156
-
157
- next =>
158
- # [0] 00000 ...... ch-1
159
- # [1] ch+0 ...... ch+49
160
- # ---------------------
161
- # [F] 0 ............ 99
162
- # [2] ch+50 ... ch+5049
163
- # ----------------
164
- expect($(document).scrollTop()).toBe(@clientHeight + 50 - 100)
165
-
166
- up.reveal(@$elements[1])
167
-
168
- next =>
169
- # [0] 00000 ...... ch-1
170
- # ---------------------
171
- # [F] 0 ............ 99
172
- # [1] ch+0 ...... ch+49
173
- # [2] ch+50 ... ch+5049
174
- # ----------------
175
- expect($(document).scrollTop()).toBe(@clientHeight + 50 - 100 - 50)
176
-
177
- it 'scrolls far enough so the element is not obstructed by an element fixed to the top with margin, padding, border and non-zero top properties', asyncSpec (next) ->
178
- $topNav = $fixture('[up-fixed=top]').css(
179
- position: 'fixed',
180
- top: '29px',
181
- margin: '16px',
182
- border: '7px solid rgba(0, 0, 0, 0.1)',
183
- padding: '5px'
184
- left: '0',
185
- right: '0'
186
- height: '100px'
187
- )
188
-
189
- up.reveal(@$elements[2], viewport: @viewport)
190
-
191
- next =>
192
- # [0] 00000 ...... ch-1 [F] 0 ...... 99+props
193
- # [1] ch+0 ...... ch+49
194
- # --------------------- ---------------------
195
- # [2] ch+50 ... ch+5049
196
- # ---------------------
197
-
198
- expect($(document).scrollTop()).toBe(
199
- @clientHeight + # scroll past @$elements[0]
200
- 50 - # scroll past @$elements[1]
201
- 100 - # obstruction height
202
- 29 - # obstruction's top property
203
- (1 * 16) - # top margin (bottom margin is not a visual obstruction)
204
- (2 * 7) - # obstruction top and bottom borders
205
- (2 * 5) # obstruction top and bottom paddings
206
- )
207
-
208
- it 'scrolls far enough so the element is not obstructed by an element fixed to the bottom', asyncSpec (next) ->
209
- $bottomNav = $fixture('[up-fixed=bottom]').css(
210
- position: 'fixed',
211
- bottom: '0',
212
- left: '0',
213
- right: '0'
214
- height: '100px'
215
- )
216
-
217
- up.reveal(@$elements[0])
218
-
219
- next =>
220
- # ---------------------
221
- # [0] 0 .......... ch-1
222
- # [F] 0 ............ 99
223
- # ---------------------
224
- # [1] ch+0 ...... ch+49
225
- # [2] ch+50 ... ch+5049
226
- expect($(document).scrollTop()).toBe(0)
227
-
228
- up.reveal(@$elements[1])
229
-
230
- next =>
231
- # ---------------------
232
- # [0] 0 .......... ch-1
233
- # [1] ch+0 ...... ch+49
234
- # [F] 0 ............ 99
235
- # ---------------------
236
- # [2] ch+50 ... ch+5049
237
- expect($(document).scrollTop()).toBe(150)
238
-
239
- up.reveal(@$elements[2])
240
-
241
- next =>
242
- # ---------------------
243
- # [0] 0 .......... ch-1
244
- # [1] ch+0 ...... ch+49
245
- # ---------------------
246
- # [2] ch+50 ... ch+5049
247
- # [F] 0 ............ 99
248
- expect($(document).scrollTop()).toBe(@clientHeight + 50)
249
-
250
- it 'scrolls far enough so the element is not obstructed by an element fixed to the bottom with margin, padding, border and non-zero bottom properties', asyncSpec (next) ->
251
- $bottomNav = $fixture('[up-fixed=bottom]').css(
252
- position: 'fixed',
253
- bottom: '29px',
254
- margin: '16px',
255
- border: '7px solid rgba(0, 0, 0, 0.2)',
256
- padding: '5px',
257
- left: '0',
258
- right: '0'
259
- height: '100px'
260
- )
261
-
262
- up.reveal(@$elements[1])
263
-
264
- next =>
265
- # ---------------------
266
- # [0] 0 .......... ch-1
267
- # [1] ch+0 ...... ch+49
268
- # ---------------------
269
- # [2] ch+50 ... ch+5049
270
- # [F] 0 ...... 99+props
271
- expect($(document).scrollTop()).toBe(
272
- 50 + # height of elements[1]
273
- 100 + # obstruction height
274
- 29 + # obstruction's bottom property
275
- (1 * 16) + # bottom margin (top margin is not a visual obstruction)
276
- (2 * 7) + # obstruction top and bottom borders
277
- (2 * 5) # obstruction top and bottom paddings
278
- )
279
-
280
- it 'does not crash when called with a CSS selector (bugfix)', (done) ->
281
- promise = up.reveal('.container', { behavior: 'instant' })
282
- promise.then ->
283
- expect(true).toBe(true)
284
- done()
285
-
286
- it 'scrolls the viewport to the first row if the element if the element is higher than the viewport', asyncSpec (next) ->
287
- @$elements[0].css(height: '1000px')
288
- @$elements[1].css(height: '3000px')
289
-
290
- up.reveal(@$elements[1])
291
-
292
- next =>
293
- # [0] 0 ............ 999
294
- # [1] 1000 ........ 4999
295
- expect($(document).scrollTop()).toBe(1000)
296
-
297
-
298
- describe 'with { top: true } option', ->
299
-
300
- it 'scrolls the viewport to the first row of the element, even if that element is already fully revealed', asyncSpec (next) ->
301
- @$elements[0].css(height: '20px')
302
-
303
- up.reveal(@$elements[1], { top: true, snap: false })
304
-
305
- next =>
306
- # [0] 0 ............ 19
307
- # [1] 20 ........... 69
308
- # ---------------------
309
- # [2] 70 ......... 5069
310
- # ---------------------
311
- expect($(document).scrollTop()).toBe(20)
312
-
313
-
314
- describe 'when the viewport is a container with overflow-y: scroll', ->
315
-
316
- it 'reveals the given element', asyncSpec (next) ->
317
- $viewport = $fixture('div').css
318
- 'position': 'absolute'
319
- 'top': '50px'
320
- 'left': '50px'
321
- 'width': '100px'
322
- 'height': '100px'
323
- 'overflow-y': 'scroll'
324
- $elements = []
325
- u.each [0..5], ->
326
- $element = $('<div>').css(height: '50px')
327
- $element.appendTo($viewport)
328
- $elements.push($element)
329
-
330
- # ------------
331
- # [0] 000..049
332
- # [1] 050..099
333
- # ------------
334
- # [2] 100..149
335
- # [3] 150..199
336
- # [4] 200..249
337
- # [5] 250..399
338
- expect($viewport.scrollTop()).toBe(0)
339
-
340
- # See that the view only scrolls down as little as possible
341
- # in order to reveal the element
342
- up.reveal($elements[3], viewport: $viewport[0])
343
-
344
- next =>
345
- # [0] 000..049
346
- # [1] 050..099
347
- # ------------
348
- # [2] 100..149
349
- # [3] 150..199
350
- # ------------
351
- # [4] 200..249
352
- # [5] 250..299
353
- expect($viewport.scrollTop()).toBe(100)
354
-
355
- # See that the view doesn't move if the element
356
- # is already revealed
357
- up.reveal($elements[2], viewport: $viewport[0])
358
-
359
- next =>
360
- expect($viewport.scrollTop()).toBe(100)
361
-
362
- # See that the view scrolls as far down as it cans
363
- # to show the bottom element
364
- up.reveal($elements[5], viewport: $viewport[0])
365
-
366
- next =>
367
- # [0] 000..049
368
- # [1] 050..099
369
- # [2] 100..149
370
- # [3] 150..199
371
- # ------------
372
- # [4] 200..249
373
- # [5] 250..299
374
- # ------------
375
- expect($viewport.scrollTop()).toBe(200)
376
-
377
- up.reveal($elements[1], viewport: $viewport[0])
378
-
379
- next =>
380
- # See that the view only scrolls up as little as possible
381
- # in order to reveal the element
382
- # [0] 000..049
383
- # ------------
384
- # [1] 050..099
385
- # [2] 100..149
386
- # ------------
387
- # [3] 150..199
388
- # [4] 200..249
389
- # [5] 250..299
390
- expect($viewport.scrollTop()).toBe(50)
391
-
392
- describe 'up.viewport.revealHash', ->
393
-
394
- it 'reveals an element with an ID matching the given #hash', asyncSpec (next) ->
395
- revealSpy = up.viewport.knife.mock('reveal')
396
- $match = $fixture('div#hash')
397
- up.viewport.revealHash('#hash')
398
- next => expect(revealSpy).toHaveBeenCalledWith($match[0], top: true)
399
-
400
- it 'reveals a named anchor matching the given #hash', asyncSpec (next) ->
401
- revealSpy = up.viewport.knife.mock('reveal')
402
- $match = $fixture('a[name="hash"]')
403
- up.viewport.revealHash('#hash')
404
- next => expect(revealSpy).toHaveBeenCalledWith($match[0], top: true)
405
-
406
- it 'reveals an element with an [up-id] attribute matching the given #hash', asyncSpec (next) ->
407
- revealSpy = up.viewport.knife.mock('reveal')
408
- $match = $fixture('div[up-id="hash"]')
409
- up.viewport.revealHash('#hash')
410
- next => expect(revealSpy).toHaveBeenCalledWith($match[0], top: true)
411
-
412
- it 'does nothing and returns a fulfilled promise if no element or anchor matches the given #hash', (done) ->
413
- revealSpy = up.viewport.knife.mock('reveal')
414
- promise = up.viewport.revealHash('#hash')
415
- expect(revealSpy).not.toHaveBeenCalled()
416
- promiseState(promise).then (result) ->
417
- expect(result.state).toEqual('fulfilled')
418
- done()
419
-
420
- it 'does nothing and returns a fulfilled promise if no #hash is given', (done) ->
421
- revealSpy = up.viewport.knife.mock('reveal')
422
- promise = up.viewport.revealHash('')
423
- expect(revealSpy).not.toHaveBeenCalled()
424
- promiseState(promise).then (result) ->
425
- expect(result.state).toEqual('fulfilled')
426
- done()
427
-
428
- describe 'up.viewport.all', ->
429
-
430
- it 'returns a list of all viewports on the screen', ->
431
- viewportElement = $fixture('[up-viewport]')[0]
432
- results = up.viewport.all()
433
- expect(results).toMatchList([viewportElement, up.viewport.root()])
434
-
435
- describe 'up.viewport.subtree', ->
436
-
437
- it 'returns descendant viewports of the given element', ->
438
- $motherViewport = $fixture('.mother[up-viewport]')
439
- $element = $motherViewport.affix('.element')
440
- $childViewport = $element.affix('.child[up-viewport]')
441
- $grandChildViewport = $childViewport.affix('.grand-child[up-viewport]')
442
- actual = up.viewport.subtree($element[0])
443
- expected = $childViewport.add($grandChildViewport)
444
-
445
- expect(actual).toMatchList(expected)
446
-
447
- it 'returns the given element if it is a viewport', ->
448
- viewportElement = $fixture('[up-viewport]')[0]
449
- results = up.viewport.subtree(viewportElement)
450
- expect(results).toMatchList([viewportElement])
451
-
452
- describe 'up.viewport.around', ->
453
-
454
- it 'returns viewports that are either ancestors, descendants, or the given element itself', ->
455
- $motherViewport = $fixture('.mother[up-viewport]')
456
- $element = $motherViewport.affix('.element')
457
- $childViewport = $element.affix('.child[up-viewport]')
458
- $grandChildViewport = $childViewport.affix('.grand-child[up-viewport]')
459
- actual = up.viewport.around($element[0])
460
- expected = $motherViewport.add($childViewport).add($grandChildViewport)
461
-
462
- expect(actual).toMatchList(expected)
463
-
464
- describe 'up.viewport.closest', ->
465
-
466
- it 'seeks upwards from the given element', ->
467
- up.viewport.config.viewports = ['.viewport1', '.viewport2']
468
- $viewport1 = $fixture('.viewport1')
469
- $viewport2 = $fixture('.viewport2')
470
- $element = $fixture('div').appendTo($viewport2)
471
- expect(up.viewport.closest($element)).toEqual($viewport2[0])
472
-
473
- it 'returns the given element if it is a configured viewport itself', ->
474
- up.viewport.config.viewports = ['.viewport']
475
- $viewport = $fixture('.viewport')
476
- expect(up.viewport.closest($viewport)).toEqual($viewport[0])
477
-
478
- describe 'when no configured viewport matches', ->
479
-
480
- afterEach ->
481
- @resetBodyCss?()
482
- @resetHtmlCss?()
483
-
484
- it 'falls back to the scrolling element', ->
485
- $element = $fixture('.element').css(height: '3000px')
486
- $result = up.viewport.closest($element)
487
- expect($result).toMatchSelector(up.viewport.rootSelector())
488
-
489
- it 'falls back to the scrolling element if <body> is configured to scroll (fix for Edge)', ->
490
- $element = $fixture('.element').css(height: '3000px')
491
- @resetHtmlCss = e.setTemporaryStyle(document.documentElement, 'overflow-y': 'hidden')
492
- @resetBodyCss = e.setTemporaryStyle(document.body, 'overflow-y': 'scroll')
493
- $result = up.viewport.closest($element)
494
- expect($result).toMatchSelector(up.viewport.rootSelector())
495
-
496
- it 'falls back to the scrolling element if <html> is configured to scroll (fix for Edge)', ->
497
- $element = $fixture('.element').css(height: '3000px')
498
- @resetHtmlCss = e.setTemporaryStyle(document.documentElement, 'overflow-y': 'scroll')
499
- @resetBodyCss = e.setTemporaryStyle(document.body, 'overflow-y': 'hidden')
500
- $result = up.viewport.closest($element)
501
- expect($result).toMatchSelector(up.viewport.rootSelector())
502
-
503
- describe 'up.viewport.restoreScroll', ->
504
-
505
- it "restores a viewport's previously saved scroll position", (done) ->
506
- $viewport = $fixture('#viewport[up-viewport]').css(height: '100px', overflowY: 'scroll')
507
- $content = $viewport.affix('.content').css(height: '1000px')
508
- up.hello($viewport)
509
- $viewport.scrollTop(50)
510
- up.viewport.saveScroll()
511
- $viewport.scrollTop(70)
512
-
513
- up.viewport.restoreScroll().then ->
514
- expect($viewport.scrollTop()).toEqual(50)
515
- done()
516
-
517
- it "scrolls a viewport to the top (and does not crash) if no previous scroll position is known", (done) ->
518
- $viewport = $fixture('#viewport[up-viewport]').css(height: '100px', overflowY: 'scroll')
519
- $content = $viewport.affix('.content').css(height: '1000px')
520
- $viewport.scrollTop(70)
521
-
522
- up.viewport.restoreScroll().then ->
523
- expect($viewport.scrollTop()).toEqual(0)
524
- done()
525
-
526
- describe 'up.scroll', ->
527
-
528
- it 'should have tests'
529
-
530
- describe 'up.viewport.rootOverflowElement', ->
531
-
532
- beforeEach ->
533
- @body = document.body
534
- @html = document.documentElement
535
- @restoreBodyOverflowY = e.setTemporaryStyle(@body, 'overflow-y': 'visible')
536
- @restoreHtmlOverflowY = e.setTemporaryStyle(@html, 'overflow-y': 'visible')
537
-
538
- afterEach ->
539
- @restoreBodyOverflowY()
540
- @restoreHtmlOverflowY()
541
-
542
- it 'returns the <html> element if the developer set { overflow-y: scroll } on it', ->
543
- @html.style.overflowY = 'scroll'
544
- expect(up.viewport.rootOverflowElement()).toBe(@html)
545
-
546
- it 'returns the <html> element if the developer set { overflow-y: auto } on it', ->
547
- @html.style.overflowY = 'auto'
548
- expect(up.viewport.rootOverflowElement()).toBe(@html)
549
-
550
- it 'returns the <body> element if the developer set { overflow-y: scroll } on it', ->
551
- @body.style.overflowY = 'scroll'
552
- expect(up.viewport.rootOverflowElement()).toBe(@body)
553
-
554
- it 'returns the <body> element if the developer set { overflow-y: auto } on it', ->
555
- @body.style.overflowY = 'auto'
556
- expect(up.viewport.rootOverflowElement()).toBe(@body)
557
-
558
- it 'returns the scrolling element if the developer set { overflow-y: visible } on both <html> and <body>', ->
559
- @html.style.overflowY = 'visible'
560
- @body.style.overflowY = 'visible'
561
- expect(up.viewport.rootOverflowElement()).toBe(up.viewport.root())
562
-
563
- describe 'up.viewport.absolutize', ->
564
-
565
- afterEach ->
566
- $('.up-bounds, .fixture').remove()
567
-
568
- it 'absolutely positions the element, preserving visual position and size', ->
569
- $element = $fixture('.element').text('element text').css(paddingTop: '20px', paddingLeft: '20px')
570
-
571
- expect($element.css('position')).toEqual('static')
572
- previousDims = $element[0].getBoundingClientRect()
573
-
574
- up.viewport.absolutize($element)
575
-
576
- expect($element.closest('.up-bounds').css('position')).toEqual('absolute')
577
-
578
- newDims = $element[0].getBoundingClientRect()
579
- expect(newDims).toEqual(previousDims)
580
-
581
- it 'accurately positions the ghost over an element with margins', ->
582
- $element = $fixture('.element').css(margin: '40px')
583
- previousDims = $element[0].getBoundingClientRect()
584
-
585
- up.viewport.absolutize($element)
586
-
587
- newDims = $element[0].getBoundingClientRect()
588
- expect(newDims).toEqual(previousDims)
589
-
590
- it "doesn't change the position of a child whose margins no longer collapse", ->
591
- $element = $fixture('.element')
592
- $child = $('<div class="child">child text</div>').css(margin: '40px').appendTo($element)
593
- previousChildDims = $child[0].getBoundingClientRect()
594
-
595
- up.viewport.absolutize($element)
596
-
597
- newChildDims = $child[0].getBoundingClientRect()
598
- expect(newChildDims).toEqual(previousChildDims)
599
-
600
- it 'correctly positions an element within a scrolled body', ->
601
- $body = $('body')
602
- $element1 = $('<div class="fixture"></div>').css(height: '75px').prependTo($body)
603
- $element2 = $('<div class="fixture"></div>').css(height: '100px').insertAfter($element1)
604
- $body.scrollTop(33)
605
-
606
- previousDims = $element2[0].getBoundingClientRect()
607
-
608
- up.viewport.absolutize($element2)
609
-
610
- newDims = $element2[0].getBoundingClientRect()
611
- expect(newDims).toEqual(previousDims)
612
-
613
- it 'correctly positions an element within a scrolled parent element (that has overflow-y: scroll)', ->
614
- $viewport = $fixture('div').css
615
- overflowY: 'scroll'
616
- height: '50px'
617
-
618
- $element1 = $('<div class="fixture"></div>').css(height: '75px').prependTo($viewport)
619
- $element2 = $('<div class="fixture"></div>').css(height: '100px').insertAfter($element1)
620
- $viewport.scrollTop(33)
621
-
622
- previousDims = $element2[0].getBoundingClientRect()
623
-
624
- up.viewport.absolutize($element2)
625
-
626
- newDims = $element2[0].getBoundingClientRect()
627
- expect(newDims).toEqual(previousDims)
628
-
629
- it 'converts fixed elements within the copies to absolutely positioning (relative to the closest offset parent)', ->
630
- $element = $fixture('.element').css
631
- position: 'absolute'
632
- top: '50px'
633
- left: '50px'
634
- $fixedChild = $('<div class="fixed-child" up-fixed></div>').css
635
- position: 'fixed'
636
- left: '77px'
637
- top: '77px'
638
- $fixedChild.appendTo($element)
639
- up.viewport.absolutize($element)
640
-
641
- expect($fixedChild.css(['position', 'left', 'top'])).toEqual
642
- position: 'absolute',
643
- left: '27px',
644
- top: '27px'
645
-
646
- it "does not convert fixed elements outside the element's subtree (bugfix)", ->
647
- $element = $fixture('.element').css(position: 'absolute')
648
- $fixedChild = $('<div class="fixed-child" up-fixed></div>').css(position: 'fixed')
649
- $fixedChild.appendTo($element)
650
- $fixedSibling = $fixture('[up-fixed]').css(position: 'fixed')
651
-
652
- up.viewport.absolutize($element)
653
-
654
- expect($fixedChild.css('position')).toEqual('absolute')
655
- expect($fixedSibling.css('position')).toEqual('fixed')