From ee57d77906e96d92d055e3518bb221f6e4c89cd0 Mon Sep 17 00:00:00 2001 From: zogstrip Date: Tue, 27 May 2025 12:59:21 +0200 Subject: [PATCH 1/4] UX: Show a "Continue with Discourse ID" button ...instead of the usual Login / Sign Up button to visitors. Internal ref - t/154881 --- .../initializers/continue-with.gjs | 27 +++++++++++++++ config/locales/client.en.yml | 2 ++ spec/system/discourse_login_client_spec.rb | 34 +++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 assets/javascripts/initializers/continue-with.gjs diff --git a/assets/javascripts/initializers/continue-with.gjs b/assets/javascripts/initializers/continue-with.gjs new file mode 100644 index 0000000..fd714c1 --- /dev/null +++ b/assets/javascripts/initializers/continue-with.gjs @@ -0,0 +1,27 @@ +import { withPluginApi } from "discourse/lib/plugin-api"; +import DButton from "discourse/components/d-button"; + +export default { + initialize(container) { + const { isOnlyOneExternalLoginMethod, externalLoginMethods, singleExternalLogin } = container.lookup("service:login"); + const onlyDiscourseId = isOnlyOneExternalLoginMethod && externalLoginMethods[0].name === "discourse_login"; + + withPluginApi("2.1.1", ({ headerButtons }) => { + if (onlyDiscourseId) { + const currentUser = container.lookup("service:current-user"); + + headerButtons.delete("auth"); + headerButtons.add("continue-with", ); + } + }); + } +} \ No newline at end of file diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 22dcccd..0d21896 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -9,3 +9,5 @@ en: discourse_login: name: "Discourse ID" title: "Login with Discourse ID" + discourse_login: + continue_with: "Continue with Discourse ID" diff --git a/spec/system/discourse_login_client_spec.rb b/spec/system/discourse_login_client_spec.rb index ae04717..7155d5f 100644 --- a/spec/system/discourse_login_client_spec.rb +++ b/spec/system/discourse_login_client_spec.rb @@ -45,4 +45,38 @@ expect(page).to have_css(".header-dropdown-toggle.current-user") end end + + context "when discourse_login is the only external login method" do + before do + SiteSetting.enable_discord_logins = false + SiteSetting.enable_facebook_logins = false + SiteSetting.enable_github_logins = false + SiteSetting.enable_google_oauth2_logins = false + SiteSetting.enable_linkedin_oidc_logins = false + SiteSetting.enable_local_logins = false + SiteSetting.enable_twitter_logins = false + end + + it "hides regular auth buttons and shows continue with discourse id button" do + visit("/") + + expect(page).not_to have_css(".auth-buttons .sign-up-button") + expect(page).not_to have_css(".auth-buttons .login-button") + + expect(page).to have_css( + ".continue-with-discourse", + text: I18n.t("js.discourse_login.continue_with"), + ) + end + + it "continues with discourse login when button is clicked" do + visit("/") + + page.find(".continue-with-discourse").click + + expect(page).to have_css(".header-dropdown-toggle.current-user") + + expect(page).not_to have_css(".continue-with-discourse") + end + end end From d872a56f7ecc669e5ec7f6361c5ab31c6b2bbc8d Mon Sep 17 00:00:00 2001 From: zogstrip Date: Tue, 27 May 2025 16:08:51 +0200 Subject: [PATCH 2/4] UX: make the button primary --- assets/javascripts/initializers/continue-with.gjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/javascripts/initializers/continue-with.gjs b/assets/javascripts/initializers/continue-with.gjs index fd714c1..be2b44e 100644 --- a/assets/javascripts/initializers/continue-with.gjs +++ b/assets/javascripts/initializers/continue-with.gjs @@ -14,7 +14,7 @@ export default { headerButtons.add("continue-with",