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,81 +1,81 @@
1
1
  module Alchemy
2
- module Admin
3
- module ContentsHelper
2
+ module Admin
3
+ module ContentsHelper
4
4
 
5
- include Alchemy::Admin::BaseHelper
5
+ include Alchemy::Admin::BaseHelper
6
6
 
7
- # Returns a string for the id attribute of a html element for the given content
8
- def content_dom_id(content)
9
- return "" if content.nil?
10
- if content.class == String
11
- c = Content.find_by_name(content)
12
- return "" if c.nil?
13
- else
14
- c = content
15
- end
16
- "#{c.essence_type.demodulize.underscore}_#{c.id}"
17
- end
7
+ # Returns a string for the id attribute of a html element for the given content
8
+ def content_dom_id(content)
9
+ return "" if content.nil?
10
+ if content.class == String
11
+ c = Content.find_by_name(content)
12
+ return "" if c.nil?
13
+ else
14
+ c = content
15
+ end
16
+ "#{c.essence_type.demodulize.underscore}_#{c.id}"
17
+ end
18
18
 
19
- # Renders the name of elements content or the default name defined in elements.yml
20
- def render_content_name(content)
21
- if content.blank?
22
- warning('Element is nil')
23
- return ""
24
- else
25
- content_name = content.name_for_label
26
- end
27
- if content.description.blank?
28
- warning("Content #{content.name} is missing its description")
29
- title = t("Warning: Content is missing its description.", :contentname => content.name)
30
- content_name = %(<span class="warning icon" title="#{title}"></span>&nbsp;#{content_name}).html_safe
31
- end
32
- content.has_validations? ? "#{content_name}<span class='validation_indicator'>*</span>".html_safe : content_name
33
- end
19
+ # Renders the name of elements content or the default name defined in elements.yml
20
+ def render_content_name(content)
21
+ if content.blank?
22
+ warning('Element is nil')
23
+ return ""
24
+ else
25
+ content_name = content.name_for_label
26
+ end
27
+ if content.description.blank?
28
+ warning("Content #{content.name} is missing its description")
29
+ title = t("Warning: Content is missing its description.", :contentname => content.name)
30
+ content_name = %(<span class="warning icon" title="#{title}"></span>&nbsp;#{content_name}).html_safe
31
+ end
32
+ content.has_validations? ? "#{content_name}<span class='validation_indicator'>*</span>".html_safe : content_name
33
+ end
34
34
 
35
- # Renders a link to show the new content overlay
36
- def render_new_content_link(element)
37
- link_to_overlay_window(
38
- render_icon('create') + t('add new content'),
39
- alchemy.new_admin_element_content_path(element),
40
- {
41
- :size => '335x70',
42
- :title => t('Select an content'),
43
- :overflow => true
44
- },
45
- {
46
- :id => "add_content_for_element_#{element.id}",
47
- :class => 'small button with_icon new_content_link'
48
- }
49
- )
50
- end
35
+ # Renders a link to show the new content overlay
36
+ def render_new_content_link(element)
37
+ link_to_overlay_window(
38
+ render_icon('create') + t('add new content'),
39
+ alchemy.new_admin_element_content_path(element),
40
+ {
41
+ :size => '335x70',
42
+ :title => t('Select an content'),
43
+ :overflow => true
44
+ },
45
+ {
46
+ :id => "add_content_for_element_#{element.id}",
47
+ :class => 'small button with_icon new_content_link'
48
+ }
49
+ )
50
+ end
51
51
 
52
- # Renders a link to create a new content in element editor
53
- def render_create_content_link(element, options = {})
54
- defaults = {
55
- :label => t('add new content')
56
- }
57
- options = defaults.merge(options)
58
- link_to(
59
- options[:label],
60
- alchemy.admin_contents_path(
61
- :content => {
62
- :name => options[:content_name],
63
- :element_id => element.id
64
- }
65
- ),
66
- :method => 'post',
67
- :remote => true,
68
- :id => "add_content_for_element_#{element.id}",
69
- :class => 'button new_content_link'
70
- )
71
- end
52
+ # Renders a link to create a new content in element editor
53
+ def render_create_content_link(element, options = {})
54
+ defaults = {
55
+ :label => t('add new content')
56
+ }
57
+ options = defaults.merge(options)
58
+ link_to(
59
+ options[:label],
60
+ alchemy.admin_contents_path(
61
+ :content => {
62
+ :name => options[:content_name],
63
+ :element_id => element.id
64
+ }
65
+ ),
66
+ :method => 'post',
67
+ :remote => true,
68
+ :id => "add_content_for_element_#{element.id}",
69
+ :class => 'button new_content_link'
70
+ )
71
+ end
72
72
 
73
- # Returns a textarea ready to use with tinymce
74
- def tinymce_tag(name, content = '', options = {})
75
- append_class_name(options, 'tinymce')
76
- text_area_tag(name, content, options)
77
- end
73
+ # Returns a textarea ready to use with tinymce
74
+ def tinymce_tag(name, content = '', options = {})
75
+ append_class_name(options, 'tinymce')
76
+ text_area_tag(name, content, options)
77
+ end
78
78
 
79
- end
80
- end
79
+ end
80
+ end
81
81
  end
@@ -1,117 +1,118 @@
1
1
  module Alchemy
2
- module Admin
3
- module ElementsHelper
2
+ module Admin
3
+ module ElementsHelper
4
4
 
5
- include Alchemy::ElementsHelper
6
- include Alchemy::Admin::BaseHelper
7
- include Alchemy::Admin::ContentsHelper
8
- include Alchemy::Admin::EssencesHelper
5
+ include Alchemy::ElementsHelper
6
+ include Alchemy::Admin::BaseHelper
7
+ include Alchemy::Admin::ContentsHelper
8
+ include Alchemy::Admin::EssencesHelper
9
9
 
10
- # Returns an Array for essence_text_editor select options_for_select.
11
- def elements_by_name_for_select(name, options={})
12
- defaults = {
13
- :grouped_by_page => true,
14
- :from_page => :all
15
- }
16
- options = defaults.merge(options)
17
- elements = all_elements_by_name(
18
- name,
19
- :from_page => options[:from_page]
20
- )
21
- if options[:grouped_by_page] && options[:from_page] == :all
22
- elements_for_options = {}
23
- pages = elements.collect(&:page).compact.uniq
24
- pages.sort{ |x,y| x.name <=> y.name }.each do |page|
25
- page_elements = page.elements.select { |e| e.name == name }
26
- elements_for_options[page.name] = page_elements.map { |pe| [pe.preview_text, pe.id.to_s] }
27
- end
28
- else
29
- elements_for_options = elements.map { |e| [e.preview_text, e.id.to_s] }
30
- elements_for_options = [''] + elements_for_options
31
- end
32
- return elements_for_options
33
- end
10
+ # Returns an Array for essence_text_editor select options_for_select.
11
+ def elements_by_name_for_select(name, options={})
12
+ defaults = {
13
+ :grouped_by_page => true,
14
+ :from_page => :all
15
+ }
16
+ options = defaults.merge(options)
17
+ elements = all_elements_by_name(
18
+ name,
19
+ :from_page => options[:from_page]
20
+ )
21
+ if options[:grouped_by_page] && options[:from_page] == :all
22
+ elements_for_options = {}
23
+ pages = elements.collect(&:page).compact.uniq
24
+ pages.sort { |x, y| x.name <=> y.name }.each do |page|
25
+ page_elements = page.elements.select { |e| e.name == name }
26
+ elements_for_options[page.name] = page_elements.map { |pe| [pe.preview_text, pe.id.to_s] }
27
+ end
28
+ else
29
+ elements_for_options = elements.map { |e| [e.preview_text, e.id.to_s] }
30
+ elements_for_options = [''] + elements_for_options
31
+ end
32
+ return elements_for_options
33
+ end
34
34
 
35
- # Renders the element editor partial
36
- def render_editor(element)
37
- render_element(element, :editor)
38
- end
35
+ # Renders the element editor partial
36
+ def render_editor(element)
37
+ render_element(element, :editor)
38
+ end
39
39
 
40
- # Renders a drag'n'drop picture gallery editor for all EssencePictures.
41
- #
42
- # It brings full functionality for adding images, deleting images and sorting them via drag'n'drop.
43
- # Just place this helper inside your element editor view, pass the element as parameter and that's it.
44
- #
45
- # === Options:
46
- #
47
- # :maximum_amount_of_images [Integer] # This option let you handle the amount of images your customer can add to this element.
48
- #
49
- def render_picture_gallery_editor(element, options={})
50
- default_options = {
51
- :maximum_amount_of_images => nil,
52
- :grouped => true
53
- }
54
- options = default_options.merge(options)
55
- picture_contents = element.contents.where(:essence_type => "Alchemy::EssencePicture")
56
- render(
57
- :partial => "alchemy/admin/elements/picture_editor",
58
- :locals => {
59
- :picture_contents => picture_contents,
60
- :element => element,
61
- :options => options
62
- }
63
- )
64
- end
65
- alias_method :render_picture_editor, :render_picture_gallery_editor
40
+ # Renders a drag'n'drop picture gallery editor for all EssencePictures.
41
+ #
42
+ # It brings full functionality for adding images, deleting images and sorting them via drag'n'drop.
43
+ # Just place this helper inside your element editor view, pass the element as parameter and that's it.
44
+ #
45
+ # === Options:
46
+ #
47
+ # :maximum_amount_of_images [Integer] # This option let you handle the amount of images your customer can add to this element.
48
+ #
49
+ def render_picture_gallery_editor(element, options={})
50
+ default_options = {
51
+ :maximum_amount_of_images => nil,
52
+ :grouped => true
53
+ }
54
+ options = default_options.merge(options)
55
+ picture_contents = element.contents.where(:essence_type => "Alchemy::EssencePicture")
56
+ render(
57
+ :partial => "alchemy/admin/elements/picture_editor",
58
+ :locals => {
59
+ :picture_contents => picture_contents,
60
+ :element => element,
61
+ :options => options
62
+ }
63
+ )
64
+ end
66
65
 
67
- # Returns all elements that could be placed on that page because of the pages layout.
68
- # The elements are returned as an array to be used in alchemy_selectbox form builder.
69
- def elements_for_select(elements)
70
- return [] if elements.nil?
71
- options = elements.collect{ |e| [t(e['name'], :scope => :element_names), e["name"]] }
72
- return options_for_select(options)
73
- end
66
+ alias_method :render_picture_editor, :render_picture_gallery_editor
74
67
 
75
- # Returns all elements that could be placed on that page because of the pages layout.
76
- # The elements will be grouped by cell.
77
- def grouped_elements_for_select(elements, object_method = 'name')
78
- return "" if elements.blank?
79
- cells_definition = @page.cell_definitions
80
- return "" if cells_definition.blank?
81
- options = {}
82
- celled_elements = []
83
- cells_definition.each do |cell|
84
- cell_elements = elements.select { |e| cell['elements'].include?(e.class.name == 'Element' ? e.name : e['name']) }
85
- celled_elements += cell_elements
86
- optgroup_label = Cell.translated_label_for(cell['name'])
87
- options[optgroup_label] = cell_elements.map do |e|
88
- element_array_for_options(e, object_method, cell)
89
- end
90
- end
91
- other_elements = elements - celled_elements
92
- unless other_elements.blank?
93
- optgroup_label = t(:main_content)
94
- options[optgroup_label] = other_elements.map do |e|
95
- element_array_for_options(e, object_method)
96
- end
97
- end
98
- return grouped_options_for_select(options)
99
- end
68
+ # Returns all elements that could be placed on that page because of the pages layout.
69
+ # The elements are returned as an array to be used in alchemy_selectbox form builder.
70
+ def elements_for_select(elements)
71
+ return [] if elements.nil?
72
+ options = elements.collect { |e| [t(e['name'], :scope => :element_names), e["name"]] }
73
+ return options_for_select(options)
74
+ end
100
75
 
101
- def element_array_for_options(e, object_method, cell = nil)
102
- if e.class.name == 'Alchemy::Element'
103
- [
104
- e.display_name_with_preview_text,
105
- e.send(object_method).to_s + (cell ? "##{cell['name']}" : "")
106
- ]
107
- else
108
- [
109
- Alchemy::I18n.t(e['name'], :scope => :element_names),
110
- e[object_method] + (cell ? "##{cell['name']}" : "")
111
- ]
112
- end
113
- end
76
+ # Returns all elements that could be placed on that page because of the pages layout.
77
+ # The elements will be grouped by cell.
78
+ def grouped_elements_for_select(elements, object_method = 'name')
79
+ return "" if elements.blank?
80
+ cells_definition = @page.cell_definitions
81
+ return "" if cells_definition.blank?
82
+ options = {}
83
+ celled_elements = []
84
+ cells_definition.each do |cell|
85
+ cell_elements = elements.select { |e| cell['elements'].include?(e.class.name == 'Element' ? e.name : e['name']) }
86
+ celled_elements += cell_elements
87
+ optgroup_label = Cell.translated_label_for(cell['name'])
88
+ options[optgroup_label] = cell_elements.map do |e|
89
+ element_array_for_options(e, object_method, cell)
90
+ end
91
+ end
92
+ other_elements = elements - celled_elements
93
+ unless other_elements.blank?
94
+ optgroup_label = t(:main_content)
95
+ options[optgroup_label] = other_elements.map do |e|
96
+ element_array_for_options(e, object_method)
97
+ end
98
+ end
99
+ return grouped_options_for_select(options)
100
+ end
114
101
 
115
- end
116
- end
102
+ def element_array_for_options(e, object_method, cell = nil)
103
+ if e.class.name == 'Alchemy::Element'
104
+ [
105
+ e.display_name_with_preview_text,
106
+ e.send(object_method).to_s + (cell ? "##{cell['name']}" : "")
107
+ ]
108
+ else
109
+ [
110
+ Alchemy::I18n.t(e['name'], :scope => :element_names),
111
+ e[object_method] + (cell ? "##{cell['name']}" : "")
112
+ ]
113
+ end
114
+ end
115
+
116
+ end
117
+ end
117
118
  end
@@ -1,118 +1,118 @@
1
1
  module Alchemy
2
- module Admin
3
- module EssencesHelper
2
+ module Admin
3
+ module EssencesHelper
4
4
 
5
- include Alchemy::EssencesHelper
6
- include Alchemy::Admin::ContentsHelper
5
+ include Alchemy::EssencesHelper
6
+ include Alchemy::Admin::ContentsHelper
7
7
 
8
- # Renders the Content editor partial from the given Content.
9
- # For options see -> render_essence
10
- def render_essence_editor(content, options = {}, html_options = {})
11
- render_essence(content, :editor, { :for_editor => options }, html_options)
12
- end
8
+ # Renders the Content editor partial from the given Content.
9
+ # For options see -> render_essence
10
+ def render_essence_editor(content, options = {}, html_options = {})
11
+ render_essence(content, :editor, {:for_editor => options}, html_options)
12
+ end
13
13
 
14
- # Renders the Content editor partial from essence_type.
15
- #
16
- # Options are:
17
- # * element (Element) - the Element the contents are in (obligatory)
18
- # * type (String) - the type of Essence (obligatory)
19
- # * options (Hash):
20
- # ** :position (Integer) - The position of the Content inside the Element. I.E. for getting the n-th EssencePicture. Default is 1 (the first)
21
- # ** :all (String) - Pass :all to get all Contents of that name. Default false
22
- # * editor_options (Hash) - Will be passed to the render_essence_editor partial renderer
23
- #
24
- def render_essence_editor_by_type(element, essence_type, options = {}, editor_options = {})
25
- return warning('Element is nil', t("no_element_given")) if element.blank?
26
- return warning('EssenceType is blank', t("No EssenceType given")) if essence_type.blank?
27
- defaults = {
28
- :position => 1,
29
- :all => false
30
- }
31
- options = defaults.merge(options)
32
- essence_type = Alchemy::Content.normalize_essence_type(essence_type)
33
- return_string = ""
34
- if options[:all]
35
- contents = element.contents.find_all_by_essence_type_and_name(essence_type, options[:all])
36
- contents.each do |content|
37
- return_string << render_essence_editor(content, editor_options)
38
- end
39
- else
40
- content = element.contents.find_by_essence_type_and_position(essence_type, options[:position])
41
- return_string = render_essence_editor(content, editor_options)
42
- end
43
- return_string
44
- end
14
+ # Renders the Content editor partial from essence_type.
15
+ #
16
+ # Options are:
17
+ # * element (Element) - the Element the contents are in (obligatory)
18
+ # * type (String) - the type of Essence (obligatory)
19
+ # * options (Hash):
20
+ # ** :position (Integer) - The position of the Content inside the Element. I.E. for getting the n-th EssencePicture. Default is 1 (the first)
21
+ # ** :all (String) - Pass :all to get all Contents of that name. Default false
22
+ # * editor_options (Hash) - Will be passed to the render_essence_editor partial renderer
23
+ #
24
+ def render_essence_editor_by_type(element, essence_type, options = {}, editor_options = {})
25
+ return warning('Element is nil', t("no_element_given")) if element.blank?
26
+ return warning('EssenceType is blank', t("No EssenceType given")) if essence_type.blank?
27
+ defaults = {
28
+ :position => 1,
29
+ :all => false
30
+ }
31
+ options = defaults.merge(options)
32
+ essence_type = Alchemy::Content.normalize_essence_type(essence_type)
33
+ return_string = ""
34
+ if options[:all]
35
+ contents = element.contents.find_all_by_essence_type_and_name(essence_type, options[:all])
36
+ contents.each do |content|
37
+ return_string << render_essence_editor(content, editor_options)
38
+ end
39
+ else
40
+ content = element.contents.find_by_essence_type_and_position(essence_type, options[:position])
41
+ return_string = render_essence_editor(content, editor_options)
42
+ end
43
+ return_string
44
+ end
45
45
 
46
- # Renders the Content editor partial from the given Element by position (e.g. 1).
47
- # For options see -> render_essence
48
- def render_essence_editor_by_position(element, position, options = {})
49
- if element.blank?
50
- warning('Element is nil')
51
- return ""
52
- end
53
- content = element.contents.find_by_position(position)
54
- if content.nil?
55
- render_missing_content(element, position, options)
56
- else
57
- render_essence_editor(content, options)
58
- end
59
- end
46
+ # Renders the Content editor partial from the given Element by position (e.g. 1).
47
+ # For options see -> render_essence
48
+ def render_essence_editor_by_position(element, position, options = {})
49
+ if element.blank?
50
+ warning('Element is nil')
51
+ return ""
52
+ end
53
+ content = element.contents.find_by_position(position)
54
+ if content.nil?
55
+ render_missing_content(element, position, options)
56
+ else
57
+ render_essence_editor(content, options)
58
+ end
59
+ end
60
60
 
61
- # Renders the Content editor partial found in views/contents/ for the content with name inside the passed Element.
62
- # For options see -> render_essence
63
- #
64
- # Content creation on the fly:
65
- #
66
- # If you update the elements.yml file after creating an element this helper displays a error message with an option to create the content.
67
- #
68
- def render_essence_editor_by_name(element, name, options = {}, html_options = {})
69
- if element.blank?
70
- return warning('Element is nil', t("no_element_given"))
71
- end
72
- content = element.content_by_name(name)
73
- if content.nil?
74
- render_missing_content(element, name, options)
75
- else
76
- render_essence_editor(content, options, html_options)
77
- end
78
- end
61
+ # Renders the Content editor partial found in views/contents/ for the content with name inside the passed Element.
62
+ # For options see -> render_essence
63
+ #
64
+ # Content creation on the fly:
65
+ #
66
+ # If you update the elements.yml file after creating an element this helper displays a error message with an option to create the content.
67
+ #
68
+ def render_essence_editor_by_name(element, name, options = {}, html_options = {})
69
+ if element.blank?
70
+ return warning('Element is nil', t("no_element_given"))
71
+ end
72
+ content = element.content_by_name(name)
73
+ if content.nil?
74
+ render_missing_content(element, name, options)
75
+ else
76
+ render_essence_editor(content, options, html_options)
77
+ end
78
+ end
79
79
 
80
- # Renders the EssenceText editor partial with a form select for storing page urlnames
81
- #
82
- # === Options:
83
- #
84
- # :only [Hash] # Pagelayout names. Only pages with this page_layout will be displayed inside the select.
85
- # :page_attribute [Symbol] # The Page attribute which will be stored.
86
- # :global [Boolean] # Display only global pages. Default is false.
87
- #
88
- def page_selector(element, content_name, options = {}, select_options = {})
89
- default_options = {
90
- :page_attribute => :id,
91
- :global => false,
92
- :prompt => t('Choose page')
93
- }
94
- options = default_options.merge(options)
95
- pages = Page.where({
96
- :language_id => session[:language_id],
97
- :layoutpage => options[:global] == true,
98
- :public => options[:global] == false
99
- })
100
- pages = pages.where({:page_layout => options[:only]}) if options[:only].present?
101
- content = element.content_by_name(content_name)
102
- options.update(
103
- :select_values => pages_for_select(pages, content ? content.essence.body : nil, options[:prompt], options[:page_attribute])
104
- )
105
- if content.nil?
106
- render_missing_content(element, content_name, options)
107
- else
108
- render_essence_editor(content, options)
109
- end
110
- end
80
+ # Renders the EssenceText editor partial with a form select for storing page urlnames
81
+ #
82
+ # === Options:
83
+ #
84
+ # :only [Hash] # Pagelayout names. Only pages with this page_layout will be displayed inside the select.
85
+ # :page_attribute [Symbol] # The Page attribute which will be stored.
86
+ # :global [Boolean] # Display only global pages. Default is false.
87
+ #
88
+ def page_selector(element, content_name, options = {}, select_options = {})
89
+ default_options = {
90
+ :page_attribute => :id,
91
+ :global => false,
92
+ :prompt => t('Choose page')
93
+ }
94
+ options = default_options.merge(options)
95
+ pages = Page.where({
96
+ :language_id => session[:language_id],
97
+ :layoutpage => options[:global] == true,
98
+ :public => options[:global] == false
99
+ })
100
+ pages = pages.where({:page_layout => options[:only]}) if options[:only].present?
101
+ content = element.content_by_name(content_name)
102
+ options.update(
103
+ :select_values => pages_for_select(pages, content ? content.essence.body : nil, options[:prompt], options[:page_attribute])
104
+ )
105
+ if content.nil?
106
+ render_missing_content(element, content_name, options)
107
+ else
108
+ render_essence_editor(content, options)
109
+ end
110
+ end
111
111
 
112
- def render_missing_content(element, name, options)
113
- render :partial => 'alchemy/admin/contents/missing', :locals => {:element => element, :name => name, :options => options}
114
- end
112
+ def render_missing_content(element, name, options)
113
+ render :partial => 'alchemy/admin/contents/missing', :locals => {:element => element, :name => name, :options => options}
114
+ end
115
115
 
116
- end
117
- end
116
+ end
117
+ end
118
118
  end