From 9bce91f59f468da1f42a91afe88387cb0ab60899 Mon Sep 17 00:00:00 2001 From: Mark VanLandingham Date: Tue, 12 May 2020 09:41:16 -0500 Subject: [PATCH] DEV: Allow plugins to add extra icons to category-link (#9743) --- .../discourse/app/helpers/category-link.js | 19 ++++++++++++++----- .../discourse/app/lib/plugin-api.js | 17 +++++++++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/app/assets/javascripts/discourse/app/helpers/category-link.js b/app/assets/javascripts/discourse/app/helpers/category-link.js index 7f566b576fa..2f4699b18cd 100644 --- a/app/assets/javascripts/discourse/app/helpers/category-link.js +++ b/app/assets/javascripts/discourse/app/helpers/category-link.js @@ -18,6 +18,12 @@ function categoryStripe(color, classes) { return ""; } +let _extraIconRenderers = []; + +export function addExtraIconRenderer(renderer) { + _extraIconRenderers.push(renderer); +} + /** Generates category badge HTML @@ -149,12 +155,15 @@ function defaultCategoryLinkRenderer(category, opts) { } if (restricted) { - html += `${iconHTML( - "lock" - )}${categoryName}`; - } else { - html += `${categoryName}`; + html += iconHTML("lock"); } + _extraIconRenderers.forEach(renderer => { + const iconName = renderer(category); + if (iconName) { + html += iconHTML(iconName); + } + }); + html += `${categoryName}`; html += ""; if (opts.topicCount && categoryStyle !== "box") { diff --git a/app/assets/javascripts/discourse/app/lib/plugin-api.js b/app/assets/javascripts/discourse/app/lib/plugin-api.js index 06cecc25ad5..a10e183bf22 100644 --- a/app/assets/javascripts/discourse/app/lib/plugin-api.js +++ b/app/assets/javascripts/discourse/app/lib/plugin-api.js @@ -48,6 +48,7 @@ import { addComposerUploadMarkdownResolver } from "discourse/components/composer-editor"; import { addCategorySortCriteria } from "discourse/components/edit-category-settings"; +import { addExtraIconRenderer } from "discourse/helpers/category-link"; import { queryRegistry } from "discourse/widgets/widget"; import Composer from "discourse/models/composer"; import { on } from "@ember/object/evented"; @@ -1065,6 +1066,22 @@ class PluginApi { decorateTopicTitle(callback) { addTopicTitleDecorator(callback); } + + /** + * Allows adding icons to the category-link html + * + * ``` + * api.addCategoryLinkIcon((category) => { + * if (category.someProperty) { + return "eye" + } + * }); + * ``` + * + **/ + addCategoryLinkIcon(renderer) { + addExtraIconRenderer(renderer); + } } let _pluginv01;