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,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
3
 
4
- APP_PATH = File.expand_path('../../config/application', __FILE__)
5
- require File.expand_path('../../config/boot', __FILE__)
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
6
  require 'rails/commands'
@@ -1,79 +1,79 @@
1
1
  FactoryGirl.define do
2
-
3
- factory :user, :class => 'Alchemy::User' do
4
- email 'john@doe.com'
5
- login "jdoe"
6
- password 's3cr3t'
7
- password_confirmation 's3cr3t'
8
-
9
- factory :admin_user do
10
- role "admin"
11
- end
12
-
13
- factory :registered_user do
14
- role "registered"
15
- end
16
-
17
- factory :author_user do
18
- role "author"
19
- end
20
-
21
- factory :editor_user do
22
- role "editor"
23
- end
24
-
25
- end
26
-
27
- factory :language, :class => 'Alchemy::Language' do
28
- language_code "kl"
29
- name 'Klingonian'
30
- default false
31
- frontpage_name 'Tuq'
32
- page_layout 'intro'
33
- public true
34
-
35
- factory :language_with_country_code do
36
- country_code 'cr'
37
- end
38
- end
39
-
40
- factory :page, :class => 'Alchemy::Page' do
41
-
42
- language { Alchemy::Language.find_by_language_code('kl') || Factory(:language) }
43
- name "A Page"
44
- parent_id { (Alchemy::Page.find_by_language_root(true) || Factory(:language_root_page)).id }
45
- page_layout "standard"
46
-
47
- factory :language_root_page do
48
- name 'Klingonian'
49
- page_layout 'intro'
50
- language_root true
51
- public true
52
- parent_id { Alchemy::Page.root.id }
53
- end
54
-
55
- factory :public_page do
56
- name "A Public Page"
57
- public true
58
- end
59
-
60
- factory :systempage do
61
- name "Systempage"
62
- parent_id { Alchemy::Page.root.id }
63
- language_root false
64
- page_layout nil
65
- language nil
66
- end
67
-
68
- end
69
-
70
- factory :cell, :class => 'Alchemy::Cell' do
71
- page { Alchemy::Page.find_by_language_root(true) || Factory(:language_root_page) }
72
- name "A Cell"
73
- end
74
-
75
- factory :element, :class => 'Alchemy::Element' do
76
- name 'article'
77
- end
2
+
3
+ factory :user, :class => 'Alchemy::User' do
4
+ email 'john@doe.com'
5
+ login "jdoe"
6
+ password 's3cr3t'
7
+ password_confirmation 's3cr3t'
8
+
9
+ factory :admin_user do
10
+ role "admin"
11
+ end
12
+
13
+ factory :registered_user do
14
+ role "registered"
15
+ end
16
+
17
+ factory :author_user do
18
+ role "author"
19
+ end
20
+
21
+ factory :editor_user do
22
+ role "editor"
23
+ end
24
+
25
+ end
26
+
27
+ factory :language, :class => 'Alchemy::Language' do
28
+ language_code "kl"
29
+ name 'Klingonian'
30
+ default false
31
+ frontpage_name 'Tuq'
32
+ page_layout 'intro'
33
+ public true
34
+
35
+ factory :language_with_country_code do
36
+ country_code 'cr'
37
+ end
38
+ end
39
+
40
+ factory :page, :class => 'Alchemy::Page' do
41
+
42
+ language { Alchemy::Language.find_by_language_code('kl') || Factory(:language) }
43
+ name "A Page"
44
+ parent_id { Factory(:language_root_page).id }
45
+ page_layout "standard"
46
+
47
+ factory :language_root_page do
48
+ name 'Klingonian'
49
+ page_layout 'intro'
50
+ language_root true
51
+ public true
52
+ parent_id { Alchemy::Page.root.id }
53
+ end
54
+
55
+ factory :public_page do
56
+ name "A Public Page"
57
+ public true
58
+ end
59
+
60
+ factory :systempage do
61
+ name "Systempage"
62
+ parent_id { Alchemy::Page.root.id }
63
+ language_root false
64
+ page_layout nil
65
+ language nil
66
+ end
67
+
68
+ end
69
+
70
+ factory :cell, :class => 'Alchemy::Cell' do
71
+ page { Alchemy::Page.find_by_language_root(true) || Factory(:language_root_page) }
72
+ name "A Cell"
73
+ end
74
+
75
+ factory :element, :class => 'Alchemy::Element' do
76
+ name 'article'
77
+ end
78
78
 
79
79
  end
@@ -4,37 +4,37 @@ describe Alchemy::Admin::BaseHelper do
4
4
 
5
5
  context "maximum amount of images option" do
6
6
 
7
- before(:each) do
8
- @options = {}
9
- end
7
+ before(:each) do
8
+ @options = {}
9
+ end
10
10
 
11
11
  context "with max_images option" do
12
12
 
13
- it "should return nil for empty string" do
14
- @options[:max_images] = ""
15
- max_image_count.should be(nil)
16
- end
13
+ it "should return nil for empty string" do
14
+ @options[:max_images] = ""
15
+ max_image_count.should be(nil)
16
+ end
17
17
 
18
- it "should return an integer for string number" do
19
- @options[:max_images] = "1"
20
- max_image_count.should be(1)
21
- end
18
+ it "should return an integer for string number" do
19
+ @options[:max_images] = "1"
20
+ max_image_count.should be(1)
21
+ end
22
22
 
23
23
  end
24
24
 
25
- context "with maximum_amount_of_images option" do
25
+ context "with maximum_amount_of_images option" do
26
26
 
27
- it "should return nil for empty string" do
28
- @options[:maximum_amount_of_images] = ""
29
- max_image_count.should be(nil)
30
- end
27
+ it "should return nil for empty string" do
28
+ @options[:maximum_amount_of_images] = ""
29
+ max_image_count.should be(nil)
30
+ end
31
31
 
32
- it "should return an integer for string number" do
33
- @options[:maximum_amount_of_images] = "1"
34
- max_image_count.should be(1)
35
- end
32
+ it "should return an integer for string number" do
33
+ @options[:maximum_amount_of_images] = "1"
34
+ max_image_count.should be(1)
35
+ end
36
36
 
37
- end
37
+ end
38
38
 
39
39
  end
40
40
 
@@ -2,24 +2,24 @@ require 'spec_helper'
2
2
 
3
3
  describe Alchemy::Admin::ContentsHelper do
4
4
 
5
- before(:each) do
6
- @element = Factory(:element)
7
- end
5
+ before(:each) do
6
+ @element = Factory(:element)
7
+ end
8
8
 
9
9
  it "should render a dom id" do
10
- helper.content_dom_id(@element.contents.first).should match(/essence_text_\d{1,}/)
11
- end
10
+ helper.content_dom_id(@element.contents.first).should match(/essence_text_\d{1,}/)
11
+ end
12
12
 
13
- it "should render the content name" do
14
- helper.render_content_name(@element.contents.first).should == "Intro"
15
- end
13
+ it "should render the content name" do
14
+ helper.render_content_name(@element.contents.first).should == "Intro"
15
+ end
16
16
 
17
- it "should render a link to add new content to element" do
18
- helper.render_new_content_link(@element).should match(/Alchemy.openWindow.+\/admin\/elements\/#{@element.id}\/contents\/new/m)
19
- end
17
+ it "should render a link to add new content to element" do
18
+ helper.render_new_content_link(@element).should match(/Alchemy.openWindow.+\/admin\/elements\/#{@element.id}\/contents\/new/m)
19
+ end
20
20
 
21
- it "should render a link to create a content in element" do
22
- helper.render_create_content_link(@element).should match(/a.+href.*admin\/contents.+class.+button new_content_link.*data-method.+post/)
23
- end
21
+ it "should render a link to create a content in element" do
22
+ helper.render_create_content_link(@element).should match(/a.+href.*admin\/contents.+class.+button new_content_link.*data-method.+post/)
23
+ end
24
24
 
25
25
  end
@@ -4,45 +4,45 @@ include Alchemy::BaseHelper
4
4
 
5
5
  describe Alchemy::Admin::ElementsHelper do
6
6
 
7
- before(:each) do
8
- @page = Factory(:public_page)
9
- @element = Factory(:element, :page => @page)
10
- end
11
-
12
- it "should render an element editor partial" do
13
- helper.render_editor(@element).should match(/class="content_editor".+id="essence_text_\d{1,}"/)
14
- end
15
-
16
- it "should render a picture editor partial" do
17
- helper.render_picture_editor(@element).should match(/class="essence_picture_editor"/)
18
- end
19
-
20
- describe "#grouped_elements_for_select" do
21
-
22
- before(:each) do
23
- @page.stub!(:layout_description).and_return({'name' => "foo", 'cells' => ["foo_cell"]})
24
- cell_descriptions = [{'name' => "foo_cell", 'elements' => ["1", "2"]}]
25
- @elements = [{'name' => '1'}, {'name' => '2'}]
26
- Alchemy::Cell.stub!(:definitions).and_return(cell_descriptions)
27
- end
28
-
29
- it "should return string of elements grouped by cell for select_tag helper" do
30
- helper.grouped_elements_for_select(@elements).should == helper.grouped_options_for_select({"Foo cell"=>[["1", "1#foo_cell"], ["2", "2#foo_cell"]]})
31
- end
32
-
33
- context "with empty elements array" do
34
- it "should return an empty string" do
35
- helper.grouped_elements_for_select([]).should == ""
36
- end
37
- end
38
-
39
- context "with empty cell definitions" do
40
- it "should return an empty string" do
41
- @page.stub!(:layout_description).and_return({'name' => "foo"})
42
- helper.grouped_elements_for_select(@elements).should == ""
43
- end
44
- end
45
-
46
- end
7
+ before(:each) do
8
+ @page = Factory(:public_page)
9
+ @element = Factory(:element, :page => @page)
10
+ end
11
+
12
+ it "should render an element editor partial" do
13
+ helper.render_editor(@element).should match(/class="content_editor".+id="essence_text_\d{1,}"/)
14
+ end
15
+
16
+ it "should render a picture editor partial" do
17
+ helper.render_picture_editor(@element).should match(/class="essence_picture_editor"/)
18
+ end
19
+
20
+ describe "#grouped_elements_for_select" do
21
+
22
+ before(:each) do
23
+ @page.stub!(:layout_description).and_return({'name' => "foo", 'cells' => ["foo_cell"]})
24
+ cell_descriptions = [{'name' => "foo_cell", 'elements' => ["1", "2"]}]
25
+ @elements = [{'name' => '1'}, {'name' => '2'}]
26
+ Alchemy::Cell.stub!(:definitions).and_return(cell_descriptions)
27
+ end
28
+
29
+ it "should return string of elements grouped by cell for select_tag helper" do
30
+ helper.grouped_elements_for_select(@elements).should == helper.grouped_options_for_select({"Foo cell" => [["1", "1#foo_cell"], ["2", "2#foo_cell"]]})
31
+ end
32
+
33
+ context "with empty elements array" do
34
+ it "should return an empty string" do
35
+ helper.grouped_elements_for_select([]).should == ""
36
+ end
37
+ end
38
+
39
+ context "with empty cell definitions" do
40
+ it "should return an empty string" do
41
+ @page.stub!(:layout_description).and_return({'name' => "foo"})
42
+ helper.grouped_elements_for_select(@elements).should == ""
43
+ end
44
+ end
45
+
46
+ end
47
47
 
48
48
  end
@@ -2,15 +2,15 @@ require 'spec_helper'
2
2
 
3
3
  describe Alchemy::Admin::EssencesHelper do
4
4
 
5
- before(:each) do
6
- @element = Factory(:element)
7
- @element.content_by_name('intro').essence.update_attributes(:body => 'hello!')
8
- end
5
+ before(:each) do
6
+ @element = Factory(:element)
7
+ @element.content_by_name('intro').essence.update_attributes(:body => 'hello!')
8
+ end
9
9
 
10
- it "should render an essence editor" do
11
- content = @element.content_by_name('intro')
10
+ it "should render an essence editor" do
11
+ content = @element.content_by_name('intro')
12
12
  render_essence_editor(content).should match(/input.+type="text".+value="hello!/)
13
- end
13
+ end
14
14
 
15
15
  it "should render an essence editor by name" do
16
16
  render_essence_editor_by_name(@element, 'intro').should match(/input.+type="text".+value="hello!/)
@@ -4,159 +4,159 @@ include Alchemy::BaseHelper
4
4
 
5
5
  describe Alchemy::ElementsHelper do
6
6
 
7
- before(:each) do
8
- @page = Factory(:public_page)
9
- @element = Factory(:element, :page => @page)
10
- session[:language_id] = @page.language_id
11
- end
12
-
13
- it "should render an element view partial" do
14
- helper.render_element(@element).should match(/id="#{@element.name}_#{@element.id}"/)
15
- end
16
-
17
- it "should render a unique dom id for element" do
18
- helper.element_dom_id(@element).should == "#{@element.name}_#{@element.id}"
19
- end
20
-
21
- describe "#render_elements" do
22
-
23
- before(:each) do
24
- helper.stub!(:configuration).and_return(true)
25
- end
26
-
27
- context "with no certain option given" do
28
- it "should render all elements from @page" do
29
- @another_element = Factory(:element, :page => @page)
30
- # m for regex means line breaks are like every character
31
- helper.render_elements.should match(/id="#{@element.name}_#{@element.id.to_s}.*id="#{@another_element.name}_#{@another_element.id.to_s}"/m)
32
- end
33
-
34
- it "should not render elements that are in a cell" do
35
- cell = Factory(:cell)
36
- @another_element = Factory(:element, :page => @page, :cell_id => cell.id)
37
- helper.render_elements.should_not match(/id="#{@another_element.name}_#{@another_element.id}"/)
38
- end
39
- end
40
-
41
- context "with except option" do
42
- it "should render all elements except a certain one" do
43
- @another_element = Factory(:element, :page => @page)
44
- helper.render_elements(:except => @another_element.name).should_not match(/id="#{@another_element.name}_\d*"/)
45
- end
46
- end
47
-
48
- context "with only option" do
49
- it "should render one certain element" do
50
- @another_element = Factory(:element, :name => 'headline', :page => @page)
51
- helper.render_elements(:only => @element.name).should_not match(/id="#{@another_element.name}_\d*"/)
52
- end
53
- end
54
-
55
- context "with from_page option" do
56
- it "should render all elements from a certain page" do
57
- @another_page = Factory(:public_page, :name => 'Another Page')
58
- @element_on_other_page = Factory(:element, :name => 'headline', :page => @another_page)
59
- helper.render_elements(:from_page => @another_page).should match(/id="#{@element_on_other_page.name}_\d*"/)
60
- end
61
-
62
- it "should not render any elements in a cell from the given page" do
63
- @another_page = Factory(:public_page, :name => 'Another Page')
64
- @cell = Factory(:cell, :name => "Celltest", :page => @another_page)
65
- @element_not_in_cell = Factory(:element, :name => 'headline', :page => @another_page)
66
- @element_in_cell = Factory(:element, :name => 'article', :cell => @cell, :page => @another_page)
67
- helper.render_elements(:from_page => @another_page).should_not match(/id="#{@element_in_cell.name}_#{@element_in_cell.id}*"/)
68
- end
69
-
70
- context "and from_cell option" do
71
- it "should render all elements from the page's cell" do
72
- @another_page = Factory(:public_page, :name => 'Another Page')
73
- @cell = Factory(:cell, :name => "Celltest", :page => @another_page)
74
- @element_not_in_cell = Factory(:element, :name => 'headline', :page => @another_page)
75
- @element_in_cell = Factory(:element, :name => 'article', :cell => @cell, :page => @another_page)
76
- helper.render_elements(:from_page => @another_page, :from_cell => "Celltest").should match(/id="#{@element_in_cell.name}_#{@element_in_cell.id}*"/)
77
- end
78
- end
79
-
80
- end
81
-
82
- context "with from_cell option" do
83
- it "should render all elements from a certain cell" do
84
- cell = Factory(:cell)
85
- @another_element = Factory(:element, :page => @page, :cell_id => cell.id)
86
- helper.render_elements(:from_cell => cell).should match(/id="#{@another_element.name}_#{@another_element.id}"/)
87
- end
88
-
89
- context "with from_cell and only option" do
90
- it "should render certain elements from a certain cell" do
91
- cell = Factory(:cell)
92
- @another_element = Factory(:element, :page => @page, :cell_id => cell.id)
93
- @another_element2 = Factory(:element, :page => @page)
94
- helper.render_elements(:from_cell => cell, :only => @another_element.name).should_not match(/id="#{@another_element2.name}_#{@another_element2.id}"/)
95
- end
96
- end
97
-
98
- context "with from_cell and except option" do
99
- it "should render all elements except certain ones from a certain cell" do
100
- cell = Factory(:cell)
101
- @another_element = Factory(:element, :page => @page, :cell_id => cell.id)
102
- @another_element2 = Factory(:element, :page => @page, :cell_id => cell.id)
103
- helper.render_elements(:from_cell => cell, :except => @another_element.name).should_not match(/id="#{@another_element.name}_#{@another_element.id}"/)
104
- end
105
- end
106
-
107
- end
108
-
109
- context "with count option" do
110
- it "should render just one element because of the count option" do
111
- @page.elements.delete_all
112
- @another_element_1 = Factory(:element, :page => @page)
113
- @another_element_2 = Factory(:element, :page => @page)
114
- @another_element_3 = Factory(:element, :page => @page)
115
- helper.render_elements(:count => 1).should match(/id="#{@another_element_1.name}_#{@another_element_1.id}"/)
116
- end
117
- end
118
-
119
- context "with offset option" do
120
- it "should render all elements beginning with the second." do
121
- @page.elements.delete_all
122
- @another_page = Factory(:public_page, :name => 'Another Page')
123
- @another_element_1 = Factory(:element, :page => @page)
124
- @another_element_2 = Factory(:element, :page => @page)
125
- @another_element_3 = Factory(:element, :page => @page)
126
- helper.render_elements(:offset => 1).should_not match(/id="#{@another_element_1.name}_#{@another_element_1.id}"/)
127
- end
128
- end
129
-
130
- context "with option fallback" do
131
- it "should render the fallback element, when no element with the given name is found" do
132
- @page.elements.delete_all
133
- @another_element_1 = Factory(:element, :page => @page)
134
- helper.render_elements(:fallback => {:for => 'foo', :with => @another_element_1.name, :from => @page.page_layout}).should match(/id="#{@another_element_1.name}_#{@another_element_1.id}"/)
135
- end
136
- end
137
-
138
- end
139
-
140
- describe "#render_cell_elements" do
141
- it "should render elements for a cell" do
142
- cell = Factory(:cell)
143
- @element_in_cell = Factory(:element, :cell_id => cell.id)
144
- helper.stub(:configuration).and_return(true)
145
- helper.render_cell_elements(cell).should match(/id="#{@element_in_cell.name}_#{@element_in_cell.id}"/)
146
- end
147
- end
148
-
149
- context "in preview mode" do
150
-
151
- it "should return the data-alchemy-element HTML attribute for element" do
152
- @preview_mode = true
153
- helper.element_preview_code(@element).should == " data-alchemy-element='#{@element.id}'"
154
- end
155
-
156
- it "should not return the data-alchemy-element HTML attribute if not in preview_mode" do
157
- helper.element_preview_code(@element).should_not == " data-alchemy-element='#{@element.id}'"
158
- end
159
-
160
- end
7
+ before(:each) do
8
+ @page = Factory(:public_page)
9
+ @element = Factory(:element, :page => @page)
10
+ session[:language_id] = @page.language_id
11
+ end
12
+
13
+ it "should render an element view partial" do
14
+ helper.render_element(@element).should match(/id="#{@element.name}_#{@element.id}"/)
15
+ end
16
+
17
+ it "should render a unique dom id for element" do
18
+ helper.element_dom_id(@element).should == "#{@element.name}_#{@element.id}"
19
+ end
20
+
21
+ describe "#render_elements" do
22
+
23
+ before(:each) do
24
+ helper.stub!(:configuration).and_return(true)
25
+ end
26
+
27
+ context "with no certain option given" do
28
+ it "should render all elements from @page" do
29
+ @another_element = Factory(:element, :page => @page)
30
+ # m for regex means line breaks are like every character
31
+ helper.render_elements.should match(/id="#{@element.name}_#{@element.id.to_s}.*id="#{@another_element.name}_#{@another_element.id.to_s}"/m)
32
+ end
33
+
34
+ it "should not render elements that are in a cell" do
35
+ cell = Factory(:cell)
36
+ @another_element = Factory(:element, :page => @page, :cell_id => cell.id)
37
+ helper.render_elements.should_not match(/id="#{@another_element.name}_#{@another_element.id}"/)
38
+ end
39
+ end
40
+
41
+ context "with except option" do
42
+ it "should render all elements except a certain one" do
43
+ @another_element = Factory(:element, :page => @page)
44
+ helper.render_elements(:except => @another_element.name).should_not match(/id="#{@another_element.name}_\d*"/)
45
+ end
46
+ end
47
+
48
+ context "with only option" do
49
+ it "should render one certain element" do
50
+ @another_element = Factory(:element, :name => 'headline', :page => @page)
51
+ helper.render_elements(:only => @element.name).should_not match(/id="#{@another_element.name}_\d*"/)
52
+ end
53
+ end
54
+
55
+ context "with from_page option" do
56
+ it "should render all elements from a certain page" do
57
+ @another_page = Factory(:public_page)
58
+ @element_on_other_page = Factory(:element, :name => 'headline', :page => @another_page)
59
+ helper.render_elements(:from_page => @another_page).should match(/id="#{@element_on_other_page.name}_\d*"/)
60
+ end
61
+
62
+ it "should not render any elements in a cell from the given page" do
63
+ @another_page = Factory(:public_page)
64
+ @cell = Factory(:cell, :name => "Celltest", :page => @another_page)
65
+ @element_not_in_cell = Factory(:element, :name => 'headline', :page => @another_page)
66
+ @element_in_cell = Factory(:element, :name => 'article', :cell => @cell, :page => @another_page)
67
+ helper.render_elements(:from_page => @another_page).should_not match(/id="#{@element_in_cell.name}_#{@element_in_cell.id}*"/)
68
+ end
69
+
70
+ context "and from_cell option" do
71
+ it "should render all elements from the page's cell" do
72
+ @another_page = Factory(:public_page)
73
+ @cell = Factory(:cell, :name => "Celltest", :page => @another_page)
74
+ @element_not_in_cell = Factory(:element, :name => 'headline', :page => @another_page)
75
+ @element_in_cell = Factory(:element, :name => 'article', :cell => @cell, :page => @another_page)
76
+ helper.render_elements(:from_page => @another_page, :from_cell => "Celltest").should match(/id="#{@element_in_cell.name}_#{@element_in_cell.id}*"/)
77
+ end
78
+ end
79
+
80
+ end
81
+
82
+ context "with from_cell option" do
83
+ it "should render all elements from a certain cell" do
84
+ cell = Factory(:cell)
85
+ @another_element = Factory(:element, :page => @page, :cell_id => cell.id)
86
+ helper.render_elements(:from_cell => cell).should match(/id="#{@another_element.name}_#{@another_element.id}"/)
87
+ end
88
+
89
+ context "with from_cell and only option" do
90
+ it "should render certain elements from a certain cell" do
91
+ cell = Factory(:cell)
92
+ @another_element = Factory(:element, :page => @page, :cell_id => cell.id)
93
+ @another_element2 = Factory(:element, :page => @page)
94
+ helper.render_elements(:from_cell => cell, :only => @another_element.name).should_not match(/id="#{@another_element2.name}_#{@another_element2.id}"/)
95
+ end
96
+ end
97
+
98
+ context "with from_cell and except option" do
99
+ it "should render all elements except certain ones from a certain cell" do
100
+ cell = Factory(:cell)
101
+ @another_element = Factory(:element, :page => @page, :cell_id => cell.id)
102
+ @another_element2 = Factory(:element, :page => @page, :cell_id => cell.id)
103
+ helper.render_elements(:from_cell => cell, :except => @another_element.name).should_not match(/id="#{@another_element.name}_#{@another_element.id}"/)
104
+ end
105
+ end
106
+
107
+ end
108
+
109
+ context "with count option" do
110
+ it "should render just one element because of the count option" do
111
+ @page.elements.delete_all
112
+ @another_element_1 = Factory(:element, :page => @page)
113
+ @another_element_2 = Factory(:element, :page => @page)
114
+ @another_element_3 = Factory(:element, :page => @page)
115
+ helper.render_elements(:count => 1).should match(/id="#{@another_element_1.name}_#{@another_element_1.id}"/)
116
+ end
117
+ end
118
+
119
+ context "with offset option" do
120
+ it "should render all elements beginning with the second." do
121
+ @page.elements.delete_all
122
+ @another_page = Factory(:public_page)
123
+ @another_element_1 = Factory(:element, :page => @page)
124
+ @another_element_2 = Factory(:element, :page => @page)
125
+ @another_element_3 = Factory(:element, :page => @page)
126
+ helper.render_elements(:offset => 1).should_not match(/id="#{@another_element_1.name}_#{@another_element_1.id}"/)
127
+ end
128
+ end
129
+
130
+ context "with option fallback" do
131
+ it "should render the fallback element, when no element with the given name is found" do
132
+ @page.elements.delete_all
133
+ @another_element_1 = Factory(:element, :page => @page)
134
+ helper.render_elements(:fallback => {:for => 'foo', :with => @another_element_1.name, :from => @page.page_layout}).should match(/id="#{@another_element_1.name}_#{@another_element_1.id}"/)
135
+ end
136
+ end
137
+
138
+ end
139
+
140
+ describe "#render_cell_elements" do
141
+ it "should render elements for a cell" do
142
+ cell = Factory(:cell)
143
+ @element_in_cell = Factory(:element, :cell_id => cell.id)
144
+ helper.stub(:configuration).and_return(true)
145
+ helper.render_cell_elements(cell).should match(/id="#{@element_in_cell.name}_#{@element_in_cell.id}"/)
146
+ end
147
+ end
148
+
149
+ context "in preview mode" do
150
+
151
+ it "should return the data-alchemy-element HTML attribute for element" do
152
+ @preview_mode = true
153
+ helper.element_preview_code(@element).should == " data-alchemy-element='#{@element.id}'"
154
+ end
155
+
156
+ it "should not return the data-alchemy-element HTML attribute if not in preview_mode" do
157
+ helper.element_preview_code(@element).should_not == " data-alchemy-element='#{@element.id}'"
158
+ end
159
+
160
+ end
161
161
 
162
162
  end