unpoly-rails 0.61.0 → 2.0.0.pre.rc3

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 +94 -1
  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 +15439 -10434
  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 -314
  37. data/.gitignore +0 -10
  38. data/.ruby-version +0 -2
  39. data/Gemfile +0 -8
  40. data/Gemfile.lock +0 -45
  41. data/Rakefile +0 -144
  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 -236
  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 -438
  95. data/lib/assets/javascripts/unpoly/feedback.coffee +0 -353
  96. data/lib/assets/javascripts/unpoly/form.coffee.erb +0 -1032
  97. data/lib/assets/javascripts/unpoly/fragment.coffee.erb +0 -924
  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 -806
  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 -32
  134. data/spec_app/Gemfile.lock +0 -233
  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 -1488
  305. data/spec_app/spec/javascripts/up/fragment_spec.js.coffee +0 -2589
  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,507 +0,0 @@
1
- u = up.util
2
- e = up.element
3
- $ = jQuery
4
-
5
- describe 'up.popup', ->
6
-
7
- u = up.util
8
-
9
- describe 'JavaScript functions', ->
10
-
11
- describe 'up.popup.attach', ->
12
-
13
- beforeEach ->
14
- jasmine.addMatchers
15
- toSitBelow: (util, customEqualityTesters) ->
16
- compare: ($popup, $link) ->
17
- popupDims = $popup.get(0).getBoundingClientRect()
18
- linkDims = $link.get(0).getBoundingClientRect()
19
- pass:
20
- Math.abs(popupDims.left - linkDims.left) < 1.0 && Math.abs(popupDims.top - linkDims.bottom) < 1.0
21
-
22
- beforeEach ->
23
- @restoreBodyHeight = e.setTemporaryStyle(document.body, minHeight: '3000px')
24
-
25
- afterEach ->
26
- @restoreBodyHeight()
27
-
28
- it "loads this link's destination in a popup positioned under the given link", asyncSpec (next) ->
29
- $container = $fixture('.container')
30
- $container.css
31
- position: 'absolute'
32
- left: '100px'
33
- top: '50px'
34
-
35
- $link = $container.affix('a[href="/path/to"][up-popup=".middle"]').text('link')
36
-
37
- up.popup.attach($link)
38
-
39
- next =>
40
- expect(@lastRequest().url).toMatch /\/path\/to$/
41
- @respondWith """
42
- <div class="before">new-before</div>
43
- <div class="middle">new-middle</div>
44
- <div class="after">new-after</div>
45
- """
46
-
47
- next =>
48
- $popup = $('.up-popup')
49
- expect($popup).toBeAttached()
50
- expect($popup.find('.middle')).toHaveText('new-middle')
51
- expect($popup.find('.before')).not.toBeAttached()
52
- expect($popup.find('.after')).not.toBeAttached()
53
- expect($popup).toSitBelow($link)
54
-
55
- it 'always makes a request for the given selector, and does not "improve" the selector with a fallback', asyncSpec (next) ->
56
- $container = $fixture('.container')
57
- $link = $container.affix('a[href="/path/to"][up-popup=".content"]').text('link')
58
- up.popup.attach($link)
59
- next =>
60
- expect(jasmine.Ajax.requests.count()).toEqual(1)
61
- headers = @lastRequest().requestHeaders
62
- expect(headers['X-Up-Target']).toEqual('.content')
63
-
64
- it 'never resolves the open() promise and shows no error if close() was called before the response was received', asyncSpec (next) ->
65
- $span = $fixture('span')
66
- openPromise = up.popup.attach($span, url: '/foo', target: '.container')
67
-
68
- next =>
69
- up.popup.close()
70
-
71
- next =>
72
- respond = => @respondWith('<div class="container">text</div>')
73
- expect(respond).not.toThrowError()
74
-
75
- next.await =>
76
- expect($('.up-toast')).not.toBeAttached()
77
- promise = promiseState(openPromise)
78
- promise.then (result) => expect(result.state).toEqual('pending')
79
-
80
- describe 'with { html } option', ->
81
-
82
- it 'extracts the selector from the given HTML string', asyncSpec (next) ->
83
- $span = $fixture('span')
84
- next.await up.popup.attach($span, target: '.container', html: "<div class='container'>container contents</div>")
85
- next => expect($('.up-popup')).toHaveText('container contents')
86
-
87
- describe 'opening a popup while another modal is open', ->
88
-
89
- it 'closes the current popup and wait for its close animation to finish before starting the open animation of a second popup', asyncSpec (next) ->
90
- $span = $fixture('span')
91
- up.popup.config.openAnimation = 'fade-in'
92
- up.popup.config.openDuration = 5
93
- up.popup.config.closeAnimation = 'fade-out'
94
- up.popup.config.closeDuration = 60
95
-
96
- events = []
97
- u.each ['up:popup:open', 'up:popup:opened', 'up:popup:close', 'up:popup:closed'], (event) ->
98
- up.on event, -> events.push(event)
99
-
100
- up.popup.attach($span, { target: '.target', html: '<div class="target">response1</div>' })
101
-
102
- next =>
103
- # First popup is starting opening animation
104
- expect(events).toEqual ['up:popup:open']
105
- expect($('.target')).toHaveText('response1')
106
-
107
- next.after 80, ->
108
- # First popup has completed opening animation
109
- expect(events).toEqual ['up:popup:open', 'up:popup:opened']
110
- expect($('.target')).toHaveText('response1')
111
-
112
- # We open another popup, which will cause the first modal to start closing
113
- up.popup.attach($span, { target: '.target', html: '<div class="target">response2</div>' })
114
-
115
- next.after 20, ->
116
- # Second popup is still waiting for first popup's closing animation to finish.
117
- expect(events).toEqual ['up:popup:open', 'up:popup:opened', 'up:popup:close']
118
- expect($('.target')).toHaveText('response1')
119
-
120
- next.after 200, ->
121
- # First popup has finished closing, second popup has finished opening.
122
- expect(events).toEqual ['up:popup:open', 'up:popup:opened', 'up:popup:close', 'up:popup:closed', 'up:popup:open', 'up:popup:opened']
123
- expect($('.target')).toHaveText('response2')
124
-
125
- describe 'up.popup.coveredUrl', ->
126
-
127
- describeCapability 'canPushState', ->
128
-
129
- it 'returns the URL behind the popup', asyncSpec (next) ->
130
- up.history.config.enabled = true
131
- up.history.replace('/foo')
132
- expect(up.popup.coveredUrl()).toBeMissing()
133
-
134
- $popupLink = $fixture('a[href="/bar"][up-popup=".container"][up-history="true"]')
135
- Trigger.clickSequence($popupLink)
136
-
137
- next =>
138
- @respondWith('<div class="container">text</div>')
139
- expect(up.popup.coveredUrl()).toMatchUrl('/foo')
140
-
141
- next.await up.popup.close()
142
-
143
- next =>
144
- expect(up.popup.coveredUrl()).toBeMissing()
145
-
146
- describe 'up.popup.close', ->
147
-
148
- it 'should have tests'
149
-
150
- describe 'up.popup.source', ->
151
-
152
- it 'should have tests'
153
-
154
- describe 'unobtrusive behavior', ->
155
-
156
- describe 'a[up-popup]', ->
157
-
158
- beforeEach ->
159
- @stubAttach = =>
160
- @$link = $fixture('a[href="/path"][up-popup=".target"]')
161
- @attachSpy = up.popup.knife.mock('attachAsap').and.returnValue(Promise.resolve())
162
- @defaultSpy = spyOn(up.link, 'allowDefault').and.callFake((event) -> event.preventDefault())
163
-
164
- it 'opens the clicked link in a popup', asyncSpec (next) ->
165
- @stubAttach()
166
- Trigger.click(@$link)
167
- next => expect(@attachSpy).toHaveBeenCalledWith(@$link[0], {})
168
-
169
- # IE does not call JavaScript and always performs the default action on right clicks
170
- unless AgentDetector.isIE() || AgentDetector.isEdge()
171
- it 'does nothing if the right mouse button is used', asyncSpec (next) ->
172
- @stubAttach()
173
- Trigger.click(@$link, button: 2)
174
- next => expect(@attachSpy).not.toHaveBeenCalled()
175
-
176
- it 'does nothing if shift is pressed during the click', asyncSpec (next) ->
177
- @stubAttach()
178
- Trigger.click(@$link, shiftKey: true)
179
- next => expect(@attachSpy).not.toHaveBeenCalled()
180
-
181
- it 'does nothing if ctrl is pressed during the click', asyncSpec (next) ->
182
- @stubAttach()
183
- Trigger.click(@$link, ctrlKey: true)
184
- next => expect(@attachSpy).not.toHaveBeenCalled()
185
-
186
- it 'does nothing if meta is pressed during the click', asyncSpec (next) ->
187
- @stubAttach()
188
- Trigger.click(@$link, metaKey: true)
189
- next => expect(@attachSpy).not.toHaveBeenCalled()
190
-
191
- it 'closes an existing popup before opening the new popup', asyncSpec (next) ->
192
- up.popup.config.openDuration = 0
193
- up.popup.config.closeDuration = 0
194
-
195
- $link1 = $fixture('a[href="/path1"][up-popup=".target"]')
196
- $link2 = $fixture('a[href="/path2"][up-popup=".target"]')
197
-
198
- events = []
199
- u.each ['up:popup:open', 'up:popup:opened', 'up:popup:close', 'up:popup:closed'], (event) ->
200
- up.on event, -> events.push(event)
201
-
202
- Trigger.click($link1)
203
-
204
- next =>
205
- expect(events).toEqual ['up:popup:open']
206
- @respondWith('<div class="target">text1</div>')
207
-
208
- next =>
209
- expect(events).toEqual ['up:popup:open', 'up:popup:opened']
210
- Trigger.click($link2)
211
-
212
- next =>
213
- expect(events).toEqual ['up:popup:open', 'up:popup:opened', 'up:popup:close', 'up:popup:closed', 'up:popup:open']
214
- @respondWith('<div class="target">text1</div>')
215
-
216
- next =>
217
- expect(events).toEqual ['up:popup:open', 'up:popup:opened', 'up:popup:close', 'up:popup:closed', 'up:popup:open', 'up:popup:opened']
218
-
219
-
220
- describe 'with [up-instant] modifier', ->
221
-
222
- beforeEach ->
223
- @stubAttach()
224
- @$link.attr('up-instant', '')
225
-
226
- it 'opens the modal on mousedown (instead of on click)', asyncSpec (next) ->
227
- Trigger.mousedown(@$link)
228
- next => expect(@attachSpy.calls.mostRecent().args[0]).toEqual(@$link[0])
229
-
230
- it 'does nothing on mouseup', asyncSpec (next) ->
231
- Trigger.mouseup(@$link)
232
- next => expect(@attachSpy).not.toHaveBeenCalled()
233
-
234
- it 'does nothing on click', asyncSpec (next) ->
235
- Trigger.click(@$link)
236
- next => expect(@attachSpy).not.toHaveBeenCalled()
237
-
238
- # IE does not call JavaScript and always performs the default action on right clicks
239
- unless AgentDetector.isIE() || AgentDetector.isEdge()
240
- it 'does nothing if the right mouse button is pressed down', asyncSpec (next) ->
241
- Trigger.mousedown(@$link, button: 2)
242
- next => expect(@attachSpy).not.toHaveBeenCalled()
243
-
244
- it 'does nothing if shift is pressed during mousedown', asyncSpec (next) ->
245
- Trigger.mousedown(@$link, shiftKey: true)
246
- next => expect(@attachSpy).not.toHaveBeenCalled()
247
-
248
- it 'does nothing if ctrl is pressed during mousedown', asyncSpec (next) ->
249
- Trigger.mousedown(@$link, ctrlKey: true)
250
- next => expect(@attachSpy).not.toHaveBeenCalled()
251
-
252
- it 'does nothing if meta is pressed during mousedown', asyncSpec (next) ->
253
- Trigger.mousedown(@$link, metaKey: true)
254
- next => expect(@attachSpy).not.toHaveBeenCalled()
255
-
256
- describe 'with [up-method] modifier', ->
257
-
258
- it 'honours the given method', asyncSpec (next) ->
259
- $link = $fixture('a[href="/path"][up-popup=".target"][up-method="post"]')
260
- Trigger.click($link)
261
-
262
- next =>
263
- expect(@lastRequest().method).toEqual 'POST'
264
-
265
- describe '[up-close]', ->
266
-
267
- backgroundClicked = undefined
268
-
269
- beforeEach ->
270
- up.motion.config.enabled = false
271
- backgroundClicked = jasmine.createSpy('background clicked')
272
- up.on 'click', backgroundClicked
273
-
274
- describe 'when clicked inside a popup', ->
275
-
276
- it 'closes the open popup and halts the event chain', asyncSpec (next) ->
277
- $opener = $fixture('a')
278
- up.popup.attach($opener, html: '<div class="target">text</div>', target: '.target')
279
-
280
- next =>
281
- $popup = $fixture('.up-popup')
282
- $closer = $popup.affix('a[up-close]') # link is within the popup
283
- up.hello($closer)
284
- Trigger.clickSequence($closer)
285
-
286
- next =>
287
- expect(up.popup.isOpen()).toBe(false)
288
- expect(backgroundClicked).not.toHaveBeenCalled()
289
-
290
- describe 'when clicked inside a popup when a modal is open', ->
291
-
292
- it 'closes the popup, but not the modal', asyncSpec (next) ->
293
- up.modal.extract '.modalee', '<div class="modalee"></div>'
294
-
295
- next =>
296
- $modalee = $('.up-modal .modalee')
297
- $opener = $modalee.affix('a')
298
- up.popup.attach($opener, html: '<div class="popupee">text</div>', target: '.popupee')
299
-
300
- next =>
301
- $popupee = $('.up-popup .popupee')
302
- $closer = $popupee.affix('a[up-close]') # link is within the popup
303
- up.hello($closer)
304
- Trigger.clickSequence($closer)
305
-
306
- next =>
307
- expect(up.popup.isOpen()).toBe(false)
308
- expect(up.modal.isOpen()).toBe(true)
309
- expect(backgroundClicked).not.toHaveBeenCalled()
310
-
311
- describe 'when no popup is open', ->
312
-
313
- it 'does nothing and allows the event chain to continue', asyncSpec (next) ->
314
- $link = $fixture('a[up-close]') # link is outside the popup
315
- up.hello($link)
316
- Trigger.clickSequence($link)
317
-
318
- next =>
319
- expect(up.popup.isOpen()).toBe(false)
320
- expect(backgroundClicked).toHaveBeenCalled()
321
-
322
- describe 'when replacing content', ->
323
-
324
- beforeEach ->
325
- up.motion.config.enabled = false
326
-
327
- it 'prefers to replace a selector within the popup', asyncSpec (next) ->
328
- $outside = $fixture('.foo').text('old outside')
329
- $link = $fixture('.link')
330
- up.popup.attach($link, target: '.foo', html: "<div class='foo'>old inside</div>")
331
-
332
- next =>
333
- up.extract('.foo', "<div class='foo'>new text</div>")
334
-
335
- next =>
336
- expect($outside).toBeAttached()
337
- expect($outside).toHaveText('old outside')
338
- expect($('.up-popup')).toHaveText('new text')
339
-
340
- it 'auto-closes the popup when a replacement from inside the popup affects a selector behind the popup', asyncSpec (next) ->
341
- $fixture('.outside').text('old outside')
342
- $link = $fixture('.link')
343
- up.popup.attach($link, target: '.inside', html: "<div class='inside'>old inside</div>")
344
-
345
- next =>
346
- up.extract('.outside', "<div class='outside'>new outside</div>", origin: $('.inside'))
347
-
348
- next =>
349
- expect($('.outside')).toHaveText('new outside')
350
- expect($('.up-popup')).not.toBeAttached()
351
-
352
- it 'does not restore the covered URL when auto-closing (since it would override the URL from the triggering update)', asyncSpec (next) ->
353
- up.history.config.enabled = true
354
- up.motion.config.enabled = true
355
- up.popup.config.openDuration = 0
356
- up.popup.config.closeDuration = 20
357
- up.popup.config.history = true
358
-
359
- $fixture('.outside').text('old outside')
360
- $link = $fixture('.link')
361
- up.popup.attach($link, url: '/path', target: '.inside')
362
-
363
- next =>
364
- @respondWith("<div class='inside'>old inside</div>") # Populate pop-up
365
-
366
- next =>
367
- up.extract('.outside', "<div class='outside'>new outside</div>",
368
- origin: $('.inside'), history: '/new-location') # Provoke auto-close
369
-
370
- next =>
371
- expect(location.href).toMatchUrl '/new-location'
372
-
373
- it 'does not auto-close the popup when a replacement from inside the popup affects a selector inside the popup', asyncSpec (next) ->
374
- $fixture('.outside').text('old outside')
375
- $link = $fixture('.link')
376
- up.popup.attach($link, html: "<div class='inside'>old inside</div>", target: '.inside')
377
-
378
- next =>
379
- up.extract('.inside', "<div class='inside'>new inside</div>", origin: $('.inside'))
380
-
381
- next =>
382
- expect($('.inside')).toHaveText('new inside')
383
- expect($('.up-popup')).toBeAttached()
384
-
385
- it 'does not auto-close the popup when a replacement from outside the popup affects a selector outside the popup', asyncSpec (next) ->
386
- $fixture('.outside').text('old outside')
387
- $link = $fixture('.link')
388
- up.popup.attach($link, target: '.inside', html: "<div class='inside'>old inside</div>")
389
-
390
- next =>
391
- up.extract('.outside', "<div class='outside'>new outside</div>", origin: $('.outside'))
392
-
393
- next =>
394
- expect($('.outside')).toHaveText('new outside')
395
- expect($('.up-popup')).toBeAttached()
396
-
397
- it 'does not auto-close the popup when a replacement from outside the popup affects a selector inside the popup', asyncSpec (next) ->
398
- $fixture('.outside').text('old outside')
399
- $link = $fixture('.link')
400
- up.popup.attach($link, target: '.inside', html: "<div class='inside'>old inside</div>")
401
-
402
- next =>
403
- up.extract('.inside', "<div class='inside'>new inside</div>", origin: $('.outside'))
404
-
405
- next =>
406
- expect($('.inside')).toHaveText('new inside')
407
- expect($('.up-popup')).toBeAttached()
408
-
409
- describe 'when clicking on the body', ->
410
-
411
- beforeEach ->
412
- up.motion.config.enabled = false
413
-
414
- it 'closes the popup', asyncSpec (next) ->
415
- $fixture('.outside').text('old outside')
416
- $link = $fixture('.link')
417
- up.popup.attach($link, target: '.inside', html: "<div class='inside'>inside</div>")
418
-
419
- next =>
420
- expect(up.popup.isOpen()).toBe(true)
421
- Trigger.clickSequence($('body'))
422
-
423
- next =>
424
- expect(up.popup.isOpen()).toBe(false)
425
-
426
- it 'closes the popup when a an [up-instant] link removes its parent (and thus a click event never bubbles up to the document)', asyncSpec (next) ->
427
- $parent = $fixture('.parent')
428
- $parentReplacingLink = $parent.affix('a[href="/foo"][up-target=".parent"][up-instant]')
429
- $popupOpener = $fixture('.link')
430
- up.popup.attach($popupOpener, target: '.inside', html: "<div class='inside'>inside</div>")
431
-
432
- next =>
433
- expect(up.popup.isOpen()).toBe(true)
434
- Trigger.clickSequence($parentReplacingLink)
435
-
436
- next =>
437
- expect(up.popup.isOpen()).toBe(false)
438
-
439
- it 'closes the popup when the user clicks on an [up-target] link outside the popup', asyncSpec (next) ->
440
- $target = $fixture('.target')
441
- $outsideLink = $fixture('a[href="/foo"][up-target=".target"]')
442
- $popupOpener = $fixture('.link')
443
- up.popup.attach($popupOpener, target: '.inside', html: "<div class='inside'>inside</div>")
444
-
445
- next =>
446
- expect(up.popup.isOpen()).toBe(true)
447
- Trigger.clickSequence($outsideLink)
448
-
449
- next =>
450
- expect(up.popup.isOpen()).toBe(false)
451
-
452
- it 'closes the popup when the user clicks on an [up-instant] link outside the popup', asyncSpec (next) ->
453
- $target = $fixture('.target')
454
- $outsideLink = $fixture('a[href="/foo"][up-target=".target"][up-instant]')
455
- $popupOpener = $fixture('.link')
456
- up.popup.attach($popupOpener, target: '.inside', html: "<div class='inside'>inside</div>")
457
-
458
- next =>
459
- expect(up.popup.isOpen()).toBe(true)
460
- Trigger.clickSequence($outsideLink)
461
-
462
- next =>
463
- expect(up.popup.isOpen()).toBe(false)
464
-
465
- it 'does not close the popup if #preventDefault() is called on up:popup:close event', asyncSpec (next) ->
466
- $fixture('.outside').text('old outside')
467
- $link = $fixture('.link')
468
- up.popup.attach($link, target: '.inside', html: "<div class='inside'>inside</div>")
469
-
470
- up.on 'up:popup:close', (e) -> e.preventDefault()
471
-
472
- next =>
473
- expect(up.popup.isOpen()).toBe(true)
474
- Trigger.clickSequence($('body'))
475
-
476
- next =>
477
- expect(up.popup.isOpen()).toBe(true)
478
-
479
- # Since there isn't anyone who could handle the rejection inside
480
- # the event handler, our handler mutes the rejection.
481
- expect(window).not.toHaveUnhandledRejections()
482
-
483
- it 'does not close the popup if a link outside the popup is followed with the up.follow function (bugfix)', asyncSpec (next) ->
484
- $target = $fixture('.target')
485
- $outsideLink = $fixture('a[href="/foo"][up-target=".target"]')
486
- $popupOpener = $fixture('.link')
487
- up.popup.attach($popupOpener, target: '.inside', html: "<div class='inside'>inside</div>")
488
-
489
- next =>
490
- expect(up.popup.isOpen()).toBe(true)
491
- up.follow($outsideLink)
492
-
493
- next =>
494
- expect(up.popup.isOpen()).toBe(true)
495
-
496
- it 'does not close the popup if a form outside the popup is followed with the up.submit function (bugfix)', asyncSpec (next) ->
497
- $target = $fixture('.target')
498
- $outsideForm = $fixture('form[action="/foo"][up-target=".target"]')
499
- $popupOpener = $fixture('.link')
500
- up.popup.attach($popupOpener, target: '.inside', html: "<div class='inside'>inside</div>")
501
-
502
- next =>
503
- expect(up.popup.isOpen()).toBe(true)
504
- up.submit($outsideForm)
505
-
506
- next =>
507
- expect(up.popup.isOpen()).toBe(true)