alchemy_cms 2.1.12 → 2.2.rc1

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 (405) hide show
  1. data/.travis.yml +1 -1
  2. data/Gemfile +20 -16
  3. data/README.md +11 -7
  4. data/alchemy_cms.gemspec +31 -29
  5. data/app/assets/javascripts/alchemy/alchemy.base.js +234 -233
  6. data/app/assets/javascripts/alchemy/alchemy.buttons.js +26 -26
  7. data/app/assets/javascripts/alchemy/alchemy.datepicker.js +32 -32
  8. data/app/assets/javascripts/alchemy/alchemy.dirty.js +78 -78
  9. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js +103 -103
  10. data/app/assets/javascripts/alchemy/alchemy.element_editor_selector.js +84 -84
  11. data/app/assets/javascripts/alchemy/alchemy.elements_window.js +88 -88
  12. data/app/assets/javascripts/alchemy/alchemy.file_progress.js +92 -0
  13. data/app/assets/javascripts/alchemy/alchemy.growler.js +23 -23
  14. data/app/assets/javascripts/alchemy/alchemy.html5.js +23 -0
  15. data/app/assets/javascripts/alchemy/alchemy.image_cropper.js +53 -52
  16. data/app/assets/javascripts/alchemy/alchemy.jquery_loader.js +33 -30
  17. data/app/assets/javascripts/alchemy/alchemy.js +2 -0
  18. data/app/assets/javascripts/alchemy/alchemy.js_extensions.js +14 -14
  19. data/app/assets/javascripts/alchemy/alchemy.link_overlay.js.coffee +181 -0
  20. data/app/assets/javascripts/alchemy/alchemy.menubar.js +48 -48
  21. data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +39 -39
  22. data/app/assets/javascripts/alchemy/alchemy.preview.js +81 -83
  23. data/app/assets/javascripts/alchemy/alchemy.preview_window.js +86 -86
  24. data/app/assets/javascripts/alchemy/alchemy.routes.js.erb +23 -23
  25. data/app/assets/javascripts/alchemy/alchemy.swf_upload.js +208 -353
  26. data/app/assets/javascripts/alchemy/alchemy.uploader.js +279 -0
  27. data/app/assets/javascripts/alchemy/alchemy.windows.js +268 -268
  28. data/app/assets/javascripts/tiny_mce/plugins/alchemy_link/editor_plugin.js +42 -42
  29. data/app/assets/stylesheets/alchemy/_defaults.scss +89 -89
  30. data/app/assets/stylesheets/alchemy/base.css.scss +790 -804
  31. data/app/assets/stylesheets/alchemy/buttons.css.scss +263 -264
  32. data/app/assets/stylesheets/alchemy/dashboard.css.scss +66 -66
  33. data/app/assets/stylesheets/alchemy/elements.css.scss +575 -564
  34. data/app/assets/stylesheets/alchemy/flash.css.scss +45 -45
  35. data/app/assets/stylesheets/alchemy/frame.css.scss +262 -262
  36. data/app/assets/stylesheets/alchemy/icons.css.scss +86 -86
  37. data/app/assets/stylesheets/alchemy/jquery-ui.alchemy.css.scss +706 -707
  38. data/app/assets/stylesheets/alchemy/jquery.Jcrop.css.scss +46 -27
  39. data/app/assets/stylesheets/alchemy/jquery.sb.css.scss +107 -107
  40. data/app/assets/stylesheets/alchemy/login.css.scss +40 -38
  41. data/app/assets/stylesheets/alchemy/menubar.css.scss +84 -82
  42. data/app/assets/stylesheets/alchemy/modules.css.scss +9 -9
  43. data/app/assets/stylesheets/alchemy/pagination.css.scss +49 -49
  44. data/app/assets/stylesheets/alchemy/print.css +7 -7
  45. data/app/assets/stylesheets/alchemy/sitemap.css.scss +185 -154
  46. data/app/assets/stylesheets/alchemy/standard_set.css +205 -206
  47. data/app/assets/stylesheets/alchemy/tables.css.scss +94 -60
  48. data/app/assets/stylesheets/alchemy/tinymce_content.css.scss +34 -34
  49. data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +177 -177
  50. data/app/assets/stylesheets/alchemy/upload.css.scss +68 -45
  51. data/app/assets/stylesheets/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.scss +222 -221
  52. data/app/controllers/alchemy/admin/attachments_controller.rb +100 -100
  53. data/app/controllers/alchemy/admin/base_controller.rb +116 -116
  54. data/app/controllers/alchemy/admin/clipboard_controller.rb +44 -44
  55. data/app/controllers/alchemy/admin/contents_controller.rb +55 -55
  56. data/app/controllers/alchemy/admin/dashboard_controller.rb +12 -11
  57. data/app/controllers/alchemy/admin/elements_controller.rb +109 -109
  58. data/app/controllers/alchemy/admin/essence_audios_controller.rb +8 -8
  59. data/app/controllers/alchemy/admin/essence_files_controller.rb +20 -20
  60. data/app/controllers/alchemy/admin/essence_flashes_controller.rb +8 -8
  61. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +81 -81
  62. data/app/controllers/alchemy/admin/essence_videos_controller.rb +8 -8
  63. data/app/controllers/alchemy/admin/languages_controller.rb +16 -4
  64. data/app/controllers/alchemy/admin/layoutpages_controller.rb +9 -9
  65. data/app/controllers/alchemy/admin/pages_controller.rb +249 -248
  66. data/app/controllers/alchemy/admin/pictures_controller.rb +105 -105
  67. data/app/controllers/alchemy/admin/resources_controller.rb +111 -166
  68. data/app/controllers/alchemy/admin/trash_controller.rb +18 -18
  69. data/app/controllers/alchemy/admin/users_controller.rb +69 -69
  70. data/app/controllers/alchemy/attachments_controller.rb +27 -27
  71. data/app/controllers/alchemy/base_controller.rb +159 -155
  72. data/app/controllers/alchemy/elements_controller.rb +16 -16
  73. data/app/controllers/alchemy/messages_controller.rb +59 -59
  74. data/app/controllers/alchemy/pages_controller.rb +194 -198
  75. data/app/controllers/alchemy/pictures_controller.rb +57 -57
  76. data/app/controllers/alchemy/user_sessions_controller.rb +70 -70
  77. data/app/helpers/alchemy/admin/attachments_helper.rb +7 -7
  78. data/app/helpers/alchemy/admin/base_helper.rb +425 -425
  79. data/app/helpers/alchemy/admin/contents_helper.rb +72 -72
  80. data/app/helpers/alchemy/admin/elements_helper.rb +108 -107
  81. data/app/helpers/alchemy/admin/essences_helper.rb +108 -108
  82. data/app/helpers/alchemy/admin/pages_helper.rb +42 -42
  83. data/app/helpers/alchemy/admin/pictures_helper.rb +26 -26
  84. data/app/helpers/alchemy/base_helper.rb +90 -90
  85. data/app/helpers/alchemy/elements_helper.rb +167 -168
  86. data/app/helpers/alchemy/essences_helper.rb +133 -133
  87. data/app/helpers/alchemy/pages_helper.rb +515 -526
  88. data/app/helpers/alchemy/pictures_helper.rb +19 -0
  89. data/app/mailers/alchemy/messages.rb +13 -13
  90. data/app/mailers/alchemy/notifications.rb +19 -19
  91. data/app/models/alchemy.rb +3 -3
  92. data/app/models/alchemy/attachment.rb +52 -78
  93. data/app/models/alchemy/cell.rb +48 -48
  94. data/app/models/alchemy/content.rb +196 -196
  95. data/app/models/alchemy/element.rb +500 -490
  96. data/app/models/alchemy/essence_audio.rb +7 -7
  97. data/app/models/alchemy/essence_date.rb +10 -10
  98. data/app/models/alchemy/essence_file.rb +7 -7
  99. data/app/models/alchemy/essence_flash.rb +6 -6
  100. data/app/models/alchemy/essence_html.rb +9 -9
  101. data/app/models/alchemy/essence_picture.rb +17 -17
  102. data/app/models/alchemy/essence_richtext.rb +53 -53
  103. data/app/models/alchemy/essence_text.rb +21 -21
  104. data/app/models/alchemy/essence_video.rb +7 -7
  105. data/app/models/alchemy/folded_page.rb +3 -3
  106. data/app/models/alchemy/language.rb +91 -91
  107. data/app/models/alchemy/language/code.rb +14 -14
  108. data/app/models/alchemy/message.rb +48 -45
  109. data/app/models/alchemy/page.rb +555 -558
  110. data/app/models/alchemy/picture.rb +100 -99
  111. data/app/models/alchemy/user.rb +76 -74
  112. data/app/models/alchemy/user_session.rb +8 -8
  113. data/app/sweepers/alchemy/content_sweeper.rb +15 -15
  114. data/app/sweepers/alchemy/pages_sweeper.rb +50 -50
  115. data/app/sweepers/alchemy/pictures_sweeper.rb +14 -14
  116. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +23 -23
  117. data/app/views/alchemy/admin/attachments/_attachment.html.erb +56 -56
  118. data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +15 -15
  119. data/app/views/alchemy/admin/attachments/_files_list.html.erb +16 -16
  120. data/app/views/alchemy/admin/attachments/create.js.erb +2 -2
  121. data/app/views/alchemy/admin/attachments/destroy.js.erb +3 -3
  122. data/app/views/alchemy/admin/attachments/edit.html.erb +10 -10
  123. data/app/views/alchemy/admin/attachments/index.html.erb +14 -14
  124. data/app/views/alchemy/admin/attachments/new.html.erb +9 -9
  125. data/app/views/alchemy/admin/clipboard/index.html.erb +21 -21
  126. data/app/views/alchemy/admin/clipboard/insert.js.erb +5 -5
  127. data/app/views/alchemy/admin/contents/_missing.html.erb +1 -1
  128. data/app/views/alchemy/admin/contents/create.js.erb +33 -33
  129. data/app/views/alchemy/admin/contents/destroy.js.erb +5 -5
  130. data/app/views/alchemy/admin/contents/new.html.erb +13 -13
  131. data/app/views/alchemy/admin/contents/order.js.erb +2 -2
  132. data/app/views/alchemy/admin/dashboard/index.html.erb +96 -92
  133. data/app/views/alchemy/admin/elements/_add_content.html.erb +12 -12
  134. data/app/views/alchemy/admin/elements/_element.html.erb +3 -3
  135. data/app/views/alchemy/admin/elements/_new_element_form.html.erb +28 -28
  136. data/app/views/alchemy/admin/elements/_picture_editor.html.erb +21 -21
  137. data/app/views/alchemy/admin/elements/create.js.erb +32 -32
  138. data/app/views/alchemy/admin/elements/index.html.erb +2 -2
  139. data/app/views/alchemy/admin/elements/new.html.erb +31 -31
  140. data/app/views/alchemy/admin/elements/order.js.erb +3 -3
  141. data/app/views/alchemy/admin/elements/trash.js.erb +13 -13
  142. data/app/views/alchemy/admin/elements/update.js.erb +6 -6
  143. data/app/views/alchemy/admin/essence_files/assign.js.erb +6 -6
  144. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +32 -32
  145. data/app/views/alchemy/admin/essence_pictures/destroy.js.erb +1 -1
  146. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +1 -1
  147. data/app/views/alchemy/admin/essence_pictures/update.js.erb +11 -11
  148. data/app/views/alchemy/admin/languages/_form.html.erb +51 -45
  149. data/app/views/alchemy/admin/languages/_language.html.erb +45 -45
  150. data/app/views/alchemy/admin/languages/_table.html.erb +25 -25
  151. data/app/views/alchemy/admin/layoutpages/index.html.erb +35 -35
  152. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +42 -42
  153. data/app/views/alchemy/admin/pages/_external_link.html.erb +1 -1
  154. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +27 -27
  155. data/app/views/alchemy/admin/pages/_page.html.erb +112 -112
  156. data/app/views/alchemy/admin/pages/_sitemap.html.erb +1 -1
  157. data/app/views/alchemy/admin/pages/configure.html.erb +71 -69
  158. data/app/views/alchemy/admin/pages/configure_external.html.erb +38 -38
  159. data/app/views/alchemy/admin/pages/destroy.js.erb +10 -10
  160. data/app/views/alchemy/admin/pages/edit.html.erb +165 -165
  161. data/app/views/alchemy/admin/pages/fold.js.erb +2 -2
  162. data/app/views/alchemy/admin/pages/index.html.erb +66 -66
  163. data/app/views/alchemy/admin/pages/locked.html.erb +1 -1
  164. data/app/views/alchemy/admin/pages/new.html.erb +40 -40
  165. data/app/views/alchemy/admin/pages/sort.js.erb +4 -4
  166. data/app/views/alchemy/admin/pages/unlock.js.erb +6 -6
  167. data/app/views/alchemy/admin/pages/update.js.erb +19 -19
  168. data/app/views/alchemy/admin/partials/_flash.html.erb +2 -2
  169. data/app/views/alchemy/admin/partials/_flash_notices.html.erb +1 -1
  170. data/app/views/alchemy/admin/partials/_flash_upload.html.erb +38 -0
  171. data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +15 -15
  172. data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +8 -8
  173. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +35 -35
  174. data/app/views/alchemy/admin/partials/_search_form.html.erb +14 -14
  175. data/app/views/alchemy/admin/partials/_sub_navigation_tab.html.erb +6 -6
  176. data/app/views/alchemy/admin/partials/_upload_form.html.erb +56 -118
  177. data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +11 -11
  178. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +71 -71
  179. data/app/views/alchemy/admin/pictures/_picture.html.erb +32 -32
  180. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +26 -26
  181. data/app/views/alchemy/admin/pictures/_pictures_list.html.erb +6 -6
  182. data/app/views/alchemy/admin/pictures/create.js.erb +7 -7
  183. data/app/views/alchemy/admin/pictures/index.html.erb +67 -67
  184. data/app/views/alchemy/admin/pictures/show_in_window.html.erb +5 -4
  185. data/app/views/alchemy/admin/resources/_form.html.erb +25 -19
  186. data/app/views/alchemy/admin/resources/_resource.html.erb +37 -36
  187. data/app/views/alchemy/admin/resources/_table.html.erb +17 -17
  188. data/app/views/alchemy/admin/resources/destroy.js.erb +1 -1
  189. data/app/views/alchemy/admin/resources/index.html.erb +14 -14
  190. data/app/views/alchemy/admin/trash/index.html.erb +20 -20
  191. data/app/views/alchemy/admin/users/_table.html.erb +52 -52
  192. data/app/views/alchemy/admin/users/_user.html.erb +35 -36
  193. data/app/views/alchemy/admin/users/index.html.erb +26 -27
  194. data/app/views/alchemy/base/error_notice.html.erb +2 -2
  195. data/app/views/alchemy/base/update.js.erb +1 -1
  196. data/app/views/alchemy/elements/_contactform_view.html.erb +76 -76
  197. data/app/views/alchemy/elements/_download_view.html.erb +1 -1
  198. data/app/views/alchemy/elements/_editor_not_found.html.erb +3 -3
  199. data/app/views/alchemy/elements/_searchresult_view.html.erb +2 -2
  200. data/app/views/alchemy/elements/_sitemap_editor.html.erb +1 -1
  201. data/app/views/alchemy/essences/_essence_audio_view.html.erb +13 -13
  202. data/app/views/alchemy/essences/_essence_date_editor.html.erb +10 -10
  203. data/app/views/alchemy/essences/_essence_file_editor.html.erb +62 -62
  204. data/app/views/alchemy/essences/_essence_file_view.html.erb +8 -8
  205. data/app/views/alchemy/essences/_essence_flash_view.html.erb +19 -19
  206. data/app/views/alchemy/essences/_essence_html_editor.html.erb +6 -6
  207. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +73 -73
  208. data/app/views/alchemy/essences/_essence_picture_view.html.erb +34 -34
  209. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +7 -7
  210. data/app/views/alchemy/essences/_essence_text_editor.html.erb +8 -8
  211. data/app/views/alchemy/navigation/_image_link.html.erb +12 -12
  212. data/app/views/alchemy/navigation/_link.html.erb +13 -13
  213. data/app/views/alchemy/navigation/_renderer.html.erb +17 -17
  214. data/app/views/alchemy/page_layouts/_layout_footer.html.erb +1 -1
  215. data/app/views/alchemy/page_layouts/_layout_header.html.erb +1 -1
  216. data/app/views/alchemy/pages/show.rss.builder +14 -14
  217. data/app/views/alchemy/search/_result.html.erb +7 -7
  218. data/app/views/alchemy/user_sessions/leave.html.erb +9 -9
  219. data/app/views/alchemy/user_sessions/login.html.erb +39 -39
  220. data/app/views/alchemy/user_sessions/logout.html.erb +1 -1
  221. data/app/views/layouts/alchemy/admin.html.erb +81 -81
  222. data/app/views/layouts/alchemy/login.html.erb +36 -36
  223. data/app/views/layouts/alchemy/pages.html.erb +48 -27
  224. data/bin/alchemy +136 -134
  225. data/config/alchemy/config.yml +13 -9
  226. data/config/locales/alchemy.de.yml +24 -30
  227. data/config/locales/alchemy.en.yml +11 -28
  228. data/config/routes.rb +146 -146
  229. data/db/migrate/20100607193638_create_essence_pictures.rb +3 -3
  230. data/db/migrate/20101109150312_alter_pages_visible_column_default.rb +1 -1
  231. data/db/migrate/20101109151812_create_languages.rb +3 -3
  232. data/db/migrate/20110115123343_remove_css_class_default_from_essence_pictures.rb +3 -3
  233. data/db/migrate/20110224105120_change_pages_visible_default.rb +3 -3
  234. data/db/migrate/20110228182659_remove_default_page_layout_from_pages.rb +2 -2
  235. data/db/migrate/20110414163140_remove_display_name_from_elements.rb +3 -3
  236. data/db/migrate/20110511100516_rename_essence_texts_title_to_link_title.rb +2 -2
  237. data/db/migrate/20110529130500_add_cell_id_to_elements.rb +3 -3
  238. data/db/migrate/20110530102804_change_pages_page_layout_column.rb +3 -3
  239. data/db/migrate/20110711142057_change_open_link_in_new_window_to_link_target.rb +1 -1
  240. data/db/migrate/20111116125112_namespace_alchemy_models.rb +21 -21
  241. data/lib/alchemy/auth_engine.rb +5 -5
  242. data/lib/alchemy/capistrano.rb +64 -64
  243. data/lib/alchemy/config.rb +47 -44
  244. data/lib/alchemy/engine.rb +41 -41
  245. data/lib/alchemy/essence.rb +50 -51
  246. data/lib/alchemy/i18n.rb +48 -48
  247. data/lib/alchemy/modules.rb +30 -30
  248. data/lib/alchemy/mount_point.rb +6 -6
  249. data/lib/alchemy/page_layout.rb +94 -93
  250. data/lib/alchemy/resource.rb +82 -0
  251. data/lib/alchemy/resources_helper.rb +56 -0
  252. data/lib/alchemy/scoped_pagination_url_helper.rb +8 -8
  253. data/lib/alchemy/seeder.rb +88 -88
  254. data/lib/alchemy/tinymce.rb +49 -49
  255. data/lib/alchemy/upgrader.rb +103 -103
  256. data/lib/alchemy/version.rb +1 -1
  257. data/lib/alchemy_cms.rb +26 -27
  258. data/lib/extensions/action_view.rb +1 -1
  259. data/lib/extensions/array.rb +3 -3
  260. data/lib/extensions/hash.rb +3 -3
  261. data/lib/middleware/flash_session_cookie.rb +1 -1
  262. data/lib/rails/generators/alchemy/deploy_script/deploy_script_generator.rb +24 -24
  263. data/lib/rails/generators/alchemy/elements/elements_generator.rb +7 -7
  264. data/lib/rails/generators/alchemy/elements/templates/view.html.erb +17 -17
  265. data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +6 -6
  266. data/lib/rails/generators/alchemy/plugin/templates/authorization_rules.rb +8 -8
  267. data/lib/rails/generators/alchemy/scaffold/files/pages.html.erb +7 -7
  268. data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +36 -36
  269. data/lib/rails/templates/alchemy.rb +1 -1
  270. data/lib/tasks/ferret.rake +2 -2
  271. data/lib/tasks/fleximage.rake +32 -32
  272. data/lib/tasks/install.rake +12 -12
  273. data/lib/tasks/upgrade.rake +4 -4
  274. data/spec/controllers/admin/clipboard_controller_spec.rb +43 -43
  275. data/spec/controllers/admin/contents_controller_spec.rb +22 -22
  276. data/spec/controllers/admin/elements_controller_spec.rb +13 -13
  277. data/spec/controllers/admin/languages_controller_spec.rb +31 -0
  278. data/spec/controllers/admin/pages_controller_spec.rb +10 -41
  279. data/spec/controllers/admin/resources_controller_spec.rb +19 -0
  280. data/spec/controllers/admin/trash_controller_spec.rb +11 -11
  281. data/spec/controllers/base_controller_spec.rb +46 -46
  282. data/spec/controllers/pages_controller_spec.rb +102 -92
  283. data/spec/dummy/app/controllers/admin/events_controller.rb +3 -0
  284. data/spec/dummy/app/controllers/errors_controller.rb +5 -0
  285. data/spec/dummy/app/models/event.rb +3 -0
  286. data/spec/dummy/config.ru +1 -1
  287. data/spec/dummy/config/application.rb +3 -0
  288. data/spec/dummy/config/authorization_rules.rb +7 -0
  289. data/spec/dummy/config/environments/development.rb +8 -1
  290. data/spec/dummy/config/environments/production.rb +1 -1
  291. data/spec/dummy/config/environments/test.rb +5 -2
  292. data/spec/dummy/config/routes.rb +9 -1
  293. data/spec/dummy/db/schema.rb +47 -35
  294. data/spec/dummy/public/404.html +19 -7
  295. data/spec/dummy/public/404.html.bak +26 -0
  296. data/spec/dummy/public/422.html +19 -7
  297. data/spec/dummy/public/500.html +19 -7
  298. data/spec/dummy/script/rails +2 -2
  299. data/spec/factories.rb +76 -76
  300. data/spec/helpers/admin/base_helper_spec.rb +21 -21
  301. data/spec/helpers/admin/contents_helper_spec.rb +14 -14
  302. data/spec/helpers/admin/elements_helper_spec.rb +40 -40
  303. data/spec/helpers/admin/essences_helper_spec.rb +7 -7
  304. data/spec/helpers/elements_helper_spec.rb +154 -154
  305. data/spec/helpers/essences_helper_spec.rb +10 -10
  306. data/spec/helpers/pages_helper_spec.rb +369 -372
  307. data/spec/helpers/pictures_helper_spec.rb +14 -0
  308. data/spec/helpers/url_helpers_spec.rb +29 -34
  309. data/spec/integration/admin/pages_controller_spec.rb +50 -50
  310. data/spec/integration/admin/resources_integration_spec.rb +100 -0
  311. data/spec/integration/navigation_spec.rb +1 -1
  312. data/spec/integration/pages_controller_spec.rb +205 -207
  313. data/spec/integration/security_spec.rb +47 -47
  314. data/spec/javascripts/alchemy/link_overlay_spec.js.coffee +42 -0
  315. data/spec/javascripts/alchemy_integration_spec.coffee +12 -0
  316. data/spec/javascripts/fixtures/select.html +3 -0
  317. data/spec/javascripts/helpers/.gitkeep +0 -0
  318. data/spec/javascripts/helpers/jasmine-jquery-1.3.1.js +289 -0
  319. data/spec/javascripts/helpers/mock-ajax.js +207 -0
  320. data/spec/javascripts/helpers/test_responses/test_responses.js +1 -0
  321. data/spec/javascripts/spec.css +3 -0
  322. data/spec/javascripts/spec.js +2 -0
  323. data/spec/libraries/resource_spec.rb +122 -0
  324. data/spec/libraries/resources_helper_spec.rb +105 -0
  325. data/spec/models/content_spec.rb +67 -67
  326. data/spec/models/element_spec.rb +133 -133
  327. data/spec/models/essence_picture_spec.rb +5 -5
  328. data/spec/models/essence_richtext_spec.rb +4 -4
  329. data/spec/models/language_spec.rb +89 -89
  330. data/spec/models/page_spec.rb +436 -506
  331. data/spec/models/picture_spec.rb +34 -34
  332. data/spec/models/user_spec.rb +2 -2
  333. data/spec/page_layout_spec.rb +24 -20
  334. data/spec/routing_spec.rb +253 -253
  335. data/spec/spec_helper.rb +51 -50
  336. data/spec/support/alchemy/controller_hacks.rb +25 -25
  337. data/spec/support/alchemy/specs_helpers.rb +25 -25
  338. data/spec/support/integration_spec_helper.rb +24 -0
  339. data/vendor/assets/javascripts/jquery_plugins/jquery.html5uploader.js +271 -0
  340. data/vendor/assets/javascripts/jquery_plugins/jquery.in-place-edit.js +86 -85
  341. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +380 -377
  342. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.tabspaging.js +285 -279
  343. data/vendor/assets/javascripts/swfupload/SWFObject License.txt +3 -3
  344. data/vendor/assets/javascripts/swfupload/swfupload.cookies.js +47 -47
  345. data/vendor/assets/javascripts/swfupload/swfupload.js +612 -612
  346. data/vendor/assets/javascripts/swfupload/swfupload.queue.js +93 -93
  347. data/vendor/assets/javascripts/swfupload/swfupload.speed.js +337 -337
  348. data/vendor/assets/javascripts/swfupload/swfupload.swfobject.js +706 -102
  349. data/vendor/assets/javascripts/tiny_mce/license.txt +6 -6
  350. data/vendor/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +97 -97
  351. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +386 -376
  352. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +30 -30
  353. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +45 -45
  354. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +20 -17
  355. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +12 -12
  356. data/vendor/assets/javascripts/tiny_mce/plugins/table/cell.htm +183 -173
  357. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/cell.css +4 -4
  358. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/row.css +7 -7
  359. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/table.css +3 -3
  360. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/cell.js +282 -280
  361. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +15 -15
  362. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/row.js +204 -204
  363. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/table.js +435 -435
  364. data/vendor/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +24 -22
  365. data/vendor/assets/javascripts/tiny_mce/plugins/table/row.htm +144 -136
  366. data/vendor/assets/javascripts/tiny_mce/plugins/table/table.htm +184 -168
  367. data/vendor/assets/javascripts/tiny_mce/themes/advanced/about.htm +62 -46
  368. data/vendor/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +17 -16
  369. data/vendor/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +56 -47
  370. data/vendor/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +67 -54
  371. data/vendor/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +852 -1
  372. data/vendor/assets/javascripts/tiny_mce/themes/advanced/image.htm +79 -69
  373. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/about.js +48 -48
  374. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +28 -28
  375. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +317 -317
  376. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +248 -246
  377. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/image.js +246 -246
  378. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/link.js +146 -146
  379. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +31 -31
  380. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de.js +1 -1
  381. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de_dlg.js +1 -1
  382. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en.js +1 -1
  383. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +1 -1
  384. data/vendor/assets/javascripts/tiny_mce/themes/advanced/link.htm +53 -46
  385. data/vendor/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +57 -45
  386. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +182 -47
  387. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +399 -92
  388. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +891 -187
  389. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +102 -24
  390. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +377 -78
  391. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +452 -77
  392. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +167 -45
  393. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +399 -92
  394. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +890 -190
  395. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +33 -7
  396. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +15 -4
  397. data/vendor/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +18 -15
  398. data/vendor/assets/javascripts/tiny_mce/utils/editable_selects.js +46 -46
  399. data/vendor/assets/javascripts/tiny_mce/utils/form_utils.js +124 -124
  400. data/vendor/assets/javascripts/tiny_mce/utils/mctabs.js +112 -112
  401. data/vendor/assets/javascripts/tiny_mce/utils/validate.js +213 -213
  402. metadata +102 -115
  403. data/app/assets/javascripts/alchemy/alchemy.link_overlay.js +0 -216
  404. data/lib/tasks/routes.rake +0 -29
  405. data/spec/integration/admin/resources_spec.rb +0 -19
@@ -1,63 +1,64 @@
1
1
  begin
2
- require 'spork'
2
+ require 'spork'
3
3
  rescue LoadError => e
4
4
  end
5
5
 
6
6
  def configure
7
- # Configure Rails Environment
8
- ENV["RAILS_ENV"] = "test"
9
-
10
- require File.expand_path("../dummy/config/environment.rb", __FILE__)
11
-
12
- require 'database_cleaner'
13
- DatabaseCleaner.strategy = :truncation
14
-
15
- require 'authlogic/test_case'
16
- include Authlogic::TestCase
17
-
18
- require "rails/test_help"
19
- require "rspec/rails"
20
- require 'factory_girl'
21
- require 'factories.rb'
22
-
23
- ActionMailer::Base.delivery_method = :test
24
- ActionMailer::Base.perform_deliveries = true
25
- ActionMailer::Base.default_url_options[:host] = "test.com"
26
-
27
- Rails.backtrace_cleaner.remove_silencers!
28
-
29
- # Configure capybara for integration testing
30
- require "capybara/rails"
31
- require 'capybara-webkit'
32
- Capybara.default_driver = :rack_test
33
- Capybara.default_selector = :css
34
- Capybara.javascript_driver = :webkit
35
-
36
- # Load support files
37
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
38
-
39
- RSpec.configure do |config|
40
- require 'rspec/expectations'
41
- config.include RSpec::Matchers
42
- config.include Alchemy::Engine.routes.url_helpers
43
- config.mock_with :rspec
44
- config.use_transactional_fixtures = true
45
- end
46
-
7
+ # Configure Rails Environment
8
+ ENV["RAILS_ENV"] = "test"
9
+
10
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
11
+
12
+ require 'database_cleaner'
13
+ DatabaseCleaner.strategy = :truncation
14
+
15
+ require 'authlogic/test_case'
16
+ include Authlogic::TestCase
17
+
18
+ require "rails/test_help"
19
+ require "rspec/rails"
20
+ require 'factory_girl'
21
+ require 'factories.rb'
22
+
23
+ ActionMailer::Base.delivery_method = :test
24
+ ActionMailer::Base.perform_deliveries = true
25
+ ActionMailer::Base.default_url_options[:host] = "test.com"
26
+
27
+ Rails.backtrace_cleaner.remove_silencers!
28
+
29
+ # Configure capybara for integration testing
30
+ require "capybara/rails"
31
+ require 'capybara-webkit'
32
+ Capybara.default_driver = :rack_test
33
+ Capybara.default_selector = :css
34
+ Capybara.javascript_driver = :webkit
35
+
36
+ # Load support files
37
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
38
+
39
+ RSpec.configure do |config|
40
+ require 'rspec/expectations'
41
+ config.include RSpec::Matchers
42
+ config.include Alchemy::Engine.routes.url_helpers
43
+ config.mock_with :rspec
44
+ config.use_transactional_fixtures = true
45
+ end
46
+
47
47
  end
48
48
 
49
49
  def seed
50
- # This code will be run each time you run your specs.
51
- DatabaseCleaner.clean
52
- # Seed the database
53
- Alchemy::Seeder.seed!
54
- ::I18n.locale = :en
50
+ # This code will be run each time you run your specs.
51
+ DatabaseCleaner.clean
52
+
53
+ # Seed the database
54
+ Alchemy::Seeder.seed!
55
+
55
56
  end
56
57
 
57
58
  if defined?(Spork)
58
- Spork.prefork { configure }
59
- Spork.each_run { seed }
59
+ Spork.prefork { configure }
60
+ Spork.each_run { seed }
60
61
  else
61
- configure
62
- seed
62
+ configure
63
+ seed
63
64
  end
@@ -3,39 +3,39 @@
3
3
  # Thanks!
4
4
 
5
5
  module Alchemy
6
- module Specs
7
- module ControllerHacks
6
+ module Specs
7
+ module ControllerHacks
8
8
 
9
- def get(action, parameters = nil, session = nil, flash = nil)
10
- process_alchemy_action(action, parameters, session, flash, "GET")
11
- end
9
+ def get(action, parameters = nil, session = nil, flash = nil)
10
+ process_alchemy_action(action, parameters, session, flash, "GET")
11
+ end
12
12
 
13
- # Executes a request simulating POST HTTP method and set/volley the response
14
- def post(action, parameters = nil, session = nil, flash = nil)
15
- process_alchemy_action(action, parameters, session, flash, "POST")
16
- end
13
+ # Executes a request simulating POST HTTP method and set/volley the response
14
+ def post(action, parameters = nil, session = nil, flash = nil)
15
+ process_alchemy_action(action, parameters, session, flash, "POST")
16
+ end
17
17
 
18
- # Executes a request simulating PUT HTTP method and set/volley the response
19
- def put(action, parameters = nil, session = nil, flash = nil)
20
- process_alchemy_action(action, parameters, session, flash, "PUT")
21
- end
18
+ # Executes a request simulating PUT HTTP method and set/volley the response
19
+ def put(action, parameters = nil, session = nil, flash = nil)
20
+ process_alchemy_action(action, parameters, session, flash, "PUT")
21
+ end
22
22
 
23
- # Executes a request simulating DELETE HTTP method and set/volley the response
24
- def delete(action, parameters = nil, session = nil, flash = nil)
25
- process_alchemy_action(action, parameters, session, flash, "DELETE")
26
- end
23
+ # Executes a request simulating DELETE HTTP method and set/volley the response
24
+ def delete(action, parameters = nil, session = nil, flash = nil)
25
+ process_alchemy_action(action, parameters, session, flash, "DELETE")
26
+ end
27
27
 
28
- private
28
+ private
29
29
 
30
- def process_alchemy_action(action, parameters = nil, session = nil, flash = nil, method = "GET")
31
- parameters ||= {}
32
- process(action, parameters.merge!(:use_route => :alchemy), session, flash, method)
33
- end
30
+ def process_alchemy_action(action, parameters = nil, session = nil, flash = nil, method = "GET")
31
+ parameters ||= {}
32
+ process(action, parameters.merge!(:use_route => :alchemy), session, flash, method)
33
+ end
34
34
 
35
- end
36
- end
35
+ end
36
+ end
37
37
  end
38
38
 
39
39
  RSpec.configure do |c|
40
- c.include Alchemy::Specs::ControllerHacks, :type => :controller
40
+ c.include Alchemy::Specs::ControllerHacks, :type => :controller
41
41
  end
@@ -1,32 +1,32 @@
1
1
  module Alchemy
2
- module Specs
3
- # Helpers for integration specs
4
- # This file is auto included in rspec integration/request tests.
5
- module Helpers
2
+ module Specs
3
+ # Helpers for integration specs
4
+ # This file is auto included in rspec integration/request tests.
5
+ module Helpers
6
6
 
7
- # Capybara actions to login into Alchemy Backend
8
- #
9
- # === IMPORTANT NOTE:
10
- #
11
- # Because of a very strange bug in capybara, or rspec, or what ever, you **MUST** create the user inside a +before(:all)+ block inside your integrations specs.
12
- #
13
- # === Example:
14
- #
15
- # before(:all) do
16
- # Factory.build(:admin_user).save_without_session_maintenance
17
- # end
18
- #
19
- def login_into_alchemy
20
- visit '/alchemy/admin/login'
21
- fill_in('alchemy_user_session_login', :with => 'jdoe')
22
- fill_in('alchemy_user_session_password', :with => 's3cr3t')
23
- click_on('Login')
24
- end
7
+ # Capybara actions to login into Alchemy Backend
8
+ #
9
+ # === IMPORTANT NOTE:
10
+ #
11
+ # Because of a very strange bug in capybara, or rspec, or what ever, you **MUST** create the user inside a +before(:all)+ block inside your integrations specs.
12
+ #
13
+ # === Example:
14
+ #
15
+ # before(:all) do
16
+ # Factory.build(:admin_user).save_without_session_maintenance
17
+ # end
18
+ #
19
+ def login_into_alchemy
20
+ visit '/alchemy/admin/login'
21
+ fill_in('alchemy_user_session_login', :with => 'jdoe')
22
+ fill_in('alchemy_user_session_password', :with => 's3cr3t')
23
+ click_on('Login')
24
+ end
25
25
 
26
- end
27
- end
26
+ end
27
+ end
28
28
  end
29
29
 
30
30
  RSpec.configure do |c|
31
- c.include Alchemy::Specs::Helpers, :type => :request
31
+ c.include Alchemy::Specs::Helpers, :type => :request
32
32
  end
@@ -0,0 +1,24 @@
1
+ require 'declarative_authorization/maintenance'
2
+ include Authorization::TestHelper
3
+
4
+ # Trying to load additional authorization-rules in dummy-app.
5
+ # When accessing dummy-app in development-env it works without loading,
6
+ # in capybara-test this doesn't work. Unfortunately the method below doesn't work neither.
7
+ # I leave it here as a reminder
8
+ def load_authorization_rules
9
+ Alchemy::AuthEngine.get_instance.load(File.join(File.dirname(__FILE__), '../..', 'config/authorization_rules.rb'))
10
+ Alchemy::AuthEngine.get_instance.load(File.join(File.dirname(__FILE__), '../dummy' 'config/authorization_rules.rb'))
11
+ end
12
+
13
+ def create_admin_user
14
+ @user = Alchemy::User.create!(:login => 'admin_user', :password => 's3cr3t', :password_confirmation => 's3cr3t', :email => 'jdoe2@example.com', :role => :admin)
15
+ end
16
+
17
+ def login_with_admin_user
18
+ visit '/alchemy/admin/login'
19
+ fill_in('alchemy_user_session_login', :with => 'admin_user')
20
+ fill_in('alchemy_user_session_password', :with => 's3cr3t')
21
+ click_on('Login')
22
+ end
23
+
24
+
@@ -0,0 +1,271 @@
1
+ (function ($) {
2
+
3
+ var xhrRequestQueue = {};
4
+ var settings;
5
+ var queuedFiles;
6
+ var fileList;
7
+ var methods = {
8
+
9
+ init:function (options) {
10
+
11
+ var crlf = '\r\n';
12
+ var boundary = "alchemy";
13
+ var dashes = "--";
14
+ var successfullyUploadedFiles = 0;
15
+
16
+ settings = {
17
+ "name":"uploadedFile",
18
+ "postUrl":"Upload.aspx",
19
+ "onClientAbort":null,
20
+ "onClientError":null,
21
+ "onClientLoad":null,
22
+ "onClientLoadEnd":null,
23
+ "onClientLoadStart":null,
24
+ "onClientProgress":null,
25
+ "onServerAbort":null,
26
+ "onServerError":null,
27
+ "onServerLoad":null,
28
+ "onServerLoadStart":null,
29
+ "onServerProgress":null,
30
+ "onServerReadyStateChange":null,
31
+ "onSuccess":null,
32
+ "onDragEnter":null,
33
+ "onDragOver":null,
34
+ "onDragLeave":null,
35
+ "onDrop":null,
36
+ "onQueueStart":null,
37
+ "onQueueComplete":null,
38
+ "onQueueCancelled":null,
39
+ "postParams":null
40
+ };
41
+
42
+ if (options) {
43
+ $.extend(settings, options);
44
+ }
45
+
46
+ return this.each(function (options) {
47
+ var $this = $(this);
48
+ if ($this.is("[type=\"file\"]")) {
49
+ $this.bind("change", function () {
50
+ fillFileQueue(this.files);
51
+ startUpload();
52
+ });
53
+ } else {
54
+ $this.bind("dragenter",
55
+ function (e) {
56
+ if (settings.onDragEnter) {
57
+ settings.onDragEnter($this, e);
58
+ }
59
+ return false;
60
+ }).bind("dragover",
61
+ function (e) {
62
+ if (settings.onDragOver) {
63
+ settings.onDragOver($this, e);
64
+ }
65
+ return false;
66
+ }).bind("dragleave",
67
+ function (e) {
68
+ if (settings.onDragLeave) {
69
+ settings.onDragLeave($this, e);
70
+ }
71
+ return false;
72
+ }).bind("drop", function (e) {
73
+ fillFileQueue(e.originalEvent.dataTransfer.files);
74
+ startUpload();
75
+ if (settings.onDrop) {
76
+ settings.onDrop($this, e);
77
+ }
78
+ return false;
79
+ });
80
+ }
81
+ });
82
+
83
+ // Populating our own files array so we can be sure the browser does not change it.
84
+ function fillFileQueue(files) {
85
+ queuedFiles = [];
86
+ fileList = files; //storing the original browsers FileList object.
87
+ for (var file in files) {
88
+ if (files.hasOwnProperty(file) && typeof(files[file]) === 'object') {
89
+ queuedFiles.push(files[file]);
90
+ }
91
+ }
92
+ return queuedFiles;
93
+ }
94
+
95
+ function startUpload() {
96
+ if (settings.onQueueStart) {
97
+ settings.onQueueStart(queuedFiles.length);
98
+ successfullyUploadedFiles = 0;
99
+ }
100
+ for (var i = 0; i < queuedFiles.length; i++) {
101
+ var file = queuedFiles[i];
102
+ $.extend(file, {id:"file_progress_" + i});
103
+ fileHandler(file);
104
+ }
105
+ }
106
+
107
+ function fileHandler(file) {
108
+ var xmlHttpRequest;
109
+ var fileReader = new FileReader();
110
+ fileReader.onabort = function (e) {
111
+ if (settings.onClientAbort) {
112
+ settings.onClientAbort(e, file);
113
+ }
114
+ };
115
+ fileReader.onerror = function (e) {
116
+ if (settings.onClientError) {
117
+ settings.onClientError(e, file);
118
+ }
119
+ };
120
+ fileReader.onload = function (e) {
121
+ if (settings.onClientLoad) {
122
+ settings.onClientLoad(e, file);
123
+ }
124
+ };
125
+ fileReader.onloadend = function (e) {
126
+ if (settings.onClientLoadEnd) {
127
+ settings.onClientLoadEnd(e, file);
128
+ }
129
+ };
130
+ fileReader.onloadstart = function (e) {
131
+ if (settings.onClientLoadStart) {
132
+ settings.onClientLoadStart(e, file);
133
+ }
134
+ };
135
+ fileReader.onprogress = function (e) {
136
+ if (settings.onClientProgress) {
137
+ settings.onClientProgress(e, file);
138
+ }
139
+ };
140
+ fileReader.readAsDataURL(file);
141
+
142
+ xmlHttpRequest = new XMLHttpRequest();
143
+ xhrRequestQueue[file.id] = xmlHttpRequest;
144
+
145
+ xmlHttpRequest.upload.onabort = function (e) {
146
+ if (settings.onServerAbort) {
147
+ settings.onServerAbort(e, xhrRequestQueue);
148
+ }
149
+ };
150
+ xmlHttpRequest.upload.onerror = function (e) {
151
+ if (settings.onServerError) {
152
+ settings.onServerError(e, file);
153
+ }
154
+ };
155
+ xmlHttpRequest.upload.onload = function (e) {
156
+ if (settings.onServerLoad) {
157
+ settings.onServerLoad(e, file);
158
+ }
159
+ };
160
+ xmlHttpRequest.upload.onloadstart = function (e) {
161
+ if (settings.onServerLoadStart) {
162
+ settings.onServerLoadStart(e, file);
163
+ }
164
+ };
165
+ xmlHttpRequest.upload.onprogress = function (e) {
166
+ if (settings.onServerProgress) {
167
+ settings.onServerProgress(e, file);
168
+ }
169
+ };
170
+ xmlHttpRequest.onreadystatechange = function (e) {
171
+ if (settings.onServerReadyStateChange) {
172
+ settings.onServerReadyStateChange(e, file, xmlHttpRequest.readyState);
173
+ }
174
+ if (xmlHttpRequest.readyState === 4) {
175
+ if (xmlHttpRequest.status === 200) {
176
+ successfullyUploadedFiles++;
177
+ if (settings.onSuccess) {
178
+ settings.onSuccess(e, file, xmlHttpRequest.responseText, successfullyUploadedFiles);
179
+ }
180
+ } else if (xmlHttpRequest.status === 500) {
181
+ if (settings.onServerError) {
182
+ settings.onServerError(e, file, xmlHttpRequest.statusText);
183
+ }
184
+ }
185
+ if (queuedFiles[Math.abs(queuedFiles.length) - 1] === file) {
186
+ completeQueue(xmlHttpRequest.status);
187
+ }
188
+ }
189
+ };
190
+ xmlHttpRequest.open("POST", settings.postUrl, true);
191
+
192
+ if (file.getAsBinary) { // Firefox
193
+
194
+ var data = dashes + boundary + crlf +
195
+ "Content-Disposition: form-data;" +
196
+ "name=\"" + settings.name + "\";" +
197
+ "filename=\"" + unescape(encodeURIComponent(file.name)) + "\"" + crlf +
198
+ "Content-Type: application/octet-stream" + crlf + crlf +
199
+ file.getAsBinary() + crlf +
200
+ dashes + boundary + dashes;
201
+
202
+ xmlHttpRequest.setRequestHeader("Content-Type", "multipart/form-data;boundary=" + boundary);
203
+ xmlHttpRequest.sendAsBinary(data);
204
+
205
+ } else if (window.FormData) { // Chrome
206
+
207
+ var formData = new FormData();
208
+ var postParams = settings.postParams;
209
+
210
+ formData.append(settings.name, file);
211
+
212
+ // Appending additional parameters to FormData object
213
+ if (postParams) {
214
+ for (var param in postParams) {
215
+ if (postParams.hasOwnProperty(param)) {
216
+ formData.append(param, postParams[param]);
217
+ }
218
+ }
219
+ }
220
+
221
+ xmlHttpRequest.send(formData);
222
+
223
+ }
224
+ }
225
+
226
+ function completeQueue(status) {
227
+ if (settings.onQueueComplete) {
228
+ settings.onQueueComplete(successfullyUploadedFiles, status);
229
+ }
230
+ }
231
+
232
+ },
233
+
234
+ // Cancel the whole queue
235
+ cancelQueue:function () {
236
+ for (var file_id in xhrRequestQueue) {
237
+ if (xhrRequestQueue.hasOwnProperty(file_id)) {
238
+ xhrRequestQueue[file_id].abort();
239
+ delete xhrRequestQueue[file_id];
240
+ }
241
+ }
242
+ if (settings.onQueueCancelled) {
243
+ settings.onQueueCancelled(queuedFiles);
244
+ }
245
+ },
246
+
247
+ // Cancel one upload
248
+ cancel:function (file_id) {
249
+ var xhrRequest = xhrRequestQueue[file_id];
250
+ if (xhrRequest) {
251
+ xhrRequest.abort();
252
+ delete xhrRequestQueue[file_id];
253
+ }
254
+ }
255
+
256
+ };
257
+
258
+ $.fn.html5Uploader = function (method) {
259
+
260
+ // Method calling logic
261
+ if (methods[method]) {
262
+ return methods[ method ].apply(this, Array.prototype.slice.call(arguments, 1));
263
+ } else if (typeof method === 'object' || !method) {
264
+ return methods.init.apply(this, arguments);
265
+ } else {
266
+ $.error('Method ' + method + ' does not exist on jQuery.html5Uploader');
267
+ }
268
+
269
+ };
270
+
271
+ })(jQuery);