unpoly-rails 1.0.3 → 2.0.0.pre.rc2

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 (344) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -1
  3. data/CHANGELOG.md +43 -25
  4. data/README.md +5 -6
  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 +15376 -10484
  22. data/dist/unpoly.min.css +1 -1
  23. data/dist/unpoly.min.js +6 -4
  24. data/lib/unpoly/rails/change/cache.rb +26 -0
  25. data/lib/unpoly/rails/change/context.rb +80 -0
  26. data/lib/unpoly/rails/change/field.rb +117 -0
  27. data/lib/unpoly/rails/change/field_definition.rb +74 -0
  28. data/lib/unpoly/rails/change/layer.rb +60 -0
  29. data/lib/unpoly/rails/change.rb +372 -0
  30. data/lib/unpoly/rails/controller.rb +47 -0
  31. data/lib/unpoly/rails/error.rb +5 -0
  32. data/lib/unpoly/rails/request_echo_headers.rb +2 -2
  33. data/lib/unpoly/rails/version.rb +1 -1
  34. data/lib/unpoly/tasks.rb +45 -0
  35. data/lib/unpoly-rails.rb +9 -3
  36. metadata +42 -316
  37. data/.gitignore +0 -10
  38. data/.ruby-version +0 -1
  39. data/Gemfile +0 -7
  40. data/Gemfile.lock +0 -39
  41. data/Rakefile +0 -154
  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/browser.coffee.erb +0 -240
  60. data/lib/assets/javascripts/unpoly/classes/body_shifter.coffee +0 -45
  61. data/lib/assets/javascripts/unpoly/classes/cache.coffee +0 -127
  62. data/lib/assets/javascripts/unpoly/classes/compile_pass.coffee +0 -93
  63. data/lib/assets/javascripts/unpoly/classes/config.coffee +0 -9
  64. data/lib/assets/javascripts/unpoly/classes/css_transition.coffee +0 -118
  65. data/lib/assets/javascripts/unpoly/classes/divertible_chain.coffee +0 -39
  66. data/lib/assets/javascripts/unpoly/classes/event_listener.coffee +0 -116
  67. data/lib/assets/javascripts/unpoly/classes/extract_cascade.coffee +0 -86
  68. data/lib/assets/javascripts/unpoly/classes/extract_plan.coffee +0 -111
  69. data/lib/assets/javascripts/unpoly/classes/field_observer.coffee +0 -80
  70. data/lib/assets/javascripts/unpoly/classes/focus_follower.coffee +0 -29
  71. data/lib/assets/javascripts/unpoly/classes/follow_variant.coffee +0 -64
  72. data/lib/assets/javascripts/unpoly/classes/html_parser.coffee +0 -46
  73. data/lib/assets/javascripts/unpoly/classes/motion_controller.coffee +0 -157
  74. data/lib/assets/javascripts/unpoly/classes/params.coffee.erb +0 -544
  75. data/lib/assets/javascripts/unpoly/classes/record.coffee +0 -22
  76. data/lib/assets/javascripts/unpoly/classes/rect.js +0 -21
  77. data/lib/assets/javascripts/unpoly/classes/request.coffee +0 -247
  78. data/lib/assets/javascripts/unpoly/classes/response.coffee +0 -157
  79. data/lib/assets/javascripts/unpoly/classes/reveal_motion.coffee +0 -102
  80. data/lib/assets/javascripts/unpoly/classes/scroll_motion.coffee +0 -67
  81. data/lib/assets/javascripts/unpoly/classes/selector.coffee +0 -60
  82. data/lib/assets/javascripts/unpoly/classes/store/memory.coffee +0 -26
  83. data/lib/assets/javascripts/unpoly/classes/store/session.coffee +0 -59
  84. data/lib/assets/javascripts/unpoly/classes/tether.coffee +0 -105
  85. data/lib/assets/javascripts/unpoly/classes/url_set.coffee +0 -32
  86. data/lib/assets/javascripts/unpoly/cookie.coffee +0 -56
  87. data/lib/assets/javascripts/unpoly/element.coffee.erb +0 -1129
  88. data/lib/assets/javascripts/unpoly/event.coffee.erb +0 -445
  89. data/lib/assets/javascripts/unpoly/feedback.coffee +0 -353
  90. data/lib/assets/javascripts/unpoly/form.coffee.erb +0 -1084
  91. data/lib/assets/javascripts/unpoly/fragment.coffee.erb +0 -928
  92. data/lib/assets/javascripts/unpoly/framework.coffee +0 -65
  93. data/lib/assets/javascripts/unpoly/history.coffee +0 -268
  94. data/lib/assets/javascripts/unpoly/legacy.coffee +0 -60
  95. data/lib/assets/javascripts/unpoly/link.coffee.erb +0 -622
  96. data/lib/assets/javascripts/unpoly/log.coffee +0 -253
  97. data/lib/assets/javascripts/unpoly/modal.coffee.erb +0 -827
  98. data/lib/assets/javascripts/unpoly/motion.coffee.erb +0 -668
  99. data/lib/assets/javascripts/unpoly/namespace.coffee.erb +0 -5
  100. data/lib/assets/javascripts/unpoly/popup.coffee.erb +0 -515
  101. data/lib/assets/javascripts/unpoly/protocol.coffee +0 -300
  102. data/lib/assets/javascripts/unpoly/proxy.coffee +0 -672
  103. data/lib/assets/javascripts/unpoly/radio.coffee +0 -60
  104. data/lib/assets/javascripts/unpoly/rails.coffee +0 -24
  105. data/lib/assets/javascripts/unpoly/syntax.coffee.erb +0 -476
  106. data/lib/assets/javascripts/unpoly/toast.coffee +0 -67
  107. data/lib/assets/javascripts/unpoly/tooltip.coffee +0 -276
  108. data/lib/assets/javascripts/unpoly/util.coffee.erb +0 -1677
  109. data/lib/assets/javascripts/unpoly/viewport.coffee.erb +0 -830
  110. data/lib/assets/javascripts/unpoly-bootstrap3/feedback-ext.coffee +0 -5
  111. data/lib/assets/javascripts/unpoly-bootstrap3/form-ext.coffee +0 -1
  112. data/lib/assets/javascripts/unpoly-bootstrap3/modal-ext.coffee +0 -14
  113. data/lib/assets/javascripts/unpoly-bootstrap3/viewport-ext.coffee +0 -5
  114. data/lib/assets/javascripts/unpoly-bootstrap3.coffee +0 -2
  115. data/lib/assets/javascripts/unpoly.coffee +0 -28
  116. data/lib/assets/stylesheets/unpoly/close.sass +0 -2
  117. data/lib/assets/stylesheets/unpoly/dom.sass +0 -5
  118. data/lib/assets/stylesheets/unpoly/layout.sass +0 -2
  119. data/lib/assets/stylesheets/unpoly/link.sass +0 -2
  120. data/lib/assets/stylesheets/unpoly/modal.sass +0 -116
  121. data/lib/assets/stylesheets/unpoly/popup.sass +0 -7
  122. data/lib/assets/stylesheets/unpoly/toast.sass +0 -33
  123. data/lib/assets/stylesheets/unpoly/tooltip.sass +0 -62
  124. data/lib/assets/stylesheets/unpoly-bootstrap3/modal-ext.sass +0 -27
  125. data/lib/assets/stylesheets/unpoly-bootstrap3.sass +0 -1
  126. data/lib/assets/stylesheets/unpoly.sass +0 -1
  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 -29
  134. data/spec_app/Gemfile.lock +0 -223
  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 -5
  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/boot_test_controller.rb +0 -31
  150. data/spec_app/app/controllers/compiler_test_controller.rb +0 -5
  151. data/spec_app/app/controllers/css_test_controller.rb +0 -5
  152. data/spec_app/app/controllers/error_test_controller.rb +0 -5
  153. data/spec_app/app/controllers/form_test/basics_controller.rb +0 -14
  154. data/spec_app/app/controllers/form_test/redirects_controller.rb +0 -17
  155. data/spec_app/app/controllers/form_test/uploads_controller.rb +0 -15
  156. data/spec_app/app/controllers/hash_test_controller.rb +0 -5
  157. data/spec_app/app/controllers/method_test_controller.rb +0 -16
  158. data/spec_app/app/controllers/motion_test_controller.rb +0 -5
  159. data/spec_app/app/controllers/pages_controller.rb +0 -17
  160. data/spec_app/app/controllers/replace_test_controller.rb +0 -5
  161. data/spec_app/app/controllers/reveal_test_controller.rb +0 -5
  162. data/spec_app/app/controllers/scroll_test_controller.rb +0 -5
  163. data/spec_app/app/helpers/application_helper.rb +0 -11
  164. data/spec_app/app/mailers/.keep +0 -0
  165. data/spec_app/app/models/concerns/.keep +0 -0
  166. data/spec_app/app/views/boot_test/defer.erb +0 -18
  167. data/spec_app/app/views/boot_test/module.erb +0 -18
  168. data/spec_app/app/views/boot_test/sync.erb +0 -17
  169. data/spec_app/app/views/compiler_test/timestamp.erb +0 -10
  170. data/spec_app/app/views/css_test/modal.erb +0 -47
  171. data/spec_app/app/views/css_test/modal_contents.erb +0 -5
  172. data/spec_app/app/views/css_test/modal_contents_wide.erb +0 -5
  173. data/spec_app/app/views/css_test/popup.erb +0 -81
  174. data/spec_app/app/views/css_test/popup_contents.erb +0 -5
  175. data/spec_app/app/views/css_test/tooltip.erb +0 -48
  176. data/spec_app/app/views/error_test/trigger.erb +0 -80
  177. data/spec_app/app/views/error_test/unexpected_response.erb +0 -3
  178. data/spec_app/app/views/form_test/basics/new.erb +0 -60
  179. data/spec_app/app/views/form_test/redirects/new.erb +0 -27
  180. data/spec_app/app/views/form_test/redirects/target.erb +0 -6
  181. data/spec_app/app/views/form_test/submission_result.erb +0 -30
  182. data/spec_app/app/views/form_test/uploads/new.erb +0 -44
  183. data/spec_app/app/views/hash_test/unpoly.erb +0 -30
  184. data/spec_app/app/views/hash_test/vanilla.erb +0 -13
  185. data/spec_app/app/views/layouts/integration_test.erb +0 -22
  186. data/spec_app/app/views/layouts/jasmine_rails/spec_runner.html.erb +0 -20
  187. data/spec_app/app/views/method_test/form_target.erb +0 -17
  188. data/spec_app/app/views/method_test/page1.erb +0 -11
  189. data/spec_app/app/views/method_test/page2.erb +0 -6
  190. data/spec_app/app/views/motion_test/animations.erb +0 -16
  191. data/spec_app/app/views/motion_test/transitions.erb +0 -13
  192. data/spec_app/app/views/pages/start.erb +0 -82
  193. data/spec_app/app/views/replace_test/_nav.erb +0 -6
  194. data/spec_app/app/views/replace_test/page1.erb +0 -14
  195. data/spec_app/app/views/replace_test/page2.erb +0 -14
  196. data/spec_app/app/views/replace_test/table.erb +0 -16
  197. data/spec_app/app/views/reveal_test/long1.erb +0 -17
  198. data/spec_app/app/views/reveal_test/long2.erb +0 -17
  199. data/spec_app/app/views/reveal_test/within_document_viewport.erb +0 -24
  200. data/spec_app/app/views/reveal_test/within_overflowing_div_viewport.erb +0 -28
  201. data/spec_app/app/views/scroll_test/long1.erb +0 -30
  202. data/spec_app/bin/bundle +0 -3
  203. data/spec_app/bin/rails +0 -8
  204. data/spec_app/bin/rake +0 -8
  205. data/spec_app/bin/setup +0 -29
  206. data/spec_app/bin/spring +0 -18
  207. data/spec_app/config/application.rb +0 -28
  208. data/spec_app/config/boot.rb +0 -3
  209. data/spec_app/config/database.yml +0 -25
  210. data/spec_app/config/environment.rb +0 -5
  211. data/spec_app/config/environments/development.rb +0 -41
  212. data/spec_app/config/environments/production.rb +0 -79
  213. data/spec_app/config/environments/test.rb +0 -42
  214. data/spec_app/config/initializers/assets.rb +0 -19
  215. data/spec_app/config/initializers/backtrace_silencers.rb +0 -7
  216. data/spec_app/config/initializers/bower_rails.rb +0 -16
  217. data/spec_app/config/initializers/cookies_serializer.rb +0 -3
  218. data/spec_app/config/initializers/filter_parameter_logging.rb +0 -4
  219. data/spec_app/config/initializers/inflections.rb +0 -16
  220. data/spec_app/config/initializers/mime_types.rb +0 -4
  221. data/spec_app/config/initializers/session_store.rb +0 -3
  222. data/spec_app/config/initializers/wrap_parameters.rb +0 -14
  223. data/spec_app/config/locales/en.yml +0 -23
  224. data/spec_app/config/routes.rb +0 -33
  225. data/spec_app/config/secrets.yml +0 -22
  226. data/spec_app/config.ru +0 -4
  227. data/spec_app/db/schema.rb +0 -23
  228. data/spec_app/db/seeds.rb +0 -7
  229. data/spec_app/lib/assets/.keep +0 -0
  230. data/spec_app/lib/tasks/.keep +0 -0
  231. data/spec_app/lib/tasks/cucumber.rake +0 -65
  232. data/spec_app/log/.keep +0 -0
  233. data/spec_app/public/404.html +0 -67
  234. data/spec_app/public/422.html +0 -67
  235. data/spec_app/public/500.html +0 -66
  236. data/spec_app/public/favicon.ico +0 -0
  237. data/spec_app/public/robots.txt +0 -5
  238. data/spec_app/script/cucumber +0 -10
  239. data/spec_app/spec/controllers/binding_test_controller_spec.rb +0 -248
  240. data/spec_app/spec/javascripts/helpers/agent_detector.coffee +0 -20
  241. data/spec_app/spec/javascripts/helpers/async_sequence.js.coffee +0 -103
  242. data/spec_app/spec/javascripts/helpers/browser_switches.js.coffee +0 -21
  243. data/spec_app/spec/javascripts/helpers/enable_logging.js.coffee +0 -2
  244. data/spec_app/spec/javascripts/helpers/fixture.js.coffee +0 -25
  245. data/spec_app/spec/javascripts/helpers/index.js.coffee +0 -1
  246. data/spec_app/spec/javascripts/helpers/jquery_no_conflict.js +0 -1
  247. data/spec_app/spec/javascripts/helpers/knife.js.coffee +0 -69
  248. data/spec_app/spec/javascripts/helpers/last_request.js.coffee +0 -25
  249. data/spec_app/spec/javascripts/helpers/mock_ajax.js.coffee +0 -8
  250. data/spec_app/spec/javascripts/helpers/mock_clock.js.coffee +0 -2
  251. data/spec_app/spec/javascripts/helpers/parse_form_data.js.coffee +0 -24
  252. data/spec_app/spec/javascripts/helpers/promise_state.js +0 -18
  253. data/spec_app/spec/javascripts/helpers/protect_jasmine_runner.coffee +0 -12
  254. data/spec_app/spec/javascripts/helpers/remove_body_margin.js.coffee +0 -8
  255. data/spec_app/spec/javascripts/helpers/reset_history.js.coffee +0 -23
  256. data/spec_app/spec/javascripts/helpers/reset_knife.js.coffee +0 -2
  257. data/spec_app/spec/javascripts/helpers/reset_up.js.coffee +0 -25
  258. data/spec_app/spec/javascripts/helpers/restore_body_scroll.js.coffee +0 -5
  259. data/spec_app/spec/javascripts/helpers/show_lib_versions.coffee +0 -12
  260. data/spec_app/spec/javascripts/helpers/spec_util.coffee +0 -47
  261. data/spec_app/spec/javascripts/helpers/to_be_around.js.coffee +0 -8
  262. data/spec_app/spec/javascripts/helpers/to_be_array.coffee +0 -5
  263. data/spec_app/spec/javascripts/helpers/to_be_attached.coffee +0 -9
  264. data/spec_app/spec/javascripts/helpers/to_be_blank.js.coffee +0 -8
  265. data/spec_app/spec/javascripts/helpers/to_be_detached.coffee +0 -9
  266. data/spec_app/spec/javascripts/helpers/to_be_element.js.coffee +0 -8
  267. data/spec_app/spec/javascripts/helpers/to_be_error.coffee +0 -8
  268. data/spec_app/spec/javascripts/helpers/to_be_given.js.coffee +0 -8
  269. data/spec_app/spec/javascripts/helpers/to_be_hidden.js.coffee +0 -8
  270. data/spec_app/spec/javascripts/helpers/to_be_jquery.js.coffee +0 -5
  271. data/spec_app/spec/javascripts/helpers/to_be_missing.js.coffee +0 -8
  272. data/spec_app/spec/javascripts/helpers/to_be_present.js.coffee +0 -8
  273. data/spec_app/spec/javascripts/helpers/to_be_scrolled_to.coffee +0 -11
  274. data/spec_app/spec/javascripts/helpers/to_be_visible.js.coffee +0 -9
  275. data/spec_app/spec/javascripts/helpers/to_contain.js.coffee +0 -8
  276. data/spec_app/spec/javascripts/helpers/to_end_with.js.coffee +0 -11
  277. data/spec_app/spec/javascripts/helpers/to_equal_jquery.js.coffee +0 -8
  278. data/spec_app/spec/javascripts/helpers/to_equal_node_list.coffee +0 -7
  279. data/spec_app/spec/javascripts/helpers/to_equal_via_is_equal.js.coffee +0 -7
  280. data/spec_app/spec/javascripts/helpers/to_have_class.js.coffee +0 -10
  281. data/spec_app/spec/javascripts/helpers/to_have_descendant.js.coffee +0 -10
  282. data/spec_app/spec/javascripts/helpers/to_have_length.js.coffee +0 -8
  283. data/spec_app/spec/javascripts/helpers/to_have_opacity.coffee +0 -15
  284. data/spec_app/spec/javascripts/helpers/to_have_own_property.js.coffee +0 -8
  285. data/spec_app/spec/javascripts/helpers/to_have_request_method.js.coffee +0 -16
  286. data/spec_app/spec/javascripts/helpers/to_have_text.js.coffee +0 -9
  287. data/spec_app/spec/javascripts/helpers/to_have_unhandled_rejections.coffee +0 -18
  288. data/spec_app/spec/javascripts/helpers/to_match_list.coffee +0 -14
  289. data/spec_app/spec/javascripts/helpers/to_match_selector.coffee +0 -8
  290. data/spec_app/spec/javascripts/helpers/to_match_text.js.coffee +0 -13
  291. data/spec_app/spec/javascripts/helpers/to_match_url.coffee +0 -14
  292. data/spec_app/spec/javascripts/helpers/trigger.js.coffee +0 -200
  293. data/spec_app/spec/javascripts/helpers/wait_until_dom_ready.js.coffee +0 -5
  294. data/spec_app/spec/javascripts/support/jasmine.yml +0 -51
  295. data/spec_app/spec/javascripts/up/browser_spec.js.coffee +0 -150
  296. data/spec_app/spec/javascripts/up/classes/cache_spec.js.coffee +0 -82
  297. data/spec_app/spec/javascripts/up/classes/config_spec.coffee +0 -24
  298. data/spec_app/spec/javascripts/up/classes/divertible_chain_spec.coffee +0 -45
  299. data/spec_app/spec/javascripts/up/classes/focus_tracker_spec.coffee +0 -34
  300. data/spec_app/spec/javascripts/up/classes/params_spec.coffee +0 -557
  301. data/spec_app/spec/javascripts/up/classes/request_spec.coffee +0 -50
  302. data/spec_app/spec/javascripts/up/classes/scroll_motion_spec.js.coffee +0 -51
  303. data/spec_app/spec/javascripts/up/classes/store/memory_spec.js.coffee +0 -70
  304. data/spec_app/spec/javascripts/up/classes/store/session_spec.js.coffee +0 -114
  305. data/spec_app/spec/javascripts/up/element_spec.coffee +0 -897
  306. data/spec_app/spec/javascripts/up/event_spec.js.coffee +0 -530
  307. data/spec_app/spec/javascripts/up/feedback_spec.js.coffee +0 -401
  308. data/spec_app/spec/javascripts/up/form_spec.js.coffee +0 -1527
  309. data/spec_app/spec/javascripts/up/fragment_spec.js.coffee +0 -2624
  310. data/spec_app/spec/javascripts/up/history_spec.js.coffee +0 -340
  311. data/spec_app/spec/javascripts/up/jquery_spec.js.coffee +0 -4
  312. data/spec_app/spec/javascripts/up/legacy_spec.js.coffee +0 -27
  313. data/spec_app/spec/javascripts/up/link_spec.js.coffee +0 -1098
  314. data/spec_app/spec/javascripts/up/log_spec.js.coffee +0 -119
  315. data/spec_app/spec/javascripts/up/modal_spec.js.coffee +0 -939
  316. data/spec_app/spec/javascripts/up/motion_spec.js.coffee +0 -582
  317. data/spec_app/spec/javascripts/up/popup_spec.js.coffee +0 -508
  318. data/spec_app/spec/javascripts/up/protocol_spec.js.coffee +0 -39
  319. data/spec_app/spec/javascripts/up/proxy_spec.js.coffee +0 -1145
  320. data/spec_app/spec/javascripts/up/radio_spec.js.coffee +0 -212
  321. data/spec_app/spec/javascripts/up/rails_spec.js.coffee +0 -118
  322. data/spec_app/spec/javascripts/up/spec_spec.js.coffee +0 -9
  323. data/spec_app/spec/javascripts/up/syntax_spec.js.coffee +0 -304
  324. data/spec_app/spec/javascripts/up/toast_spec.js.coffee +0 -37
  325. data/spec_app/spec/javascripts/up/tooltip_spec.js.coffee +0 -163
  326. data/spec_app/spec/javascripts/up/util_spec.js.coffee +0 -1434
  327. data/spec_app/spec/javascripts/up/viewport_spec.js.coffee +0 -655
  328. data/spec_app/spec/spec_helper.rb +0 -62
  329. data/spec_app/test/controllers/.keep +0 -0
  330. data/spec_app/test/fixtures/.keep +0 -0
  331. data/spec_app/test/helpers/.keep +0 -0
  332. data/spec_app/test/integration/.keep +0 -0
  333. data/spec_app/test/mailers/.keep +0 -0
  334. data/spec_app/test/models/.keep +0 -0
  335. data/spec_app/test/test_helper.rb +0 -10
  336. data/spec_app/vendor/asset-libs/es6-promise-4.1.6/es6-promise.auto.js +0 -1159
  337. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.bower.json +0 -43
  338. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.gitignore +0 -6
  339. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.npmignore +0 -10
  340. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.pairs +0 -6
  341. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.travis.yml +0 -56
  342. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/jasmine-ajax.js +0 -790
  343. data/spec_app/vendor/assets/.keep +0 -0
  344. 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')