browsercms 3.5.7 → 4.0.0.alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/COPYRIGHT.txt +2 -1
- data/README.markdown +3 -3
- 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/arrow-down.png +0 -0
- data/app/assets/images/cms/arrow-up.png +0 -0
- data/app/assets/images/cms/cogs.png +0 -0
- data/app/assets/images/cms/dashboard/home.png +0 -0
- data/app/assets/images/cms/home.png +0 -0
- data/app/assets/images/cms/logo.png +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/user.png +0 -0
- data/app/assets/javascripts/bcms/ckeditor_inline.js +23 -0
- data/app/assets/javascripts/bcms/ckeditor_standard_config.js +1 -1
- 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 +6 -1
- data/app/assets/javascripts/cms/attachment_manager.js.erb +3 -10
- data/app/assets/javascripts/cms/content_library.js +31 -12
- data/app/assets/javascripts/cms/core_library.js.erb +68 -36
- 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 +188 -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 +17 -1
- 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 +37 -23
- data/app/assets/stylesheets/cms/_assets.css.scss +55 -0
- data/app/assets/stylesheets/cms/_base.css.scss +42 -0
- data/app/assets/stylesheets/cms/_cms-buttons.css.scss +73 -0
- data/app/assets/stylesheets/cms/_cms-forms.css.scss +70 -0
- data/app/assets/stylesheets/cms/_colors.css.scss +20 -0
- data/app/assets/stylesheets/cms/_dashboard.css.scss +25 -0
- data/app/assets/stylesheets/cms/_glyph.css.scss +60 -0
- data/app/assets/stylesheets/cms/_main-area.css.scss +62 -0
- data/app/assets/stylesheets/cms/_nav.css.scss +197 -0
- data/app/assets/stylesheets/cms/_sidebar.css.scss +64 -0
- data/app/assets/stylesheets/cms/_sitemap.css.scss +196 -0
- data/app/assets/stylesheets/cms/_submenu.css.scss +48 -0
- data/app/assets/stylesheets/cms/application.css.scss +49 -0
- data/app/assets/stylesheets/cms/core.css.scss +96 -0
- data/app/assets/stylesheets/cms/default-forms.css.scss +3 -0
- data/app/assets/stylesheets/cms/includes/_animation.css.scss +2 -0
- data/app/assets/stylesheets/cms/includes/_rem.css.scss +120 -0
- data/app/assets/stylesheets/cms/includes/animation/_animate.css.scss +31 -0
- data/app/assets/stylesheets/cms/includes/animation/_core.css.scss +127 -0
- data/app/assets/stylesheets/cms/includes/animation/_shared.css.scss +22 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_attention-seekers.css.scss +152 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_bouncing.css.scss +3 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_classes.css.scss +21 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_fading.css.scss +3 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_flippers.css.scss +87 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_lightspeed.css.scss +24 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_rotating.css.scss +3 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_specials.css.scss +42 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/bouncing/_bouncing-entrances.css.scss +68 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/bouncing/_bouncing-exits.css.scss +60 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/fading/_fading-entrances.css.scss +86 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/fading/_fading-exits.css.scss +86 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/rotating/_rotating-entrances.css.scss +58 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/rotating/_rotating-exits.css.scss +58 -0
- data/app/assets/stylesheets/cms/page_content_editing.css.scss +4 -0
- data/app/assets/stylesheets/cms/page_editor.css.scss +4 -0
- data/app/assets/stylesheets/cms/style.css.scss +138 -0
- data/app/assets/stylesheets/cms/styles/_alerts.css.scss +150 -0
- data/app/assets/stylesheets/cms/styles/_base-grid.css.scss +299 -0
- data/app/assets/stylesheets/cms/styles/_buttons.css.scss +247 -0
- data/app/assets/stylesheets/cms/styles/_dropdown.css.scss +155 -0
- data/app/assets/stylesheets/cms/styles/_forms.css.scss +728 -0
- data/app/assets/stylesheets/cms/styles/_glyph.css.scss +86 -0
- data/app/assets/stylesheets/cms/styles/_images.css.scss +75 -0
- data/app/assets/stylesheets/cms/styles/_lists.css.scss +115 -0
- data/app/assets/stylesheets/cms/styles/_modal.css.scss +174 -0
- data/app/assets/stylesheets/cms/styles/_progress.css.scss +43 -0
- data/app/assets/stylesheets/cms/styles/_tables.css.scss +141 -0
- data/app/assets/stylesheets/cms/styles/_text.css.scss +134 -0
- data/app/controllers/cms/application_controller.rb +3 -68
- data/app/controllers/cms/attachments_controller.rb +5 -5
- data/app/controllers/cms/base_controller.rb +20 -13
- data/app/controllers/cms/cache_controller.rb +16 -17
- data/app/controllers/cms/category_types_controller.rb +6 -1
- data/app/controllers/cms/connectors_controller.rb +12 -7
- data/app/controllers/cms/content_block_controller.rb +128 -71
- data/app/controllers/cms/content_controller.rb +54 -56
- data/app/controllers/cms/dashboard_controller.rb +5 -6
- data/app/controllers/cms/dynamic_views_controller.rb +12 -9
- data/app/controllers/cms/email_messages_controller.rb +18 -13
- data/app/controllers/cms/form_entries_controller.rb +119 -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 +13 -16
- data/app/controllers/cms/html_blocks_controller.rb +2 -2
- data/app/controllers/cms/inline_content_controller.rb +48 -0
- data/app/controllers/cms/links_controller.rb +58 -46
- data/app/controllers/cms/page_components_controller.rb +20 -0
- data/app/controllers/cms/page_routes_controller.rb +44 -40
- data/app/controllers/cms/pages_controller.rb +111 -97
- data/app/controllers/cms/passwords_controller.rb +17 -0
- data/app/controllers/cms/portlet_controller.rb +0 -1
- data/app/controllers/cms/portlets_controller.rb +20 -27
- data/app/controllers/cms/redirects_controller.rb +13 -9
- data/app/controllers/cms/resource_controller.rb +15 -4
- data/app/controllers/cms/routes_controller.rb +2 -4
- data/app/controllers/cms/section_nodes_controller.rb +6 -37
- data/app/controllers/cms/sections_controller.rb +13 -8
- data/app/controllers/cms/sessions_controller.rb +8 -66
- data/app/controllers/cms/sites/passwords_controller.rb +27 -0
- data/app/controllers/cms/sites/sessions_controller.rb +20 -0
- data/app/controllers/cms/tags_controller.rb +12 -12
- data/app/controllers/cms/tasks_controller.rb +45 -46
- data/app/controllers/cms/user_controller.rb +8 -0
- data/app/controllers/cms/users_controller.rb +91 -68
- data/app/helpers/cms/application_helper.rb +58 -52
- data/app/helpers/cms/content_block_helper.rb +8 -7
- data/app/helpers/cms/form_tag_helper.rb +21 -25
- data/app/helpers/cms/menu_helper.rb +1 -3
- data/app/helpers/cms/mobile_helper.rb +12 -2
- data/app/helpers/cms/nav_menu_helper.rb +23 -0
- data/app/helpers/cms/page_helper.rb +72 -30
- data/app/helpers/cms/path_helper.rb +46 -70
- data/app/helpers/cms/rendering_helper.rb +68 -12
- data/app/helpers/cms/section_nodes_helper.rb +92 -31
- 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 +1 -7
- data/app/helpers/cms/ui_elements_helper.rb +147 -6
- 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/cms_text_field_input.rb +29 -0
- data/app/inputs/date_picker_input.rb +8 -0
- data/app/inputs/file_picker_input.rb +75 -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 +10 -6
- data/app/models/cms/attachment.rb +20 -27
- data/app/models/cms/category.rb +17 -7
- data/app/models/cms/category_type.rb +8 -4
- data/app/models/cms/connector.rb +32 -20
- data/app/models/cms/content.rb +31 -0
- data/app/models/cms/content_type.rb +114 -62
- data/app/models/cms/dynamic_view.rb +19 -45
- data/app/models/cms/email_message.rb +32 -2
- data/app/models/cms/external_user.rb +60 -0
- data/app/models/cms/file_block.rb +1 -0
- data/app/models/cms/form.rb +47 -0
- data/app/models/cms/form_entry.rb +71 -0
- data/app/models/cms/form_field.rb +78 -0
- data/app/models/cms/group.rb +19 -9
- data/app/models/cms/group_permission.rb +1 -1
- data/app/models/cms/group_section.rb +1 -1
- data/app/models/cms/group_type.rb +5 -5
- data/app/models/cms/group_type_permission.rb +1 -1
- data/app/models/cms/html_block.rb +14 -19
- data/app/models/cms/image_block.rb +1 -0
- data/app/models/cms/link.rb +8 -6
- data/app/models/cms/page.rb +156 -59
- data/app/models/cms/page_component.rb +43 -0
- data/app/models/cms/page_partial.rb +16 -8
- data/app/models/cms/page_route.rb +1 -1
- data/app/models/cms/page_route_condition.rb +1 -1
- data/app/models/cms/page_route_option.rb +1 -1
- data/app/models/cms/page_route_requirement.rb +1 -1
- data/app/models/cms/page_template.rb +14 -9
- data/app/models/cms/permission.rb +4 -2
- data/app/models/cms/persistent_user.rb +208 -0
- data/app/models/cms/portlet.rb +56 -9
- data/app/models/cms/redirect.rb +1 -1
- data/app/models/cms/search_filter.rb +18 -0
- data/app/models/cms/section.rb +39 -28
- data/app/models/cms/section_node.rb +32 -5
- data/app/models/cms/site.rb +3 -3
- data/app/models/cms/tag.rb +14 -12
- data/app/models/cms/tagging.rb +2 -2
- data/app/models/cms/task.rb +14 -21
- data/app/models/cms/templates.rb +1 -2
- data/app/models/cms/user.rb +21 -160
- data/app/models/cms/user_group_membership.rb +2 -2
- data/app/portlets/deprecated_placeholder.rb +12 -0
- data/app/portlets/dynamic_portlet.rb +1 -1
- data/app/portlets/email_page_portlet.rb +10 -3
- data/app/portlets/forgot_password_portlet.rb +9 -28
- data/app/portlets/login_portlet.rb +8 -5
- data/app/portlets/tag_cloud_portlet.rb +3 -1
- data/app/presenters/cms/user_presenter.rb +24 -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/{shared → application}/_exception.html.erb +0 -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/{shared → application}/_version_conflict_diff.html.erb +0 -0
- data/app/views/cms/{shared → application}/_version_conflict_error.html.erb +0 -0
- data/app/views/cms/attachments/_attachment_manager.html.erb +22 -0
- data/app/views/cms/attachments/_no_attachments_defined.html.erb +1 -0
- data/app/views/cms/cache/show.html.erb +5 -10
- data/app/views/cms/categories/_form.html.erb +15 -24
- data/app/views/cms/category_types/_form.html.erb +1 -1
- data/app/views/cms/connectors/new.html.erb +33 -64
- data/app/views/cms/content/editing_frame.html.erb +1 -0
- data/app/views/cms/content/no_page.html.erb +9 -27
- data/app/views/cms/content/show.html.erb +14 -15
- 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 +35 -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/dashboard/_page_drafts.html.erb +12 -22
- data/app/views/cms/dashboard/_tasks.html.erb +32 -45
- data/app/views/cms/dashboard/index.html.erb +11 -13
- data/app/views/cms/dynamic_views/_form.html.erb +8 -10
- data/app/views/cms/dynamic_views/edit.html.erb +2 -3
- data/app/views/cms/dynamic_views/index.html.erb +22 -44
- data/app/views/cms/dynamic_views/new.html.erb +2 -3
- data/app/views/cms/email_messages/index.html.erb +31 -34
- data/app/views/cms/email_messages/show.html.erb +45 -52
- data/app/views/cms/file_blocks/_form.html.erb +2 -4
- 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 +4 -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 +66 -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 +32 -38
- data/app/views/cms/groups/_permissions.html.erb +11 -34
- data/app/views/cms/groups/_sections.html.erb +11 -17
- data/app/views/cms/groups/edit.html.erb +1 -3
- data/app/views/cms/groups/index.html.erb +10 -32
- data/app/views/cms/groups/new.html.erb +2 -4
- data/app/views/cms/html_blocks/_form.html.erb +2 -2
- data/app/views/cms/html_blocks/render.html.erb +1 -1
- data/app/views/cms/image_blocks/_form.html.erb +3 -3
- data/app/views/cms/links/_form.html.erb +6 -11
- data/app/views/cms/links/edit.html.erb +3 -12
- data/app/views/cms/links/new.html.erb +4 -13
- 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 +11 -10
- data/app/views/cms/page_routes/edit.html.erb +2 -3
- data/app/views/cms/page_routes/index.html.erb +25 -48
- data/app/views/cms/page_routes/new.html.erb +2 -3
- data/app/views/cms/pages/_edit_content.html.erb +28 -0
- data/app/views/cms/pages/_form.html.erb +20 -37
- 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 -23
- data/app/views/cms/pages/new.html.erb +2 -16
- data/app/views/cms/pages/versions.html.erb +18 -87
- data/app/views/cms/redirects/_form.html.erb +6 -14
- data/app/views/cms/redirects/edit.html.erb +2 -3
- data/app/views/cms/redirects/index.html.erb +24 -50
- data/app/views/cms/redirects/new.html.erb +2 -3
- data/app/views/cms/routes/index.html.erb +15 -20
- data/app/views/cms/section_nodes/_children.html.erb +3 -0
- data/app/views/cms/section_nodes/_row_buttons.html.erb +11 -0
- data/app/views/cms/section_nodes/_section_node.html.erb +24 -10
- 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 +22 -49
- data/app/views/cms/sections/edit.html.erb +3 -8
- data/app/views/cms/sections/new.html.erb +4 -20
- data/app/views/cms/sessions/new.html.erb +16 -31
- data/app/views/cms/shared/access_denied.html.erb +1 -2
- data/app/views/cms/shared/error.html.erb +5 -5
- 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 -1
- data/app/views/cms/tags/render.html.erb +0 -1
- data/app/views/cms/tasks/new.html.erb +18 -32
- data/app/views/cms/toolbar/_new_pages_menu.html.erb +10 -0
- data/app/views/cms/users/_form.html.erb +8 -11
- data/app/views/cms/users/_password.html.erb +2 -8
- data/app/views/cms/users/_user_fields.html.erb +7 -20
- data/app/views/cms/users/change_password.html.erb +12 -21
- data/app/views/cms/users/edit.html.erb +1 -15
- data/app/views/cms/users/index.html.erb +61 -58
- data/app/views/cms/users/new.html.erb +1 -12
- 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 +2 -2
- data/app/views/layouts/cms/_head.html.erb +8 -18
- data/app/views/layouts/cms/_main_menu.html.erb +78 -0
- data/app/views/layouts/cms/application.html.erb +19 -24
- 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 -3
- data/app/views/portlets/email_page/_form.html.erb +5 -6
- data/app/views/portlets/forgot_password/_form.html.erb +2 -3
- data/app/views/portlets/forgot_password/render.html.erb +2 -14
- data/app/views/portlets/login/_form.html.erb +4 -6
- data/app/views/portlets/login/render.html.erb +8 -27
- data/app/views/portlets/portlets/_form.html.erb +7 -6
- data/app/views/portlets/tag_cloud/_form.html.erb +4 -4
- data/app/views/tests/pretend/open_with_layout.html.erb +1 -1
- data/bin/bcms +13 -16
- data/config/routes.rb +58 -29
- data/db/browsercms.seeds.rb +0 -6
- data/db/migrate/{20080815014337_browsercms_3_0_0.rb → 20080815014337_browsercms300.rb} +94 -73
- data/db/migrate/20130327184912_browsercms400.rb +90 -0
- data/db/migrate/20131206214021_devise_create_users.rb +47 -0
- data/db/migrate/20131211223908_kill_reset_password.rb +5 -0
- data/db/migrate/20131218222005_create_cms_external_users.rb +10 -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/release_notes.md +224 -10
- data/lib/acts_as_list.rb +72 -71
- data/lib/browsercms.rb +41 -1
- data/lib/cms/acts/content_block.rb +12 -2
- data/lib/cms/acts/content_page.rb +3 -4
- data/lib/cms/admin_tab.rb +15 -0
- data/lib/cms/attachments/configuration.rb +1 -1
- data/lib/cms/authentication/controller.rb +83 -177
- data/lib/cms/authentication/test_password_strategy.rb +19 -0
- data/lib/cms/behaviors.rb +1 -0
- data/lib/cms/behaviors/archiving.rb +2 -2
- data/lib/cms/behaviors/attaching.rb +21 -45
- data/lib/cms/behaviors/connecting.rb +14 -4
- data/lib/cms/behaviors/dynamic_attributes.rb +3 -3
- data/lib/cms/behaviors/hiding.rb +2 -2
- data/lib/cms/behaviors/namespacing.rb +6 -36
- data/lib/cms/behaviors/publishing.rb +92 -45
- data/lib/cms/behaviors/rendering.rb +15 -7
- data/lib/cms/behaviors/searching.rb +5 -4
- data/lib/cms/behaviors/soft_deleting.rb +13 -16
- data/lib/cms/behaviors/taggable.rb +17 -10
- data/lib/cms/behaviors/versioning.rb +12 -16
- data/lib/cms/commands/to_version400.rb +10 -0
- data/lib/cms/concerns.rb +7 -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/configuration.rb +14 -4
- data/lib/cms/configuration/configurable_template.rb +24 -0
- data/lib/cms/configuration/devise.rb +256 -0
- data/lib/cms/configure_simple_form.rb +142 -0
- data/lib/cms/configure_simple_form_bootstrap.rb +49 -0
- data/lib/cms/content_filter.rb +18 -0
- data/lib/cms/content_page.rb +77 -0
- data/lib/cms/content_rendering_support.rb +25 -16
- data/lib/cms/controllers/admin_controller.rb +78 -0
- data/lib/cms/data_loader.rb +30 -11
- data/lib/cms/default_accessible.rb +6 -6
- data/lib/cms/domain_support.rb +0 -4
- data/lib/cms/engine.rb +52 -20
- data/lib/cms/engine_helper.rb +41 -51
- data/{app/controllers → lib}/cms/error_handling.rb +11 -5
- data/lib/cms/extensions.rb +2 -1
- data/lib/cms/extensions/active_model/name.rb +13 -0
- data/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb +49 -89
- data/lib/cms/extensions/hash.rb +0 -12
- 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/module.rb +1 -7
- 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 +112 -20
- data/lib/cms/version.rb +1 -1
- data/lib/generators/browser_cms/demo_site/templates/demo.seeds.rb +0 -2
- data/lib/generators/cms/content_block/content_block_generator.rb +19 -46
- data/lib/generators/cms/content_block/templates/_form.html.erb +22 -28
- data/lib/generators/cms/project/templates/devise.rb.erb +7 -0
- metadata +383 -150
- data/app/assets/javascripts/cms/sitemap.js.erb +0 -464
- data/app/assets/stylesheets/browsercms/application.css +0 -7
- data/app/assets/stylesheets/cms/administration.css.erb +0 -91
- data/app/assets/stylesheets/cms/application.css.erb +0 -171
- data/app/assets/stylesheets/cms/attachment_manager.css.scss +0 -28
- data/app/assets/stylesheets/cms/block.css +0 -26
- data/app/assets/stylesheets/cms/buttons.css.erb +0 -120
- data/app/assets/stylesheets/cms/content_library.css.erb +0 -139
- data/app/assets/stylesheets/cms/content_types.css +0 -4
- data/app/assets/stylesheets/cms/dashboard.css.erb +0 -118
- data/app/assets/stylesheets/cms/data_table.css.erb.erb +0 -156
- data/app/assets/stylesheets/cms/date_picker.css.erb +0 -82
- data/app/assets/stylesheets/cms/form_layout.css.erb +0 -282
- data/app/assets/stylesheets/cms/login.css.erb +0 -78
- data/app/assets/stylesheets/cms/menu.css.erb +0 -116
- data/app/assets/stylesheets/cms/nav.css.erb +0 -99
- data/app/assets/stylesheets/cms/page_toolbar.css.erb +0 -135
- data/app/assets/stylesheets/cms/reset.css +0 -46
- data/app/assets/stylesheets/cms/selectbox.css.erb +0 -56
- data/app/assets/stylesheets/cms/sitemap.css.erb +0 -390
- data/app/assets/stylesheets/cms/taglist.css +0 -18
- data/app/controllers/application_controller.rb +0 -14
- data/app/controllers/cms/content_types_controller.rb +0 -9
- data/app/helpers/application_helper.rb +0 -5
- data/app/helpers/cms/form_builder.rb +0 -241
- data/app/models/cms/content_type_group.rb +0 -15
- data/app/models/cms/forgot_password_mailer.rb +0 -14
- data/app/portlets/reset_password_portlet.rb +0 -28
- data/app/views/cms/blocks/_hidden_fields.html.erb +0 -10
- data/app/views/cms/blocks/_toolbar.html.erb +0 -9
- data/app/views/cms/blocks/_toolbar_for_collection.html.erb +0 -23
- data/app/views/cms/blocks/_toolbar_for_member.html.erb +0 -36
- data/app/views/cms/blocks/edit.html.erb +0 -28
- data/app/views/cms/blocks/index.html.erb +0 -86
- data/app/views/cms/blocks/new.html.erb +0 -19
- data/app/views/cms/blocks/show.html.erb +0 -43
- data/app/views/cms/blocks/usages.html.erb +0 -44
- data/app/views/cms/blocks/versions.html.erb +0 -90
- data/app/views/cms/content_types/index.html.erb +0 -14
- data/app/views/cms/form_builder/_cms_attachment_manager.html.erb +0 -27
- data/app/views/cms/form_builder/_cms_check_box.html.erb +0 -7
- data/app/views/cms/form_builder/_cms_date_picker.html.erb +0 -12
- data/app/views/cms/form_builder/_cms_datetime_select.html.erb +0 -12
- data/app/views/cms/form_builder/_cms_drop_down.html.erb +0 -12
- data/app/views/cms/form_builder/_cms_fancy_drop_down.html.erb +0 -9
- data/app/views/cms/form_builder/_cms_file_field.html.erb +0 -28
- data/app/views/cms/form_builder/_cms_instructions.html.erb +0 -4
- data/app/views/cms/form_builder/_cms_tag_list.html.erb +0 -15
- data/app/views/cms/form_builder/_cms_template_editor.html.erb +0 -9
- data/app/views/cms/form_builder/_cms_text_area.html.erb +0 -10
- data/app/views/cms/form_builder/_cms_text_editor.html.erb +0 -19
- data/app/views/cms/form_builder/_cms_text_field.html.erb +0 -12
- data/app/views/cms/links/destroy.js.rjs +0 -2
- data/app/views/cms/page_routes/show.html.erb +0 -10
- data/app/views/cms/pages/_edit_connector.html.erb +0 -19
- data/app/views/cms/pages/_edit_container.html.erb +0 -11
- data/app/views/cms/section_nodes/_link.html.erb +0 -14
- data/app/views/cms/section_nodes/_node.html.erb +0 -44
- data/app/views/cms/section_nodes/_page.html.erb +0 -20
- data/app/views/cms/section_nodes/_section.html.erb +0 -28
- data/app/views/cms/section_nodes/index.html.erb +0 -43
- data/app/views/cms/sections/_page.html.erb +0 -4
- data/app/views/cms/sections/_section.html.erb +0 -8
- data/app/views/cms/sections/destroy.js.rjs +0 -2
- data/app/views/cms/sections/index.html.erb +0 -23
- data/app/views/cms/shared/_admin_sidebar.html.erb +0 -36
- data/app/views/cms/shared/_pagination.html.erb +0 -31
- data/app/views/cms/toolbar/_mobile_toggle.html.erb +0 -33
- data/app/views/cms/toolbar/index.html.erb +0 -1
- data/app/views/cms/users/_groups.html.erb +0 -12
- data/app/views/cms/users/_toolbar.html.erb +0 -24
- data/app/views/cms/users/show.html.erb +0 -50
- data/app/views/layouts/_cms_toolbar.html.erb +0 -54
- data/app/views/layouts/_page_toolbar.html.erb +0 -119
- data/app/views/layouts/cms/administration.html.erb +0 -51
- data/app/views/layouts/cms/content_library.html.erb +0 -96
- data/app/views/layouts/cms/dashboard.html.erb +0 -16
- data/app/views/layouts/cms/login.html.erb +0 -31
- data/app/views/layouts/cms/section_nodes.html.erb +0 -20
- data/app/views/layouts/cms/toolbar.html.erb +0 -23
- data/app/views/portlets/reset_password/_form.html.erb +0 -3
- data/app/views/portlets/reset_password/render.html.erb +0 -22
- data/bin/bcms-upgrade +0 -332
- data/db/migrate/20091109175123_browsercms_3_0_5.rb +0 -9
- data/db/migrate/20100117144038_browsercms314.rb +0 -20
- data/db/migrate/20100117144039_browsercms315.rb +0 -95
- data/db/migrate/20100705083859_browsercms_3_3_0.rb +0 -56
- data/db/migrate/20111130221145_browsercms340.rb +0 -56
- data/db/migrate/20120329144406_browsercms350.rb +0 -32
- data/db/migrate/20120717182827_browsercms353.rb +0 -19
- data/db/migrate/20120813180110_browsercms354.rb +0 -9
- data/lib/cms/addressable.rb +0 -93
- data/lib/cms/authentication/model.rb +0 -116
- data/lib/cms/behaviors/pagination.rb +0 -212
- data/lib/cms/upgrades/v3_4_0.rb +0 -31
- data/lib/cms/upgrades/v3_5_0.rb +0 -227
|
@@ -5,22 +5,65 @@
|
|
|
5
5
|
module Cms
|
|
6
6
|
module RenderingHelper
|
|
7
7
|
|
|
8
|
+
def page_content_iframe(path)
|
|
9
|
+
content_tag "iframe", "" , src: path, id: 'page_content', frameborder: 0, width: '100%', height: '80%'
|
|
10
|
+
#<iframe id="page_content" src="<%= url_for engine_aware_path(@block, :inline) %>" frameborder="0" width="100%" height="80%"></iframe>
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
# Renders the content for the given field from the current content block.
|
|
14
|
+
# Designed to be used in Block Templates instead of direct output of fields.
|
|
15
|
+
# Example:
|
|
16
|
+
# <pre><%= show :content %></pre>
|
|
17
|
+
# Instead of:
|
|
18
|
+
# <pre><%= @content_block.content.html_safe %></pre>
|
|
19
|
+
#
|
|
20
|
+
# Why bother?: This abstracts the actual variable name (makes future upgrades more robust),
|
|
21
|
+
# as well as let us mark up the content with html_safe,
|
|
22
|
+
# plus conditionally make fields editable.
|
|
23
|
+
#
|
|
24
|
+
# @param [Symbol] method
|
|
25
|
+
# @param [Hash] options
|
|
26
|
+
def show(method, options={})
|
|
27
|
+
if (!is_current_user_able_to_edit_this_content?(@content_block)) # Need to check the current user can edit the page attached to this block too
|
|
28
|
+
value = @content_block.send(method)
|
|
29
|
+
value.respond_to?(:html_safe) ? value.html_safe : value
|
|
30
|
+
else
|
|
31
|
+
content_tag 'div',
|
|
32
|
+
id: random_unique_identifier(),
|
|
33
|
+
class: 'content-block',
|
|
34
|
+
contenteditable: true,
|
|
35
|
+
data: {
|
|
36
|
+
content_name: @content_block.content_name,
|
|
37
|
+
id: @content_block.id,
|
|
38
|
+
attribute: method,
|
|
39
|
+
page_id: @page.id
|
|
40
|
+
|
|
41
|
+
} do
|
|
42
|
+
content = @content_block.send(method)
|
|
43
|
+
content.to_s.html_safe
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
|
|
8
49
|
# Renders a table of attachments for a given content block.
|
|
9
50
|
# This is intended as a basic view of the content, and probably won't be suitable for blocks that need to be added directly to pages.
|
|
10
51
|
#
|
|
11
52
|
def attachment_viewer(content)
|
|
12
|
-
render :partial => 'cms/attachments/attachment_table', :locals => {
|
|
53
|
+
render :partial => 'cms/attachments/attachment_table', :locals => {:block => content, :can_delete => false}
|
|
13
54
|
end
|
|
14
55
|
|
|
15
|
-
# Determines if
|
|
16
|
-
def
|
|
17
|
-
logged_in? &&
|
|
56
|
+
# Determines if the current user can edit and is currently editing this content.
|
|
57
|
+
def is_current_user_able_to_edit_this_content?(content)
|
|
58
|
+
content && logged_in? && edit_mode? && current_user.able_to_edit?(content)
|
|
18
59
|
end
|
|
19
|
-
|
|
60
|
+
|
|
61
|
+
# @deprecated
|
|
62
|
+
alias :is_editing_page? :is_current_user_able_to_edit_this_content?
|
|
63
|
+
|
|
20
64
|
def render_connector_and_connectable(connector, connectable)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
render(:partial => 'cms/pages/edit_connector', :locals => { :connector => connector, :connectable => connectable})
|
|
65
|
+
if is_current_user_able_to_edit_this_content?(connector.page)
|
|
66
|
+
render(:partial => 'cms/pages/edit_content', :locals => {:connector => connector, :connectable => connectable})
|
|
24
67
|
else
|
|
25
68
|
render_connectable(connectable)
|
|
26
69
|
end
|
|
@@ -29,19 +72,24 @@ module Cms
|
|
|
29
72
|
def render_connectable(content_block)
|
|
30
73
|
if content_block
|
|
31
74
|
if content_block.class.renderable?
|
|
32
|
-
logger.debug "Rendering connectable #{content_block.class} ##{content_block.id} #{"v#{content_block.version}" if content_block.respond_to?(:version)}"
|
|
75
|
+
Rails.logger.debug "Rendering connectable #{content_block.class} ##{content_block.id} #{"v#{content_block.version}" if content_block.respond_to?(:version)}"
|
|
33
76
|
content_block.perform_render(controller)
|
|
34
77
|
else
|
|
35
|
-
logger.warn "Connectable #{content_block.class} ##{content_block.id} is not renderable"
|
|
78
|
+
Rails.logger.warn "Connectable #{content_block.class} ##{content_block.id} is not renderable"
|
|
36
79
|
end
|
|
37
80
|
else
|
|
38
|
-
logger.warn "Connectable is null"
|
|
81
|
+
Rails.logger.warn "Connectable is null"
|
|
39
82
|
end
|
|
40
83
|
rescue Exception => e
|
|
41
|
-
logger.error "Error occurred while rendering #{content_block.class}##{content_block.id}: #{e.message}\n#{e.backtrace.join("\n")}"
|
|
84
|
+
Rails.logger.error "Error occurred while rendering #{content_block.class}##{content_block.id}: #{e.message}\n#{e.backtrace.join("\n")}"
|
|
42
85
|
"ERROR: #{e.message}"
|
|
43
86
|
end
|
|
44
87
|
|
|
88
|
+
# Some content doesn't have inline editing, so we need to conditionally show move up/down/remove buttons on the page
|
|
89
|
+
def content_supports_inline_editing?(connector)
|
|
90
|
+
content = connector.connectable
|
|
91
|
+
content.supports_inline_editing?
|
|
92
|
+
end
|
|
45
93
|
##
|
|
46
94
|
# Renders the toolbar for the CMS. All page templates need to include this or they won't be editable.
|
|
47
95
|
# Typically rendered as an iframe to avoid CSS/JS conflicts.
|
|
@@ -51,5 +99,13 @@ module Cms
|
|
|
51
99
|
def render_cms_toolbar(tab=:dashboard)
|
|
52
100
|
render :partial => 'layouts/cms_toolbar', :locals => {:tab => tab}
|
|
53
101
|
end
|
|
102
|
+
|
|
103
|
+
private
|
|
104
|
+
|
|
105
|
+
# Each block needs a unique id on the page so CKeditor can attach to it. Doesn't matter what it is though.
|
|
106
|
+
# This ensure that if the same block is add twice, it will still work.
|
|
107
|
+
def random_unique_identifier
|
|
108
|
+
SecureRandom.urlsafe_base64
|
|
109
|
+
end
|
|
54
110
|
end
|
|
55
111
|
end
|
|
@@ -1,51 +1,112 @@
|
|
|
1
1
|
module Cms
|
|
2
2
|
module SectionNodesHelper
|
|
3
3
|
|
|
4
|
-
def
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
def draggable_class?(modifiable_sections, section_node, parent)
|
|
5
|
+
if !section_node.root? && current_user_can_modify(modifiable_sections, section_node, parent)
|
|
6
|
+
'draggable'
|
|
7
|
+
else
|
|
8
|
+
''
|
|
8
9
|
end
|
|
9
|
-
access_icon
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
def
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
def add_page_path_data(section_node, parent_section_node)
|
|
13
|
+
section = figure_out_target_section(parent_section_node, section_node)
|
|
14
|
+
new_section_page_path(section)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def add_link_path_data(section_node, parent_section_node)
|
|
18
|
+
section = figure_out_target_section(parent_section_node, section_node)
|
|
19
|
+
new_section_link_path(section)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def add_section_path_data(section_node, parent_section_node)
|
|
23
|
+
section = figure_out_target_section(parent_section_node, section_node)
|
|
24
|
+
new_section_path(section_id: section)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# When sitemap initially renders, we only want to show first level.
|
|
28
|
+
def initial_visibility_class(section_node)
|
|
29
|
+
section_node.depth > 1 ? 'hide' : ''
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Returns a css class for determine sitemap depth.
|
|
33
|
+
def sitemap_depth_class(section_node)
|
|
34
|
+
one_based_depth = section_node.depth + 1
|
|
35
|
+
"level-#{one_based_depth}"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Generate HTML for 'hidden' icon for hidden content.
|
|
39
|
+
# @param [Object] content
|
|
40
|
+
# @return [String] HTML (HTML safe)
|
|
41
|
+
def hidden_icon_tag(content)
|
|
42
|
+
if content.respond_to?(:hidden?) && content.hidden?
|
|
43
|
+
'<span aria-hidden="true" class="permission-icon icon-eye-blocked"></span>'.html_safe
|
|
44
|
+
else
|
|
45
|
+
''
|
|
18
46
|
end
|
|
19
|
-
|
|
20
|
-
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def guest_accessible_icon_tag(parent, content)
|
|
50
|
+
unless content.accessible_to_guests?(@public_sections, parent)
|
|
51
|
+
'<span aria-hidden="true" class="permission-icon icon-locked"></span>'.html_safe
|
|
21
52
|
else
|
|
22
|
-
|
|
53
|
+
''
|
|
23
54
|
end
|
|
24
55
|
end
|
|
25
56
|
|
|
26
|
-
#
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
57
|
+
# Generate the HTML for a given section node.
|
|
58
|
+
def icon_tag(section_node, children)
|
|
59
|
+
name = if section_node.ancestors.size == 0
|
|
60
|
+
'earth'
|
|
61
|
+
elsif section_node.home?
|
|
62
|
+
'house'
|
|
63
|
+
elsif section_node.link?
|
|
64
|
+
'link'
|
|
65
|
+
elsif section_node.page?
|
|
66
|
+
'file'
|
|
67
|
+
elsif section_node.section? && children.empty?
|
|
68
|
+
'folder-open'
|
|
69
|
+
elsif section_node.section?
|
|
70
|
+
'folder'
|
|
71
|
+
else
|
|
72
|
+
'list' # All other content types.
|
|
73
|
+
end
|
|
74
|
+
content_tag("span", "", {'aria-hidden' => true, class: "type-icon icon-#{name}"})
|
|
38
75
|
end
|
|
39
76
|
|
|
40
|
-
|
|
41
|
-
|
|
77
|
+
# Marks a section to determine if it can be opened/closed in the sitemap.
|
|
78
|
+
def closable_data(section_node, children)
|
|
79
|
+
if (section_node.root?)
|
|
80
|
+
false
|
|
81
|
+
elsif !children.empty?
|
|
82
|
+
true
|
|
83
|
+
else
|
|
84
|
+
false
|
|
85
|
+
end
|
|
42
86
|
end
|
|
43
87
|
|
|
44
|
-
|
|
88
|
+
def current_user_can_modify(modifiable_sections, section_node, parent_section_node)
|
|
89
|
+
if section_node.section?
|
|
90
|
+
modifiable_sections.include?(section_node.node)
|
|
91
|
+
else
|
|
92
|
+
modifiable_sections.include?(parent_section_node.node)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
45
95
|
|
|
46
|
-
|
|
47
|
-
|
|
96
|
+
# Determines if a row is leaf or folder based on whether there are any subchildren.
|
|
97
|
+
def row_type_tag(section_node)
|
|
98
|
+
section_node.section? ? 'folder' : 'leaf'
|
|
48
99
|
end
|
|
49
100
|
|
|
101
|
+
private
|
|
102
|
+
|
|
103
|
+
# Need to determine if we should be adding content to a node or its parent.
|
|
104
|
+
def figure_out_target_section(parent_section_node, section_node)
|
|
105
|
+
if section_node.section?
|
|
106
|
+
section_node.node
|
|
107
|
+
else
|
|
108
|
+
parent_section_node.node
|
|
109
|
+
end
|
|
110
|
+
end
|
|
50
111
|
end
|
|
51
112
|
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
module Sites
|
|
3
|
+
|
|
4
|
+
# Override Devise Helpers to point to main_app rather than engine.
|
|
5
|
+
# Used for public site authentication.
|
|
6
|
+
module AuthenticationHelper
|
|
7
|
+
|
|
8
|
+
def new_session_path(resource_name)
|
|
9
|
+
main_app.new_cms_user_session_path
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def session_path(resource_name)
|
|
13
|
+
main_app.cms_user_session_path
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def password_path(resource_name)
|
|
17
|
+
main_app.cms_user_password_path
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def new_password_path(resource_name)
|
|
21
|
+
main_app.forgot_password_path
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
module Sites
|
|
3
|
+
|
|
4
|
+
# A shim that can be added to Portlet helpers to provide Devise behavior.
|
|
5
|
+
module DeviseShimHelper
|
|
6
|
+
|
|
7
|
+
# Shim to ensure main_app. is available for this helper.
|
|
8
|
+
def main_app
|
|
9
|
+
Rails.application.class.routes.url_helpers
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
include DeviseHelper
|
|
13
|
+
|
|
14
|
+
# Use public routes (/login) for paths
|
|
15
|
+
include Cms::Sites::AuthenticationHelper
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def resource
|
|
19
|
+
:cms_user
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def resource_name
|
|
23
|
+
:cms_user
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def devise_mapping
|
|
27
|
+
@devise_mapping ||= Devise.mappings[:cms_user]
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -10,13 +10,7 @@ module Cms
|
|
|
10
10
|
helper Cms::PageHelper
|
|
11
11
|
helper Cms::MenuHelper
|
|
12
12
|
helper Cms::RenderingHelper
|
|
13
|
-
|
|
14
|
-
def cms_toolbar
|
|
15
|
-
if current_user.able_to?(:administrate, :edit_content, :publish_content)
|
|
16
|
-
%Q{<iframe src="#{cms.toolbar_path(:page_toolbar => 0)}" width="100%" height="100px" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" name="cms_toolbar"></iframe>}
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
13
|
+
|
|
20
14
|
end
|
|
21
15
|
end
|
|
22
16
|
end
|
|
@@ -1,27 +1,168 @@
|
|
|
1
1
|
module Cms
|
|
2
|
+
|
|
3
|
+
# Defines functions for creating buttons and links using the CMS styling.
|
|
4
|
+
# I.e. Menus, Save, Publish buttons and links.
|
|
2
5
|
module UiElementsHelper
|
|
3
6
|
|
|
7
|
+
def cancel_button(location, label="Cancel")
|
|
8
|
+
klass = ['btn']
|
|
9
|
+
klass << 'btn-small' if location == :top
|
|
10
|
+
link_to label, :back, class: klass
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def button_menu(location)
|
|
14
|
+
container_class = location == :top ? 'span6 top-buttons' : 'form-actions clearfix'
|
|
15
|
+
container_element = location == :top ? 'span' : 'div'
|
|
16
|
+
content_tag container_element, class: container_class do
|
|
17
|
+
yield if block_given?
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def page_title_with_buttons(form, partial_name="buttons")
|
|
22
|
+
render(partial: partial_name, locals: {f: form, location: :top}, layout: 'page_title')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def bottom_buttons(form, partial_name="buttons")
|
|
26
|
+
render(partial: partial_name, locals: {f: form, location: :bottom}, layout: 'row')
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @deprecated Everything below.
|
|
30
|
+
|
|
4
31
|
# Renders a Save And Publish button if:
|
|
5
32
|
# 1. Current User has publish rights
|
|
6
33
|
# 2. Block is publishable
|
|
7
34
|
def save_and_publish_button(block, content_type)
|
|
8
35
|
if current_user.able_to?(:publish_content) && block.publishable?
|
|
9
|
-
html = %Q{<button type="submit" name="#{content_type.content_block_type.singularize}[publish_on_save]" value="true" class="submit" tabindex="#{next_tabindex}"><span>Save And Publish</span></button>}
|
|
10
|
-
|
|
36
|
+
html = %Q{<button type="submit" name="#{content_type.content_block_type.singularize}[publish_on_save]" value="true" class="submit btn btn-primary" tabindex="#{next_tabindex}"><span>Save And Publish</span></button>}
|
|
37
|
+
html.html_safe
|
|
11
38
|
end
|
|
12
39
|
end
|
|
13
40
|
|
|
14
41
|
# For simple publish buttons
|
|
15
42
|
def publish_button(type)
|
|
16
|
-
html = %Q{<button type="submit" name="#{type}[publish_on_save]" value="true" class="submit"><span>Save And Publish</span></button>'}
|
|
17
|
-
|
|
43
|
+
html = %Q{<button type="submit" name="#{type}[publish_on_save]" value="true" class="submit btn btn-primary"><span>Save And Publish</span></button>'}
|
|
44
|
+
html.html_safe
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Renders a Publish button for the menu based on whether:
|
|
48
|
+
# 1. The current user can publish
|
|
49
|
+
# 2. The content item can or needs to be published.
|
|
50
|
+
def publish_menu_button(content_item)
|
|
51
|
+
options = {class: ["btn", "btn-primary", "http_put"], id: "publish_button"}
|
|
52
|
+
path = "#"
|
|
53
|
+
if current_user.able_to?(:publish_content) && !content_item.new_record? && content_item.respond_to?(:live?) && !content_item.live?
|
|
54
|
+
path = engine(@block).polymorphic_path([:publish, @block])
|
|
55
|
+
else
|
|
56
|
+
options[:class] << "disabled"
|
|
57
|
+
end
|
|
58
|
+
link_to "Publish", path, options
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def edit_content_menu_button(content_item)
|
|
62
|
+
path = "#"
|
|
63
|
+
unless content_item.new_record?
|
|
64
|
+
path = edit_engine_aware_path(content_item)
|
|
65
|
+
end
|
|
66
|
+
link_to "Edit Content", path, class: "btn btn-primary", id: "edit_button"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def view_content_menu_button(content_item)
|
|
70
|
+
path = "#"
|
|
71
|
+
unless content_item.new_record?
|
|
72
|
+
path = engine_aware_path(content_item, nil)
|
|
73
|
+
end
|
|
74
|
+
link_to "View Content", path, class: "btn btn-primary", id: "view_button"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
# Generic bootstrap based menu button
|
|
79
|
+
# @param [Hash] options
|
|
80
|
+
# @option options [Boolean] :enabled
|
|
81
|
+
# @option options [Array<String>] :class An array of additional classes to apply
|
|
82
|
+
def menu_button(label, path, options={})
|
|
83
|
+
defaults = {
|
|
84
|
+
enabled: true,
|
|
85
|
+
pull: 'left'
|
|
86
|
+
}
|
|
87
|
+
options = defaults.merge!(options)
|
|
88
|
+
options[:class] = %w{btn btn-primary}
|
|
89
|
+
if (options[:pull] == 'left' || options[:pull]== 'right')
|
|
90
|
+
options[:class] << "pull-#{options.delete(:pull)}"
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
options[:class] << 'disabled' unless options[:enabled]
|
|
94
|
+
options.delete(:enabled)
|
|
95
|
+
options[:class] << 'http_put' if options[:method] == :put
|
|
96
|
+
options[:class] << 'http_delete' if options[:method] == :delete
|
|
97
|
+
options[:class] << 'confirm_with_title' if options[:method] == :delete
|
|
98
|
+
|
|
99
|
+
options.delete(:method)
|
|
100
|
+
copy_title(options, options)
|
|
101
|
+
link_to(label, path, options)
|
|
18
102
|
end
|
|
19
103
|
|
|
104
|
+
def versions_menu_button(content_item)
|
|
105
|
+
options = {class: ["btn", "btn-primary"], id: "revisions_button"}
|
|
106
|
+
path = "#"
|
|
107
|
+
if !content_item.new_record? && content_item.class.versioned?
|
|
108
|
+
path = engine(content_item).polymorphic_path([:versions, content_item])
|
|
109
|
+
else
|
|
110
|
+
options[:class] << "disabled"
|
|
111
|
+
end
|
|
112
|
+
link_to "List Versions", path, options
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Render a CMS styled 'Delete' button. This button will appear on tool bars, typically set apart visually from other buttons.
|
|
116
|
+
# Has a 'confirm?' popup attached to it as well.
|
|
117
|
+
# Assumes that javascript code to handle the 'confirm' has already been included in the page.
|
|
118
|
+
#
|
|
119
|
+
def delete_menu_button(content_item=nil, opts={class: []})
|
|
120
|
+
classes = ["btn", "http_delete", "confirm_with_title"]
|
|
121
|
+
if current_user.able_to_publish?(content_item)
|
|
122
|
+
classes << 'btn-primary'
|
|
123
|
+
else
|
|
124
|
+
classes << 'disabled'
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
link_to_path = "#"
|
|
128
|
+
options = {:id => 'delete_button', :class => classes}
|
|
129
|
+
options[:class].concat(opts[:class]) if opts[:class]
|
|
130
|
+
|
|
131
|
+
if content_item == nil || content_item.new_record?
|
|
132
|
+
classes << 'disabled'
|
|
133
|
+
else
|
|
134
|
+
options[:title] = "Are you sure you want to delete '#{content_item.name}'?"
|
|
135
|
+
link_to_path = engine_aware_path(content_item, nil)
|
|
136
|
+
end
|
|
137
|
+
if opts[:title]
|
|
138
|
+
options[:title] = opts[:title]
|
|
139
|
+
end
|
|
140
|
+
link_to "Delete", link_to_path, options
|
|
141
|
+
end
|
|
20
142
|
|
|
21
143
|
def select_content_type_tag(type, &block)
|
|
22
|
-
options = {:rel => "select-#{type.
|
|
23
|
-
|
|
144
|
+
options = {:rel => "select-#{type.param_key}"}
|
|
145
|
+
if (defined?(content_type) && content_type == type)
|
|
146
|
+
options[:class] = "on"
|
|
147
|
+
end
|
|
24
148
|
content_tag_for(:li, type, nil, options, &block)
|
|
25
149
|
end
|
|
150
|
+
|
|
151
|
+
# Used by Twitter Bootstrap dropdown menus used to divide groups of menu items.
|
|
152
|
+
# @param [Integer] index
|
|
153
|
+
def divider_tag(index = 1)
|
|
154
|
+
content_tag(:li, " ", {class: "divider"}) if index != 0
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def nav_link_to(name, link, options={})
|
|
158
|
+
content_tag(:li, link_to(name, link, options))
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
private
|
|
162
|
+
|
|
163
|
+
def copy_title(from, to)
|
|
164
|
+
to[:title] = from[:title] if (!from[:title].blank? && from[:title].class == String)
|
|
165
|
+
end
|
|
166
|
+
|
|
26
167
|
end
|
|
27
168
|
end
|