diff --git a/.discourse-compatibility b/.discourse-compatibility index dac32ce..de754a0 100644 --- a/.discourse-compatibility +++ b/.discourse-compatibility @@ -1,4 +1,3 @@ -< 3.3.0.beta2-dev: 0a837d7c044798417b1a7389cc37a67859c25dbe < 3.3.0.beta1-dev: 50061254831a658eba821238a8a1ae0b7029ab09 < 3.2.0.beta2: 061adfe5ae20abbb82be711d373894c30987ec75 < 3.2.0.beta1-dev: c344d0f519bbb3660e306c50c0d1aa1a776c5e13 diff --git a/javascripts/discourse/components/custom-header-links.hbs b/javascripts/discourse/components/custom-header-links.hbs index 9bf9924..3b7cd72 100644 --- a/javascripts/discourse/components/custom-header-links.hbs +++ b/javascripts/discourse/components/custom-header-links.hbs @@ -12,13 +12,12 @@ > {{#each this.links as |link|}}
  • { - const linkText = link.text; - const linkTitle = link.title; - const linkHref = link.url; - const target = link.target; - const hideOnScroll = link.hide_on_scroll; - const locale = link.locale; - const device = link.view; + return settings.custom_header_links.split("|").reduce((result, item) => { + let [ + linkText, + linkTitle, + linkHref, + device, + target = "", + keepOnScroll, + locale, + ] = item.split(",").map((s) => s.trim()); if (!linkText || (locale && document.documentElement.lang !== locale)) { return result; @@ -30,8 +32,8 @@ export default class CustomHeaderLinks extends Component { result.push({ device: `headerLink--${device}`, - hideOnScroll: `headerLink--${hideOnScroll}`, - locale: locale ? `headerLink--${locale}` : null, + keepOnScroll: `headerLink--${keepOnScroll}`, + locale: `headerLink--${locale}`, linkClass, anchorAttributes, linkText, diff --git a/locales/en.yml b/locales/en.yml index 503e7c2..44c20e2 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -1,36 +1,5 @@ en: theme_metadata: settings: + custom_header_links: "Comma delimited in this order: link text, link title, URL, view, target, hide on scroll
    Link text: The text for the link
    Link title: the text that shows when the link is hovered
    URL: The path for the link (can be relative)
    View: vdm = desktop and mobile, vdo = desktop only, vmo = mobile only
    Target: blank = opens in a new tab, self = opens in the same tab
    Hide on scroll: remove = hides the link when the title is expanded on topic pages keep = keeps the link visible even when the title is visible on topic pages
    Language: blank = no locale assoaciated to the link, else insert a locale code (en, fr, de, ...)" links_position: "Note that when links are displayed on the left, they're automatically hidden while scrolling within topics to make room for the title" - custom_header_links: - description: Custom links to be displayed in the header - schema: - properties: - text: - label: Text - description: The text for the link - title: - label: Title - description: The title attribute for the link - url: - label: URL - description: The URL for the link - view: - label: View - description: | - vdm = desktop and mobile - vdo = desktop only - vmo = mobile only - target: - label: Target - description: | - blank = opens in a new tab - self = opens in the same tab - hide_on_scroll: - label: Hide on scroll - description: | - remove = hides the link when the title is expanded on topic pages - keep = keeps the link visible even when the title is visible on topic pages - locale: - label: Locale - description: The locale in which the link should be displayed on. The link will be displayed on all locales if left blank. diff --git a/migrations/settings/0002-migrate-custom-header-links.js b/migrations/settings/0002-migrate-custom-header-links.js deleted file mode 100644 index ba7ecad..0000000 --- a/migrations/settings/0002-migrate-custom-header-links.js +++ /dev/null @@ -1,33 +0,0 @@ -export default function migrate(settings) { - const oldSetting = settings.get("custom_header_links"); - - if (oldSetting) { - const newSetting = oldSetting.split("|").map((link) => { - const [text, title, url, view, target, hide_on_scroll, locale] = link - .split(",") - .map((s) => s.trim()); - - const newLink = { - text, - title, - url, - view, - target, - hide_on_scroll, - locale, - }; - - Object.keys(newLink).forEach((key) => { - if (newLink[key] === undefined) { - delete newLink[key]; - } - }); - - return newLink; - }); - - settings.set("custom_header_links", newSetting); - } - - return settings; -} diff --git a/settings.yml b/settings.yml index 71b6ddc..08f0128 100644 --- a/settings.yml +++ b/settings.yml @@ -1,65 +1,7 @@ custom_header_links: - type: objects - default: - - text: "External link" - title: "This link will open in a new tab" - url: "https://meta.discourse.org" - view: "vdo" - target: "blank" - hide_on_scroll: "remove" - - text: "Most Liked" - title: "Posts with the most amount of likes" - url: "/latest/?order=op_likes" - view: "vdo" - target: "self" - hide_on_scroll: "keep" - - text: "Privacy" - title: "Our Privacy Policy" - url: "/privacy" - view: "vdm" - target: "self" - hide_on_scroll: "keep" - schema: - name: "link" - properties: - text: - type: string - required: true - validations: - min_length: 1 - max_length: 100 - title: - type: string - required: true - validations: - min_length: 1 - max_length: 1000 - url: - type: string - required: true - validations: - min_length: 1 - max_length: 2048 - url: true - view: - type: enum - choices: - - vdm - - vdo - - vmo - target: - type: enum - choices: - - blank - - self - hide_on_scroll: - type: enum - choices: - - remove - - keep - default: keep - locale: - type: string + type: list + list_type: simple + default: "External link, this link will open in a new tab, https://meta.discourse.org, vdo, blank, remove|Most Liked, Posts with the most amount of likes, /latest/?order=op_likes, vdo, self, keep|Privacy, Our Privacy Policy, /privacy, vdm, self, keep" links_position: default: right diff --git a/spec/system/viewing_custom_header_links_spec.rb b/spec/system/viewing_custom_header_links_spec.rb index 857f3b7..96eb589 100644 --- a/spec/system/viewing_custom_header_links_spec.rb +++ b/spec/system/viewing_custom_header_links_spec.rb @@ -9,7 +9,8 @@ RSpec.describe "Viewing Custom Header Links", system: true do context "when glimmer headers are enabled" do before do if SiteSetting.respond_to?(:experimental_glimmer_header_groups) - SiteSetting.experimental_glimmer_header_groups = Group::AUTO_GROUPS[:everyone] + SiteSetting.experimental_glimmer_header_groups = + Group::AUTO_GROUPS[:everyone] else SiteSetting.glimmer_header_mode = "enabled" end @@ -23,19 +24,19 @@ RSpec.describe "Viewing Custom Header Links", system: true do expect(custom_header_link).to have_custom_header_link( "External link", href: "https://meta.discourse.org", - title: "This link will open in a new tab", + title: "this link will open in a new tab" ) expect(custom_header_link).to have_custom_header_link( "Most Liked", href: "/latest/?order=op_likes", - title: "Posts with the most amount of likes", + title: "Posts with the most amount of likes" ) expect(custom_header_link).to have_custom_header_link( "Privacy", href: "/privacy", - title: "Our Privacy Policy", + title: "Our Privacy Policy" ) end end @@ -43,7 +44,8 @@ RSpec.describe "Viewing Custom Header Links", system: true do context "when glimmer headers are disabled" do before do if SiteSetting.respond_to?(:experimental_glimmer_header_groups) - SiteSetting.experimental_glimmer_header_groups = nil + SiteSetting.experimental_glimmer_header_groups = + nil else SiteSetting.glimmer_header_mode = "disabled" end @@ -57,19 +59,19 @@ RSpec.describe "Viewing Custom Header Links", system: true do expect(custom_header_link).to have_custom_header_link( "External link", href: "https://meta.discourse.org", - title: "This link will open in a new tab", + title: "this link will open in a new tab" ) expect(custom_header_link).to have_custom_header_link( "Most Liked", href: "/latest/?order=op_likes", - title: "Posts with the most amount of likes", + title: "Posts with the most amount of likes" ) expect(custom_header_link).to have_custom_header_link( "Privacy", href: "/privacy", - title: "Our Privacy Policy", + title: "Our Privacy Policy" ) end end diff --git a/test/unit/migrations/settings/0002-migrate-custom-header-links-test.js b/test/unit/migrations/settings/0002-migrate-custom-header-links-test.js deleted file mode 100644 index 0a02b99..0000000 --- a/test/unit/migrations/settings/0002-migrate-custom-header-links-test.js +++ /dev/null @@ -1,52 +0,0 @@ -import { module, test } from "qunit"; -import migrate from "../../../../migrations/settings/0002-migrate-custom-header-links"; - -module( - "Unit | Migrations | Settings | 0002-migrate-custom-header-links", - function () { - test("migrate", function (assert) { - const settings = new Map( - Object.entries({ - custom_header_links: - "External link, this link will open in a new tab, https://meta.discourse.org, vdo, blank, remove|Most Liked, Posts with the most amount of likes, /latest/?order=op_likes, vdo, self, keep|Privacy, Our Privacy Policy, /privacy, vdm, self, keep, en", - }) - ); - - const result = migrate(settings); - - const expectedResult = new Map( - Object.entries({ - custom_header_links: [ - { - text: "External link", - title: "this link will open in a new tab", - url: "https://meta.discourse.org", - view: "vdo", - target: "blank", - hide_on_scroll: "remove", - }, - { - text: "Most Liked", - title: "Posts with the most amount of likes", - url: "/latest/?order=op_likes", - view: "vdo", - target: "self", - hide_on_scroll: "keep", - }, - { - text: "Privacy", - title: "Our Privacy Policy", - url: "/privacy", - view: "vdm", - target: "self", - hide_on_scroll: "keep", - locale: "en", - }, - ], - }) - ); - - assert.deepEqual(Array.from(result), Array.from(expectedResult)); - }); - } -);