storytime 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (763) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +24 -0
  5. data/app/assets/javascripts/storytime/application.js +25 -0
  6. data/app/assets/javascripts/storytime/base.js.coffee +22 -0
  7. data/app/assets/javascripts/storytime/editor.js.coffee +27 -0
  8. data/app/assets/javascripts/storytime/media.js.coffee +30 -0
  9. data/app/assets/javascripts/storytime/pages.js.coffee +12 -0
  10. data/app/assets/javascripts/storytime/posts.js.coffee +12 -0
  11. data/app/assets/javascripts/storytime/sites.js.coffee +16 -0
  12. data/app/assets/javascripts/storytime/utilities.js +23 -0
  13. data/app/assets/stylesheets/scaffold.css +56 -0
  14. data/app/assets/stylesheets/storytime/admin.css.scss +94 -0
  15. data/app/assets/stylesheets/storytime/application.css.scss +17 -0
  16. data/app/assets/stylesheets/storytime/devise.css.scss +256 -0
  17. data/app/assets/stylesheets/storytime/media.css.scss +17 -0
  18. data/app/assets/stylesheets/storytime/posts.css.scss +25 -0
  19. data/app/assets/stylesheets/storytime/sites.css.scss +4 -0
  20. data/app/assets/stylesheets/storytime/versions.css.scss +21 -0
  21. data/app/controllers/storytime/application_controller.rb +36 -0
  22. data/app/controllers/storytime/dashboard/media_controller.rb +38 -0
  23. data/app/controllers/storytime/dashboard/pages_controller.rb +73 -0
  24. data/app/controllers/storytime/dashboard/posts_controller.rb +71 -0
  25. data/app/controllers/storytime/dashboard/roles_controller.rb +13 -0
  26. data/app/controllers/storytime/dashboard/sites_controller.rb +52 -0
  27. data/app/controllers/storytime/dashboard/users_controller.rb +60 -0
  28. data/app/controllers/storytime/dashboard_controller.rb +18 -0
  29. data/app/controllers/storytime/pages_controller.rb +16 -0
  30. data/app/controllers/storytime/posts_controller.rb +19 -0
  31. data/app/helpers/storytime/application_helper.rb +39 -0
  32. data/app/helpers/storytime/media_helper.rb +16 -0
  33. data/app/helpers/storytime/posts_helper.rb +4 -0
  34. data/app/helpers/storytime/sites_helper.rb +19 -0
  35. data/app/helpers/storytime/versions_helper.rb +7 -0
  36. data/app/models/storytime/action.rb +16 -0
  37. data/app/models/storytime/media.rb +7 -0
  38. data/app/models/storytime/page.rb +14 -0
  39. data/app/models/storytime/permission.rb +27 -0
  40. data/app/models/storytime/post.rb +32 -0
  41. data/app/models/storytime/role.rb +19 -0
  42. data/app/models/storytime/site.rb +9 -0
  43. data/app/models/storytime/tag.rb +8 -0
  44. data/app/models/storytime/tagging.rb +13 -0
  45. data/app/models/storytime/user.rb +27 -0
  46. data/app/models/storytime/version.rb +6 -0
  47. data/app/policies/storytime/media_policy.rb +22 -0
  48. data/app/policies/storytime/page_policy.rb +71 -0
  49. data/app/policies/storytime/post_policy.rb +71 -0
  50. data/app/policies/storytime/site_policy.rb +31 -0
  51. data/app/policies/storytime/user_policy.rb +39 -0
  52. data/app/uploaders/storytime/media_uploader.rb +16 -0
  53. data/app/views/devise/confirmations/new.html.erb +16 -0
  54. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  55. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  56. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  57. data/app/views/devise/passwords/edit.html.erb +17 -0
  58. data/app/views/devise/passwords/new.html.erb +12 -0
  59. data/app/views/devise/registrations/edit.html.erb +31 -0
  60. data/app/views/devise/registrations/new.html.erb +20 -0
  61. data/app/views/devise/sessions/new.html.erb +24 -0
  62. data/app/views/devise/shared/_links.erb +25 -0
  63. data/app/views/devise/unlocks/new.html.erb +16 -0
  64. data/app/views/layouts/storytime/application.html.erb +24 -0
  65. data/app/views/layouts/storytime/dashboard.html.erb +23 -0
  66. data/app/views/storytime/application/_flash.html.erb +7 -0
  67. data/app/views/storytime/application/_footer.html.erb +3 -0
  68. data/app/views/storytime/application/_header.html.erb +30 -0
  69. data/app/views/storytime/application/_navigation.html.erb +1 -0
  70. data/app/views/storytime/dashboard/_navigation.html.erb +37 -0
  71. data/app/views/storytime/dashboard/media/_form.html.erb +8 -0
  72. data/app/views/storytime/dashboard/media/_gallery.html +6 -0
  73. data/app/views/storytime/dashboard/media/_media.html.erb +14 -0
  74. data/app/views/storytime/dashboard/media/_modal.html.erb +27 -0
  75. data/app/views/storytime/dashboard/media/index.html.erb +4 -0
  76. data/app/views/storytime/dashboard/media/show.json.jbuilder +2 -0
  77. data/app/views/storytime/dashboard/pages/_form.html.erb +17 -0
  78. data/app/views/storytime/dashboard/pages/_list.html.erb +24 -0
  79. data/app/views/storytime/dashboard/pages/edit.html.erb +16 -0
  80. data/app/views/storytime/dashboard/pages/index.html.erb +10 -0
  81. data/app/views/storytime/dashboard/pages/new.html.erb +12 -0
  82. data/app/views/storytime/dashboard/posts/_form.html.erb +20 -0
  83. data/app/views/storytime/dashboard/posts/_list.html.erb +24 -0
  84. data/app/views/storytime/dashboard/posts/edit.html.erb +16 -0
  85. data/app/views/storytime/dashboard/posts/index.html.erb +10 -0
  86. data/app/views/storytime/dashboard/posts/new.html.erb +12 -0
  87. data/app/views/storytime/dashboard/sites/_form.html.erb +14 -0
  88. data/app/views/storytime/dashboard/sites/edit.html.erb +15 -0
  89. data/app/views/storytime/dashboard/sites/new.html.erb +4 -0
  90. data/app/views/storytime/dashboard/users/_user.html.erb +10 -0
  91. data/app/views/storytime/dashboard/users/edit.html.erb +8 -0
  92. data/app/views/storytime/dashboard/users/index.html.erb +19 -0
  93. data/app/views/storytime/dashboard/users/new.html.erb +10 -0
  94. data/app/views/storytime/dashboard/versions/_versions_info.html.erb +25 -0
  95. data/app/views/storytime/pages/show.html.erb +3 -0
  96. data/app/views/storytime/posts/_tags.html.erb +3 -0
  97. data/app/views/storytime/posts/index.html.erb +22 -0
  98. data/app/views/storytime/posts/show.html.erb +14 -0
  99. data/config/initializers/carrierwave.rb +17 -0
  100. data/config/initializers/devise.rb +258 -0
  101. data/config/initializers/friendly_id.rb +88 -0
  102. data/config/initializers/inflections.rb +3 -0
  103. data/config/initializers/simple_form.rb +145 -0
  104. data/config/initializers/simple_form_bootstrap.rb +93 -0
  105. data/config/locales/devise.en.yml +59 -0
  106. data/config/locales/en.yml +37 -0
  107. data/config/locales/simple_form.en.yml +26 -0
  108. data/config/routes.rb +26 -0
  109. data/config/spring.rb +1 -0
  110. data/db/migrate/20140501171949_devise_create_storytime_users.rb +42 -0
  111. data/db/migrate/20140501174341_create_storytime_posts.rb +14 -0
  112. data/db/migrate/20140509150223_create_storytime_pages.rb +13 -0
  113. data/db/migrate/20140509191309_create_friendly_id_slugs.rb +15 -0
  114. data/db/migrate/20140511200849_create_storytime_media.rb +10 -0
  115. data/db/migrate/20140513161233_create_storytime_sites.rb +14 -0
  116. data/db/migrate/20140513162745_add_selected_root_page_to_storytime_sites.rb +5 -0
  117. data/db/migrate/20140514200234_create_storytime_tags.rb +9 -0
  118. data/db/migrate/20140514200304_create_storytime_taggings.rb +10 -0
  119. data/db/migrate/20140516141252_create_storytime_versions.rb +12 -0
  120. data/db/migrate/20140521190606_create_storytime_roles.rb +11 -0
  121. data/db/migrate/20140521191048_add_role_id_to_users.rb +6 -0
  122. data/db/migrate/20140521191728_create_storytime_permissions.rb +10 -0
  123. data/db/migrate/20140521191744_create_storytime_actions.rb +13 -0
  124. data/db/seeds.rb +3 -0
  125. data/lib/storytime.rb +11 -0
  126. data/lib/storytime/concerns/has_versions.rb +60 -0
  127. data/lib/storytime/constraints/root_constraint.rb +11 -0
  128. data/lib/storytime/engine.rb +19 -0
  129. data/lib/storytime/version.rb +3 -0
  130. data/lib/tasks/storytime_tasks.rake +4 -0
  131. data/lib/templates/erb/scaffold/_form.html.erb +13 -0
  132. data/spec/controllers/dashboard_controller_spec.rb +30 -0
  133. data/spec/dummy/README.rdoc +28 -0
  134. data/spec/dummy/Rakefile +6 -0
  135. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  136. data/spec/dummy/app/assets/stylesheets/application.css +16 -0
  137. data/spec/dummy/app/controllers/application_controller.rb +6 -0
  138. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  139. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  140. data/spec/dummy/bin/bundle +3 -0
  141. data/spec/dummy/bin/rails +4 -0
  142. data/spec/dummy/bin/rake +4 -0
  143. data/spec/dummy/config.ru +4 -0
  144. data/spec/dummy/config/application.rb +29 -0
  145. data/spec/dummy/config/boot.rb +5 -0
  146. data/spec/dummy/config/database.yml +25 -0
  147. data/spec/dummy/config/environment.rb +5 -0
  148. data/spec/dummy/config/environments/development.rb +39 -0
  149. data/spec/dummy/config/environments/production.rb +83 -0
  150. data/spec/dummy/config/environments/test.rb +39 -0
  151. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  152. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  153. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  154. data/spec/dummy/config/initializers/inflections.rb +16 -0
  155. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  156. data/spec/dummy/config/initializers/session_store.rb +3 -0
  157. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  158. data/spec/dummy/config/locales/en.yml +23 -0
  159. data/spec/dummy/config/routes.rb +3 -0
  160. data/spec/dummy/config/secrets.yml +22 -0
  161. data/spec/dummy/db/development.sqlite3 +0 -0
  162. data/spec/dummy/db/schema.rb +148 -0
  163. data/spec/dummy/db/test.sqlite3 +0 -0
  164. data/spec/dummy/log/development.log +77889 -0
  165. data/spec/dummy/log/test.log +83019 -0
  166. data/spec/dummy/public/404.html +67 -0
  167. data/spec/dummy/public/422.html +67 -0
  168. data/spec/dummy/public/500.html +66 -0
  169. data/spec/dummy/public/favicon.ico +0 -0
  170. data/spec/dummy/public/uploads/storytime/media/file/1/case-2-baseline.png +0 -0
  171. data/spec/dummy/public/uploads/storytime/media/file/1/success-kid.jpg +0 -0
  172. data/spec/dummy/public/uploads/storytime/media/file/1/thumb_case-2-baseline.png +0 -0
  173. data/spec/dummy/public/uploads/storytime/media/file/1/thumb_success-kid.jpg +0 -0
  174. data/spec/dummy/public/uploads/storytime/media/file/10/case-2-day-1.png +0 -0
  175. data/spec/dummy/public/uploads/storytime/media/file/10/thumb_case-2-day-1.png +0 -0
  176. data/spec/dummy/public/uploads/storytime/media/file/11/Screen_Shot_2014-04-11_at_3.33.52_PM.png +0 -0
  177. data/spec/dummy/public/uploads/storytime/media/file/11/thumb_Screen_Shot_2014-04-11_at_3.33.52_PM.png +0 -0
  178. data/spec/dummy/public/uploads/storytime/media/file/12/Screen_Shot_2014-04-14_at_3.57.28_PM.png +0 -0
  179. data/spec/dummy/public/uploads/storytime/media/file/12/thumb_Screen_Shot_2014-04-14_at_3.57.28_PM.png +0 -0
  180. data/spec/dummy/public/uploads/storytime/media/file/13/image001.png +0 -0
  181. data/spec/dummy/public/uploads/storytime/media/file/13/thumb_image001.png +0 -0
  182. data/spec/dummy/public/uploads/storytime/media/file/14/image001.png +0 -0
  183. data/spec/dummy/public/uploads/storytime/media/file/14/thumb_image001.png +0 -0
  184. data/spec/dummy/public/uploads/storytime/media/file/15/image001.png +0 -0
  185. data/spec/dummy/public/uploads/storytime/media/file/15/thumb_image001.png +0 -0
  186. data/spec/dummy/public/uploads/storytime/media/file/2/case-2-day-1.png +0 -0
  187. data/spec/dummy/public/uploads/storytime/media/file/2/success-kid.jpg +0 -0
  188. data/spec/dummy/public/uploads/storytime/media/file/2/thumb_case-2-day-1.png +0 -0
  189. data/spec/dummy/public/uploads/storytime/media/file/2/thumb_success-kid.jpg +0 -0
  190. data/spec/dummy/public/uploads/storytime/media/file/5/image001.png +0 -0
  191. data/spec/dummy/public/uploads/storytime/media/file/5/thumb_image001.png +0 -0
  192. data/spec/dummy/public/uploads/storytime/media/file/7/Screen_Shot_2014-04-11_at_3.33.52_PM.png +0 -0
  193. data/spec/dummy/public/uploads/storytime/media/file/7/thumb_Screen_Shot_2014-04-11_at_3.33.52_PM.png +0 -0
  194. data/spec/dummy/public/uploads/storytime/media/file/9/image001.png +0 -0
  195. data/spec/dummy/public/uploads/storytime/media/file/9/thumb_image001.png +0 -0
  196. data/spec/dummy/public/uploads/tmp/1399929694-77229-0032/case-2-baseline.png +0 -0
  197. data/spec/dummy/public/uploads/tmp/1399929694-77229-0032/thumb_case-2-baseline.png +0 -0
  198. data/spec/dummy/public/uploads/tmp/1399929900-77229-4396/image001.png +0 -0
  199. data/spec/dummy/public/uploads/tmp/1399929900-77229-4396/thumb_image001.png +0 -0
  200. data/spec/dummy/public/uploads/tmp/1399929935-77229-6247/image001.png +0 -0
  201. data/spec/dummy/public/uploads/tmp/1399929935-77229-6247/thumb_image001.png +0 -0
  202. data/spec/dummy/public/uploads/tmp/1399929976-77229-4486/image001.png +0 -0
  203. data/spec/dummy/public/uploads/tmp/1399929976-77229-4486/thumb_image001.png +0 -0
  204. data/spec/dummy/tmp/cache/assets/development/sass/5c0d2f6087bf75a7b219942ba7be5435141060e9/admin.css.scssc +0 -0
  205. data/spec/dummy/tmp/cache/assets/development/sass/5c0d2f6087bf75a7b219942ba7be5435141060e9/application.css.scssc +0 -0
  206. data/spec/dummy/tmp/cache/assets/development/sass/5c0d2f6087bf75a7b219942ba7be5435141060e9/devise.css.scssc +0 -0
  207. data/spec/dummy/tmp/cache/assets/development/sass/5c0d2f6087bf75a7b219942ba7be5435141060e9/media.css.scssc +0 -0
  208. data/spec/dummy/tmp/cache/assets/development/sass/5c0d2f6087bf75a7b219942ba7be5435141060e9/posts.css.scssc +0 -0
  209. data/spec/dummy/tmp/cache/assets/development/sass/5c0d2f6087bf75a7b219942ba7be5435141060e9/sites.css.scssc +0 -0
  210. data/spec/dummy/tmp/cache/assets/development/sass/5c0d2f6087bf75a7b219942ba7be5435141060e9/versions.css.scssc +0 -0
  211. data/spec/dummy/tmp/cache/assets/development/sass/7628c68fbe2e3603f682dfe5046801415df5db97/bootstrap-wysihtml5.css.scssc +0 -0
  212. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_alerts.scssc +0 -0
  213. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_badges.scssc +0 -0
  214. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_breadcrumbs.scssc +0 -0
  215. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_button-groups.scssc +0 -0
  216. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_buttons.scssc +0 -0
  217. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_carousel.scssc +0 -0
  218. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_close.scssc +0 -0
  219. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_code.scssc +0 -0
  220. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_component-animations.scssc +0 -0
  221. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_dropdowns.scssc +0 -0
  222. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_forms.scssc +0 -0
  223. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_glyphicons.scssc +0 -0
  224. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_grid.scssc +0 -0
  225. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_input-groups.scssc +0 -0
  226. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_jumbotron.scssc +0 -0
  227. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_labels.scssc +0 -0
  228. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_list-group.scssc +0 -0
  229. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_media.scssc +0 -0
  230. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_mixins.scssc +0 -0
  231. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_modals.scssc +0 -0
  232. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_navbar.scssc +0 -0
  233. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_navs.scssc +0 -0
  234. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_normalize.scssc +0 -0
  235. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_pager.scssc +0 -0
  236. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_pagination.scssc +0 -0
  237. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_panels.scssc +0 -0
  238. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_popovers.scssc +0 -0
  239. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_print.scssc +0 -0
  240. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_progress-bars.scssc +0 -0
  241. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_responsive-embed.scssc +0 -0
  242. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_responsive-utilities.scssc +0 -0
  243. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_scaffolding.scssc +0 -0
  244. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_tables.scssc +0 -0
  245. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_thumbnails.scssc +0 -0
  246. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_tooltip.scssc +0 -0
  247. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_type.scssc +0 -0
  248. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_utilities.scssc +0 -0
  249. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_variables.scssc +0 -0
  250. data/spec/dummy/tmp/cache/assets/development/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_wells.scssc +0 -0
  251. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_alerts.scssc +0 -0
  252. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_background-variant.scssc +0 -0
  253. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_border-radius.scssc +0 -0
  254. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_buttons.scssc +0 -0
  255. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_center-block.scssc +0 -0
  256. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_clearfix.scssc +0 -0
  257. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_forms.scssc +0 -0
  258. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_gradients.scssc +0 -0
  259. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_grid-framework.scssc +0 -0
  260. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_grid.scssc +0 -0
  261. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_hide-text.scssc +0 -0
  262. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_image.scssc +0 -0
  263. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_labels.scssc +0 -0
  264. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_list-group.scssc +0 -0
  265. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_nav-divider.scssc +0 -0
  266. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_nav-vertical-align.scssc +0 -0
  267. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_opacity.scssc +0 -0
  268. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_pagination.scssc +0 -0
  269. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_panels.scssc +0 -0
  270. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_progress-bar.scssc +0 -0
  271. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_reset-filter.scssc +0 -0
  272. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_resize.scssc +0 -0
  273. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_responsive-visibility.scssc +0 -0
  274. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_size.scssc +0 -0
  275. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_tab-focus.scssc +0 -0
  276. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_table-row.scssc +0 -0
  277. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_text-emphasis.scssc +0 -0
  278. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_text-overflow.scssc +0 -0
  279. data/spec/dummy/tmp/cache/assets/development/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_vendor-prefixes.scssc +0 -0
  280. data/spec/dummy/tmp/cache/assets/development/sass/bd6920fe35fbc8a60bb51f3a648fe211cda6a4ba/bootstrap.scssc +0 -0
  281. data/spec/dummy/tmp/cache/assets/development/sprockets/020b91fbc1173b1d78d8c8535228c51a +0 -0
  282. data/spec/dummy/tmp/cache/assets/development/sprockets/044316d16f4f4c759436c2eea3549a9a +0 -0
  283. data/spec/dummy/tmp/cache/assets/development/sprockets/097dbab26422bc41368089a5e42686a0 +0 -0
  284. data/spec/dummy/tmp/cache/assets/development/sprockets/0acd0bc8c90407d27bc855419a226514 +0 -0
  285. data/spec/dummy/tmp/cache/assets/development/sprockets/0c78ded798ac08d739992e81315d19ba +0 -0
  286. data/spec/dummy/tmp/cache/assets/development/sprockets/0d01ca44d9aefc0be6980f2c2de07312 +0 -0
  287. data/spec/dummy/tmp/cache/assets/development/sprockets/0d02ec6f768631a38712f82c09d6ceeb +0 -0
  288. data/spec/dummy/tmp/cache/assets/development/sprockets/0d2f1e2463825b083f8460a1d0245673 +0 -0
  289. data/spec/dummy/tmp/cache/assets/development/sprockets/0d7f8d2c285e1a9aecb5af5a38f4bb14 +0 -0
  290. data/spec/dummy/tmp/cache/assets/development/sprockets/0f76d6de1c8e9668627942d4325465d9 +0 -0
  291. data/spec/dummy/tmp/cache/assets/development/sprockets/10501d53c17804ad83c0a98289ea6c36 +0 -0
  292. data/spec/dummy/tmp/cache/assets/development/sprockets/146a559e9fdd016c554d0a04bc0edb10 +0 -0
  293. data/spec/dummy/tmp/cache/assets/development/sprockets/1583ab7265065890f895e5b9fb536a7a +0 -0
  294. data/spec/dummy/tmp/cache/assets/development/sprockets/165af8be47e919c036d6cdd8b4156c3f +0 -0
  295. data/spec/dummy/tmp/cache/assets/development/sprockets/169fd6faf427e47619e8e3cd871dca9b +0 -0
  296. data/spec/dummy/tmp/cache/assets/development/sprockets/17e3bf97def57cfeda69e06595085c2b +0 -0
  297. data/spec/dummy/tmp/cache/assets/development/sprockets/19fc4f17ff0937e15f96263d6bdd6cf6 +0 -0
  298. data/spec/dummy/tmp/cache/assets/development/sprockets/1ab132d866cbd3d636bd40d5d698d624 +0 -0
  299. data/spec/dummy/tmp/cache/assets/development/sprockets/23a0b43b3ac4a57203836cb77bc3c98a +0 -0
  300. data/spec/dummy/tmp/cache/assets/development/sprockets/2454cff882de4acc3e63481fe2d31826 +0 -0
  301. data/spec/dummy/tmp/cache/assets/development/sprockets/265ee88932e33d90712c94909bfe7282 +0 -0
  302. data/spec/dummy/tmp/cache/assets/development/sprockets/26b55ad5f4ab8bdcad112672e512dcc9 +0 -0
  303. data/spec/dummy/tmp/cache/assets/development/sprockets/2899787f8d2a2ae6dfbb9276125684c9 +0 -0
  304. data/spec/dummy/tmp/cache/assets/development/sprockets/28be90e4c91158f4aa826003490b51e0 +0 -0
  305. data/spec/dummy/tmp/cache/assets/development/sprockets/29fa80846e652c4bf4eb134143557a92 +0 -0
  306. data/spec/dummy/tmp/cache/assets/development/sprockets/2b112c2e64ea4c33a927ef5d2eb90710 +0 -0
  307. data/spec/dummy/tmp/cache/assets/development/sprockets/2ba1cab090fecac37ce98fc40389c07e +0 -0
  308. data/spec/dummy/tmp/cache/assets/development/sprockets/2cc6f240a4340624feee26cda93f243c +0 -0
  309. data/spec/dummy/tmp/cache/assets/development/sprockets/2d8013c606f7cf8d7b23ca7add8faa8e +0 -0
  310. data/spec/dummy/tmp/cache/assets/development/sprockets/2ddd39492454a6dbe6602e52209320f1 +0 -0
  311. data/spec/dummy/tmp/cache/assets/development/sprockets/376f2df90e3e56853fc174d664b724bb +0 -0
  312. data/spec/dummy/tmp/cache/assets/development/sprockets/39a43c34b540515fdb2e58087b3cfb24 +0 -0
  313. data/spec/dummy/tmp/cache/assets/development/sprockets/3cfeb2500f681c26386c11360b02d845 +0 -0
  314. data/spec/dummy/tmp/cache/assets/development/sprockets/3f61ff37a58dd8f005c33103bf597b4e +0 -0
  315. data/spec/dummy/tmp/cache/assets/development/sprockets/40e3897f7dde4a8cc4712a7a9de31142 +0 -0
  316. data/spec/dummy/tmp/cache/assets/development/sprockets/45dae50b10023f4bea4b848956498b80 +0 -0
  317. data/spec/dummy/tmp/cache/assets/development/sprockets/480e710084fe62082c214d8d1d6f6897 +0 -0
  318. data/spec/dummy/tmp/cache/assets/development/sprockets/4bd5dad727e47e71124f50228f264126 +0 -0
  319. data/spec/dummy/tmp/cache/assets/development/sprockets/4f37fa6375d525cc4348b0f13783df58 +0 -0
  320. data/spec/dummy/tmp/cache/assets/development/sprockets/4ff65642dfd2c65c5a6001986cd03e87 +0 -0
  321. data/spec/dummy/tmp/cache/assets/development/sprockets/502bd47873d745225df0b627c5c9c2b2 +0 -0
  322. data/spec/dummy/tmp/cache/assets/development/sprockets/529eabd6c6e130ede1f32048ff44d6a0 +0 -0
  323. data/spec/dummy/tmp/cache/assets/development/sprockets/53b1cd253b169f8158f5f6094510abd6 +0 -0
  324. data/spec/dummy/tmp/cache/assets/development/sprockets/590df37cc0cde03fe1803e3273def4e0 +0 -0
  325. data/spec/dummy/tmp/cache/assets/development/sprockets/5a4d1230d0ef19d1f35c23c586d989e1 +0 -0
  326. data/spec/dummy/tmp/cache/assets/development/sprockets/5ae49d3d7a73b15f3139273dc842722a +0 -0
  327. data/spec/dummy/tmp/cache/assets/development/sprockets/5ef9de5aa22ac63b7b5377bc629e8810 +0 -0
  328. data/spec/dummy/tmp/cache/assets/development/sprockets/6178c3f89b18fdac7431d9448ac2ad82 +0 -0
  329. data/spec/dummy/tmp/cache/assets/development/sprockets/61eccde418d3db7d6cab950c85ea53dc +0 -0
  330. data/spec/dummy/tmp/cache/assets/development/sprockets/644e0db48209ab08ad6b5e200963a839 +0 -0
  331. data/spec/dummy/tmp/cache/assets/development/sprockets/66f19e00741aeb22b87ac2fadcfdf6bb +0 -0
  332. data/spec/dummy/tmp/cache/assets/development/sprockets/67101390e2af5d2e1be9f95f315c1335 +0 -0
  333. data/spec/dummy/tmp/cache/assets/development/sprockets/67707b57a979f5dd6fcfa60c33ba5b3a +0 -0
  334. data/spec/dummy/tmp/cache/assets/development/sprockets/698104ddc85f7472ce03a40717003096 +0 -0
  335. data/spec/dummy/tmp/cache/assets/development/sprockets/699fc38b2c9c6da66d23bd171ff00a8a +0 -0
  336. data/spec/dummy/tmp/cache/assets/development/sprockets/69ee557d733dbbdef41fe157428b900a +0 -0
  337. data/spec/dummy/tmp/cache/assets/development/sprockets/6c5c021ab63a16094af9ddaf36ac7330 +0 -0
  338. data/spec/dummy/tmp/cache/assets/development/sprockets/6da1fab887d1e8378f40c20667e5cc59 +0 -0
  339. data/spec/dummy/tmp/cache/assets/development/sprockets/6e64329c6454073eeff47f373cc9aa05 +0 -0
  340. data/spec/dummy/tmp/cache/assets/development/sprockets/6fbe6961adae55a6cb9113fe7e000b28 +0 -0
  341. data/spec/dummy/tmp/cache/assets/development/sprockets/6fee48b9b1da0d3d6b8be1949870bd2d +0 -0
  342. data/spec/dummy/tmp/cache/assets/development/sprockets/718238c58fbd496692db95edc9f7257f +0 -0
  343. data/spec/dummy/tmp/cache/assets/development/sprockets/720d4ce046288c68bfe35eae12a93824 +0 -0
  344. data/spec/dummy/tmp/cache/assets/development/sprockets/7255d65c7583f46b858b92c03dd3f19c +0 -0
  345. data/spec/dummy/tmp/cache/assets/development/sprockets/72b57883778071e50284671cc1d8b1f0 +0 -0
  346. data/spec/dummy/tmp/cache/assets/development/sprockets/75586c04a80da3ade0d12b011b754668 +0 -0
  347. data/spec/dummy/tmp/cache/assets/development/sprockets/75937a67b81e1b3864a73f47082220d0 +0 -0
  348. data/spec/dummy/tmp/cache/assets/development/sprockets/75cb73cbb915f391a7bdd430e6240c18 +0 -0
  349. data/spec/dummy/tmp/cache/assets/development/sprockets/771344cf28504419d046eb60a73393e6 +0 -0
  350. data/spec/dummy/tmp/cache/assets/development/sprockets/7b5b8cdf15c5d6e25b630ace20226a08 +0 -0
  351. data/spec/dummy/tmp/cache/assets/development/sprockets/7c641428a457405f11503ede9a3df71d +0 -0
  352. data/spec/dummy/tmp/cache/assets/development/sprockets/812f46c2e04af24cfcb060e9da976a52 +0 -0
  353. data/spec/dummy/tmp/cache/assets/development/sprockets/8668ddaf373f95c1f37e43f2463fe898 +0 -0
  354. data/spec/dummy/tmp/cache/assets/development/sprockets/8a70805ffa751758f34c64f93bc2d9ab +0 -0
  355. data/spec/dummy/tmp/cache/assets/development/sprockets/8c006db0ad565abab3a51fb0e2d91f72 +0 -0
  356. data/spec/dummy/tmp/cache/assets/development/sprockets/90dd0e605a3ce1df752dc071c5ad6abf +0 -0
  357. data/spec/dummy/tmp/cache/assets/development/sprockets/95701298a0b8b805a116a0ffce62bade +0 -0
  358. data/spec/dummy/tmp/cache/assets/development/sprockets/970d0b91e8c55df088fe3767f7fef635 +0 -0
  359. data/spec/dummy/tmp/cache/assets/development/sprockets/98f50d322e74820ea5f4bcc0d78d39df +0 -0
  360. data/spec/dummy/tmp/cache/assets/development/sprockets/998aae6d07168b75751fd86c608e2ad0 +0 -0
  361. data/spec/dummy/tmp/cache/assets/development/sprockets/9a92af8515d31b1c60f2e26eaa9d825d +0 -0
  362. data/spec/dummy/tmp/cache/assets/development/sprockets/9afa2e5696ecfdd565db508f363eecd3 +0 -0
  363. data/spec/dummy/tmp/cache/assets/development/sprockets/9cf80ea47639e70cfb9e0df41f1962b0 +0 -0
  364. data/spec/dummy/tmp/cache/assets/development/sprockets/9e037886efcbc10dfad4bf8e29543d66 +0 -0
  365. data/spec/dummy/tmp/cache/assets/development/sprockets/a04a4267454af41ae6371c70bd486028 +0 -0
  366. data/spec/dummy/tmp/cache/assets/development/sprockets/a118fa902c3091572e750d8ac5954481 +0 -0
  367. data/spec/dummy/tmp/cache/assets/development/sprockets/a1210c518bfa35e360ccc45413961ea2 +0 -0
  368. data/spec/dummy/tmp/cache/assets/development/sprockets/a172eb4fcd69ed9a019b8e5a10982ccc +0 -0
  369. data/spec/dummy/tmp/cache/assets/development/sprockets/a20b8d3b3218e47e9afe2ce9fe8203da +0 -0
  370. data/spec/dummy/tmp/cache/assets/development/sprockets/a25e43f0b15e48028e19b9ced4e9c647 +0 -0
  371. data/spec/dummy/tmp/cache/assets/development/sprockets/a42ded65c5bb8c47e5de52802ea85f87 +0 -0
  372. data/spec/dummy/tmp/cache/assets/development/sprockets/a4c34e9ab0f1b22715a3c433cd87a20f +0 -0
  373. data/spec/dummy/tmp/cache/assets/development/sprockets/a698065edc0394659bb4a60cb1848dd9 +0 -0
  374. data/spec/dummy/tmp/cache/assets/development/sprockets/a79701d18873ce710f6216b6a3806a83 +0 -0
  375. data/spec/dummy/tmp/cache/assets/development/sprockets/a7f7a7a6f7d56bb4b46d8e4c89a3450a +0 -0
  376. data/spec/dummy/tmp/cache/assets/development/sprockets/a9462c3eb1108400236e0163c8a95e17 +0 -0
  377. data/spec/dummy/tmp/cache/assets/development/sprockets/ab2d7ffeb120e870e5a1a5794c677a96 +0 -0
  378. data/spec/dummy/tmp/cache/assets/development/sprockets/ab95a26755cf0a8dd6f340664c3df4cc +0 -0
  379. data/spec/dummy/tmp/cache/assets/development/sprockets/abfe3e393258df10a8bcb8a11c508960 +0 -0
  380. data/spec/dummy/tmp/cache/assets/development/sprockets/ac3de6ba4cfffa91134b0c40d4de10cd +0 -0
  381. data/spec/dummy/tmp/cache/assets/development/sprockets/ac670360d339283f28e8a977f184ca58 +0 -0
  382. data/spec/dummy/tmp/cache/assets/development/sprockets/aed5e523ef919ba89c52fc4f41838e0d +0 -0
  383. data/spec/dummy/tmp/cache/assets/development/sprockets/af1a908ef71dbf649d6bfc7bb4a7b802 +0 -0
  384. data/spec/dummy/tmp/cache/assets/development/sprockets/b240d42f24ec24b7922625710fb78864 +0 -0
  385. data/spec/dummy/tmp/cache/assets/development/sprockets/b2e41031bc7bf32fe23051b0bed7cfe7 +0 -0
  386. data/spec/dummy/tmp/cache/assets/development/sprockets/b3afd422c761ca8b9f25fc31bcb16e57 +0 -0
  387. data/spec/dummy/tmp/cache/assets/development/sprockets/b48147ca8e8ef368bffc8eeb8ab61826 +0 -0
  388. data/spec/dummy/tmp/cache/assets/development/sprockets/b6a6a8ff8899ee3fba7d60061ad4134c +0 -0
  389. data/spec/dummy/tmp/cache/assets/development/sprockets/b862b8461edd4b989538d86b38dab7f5 +0 -0
  390. data/spec/dummy/tmp/cache/assets/development/sprockets/b9626f562d6867b57696d079fd459916 +0 -0
  391. data/spec/dummy/tmp/cache/assets/development/sprockets/b975aa1b2fcb7293b12a360ff2eb97e6 +0 -0
  392. data/spec/dummy/tmp/cache/assets/development/sprockets/bb1f26b995fdd7b6d2ac3dbfa9ff802a +0 -0
  393. data/spec/dummy/tmp/cache/assets/development/sprockets/bf9a86821e87daaf598b1a6e021634cf +0 -0
  394. data/spec/dummy/tmp/cache/assets/development/sprockets/bfa4c6ad0081ca0f013ecf4ce1509033 +0 -0
  395. data/spec/dummy/tmp/cache/assets/development/sprockets/c0c703c441222b2bf421bcc8465d4854 +0 -0
  396. data/spec/dummy/tmp/cache/assets/development/sprockets/c219bb843814a727baebad11cf14e339 +0 -0
  397. data/spec/dummy/tmp/cache/assets/development/sprockets/c7e3a48c5d8dc588e1c4de361a125c45 +0 -0
  398. data/spec/dummy/tmp/cache/assets/development/sprockets/c7fe984c819e1eab5df4d5b507d06f08 +0 -0
  399. data/spec/dummy/tmp/cache/assets/development/sprockets/c8bfddd018ed49781a597619f64d3abd +0 -0
  400. data/spec/dummy/tmp/cache/assets/development/sprockets/cac3f4659c221fccf6028ecc44fe9217 +0 -0
  401. data/spec/dummy/tmp/cache/assets/development/sprockets/cb08dfa48ab4ed8c6067750011bc2a56 +0 -0
  402. data/spec/dummy/tmp/cache/assets/development/sprockets/ce1fd9656d7935f132f85c3a221a67ba +0 -0
  403. data/spec/dummy/tmp/cache/assets/development/sprockets/d2a6177ba2d233e33bd061d7fb9cd628 +0 -0
  404. data/spec/dummy/tmp/cache/assets/development/sprockets/d40b6b4189d7680a73b8b94057e31022 +0 -0
  405. data/spec/dummy/tmp/cache/assets/development/sprockets/dbdd6f7f1a2680b7313ae9c940f9ac4c +0 -0
  406. data/spec/dummy/tmp/cache/assets/development/sprockets/dbe5b014ce69cfcb9388b1f1be0fc07d +0 -0
  407. data/spec/dummy/tmp/cache/assets/development/sprockets/dd3e2960b850367389fca0a5d8566551 +0 -0
  408. data/spec/dummy/tmp/cache/assets/development/sprockets/de9fb9c8a1f09dcebe130b9e7f687afd +0 -0
  409. data/spec/dummy/tmp/cache/assets/development/sprockets/dec6c42399648babcea34c105f0fc83f +0 -0
  410. data/spec/dummy/tmp/cache/assets/development/sprockets/e1fd25e6bdec3fdebdb946c0b4ba974f +0 -0
  411. data/spec/dummy/tmp/cache/assets/development/sprockets/e2965613b9e19be94c1ab92addbf9522 +0 -0
  412. data/spec/dummy/tmp/cache/assets/development/sprockets/e3d0b4fc93b50878108e5f7463f2050a +0 -0
  413. data/spec/dummy/tmp/cache/assets/development/sprockets/e437111ec0fab0250b518d69db15d9b8 +0 -0
  414. data/spec/dummy/tmp/cache/assets/development/sprockets/e4dff08dbc078fbf096ff221f75baf92 +0 -0
  415. data/spec/dummy/tmp/cache/assets/development/sprockets/ea110c82f66716dd92e22c9de7b249e8 +0 -0
  416. data/spec/dummy/tmp/cache/assets/development/sprockets/ea7294fa903cf73f2c9882de4a3118fb +0 -0
  417. data/spec/dummy/tmp/cache/assets/development/sprockets/ecfb4f775270825b0f6ec16552e61a3c +0 -0
  418. data/spec/dummy/tmp/cache/assets/development/sprockets/ed108f7a4a4fe7f43ac66c7eb5209e24 +0 -0
  419. data/spec/dummy/tmp/cache/assets/development/sprockets/f14e4511cdd4a242cc068c710c7dd0d1 +0 -0
  420. data/spec/dummy/tmp/cache/assets/development/sprockets/f28611e5b61d6ec23f3a5a63a99d7d23 +0 -0
  421. data/spec/dummy/tmp/cache/assets/development/sprockets/f294fbede1b7c780bc8e68aaabab1d83 +0 -0
  422. data/spec/dummy/tmp/cache/assets/development/sprockets/f6593f5551b1867b389179e33c46df98 +0 -0
  423. data/spec/dummy/tmp/cache/assets/development/sprockets/f6d5b390a534b5ce821b5b84757d7a1c +0 -0
  424. data/spec/dummy/tmp/cache/assets/development/sprockets/f71b8e208ea605e5dad351a05172d6bd +0 -0
  425. data/spec/dummy/tmp/cache/assets/development/sprockets/f7b22e06cc0b7e9fd9008b6a16c201b6 +0 -0
  426. data/spec/dummy/tmp/cache/assets/development/sprockets/f7f21931f966f2b6112af9cb48ab2ef8 +0 -0
  427. data/spec/dummy/tmp/cache/assets/development/sprockets/fc8dedac9592b5f0c1ba6241713bb5d1 +0 -0
  428. data/spec/dummy/tmp/cache/assets/development/sprockets/fccfd128f0c058afe6166f1a862d25a7 +0 -0
  429. data/spec/dummy/tmp/cache/assets/development/sprockets/fd01744dc6f832030742b6e0db5063d5 +0 -0
  430. data/spec/dummy/tmp/cache/assets/development/sprockets/fd5e3004fbfd28ebb8e744f3570e24be +0 -0
  431. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_alerts.scssc +0 -0
  432. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_badges.scssc +0 -0
  433. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_breadcrumbs.scssc +0 -0
  434. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_button-groups.scssc +0 -0
  435. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_buttons.scssc +0 -0
  436. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_carousel.scssc +0 -0
  437. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_close.scssc +0 -0
  438. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_code.scssc +0 -0
  439. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_component-animations.scssc +0 -0
  440. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_dropdowns.scssc +0 -0
  441. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_forms.scssc +0 -0
  442. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_glyphicons.scssc +0 -0
  443. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_grid.scssc +0 -0
  444. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_input-groups.scssc +0 -0
  445. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_jumbotron.scssc +0 -0
  446. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_labels.scssc +0 -0
  447. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_list-group.scssc +0 -0
  448. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_media.scssc +0 -0
  449. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_mixins.scssc +0 -0
  450. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_modals.scssc +0 -0
  451. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_navbar.scssc +0 -0
  452. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_navs.scssc +0 -0
  453. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_normalize.scssc +0 -0
  454. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_pager.scssc +0 -0
  455. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_pagination.scssc +0 -0
  456. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_panels.scssc +0 -0
  457. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_popovers.scssc +0 -0
  458. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_print.scssc +0 -0
  459. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_progress-bars.scssc +0 -0
  460. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_responsive-embed.scssc +0 -0
  461. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_responsive-utilities.scssc +0 -0
  462. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_scaffolding.scssc +0 -0
  463. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_tables.scssc +0 -0
  464. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_thumbnails.scssc +0 -0
  465. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_tooltip.scssc +0 -0
  466. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_type.scssc +0 -0
  467. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_utilities.scssc +0 -0
  468. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_variables.scssc +0 -0
  469. data/spec/dummy/tmp/cache/assets/test/sass/0b10041bc898294349451ee45977193a332abf53/_wells.scssc +0 -0
  470. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_alerts.scssc +0 -0
  471. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_background-variant.scssc +0 -0
  472. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_border-radius.scssc +0 -0
  473. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_buttons.scssc +0 -0
  474. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_center-block.scssc +0 -0
  475. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_clearfix.scssc +0 -0
  476. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_forms.scssc +0 -0
  477. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_gradients.scssc +0 -0
  478. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_grid-framework.scssc +0 -0
  479. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_grid.scssc +0 -0
  480. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_hide-text.scssc +0 -0
  481. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_image.scssc +0 -0
  482. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_labels.scssc +0 -0
  483. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_list-group.scssc +0 -0
  484. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_nav-divider.scssc +0 -0
  485. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_nav-vertical-align.scssc +0 -0
  486. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_opacity.scssc +0 -0
  487. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_pagination.scssc +0 -0
  488. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_panels.scssc +0 -0
  489. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_progress-bar.scssc +0 -0
  490. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_reset-filter.scssc +0 -0
  491. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_resize.scssc +0 -0
  492. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_responsive-visibility.scssc +0 -0
  493. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_size.scssc +0 -0
  494. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_tab-focus.scssc +0 -0
  495. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_table-row.scssc +0 -0
  496. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_text-emphasis.scssc +0 -0
  497. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_text-overflow.scssc +0 -0
  498. data/spec/dummy/tmp/cache/assets/test/sass/21f7fb95f190e6f5055300fa088a6848f7c6ef89/_vendor-prefixes.scssc +0 -0
  499. data/spec/dummy/tmp/cache/assets/test/sass/5c0d2f6087bf75a7b219942ba7be5435141060e9/admin.css.scssc +0 -0
  500. data/spec/dummy/tmp/cache/assets/test/sass/5c0d2f6087bf75a7b219942ba7be5435141060e9/application.css.scssc +0 -0
  501. data/spec/dummy/tmp/cache/assets/test/sass/5c0d2f6087bf75a7b219942ba7be5435141060e9/devise.css.scssc +0 -0
  502. data/spec/dummy/tmp/cache/assets/test/sass/5c0d2f6087bf75a7b219942ba7be5435141060e9/media.css.scssc +0 -0
  503. data/spec/dummy/tmp/cache/assets/test/sass/5c0d2f6087bf75a7b219942ba7be5435141060e9/posts.css.scssc +0 -0
  504. data/spec/dummy/tmp/cache/assets/test/sass/5c0d2f6087bf75a7b219942ba7be5435141060e9/sites.css.scssc +0 -0
  505. data/spec/dummy/tmp/cache/assets/test/sass/5c0d2f6087bf75a7b219942ba7be5435141060e9/versions.css.scssc +0 -0
  506. data/spec/dummy/tmp/cache/assets/test/sass/7628c68fbe2e3603f682dfe5046801415df5db97/bootstrap-wysihtml5.css.scssc +0 -0
  507. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_alerts.scssc +0 -0
  508. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_badges.scssc +0 -0
  509. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_breadcrumbs.scssc +0 -0
  510. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_button-groups.scssc +0 -0
  511. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_buttons.scssc +0 -0
  512. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_carousel.scssc +0 -0
  513. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_close.scssc +0 -0
  514. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_code.scssc +0 -0
  515. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_component-animations.scssc +0 -0
  516. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_dropdowns.scssc +0 -0
  517. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_forms.scssc +0 -0
  518. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_glyphicons.scssc +0 -0
  519. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_grid.scssc +0 -0
  520. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_input-groups.scssc +0 -0
  521. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_jumbotron.scssc +0 -0
  522. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_labels.scssc +0 -0
  523. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_list-group.scssc +0 -0
  524. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_media.scssc +0 -0
  525. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_mixins.scssc +0 -0
  526. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_modals.scssc +0 -0
  527. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_navbar.scssc +0 -0
  528. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_navs.scssc +0 -0
  529. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_normalize.scssc +0 -0
  530. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_pager.scssc +0 -0
  531. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_pagination.scssc +0 -0
  532. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_panels.scssc +0 -0
  533. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_popovers.scssc +0 -0
  534. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_print.scssc +0 -0
  535. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_progress-bars.scssc +0 -0
  536. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_responsive-embed.scssc +0 -0
  537. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_responsive-utilities.scssc +0 -0
  538. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_scaffolding.scssc +0 -0
  539. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_tables.scssc +0 -0
  540. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_thumbnails.scssc +0 -0
  541. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_tooltip.scssc +0 -0
  542. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_type.scssc +0 -0
  543. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_utilities.scssc +0 -0
  544. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_variables.scssc +0 -0
  545. data/spec/dummy/tmp/cache/assets/test/sass/9f077c14b8647e864e8f2081b4884e369876a15b/_wells.scssc +0 -0
  546. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_alerts.scssc +0 -0
  547. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_background-variant.scssc +0 -0
  548. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_border-radius.scssc +0 -0
  549. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_buttons.scssc +0 -0
  550. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_center-block.scssc +0 -0
  551. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_clearfix.scssc +0 -0
  552. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_forms.scssc +0 -0
  553. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_gradients.scssc +0 -0
  554. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_grid-framework.scssc +0 -0
  555. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_grid.scssc +0 -0
  556. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_hide-text.scssc +0 -0
  557. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_image.scssc +0 -0
  558. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_labels.scssc +0 -0
  559. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_list-group.scssc +0 -0
  560. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_nav-divider.scssc +0 -0
  561. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_nav-vertical-align.scssc +0 -0
  562. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_opacity.scssc +0 -0
  563. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_pagination.scssc +0 -0
  564. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_panels.scssc +0 -0
  565. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_progress-bar.scssc +0 -0
  566. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_reset-filter.scssc +0 -0
  567. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_resize.scssc +0 -0
  568. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_responsive-visibility.scssc +0 -0
  569. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_size.scssc +0 -0
  570. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_tab-focus.scssc +0 -0
  571. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_table-row.scssc +0 -0
  572. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_text-emphasis.scssc +0 -0
  573. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_text-overflow.scssc +0 -0
  574. data/spec/dummy/tmp/cache/assets/test/sass/a87fa1f52be996f6d810419a60e88552c5421f5f/_vendor-prefixes.scssc +0 -0
  575. data/spec/dummy/tmp/cache/assets/test/sass/bd6920fe35fbc8a60bb51f3a648fe211cda6a4ba/bootstrap.scssc +0 -0
  576. data/spec/dummy/tmp/cache/assets/test/sass/ee7f3ff577f16153ee43b3806d01c1c81edb02c6/bootstrap.scssc +0 -0
  577. data/spec/dummy/tmp/cache/assets/test/sprockets/020b91fbc1173b1d78d8c8535228c51a +0 -0
  578. data/spec/dummy/tmp/cache/assets/test/sprockets/044316d16f4f4c759436c2eea3549a9a +0 -0
  579. data/spec/dummy/tmp/cache/assets/test/sprockets/097dbab26422bc41368089a5e42686a0 +0 -0
  580. data/spec/dummy/tmp/cache/assets/test/sprockets/09e1cce14478bbb557448268798ec525 +0 -0
  581. data/spec/dummy/tmp/cache/assets/test/sprockets/0acd0bc8c90407d27bc855419a226514 +0 -0
  582. data/spec/dummy/tmp/cache/assets/test/sprockets/0d01ca44d9aefc0be6980f2c2de07312 +0 -0
  583. data/spec/dummy/tmp/cache/assets/test/sprockets/0d02ec6f768631a38712f82c09d6ceeb +0 -0
  584. data/spec/dummy/tmp/cache/assets/test/sprockets/0d7f8d2c285e1a9aecb5af5a38f4bb14 +0 -0
  585. data/spec/dummy/tmp/cache/assets/test/sprockets/10501d53c17804ad83c0a98289ea6c36 +0 -0
  586. data/spec/dummy/tmp/cache/assets/test/sprockets/12f6c9c245e8fa406c35ab7331974afc +0 -0
  587. data/spec/dummy/tmp/cache/assets/test/sprockets/1583ab7265065890f895e5b9fb536a7a +0 -0
  588. data/spec/dummy/tmp/cache/assets/test/sprockets/165af8be47e919c036d6cdd8b4156c3f +0 -0
  589. data/spec/dummy/tmp/cache/assets/test/sprockets/169fd6faf427e47619e8e3cd871dca9b +0 -0
  590. data/spec/dummy/tmp/cache/assets/test/sprockets/17e3bf97def57cfeda69e06595085c2b +0 -0
  591. data/spec/dummy/tmp/cache/assets/test/sprockets/19fc4f17ff0937e15f96263d6bdd6cf6 +0 -0
  592. data/spec/dummy/tmp/cache/assets/test/sprockets/1af012edb39b0460b7065a823d74005e +0 -0
  593. data/spec/dummy/tmp/cache/assets/test/sprockets/2378062a5d883c5add851640797b8b5d +0 -0
  594. data/spec/dummy/tmp/cache/assets/test/sprockets/23a0b43b3ac4a57203836cb77bc3c98a +0 -0
  595. data/spec/dummy/tmp/cache/assets/test/sprockets/2454cff882de4acc3e63481fe2d31826 +0 -0
  596. data/spec/dummy/tmp/cache/assets/test/sprockets/265ee88932e33d90712c94909bfe7282 +0 -0
  597. data/spec/dummy/tmp/cache/assets/test/sprockets/26b55ad5f4ab8bdcad112672e512dcc9 +0 -0
  598. data/spec/dummy/tmp/cache/assets/test/sprockets/28491cc5820f412734b79e7b8db43c45 +0 -0
  599. data/spec/dummy/tmp/cache/assets/test/sprockets/2899787f8d2a2ae6dfbb9276125684c9 +0 -0
  600. data/spec/dummy/tmp/cache/assets/test/sprockets/28be90e4c91158f4aa826003490b51e0 +0 -0
  601. data/spec/dummy/tmp/cache/assets/test/sprockets/29fa80846e652c4bf4eb134143557a92 +0 -0
  602. data/spec/dummy/tmp/cache/assets/test/sprockets/2b112c2e64ea4c33a927ef5d2eb90710 +0 -0
  603. data/spec/dummy/tmp/cache/assets/test/sprockets/2b9fc42071e985b990e21b94953f037f +0 -0
  604. data/spec/dummy/tmp/cache/assets/test/sprockets/2ba1cab090fecac37ce98fc40389c07e +0 -0
  605. data/spec/dummy/tmp/cache/assets/test/sprockets/2cc6f240a4340624feee26cda93f243c +0 -0
  606. data/spec/dummy/tmp/cache/assets/test/sprockets/2d8013c606f7cf8d7b23ca7add8faa8e +0 -0
  607. data/spec/dummy/tmp/cache/assets/test/sprockets/33eccb31ac2cd04b4e8301b3029969dd +0 -0
  608. data/spec/dummy/tmp/cache/assets/test/sprockets/35ae9fe8ac2b07df56c4dc2fbb8094e0 +0 -0
  609. data/spec/dummy/tmp/cache/assets/test/sprockets/376f2df90e3e56853fc174d664b724bb +0 -0
  610. data/spec/dummy/tmp/cache/assets/test/sprockets/393869113eb31f9dca7bbc8b36a6c47a +0 -0
  611. data/spec/dummy/tmp/cache/assets/test/sprockets/39a43c34b540515fdb2e58087b3cfb24 +0 -0
  612. data/spec/dummy/tmp/cache/assets/test/sprockets/3cfeb2500f681c26386c11360b02d845 +0 -0
  613. data/spec/dummy/tmp/cache/assets/test/sprockets/40e3897f7dde4a8cc4712a7a9de31142 +0 -0
  614. data/spec/dummy/tmp/cache/assets/test/sprockets/4282fa32a57799211b7da1dee471d0f2 +0 -0
  615. data/spec/dummy/tmp/cache/assets/test/sprockets/45dae50b10023f4bea4b848956498b80 +0 -0
  616. data/spec/dummy/tmp/cache/assets/test/sprockets/480e710084fe62082c214d8d1d6f6897 +0 -0
  617. data/spec/dummy/tmp/cache/assets/test/sprockets/49b525b6667302a577db14433e887eb6 +0 -0
  618. data/spec/dummy/tmp/cache/assets/test/sprockets/4bd5dad727e47e71124f50228f264126 +0 -0
  619. data/spec/dummy/tmp/cache/assets/test/sprockets/4f37fa6375d525cc4348b0f13783df58 +0 -0
  620. data/spec/dummy/tmp/cache/assets/test/sprockets/529eabd6c6e130ede1f32048ff44d6a0 +0 -0
  621. data/spec/dummy/tmp/cache/assets/test/sprockets/53b1cd253b169f8158f5f6094510abd6 +0 -0
  622. data/spec/dummy/tmp/cache/assets/test/sprockets/55597ced9c714d85af225f385f748fb7 +0 -0
  623. data/spec/dummy/tmp/cache/assets/test/sprockets/5ae49d3d7a73b15f3139273dc842722a +0 -0
  624. data/spec/dummy/tmp/cache/assets/test/sprockets/5c2dfc344f454ea4d5746b887a6e5430 +0 -0
  625. data/spec/dummy/tmp/cache/assets/test/sprockets/5ef9de5aa22ac63b7b5377bc629e8810 +0 -0
  626. data/spec/dummy/tmp/cache/assets/test/sprockets/6178c3f89b18fdac7431d9448ac2ad82 +0 -0
  627. data/spec/dummy/tmp/cache/assets/test/sprockets/61bc1cc8894113058b067526fee0348a +0 -0
  628. data/spec/dummy/tmp/cache/assets/test/sprockets/61eccde418d3db7d6cab950c85ea53dc +0 -0
  629. data/spec/dummy/tmp/cache/assets/test/sprockets/635a2c4b410e9a5c27ee5bf7a586bb52 +0 -0
  630. data/spec/dummy/tmp/cache/assets/test/sprockets/63bc199866d476456d372f42416e2f75 +0 -0
  631. data/spec/dummy/tmp/cache/assets/test/sprockets/644e0db48209ab08ad6b5e200963a839 +0 -0
  632. data/spec/dummy/tmp/cache/assets/test/sprockets/67101390e2af5d2e1be9f95f315c1335 +0 -0
  633. data/spec/dummy/tmp/cache/assets/test/sprockets/67707b57a979f5dd6fcfa60c33ba5b3a +0 -0
  634. data/spec/dummy/tmp/cache/assets/test/sprockets/6a1abdccf9e9f6fc3d08f47b0a6ffecd +0 -0
  635. data/spec/dummy/tmp/cache/assets/test/sprockets/6da1fab887d1e8378f40c20667e5cc59 +0 -0
  636. data/spec/dummy/tmp/cache/assets/test/sprockets/6e31e9c28b48aae7b8b99b865c5e500b +0 -0
  637. data/spec/dummy/tmp/cache/assets/test/sprockets/6e64329c6454073eeff47f373cc9aa05 +0 -0
  638. data/spec/dummy/tmp/cache/assets/test/sprockets/6fce639dfd31f2213a96e4c4e9032dff +0 -0
  639. data/spec/dummy/tmp/cache/assets/test/sprockets/6fee48b9b1da0d3d6b8be1949870bd2d +0 -0
  640. data/spec/dummy/tmp/cache/assets/test/sprockets/715f1c1bd4a498fe0e1a7d88f83b58ff +0 -0
  641. data/spec/dummy/tmp/cache/assets/test/sprockets/718238c58fbd496692db95edc9f7257f +0 -0
  642. data/spec/dummy/tmp/cache/assets/test/sprockets/7255d65c7583f46b858b92c03dd3f19c +0 -0
  643. data/spec/dummy/tmp/cache/assets/test/sprockets/72b57883778071e50284671cc1d8b1f0 +0 -0
  644. data/spec/dummy/tmp/cache/assets/test/sprockets/75586c04a80da3ade0d12b011b754668 +0 -0
  645. data/spec/dummy/tmp/cache/assets/test/sprockets/75937a67b81e1b3864a73f47082220d0 +0 -0
  646. data/spec/dummy/tmp/cache/assets/test/sprockets/75cb73cbb915f391a7bdd430e6240c18 +0 -0
  647. data/spec/dummy/tmp/cache/assets/test/sprockets/771344cf28504419d046eb60a73393e6 +0 -0
  648. data/spec/dummy/tmp/cache/assets/test/sprockets/793533d05b0c5923ee5b15bbeddba7ee +0 -0
  649. data/spec/dummy/tmp/cache/assets/test/sprockets/7b5b8cdf15c5d6e25b630ace20226a08 +0 -0
  650. data/spec/dummy/tmp/cache/assets/test/sprockets/7c641428a457405f11503ede9a3df71d +0 -0
  651. data/spec/dummy/tmp/cache/assets/test/sprockets/812f46c2e04af24cfcb060e9da976a52 +0 -0
  652. data/spec/dummy/tmp/cache/assets/test/sprockets/824bf908757de443ce19415a7b871e44 +0 -0
  653. data/spec/dummy/tmp/cache/assets/test/sprockets/83ad075b329956476f34673c7f405622 +0 -0
  654. data/spec/dummy/tmp/cache/assets/test/sprockets/8668ddaf373f95c1f37e43f2463fe898 +0 -0
  655. data/spec/dummy/tmp/cache/assets/test/sprockets/89ae70149a8fba7308ae0620444d24f8 +0 -0
  656. data/spec/dummy/tmp/cache/assets/test/sprockets/8c006db0ad565abab3a51fb0e2d91f72 +0 -0
  657. data/spec/dummy/tmp/cache/assets/test/sprockets/906e15453ef8943d062831b81527545e +0 -0
  658. data/spec/dummy/tmp/cache/assets/test/sprockets/90dd0e605a3ce1df752dc071c5ad6abf +0 -0
  659. data/spec/dummy/tmp/cache/assets/test/sprockets/95701298a0b8b805a116a0ffce62bade +0 -0
  660. data/spec/dummy/tmp/cache/assets/test/sprockets/962e0a112f2da1e5c709c62e176874ed +0 -0
  661. data/spec/dummy/tmp/cache/assets/test/sprockets/970d0b91e8c55df088fe3767f7fef635 +0 -0
  662. data/spec/dummy/tmp/cache/assets/test/sprockets/98f50d322e74820ea5f4bcc0d78d39df +0 -0
  663. data/spec/dummy/tmp/cache/assets/test/sprockets/998aae6d07168b75751fd86c608e2ad0 +0 -0
  664. data/spec/dummy/tmp/cache/assets/test/sprockets/9a92af8515d31b1c60f2e26eaa9d825d +0 -0
  665. data/spec/dummy/tmp/cache/assets/test/sprockets/9afa2e5696ecfdd565db508f363eecd3 +0 -0
  666. data/spec/dummy/tmp/cache/assets/test/sprockets/9cf80ea47639e70cfb9e0df41f1962b0 +0 -0
  667. data/spec/dummy/tmp/cache/assets/test/sprockets/9f27b24ce134a84f31dbaef4127315b6 +0 -0
  668. data/spec/dummy/tmp/cache/assets/test/sprockets/9f3957fba4c8ccc3d420c45e27dee803 +0 -0
  669. data/spec/dummy/tmp/cache/assets/test/sprockets/a04a4267454af41ae6371c70bd486028 +0 -0
  670. data/spec/dummy/tmp/cache/assets/test/sprockets/a1210c518bfa35e360ccc45413961ea2 +0 -0
  671. data/spec/dummy/tmp/cache/assets/test/sprockets/a172eb4fcd69ed9a019b8e5a10982ccc +0 -0
  672. data/spec/dummy/tmp/cache/assets/test/sprockets/a20b8d3b3218e47e9afe2ce9fe8203da +0 -0
  673. data/spec/dummy/tmp/cache/assets/test/sprockets/a25e43f0b15e48028e19b9ced4e9c647 +0 -0
  674. data/spec/dummy/tmp/cache/assets/test/sprockets/a4c34e9ab0f1b22715a3c433cd87a20f +0 -0
  675. data/spec/dummy/tmp/cache/assets/test/sprockets/a698065edc0394659bb4a60cb1848dd9 +0 -0
  676. data/spec/dummy/tmp/cache/assets/test/sprockets/a79701d18873ce710f6216b6a3806a83 +0 -0
  677. data/spec/dummy/tmp/cache/assets/test/sprockets/a9462c3eb1108400236e0163c8a95e17 +0 -0
  678. data/spec/dummy/tmp/cache/assets/test/sprockets/ab2d7ffeb120e870e5a1a5794c677a96 +0 -0
  679. data/spec/dummy/tmp/cache/assets/test/sprockets/abfe3e393258df10a8bcb8a11c508960 +0 -0
  680. data/spec/dummy/tmp/cache/assets/test/sprockets/ac3de6ba4cfffa91134b0c40d4de10cd +0 -0
  681. data/spec/dummy/tmp/cache/assets/test/sprockets/ac670360d339283f28e8a977f184ca58 +0 -0
  682. data/spec/dummy/tmp/cache/assets/test/sprockets/b226b9415eaa912975a551736bc31872 +0 -0
  683. data/spec/dummy/tmp/cache/assets/test/sprockets/b240d42f24ec24b7922625710fb78864 +0 -0
  684. data/spec/dummy/tmp/cache/assets/test/sprockets/b3afd422c761ca8b9f25fc31bcb16e57 +0 -0
  685. data/spec/dummy/tmp/cache/assets/test/sprockets/b48147ca8e8ef368bffc8eeb8ab61826 +0 -0
  686. data/spec/dummy/tmp/cache/assets/test/sprockets/b52aefb3a8aac603fa3625f3aeffba7e +0 -0
  687. data/spec/dummy/tmp/cache/assets/test/sprockets/b5faee49e35b6b3c4575df24a309a20c +0 -0
  688. data/spec/dummy/tmp/cache/assets/test/sprockets/b6a6a8ff8899ee3fba7d60061ad4134c +0 -0
  689. data/spec/dummy/tmp/cache/assets/test/sprockets/b782306a81352321745d99601bfec1bf +0 -0
  690. data/spec/dummy/tmp/cache/assets/test/sprockets/b862b8461edd4b989538d86b38dab7f5 +0 -0
  691. data/spec/dummy/tmp/cache/assets/test/sprockets/b8f823ab6507b5728a741402a500ac52 +0 -0
  692. data/spec/dummy/tmp/cache/assets/test/sprockets/b9626f562d6867b57696d079fd459916 +0 -0
  693. data/spec/dummy/tmp/cache/assets/test/sprockets/bb1f26b995fdd7b6d2ac3dbfa9ff802a +0 -0
  694. data/spec/dummy/tmp/cache/assets/test/sprockets/c00d4b3a71250a17d8817132b074c4dc +0 -0
  695. data/spec/dummy/tmp/cache/assets/test/sprockets/c7e3a48c5d8dc588e1c4de361a125c45 +0 -0
  696. data/spec/dummy/tmp/cache/assets/test/sprockets/c8f64df77ff15ad4668d336920b69c22 +0 -0
  697. data/spec/dummy/tmp/cache/assets/test/sprockets/cb08dfa48ab4ed8c6067750011bc2a56 +0 -0
  698. data/spec/dummy/tmp/cache/assets/test/sprockets/cb6c37714072edc629e4147f65fdec5e +0 -0
  699. data/spec/dummy/tmp/cache/assets/test/sprockets/ce1fd9656d7935f132f85c3a221a67ba +0 -0
  700. data/spec/dummy/tmp/cache/assets/test/sprockets/d2a6177ba2d233e33bd061d7fb9cd628 +0 -0
  701. data/spec/dummy/tmp/cache/assets/test/sprockets/d419cfae9829efa85c9f3046bcc9986a +0 -0
  702. data/spec/dummy/tmp/cache/assets/test/sprockets/d9113fba5771c9639f855bac9ed6793e +0 -0
  703. data/spec/dummy/tmp/cache/assets/test/sprockets/dbdd6f7f1a2680b7313ae9c940f9ac4c +0 -0
  704. data/spec/dummy/tmp/cache/assets/test/sprockets/dbe5b014ce69cfcb9388b1f1be0fc07d +0 -0
  705. data/spec/dummy/tmp/cache/assets/test/sprockets/dd3e2960b850367389fca0a5d8566551 +0 -0
  706. data/spec/dummy/tmp/cache/assets/test/sprockets/de9fb9c8a1f09dcebe130b9e7f687afd +0 -0
  707. data/spec/dummy/tmp/cache/assets/test/sprockets/e1fd25e6bdec3fdebdb946c0b4ba974f +0 -0
  708. data/spec/dummy/tmp/cache/assets/test/sprockets/e2965613b9e19be94c1ab92addbf9522 +0 -0
  709. data/spec/dummy/tmp/cache/assets/test/sprockets/e300050202fcd5b05c478beae48d1a37 +0 -0
  710. data/spec/dummy/tmp/cache/assets/test/sprockets/e3a0f0bf9c08dd08c7f0dfa3022bc4eb +0 -0
  711. data/spec/dummy/tmp/cache/assets/test/sprockets/e3d0b4fc93b50878108e5f7463f2050a +0 -0
  712. data/spec/dummy/tmp/cache/assets/test/sprockets/e4dff08dbc078fbf096ff221f75baf92 +0 -0
  713. data/spec/dummy/tmp/cache/assets/test/sprockets/e5da9b9993cdcfe695f57391b5b250e9 +0 -0
  714. data/spec/dummy/tmp/cache/assets/test/sprockets/ea110c82f66716dd92e22c9de7b249e8 +0 -0
  715. data/spec/dummy/tmp/cache/assets/test/sprockets/ea7294fa903cf73f2c9882de4a3118fb +0 -0
  716. data/spec/dummy/tmp/cache/assets/test/sprockets/ed4d3dc60afbf5feb638f2780a31faab +0 -0
  717. data/spec/dummy/tmp/cache/assets/test/sprockets/f14e4511cdd4a242cc068c710c7dd0d1 +0 -0
  718. data/spec/dummy/tmp/cache/assets/test/sprockets/f28611e5b61d6ec23f3a5a63a99d7d23 +0 -0
  719. data/spec/dummy/tmp/cache/assets/test/sprockets/f294fbede1b7c780bc8e68aaabab1d83 +0 -0
  720. data/spec/dummy/tmp/cache/assets/test/sprockets/f471d1843d304987efe56f013dbe46dd +0 -0
  721. data/spec/dummy/tmp/cache/assets/test/sprockets/f6593f5551b1867b389179e33c46df98 +0 -0
  722. data/spec/dummy/tmp/cache/assets/test/sprockets/f7b22e06cc0b7e9fd9008b6a16c201b6 +0 -0
  723. data/spec/dummy/tmp/cache/assets/test/sprockets/fc8dedac9592b5f0c1ba6241713bb5d1 +0 -0
  724. data/spec/dummy/tmp/cache/assets/test/sprockets/fccfd128f0c058afe6166f1a862d25a7 +0 -0
  725. data/spec/dummy/tmp/cache/assets/test/sprockets/fd01744dc6f832030742b6e0db5063d5 +0 -0
  726. data/spec/dummy/tmp/cache/assets/test/sprockets/fe0ab3d5a2b29cc3ec67e13feab046c5 +0 -0
  727. data/spec/dummy/tmp/capybara/capybara-201405011255219920091058.html +54 -0
  728. data/spec/factories/action_factories.rb +5 -0
  729. data/spec/factories/media_factories.rb +6 -0
  730. data/spec/factories/page_factories.rb +8 -0
  731. data/spec/factories/permission_factories.rb +6 -0
  732. data/spec/factories/post_factories.rb +11 -0
  733. data/spec/factories/role_factories.rb +38 -0
  734. data/spec/factories/site_factories.rb +7 -0
  735. data/spec/factories/user_factories.rb +18 -0
  736. data/spec/features/dashboard/media_spec.rb +60 -0
  737. data/spec/features/dashboard/pages_spec.rb +67 -0
  738. data/spec/features/dashboard/posts_spec.rb +68 -0
  739. data/spec/features/dashboard/sites_spec.rb +42 -0
  740. data/spec/features/dashboard/users_spec.rb +47 -0
  741. data/spec/features/pages_spec.rb +15 -0
  742. data/spec/features/posts_spec.rb +27 -0
  743. data/spec/models/page_spec.rb +8 -0
  744. data/spec/models/post_spec.rb +27 -0
  745. data/spec/models/tagging_spec.rb +28 -0
  746. data/spec/models/user_spec.rb +10 -0
  747. data/spec/models/version_spec.rb +57 -0
  748. data/spec/policies/page_policy_spec.rb +89 -0
  749. data/spec/policies/post_policy_spec.rb +89 -0
  750. data/spec/spec_helper.rb +63 -0
  751. data/spec/support/feature_macros.rb +38 -0
  752. data/spec/support/images/success-kid.jpg +0 -0
  753. data/spec/support/pundit_matcher.rb +13 -0
  754. data/spec/support/shared_db_connection.rb +9 -0
  755. data/vendor/assets/javascripts/bootstrap-wysihtml5.js +521 -0
  756. data/vendor/assets/javascripts/jquery.fileupload.js +1420 -0
  757. data/vendor/assets/javascripts/jquery.iframe-transport.js +214 -0
  758. data/vendor/assets/javascripts/jquery.ui.widget.js +530 -0
  759. data/vendor/assets/javascripts/wysihtml5.js +9521 -0
  760. data/vendor/assets/stylesheets/bootstrap-wysihtml5.css.scss +104 -0
  761. data/vendor/assets/stylesheets/bootstrap3-wysiwyg5-color.css +68 -0
  762. data/vendor/assets/stylesheets/jquery.fileupload.css +36 -0
  763. metadata +1750 -0
@@ -0,0 +1,1420 @@
1
+ /*
2
+ * jQuery File Upload Plugin 5.40.0
3
+ * https://github.com/blueimp/jQuery-File-Upload
4
+ *
5
+ * Copyright 2010, Sebastian Tschan
6
+ * https://blueimp.net
7
+ *
8
+ * Licensed under the MIT license:
9
+ * http://www.opensource.org/licenses/MIT
10
+ */
11
+
12
+ /* jshint nomen:false */
13
+ /* global define, window, document, location, Blob, FormData */
14
+
15
+ (function (factory) {
16
+ 'use strict';
17
+ if (typeof define === 'function' && define.amd) {
18
+ // Register as an anonymous AMD module:
19
+ define([
20
+ 'jquery',
21
+ 'jquery.ui.widget'
22
+ ], factory);
23
+ } else {
24
+ // Browser globals:
25
+ factory(window.jQuery);
26
+ }
27
+ }(function ($) {
28
+ 'use strict';
29
+
30
+ // Detect file input support, based on
31
+ // http://viljamis.com/blog/2012/file-upload-support-on-mobile/
32
+ $.support.fileInput = !(new RegExp(
33
+ // Handle devices which give false positives for the feature detection:
34
+ '(Android (1\\.[0156]|2\\.[01]))' +
35
+ '|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' +
36
+ '|(w(eb)?OSBrowser)|(webOS)' +
37
+ '|(Kindle/(1\\.0|2\\.[05]|3\\.0))'
38
+ ).test(window.navigator.userAgent) ||
39
+ // Feature detection for all other devices:
40
+ $('<input type="file">').prop('disabled'));
41
+
42
+ // The FileReader API is not actually used, but works as feature detection,
43
+ // as some Safari versions (5?) support XHR file uploads via the FormData API,
44
+ // but not non-multipart XHR file uploads.
45
+ // window.XMLHttpRequestUpload is not available on IE10, so we check for
46
+ // window.ProgressEvent instead to detect XHR2 file upload capability:
47
+ $.support.xhrFileUpload = !!(window.ProgressEvent && window.FileReader);
48
+ $.support.xhrFormDataFileUpload = !!window.FormData;
49
+
50
+ // Detect support for Blob slicing (required for chunked uploads):
51
+ $.support.blobSlice = window.Blob && (Blob.prototype.slice ||
52
+ Blob.prototype.webkitSlice || Blob.prototype.mozSlice);
53
+
54
+ // The fileupload widget listens for change events on file input fields defined
55
+ // via fileInput setting and paste or drop events of the given dropZone.
56
+ // In addition to the default jQuery Widget methods, the fileupload widget
57
+ // exposes the "add" and "send" methods, to add or directly send files using
58
+ // the fileupload API.
59
+ // By default, files added via file input selection, paste, drag & drop or
60
+ // "add" method are uploaded immediately, but it is possible to override
61
+ // the "add" callback option to queue file uploads.
62
+ $.widget('blueimp.fileupload', {
63
+
64
+ options: {
65
+ // The drop target element(s), by the default the complete document.
66
+ // Set to null to disable drag & drop support:
67
+ dropZone: $(document),
68
+ // The paste target element(s), by the default the complete document.
69
+ // Set to null to disable paste support:
70
+ pasteZone: $(document),
71
+ // The file input field(s), that are listened to for change events.
72
+ // If undefined, it is set to the file input fields inside
73
+ // of the widget element on plugin initialization.
74
+ // Set to null to disable the change listener.
75
+ fileInput: undefined,
76
+ // By default, the file input field is replaced with a clone after
77
+ // each input field change event. This is required for iframe transport
78
+ // queues and allows change events to be fired for the same file
79
+ // selection, but can be disabled by setting the following option to false:
80
+ replaceFileInput: true,
81
+ // The parameter name for the file form data (the request argument name).
82
+ // If undefined or empty, the name property of the file input field is
83
+ // used, or "files[]" if the file input name property is also empty,
84
+ // can be a string or an array of strings:
85
+ paramName: undefined,
86
+ // By default, each file of a selection is uploaded using an individual
87
+ // request for XHR type uploads. Set to false to upload file
88
+ // selections in one request each:
89
+ singleFileUploads: true,
90
+ // To limit the number of files uploaded with one XHR request,
91
+ // set the following option to an integer greater than 0:
92
+ limitMultiFileUploads: undefined,
93
+ // The following option limits the number of files uploaded with one
94
+ // XHR request to keep the request size under or equal to the defined
95
+ // limit in bytes:
96
+ limitMultiFileUploadSize: undefined,
97
+ // Multipart file uploads add a number of bytes to each uploaded file,
98
+ // therefore the following option adds an overhead for each file used
99
+ // in the limitMultiFileUploadSize configuration:
100
+ limitMultiFileUploadSizeOverhead: 512,
101
+ // Set the following option to true to issue all file upload requests
102
+ // in a sequential order:
103
+ sequentialUploads: false,
104
+ // To limit the number of concurrent uploads,
105
+ // set the following option to an integer greater than 0:
106
+ limitConcurrentUploads: undefined,
107
+ // Set the following option to true to force iframe transport uploads:
108
+ forceIframeTransport: false,
109
+ // Set the following option to the location of a redirect url on the
110
+ // origin server, for cross-domain iframe transport uploads:
111
+ redirect: undefined,
112
+ // The parameter name for the redirect url, sent as part of the form
113
+ // data and set to 'redirect' if this option is empty:
114
+ redirectParamName: undefined,
115
+ // Set the following option to the location of a postMessage window,
116
+ // to enable postMessage transport uploads:
117
+ postMessage: undefined,
118
+ // By default, XHR file uploads are sent as multipart/form-data.
119
+ // The iframe transport is always using multipart/form-data.
120
+ // Set to false to enable non-multipart XHR uploads:
121
+ multipart: true,
122
+ // To upload large files in smaller chunks, set the following option
123
+ // to a preferred maximum chunk size. If set to 0, null or undefined,
124
+ // or the browser does not support the required Blob API, files will
125
+ // be uploaded as a whole.
126
+ maxChunkSize: undefined,
127
+ // When a non-multipart upload or a chunked multipart upload has been
128
+ // aborted, this option can be used to resume the upload by setting
129
+ // it to the size of the already uploaded bytes. This option is most
130
+ // useful when modifying the options object inside of the "add" or
131
+ // "send" callbacks, as the options are cloned for each file upload.
132
+ uploadedBytes: undefined,
133
+ // By default, failed (abort or error) file uploads are removed from the
134
+ // global progress calculation. Set the following option to false to
135
+ // prevent recalculating the global progress data:
136
+ recalculateProgress: true,
137
+ // Interval in milliseconds to calculate and trigger progress events:
138
+ progressInterval: 100,
139
+ // Interval in milliseconds to calculate progress bitrate:
140
+ bitrateInterval: 500,
141
+ // By default, uploads are started automatically when adding files:
142
+ autoUpload: true,
143
+
144
+ // Error and info messages:
145
+ messages: {
146
+ uploadedBytes: 'Uploaded bytes exceed file size'
147
+ },
148
+
149
+ // Translation function, gets the message key to be translated
150
+ // and an object with context specific data as arguments:
151
+ i18n: function (message, context) {
152
+ message = this.messages[message] || message.toString();
153
+ if (context) {
154
+ $.each(context, function (key, value) {
155
+ message = message.replace('{' + key + '}', value);
156
+ });
157
+ }
158
+ return message;
159
+ },
160
+
161
+ // Additional form data to be sent along with the file uploads can be set
162
+ // using this option, which accepts an array of objects with name and
163
+ // value properties, a function returning such an array, a FormData
164
+ // object (for XHR file uploads), or a simple object.
165
+ // The form of the first fileInput is given as parameter to the function:
166
+ formData: function (form) {
167
+ return form.serializeArray();
168
+ },
169
+
170
+ // The add callback is invoked as soon as files are added to the fileupload
171
+ // widget (via file input selection, drag & drop, paste or add API call).
172
+ // If the singleFileUploads option is enabled, this callback will be
173
+ // called once for each file in the selection for XHR file uploads, else
174
+ // once for each file selection.
175
+ //
176
+ // The upload starts when the submit method is invoked on the data parameter.
177
+ // The data object contains a files property holding the added files
178
+ // and allows you to override plugin options as well as define ajax settings.
179
+ //
180
+ // Listeners for this callback can also be bound the following way:
181
+ // .bind('fileuploadadd', func);
182
+ //
183
+ // data.submit() returns a Promise object and allows to attach additional
184
+ // handlers using jQuery's Deferred callbacks:
185
+ // data.submit().done(func).fail(func).always(func);
186
+ add: function (e, data) {
187
+ if (e.isDefaultPrevented()) {
188
+ return false;
189
+ }
190
+ if (data.autoUpload || (data.autoUpload !== false &&
191
+ $(this).fileupload('option', 'autoUpload'))) {
192
+ data.process().done(function () {
193
+ data.submit();
194
+ });
195
+ }
196
+ },
197
+
198
+ // Other callbacks:
199
+
200
+ // Callback for the submit event of each file upload:
201
+ // submit: function (e, data) {}, // .bind('fileuploadsubmit', func);
202
+
203
+ // Callback for the start of each file upload request:
204
+ // send: function (e, data) {}, // .bind('fileuploadsend', func);
205
+
206
+ // Callback for successful uploads:
207
+ // done: function (e, data) {}, // .bind('fileuploaddone', func);
208
+
209
+ // Callback for failed (abort or error) uploads:
210
+ // fail: function (e, data) {}, // .bind('fileuploadfail', func);
211
+
212
+ // Callback for completed (success, abort or error) requests:
213
+ // always: function (e, data) {}, // .bind('fileuploadalways', func);
214
+
215
+ // Callback for upload progress events:
216
+ // progress: function (e, data) {}, // .bind('fileuploadprogress', func);
217
+
218
+ // Callback for global upload progress events:
219
+ // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func);
220
+
221
+ // Callback for uploads start, equivalent to the global ajaxStart event:
222
+ // start: function (e) {}, // .bind('fileuploadstart', func);
223
+
224
+ // Callback for uploads stop, equivalent to the global ajaxStop event:
225
+ // stop: function (e) {}, // .bind('fileuploadstop', func);
226
+
227
+ // Callback for change events of the fileInput(s):
228
+ // change: function (e, data) {}, // .bind('fileuploadchange', func);
229
+
230
+ // Callback for paste events to the pasteZone(s):
231
+ // paste: function (e, data) {}, // .bind('fileuploadpaste', func);
232
+
233
+ // Callback for drop events of the dropZone(s):
234
+ // drop: function (e, data) {}, // .bind('fileuploaddrop', func);
235
+
236
+ // Callback for dragover events of the dropZone(s):
237
+ // dragover: function (e) {}, // .bind('fileuploaddragover', func);
238
+
239
+ // Callback for the start of each chunk upload request:
240
+ // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func);
241
+
242
+ // Callback for successful chunk uploads:
243
+ // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func);
244
+
245
+ // Callback for failed (abort or error) chunk uploads:
246
+ // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func);
247
+
248
+ // Callback for completed (success, abort or error) chunk upload requests:
249
+ // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func);
250
+
251
+ // The plugin options are used as settings object for the ajax calls.
252
+ // The following are jQuery ajax settings required for the file uploads:
253
+ processData: false,
254
+ contentType: false,
255
+ cache: false
256
+ },
257
+
258
+ // A list of options that require reinitializing event listeners and/or
259
+ // special initialization code:
260
+ _specialOptions: [
261
+ 'fileInput',
262
+ 'dropZone',
263
+ 'pasteZone',
264
+ 'multipart',
265
+ 'forceIframeTransport'
266
+ ],
267
+
268
+ _blobSlice: $.support.blobSlice && function () {
269
+ var slice = this.slice || this.webkitSlice || this.mozSlice;
270
+ return slice.apply(this, arguments);
271
+ },
272
+
273
+ _BitrateTimer: function () {
274
+ this.timestamp = ((Date.now) ? Date.now() : (new Date()).getTime());
275
+ this.loaded = 0;
276
+ this.bitrate = 0;
277
+ this.getBitrate = function (now, loaded, interval) {
278
+ var timeDiff = now - this.timestamp;
279
+ if (!this.bitrate || !interval || timeDiff > interval) {
280
+ this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8;
281
+ this.loaded = loaded;
282
+ this.timestamp = now;
283
+ }
284
+ return this.bitrate;
285
+ };
286
+ },
287
+
288
+ _isXHRUpload: function (options) {
289
+ return !options.forceIframeTransport &&
290
+ ((!options.multipart && $.support.xhrFileUpload) ||
291
+ $.support.xhrFormDataFileUpload);
292
+ },
293
+
294
+ _getFormData: function (options) {
295
+ var formData;
296
+ if ($.type(options.formData) === 'function') {
297
+ return options.formData(options.form);
298
+ }
299
+ if ($.isArray(options.formData)) {
300
+ return options.formData;
301
+ }
302
+ if ($.type(options.formData) === 'object') {
303
+ formData = [];
304
+ $.each(options.formData, function (name, value) {
305
+ formData.push({name: name, value: value});
306
+ });
307
+ return formData;
308
+ }
309
+ return [];
310
+ },
311
+
312
+ _getTotal: function (files) {
313
+ var total = 0;
314
+ $.each(files, function (index, file) {
315
+ total += file.size || 1;
316
+ });
317
+ return total;
318
+ },
319
+
320
+ _initProgressObject: function (obj) {
321
+ var progress = {
322
+ loaded: 0,
323
+ total: 0,
324
+ bitrate: 0
325
+ };
326
+ if (obj._progress) {
327
+ $.extend(obj._progress, progress);
328
+ } else {
329
+ obj._progress = progress;
330
+ }
331
+ },
332
+
333
+ _initResponseObject: function (obj) {
334
+ var prop;
335
+ if (obj._response) {
336
+ for (prop in obj._response) {
337
+ if (obj._response.hasOwnProperty(prop)) {
338
+ delete obj._response[prop];
339
+ }
340
+ }
341
+ } else {
342
+ obj._response = {};
343
+ }
344
+ },
345
+
346
+ _onProgress: function (e, data) {
347
+ if (e.lengthComputable) {
348
+ var now = ((Date.now) ? Date.now() : (new Date()).getTime()),
349
+ loaded;
350
+ if (data._time && data.progressInterval &&
351
+ (now - data._time < data.progressInterval) &&
352
+ e.loaded !== e.total) {
353
+ return;
354
+ }
355
+ data._time = now;
356
+ loaded = Math.floor(
357
+ e.loaded / e.total * (data.chunkSize || data._progress.total)
358
+ ) + (data.uploadedBytes || 0);
359
+ // Add the difference from the previously loaded state
360
+ // to the global loaded counter:
361
+ this._progress.loaded += (loaded - data._progress.loaded);
362
+ this._progress.bitrate = this._bitrateTimer.getBitrate(
363
+ now,
364
+ this._progress.loaded,
365
+ data.bitrateInterval
366
+ );
367
+ data._progress.loaded = data.loaded = loaded;
368
+ data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate(
369
+ now,
370
+ loaded,
371
+ data.bitrateInterval
372
+ );
373
+ // Trigger a custom progress event with a total data property set
374
+ // to the file size(s) of the current upload and a loaded data
375
+ // property calculated accordingly:
376
+ this._trigger(
377
+ 'progress',
378
+ $.Event('progress', {delegatedEvent: e}),
379
+ data
380
+ );
381
+ // Trigger a global progress event for all current file uploads,
382
+ // including ajax calls queued for sequential file uploads:
383
+ this._trigger(
384
+ 'progressall',
385
+ $.Event('progressall', {delegatedEvent: e}),
386
+ this._progress
387
+ );
388
+ }
389
+ },
390
+
391
+ _initProgressListener: function (options) {
392
+ var that = this,
393
+ xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr();
394
+ // Accesss to the native XHR object is required to add event listeners
395
+ // for the upload progress event:
396
+ if (xhr.upload) {
397
+ $(xhr.upload).bind('progress', function (e) {
398
+ var oe = e.originalEvent;
399
+ // Make sure the progress event properties get copied over:
400
+ e.lengthComputable = oe.lengthComputable;
401
+ e.loaded = oe.loaded;
402
+ e.total = oe.total;
403
+ that._onProgress(e, options);
404
+ });
405
+ options.xhr = function () {
406
+ return xhr;
407
+ };
408
+ }
409
+ },
410
+
411
+ _isInstanceOf: function (type, obj) {
412
+ // Cross-frame instanceof check
413
+ return Object.prototype.toString.call(obj) === '[object ' + type + ']';
414
+ },
415
+
416
+ _initXHRData: function (options) {
417
+ var that = this,
418
+ formData,
419
+ file = options.files[0],
420
+ // Ignore non-multipart setting if not supported:
421
+ multipart = options.multipart || !$.support.xhrFileUpload,
422
+ paramName = $.type(options.paramName) === 'array' ?
423
+ options.paramName[0] : options.paramName;
424
+ options.headers = $.extend({}, options.headers);
425
+ if (options.contentRange) {
426
+ options.headers['Content-Range'] = options.contentRange;
427
+ }
428
+ if (!multipart || options.blob || !this._isInstanceOf('File', file)) {
429
+ options.headers['Content-Disposition'] = 'attachment; filename="' +
430
+ encodeURI(file.name) + '"';
431
+ }
432
+ if (!multipart) {
433
+ options.contentType = file.type || 'application/octet-stream';
434
+ options.data = options.blob || file;
435
+ } else if ($.support.xhrFormDataFileUpload) {
436
+ if (options.postMessage) {
437
+ // window.postMessage does not allow sending FormData
438
+ // objects, so we just add the File/Blob objects to
439
+ // the formData array and let the postMessage window
440
+ // create the FormData object out of this array:
441
+ formData = this._getFormData(options);
442
+ if (options.blob) {
443
+ formData.push({
444
+ name: paramName,
445
+ value: options.blob
446
+ });
447
+ } else {
448
+ $.each(options.files, function (index, file) {
449
+ formData.push({
450
+ name: ($.type(options.paramName) === 'array' &&
451
+ options.paramName[index]) || paramName,
452
+ value: file
453
+ });
454
+ });
455
+ }
456
+ } else {
457
+ if (that._isInstanceOf('FormData', options.formData)) {
458
+ formData = options.formData;
459
+ } else {
460
+ formData = new FormData();
461
+ $.each(this._getFormData(options), function (index, field) {
462
+ formData.append(field.name, field.value);
463
+ });
464
+ }
465
+ if (options.blob) {
466
+ formData.append(paramName, options.blob, file.name);
467
+ } else {
468
+ $.each(options.files, function (index, file) {
469
+ // This check allows the tests to run with
470
+ // dummy objects:
471
+ if (that._isInstanceOf('File', file) ||
472
+ that._isInstanceOf('Blob', file)) {
473
+ formData.append(
474
+ ($.type(options.paramName) === 'array' &&
475
+ options.paramName[index]) || paramName,
476
+ file,
477
+ file.uploadName || file.name
478
+ );
479
+ }
480
+ });
481
+ }
482
+ }
483
+ options.data = formData;
484
+ }
485
+ // Blob reference is not needed anymore, free memory:
486
+ options.blob = null;
487
+ },
488
+
489
+ _initIframeSettings: function (options) {
490
+ var targetHost = $('<a></a>').prop('href', options.url).prop('host');
491
+ // Setting the dataType to iframe enables the iframe transport:
492
+ options.dataType = 'iframe ' + (options.dataType || '');
493
+ // The iframe transport accepts a serialized array as form data:
494
+ options.formData = this._getFormData(options);
495
+ // Add redirect url to form data on cross-domain uploads:
496
+ if (options.redirect && targetHost && targetHost !== location.host) {
497
+ options.formData.push({
498
+ name: options.redirectParamName || 'redirect',
499
+ value: options.redirect
500
+ });
501
+ }
502
+ },
503
+
504
+ _initDataSettings: function (options) {
505
+ if (this._isXHRUpload(options)) {
506
+ if (!this._chunkedUpload(options, true)) {
507
+ if (!options.data) {
508
+ this._initXHRData(options);
509
+ }
510
+ this._initProgressListener(options);
511
+ }
512
+ if (options.postMessage) {
513
+ // Setting the dataType to postmessage enables the
514
+ // postMessage transport:
515
+ options.dataType = 'postmessage ' + (options.dataType || '');
516
+ }
517
+ } else {
518
+ this._initIframeSettings(options);
519
+ }
520
+ },
521
+
522
+ _getParamName: function (options) {
523
+ var fileInput = $(options.fileInput),
524
+ paramName = options.paramName;
525
+ if (!paramName) {
526
+ paramName = [];
527
+ fileInput.each(function () {
528
+ var input = $(this),
529
+ name = input.prop('name') || 'files[]',
530
+ i = (input.prop('files') || [1]).length;
531
+ while (i) {
532
+ paramName.push(name);
533
+ i -= 1;
534
+ }
535
+ });
536
+ if (!paramName.length) {
537
+ paramName = [fileInput.prop('name') || 'files[]'];
538
+ }
539
+ } else if (!$.isArray(paramName)) {
540
+ paramName = [paramName];
541
+ }
542
+ return paramName;
543
+ },
544
+
545
+ _initFormSettings: function (options) {
546
+ // Retrieve missing options from the input field and the
547
+ // associated form, if available:
548
+ if (!options.form || !options.form.length) {
549
+ options.form = $(options.fileInput.prop('form'));
550
+ // If the given file input doesn't have an associated form,
551
+ // use the default widget file input's form:
552
+ if (!options.form.length) {
553
+ options.form = $(this.options.fileInput.prop('form'));
554
+ }
555
+ }
556
+ options.paramName = this._getParamName(options);
557
+ if (!options.url) {
558
+ options.url = options.form.prop('action') || location.href;
559
+ }
560
+ // The HTTP request method must be "POST" or "PUT":
561
+ options.type = (options.type ||
562
+ ($.type(options.form.prop('method')) === 'string' &&
563
+ options.form.prop('method')) || ''
564
+ ).toUpperCase();
565
+ if (options.type !== 'POST' && options.type !== 'PUT' &&
566
+ options.type !== 'PATCH') {
567
+ options.type = 'POST';
568
+ }
569
+ if (!options.formAcceptCharset) {
570
+ options.formAcceptCharset = options.form.attr('accept-charset');
571
+ }
572
+ },
573
+
574
+ _getAJAXSettings: function (data) {
575
+ var options = $.extend({}, this.options, data);
576
+ this._initFormSettings(options);
577
+ this._initDataSettings(options);
578
+ return options;
579
+ },
580
+
581
+ // jQuery 1.6 doesn't provide .state(),
582
+ // while jQuery 1.8+ removed .isRejected() and .isResolved():
583
+ _getDeferredState: function (deferred) {
584
+ if (deferred.state) {
585
+ return deferred.state();
586
+ }
587
+ if (deferred.isResolved()) {
588
+ return 'resolved';
589
+ }
590
+ if (deferred.isRejected()) {
591
+ return 'rejected';
592
+ }
593
+ return 'pending';
594
+ },
595
+
596
+ // Maps jqXHR callbacks to the equivalent
597
+ // methods of the given Promise object:
598
+ _enhancePromise: function (promise) {
599
+ promise.success = promise.done;
600
+ promise.error = promise.fail;
601
+ promise.complete = promise.always;
602
+ return promise;
603
+ },
604
+
605
+ // Creates and returns a Promise object enhanced with
606
+ // the jqXHR methods abort, success, error and complete:
607
+ _getXHRPromise: function (resolveOrReject, context, args) {
608
+ var dfd = $.Deferred(),
609
+ promise = dfd.promise();
610
+ context = context || this.options.context || promise;
611
+ if (resolveOrReject === true) {
612
+ dfd.resolveWith(context, args);
613
+ } else if (resolveOrReject === false) {
614
+ dfd.rejectWith(context, args);
615
+ }
616
+ promise.abort = dfd.promise;
617
+ return this._enhancePromise(promise);
618
+ },
619
+
620
+ // Adds convenience methods to the data callback argument:
621
+ _addConvenienceMethods: function (e, data) {
622
+ var that = this,
623
+ getPromise = function (args) {
624
+ return $.Deferred().resolveWith(that, args).promise();
625
+ };
626
+ data.process = function (resolveFunc, rejectFunc) {
627
+ if (resolveFunc || rejectFunc) {
628
+ data._processQueue = this._processQueue =
629
+ (this._processQueue || getPromise([this])).pipe(
630
+ function () {
631
+ if (data.errorThrown) {
632
+ return $.Deferred()
633
+ .rejectWith(that, [data]).promise();
634
+ }
635
+ return getPromise(arguments);
636
+ }
637
+ ).pipe(resolveFunc, rejectFunc);
638
+ }
639
+ return this._processQueue || getPromise([this]);
640
+ };
641
+ data.submit = function () {
642
+ if (this.state() !== 'pending') {
643
+ data.jqXHR = this.jqXHR =
644
+ (that._trigger(
645
+ 'submit',
646
+ $.Event('submit', {delegatedEvent: e}),
647
+ this
648
+ ) !== false) && that._onSend(e, this);
649
+ }
650
+ return this.jqXHR || that._getXHRPromise();
651
+ };
652
+ data.abort = function () {
653
+ if (this.jqXHR) {
654
+ return this.jqXHR.abort();
655
+ }
656
+ this.errorThrown = 'abort';
657
+ that._trigger('fail', null, this);
658
+ return that._getXHRPromise(false);
659
+ };
660
+ data.state = function () {
661
+ if (this.jqXHR) {
662
+ return that._getDeferredState(this.jqXHR);
663
+ }
664
+ if (this._processQueue) {
665
+ return that._getDeferredState(this._processQueue);
666
+ }
667
+ };
668
+ data.processing = function () {
669
+ return !this.jqXHR && this._processQueue && that
670
+ ._getDeferredState(this._processQueue) === 'pending';
671
+ };
672
+ data.progress = function () {
673
+ return this._progress;
674
+ };
675
+ data.response = function () {
676
+ return this._response;
677
+ };
678
+ },
679
+
680
+ // Parses the Range header from the server response
681
+ // and returns the uploaded bytes:
682
+ _getUploadedBytes: function (jqXHR) {
683
+ var range = jqXHR.getResponseHeader('Range'),
684
+ parts = range && range.split('-'),
685
+ upperBytesPos = parts && parts.length > 1 &&
686
+ parseInt(parts[1], 10);
687
+ return upperBytesPos && upperBytesPos + 1;
688
+ },
689
+
690
+ // Uploads a file in multiple, sequential requests
691
+ // by splitting the file up in multiple blob chunks.
692
+ // If the second parameter is true, only tests if the file
693
+ // should be uploaded in chunks, but does not invoke any
694
+ // upload requests:
695
+ _chunkedUpload: function (options, testOnly) {
696
+ options.uploadedBytes = options.uploadedBytes || 0;
697
+ var that = this,
698
+ file = options.files[0],
699
+ fs = file.size,
700
+ ub = options.uploadedBytes,
701
+ mcs = options.maxChunkSize || fs,
702
+ slice = this._blobSlice,
703
+ dfd = $.Deferred(),
704
+ promise = dfd.promise(),
705
+ jqXHR,
706
+ upload;
707
+ if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) ||
708
+ options.data) {
709
+ return false;
710
+ }
711
+ if (testOnly) {
712
+ return true;
713
+ }
714
+ if (ub >= fs) {
715
+ file.error = options.i18n('uploadedBytes');
716
+ return this._getXHRPromise(
717
+ false,
718
+ options.context,
719
+ [null, 'error', file.error]
720
+ );
721
+ }
722
+ // The chunk upload method:
723
+ upload = function () {
724
+ // Clone the options object for each chunk upload:
725
+ var o = $.extend({}, options),
726
+ currentLoaded = o._progress.loaded;
727
+ o.blob = slice.call(
728
+ file,
729
+ ub,
730
+ ub + mcs,
731
+ file.type
732
+ );
733
+ // Store the current chunk size, as the blob itself
734
+ // will be dereferenced after data processing:
735
+ o.chunkSize = o.blob.size;
736
+ // Expose the chunk bytes position range:
737
+ o.contentRange = 'bytes ' + ub + '-' +
738
+ (ub + o.chunkSize - 1) + '/' + fs;
739
+ // Process the upload data (the blob and potential form data):
740
+ that._initXHRData(o);
741
+ // Add progress listeners for this chunk upload:
742
+ that._initProgressListener(o);
743
+ jqXHR = ((that._trigger('chunksend', null, o) !== false && $.ajax(o)) ||
744
+ that._getXHRPromise(false, o.context))
745
+ .done(function (result, textStatus, jqXHR) {
746
+ ub = that._getUploadedBytes(jqXHR) ||
747
+ (ub + o.chunkSize);
748
+ // Create a progress event if no final progress event
749
+ // with loaded equaling total has been triggered
750
+ // for this chunk:
751
+ if (currentLoaded + o.chunkSize - o._progress.loaded) {
752
+ that._onProgress($.Event('progress', {
753
+ lengthComputable: true,
754
+ loaded: ub - o.uploadedBytes,
755
+ total: ub - o.uploadedBytes
756
+ }), o);
757
+ }
758
+ options.uploadedBytes = o.uploadedBytes = ub;
759
+ o.result = result;
760
+ o.textStatus = textStatus;
761
+ o.jqXHR = jqXHR;
762
+ that._trigger('chunkdone', null, o);
763
+ that._trigger('chunkalways', null, o);
764
+ if (ub < fs) {
765
+ // File upload not yet complete,
766
+ // continue with the next chunk:
767
+ upload();
768
+ } else {
769
+ dfd.resolveWith(
770
+ o.context,
771
+ [result, textStatus, jqXHR]
772
+ );
773
+ }
774
+ })
775
+ .fail(function (jqXHR, textStatus, errorThrown) {
776
+ o.jqXHR = jqXHR;
777
+ o.textStatus = textStatus;
778
+ o.errorThrown = errorThrown;
779
+ that._trigger('chunkfail', null, o);
780
+ that._trigger('chunkalways', null, o);
781
+ dfd.rejectWith(
782
+ o.context,
783
+ [jqXHR, textStatus, errorThrown]
784
+ );
785
+ });
786
+ };
787
+ this._enhancePromise(promise);
788
+ promise.abort = function () {
789
+ return jqXHR.abort();
790
+ };
791
+ upload();
792
+ return promise;
793
+ },
794
+
795
+ _beforeSend: function (e, data) {
796
+ if (this._active === 0) {
797
+ // the start callback is triggered when an upload starts
798
+ // and no other uploads are currently running,
799
+ // equivalent to the global ajaxStart event:
800
+ this._trigger('start');
801
+ // Set timer for global bitrate progress calculation:
802
+ this._bitrateTimer = new this._BitrateTimer();
803
+ // Reset the global progress values:
804
+ this._progress.loaded = this._progress.total = 0;
805
+ this._progress.bitrate = 0;
806
+ }
807
+ // Make sure the container objects for the .response() and
808
+ // .progress() methods on the data object are available
809
+ // and reset to their initial state:
810
+ this._initResponseObject(data);
811
+ this._initProgressObject(data);
812
+ data._progress.loaded = data.loaded = data.uploadedBytes || 0;
813
+ data._progress.total = data.total = this._getTotal(data.files) || 1;
814
+ data._progress.bitrate = data.bitrate = 0;
815
+ this._active += 1;
816
+ // Initialize the global progress values:
817
+ this._progress.loaded += data.loaded;
818
+ this._progress.total += data.total;
819
+ },
820
+
821
+ _onDone: function (result, textStatus, jqXHR, options) {
822
+ var total = options._progress.total,
823
+ response = options._response;
824
+ if (options._progress.loaded < total) {
825
+ // Create a progress event if no final progress event
826
+ // with loaded equaling total has been triggered:
827
+ this._onProgress($.Event('progress', {
828
+ lengthComputable: true,
829
+ loaded: total,
830
+ total: total
831
+ }), options);
832
+ }
833
+ response.result = options.result = result;
834
+ response.textStatus = options.textStatus = textStatus;
835
+ response.jqXHR = options.jqXHR = jqXHR;
836
+ this._trigger('done', null, options);
837
+ },
838
+
839
+ _onFail: function (jqXHR, textStatus, errorThrown, options) {
840
+ var response = options._response;
841
+ if (options.recalculateProgress) {
842
+ // Remove the failed (error or abort) file upload from
843
+ // the global progress calculation:
844
+ this._progress.loaded -= options._progress.loaded;
845
+ this._progress.total -= options._progress.total;
846
+ }
847
+ response.jqXHR = options.jqXHR = jqXHR;
848
+ response.textStatus = options.textStatus = textStatus;
849
+ response.errorThrown = options.errorThrown = errorThrown;
850
+ this._trigger('fail', null, options);
851
+ },
852
+
853
+ _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) {
854
+ // jqXHRorResult, textStatus and jqXHRorError are added to the
855
+ // options object via done and fail callbacks
856
+ this._trigger('always', null, options);
857
+ },
858
+
859
+ _onSend: function (e, data) {
860
+ if (!data.submit) {
861
+ this._addConvenienceMethods(e, data);
862
+ }
863
+ var that = this,
864
+ jqXHR,
865
+ aborted,
866
+ slot,
867
+ pipe,
868
+ options = that._getAJAXSettings(data),
869
+ send = function () {
870
+ that._sending += 1;
871
+ // Set timer for bitrate progress calculation:
872
+ options._bitrateTimer = new that._BitrateTimer();
873
+ jqXHR = jqXHR || (
874
+ ((aborted || that._trigger(
875
+ 'send',
876
+ $.Event('send', {delegatedEvent: e}),
877
+ options
878
+ ) === false) &&
879
+ that._getXHRPromise(false, options.context, aborted)) ||
880
+ that._chunkedUpload(options) || $.ajax(options)
881
+ ).done(function (result, textStatus, jqXHR) {
882
+ that._onDone(result, textStatus, jqXHR, options);
883
+ }).fail(function (jqXHR, textStatus, errorThrown) {
884
+ that._onFail(jqXHR, textStatus, errorThrown, options);
885
+ }).always(function (jqXHRorResult, textStatus, jqXHRorError) {
886
+ that._onAlways(
887
+ jqXHRorResult,
888
+ textStatus,
889
+ jqXHRorError,
890
+ options
891
+ );
892
+ that._sending -= 1;
893
+ that._active -= 1;
894
+ if (options.limitConcurrentUploads &&
895
+ options.limitConcurrentUploads > that._sending) {
896
+ // Start the next queued upload,
897
+ // that has not been aborted:
898
+ var nextSlot = that._slots.shift();
899
+ while (nextSlot) {
900
+ if (that._getDeferredState(nextSlot) === 'pending') {
901
+ nextSlot.resolve();
902
+ break;
903
+ }
904
+ nextSlot = that._slots.shift();
905
+ }
906
+ }
907
+ if (that._active === 0) {
908
+ // The stop callback is triggered when all uploads have
909
+ // been completed, equivalent to the global ajaxStop event:
910
+ that._trigger('stop');
911
+ }
912
+ });
913
+ return jqXHR;
914
+ };
915
+ this._beforeSend(e, options);
916
+ if (this.options.sequentialUploads ||
917
+ (this.options.limitConcurrentUploads &&
918
+ this.options.limitConcurrentUploads <= this._sending)) {
919
+ if (this.options.limitConcurrentUploads > 1) {
920
+ slot = $.Deferred();
921
+ this._slots.push(slot);
922
+ pipe = slot.pipe(send);
923
+ } else {
924
+ this._sequence = this._sequence.pipe(send, send);
925
+ pipe = this._sequence;
926
+ }
927
+ // Return the piped Promise object, enhanced with an abort method,
928
+ // which is delegated to the jqXHR object of the current upload,
929
+ // and jqXHR callbacks mapped to the equivalent Promise methods:
930
+ pipe.abort = function () {
931
+ aborted = [undefined, 'abort', 'abort'];
932
+ if (!jqXHR) {
933
+ if (slot) {
934
+ slot.rejectWith(options.context, aborted);
935
+ }
936
+ return send();
937
+ }
938
+ return jqXHR.abort();
939
+ };
940
+ return this._enhancePromise(pipe);
941
+ }
942
+ return send();
943
+ },
944
+
945
+ _onAdd: function (e, data) {
946
+ var that = this,
947
+ result = true,
948
+ options = $.extend({}, this.options, data),
949
+ files = data.files,
950
+ filesLength = files.length,
951
+ limit = options.limitMultiFileUploads,
952
+ limitSize = options.limitMultiFileUploadSize,
953
+ overhead = options.limitMultiFileUploadSizeOverhead,
954
+ batchSize = 0,
955
+ paramName = this._getParamName(options),
956
+ paramNameSet,
957
+ paramNameSlice,
958
+ fileSet,
959
+ i,
960
+ j = 0;
961
+ if (limitSize && (!filesLength || files[0].size === undefined)) {
962
+ limitSize = undefined;
963
+ }
964
+ if (!(options.singleFileUploads || limit || limitSize) ||
965
+ !this._isXHRUpload(options)) {
966
+ fileSet = [files];
967
+ paramNameSet = [paramName];
968
+ } else if (!(options.singleFileUploads || limitSize) && limit) {
969
+ fileSet = [];
970
+ paramNameSet = [];
971
+ for (i = 0; i < filesLength; i += limit) {
972
+ fileSet.push(files.slice(i, i + limit));
973
+ paramNameSlice = paramName.slice(i, i + limit);
974
+ if (!paramNameSlice.length) {
975
+ paramNameSlice = paramName;
976
+ }
977
+ paramNameSet.push(paramNameSlice);
978
+ }
979
+ } else if (!options.singleFileUploads && limitSize) {
980
+ fileSet = [];
981
+ paramNameSet = [];
982
+ for (i = 0; i < filesLength; i = i + 1) {
983
+ batchSize += files[i].size + overhead;
984
+ if (i + 1 === filesLength ||
985
+ ((batchSize + files[i + 1].size + overhead) > limitSize) ||
986
+ (limit && i + 1 - j >= limit)) {
987
+ fileSet.push(files.slice(j, i + 1));
988
+ paramNameSlice = paramName.slice(j, i + 1);
989
+ if (!paramNameSlice.length) {
990
+ paramNameSlice = paramName;
991
+ }
992
+ paramNameSet.push(paramNameSlice);
993
+ j = i + 1;
994
+ batchSize = 0;
995
+ }
996
+ }
997
+ } else {
998
+ paramNameSet = paramName;
999
+ }
1000
+ data.originalFiles = files;
1001
+ $.each(fileSet || files, function (index, element) {
1002
+ var newData = $.extend({}, data);
1003
+ newData.files = fileSet ? element : [element];
1004
+ newData.paramName = paramNameSet[index];
1005
+ that._initResponseObject(newData);
1006
+ that._initProgressObject(newData);
1007
+ that._addConvenienceMethods(e, newData);
1008
+ result = that._trigger(
1009
+ 'add',
1010
+ $.Event('add', {delegatedEvent: e}),
1011
+ newData
1012
+ );
1013
+ return result;
1014
+ });
1015
+ return result;
1016
+ },
1017
+
1018
+ _replaceFileInput: function (input) {
1019
+ var inputClone = input.clone(true);
1020
+ $('<form></form>').append(inputClone)[0].reset();
1021
+ // Detaching allows to insert the fileInput on another form
1022
+ // without loosing the file input value:
1023
+ input.after(inputClone).detach();
1024
+ // Avoid memory leaks with the detached file input:
1025
+ $.cleanData(input.unbind('remove'));
1026
+ // Replace the original file input element in the fileInput
1027
+ // elements set with the clone, which has been copied including
1028
+ // event handlers:
1029
+ this.options.fileInput = this.options.fileInput.map(function (i, el) {
1030
+ if (el === input[0]) {
1031
+ return inputClone[0];
1032
+ }
1033
+ return el;
1034
+ });
1035
+ // If the widget has been initialized on the file input itself,
1036
+ // override this.element with the file input clone:
1037
+ if (input[0] === this.element[0]) {
1038
+ this.element = inputClone;
1039
+ }
1040
+ },
1041
+
1042
+ _handleFileTreeEntry: function (entry, path) {
1043
+ var that = this,
1044
+ dfd = $.Deferred(),
1045
+ errorHandler = function (e) {
1046
+ if (e && !e.entry) {
1047
+ e.entry = entry;
1048
+ }
1049
+ // Since $.when returns immediately if one
1050
+ // Deferred is rejected, we use resolve instead.
1051
+ // This allows valid files and invalid items
1052
+ // to be returned together in one set:
1053
+ dfd.resolve([e]);
1054
+ },
1055
+ dirReader;
1056
+ path = path || '';
1057
+ if (entry.isFile) {
1058
+ if (entry._file) {
1059
+ // Workaround for Chrome bug #149735
1060
+ entry._file.relativePath = path;
1061
+ dfd.resolve(entry._file);
1062
+ } else {
1063
+ entry.file(function (file) {
1064
+ file.relativePath = path;
1065
+ dfd.resolve(file);
1066
+ }, errorHandler);
1067
+ }
1068
+ } else if (entry.isDirectory) {
1069
+ dirReader = entry.createReader();
1070
+ dirReader.readEntries(function (entries) {
1071
+ that._handleFileTreeEntries(
1072
+ entries,
1073
+ path + entry.name + '/'
1074
+ ).done(function (files) {
1075
+ dfd.resolve(files);
1076
+ }).fail(errorHandler);
1077
+ }, errorHandler);
1078
+ } else {
1079
+ // Return an empy list for file system items
1080
+ // other than files or directories:
1081
+ dfd.resolve([]);
1082
+ }
1083
+ return dfd.promise();
1084
+ },
1085
+
1086
+ _handleFileTreeEntries: function (entries, path) {
1087
+ var that = this;
1088
+ return $.when.apply(
1089
+ $,
1090
+ $.map(entries, function (entry) {
1091
+ return that._handleFileTreeEntry(entry, path);
1092
+ })
1093
+ ).pipe(function () {
1094
+ return Array.prototype.concat.apply(
1095
+ [],
1096
+ arguments
1097
+ );
1098
+ });
1099
+ },
1100
+
1101
+ _getDroppedFiles: function (dataTransfer) {
1102
+ dataTransfer = dataTransfer || {};
1103
+ var items = dataTransfer.items;
1104
+ if (items && items.length && (items[0].webkitGetAsEntry ||
1105
+ items[0].getAsEntry)) {
1106
+ return this._handleFileTreeEntries(
1107
+ $.map(items, function (item) {
1108
+ var entry;
1109
+ if (item.webkitGetAsEntry) {
1110
+ entry = item.webkitGetAsEntry();
1111
+ if (entry) {
1112
+ // Workaround for Chrome bug #149735:
1113
+ entry._file = item.getAsFile();
1114
+ }
1115
+ return entry;
1116
+ }
1117
+ return item.getAsEntry();
1118
+ })
1119
+ );
1120
+ }
1121
+ return $.Deferred().resolve(
1122
+ $.makeArray(dataTransfer.files)
1123
+ ).promise();
1124
+ },
1125
+
1126
+ _getSingleFileInputFiles: function (fileInput) {
1127
+ fileInput = $(fileInput);
1128
+ var entries = fileInput.prop('webkitEntries') ||
1129
+ fileInput.prop('entries'),
1130
+ files,
1131
+ value;
1132
+ if (entries && entries.length) {
1133
+ return this._handleFileTreeEntries(entries);
1134
+ }
1135
+ files = $.makeArray(fileInput.prop('files'));
1136
+ if (!files.length) {
1137
+ value = fileInput.prop('value');
1138
+ if (!value) {
1139
+ return $.Deferred().resolve([]).promise();
1140
+ }
1141
+ // If the files property is not available, the browser does not
1142
+ // support the File API and we add a pseudo File object with
1143
+ // the input value as name with path information removed:
1144
+ files = [{name: value.replace(/^.*\\/, '')}];
1145
+ } else if (files[0].name === undefined && files[0].fileName) {
1146
+ // File normalization for Safari 4 and Firefox 3:
1147
+ $.each(files, function (index, file) {
1148
+ file.name = file.fileName;
1149
+ file.size = file.fileSize;
1150
+ });
1151
+ }
1152
+ return $.Deferred().resolve(files).promise();
1153
+ },
1154
+
1155
+ _getFileInputFiles: function (fileInput) {
1156
+ if (!(fileInput instanceof $) || fileInput.length === 1) {
1157
+ return this._getSingleFileInputFiles(fileInput);
1158
+ }
1159
+ return $.when.apply(
1160
+ $,
1161
+ $.map(fileInput, this._getSingleFileInputFiles)
1162
+ ).pipe(function () {
1163
+ return Array.prototype.concat.apply(
1164
+ [],
1165
+ arguments
1166
+ );
1167
+ });
1168
+ },
1169
+
1170
+ _onChange: function (e) {
1171
+ var that = this,
1172
+ data = {
1173
+ fileInput: $(e.target),
1174
+ form: $(e.target.form)
1175
+ };
1176
+ this._getFileInputFiles(data.fileInput).always(function (files) {
1177
+ data.files = files;
1178
+ if (that.options.replaceFileInput) {
1179
+ that._replaceFileInput(data.fileInput);
1180
+ }
1181
+ if (that._trigger(
1182
+ 'change',
1183
+ $.Event('change', {delegatedEvent: e}),
1184
+ data
1185
+ ) !== false) {
1186
+ that._onAdd(e, data);
1187
+ }
1188
+ });
1189
+ },
1190
+
1191
+ _onPaste: function (e) {
1192
+ var items = e.originalEvent && e.originalEvent.clipboardData &&
1193
+ e.originalEvent.clipboardData.items,
1194
+ data = {files: []};
1195
+ if (items && items.length) {
1196
+ $.each(items, function (index, item) {
1197
+ var file = item.getAsFile && item.getAsFile();
1198
+ if (file) {
1199
+ data.files.push(file);
1200
+ }
1201
+ });
1202
+ if (this._trigger(
1203
+ 'paste',
1204
+ $.Event('paste', {delegatedEvent: e}),
1205
+ data
1206
+ ) !== false) {
1207
+ this._onAdd(e, data);
1208
+ }
1209
+ }
1210
+ },
1211
+
1212
+ _onDrop: function (e) {
1213
+ e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;
1214
+ var that = this,
1215
+ dataTransfer = e.dataTransfer,
1216
+ data = {};
1217
+ if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {
1218
+ e.preventDefault();
1219
+ this._getDroppedFiles(dataTransfer).always(function (files) {
1220
+ data.files = files;
1221
+ if (that._trigger(
1222
+ 'drop',
1223
+ $.Event('drop', {delegatedEvent: e}),
1224
+ data
1225
+ ) !== false) {
1226
+ that._onAdd(e, data);
1227
+ }
1228
+ });
1229
+ }
1230
+ },
1231
+
1232
+ _onDragOver: function (e) {
1233
+ e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;
1234
+ var dataTransfer = e.dataTransfer;
1235
+ if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 &&
1236
+ this._trigger(
1237
+ 'dragover',
1238
+ $.Event('dragover', {delegatedEvent: e})
1239
+ ) !== false) {
1240
+ e.preventDefault();
1241
+ dataTransfer.dropEffect = 'copy';
1242
+ }
1243
+ },
1244
+
1245
+ _initEventHandlers: function () {
1246
+ if (this._isXHRUpload(this.options)) {
1247
+ this._on(this.options.dropZone, {
1248
+ dragover: this._onDragOver,
1249
+ drop: this._onDrop
1250
+ });
1251
+ this._on(this.options.pasteZone, {
1252
+ paste: this._onPaste
1253
+ });
1254
+ }
1255
+ if ($.support.fileInput) {
1256
+ this._on(this.options.fileInput, {
1257
+ change: this._onChange
1258
+ });
1259
+ }
1260
+ },
1261
+
1262
+ _destroyEventHandlers: function () {
1263
+ this._off(this.options.dropZone, 'dragover drop');
1264
+ this._off(this.options.pasteZone, 'paste');
1265
+ this._off(this.options.fileInput, 'change');
1266
+ },
1267
+
1268
+ _setOption: function (key, value) {
1269
+ var reinit = $.inArray(key, this._specialOptions) !== -1;
1270
+ if (reinit) {
1271
+ this._destroyEventHandlers();
1272
+ }
1273
+ this._super(key, value);
1274
+ if (reinit) {
1275
+ this._initSpecialOptions();
1276
+ this._initEventHandlers();
1277
+ }
1278
+ },
1279
+
1280
+ _initSpecialOptions: function () {
1281
+ var options = this.options;
1282
+ if (options.fileInput === undefined) {
1283
+ options.fileInput = this.element.is('input[type="file"]') ?
1284
+ this.element : this.element.find('input[type="file"]');
1285
+ } else if (!(options.fileInput instanceof $)) {
1286
+ options.fileInput = $(options.fileInput);
1287
+ }
1288
+ if (!(options.dropZone instanceof $)) {
1289
+ options.dropZone = $(options.dropZone);
1290
+ }
1291
+ if (!(options.pasteZone instanceof $)) {
1292
+ options.pasteZone = $(options.pasteZone);
1293
+ }
1294
+ },
1295
+
1296
+ _getRegExp: function (str) {
1297
+ var parts = str.split('/'),
1298
+ modifiers = parts.pop();
1299
+ parts.shift();
1300
+ return new RegExp(parts.join('/'), modifiers);
1301
+ },
1302
+
1303
+ _isRegExpOption: function (key, value) {
1304
+ return key !== 'url' && $.type(value) === 'string' &&
1305
+ /^\/.*\/[igm]{0,3}$/.test(value);
1306
+ },
1307
+
1308
+ _initDataAttributes: function () {
1309
+ var that = this,
1310
+ options = this.options;
1311
+ // Initialize options set via HTML5 data-attributes:
1312
+ $.each(
1313
+ $(this.element[0].cloneNode(false)).data(),
1314
+ function (key, value) {
1315
+ if (that._isRegExpOption(key, value)) {
1316
+ value = that._getRegExp(value);
1317
+ }
1318
+ options[key] = value;
1319
+ }
1320
+ );
1321
+ },
1322
+
1323
+ _create: function () {
1324
+ this._initDataAttributes();
1325
+ this._initSpecialOptions();
1326
+ this._slots = [];
1327
+ this._sequence = this._getXHRPromise(true);
1328
+ this._sending = this._active = 0;
1329
+ this._initProgressObject(this);
1330
+ this._initEventHandlers();
1331
+ },
1332
+
1333
+ // This method is exposed to the widget API and allows to query
1334
+ // the number of active uploads:
1335
+ active: function () {
1336
+ return this._active;
1337
+ },
1338
+
1339
+ // This method is exposed to the widget API and allows to query
1340
+ // the widget upload progress.
1341
+ // It returns an object with loaded, total and bitrate properties
1342
+ // for the running uploads:
1343
+ progress: function () {
1344
+ return this._progress;
1345
+ },
1346
+
1347
+ // This method is exposed to the widget API and allows adding files
1348
+ // using the fileupload API. The data parameter accepts an object which
1349
+ // must have a files property and can contain additional options:
1350
+ // .fileupload('add', {files: filesList});
1351
+ add: function (data) {
1352
+ var that = this;
1353
+ if (!data || this.options.disabled) {
1354
+ return;
1355
+ }
1356
+ if (data.fileInput && !data.files) {
1357
+ this._getFileInputFiles(data.fileInput).always(function (files) {
1358
+ data.files = files;
1359
+ that._onAdd(null, data);
1360
+ });
1361
+ } else {
1362
+ data.files = $.makeArray(data.files);
1363
+ this._onAdd(null, data);
1364
+ }
1365
+ },
1366
+
1367
+ // This method is exposed to the widget API and allows sending files
1368
+ // using the fileupload API. The data parameter accepts an object which
1369
+ // must have a files or fileInput property and can contain additional options:
1370
+ // .fileupload('send', {files: filesList});
1371
+ // The method returns a Promise object for the file upload call.
1372
+ send: function (data) {
1373
+ if (data && !this.options.disabled) {
1374
+ if (data.fileInput && !data.files) {
1375
+ var that = this,
1376
+ dfd = $.Deferred(),
1377
+ promise = dfd.promise(),
1378
+ jqXHR,
1379
+ aborted;
1380
+ promise.abort = function () {
1381
+ aborted = true;
1382
+ if (jqXHR) {
1383
+ return jqXHR.abort();
1384
+ }
1385
+ dfd.reject(null, 'abort', 'abort');
1386
+ return promise;
1387
+ };
1388
+ this._getFileInputFiles(data.fileInput).always(
1389
+ function (files) {
1390
+ if (aborted) {
1391
+ return;
1392
+ }
1393
+ if (!files.length) {
1394
+ dfd.reject();
1395
+ return;
1396
+ }
1397
+ data.files = files;
1398
+ jqXHR = that._onSend(null, data).then(
1399
+ function (result, textStatus, jqXHR) {
1400
+ dfd.resolve(result, textStatus, jqXHR);
1401
+ },
1402
+ function (jqXHR, textStatus, errorThrown) {
1403
+ dfd.reject(jqXHR, textStatus, errorThrown);
1404
+ }
1405
+ );
1406
+ }
1407
+ );
1408
+ return this._enhancePromise(promise);
1409
+ }
1410
+ data.files = $.makeArray(data.files);
1411
+ if (data.files.length) {
1412
+ return this._onSend(null, data);
1413
+ }
1414
+ }
1415
+ return this._getXHRPromise(false, data && data.context);
1416
+ }
1417
+
1418
+ });
1419
+
1420
+ }));