unpoly-rails 0.20.0

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 (339) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.ruby-version +2 -0
  4. data/.yardopts +1 -0
  5. data/CHANGELOG.md +577 -0
  6. data/Gemfile +8 -0
  7. data/Gemfile.lock +42 -0
  8. data/LICENSE +22 -0
  9. data/README.md +75 -0
  10. data/README_RAILS.md +116 -0
  11. data/Rakefile +45 -0
  12. data/bower.json +26 -0
  13. data/design/animation-ghosting.txt +72 -0
  14. data/design/design.txt +34 -0
  15. data/design/draft.html.erb +48 -0
  16. data/design/draft.rb +9 -0
  17. data/design/ghost-debugging.txt +118 -0
  18. data/design/homepage.txt +236 -0
  19. data/design/rename.txt +0 -0
  20. data/dist/unpoly-bootstrap3.css +5 -0
  21. data/dist/unpoly-bootstrap3.js +28 -0
  22. data/dist/unpoly-bootstrap3.min.css +1 -0
  23. data/dist/unpoly-bootstrap3.min.js +1 -0
  24. data/dist/unpoly.css +98 -0
  25. data/dist/unpoly.js +9041 -0
  26. data/dist/unpoly.min.css +1 -0
  27. data/dist/unpoly.min.js +3 -0
  28. data/lib/assets/javascripts/unpoly-bootstrap3.js.coffee +2 -0
  29. data/lib/assets/javascripts/unpoly-bootstrap3/form-ext.js.coffee +1 -0
  30. data/lib/assets/javascripts/unpoly-bootstrap3/layout-ext.js.coffee +5 -0
  31. data/lib/assets/javascripts/unpoly-bootstrap3/modal-ext.js.coffee +11 -0
  32. data/lib/assets/javascripts/unpoly-bootstrap3/navigation-ext.js.coffee +3 -0
  33. data/lib/assets/javascripts/unpoly.js.coffee +20 -0
  34. data/lib/assets/javascripts/unpoly/browser.js.coffee +252 -0
  35. data/lib/assets/javascripts/unpoly/bus.js.coffee +393 -0
  36. data/lib/assets/javascripts/unpoly/flow.js.coffee +809 -0
  37. data/lib/assets/javascripts/unpoly/form.js.coffee +864 -0
  38. data/lib/assets/javascripts/unpoly/history.js.coffee +204 -0
  39. data/lib/assets/javascripts/unpoly/layout.js.coffee +529 -0
  40. data/lib/assets/javascripts/unpoly/link.js.coffee +496 -0
  41. data/lib/assets/javascripts/unpoly/log.js.coffee +73 -0
  42. data/lib/assets/javascripts/unpoly/modal.js.coffee +509 -0
  43. data/lib/assets/javascripts/unpoly/module.js.coffee +4 -0
  44. data/lib/assets/javascripts/unpoly/motion.js.coffee +690 -0
  45. data/lib/assets/javascripts/unpoly/navigation.js.coffee +219 -0
  46. data/lib/assets/javascripts/unpoly/popup.js.coffee +409 -0
  47. data/lib/assets/javascripts/unpoly/proxy.js.coffee +521 -0
  48. data/lib/assets/javascripts/unpoly/rails.js.coffee +36 -0
  49. data/lib/assets/javascripts/unpoly/syntax.js.coffee +337 -0
  50. data/lib/assets/javascripts/unpoly/tooltip.js.coffee +183 -0
  51. data/lib/assets/javascripts/unpoly/util.js.coffee +1593 -0
  52. data/lib/assets/stylesheets/unpoly-bootstrap3.css.sass +1 -0
  53. data/lib/assets/stylesheets/unpoly-bootstrap3/modal-ext.css.sass +9 -0
  54. data/lib/assets/stylesheets/unpoly.css.sass +1 -0
  55. data/lib/assets/stylesheets/unpoly/close.css.sass +2 -0
  56. data/lib/assets/stylesheets/unpoly/error.css.sass +15 -0
  57. data/lib/assets/stylesheets/unpoly/link.css.sass +2 -0
  58. data/lib/assets/stylesheets/unpoly/modal.css.sass +69 -0
  59. data/lib/assets/stylesheets/unpoly/popup.css.sass +8 -0
  60. data/lib/assets/stylesheets/unpoly/tooltip.css.sass +42 -0
  61. data/lib/unpoly-rails.rb +7 -0
  62. data/lib/unpoly/rails/engine.rb +6 -0
  63. data/lib/unpoly/rails/inspector.rb +78 -0
  64. data/lib/unpoly/rails/inspector_accessor.rb +30 -0
  65. data/lib/unpoly/rails/request_echo_headers.rb +27 -0
  66. data/lib/unpoly/rails/request_method_cookie.rb +36 -0
  67. data/lib/unpoly/rails/version.rb +9 -0
  68. data/spec_app/.firefox-version +1 -0
  69. data/spec_app/.gitignore +17 -0
  70. data/spec_app/.rspec +2 -0
  71. data/spec_app/Bowerfile +3 -0
  72. data/spec_app/Gemfile +29 -0
  73. data/spec_app/Gemfile.lock +212 -0
  74. data/spec_app/README.rdoc +28 -0
  75. data/spec_app/Rakefile +6 -0
  76. data/spec_app/app/assets/images/.keep +0 -0
  77. data/spec_app/app/assets/javascripts/application.js +20 -0
  78. data/spec_app/app/assets/stylesheets/application.css +17 -0
  79. data/spec_app/app/assets/stylesheets/blocks/card.css.sass +11 -0
  80. data/spec_app/app/assets/stylesheets/blocks/controls.css.sass +7 -0
  81. data/spec_app/app/assets/stylesheets/blocks/menu.css.sass +13 -0
  82. data/spec_app/app/assets/stylesheets/blocks/panel.css.sass +8 -0
  83. data/spec_app/app/assets/stylesheets/jasmine_specs.css +5 -0
  84. data/spec_app/app/controllers/application_controller.rb +6 -0
  85. data/spec_app/app/controllers/concerns/.keep +0 -0
  86. data/spec_app/app/controllers/test_controller.rb +28 -0
  87. data/spec_app/app/helpers/application_helper.rb +2 -0
  88. data/spec_app/app/mailers/.keep +0 -0
  89. data/spec_app/app/models/concerns/.keep +0 -0
  90. data/spec_app/app/views/layouts/application.html.erb +12 -0
  91. data/spec_app/bin/bundle +3 -0
  92. data/spec_app/bin/rails +8 -0
  93. data/spec_app/bin/rake +8 -0
  94. data/spec_app/bin/setup +29 -0
  95. data/spec_app/bin/spring +18 -0
  96. data/spec_app/config.ru +4 -0
  97. data/spec_app/config/application.rb +26 -0
  98. data/spec_app/config/boot.rb +3 -0
  99. data/spec_app/config/database.yml +25 -0
  100. data/spec_app/config/environment.rb +5 -0
  101. data/spec_app/config/environments/development.rb +41 -0
  102. data/spec_app/config/environments/production.rb +79 -0
  103. data/spec_app/config/environments/test.rb +42 -0
  104. data/spec_app/config/initializers/assets.rb +11 -0
  105. data/spec_app/config/initializers/backtrace_silencers.rb +7 -0
  106. data/spec_app/config/initializers/bower_rails.rb +16 -0
  107. data/spec_app/config/initializers/cookies_serializer.rb +3 -0
  108. data/spec_app/config/initializers/filter_parameter_logging.rb +4 -0
  109. data/spec_app/config/initializers/inflections.rb +16 -0
  110. data/spec_app/config/initializers/mime_types.rb +4 -0
  111. data/spec_app/config/initializers/session_store.rb +3 -0
  112. data/spec_app/config/initializers/wrap_parameters.rb +14 -0
  113. data/spec_app/config/locales/en.yml +23 -0
  114. data/spec_app/config/routes.rb +8 -0
  115. data/spec_app/config/secrets.yml +22 -0
  116. data/spec_app/db/schema.rb +23 -0
  117. data/spec_app/db/seeds.rb +7 -0
  118. data/spec_app/lib/assets/.keep +0 -0
  119. data/spec_app/lib/tasks/.keep +0 -0
  120. data/spec_app/lib/tasks/cucumber.rake +65 -0
  121. data/spec_app/log/.keep +0 -0
  122. data/spec_app/public/404.html +67 -0
  123. data/spec_app/public/422.html +67 -0
  124. data/spec_app/public/500.html +66 -0
  125. data/spec_app/public/favicon.ico +0 -0
  126. data/spec_app/public/robots.txt +5 -0
  127. data/spec_app/script/cucumber +10 -0
  128. data/spec_app/spec/controllers/test_controller_spec.rb +76 -0
  129. data/spec_app/spec/javascripts/helpers/append_fixture.js.coffee +8 -0
  130. data/spec_app/spec/javascripts/helpers/browser_switches.js.coffee +9 -0
  131. data/spec_app/spec/javascripts/helpers/index.js.coffee +1 -0
  132. data/spec_app/spec/javascripts/helpers/knife.js.coffee +69 -0
  133. data/spec_app/spec/javascripts/helpers/last_request.js.coffee +22 -0
  134. data/spec_app/spec/javascripts/helpers/mock_ajax.js.coffee +5 -0
  135. data/spec_app/spec/javascripts/helpers/mock_clock.js.coffee +2 -0
  136. data/spec_app/spec/javascripts/helpers/remove_body_margin.js.coffee +5 -0
  137. data/spec_app/spec/javascripts/helpers/reset_knife.js.coffee +2 -0
  138. data/spec_app/spec/javascripts/helpers/reset_path.js.coffee +8 -0
  139. data/spec_app/spec/javascripts/helpers/reset_up.js.coffee +4 -0
  140. data/spec_app/spec/javascripts/helpers/restore_body_scroll.js.coffee +2 -0
  141. data/spec_app/spec/javascripts/helpers/set_timer.js.coffee +3 -0
  142. data/spec_app/spec/javascripts/helpers/to_be_around.js.coffee +5 -0
  143. data/spec_app/spec/javascripts/helpers/to_be_blank.js.coffee +5 -0
  144. data/spec_app/spec/javascripts/helpers/to_be_given.js.coffee +5 -0
  145. data/spec_app/spec/javascripts/helpers/to_be_missing.js.coffee +5 -0
  146. data/spec_app/spec/javascripts/helpers/to_be_present.js.coffee +5 -0
  147. data/spec_app/spec/javascripts/helpers/to_end_with.js.coffee +8 -0
  148. data/spec_app/spec/javascripts/helpers/to_equal_jquery.js.coffee +9 -0
  149. data/spec_app/spec/javascripts/helpers/to_have_request_method.js.coffee +8 -0
  150. data/spec_app/spec/javascripts/helpers/trigger.js.coffee +68 -0
  151. data/spec_app/spec/javascripts/support/jasmine.yml +51 -0
  152. data/spec_app/spec/javascripts/up/bus_spec.js.coffee +122 -0
  153. data/spec_app/spec/javascripts/up/flow_spec.js.coffee +755 -0
  154. data/spec_app/spec/javascripts/up/form_spec.js.coffee +471 -0
  155. data/spec_app/spec/javascripts/up/history_spec.js.coffee +96 -0
  156. data/spec_app/spec/javascripts/up/layout_spec.js.coffee +318 -0
  157. data/spec_app/spec/javascripts/up/link_spec.js.coffee +340 -0
  158. data/spec_app/spec/javascripts/up/modal_spec.js.coffee +265 -0
  159. data/spec_app/spec/javascripts/up/motion_spec.js.coffee +306 -0
  160. data/spec_app/spec/javascripts/up/navigation_spec.js.coffee +132 -0
  161. data/spec_app/spec/javascripts/up/popup_spec.js.coffee +220 -0
  162. data/spec_app/spec/javascripts/up/proxy_spec.js.coffee +371 -0
  163. data/spec_app/spec/javascripts/up/rails_spec.js.coffee +101 -0
  164. data/spec_app/spec/javascripts/up/syntax_spec.js.coffee +99 -0
  165. data/spec_app/spec/javascripts/up/tooltip_spec.js.coffee +60 -0
  166. data/spec_app/spec/javascripts/up/util_spec.js.coffee +325 -0
  167. data/spec_app/spec/spec_helper.rb +62 -0
  168. data/spec_app/test/controllers/.keep +0 -0
  169. data/spec_app/test/fixtures/.keep +0 -0
  170. data/spec_app/test/helpers/.keep +0 -0
  171. data/spec_app/test/integration/.keep +0 -0
  172. data/spec_app/test/mailers/.keep +0 -0
  173. data/spec_app/test/models/.keep +0 -0
  174. data/spec_app/test/test_helper.rb +10 -0
  175. data/spec_app/vendor/assets/.bowerrc +3 -0
  176. data/spec_app/vendor/assets/bower.json +8 -0
  177. data/spec_app/vendor/assets/bower_components/jasmine-ajax/.bower.json +43 -0
  178. data/spec_app/vendor/assets/bower_components/jasmine-ajax/MIT.LICENSE +20 -0
  179. data/spec_app/vendor/assets/bower_components/jasmine-ajax/README.markdown +289 -0
  180. data/spec_app/vendor/assets/bower_components/jasmine-ajax/bower.json +35 -0
  181. data/spec_app/vendor/assets/bower_components/jasmine-ajax/lib/mock-ajax.js +733 -0
  182. data/spec_app/vendor/assets/bower_components/jasmine-ajax/package.json +26 -0
  183. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/2.0.2.md +50 -0
  184. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/2.99.md +14 -0
  185. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/3.0.md +28 -0
  186. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/3.1.0.md +24 -0
  187. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/3.1.1.md +23 -0
  188. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/3.2.0.md +20 -0
  189. data/spec_app/vendor/assets/bower_components/jasmine-fixture/.bower.json +27 -0
  190. data/spec_app/vendor/assets/bower_components/jasmine-fixture/.gitignore +8 -0
  191. data/spec_app/vendor/assets/bower_components/jasmine-fixture/.npmignore +8 -0
  192. data/spec_app/vendor/assets/bower_components/jasmine-fixture/LICENSE.txt +24 -0
  193. data/spec_app/vendor/assets/bower_components/jasmine-fixture/README.md +118 -0
  194. data/spec_app/vendor/assets/bower_components/jasmine-fixture/bower.json +17 -0
  195. data/spec_app/vendor/assets/bower_components/jasmine-fixture/dist/jasmine-fixture.js +433 -0
  196. data/spec_app/vendor/assets/bower_components/jasmine-fixture/dist/jasmine-fixture.min.js +5 -0
  197. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/basic-usage-spec.coffee +14 -0
  198. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/helpers/invariants.coffee +17 -0
  199. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/helpers/spec-within-a-spec.coffee +24 -0
  200. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/helpers/tmp-files.coffee +8 -0
  201. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/support/jasmine1-testem-config.json +11 -0
  202. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/support/jasmine2-testem-config.json +11 -0
  203. data/spec_app/vendor/assets/bower_components/jasmine-fixture/vendor/js/jquery-1.11.0.js +10337 -0
  204. data/spec_app/vendor/assets/bower_components/jasmine-fixture/vendor/js/jquery-1.8.3.js +9472 -0
  205. data/spec_app/vendor/assets/bower_components/jasmine-fixture/vendor/js/jquery-2.1.0.js +9111 -0
  206. data/spec_app/vendor/assets/bower_components/jasmine-jquery/.bower.json +26 -0
  207. data/spec_app/vendor/assets/bower_components/jasmine-jquery/CONTRIBUTING.md +28 -0
  208. data/spec_app/vendor/assets/bower_components/jasmine-jquery/Gruntfile.js +49 -0
  209. data/spec_app/vendor/assets/bower_components/jasmine-jquery/LICENSE +20 -0
  210. data/spec_app/vendor/assets/bower_components/jasmine-jquery/README.md +367 -0
  211. data/spec_app/vendor/assets/bower_components/jasmine-jquery/bower.json +15 -0
  212. data/spec_app/vendor/assets/bower_components/jasmine-jquery/lib/jasmine-jquery.js +838 -0
  213. data/spec_app/vendor/assets/bower_components/jasmine-jquery/package.json +35 -0
  214. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/fixture_with_checkbox_with_checked.html +6 -0
  215. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/fixture_with_javascript.html +1 -0
  216. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/fixture_with_javascript_block.html +1 -0
  217. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/javascripts/jasmine_javascript_click.js +1 -0
  218. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/javascripts/jasmine_javascript_hover.js +1 -0
  219. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/json/jasmine_json_test.json +1 -0
  220. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/real_non_mocked_fixture.html +1 -0
  221. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/real_non_mocked_fixture_style.css +1 -0
  222. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/suites/jasmine-jquery-spec.js +1842 -0
  223. data/spec_app/vendor/assets/bower_components/jasmine/.bower.json +50 -0
  224. data/spec_app/vendor/assets/bower_components/jasmine/CONTRIBUTING.md +130 -0
  225. data/spec_app/vendor/assets/bower_components/jasmine/GOALS_2.0.md +64 -0
  226. data/spec_app/vendor/assets/bower_components/jasmine/MANIFEST.in +5 -0
  227. data/spec_app/vendor/assets/bower_components/jasmine/MIT.LICENSE +20 -0
  228. data/spec_app/vendor/assets/bower_components/jasmine/README.md +73 -0
  229. data/spec_app/vendor/assets/bower_components/jasmine/RELEASE.md +73 -0
  230. data/spec_app/vendor/assets/bower_components/jasmine/bower.json +41 -0
  231. data/spec_app/vendor/assets/bower_components/jasmine/images/jasmine-horizontal.png +0 -0
  232. data/spec_app/vendor/assets/bower_components/jasmine/images/jasmine-horizontal.svg +102 -0
  233. data/spec_app/vendor/assets/bower_components/jasmine/images/jasmine_favicon.png +0 -0
  234. data/spec_app/vendor/assets/bower_components/jasmine/lib/console/console.js +190 -0
  235. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core.js +37 -0
  236. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/boot.js +143 -0
  237. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/example/node_example/lib/jasmine_examples/Player.js +24 -0
  238. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/example/node_example/lib/jasmine_examples/Song.js +9 -0
  239. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/jasmine-html.js +446 -0
  240. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/jasmine.css +58 -0
  241. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/jasmine.js +3298 -0
  242. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/json2.js +489 -0
  243. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/node_boot.js +41 -0
  244. data/spec_app/vendor/assets/bower_components/jasmine/package.json +34 -0
  245. data/spec_app/vendor/assets/bower_components/jasmine/requirements.txt +1 -0
  246. data/spec_app/vendor/assets/bower_components/jquery/.bower.json +38 -0
  247. data/spec_app/vendor/assets/bower_components/jquery/MIT-LICENSE.txt +21 -0
  248. data/spec_app/vendor/assets/bower_components/jquery/bower.json +28 -0
  249. data/spec_app/vendor/assets/bower_components/jquery/dist/jquery.js +9210 -0
  250. data/spec_app/vendor/assets/bower_components/jquery/dist/jquery.min.js +5 -0
  251. data/spec_app/vendor/assets/bower_components/jquery/dist/jquery.min.map +1 -0
  252. data/spec_app/vendor/assets/bower_components/jquery/src/ajax.js +786 -0
  253. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/jsonp.js +89 -0
  254. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/load.js +75 -0
  255. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/parseJSON.js +13 -0
  256. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/parseXML.js +28 -0
  257. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/script.js +64 -0
  258. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/var/nonce.js +5 -0
  259. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/var/rquery.js +3 -0
  260. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/xhr.js +136 -0
  261. data/spec_app/vendor/assets/bower_components/jquery/src/attributes.js +11 -0
  262. data/spec_app/vendor/assets/bower_components/jquery/src/attributes/attr.js +141 -0
  263. data/spec_app/vendor/assets/bower_components/jquery/src/attributes/classes.js +158 -0
  264. data/spec_app/vendor/assets/bower_components/jquery/src/attributes/prop.js +94 -0
  265. data/spec_app/vendor/assets/bower_components/jquery/src/attributes/support.js +35 -0
  266. data/spec_app/vendor/assets/bower_components/jquery/src/attributes/val.js +161 -0
  267. data/spec_app/vendor/assets/bower_components/jquery/src/callbacks.js +205 -0
  268. data/spec_app/vendor/assets/bower_components/jquery/src/core.js +502 -0
  269. data/spec_app/vendor/assets/bower_components/jquery/src/core/access.js +60 -0
  270. data/spec_app/vendor/assets/bower_components/jquery/src/core/init.js +123 -0
  271. data/spec_app/vendor/assets/bower_components/jquery/src/core/parseHTML.js +39 -0
  272. data/spec_app/vendor/assets/bower_components/jquery/src/core/ready.js +97 -0
  273. data/spec_app/vendor/assets/bower_components/jquery/src/core/var/rsingleTag.js +4 -0
  274. data/spec_app/vendor/assets/bower_components/jquery/src/css.js +450 -0
  275. data/spec_app/vendor/assets/bower_components/jquery/src/css/addGetHookIf.js +22 -0
  276. data/spec_app/vendor/assets/bower_components/jquery/src/css/curCSS.js +57 -0
  277. data/spec_app/vendor/assets/bower_components/jquery/src/css/defaultDisplay.js +70 -0
  278. data/spec_app/vendor/assets/bower_components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  279. data/spec_app/vendor/assets/bower_components/jquery/src/css/support.js +96 -0
  280. data/spec_app/vendor/assets/bower_components/jquery/src/css/swap.js +28 -0
  281. data/spec_app/vendor/assets/bower_components/jquery/src/css/var/cssExpand.js +3 -0
  282. data/spec_app/vendor/assets/bower_components/jquery/src/css/var/getStyles.js +12 -0
  283. data/spec_app/vendor/assets/bower_components/jquery/src/css/var/isHidden.js +13 -0
  284. data/spec_app/vendor/assets/bower_components/jquery/src/css/var/rmargin.js +3 -0
  285. data/spec_app/vendor/assets/bower_components/jquery/src/css/var/rnumnonpx.js +5 -0
  286. data/spec_app/vendor/assets/bower_components/jquery/src/data.js +178 -0
  287. data/spec_app/vendor/assets/bower_components/jquery/src/data/Data.js +181 -0
  288. data/spec_app/vendor/assets/bower_components/jquery/src/data/accepts.js +20 -0
  289. data/spec_app/vendor/assets/bower_components/jquery/src/data/var/data_priv.js +5 -0
  290. data/spec_app/vendor/assets/bower_components/jquery/src/data/var/data_user.js +5 -0
  291. data/spec_app/vendor/assets/bower_components/jquery/src/deferred.js +149 -0
  292. data/spec_app/vendor/assets/bower_components/jquery/src/deprecated.js +13 -0
  293. data/spec_app/vendor/assets/bower_components/jquery/src/dimensions.js +50 -0
  294. data/spec_app/vendor/assets/bower_components/jquery/src/effects.js +648 -0
  295. data/spec_app/vendor/assets/bower_components/jquery/src/effects/Tween.js +114 -0
  296. data/spec_app/vendor/assets/bower_components/jquery/src/effects/animatedSelector.js +13 -0
  297. data/spec_app/vendor/assets/bower_components/jquery/src/event.js +868 -0
  298. data/spec_app/vendor/assets/bower_components/jquery/src/event/ajax.js +13 -0
  299. data/spec_app/vendor/assets/bower_components/jquery/src/event/alias.js +39 -0
  300. data/spec_app/vendor/assets/bower_components/jquery/src/event/support.js +9 -0
  301. data/spec_app/vendor/assets/bower_components/jquery/src/exports/amd.js +24 -0
  302. data/spec_app/vendor/assets/bower_components/jquery/src/exports/global.js +32 -0
  303. data/spec_app/vendor/assets/bower_components/jquery/src/intro.js +44 -0
  304. data/spec_app/vendor/assets/bower_components/jquery/src/jquery.js +37 -0
  305. data/spec_app/vendor/assets/bower_components/jquery/src/manipulation.js +580 -0
  306. data/spec_app/vendor/assets/bower_components/jquery/src/manipulation/_evalUrl.js +18 -0
  307. data/spec_app/vendor/assets/bower_components/jquery/src/manipulation/support.js +32 -0
  308. data/spec_app/vendor/assets/bower_components/jquery/src/manipulation/var/rcheckableType.js +3 -0
  309. data/spec_app/vendor/assets/bower_components/jquery/src/offset.js +207 -0
  310. data/spec_app/vendor/assets/bower_components/jquery/src/outro.js +1 -0
  311. data/spec_app/vendor/assets/bower_components/jquery/src/queue.js +142 -0
  312. data/spec_app/vendor/assets/bower_components/jquery/src/queue/delay.js +22 -0
  313. data/spec_app/vendor/assets/bower_components/jquery/src/selector-native.js +172 -0
  314. data/spec_app/vendor/assets/bower_components/jquery/src/selector-sizzle.js +14 -0
  315. data/spec_app/vendor/assets/bower_components/jquery/src/selector.js +1 -0
  316. data/spec_app/vendor/assets/bower_components/jquery/src/serialize.js +111 -0
  317. data/spec_app/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.js +2067 -0
  318. data/spec_app/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  319. data/spec_app/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  320. data/spec_app/vendor/assets/bower_components/jquery/src/traversing.js +199 -0
  321. data/spec_app/vendor/assets/bower_components/jquery/src/traversing/findFilter.js +100 -0
  322. data/spec_app/vendor/assets/bower_components/jquery/src/traversing/var/rneedsContext.js +6 -0
  323. data/spec_app/vendor/assets/bower_components/jquery/src/var/arr.js +3 -0
  324. data/spec_app/vendor/assets/bower_components/jquery/src/var/class2type.js +4 -0
  325. data/spec_app/vendor/assets/bower_components/jquery/src/var/concat.js +5 -0
  326. data/spec_app/vendor/assets/bower_components/jquery/src/var/hasOwn.js +5 -0
  327. data/spec_app/vendor/assets/bower_components/jquery/src/var/indexOf.js +5 -0
  328. data/spec_app/vendor/assets/bower_components/jquery/src/var/pnum.js +3 -0
  329. data/spec_app/vendor/assets/bower_components/jquery/src/var/push.js +5 -0
  330. data/spec_app/vendor/assets/bower_components/jquery/src/var/rnotwhite.js +3 -0
  331. data/spec_app/vendor/assets/bower_components/jquery/src/var/slice.js +5 -0
  332. data/spec_app/vendor/assets/bower_components/jquery/src/var/strundefined.js +3 -0
  333. data/spec_app/vendor/assets/bower_components/jquery/src/var/support.js +4 -0
  334. data/spec_app/vendor/assets/bower_components/jquery/src/var/toString.js +5 -0
  335. data/spec_app/vendor/assets/bower_components/jquery/src/wrap.js +79 -0
  336. data/spec_app/vendor/assets/javascripts/.keep +0 -0
  337. data/spec_app/vendor/assets/stylesheets/.keep +0 -0
  338. data/unpoly-rails.gemspec +24 -0
  339. metadata +423 -0
@@ -0,0 +1,35 @@
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
+
8
+ "homepage": "https://github.com/jasmine/jasmine-ajax",
9
+ "authors": [
10
+ "JR Boyens <jboyens@fooninja.org>",
11
+ "Gregg Van Hove <gregg@slackersoft.net>"
12
+ ],
13
+ "dependencies": {
14
+ "jasmine" : "~2"
15
+ },
16
+ "moduleType": [
17
+ "globals"
18
+ ],
19
+ "keywords": [
20
+ "jasmine",
21
+ "ajax"
22
+ ],
23
+ "ignore": [
24
+ "**/.*",
25
+ "Gemfile",
26
+ "Gemfile.lock",
27
+ "Gruntfile.js",
28
+ "Rakefile",
29
+ "bower_components",
30
+ "node_modules",
31
+ "spec",
32
+ "src",
33
+ "travis-script.sh"
34
+ ]
35
+ }
@@ -0,0 +1,733 @@
1
+ /*
2
+
3
+ Jasmine-Ajax - v3.1.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
+ getJasmineRequireObj().ajax = function(jRequire) {
34
+ var $ajax = {};
35
+
36
+ $ajax.RequestStub = jRequire.AjaxRequestStub();
37
+ $ajax.RequestTracker = jRequire.AjaxRequestTracker();
38
+ $ajax.StubTracker = jRequire.AjaxStubTracker();
39
+ $ajax.ParamParser = jRequire.AjaxParamParser();
40
+ $ajax.event = jRequire.AjaxEvent();
41
+ $ajax.eventBus = jRequire.AjaxEventBus($ajax.event);
42
+ $ajax.fakeRequest = jRequire.AjaxFakeRequest($ajax.eventBus);
43
+ $ajax.MockAjax = jRequire.MockAjax($ajax);
44
+
45
+ return $ajax.MockAjax;
46
+ };
47
+
48
+ getJasmineRequireObj().AjaxEvent = function() {
49
+ function now() {
50
+ return new Date().getTime();
51
+ }
52
+
53
+ function noop() {
54
+ }
55
+
56
+ // Event object
57
+ // https://dom.spec.whatwg.org/#concept-event
58
+ function XMLHttpRequestEvent(xhr, type) {
59
+ this.type = type;
60
+ this.bubbles = false;
61
+ this.cancelable = false;
62
+ this.timeStamp = now();
63
+
64
+ this.isTrusted = false;
65
+ this.defaultPrevented = false;
66
+
67
+ // Event phase should be "AT_TARGET"
68
+ // https://dom.spec.whatwg.org/#dom-event-at_target
69
+ this.eventPhase = 2;
70
+
71
+ this.target = xhr;
72
+ this.currentTarget = xhr;
73
+ }
74
+
75
+ XMLHttpRequestEvent.prototype.preventDefault = noop;
76
+ XMLHttpRequestEvent.prototype.stopPropagation = noop;
77
+ XMLHttpRequestEvent.prototype.stopImmediatePropagation = noop;
78
+
79
+ function XMLHttpRequestProgressEvent() {
80
+ XMLHttpRequestEvent.apply(this, arguments);
81
+
82
+ this.lengthComputable = false;
83
+ this.loaded = 0;
84
+ this.total = 0;
85
+ }
86
+
87
+ // Extend prototype
88
+ XMLHttpRequestProgressEvent.prototype = XMLHttpRequestEvent.prototype;
89
+
90
+ return {
91
+ event: function(xhr, type) {
92
+ return new XMLHttpRequestEvent(xhr, type);
93
+ },
94
+
95
+ progressEvent: function(xhr, type) {
96
+ return new XMLHttpRequestProgressEvent(xhr, type);
97
+ }
98
+ };
99
+ };
100
+ getJasmineRequireObj().AjaxEventBus = function(eventFactory) {
101
+ function EventBus(source) {
102
+ this.eventList = {};
103
+ this.source = source;
104
+ }
105
+
106
+ function ensureEvent(eventList, name) {
107
+ eventList[name] = eventList[name] || [];
108
+ return eventList[name];
109
+ }
110
+
111
+ function findIndex(list, thing) {
112
+ if (list.indexOf) {
113
+ return list.indexOf(thing);
114
+ }
115
+
116
+ for(var i = 0; i < list.length; i++) {
117
+ if (thing === list[i]) {
118
+ return i;
119
+ }
120
+ }
121
+
122
+ return -1;
123
+ }
124
+
125
+ EventBus.prototype.addEventListener = function(event, callback) {
126
+ ensureEvent(this.eventList, event).push(callback);
127
+ };
128
+
129
+ EventBus.prototype.removeEventListener = function(event, callback) {
130
+ var index = findIndex(this.eventList[event], callback);
131
+
132
+ if (index >= 0) {
133
+ this.eventList[event].splice(index, 1);
134
+ }
135
+ };
136
+
137
+ EventBus.prototype.trigger = function(event) {
138
+ var evt;
139
+
140
+ // Event 'readystatechange' is should be a simple event.
141
+ // Others are progress event.
142
+ // https://xhr.spec.whatwg.org/#events
143
+ if (event === 'readystatechange') {
144
+ evt = eventFactory.event(this.source, event);
145
+ } else {
146
+ evt = eventFactory.progressEvent(this.source, event);
147
+ }
148
+
149
+ var eventListeners = this.eventList[event];
150
+
151
+ if (eventListeners) {
152
+ for (var i = 0; i < eventListeners.length; i++) {
153
+ eventListeners[i].call(this.source, evt);
154
+ }
155
+ }
156
+ };
157
+
158
+ return function(source) {
159
+ return new EventBus(source);
160
+ };
161
+ };
162
+
163
+ getJasmineRequireObj().AjaxFakeRequest = function(eventBusFactory) {
164
+ function extend(destination, source, propertiesToSkip) {
165
+ propertiesToSkip = propertiesToSkip || [];
166
+ for (var property in source) {
167
+ if (!arrayContains(propertiesToSkip, property)) {
168
+ destination[property] = source[property];
169
+ }
170
+ }
171
+ return destination;
172
+ }
173
+
174
+ function arrayContains(arr, item) {
175
+ for (var i = 0; i < arr.length; i++) {
176
+ if (arr[i] === item) {
177
+ return true;
178
+ }
179
+ }
180
+ return false;
181
+ }
182
+
183
+ function wrapProgressEvent(xhr, eventName) {
184
+ return function() {
185
+ if (xhr[eventName]) {
186
+ xhr[eventName].apply(xhr, arguments);
187
+ }
188
+ };
189
+ }
190
+
191
+ function initializeEvents(xhr) {
192
+ xhr.eventBus.addEventListener('readystatechange', wrapProgressEvent(xhr, 'onreadystatechange'));
193
+ xhr.eventBus.addEventListener('loadstart', wrapProgressEvent(xhr, 'onloadstart'));
194
+ xhr.eventBus.addEventListener('load', wrapProgressEvent(xhr, 'onload'));
195
+ xhr.eventBus.addEventListener('loadend', wrapProgressEvent(xhr, 'onloadend'));
196
+ xhr.eventBus.addEventListener('progress', wrapProgressEvent(xhr, 'onprogress'));
197
+ xhr.eventBus.addEventListener('error', wrapProgressEvent(xhr, 'onerror'));
198
+ xhr.eventBus.addEventListener('abort', wrapProgressEvent(xhr, 'onabort'));
199
+ xhr.eventBus.addEventListener('timeout', wrapProgressEvent(xhr, 'ontimeout'));
200
+ }
201
+
202
+ function unconvertibleResponseTypeMessage(type) {
203
+ var msg = [
204
+ "Can't build XHR.response for XHR.responseType of '",
205
+ type,
206
+ "'.",
207
+ "XHR.response must be explicitly stubbed"
208
+ ];
209
+ return msg.join(' ');
210
+ }
211
+
212
+ function fakeRequest(global, requestTracker, stubTracker, paramParser) {
213
+ function FakeXMLHttpRequest() {
214
+ requestTracker.track(this);
215
+ this.eventBus = eventBusFactory(this);
216
+ initializeEvents(this);
217
+ this.requestHeaders = {};
218
+ this.overriddenMimeType = null;
219
+ }
220
+
221
+ function findHeader(name, headers) {
222
+ name = name.toLowerCase();
223
+ for (var header in headers) {
224
+ if (header.toLowerCase() === name) {
225
+ return headers[header];
226
+ }
227
+ }
228
+ }
229
+
230
+ function normalizeHeaders(rawHeaders, contentType) {
231
+ var headers = [];
232
+
233
+ if (rawHeaders) {
234
+ if (rawHeaders instanceof Array) {
235
+ headers = rawHeaders;
236
+ } else {
237
+ for (var headerName in rawHeaders) {
238
+ if (rawHeaders.hasOwnProperty(headerName)) {
239
+ headers.push({ name: headerName, value: rawHeaders[headerName] });
240
+ }
241
+ }
242
+ }
243
+ } else {
244
+ headers.push({ name: "Content-Type", value: contentType || "application/json" });
245
+ }
246
+
247
+ return headers;
248
+ }
249
+
250
+ function parseXml(xmlText, contentType) {
251
+ if (global.DOMParser) {
252
+ return (new global.DOMParser()).parseFromString(xmlText, 'text/xml');
253
+ } else {
254
+ var xml = new global.ActiveXObject("Microsoft.XMLDOM");
255
+ xml.async = "false";
256
+ xml.loadXML(xmlText);
257
+ return xml;
258
+ }
259
+ }
260
+
261
+ var xmlParsables = ['text/xml', 'application/xml'];
262
+
263
+ function getResponseXml(responseText, contentType) {
264
+ if (arrayContains(xmlParsables, contentType.toLowerCase())) {
265
+ return parseXml(responseText, contentType);
266
+ } else if (contentType.match(/\+xml$/)) {
267
+ return parseXml(responseText, 'text/xml');
268
+ }
269
+ return null;
270
+ }
271
+
272
+ var iePropertiesThatCannotBeCopied = ['responseBody', 'responseText', 'responseXML', 'status', 'statusText', 'responseTimeout'];
273
+ extend(FakeXMLHttpRequest.prototype, new global.XMLHttpRequest(), iePropertiesThatCannotBeCopied);
274
+ extend(FakeXMLHttpRequest.prototype, {
275
+ open: function() {
276
+ this.method = arguments[0];
277
+ this.url = arguments[1];
278
+ this.username = arguments[3];
279
+ this.password = arguments[4];
280
+ this.readyState = 1;
281
+ this.eventBus.trigger('readystatechange');
282
+ },
283
+
284
+ setRequestHeader: function(header, value) {
285
+ if(this.requestHeaders.hasOwnProperty(header)) {
286
+ this.requestHeaders[header] = [this.requestHeaders[header], value].join(', ');
287
+ } else {
288
+ this.requestHeaders[header] = value;
289
+ }
290
+ },
291
+
292
+ overrideMimeType: function(mime) {
293
+ this.overriddenMimeType = mime;
294
+ },
295
+
296
+ abort: function() {
297
+ this.readyState = 0;
298
+ this.status = 0;
299
+ this.statusText = "abort";
300
+ this.eventBus.trigger('readystatechange');
301
+ this.eventBus.trigger('progress');
302
+ this.eventBus.trigger('abort');
303
+ this.eventBus.trigger('loadend');
304
+ },
305
+
306
+ readyState: 0,
307
+
308
+ onloadstart: null,
309
+ onprogress: null,
310
+ onabort: null,
311
+ onerror: null,
312
+ onload: null,
313
+ ontimeout: null,
314
+ onloadend: null,
315
+ onreadystatechange: null,
316
+
317
+ addEventListener: function() {
318
+ this.eventBus.addEventListener.apply(this.eventBus, arguments);
319
+ },
320
+
321
+ removeEventListener: function(event, callback) {
322
+ this.eventBus.removeEventListener.apply(this.eventBus, arguments);
323
+ },
324
+
325
+ status: null,
326
+
327
+ send: function(data) {
328
+ this.params = data;
329
+ this.eventBus.trigger('loadstart');
330
+
331
+ var stub = stubTracker.findStub(this.url, data, this.method);
332
+ if (stub) {
333
+ if (stub.isReturn()) {
334
+ this.respondWith(stub);
335
+ } else if (stub.isError()) {
336
+ this.responseError();
337
+ } else if (stub.isTimeout()) {
338
+ this.responseTimeout();
339
+ }
340
+ }
341
+ },
342
+
343
+ contentType: function() {
344
+ return findHeader('content-type', this.requestHeaders);
345
+ },
346
+
347
+ data: function() {
348
+ if (!this.params) {
349
+ return {};
350
+ }
351
+
352
+ return paramParser.findParser(this).parse(this.params);
353
+ },
354
+
355
+ getResponseHeader: function(name) {
356
+ name = name.toLowerCase();
357
+ var resultHeader;
358
+ for(var i = 0; i < this.responseHeaders.length; i++) {
359
+ var header = this.responseHeaders[i];
360
+ if (name === header.name.toLowerCase()) {
361
+ if (resultHeader) {
362
+ resultHeader = [resultHeader, header.value].join(', ');
363
+ } else {
364
+ resultHeader = header.value;
365
+ }
366
+ }
367
+ }
368
+ return resultHeader;
369
+ },
370
+
371
+ getAllResponseHeaders: function() {
372
+ var responseHeaders = [];
373
+ for (var i = 0; i < this.responseHeaders.length; i++) {
374
+ responseHeaders.push(this.responseHeaders[i].name + ': ' +
375
+ this.responseHeaders[i].value);
376
+ }
377
+ return responseHeaders.join('\r\n') + '\r\n';
378
+ },
379
+
380
+ responseText: null,
381
+ response: null,
382
+ responseType: null,
383
+
384
+ responseValue: function() {
385
+ switch(this.responseType) {
386
+ case null:
387
+ case "":
388
+ case "text":
389
+ return this.readyState >= 3 ? this.responseText : "";
390
+ case "json":
391
+ return JSON.parse(this.responseText);
392
+ case "arraybuffer":
393
+ throw unconvertibleResponseTypeMessage('arraybuffer');
394
+ case "blob":
395
+ throw unconvertibleResponseTypeMessage('blob');
396
+ case "document":
397
+ return this.responseXML;
398
+ }
399
+ },
400
+
401
+
402
+ respondWith: function(response) {
403
+ if (this.readyState === 4) {
404
+ throw new Error("FakeXMLHttpRequest already completed");
405
+ }
406
+
407
+ this.status = response.status;
408
+ this.statusText = response.statusText || "";
409
+ this.responseHeaders = normalizeHeaders(response.responseHeaders, response.contentType);
410
+ this.readyState = 2;
411
+ this.eventBus.trigger('readystatechange');
412
+
413
+ this.responseText = response.responseText || "";
414
+ this.responseType = response.responseType || "";
415
+ this.readyState = 4;
416
+ this.responseXML = getResponseXml(response.responseText, this.getResponseHeader('content-type') || '');
417
+ if (this.responseXML) {
418
+ this.responseType = 'document';
419
+ }
420
+
421
+ if ('response' in response) {
422
+ this.response = response.response;
423
+ } else {
424
+ this.response = this.responseValue();
425
+ }
426
+
427
+ this.eventBus.trigger('readystatechange');
428
+ this.eventBus.trigger('progress');
429
+ this.eventBus.trigger('load');
430
+ this.eventBus.trigger('loadend');
431
+ },
432
+
433
+ responseTimeout: function() {
434
+ if (this.readyState === 4) {
435
+ throw new Error("FakeXMLHttpRequest already completed");
436
+ }
437
+ this.readyState = 4;
438
+ jasmine.clock().tick(30000);
439
+ this.eventBus.trigger('readystatechange');
440
+ this.eventBus.trigger('progress');
441
+ this.eventBus.trigger('timeout');
442
+ this.eventBus.trigger('loadend');
443
+ },
444
+
445
+ responseError: function() {
446
+ if (this.readyState === 4) {
447
+ throw new Error("FakeXMLHttpRequest already completed");
448
+ }
449
+ this.readyState = 4;
450
+ this.eventBus.trigger('readystatechange');
451
+ this.eventBus.trigger('progress');
452
+ this.eventBus.trigger('error');
453
+ this.eventBus.trigger('loadend');
454
+ }
455
+ });
456
+
457
+ return FakeXMLHttpRequest;
458
+ }
459
+
460
+ return fakeRequest;
461
+ };
462
+
463
+ getJasmineRequireObj().MockAjax = function($ajax) {
464
+ function MockAjax(global) {
465
+ var requestTracker = new $ajax.RequestTracker(),
466
+ stubTracker = new $ajax.StubTracker(),
467
+ paramParser = new $ajax.ParamParser(),
468
+ realAjaxFunction = global.XMLHttpRequest,
469
+ mockAjaxFunction = $ajax.fakeRequest(global, requestTracker, stubTracker, paramParser);
470
+
471
+ this.install = function() {
472
+ if (global.XMLHttpRequest === mockAjaxFunction) {
473
+ throw "MockAjax is already installed.";
474
+ }
475
+
476
+ global.XMLHttpRequest = mockAjaxFunction;
477
+ };
478
+
479
+ this.uninstall = function() {
480
+ global.XMLHttpRequest = realAjaxFunction;
481
+
482
+ this.stubs.reset();
483
+ this.requests.reset();
484
+ paramParser.reset();
485
+ };
486
+
487
+ this.stubRequest = function(url, data, method) {
488
+ var stub = new $ajax.RequestStub(url, data, method);
489
+ stubTracker.addStub(stub);
490
+ return stub;
491
+ };
492
+
493
+ this.withMock = function(closure) {
494
+ this.install();
495
+ try {
496
+ closure();
497
+ } finally {
498
+ this.uninstall();
499
+ }
500
+ };
501
+
502
+ this.addCustomParamParser = function(parser) {
503
+ paramParser.add(parser);
504
+ };
505
+
506
+ this.requests = requestTracker;
507
+ this.stubs = stubTracker;
508
+ }
509
+
510
+ return MockAjax;
511
+ };
512
+
513
+ getJasmineRequireObj().AjaxParamParser = function() {
514
+ function ParamParser() {
515
+ var defaults = [
516
+ {
517
+ test: function(xhr) {
518
+ return (/^application\/json/).test(xhr.contentType());
519
+ },
520
+ parse: function jsonParser(paramString) {
521
+ return JSON.parse(paramString);
522
+ }
523
+ },
524
+ {
525
+ test: function(xhr) {
526
+ return true;
527
+ },
528
+ parse: function naiveParser(paramString) {
529
+ var data = {};
530
+ var params = paramString.split('&');
531
+
532
+ for (var i = 0; i < params.length; ++i) {
533
+ var kv = params[i].replace(/\+/g, ' ').split('=');
534
+ var key = decodeURIComponent(kv[0]);
535
+ data[key] = data[key] || [];
536
+ data[key].push(decodeURIComponent(kv[1]));
537
+ }
538
+ return data;
539
+ }
540
+ }
541
+ ];
542
+ var paramParsers = [];
543
+
544
+ this.add = function(parser) {
545
+ paramParsers.unshift(parser);
546
+ };
547
+
548
+ this.findParser = function(xhr) {
549
+ for(var i in paramParsers) {
550
+ var parser = paramParsers[i];
551
+ if (parser.test(xhr)) {
552
+ return parser;
553
+ }
554
+ }
555
+ };
556
+
557
+ this.reset = function() {
558
+ paramParsers = [];
559
+ for(var i in defaults) {
560
+ paramParsers.push(defaults[i]);
561
+ }
562
+ };
563
+
564
+ this.reset();
565
+ }
566
+
567
+ return ParamParser;
568
+ };
569
+
570
+ getJasmineRequireObj().AjaxRequestStub = function() {
571
+ var RETURN = 0,
572
+ ERROR = 1,
573
+ TIMEOUT = 2;
574
+
575
+ function RequestStub(url, stubData, method) {
576
+ var normalizeQuery = function(query) {
577
+ return query ? query.split('&').sort().join('&') : undefined;
578
+ };
579
+
580
+ if (url instanceof RegExp) {
581
+ this.url = url;
582
+ this.query = undefined;
583
+ } else {
584
+ var split = url.split('?');
585
+ this.url = split[0];
586
+ this.query = split.length > 1 ? normalizeQuery(split[1]) : undefined;
587
+ }
588
+
589
+ this.data = (stubData instanceof RegExp) ? stubData : normalizeQuery(stubData);
590
+ this.method = method;
591
+
592
+ this.andReturn = function(options) {
593
+ this.action = RETURN;
594
+ this.status = options.status || 200;
595
+
596
+ this.contentType = options.contentType;
597
+ this.response = options.response;
598
+ this.responseText = options.responseText;
599
+ this.responseHeaders = options.responseHeaders;
600
+ };
601
+
602
+ this.isReturn = function() {
603
+ return this.action === RETURN;
604
+ };
605
+
606
+ this.andError = function() {
607
+ this.action = ERROR;
608
+ };
609
+
610
+ this.isError = function() {
611
+ return this.action === ERROR;
612
+ };
613
+
614
+ this.andTimeout = function() {
615
+ this.action = TIMEOUT;
616
+ };
617
+
618
+ this.isTimeout = function() {
619
+ return this.action === TIMEOUT;
620
+ };
621
+
622
+ this.matches = function(fullUrl, data, method) {
623
+ var urlMatches = false;
624
+ fullUrl = fullUrl.toString();
625
+ if (this.url instanceof RegExp) {
626
+ urlMatches = this.url.test(fullUrl);
627
+ } else {
628
+ var urlSplit = fullUrl.split('?'),
629
+ url = urlSplit[0],
630
+ query = urlSplit[1];
631
+ urlMatches = this.url === url && this.query === normalizeQuery(query);
632
+ }
633
+ var dataMatches = false;
634
+ if (this.data instanceof RegExp) {
635
+ dataMatches = this.data.test(data);
636
+ } else {
637
+ dataMatches = !this.data || this.data === normalizeQuery(data);
638
+ }
639
+ return urlMatches && dataMatches && (!this.method || this.method === method);
640
+ };
641
+ }
642
+
643
+ return RequestStub;
644
+ };
645
+
646
+ getJasmineRequireObj().AjaxRequestTracker = function() {
647
+ function RequestTracker() {
648
+ var requests = [];
649
+
650
+ this.track = function(request) {
651
+ requests.push(request);
652
+ };
653
+
654
+ this.first = function() {
655
+ return requests[0];
656
+ };
657
+
658
+ this.count = function() {
659
+ return requests.length;
660
+ };
661
+
662
+ this.reset = function() {
663
+ requests = [];
664
+ };
665
+
666
+ this.mostRecent = function() {
667
+ return requests[requests.length - 1];
668
+ };
669
+
670
+ this.at = function(index) {
671
+ return requests[index];
672
+ };
673
+
674
+ this.filter = function(url_to_match) {
675
+ var matching_requests = [];
676
+
677
+ for (var i = 0; i < requests.length; i++) {
678
+ if (url_to_match instanceof RegExp &&
679
+ url_to_match.test(requests[i].url)) {
680
+ matching_requests.push(requests[i]);
681
+ } else if (url_to_match instanceof Function &&
682
+ url_to_match(requests[i])) {
683
+ matching_requests.push(requests[i]);
684
+ } else {
685
+ if (requests[i].url === url_to_match) {
686
+ matching_requests.push(requests[i]);
687
+ }
688
+ }
689
+ }
690
+
691
+ return matching_requests;
692
+ };
693
+ }
694
+
695
+ return RequestTracker;
696
+ };
697
+
698
+ getJasmineRequireObj().AjaxStubTracker = function() {
699
+ function StubTracker() {
700
+ var stubs = [];
701
+
702
+ this.addStub = function(stub) {
703
+ stubs.push(stub);
704
+ };
705
+
706
+ this.reset = function() {
707
+ stubs = [];
708
+ };
709
+
710
+ this.findStub = function(url, data, method) {
711
+ for (var i = stubs.length - 1; i >= 0; i--) {
712
+ var stub = stubs[i];
713
+ if (stub.matches(url, data, method)) {
714
+ return stub;
715
+ }
716
+ }
717
+ };
718
+ }
719
+
720
+ return StubTracker;
721
+ };
722
+
723
+ (function() {
724
+ var jRequire = getJasmineRequireObj(),
725
+ MockAjax = jRequire.ajax(jRequire);
726
+ if (typeof window === "undefined" && typeof exports === "object") {
727
+ exports.MockAjax = MockAjax;
728
+ jasmine.Ajax = new MockAjax(exports);
729
+ } else {
730
+ window.MockAjax = MockAjax;
731
+ jasmine.Ajax = new MockAjax(window);
732
+ }
733
+ }());