unpoly-rails 0.62.1 → 2.0.0.pre.rc2

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 +53 -1
  4. data/README.md +1 -1
  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 +15377 -10465
  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 -45
  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 -64
  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 -544
  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 -1075
  97. data/lib/assets/javascripts/unpoly/fragment.coffee.erb +0 -928
  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 -827
  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 -476
  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 -2624
  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 -1098
  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 -939
  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 -508
  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,5 +0,0 @@
1
- ###**
2
- @module up
3
- ###
4
- window.up =
5
- version: <%= Unpoly::Rails::VERSION.to_json %>
@@ -1,515 +0,0 @@
1
- ###**
2
- Pop-up overlays
3
- ===============
4
-
5
- Instead of [linking to a page fragment](/up.link), you can choose
6
- to show a fragment in a popup overlay that rolls down from an anchoring element.
7
-
8
- To open a popup, add an [`up-popup` attribute](/a-up-popup) to a link:
9
-
10
- <a href="/options" up-popup=".menu">Show options</a>
11
-
12
- When this link is clicked, Unpoly will request the path `/options` and extract
13
- an element matching the selector `.menu` from the response. The matching element
14
- will then be placed in the popup overlay.
15
-
16
-
17
- \#\#\# Closing behavior
18
-
19
- The popup closes when the user clicks anywhere outside the popup area.
20
-
21
- The popup also closes *when a link within the popup changes a fragment behind the popup*.
22
- This is useful to have the popup interact with the page that
23
- opened it, e.g. by updating parts of a larger form.
24
-
25
- To disable this behavior, give the opening link an [`up-sticky`](/a-up-popup#up-sticky) attribute.
26
-
27
-
28
- \#\#\# Customizing the popup design
29
-
30
- Popups have a minimal default design:
31
-
32
- - Popup contents are displayed in a white box
33
- - There is a a subtle box shadow around the popup
34
- - The box will grow to fit the popup contents
35
-
36
- The easiest way to change how the popup looks is to override the
37
- [default CSS styles](https://github.com/unpoly/unpoly/blob/master/lib/assets/stylesheets/unpoly/popup.sass).
38
-
39
- The HTML of a popup element looks like this:
40
-
41
- <div class="up-popup">
42
- <div class="up-popup-content">
43
- Fragment content here
44
- </div>
45
- </div>
46
-
47
- The popup element is appended to the [viewport](/up.viewport) of the anchor element.
48
-
49
- @module up.popup
50
- ###
51
- up.popup = do ->
52
-
53
- u = up.util
54
- e = up.element
55
-
56
- ###**
57
- Sets default options for future popups.
58
-
59
- @property up.popup.config
60
- @param {string} [config.position='bottom']
61
- Defines on which side of the opening element the popup is attached.
62
-
63
- Valid values are `'top'`, `'right'`, `'bottom'` and `'left'`.
64
- @param {string} [config.align='left']
65
- Defines the alignment of the popup along its side.
66
-
67
- When the popup's `{ position }` is `'top'` or `'bottom'`, valid `{ align }` values are `'left'`, `center'` and `'right'`.
68
- When the popup's `{ position }` is `'left'` or `'right'`, valid `{ align }` values are `top'`, `center'` and `bottom'`.
69
- @param {string} [config.history=false]
70
- Whether opening a popup will add a browser history entry.
71
- @param {string} [config.openAnimation='fade-in']
72
- The animation used to open a popup.
73
- @param {string} [config.closeAnimation='fade-out']
74
- The animation used to close a popup.
75
- @param {string} [config.openDuration]
76
- The duration of the open animation (in milliseconds).
77
- @param {string} [config.closeDuration]
78
- The duration of the close animation (in milliseconds).
79
- @param {string} [config.openEasing]
80
- The timing function controlling the acceleration of the opening animation.
81
- @param {string} [config.closeEasing]
82
- The timing function controlling the acceleration of the closing animation.
83
- @param {boolean} [options.sticky=false]
84
- If set to `true`, the popup remains
85
- open even it changes the page in the background.
86
- @stable
87
- ###
88
- config = new up.Config
89
- openAnimation: 'fade-in'
90
- closeAnimation: 'fade-out'
91
- openDuration: 150
92
- closeDuration: 100
93
- openEasing: null
94
- closeEasing: null
95
- position: 'bottom'
96
- align: 'left'
97
- history: false
98
-
99
- ###**
100
- Returns the URL from which the current popup's contents were loaded.
101
-
102
- Returns `undefined` if no popup is open.
103
-
104
- @function up.popup.url
105
- @return {string}
106
- the source URL
107
- @stable
108
- ###
109
-
110
- ###**
111
- Returns the URL of the page or modal behind the popup.
112
-
113
- @function up.popup.coveredUrl
114
- @return {string}
115
- @experimental
116
- ###
117
-
118
- state = new up.Config
119
- phase: 'closed' # can be 'opening', 'opened', 'closing' and 'closed'
120
- anchor: null # the element to which the tooltip is anchored
121
- popup: null # the .up-popup element
122
- content: null # the .up-popup-content element
123
- tether: null # the up.Tether instance controlling the popup's position
124
- position: null # the position of the popup container element relative to its anchor
125
- align: null
126
- sticky: null
127
- url: null
128
- coveredUrl: null
129
- coveredTitle: null
130
-
131
- chain = new up.DivertibleChain()
132
-
133
- reset = ->
134
- state.tether?.destroy()
135
- state.reset()
136
- chain.reset()
137
- config.reset()
138
-
139
- discardHistory = ->
140
- state.coveredTitle = null
141
- state.coveredUrl = null
142
-
143
- createHiddenFrame = (targetSelector) ->
144
- state.tether = new up.Tether(u.only(state, 'anchor', 'position', 'align'))
145
- state.popup = e.affix(state.tether.root, '.up-popup', 'up-position': state.position, 'up-align': state.align)
146
- state.content = e.affix(state.popup, '.up-popup-content')
147
-
148
- # Create an empty element that will match the
149
- # selector that is being replaced.
150
- up.fragment.createPlaceholder(targetSelector, state.content)
151
- e.hide(state.popup)
152
-
153
- unveilFrame = ->
154
- e.show(state.popup)
155
-
156
- ###**
157
- Forces the popup to update its position relative to its anchor element.
158
-
159
- Unpoly automatically keep popups aligned when
160
- the document is resized or scrolled. Complex layout changes may make
161
- it necessary to call this function.
162
-
163
- @function up.popup.sync
164
- @experimental
165
- ###
166
- syncPosition = ->
167
- state.tether?.sync()
168
-
169
- ###**
170
- Returns whether popup modal is currently open.
171
-
172
- @function up.popup.isOpen
173
- @return {boolean}
174
- @stable
175
- ###
176
- isOpen = ->
177
- state.phase == 'opened' || state.phase == 'opening'
178
-
179
- ###**
180
- Attaches a popup overlay to the given element or selector.
181
-
182
- Emits events [`up:popup:open`](/up:popup:open) and [`up:popup:opened`](/up:popup:opened).
183
-
184
- @function up.popup.attach
185
- @param {Element|jQuery|string} anchor
186
- The element to which the popup will be attached.
187
- @param {string} [options.url]
188
- The URL from which to fetch the popup contents.
189
-
190
- If omitted, the `href` or `up-href` attribute of the anchor element will be used.
191
-
192
- Will be ignored if `options.html` is given.
193
- @param {string} [options.target]
194
- A CSS selector that will be extracted from the response and placed into the popup.
195
- @param {string} [options.position='bottom']
196
- Defines on which side of the opening element the popup is attached.
197
-
198
- Valid values are `'top'`, `'right'`, `'bottom'` and `'left'`.
199
- @param {string} [options.align='left']
200
- Defines the alignment of the popup along its side.
201
-
202
- When the popup's `{ position }` is `'top'` or `'bottom'`, valid `{ align }` values are `'left'`, `center'` and `'right'`.
203
- When the popup's `{ position }` is `'left'` or `'right'`, valid `{ align }` values are `top'`, `center'` and `bottom'`.
204
- @param {string} [options.html]
205
- A string of HTML from which to extract the popup contents. No network request will be made.
206
- @param {string} [options.confirm]
207
- A message that will be displayed in a cancelable confirmation dialog
208
- before the modal is being opened.
209
- @param {string} [options.animation]
210
- The animation to use when opening the popup.
211
- @param {number} [options.duration]
212
- The duration of the animation. See [`up.animate()`](/up.animate).
213
- @param {number} [options.delay]
214
- The delay before the animation starts. See [`up.animate()`](/up.animate).
215
- @param {string} [options.easing]
216
- The timing function that controls the animation's acceleration. [`up.animate()`](/up.animate).
217
- @param {string} [options.method="GET"]
218
- Override the request method.
219
- @param {boolean} [options.sticky=false]
220
- If set to `true`, the popup remains
221
- open even if the page changes in the background.
222
- @param {boolean} [options.history=false]
223
- @return {Promise}
224
- A promise that will be fulfilled when the popup has been loaded and
225
- the opening animation has completed.
226
- @stable
227
- ###
228
- attachAsap = (elementOrSelector, options) ->
229
- chain.asap closeNow, (-> attachNow(elementOrSelector, options))
230
-
231
- attachNow = (elementOrSelector, options) ->
232
- anchor = e.get(elementOrSelector)
233
-
234
- options ?= {}
235
- url = u.pluckKey(options, 'url') ? anchor.getAttribute('up-href') ? anchor.getAttribute('href')
236
- html = u.pluckKey(options, 'html')
237
- url or html or up.fail('up.popup.attach() requires either an { url } or { html } option')
238
- target = u.pluckKey(options, 'target') ? anchor.getAttribute('up-popup') or up.fail('No target selector given for [up-popup]')
239
- position = options.position ? anchor.getAttribute('up-position') ? config.position
240
- align = options.align ? anchor.getAttribute('up-align') ? config.align
241
- options.animation ?= anchor.getAttribute('up-animation') ? config.openAnimation
242
- options.sticky ?= e.booleanAttr(anchor, 'up-sticky') ? config.sticky
243
- options.history = if up.browser.canPushState() then (options.history ? e.booleanOrStringAttr(anchor, 'up-history') ? config.history) else false
244
- options.confirm ?= anchor.getAttribute('up-confirm')
245
- options.method = up.link.followMethod(anchor, options)
246
- options.layer = 'popup'
247
- options.failTarget ?= anchor.getAttribute('up-fail-target')
248
- options.failLayer ?= anchor.getAttribute('up-fail-layer')
249
-
250
- # This will prevent up.replace() from looking for fallbacks, since
251
- # it knows the target will always exist.
252
- options.provideTarget = -> createHiddenFrame(target)
253
-
254
- animateOptions = up.motion.animateOptions(options, anchor, duration: config.openDuration, easing: config.openEasing)
255
- extractOptions = u.merge(options, animation: false)
256
-
257
- if options.preload && url
258
- return up.replace(target, url, options)
259
-
260
- up.browser.whenConfirmed(options).then ->
261
- up.event.whenEmitted('up:popup:open', url: url, anchor: anchor, log: 'Opening popup').then ->
262
- state.phase = 'opening'
263
- state.anchor = anchor
264
- state.position = position
265
- state.align = align
266
- if options.history
267
- state.coveredUrl = up.browser.url()
268
- state.coveredTitle = document.title
269
- state.sticky = options.sticky
270
- if html
271
- promise = up.extract(target, html, extractOptions)
272
- else
273
- promise = up.replace(target, url, extractOptions)
274
- promise = promise.then ->
275
- unveilFrame()
276
- syncPosition()
277
- up.animate(state.popup, options.animation, animateOptions)
278
- promise = promise.then ->
279
- state.phase = 'opened'
280
- up.emit(state.popup, 'up:popup:opened', anchor: state.anchor, log: 'Popup opened')#
281
- promise
282
-
283
- ###**
284
- This event is [emitted](/up.emit) when a popup is starting to open.
285
-
286
- @event up:popup:open
287
- @param {Element} event.anchor
288
- The element to which the popup will be attached.
289
- @param event.preventDefault()
290
- Event listeners may call this method to prevent the popup from opening.
291
- @stable
292
- ###
293
-
294
- ###**
295
- This event is [emitted](/up.emit) when a popup has finished opening.
296
-
297
- @event up:popup:opened
298
- @param {Element} event.anchor
299
- The element to which the popup was attached.
300
- @stable
301
- ###
302
-
303
- ###**
304
- Closes a currently opened popup overlay.
305
-
306
- Does nothing if no popup is currently open.
307
-
308
- Emits events [`up:popup:close`](/up:popup:close) and [`up:popup:closed`](/up:popup:closed).
309
-
310
- @function up.popup.close
311
- @param {Object} options
312
- See options for [`up.animate()`](/up.animate).
313
- @return {Promise}
314
- A promise that will be fulfilled once the modal's close
315
- animation has finished.
316
- @stable
317
- ###
318
- closeAsap = (options) ->
319
- chain.asap -> closeNow(options)
320
-
321
- closeNow = (options) ->
322
- unless isOpen() # this can happen when a request fails and the chain proceeds to the next task
323
- return Promise.resolve()
324
-
325
- options = u.options(options,
326
- animation: config.closeAnimation
327
- history: state.coveredUrl,
328
- title: state.coveredTitle
329
- )
330
- animateOptions = up.motion.animateOptions(options, duration: config.closeDuration, easing: config.closeEasing)
331
- u.assign(options, animateOptions)
332
-
333
- up.event.whenEmitted('up:popup:close', anchor: state.anchor, log: 'Closing popup').then ->
334
- state.phase = 'closing'
335
- state.url = null
336
- state.coveredUrl = null
337
- state.coveredTitle = null
338
-
339
- up.destroy(state.popup, options).then ->
340
- state.phase = 'closed'
341
- state.tether.destroy()
342
- state.tether = null
343
- state.popup = null
344
- state.content = null
345
- state.anchor = null
346
- state.sticky = null
347
- up.emit('up:popup:closed', anchor: state.anchor, log: 'Popup closed')
348
-
349
- preloadNow = (link, options) ->
350
- options = u.options(options)
351
- options.preload = true
352
- # Use attachNow() and not attachAsap() so (1) we don't close a currently open popup
353
- # and (2) our pending AJAX request does not prevent other popups from opening
354
- attachNow(link, options)
355
-
356
- toggleAsap = (link, options) ->
357
- if link.classList.contains('up-current')
358
- closeAsap()
359
- else
360
- attachAsap(link, options)
361
-
362
- ###**
363
- This event is [emitted](/up.emit) when a popup dialog
364
- is starting to [close](/up.popup.close).
365
-
366
- @event up:popup:close
367
- @param {Element} event.anchor
368
- The element to which the popup is attached.
369
- @param event.preventDefault()
370
- Event listeners may call this method to prevent the popup from closing.
371
- @stable
372
- ###
373
-
374
- ###**
375
- This event is [emitted](/up.emit) when a popup dialog
376
- is done [closing](/up.popup.close).
377
-
378
- @event up:popup:closed
379
- @param {Element} event.anchor
380
- The element to which the popup was attached.
381
- @stable
382
- ###
383
-
384
- autoclose = ->
385
- unless state.sticky
386
- discardHistory()
387
- closeAsap()
388
-
389
- ###**
390
- Returns whether the given element or selector is contained
391
- within the current popup.
392
-
393
- @methods up.popup.contains
394
- @param {string} elementOrSelector
395
- The element to test
396
- @return {boolean}
397
- @stable
398
- ###
399
- contains = (elementOrSelector) ->
400
- element = e.get(elementOrSelector)
401
- !!e.closest(element, '.up-popup')
402
-
403
- ###**
404
- Opens this link's destination of in a popup overlay:
405
-
406
- <a href="/decks" up-popup=".deck_list">Switch deck</a>
407
-
408
- If the `up-sticky` attribute is set, the dialog does not auto-close
409
- if a page fragment behind the popup overlay updates:
410
-
411
- <a href="/decks" up-popup=".deck_list">Switch deck</a>
412
- <a href="/settings" up-popup=".options" up-sticky>Settings</a>
413
-
414
- @selector a[up-popup]
415
- @param {string} up-popup
416
- The CSS selector that will be extracted from the response and
417
- displayed in a popup overlay.
418
- @param {string} [up-position]
419
- Defines on which side of the opening element the popup is attached.
420
-
421
- Valid values are `'top'`, `'right'`, `'bottom'` and `'left'`.
422
- @param {string} [up-align]
423
- Defines the alignment of the popup along its side.
424
-
425
- When the popup's `{ position }` is `'top'` or `'bottom'`, valid `{ align }` values are `'left'`, `center'` and `'right'`.
426
- When the popup's `{ position }` is `'left'` or `'right'`, valid `{ align }` values are `top'`, `center'` and `bottom'`.
427
- @param {string} [up-confirm]
428
- A message that will be displayed in a cancelable confirmation dialog
429
- before the popup is opened.
430
- @param {string} [up-method='GET']
431
- Override the request method.
432
- @param [up-sticky]
433
- If set to `true`, the popup remains
434
- open even if the page changes in the background.
435
- @param {string} [up-history='false']
436
- Whether to push an entry to the browser history for the popup's source URL.
437
-
438
- Set this to `'false'` to prevent the URL bar from being updated.
439
- Set this to a URL string to update the history with the given URL.
440
-
441
- @stable
442
- ###
443
- up.link.addFollowVariant '[up-popup]',
444
- # Don't just pass the `toggleAsap` function reference so we can stub it in tests
445
- follow: (link, options) -> toggleAsap(link, options)
446
- preload: (link, options) -> preloadNow(link, options)
447
-
448
- # We close the popup when someone clicks on the document.
449
- # We also need to listen to up:action:consumed in case an [up-instant] link
450
- # was followed on mousedown.
451
- up.on 'click up:action:consumed', (event) ->
452
- target = event.target
453
- # Don't close when the user clicked on a popup opener.
454
- unless e.closest(target, '.up-popup, [up-popup]')
455
- u.muteRejection closeAsap()
456
- # Do not halt the event chain here. The user is allowed to directly activate
457
- # a link in the background, even with a (now closing) popup open.
458
-
459
- up.on 'up:fragment:inserted', (event, fragment) ->
460
- if contains(fragment)
461
- if newSource = fragment.getAttribute('up-source')
462
- state.url = newSource
463
- else if event.origin && contains(event.origin)
464
- u.muteRejection autoclose()
465
-
466
- # Close the pop-up overlay when the user presses ESC.
467
- up.event.onEscape ->
468
- u.muteRejection closeAsap()
469
-
470
- ###**
471
- When this element is clicked, a currently open [popup](/up.popup) is closed.
472
-
473
- Does nothing if no popup is currently open.
474
-
475
- \#\#\# Example
476
-
477
- Clickin on this `<span>` will close a currently open popup:
478
-
479
- <span class='up-close'>Close this popup</span>
480
-
481
- When a popup changes the current URL, you might need to deal with content being displayed
482
- as either a popup or a full page.
483
-
484
- To make a link that closes the current popup, but follows to
485
- a fallback destination if no popup is open:
486
-
487
- <a href="/fallback" up-close>Okay</a>
488
-
489
- @selector .up-popup [up-close]
490
- @stable
491
- ###
492
- up.on 'click', '.up-popup [up-close]', (event) ->
493
- u.muteRejection closeAsap()
494
- # Only prevent the default when we actually closed a popup.
495
- # This way we can have buttons that close a popup when within a popup,
496
- # but link to a destination if not.
497
- up.event.consumeAction(event)
498
-
499
- # When the user uses the back button we will usually restore <body> or a base container.
500
- # We close any open modal because it probably won't match the restored state.
501
- up.on 'up:history:restore', ->
502
- u.muteRejection closeAsap()
503
-
504
- # The framework is reset between tests
505
- up.on 'up:framework:reset', reset
506
-
507
- <% if ENV['JS_KNIFE'] %>knife: eval(Knife.point)<% end %>
508
- attach: attachAsap
509
- close: closeAsap
510
- url: -> state.url
511
- coveredUrl: -> state.coveredUrl
512
- config: config
513
- contains: contains
514
- isOpen: isOpen
515
- sync: syncPosition