push_type_admin 0.1.0.beta3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.md +20 -0
  3. data/README.md +3 -0
  4. data/app/assets/images/push_type/icon-file-audio.png +0 -0
  5. data/app/assets/images/push_type/icon-file-document.png +0 -0
  6. data/app/assets/images/push_type/icon-file-video.png +0 -0
  7. data/app/assets/images/push_type/pushtype-logo.png +0 -0
  8. data/app/assets/javascripts/push_type/admin.js.coffee +74 -0
  9. data/app/assets/javascripts/push_type/asset_pipeline.js.coffee.erb +17 -0
  10. data/app/assets/javascripts/push_type/assets.js.coffee +61 -0
  11. data/app/assets/javascripts/push_type/nodes.js.coffee +60 -0
  12. data/app/assets/stylesheets/push_type/admin.scss +515 -0
  13. data/app/assets/stylesheets/push_type/foundation_and_overrides.scss +1443 -0
  14. data/app/assets/stylesheets/push_type/froala_theme.scss +373 -0
  15. data/app/controllers/push_type/admin_controller.rb +14 -0
  16. data/app/controllers/push_type/assets_controller.rb +68 -0
  17. data/app/controllers/push_type/nodes_controller.rb +93 -0
  18. data/app/controllers/push_type/users_controller.rb +73 -0
  19. data/app/helpers/push_type/admin_helper.rb +15 -0
  20. data/app/helpers/push_type/assets_helper.rb +15 -0
  21. data/app/helpers/push_type/users_helper.rb +13 -0
  22. data/app/views/kaminari/_first_page.html.haml +2 -0
  23. data/app/views/kaminari/_gap.html.haml +2 -0
  24. data/app/views/kaminari/_last_page.html.haml +2 -0
  25. data/app/views/kaminari/_next_page.html.haml +2 -0
  26. data/app/views/kaminari/_page.html.haml +2 -0
  27. data/app/views/kaminari/_paginator.html.haml +11 -0
  28. data/app/views/kaminari/_prev_page.html.haml +2 -0
  29. data/app/views/layouts/push_type/admin.html.erb +55 -0
  30. data/app/views/push_type/assets/_form.html.haml +50 -0
  31. data/app/views/push_type/assets/edit.html.haml +4 -0
  32. data/app/views/push_type/assets/index.html.haml +34 -0
  33. data/app/views/push_type/assets/new.html.haml +4 -0
  34. data/app/views/push_type/fields/_default.html.haml +2 -0
  35. data/app/views/push_type/nodes/_form_fields.html.haml +61 -0
  36. data/app/views/push_type/nodes/_meta_table.html.haml +8 -0
  37. data/app/views/push_type/nodes/_new_node_button.html.haml +17 -0
  38. data/app/views/push_type/nodes/edit.html.haml +7 -0
  39. data/app/views/push_type/nodes/index.html.haml +56 -0
  40. data/app/views/push_type/nodes/new.html.haml +11 -0
  41. data/app/views/push_type/users/_form.html.haml +30 -0
  42. data/app/views/push_type/users/_meta_table.html.haml +0 -0
  43. data/app/views/push_type/users/_user.html.haml +7 -0
  44. data/app/views/push_type/users/edit.html.haml +4 -0
  45. data/app/views/push_type/users/index.html.haml +24 -0
  46. data/app/views/push_type/users/new.html.haml +4 -0
  47. data/config/initializers/inline_error_messages.rb +7 -0
  48. data/config/initializers/kaminari_config.rb +10 -0
  49. data/config/routes.rb +16 -0
  50. data/lib/push_type/admin/engine.rb +16 -0
  51. data/lib/push_type/admin.rb +27 -0
  52. data/lib/push_type/breadcrumbs/foundation.rb +11 -0
  53. data/lib/push_type/rails/form_builder.rb +13 -0
  54. data/lib/push_type_admin.rb +1 -0
  55. data/lib/tasks/push_type_tasks.rake +4 -0
  56. data/test/controllers/push_type/assets_controller_test.rb +67 -0
  57. data/test/controllers/push_type/nodes_controller_test.rb +101 -0
  58. data/test/controllers/push_type/users_controller_test.rb +72 -0
  59. data/test/dummy/README.rdoc +28 -0
  60. data/test/dummy/Rakefile +6 -0
  61. data/test/dummy/app/assets/javascripts/application.js +16 -0
  62. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  63. data/test/dummy/app/controllers/application_controller.rb +5 -0
  64. data/test/dummy/app/helpers/application_helper.rb +2 -0
  65. data/test/dummy/app/models/page.rb +10 -0
  66. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  67. data/test/dummy/app/views/nodes/page.html.erb +3 -0
  68. data/test/dummy/bin/bundle +3 -0
  69. data/test/dummy/bin/rails +4 -0
  70. data/test/dummy/bin/rake +4 -0
  71. data/test/dummy/config/application.rb +14 -0
  72. data/test/dummy/config/boot.rb +4 -0
  73. data/test/dummy/config/database.yml +85 -0
  74. data/test/dummy/config/environment.rb +5 -0
  75. data/test/dummy/config/environments/development.rb +37 -0
  76. data/test/dummy/config/environments/production.rb +78 -0
  77. data/test/dummy/config/environments/test.rb +39 -0
  78. data/test/dummy/config/initializers/assets.rb +8 -0
  79. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  80. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  81. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  82. data/test/dummy/config/initializers/inflections.rb +16 -0
  83. data/test/dummy/config/initializers/mime_types.rb +4 -0
  84. data/test/dummy/config/initializers/push_type.rb +5 -0
  85. data/test/dummy/config/initializers/session_store.rb +3 -0
  86. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  87. data/test/dummy/config/locales/en.yml +23 -0
  88. data/test/dummy/config/routes.rb +59 -0
  89. data/test/dummy/config/secrets.yml +22 -0
  90. data/test/dummy/config.ru +4 -0
  91. data/test/dummy/db/migrate/20141205213506_create_push_type_users.push_type.rb +13 -0
  92. data/test/dummy/db/migrate/20141205213507_create_push_type_nodes.push_type.rb +25 -0
  93. data/test/dummy/db/migrate/20141205213508_create_push_type_node_hierarchies.push_type.rb +17 -0
  94. data/test/dummy/db/migrate/20141205213509_create_push_type_assets.push_type.rb +19 -0
  95. data/test/dummy/db/schema.rb +67 -0
  96. data/test/dummy/db/seeds.rb +7 -0
  97. data/test/dummy/log/test.log +2322 -0
  98. data/test/dummy/public/404.html +67 -0
  99. data/test/dummy/public/422.html +67 -0
  100. data/test/dummy/public/500.html +66 -0
  101. data/test/dummy/public/favicon.ico +0 -0
  102. data/test/dummy/public/robots.txt +5 -0
  103. data/test/dummy/tmp/cache/assets/test/sass/53cc07db53069364c4116d03ae9493d85566d502/_functions.scssc +0 -0
  104. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_accordion.scssc +0 -0
  105. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_alert-boxes.scssc +0 -0
  106. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_block-grid.scssc +0 -0
  107. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_breadcrumbs.scssc +0 -0
  108. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_button-groups.scssc +0 -0
  109. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_buttons.scssc +0 -0
  110. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_clearing.scssc +0 -0
  111. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_dropdown-buttons.scssc +0 -0
  112. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_dropdown.scssc +0 -0
  113. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_flex-video.scssc +0 -0
  114. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_forms.scssc +0 -0
  115. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_global.scssc +0 -0
  116. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_grid.scssc +0 -0
  117. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_icon-bar.scssc +0 -0
  118. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_inline-lists.scssc +0 -0
  119. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_joyride.scssc +0 -0
  120. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_keystrokes.scssc +0 -0
  121. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_labels.scssc +0 -0
  122. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_magellan.scssc +0 -0
  123. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_offcanvas.scssc +0 -0
  124. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_orbit.scssc +0 -0
  125. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_pagination.scssc +0 -0
  126. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_panels.scssc +0 -0
  127. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_pricing-tables.scssc +0 -0
  128. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_progress-bars.scssc +0 -0
  129. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_range-slider.scssc +0 -0
  130. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_reveal.scssc +0 -0
  131. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_side-nav.scssc +0 -0
  132. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_split-buttons.scssc +0 -0
  133. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_sub-nav.scssc +0 -0
  134. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_switches.scssc +0 -0
  135. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_tables.scssc +0 -0
  136. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_tabs.scssc +0 -0
  137. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_thumbs.scssc +0 -0
  138. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_tooltips.scssc +0 -0
  139. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_top-bar.scssc +0 -0
  140. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_type.scssc +0 -0
  141. data/test/dummy/tmp/cache/assets/test/sass/669496e8548de1a6ba1641898c1b30c67ab8fac2/_visibility.scssc +0 -0
  142. data/test/dummy/tmp/cache/assets/test/sass/68968d876746de0885a03aacd18ec354e154ffed/foundation-icons.scssc +0 -0
  143. data/test/dummy/tmp/cache/assets/test/sass/805c0b657f4b79d174c13bc42a4759a57d5a5484/foundation.scssc +0 -0
  144. data/test/dummy/tmp/cache/assets/test/sass/806626419a476c98acb0fcf38feea6623fb99ce0/admin.scssc +0 -0
  145. data/test/dummy/tmp/cache/assets/test/sass/806626419a476c98acb0fcf38feea6623fb99ce0/foundation_and_overrides.scssc +0 -0
  146. data/test/dummy/tmp/cache/assets/test/sass/806626419a476c98acb0fcf38feea6623fb99ce0/froala_theme.scssc +0 -0
  147. data/test/dummy/tmp/cache/assets/test/sprockets/00ae61e049df7e5570b8c57835868cfe +0 -0
  148. data/test/dummy/tmp/cache/assets/test/sprockets/042e6dec69dbf88f86f5e8c360b52bcb +0 -0
  149. data/test/dummy/tmp/cache/assets/test/sprockets/0448802b256c25a379824969bf01241e +0 -0
  150. data/test/dummy/tmp/cache/assets/test/sprockets/05f11ba90b1f59f6a65002fef96de531 +0 -0
  151. data/test/dummy/tmp/cache/assets/test/sprockets/090f2c9bc57f8e73105a98a800051354 +0 -0
  152. data/test/dummy/tmp/cache/assets/test/sprockets/09fd8b22d7c059ed78b065ffa44138a4 +0 -0
  153. data/test/dummy/tmp/cache/assets/test/sprockets/0a01f1c3288f982772ed595695292767 +0 -0
  154. data/test/dummy/tmp/cache/assets/test/sprockets/0b83e9e8467b82a0991df336697846e0 +0 -0
  155. data/test/dummy/tmp/cache/assets/test/sprockets/10a718d020e26634ffd3071d63270dd1 +0 -0
  156. data/test/dummy/tmp/cache/assets/test/sprockets/12375f1bf3d91db0a06c3fc436918949 +0 -0
  157. data/test/dummy/tmp/cache/assets/test/sprockets/12a4fbfdcb2f1ed98ebd869761bce11e +0 -0
  158. data/test/dummy/tmp/cache/assets/test/sprockets/1505f3ddd93d7be2405c81d84a45cbfb +0 -0
  159. data/test/dummy/tmp/cache/assets/test/sprockets/161b66dc0b76d65e577b5465f86cb767 +0 -0
  160. data/test/dummy/tmp/cache/assets/test/sprockets/18ee507bade4f16ba4f6a5c93f3aac22 +0 -0
  161. data/test/dummy/tmp/cache/assets/test/sprockets/1c63cb75109171c505bf1b6b3f26513b +0 -0
  162. data/test/dummy/tmp/cache/assets/test/sprockets/1da46bb361bbd7b80dc66e5737dbf2a7 +0 -0
  163. data/test/dummy/tmp/cache/assets/test/sprockets/2479bd5cbccdeac3ab4df62c2c12e8d3 +0 -0
  164. data/test/dummy/tmp/cache/assets/test/sprockets/2599cde7c63354f12928a204c42fe68b +0 -0
  165. data/test/dummy/tmp/cache/assets/test/sprockets/25b238c2ec907a80d53955a0bb81073c +0 -0
  166. data/test/dummy/tmp/cache/assets/test/sprockets/2821176477eee8de7b9581f0564d0947 +0 -0
  167. data/test/dummy/tmp/cache/assets/test/sprockets/2a00ce050c10f75691b820576ec3aefd +0 -0
  168. data/test/dummy/tmp/cache/assets/test/sprockets/2a854446f76c1902defbfa436b1e7df8 +0 -0
  169. data/test/dummy/tmp/cache/assets/test/sprockets/2c745da65bdbc8ebb88b6bce026972b9 +0 -0
  170. data/test/dummy/tmp/cache/assets/test/sprockets/2d1bc2b9dc5ee0ed5635abc31fb1bc88 +0 -0
  171. data/test/dummy/tmp/cache/assets/test/sprockets/31c57ad31a65f9a951c6d7268cdedae5 +0 -0
  172. data/test/dummy/tmp/cache/assets/test/sprockets/337d12a0890572dfec336aa11e864651 +0 -0
  173. data/test/dummy/tmp/cache/assets/test/sprockets/3a2e7d8d06318496bd7e5c6bac44adf8 +0 -0
  174. data/test/dummy/tmp/cache/assets/test/sprockets/3d4f40cd6363f1841fa7c17dcbd281ce +0 -0
  175. data/test/dummy/tmp/cache/assets/test/sprockets/47dcfb84d9a092ad939f512e1d3db43c +0 -0
  176. data/test/dummy/tmp/cache/assets/test/sprockets/48582f4afd1c515e7eb10a8fc2195deb +0 -0
  177. data/test/dummy/tmp/cache/assets/test/sprockets/4c6b223eba19a3d4009cbda20ed1ae2d +0 -0
  178. data/test/dummy/tmp/cache/assets/test/sprockets/4fc498f23125a9811434c6d5d5b43b64 +0 -0
  179. data/test/dummy/tmp/cache/assets/test/sprockets/505162da4e90217e5f52f5e8f1922a0d +0 -0
  180. data/test/dummy/tmp/cache/assets/test/sprockets/557b45e924759b342404ddfb736f95a2 +0 -0
  181. data/test/dummy/tmp/cache/assets/test/sprockets/55d58e1add1ca367e262464e83ad82cf +0 -0
  182. data/test/dummy/tmp/cache/assets/test/sprockets/55d7985953b175268932d2f7e50f64e0 +0 -0
  183. data/test/dummy/tmp/cache/assets/test/sprockets/59992ed1702654aa166f8572af80a301 +0 -0
  184. data/test/dummy/tmp/cache/assets/test/sprockets/600202d00479f08d2e69019e34d12e65 +0 -0
  185. data/test/dummy/tmp/cache/assets/test/sprockets/62462f7d0da5dfe3ae7923c7c21325c0 +0 -0
  186. data/test/dummy/tmp/cache/assets/test/sprockets/666e486cb09d9612ba03d995085ea02d +0 -0
  187. data/test/dummy/tmp/cache/assets/test/sprockets/67d67f783372c9b99e2ff84c12d38dfb +0 -0
  188. data/test/dummy/tmp/cache/assets/test/sprockets/6d21cd96abbcb6506d99fb93e8a11196 +0 -0
  189. data/test/dummy/tmp/cache/assets/test/sprockets/6e714e8b8ac03d2e562e8a71c40e00f8 +0 -0
  190. data/test/dummy/tmp/cache/assets/test/sprockets/6f2f2b2fbb1097278be40facf7aa8447 +0 -0
  191. data/test/dummy/tmp/cache/assets/test/sprockets/72e0f0b80593c7ccfaf939c504f8127f +0 -0
  192. data/test/dummy/tmp/cache/assets/test/sprockets/7326e3e660754d56c46671c7347c5e97 +0 -0
  193. data/test/dummy/tmp/cache/assets/test/sprockets/75c5663a92b2003b794d5f5d184fde44 +0 -0
  194. data/test/dummy/tmp/cache/assets/test/sprockets/7b63c613f1053bde6004342003178a0e +0 -0
  195. data/test/dummy/tmp/cache/assets/test/sprockets/7d07558d12b9bd9b9dfa778344bab4ac +0 -0
  196. data/test/dummy/tmp/cache/assets/test/sprockets/7ea9d575b03f8effb678d4dcedf3d079 +0 -0
  197. data/test/dummy/tmp/cache/assets/test/sprockets/7f0b91f5fa71c52d3cbe1f108fb7c942 +0 -0
  198. data/test/dummy/tmp/cache/assets/test/sprockets/805c63977d339feb2ea7b61e1141a32f +0 -0
  199. data/test/dummy/tmp/cache/assets/test/sprockets/81ba6a364949bd4ffe2732ae5745012d +0 -0
  200. data/test/dummy/tmp/cache/assets/test/sprockets/81e2498e0e1457dd93b47780ae28fc03 +0 -0
  201. data/test/dummy/tmp/cache/assets/test/sprockets/897553ff72f546645e24e94feec75255 +0 -0
  202. data/test/dummy/tmp/cache/assets/test/sprockets/8a34d99aaa243ebb4e60f483a5b5a817 +0 -0
  203. data/test/dummy/tmp/cache/assets/test/sprockets/8e20677e2b4bd3f063a63fcf9e673971 +0 -0
  204. data/test/dummy/tmp/cache/assets/test/sprockets/8feb3d758b7824f15b301f9dc024c3f6 +0 -0
  205. data/test/dummy/tmp/cache/assets/test/sprockets/932f699ead87a4b9910d47334ed14d60 +0 -0
  206. data/test/dummy/tmp/cache/assets/test/sprockets/959fa77a7302a3002d5fb1394575117b +0 -0
  207. data/test/dummy/tmp/cache/assets/test/sprockets/969e05674f51d3b5b500e605e0292573 +0 -0
  208. data/test/dummy/tmp/cache/assets/test/sprockets/972e71e7d6b360ef56c88716f3191aaf +0 -0
  209. data/test/dummy/tmp/cache/assets/test/sprockets/98228623f6175426b2d7964b4a921cbb +0 -0
  210. data/test/dummy/tmp/cache/assets/test/sprockets/987bf17b1a3915d5c6d95ebda01e8f49 +0 -0
  211. data/test/dummy/tmp/cache/assets/test/sprockets/9aef3ae1f0c62b895d86ab60901dd450 +0 -0
  212. data/test/dummy/tmp/cache/assets/test/sprockets/9f65b180bd79d7b67e5fb1fe8ded1383 +0 -0
  213. data/test/dummy/tmp/cache/assets/test/sprockets/a4ee671663a58ce1f1860b1e9a9d17fb +0 -0
  214. data/test/dummy/tmp/cache/assets/test/sprockets/a55e988592ebc0d8e4e4ef1244ae4da7 +0 -0
  215. data/test/dummy/tmp/cache/assets/test/sprockets/a590260912e62280bb115dd52a953b18 +0 -0
  216. data/test/dummy/tmp/cache/assets/test/sprockets/a6453a78eb0c813a0b69a12cb7c4ab2c +0 -0
  217. data/test/dummy/tmp/cache/assets/test/sprockets/a721a930039ed66bd3f092ab1e9c8de6 +0 -0
  218. data/test/dummy/tmp/cache/assets/test/sprockets/a748bad0d4f5d6e6bbdf1b340905795b +0 -0
  219. data/test/dummy/tmp/cache/assets/test/sprockets/a96494099d559bfd8cb5257e21cb196c +0 -0
  220. data/test/dummy/tmp/cache/assets/test/sprockets/a970f64c67051f35069f45d8dad113a5 +0 -0
  221. data/test/dummy/tmp/cache/assets/test/sprockets/aaa6dc2bd59e21dd14b0c86a308a1d1f +0 -0
  222. data/test/dummy/tmp/cache/assets/test/sprockets/ac1b1f0c521a6acb5833209d7b18d888 +0 -0
  223. data/test/dummy/tmp/cache/assets/test/sprockets/b24f2d6f62512f4cb11c6a2e44bf90e4 +0 -0
  224. data/test/dummy/tmp/cache/assets/test/sprockets/b28bcc6d89b692e6b74758c30e21b862 +0 -0
  225. data/test/dummy/tmp/cache/assets/test/sprockets/b3b2a83d3d7d735130f0b029e58b29b8 +0 -0
  226. data/test/dummy/tmp/cache/assets/test/sprockets/b3d0193a1439465426a4d051a161291d +0 -0
  227. data/test/dummy/tmp/cache/assets/test/sprockets/b657c356e24f45a8b92d4f4da9ff361d +0 -0
  228. data/test/dummy/tmp/cache/assets/test/sprockets/b76beafa9aef0c7a18bf63fe612ecd17 +0 -0
  229. data/test/dummy/tmp/cache/assets/test/sprockets/b771c2de3967bda011cf04e0979497cf +0 -0
  230. data/test/dummy/tmp/cache/assets/test/sprockets/b8a73c4d259957f05d45cb5d96d41ff1 +0 -0
  231. data/test/dummy/tmp/cache/assets/test/sprockets/ba87909b8d71ddaedd84c3f6c00dce72 +0 -0
  232. data/test/dummy/tmp/cache/assets/test/sprockets/badf6e6ab7c3d1cc2b180e5883005a40 +0 -0
  233. data/test/dummy/tmp/cache/assets/test/sprockets/bbfc8dec2c2cc07cf4c1708597316a77 +0 -0
  234. data/test/dummy/tmp/cache/assets/test/sprockets/bc732efa6ca399217b023bd1e04f0404 +0 -0
  235. data/test/dummy/tmp/cache/assets/test/sprockets/bd5b45287cfdac63ed7199b7982da02f +0 -0
  236. data/test/dummy/tmp/cache/assets/test/sprockets/bee4e1605077e29abd380b05b645cbb4 +0 -0
  237. data/test/dummy/tmp/cache/assets/test/sprockets/c0e7a018799e51565da4aae3cd7409b4 +0 -0
  238. data/test/dummy/tmp/cache/assets/test/sprockets/c190d0bdd188c43629f35b9f463b86af +0 -0
  239. data/test/dummy/tmp/cache/assets/test/sprockets/c2b59fd99edc4b53754f7cb4e160452f +0 -0
  240. data/test/dummy/tmp/cache/assets/test/sprockets/c42a7aac68d827f88bcc25a41cdb5591 +0 -0
  241. data/test/dummy/tmp/cache/assets/test/sprockets/c5ef052e357af6829f6c522a38916fc7 +0 -0
  242. data/test/dummy/tmp/cache/assets/test/sprockets/c705dc7fb9e60c7d39b5c23a101cd830 +0 -0
  243. data/test/dummy/tmp/cache/assets/test/sprockets/c988fd2c5c9497ccef54f79a9e444ac6 +0 -0
  244. data/test/dummy/tmp/cache/assets/test/sprockets/cb761fc7bfc4c192abf5c946f863ab1e +0 -0
  245. data/test/dummy/tmp/cache/assets/test/sprockets/ce523687d631719d872f2869d34803b0 +0 -0
  246. data/test/dummy/tmp/cache/assets/test/sprockets/d2215e57429ecae68a054210e665d787 +0 -0
  247. data/test/dummy/tmp/cache/assets/test/sprockets/d30a320df486e076298c602d428f3145 +0 -0
  248. data/test/dummy/tmp/cache/assets/test/sprockets/d3921fc37cc437f0933c4dee9d089fd8 +0 -0
  249. data/test/dummy/tmp/cache/assets/test/sprockets/d527d40cd214f965c2751831ef138ba7 +0 -0
  250. data/test/dummy/tmp/cache/assets/test/sprockets/d8daf6c8e5df881485c0e1139a275f6d +0 -0
  251. data/test/dummy/tmp/cache/assets/test/sprockets/d9e5382620928a6b4a8cd70bdac10aa3 +0 -0
  252. data/test/dummy/tmp/cache/assets/test/sprockets/dd803fd7a93619599c7e703c2b307411 +0 -0
  253. data/test/dummy/tmp/cache/assets/test/sprockets/e05796fbbc7fcdcaefdd97534f2e4030 +0 -0
  254. data/test/dummy/tmp/cache/assets/test/sprockets/e1c3eff1f3886da4c71a854d42077d10 +0 -0
  255. data/test/dummy/tmp/cache/assets/test/sprockets/e568172da8ab8581f83f98dad0a73d29 +0 -0
  256. data/test/dummy/tmp/cache/assets/test/sprockets/f02093872b151ddb0fd1074fe83ff846 +0 -0
  257. data/test/dummy/tmp/cache/assets/test/sprockets/f100237ea34e5360da23f95cca21c340 +0 -0
  258. data/test/dummy/tmp/cache/assets/test/sprockets/f25b88a46a5a3b1b179079f6c0e4039a +0 -0
  259. data/test/dummy/tmp/cache/assets/test/sprockets/f31d581aaa301ef9ef6a08edc4319c35 +0 -0
  260. data/test/dummy/tmp/cache/assets/test/sprockets/f5fcab9d313889bf6d14a05040aff5bc +0 -0
  261. data/test/dummy/tmp/cache/assets/test/sprockets/f66bf7665e75e4d537977c71a5e39a4e +0 -0
  262. data/test/dummy/tmp/cache/assets/test/sprockets/f6c61aec4cc93384f9655a7d8aba73fe +0 -0
  263. data/test/dummy/tmp/cache/assets/test/sprockets/fa7e1f9a13f606e2603a17f8e00aa32a +0 -0
  264. data/test/dummy/tmp/cache/assets/test/sprockets/fcce52ee43ecad8cb3f18fc8f13a66b7 +0 -0
  265. data/test/dummy/tmp/cache/assets/test/sprockets/fd5e59fed8301f86b74e551534fce2b2 +0 -0
  266. data/test/helpers/push_type/admin_helper_test.rb +25 -0
  267. data/test/helpers/push_type/assets_helper_test.rb +26 -0
  268. data/test/test_helper.rb +19 -0
  269. data/vendor/assets/javascripts/confirm_with_reveal.js.coffee +148 -0
  270. data/vendor/assets/javascripts/jquery.filedrop.js +568 -0
  271. data/vendor/assets/javascripts/jquery.sortable.js +81 -0
  272. data/vendor/assets/javascripts/jquery.sticky.js +170 -0
  273. metadata +724 -0
@@ -0,0 +1,568 @@
1
+ /*global jQuery:false, alert:false */
2
+
3
+ /*
4
+ * Default text - jQuery plugin for html5 dragging files from desktop to browser
5
+ *
6
+ * Author: Weixi Yen
7
+ *
8
+ * Email: [Firstname][Lastname]@gmail.com
9
+ *
10
+ * Copyright (c) 2010 Resopollution
11
+ *
12
+ * Licensed under the MIT license:
13
+ * http://www.opensource.org/licenses/mit-license.php
14
+ *
15
+ * Project home:
16
+ * http://www.github.com/weixiyen/jquery-filedrop
17
+ *
18
+ * Version: 0.1.0
19
+ *
20
+ * Features:
21
+ * Allows sending of extra parameters with file.
22
+ * Works with Firefox 3.6+
23
+ * Future-compliant with HTML5 spec (will work with Webkit browsers and IE9)
24
+ * Usage:
25
+ * See README at project homepage
26
+ *
27
+ */
28
+ ;(function($) {
29
+
30
+ jQuery.event.props.push("dataTransfer");
31
+
32
+ var default_opts = {
33
+ fallback_id: '',
34
+ url: '',
35
+ refresh: 1000,
36
+ paramname: 'userfile',
37
+ requestType: 'POST', // just in case you want to use another HTTP verb
38
+ allowedfileextensions:[],
39
+ allowedfiletypes:[],
40
+ maxfiles: 25, // Ignored if queuefiles is set > 0
41
+ maxfilesize: 1, // MB file size limit
42
+ queuefiles: 0, // Max files before queueing (for large volume uploads)
43
+ queuewait: 200, // Queue wait time if full
44
+ data: {},
45
+ headers: {},
46
+ drop: empty,
47
+ dragStart: empty,
48
+ dragEnter: empty,
49
+ dragOver: empty,
50
+ dragLeave: empty,
51
+ docEnter: empty,
52
+ docOver: empty,
53
+ docLeave: empty,
54
+ beforeEach: empty,
55
+ afterAll: empty,
56
+ rename: empty,
57
+ error: function(err, file, i, status) {
58
+ alert(err);
59
+ },
60
+ uploadStarted: empty,
61
+ uploadFinished: empty,
62
+ progressUpdated: empty,
63
+ globalProgressUpdated: empty,
64
+ speedUpdated: empty
65
+ },
66
+ errors = ["BrowserNotSupported", "TooManyFiles", "FileTooLarge", "FileTypeNotAllowed", "NotFound", "NotReadable", "AbortError", "ReadError", "FileExtensionNotAllowed"];
67
+
68
+ $.fn.filedrop = function(options) {
69
+ var opts = $.extend({}, default_opts, options),
70
+ global_progress = [],
71
+ doc_leave_timer, stop_loop = false,
72
+ files_count = 0,
73
+ files;
74
+
75
+ $('#' + opts.fallback_id).css({
76
+ display: 'none',
77
+ width: 0,
78
+ height: 0
79
+ });
80
+
81
+ this.on('drop', drop).on('dragstart', opts.dragStart).on('dragenter', dragEnter).on('dragover', dragOver).on('dragleave', dragLeave);
82
+ $(document).on('drop', docDrop).on('dragenter', docEnter).on('dragover', docOver).on('dragleave', docLeave);
83
+
84
+ this.on('click', function(e){
85
+ $('#' + opts.fallback_id).trigger(e);
86
+ });
87
+
88
+ $('#' + opts.fallback_id).change(function(e) {
89
+ opts.drop(e);
90
+ files = e.target.files;
91
+ files_count = files.length;
92
+ upload();
93
+ });
94
+
95
+ function drop(e) {
96
+ if( opts.drop.call(this, e) === false ) return false;
97
+ if(!e.dataTransfer)
98
+ return;
99
+ files = e.dataTransfer.files;
100
+ if (files === null || files === undefined || files.length === 0) {
101
+ opts.error(errors[0]);
102
+ return false;
103
+ }
104
+ files_count = files.length;
105
+ upload();
106
+ e.preventDefault();
107
+ return false;
108
+ }
109
+
110
+ function getBuilder(filename, filedata, mime, boundary) {
111
+ var dashdash = '--',
112
+ crlf = '\r\n',
113
+ builder = '',
114
+ paramname = opts.paramname;
115
+
116
+ if (opts.data) {
117
+ var params = $.param(opts.data).replace(/\+/g, '%20').split(/&/);
118
+
119
+ $.each(params, function() {
120
+ var pair = this.split("=", 2),
121
+ name = decodeURIComponent(pair[0]),
122
+ val = decodeURIComponent(pair[1]);
123
+
124
+ if (pair.length !== 2) {
125
+ return;
126
+ }
127
+
128
+ builder += dashdash;
129
+ builder += boundary;
130
+ builder += crlf;
131
+ builder += 'Content-Disposition: form-data; name="' + name + '"';
132
+ builder += crlf;
133
+ builder += crlf;
134
+ builder += val;
135
+ builder += crlf;
136
+ });
137
+ }
138
+
139
+ if (jQuery.isFunction(paramname)){
140
+ paramname = paramname(filename);
141
+ }
142
+
143
+ builder += dashdash;
144
+ builder += boundary;
145
+ builder += crlf;
146
+ builder += 'Content-Disposition: form-data; name="' + (paramname||"") + '"';
147
+ builder += '; filename="' + encodeURIComponent(filename) + '"';
148
+ builder += crlf;
149
+
150
+ builder += 'Content-Type: ' + mime;
151
+ builder += crlf;
152
+ builder += crlf;
153
+
154
+ builder += filedata;
155
+ builder += crlf;
156
+
157
+ builder += dashdash;
158
+ builder += boundary;
159
+ builder += dashdash;
160
+ builder += crlf;
161
+ return builder;
162
+ }
163
+
164
+ function progress(e) {
165
+ if (e.lengthComputable) {
166
+ var percentage = Math.round((e.loaded * 100) / e.total);
167
+ if (this.currentProgress !== percentage) {
168
+
169
+ this.currentProgress = percentage;
170
+ opts.progressUpdated(this.index, this.file, this.currentProgress);
171
+
172
+ global_progress[this.global_progress_index] = this.currentProgress;
173
+ globalProgress();
174
+
175
+ var elapsed = new Date().getTime();
176
+ var diffTime = elapsed - this.currentStart;
177
+ if (diffTime >= opts.refresh) {
178
+ var diffData = e.loaded - this.startData;
179
+ var speed = diffData / diffTime; // KB per second
180
+ opts.speedUpdated(this.index, this.file, speed);
181
+ this.startData = e.loaded;
182
+ this.currentStart = elapsed;
183
+ }
184
+ }
185
+ }
186
+ }
187
+
188
+ function globalProgress() {
189
+ if (global_progress.length === 0) {
190
+ return;
191
+ }
192
+
193
+ var total = 0, index;
194
+ for (index in global_progress) {
195
+ if(global_progress.hasOwnProperty(index)) {
196
+ total = total + global_progress[index];
197
+ }
198
+ }
199
+
200
+ opts.globalProgressUpdated(Math.round(total / global_progress.length));
201
+ }
202
+
203
+ // Respond to an upload
204
+ function upload() {
205
+ stop_loop = false;
206
+
207
+ if (!files) {
208
+ opts.error(errors[0]);
209
+ return false;
210
+ }
211
+
212
+ if (opts.allowedfiletypes.push && opts.allowedfiletypes.length) {
213
+ for(var fileIndex = files.length;fileIndex--;) {
214
+ if(!files[fileIndex].type || $.inArray(files[fileIndex].type, opts.allowedfiletypes) < 0) {
215
+ opts.error(errors[3], files[fileIndex]);
216
+ return false;
217
+ }
218
+ }
219
+ }
220
+
221
+ if (opts.allowedfileextensions.push && opts.allowedfileextensions.length) {
222
+ for(var fileIndex = files.length;fileIndex--;) {
223
+ var allowedextension = false;
224
+ for (i=0;i<opts.allowedfileextensions.length;i++){
225
+ if (files[fileIndex].name.substr(files[fileIndex].name.length-opts.allowedfileextensions[i].length).toLowerCase()
226
+ == opts.allowedfileextensions[i].toLowerCase()
227
+ ) {
228
+ allowedextension = true;
229
+ }
230
+ }
231
+ if (!allowedextension){
232
+ opts.error(errors[8], files[fileIndex]);
233
+ return false;
234
+ }
235
+ }
236
+ }
237
+
238
+ var filesDone = 0,
239
+ filesRejected = 0;
240
+
241
+ if (files_count > opts.maxfiles && opts.queuefiles === 0) {
242
+ opts.error(errors[1]);
243
+ return false;
244
+ }
245
+
246
+ // Define queues to manage upload process
247
+ var workQueue = [];
248
+ var processingQueue = [];
249
+ var doneQueue = [];
250
+
251
+ // Add everything to the workQueue
252
+ for (var i = 0; i < files_count; i++) {
253
+ workQueue.push(i);
254
+ }
255
+
256
+ // Helper function to enable pause of processing to wait
257
+ // for in process queue to complete
258
+ var pause = function(timeout) {
259
+ setTimeout(process, timeout);
260
+ return;
261
+ };
262
+
263
+ // Process an upload, recursive
264
+ var process = function() {
265
+
266
+ var fileIndex;
267
+
268
+ if (stop_loop) {
269
+ return false;
270
+ }
271
+
272
+ // Check to see if are in queue mode
273
+ if (opts.queuefiles > 0 && processingQueue.length >= opts.queuefiles) {
274
+ return pause(opts.queuewait);
275
+ } else {
276
+ // Take first thing off work queue
277
+ fileIndex = workQueue[0];
278
+ workQueue.splice(0, 1);
279
+
280
+ // Add to processing queue
281
+ processingQueue.push(fileIndex);
282
+ }
283
+
284
+ try {
285
+ if (beforeEach(files[fileIndex]) !== false) {
286
+ if (fileIndex === files_count) {
287
+ return;
288
+ }
289
+ var reader = new FileReader(),
290
+ max_file_size = 1048576 * opts.maxfilesize;
291
+
292
+ reader.index = fileIndex;
293
+ if (files[fileIndex].size > max_file_size) {
294
+ opts.error(errors[2], files[fileIndex], fileIndex);
295
+ // Remove from queue
296
+ processingQueue.forEach(function(value, key) {
297
+ if (value === fileIndex) {
298
+ processingQueue.splice(key, 1);
299
+ }
300
+ });
301
+ filesRejected++;
302
+ return true;
303
+ }
304
+
305
+ reader.onerror = function(e) {
306
+ switch(e.target.error.code) {
307
+ case e.target.error.NOT_FOUND_ERR:
308
+ opts.error(errors[4]);
309
+ return false;
310
+ case e.target.error.NOT_READABLE_ERR:
311
+ opts.error(errors[5]);
312
+ return false;
313
+ case e.target.error.ABORT_ERR:
314
+ opts.error(errors[6]);
315
+ return false;
316
+ default:
317
+ opts.error(errors[7]);
318
+ return false;
319
+ };
320
+ };
321
+
322
+ reader.onloadend = !opts.beforeSend ? send : function (e) {
323
+ opts.beforeSend(files[fileIndex], fileIndex, function () { send(e); });
324
+ };
325
+
326
+ reader.readAsDataURL(files[fileIndex]);
327
+
328
+ } else {
329
+ filesRejected++;
330
+ }
331
+ } catch (err) {
332
+ // Remove from queue
333
+ processingQueue.forEach(function(value, key) {
334
+ if (value === fileIndex) {
335
+ processingQueue.splice(key, 1);
336
+ }
337
+ });
338
+ opts.error(errors[0]);
339
+ return false;
340
+ }
341
+
342
+ // If we still have work to do,
343
+ if (workQueue.length > 0) {
344
+ process();
345
+ }
346
+ };
347
+
348
+ var send = function(e) {
349
+
350
+ var fileIndex = (e.srcElement || e.target).index;
351
+
352
+ // Sometimes the index is not attached to the
353
+ // event object. Find it by size. Hack for sure.
354
+ if (e.target.index === undefined) {
355
+ e.target.index = getIndexBySize(e.total);
356
+ }
357
+
358
+ var xhr = new XMLHttpRequest(),
359
+ upload = xhr.upload,
360
+ file = files[e.target.index],
361
+ index = e.target.index,
362
+ start_time = new Date().getTime(),
363
+ boundary = '------multipartformboundary' + (new Date()).getTime(),
364
+ global_progress_index = global_progress.length,
365
+ builder,
366
+ newName = rename(file.name),
367
+ mime = file.type;
368
+
369
+ if (opts.withCredentials) {
370
+ xhr.withCredentials = opts.withCredentials;
371
+ }
372
+
373
+ var data = atob(e.target.result.split(',')[1]);
374
+ if (typeof newName === "string") {
375
+ builder = getBuilder(newName, data, mime, boundary);
376
+ } else {
377
+ builder = getBuilder(file.name, data, mime, boundary);
378
+ }
379
+
380
+ upload.index = index;
381
+ upload.file = file;
382
+ upload.downloadStartTime = start_time;
383
+ upload.currentStart = start_time;
384
+ upload.currentProgress = 0;
385
+ upload.global_progress_index = global_progress_index;
386
+ upload.startData = 0;
387
+ upload.addEventListener("progress", progress, false);
388
+
389
+ // Allow url to be a method
390
+ if (jQuery.isFunction(opts.url)) {
391
+ xhr.open(opts.requestType, opts.url(), true);
392
+ } else {
393
+ xhr.open(opts.requestType, opts.url, true);
394
+ }
395
+
396
+ xhr.setRequestHeader('content-type', 'multipart/form-data; boundary=' + boundary);
397
+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
398
+
399
+ // Add headers
400
+ $.each(opts.headers, function(k, v) {
401
+ xhr.setRequestHeader(k, v);
402
+ });
403
+
404
+ if(!xhr.sendAsBinary){
405
+ xhr.sendAsBinary = function(datastr) {
406
+ function byteValue(x) {
407
+ return x.charCodeAt(0) & 0xff;
408
+ }
409
+ var ords = Array.prototype.map.call(datastr, byteValue);
410
+ var ui8a = new Uint8Array(ords);
411
+ this.send(ui8a.buffer);
412
+ }
413
+ }
414
+
415
+ xhr.sendAsBinary(builder);
416
+
417
+ global_progress[global_progress_index] = 0;
418
+ globalProgress();
419
+
420
+ opts.uploadStarted(index, file, files_count);
421
+
422
+ xhr.onload = function() {
423
+ var serverResponse = null;
424
+
425
+ if (xhr.responseText) {
426
+ try {
427
+ serverResponse = jQuery.parseJSON(xhr.responseText);
428
+ }
429
+ catch (e) {
430
+ serverResponse = xhr.responseText;
431
+ }
432
+ }
433
+
434
+ var now = new Date().getTime(),
435
+ timeDiff = now - start_time,
436
+ result = opts.uploadFinished(index, file, serverResponse, timeDiff, xhr);
437
+ filesDone++;
438
+
439
+ // Remove from processing queue
440
+ processingQueue.forEach(function(value, key) {
441
+ if (value === fileIndex) {
442
+ processingQueue.splice(key, 1);
443
+ }
444
+ });
445
+
446
+ // Add to donequeue
447
+ doneQueue.push(fileIndex);
448
+
449
+ // Make sure the global progress is updated
450
+ global_progress[global_progress_index] = 100;
451
+ globalProgress();
452
+
453
+ if (filesDone === (files_count - filesRejected)) {
454
+ afterAll();
455
+ }
456
+ if (result === false) {
457
+ stop_loop = true;
458
+ }
459
+
460
+
461
+ // Pass any errors to the error option
462
+ if (xhr.status < 200 || xhr.status > 299) {
463
+ opts.error(xhr.statusText, file, fileIndex, xhr.status);
464
+ }
465
+ };
466
+ };
467
+
468
+ // Initiate the processing loop
469
+ process();
470
+ }
471
+
472
+ function getIndexBySize(size) {
473
+ for (var i = 0; i < files_count; i++) {
474
+ if (files[i].size === size) {
475
+ return i;
476
+ }
477
+ }
478
+
479
+ return undefined;
480
+ }
481
+
482
+ function rename(name) {
483
+ return opts.rename(name);
484
+ }
485
+
486
+ function beforeEach(file) {
487
+ return opts.beforeEach(file);
488
+ }
489
+
490
+ function afterAll() {
491
+ return opts.afterAll();
492
+ }
493
+
494
+ function dragEnter(e) {
495
+ clearTimeout(doc_leave_timer);
496
+ e.preventDefault();
497
+ opts.dragEnter.call(this, e);
498
+ }
499
+
500
+ function dragOver(e) {
501
+ clearTimeout(doc_leave_timer);
502
+ e.preventDefault();
503
+ opts.docOver.call(this, e);
504
+ opts.dragOver.call(this, e);
505
+ }
506
+
507
+ function dragLeave(e) {
508
+ clearTimeout(doc_leave_timer);
509
+ opts.dragLeave.call(this, e);
510
+ e.stopPropagation();
511
+ }
512
+
513
+ function docDrop(e) {
514
+ e.preventDefault();
515
+ opts.docLeave.call(this, e);
516
+ return false;
517
+ }
518
+
519
+ function docEnter(e) {
520
+ clearTimeout(doc_leave_timer);
521
+ e.preventDefault();
522
+ opts.docEnter.call(this, e);
523
+ return false;
524
+ }
525
+
526
+ function docOver(e) {
527
+ clearTimeout(doc_leave_timer);
528
+ e.preventDefault();
529
+ opts.docOver.call(this, e);
530
+ return false;
531
+ }
532
+
533
+ function docLeave(e) {
534
+ doc_leave_timer = setTimeout((function(_this) {
535
+ return function() {
536
+ opts.docLeave.call(_this, e);
537
+ };
538
+ })(this), 200);
539
+ }
540
+
541
+ return this;
542
+ };
543
+
544
+ function empty() {}
545
+
546
+ try {
547
+ if (XMLHttpRequest.prototype.sendAsBinary) {
548
+ return;
549
+ }
550
+ XMLHttpRequest.prototype.sendAsBinary = function(datastr) {
551
+ function byteValue(x) {
552
+ return x.charCodeAt(0) & 0xff;
553
+ }
554
+ var ords = Array.prototype.map.call(datastr, byteValue);
555
+ var ui8a = new Uint8Array(ords);
556
+
557
+ // Not pretty: Chrome 22 deprecated sending ArrayBuffer, moving instead
558
+ // to sending ArrayBufferView. Sadly, no proper way to detect this
559
+ // functionality has been discovered. Happily, Chrome 22 also introduced
560
+ // the base ArrayBufferView class, not present in Chrome 21.
561
+ if ('ArrayBufferView' in window)
562
+ this.send(ui8a);
563
+ else
564
+ this.send(ui8a.buffer);
565
+ };
566
+ } catch (e) {}
567
+
568
+ })(jQuery);
@@ -0,0 +1,81 @@
1
+ /*
2
+ * HTML5 Sortable jQuery Plugin
3
+ * http://farhadi.ir/projects/html5sortable
4
+ *
5
+ * Copyright 2012, Ali Farhadi
6
+ * Released under the MIT license.
7
+ */
8
+ (function($) {
9
+ var dragging, placeholders = $();
10
+ $.fn.sortable = function(options) {
11
+ var method = String(options);
12
+ options = $.extend({
13
+ connectWith: false
14
+ }, options);
15
+ return this.each(function() {
16
+ if (/^enable|disable|destroy$/.test(method)) {
17
+ var items = $(this).children($(this).data('items')).attr('draggable', method == 'enable');
18
+ if (method == 'destroy') {
19
+ items.add(this).removeData('connectWith items')
20
+ .off('dragstart.h5s dragend.h5s selectstart.h5s dragover.h5s dragenter.h5s drop.h5s');
21
+ }
22
+ return;
23
+ }
24
+ var isHandle, index, items = $(this).children(options.items);
25
+ var placeholder = $('<' + (/^ul|ol$/i.test(this.tagName) ? 'li' : 'div') + ' class="sortable-placeholder">');
26
+ items.find(options.handle).mousedown(function() {
27
+ isHandle = true;
28
+ }).mouseup(function() {
29
+ isHandle = false;
30
+ });
31
+ $(this).data('items', options.items)
32
+ placeholders = placeholders.add(placeholder);
33
+ if (options.connectWith) {
34
+ $(options.connectWith).add(this).data('connectWith', options.connectWith);
35
+ }
36
+ items.attr('draggable', 'true').on('dragstart.h5s', function(e) {
37
+ if (options.handle && !isHandle) {
38
+ return false;
39
+ }
40
+ isHandle = false;
41
+ var dt = e.originalEvent.dataTransfer;
42
+ dt.effectAllowed = 'move';
43
+ dt.setData('Text', 'dummy');
44
+ index = (dragging = $(this)).addClass('sortable-dragging').index();
45
+ }).on('dragend.h5s', function() {
46
+ dragging.removeClass('sortable-dragging').show();
47
+ placeholders.detach();
48
+ if (index != dragging.index()) {
49
+ items.parent().trigger('sortupdate', {item: dragging});
50
+ }
51
+ dragging = null;
52
+ }).not('a[href], img').on('selectstart.h5s', function() {
53
+ this.dragDrop && this.dragDrop();
54
+ return false;
55
+ }).end().add([this, placeholder]).on('dragover.h5s dragenter.h5s drop.h5s', function(e) {
56
+ if (!items.is(dragging) && options.connectWith !== $(dragging).parent().data('connectWith')) {
57
+ return true;
58
+ }
59
+ if (e.type == 'drop') {
60
+ e.stopPropagation();
61
+ placeholders.filter(':visible').after(dragging);
62
+ return false;
63
+ }
64
+ e.preventDefault();
65
+ e.originalEvent.dataTransfer.dropEffect = 'move';
66
+ if (items.is(this)) {
67
+ if (options.forcePlaceholderSize) {
68
+ placeholder.height(dragging.outerHeight());
69
+ }
70
+ dragging.hide();
71
+ $(this)[placeholder.index() < $(this).index() ? 'after' : 'before'](placeholder);
72
+ placeholders.not(placeholder).detach();
73
+ } else if (!placeholders.is(this) && !$(this).children(options.items).length) {
74
+ placeholders.detach();
75
+ $(this).append(placeholder);
76
+ }
77
+ return false;
78
+ });
79
+ });
80
+ };
81
+ })(jQuery);