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,60 +0,0 @@
1
- ###**
2
- Passive updates
3
- ===============
4
-
5
- This work-in-progress package will contain functionality to
6
- passively receive updates from the server.
7
-
8
- @module up.radio
9
- ###
10
- up.radio = do ->
11
-
12
- u = up.util
13
-
14
- ###**
15
- Configures defaults for passive updates.
16
-
17
- @property up.radio.config
18
- @param {Array<string>} [options.hungry]
19
- An array of CSS selectors that is replaced whenever a matching element is found in a response.
20
- These elements are replaced even when they were not targeted directly.
21
-
22
- By default this contains the [`[up-hungry]`](/up-hungry) attribute.
23
- @param {string} [options.hungryTransition=null]
24
- The transition to use when a [hungry element](/up-hungry) is replacing itself
25
- while another target is replaced.
26
-
27
- By default this is not set and the original replacement's transition is used.
28
- @stable
29
- ###
30
- config = new up.Config
31
- hungry: ['[up-hungry]']
32
- hungryTransition: null
33
-
34
- reset = ->
35
- config.reset()
36
-
37
- ###**
38
- @function up.radio.hungrySelector
39
- @internal
40
- ###
41
- hungrySelector = ->
42
- config.hungry.join(',')
43
-
44
- ###**
45
- Elements with this attribute are [updated](/up.replace) whenever there is a
46
- matching element found in a successful response. The element is replaced even
47
- when it isn't [targeted](/a-up-target) directly.
48
-
49
- Use cases for this are unread message counters or notification flashes.
50
- Such elements often live in the layout, outside of the content area that is
51
- being replaced.
52
-
53
- @selector [up-hungry]
54
- @stable
55
- ###
56
-
57
- up.on 'up:framework:reset', reset
58
-
59
- config: config
60
- hungrySelector: hungrySelector
@@ -1,24 +0,0 @@
1
- ###**
2
- Play nice with Rails UJS
3
- ========================
4
- ###
5
-
6
- up.rails = do ->
7
-
8
- u = up.util
9
- e = up.element
10
-
11
- isRails = ->
12
- !!(window.Rails || (window.jQuery?.rails))
13
-
14
- u.each ['method', 'confirm'], (feature) ->
15
-
16
- dataAttribute = "data-#{feature}"
17
- upAttribute = "up-#{feature}"
18
-
19
- up.macro "[#{dataAttribute}]", (element) ->
20
- if isRails() && up.link.isFollowable(element)
21
- replacement = {}
22
- replacement[upAttribute] = element.getAttribute(dataAttribute)
23
- e.setMissingAttrs(element, replacement)
24
- element.removeAttribute(dataAttribute)
@@ -1,476 +0,0 @@
1
- ###**
2
- Custom JavaScript
3
- =================
4
-
5
- Every app needs a way to pair JavaScript snippets with certain HTML elements,
6
- in order to integrate libraries or implement custom behavior.
7
-
8
- Unpoly lets you organize your JavaScript snippets using [compilers](/up.compiler).
9
-
10
- For instance, to activate the [Masonry](http://masonry.desandro.com/) library for every element
11
- with a `grid` class, use this compiler:
12
-
13
- up.compiler('.grid', function(element) {
14
- new Masonry(element, { itemSelector: '.grid--item' })
15
- })
16
-
17
- The compiler function will be called on matching elements when the page loads
18
- or when a matching fragment is [inserted via AJAX](/up.link) later.
19
-
20
- @module up.syntax
21
- ###
22
- up.syntax = do ->
23
-
24
- u = up.util
25
- e = up.element
26
-
27
- SYSTEM_MACRO_PRIORITIES = {
28
- '[up-back]': -100 # sets [up-href] to previous URL
29
- '[up-drawer]': -200 # sets [up-modal] and makes link followable
30
- '[up-dash]': -200 # sets [up-href] unless already set, also other [up-*] attributes
31
- '[up-expand]': -300 # distributes [up-*] attributes to parents
32
- '[data-method]': -400, # converts [data-method] to [up-method] only if link has followable [up-*] attributes
33
- '[data-confirm]': -400, # converts [data-conform] to [up-confirm] only if link has followable [up-*] attributes
34
- }
35
-
36
- compilers = []
37
- macros = []
38
-
39
- ###**
40
- Registers a function to be called when an element with
41
- the given selector is inserted into the DOM.
42
-
43
- Use compilers to activate your custom Javascript behavior on matching
44
- elements.
45
-
46
- You should migrate your [`DOMContentLoaded`](https://api.jquery.com/ready/)
47
- callbacks to compilers. This will make sure they run both at page load and
48
- when [a new fragment is inserted later](/a-up-target).
49
- It will also organize your JavaScript snippets by selector of affected elements.
50
-
51
-
52
- \#\#\# Example
53
-
54
- This jQuery compiler will insert the current time into a
55
- `<div class='current-time'></div>`:
56
-
57
- up.compiler('.current-time', function(element) {
58
- var now = new Date()
59
- element.textContent = now.toString()
60
- })
61
-
62
- The compiler function will be called once for each matching element when
63
- the page loads, or when a matching fragment is [inserted](/up.replace) later.
64
-
65
-
66
- \#\#\# Integrating JavaScript libraries
67
-
68
- `up.compiler()` is a great way to integrate JavaScript libraries.
69
- Let's say your JavaScript plugin wants you to call `lightboxify()`
70
- on links that should open a lightbox. You decide to
71
- do this for all links with an `lightbox` class:
72
-
73
- <a href="river.png" class="lightbox">River</a>
74
- <a href="ocean.png" class="lightbox">Ocean</a>
75
-
76
- This JavaScript will do exactly that:
77
-
78
- up.compiler('a.lightbox', function(element) {
79
- lightboxify(element)
80
- })
81
-
82
- \#\#\# Cleaning up after yourself
83
-
84
- If your compiler returns a function, Unpoly will use this as a *destructor* to
85
- clean up if the element leaves the DOM. Note that in Unpoly the same DOM and JavaScript environment
86
- will persist through many page loads, so it's important to not create
87
- [memory leaks](https://makandracards.com/makandra/31325-how-to-create-memory-leaks-in-jquery).
88
-
89
- You should clean up after yourself whenever your compilers have global
90
- side effects, like a [`setInterval`](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval)
91
- or [event handlers bound to the document root](/up.on).
92
-
93
- Here is a version of `.current-time` that updates
94
- the time every second, and cleans up once it's done. Note how it returns
95
- a function that calls `clearInterval`:
96
-
97
- up.compiler('.current-time', function(element) {
98
-
99
- function update() {
100
- var now = new Date()
101
- element.textContent = now.toString()
102
- }
103
-
104
- setInterval(update, 1000)
105
-
106
- return function() {
107
- clearInterval(update)
108
- };
109
-
110
- })
111
-
112
- If we didn't clean up after ourselves, we would have many ticking intervals
113
- operating on detached DOM elements after we have created and removed a couple
114
- of `<clock>` elements.
115
-
116
-
117
- \#\#\# Attaching structured data
118
-
119
- In case you want to attach structured data to the event you're observing,
120
- you can serialize the data to JSON and put it into an `[up-data]` attribute.
121
- For instance, a container for a [Google Map](https://developers.google.com/maps/documentation/javascript/tutorial)
122
- might attach the location and names of its marker pins:
123
-
124
- <div class='google-map' up-data='[
125
- { "lat": 48.36, "lng": 10.99, "title": "Friedberg" },
126
- { "lat": 48.75, "lng": 11.45, "title": "Ingolstadt" }
127
- ]'></div>
128
-
129
- The JSON will be parsed and handed to your compiler as a second argument:
130
-
131
- up.compiler('.google-map', function(element, pins) {
132
- var map = new google.maps.Map(element)
133
-
134
- pins.forEach(function(pin) {
135
- var position = new google.maps.LatLng(pin.lat, pin.lng)
136
- new google.maps.Marker({
137
- position: position,
138
- map: map,
139
- title: pin.title
140
- })
141
- })
142
- })
143
-
144
-
145
- @function up.compiler
146
- @param {string} selector
147
- The selector to match.
148
- @param {number} [options.priority=0]
149
- The priority of this compiler.
150
- Compilers with a higher priority are run first.
151
- Two compilers with the same priority are run in the order they were registered.
152
- @param {boolean} [options.batch=false]
153
- If set to `true` and a fragment insertion contains multiple
154
- elements matching the selector, `compiler` is only called once
155
- with a jQuery collection containing all matching elements.
156
- @param {boolean} [options.keep=false]
157
- If set to `true` compiled fragment will be [persisted](/up-keep) during
158
- [page updates](/a-up-target).
159
-
160
- This has the same effect as setting an `up-keep` attribute on the element.
161
- @param {Function(element, data)} compiler
162
- The function to call when a matching element is inserted.
163
-
164
- The function takes the new element as the first argument.
165
- If the element has an [`up-data`](/up-data) attribute, its value is parsed as JSON
166
- and passed as a second argument.
167
-
168
- The function may return a destructor function that cleans the compiled
169
- object before it is removed from the DOM. The destructor is supposed to
170
- [clear global state](/up.compiler#cleaning-up-after-yourself)
171
- such as timeouts and event handlers bound to the document.
172
- The destructor is *not* expected to remove the element from the DOM, which
173
- is already handled by [`up.destroy()`](/up.destroy).
174
- @stable
175
- ###
176
- registerCompiler = (args...) ->
177
- compiler = buildCompiler(args)
178
- return insertCompiler(compilers, compiler)
179
-
180
- ###**
181
- Registers a function to be called when an element with
182
- the given selector is inserted into the DOM. The function is called
183
- with each matching element as a
184
- [jQuery object](https://learn.jquery.com/using-jquery-core/jquery-object/).
185
-
186
- If you're not using jQuery, use `up.compiler()` instead, which calls
187
- the compiler function with a native element.
188
-
189
- \#\#\# Example
190
-
191
- This jQuery compiler will insert the current time into a
192
- `<div class='current-time'></div>`:
193
-
194
- up.$compiler('.current-time', function($element) {
195
- var now = new Date()
196
- $element.text(now.toString())
197
- })
198
-
199
- @function up.$compiler
200
- @param {string} selector
201
- The selector to match.
202
- @param {Object} [options]
203
- See [`options` argument for `up.compiler()`](/up.compiler#parameters).
204
- @param {Function($element, data)} compiler
205
- The function to call when a matching element is inserted.
206
-
207
- See [`compiler` argument for `up.compiler()`](/up.compiler#parameters).
208
- @stable
209
- ###
210
- registerJQueryCompiler = (args...) ->
211
- compiler = registerCompiler(args...)
212
- compiler.jQuery = true
213
- compiler
214
-
215
- ###**
216
- Registers a [compiler](/up.compiler) that is run before all other compilers.
217
-
218
- Use `up.macro()` to register a compiler that sets multiple Unpoly attributes.
219
-
220
- \#\#\# Example
221
-
222
- You will sometimes find yourself setting the same combination of UJS attributes again and again:
223
-
224
- <a href="/page1" up-target=".content" up-transition="cross-fade" up-duration="300">Page 1</a>
225
- <a href="/page2" up-target=".content" up-transition="cross-fade" up-duration="300">Page 2</a>
226
- <a href="/page3" up-target=".content" up-transition="cross-fade" up-duration="300">Page 3</a>
227
-
228
- We would much rather define a new `[content-link]` attribute that let's us
229
- write the same links like this:
230
-
231
- <a href="/page1" content-link>Page 1</a>
232
- <a href="/page2" content-link>Page 2</a>
233
- <a href="/page3" content-link>Page 3</a>
234
-
235
- We can define the `[content-link]` attribute by registering a macro that
236
- sets the `[up-target]`, `[up-transition]` and `[up-duration]` attributes for us:
237
-
238
- up.macro('[content-link]', function(link) {
239
- link.setAttribute('up-target', '.content')
240
- link.setAttribute('up-transition', 'cross-fade')
241
- link.setAttribute('up-duration', '300')
242
- })
243
-
244
- Examples for built-in macros are [`a[up-dash]`](/a-up-dash) and [`[up-expand]`](/up-expand).
245
-
246
- @function up.macro
247
- @param {string} selector
248
- The selector to match.
249
- @param {Object} options
250
- See options for [`up.compiler()`](/up.compiler).
251
- @param {Function(element, data)} macro
252
- The function to call when a matching element is inserted.
253
-
254
- See [`up.compiler()`](/up.compiler#parameters) for details.
255
- @stable
256
- ###
257
- registerMacro = (args...) ->
258
- macro = buildCompiler(args)
259
- if up.framework.isBooting()
260
- macro.priority = detectSystemMacroPriority(macro.selector) ||
261
- up.fail('Unregistered priority for system macro %o', macro.selector)
262
- return insertCompiler(macros, macro)
263
-
264
- ###**
265
- Registers a [compiler](/up.compiler) that is run before all other compilers.
266
- The compiler function is called with each matching element as a
267
- [jQuery object](https://learn.jquery.com/using-jquery-core/jquery-object/).
268
-
269
- If you're not using jQuery, use `up.macro()` instead, which calls
270
- the macro function with a native element.
271
-
272
- \#\#\# Example
273
-
274
- up.$macro('[content-link]', function($link) {
275
- $link.attr(
276
- 'up-target': '.content',
277
- 'up-transition': 'cross-fade',
278
- 'up-duration':'300'
279
- )
280
- })
281
-
282
- @function up.$macro
283
- @param {string} selector
284
- The selector to match.
285
- @param {Object} options
286
- See [`options` argument for `up.compiler()`](/up.compiler#parameters).
287
- @param {Function(element, data)} macro
288
- The function to call when a matching element is inserted.
289
-
290
- See [`compiler` argument for `up.compiler()`](/up.compiler#parameters).
291
- @stable
292
- ###
293
- registerJQueryMacro = (args...) ->
294
- macro = registerMacro(args...)
295
- macro.jQuery = true
296
- macro
297
-
298
- detectSystemMacroPriority = (macroSelector) ->
299
- for substr, priority of SYSTEM_MACRO_PRIORITIES
300
- if macroSelector.indexOf(substr) >= 0
301
- return priority
302
-
303
- parseCompilerArgs = (args) ->
304
- selector = args.shift()
305
- callback = args.pop()
306
- options = u.extractOptions(args)
307
- return [selector, options, callback]
308
-
309
- buildCompiler = (args) ->
310
- [selector, options, callback] = parseCompilerArgs(args)
311
- options = u.options(options,
312
- selector: selector,
313
- isDefault: up.framework.isBooting(),
314
- priority: 0,
315
- batch: false
316
- keep: false,
317
- jQuery: false
318
- )
319
- return u.assign(callback, options)
320
-
321
- insertCompiler = (queue, newCompiler) ->
322
- index = 0
323
- while (existingCompiler = queue[index]) && (existingCompiler.priority >= newCompiler.priority)
324
- index += 1
325
- queue.splice(index, 0, newCompiler)
326
- return newCompiler
327
-
328
- ###**
329
- Applies all compilers on the given element and its descendants.
330
- Unlike [`up.hello()`](/up.hello), this doesn't emit any events.
331
-
332
- @function up.syntax.compile
333
- @param {Array<Element>} [options.skip]
334
- A list of elements whose subtrees should not be compiled.
335
- @internal
336
- ###
337
- compile = (fragment, options) ->
338
- orderedCompilers = macros.concat(compilers)
339
- compileRun = new up.CompilePass(fragment, orderedCompilers, options)
340
- compileRun.compile()
341
-
342
- ###**
343
- Registers a function to be called when the given element
344
- is [destroyed](/up.destroy).
345
-
346
- The preferred way to register a destructor function is to `return`
347
- it from a [compiler function](/up.compiler).
348
-
349
- @function up.destructor
350
- @param {Element} element
351
- @param {Function|Array<Function>} destructor
352
- One or more destructor functions
353
- @internal
354
- ###
355
- registerDestructor = (element, destructor) ->
356
- unless destructors = element.upDestructors
357
- destructors = []
358
- element.upDestructors = destructors
359
- element.classList.add('up-can-clean')
360
- if u.isArray(destructor)
361
- destructors.push(destructor...)
362
- else
363
- destructors.push(destructor)
364
-
365
- ###**
366
- Runs any destructor on the given fragment and its descendants.
367
- Unlike [`up.destroy()`](/up.destroy), this doesn't emit any events
368
- and does not remove the element from the DOM.
369
-
370
- @function up.syntax.clean
371
- @internal
372
- ###
373
- clean = (fragment) ->
374
- cleanables = e.subtree(fragment, '.up-can-clean')
375
- u.each cleanables, (cleanable) ->
376
- if destructors = u.pluckKey(cleanable, 'upDestructors')
377
- destructor() for destructor in destructors
378
- cleanable.classList.remove('up-can-clean')
379
-
380
- ###**
381
- Checks if the given element has an [`up-data`](/up-data) attribute.
382
- If yes, parses the attribute value as JSON and returns the parsed object.
383
-
384
- Returns `undefined` if the element has no `up-data` attribute.
385
-
386
- \#\#\# Example
387
-
388
- You have an element with JSON data serialized into an `up-data` attribute:
389
-
390
- <span class='person' up-data='{ "age": 18, "name": "Bob" }'>Bob</span>
391
-
392
- Calling `up.syntax.data()` will deserialize the JSON string into a JavaScript object:
393
-
394
- up.syntax.data('.person') // returns { age: 18, name: 'Bob' }
395
-
396
- @function up.syntax.data
397
- @param {string|Element|jQuery} elementOrSelector
398
- @return
399
- The JSON-decoded value of the `up-data` attribute.
400
-
401
- Returns `undefined` if the element has no (or an empty) `up-data` attribute.
402
- @experimental
403
- ###
404
-
405
- ###**
406
- If an element with an `up-data` attribute enters the DOM,
407
- Unpoly will parse the JSON and pass the resulting object to any matching
408
- [`up.compiler()`](/up.compiler) handlers.
409
-
410
- For instance, a container for a [Google Map](https://developers.google.com/maps/documentation/javascript/tutorial)
411
- might attach the location and names of its marker pins:
412
-
413
- <div class='google-map' up-data='[
414
- { "lat": 48.36, "lng": 10.99, "title": "Friedberg" },
415
- { "lat": 48.75, "lng": 11.45, "title": "Ingolstadt" }
416
- ]'></div>
417
-
418
- The JSON will be parsed and handed to your compiler as a second argument:
419
-
420
- up.compiler('.google-map', function(element, pins) {
421
- var map = new google.maps.Map(element)
422
- pins.forEach(function(pin) {
423
- var position = new google.maps.LatLng(pin.lat, pin.lng)
424
- new google.maps.Marker({
425
- position: position,
426
- map: map,
427
- title: pin.title
428
- })
429
- })
430
- })
431
-
432
- Similarly, when an event is triggered on an element annotated with
433
- [`up-data`], the parsed object will be passed to any matching
434
- [`up.on()`](/up.on) handlers.
435
-
436
- up.on('click', '.google-map', function(event, element, pins) {
437
- console.log("There are %d pins on the clicked map", pins.length)
438
- })
439
-
440
- @selector [up-data]
441
- @param {JSON} up-data
442
- A serialized JSON string
443
- @stable
444
- ###
445
- readData = (elementOrSelector) ->
446
- element = e.get(elementOrSelector)
447
- e.jsonAttr(element, 'up-data') || {}
448
-
449
- ###**
450
- Resets the list of registered compiler directives to the
451
- moment when the framework was booted.
452
-
453
- @internal
454
- ###
455
- reset = ->
456
- compilers = u.filter(compilers, 'isDefault')
457
- macros = u.filter(macros, 'isDefault')
458
-
459
- up.on 'up:framework:reset', reset
460
-
461
- <% if ENV['JS_KNIFE'] %>knife: eval(Knife.point)<% end %>
462
- compiler: registerCompiler
463
- macro: registerMacro
464
- $compiler: registerJQueryCompiler
465
- $macro: registerJQueryMacro
466
- destructor: registerDestructor
467
- compile: compile
468
- clean: clean
469
- data: readData
470
-
471
- up.compiler = up.syntax.compiler
472
- up.$compiler = up.syntax.$compiler
473
- up.destructor = up.syntax.destructor
474
- up.macro = up.syntax.macro
475
- up.$macro = up.syntax.$macro
476
-
@@ -1,67 +0,0 @@
1
- ###**
2
- Toast alerts
3
- ============
4
-
5
- @module up.toast
6
- ###
7
- up.toast = do ->
8
- u = up.util
9
- e = up.element
10
-
11
- VARIABLE_FORMATTER = (arg) -> "<span class='up-toast-variable'>#{u.escapeHtml(arg)}</span>"
12
-
13
- state = new up.Config
14
- element: null
15
-
16
- reset = ->
17
- close()
18
- state.reset()
19
-
20
- messageToHtml = (message) ->
21
- if u.isArray(message)
22
- message[0] = u.escapeHtml(message[0])
23
- message = up.log.sprintfWithFormattedArgs(VARIABLE_FORMATTER, message...)
24
- else
25
- message = u.escapeHtml(message)
26
- message
27
-
28
- isOpen = ->
29
- !!state.element
30
-
31
- addAction = (label, callback) ->
32
- actions = state.element.querySelector('.up-toast-actions')
33
- action = e.affix(actions, '.up-toast-action')
34
- action.innerText = label
35
- action.addEventListener('click', callback)
36
-
37
- open = (message, options = {}) ->
38
- close()
39
-
40
- message = messageToHtml(message)
41
-
42
- state.element = e.createFromHtml """
43
- <div class="up-toast">
44
- <div class="up-toast-message">#{message}</div>
45
- <div class="up-toast-actions"></div>
46
- </div>
47
- """
48
-
49
- if action = (options.action || options.inspect)
50
- addAction(action.label, action.callback)
51
-
52
- addAction('Close', close)
53
-
54
- document.body.appendChild(state.element)
55
-
56
- close = ->
57
- if isOpen()
58
- e.remove(state.element)
59
- state.element = null
60
-
61
- # The framework is reset between tests
62
- up.on 'up:framework:reset', reset
63
-
64
- open: open
65
- close: close
66
- reset: reset
67
- isOpen: isOpen