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
@@ -2,20 +2,20 @@ require 'spec_helper'
2
2
 
3
3
  describe Alchemy::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" do
11
- content = @element.content_by_name('intro')
10
+ it "should render an essence" do
11
+ content = @element.content_by_name('intro')
12
12
  render_essence(content).should match(/hello!/)
13
- end
13
+ end
14
14
 
15
- it "should render an essence view" do
16
- content = @element.content_by_name('intro')
15
+ it "should render an essence view" do
16
+ content = @element.content_by_name('intro')
17
17
  render_essence_view(content).should match(/hello!/)
18
- end
18
+ end
19
19
 
20
20
  it "should render an essence view by name" do
21
21
  render_essence_view_by_name(@element, 'intro').should match(/hello!/)
@@ -4,422 +4,419 @@ include Alchemy::BaseHelper
4
4
 
5
5
  describe Alchemy::PagesHelper do
6
6
 
7
- before(:each) do
8
- helper.stub(:configuration).and_return(false)
9
- end
7
+ before(:each) do
8
+ helper.stub(:configuration).and_return(false)
9
+ end
10
10
 
11
- it "should render the current page layout" do
12
- @page = Factory(:public_page)
13
- render_page_layout.should have_selector('div#content')
14
- end
11
+ it "should render the current page layout" do
12
+ @page = Factory(:public_page)
13
+ render_page_layout.should have_selector('div#content')
14
+ end
15
15
 
16
- describe "#render_navigation" do
16
+ describe "#render_navigation" do
17
17
 
18
- before(:each) do
19
- @language = Alchemy::Language.get_default
20
- @root_page = Factory(:language_root_page, :language => @language, :name => 'Home')
21
- @page = Factory(:public_page, :language => @language, :parent_id => @root_page.id, :visible => true)
22
- end
18
+ before(:each) do
19
+ @language = Alchemy::Language.get_default
20
+ @root_page = Factory(:language_root_page, :language => @language, :name => 'Home')
21
+ @page = Factory(:public_page, :language => @language, :parent_id => @root_page.id, :visible => true)
22
+ end
23
23
 
24
- context "not in multi_language mode" do
24
+ context "not in multi_language mode" do
25
25
 
26
- before(:each) do
27
- helper.stub(:multi_language?).and_return(false)
28
- end
26
+ before(:each) do
27
+ helper.stub(:multi_language?).and_return(false)
28
+ end
29
29
 
30
- it "should render the page navigation" do
31
- helper.render_navigation.should have_selector('ul.navigation_level_1 li.a-public-page.active.last a.active[href="/alchemy/a-public-page"]')
32
- end
30
+ it "should render the page navigation" do
31
+ helper.render_navigation.should have_selector('ul.navigation_level_1 li.a-public-page.active.last a.active[href="/alchemy/a-public-page"]')
32
+ end
33
33
 
34
- context "with enabled url nesting" do
34
+ context "with enabled url nesting" do
35
35
 
36
- before(:each) do
37
- helper.stub!(:configuration).and_return(true)
38
- @level2 = Factory(:public_page, :parent_id => @page.id, :language => @language, :name => 'Level 2', :visible => true)
39
- @page = Factory(:public_page, :parent_id => @level2.id, :language => @language, :name => 'Nested Page', :visible => true)
40
- end
36
+ before(:each) do
37
+ helper.stub!(:configuration).and_return(true)
38
+ @level2 = Factory(:public_page, :parent_id => @page.id, :language => @language, :name => 'Level 2', :visible => true)
39
+ @page = Factory(:public_page, :parent_id => @level2.id, :language => @language, :name => 'Nested Page', :visible => true)
40
+ end
41
41
 
42
- it "should render nested page links" do
43
- helper.render_navigation(:all_sub_menues => true).should have_selector('ul li a[href="/alchemy/a-public-page/level-2/nested-page"]')
44
- end
42
+ it "should render nested page links" do
43
+ helper.render_navigation(:all_sub_menues => true).should have_selector('ul li a[href="/alchemy/a-public-page/level-2/nested-page"]')
44
+ end
45
45
 
46
- end
46
+ end
47
47
 
48
- end
48
+ end
49
49
 
50
- end
50
+ end
51
51
 
52
- describe '#render_subnavigation' do
52
+ describe '#render_subnavigation' do
53
53
 
54
- before(:each) do
55
- @language = Alchemy::Language.get_default
56
- @language_root = Factory(:language_root_page, :language => @language, :name => 'Intro')
57
- @level_1 = Factory(:public_page, :language => @language, :parent_id => @language_root.id, :visible => true, :name => 'Level 1')
58
- @level_2 = Factory(:public_page, :language => @language, :parent_id => @level_1.id, :visible => true, :name => 'Level 2')
59
- @level_3 = Factory(:public_page, :language => @language, :parent_id => @level_2.id, :visible => true, :name => 'Level 3')
60
- @level_4 = Factory(:public_page, :language => @language, :parent_id => @level_3.id, :visible => true, :name => 'Level 4')
61
- helper.stub(:multi_language?).and_return(false)
62
- end
54
+ before(:each) do
55
+ @language = Alchemy::Language.get_default
56
+ @language_root = Factory(:language_root_page, :language => @language, :name => 'Intro')
57
+ @level_1 = Factory(:public_page, :language => @language, :parent_id => @language_root.id, :visible => true, :name => 'Level 1')
58
+ @level_2 = Factory(:public_page, :language => @language, :parent_id => @level_1.id, :visible => true, :name => 'Level 2')
59
+ @level_3 = Factory(:public_page, :language => @language, :parent_id => @level_2.id, :visible => true, :name => 'Level 3')
60
+ @level_4 = Factory(:public_page, :language => @language, :parent_id => @level_3.id, :visible => true, :name => 'Level 4')
61
+ helper.stub(:multi_language?).and_return(false)
62
+ end
63
63
 
64
- it "should return nil if no @page is set" do
65
- helper.render_subnavigation.should be(nil)
66
- end
67
-
68
- context "showing a page with level 2" do
69
-
70
- before(:each) do
71
- @page = @level_2
72
- end
73
-
74
- it "should render the navigation from current page" do
75
- helper.render_subnavigation.should have_selector('ul > li > a[href="/alchemy/level-2"]')
76
- end
77
-
78
- it "should set current page active" do
79
- helper.render_subnavigation.should have_selector('a[href="/alchemy/level-2"].active')
80
- end
81
-
82
- end
83
-
84
- context "showing a page with level 3" do
85
-
86
- before(:each) do
87
- @page = @level_3
88
- end
89
-
90
- it "should render the navigation from current pages parent" do
91
- helper.render_subnavigation.should have_selector('ul > li > ul > li > a[href="/alchemy/level-3"]')
92
- end
93
-
94
- it "should set current page active" do
95
- helper.render_subnavigation.should have_selector('a[href="/alchemy/level-3"].active')
96
- end
97
-
98
- end
99
-
100
- context "showing a page with level 4" do
101
-
102
- before(:each) do
103
- @page = @level_4
104
- end
105
-
106
- it "should render the navigation from current pages parents parent" do
107
- helper.render_subnavigation.should have_selector('ul > li > ul > li > ul > li > a[href="/alchemy/level-4"]')
108
- end
64
+ it "should return nil if no @page is set" do
65
+ helper.render_subnavigation.should be(nil)
66
+ end
109
67
 
110
- it "should set current page active" do
111
- helper.render_subnavigation.should have_selector('a[href="/alchemy/level-4"].active')
112
- end
113
-
114
- context "beginning with level 3" do
68
+ context "showing a page with level 2" do
115
69
 
116
- it "should render the navigation beginning from its parent" do
117
- helper.render_subnavigation(:level => 3).should have_selector('ul > li > ul > li > a[href="/alchemy/level-4"]')
118
- end
119
-
120
- end
121
-
122
- end
70
+ before(:each) do
71
+ @page = @level_2
72
+ end
123
73
 
124
- end
74
+ it "should render the navigation from current page" do
75
+ helper.render_subnavigation.should have_selector('ul > li > a[href="/alchemy/level-2"]')
76
+ end
125
77
 
126
- describe "#render_breadcrumb" do
127
-
128
- before(:each) do
129
- helper.stub(:multi_language?).and_return(false)
130
- @root = mock_model('Page', :urlname => 'root', :name => 'Root', :title => 'Root', :visible? => false, :public? => false, :restricted? => false)
131
- @language_root = mock_model('Page', :urlname => 'language_root', :name => 'Language Root', :title => 'Language Root', :visible? => true, :public? => true, :restricted? => false)
132
- @page = mock_model('Page', :urlname => 'a-public-page', :name => 'A Public Page', :title => 'A Public Page', :visible? => true, :public? => true, :restricted? => false)
133
- @root.should_receive(:parent).and_return(nil)
134
- @language_root.should_receive(:parent).and_return(@root)
135
- @page.should_receive(:parent).and_return(@language_root)
136
- end
137
-
138
- it "should render a breadcrumb to current page" do
139
- helper.render_breadcrumb.should have_selector('a.active.last[href="/alchemy/a-public-page"]')
140
- end
78
+ it "should set current page active" do
79
+ helper.render_subnavigation.should have_selector('a[href="/alchemy/level-2"].active')
80
+ end
141
81
 
142
- it "should render a breadcrumb with a alternative seperator" do
143
- helper.render_breadcrumb(:seperator => '<span>###</span>').should have_selector('span[contains("###")]')
144
- end
82
+ end
145
83
 
146
- it "should render a breadcrumb in reversed order" do
147
- helper.render_breadcrumb(:reverse => true).should have_selector('a.active.first[href="/alchemy/a-public-page"]')
148
- end
84
+ context "showing a page with level 3" do
149
85
 
150
- it "should render a breadcrumb of restricted pages only" do
151
- @page.stub!(:restricted? => true, :urlname => 'a-restricted-public-page', :name => 'A restricted Public Page', :title => 'A restricted Public Page')
152
- helper.render_breadcrumb(:restricted_only => true).should match(/^(<a(.[^>]+)>)A restricted Public Page/)
153
- end
154
-
155
- it "should render a breadcrumb of visible pages only" do
156
- @page.stub!(:visible? => false, :urlname => 'a-invisible-public-page', :name => 'A invisible Public Page', :title => 'A invisible Public Page')
157
- helper.render_breadcrumb(:visible_only => true).should_not match(/A invisible Public Page/)
158
- end
86
+ before(:each) do
87
+ @page = @level_3
88
+ end
159
89
 
160
- it "should render a breadcrumb of visible and invisible pages" do
161
- @page.stub!(:visible? => false, :urlname => 'a-invisible-public-page', :name => 'A invisible Public Page', :title => 'A invisible Public Page')
162
- helper.render_breadcrumb(:visible_only => false).should match(/A invisible Public Page/)
163
- end
164
-
165
- it "should render a breadcrumb of published pages only" do
166
- @page.stub!(:public => false, :public? => false, :urlname => 'a-unpublic-page', :name => 'A Unpublic Page', :title => 'A Unpublic Page')
167
- helper.render_breadcrumb(:public_only => true).should_not match(/A Unpublic Page/)
168
- end
169
-
170
- it "should render a breadcrumb of published and unpublished pages" do
171
- @page.stub!(:public => false, :public? => false, :urlname => 'a-unpublic-page', :name => 'A Unpublic Page', :title => 'A Unpublic Page')
172
- helper.render_breadcrumb(:public_only => false).should match(/A Unpublic Page/)
173
- end
90
+ it "should render the navigation from current pages parent" do
91
+ helper.render_subnavigation.should have_selector('ul > li > ul > li > a[href="/alchemy/level-3"]')
92
+ end
174
93
 
175
- it "should render a breadcrumb without the page named 'Not Me'" do
176
- @page.stub!(:urlname => 'not-me', :name => 'Not Me', :title => 'Not Me')
177
- helper.render_breadcrumb(:without => @page).should_not match(/Not Me/)
178
- end
179
-
180
- end
94
+ it "should set current page active" do
95
+ helper.render_subnavigation.should have_selector('a[href="/alchemy/level-3"].active')
96
+ end
181
97
 
182
- describe "using own url helpers" do
98
+ end
183
99
 
184
- before(:each) do
185
- @page = mock_model(Alchemy::Page, :urlname => 'testpage', :language_code => 'en')
186
- end
100
+ context "showing a page with level 4" do
187
101
 
188
- describe "#show_page_path_params" do
102
+ before(:each) do
103
+ @page = @level_4
104
+ end
189
105
 
190
- context "when multi_language" do
106
+ it "should render the navigation from current pages parents parent" do
107
+ helper.render_subnavigation.should have_selector('ul > li > ul > li > ul > li > a[href="/alchemy/level-4"]')
108
+ end
191
109
 
192
- before(:each) do
193
- helper.stub!(:multi_language?).and_return(true)
194
- end
110
+ it "should set current page active" do
111
+ helper.render_subnavigation.should have_selector('a[href="/alchemy/level-4"].active')
112
+ end
195
113
 
196
- it "should return a Hash with urlname and language_id parameter" do
197
- helper.stub!(:multi_language?).and_return(true)
198
- helper.show_page_path_params(@page).should include(:urlname => 'testpage', :lang => 'en')
199
- end
114
+ context "beginning with level 3" do
200
115
 
201
- it "should return a Hash with urlname, language_id and query parameter" do
202
- helper.stub!(:multi_language?).and_return(true)
203
- helper.show_page_path_params(@page, {:query => 'test'}).should include(:urlname => 'testpage', :lang => 'en', :query => 'test')
204
- end
116
+ it "should render the navigation beginning from its parent" do
117
+ helper.render_subnavigation(:level => 3).should have_selector('ul > li > ul > li > a[href="/alchemy/level-4"]')
118
+ end
205
119
 
206
- end
207
-
208
- context "not multi_language" do
209
-
210
- before(:each) do
211
- helper.stub!(:multi_language?).and_return(false)
212
- end
213
-
214
- it "should return a Hash with the urlname but without language_id parameter" do
215
- helper.show_page_path_params(@page).should include(:urlname => 'testpage')
216
- helper.show_page_path_params(@page).should_not include(:lang => 'en')
217
- end
218
-
219
- it "should return a Hash with urlname and query parameter" do
220
- helper.show_page_path_params(@page, {:query => 'test'}).should include(:urlname => 'testpage', :query => 'test')
221
- helper.show_page_path_params(@page).should_not include(:lang => 'en')
222
- end
223
-
224
- end
225
-
226
- end
227
-
228
- describe "#show_alchemy_page_path" do
229
-
230
- context "when multi_language" do
231
-
232
- before(:each) do
233
- helper.stub!(:multi_language?).and_return(true)
234
- end
235
-
236
- it "should return the correct relative path string" do
237
- helper.show_alchemy_page_path(@page).should == "/alchemy/#{@page.language_code}/testpage"
238
- end
239
-
240
- it "should return the correct relative path string with additional parameters" do
241
- helper.show_alchemy_page_path(@page, {:query => 'test'}).should == "/alchemy/#{@page.language_code}/testpage?query=test"
242
- end
243
-
244
- end
245
-
246
- context "not multi_language" do
247
-
248
- before(:each) do
249
- helper.stub!(:multi_language?).and_return(false)
250
- end
251
-
252
- it "should return the correct relative path string" do
253
- helper.show_alchemy_page_path(@page).should == "/alchemy/testpage"
254
- end
255
-
256
- it "should return the correct relative path string with additional parameter" do
257
- helper.show_alchemy_page_path(@page, {:query => 'test'}).should == "/alchemy/testpage?query=test"
258
- end
259
-
260
- end
261
-
262
- end
263
-
264
- describe "#show_alchemy_page_url" do
265
-
266
- context "when multi_language" do
120
+ end
267
121
 
268
- before(:each) do
269
- helper.stub!(:multi_language?).and_return(true)
270
- end
122
+ end
271
123
 
272
- it "should return the correct url string" do
273
- helper.show_alchemy_page_url(@page).should == "http://#{helper.request.host}/alchemy/#{@page.language_code}/testpage"
274
- end
124
+ end
275
125
 
276
- it "should return the correct url string with additional parameters" do
277
- helper.show_alchemy_page_url(@page, {:query => 'test'}).should == "http://#{helper.request.host}/alchemy/#{@page.language_code}/testpage?query=test"
278
- end
126
+ describe "#render_breadcrumb" do
279
127
 
280
- end
128
+ before(:each) do
129
+ helper.stub(:multi_language?).and_return(false)
130
+ @root = mock_model('Page', :urlname => 'root', :name => 'Root', :title => 'Root', :visible? => false, :public? => false, :restricted? => false, :parent => nil)
131
+ @language_root = mock_model('Page', :urlname => 'language_root', :name => 'Language Root', :title => 'Language Root', :visible? => true, :public? => true, :restricted? => false, :parent => @root)
132
+ @page = mock_model('Page', :urlname => 'a-public-page', :name => 'A Public Page', :title => 'A Public Page', :visible? => true, :public? => true, :restricted? => false, :parent => @language_root)
133
+ end
281
134
 
282
- context "not multi_language" do
135
+ it "should render a breadcrumb to current page" do
136
+ helper.render_breadcrumb.should have_selector('a.active.last[href="/alchemy/a-public-page"]')
137
+ end
283
138
 
284
- before(:each) do
285
- helper.stub!(:multi_language?).and_return(false)
286
- end
139
+ it "should render a breadcrumb with a alternative seperator" do
140
+ helper.render_breadcrumb(:seperator => '<span>###</span>').should have_selector('span[contains("###")]')
141
+ end
287
142
 
288
- it "should return the correct url string" do
289
- helper.show_alchemy_page_url(@page).should == "http://#{helper.request.host}/alchemy/testpage"
290
- end
143
+ it "should render a breadcrumb in reversed order" do
144
+ helper.render_breadcrumb(:reverse => true).should have_selector('a.active.first[href="/alchemy/a-public-page"]')
145
+ end
291
146
 
292
- it "should return the correct url string with additional parameter" do
293
- helper.show_alchemy_page_url(@page, {:query => 'test'}).should == "http://#{helper.request.host}/alchemy/testpage?query=test"
294
- end
147
+ it "should render a breadcrumb of restricted pages only" do
148
+ @page.stub!(:restricted? => true, :urlname => 'a-restricted-public-page', :name => 'A restricted Public Page', :title => 'A restricted Public Page')
149
+ helper.render_breadcrumb(:restricted_only => true).should match(/^(<a(.[^>]+)>)A restricted Public Page/)
150
+ end
295
151
 
296
- end
297
- end
298
- end
299
-
300
- describe "#render_meta_data" do
301
-
302
- let(:language) do
303
- mock_model('Language', :code => 'en')
304
- end
305
-
306
- it "should render meta keywords of current page" do
307
- @page = mock_model('Page', :language => language, :title => 'A Public Page', :meta_description => '', :meta_keywords => 'keyword1, keyword2', :robot_index? => false, :robot_follow? => false, :contains_feed? => false, :updated_at => '2011-11-29-23:00:00')
308
- helper.render_meta_data.should have_selector('meta[name="keywords"][content="keyword1, keyword2"]')
309
- end
310
-
311
- it "should render meta description 'blah blah' of current page" do
312
- @page = mock_model('Page', :language => language, :title => 'A Public Page', :meta_description => 'blah blah', :meta_keywords => '', :robot_index? => false, :robot_follow? => false, :contains_feed? => false, :updated_at => '2011-11-29-23:00:00')
313
- helper.render_meta_data.should have_selector('meta[name="description"][content="blah blah"]')
314
- end
315
- end
152
+ it "should render a breadcrumb of visible pages only" do
153
+ @page.stub!(:visible? => false, :urlname => 'a-invisible-public-page', :name => 'A invisible Public Page', :title => 'A invisible Public Page')
154
+ helper.render_breadcrumb(:visible_only => true).should_not match(/A invisible Public Page/)
155
+ end
316
156
 
317
- describe "#render_title_tag" do
318
- it "should render a title tag for current page" do
319
- @page = mock_model('Page', :title => 'A Public Page')
320
- helper.render_title_tag.should have_selector('title[contains("A Public Page")]')
321
- end
322
-
323
- it "should render a title tag for current page with a prefix and a seperator" do
324
- @page = mock_model('Page', :title => 'A Public Page')
325
- helper.render_title_tag(:prefix => 'Peters Petshop', :seperator => ' ### ').should have_selector('title[contains("Peters Petshop ### A Public Page")]')
326
- end
327
- end
157
+ it "should render a breadcrumb of visible and invisible pages" do
158
+ @page.stub!(:visible? => false, :urlname => 'a-invisible-public-page', :name => 'A invisible Public Page', :title => 'A invisible Public Page')
159
+ helper.render_breadcrumb(:visible_only => false).should match(/A invisible Public Page/)
160
+ end
161
+
162
+ it "should render a breadcrumb of published pages only" do
163
+ @page.stub!(:public => false, :public? => false, :urlname => 'a-unpublic-page', :name => 'A Unpublic Page', :title => 'A Unpublic Page')
164
+ helper.render_breadcrumb(:public_only => true).should_not match(/A Unpublic Page/)
165
+ end
166
+
167
+ it "should render a breadcrumb of published and unpublished pages" do
168
+ @page.stub!(:public => false, :public? => false, :urlname => 'a-unpublic-page', :name => 'A Unpublic Page', :title => 'A Unpublic Page')
169
+ helper.render_breadcrumb(:public_only => false).should match(/A Unpublic Page/)
170
+ end
171
+
172
+ it "should render a breadcrumb without the page named 'Not Me'" do
173
+ @page.stub!(:urlname => 'not-me', :name => 'Not Me', :title => 'Not Me')
174
+ helper.render_breadcrumb(:without => @page).should_not match(/Not Me/)
175
+ end
176
+
177
+ end
178
+
179
+ describe "using own url helpers" do
180
+
181
+ before(:each) do
182
+ @page = mock_model(Alchemy::Page, :urlname => 'testpage', :language_code => 'en')
183
+ end
184
+
185
+ describe "#show_page_path_params" do
186
+
187
+ context "when multi_language" do
188
+
189
+ before(:each) do
190
+ helper.stub!(:multi_language?).and_return(true)
191
+ end
192
+
193
+ it "should return a Hash with urlname and language_id parameter" do
194
+ helper.stub!(:multi_language?).and_return(true)
195
+ helper.show_page_path_params(@page).should include(:urlname => 'testpage', :lang => 'en')
196
+ end
197
+
198
+ it "should return a Hash with urlname, language_id and query parameter" do
199
+ helper.stub!(:multi_language?).and_return(true)
200
+ helper.show_page_path_params(@page, {:query => 'test'}).should include(:urlname => 'testpage', :lang => 'en', :query => 'test')
201
+ end
202
+
203
+ end
204
+
205
+ context "not multi_language" do
206
+
207
+ before(:each) do
208
+ helper.stub!(:multi_language?).and_return(false)
209
+ end
210
+
211
+ it "should return a Hash with the urlname but without language_id parameter" do
212
+ helper.show_page_path_params(@page).should include(:urlname => 'testpage')
213
+ helper.show_page_path_params(@page).should_not include(:lang => 'en')
214
+ end
215
+
216
+ it "should return a Hash with urlname and query parameter" do
217
+ helper.show_page_path_params(@page, {:query => 'test'}).should include(:urlname => 'testpage', :query => 'test')
218
+ helper.show_page_path_params(@page).should_not include(:lang => 'en')
219
+ end
220
+
221
+ end
222
+
223
+ end
224
+
225
+ describe "#show_alchemy_page_path" do
226
+
227
+ context "when multi_language" do
228
+
229
+ before(:each) do
230
+ helper.stub!(:multi_language?).and_return(true)
231
+ end
232
+
233
+ it "should return the correct relative path string" do
234
+ helper.show_alchemy_page_path(@page).should == "/alchemy/#{@page.language_code}/testpage"
235
+ end
236
+
237
+ it "should return the correct relative path string with additional parameters" do
238
+ helper.show_alchemy_page_path(@page, {:query => 'test'}).should == "/alchemy/#{@page.language_code}/testpage?query=test"
239
+ end
240
+
241
+ end
242
+
243
+ context "not multi_language" do
244
+
245
+ before(:each) do
246
+ helper.stub!(:multi_language?).and_return(false)
247
+ end
248
+
249
+ it "should return the correct relative path string" do
250
+ helper.show_alchemy_page_path(@page).should == "/alchemy/testpage"
251
+ end
252
+
253
+ it "should return the correct relative path string with additional parameter" do
254
+ helper.show_alchemy_page_path(@page, {:query => 'test'}).should == "/alchemy/testpage?query=test"
255
+ end
256
+
257
+ end
258
+
259
+ end
260
+
261
+ describe "#show_alchemy_page_url" do
262
+
263
+ context "when multi_language" do
264
+
265
+ before(:each) do
266
+ helper.stub!(:multi_language?).and_return(true)
267
+ end
268
+
269
+ it "should return the correct url string" do
270
+ helper.show_alchemy_page_url(@page).should == "http://#{helper.request.host}/alchemy/#{@page.language_code}/testpage"
271
+ end
272
+
273
+ it "should return the correct url string with additional parameters" do
274
+ helper.show_alchemy_page_url(@page, {:query => 'test'}).should == "http://#{helper.request.host}/alchemy/#{@page.language_code}/testpage?query=test"
275
+ end
276
+
277
+ end
278
+
279
+ context "not multi_language" do
280
+
281
+ before(:each) do
282
+ helper.stub!(:multi_language?).and_return(false)
283
+ end
284
+
285
+ it "should return the correct url string" do
286
+ helper.show_alchemy_page_url(@page).should == "http://#{helper.request.host}/alchemy/testpage"
287
+ end
288
+
289
+ it "should return the correct url string with additional parameter" do
290
+ helper.show_alchemy_page_url(@page, {:query => 'test'}).should == "http://#{helper.request.host}/alchemy/testpage?query=test"
291
+ end
292
+
293
+ end
294
+ end
295
+ end
296
+
297
+ describe "#render_meta_data" do
298
+
299
+ let(:language) do
300
+ mock_model('Language', :code => 'en')
301
+ end
302
+
303
+ it "should render meta keywords of current page" do
304
+ @page = mock_model('Page', :language => language, :title => 'A Public Page', :meta_description => '', :meta_keywords => 'keyword1, keyword2', :robot_index? => false, :robot_follow? => false, :contains_feed? => false, :updated_at => '2011-11-29-23:00:00')
305
+ helper.render_meta_data.should have_selector('meta[name="keywords"][content="keyword1, keyword2"]')
306
+ end
307
+
308
+ it "should render meta description 'blah blah' of current page" do
309
+ @page = mock_model('Page', :language => language, :title => 'A Public Page', :meta_description => 'blah blah', :meta_keywords => '', :robot_index? => false, :robot_follow? => false, :contains_feed? => false, :updated_at => '2011-11-29-23:00:00')
310
+ helper.render_meta_data.should have_selector('meta[name="description"][content="blah blah"]')
311
+ end
312
+ end
313
+
314
+ describe "#render_title_tag" do
315
+ it "should render a title tag for current page" do
316
+ @page = mock_model('Page', :title => 'A Public Page')
317
+ helper.render_title_tag.should have_selector('title[contains("A Public Page")]')
318
+ end
319
+
320
+ it "should render a title tag for current page with a prefix and a seperator" do
321
+ @page = mock_model('Page', :title => 'A Public Page')
322
+ helper.render_title_tag(:prefix => 'Peters Petshop', :seperator => ' ### ').should have_selector('title[contains("Peters Petshop ### A Public Page")]')
323
+ end
324
+ end
328
325
 
329
326
  describe "#language_switcher" do
330
327
 
331
- before :each do
332
- @default_language = Alchemy::Language.get_default
333
- @klingonian = Factory(:language)
334
- # simulates link_to_public_child = true
335
- helper.stub(:multi_language?).and_return(true)
336
- helper.stub(:configuration) { |arg| arg == :redirect_to_public_child ? true : false }
337
- end
338
-
339
- it "should return nil when having only one public language" do
340
- helper.language_switcher.should be nil
341
- end
342
-
343
- context "with two public languages and two language_roots" do
344
-
345
- before :each do
346
- @default_language_root = Factory(:language_root_page, :language => @default_language, :name => 'Default Language Root')
347
- @klingonian_language_root = Factory(:language_root_page)
348
- end
349
-
350
- context "and config redirect_to_public_child is set to TRUE" do
351
-
352
- it "should return nil if only one language_root is public and both do not have children" do
353
- @klingonian_language_root.update_attributes(:public => false)
354
- helper.language_switcher.should == nil
355
- end
356
-
357
- it "should return nil if only one language_root is public and both have none public children" do
358
- @klingonian_language_root.update_attributes(:public => false)
359
- @default_first_public_child = Factory(:page, :language => @default_language, :parent_id => @default_language_root.id, :public => false, :name => "child1")
360
- @klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => false, :name => "child1")
361
- helper.language_switcher.should == nil
362
- end
363
-
364
- it "should render two links when having two public language_root pages" do
365
- helper.language_switcher.should have_selector('a', :count => 2)
366
- end
367
-
368
- it "should render two links when having just one public language_root but a public children in both language_roots" do
369
- @klingonian_language_root.update_attributes(:public => false)
370
- @default_first_public_child = Factory(:page, :language => @default_language, :parent_id => @default_language_root.id, :public => true, :name => "child1")
371
- @klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => true, :name => "child1")
372
- helper.language_switcher.should have_selector('a', :count => 2)
373
- end
374
-
375
- it "should render two links when having two not public language_roots but a public children in both" do
376
- @default_language_root.update_attributes(:public => false)
377
- @klingonian_language_root.update_attributes(:public => false)
378
- @default_first_public_child = Factory(:page, :language => @default_language, :parent_id => @default_language_root.id, :public => true, :name => "child1")
379
- @klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => true, :name => "child1")
380
- helper.language_switcher.should have_selector('a', :count => 2)
381
- end
382
-
383
- it "should return nil when having two not public language_roots and a public children in only one of them" do
384
- @default_language_root.update_attributes(:public => false)
385
- @klingonian_language_root.update_attributes(:public => false)
386
- @default_first_public_child = Factory(:page, :language => @default_language, :parent_id => @default_language_root.id, :public => false, :name => "child1")
387
- @klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => true, :name => "child1")
388
- helper.language_switcher.should == nil
389
- end
390
-
391
- end
392
-
393
- context "and config redirect_to_public_child is set to FALSE" do
394
-
395
- before :each do
396
- # simulates link_to_public_child = false
397
- helper.stub(:configuration).and_return(false)
398
- end
399
-
400
- it "should render two links when having two public language_root pages" do
401
- helper.language_switcher.should have_selector('a', :count => 2)
402
- end
403
-
404
- it "should render nil when having just one public language_root but a public children in both language_roots" do
405
- @klingonian_language_root.update_attributes(:public => false)
406
- @default_first_public_child = Factory(:page, :language => @default_language, :parent_id => @default_language_root.id, :public => true, :name => "child1")
407
- @klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => true, :name => "child1")
408
- helper.language_switcher.should == nil
409
- end
410
-
411
- it "should render nil when having two not public language_roots but a public children in both" do
412
- @default_language_root.update_attributes(:public => false)
413
- @klingonian_language_root.update_attributes(:public => false)
414
- @default_first_public_child = Factory(:page, :language => @default_language, :parent_id => @default_language_root.id, :public => true, :name => "child1")
415
- @klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => true, :name => "child1")
416
- helper.language_switcher.should == nil
417
- end
418
-
419
- end
420
-
421
- end
422
-
423
- end
328
+ before :each do
329
+ @default_language = Alchemy::Language.get_default
330
+ @klingonian = Factory(:language)
331
+ # simulates link_to_public_child = true
332
+ helper.stub(:multi_language?).and_return(true)
333
+ helper.stub(:configuration) { |arg| arg == :redirect_to_public_child ? true : false }
334
+ end
335
+
336
+ it "should return nil when having only one public language" do
337
+ helper.language_switcher.should be nil
338
+ end
339
+
340
+ context "with two public languages and two language_roots" do
341
+
342
+ before :each do
343
+ @default_language_root = Factory(:language_root_page, :language => @default_language, :name => 'Default Language Root')
344
+ @klingonian_language_root = Factory(:language_root_page)
345
+ end
346
+
347
+ context "and config redirect_to_public_child is set to TRUE" do
348
+
349
+ it "should return nil if only one language_root is public and both do not have children" do
350
+ @klingonian_language_root.update_attributes(:public => false)
351
+ helper.language_switcher.should == nil
352
+ end
353
+
354
+ it "should return nil if only one language_root is public and both have none public children" do
355
+ @klingonian_language_root.update_attributes(:public => false)
356
+ @default_first_public_child = Factory(:page, :language => @default_language, :parent_id => @default_language_root.id, :public => false, :name => "child1")
357
+ @klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => false, :name => "child1")
358
+ helper.language_switcher.should == nil
359
+ end
360
+
361
+ it "should render two links when having two public language_root pages" do
362
+ helper.language_switcher.should have_selector('a', :count => 2)
363
+ end
364
+
365
+ it "should render two links when having just one public language_root but a public children in both language_roots" do
366
+ @klingonian_language_root.update_attributes(:public => false)
367
+ @default_first_public_child = Factory(:page, :language => @default_language, :parent_id => @default_language_root.id, :public => true, :name => "child1")
368
+ @klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => true, :name => "child1")
369
+ helper.language_switcher.should have_selector('a', :count => 2)
370
+ end
371
+
372
+ it "should render two links when having two not public language_roots but a public children in both" do
373
+ @default_language_root.update_attributes(:public => false)
374
+ @klingonian_language_root.update_attributes(:public => false)
375
+ @default_first_public_child = Factory(:page, :language => @default_language, :parent_id => @default_language_root.id, :public => true, :name => "child1")
376
+ @klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => true, :name => "child1")
377
+ helper.language_switcher.should have_selector('a', :count => 2)
378
+ end
379
+
380
+ it "should return nil when having two not public language_roots and a public children in only one of them" do
381
+ @default_language_root.update_attributes(:public => false)
382
+ @klingonian_language_root.update_attributes(:public => false)
383
+ @default_first_public_child = Factory(:page, :language => @default_language, :parent_id => @default_language_root.id, :public => false, :name => "child1")
384
+ @klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => true, :name => "child1")
385
+ helper.language_switcher.should == nil
386
+ end
387
+
388
+ end
389
+
390
+ context "and config redirect_to_public_child is set to FALSE" do
391
+
392
+ before :each do
393
+ # simulates link_to_public_child = false
394
+ helper.stub(:configuration).and_return(false)
395
+ end
396
+
397
+ it "should render two links when having two public language_root pages" do
398
+ helper.language_switcher.should have_selector('a', :count => 2)
399
+ end
400
+
401
+ it "should render nil when having just one public language_root but a public children in both language_roots" do
402
+ @klingonian_language_root.update_attributes(:public => false)
403
+ @default_first_public_child = Factory(:page, :language => @default_language, :parent_id => @default_language_root.id, :public => true, :name => "child1")
404
+ @klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => true, :name => "child1")
405
+ helper.language_switcher.should == nil
406
+ end
407
+
408
+ it "should render nil when having two not public language_roots but a public children in both" do
409
+ @default_language_root.update_attributes(:public => false)
410
+ @klingonian_language_root.update_attributes(:public => false)
411
+ @default_first_public_child = Factory(:page, :language => @default_language, :parent_id => @default_language_root.id, :public => true, :name => "child1")
412
+ @klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => true, :name => "child1")
413
+ helper.language_switcher.should == nil
414
+ end
415
+
416
+ end
417
+
418
+ end
419
+
420
+ end
424
421
 
425
422
  end