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,360 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
|
|
3
|
+
class IgnoreSanitizer
|
|
4
|
+
|
|
5
|
+
# Skip sanitizing attributes from mass assignment. This should be used sparingly, since it bypasses security.
|
|
6
|
+
# Ideally used for dynamically created classes (like ::Version or ::Attribute) where the attributes are not known at
|
|
7
|
+
# design time.
|
|
8
|
+
def sanitize(klass, attributes, authorizer)
|
|
9
|
+
attributes
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
module Behaviors
|
|
14
|
+
|
|
15
|
+
# Represents a record as of a specific version in the versions table.
|
|
16
|
+
module VersionRecord
|
|
17
|
+
|
|
18
|
+
# Create an original 'record' of the Versioned about as it existed as of this VersionRecord.
|
|
19
|
+
#
|
|
20
|
+
# @return [Object] i.e. HtmlBlock
|
|
21
|
+
def build_object_from_version()
|
|
22
|
+
obj = versioned_class.new
|
|
23
|
+
|
|
24
|
+
(versioned_class.versioned_columns + [:version, :created_at, :created_by_id, :updated_at, :updated_by_id]).each do |a|
|
|
25
|
+
obj.send("#{a}=", self.send(a))
|
|
26
|
+
end
|
|
27
|
+
obj.id = original_record_id
|
|
28
|
+
|
|
29
|
+
#obj.lock_version = lock_version
|
|
30
|
+
|
|
31
|
+
# Need to do this so associations can be loaded
|
|
32
|
+
obj.instance_variable_set("@persisted", true)
|
|
33
|
+
obj.instance_variable_set("@new_record", false)
|
|
34
|
+
|
|
35
|
+
# Callback to allow us to load other data when an older version is loaded
|
|
36
|
+
obj.after_as_of_version if obj.respond_to?(:after_as_of_version)
|
|
37
|
+
|
|
38
|
+
# Last but not least, clear the changed attributes
|
|
39
|
+
if changed_attrs = obj.send(:changed_attributes)
|
|
40
|
+
changed_attrs.clear
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
obj
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
# This behavior adds Versioning to an ActiveRecord object. It seriously monkeys with how objects are saved or updated.
|
|
47
|
+
#
|
|
48
|
+
# This implementation is pretty tied to Rails 3 ActiveRecord. Here's how I understand it works:
|
|
49
|
+
# ActiveRecord alias chain- Here is the order that methods get called.
|
|
50
|
+
#
|
|
51
|
+
# save
|
|
52
|
+
# save_with_transactions
|
|
53
|
+
# save_with_dirty
|
|
54
|
+
# save_with_validations
|
|
55
|
+
# AR::Base#save (save_without_validations)
|
|
56
|
+
# AR::Base#create_or_update_with_callbacks
|
|
57
|
+
#
|
|
58
|
+
#
|
|
59
|
+
# AR::Base - Defines a 'save' method with no params
|
|
60
|
+
# AR::Validations - alias save to a save_with_validations (which takes params)
|
|
61
|
+
# ActiveRecord Object has:
|
|
62
|
+
# - save_with_validations(options)
|
|
63
|
+
# - save_without_validation() - (Original save)
|
|
64
|
+
#
|
|
65
|
+
module Versioning
|
|
66
|
+
def self.included(model_class)
|
|
67
|
+
model_class.extend(MacroMethods)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
module MacroMethods
|
|
71
|
+
def versioned?
|
|
72
|
+
!!@is_versioned
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def is_versioned(options={})
|
|
76
|
+
@is_versioned = true
|
|
77
|
+
|
|
78
|
+
@version_table_name = (options[:version_table_name] || "#{table_name.singularize}_versions").to_s
|
|
79
|
+
|
|
80
|
+
extend ClassMethods
|
|
81
|
+
include InstanceMethods
|
|
82
|
+
|
|
83
|
+
has_many :versions, :class_name => version_class_name, :foreign_key => version_foreign_key
|
|
84
|
+
after_save :update_latest_version
|
|
85
|
+
|
|
86
|
+
before_validation :initialize_version
|
|
87
|
+
before_save :build_new_version
|
|
88
|
+
attr_accessor :skip_callbacks
|
|
89
|
+
|
|
90
|
+
#Define the version class
|
|
91
|
+
#puts "is_version called for #{self}"
|
|
92
|
+
const_set("Version", Class.new(ActiveRecord::Base)).class_eval do
|
|
93
|
+
class << self;
|
|
94
|
+
attr_accessor :versioned_class
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
include VersionRecord
|
|
98
|
+
#self.mass_assignment_sanitizer = Cms::IgnoreSanitizer.new
|
|
99
|
+
|
|
100
|
+
def versioned_class
|
|
101
|
+
self.class.versioned_class
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def versioned_object_id
|
|
105
|
+
send("#{versioned_class.name.underscore}_id")
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def versioned_object
|
|
109
|
+
send(versioned_class.name.underscore.to_sym)
|
|
110
|
+
end
|
|
111
|
+
end unless self.const_defined?("Version")
|
|
112
|
+
|
|
113
|
+
version_class.versioned_class = self
|
|
114
|
+
|
|
115
|
+
version_class.belongs_to(name.demodulize.underscore.to_sym, :foreign_key => version_foreign_key, :class_name => name)
|
|
116
|
+
|
|
117
|
+
version_class.is_userstamped if userstamped?
|
|
118
|
+
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
module ClassMethods
|
|
122
|
+
def version_class
|
|
123
|
+
const_get "Version"
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def version_class_name
|
|
127
|
+
"#{name}::Version"
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Probably no longer needs to be a method anymore, since all classes use the same column name.
|
|
131
|
+
def version_foreign_key
|
|
132
|
+
:original_record_id
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def version_table_name
|
|
136
|
+
@version_table_name
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def versioned_columns
|
|
140
|
+
@versioned_columns ||= (version_class.new.attributes.keys - non_versioned_columns)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def non_versioned_columns
|
|
144
|
+
(%w[ id lock_version position version_comment created_at updated_at created_by_id updated_by_id type original_record_id])
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
module InstanceMethods
|
|
148
|
+
def initialize_version
|
|
149
|
+
self.version = 1 if new_record?
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# Used in migrations and as a callback.
|
|
153
|
+
def update_latest_version
|
|
154
|
+
#Rails 3 could use update_column here instead
|
|
155
|
+
if respond_to? :latest_version
|
|
156
|
+
sql = "UPDATE #{self.class.table_name} SET latest_version = #{draft.version} where id = #{self.id}"
|
|
157
|
+
self.class.connection.execute sql
|
|
158
|
+
self.latest_version = draft.version # So we don't need to #reload this object. Probably marks it as dirty though, which could have weird side effects.
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def build_new_version_and_add_to_versions_list_for_saving
|
|
163
|
+
# First get the values from the draft
|
|
164
|
+
attrs = draft_attributes
|
|
165
|
+
|
|
166
|
+
# Now overwrite all values
|
|
167
|
+
(self.class.versioned_columns - %w( version )).each do |col|
|
|
168
|
+
attrs[col] = send(col)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
attrs[:version_comment] = @version_comment || default_version_comment
|
|
172
|
+
@version_comment = nil
|
|
173
|
+
#puts "Im a '#{self.class}', vc = #{self.class.version_class}"
|
|
174
|
+
new_version = versions.build(attrs)
|
|
175
|
+
new_version.version = new_record? ? 1 : (draft.version.to_i + 1)
|
|
176
|
+
after_build_new_version(new_version) if respond_to?(:after_build_new_version)
|
|
177
|
+
new_version
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def draft_attributes
|
|
181
|
+
# When there is no draft, we'll just copy the attributes from this object
|
|
182
|
+
# Otherwise we need to use the draft
|
|
183
|
+
d = new_record? ? self : draft
|
|
184
|
+
self.class.versioned_columns.inject({}) { |attrs, col| attrs[col] = d.send(col); attrs }
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def default_version_comment
|
|
188
|
+
if new_record?
|
|
189
|
+
"Created"
|
|
190
|
+
else
|
|
191
|
+
"Changed #{(changes.keys - %w[ version created_by_id updated_by_id ]).sort.join(', ')}"
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
#
|
|
196
|
+
#ActiveRecord 3.0.0 call chain
|
|
197
|
+
# ActiveRecord 3 now uses basic inheritence rather than alias_method_chain. The order in which ActiveRecord::Base
|
|
198
|
+
# includes methods (at the bottom of activerecord) repeatedly overrides save/save! with chains of 'super'
|
|
199
|
+
#
|
|
200
|
+
# Callstack order as observed
|
|
201
|
+
# 1. ActiveRecord::Base#save - The original method called by client
|
|
202
|
+
#
|
|
203
|
+
# AR::Transactions#save
|
|
204
|
+
# AR::Dirty#save
|
|
205
|
+
# AR::Validations#save
|
|
206
|
+
# ActiveRecord::Persistence#save
|
|
207
|
+
# ActiveRecord::Persistence#create_or_update
|
|
208
|
+
# AR::Callbacks#create_or_update (runs :save callbacks)
|
|
209
|
+
#
|
|
210
|
+
#
|
|
211
|
+
#
|
|
212
|
+
# This aliases the original ActiveRecord::Base.save method, in order to change
|
|
213
|
+
# how calling save works. It should do the following things:
|
|
214
|
+
#
|
|
215
|
+
# 1. If the record is unchanged, no save is performed, but true is returned. (Skipping after_save callbacks)
|
|
216
|
+
# 2. If its an update, a new version is created and that is saved.
|
|
217
|
+
# 3. If new record, its version is set to 1, and its published if needed.
|
|
218
|
+
def create_or_update
|
|
219
|
+
logger.debug { "#{self.class}#create_or_update called. Published = #{!!publish_on_save}" }
|
|
220
|
+
self.skip_callbacks = false
|
|
221
|
+
unless different_from_last_draft?
|
|
222
|
+
logger.debug { "No difference between this version and last. Skipping save" }
|
|
223
|
+
if !published && publish_on_save
|
|
224
|
+
logger.debug { "Publishing current draft version" }
|
|
225
|
+
return publish
|
|
226
|
+
else
|
|
227
|
+
self.skip_callbacks = true
|
|
228
|
+
return true
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
logger.debug { "Saving #{self.class} #{self.attributes}" }
|
|
232
|
+
if new_record?
|
|
233
|
+
self.version = 1
|
|
234
|
+
# This should call ActiveRecord::Callbacks#create_or_update, which will correctly trigger the :save callback_chain
|
|
235
|
+
saved_correctly = super
|
|
236
|
+
changed_attributes.clear
|
|
237
|
+
else
|
|
238
|
+
logger.debug { "#{self.class}#update" }
|
|
239
|
+
# Because we are 'skipping' the normal ActiveRecord update here, we must manually call the save callback chain.
|
|
240
|
+
run_callbacks :save do
|
|
241
|
+
saved_correctly = @new_version.save
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
publish_if_needed
|
|
245
|
+
return saved_correctly
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# Build a new version of this record and associate it with this record.
|
|
249
|
+
#
|
|
250
|
+
# Called as a before_create in order to correctly allow any other associations to be saved correctly.
|
|
251
|
+
# Called explicitly during update, where it will just define the new_version to be saved.
|
|
252
|
+
def build_new_version
|
|
253
|
+
@new_version = build_new_version_and_add_to_versions_list_for_saving
|
|
254
|
+
logger.debug { "New version of #{self.class}::Version is #{@new_version.attributes}" }
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
def save!(perform_validations=true)
|
|
258
|
+
save(:validate => perform_validations) || raise(ActiveRecord::RecordNotSaved.new(errors.full_messages))
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
# Returns the most recently created Version for this class. Drafts are the most recent change from
|
|
262
|
+
# the _versions table for a given content item.
|
|
263
|
+
# i.e. For Cms::Page, this would return Cms::Page::Version
|
|
264
|
+
#
|
|
265
|
+
# @return [<Class>::Version] The version for this class that represents the draft.
|
|
266
|
+
def draft
|
|
267
|
+
versions.order("version desc").first
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
def draft_version?
|
|
271
|
+
return true unless draft
|
|
272
|
+
version == draft.version
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
def live_version
|
|
276
|
+
find_version(self.class.find(id).version)
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def live_version?
|
|
280
|
+
version == self.class.find(id).version
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
def current_version
|
|
284
|
+
find_version(self.version)
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
def find_version(number)
|
|
288
|
+
versions.where(:version => number).first
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
def as_of_draft_version
|
|
292
|
+
draft.build_object_from_version
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
# Find a Content Block as of a specific version.
|
|
296
|
+
#
|
|
297
|
+
# @param [Integer] version The specific version of the block to look up
|
|
298
|
+
# @return [ContentBlock] The block as of the state it existed at 'version'.
|
|
299
|
+
def as_of_version(version)
|
|
300
|
+
v = find_version(version)
|
|
301
|
+
raise ActiveRecord::RecordNotFound.new("version #{version.inspect} does not exist for <#{self.class}:#{id}>") unless v
|
|
302
|
+
v.build_object_from_version
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def revert
|
|
306
|
+
draft_version = draft.version
|
|
307
|
+
revert_to(draft_version - 1) unless draft_version == 1
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
def revert_to_without_save(version, options)
|
|
311
|
+
raise "Version parameter missing" if version.blank?
|
|
312
|
+
revert_to_version = find_version(version)
|
|
313
|
+
raise "Could not find version #{version}" unless revert_to_version
|
|
314
|
+
self.before_revert(revert_to_version) if self.respond_to?(:before_revert)
|
|
315
|
+
|
|
316
|
+
(self.class.versioned_columns - ["version"]).each do |a|
|
|
317
|
+
send("#{a}=", revert_to_version.send(a))
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
options.keys.each do |key|
|
|
322
|
+
send("#{key}=", options[key])
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
self.after_revert(revert_to_version) if self.respond_to?(:after_revert)
|
|
326
|
+
self.version_comment = "Reverted to version #{version}"
|
|
327
|
+
self.publish_on_save = false
|
|
328
|
+
self
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
# @param [Integer] version To revert to
|
|
332
|
+
# @param [Hash] options Values to set prior to saving the updated record.
|
|
333
|
+
def revert_to(version, options={})
|
|
334
|
+
revert_to_without_save(version, options)
|
|
335
|
+
save
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
def version_comment
|
|
339
|
+
@version_comment
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
def version_comment=(version_comment)
|
|
343
|
+
@version_comment = version_comment
|
|
344
|
+
send(:changed_attributes)["version_comment"] = @version_comment
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
def different_from_last_draft?
|
|
348
|
+
return true if self.changed?
|
|
349
|
+
last_draft = self.draft
|
|
350
|
+
return true unless last_draft
|
|
351
|
+
(self.class.versioned_columns - %w( version )).each do |col|
|
|
352
|
+
return true if self.send(col) != last_draft.send(col)
|
|
353
|
+
end
|
|
354
|
+
false
|
|
355
|
+
end
|
|
356
|
+
end
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
end
|
|
360
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Behaviors are used in CMS to add features to a model.
|
|
2
|
+
# They are very similar to the various "acts_as_*" or "*_fu" plugins/gems
|
|
3
|
+
# that have been created for Rails.
|
|
4
|
+
#
|
|
5
|
+
# Generally, each behavior has three modules in it. They are:
|
|
6
|
+
# * MacroMethods
|
|
7
|
+
# * ClassMethods
|
|
8
|
+
# * InstanceMethods
|
|
9
|
+
#
|
|
10
|
+
# When the CMS starts up, all of the Behaviors are included into ActiveRecord::Base.
|
|
11
|
+
# The MacroMethods module of each Behavior is also included into ActiveRecord::Base.
|
|
12
|
+
# The MacroMethods module contains Class methods that you can call within your model
|
|
13
|
+
# in order to enable that Behavior for that Class. For example, if you want to have
|
|
14
|
+
# an Article module that is taggable, you would do this:
|
|
15
|
+
#
|
|
16
|
+
# class Article < ActiveRecord::Base
|
|
17
|
+
# is_taggable
|
|
18
|
+
# end
|
|
19
|
+
#
|
|
20
|
+
# So in this case, you are calling the `is_taggable` macro method, which enables the
|
|
21
|
+
# taggable behavior for the Article model. It enables the behavior by extending the
|
|
22
|
+
# ClassMethods module and including the InstanceMethods module into the Article class.
|
|
23
|
+
# Each Behavior typically has one macro method which takes an options Hash, which of course
|
|
24
|
+
# varies from Behavior to Behavior. The macro method will also sometimes call other
|
|
25
|
+
# macro methods, like before_fitler, scope, etc. to modify the model.
|
|
26
|
+
# Consult the documentation for each module for specific details as to what
|
|
27
|
+
# the Behavior does.
|
|
28
|
+
module Cms::Behaviors; end
|
|
29
|
+
|
|
30
|
+
Dir["#{File.dirname(__FILE__)}/behaviors/*.rb"].each do |b|
|
|
31
|
+
require File.join("cms", "behaviors", File.basename(b, ".rb"))
|
|
32
|
+
ActiveRecord::Base.send(:include, "Cms::Behaviors::#{File.basename(b, ".rb").camelize}".constantize)
|
|
33
|
+
end
|
|
34
|
+
|
data/lib/cms/caching.rb
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
module DefaultCaches
|
|
3
|
+
# Returns the directory where BrowserCMS should write out it's Page cache files for the mobile version of the site.
|
|
4
|
+
# (Optionally) It can be configured in environment files via:
|
|
5
|
+
# config.cms.mobile_cache_directory = File.join(Rails.root, 'some', 'mobile_dir')
|
|
6
|
+
def mobile_cache_directory
|
|
7
|
+
Rails.application.config.cms.mobile_cache_directory
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Returns the directory where BrowserCMS should write out it's Page cache files for the full version of the site.
|
|
11
|
+
# This should be exactly the same as where a typical CMS project stores it's files.
|
|
12
|
+
# (Optionally) It can be configured in environment files via:
|
|
13
|
+
# config.cms.page_cache_directory = File.join(Rails.root, 'some', 'dir')
|
|
14
|
+
def cms_cache_directory
|
|
15
|
+
Rails.application.config.cms.page_cache_directory
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
module Caching
|
|
21
|
+
include DefaultCaches
|
|
22
|
+
# Determine if page caching in enabled.
|
|
23
|
+
def caching_enabled?
|
|
24
|
+
ActionController::Base.perform_caching
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Flushes page cache if caching has been enabled.
|
|
28
|
+
def flush
|
|
29
|
+
if caching_enabled?
|
|
30
|
+
flush_caches
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def flush_caches
|
|
37
|
+
flush_cache_directory(cms_cache_directory)
|
|
38
|
+
flush_cache_directory(mobile_cache_directory)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def flush_cache_directory(cache)
|
|
42
|
+
if File.exists?(cache) && not_public_directory?(cache)
|
|
43
|
+
FileUtils.rm_rf Dir.glob("#{cache}/*")
|
|
44
|
+
Rails.logger.info "Flush cache in '#{cache}'"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
#Hmmm...this is kinda scary. What if page cache directory is
|
|
49
|
+
#set to the the default, which is /public?
|
|
50
|
+
#So we are going to check that the directory is not called "public"
|
|
51
|
+
def not_public_directory?(directory)
|
|
52
|
+
File.basename(directory) != "public"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
class Cache
|
|
58
|
+
class << self
|
|
59
|
+
include Caching
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
module Commands
|
|
3
|
+
module Actions
|
|
4
|
+
|
|
5
|
+
def self.included(klass)
|
|
6
|
+
klass.source_root(File.expand_path(File.join(__FILE__, '../../../generators/cms/project/templates')))
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def generate_installation_script
|
|
10
|
+
template 'install_generator.erb', "lib/generators/#{current_project}/install/install_generator.rb"
|
|
11
|
+
template 'USAGE', "lib/generators/#{current_project}/install/USAGE"
|
|
12
|
+
empty_directory "lib/generators/#{current_project}/install/templates"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def include_cms_module
|
|
16
|
+
inject_into_file "lib/#{current_project}/engine.rb", :after => "isolate_namespace #{module_class}\n" do
|
|
17
|
+
"\t\tinclude Cms::Module\n"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def current_project
|
|
22
|
+
@project_name || File.basename(Dir.pwd)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# i.e. BcmsWhatever
|
|
26
|
+
def module_class
|
|
27
|
+
current_project.camelize
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Runs `bundle install` inside the correct project directory (unless --skip_bundle was passed to the command)
|
|
31
|
+
def run_bundle_install
|
|
32
|
+
run "bundle install" unless options[:skip_bundle]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Run `bundle update`, exiting if it doesn't work.
|
|
36
|
+
def run_bundle_update
|
|
37
|
+
return if options[:skip_bundle]
|
|
38
|
+
inside current_project do
|
|
39
|
+
result = run "bundle update"
|
|
40
|
+
unless result
|
|
41
|
+
puts "Check your Gemfile to ensure the dependencies are correct. Update them, then rerun the last command.".red
|
|
42
|
+
exit(false)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
RAILS_GEMFILE_PATTERN = /gem ["|']rails["|'],/
|
|
49
|
+
|
|
50
|
+
def comment_out_rails_in_gemfile
|
|
51
|
+
gsub_file "Gemfile", RAILS_GEMFILE_PATTERN, "# gem 'rails',", :verbose => false
|
|
52
|
+
say_status :rails, "Commenting out Rails dependency."
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def update_browsercms_gem_version
|
|
56
|
+
gsub_file "Gemfile", /gem ["|']browsercms.*$/, "gem \"browsercms\", \"#{Cms::VERSION}\"", :verbose=>false
|
|
57
|
+
say_status :gemfile, "Update browsercms to v#{Cms::VERSION}"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def install_migrations
|
|
61
|
+
rake 'cms:install:migrations'
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def install_cms_seed_data
|
|
65
|
+
# Copy from Gem
|
|
66
|
+
copy_file File.expand_path(File.join(__FILE__, "../../../../db/browsercms.seeds.rb")), "db/browsercms.seeds.rb"
|
|
67
|
+
append_to_file('db/seeds.rb', "\nrequire File.expand_path('../browsercms.seeds.rb', __FILE__)\n")
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Adds a route as the last file of the project.
|
|
71
|
+
# Assumes we are inside the rails app.
|
|
72
|
+
def add_route_to_end(route)
|
|
73
|
+
inject_into_file 'config/routes.rb', "\n #{route}\n", {:before => /^end$/}
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Find the first migration within the current project given a partial name:
|
|
77
|
+
# i.e. create_turtles
|
|
78
|
+
# Might find 20120314204817_create_turtles.rb
|
|
79
|
+
#
|
|
80
|
+
# @param [String] name Partial file name. Don't include the .rb at the end
|
|
81
|
+
# @return [String] Full path to the file, so you can do file manipulation on it.
|
|
82
|
+
def migration_with_name(name)
|
|
83
|
+
file_pattern = "db/migrate/*#{name}.rb"
|
|
84
|
+
files = Dir.glob(file_pattern)
|
|
85
|
+
fail "Couldn't find a migration file matching this pattern (#{file_pattern})'" if files.empty?
|
|
86
|
+
File.absolute_path(files.first)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Returns a list of all models in the current project.
|
|
90
|
+
# @return [Array<String>] List of file names matching the models
|
|
91
|
+
def find_custom_blocks
|
|
92
|
+
file_pattern = "app/models/*.rb"
|
|
93
|
+
model_files = Dir.glob(file_pattern)
|
|
94
|
+
block_files = model_files.map do |f|
|
|
95
|
+
content = IO.read(f)
|
|
96
|
+
puts "Found\n#{content}"
|
|
97
|
+
if content.match(/acts_as_content_block/)
|
|
98
|
+
File.basename(f, ".rb")
|
|
99
|
+
else
|
|
100
|
+
nil
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
block_files.compact
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|