unpoly-rails 0.62.0 → 2.0.0.pre.rc5

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 +66 -1
  4. data/README.md +3 -11
  5. data/README_RAILS.md +295 -14
  6. data/dist/unpoly-bootstrap3.css +9 -14
  7. data/dist/unpoly-bootstrap3.js +4 -18
  8. data/dist/unpoly-bootstrap3.min.css +1 -1
  9. data/dist/unpoly-bootstrap3.min.js +1 -1
  10. data/dist/unpoly-bootstrap4.css +9 -0
  11. data/dist/unpoly-bootstrap4.js +16 -0
  12. data/dist/unpoly-bootstrap4.min.css +1 -0
  13. data/dist/unpoly-bootstrap4.min.js +1 -0
  14. data/dist/unpoly-bootstrap5.css +9 -0
  15. data/dist/unpoly-bootstrap5.js +14 -0
  16. data/dist/unpoly-bootstrap5.min.css +1 -0
  17. data/dist/unpoly-bootstrap5.min.js +1 -0
  18. data/dist/unpoly-migrate.js +1213 -0
  19. data/dist/unpoly-migrate.min.js +1 -0
  20. data/dist/unpoly.css +109 -140
  21. data/dist/unpoly.js +15679 -10537
  22. data/dist/unpoly.min.css +1 -1
  23. data/dist/unpoly.min.js +6 -4
  24. data/lib/unpoly-rails.rb +9 -3
  25. data/lib/unpoly/rails/change.rb +372 -0
  26. data/lib/unpoly/rails/change/cache.rb +26 -0
  27. data/lib/unpoly/rails/change/context.rb +80 -0
  28. data/lib/unpoly/rails/change/field.rb +117 -0
  29. data/lib/unpoly/rails/change/field_definition.rb +74 -0
  30. data/lib/unpoly/rails/change/layer.rb +60 -0
  31. data/lib/unpoly/rails/controller.rb +47 -0
  32. data/lib/unpoly/rails/error.rb +5 -0
  33. data/lib/unpoly/rails/request_echo_headers.rb +2 -2
  34. data/lib/unpoly/rails/version.rb +1 -1
  35. data/lib/unpoly/tasks.rb +45 -0
  36. metadata +43 -313
  37. data/.gitignore +0 -10
  38. data/.ruby-version +0 -1
  39. data/Gemfile +0 -8
  40. data/Gemfile.lock +0 -45
  41. data/Rakefile +0 -145
  42. data/bower.json +0 -27
  43. data/design/animation-ghosting.txt +0 -72
  44. data/design/design.txt +0 -34
  45. data/design/draft.html.erb +0 -48
  46. data/design/draft.rb +0 -9
  47. data/design/es6.js +0 -32
  48. data/design/ghost-debugging.txt +0 -118
  49. data/design/homepage.txt +0 -236
  50. data/design/ie11.txt +0 -9
  51. data/design/measure_import_node.js +0 -330
  52. data/design/measure_jquery/element_list.js +0 -41
  53. data/design/measure_jquery/up.on_vs_addEventListener.js +0 -56
  54. data/design/positioning.txt +0 -28
  55. data/design/query-params-in-form-actions/cases.html +0 -125
  56. data/design/rename.txt +0 -0
  57. data/design/test_rejected_promise.txt +0 -5
  58. data/design/unpoly errors.txt +0 -19
  59. data/lib/assets/javascripts/unpoly-bootstrap3.coffee +0 -2
  60. data/lib/assets/javascripts/unpoly-bootstrap3/feedback-ext.coffee +0 -5
  61. data/lib/assets/javascripts/unpoly-bootstrap3/form-ext.coffee +0 -1
  62. data/lib/assets/javascripts/unpoly-bootstrap3/modal-ext.coffee +0 -14
  63. data/lib/assets/javascripts/unpoly-bootstrap3/viewport-ext.coffee +0 -5
  64. data/lib/assets/javascripts/unpoly.coffee +0 -28
  65. data/lib/assets/javascripts/unpoly/browser.coffee.erb +0 -240
  66. data/lib/assets/javascripts/unpoly/classes/body_shifter.coffee +0 -36
  67. data/lib/assets/javascripts/unpoly/classes/cache.coffee +0 -127
  68. data/lib/assets/javascripts/unpoly/classes/compile_pass.coffee +0 -93
  69. data/lib/assets/javascripts/unpoly/classes/config.coffee +0 -9
  70. data/lib/assets/javascripts/unpoly/classes/css_transition.coffee +0 -118
  71. data/lib/assets/javascripts/unpoly/classes/divertible_chain.coffee +0 -39
  72. data/lib/assets/javascripts/unpoly/classes/event_listener.coffee +0 -116
  73. data/lib/assets/javascripts/unpoly/classes/extract_cascade.coffee +0 -86
  74. data/lib/assets/javascripts/unpoly/classes/extract_plan.coffee +0 -111
  75. data/lib/assets/javascripts/unpoly/classes/field_observer.coffee +0 -80
  76. data/lib/assets/javascripts/unpoly/classes/focus_follower.coffee +0 -29
  77. data/lib/assets/javascripts/unpoly/classes/follow_variant.coffee +0 -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 -543
  81. data/lib/assets/javascripts/unpoly/classes/record.coffee +0 -22
  82. data/lib/assets/javascripts/unpoly/classes/rect.js +0 -21
  83. data/lib/assets/javascripts/unpoly/classes/request.coffee +0 -246
  84. data/lib/assets/javascripts/unpoly/classes/response.coffee +0 -157
  85. data/lib/assets/javascripts/unpoly/classes/reveal_motion.coffee +0 -102
  86. data/lib/assets/javascripts/unpoly/classes/scroll_motion.coffee +0 -67
  87. data/lib/assets/javascripts/unpoly/classes/selector.coffee +0 -60
  88. data/lib/assets/javascripts/unpoly/classes/store/memory.coffee +0 -26
  89. data/lib/assets/javascripts/unpoly/classes/store/session.coffee +0 -59
  90. data/lib/assets/javascripts/unpoly/classes/tether.coffee +0 -105
  91. data/lib/assets/javascripts/unpoly/classes/url_set.coffee +0 -32
  92. data/lib/assets/javascripts/unpoly/cookie.coffee +0 -56
  93. data/lib/assets/javascripts/unpoly/element.coffee.erb +0 -1126
  94. data/lib/assets/javascripts/unpoly/event.coffee.erb +0 -445
  95. data/lib/assets/javascripts/unpoly/feedback.coffee +0 -353
  96. data/lib/assets/javascripts/unpoly/form.coffee.erb +0 -1069
  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 -826
  104. data/lib/assets/javascripts/unpoly/motion.coffee.erb +0 -668
  105. data/lib/assets/javascripts/unpoly/namespace.coffee.erb +0 -5
  106. data/lib/assets/javascripts/unpoly/popup.coffee.erb +0 -515
  107. data/lib/assets/javascripts/unpoly/protocol.coffee +0 -298
  108. data/lib/assets/javascripts/unpoly/proxy.coffee +0 -672
  109. data/lib/assets/javascripts/unpoly/radio.coffee +0 -60
  110. data/lib/assets/javascripts/unpoly/rails.coffee +0 -24
  111. data/lib/assets/javascripts/unpoly/syntax.coffee.erb +0 -477
  112. data/lib/assets/javascripts/unpoly/toast.coffee +0 -67
  113. data/lib/assets/javascripts/unpoly/tooltip.coffee +0 -276
  114. data/lib/assets/javascripts/unpoly/util.coffee.erb +0 -1676
  115. data/lib/assets/javascripts/unpoly/viewport.coffee.erb +0 -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 -2611
  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 -918
  312. data/spec_app/spec/javascripts/up/motion_spec.js.coffee +0 -582
  313. data/spec_app/spec/javascripts/up/popup_spec.js.coffee +0 -508
  314. data/spec_app/spec/javascripts/up/protocol_spec.js.coffee +0 -39
  315. data/spec_app/spec/javascripts/up/proxy_spec.js.coffee +0 -1137
  316. data/spec_app/spec/javascripts/up/radio_spec.js.coffee +0 -212
  317. data/spec_app/spec/javascripts/up/rails_spec.js.coffee +0 -118
  318. data/spec_app/spec/javascripts/up/spec_spec.js.coffee +0 -9
  319. data/spec_app/spec/javascripts/up/syntax_spec.js.coffee +0 -304
  320. data/spec_app/spec/javascripts/up/toast_spec.js.coffee +0 -37
  321. data/spec_app/spec/javascripts/up/tooltip_spec.js.coffee +0 -163
  322. data/spec_app/spec/javascripts/up/util_spec.js.coffee +0 -1420
  323. data/spec_app/spec/javascripts/up/viewport_spec.js.coffee +0 -655
  324. data/spec_app/spec/spec_helper.rb +0 -62
  325. data/spec_app/test/controllers/.keep +0 -0
  326. data/spec_app/test/fixtures/.keep +0 -0
  327. data/spec_app/test/helpers/.keep +0 -0
  328. data/spec_app/test/integration/.keep +0 -0
  329. data/spec_app/test/mailers/.keep +0 -0
  330. data/spec_app/test/models/.keep +0 -0
  331. data/spec_app/test/test_helper.rb +0 -10
  332. data/spec_app/vendor/asset-libs/es6-promise-4.1.6/es6-promise.auto.js +0 -1159
  333. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.bower.json +0 -43
  334. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.gitignore +0 -6
  335. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.npmignore +0 -10
  336. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.pairs +0 -6
  337. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.travis.yml +0 -56
  338. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/jasmine-ajax.js +0 -790
  339. data/spec_app/vendor/assets/.keep +0 -0
  340. data/unpoly-rails.gemspec +0 -24
@@ -1,43 +0,0 @@
1
- {
2
- "name": "jasmine-ajax",
3
- "description": "A library for faking Ajax responses in your Jasmine suite.",
4
- "version": "3.2.0",
5
- "main": "lib/mock-ajax.js",
6
- "license": "MIT",
7
- "homepage": "https://github.com/jasmine/jasmine-ajax",
8
- "authors": [
9
- "JR Boyens <jboyens@fooninja.org>",
10
- "Gregg Van Hove <gregg@slackersoft.net>"
11
- ],
12
- "dependencies": {
13
- "jasmine": "~2"
14
- },
15
- "moduleType": [
16
- "globals"
17
- ],
18
- "keywords": [
19
- "jasmine",
20
- "ajax"
21
- ],
22
- "ignore": [
23
- "**/.*",
24
- "Gemfile",
25
- "Gemfile.lock",
26
- "Gruntfile.js",
27
- "Rakefile",
28
- "bower_components",
29
- "node_modules",
30
- "spec",
31
- "src",
32
- "travis-script.sh"
33
- ],
34
- "_release": "3.2.0",
35
- "_resolution": {
36
- "type": "version",
37
- "tag": "v3.2.0",
38
- "commit": "b54a002d468922f41719a62190a2f6cbfcd12d32"
39
- },
40
- "_source": "git://github.com/jasmine/jasmine-ajax.git",
41
- "_target": "*",
42
- "_originalSource": "jasmine-ajax"
43
- }
@@ -1,6 +0,0 @@
1
- .idea/
2
- .tmp/
3
- .rvmrc
4
- *.swp
5
- bower_components
6
- node_modules
@@ -1,10 +0,0 @@
1
- **/.*
2
- Gemfile
3
- Gemfile.lock
4
- Gruntfile.js
5
- Rakefile
6
- bower_components
7
- node_modules
8
- spec
9
- src
10
- travis-script.sh
@@ -1,6 +0,0 @@
1
- pairs:
2
- hg: Hunter Gillane
3
-
4
- email:
5
- prefix: pair
6
- domain: pivotallabs.com
@@ -1,56 +0,0 @@
1
- script: bash travis-script.sh
2
- language: ruby
3
- cache: bundler
4
- rvm: 1.9.3
5
- before_install: npm install
6
- addons:
7
- sauce_connect: true
8
- env:
9
- global:
10
- - USE_SAUCE=true
11
- - JASMINE_BROWSER="firefox"
12
- - SAUCE_OS="Linux"
13
- - SAUCE_BROWSER_VERSION=''
14
- - secure: PmIDShYXuBaZHlEz0nvcAUinsGUgP6MFlWVS33X9FO3pU1fDLqtV7Zsda25joQDJEmCf9hbfGAsmOHpZdHb54cZnxWjB5Heo/4fr4JcI/0C5wphS6SQTWlBOrLnLN68iYH5Uc+QS7ogFm6+OeiQZbYxl0u0Q2Llu5TwLYDbQHzU=
15
- - secure: Y6Rlr+C2G4/3S0R54LdJx7DYBjZoiOJkg+uD3o6dVsUNnK5cKnJqqMm837nFOEYlbyecNtmwkFfrt28EQ52XJAkjE0RFbcC0u4OpPi7AA8P+IiHEaqpEOg14pH/XkeqcDQrQDzuoP8y2Ijm9GnDFaIW/BALUGLsFo9GnATww8kI=
16
- matrix:
17
- include:
18
- - env:
19
- - JASMINE_BROWSER="safari"
20
- - SAUCE_OS="OS X 10.11"
21
- - SAUCE_BROWSER_VERSION=9
22
- - env:
23
- - JASMINE_BROWSER="safari"
24
- - SAUCE_OS="OS X 10.10"
25
- - SAUCE_BROWSER_VERSION=8
26
- - env:
27
- - JASMINE_BROWSER="safari"
28
- - SAUCE_OS="OS X 10.9"
29
- - SAUCE_BROWSER_VERSION=7
30
- - env:
31
- - JASMINE_BROWSER="safari"
32
- - SAUCE_OS="OS X 10.8"
33
- - SAUCE_BROWSER_VERSION=6
34
- - env:
35
- - JASMINE_BROWSER="internet explorer"
36
- - SAUCE_OS="Windows 8.1"
37
- - SAUCE_BROWSER_VERSION=11
38
- - env:
39
- - JASMINE_BROWSER="internet explorer"
40
- - SAUCE_OS="Windows 8"
41
- - SAUCE_BROWSER_VERSION=10
42
- - env:
43
- - JASMINE_BROWSER="internet explorer"
44
- - SAUCE_OS="Windows 7"
45
- - SAUCE_BROWSER_VERSION=9
46
- - env:
47
- - JASMINE_BROWSER="internet explorer"
48
- - SAUCE_OS="Windows 7"
49
- - SAUCE_BROWSER_VERSION=8
50
- - env:
51
- - JASMINE_BROWSER="chrome"
52
- - SAUCE_OS="Linux"
53
- - SAUCE_BROWSER_VERSION=''
54
- - env:
55
- - JASMINE_BROWSER="phantomjs"
56
- - USE_SAUCE=false
@@ -1,790 +0,0 @@
1
- /*
2
-
3
- Jasmine-Ajax - v3.3.1: a set of helpers for testing AJAX requests under the Jasmine
4
- BDD framework for JavaScript.
5
-
6
- http://github.com/jasmine/jasmine-ajax
7
-
8
- Jasmine Home page: http://jasmine.github.io/
9
-
10
- Copyright (c) 2008-2015 Pivotal Labs
11
-
12
- Permission is hereby granted, free of charge, to any person obtaining
13
- a copy of this software and associated documentation files (the
14
- "Software"), to deal in the Software without restriction, including
15
- without limitation the rights to use, copy, modify, merge, publish,
16
- distribute, sublicense, and/or sell copies of the Software, and to
17
- permit persons to whom the Software is furnished to do so, subject to
18
- the following conditions:
19
-
20
- The above copyright notice and this permission notice shall be
21
- included in all copies or substantial portions of the Software.
22
-
23
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30
-
31
- */
32
-
33
- //Module wrapper to support both browser and CommonJS environment
34
- (function (root, factory) {
35
- // if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
36
- // // CommonJS
37
- // var jasmineRequire = require('jasmine-core');
38
- // module.exports = factory(root, function() {
39
- // return jasmineRequire;
40
- // });
41
- // } else {
42
- // Browser globals
43
- window.MockAjax = factory(root, getJasmineRequireObj);
44
- // }
45
- }(typeof window !== 'undefined' ? window : global, function (global, getJasmineRequireObj) {
46
-
47
- //
48
- getJasmineRequireObj().ajax = function(jRequire) {
49
- var $ajax = {};
50
-
51
- $ajax.RequestStub = jRequire.AjaxRequestStub();
52
- $ajax.RequestTracker = jRequire.AjaxRequestTracker();
53
- $ajax.StubTracker = jRequire.AjaxStubTracker();
54
- $ajax.ParamParser = jRequire.AjaxParamParser();
55
- $ajax.event = jRequire.AjaxEvent();
56
- $ajax.eventBus = jRequire.AjaxEventBus($ajax.event);
57
- $ajax.fakeRequest = jRequire.AjaxFakeRequest($ajax.eventBus);
58
- $ajax.MockAjax = jRequire.MockAjax($ajax);
59
-
60
- return $ajax.MockAjax;
61
- };
62
-
63
- getJasmineRequireObj().AjaxEvent = function() {
64
- function now() {
65
- return new Date().getTime();
66
- }
67
-
68
- function noop() {
69
- }
70
-
71
- // Event object
72
- // https://dom.spec.whatwg.org/#concept-event
73
- function XMLHttpRequestEvent(xhr, type) {
74
- this.type = type;
75
- this.bubbles = false;
76
- this.cancelable = false;
77
- this.timeStamp = now();
78
-
79
- this.isTrusted = false;
80
- this.defaultPrevented = false;
81
-
82
- // Event phase should be "AT_TARGET"
83
- // https://dom.spec.whatwg.org/#dom-event-at_target
84
- this.eventPhase = 2;
85
-
86
- this.target = xhr;
87
- this.currentTarget = xhr;
88
- }
89
-
90
- XMLHttpRequestEvent.prototype.preventDefault = noop;
91
- XMLHttpRequestEvent.prototype.stopPropagation = noop;
92
- XMLHttpRequestEvent.prototype.stopImmediatePropagation = noop;
93
-
94
- function XMLHttpRequestProgressEvent() {
95
- XMLHttpRequestEvent.apply(this, arguments);
96
-
97
- this.lengthComputable = false;
98
- this.loaded = 0;
99
- this.total = 0;
100
- }
101
-
102
- // Extend prototype
103
- XMLHttpRequestProgressEvent.prototype = XMLHttpRequestEvent.prototype;
104
-
105
- return {
106
- event: function(xhr, type) {
107
- return new XMLHttpRequestEvent(xhr, type);
108
- },
109
-
110
- progressEvent: function(xhr, type) {
111
- return new XMLHttpRequestProgressEvent(xhr, type);
112
- }
113
- };
114
- };
115
- getJasmineRequireObj().AjaxEventBus = function(eventFactory) {
116
- function EventBus(source) {
117
- this.eventList = {};
118
- this.source = source;
119
- }
120
-
121
- function ensureEvent(eventList, name) {
122
- eventList[name] = eventList[name] || [];
123
- return eventList[name];
124
- }
125
-
126
- function findIndex(list, thing) {
127
- if (list.indexOf) {
128
- return list.indexOf(thing);
129
- }
130
-
131
- for(var i = 0; i < list.length; i++) {
132
- if (thing === list[i]) {
133
- return i;
134
- }
135
- }
136
-
137
- return -1;
138
- }
139
-
140
- EventBus.prototype.addEventListener = function(event, callback) {
141
- ensureEvent(this.eventList, event).push(callback);
142
- };
143
-
144
- EventBus.prototype.removeEventListener = function(event, callback) {
145
- var index = findIndex(this.eventList[event], callback);
146
-
147
- if (index >= 0) {
148
- this.eventList[event].splice(index, 1);
149
- }
150
- };
151
-
152
- EventBus.prototype.trigger = function(event) {
153
- var evt;
154
-
155
- // Event 'readystatechange' is should be a simple event.
156
- // Others are progress event.
157
- // https://xhr.spec.whatwg.org/#events
158
- if (event === 'readystatechange') {
159
- evt = eventFactory.event(this.source, event);
160
- } else {
161
- evt = eventFactory.progressEvent(this.source, event);
162
- }
163
-
164
- var eventListeners = this.eventList[event];
165
-
166
- if (eventListeners) {
167
- for (var i = 0; i < eventListeners.length; i++) {
168
- eventListeners[i].call(this.source, evt);
169
- }
170
- }
171
- };
172
-
173
- return function(source) {
174
- return new EventBus(source);
175
- };
176
- };
177
-
178
- getJasmineRequireObj().AjaxFakeRequest = function(eventBusFactory) {
179
- function extend(destination, source, propertiesToSkip) {
180
- propertiesToSkip = propertiesToSkip || [];
181
- for (var property in source) {
182
- if (!arrayContains(propertiesToSkip, property)) {
183
- destination[property] = source[property];
184
- }
185
- }
186
- return destination;
187
- }
188
-
189
- function arrayContains(arr, item) {
190
- for (var i = 0; i < arr.length; i++) {
191
- if (arr[i] === item) {
192
- return true;
193
- }
194
- }
195
- return false;
196
- }
197
-
198
- function wrapProgressEvent(xhr, eventName) {
199
- return function() {
200
- if (xhr[eventName]) {
201
- xhr[eventName].apply(xhr, arguments);
202
- }
203
- };
204
- }
205
-
206
- function initializeEvents(xhr) {
207
- xhr.eventBus.addEventListener('readystatechange', wrapProgressEvent(xhr, 'onreadystatechange'));
208
- xhr.eventBus.addEventListener('loadstart', wrapProgressEvent(xhr, 'onloadstart'));
209
- xhr.eventBus.addEventListener('load', wrapProgressEvent(xhr, 'onload'));
210
- xhr.eventBus.addEventListener('loadend', wrapProgressEvent(xhr, 'onloadend'));
211
- xhr.eventBus.addEventListener('progress', wrapProgressEvent(xhr, 'onprogress'));
212
- xhr.eventBus.addEventListener('error', wrapProgressEvent(xhr, 'onerror'));
213
- xhr.eventBus.addEventListener('abort', wrapProgressEvent(xhr, 'onabort'));
214
- xhr.eventBus.addEventListener('timeout', wrapProgressEvent(xhr, 'ontimeout'));
215
- }
216
-
217
- function unconvertibleResponseTypeMessage(type) {
218
- var msg = [
219
- "Can't build XHR.response for XHR.responseType of '",
220
- type,
221
- "'.",
222
- "XHR.response must be explicitly stubbed"
223
- ];
224
- return msg.join(' ');
225
- }
226
-
227
- function fakeRequest(global, requestTracker, stubTracker, paramParser) {
228
- function FakeXMLHttpRequest() {
229
- requestTracker.track(this);
230
- this.eventBus = eventBusFactory(this);
231
- initializeEvents(this);
232
- this.requestHeaders = {};
233
- this.overriddenMimeType = null;
234
- }
235
-
236
- function findHeader(name, headers) {
237
- name = name.toLowerCase();
238
- for (var header in headers) {
239
- if (header.toLowerCase() === name) {
240
- return headers[header];
241
- }
242
- }
243
- }
244
-
245
- function normalizeHeaders(rawHeaders, contentType) {
246
- var headers = [];
247
-
248
- if (rawHeaders) {
249
- if (rawHeaders instanceof Array) {
250
- headers = rawHeaders;
251
- } else {
252
- for (var headerName in rawHeaders) {
253
- if (rawHeaders.hasOwnProperty(headerName)) {
254
- headers.push({ name: headerName, value: rawHeaders[headerName] });
255
- }
256
- }
257
- }
258
- } else {
259
- headers.push({ name: "Content-Type", value: contentType || "application/json" });
260
- }
261
-
262
- return headers;
263
- }
264
-
265
- function parseXml(xmlText, contentType) {
266
- if (global.DOMParser) {
267
- return (new global.DOMParser()).parseFromString(xmlText, 'text/xml');
268
- } else {
269
- var xml = new global.ActiveXObject("Microsoft.XMLDOM");
270
- xml.async = "false";
271
- xml.loadXML(xmlText);
272
- return xml;
273
- }
274
- }
275
-
276
- var xmlParsables = ['text/xml', 'application/xml'];
277
-
278
- function getResponseXml(responseText, contentType) {
279
- if (arrayContains(xmlParsables, contentType.toLowerCase())) {
280
- return parseXml(responseText, contentType);
281
- } else if (contentType.match(/\+xml$/)) {
282
- return parseXml(responseText, 'text/xml');
283
- }
284
- return null;
285
- }
286
-
287
- extend(FakeXMLHttpRequest, {
288
- UNSENT: 0,
289
- OPENED: 1,
290
- HEADERS_RECEIVED: 2,
291
- LOADING: 3,
292
- DONE: 4
293
- });
294
-
295
- var iePropertiesThatCannotBeCopied = ['responseBody', 'responseText', 'responseXML', 'status', 'statusText', 'responseTimeout', 'responseURL'];
296
- extend(FakeXMLHttpRequest.prototype, new global.XMLHttpRequest(), iePropertiesThatCannotBeCopied);
297
- extend(FakeXMLHttpRequest.prototype, {
298
- open: function() {
299
- this.method = arguments[0];
300
- this.url = arguments[1];
301
- this.username = arguments[3];
302
- this.password = arguments[4];
303
- this.readyState = FakeXMLHttpRequest.OPENED;
304
- this.requestHeaders = {};
305
- this.eventBus.trigger('readystatechange');
306
- },
307
-
308
- setRequestHeader: function(header, value) {
309
- if (this.readyState === 0) {
310
- throw new Error('DOMException: Failed to execute "setRequestHeader" on "XMLHttpRequest": The object\'s state must be OPENED.');
311
- }
312
-
313
- if(this.requestHeaders.hasOwnProperty(header)) {
314
- this.requestHeaders[header] = [this.requestHeaders[header], value].join(', ');
315
- } else {
316
- this.requestHeaders[header] = value;
317
- }
318
- },
319
-
320
- overrideMimeType: function(mime) {
321
- this.overriddenMimeType = mime;
322
- },
323
-
324
- abort: function() {
325
- this.readyState = FakeXMLHttpRequest.UNSENT;
326
- this.status = 0;
327
- this.statusText = "abort";
328
- this.eventBus.trigger('readystatechange');
329
- this.eventBus.trigger('progress');
330
- this.eventBus.trigger('abort');
331
- this.eventBus.trigger('loadend');
332
- },
333
-
334
- readyState: FakeXMLHttpRequest.UNSENT,
335
-
336
- onloadstart: null,
337
- onprogress: null,
338
- onabort: null,
339
- onerror: null,
340
- onload: null,
341
- ontimeout: null,
342
- onloadend: null,
343
- onreadystatechange: null,
344
-
345
- addEventListener: function() {
346
- this.eventBus.addEventListener.apply(this.eventBus, arguments);
347
- },
348
-
349
- removeEventListener: function(event, callback) {
350
- this.eventBus.removeEventListener.apply(this.eventBus, arguments);
351
- },
352
-
353
- status: null,
354
-
355
- send: function(data) {
356
- this.params = data;
357
- this.eventBus.trigger('loadstart');
358
-
359
- var stub = stubTracker.findStub(this.url, data, this.method);
360
-
361
- this.dispatchStub(stub);
362
- },
363
-
364
- dispatchStub: function(stub) {
365
- if (stub) {
366
- if (stub.isReturn()) {
367
- this.respondWith(stub);
368
- } else if (stub.isError()) {
369
- this.responseError();
370
- } else if (stub.isTimeout()) {
371
- this.responseTimeout();
372
- } else if (stub.isCallFunction()) {
373
- this.responseCallFunction(stub);
374
- }
375
- }
376
- },
377
-
378
- contentType: function() {
379
- return findHeader('content-type', this.requestHeaders);
380
- },
381
-
382
- data: function() {
383
- if (!this.params) {
384
- return {};
385
- }
386
-
387
- return paramParser.findParser(this).parse(this.params);
388
- },
389
-
390
- getResponseHeader: function(name) {
391
- var resultHeader = null;
392
- if (!this.responseHeaders) { return resultHeader; }
393
-
394
- name = name.toLowerCase();
395
- for(var i = 0; i < this.responseHeaders.length; i++) {
396
- var header = this.responseHeaders[i];
397
- if (name === header.name.toLowerCase()) {
398
- if (resultHeader) {
399
- resultHeader = [resultHeader, header.value].join(', ');
400
- } else {
401
- resultHeader = header.value;
402
- }
403
- }
404
- }
405
- return resultHeader;
406
- },
407
-
408
- getAllResponseHeaders: function() {
409
- if (!this.responseHeaders) { return null; }
410
-
411
- var responseHeaders = [];
412
- for (var i = 0; i < this.responseHeaders.length; i++) {
413
- responseHeaders.push(this.responseHeaders[i].name + ': ' +
414
- this.responseHeaders[i].value);
415
- }
416
- return responseHeaders.join('\r\n') + '\r\n';
417
- },
418
-
419
- responseText: null,
420
- response: null,
421
- responseType: null,
422
- responseURL: null,
423
-
424
- responseValue: function() {
425
- switch(this.responseType) {
426
- case null:
427
- case "":
428
- case "text":
429
- return this.readyState >= FakeXMLHttpRequest.LOADING ? this.responseText : "";
430
- case "json":
431
- return JSON.parse(this.responseText);
432
- case "arraybuffer":
433
- throw unconvertibleResponseTypeMessage('arraybuffer');
434
- case "blob":
435
- throw unconvertibleResponseTypeMessage('blob');
436
- case "document":
437
- return this.responseXML;
438
- }
439
- },
440
-
441
-
442
- respondWith: function(response) {
443
- if (this.readyState === FakeXMLHttpRequest.DONE) {
444
- throw new Error("FakeXMLHttpRequest already completed");
445
- }
446
-
447
- this.status = response.status;
448
- this.statusText = response.statusText || "";
449
- this.responseHeaders = normalizeHeaders(response.responseHeaders, response.contentType);
450
- this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED;
451
- this.eventBus.trigger('readystatechange');
452
-
453
- this.responseText = response.responseText || "";
454
- this.responseType = response.responseType || "";
455
- this.responseURL = response.responseURL || null;
456
- this.readyState = FakeXMLHttpRequest.DONE;
457
- this.responseXML = getResponseXml(response.responseText, this.getResponseHeader('content-type') || '');
458
- if (this.responseXML) {
459
- this.responseType = 'document';
460
- }
461
-
462
- if ('response' in response) {
463
- this.response = response.response;
464
- } else {
465
- this.response = this.responseValue();
466
- }
467
-
468
- this.eventBus.trigger('readystatechange');
469
- this.eventBus.trigger('progress');
470
- this.eventBus.trigger('load');
471
- this.eventBus.trigger('loadend');
472
- },
473
-
474
- responseTimeout: function() {
475
- if (this.readyState === FakeXMLHttpRequest.DONE) {
476
- throw new Error("FakeXMLHttpRequest already completed");
477
- }
478
- this.readyState = FakeXMLHttpRequest.DONE;
479
- jasmine.clock().tick(30000);
480
- this.eventBus.trigger('readystatechange');
481
- this.eventBus.trigger('progress');
482
- this.eventBus.trigger('timeout');
483
- this.eventBus.trigger('loadend');
484
- },
485
-
486
- responseError: function() {
487
- if (this.readyState === FakeXMLHttpRequest.DONE) {
488
- throw new Error("FakeXMLHttpRequest already completed");
489
- }
490
- this.readyState = FakeXMLHttpRequest.DONE;
491
- this.eventBus.trigger('readystatechange');
492
- this.eventBus.trigger('progress');
493
- this.eventBus.trigger('error');
494
- this.eventBus.trigger('loadend');
495
- },
496
-
497
- responseCallFunction: function(stub) {
498
- stub.action = undefined;
499
- stub.functionToCall(stub, this);
500
- this.dispatchStub(stub);
501
- }
502
- });
503
-
504
- return FakeXMLHttpRequest;
505
- }
506
-
507
- return fakeRequest;
508
- };
509
-
510
- getJasmineRequireObj().MockAjax = function($ajax) {
511
- function MockAjax(global) {
512
- var requestTracker = new $ajax.RequestTracker(),
513
- stubTracker = new $ajax.StubTracker(),
514
- paramParser = new $ajax.ParamParser(),
515
- realAjaxFunction = global.XMLHttpRequest,
516
- mockAjaxFunction = $ajax.fakeRequest(global, requestTracker, stubTracker, paramParser);
517
-
518
- this.install = function() {
519
- if (global.XMLHttpRequest === mockAjaxFunction) {
520
- throw "MockAjax is already installed.";
521
- }
522
-
523
- global.XMLHttpRequest = mockAjaxFunction;
524
- };
525
-
526
- this.uninstall = function() {
527
- if (global.XMLHttpRequest !== mockAjaxFunction) {
528
- throw "MockAjax not installed.";
529
- }
530
- global.XMLHttpRequest = realAjaxFunction;
531
-
532
- this.stubs.reset();
533
- this.requests.reset();
534
- paramParser.reset();
535
- };
536
-
537
- this.stubRequest = function(url, data, method) {
538
- var stub = new $ajax.RequestStub(url, data, method);
539
- stubTracker.addStub(stub);
540
- return stub;
541
- };
542
-
543
- this.withMock = function(closure) {
544
- this.install();
545
- try {
546
- closure();
547
- } finally {
548
- this.uninstall();
549
- }
550
- };
551
-
552
- this.addCustomParamParser = function(parser) {
553
- paramParser.add(parser);
554
- };
555
-
556
- this.requests = requestTracker;
557
- this.stubs = stubTracker;
558
- }
559
-
560
- return MockAjax;
561
- };
562
-
563
- getJasmineRequireObj().AjaxParamParser = function() {
564
- function ParamParser() {
565
- var defaults = [
566
- {
567
- test: function(xhr) {
568
- return (/^application\/json/).test(xhr.contentType());
569
- },
570
- parse: function jsonParser(paramString) {
571
- return JSON.parse(paramString);
572
- }
573
- },
574
- {
575
- test: function(xhr) {
576
- return true;
577
- },
578
- parse: function naiveParser(paramString) {
579
- var data = {};
580
- var params = paramString.split('&');
581
-
582
- for (var i = 0; i < params.length; ++i) {
583
- var kv = params[i].replace(/\+/g, ' ').split('=');
584
- var key = decodeURIComponent(kv[0]);
585
- data[key] = data[key] || [];
586
- data[key].push(decodeURIComponent(kv[1]));
587
- }
588
- return data;
589
- }
590
- }
591
- ];
592
- var paramParsers = [];
593
-
594
- this.add = function(parser) {
595
- paramParsers.unshift(parser);
596
- };
597
-
598
- this.findParser = function(xhr) {
599
- for(var i in paramParsers) {
600
- var parser = paramParsers[i];
601
- if (parser.test(xhr)) {
602
- return parser;
603
- }
604
- }
605
- };
606
-
607
- this.reset = function() {
608
- paramParsers = [];
609
- for(var i in defaults) {
610
- paramParsers.push(defaults[i]);
611
- }
612
- };
613
-
614
- this.reset();
615
- }
616
-
617
- return ParamParser;
618
- };
619
-
620
- getJasmineRequireObj().AjaxRequestStub = function() {
621
- var RETURN = 0,
622
- ERROR = 1,
623
- TIMEOUT = 2,
624
- CALL = 3;
625
-
626
- function RequestStub(url, stubData, method) {
627
- var normalizeQuery = function(query) {
628
- return query ? query.split('&').sort().join('&') : undefined;
629
- };
630
-
631
- if (url instanceof RegExp) {
632
- this.url = url;
633
- this.query = undefined;
634
- } else {
635
- var split = url.split('?');
636
- this.url = split[0];
637
- this.query = split.length > 1 ? normalizeQuery(split[1]) : undefined;
638
- }
639
-
640
- this.data = (stubData instanceof RegExp) ? stubData : normalizeQuery(stubData);
641
- this.method = method;
642
-
643
- this.andReturn = function(options) {
644
- this.action = RETURN;
645
- this.status = options.status || 200;
646
-
647
- this.contentType = options.contentType;
648
- this.response = options.response;
649
- this.responseText = options.responseText;
650
- this.responseHeaders = options.responseHeaders;
651
- this.responseURL = options.responseURL;
652
- };
653
-
654
- this.isReturn = function() {
655
- return this.action === RETURN;
656
- };
657
-
658
- this.andError = function() {
659
- this.action = ERROR;
660
- };
661
-
662
- this.isError = function() {
663
- return this.action === ERROR;
664
- };
665
-
666
- this.andTimeout = function() {
667
- this.action = TIMEOUT;
668
- };
669
-
670
- this.isTimeout = function() {
671
- return this.action === TIMEOUT;
672
- };
673
-
674
- this.andCallFunction = function(functionToCall) {
675
- this.action = CALL;
676
- this.functionToCall = functionToCall;
677
- };
678
-
679
- this.isCallFunction = function() {
680
- return this.action === CALL;
681
- };
682
-
683
- this.matches = function(fullUrl, data, method) {
684
- var urlMatches = false;
685
- fullUrl = fullUrl.toString();
686
- if (this.url instanceof RegExp) {
687
- urlMatches = this.url.test(fullUrl);
688
- } else {
689
- var urlSplit = fullUrl.split('?'),
690
- url = urlSplit[0],
691
- query = urlSplit[1];
692
- urlMatches = this.url === url && this.query === normalizeQuery(query);
693
- }
694
- var dataMatches = false;
695
- if (this.data instanceof RegExp) {
696
- dataMatches = this.data.test(data);
697
- } else {
698
- dataMatches = !this.data || this.data === normalizeQuery(data);
699
- }
700
- return urlMatches && dataMatches && (!this.method || this.method === method);
701
- };
702
- }
703
-
704
- return RequestStub;
705
- };
706
-
707
- getJasmineRequireObj().AjaxRequestTracker = function() {
708
- function RequestTracker() {
709
- var requests = [];
710
-
711
- this.track = function(request) {
712
- requests.push(request);
713
- };
714
-
715
- this.first = function() {
716
- return requests[0];
717
- };
718
-
719
- this.count = function() {
720
- return requests.length;
721
- };
722
-
723
- this.reset = function() {
724
- requests = [];
725
- };
726
-
727
- this.mostRecent = function() {
728
- return requests[requests.length - 1];
729
- };
730
-
731
- this.at = function(index) {
732
- return requests[index];
733
- };
734
-
735
- this.filter = function(url_to_match) {
736
- var matching_requests = [];
737
-
738
- for (var i = 0; i < requests.length; i++) {
739
- if (url_to_match instanceof RegExp &&
740
- url_to_match.test(requests[i].url)) {
741
- matching_requests.push(requests[i]);
742
- } else if (url_to_match instanceof Function &&
743
- url_to_match(requests[i])) {
744
- matching_requests.push(requests[i]);
745
- } else {
746
- if (requests[i].url === url_to_match) {
747
- matching_requests.push(requests[i]);
748
- }
749
- }
750
- }
751
-
752
- return matching_requests;
753
- };
754
- }
755
-
756
- return RequestTracker;
757
- };
758
-
759
- getJasmineRequireObj().AjaxStubTracker = function() {
760
- function StubTracker() {
761
- var stubs = [];
762
-
763
- this.addStub = function(stub) {
764
- stubs.push(stub);
765
- };
766
-
767
- this.reset = function() {
768
- stubs = [];
769
- };
770
-
771
- this.findStub = function(url, data, method) {
772
- for (var i = stubs.length - 1; i >= 0; i--) {
773
- var stub = stubs[i];
774
- if (stub.matches(url, data, method)) {
775
- return stub;
776
- }
777
- }
778
- };
779
- }
780
-
781
- return StubTracker;
782
- };
783
-
784
-
785
- var jRequire = getJasmineRequireObj();
786
- var MockAjax = jRequire.ajax(jRequire);
787
- jasmine.Ajax = new MockAjax(global);
788
-
789
- return MockAjax;
790
- }));