diff --git a/app/assets/javascripts/bootstrap-json/index.js b/app/assets/javascripts/bootstrap-json/index.js index b795588ce70..323a16816d3 100644 --- a/app/assets/javascripts/bootstrap-json/index.js +++ b/app/assets/javascripts/bootstrap-json/index.js @@ -252,9 +252,9 @@ async function buildFromBootstrap(proxy, baseURL, req, response, preload) { url.searchParams.append("safe_mode", reqUrlSafeMode); } - const enableSidebar = forUrlSearchParams.get("enable_sidebar"); - if (enableSidebar) { - url.searchParams.append("enable_sidebar", enableSidebar); + const navigationMenu = forUrlSearchParams.get("navigation_menu"); + if (navigationMenu) { + url.searchParams.append("navigation_menu", navigationMenu); } const reqUrlPreviewThemeId = forUrlSearchParams.get("preview_theme_id"); diff --git a/app/assets/javascripts/discourse/app/components/site-header.js b/app/assets/javascripts/discourse/app/components/site-header.js index b8c146d9325..66e85aa7660 100644 --- a/app/assets/javascripts/discourse/app/components/site-header.js +++ b/app/assets/javascripts/discourse/app/components/site-header.js @@ -343,6 +343,7 @@ const SiteHeaderComponent = MountWidget.extend( canSignUp: this.canSignUp, sidebarEnabled: this.sidebarEnabled, showSidebar: this.showSidebar, + navigationMenuQueryParamOverride: this.navigationMenuQueryParamOverride, }; }, diff --git a/app/assets/javascripts/discourse/app/controllers/application.js b/app/assets/javascripts/discourse/app/controllers/application.js index 1c775ad51bb..653b509415d 100644 --- a/app/assets/javascripts/discourse/app/controllers/application.js +++ b/app/assets/javascripts/discourse/app/controllers/application.js @@ -7,13 +7,13 @@ import { action } from "@ember/object"; const HIDE_SIDEBAR_KEY = "sidebar-hidden"; export default Controller.extend({ - queryParams: [{ sidebarQueryParamOverride: "enable_sidebar" }], + queryParams: [{ navigationMenuQueryParamOverride: "navigation_menu" }], showTop: true, showFooter: false, router: service(), showSidebar: false, - sidebarQueryParamOverride: null, + navigationMenuQueryParamOverride: null, sidebarDisabledRouteOverride: false, showSiteHeader: true, @@ -63,13 +63,13 @@ export default Controller.extend({ }, @discourseComputed( - "sidebarQueryParamOverride", + "navigationMenuQueryParamOverride", "siteSettings.navigation_menu", "canDisplaySidebar", "sidebarDisabledRouteOverride" ) sidebarEnabled( - sidebarQueryParamOverride, + navigationMenuQueryParamOverride, navigationMenu, canDisplaySidebar, sidebarDisabledRouteOverride @@ -82,11 +82,14 @@ export default Controller.extend({ return false; } - if (sidebarQueryParamOverride === "1") { + if (navigationMenuQueryParamOverride === "sidebar") { return true; } - if (sidebarQueryParamOverride === "0") { + if ( + navigationMenuQueryParamOverride === "legacy" || + navigationMenuQueryParamOverride === "header_dropdown" + ) { return false; } diff --git a/app/assets/javascripts/discourse/app/templates/application.hbs b/app/assets/javascripts/discourse/app/templates/application.hbs index f5eca4abcb3..8958f774b33 100644 --- a/app/assets/javascripts/discourse/app/templates/application.hbs +++ b/app/assets/javascripts/discourse/app/templates/application.hbs @@ -17,6 +17,7 @@ @toggleAnonymous={{route-action "toggleAnonymous"}} @logout={{route-action "logout"}} @sidebarEnabled={{this.sidebarEnabled}} + @navigationMenuQueryParamOverride={{this.navigationMenuQueryParamOverride}} @showSidebar={{this.showSidebar}} @toggleSidebar={{action "toggleSidebar"}} /> diff --git a/app/assets/javascripts/discourse/app/widgets/header.js b/app/assets/javascripts/discourse/app/widgets/header.js index 50be1ea06a7..12a47387490 100644 --- a/app/assets/javascripts/discourse/app/widgets/header.js +++ b/app/assets/javascripts/discourse/app/widgets/header.js @@ -509,10 +509,12 @@ export default createWidget("header", { }) ); } else if (state.hamburgerVisible) { - if (this.siteSettings.navigation_menu !== "legacy") { - if (!attrs.sidebarEnabled || this.site.narrowDesktopView) { - panels.push(this.attach("revamped-hamburger-menu-wrapper", {})); - } + if ( + attrs.navigationMenuQueryParamOverride === "header_dropdown" || + (this.siteSettings.navigation_menu !== "legacy" && + (!attrs.sidebarEnabled || this.site.narrowDesktopView)) + ) { + panels.push(this.attach("revamped-hamburger-menu-wrapper", {})); } else { panels.push(this.attach("hamburger-menu")); } diff --git a/app/assets/javascripts/discourse/tests/acceptance/sidebar-user-test.js b/app/assets/javascripts/discourse/tests/acceptance/sidebar-user-test.js index ed2b4c5db32..94d5b65f91f 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/sidebar-user-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/sidebar-user-test.js @@ -51,25 +51,6 @@ acceptance( "hides the sidebar dropdown" ); }); - - test("'enable_sidebar' query param override to enable sidebar", async function (assert) { - await visit("/?enable_sidebar=1"); - - assert.ok(exists(".sidebar-container"), "sidebar is displayed"); - - await click(".btn-sidebar-toggle"); - - assert.notOk( - exists(".sidebar-hamburger-dropdown"), - "does not display the sidebar dropdown" - ); - - assert.notOk(exists(".sidebar-container"), "sidebar is hidden"); - - await click(".btn-sidebar-toggle"); - - assert.ok(exists(".sidebar-container"), "sidebar is displayed"); - }); } ); @@ -132,26 +113,6 @@ acceptance( assert.ok(exists(".sidebar-container"), "displays the sidebar"); }); - test("'enable_sidebar' query param override to disable sidebar", async function (assert) { - await visit("/?enable_sidebar=0"); - - assert.notOk(exists(".sidebar-container"), "sidebar is not displayed"); - - await click(".hamburger-dropdown"); - - assert.ok( - exists(".sidebar-hamburger-dropdown"), - "displays the sidebar dropdown" - ); - - await click(".hamburger-dropdown"); - - assert.notOk( - exists(".sidebar-hamburger-dropdown"), - "hides the sidebar dropdown" - ); - }); - test("button to toggle between mobile and desktop view on touch devices ", async function (assert) { const capabilities = this.container.lookup("capabilities:main"); capabilities.touch = true; diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 1451e7328b0..80b6a77e7c2 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -645,7 +645,7 @@ class ApplicationController < ActionController::Base current_user, scope: guardian, root: false, - enable_sidebar_param: params[:enable_sidebar], + navigation_menu_param: params[:navigation_menu], ), ), ) diff --git a/app/serializers/concerns/user_sidebar_mixin.rb b/app/serializers/concerns/user_sidebar_mixin.rb index 8f74c096e47..8266a2f1f0f 100644 --- a/app/serializers/concerns/user_sidebar_mixin.rb +++ b/app/serializers/concerns/user_sidebar_mixin.rb @@ -59,6 +59,7 @@ module UserSidebarMixin private def sidebar_navigation_menu? - !SiteSetting.legacy_navigation_menu? || options[:enable_sidebar_param] == "1" + !SiteSetting.legacy_navigation_menu? || + %w[sidebar header_dropdown].include?(options[:navigation_menu_param]) end end diff --git a/spec/system/page_objects/components/legacy_header_dropdown.rb b/spec/system/page_objects/components/legacy_header_dropdown.rb new file mode 100644 index 00000000000..f04fd68ce2f --- /dev/null +++ b/spec/system/page_objects/components/legacy_header_dropdown.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module PageObjects + module Components + class LegacyHeaderDropdown < PageObjects::Components::Base + def click + page.find(".hamburger-dropdown").click + end + + def visible? + page.has_css?(".menu-panel.drop-down") + end + end + end +end diff --git a/spec/system/page_objects/components/sidebar_header_dropdown.rb b/spec/system/page_objects/components/sidebar_header_dropdown.rb new file mode 100644 index 00000000000..fa86f1c72f3 --- /dev/null +++ b/spec/system/page_objects/components/sidebar_header_dropdown.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module PageObjects + module Components + class SidebarHeaderDropdown < PageObjects::Components::Base + def click + page.find(".hamburger-dropdown").click + end + + def visible? + page.has_css?(".revamped.menu-panel.drop-down") + end + end + end +end diff --git a/spec/system/viewing_sidebar_spec.rb b/spec/system/viewing_sidebar_spec.rb index 5dfe75f87a3..48b0faf4485 100644 --- a/spec/system/viewing_sidebar_spec.rb +++ b/spec/system/viewing_sidebar_spec.rb @@ -5,13 +5,13 @@ describe "Viewing sidebar", type: :system, js: true do fab!(:user) { Fabricate(:user) } fab!(:category_sidebar_section_link) { Fabricate(:category_sidebar_section_link, user: user) } + before_all { sign_in(user) } + describe "when using the legacy navigation menu" do before { SiteSetting.navigation_menu = "legacy" } - it "should display the sidebar when `enable_sidebar` query param is '1'" do - sign_in(user) - - visit("/latest?enable_sidebar=1") + it "should display the sidebar when `navigation_menu` query param is 'sidebar'" do + visit("/latest?navigation_menu=sidebar") sidebar = PageObjects::Components::Sidebar.new @@ -19,20 +19,48 @@ describe "Viewing sidebar", type: :system, js: true do expect(sidebar).to have_category_section_link(category_sidebar_section_link.linkable) expect(page).not_to have_css(".hamburger-dropdown") end + + it "should display the sidebar dropdown menu when `navigation_menu` query param is 'header_dropdown'" do + visit("/latest?navigation_menu=header_dropdown") + + sidebar = PageObjects::Components::Sidebar.new + + expect(sidebar).to be_not_visible + + header_dropdown = PageObjects::Components::SidebarHeaderDropdown.new + header_dropdown.click + + expect(header_dropdown).to be_visible + end end describe "when using the sidebar navigation menu" do before { SiteSetting.navigation_menu = "sidebar" } - it "should not display the sidebar when `enable_sidebar` query param is '0'" do - sign_in(user) - - visit("/latest?enable_sidebar=0") + it "should display the legacy dropdown menu when `navigation_menu` query param is 'legacy'" do + visit("/latest?navigation_menu=legacy") sidebar = PageObjects::Components::Sidebar.new expect(sidebar).to be_not_visible - expect(page).to have_css(".hamburger-dropdown") + + legacy_header_dropdown = PageObjects::Components::LegacyHeaderDropdown.new + legacy_header_dropdown.click + + expect(legacy_header_dropdown).to be_visible + end + + it "should display the sidebar dropdown menu when `navigation_menu` query param is 'header_dropdown'" do + visit("/latest?navigation_menu=header_dropdown") + + sidebar = PageObjects::Components::Sidebar.new + + expect(sidebar).to be_not_visible + + header_dropdown = PageObjects::Components::SidebarHeaderDropdown.new + header_dropdown.click + + expect(header_dropdown).to be_visible end end end