browsercms-artirix 4.0.0.rc1.art4
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.
- checksums.yaml +7 -0
- data/.yardopts +5 -0
- data/COPYRIGHT.txt +27 -0
- data/GPL.txt +674 -0
- data/LICENSE.txt +165 -0
- data/README.markdown +45 -0
- data/app/assets/fonts/icomoon.dev.svg +61 -0
- data/app/assets/fonts/icomoon.eot +0 -0
- data/app/assets/fonts/icomoon.svg +61 -0
- data/app/assets/fonts/icomoon.ttf +0 -0
- data/app/assets/fonts/icomoon.woff +0 -0
- data/app/assets/images/ckeditor/plugins/delete_content/icons/deletecontent.png +0 -0
- data/app/assets/images/ckeditor/plugins/edit_content/icons/editcontent.png +0 -0
- data/app/assets/images/ckeditor/plugins/move_content/icons/movecontentdown.png +0 -0
- data/app/assets/images/ckeditor/plugins/move_content/icons/movecontentup.png +0 -0
- data/app/assets/images/cms/administration/user_browser_bg.gif +0 -0
- data/app/assets/images/cms/arrow-down.png +0 -0
- data/app/assets/images/cms/arrow-up.png +0 -0
- data/app/assets/images/cms/bg.png +0 -0
- data/app/assets/images/cms/bl_curve.png +0 -0
- data/app/assets/images/cms/bottom_cap.png +0 -0
- data/app/assets/images/cms/bottom_cap_content.png +0 -0
- data/app/assets/images/cms/browse.gif +0 -0
- data/app/assets/images/cms/browser_media_logo.png +0 -0
- data/app/assets/images/cms/browsercms_logo.png +0 -0
- data/app/assets/images/cms/buttons/button.png +0 -0
- data/app/assets/images/cms/buttons/button_bg.png +0 -0
- data/app/assets/images/cms/buttons/button_cap.png +0 -0
- data/app/assets/images/cms/buttons/button_cap_h.png +0 -0
- data/app/assets/images/cms/buttons/button_cap_off.gif +0 -0
- data/app/assets/images/cms/buttons/button_cap_off_middle.gif +0 -0
- data/app/assets/images/cms/buttons/button_h.png +0 -0
- data/app/assets/images/cms/buttons/button_left_bg.png +0 -0
- data/app/assets/images/cms/buttons/button_off.png +0 -0
- data/app/assets/images/cms/buttons/button_off_middle.png +0 -0
- data/app/assets/images/cms/buttons/delete_x.png +0 -0
- data/app/assets/images/cms/buttons/delete_x_disabled.png +0 -0
- data/app/assets/images/cms/buttons/delete_x_h.png +0 -0
- data/app/assets/images/cms/buttons/sm_button.gif +0 -0
- data/app/assets/images/cms/buttons/sm_button_2.gif +0 -0
- data/app/assets/images/cms/buttons/sm_button_2_h.gif +0 -0
- data/app/assets/images/cms/buttons/sm_button_h.gif +0 -0
- data/app/assets/images/cms/cogs.png +0 -0
- data/app/assets/images/cms/containers/add.gif +0 -0
- data/app/assets/images/cms/containers/alpha.png +0 -0
- data/app/assets/images/cms/containers/beta.png +0 -0
- data/app/assets/images/cms/containers/delete.gif +0 -0
- data/app/assets/images/cms/containers/down.gif +0 -0
- data/app/assets/images/cms/containers/edit.gif +0 -0
- data/app/assets/images/cms/containers/up.gif +0 -0
- data/app/assets/images/cms/containers/view.gif +0 -0
- data/app/assets/images/cms/content_bg.gif +0 -0
- data/app/assets/images/cms/dashboard/bottom_cap.png +0 -0
- data/app/assets/images/cms/dashboard/bottom_cap_content.png +0 -0
- data/app/assets/images/cms/dashboard/header_bg.gif +0 -0
- data/app/assets/images/cms/dashboard/header_left_bg.gif +0 -0
- data/app/assets/images/cms/dashboard/home.png +0 -0
- data/app/assets/images/cms/dashboard/table_header_bg.gif +0 -0
- data/app/assets/images/cms/dashboard/top_cap.png +0 -0
- data/app/assets/images/cms/dashed.gif +0 -0
- data/app/assets/images/cms/datepicker/clear.gif +0 -0
- data/app/assets/images/cms/datepicker/close.gif +0 -0
- data/app/assets/images/cms/dk_button_l.gif +0 -0
- data/app/assets/images/cms/dk_button_r.gif +0 -0
- data/app/assets/images/cms/dot.png +0 -0
- data/app/assets/images/cms/draft_status.gif +0 -0
- data/app/assets/images/cms/file-uploading.gif +0 -0
- data/app/assets/images/cms/gray_long_bg.gif +0 -0
- data/app/assets/images/cms/home.png +0 -0
- data/app/assets/images/cms/icons/actions/add.png +0 -0
- data/app/assets/images/cms/icons/actions/config.png +0 -0
- data/app/assets/images/cms/icons/actions/connect.png +0 -0
- data/app/assets/images/cms/icons/actions/delete.png +0 -0
- data/app/assets/images/cms/icons/actions/down.png +0 -0
- data/app/assets/images/cms/icons/actions/edit.png +0 -0
- data/app/assets/images/cms/icons/actions/folder.png +0 -0
- data/app/assets/images/cms/icons/actions/folder_add.png +0 -0
- data/app/assets/images/cms/icons/actions/folder_delete.png +0 -0
- data/app/assets/images/cms/icons/actions/folder_edit.png +0 -0
- data/app/assets/images/cms/icons/actions/folder_move.png +0 -0
- data/app/assets/images/cms/icons/actions/folder_open.png +0 -0
- data/app/assets/images/cms/icons/actions/history.png +0 -0
- data/app/assets/images/cms/icons/actions/home.png +0 -0
- data/app/assets/images/cms/icons/actions/left.png +0 -0
- data/app/assets/images/cms/icons/actions/link.png +0 -0
- data/app/assets/images/cms/icons/actions/page.png +0 -0
- data/app/assets/images/cms/icons/actions/page_add.png +0 -0
- data/app/assets/images/cms/icons/actions/page_edit.png +0 -0
- data/app/assets/images/cms/icons/actions/page_move.png +0 -0
- data/app/assets/images/cms/icons/actions/redo.png +0 -0
- data/app/assets/images/cms/icons/actions/refresh.png +0 -0
- data/app/assets/images/cms/icons/actions/right.png +0 -0
- data/app/assets/images/cms/icons/actions/root_folder.png +0 -0
- data/app/assets/images/cms/icons/actions/root_link.png +0 -0
- data/app/assets/images/cms/icons/actions/root_page.png +0 -0
- data/app/assets/images/cms/icons/actions/undo.png +0 -0
- data/app/assets/images/cms/icons/actions/up.png +0 -0
- data/app/assets/images/cms/icons/actions/view.png +0 -0
- data/app/assets/images/cms/icons/file_types/doc.png +0 -0
- data/app/assets/images/cms/icons/file_types/file.png +0 -0
- data/app/assets/images/cms/icons/file_types/gif.png +0 -0
- data/app/assets/images/cms/icons/file_types/htm.png +0 -0
- data/app/assets/images/cms/icons/file_types/pdf.png +0 -0
- data/app/assets/images/cms/icons/file_types/ppt.png +0 -0
- data/app/assets/images/cms/icons/file_types/swf.png +0 -0
- data/app/assets/images/cms/icons/file_types/txt.png +0 -0
- data/app/assets/images/cms/icons/file_types/xls.png +0 -0
- data/app/assets/images/cms/icons/file_types/xml.png +0 -0
- data/app/assets/images/cms/icons/file_types/zip.png +0 -0
- data/app/assets/images/cms/icons/status/archived.gif +0 -0
- data/app/assets/images/cms/icons/status/draft.gif +0 -0
- data/app/assets/images/cms/icons/status/hidden.gif +0 -0
- data/app/assets/images/cms/icons/status/locked.gif +0 -0
- data/app/assets/images/cms/icons/status/published.gif +0 -0
- data/app/assets/images/cms/icons/status/unlocked.gif +0 -0
- data/app/assets/images/cms/icons/user.png +0 -0
- data/app/assets/images/cms/login_bg.jpg +0 -0
- data/app/assets/images/cms/login_bottom.jpg +0 -0
- data/app/assets/images/cms/login_top.gif +0 -0
- data/app/assets/images/cms/logo.png +0 -0
- data/app/assets/images/cms/lt_button_bg.gif +0 -0
- data/app/assets/images/cms/lt_button_l.gif +0 -0
- data/app/assets/images/cms/lt_button_r.gif +0 -0
- data/app/assets/images/cms/menu/block_cap_h.gif +0 -0
- data/app/assets/images/cms/menu/bottom_cap.png +0 -0
- data/app/assets/images/cms/menu/bottom_cap_menu.png +0 -0
- data/app/assets/images/cms/menu/bottom_cap_menu_first.png +0 -0
- data/app/assets/images/cms/menu/menu_header_first_bg.gif +0 -0
- data/app/assets/images/cms/menu/selected_block_cap.gif +0 -0
- data/app/assets/images/cms/menu/top_cap.png +0 -0
- data/app/assets/images/cms/menu/top_cap_menu_header.png +0 -0
- data/app/assets/images/cms/menu.png +0 -0
- data/app/assets/images/cms/menu_h.gif +0 -0
- data/app/assets/images/cms/menu_header.png +0 -0
- data/app/assets/images/cms/menu_open.png +0 -0
- data/app/assets/images/cms/menu_open_bg.gif +0 -0
- data/app/assets/images/cms/nav/on_bg.gif +0 -0
- data/app/assets/images/cms/nav.png +0 -0
- data/app/assets/images/cms/nav_admin.gif +0 -0
- data/app/assets/images/cms/nav_admin_h.gif +0 -0
- data/app/assets/images/cms/nav_admin_on.gif +0 -0
- data/app/assets/images/cms/nav_cap.png +0 -0
- data/app/assets/images/cms/nav_cap_h.gif +0 -0
- data/app/assets/images/cms/nav_content_library.gif +0 -0
- data/app/assets/images/cms/nav_content_library_h.gif +0 -0
- data/app/assets/images/cms/nav_content_library_on.gif +0 -0
- data/app/assets/images/cms/nav_dash.gif +0 -0
- data/app/assets/images/cms/nav_dash_h.gif +0 -0
- data/app/assets/images/cms/nav_dash_on.gif +0 -0
- data/app/assets/images/cms/nav_h.gif +0 -0
- data/app/assets/images/cms/nav_sitemap.gif +0 -0
- data/app/assets/images/cms/nav_sitemap_h.gif +0 -0
- data/app/assets/images/cms/nav_sitemap_on.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_bg.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_bg.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_draft_bg.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_draft_l.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_draft_r.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_l.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_published_bg.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_published_l.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_published_r.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_r.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_l.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_r.gif +0 -0
- data/app/assets/images/cms/page_toolbar/status_draft_bg.gif +0 -0
- data/app/assets/images/cms/page_toolbar/status_draft_l.gif +0 -0
- data/app/assets/images/cms/page_toolbar/status_l.gif +0 -0
- data/app/assets/images/cms/page_toolbar/status_published_bg.gif +0 -0
- data/app/assets/images/cms/page_toolbar/status_published_l.gif +0 -0
- data/app/assets/images/cms/page_toolbar/visual_editor_bg.gif +0 -0
- data/app/assets/images/cms/page_toolbar/visual_editor_end.gif +0 -0
- data/app/assets/images/cms/page_toolbar/visual_editor_r.gif +0 -0
- data/app/assets/images/cms/page_toolbar/visual_editor_state_bg.gif +0 -0
- data/app/assets/images/cms/pages/add_connectable.gif +0 -0
- data/app/assets/images/cms/pages/connect_connectable.gif +0 -0
- data/app/assets/images/cms/pages/container_border.gif +0 -0
- data/app/assets/images/cms/pages/container_border_l.gif +0 -0
- data/app/assets/images/cms/pages/container_border_r.gif +0 -0
- data/app/assets/images/cms/pages/delete_connectable.gif +0 -0
- data/app/assets/images/cms/pages/down_connectable.gif +0 -0
- data/app/assets/images/cms/pages/down_connectable_disabled.gif +0 -0
- data/app/assets/images/cms/pages/edit_connectable.gif +0 -0
- data/app/assets/images/cms/pages/edit_connectable_2.gif +0 -0
- data/app/assets/images/cms/pages/show_connectable.gif +0 -0
- data/app/assets/images/cms/pages/up_connectable.gif +0 -0
- data/app/assets/images/cms/pages/up_connectable_disabled.gif +0 -0
- data/app/assets/images/cms/pagination/first.gif +0 -0
- data/app/assets/images/cms/pagination/first_h.gif +0 -0
- data/app/assets/images/cms/pagination/input.gif +0 -0
- data/app/assets/images/cms/pagination/last.gif +0 -0
- data/app/assets/images/cms/pagination/last_h.gif +0 -0
- data/app/assets/images/cms/pagination/next.gif +0 -0
- data/app/assets/images/cms/pagination/next_h.gif +0 -0
- data/app/assets/images/cms/pagination/previous.gif +0 -0
- data/app/assets/images/cms/pagination/previous_h.gif +0 -0
- data/app/assets/images/cms/pencil.png +0 -0
- data/app/assets/images/cms/plus.png +0 -0
- data/app/assets/images/cms/published_status.gif +0 -0
- data/app/assets/images/cms/search.png +0 -0
- data/app/assets/images/cms/search_submit.gif +0 -0
- data/app/assets/images/cms/search_submit_h.gif +0 -0
- data/app/assets/images/cms/searchbox_gradient.gif +0 -0
- data/app/assets/images/cms/select_bg.gif +0 -0
- data/app/assets/images/cms/select_bg_2.gif +0 -0
- data/app/assets/images/cms/sitemap/bottom_cap.png +0 -0
- data/app/assets/images/cms/sitemap/buffer_caps.png +0 -0
- data/app/assets/images/cms/sitemap/contract.png +0 -0
- data/app/assets/images/cms/sitemap/corners.gif +0 -0
- data/app/assets/images/cms/sitemap/corners_hover.gif +0 -0
- data/app/assets/images/cms/sitemap/divider.gif +0 -0
- data/app/assets/images/cms/sitemap/expand.png +0 -0
- data/app/assets/images/cms/sitemap/gradient.gif +0 -0
- data/app/assets/images/cms/sitemap/gray_contract.png +0 -0
- data/app/assets/images/cms/sitemap/gray_expand.png +0 -0
- data/app/assets/images/cms/sitemap/no_contents.png +0 -0
- data/app/assets/images/cms/sitemap/site_root_cap.png +0 -0
- data/app/assets/images/cms/sitemap/tooltip.gif +0 -0
- data/app/assets/images/cms/sitemap/top_cap_content.png +0 -0
- data/app/assets/images/cms/solid.gif +0 -0
- data/app/assets/images/cms/table/bl.gif +0 -0
- data/app/assets/images/cms/table/br.gif +0 -0
- data/app/assets/images/cms/table/divider.gif +0 -0
- data/app/assets/images/cms/table/td_cap_first_h.gif +0 -0
- data/app/assets/images/cms/table/td_cap_first_s.gif +0 -0
- data/app/assets/images/cms/table/td_cap_last_h.gif +0 -0
- data/app/assets/images/cms/table/td_cap_last_s.gif +0 -0
- data/app/assets/images/cms/table/td_last_bg.gif +0 -0
- data/app/assets/images/cms/table/th_bg.gif +0 -0
- data/app/assets/images/cms/table/th_divider.gif +0 -0
- data/app/assets/images/cms/table/th_last_bg.gif +0 -0
- data/app/assets/images/cms/table/tl.gif +0 -0
- data/app/assets/images/cms/table/tr.gif +0 -0
- data/app/assets/images/cms/table/tr_bg.gif +0 -0
- data/app/assets/images/cms/toolbar_bg.png +0 -0
- data/app/assets/images/cms/top_cap.png +0 -0
- data/app/assets/images/cms/top_cap_content.png +0 -0
- data/app/assets/images/cms/top_cap_menu_header.png +0 -0
- data/app/assets/images/cms/user.png +0 -0
- data/app/assets/images/cms/user_search_submit.gif +0 -0
- data/app/assets/images/cms/usercontrols_bg.png +0 -0
- data/app/assets/images/cms/usercontrols_bg_cap.png +0 -0
- data/app/assets/javascripts/bcms/ckeditor.js +8 -0
- data/app/assets/javascripts/bcms/ckeditor_inline.js +23 -0
- data/app/assets/javascripts/bcms/ckeditor_load.js +54 -0
- data/app/assets/javascripts/bcms/ckeditor_standard_config.js +10 -0
- data/app/assets/javascripts/ckeditor/plugins/delete_content/plugin.js +36 -0
- data/app/assets/javascripts/ckeditor/plugins/edit_content/plugin.js +24 -0
- data/app/assets/javascripts/ckeditor/plugins/move_content/plugin.js +25 -0
- data/app/assets/javascripts/cms/ajax.js +60 -0
- data/app/assets/javascripts/cms/application.js +18 -0
- data/app/assets/javascripts/cms/attachment_manager.js +88 -0
- data/app/assets/javascripts/cms/content_library.js +121 -0
- data/app/assets/javascripts/cms/content_types.js +13 -0
- data/app/assets/javascripts/cms/core_library.js.erb +210 -0
- data/app/assets/javascripts/cms/form_builder.js +250 -0
- data/app/assets/javascripts/cms/namespace.js +2 -0
- data/app/assets/javascripts/cms/new_content_button.js +27 -0
- data/app/assets/javascripts/cms/page_editor.js +189 -0
- data/app/assets/javascripts/cms/page_toolbar.js +13 -0
- data/app/assets/javascripts/cms/site.js +2 -0
- data/app/assets/javascripts/cms/sitemap.js +219 -0
- data/app/assets/javascripts/cms/toolbar.js +21 -0
- data/app/assets/javascripts/cms/user.js +40 -0
- data/app/assets/javascripts/jquery.exists.js +5 -0
- data/app/assets/javascripts/jquery.taglist.js +157 -0
- data/app/assets/stylesheets/cms/_assets.scss +60 -0
- data/app/assets/stylesheets/cms/_base.scss +42 -0
- data/app/assets/stylesheets/cms/_cms-buttons.scss +73 -0
- data/app/assets/stylesheets/cms/_cms-forms.scss +70 -0
- data/app/assets/stylesheets/cms/_colors.scss +20 -0
- data/app/assets/stylesheets/cms/_dashboard.scss +25 -0
- data/app/assets/stylesheets/cms/_glyph.scss +60 -0
- data/app/assets/stylesheets/cms/_main-area.scss +62 -0
- data/app/assets/stylesheets/cms/_nav.scss +197 -0
- data/app/assets/stylesheets/cms/_sidebar.scss +64 -0
- data/app/assets/stylesheets/cms/_sitemap.scss +209 -0
- data/app/assets/stylesheets/cms/_submenu.scss +48 -0
- data/app/assets/stylesheets/cms/application.scss +49 -0
- data/app/assets/stylesheets/cms/core.scss +96 -0
- data/app/assets/stylesheets/cms/default-forms.scss +3 -0
- data/app/assets/stylesheets/cms/includes/_animation.scss +2 -0
- data/app/assets/stylesheets/cms/includes/_rem.scss +120 -0
- data/app/assets/stylesheets/cms/includes/animation/_animate.scss +31 -0
- data/app/assets/stylesheets/cms/includes/animation/_core.scss +127 -0
- data/app/assets/stylesheets/cms/includes/animation/_shared.scss +22 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_attention-seekers.scss +152 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_bouncing.scss +3 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_classes.scss +21 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_fading.scss +3 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_flippers.scss +87 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_lightspeed.scss +24 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_rotating.scss +3 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_specials.scss +42 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/bouncing/_bouncing-entrances.scss +68 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/bouncing/_bouncing-exits.scss +60 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/fading/_fading-entrances.scss +86 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/fading/_fading-exits.scss +86 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/rotating/_rotating-entrances.scss +58 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/rotating/_rotating-exits.scss +58 -0
- data/app/assets/stylesheets/cms/page_content_editing.scss +4 -0
- data/app/assets/stylesheets/cms/page_editor.scss +4 -0
- data/app/assets/stylesheets/cms/style.scss +138 -0
- data/app/assets/stylesheets/cms/styles/_alerts.scss +150 -0
- data/app/assets/stylesheets/cms/styles/_base-grid.scss +299 -0
- data/app/assets/stylesheets/cms/styles/_buttons.scss +247 -0
- data/app/assets/stylesheets/cms/styles/_dropdown.scss +155 -0
- data/app/assets/stylesheets/cms/styles/_forms.scss +728 -0
- data/app/assets/stylesheets/cms/styles/_glyph.scss +86 -0
- data/app/assets/stylesheets/cms/styles/_images.scss +86 -0
- data/app/assets/stylesheets/cms/styles/_lists.scss +115 -0
- data/app/assets/stylesheets/cms/styles/_modal.scss +174 -0
- data/app/assets/stylesheets/cms/styles/_progress.scss +43 -0
- data/app/assets/stylesheets/cms/styles/_tables.scss +141 -0
- data/app/assets/stylesheets/cms/styles/_text.scss +134 -0
- data/app/controllers/cms/application_controller.rb +11 -0
- data/app/controllers/cms/attachments_controller.rb +48 -0
- data/app/controllers/cms/base_controller.rb +22 -0
- data/app/controllers/cms/cache_controller.rb +23 -0
- data/app/controllers/cms/categories_controller.rb +7 -0
- data/app/controllers/cms/category_types_controller.rb +12 -0
- data/app/controllers/cms/connectors_controller.rb +70 -0
- data/app/controllers/cms/content_block_controller.rb +361 -0
- data/app/controllers/cms/content_controller.rb +173 -0
- data/app/controllers/cms/content_types_controller.rb +14 -0
- data/app/controllers/cms/dashboard_controller.rb +13 -0
- data/app/controllers/cms/dynamic_views_controller.rb +81 -0
- data/app/controllers/cms/email_messages_controller.rb +21 -0
- data/app/controllers/cms/file_blocks_controller.rb +4 -0
- data/app/controllers/cms/form_entries_controller.rb +140 -0
- data/app/controllers/cms/form_fields_controller.rb +74 -0
- data/app/controllers/cms/forms_controller.rb +35 -0
- data/app/controllers/cms/groups_controller.rb +25 -0
- data/app/controllers/cms/home_controller.rb +10 -0
- data/app/controllers/cms/html_blocks_controller.rb +4 -0
- data/app/controllers/cms/image_blocks_controller.rb +4 -0
- data/app/controllers/cms/inline_content_controller.rb +50 -0
- data/app/controllers/cms/links_controller.rb +81 -0
- data/app/controllers/cms/page_components_controller.rb +20 -0
- data/app/controllers/cms/page_route_conditions_controller.rb +4 -0
- data/app/controllers/cms/page_route_options_controller.rb +58 -0
- data/app/controllers/cms/page_route_requirements_controller.rb +4 -0
- data/app/controllers/cms/page_routes_controller.rb +51 -0
- data/app/controllers/cms/pages_controller.rb +151 -0
- data/app/controllers/cms/passwords_controller.rb +22 -0
- data/app/controllers/cms/portlet_controller.rb +21 -0
- data/app/controllers/cms/portlets_controller.rb +35 -0
- data/app/controllers/cms/redirects_controller.rb +25 -0
- data/app/controllers/cms/resource_controller.rb +125 -0
- data/app/controllers/cms/routes_controller.rb +22 -0
- data/app/controllers/cms/section_nodes_controller.rb +24 -0
- data/app/controllers/cms/sections_controller.rb +100 -0
- data/app/controllers/cms/sessions_controller.rb +15 -0
- data/app/controllers/cms/sites/passwords_controller.rb +32 -0
- data/app/controllers/cms/sites/sessions_controller.rb +20 -0
- data/app/controllers/cms/tags_controller.rb +16 -0
- data/app/controllers/cms/tasks_controller.rb +56 -0
- data/app/controllers/cms/toolbar_controller.rb +18 -0
- data/app/controllers/cms/user_controller.rb +8 -0
- data/app/controllers/cms/users_controller.rb +125 -0
- data/app/controllers/tests/pretend_controller.rb +32 -0
- data/app/helpers/cms/application_helper.rb +258 -0
- data/app/helpers/cms/content_block_helper.rb +55 -0
- data/app/helpers/cms/content_types_helper.rb +4 -0
- data/app/helpers/cms/form_tag_helper.rb +36 -0
- data/app/helpers/cms/menu_helper.rb +167 -0
- data/app/helpers/cms/mobile_helper.rb +29 -0
- data/app/helpers/cms/nav_menu_helper.rb +23 -0
- data/app/helpers/cms/page_helper.rb +169 -0
- data/app/helpers/cms/path_helper.rb +113 -0
- data/app/helpers/cms/rendering_helper.rb +112 -0
- data/app/helpers/cms/section_nodes_helper.rb +112 -0
- data/app/helpers/cms/sites/authentication_helper.rb +25 -0
- data/app/helpers/cms/sites/devise_shim_helper.rb +31 -0
- data/app/helpers/cms/template_support.rb +18 -0
- data/app/helpers/cms/ui_elements_helper.rb +168 -0
- data/app/helpers/forgot_password_portlet_helper.rb +9 -0
- data/app/helpers/login_portlet_helper.rb +10 -0
- data/app/inputs/attachments_input.rb +14 -0
- data/app/inputs/cms_text_area_input.rb +10 -0
- data/app/inputs/date_picker_input.rb +8 -0
- data/app/inputs/file_picker_input.rb +75 -0
- data/app/inputs/name_input.rb +42 -0
- data/app/inputs/path_input.rb +18 -0
- data/app/inputs/tag_list_input.rb +3 -0
- data/app/inputs/template_editor_input.rb +24 -0
- data/app/inputs/text_editor_input.rb +19 -0
- data/app/models/cms/abstract_file_block.rb +50 -0
- data/app/models/cms/attachment.rb +267 -0
- data/app/models/cms/category.rb +56 -0
- data/app/models/cms/category_type.rb +43 -0
- data/app/models/cms/connector.rb +99 -0
- data/app/models/cms/content.rb +31 -0
- data/app/models/cms/content_type.rb +191 -0
- data/app/models/cms/dynamic_view.rb +81 -0
- data/app/models/cms/email_message.rb +63 -0
- data/app/models/cms/email_message_mailer.rb +12 -0
- data/app/models/cms/external_user.rb +60 -0
- data/app/models/cms/file_block.rb +19 -0
- data/app/models/cms/form.rb +47 -0
- data/app/models/cms/form_entry.rb +75 -0
- data/app/models/cms/form_field.rb +78 -0
- data/app/models/cms/group.rb +62 -0
- data/app/models/cms/group_permission.rb +12 -0
- data/app/models/cms/group_section.rb +9 -0
- data/app/models/cms/group_type.rb +16 -0
- data/app/models/cms/group_type_permission.rb +8 -0
- data/app/models/cms/guest_user.rb +57 -0
- data/app/models/cms/html_block.rb +38 -0
- data/app/models/cms/image_block.rb +23 -0
- data/app/models/cms/link.rb +20 -0
- data/app/models/cms/page.rb +437 -0
- data/app/models/cms/page_component.rb +43 -0
- data/app/models/cms/page_partial.rb +40 -0
- data/app/models/cms/page_route.rb +140 -0
- data/app/models/cms/page_route_condition.rb +5 -0
- data/app/models/cms/page_route_option.rb +7 -0
- data/app/models/cms/page_route_requirement.rb +5 -0
- data/app/models/cms/page_template.rb +45 -0
- data/app/models/cms/permission.rb +17 -0
- data/app/models/cms/persistent_user.rb +223 -0
- data/app/models/cms/portlet.rb +237 -0
- data/app/models/cms/redirect.rb +12 -0
- data/app/models/cms/search_filter.rb +18 -0
- data/app/models/cms/section.rb +224 -0
- data/app/models/cms/section_node.rb +144 -0
- data/app/models/cms/site.rb +45 -0
- data/app/models/cms/tag.rb +69 -0
- data/app/models/cms/tagging.rb +14 -0
- data/app/models/cms/task.rb +75 -0
- data/app/models/cms/templates.rb +31 -0
- data/app/models/cms/user.rb +43 -0
- data/app/models/cms/user_group_membership.rb +9 -0
- data/app/models/cms/view_context.rb +81 -0
- data/app/portlets/deprecated_placeholder.rb +12 -0
- data/app/portlets/dynamic_portlet.rb +7 -0
- data/app/portlets/email_page_portlet.rb +32 -0
- data/app/portlets/forgot_password_portlet.rb +15 -0
- data/app/portlets/helpers/cms/list_portlet_helper.rb +5 -0
- data/app/portlets/list_portlet.rb +40 -0
- data/app/portlets/login_portlet.rb +13 -0
- data/app/portlets/tag_cloud_portlet.rb +15 -0
- data/app/presenters/cms/user_presenter.rb +47 -0
- data/app/views/cms/application/_add_content_modal.html.erb +3 -0
- data/app/views/cms/application/_buttons.html.erb +7 -0
- data/app/views/cms/application/_exception.html.erb +6 -0
- data/app/views/cms/application/_form_errors.html.erb +7 -0
- data/app/views/cms/application/_form_with_buttons.html.erb +10 -0
- data/app/views/cms/application/_main_content.html.erb +3 -0
- data/app/views/cms/application/_main_with_sidebar.html.erb +8 -0
- data/app/views/cms/application/_mobile_toolbar.html.erb +16 -0
- data/app/views/cms/application/_page_title.html.erb +5 -0
- data/app/views/cms/application/_pagination.html.erb +26 -0
- data/app/views/cms/application/_row.html.erb +1 -0
- data/app/views/cms/application/_save_buttons.html.erb +7 -0
- data/app/views/cms/application/_sidebar_layout.html.erb +3 -0
- data/app/views/cms/application/_version.html.erb +23 -0
- data/app/views/cms/application/_version_conflict_diff.html.erb +11 -0
- data/app/views/cms/application/_version_conflict_error.html.erb +6 -0
- data/app/views/cms/attachments/_attachment.html.erb +16 -0
- data/app/views/cms/attachments/_attachment_manager.html.erb +39 -0
- data/app/views/cms/attachments/_attachment_table.html.erb +22 -0
- data/app/views/cms/attachments/_attachment_wrapper.html.erb +4 -0
- data/app/views/cms/attachments/_no_attachments_defined.html.erb +1 -0
- data/app/views/cms/cache/show.html.erb +7 -0
- data/app/views/cms/categories/_form.html.erb +27 -0
- data/app/views/cms/category_types/_form.html.erb +1 -0
- data/app/views/cms/connectors/new.html.erb +38 -0
- data/app/views/cms/content/editing_frame.html.erb +1 -0
- data/app/views/cms/content/no_page.html.erb +19 -0
- data/app/views/cms/content/show.html.erb +21 -0
- data/app/views/cms/content_block/_block_form.html.erb +15 -0
- data/app/views/cms/content_block/_buttonbar.html.erb +29 -0
- data/app/views/cms/content_block/_buttons.html.erb +13 -0
- data/app/views/cms/content_block/_hidden_fields.html.erb +13 -0
- data/app/views/cms/content_block/_sidebar.html.erb +36 -0
- data/app/views/cms/content_block/edit.html.erb +3 -0
- data/app/views/cms/content_block/index.html.erb +87 -0
- data/app/views/cms/content_block/new.html.erb +3 -0
- data/app/views/cms/content_block/render_block_in_main_container.html.erb +10 -0
- data/app/views/cms/content_block/show.html.erb +1 -0
- data/app/views/cms/content_block/show_in_isolation.html.erb +15 -0
- data/app/views/cms/content_block/versions.html.erb +24 -0
- data/app/views/cms/content_types/_order_field.html.erb +5 -0
- data/app/views/cms/content_types/index.html.erb +3 -0
- data/app/views/cms/dashboard/_page_drafts.html.erb +39 -0
- data/app/views/cms/dashboard/_tasks.html.erb +41 -0
- data/app/views/cms/dashboard/index.html.erb +13 -0
- data/app/views/cms/dynamic_views/_form.html.erb +9 -0
- data/app/views/cms/dynamic_views/edit.html.erb +2 -0
- data/app/views/cms/dynamic_views/index.html.erb +33 -0
- data/app/views/cms/dynamic_views/new.html.erb +2 -0
- data/app/views/cms/email_messages/index.html.erb +36 -0
- data/app/views/cms/email_messages/show.html.erb +50 -0
- data/app/views/cms/file_blocks/_form.html.erb +3 -0
- data/app/views/cms/file_blocks/_section_selector.html.erb +13 -0
- data/app/views/cms/file_blocks/render.html.erb +5 -0
- data/app/views/cms/forgot_password_mailer/reset_password.text.html.erb +3 -0
- data/app/views/cms/forgot_password_mailer/reset_password.text.plain.erb +3 -0
- data/app/views/cms/form_entries/_buttons.html.erb +2 -0
- data/app/views/cms/form_entries/_form.html.erb +7 -0
- data/app/views/cms/form_entries/_internal_form.html.erb +9 -0
- data/app/views/cms/form_entries/edit.html.erb +5 -0
- data/app/views/cms/form_entries/error.html.erb +3 -0
- data/app/views/cms/form_entries/index.html.erb +5 -0
- data/app/views/cms/form_entries/new.html.erb +5 -0
- data/app/views/cms/form_entries/show.html.erb +13 -0
- data/app/views/cms/form_entries/submit.html.erb +1 -0
- data/app/views/cms/form_fields/_form.html.erb +8 -0
- data/app/views/cms/form_fields/_select.html.erb +3 -0
- data/app/views/cms/form_fields/_text_area.html.erb +3 -0
- data/app/views/cms/form_fields/_text_field.html.erb +3 -0
- data/app/views/cms/form_fields/edit.html.erb +0 -0
- data/app/views/cms/form_fields/new.html.erb +26 -0
- data/app/views/cms/form_fields/preview.html.erb +16 -0
- data/app/views/cms/forms/_form.html.erb +67 -0
- data/app/views/cms/forms/render.html.erb +15 -0
- data/app/views/cms/forms/show.html.erb +6 -0
- data/app/views/cms/groups/_form.html.erb +38 -0
- data/app/views/cms/groups/_permissions.html.erb +14 -0
- data/app/views/cms/groups/_sections.html.erb +12 -0
- data/app/views/cms/groups/edit.html.erb +2 -0
- data/app/views/cms/groups/index.html.erb +36 -0
- data/app/views/cms/groups/new.html.erb +2 -0
- data/app/views/cms/html_blocks/_form.html.erb +3 -0
- data/app/views/cms/html_blocks/render.html.erb +1 -0
- data/app/views/cms/image_blocks/_form.html.erb +3 -0
- data/app/views/cms/image_blocks/render.html.erb +4 -0
- data/app/views/cms/links/_form.html.erb +8 -0
- data/app/views/cms/links/edit.html.erb +4 -0
- data/app/views/cms/links/new.html.erb +5 -0
- data/app/views/cms/menus/_menu.html.erb +9 -0
- data/app/views/cms/menus/_menu_item.html.erb +11 -0
- data/app/views/cms/page_components/_content.html.erb +18 -0
- data/app/views/cms/page_components/new.html.erb +12 -0
- data/app/views/cms/page_routes/_form.html.erb +12 -0
- data/app/views/cms/page_routes/edit.html.erb +2 -0
- data/app/views/cms/page_routes/index.html.erb +33 -0
- data/app/views/cms/page_routes/new.html.erb +2 -0
- data/app/views/cms/pages/_edit_content.html.erb +28 -0
- data/app/views/cms/pages/_form.html.erb +21 -0
- data/app/views/cms/pages/_main_form.html.erb +23 -0
- data/app/views/cms/pages/_simple_container.html.erb +8 -0
- data/app/views/cms/pages/edit.html.erb +2 -0
- data/app/views/cms/pages/new.html.erb +19 -0
- data/app/views/cms/pages/versions.html.erb +22 -0
- data/app/views/cms/passwords/new.html.erb +16 -0
- data/app/views/cms/redirects/_form.html.erb +7 -0
- data/app/views/cms/redirects/edit.html.erb +2 -0
- data/app/views/cms/redirects/index.html.erb +25 -0
- data/app/views/cms/redirects/new.html.erb +2 -0
- data/app/views/cms/routes/index.html.erb +35 -0
- data/app/views/cms/section_nodes/_children.html.erb +5 -0
- data/app/views/cms/section_nodes/_row_buttons.html.erb +11 -0
- data/app/views/cms/section_nodes/_section_node.html.erb +24 -0
- data/app/views/cms/section_nodes/_sitemap_buttons.html.erb +47 -0
- data/app/views/cms/section_nodes/_status.html.erb +5 -0
- data/app/views/cms/section_nodes/show.html.erb +9 -0
- data/app/views/cms/sections/_buttons.html.erb +6 -0
- data/app/views/cms/sections/_form.html.erb +30 -0
- data/app/views/cms/sections/edit.html.erb +4 -0
- data/app/views/cms/sections/new.html.erb +5 -0
- data/app/views/cms/sessions/new.html.erb +16 -0
- data/app/views/cms/shared/access_denied.html.erb +2 -0
- data/app/views/cms/shared/error.html.erb +40 -0
- data/app/views/cms/shared/error.xml.erb +8 -0
- data/app/views/cms/sites/_flash.html.erb +8 -0
- data/app/views/cms/sites/passwords/new.html.erb +2 -0
- data/app/views/cms/sites/sessions/new.html.erb +2 -0
- data/app/views/cms/tags/_form.html.erb +1 -0
- data/app/views/cms/tags/render.html.erb +52 -0
- data/app/views/cms/tasks/new.html.erb +22 -0
- data/app/views/cms/toolbar/_new_pages_menu.html.erb +10 -0
- data/app/views/cms/users/_form.html.erb +9 -0
- data/app/views/cms/users/_password.html.erb +2 -0
- data/app/views/cms/users/_user_fields.html.erb +7 -0
- data/app/views/cms/users/change_password.html.erb +12 -0
- data/app/views/cms/users/edit.html.erb +2 -0
- data/app/views/cms/users/index.html.erb +65 -0
- data/app/views/cms/users/new.html.erb +2 -0
- data/app/views/devise/confirmations/new.html.erb +16 -0
- data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/devise/passwords/edit.html.erb +19 -0
- data/app/views/devise/passwords/new.html.erb +15 -0
- data/app/views/devise/registrations/edit.html.erb +28 -0
- data/app/views/devise/registrations/new.html.erb +18 -0
- data/app/views/devise/shared/_links.erb +25 -0
- data/app/views/devise/unlocks/new.html.erb +16 -0
- data/app/views/layouts/cms/_content_types.html.erb +13 -0
- data/app/views/layouts/cms/_footer.erb +4 -0
- data/app/views/layouts/cms/_head.html.erb +8 -0
- data/app/views/layouts/cms/_main_menu.html.erb +78 -0
- data/app/views/layouts/cms/application.html.erb +23 -0
- data/app/views/layouts/cms/content_page.html.erb +5 -0
- data/app/views/layouts/cms/page_editor.html.erb +90 -0
- data/app/views/portlets/deprecated_placeholders/_form.html.erb +1 -0
- data/app/views/portlets/deprecated_placeholders/render.html.erb +8 -0
- data/app/views/portlets/dynamic/_form.html.erb +3 -0
- data/app/views/portlets/email_page/_form.html.erb +5 -0
- data/app/views/portlets/email_page/render.html.erb +17 -0
- data/app/views/portlets/forgot_password/_form.html.erb +5 -0
- data/app/views/portlets/forgot_password/render.html.erb +2 -0
- data/app/views/portlets/list/_form.html.erb +33 -0
- data/app/views/portlets/list/_list.html.erb +6 -0
- data/app/views/portlets/list/_table.html.erb +13 -0
- data/app/views/portlets/list/render.html.erb +1 -0
- data/app/views/portlets/login/_form.html.erb +4 -0
- data/app/views/portlets/login/render.html.erb +10 -0
- data/app/views/portlets/portlets/_form.html.erb +20 -0
- data/app/views/portlets/tag_cloud/_form.html.erb +4 -0
- data/app/views/portlets/tag_cloud/render.html.erb +5 -0
- data/app/views/tests/pretend/open_with_layout.html.erb +5 -0
- data/bin/bcms +321 -0
- data/bin/browsercms +4 -0
- data/bin/rake +16 -0
- data/config/routes.rb +135 -0
- data/db/browsercms.seeds.rb +63 -0
- data/db/migrate/20080815014337_browsercms300.rb +287 -0
- data/db/migrate/20130327184912_browsercms400.rb +120 -0
- data/db/migrate/20150715173336_create_default_users.rb +12 -0
- data/db/seeds.rb +1 -0
- data/doc/README_FOR_APP +6 -0
- data/doc/design/blue_button.psd +0 -0
- data/doc/design/gray_box.psd +0 -0
- data/doc/design/main_nav.psd +0 -0
- data/doc/features/design_integration.md +45 -0
- data/doc/features/external_user.md +7 -0
- data/doc/features/form_builder.md +40 -0
- data/doc/features/simple_form_refactor.md +60 -0
- data/doc/performance_tuning_notes.md +12 -0
- data/doc/release_notes.md +837 -0
- data/doc/test_procedure.txt +141 -0
- data/lib/acts_as_list.rb +257 -0
- data/lib/browsercms-artirix.rb +1 -0
- data/lib/browsercms.rb +73 -0
- data/lib/cms/acts/cms_user.rb +131 -0
- data/lib/cms/acts/content_block.rb +61 -0
- data/lib/cms/acts/content_page.rb +90 -0
- data/lib/cms/acts.rb +7 -0
- data/lib/cms/admin_tab.rb +15 -0
- data/lib/cms/attachments/attachment_serving.rb +59 -0
- data/lib/cms/attachments/configuration.rb +88 -0
- data/lib/cms/authentication/controller.rb +120 -0
- data/lib/cms/authentication/test_password_strategy.rb +28 -0
- data/lib/cms/authentication.rb +4 -0
- data/lib/cms/authoring.rb +9 -0
- data/lib/cms/behaviors/archiving.rb +43 -0
- data/lib/cms/behaviors/attaching.rb +363 -0
- data/lib/cms/behaviors/categorizing.rb +31 -0
- data/lib/cms/behaviors/connecting.rb +141 -0
- data/lib/cms/behaviors/dynamic_attributes.rb +384 -0
- data/lib/cms/behaviors/flush_cache_on_change.rb +31 -0
- data/lib/cms/behaviors/hiding.rb +46 -0
- data/lib/cms/behaviors/namespacing.rb +15 -0
- data/lib/cms/behaviors/naming.rb +16 -0
- data/lib/cms/behaviors/publishing.rb +205 -0
- data/lib/cms/behaviors/rendering.rb +195 -0
- data/lib/cms/behaviors/searching.rb +45 -0
- data/lib/cms/behaviors/soft_deleting.rb +103 -0
- data/lib/cms/behaviors/taggable.rb +66 -0
- data/lib/cms/behaviors/userstamping.rb +42 -0
- data/lib/cms/behaviors/versioning.rb +360 -0
- data/lib/cms/behaviors.rb +34 -0
- data/lib/cms/caching.rb +62 -0
- data/lib/cms/commands/actions.rb +107 -0
- data/lib/cms/commands/to_version400.rb +10 -0
- data/lib/cms/concerns/can_be_addressable.rb +326 -0
- data/lib/cms/concerns/has_content_type.rb +46 -0
- data/lib/cms/concerns/ignores_publishing.rb +9 -0
- data/lib/cms/concerns.rb +7 -0
- data/lib/cms/configuration/configurable_template.rb +24 -0
- data/lib/cms/configuration/devise.rb +256 -0
- data/lib/cms/configuration.rb +79 -0
- data/lib/cms/configure_simple_form.rb +142 -0
- data/lib/cms/configure_simple_form_bootstrap.rb +58 -0
- data/lib/cms/content_filter.rb +18 -0
- data/lib/cms/content_page.rb +77 -0
- data/lib/cms/content_rendering_support.rb +114 -0
- data/lib/cms/controllers/admin_controller.rb +78 -0
- data/lib/cms/data_loader.rb +54 -0
- data/lib/cms/date_picker.rb +23 -0
- data/lib/cms/default_accessible.rb +13 -0
- data/lib/cms/domain_support.rb +38 -0
- data/lib/cms/engine.rb +135 -0
- data/lib/cms/engine_helper.rb +103 -0
- data/lib/cms/error_handling.rb +84 -0
- data/lib/cms/error_pages.rb +8 -0
- data/lib/cms/extensions/action_view/base.rb +13 -0
- data/lib/cms/extensions/active_model/name.rb +13 -0
- data/lib/cms/extensions/active_record/base.rb +37 -0
- data/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb +94 -0
- data/lib/cms/extensions/active_record/errors.rb +12 -0
- data/lib/cms/extensions/active_support/cache/file_store.rb +9 -0
- data/lib/cms/extensions/hash.rb +11 -0
- data/lib/cms/extensions/integer.rb +16 -0
- data/lib/cms/extensions/nil.rb +19 -0
- data/lib/cms/extensions/string.rb +24 -0
- data/lib/cms/extensions.rb +5 -0
- data/lib/cms/form_builder/content_block_form_builder.rb +45 -0
- data/lib/cms/form_builder/default_input.rb +13 -0
- data/lib/cms/form_builder/deprecated_inputs.rb +40 -0
- data/lib/cms/form_builder/workflow_buttons.rb +38 -0
- data/lib/cms/installation_actions.rb +8 -0
- data/lib/cms/mobile_aware.rb +67 -0
- data/lib/cms/module.rb +36 -0
- data/lib/cms/module_installation.rb +31 -0
- data/lib/cms/polymorphic_single_table_inheritance.rb +19 -0
- data/lib/cms/publish_workflow.rb +26 -0
- data/lib/cms/responders/content_responder.rb +14 -0
- data/lib/cms/route_extensions.rb +157 -0
- data/lib/cms/users_service.rb +208 -0
- data/lib/cms/version.rb +11 -0
- data/lib/command_line.rb +39 -0
- data/lib/generators/browser_cms/demo_site/USAGE +3 -0
- data/lib/generators/browser_cms/demo_site/templates/demo.seeds.rb +249 -0
- data/lib/generators/browser_cms/demo_site/templates/demo_site.rake +14 -0
- data/lib/generators/browser_cms/demo_site/templates/logo.jpg +0 -0
- data/lib/generators/browser_cms/demo_site/templates/splash.jpg +0 -0
- data/lib/generators/browser_cms/demo_site/templates/style.css +257 -0
- data/lib/generators/browser_cms.rb +12 -0
- data/lib/generators/cms/content_block/USAGE +22 -0
- data/lib/generators/cms/content_block/content_block_generator.rb +103 -0
- data/lib/generators/cms/content_block/templates/_form.html.erb +27 -0
- data/lib/generators/cms/content_block/templates/application_controller.rb.erb +4 -0
- data/lib/generators/cms/content_block/templates/render.html.erb +23 -0
- data/lib/generators/cms/install/USAGE +8 -0
- data/lib/generators/cms/install/install_generator.rb +16 -0
- data/lib/generators/cms/portlet/USAGE +26 -0
- data/lib/generators/cms/portlet/portlet_generator.rb +38 -0
- data/lib/generators/cms/portlet/templates/_form.html.erb +5 -0
- data/lib/generators/cms/portlet/templates/portlet.rb +12 -0
- data/lib/generators/cms/portlet/templates/portlet_helper.rb +5 -0
- data/lib/generators/cms/portlet/templates/render.html.erb +1 -0
- data/lib/generators/cms/portlet/templates/unit_test.erb +9 -0
- data/lib/generators/cms/project/USAGE +1 -0
- data/lib/generators/cms/project/templates/COPYRIGHT.txt +23 -0
- data/lib/generators/cms/project/templates/GPL.txt +674 -0
- data/lib/generators/cms/project/templates/LICENSE.txt +165 -0
- data/lib/generators/cms/project/templates/USAGE +3 -0
- data/lib/generators/cms/project/templates/devise.rb.erb +7 -0
- data/lib/generators/cms/project/templates/gitignore.erb +11 -0
- data/lib/generators/cms/project/templates/install_generator.erb +21 -0
- data/lib/generators/cms/project/templates/module_tasks.rake +10 -0
- data/lib/generators/cms/template/USAGE +10 -0
- data/lib/generators/cms/template/template_generator.rb +29 -0
- data/lib/generators/cms/template/templates/template.erb +2 -0
- data/lib/sequence.rb +6 -0
- data/lib/tasks/cms.rake +23 -0
- data/lib/templates/active_record/model/model.rb +17 -0
- data/vendor/assets/javascripts/jquery.cookie.js +91 -0
- data/vendor/assets/javascripts/jquery.selectbox.js +209 -0
- metadata +1048 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
require 'active_record/errors'
|
|
2
|
+
|
|
3
|
+
# Used for some misc configuration around the project.
|
|
4
|
+
module Cms
|
|
5
|
+
|
|
6
|
+
class << self
|
|
7
|
+
|
|
8
|
+
attr_accessor :attachment_file_permission
|
|
9
|
+
|
|
10
|
+
# Determines which WYSIWYG editor is the 'default' for a BrowserCMS project
|
|
11
|
+
#
|
|
12
|
+
# bcms modules can changes this by overriding it in their configuration.
|
|
13
|
+
# @return [String] The single javascript file to include to load the proper WYSIWYG editor.
|
|
14
|
+
def content_editor
|
|
15
|
+
# CKEditor is the default.
|
|
16
|
+
@wysiwig_editor ||= 'ckeditor'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def content_editor=(editor)
|
|
20
|
+
@wysiwig_editor = editor
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def markdown?
|
|
24
|
+
Object.const_defined?("Markdown")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def reserved_paths
|
|
28
|
+
@reserved_paths ||= ["/cms", "/cache"]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# User Class
|
|
32
|
+
attr_writer :user_class_name
|
|
33
|
+
def user_class_name
|
|
34
|
+
@user_class_name ||= 'Cms::User'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def user_class
|
|
38
|
+
user_class_name.to_s.constantize
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# User key
|
|
42
|
+
attr_writer :user_key_field
|
|
43
|
+
def user_key_field
|
|
44
|
+
@user_key_field ||= :login
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# User name field
|
|
48
|
+
attr_writer :user_name_field
|
|
49
|
+
def user_name_field
|
|
50
|
+
@user_name_field ||= :full_name
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
module Errors
|
|
56
|
+
class AccessDenied < StandardError
|
|
57
|
+
def initialize
|
|
58
|
+
super("Access Denied")
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Indicates no content block could be found.
|
|
63
|
+
class ContentNotFound < ActiveRecord::RecordNotFound
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Indicates that no draft version of a given piece of content exists.
|
|
68
|
+
class DraftNotFound < ContentNotFound
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
Time::DATE_FORMATS.merge!(
|
|
75
|
+
:year_month_day => '%Y/%m/%d',
|
|
76
|
+
:date => '%m/%d/%Y'
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Use this setup block to configure all options available in SimpleForm.
|
|
2
|
+
SimpleForm.setup do |config|
|
|
3
|
+
# Wrappers are used by the form builder to generate a
|
|
4
|
+
# complete input. You can remove any component from the
|
|
5
|
+
# wrapper, change the order or even add your own to the
|
|
6
|
+
# stack. The options given below are used to wrap the
|
|
7
|
+
# whole input.
|
|
8
|
+
config.wrappers :default, class: :input,
|
|
9
|
+
hint_class: :field_with_hint, error_class: :field_with_errors do |b|
|
|
10
|
+
## Extensions enabled by default
|
|
11
|
+
# Any of these extensions can be disabled for a
|
|
12
|
+
# given input by passing: `f.input EXTENSION_NAME => false`.
|
|
13
|
+
# You can make any of these extensions optional by
|
|
14
|
+
# renaming `b.use` to `b.optional`.
|
|
15
|
+
|
|
16
|
+
# Determines whether to use HTML5 (:email, :url, ...)
|
|
17
|
+
# and required attributes
|
|
18
|
+
b.use :html5
|
|
19
|
+
|
|
20
|
+
# Calculates placeholders automatically from I18n
|
|
21
|
+
# You can also pass a string as f.input placeholder: "Placeholder"
|
|
22
|
+
b.use :placeholder
|
|
23
|
+
|
|
24
|
+
## Optional extensions
|
|
25
|
+
# They are disabled unless you pass `f.input EXTENSION_NAME => :lookup`
|
|
26
|
+
# to the input. If so, they will retrieve the values from the model
|
|
27
|
+
# if any exists. If you want to enable the lookup for any of those
|
|
28
|
+
# extensions by default, you can change `b.optional` to `b.use`.
|
|
29
|
+
|
|
30
|
+
# Calculates maxlength from length validations for string inputs
|
|
31
|
+
b.optional :maxlength
|
|
32
|
+
|
|
33
|
+
# Calculates pattern from format validations for string inputs
|
|
34
|
+
b.optional :pattern
|
|
35
|
+
|
|
36
|
+
# Calculates min and max from length validations for numeric inputs
|
|
37
|
+
b.optional :min_max
|
|
38
|
+
|
|
39
|
+
# Calculates readonly automatically from readonly attributes
|
|
40
|
+
b.optional :readonly
|
|
41
|
+
|
|
42
|
+
## Inputs
|
|
43
|
+
b.use :label_input
|
|
44
|
+
b.use :hint, wrap_with: { tag: :span, class: :hint }
|
|
45
|
+
b.use :error, wrap_with: { tag: :span, class: :error }
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# The default wrapper to be used by the FormBuilder.
|
|
49
|
+
config.default_wrapper = :default
|
|
50
|
+
|
|
51
|
+
# Define the way to render check boxes / radio buttons with labels.
|
|
52
|
+
# Defaults to :nested for bootstrap config.
|
|
53
|
+
# inline: input + label
|
|
54
|
+
# nested: label > input
|
|
55
|
+
config.boolean_style = :nested
|
|
56
|
+
|
|
57
|
+
# Default class for buttons
|
|
58
|
+
config.button_class = 'btn'
|
|
59
|
+
|
|
60
|
+
# Method used to tidy up errors. Specify any Rails Array method.
|
|
61
|
+
# :first lists the first message for each field.
|
|
62
|
+
# Use :to_sentence to list all errors for each field.
|
|
63
|
+
# config.error_method = :first
|
|
64
|
+
|
|
65
|
+
# Default tag used for error notification helper.
|
|
66
|
+
config.error_notification_tag = :div
|
|
67
|
+
|
|
68
|
+
# CSS class to add for error notification helper.
|
|
69
|
+
config.error_notification_class = 'alert alert-error'
|
|
70
|
+
|
|
71
|
+
# ID to add for error notification helper.
|
|
72
|
+
# config.error_notification_id = nil
|
|
73
|
+
|
|
74
|
+
# Series of attempts to detect a default label method for collection.
|
|
75
|
+
# config.collection_label_methods = [ :to_label, :name, :title, :to_s ]
|
|
76
|
+
|
|
77
|
+
# Series of attempts to detect a default value method for collection.
|
|
78
|
+
# config.collection_value_methods = [ :id, :to_s ]
|
|
79
|
+
|
|
80
|
+
# You can wrap a collection of radio/check boxes in a pre-defined tag, defaulting to none.
|
|
81
|
+
# config.collection_wrapper_tag = nil
|
|
82
|
+
|
|
83
|
+
# You can define the class to use on all collection wrappers. Defaulting to none.
|
|
84
|
+
# config.collection_wrapper_class = nil
|
|
85
|
+
|
|
86
|
+
# You can wrap each item in a collection of radio/check boxes with a tag,
|
|
87
|
+
# defaulting to :span. Please note that when using :boolean_style = :nested,
|
|
88
|
+
# SimpleForm will force this option to be a label.
|
|
89
|
+
# config.item_wrapper_tag = :span
|
|
90
|
+
|
|
91
|
+
# You can define a class to use in all item wrappers. Defaulting to none.
|
|
92
|
+
# config.item_wrapper_class = nil
|
|
93
|
+
|
|
94
|
+
# How the label text should be generated altogether with the required text.
|
|
95
|
+
# config.label_text = lambda { |label, required| "#{required} #{label}" }
|
|
96
|
+
|
|
97
|
+
# You can define the class to use on all labels. Default is nil.
|
|
98
|
+
config.label_class = 'control-label'
|
|
99
|
+
|
|
100
|
+
# You can define the class to use on all forms. Default is simple_form.
|
|
101
|
+
# config.form_class = :simple_form
|
|
102
|
+
|
|
103
|
+
# You can define which elements should obtain additional classes
|
|
104
|
+
# config.generate_additional_classes_for = [:wrapper, :label, :input]
|
|
105
|
+
|
|
106
|
+
# Whether attributes are required by default (or not). Default is true.
|
|
107
|
+
# config.required_by_default = true
|
|
108
|
+
|
|
109
|
+
# Tell browsers whether to use the native HTML5 validations (novalidate form option).
|
|
110
|
+
# These validations are enabled in SimpleForm's internal config but disabled by default
|
|
111
|
+
# in this configuration, which is recommended due to some quirks from different browsers.
|
|
112
|
+
# To stop SimpleForm from generating the novalidate option, enabling the HTML5 validations,
|
|
113
|
+
# change this configuration to true.
|
|
114
|
+
config.browser_validations = false
|
|
115
|
+
|
|
116
|
+
# Collection of methods to detect if a file type was given.
|
|
117
|
+
# config.file_methods = [ :mounted_as, :file?, :public_filename ]
|
|
118
|
+
|
|
119
|
+
# Custom mappings for input types. This should be a hash containing a regexp
|
|
120
|
+
# to match as key, and the input type that will be used when the field name
|
|
121
|
+
# matches the regexp as value.
|
|
122
|
+
# config.input_mappings = { /count/ => :integer }
|
|
123
|
+
|
|
124
|
+
# Custom wrappers for input types. This should be a hash containing an input
|
|
125
|
+
# type as key and the wrapper that will be used for all inputs with specified type.
|
|
126
|
+
# config.wrapper_mappings = { string: :prepend }
|
|
127
|
+
|
|
128
|
+
# Default priority for time_zone inputs.
|
|
129
|
+
# config.time_zone_priority = nil
|
|
130
|
+
|
|
131
|
+
# Default priority for country inputs.
|
|
132
|
+
# config.country_priority = nil
|
|
133
|
+
|
|
134
|
+
# When false, do not use translations for labels.
|
|
135
|
+
# config.translate_labels = true
|
|
136
|
+
|
|
137
|
+
# Automatically discover new inputs in Rails' autoload path.
|
|
138
|
+
# config.inputs_discovery = true
|
|
139
|
+
|
|
140
|
+
# Cache SimpleForm inputs discovery
|
|
141
|
+
# config.cache_discovery = !Rails.env.development?
|
|
142
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Use this setup block to configure all options available in SimpleForm.
|
|
2
|
+
SimpleForm.setup do |config|
|
|
3
|
+
config.wrappers :bootstrap, tag: 'div', class: 'control-group row-fluid', error_class: 'error' do |b|
|
|
4
|
+
b.use :html5
|
|
5
|
+
b.use :placeholder
|
|
6
|
+
b.use :label
|
|
7
|
+
b.use :input
|
|
8
|
+
b.use :error, wrap_with: {tag: 'span', class: 'help-inline'}
|
|
9
|
+
b.use :hint, wrap_with: {tag: 'p', class: 'help-block'}
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
config.wrappers :browsercms, tag: 'div', class: 'control-group row-fluid', error_class: 'error' do |b|
|
|
13
|
+
b.use :html5
|
|
14
|
+
b.use :placeholder
|
|
15
|
+
b.use :label
|
|
16
|
+
b.use :input
|
|
17
|
+
b.use :error, wrap_with: {tag: 'span', class: 'help-inline'}
|
|
18
|
+
b.use :hint, wrap_with: {tag: 'p', class: 'help-block'}
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
config.wrappers :checkbox, :tag => 'div', :class => 'control-group row-fluid', :error_class => 'error' do |b|
|
|
22
|
+
b.use :html5
|
|
23
|
+
b.use :placeholder
|
|
24
|
+
b.use :label_input
|
|
25
|
+
b.use :hint, :wrap_with => {:tag => 'span', :class => 'help-block'}
|
|
26
|
+
b.use :error, :wrap_with => {:tag => 'span', :class => 'help-inline'}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
config.wrapper_mappings = { :boolean => :checkbox }
|
|
30
|
+
|
|
31
|
+
config.wrappers :prepend, tag: 'div', class: "control-group", error_class: 'error' do |b|
|
|
32
|
+
b.use :html5
|
|
33
|
+
b.use :placeholder
|
|
34
|
+
b.use :label
|
|
35
|
+
b.wrapper tag: 'div', class: 'input-prepend' do |prepend|
|
|
36
|
+
prepend.use :input
|
|
37
|
+
end
|
|
38
|
+
b.use :hint, wrap_with: {tag: 'span', class: 'help-block'}
|
|
39
|
+
b.use :error, wrap_with: {tag: 'span', class: 'help-inline'}
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
config.wrappers :append, tag: 'div', class: "control-group", error_class: 'error' do |b|
|
|
43
|
+
b.use :html5
|
|
44
|
+
b.use :placeholder
|
|
45
|
+
b.use :label
|
|
46
|
+
b.wrapper tag: 'div', class: 'input-append' do |append|
|
|
47
|
+
append.use :input
|
|
48
|
+
end
|
|
49
|
+
b.use :hint, wrap_with: {tag: 'span', class: 'help-block'}
|
|
50
|
+
b.use :error, wrap_with: {tag: 'span', class: 'help-inline'}
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Wrappers for forms and inputs using the Twitter Bootstrap toolkit.
|
|
54
|
+
# Check the Bootstrap docs (http://twitter.github.com/bootstrap)
|
|
55
|
+
# to learn about the different styles for forms and inputs,
|
|
56
|
+
# buttons and other elements.
|
|
57
|
+
config.default_wrapper = :bootstrap
|
|
58
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
class ContentFilter
|
|
3
|
+
|
|
4
|
+
# Strips HTML from any attribute that's not :content
|
|
5
|
+
#
|
|
6
|
+
# Handles CKEditor's habit of adding opening/closing <p> tags to everything.
|
|
7
|
+
# @TODO Have this inspect the underlying model to determine the actual attribute.
|
|
8
|
+
def filter(content)
|
|
9
|
+
c = content.clone
|
|
10
|
+
c.keys.each do |key|
|
|
11
|
+
if(key != :content && key != "content")
|
|
12
|
+
c[key] = HTML::FullSanitizer.new.sanitize(c[key]).strip
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
c
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
|
|
3
|
+
# Add to controllers to allow them to behave like pages. A newer version of Acts::ContentPage
|
|
4
|
+
module ContentPage
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
included do
|
|
8
|
+
helper_method :cms_template
|
|
9
|
+
layout :determine_layout
|
|
10
|
+
class_attribute :template_name
|
|
11
|
+
class_attribute :template_options
|
|
12
|
+
|
|
13
|
+
include Cms::Authentication::Controller
|
|
14
|
+
include Cms::PageHelper
|
|
15
|
+
helper Cms::PageHelper
|
|
16
|
+
helper Cms::RenderingHelper
|
|
17
|
+
helper Cms::MenuHelper
|
|
18
|
+
include Cms::Configuration::ConfigurableTemplate
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
module ClassMethods
|
|
22
|
+
|
|
23
|
+
# Specify which CMS template should be used for this controller. Works similarly to ActionController::Base#layout.
|
|
24
|
+
# Will use the named template from the appropriate directory (typically app/views/layouts/templates)
|
|
25
|
+
#
|
|
26
|
+
# The default CMS layout will be used if no template is specified.
|
|
27
|
+
#
|
|
28
|
+
# @example
|
|
29
|
+
# template :subpage, only: [:new, :create]
|
|
30
|
+
# template :subpage, except: [:new, :create]
|
|
31
|
+
# template :subpage, only: [:new, :create]
|
|
32
|
+
#
|
|
33
|
+
# @param [Symbol] template_name Name of the template with no directory prefixes or file type. (i.e. subpage, homepage)
|
|
34
|
+
# @param [Hash] options (Optional)
|
|
35
|
+
# @option options [Array<Symbol>] :only The actions to apply the template to.
|
|
36
|
+
# @option options [Array<Symbol>] :exception The actions to not apply the template to.
|
|
37
|
+
def template(template_name, options={})
|
|
38
|
+
self.template_name = template_name.to_s
|
|
39
|
+
self.template_options = options
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Returns the page template that should be used to render this page.
|
|
45
|
+
def cms_template
|
|
46
|
+
"layouts/#{normalize_layout(self.class, self.class.template_name)}"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def content_page_layout
|
|
50
|
+
'cms/content_page'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
protected
|
|
54
|
+
|
|
55
|
+
def template_options
|
|
56
|
+
self.class.template_options
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def use_template?
|
|
60
|
+
if template_name.blank?
|
|
61
|
+
false
|
|
62
|
+
elsif template_options.empty?
|
|
63
|
+
true
|
|
64
|
+
elsif template_options[:only] && template_options[:only].include?(action_name.to_sym)
|
|
65
|
+
true
|
|
66
|
+
elsif template_options[:except] && !template_options[:except].include?(action_name.to_sym)
|
|
67
|
+
true
|
|
68
|
+
else
|
|
69
|
+
false
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def determine_layout
|
|
74
|
+
use_template? ? content_page_layout : 'cms/application'
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
require 'cms/error_handling'
|
|
2
|
+
#
|
|
3
|
+
# This module can be added to Controllers to provide support for rendering CMS content pages.
|
|
4
|
+
#
|
|
5
|
+
module Cms
|
|
6
|
+
module ContentRenderingSupport
|
|
7
|
+
|
|
8
|
+
def self.included(base)
|
|
9
|
+
base.send :include, Cms::ErrorHandling
|
|
10
|
+
base.rescue_from Exception, :with => :handle_server_error_on_page
|
|
11
|
+
base.rescue_from ActiveRecord::RecordNotFound, :with => :handle_not_found_on_page
|
|
12
|
+
base.rescue_from Cms::Errors::ContentNotFound, :with => :handle_not_found_on_page
|
|
13
|
+
base.rescue_from Cms::Errors::DraftNotFound, :with => :handle_draft_not_found
|
|
14
|
+
base.rescue_from Cms::Errors::AccessDenied, :with => :handle_access_denied_on_page
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def show_content_as_page(content)
|
|
19
|
+
@page = content # page templates expect a @page attribute
|
|
20
|
+
@content_block = content # render.html.erb's expect a @content_block attribute
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def handle_draft_not_found(exception)
|
|
24
|
+
logger.warn "Draft Content Not Found"
|
|
25
|
+
render(:layout => 'cms/application',
|
|
26
|
+
:template => 'cms/content/no_page',
|
|
27
|
+
:status => :not_found)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def handle_not_found_on_page(exception)
|
|
31
|
+
logger.warn "Resource not found: Returning the 404 page."
|
|
32
|
+
handle_error_with_cms_page(Cms::ErrorPages::NOT_FOUND_PATH, exception, :not_found)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def handle_access_denied_on_page(exception)
|
|
36
|
+
logger.warn "Access denied for user '#{current_user.login}': Returning the 403 page."
|
|
37
|
+
handle_error_with_cms_page(Cms::ErrorPages::FORBIDDEN_PATH, exception, :forbidden)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def handle_server_error_on_page(exception)
|
|
41
|
+
logger.error "An Unexpected exception occurred: #{exception.message}\n"
|
|
42
|
+
logger.error "#{exception.backtrace.join("\n")}\n"
|
|
43
|
+
handle_error_with_cms_page(Cms::ErrorPages::SERVER_ERROR_PATH, exception, :internal_server_error)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
|
|
48
|
+
# This is the method all error handlers delegate to
|
|
49
|
+
def handle_error_with_cms_page(error_page_path, exception, status, options={})
|
|
50
|
+
|
|
51
|
+
# If we are in the CMS, we just want to show the exception
|
|
52
|
+
if perform_caching
|
|
53
|
+
return handle_server_error(exception, status) if cms_site?
|
|
54
|
+
else
|
|
55
|
+
return handle_server_error(exception, status) if current_user.able_to?(:edit_content, :publish_content)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# We must be showing the page outside of the CMS
|
|
59
|
+
# So we will show the error page
|
|
60
|
+
if @page = Cms::Page.find_live_by_path(error_page_path)
|
|
61
|
+
logger.debug "Rendering Error Page: #{@page.inspect}"
|
|
62
|
+
@mode = "view"
|
|
63
|
+
@show_page_toolbar = false
|
|
64
|
+
|
|
65
|
+
# copy new instance variables to the template
|
|
66
|
+
%w[page mode show_page_toolbar].each do |v|
|
|
67
|
+
@template.instance_variable_set("@#{v}", instance_variable_get("@#{v}"))
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# clear out any content already captured
|
|
71
|
+
# by previous attempts to render the page within this request
|
|
72
|
+
@template.instance_variables.select { |v| v =~ /@content_for_/ }.each do |v|
|
|
73
|
+
@template.instance_variable_set("#{v}", nil)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
prepare_connectables_for_render
|
|
77
|
+
|
|
78
|
+
# The error pages are ALWAYS html since they are managed by the CMS as normal pages.
|
|
79
|
+
# So .gif or .jpg requests that throw errors will return html rather than a format warning.
|
|
80
|
+
render :layout => @page.layout, :template => 'cms/content/show', :status => status, :formats => [:html]
|
|
81
|
+
else
|
|
82
|
+
handle_server_error(exception, status)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# If any of the page's connectables (portlets, etc) are renderable, they may have a render method
|
|
87
|
+
# which does "controller" stuff, so we need to get that run before rendering the page.
|
|
88
|
+
def prepare_connectables_for_render
|
|
89
|
+
@_connectors = @page.current_connectors
|
|
90
|
+
@_connectables = @page.contents
|
|
91
|
+
|
|
92
|
+
unless (logged_in? && current_user.able_to?(:administrate, :edit_content, :publish_content))
|
|
93
|
+
worst_exception = nil
|
|
94
|
+
@_connectables.each do |c|
|
|
95
|
+
begin
|
|
96
|
+
c.prepare_to_render(self)
|
|
97
|
+
rescue
|
|
98
|
+
logger.debug "THROWN EXCEPTION by connectable #{c}: #{$!}"
|
|
99
|
+
case $!
|
|
100
|
+
when ActiveRecord::RecordNotFound
|
|
101
|
+
raise
|
|
102
|
+
when Cms::Errors::AccessDenied
|
|
103
|
+
worst_exception = $!
|
|
104
|
+
else
|
|
105
|
+
c.render_exception = $!
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
raise worst_exception if worst_exception
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
|
|
3
|
+
# Before for any controller that is considered an admin page within BrowserCMS.
|
|
4
|
+
module AdminController
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
included do
|
|
8
|
+
include Cms::Authentication::Controller
|
|
9
|
+
include Cms::ErrorHandling
|
|
10
|
+
include Cms::DomainSupport
|
|
11
|
+
|
|
12
|
+
helper Cms::ApplicationHelper
|
|
13
|
+
helper Cms::FormTagHelper
|
|
14
|
+
include Cms::PathHelper
|
|
15
|
+
helper Cms::PathHelper
|
|
16
|
+
include Cms::PageHelper
|
|
17
|
+
helper Cms::PageHelper
|
|
18
|
+
helper Cms::MenuHelper
|
|
19
|
+
helper Cms::RenderingHelper
|
|
20
|
+
helper Cms::UiElementsHelper
|
|
21
|
+
include Cms::NavMenuHelper
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
protected
|
|
26
|
+
def escape_javascript(javascript)
|
|
27
|
+
(javascript || '').gsub('\\', '\0\0').gsub('</', '<\/').gsub(/\r\n|\n|\r/, "\\n").gsub(/["']/) { |m| "\\#{m}" }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def redirect_to_first(*urls)
|
|
31
|
+
urls.each do |url|
|
|
32
|
+
unless url.blank?
|
|
33
|
+
return redirect_to(url)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def current_site
|
|
39
|
+
@current_site ||= Site.find_by_domain(request.host)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def redirect_to_cms_site
|
|
43
|
+
if using_cms_subdomains? && !request_is_for_cms_subdomain?
|
|
44
|
+
redirect_to(url_with_cms_domain_prefix)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def append_to_query_string(url, *params)
|
|
49
|
+
new_url = url["?"] ? url : "#{url}?"
|
|
50
|
+
new_url << params.map { |k, v| "#{k.to_s}=#{CGI::escape(v.to_s)}" }.join("&")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def cms_access_required
|
|
54
|
+
raise Cms::Errors::AccessDenied unless current_user.able_to?(:administrate, :edit_content, :publish_content)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def url_with_cms_domain_prefix
|
|
58
|
+
if cms_site?
|
|
59
|
+
request.url
|
|
60
|
+
elsif request.subdomains.first == "www"
|
|
61
|
+
request.url.sub(/www\./, "#{cms_domain_prefix}.")
|
|
62
|
+
else
|
|
63
|
+
request.url.sub(/:\/\//, "://#{cms_domain_prefix}.")
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def url_without_cms_domain_prefix
|
|
68
|
+
request.url.sub(/#{cms_domain_prefix}\./, '')
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def ensure_current_user_can_view(content)
|
|
72
|
+
unless current_user.able_to_view?(content)
|
|
73
|
+
store_location
|
|
74
|
+
raise Cms::Errors::AccessDenied
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
# A DSL for creating CMS content in seed data. Creating content in this manner will log the creation of the record
|
|
3
|
+
# and store any created records in a hash.
|
|
4
|
+
# To use, add the following to your seeds.rb.
|
|
5
|
+
# require "cms/data_loader"
|
|
6
|
+
#
|
|
7
|
+
# @example Create a Page in the root section
|
|
8
|
+
# create_page(:hello, name: "Hello", path: "/hello", parent: sections(:root))
|
|
9
|
+
#
|
|
10
|
+
# @example Lookup a previously created page
|
|
11
|
+
# puts pages(:hello).name
|
|
12
|
+
module DataLoader
|
|
13
|
+
|
|
14
|
+
mattr_accessor :silent_mode
|
|
15
|
+
|
|
16
|
+
def method_missing(method_name, *args)
|
|
17
|
+
if md = method_name.to_s.match(/^create_(.+)$/)
|
|
18
|
+
klass = model_class(md[1])
|
|
19
|
+
self.create(klass.name, args[0], args[1] || {})
|
|
20
|
+
elsif @data && @data.has_key?(method_name)
|
|
21
|
+
record = @data[method_name][args.first]
|
|
22
|
+
record ? record.class.find(record.id) : nil
|
|
23
|
+
else
|
|
24
|
+
super
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# We search the CMS namespace first.
|
|
29
|
+
# for things like DynamicPortlets "Cms::DynamicPortlet".constantize returns "DynamicPortlet"
|
|
30
|
+
def model_class(model_name)
|
|
31
|
+
klass = begin
|
|
32
|
+
"Cms/#{model_name}".classify.constantize
|
|
33
|
+
rescue NameError => e
|
|
34
|
+
model_name.classify.constantize
|
|
35
|
+
end
|
|
36
|
+
unless klass.method_defined?(:save!)
|
|
37
|
+
raise "Can't create an instance of #{klass} because its not an ActiveRecord instance."
|
|
38
|
+
end
|
|
39
|
+
klass
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def create(model_name, record_name, data={})
|
|
44
|
+
puts "-- create_#{model_name}(:#{record_name})" unless Cms::DataLoader.silent_mode
|
|
45
|
+
@data ||= {}
|
|
46
|
+
model_storage_name = model_name.demodulize.underscore.pluralize.to_sym
|
|
47
|
+
@data[model_storage_name] ||= {}
|
|
48
|
+
model = model_name.classify.constantize.new(data)
|
|
49
|
+
model.save!
|
|
50
|
+
@data[model_storage_name][record_name] = model
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
extend Cms::DataLoader
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
# Helper methods for centralizing Date handling for the CMS.
|
|
5
|
+
# Eventually, we will need a way to handle i18n formatting of dates, but I would also like to have US style dates
|
|
6
|
+
# for US locales (M/d/yy), but since Ruby 1.8.7 and 1.9.2 have different handling of Date.parse, that would take some
|
|
7
|
+
# monkeypatching.
|
|
8
|
+
#
|
|
9
|
+
class DatePicker
|
|
10
|
+
|
|
11
|
+
class << self
|
|
12
|
+
|
|
13
|
+
# Returns the date format that the JQuery selector will need to use.
|
|
14
|
+
def jquery_format
|
|
15
|
+
'yy/mm/dd'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def format_for_ui(date)
|
|
19
|
+
date ? date.strftime('%Y/%m/%d') : nil
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
module DefaultAccessible
|
|
3
|
+
|
|
4
|
+
def permitted_params
|
|
5
|
+
attribute_names.map{|string| string.to_sym} - non_permitted_params
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def non_permitted_params
|
|
9
|
+
[:id, :type, :created_by_id, :updated_by_id, :created_at, :updated_at]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
end
|