unpoly-rails 1.0.3 → 2.0.0.pre.rc2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

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