mirror of
https://github.com/discourse/discourse.git
synced 2025-06-03 19:39:30 +08:00
UX: Remove section heading for community section (#22405)
Why is this change being made? We've decided that the previous "community" section should look more like a primary section that holds the most important navigation links for the site and the word "community" doesn't quite fit that description. Therefore, we've made the decision to drop the section heading for the community section. As part of removing the section heading, the following changes are made as well: 1. Button to customize the section has been moved to the "footer" of the "More..." section when `navigation_menu` site setting is set to `sidebar`. When `navigation_menu` is set to `header dropdown`, a button to customize the section is shown inline. 2. The section will no longer be collapsable. 3. The title of the section is no longer customisable as it is no longer displayed. As a technical note, we have not dropped any previous customisations of the section's title previously in case we have to bring back the header in the future. 4. The new topic button that was previously present in the header has been removed alongside the header. Admins can add a custom section link to the `/new-topic` route if there would like to make it easier for users to create a new topic in the sidebar.
This commit is contained in:

committed by
GitHub

parent
41c3b42412
commit
ab053ac669
129
spec/system/page_objects/components/navigation_menu/base.rb
Normal file
129
spec/system/page_objects/components/navigation_menu/base.rb
Normal file
@ -0,0 +1,129 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module PageObjects
|
||||
module Components
|
||||
module NavigationMenu
|
||||
class Base < PageObjects::Components::Base
|
||||
def community_section
|
||||
find(".sidebar-section[data-section-name='community']")
|
||||
end
|
||||
|
||||
SIDEBAR_SECTION_LINK_SELECTOR = "sidebar-section-link"
|
||||
|
||||
def click_section_link(name)
|
||||
find(".#{SIDEBAR_SECTION_LINK_SELECTOR}", text: name).click
|
||||
end
|
||||
|
||||
def has_one_active_section_link?
|
||||
has_css?(".#{SIDEBAR_SECTION_LINK_SELECTOR}--active", count: 1)
|
||||
end
|
||||
|
||||
def has_section_link?(name, href: nil, active: false, target: nil)
|
||||
section_link_present?(name, href: href, active: active, target: target, present: true)
|
||||
end
|
||||
|
||||
def has_no_section_link?(name, href: nil, active: false)
|
||||
section_link_present?(name, href: href, active: active, present: false)
|
||||
end
|
||||
def has_section?(name)
|
||||
has_css?(".sidebar-sections [data-section-name='#{name.parameterize}']")
|
||||
end
|
||||
|
||||
def has_no_section?(name)
|
||||
has_no_css?(".sidebar-sections [data-section-name='#{name.parameterize}']")
|
||||
end
|
||||
|
||||
def has_categories_section?
|
||||
has_section?("Categories")
|
||||
end
|
||||
|
||||
def has_tags_section?
|
||||
has_section?("Tags")
|
||||
end
|
||||
|
||||
def has_no_tags_section?
|
||||
has_no_section?("Tags")
|
||||
end
|
||||
|
||||
def has_all_tags_section_link?
|
||||
has_section_link?(I18n.t("js.sidebar.all_tags"))
|
||||
end
|
||||
|
||||
def has_tag_section_links?(tags)
|
||||
tag_names = tags.map(&:name)
|
||||
|
||||
tag_section_links =
|
||||
all(
|
||||
".sidebar-section[data-section-name='tags'] .sidebar-section-link-wrapper[data-tag-name]",
|
||||
count: tag_names.length,
|
||||
)
|
||||
|
||||
expect(tag_section_links.map(&:text)).to eq(tag_names)
|
||||
end
|
||||
|
||||
def primary_section_links(slug)
|
||||
all("[data-section-name='#{slug}'] .sidebar-section-link-wrapper").map(&:text)
|
||||
end
|
||||
|
||||
def primary_section_icons(slug)
|
||||
all("[data-section-name='#{slug}'] .sidebar-section-link-wrapper use").map do |icon|
|
||||
icon[:href].delete_prefix("#")
|
||||
end
|
||||
end
|
||||
|
||||
def has_category_section_link?(category)
|
||||
page.has_link?(category.name, class: "sidebar-section-link")
|
||||
end
|
||||
|
||||
def click_add_section_button
|
||||
click_button(add_section_button_text)
|
||||
end
|
||||
|
||||
def has_no_add_section_button?
|
||||
page.has_no_button?(add_section_button_text)
|
||||
end
|
||||
|
||||
def click_edit_categories_button
|
||||
within(".sidebar-section[data-section-name='categories']") do
|
||||
click_button(class: "sidebar-section-header-button", visible: false)
|
||||
end
|
||||
|
||||
PageObjects::Modals::SidebarEditCategories.new
|
||||
end
|
||||
|
||||
def click_edit_tags_button
|
||||
within(".sidebar-section[data-section-name='tags']") do
|
||||
click_button(class: "sidebar-section-header-button", visible: false)
|
||||
end
|
||||
|
||||
PageObjects::Modals::SidebarEditTags.new
|
||||
end
|
||||
|
||||
def edit_custom_section(name)
|
||||
name = name.parameterize
|
||||
|
||||
find(".sidebar-section[data-section-name='#{name}']").hover
|
||||
|
||||
find(
|
||||
".sidebar-section[data-section-name='#{name}'] button.sidebar-section-header-button",
|
||||
).click
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def section_link_present?(name, href: nil, active: false, target: nil, present:)
|
||||
attributes = { exact_text: name }
|
||||
attributes[:href] = href if href
|
||||
attributes[:class] = SIDEBAR_SECTION_LINK_SELECTOR
|
||||
attributes[:class] += "--active" if active
|
||||
attributes[:target] = target if target
|
||||
page.public_send(present ? :has_link? : :has_no_link?, **attributes)
|
||||
end
|
||||
|
||||
def add_section_button_text
|
||||
I18n.t("js.sidebar.sections.custom.add")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,25 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module PageObjects
|
||||
module Components
|
||||
module NavigationMenu
|
||||
class HeaderDropdown < Base
|
||||
def open
|
||||
find(".header-dropdown-toggle.hamburger-dropdown").click
|
||||
expect(page).to have_css(".sidebar-hamburger-dropdown")
|
||||
self
|
||||
end
|
||||
|
||||
def click_customize_community_section_button
|
||||
community_section.click_button(
|
||||
I18n.t("js.sidebar.sections.community.edit_section.header_dropdown"),
|
||||
)
|
||||
|
||||
expect(page).to have_no_css(".sidebar-hamburger-dropdown")
|
||||
|
||||
PageObjects::Modals::SidebarSectionForm.new
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,45 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module PageObjects
|
||||
module Components
|
||||
module NavigationMenu
|
||||
class Sidebar < Base
|
||||
def open_on_mobile
|
||||
click_button("toggle-hamburger-menu")
|
||||
end
|
||||
|
||||
def visible?
|
||||
page.has_css?("#d-sidebar")
|
||||
end
|
||||
|
||||
def not_visible?
|
||||
page.has_no_css?("#d-sidebar")
|
||||
end
|
||||
|
||||
def has_no_customize_community_section_button?
|
||||
community_section.has_no_button?(class: "sidebar-section-link-button")
|
||||
end
|
||||
|
||||
def click_customize_community_section_button
|
||||
community_section.click_button(
|
||||
I18n.t("js.sidebar.sections.community.edit_section.sidebar"),
|
||||
)
|
||||
|
||||
expect(community_section).to have_no_css(".sidebar-more-section-links-details")
|
||||
|
||||
PageObjects::Modals::SidebarSectionForm.new
|
||||
end
|
||||
|
||||
def click_community_section_more_button
|
||||
community_section.click_button(class: "sidebar-more-section-links-details-summary")
|
||||
expect(community_section).to have_css(".sidebar-more-section-links-details")
|
||||
self
|
||||
end
|
||||
|
||||
def custom_section_modal_title
|
||||
find("#discourse-modal-title")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -1,138 +0,0 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module PageObjects
|
||||
module Components
|
||||
class Sidebar < PageObjects::Components::Base
|
||||
def open_on_mobile
|
||||
click_button("toggle-hamburger-menu")
|
||||
end
|
||||
|
||||
def visible?
|
||||
page.has_css?("#d-sidebar")
|
||||
end
|
||||
|
||||
def not_visible?
|
||||
page.has_no_css?("#d-sidebar")
|
||||
end
|
||||
|
||||
def has_category_section_link?(category)
|
||||
page.has_link?(category.name, class: "sidebar-section-link")
|
||||
end
|
||||
|
||||
def click_add_section_button
|
||||
click_button(add_section_button_text)
|
||||
end
|
||||
|
||||
def has_no_add_section_button?
|
||||
page.has_no_button?(add_section_button_text)
|
||||
end
|
||||
|
||||
def click_edit_categories_button
|
||||
within(".sidebar-section[data-section-name='categories']") do
|
||||
click_button(class: "sidebar-section-header-button", visible: false)
|
||||
end
|
||||
|
||||
PageObjects::Modals::SidebarEditCategories.new
|
||||
end
|
||||
|
||||
def click_edit_tags_button
|
||||
within(".sidebar-section[data-section-name='tags']") do
|
||||
click_button(class: "sidebar-section-header-button", visible: false)
|
||||
end
|
||||
|
||||
PageObjects::Modals::SidebarEditTags.new
|
||||
end
|
||||
|
||||
def edit_custom_section(name)
|
||||
find(".sidebar-section[data-section-name='#{name.parameterize}']").hover
|
||||
|
||||
find(
|
||||
".sidebar-section[data-section-name='#{name.parameterize}'] button.sidebar-section-header-button",
|
||||
).click
|
||||
end
|
||||
|
||||
SIDEBAR_SECTION_LINK_SELECTOR = "sidebar-section-link"
|
||||
|
||||
def click_section_link(name)
|
||||
find(".#{SIDEBAR_SECTION_LINK_SELECTOR}", text: name).click
|
||||
end
|
||||
|
||||
def has_one_active_section_link?
|
||||
has_css?(".#{SIDEBAR_SECTION_LINK_SELECTOR}--active", count: 1)
|
||||
end
|
||||
|
||||
def has_section_link?(name, href: nil, active: false, target: nil)
|
||||
section_link_present?(name, href: href, active: active, target: target, present: true)
|
||||
end
|
||||
|
||||
def has_no_section_link?(name, href: nil, active: false)
|
||||
section_link_present?(name, href: href, active: active, present: false)
|
||||
end
|
||||
|
||||
def custom_section_modal_title
|
||||
find("#discourse-modal-title")
|
||||
end
|
||||
|
||||
def has_section?(name)
|
||||
has_css?(".sidebar-sections [data-section-name='#{name.parameterize}']")
|
||||
end
|
||||
|
||||
def has_no_section?(name)
|
||||
has_no_css?(".sidebar-sections [data-section-name='#{name.parameterize}']")
|
||||
end
|
||||
|
||||
def has_categories_section?
|
||||
has_section?("Categories")
|
||||
end
|
||||
|
||||
def has_tags_section?
|
||||
has_section?("Tags")
|
||||
end
|
||||
|
||||
def has_no_tags_section?
|
||||
has_no_section?("Tags")
|
||||
end
|
||||
|
||||
def has_all_tags_section_link?
|
||||
has_section_link?(I18n.t("js.sidebar.all_tags"))
|
||||
end
|
||||
|
||||
def has_tag_section_links?(tags)
|
||||
tag_names = tags.map(&:name)
|
||||
|
||||
tag_section_links =
|
||||
all(
|
||||
".sidebar-section[data-section-name='tags'] .sidebar-section-link-wrapper[data-tag-name]",
|
||||
count: tag_names.length,
|
||||
)
|
||||
|
||||
expect(tag_section_links.map(&:text)).to eq(tag_names)
|
||||
end
|
||||
|
||||
def primary_section_links(slug)
|
||||
all("[data-section-name='#{slug}'] .sidebar-section-link-wrapper").map(&:text)
|
||||
end
|
||||
|
||||
def primary_section_icons(slug)
|
||||
all("[data-section-name='#{slug}'] .sidebar-section-link-wrapper use").map do |icon|
|
||||
icon[:href].delete_prefix("#")
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def section_link_present?(name, href: nil, active: false, target: nil, present:)
|
||||
attributes = { exact_text: name }
|
||||
attributes[:href] = href if href
|
||||
attributes[:class] = SIDEBAR_SECTION_LINK_SELECTOR
|
||||
attributes[:class] += "--active" if active
|
||||
attributes[:target] = target if target
|
||||
page.public_send(present ? :has_link? : :has_no_link?, **attributes)
|
||||
end
|
||||
|
||||
def add_section_button_text
|
||||
I18n.t("js.sidebar.sections.custom.add")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -23,9 +23,9 @@ module PageObjects
|
||||
page.has_no_css?(".sidebar-footer-actions-keyboard-shortcuts")
|
||||
end
|
||||
|
||||
def click_community_header_button
|
||||
def click_categories_header_button
|
||||
page.click_button(
|
||||
I18n.t("js.sidebar.sections.community.header_action_create_topic_title"),
|
||||
I18n.t("js.sidebar.sections.categories.header_action_title"),
|
||||
class: "sidebar-section-header-button",
|
||||
)
|
||||
end
|
||||
|
@ -34,16 +34,24 @@ module PageObjects
|
||||
def reset
|
||||
find(".reset-link").click
|
||||
find(".dialog-footer .btn-primary").click
|
||||
closed?
|
||||
self
|
||||
end
|
||||
|
||||
def save
|
||||
find("#save-section").click
|
||||
closed?
|
||||
self
|
||||
end
|
||||
|
||||
def visible?
|
||||
page.has_css?(".sidebar-section-form-modal")
|
||||
end
|
||||
|
||||
def closed?
|
||||
page.has_no_css?(".sidebar-section-form-modal")
|
||||
end
|
||||
|
||||
def has_disabled_save?
|
||||
find_button("Save", disabled: true)
|
||||
end
|
||||
|
Reference in New Issue
Block a user