browsercms 3.5.7 → 4.0.0.alpha

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 (523) hide show
  1. checksums.yaml +7 -0
  2. data/COPYRIGHT.txt +2 -1
  3. data/README.markdown +3 -3
  4. data/app/assets/fonts/icomoon.dev.svg +61 -0
  5. data/app/assets/fonts/icomoon.eot +0 -0
  6. data/app/assets/fonts/icomoon.svg +61 -0
  7. data/app/assets/fonts/icomoon.ttf +0 -0
  8. data/app/assets/fonts/icomoon.woff +0 -0
  9. data/app/assets/images/ckeditor/plugins/delete_content/icons/deletecontent.png +0 -0
  10. data/app/assets/images/ckeditor/plugins/edit_content/icons/editcontent.png +0 -0
  11. data/app/assets/images/ckeditor/plugins/move_content/icons/movecontentdown.png +0 -0
  12. data/app/assets/images/ckeditor/plugins/move_content/icons/movecontentup.png +0 -0
  13. data/app/assets/images/cms/arrow-down.png +0 -0
  14. data/app/assets/images/cms/arrow-up.png +0 -0
  15. data/app/assets/images/cms/cogs.png +0 -0
  16. data/app/assets/images/cms/dashboard/home.png +0 -0
  17. data/app/assets/images/cms/home.png +0 -0
  18. data/app/assets/images/cms/logo.png +0 -0
  19. data/app/assets/images/cms/pencil.png +0 -0
  20. data/app/assets/images/cms/plus.png +0 -0
  21. data/app/assets/images/cms/user.png +0 -0
  22. data/app/assets/javascripts/bcms/ckeditor_inline.js +23 -0
  23. data/app/assets/javascripts/bcms/ckeditor_standard_config.js +1 -1
  24. data/app/assets/javascripts/ckeditor/plugins/delete_content/plugin.js +36 -0
  25. data/app/assets/javascripts/ckeditor/plugins/edit_content/plugin.js +24 -0
  26. data/app/assets/javascripts/ckeditor/plugins/move_content/plugin.js +25 -0
  27. data/app/assets/javascripts/cms/ajax.js +60 -0
  28. data/app/assets/javascripts/cms/application.js +6 -1
  29. data/app/assets/javascripts/cms/attachment_manager.js.erb +3 -10
  30. data/app/assets/javascripts/cms/content_library.js +31 -12
  31. data/app/assets/javascripts/cms/core_library.js.erb +68 -36
  32. data/app/assets/javascripts/cms/form_builder.js +250 -0
  33. data/app/assets/javascripts/cms/namespace.js +2 -0
  34. data/app/assets/javascripts/cms/new_content_button.js +27 -0
  35. data/app/assets/javascripts/cms/page_editor.js +188 -0
  36. data/app/assets/javascripts/cms/page_toolbar.js +13 -0
  37. data/app/assets/javascripts/cms/site.js +2 -0
  38. data/app/assets/javascripts/cms/sitemap.js +219 -0
  39. data/app/assets/javascripts/cms/toolbar.js +17 -1
  40. data/app/assets/javascripts/cms/user.js +40 -0
  41. data/app/assets/javascripts/jquery.exists.js +5 -0
  42. data/app/assets/javascripts/jquery.taglist.js +37 -23
  43. data/app/assets/stylesheets/cms/_assets.css.scss +55 -0
  44. data/app/assets/stylesheets/cms/_base.css.scss +42 -0
  45. data/app/assets/stylesheets/cms/_cms-buttons.css.scss +73 -0
  46. data/app/assets/stylesheets/cms/_cms-forms.css.scss +70 -0
  47. data/app/assets/stylesheets/cms/_colors.css.scss +20 -0
  48. data/app/assets/stylesheets/cms/_dashboard.css.scss +25 -0
  49. data/app/assets/stylesheets/cms/_glyph.css.scss +60 -0
  50. data/app/assets/stylesheets/cms/_main-area.css.scss +62 -0
  51. data/app/assets/stylesheets/cms/_nav.css.scss +197 -0
  52. data/app/assets/stylesheets/cms/_sidebar.css.scss +64 -0
  53. data/app/assets/stylesheets/cms/_sitemap.css.scss +196 -0
  54. data/app/assets/stylesheets/cms/_submenu.css.scss +48 -0
  55. data/app/assets/stylesheets/cms/application.css.scss +49 -0
  56. data/app/assets/stylesheets/cms/core.css.scss +96 -0
  57. data/app/assets/stylesheets/cms/default-forms.css.scss +3 -0
  58. data/app/assets/stylesheets/cms/includes/_animation.css.scss +2 -0
  59. data/app/assets/stylesheets/cms/includes/_rem.css.scss +120 -0
  60. data/app/assets/stylesheets/cms/includes/animation/_animate.css.scss +31 -0
  61. data/app/assets/stylesheets/cms/includes/animation/_core.css.scss +127 -0
  62. data/app/assets/stylesheets/cms/includes/animation/_shared.css.scss +22 -0
  63. data/app/assets/stylesheets/cms/includes/animation/animate/_attention-seekers.css.scss +152 -0
  64. data/app/assets/stylesheets/cms/includes/animation/animate/_bouncing.css.scss +3 -0
  65. data/app/assets/stylesheets/cms/includes/animation/animate/_classes.css.scss +21 -0
  66. data/app/assets/stylesheets/cms/includes/animation/animate/_fading.css.scss +3 -0
  67. data/app/assets/stylesheets/cms/includes/animation/animate/_flippers.css.scss +87 -0
  68. data/app/assets/stylesheets/cms/includes/animation/animate/_lightspeed.css.scss +24 -0
  69. data/app/assets/stylesheets/cms/includes/animation/animate/_rotating.css.scss +3 -0
  70. data/app/assets/stylesheets/cms/includes/animation/animate/_specials.css.scss +42 -0
  71. data/app/assets/stylesheets/cms/includes/animation/animate/bouncing/_bouncing-entrances.css.scss +68 -0
  72. data/app/assets/stylesheets/cms/includes/animation/animate/bouncing/_bouncing-exits.css.scss +60 -0
  73. data/app/assets/stylesheets/cms/includes/animation/animate/fading/_fading-entrances.css.scss +86 -0
  74. data/app/assets/stylesheets/cms/includes/animation/animate/fading/_fading-exits.css.scss +86 -0
  75. data/app/assets/stylesheets/cms/includes/animation/animate/rotating/_rotating-entrances.css.scss +58 -0
  76. data/app/assets/stylesheets/cms/includes/animation/animate/rotating/_rotating-exits.css.scss +58 -0
  77. data/app/assets/stylesheets/cms/page_content_editing.css.scss +4 -0
  78. data/app/assets/stylesheets/cms/page_editor.css.scss +4 -0
  79. data/app/assets/stylesheets/cms/style.css.scss +138 -0
  80. data/app/assets/stylesheets/cms/styles/_alerts.css.scss +150 -0
  81. data/app/assets/stylesheets/cms/styles/_base-grid.css.scss +299 -0
  82. data/app/assets/stylesheets/cms/styles/_buttons.css.scss +247 -0
  83. data/app/assets/stylesheets/cms/styles/_dropdown.css.scss +155 -0
  84. data/app/assets/stylesheets/cms/styles/_forms.css.scss +728 -0
  85. data/app/assets/stylesheets/cms/styles/_glyph.css.scss +86 -0
  86. data/app/assets/stylesheets/cms/styles/_images.css.scss +75 -0
  87. data/app/assets/stylesheets/cms/styles/_lists.css.scss +115 -0
  88. data/app/assets/stylesheets/cms/styles/_modal.css.scss +174 -0
  89. data/app/assets/stylesheets/cms/styles/_progress.css.scss +43 -0
  90. data/app/assets/stylesheets/cms/styles/_tables.css.scss +141 -0
  91. data/app/assets/stylesheets/cms/styles/_text.css.scss +134 -0
  92. data/app/controllers/cms/application_controller.rb +3 -68
  93. data/app/controllers/cms/attachments_controller.rb +5 -5
  94. data/app/controllers/cms/base_controller.rb +20 -13
  95. data/app/controllers/cms/cache_controller.rb +16 -17
  96. data/app/controllers/cms/category_types_controller.rb +6 -1
  97. data/app/controllers/cms/connectors_controller.rb +12 -7
  98. data/app/controllers/cms/content_block_controller.rb +128 -71
  99. data/app/controllers/cms/content_controller.rb +54 -56
  100. data/app/controllers/cms/dashboard_controller.rb +5 -6
  101. data/app/controllers/cms/dynamic_views_controller.rb +12 -9
  102. data/app/controllers/cms/email_messages_controller.rb +18 -13
  103. data/app/controllers/cms/form_entries_controller.rb +119 -0
  104. data/app/controllers/cms/form_fields_controller.rb +74 -0
  105. data/app/controllers/cms/forms_controller.rb +35 -0
  106. data/app/controllers/cms/groups_controller.rb +13 -16
  107. data/app/controllers/cms/html_blocks_controller.rb +2 -2
  108. data/app/controllers/cms/inline_content_controller.rb +48 -0
  109. data/app/controllers/cms/links_controller.rb +58 -46
  110. data/app/controllers/cms/page_components_controller.rb +20 -0
  111. data/app/controllers/cms/page_routes_controller.rb +44 -40
  112. data/app/controllers/cms/pages_controller.rb +111 -97
  113. data/app/controllers/cms/passwords_controller.rb +17 -0
  114. data/app/controllers/cms/portlet_controller.rb +0 -1
  115. data/app/controllers/cms/portlets_controller.rb +20 -27
  116. data/app/controllers/cms/redirects_controller.rb +13 -9
  117. data/app/controllers/cms/resource_controller.rb +15 -4
  118. data/app/controllers/cms/routes_controller.rb +2 -4
  119. data/app/controllers/cms/section_nodes_controller.rb +6 -37
  120. data/app/controllers/cms/sections_controller.rb +13 -8
  121. data/app/controllers/cms/sessions_controller.rb +8 -66
  122. data/app/controllers/cms/sites/passwords_controller.rb +27 -0
  123. data/app/controllers/cms/sites/sessions_controller.rb +20 -0
  124. data/app/controllers/cms/tags_controller.rb +12 -12
  125. data/app/controllers/cms/tasks_controller.rb +45 -46
  126. data/app/controllers/cms/user_controller.rb +8 -0
  127. data/app/controllers/cms/users_controller.rb +91 -68
  128. data/app/helpers/cms/application_helper.rb +58 -52
  129. data/app/helpers/cms/content_block_helper.rb +8 -7
  130. data/app/helpers/cms/form_tag_helper.rb +21 -25
  131. data/app/helpers/cms/menu_helper.rb +1 -3
  132. data/app/helpers/cms/mobile_helper.rb +12 -2
  133. data/app/helpers/cms/nav_menu_helper.rb +23 -0
  134. data/app/helpers/cms/page_helper.rb +72 -30
  135. data/app/helpers/cms/path_helper.rb +46 -70
  136. data/app/helpers/cms/rendering_helper.rb +68 -12
  137. data/app/helpers/cms/section_nodes_helper.rb +92 -31
  138. data/app/helpers/cms/sites/authentication_helper.rb +25 -0
  139. data/app/helpers/cms/sites/devise_shim_helper.rb +31 -0
  140. data/app/helpers/cms/template_support.rb +1 -7
  141. data/app/helpers/cms/ui_elements_helper.rb +147 -6
  142. data/app/helpers/forgot_password_portlet_helper.rb +9 -0
  143. data/app/helpers/login_portlet_helper.rb +10 -0
  144. data/app/inputs/attachments_input.rb +14 -0
  145. data/app/inputs/cms_text_area_input.rb +10 -0
  146. data/app/inputs/cms_text_field_input.rb +29 -0
  147. data/app/inputs/date_picker_input.rb +8 -0
  148. data/app/inputs/file_picker_input.rb +75 -0
  149. data/app/inputs/path_input.rb +18 -0
  150. data/app/inputs/tag_list_input.rb +3 -0
  151. data/app/inputs/template_editor_input.rb +24 -0
  152. data/app/inputs/text_editor_input.rb +19 -0
  153. data/app/models/cms/abstract_file_block.rb +10 -6
  154. data/app/models/cms/attachment.rb +20 -27
  155. data/app/models/cms/category.rb +17 -7
  156. data/app/models/cms/category_type.rb +8 -4
  157. data/app/models/cms/connector.rb +32 -20
  158. data/app/models/cms/content.rb +31 -0
  159. data/app/models/cms/content_type.rb +114 -62
  160. data/app/models/cms/dynamic_view.rb +19 -45
  161. data/app/models/cms/email_message.rb +32 -2
  162. data/app/models/cms/external_user.rb +60 -0
  163. data/app/models/cms/file_block.rb +1 -0
  164. data/app/models/cms/form.rb +47 -0
  165. data/app/models/cms/form_entry.rb +71 -0
  166. data/app/models/cms/form_field.rb +78 -0
  167. data/app/models/cms/group.rb +19 -9
  168. data/app/models/cms/group_permission.rb +1 -1
  169. data/app/models/cms/group_section.rb +1 -1
  170. data/app/models/cms/group_type.rb +5 -5
  171. data/app/models/cms/group_type_permission.rb +1 -1
  172. data/app/models/cms/html_block.rb +14 -19
  173. data/app/models/cms/image_block.rb +1 -0
  174. data/app/models/cms/link.rb +8 -6
  175. data/app/models/cms/page.rb +156 -59
  176. data/app/models/cms/page_component.rb +43 -0
  177. data/app/models/cms/page_partial.rb +16 -8
  178. data/app/models/cms/page_route.rb +1 -1
  179. data/app/models/cms/page_route_condition.rb +1 -1
  180. data/app/models/cms/page_route_option.rb +1 -1
  181. data/app/models/cms/page_route_requirement.rb +1 -1
  182. data/app/models/cms/page_template.rb +14 -9
  183. data/app/models/cms/permission.rb +4 -2
  184. data/app/models/cms/persistent_user.rb +208 -0
  185. data/app/models/cms/portlet.rb +56 -9
  186. data/app/models/cms/redirect.rb +1 -1
  187. data/app/models/cms/search_filter.rb +18 -0
  188. data/app/models/cms/section.rb +39 -28
  189. data/app/models/cms/section_node.rb +32 -5
  190. data/app/models/cms/site.rb +3 -3
  191. data/app/models/cms/tag.rb +14 -12
  192. data/app/models/cms/tagging.rb +2 -2
  193. data/app/models/cms/task.rb +14 -21
  194. data/app/models/cms/templates.rb +1 -2
  195. data/app/models/cms/user.rb +21 -160
  196. data/app/models/cms/user_group_membership.rb +2 -2
  197. data/app/portlets/deprecated_placeholder.rb +12 -0
  198. data/app/portlets/dynamic_portlet.rb +1 -1
  199. data/app/portlets/email_page_portlet.rb +10 -3
  200. data/app/portlets/forgot_password_portlet.rb +9 -28
  201. data/app/portlets/login_portlet.rb +8 -5
  202. data/app/portlets/tag_cloud_portlet.rb +3 -1
  203. data/app/presenters/cms/user_presenter.rb +24 -0
  204. data/app/views/cms/application/_add_content_modal.html.erb +3 -0
  205. data/app/views/cms/application/_buttons.html.erb +7 -0
  206. data/app/views/cms/{shared → application}/_exception.html.erb +0 -0
  207. data/app/views/cms/application/_form_errors.html.erb +7 -0
  208. data/app/views/cms/application/_form_with_buttons.html.erb +10 -0
  209. data/app/views/cms/application/_main_content.html.erb +3 -0
  210. data/app/views/cms/application/_main_with_sidebar.html.erb +8 -0
  211. data/app/views/cms/application/_mobile_toolbar.html.erb +16 -0
  212. data/app/views/cms/application/_page_title.html.erb +5 -0
  213. data/app/views/cms/application/_pagination.html.erb +26 -0
  214. data/app/views/cms/application/_row.html.erb +1 -0
  215. data/app/views/cms/application/_save_buttons.html.erb +7 -0
  216. data/app/views/cms/application/_sidebar_layout.html.erb +3 -0
  217. data/app/views/cms/application/_version.html.erb +23 -0
  218. data/app/views/cms/{shared → application}/_version_conflict_diff.html.erb +0 -0
  219. data/app/views/cms/{shared → application}/_version_conflict_error.html.erb +0 -0
  220. data/app/views/cms/attachments/_attachment_manager.html.erb +22 -0
  221. data/app/views/cms/attachments/_no_attachments_defined.html.erb +1 -0
  222. data/app/views/cms/cache/show.html.erb +5 -10
  223. data/app/views/cms/categories/_form.html.erb +15 -24
  224. data/app/views/cms/category_types/_form.html.erb +1 -1
  225. data/app/views/cms/connectors/new.html.erb +33 -64
  226. data/app/views/cms/content/editing_frame.html.erb +1 -0
  227. data/app/views/cms/content/no_page.html.erb +9 -27
  228. data/app/views/cms/content/show.html.erb +14 -15
  229. data/app/views/cms/content_block/_block_form.html.erb +15 -0
  230. data/app/views/cms/content_block/_buttonbar.html.erb +29 -0
  231. data/app/views/cms/content_block/_buttons.html.erb +13 -0
  232. data/app/views/cms/content_block/_hidden_fields.html.erb +13 -0
  233. data/app/views/cms/content_block/_sidebar.html.erb +35 -0
  234. data/app/views/cms/content_block/edit.html.erb +3 -0
  235. data/app/views/cms/content_block/index.html.erb +87 -0
  236. data/app/views/cms/content_block/new.html.erb +3 -0
  237. data/app/views/cms/content_block/render_block_in_main_container.html.erb +10 -0
  238. data/app/views/cms/content_block/show.html.erb +1 -0
  239. data/app/views/cms/content_block/show_in_isolation.html.erb +15 -0
  240. data/app/views/cms/content_block/versions.html.erb +24 -0
  241. data/app/views/cms/dashboard/_page_drafts.html.erb +12 -22
  242. data/app/views/cms/dashboard/_tasks.html.erb +32 -45
  243. data/app/views/cms/dashboard/index.html.erb +11 -13
  244. data/app/views/cms/dynamic_views/_form.html.erb +8 -10
  245. data/app/views/cms/dynamic_views/edit.html.erb +2 -3
  246. data/app/views/cms/dynamic_views/index.html.erb +22 -44
  247. data/app/views/cms/dynamic_views/new.html.erb +2 -3
  248. data/app/views/cms/email_messages/index.html.erb +31 -34
  249. data/app/views/cms/email_messages/show.html.erb +45 -52
  250. data/app/views/cms/file_blocks/_form.html.erb +2 -4
  251. data/app/views/cms/form_entries/_buttons.html.erb +2 -0
  252. data/app/views/cms/form_entries/_form.html.erb +7 -0
  253. data/app/views/cms/form_entries/_internal_form.html.erb +9 -0
  254. data/app/views/cms/form_entries/edit.html.erb +5 -0
  255. data/app/views/cms/form_entries/error.html.erb +3 -0
  256. data/app/views/cms/form_entries/index.html.erb +4 -0
  257. data/app/views/cms/form_entries/new.html.erb +5 -0
  258. data/app/views/cms/form_entries/show.html.erb +13 -0
  259. data/app/views/cms/form_entries/submit.html.erb +1 -0
  260. data/app/views/cms/form_fields/_form.html.erb +8 -0
  261. data/app/views/cms/form_fields/_select.html.erb +3 -0
  262. data/app/views/cms/form_fields/_text_area.html.erb +3 -0
  263. data/app/views/cms/form_fields/_text_field.html.erb +3 -0
  264. data/app/views/cms/form_fields/edit.html.erb +0 -0
  265. data/app/views/cms/form_fields/new.html.erb +26 -0
  266. data/app/views/cms/form_fields/preview.html.erb +16 -0
  267. data/app/views/cms/forms/_form.html.erb +66 -0
  268. data/app/views/cms/forms/render.html.erb +15 -0
  269. data/app/views/cms/forms/show.html.erb +6 -0
  270. data/app/views/cms/groups/_form.html.erb +32 -38
  271. data/app/views/cms/groups/_permissions.html.erb +11 -34
  272. data/app/views/cms/groups/_sections.html.erb +11 -17
  273. data/app/views/cms/groups/edit.html.erb +1 -3
  274. data/app/views/cms/groups/index.html.erb +10 -32
  275. data/app/views/cms/groups/new.html.erb +2 -4
  276. data/app/views/cms/html_blocks/_form.html.erb +2 -2
  277. data/app/views/cms/html_blocks/render.html.erb +1 -1
  278. data/app/views/cms/image_blocks/_form.html.erb +3 -3
  279. data/app/views/cms/links/_form.html.erb +6 -11
  280. data/app/views/cms/links/edit.html.erb +3 -12
  281. data/app/views/cms/links/new.html.erb +4 -13
  282. data/app/views/cms/page_components/_content.html.erb +18 -0
  283. data/app/views/cms/page_components/new.html.erb +12 -0
  284. data/app/views/cms/page_routes/_form.html.erb +11 -10
  285. data/app/views/cms/page_routes/edit.html.erb +2 -3
  286. data/app/views/cms/page_routes/index.html.erb +25 -48
  287. data/app/views/cms/page_routes/new.html.erb +2 -3
  288. data/app/views/cms/pages/_edit_content.html.erb +28 -0
  289. data/app/views/cms/pages/_form.html.erb +20 -37
  290. data/app/views/cms/pages/_main_form.html.erb +23 -0
  291. data/app/views/cms/pages/_simple_container.html.erb +8 -0
  292. data/app/views/cms/pages/edit.html.erb +2 -23
  293. data/app/views/cms/pages/new.html.erb +2 -16
  294. data/app/views/cms/pages/versions.html.erb +18 -87
  295. data/app/views/cms/redirects/_form.html.erb +6 -14
  296. data/app/views/cms/redirects/edit.html.erb +2 -3
  297. data/app/views/cms/redirects/index.html.erb +24 -50
  298. data/app/views/cms/redirects/new.html.erb +2 -3
  299. data/app/views/cms/routes/index.html.erb +15 -20
  300. data/app/views/cms/section_nodes/_children.html.erb +3 -0
  301. data/app/views/cms/section_nodes/_row_buttons.html.erb +11 -0
  302. data/app/views/cms/section_nodes/_section_node.html.erb +24 -10
  303. data/app/views/cms/section_nodes/_sitemap_buttons.html.erb +47 -0
  304. data/app/views/cms/section_nodes/_status.html.erb +5 -0
  305. data/app/views/cms/section_nodes/show.html.erb +9 -0
  306. data/app/views/cms/sections/_buttons.html.erb +6 -0
  307. data/app/views/cms/sections/_form.html.erb +22 -49
  308. data/app/views/cms/sections/edit.html.erb +3 -8
  309. data/app/views/cms/sections/new.html.erb +4 -20
  310. data/app/views/cms/sessions/new.html.erb +16 -31
  311. data/app/views/cms/shared/access_denied.html.erb +1 -2
  312. data/app/views/cms/shared/error.html.erb +5 -5
  313. data/app/views/cms/sites/_flash.html.erb +8 -0
  314. data/app/views/cms/sites/passwords/new.html.erb +2 -0
  315. data/app/views/cms/sites/sessions/new.html.erb +2 -0
  316. data/app/views/cms/tags/_form.html.erb +1 -1
  317. data/app/views/cms/tags/render.html.erb +0 -1
  318. data/app/views/cms/tasks/new.html.erb +18 -32
  319. data/app/views/cms/toolbar/_new_pages_menu.html.erb +10 -0
  320. data/app/views/cms/users/_form.html.erb +8 -11
  321. data/app/views/cms/users/_password.html.erb +2 -8
  322. data/app/views/cms/users/_user_fields.html.erb +7 -20
  323. data/app/views/cms/users/change_password.html.erb +12 -21
  324. data/app/views/cms/users/edit.html.erb +1 -15
  325. data/app/views/cms/users/index.html.erb +61 -58
  326. data/app/views/cms/users/new.html.erb +1 -12
  327. data/app/views/devise/confirmations/new.html.erb +16 -0
  328. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  329. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  330. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  331. data/app/views/devise/passwords/edit.html.erb +19 -0
  332. data/app/views/devise/passwords/new.html.erb +15 -0
  333. data/app/views/devise/registrations/edit.html.erb +28 -0
  334. data/app/views/devise/registrations/new.html.erb +18 -0
  335. data/app/views/devise/shared/_links.erb +25 -0
  336. data/app/views/devise/unlocks/new.html.erb +16 -0
  337. data/app/views/layouts/cms/_content_types.html.erb +13 -0
  338. data/app/views/layouts/cms/_footer.erb +2 -2
  339. data/app/views/layouts/cms/_head.html.erb +8 -18
  340. data/app/views/layouts/cms/_main_menu.html.erb +78 -0
  341. data/app/views/layouts/cms/application.html.erb +19 -24
  342. data/app/views/layouts/cms/content_page.html.erb +5 -0
  343. data/app/views/layouts/cms/page_editor.html.erb +90 -0
  344. data/app/views/portlets/deprecated_placeholders/_form.html.erb +1 -0
  345. data/app/views/portlets/deprecated_placeholders/render.html.erb +8 -0
  346. data/app/views/portlets/dynamic/_form.html.erb +3 -3
  347. data/app/views/portlets/email_page/_form.html.erb +5 -6
  348. data/app/views/portlets/forgot_password/_form.html.erb +2 -3
  349. data/app/views/portlets/forgot_password/render.html.erb +2 -14
  350. data/app/views/portlets/login/_form.html.erb +4 -6
  351. data/app/views/portlets/login/render.html.erb +8 -27
  352. data/app/views/portlets/portlets/_form.html.erb +7 -6
  353. data/app/views/portlets/tag_cloud/_form.html.erb +4 -4
  354. data/app/views/tests/pretend/open_with_layout.html.erb +1 -1
  355. data/bin/bcms +13 -16
  356. data/config/routes.rb +58 -29
  357. data/db/browsercms.seeds.rb +0 -6
  358. data/db/migrate/{20080815014337_browsercms_3_0_0.rb → 20080815014337_browsercms300.rb} +94 -73
  359. data/db/migrate/20130327184912_browsercms400.rb +90 -0
  360. data/db/migrate/20131206214021_devise_create_users.rb +47 -0
  361. data/db/migrate/20131211223908_kill_reset_password.rb +5 -0
  362. data/db/migrate/20131218222005_create_cms_external_users.rb +10 -0
  363. data/doc/features/design_integration.md +45 -0
  364. data/doc/features/external_user.md +7 -0
  365. data/doc/features/form_builder.md +40 -0
  366. data/doc/features/simple_form_refactor.md +60 -0
  367. data/doc/release_notes.md +224 -10
  368. data/lib/acts_as_list.rb +72 -71
  369. data/lib/browsercms.rb +41 -1
  370. data/lib/cms/acts/content_block.rb +12 -2
  371. data/lib/cms/acts/content_page.rb +3 -4
  372. data/lib/cms/admin_tab.rb +15 -0
  373. data/lib/cms/attachments/configuration.rb +1 -1
  374. data/lib/cms/authentication/controller.rb +83 -177
  375. data/lib/cms/authentication/test_password_strategy.rb +19 -0
  376. data/lib/cms/behaviors.rb +1 -0
  377. data/lib/cms/behaviors/archiving.rb +2 -2
  378. data/lib/cms/behaviors/attaching.rb +21 -45
  379. data/lib/cms/behaviors/connecting.rb +14 -4
  380. data/lib/cms/behaviors/dynamic_attributes.rb +3 -3
  381. data/lib/cms/behaviors/hiding.rb +2 -2
  382. data/lib/cms/behaviors/namespacing.rb +6 -36
  383. data/lib/cms/behaviors/publishing.rb +92 -45
  384. data/lib/cms/behaviors/rendering.rb +15 -7
  385. data/lib/cms/behaviors/searching.rb +5 -4
  386. data/lib/cms/behaviors/soft_deleting.rb +13 -16
  387. data/lib/cms/behaviors/taggable.rb +17 -10
  388. data/lib/cms/behaviors/versioning.rb +12 -16
  389. data/lib/cms/commands/to_version400.rb +10 -0
  390. data/lib/cms/concerns.rb +7 -0
  391. data/lib/cms/concerns/can_be_addressable.rb +326 -0
  392. data/lib/cms/concerns/has_content_type.rb +46 -0
  393. data/lib/cms/concerns/ignores_publishing.rb +9 -0
  394. data/lib/cms/configuration.rb +14 -4
  395. data/lib/cms/configuration/configurable_template.rb +24 -0
  396. data/lib/cms/configuration/devise.rb +256 -0
  397. data/lib/cms/configure_simple_form.rb +142 -0
  398. data/lib/cms/configure_simple_form_bootstrap.rb +49 -0
  399. data/lib/cms/content_filter.rb +18 -0
  400. data/lib/cms/content_page.rb +77 -0
  401. data/lib/cms/content_rendering_support.rb +25 -16
  402. data/lib/cms/controllers/admin_controller.rb +78 -0
  403. data/lib/cms/data_loader.rb +30 -11
  404. data/lib/cms/default_accessible.rb +6 -6
  405. data/lib/cms/domain_support.rb +0 -4
  406. data/lib/cms/engine.rb +52 -20
  407. data/lib/cms/engine_helper.rb +41 -51
  408. data/{app/controllers → lib}/cms/error_handling.rb +11 -5
  409. data/lib/cms/extensions.rb +2 -1
  410. data/lib/cms/extensions/active_model/name.rb +13 -0
  411. data/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb +49 -89
  412. data/lib/cms/extensions/hash.rb +0 -12
  413. data/lib/cms/form_builder/content_block_form_builder.rb +45 -0
  414. data/lib/cms/form_builder/default_input.rb +13 -0
  415. data/lib/cms/form_builder/deprecated_inputs.rb +40 -0
  416. data/lib/cms/form_builder/workflow_buttons.rb +38 -0
  417. data/lib/cms/module.rb +1 -7
  418. data/lib/cms/polymorphic_single_table_inheritance.rb +19 -0
  419. data/lib/cms/publish_workflow.rb +26 -0
  420. data/lib/cms/responders/content_responder.rb +14 -0
  421. data/lib/cms/route_extensions.rb +112 -20
  422. data/lib/cms/version.rb +1 -1
  423. data/lib/generators/browser_cms/demo_site/templates/demo.seeds.rb +0 -2
  424. data/lib/generators/cms/content_block/content_block_generator.rb +19 -46
  425. data/lib/generators/cms/content_block/templates/_form.html.erb +22 -28
  426. data/lib/generators/cms/project/templates/devise.rb.erb +7 -0
  427. metadata +383 -150
  428. data/app/assets/javascripts/cms/sitemap.js.erb +0 -464
  429. data/app/assets/stylesheets/browsercms/application.css +0 -7
  430. data/app/assets/stylesheets/cms/administration.css.erb +0 -91
  431. data/app/assets/stylesheets/cms/application.css.erb +0 -171
  432. data/app/assets/stylesheets/cms/attachment_manager.css.scss +0 -28
  433. data/app/assets/stylesheets/cms/block.css +0 -26
  434. data/app/assets/stylesheets/cms/buttons.css.erb +0 -120
  435. data/app/assets/stylesheets/cms/content_library.css.erb +0 -139
  436. data/app/assets/stylesheets/cms/content_types.css +0 -4
  437. data/app/assets/stylesheets/cms/dashboard.css.erb +0 -118
  438. data/app/assets/stylesheets/cms/data_table.css.erb.erb +0 -156
  439. data/app/assets/stylesheets/cms/date_picker.css.erb +0 -82
  440. data/app/assets/stylesheets/cms/form_layout.css.erb +0 -282
  441. data/app/assets/stylesheets/cms/login.css.erb +0 -78
  442. data/app/assets/stylesheets/cms/menu.css.erb +0 -116
  443. data/app/assets/stylesheets/cms/nav.css.erb +0 -99
  444. data/app/assets/stylesheets/cms/page_toolbar.css.erb +0 -135
  445. data/app/assets/stylesheets/cms/reset.css +0 -46
  446. data/app/assets/stylesheets/cms/selectbox.css.erb +0 -56
  447. data/app/assets/stylesheets/cms/sitemap.css.erb +0 -390
  448. data/app/assets/stylesheets/cms/taglist.css +0 -18
  449. data/app/controllers/application_controller.rb +0 -14
  450. data/app/controllers/cms/content_types_controller.rb +0 -9
  451. data/app/helpers/application_helper.rb +0 -5
  452. data/app/helpers/cms/form_builder.rb +0 -241
  453. data/app/models/cms/content_type_group.rb +0 -15
  454. data/app/models/cms/forgot_password_mailer.rb +0 -14
  455. data/app/portlets/reset_password_portlet.rb +0 -28
  456. data/app/views/cms/blocks/_hidden_fields.html.erb +0 -10
  457. data/app/views/cms/blocks/_toolbar.html.erb +0 -9
  458. data/app/views/cms/blocks/_toolbar_for_collection.html.erb +0 -23
  459. data/app/views/cms/blocks/_toolbar_for_member.html.erb +0 -36
  460. data/app/views/cms/blocks/edit.html.erb +0 -28
  461. data/app/views/cms/blocks/index.html.erb +0 -86
  462. data/app/views/cms/blocks/new.html.erb +0 -19
  463. data/app/views/cms/blocks/show.html.erb +0 -43
  464. data/app/views/cms/blocks/usages.html.erb +0 -44
  465. data/app/views/cms/blocks/versions.html.erb +0 -90
  466. data/app/views/cms/content_types/index.html.erb +0 -14
  467. data/app/views/cms/form_builder/_cms_attachment_manager.html.erb +0 -27
  468. data/app/views/cms/form_builder/_cms_check_box.html.erb +0 -7
  469. data/app/views/cms/form_builder/_cms_date_picker.html.erb +0 -12
  470. data/app/views/cms/form_builder/_cms_datetime_select.html.erb +0 -12
  471. data/app/views/cms/form_builder/_cms_drop_down.html.erb +0 -12
  472. data/app/views/cms/form_builder/_cms_fancy_drop_down.html.erb +0 -9
  473. data/app/views/cms/form_builder/_cms_file_field.html.erb +0 -28
  474. data/app/views/cms/form_builder/_cms_instructions.html.erb +0 -4
  475. data/app/views/cms/form_builder/_cms_tag_list.html.erb +0 -15
  476. data/app/views/cms/form_builder/_cms_template_editor.html.erb +0 -9
  477. data/app/views/cms/form_builder/_cms_text_area.html.erb +0 -10
  478. data/app/views/cms/form_builder/_cms_text_editor.html.erb +0 -19
  479. data/app/views/cms/form_builder/_cms_text_field.html.erb +0 -12
  480. data/app/views/cms/links/destroy.js.rjs +0 -2
  481. data/app/views/cms/page_routes/show.html.erb +0 -10
  482. data/app/views/cms/pages/_edit_connector.html.erb +0 -19
  483. data/app/views/cms/pages/_edit_container.html.erb +0 -11
  484. data/app/views/cms/section_nodes/_link.html.erb +0 -14
  485. data/app/views/cms/section_nodes/_node.html.erb +0 -44
  486. data/app/views/cms/section_nodes/_page.html.erb +0 -20
  487. data/app/views/cms/section_nodes/_section.html.erb +0 -28
  488. data/app/views/cms/section_nodes/index.html.erb +0 -43
  489. data/app/views/cms/sections/_page.html.erb +0 -4
  490. data/app/views/cms/sections/_section.html.erb +0 -8
  491. data/app/views/cms/sections/destroy.js.rjs +0 -2
  492. data/app/views/cms/sections/index.html.erb +0 -23
  493. data/app/views/cms/shared/_admin_sidebar.html.erb +0 -36
  494. data/app/views/cms/shared/_pagination.html.erb +0 -31
  495. data/app/views/cms/toolbar/_mobile_toggle.html.erb +0 -33
  496. data/app/views/cms/toolbar/index.html.erb +0 -1
  497. data/app/views/cms/users/_groups.html.erb +0 -12
  498. data/app/views/cms/users/_toolbar.html.erb +0 -24
  499. data/app/views/cms/users/show.html.erb +0 -50
  500. data/app/views/layouts/_cms_toolbar.html.erb +0 -54
  501. data/app/views/layouts/_page_toolbar.html.erb +0 -119
  502. data/app/views/layouts/cms/administration.html.erb +0 -51
  503. data/app/views/layouts/cms/content_library.html.erb +0 -96
  504. data/app/views/layouts/cms/dashboard.html.erb +0 -16
  505. data/app/views/layouts/cms/login.html.erb +0 -31
  506. data/app/views/layouts/cms/section_nodes.html.erb +0 -20
  507. data/app/views/layouts/cms/toolbar.html.erb +0 -23
  508. data/app/views/portlets/reset_password/_form.html.erb +0 -3
  509. data/app/views/portlets/reset_password/render.html.erb +0 -22
  510. data/bin/bcms-upgrade +0 -332
  511. data/db/migrate/20091109175123_browsercms_3_0_5.rb +0 -9
  512. data/db/migrate/20100117144038_browsercms314.rb +0 -20
  513. data/db/migrate/20100117144039_browsercms315.rb +0 -95
  514. data/db/migrate/20100705083859_browsercms_3_3_0.rb +0 -56
  515. data/db/migrate/20111130221145_browsercms340.rb +0 -56
  516. data/db/migrate/20120329144406_browsercms350.rb +0 -32
  517. data/db/migrate/20120717182827_browsercms353.rb +0 -19
  518. data/db/migrate/20120813180110_browsercms354.rb +0 -9
  519. data/lib/cms/addressable.rb +0 -93
  520. data/lib/cms/authentication/model.rb +0 -116
  521. data/lib/cms/behaviors/pagination.rb +0 -212
  522. data/lib/cms/upgrades/v3_4_0.rb +0 -31
  523. data/lib/cms/upgrades/v3_5_0.rb +0 -227
@@ -32,18 +32,19 @@ module Cms
32
32
 
33
33
  options = {}
34
34
  data = options[:data] = {}
35
- data[:status] = block.class.publishable? && !block.published? ? ' draft' : ' published'
35
+ data[:status] = block.class.publishable? && !block.published? ? 'draft' : 'published'
36
36
 
37
37
  options[:id] = "#{cname}_#{block.id}"
38
38
  options[:class] = [cname]
39
39
  options[:class] << 'non-editable' unless can_modify && current_user.able_to?(:edit_content)
40
40
  options[:class] << 'non-publishable' unless can_modify && current_user.able_to?(:publish_content)
41
- options['data-new_path'] = url_for(new_block_path(block))
42
- options['data-view_path'] = url_for(block_path(block))
43
- options['data-edit_path'] = url_for(block_path(block, :edit))
44
- options['data-versions_path'] = url_for(block_path(block, :versions)) if block.class.versioned?
45
- options['data-delete_path'] = url_for(block_path(block))
46
- options['data-publish_path'] = url_for(block_path(block, :publish)) if block.class.publishable?
41
+ options['data-new_path'] = url_for(new_engine_aware_path(block))
42
+ options['data-view_path'] = url_for(engine_aware_path(block, nil))
43
+ options['data-edit_path'] = url_for(edit_engine_aware_path(block))
44
+ options['data-preview_path'] = block.path if block.class.addressable?
45
+ options['data-versions_path'] = engine(block).polymorphic_path(block, action: :versions) if block.class.versioned?
46
+ options['data-delete_path'] = url_for(engine_aware_path(block))
47
+ options['data-publish_path'] = engine(block).polymorphic_path([:publish, block]) if block.class.publishable?
47
48
  tag "tr", options, true
48
49
  end
49
50
 
@@ -1,32 +1,28 @@
1
1
  module Cms
2
2
  module FormTagHelper
3
-
4
- # A drop-down is just a specialized HTML select
5
-
6
- def drop_down_tag(name, option_tags = nil, options = {})
7
- select_tag(name, option_tags, options)
3
+
4
+ # Generates a form (i.e. Rails form_for) for creating/updating content blocks. Exposes additional methods to
5
+ # to create inputs. Implements a superset of SimpleForm behavior (i.e. simple_form_for).
6
+ #
7
+ # This also includes deprecated methods from pre-4.0 form building (like f.cms_text_field) for backwards compatiable
8
+ # support.
9
+ def content_block_form_for(object, *args, &block)
10
+ options = args.extract_options!
11
+ simple_form_for(engine_aware_path(object), *(args << options.merge(builder: Cms::FormBuilder::ContentBlockFormBuilder)), &block)
8
12
  end
9
-
10
- def drop_down(object, method, choices, options = {}, html_options = {})
11
- select(object, method, choices, options, html_options)
13
+
14
+
15
+ def forecasting_a_new_section?(form_object)
16
+ Cms::Section.with_path(form_object.object.class.path).first.nil?
12
17
  end
13
-
14
- # A text editor is an HTML WYSIWYG editor. The result of this
15
- # will be a div with a select and a textarea in it.
16
-
17
- def text_editor_options(options={})
18
- opts = options.dup
19
- (opts[:class] ||= "") << " editor"
20
- opts
18
+
19
+ def slug_source_if(boolean)
20
+ if boolean
21
+ {input_html: {class: 'slug-source'}}
22
+ else
23
+ {}
24
+ end
21
25
  end
22
-
23
- def text_editor_tag(name, content = nil, options = {})
24
- text_area_tag(name, content, text_editor_options(options))
25
- end
26
-
27
- def text_editor(object_name, method, options = {})
28
- text_area(object_name, method, text_editor_options(options))
29
- end
30
-
26
+
31
27
  end
32
28
  end
@@ -131,7 +131,7 @@ module Cms
131
131
 
132
132
  item = {}
133
133
  item[:id] = "#{section_node.node_type.gsub("::","_").underscore}_#{section_node.node_id}"
134
-
134
+
135
135
  # If we are showing a section item, we want to use the path for the first page
136
136
  page_or_link = section_node.section? ? node.first_page_or_link : node
137
137
  if section_node.section? && page_or_link
@@ -139,7 +139,6 @@ module Cms
139
139
  else
140
140
  item[:selected] = true if selected_page == page_or_link
141
141
  end
142
-
143
142
  item[:url] = page_or_link.try(:path) || '#'
144
143
  item[:name] = node.name
145
144
  item[:target] = "_blank" if page_or_link.respond_to?(:new_window?) && page_or_link.new_window?
@@ -154,7 +153,6 @@ module Cms
154
153
  !node.visible_child_nodes.empty?
155
154
  item[:children] = fn.call(node.visible_child_nodes, current_depth + 1)
156
155
  end
157
-
158
156
  item
159
157
  end
160
158
  end
@@ -2,11 +2,21 @@ module Cms
2
2
  module MobileHelper
3
3
 
4
4
  def full_site_url
5
- main_app.url_for(:host => Rails.configuration.cms.site_domain, :prefer_full_site => true)
5
+ options = {
6
+ :host => Rails.configuration.cms.site_domain,
7
+ path: current_page.path,
8
+ params: {:prefer_full_site => true}
9
+ }
10
+ ActionDispatch::Http::URL.url_for(options)
6
11
  end
7
12
 
8
13
  def mobile_site_url
9
- main_app.url_for(:host => Rails.configuration.cms.site_domain, :prefer_mobile_site => true)
14
+ options = {
15
+ :host => Rails.configuration.cms.site_domain,
16
+ path: current_page.path,
17
+ params: {:prefer_mobile_site => true}
18
+ }
19
+ ActionDispatch::Http::URL.url_for(options)
10
20
  end
11
21
 
12
22
  # Determines if the mobile template exists for a given page.
@@ -0,0 +1,23 @@
1
+ module Cms
2
+ module NavMenuHelper
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ helper_method :new_button_path, :target_section
7
+ end
8
+
9
+ # In most cases, the 'New' button should go to create a new page.
10
+ def new_button_path
11
+ cms.new_section_page_path(target_section)
12
+ end
13
+
14
+ # Used to determine which section a New Page should go in, based on the current context.
15
+ def target_section
16
+ if @page && @page.parent
17
+ @page.parent
18
+ else
19
+ Cms::Section.first
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,5 +1,27 @@
1
1
  module Cms
2
+
3
+ # Deprecated in 4.0. Remove in 4.1
4
+ module DeprecatedBehavior
5
+
6
+ # Add the code to render the CMS toolbar.
7
+ # @deprecated This method is no longer required for BrowserCMS templates.
8
+ def cms_toolbar
9
+ ActiveSupport::Deprecation.warn "The cms_toolbar helper is deprecated and no longer necessary. You can safely remove <%= cms_toolbar %> from templates.", caller
10
+ return ""
11
+ end
12
+
13
+ def deprecated_set_page_title_usage(args)
14
+ ActiveSupport::Deprecation.warn "Calling page_title('#{args.first}') is deprecated and will be remove in 4.1. Call use_page_title('#{args.first}') instead.", caller
15
+ use_page_title args.first
16
+ end
17
+ end
18
+
2
19
  module PageHelper
20
+ include Cms::DeprecatedBehavior
21
+
22
+ # Keep this taller until we reverse the iframes (so menus will work)
23
+ PAGE_TOOLBAR_HEIGHT = 159
24
+ TOOLBAR_HEIGHT = 100
3
25
 
4
26
  # Return the JS file to load the configured default WYSIWYG editor
5
27
  #
@@ -13,20 +35,45 @@ module Cms
13
35
  end
14
36
  end
15
37
 
16
- # Outputs the title for this page. Used by both internal CMS pages, as well as page templates. If not explicitily set,
17
- # returns the title of the page.
38
+ # Outputs the title for this page. Used by both internal CMS pages, as well as page templates. Call use_page_title to
39
+ # change this value.
18
40
  #
19
- # @param [String] The name this page should be set to.
41
+ # @param [String] If provided, this is the name of the page to set. (This usage is deprecated in 4.0 and will be removed in 4.1)
20
42
  # @return [String] The title of the page.
21
43
  def page_title(*args)
22
44
  if args.first
23
- # Removed unneeded indirection/fixed issue where @template is frozen in r1.9.1
24
- @page_title = args.first
45
+ deprecated_set_page_title_usage(args)
46
+ else
47
+ if @page_title
48
+ @page_title
49
+ elsif current_page
50
+ current_page.page_title
51
+ else
52
+ "Untitled"
53
+ end
54
+ end
55
+ end
56
+
57
+ # Returns the Page title in an In Context editable area.
58
+ #
59
+ # Use for h1/h2 elements. Use page_title for title elements.
60
+ def page_header()
61
+ if (is_current_user_able_to_edit_this_content?(current_page))
62
+ options = {id: 'page_title', contenteditable: true, data: {attribute: "title", content_name: "page", id: current_page.id, page_id: current_page.id}}
63
+ content_tag "div", page_title, options
25
64
  else
26
- @page_title ? @page_title : current_page.page_title
65
+ page_title
27
66
  end
28
- end
29
-
67
+ end
68
+
69
+ # Allows Views to set what will be displayed as the <title> element for Page Templates (and Cms admin pages.)
70
+ #
71
+ def use_page_title(title)
72
+ # Implementation note: This method is named use_page_title rather than page_title= because ruby will create a
73
+ # local variable if you call <%= page_title = "A New Page Name" %>
74
+ @page_title = title
75
+ end
76
+
30
77
  def current_page
31
78
  @page
32
79
  end
@@ -37,12 +84,13 @@ module Cms
37
84
  # @return [String] The HTML content for the container.
38
85
  def container(name)
39
86
  content = content_for(name)
40
- if logged_in? && @page && @mode == "edit" && current_user.able_to_edit?(@page)
41
- render :partial => 'cms/pages/edit_container', :locals => {:name => name, :content => content}
87
+ if is_current_user_able_to_edit_this_content?(@page)
88
+ render :partial => 'cms/pages/simple_container', :locals => {:name => name, :content => content, :container => name}
42
89
  else
43
90
  content
44
91
  end
45
- end
92
+ end
93
+
46
94
  # Determine if a given container has any blocks within it. Useful for determine if markup should be conditionally included
47
95
  # when a block is present, but not shown if no block was added. For example:
48
96
  #
@@ -56,7 +104,7 @@ module Cms
56
104
  # @param [Proc] block
57
105
  # @return [Boolean] True if the container has one or more blocks, or if we are in edit mode. False otherwise.
58
106
  def container_has_block?(name, &block)
59
- has_block = (@mode == "edit") || current_page.connectable_count_for_container(name) > 0
107
+ has_block = (edit_mode?) || current_page.connectable_count_for_container(name) > 0
60
108
  logger.info "mode = #{@mode}, has_block = #{has_block}"
61
109
  if block_given?
62
110
  concat(capture(&block)) if has_block
@@ -65,16 +113,6 @@ module Cms
65
113
  end
66
114
  end
67
115
 
68
- # Add the code to render the CMS toolbar.
69
- def cms_toolbar
70
- toolbar = <<HTML
71
- <iframe src="#{cms.toolbar_path(:page_id => @page.id, :page_version => @page.version, :mode => @mode, :page_toolbar => @show_page_toolbar ? 1 : 0) }" width="100%" height="#{@show_page_toolbar ? 159 : 100 }px" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" name="cms_toolbar"></iframe>
72
- HTML
73
- toolbar.html_safe if @show_toolbar
74
- end
75
-
76
-
77
-
78
116
  # Renders breadcrumbs based on the current_page. This will generate an unordered list representing the
79
117
  # current page and all it's ancestors including the root name of of the site. The UL can be styled via CSS for
80
118
  # layout purposes. Each breadcrumb except the last will be linked to the page in question.
@@ -98,24 +136,24 @@ HTML
98
136
  show_parent = options[:show_parent].nil? ? false : options[:show_parent]
99
137
  ancestors = current_page.ancestors
100
138
  items = []
101
- ancestors[start..ancestors.size].each_with_index do |sec,i|
102
- items << content_tag(:li,
103
- link_to(sec.name, sec.actual_path), (i == 0 ? {:class => "first"} : {}))
139
+ ancestors[start..ancestors.size].each_with_index do |sec, i|
140
+ items << content_tag(:li,
141
+ link_to(sec.name, sec.actual_path), (i == 0 ? {:class => "first"} : {}))
104
142
  end
105
- if !show_parent && current_page.section.path == current_page.path
106
- items[items.size-1] = content_tag(:li, current_page.section.name)
143
+ if !show_parent && current_page.landing_page?
144
+ items[items.size-1] = content_tag(:li, current_page.parent.name)
107
145
  else
108
146
  items << content_tag(:li, current_page.page_title)
109
147
  end
110
148
  content_tag(:ul, "\n #{items.join("\n ")}\n".html_safe, :class => "breadcrumbs")
111
149
  end
112
-
150
+
113
151
  def render_portlet(name)
114
152
  portlets = Portlet.all(:conditions => ["name = ?", name.to_s])
115
153
  if portlets.size > 1
116
- @mode == "edit" ? "ERROR: Multiple Portlets with name '#{name}'" : nil
154
+ edit_mode? ? "ERROR: Multiple Portlets with name '#{name}'" : nil
117
155
  elsif portlets.empty?
118
- @mode == "edit" ? "ERROR: No Portlet with name '#{name}'" : nil
156
+ edit_mode? ? "ERROR: No Portlet with name '#{name}'" : nil
119
157
  else
120
158
  render_connectable(portlets.first)
121
159
  end
@@ -127,5 +165,9 @@ HTML
127
165
  return ''
128
166
  end
129
167
 
168
+ # Determines whether this page is in edit mode or not.
169
+ def edit_mode?()
170
+ @mode == "edit"
171
+ end
130
172
  end
131
173
  end
@@ -20,54 +20,12 @@ module Cms
20
20
  #
21
21
  # @param [Cms::ContentType] content_type
22
22
  # @param [String] column_to_sort The name of the column to sort on.
23
- def cms_sortable_column_path(content_type, column_to_sort)
23
+ def sortable_column_path(content_type, column_to_sort)
24
24
  filtered_params = params.clone
25
25
  filtered_params.delete(:action)
26
26
  filtered_params.delete(:controller)
27
27
  filtered_params.merge!(:order => determine_order(filtered_params[:order], column_to_sort))
28
- cms_connectable_path(content_type.model_class, filtered_params)
29
- end
30
-
31
- # @deprecated Use cms_connectable_path instead.
32
- def cms_index_path_for(resource, options={})
33
- polymorphic_path(build_path_for(resource), options)
34
- end
35
-
36
- # @deprecated Remove all usages of this in favor of cms_index_path_for ()
37
- def cms_index_url_for(resource, options={})
38
- send("#{resource_collection_name(resource).underscore.pluralize.gsub('/', '_')}_url", options)
39
- end
40
-
41
- def cms_new_path_for(resource, options={})
42
- new_polymorphic_path(build_path_for(resource), options)
43
- end
44
-
45
- # @deprecated Remove all usages of this in favor of cms_new_path_for ()
46
- def cms_new_url_for(resource, options={})
47
- send("new_#{resource_collection_name(resource).underscore.gsub('/', '_')}_url", options)
48
- end
49
-
50
- # @param [Class, String] connectable The model class (i.e. HtmlBlock) or plural collection name (html_blocks) to link to
51
- # @param [Hash] options Passed to polymorphic_path
52
- #
53
- # @return [String] path suitable to give to link_to
54
- def cms_connectable_path(connectable, options={})
55
- if Portlet === connectable
56
- cms.portlet_path(connectable)
57
- else
58
- polymorphic_path(build_path_for(connectable), options)
59
- end
60
- end
61
-
62
- # @todo Really needs to be renamed to match conventions for Engines.
63
- # In CMS::Engine, should be edit_connectable_path
64
- # From app, should be cms.edit_connectable_path
65
- def edit_cms_connectable_path(connectable, options={})
66
- if Portlet === connectable
67
- edit_portlet_path(connectable, options)
68
- else
69
- edit_polymorphic_path(build_path_for(connectable), options)
70
- end
28
+ polymorphic_path(engine_aware_path(content_type.model_class), filtered_params)
71
29
  end
72
30
 
73
31
  def link_to_usages(block)
@@ -80,7 +38,7 @@ module Cms
80
38
  p = []
81
39
  p << engine_for(block)
82
40
  p << :usages
83
- p.concat path_elements_for(block)
41
+ p << block
84
42
  p
85
43
  end
86
44
  link_to count, path, :id => block.id, :block_type => block.content_block_type
@@ -89,40 +47,58 @@ module Cms
89
47
  end
90
48
  end
91
49
 
92
- # Returns the Engine Proxy that this resource is from.
93
- def engine_for(resource)
94
- EngineHelper.decorate(resource)
95
- send(resource.engine_name)
50
+
51
+ # Returns the route proxy (aka engine) for a given resource, which can then have named paths called on it.
52
+ # I.e. engine(@block).polymorphic_path([@block, :preview])
53
+ #
54
+ # @param [ActiveRecord::Base] resource
55
+ # @return [ActionDispatch::Routing::RoutesProxy]
56
+ def engine(resource)
57
+ name = EngineAwarePathBuilder.new(resource).engine_name
58
+ send(name)
96
59
  end
97
60
 
98
- def path_elements_for(resource)
99
- EngineHelper.decorate(resource)
100
- resource.path_elements
61
+ # @deprecated
62
+ alias :engine_for :engine
63
+
64
+ # Return the path for a given resource. Determines the relevant engine, and the result can be passed to polymporhic_path
65
+ #
66
+ # @param [Object] model_or_class_or_content_type A content block, class or content type.
67
+ # @param [String] action (Optional) i.e. :edit
68
+ # @return [Array] An array of argument suitable to be passed to url_for or link_to helpers. This will be something like:
69
+ # [main_app, :dummy_products, @block, :edit]
70
+ # or [cms, :html_blocks, @block]
71
+ #
72
+ # This will work whether the block is:
73
+ # 1. A block in a project (namespaced to the project) (i.e. Dummy::Product)
74
+ # 2. A core CMS block (i.e. Cms::Portlet)
75
+ # 3. A block in a module (i.e. BcmsNews::NewsArticle)
76
+ # e.g.
77
+ # engine_aware_path(Dummy::Product.find(1)) => /dummy/products/1
78
+ # engine_aware_path(Cms::HtmlBlock.find(1)) => /cms/html_blocks/1
79
+ # engine_aware_path(BcmsNews::NewsArticle.find(1)) => /bcms_news/news_articles/1
80
+ #
81
+ def engine_aware_path(model_or_class_or_content_type, action = false)
82
+ elements = build_path_for(model_or_class_or_content_type)
83
+ elements << action if action
84
+ elements
101
85
  end
102
86
 
103
- private
87
+ # Wrappers edit_polymorphic_path to be engine aware.
88
+ def edit_engine_aware_path(model_or_class_or_content_type, options={})
89
+ edit_polymorphic_path(build_path_for(model_or_class_or_content_type), options)
90
+ end
104
91
 
92
+ # Wrappers new_polymorphic_path to be engine aware.
93
+ def new_engine_aware_path(subject, options={})
94
+ new_polymorphic_path(build_path_for(subject), options)
95
+ end
96
+
97
+ private
105
98
 
106
99
  def build_path_for(model_or_class_or_content_type)
107
100
  Cms::EngineAwarePathBuilder.new(model_or_class_or_content_type).build(self)
108
101
  end
109
102
 
110
- # Returns the name of the collection that this resource belongs to
111
- # the resource can be a ContentType, ActiveRecord::Base instance
112
- # or just a string or symbol
113
- def resource_collection_name(resource)
114
- if resource.respond_to?(:resource_collection_name)
115
- return resource.resource_collection_name
116
- end
117
- case resource
118
- when ContentType then
119
- resource.route_name
120
- when ActiveRecord::Base then
121
- resource.class.model_name.demodulize
122
- else
123
- resource.to_s
124
- end
125
- end
126
-
127
103
  end
128
104
  end