From 492a45da37b6b8e9b5b8091f6e3f26031cac69b1 Mon Sep 17 00:00:00 2001 From: David Taylor <david@taylorhq.com> Date: Thu, 1 Aug 2024 13:43:18 +0100 Subject: [PATCH] DEV: Introduce `home-logo-image-url` value transformer (#28189) Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com> --- .../app/components/header/home-logo.gjs | 28 +++++++++++-------- .../discourse/app/lib/transformer/registry.js | 1 + .../transformers/home-logo-image-url-test.js | 25 +++++++++++++++++ 3 files changed, 42 insertions(+), 12 deletions(-) create mode 100644 app/assets/javascripts/discourse/tests/acceptance/transformers/home-logo-image-url-test.js diff --git a/app/assets/javascripts/discourse/app/components/header/home-logo.gjs b/app/assets/javascripts/discourse/app/components/header/home-logo.gjs index 2dab793b189..c4606ff489a 100644 --- a/app/assets/javascripts/discourse/app/components/header/home-logo.gjs +++ b/app/assets/javascripts/discourse/app/components/header/home-logo.gjs @@ -55,23 +55,27 @@ export default class HomeLogo extends Component { } logoResolver(name, opts = {}) { - // get alternative logos for browser dark dark mode switching - if (opts.dark) { - return this.siteSettings[`site_${name}_dark_url`]; - } + let url; - // try dark logos first when color scheme is dark - // this is independent of browser dark mode - // hence the fallback to normal logos - if (this.session.defaultColorSchemeIsDark) { - return ( + if (opts.dark) { + // get alternative logos for browser dark dark mode switching + url = this.siteSettings[`site_${name}_dark_url`]; + } else if (this.session.defaultColorSchemeIsDark) { + // try dark logos first when color scheme is dark + // this is independent of browser dark mode + // hence the fallback to normal logos + url = this.siteSettings[`site_${name}_dark_url`] || this.siteSettings[`site_${name}_url`] || - "" - ); + ""; + } else { + url = this.siteSettings[`site_${name}_url`] || ""; } - return this.siteSettings[`site_${name}_url`] || ""; + return applyValueTransformer("home-logo-image-url", url, { + name, + dark: opts.dark, + }); } @action diff --git a/app/assets/javascripts/discourse/app/lib/transformer/registry.js b/app/assets/javascripts/discourse/app/lib/transformer/registry.js index bde4aef4d0a..1f6ea052df3 100644 --- a/app/assets/javascripts/discourse/app/lib/transformer/registry.js +++ b/app/assets/javascripts/discourse/app/lib/transformer/registry.js @@ -7,4 +7,5 @@ export const VALUE_TRANSFORMERS = Object.freeze([ // use only lowercase names "header-notifications-avatar-size", "home-logo-href", + "home-logo-image-url", ]); diff --git a/app/assets/javascripts/discourse/tests/acceptance/transformers/home-logo-image-url-test.js b/app/assets/javascripts/discourse/tests/acceptance/transformers/home-logo-image-url-test.js new file mode 100644 index 00000000000..f439988663a --- /dev/null +++ b/app/assets/javascripts/discourse/tests/acceptance/transformers/home-logo-image-url-test.js @@ -0,0 +1,25 @@ +import { visit } from "@ember/test-helpers"; +import { test } from "qunit"; +import { withPluginApi } from "discourse/lib/plugin-api"; +import { acceptance } from "discourse/tests/helpers/qunit-helpers"; + +acceptance("home-logo-image-url transformer", function () { + test("applying a value transformation", async function (assert) { + withPluginApi("1.34.0", (api) => { + api.registerValueTransformer( + "home-logo-image-url", + ({ value }) => "/transformed" + value + ); + }); + + await visit("/"); + + assert + .dom("#site-logo") + .hasAttribute( + "src", + "/transformed/assets/logo.png", + "it transforms the logo url" + ); + }); +});