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));
- });
- }
-);