unpoly-rails 0.62.1 → 2.0.0.pre.rc6

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 (340) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -1
  3. data/CHANGELOG.md +60 -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 +1225 -0
  19. data/dist/unpoly-migrate.min.js +1 -0
  20. data/dist/unpoly.css +109 -140
  21. data/dist/unpoly.js +15805 -10558
  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 +55 -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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '079979a47b22899b849e8b53275d23c2f6bf8a4ac14bf1b6001ac00330518cc9'
4
- data.tar.gz: 033c8335552505a36214999db839d7c54a7e22c93fd168d8d8b25b7ccb5e40aa
3
+ metadata.gz: 6ae929555ac3d1c4f901618fed559ec3c2d53f5117de889d72c81518e158f946
4
+ data.tar.gz: 4a7bbc9f22a3fab1127b6c4bf3e0f930f1a300725549367025bc50c45c6ebdca
5
5
  SHA512:
6
- metadata.gz: d7be2bf8bd27d709d479000a591320731ac8fdbe2c0f613883a41af4258d4125bf4e793ec1712f83f56083f27335c39d1a5136cc8a501440fe35403ebd536cff
7
- data.tar.gz: d4493b591597cda5245c5d0cf5000d034922cde09316fc030776ceacaaf44330975199eb3b9bd1c5c3a61134c56e38a8f175f6b7e126c50c33c54377d3e31927
6
+ metadata.gz: 3ce5945794168936c808619d4ebd3a7490355dfadd7337324d40b68f2d211fc13149c46439abf693776e27c452a02f4acee78247b4196fc60bf27f94a1856b6f
7
+ data.tar.gz: d9c4f06cbc704414871a006c17b6ec1b7cb4d2f76c70c091f6585dc89265fa7f7e650e376e3ba632e4f75bb04049999fe0bc6644875b950616fb6ced4246b7dd
data/.yardopts CHANGED
@@ -1 +1 @@
1
- --markup=markdown --main=README_RAILS.md
1
+ --markup=markdown --main=README_RAILS.md --exclude .
data/CHANGELOG.md CHANGED
@@ -6,6 +6,66 @@ Changes to this project will be documented in this file.
6
6
  You may browse a formatted and hyperlinked version of this file at <https://unpoly.com/changes>.
7
7
 
8
8
 
9
+ 2.0.0
10
+ -----
11
+
12
+ [See Unpoly 2 slides](http://triskweline.de/unpoly2-slides/)
13
+
14
+ TODO
15
+ ----
16
+
17
+ This list is **far** from complete.
18
+
19
+ - up.network.config.slowDelay is now 800 (up from 300)
20
+ - up.network.config.cacheSize is now 50 (down from 70)
21
+ - up.network.isBusy() / isIdle() takes preload events into account
22
+ - up.observe() callback may return a promise that will prevent callback calls while running
23
+ - `[aria-label]` attributes are no longer used to build a target selector
24
+ - Options removed form modals: up-width, up-max-width, up-height. Use up-size or up-class.
25
+ - Failed responses now change the URL
26
+ - TODO ...
27
+ - up.history.config.restoreScroll has been removed.
28
+ - Feedback works when a layer has no history
29
+ - Layer A11Y
30
+ - inert
31
+ - aria-hidden
32
+ - focus new
33
+ - focus return on close
34
+ - up.nav sets [aria-current]
35
+ - up.history.config.enabled
36
+ - Requests sent by Unpoly no longer have a `X-Requested-With: XMLHttpRequest` header.
37
+ If you need that old behavior: up.on('up:request:load', function(event) { event.request.headers['X-Requested-With'] = 'XMLHttpRequest' })
38
+ - up.network.config.requestMetaKeys
39
+ - up:link:follow is no longer sent when preloading, up:link:preload still is
40
+ - Preserve focus when validating forms; Add { focus } option for fragment update
41
+ - up.Request.prototype.isFatalError() has been removed without replacement. Network errors now reject with an error, and not a response.
42
+ - [up-main], [up-main=overlay], [up-main=modal]
43
+ - parseSelector can parse attribute selectors with prefix, infix, suffix, space-separated, dash-separated
44
+ - up.validate() may now be called with a form element
45
+ - validating emits up:form:validate instead of up:form:submit
46
+ - When a compiler throws an error, other compilers will now run anyway
47
+ - When a destructor throws an error, other destructors will now run anyway
48
+ - Bootstrap integration
49
+ - Minimal: active, nav, navbar
50
+ - Bootstrap modal styles are no longer used for Unpoly modals
51
+ - Now supports three major Bootstrap versions:
52
+ - unpoly-bootstrap3.js
53
+ - unpoly-bootstrap4.js
54
+ - unpoly-bootstrap5.js
55
+ - Hungry elements no longer get the transition by default. You need to set [up-transition] on the hungry element.
56
+ - Rejections are now shown if the log is enabled
57
+ - up.on() can passive: true
58
+ - Preloads on touchstart and mousedown
59
+ - Digit groups separators (`60_000`) are a stage 3 ES6 feature and also supported in number attributes.
60
+
61
+
62
+ 1.0.0
63
+ -----
64
+
65
+ - TODO
66
+
67
+
68
+
9
69
  0.62.1
10
70
  ------
11
71
 
@@ -73,7 +133,6 @@ This release also exposes some convenience functions and selectors:
73
133
  [`input[up-validate]`](/input-up-validate) was supported.
74
134
 
75
135
 
76
-
77
136
  0.60.3
78
137
  ------
79
138
 
data/README.md CHANGED
@@ -31,7 +31,7 @@ Overview:
31
31
 
32
32
  Install dependencies for tests:
33
33
 
34
- - Install Ruby 2.1.2
34
+ - Install Ruby 2.3.8
35
35
  - Install Bundler by running `gem install bundler`
36
36
  - `cd` into `spec_app`
37
37
  - Install dependencies by running `bundle install`
@@ -64,17 +64,9 @@ To prepare a new version:
64
64
  1. Edit `lib/unpoly/rails/version.rb` and bump the version number. Use [semantic versioning](http://semver.org/).
65
65
  2. Add an entry to `CHANGELOG.md`
66
66
  3. Commit and push the version bump and `CHANGELOG.md`
67
+ 4. Log into Rubygems and npm
67
68
 
68
- Now we can release a new version. **This requires your to be logged into Rubygems and npm**:
69
-
70
- 1. From the project root, type `rake publish:build`. This will output minified JS and CSS files to the `dist` folder. It also updates the `package.json` for npm.
71
- 2. Commit and push the generated files. There is a rake task `rake publish:commit` that helps with this.
72
- 3. From the project root, type `rake publish:release`. This will publish a new gem version to Rubygems.org.
73
- 4. It will also push a tag for this version, which Bower requires for its own versioning scheme. Finally it publishes to npm.
74
-
75
- Always remember to build, commit and push build artifacts before calling `rake publish:release` so the Git tag points to the correct commit.
76
-
77
- If you have done this process a few times and know what you're doing, you can call `rake publish:all` to run all these steps in sequence.
69
+ Now you can call `rake release:all` to publish to Rubygems and npm.
78
70
 
79
71
  After you have published all release channels, remember to:
80
72
 
data/README_RAILS.md CHANGED
@@ -1,7 +1,9 @@
1
1
  unpoly-rails: Ruby on Rails bindings for Unpoly
2
2
  ===============================================
3
3
 
4
- [Unpoly](https://unpoly.com) is a backend-agnostic [unobtrusive JavaScript](https://en.wikipedia.org/wiki/Unobtrusive_JavaScript) framework. `unpoly-rails` gives your [Ruby on Rails](http://rubyonrails.org/) application some convenience candy when you are using Unpoly in your frontend.
4
+ [Unpoly](https://unpoly.com) is a backend-agnostic [unobtrusive JavaScript](https://en.wikipedia.org/wiki/Unobtrusive_JavaScript) framework. `unpoly-rails` gives a [Ruby on Rails](http://rubyonrails.org/) application some convenience methods to communicate with an Unpoly-enhanced frontend.
5
+
6
+ Note that the bindings provided by `unpoly-rails` are entirely optional. You are free to use Unpoly with Rails without the `unpoly-rails` gem.
5
7
 
6
8
 
7
9
  Features
@@ -11,28 +13,78 @@ The methods documented below are available in all controllers, views and helpers
11
13
 
12
14
  ### Detecting a fragment update
13
15
 
14
- To test whether the current request is a [fragment update](https://unpoly.com/up.link):
16
+ Use `up?` to test whether the current request is a [fragment update](https://unpoly.com/up.link):
15
17
 
16
18
  ```ruby
17
- up?
19
+ up? # => true or false
18
20
  ```
19
21
 
20
- To retrieve the CSS selector that is being [updated](https://unpoly.com/up.link):
22
+ To retrieve the CSS selector that is being [updated](https://unpoly.com/up.link), use `up.target`:
21
23
 
22
24
  ```ruby
23
- up.target
25
+ up.target # => '.content'
24
26
  ```
25
27
 
26
- The Unpoly frontend will expect an HTML response containing an element that matches this selector. If no such element is found, an error is shown to the user.
27
-
28
- Server-side code is free to optimize its response by only returning HTML that matches this selector:
28
+ The Unpoly frontend will expect an HTML response containing an element that matches this selector. Your Rails app is free to render a smaller response that only contains HTML matching the targeted selector. You may call `up.target?` to test whether a given CSS selector has been targeted:
29
29
 
30
30
  ```ruby
31
31
  if up.target?('.sidebar')
32
- = render 'expensive_sidebar_partial'
32
+ render('expensive_sidebar_partial')
33
+ end
34
+ ```
35
+
36
+ Fragment updates may target different selectors for successful (HTTP status `200 OK`) and failed (status `4xx` or `5xx`) responses.
37
+ Use these methods to inspect the target for failed responses:
38
+
39
+ - `up.fail_target`: The CSS selector targeted for a failed response
40
+ - `up.fail_target?(selector)`: Whether the given selector is targeted for a failed response
41
+ - `up.any_target?(selector)`: Whether the given selector is targeted for either a successful or a failed response
42
+
43
+ ### Changing the render target
44
+
45
+ The server may instruct the frontend to render a different target by assigning a new CSS selector to the `up.target` property:
46
+
47
+ ```ruby
48
+ unless signed_in?
49
+ up.target = 'body'
50
+ render 'sign_in'
51
+ end
52
+ ```
53
+
54
+ The frontend will use the server-provided target for both successful (HTTP status `200 OK`) and failed (status `4xx` or `5xx`) responses.
55
+
56
+
57
+ ### Rendering nothing
58
+
59
+ Sometimes it's OK to render nothing, e.g. when you know that the current layer is to be closed.
60
+
61
+ In this case you may call `up.render_nothing`:
62
+
63
+ ```ruby
64
+ class NotesController < ApplicationController
65
+ def create
66
+ @note = Note.new(note_params)
67
+ if @note.save
68
+ if up.layer.overlay?
69
+ up.accept_layer(@note.id)
70
+ up.render_nothing
71
+ else
72
+ redirect_to @note
73
+ end
74
+ end
75
+ end
33
76
  end
34
77
  ```
35
78
 
79
+ This will render a 200 OK response with a header `X-Up-Target: none` and an empty body.
80
+
81
+ You may render nothing with a different HTTP status by passing a `:status` option:
82
+
83
+ ```
84
+ up.render_nothing(status: :bad_request)
85
+ ```
86
+
87
+
36
88
  ### Pushing a document title to the client
37
89
 
38
90
  To force Unpoly to set a document title when processing the response:
@@ -43,6 +95,36 @@ up.title = 'Title from server'
43
95
 
44
96
  This is useful when you skip rendering the `<head>` in an Unpoly request.
45
97
 
98
+ ### Emitting events on the frontend
99
+
100
+ You may use `up.emit` to emit an event on the `document` after the
101
+ fragment was updated:
102
+
103
+ ```ruby
104
+ class UsersController < ApplicationController
105
+
106
+ def show
107
+ @user = User.find(params[:id])
108
+ up.emit('user:selected', id: @user.id)
109
+ end
110
+
111
+ end
112
+ ```
113
+
114
+ If you wish to emit an event on the current [layer](https://unpoly.com/up.layer)
115
+ instead of the `document`, use `up.layer.emit`:
116
+
117
+ ```ruby
118
+ class UsersController < ApplicationController
119
+
120
+ def show
121
+ @user = User.find(params[:id])
122
+ up.layer.emit('user:selected', id: @user.id)
123
+ end
124
+
125
+ end
126
+ ```
127
+
46
128
  ### Detecting an Unpoly form validation
47
129
 
48
130
  To test whether the current request is a [form validation](https://unpoly.com/input-up-validate):
@@ -72,12 +154,211 @@ class UsersController < ApplicationController
72
154
  end
73
155
  ```
74
156
 
157
+ ### Detecting a fragment reload
158
+
159
+ To test whether the current request was made to [reload](https://unpoly.com/up.reload) or [poll](https://unpoly.com/up-poll) a fragment:
160
+
161
+ ```ruby
162
+ up.reload?
163
+ ```
164
+
165
+ You also retrieve the time when the fragment being reloaded was previously inserted into the DOM:
166
+
167
+ ```ruby
168
+ up.reload_from_time # returns a Time object
169
+ ```
170
+
171
+ The server can compare the time from the request with the time of the last data update.
172
+ If no more recent data is available, the server can [render nothing](/X-Up-Target):
173
+
174
+ ```ruby
175
+ class MessagesController < ApplicationController
176
+
177
+ def index
178
+ if up.reload_from_time == current_user.last_message_at
179
+ up.render_nothing
180
+ else
181
+ @messages = current_user.messages.order(time: :desc).to_a
182
+ render 'index'
183
+ end
184
+ end
185
+
186
+ end
187
+ ```
188
+
189
+ Only rendering when needed saves <b>CPU time</b> on your server, which spends most of its response time rendering HTML.
190
+
191
+ This also reduces the <b>bandwidth cost</b> for a request/response exchange to **~1 KB**.
192
+
193
+
194
+ ### Working with context
195
+
196
+ Calling `up.context` will return the [context](https://unpoly.com/up.context) object of the targeted layer.
197
+
198
+ The context is a JSON object shared between the frontend and the server.
199
+ It persists for a series of Unpoly navigation, but is cleared when the user makes a full page load.
200
+ Different Unpoly [layers](https://unpoly.com/up.layer) will usually have separate context objects,
201
+ although layers may choose to share their context scope.
202
+
203
+ You may read and change the context object. Changes will be sent to the frontend with your response.
204
+
205
+ ```ruby
206
+ class GamesController < ApplicationController
207
+
208
+ def restart
209
+ up.context[:lives] = 3
210
+ render 'stage1'
211
+ end
212
+
213
+ end
214
+ ```
215
+
216
+ Keys can be accessed as either strings or symbols:
217
+
218
+ ```ruby
219
+ puts "You have " + up.layer.context[:lives] + " lives left"
220
+ puts "You have " + up.layer.context['lives'] + " lives left"
221
+ ````
222
+
223
+ You may delete a key from the frontend by calling `up.context.delete`:
224
+
225
+ ```ruby
226
+ up.context.delete(:foo)
227
+ ````
228
+
229
+ You may replace the entire context by calling `up.context.replace`:
230
+
231
+ ```
232
+ context_from_file = JSON.parse(File.read('context.json))
233
+ up.context.replace(context_from_file)
234
+ ```
235
+
236
+ `up.context` is an alias for `up.layer.context`.
237
+
238
+
239
+ ### Accessing the targeted layer
240
+
241
+ Use the methods below to interact with the [layer](/up.layer) of the fragment being targeted.
242
+
243
+ Note that fragment updates may target different layers for successful (HTTP status `200 OK`) and failed (status `4xx` or `5xx`) responses.
244
+
245
+ #### `up.layer.mode`
246
+
247
+ Returns the [mode](https://unpoly.com/up.layer.mode) of the targeted layer (e.g. `"root"` or `"modal"`).
248
+
249
+ #### `up.layer.root?`
250
+
251
+ Returns whether the targeted layer is the root layer.
252
+
253
+ #### `up.layer.overlay?`
254
+
255
+ Returns whether the targeted layer is an overlay (not the root layer).
256
+
257
+ #### `up.layer.context`
258
+
259
+ Returns the [context](https://unpoly.com/up.context) object of the targeted layer.
260
+ See documentation for `up.context`, which is an alias for `up.layer.context`.
261
+
262
+ #### `up.layer.accept(value)`
263
+
264
+ [Accepts](https://unpoly.com/up.layer.accept) the current overlay.
265
+
266
+ Does nothing if the root layer is targeted.
267
+
268
+ Note that Rails expects every controller action to render or redirect.
269
+ Your action should either call `up.render_nothing` or respond with `text/html` content matching the requested target.
270
+
271
+ #### `up.layer.dismiss(value)`
272
+
273
+ [Dismisses](https://unpoly.com/up.layer.dismisses) the current overlay.
274
+
275
+ Does nothing if the root layer is targeted.
276
+
277
+ Note that Rails expects every controller action to render or redirect.
278
+ Your action should either call `up.render_nothing` or respond with `text/html` content matching the requested target.
279
+
280
+ #### `up.layer.emit(type, options)`
281
+
282
+ [Emits an event](https://unpoly.com/up.layer.emit) on the targeted layer.
283
+
284
+ #### `up.fail_layer.mode`
285
+
286
+ Returns the [mode](https://unpoly.com/up.layer.mode) of the layer targeted for a failed response.
287
+
288
+ #### `up.fail_layer.root?`
289
+
290
+ Returns whether the layer targeted for a failed response is the root layer.
291
+
292
+ #### `up.fail_layer.overlay?`
293
+
294
+ Returns whether the layer targeted for a failed response is an overlay.
295
+
296
+ #### `up.fail_layer.context`
297
+
298
+ Returns the [context](https://unpoly.com/up.context) object of the layer targeted for a failed response.
299
+
300
+
301
+ ### Managing the client-side cache
302
+
303
+ The Unpoly frontend caches server responses for a few minutes, making requests to these URLs return instantly.
304
+ Only `GET` requests are cached. The *entire* cache is cleared after every non-`GET` request (like `POST` or `PUT`).
305
+
306
+ The server may override these defaults. For instance, the server can clear Unpoly's client-side response cache, even for `GET` requests:
307
+
308
+ ```ruby
309
+ up.cache.clear
310
+ ```
311
+
312
+ You may also clear a single page:
313
+
314
+ ```ruby
315
+ up.cache.clear('/notes/1034')
316
+ ```
317
+
318
+ You may also clear all entries matching a URL pattern:
319
+
320
+ ```ruby
321
+ up.cache.clear('/notes/*')
322
+ ```
323
+
324
+ You may also prevent cache clearing for an unsafe request:
325
+
326
+ ```ruby
327
+ up.cache.keep
328
+ ```
329
+
330
+ Here is an longer example where the server uses careful cache management to keep as much of the client-side cache as possible:
331
+
332
+ ```ruby
333
+ def NotesController < ApplicationController
334
+
335
+ def create
336
+ @note = Note.create!(params[:note].permit(...))
337
+ if @note.save
338
+ up.cache.clear('/notes/*') # Only clear affected entries
339
+ redirect_to(@note)
340
+ else
341
+ up.cache.keep # Keep the cache because we haven't saved
342
+ render 'new'
343
+ end
344
+ end
345
+ ...
346
+ end
347
+ ```
348
+
349
+
350
+ ### Preserving Unpoly-related request information through redirects
351
+
352
+ `unpoly-rails` patches [`redirect_to`](https://api.rubyonrails.org/classes/ActionController/Redirecting.html#method-i-redirect_to)
353
+ so Unpoly-related request information (like the CSS selector being targeted for a fragment
354
+ update) will be preserved for the action you redirect to.
355
+
356
+
75
357
  ### Automatic redirect detection
76
358
 
77
- `unpoly-rails` installs a `before_action` into all controllers which echoes the request's URL as a response header `X-Up-Location` and the request's
359
+ `unpoly-rails` installs a [`before_action`](https://api.rubyonrails.org/classes/AbstractController/Callbacks/ClassMethods.html#method-i-before_action) into all controllers which echoes the request's URL as a response header `X-Up-Location` and the request's
78
360
  HTTP method as `X-Up-Method`.
79
361
 
80
- The Unpoly frontend [requires these headers to detect redirects](https://unpoly.com/form-up-target#redirects), which are otherwise undetectable for an AJAX client.
81
362
 
82
363
  ### Automatic method detection for initial page load
83
364
 
@@ -93,7 +374,7 @@ What you still need to do manually
93
374
 
94
375
  ### Failed form submissions must return a non-200 status code
95
376
 
96
- Unpoly lets you submit forms via AJAX by using the [`form[up-target]`](https://unpoly.com/form-up-target) selector or [`up.submit()`](https://unpoly.com/up.submit) function.
377
+ Unpoly lets you submit forms via AJAX by using the [`form[up-follow]`](https://unpoly.com/form-up-submit) selector or [`up.submit()`](https://unpoly.com/up.submit) function.
97
378
 
98
379
  For Unpoly to be able to detect a failed form submission,
99
380
  the form must be re-rendered with a non-200 HTTP status code.
@@ -122,11 +403,11 @@ Development
122
403
 
123
404
  ### Before you make a PR
124
405
 
125
- Before you make a PR, please have some discussion about the proposed change by [opening an issue on GitHub](https://github.com/unpoly/unpoly/issues/new).
406
+ Before you create a pull request, please have some discussion about the proposed change by [opening an issue on GitHub](https://github.com/unpoly/unpoly/issues/new).
126
407
 
127
408
  ### Running tests
128
409
 
129
- - Install Ruby 2.1.2
410
+ - Install Ruby 2.3.8
130
411
  - Install Bundler by running `gem install bundler`
131
412
  - `cd` into `spec_app`
132
413
  - Install dependencies by running `bundle install`