From 2b6a1f468d5fc195a954e80e358bab7ea278cb12 Mon Sep 17 00:00:00 2001 From: Alan Guo Xiang Tan Date: Thu, 26 May 2022 09:24:30 +0800 Subject: [PATCH] FEATURE: Register docs link under sidebar topics section. (#95) --- .../discourse/initializers/setup-docs.js | 28 ++++--- config/locales/client.en.yml | 3 + .../acceptance/docs-sidebar-test.js | 73 +++++++++++++++++++ 3 files changed, 95 insertions(+), 9 deletions(-) create mode 100644 test/javascripts/acceptance/docs-sidebar-test.js diff --git a/assets/javascripts/discourse/initializers/setup-docs.js b/assets/javascripts/discourse/initializers/setup-docs.js index 92c01fa..9492b5a 100644 --- a/assets/javascripts/discourse/initializers/setup-docs.js +++ b/assets/javascripts/discourse/initializers/setup-docs.js @@ -4,10 +4,6 @@ import I18n from "I18n"; function initialize(api, container) { const siteSettings = container.lookup("site-settings:main"); - if (!siteSettings.docs_enabled) { - return; - } - api.decorateWidget("hamburger-menu:generalLinks", () => { return { route: "docs", @@ -31,13 +27,14 @@ export default { name: "setup-docs", initialize(container) { + const siteSettings = container.lookup("site-settings:main"); + + if (!siteSettings.docs_enabled) { + return; + } + withPluginApi("0.8", (api) => initialize(api, container)); withPluginApi("0.12.6", (api) => { - const siteSettings = container.lookup("site-settings:main"); - if (!siteSettings.docs_enabled) { - return; - } - api.addSearchSuggestion("in:docs"); const tip = { @@ -48,5 +45,18 @@ export default { }; api.addQuickSearchRandomTip(tip); }); + + withPluginApi("1.2.0", (api) => { + const currentUser = container.lookup("current-user:main"); + + if (currentUser?.experimental_sidebar_enabled) { + api.addTopicsSectionLink({ + name: "docs", + route: "docs.index", + title: I18n.t("sidebar.docs_link_title"), + text: I18n.t("sidebar.docs_link_text"), + }); + } + }); }, }; diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 6fcb3d6..97dd12e 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -29,3 +29,6 @@ en: navigate_to_topic: "View the discussion on this topic" filter_button: "Filters" filter_solved: "Topic Solved?" + sidebar: + docs_link_title: "Explore documentation topics" + docs_link_text: "Docs" diff --git a/test/javascripts/acceptance/docs-sidebar-test.js b/test/javascripts/acceptance/docs-sidebar-test.js new file mode 100644 index 0000000..cb74320 --- /dev/null +++ b/test/javascripts/acceptance/docs-sidebar-test.js @@ -0,0 +1,73 @@ +import I18n from "I18n"; + +import { click, currentURL, visit } from "@ember/test-helpers"; + +import { + acceptance, + conditionalTest, + exists, + query, +} from "discourse/tests/helpers/qunit-helpers"; +import { isLegacyEmber } from "discourse-common/config/environment"; +import docsFixtures from "../fixtures/docs"; +import { cloneJSON } from "discourse-common/lib/object"; + +acceptance("Docs - Sidebar with docs disabled", function (needs) { + needs.user({ experimental_sidebar_enabled: true }); + + needs.settings({ + docs_enabled: false, + }); + + conditionalTest( + "docs sidebar link is hidden", + !isLegacyEmber(), + async function (assert) { + await visit("/"); + + assert.ok( + !exists(".sidebar-section-link-docs"), + "it does not display the docs link in sidebar" + ); + } + ); +}); + +acceptance("Docs - Sidebar with docs enabled", function (needs) { + needs.user({ experimental_sidebar_enabled: true }); + needs.settings({ + docs_enabled: true, + }); + + needs.pretender((server, helper) => { + server.get("/docs.json", () => helper.response(cloneJSON(docsFixtures))); + }); + + conditionalTest( + "clicking on docs link", + !isLegacyEmber(), + async function (assert) { + await visit("/"); + + assert.strictEqual( + query(".sidebar-section-link-docs").textContent.trim(), + I18n.t("sidebar.docs_link_text"), + "displays the right text for the link" + ); + + assert.strictEqual( + query(".sidebar-section-link-docs").title, + I18n.t("sidebar.docs_link_title"), + "displays the right title for the link" + ); + + await click(".sidebar-section-link-docs"); + + assert.strictEqual( + currentURL(), + "/docs", + "it navigates to the right page" + ); + } + ); +});