From 2b483df566517d23319958c15bd0e505554fb24f Mon Sep 17 00:00:00 2001 From: Kris Date: Mon, 13 Nov 2023 10:46:33 -0500 Subject: [PATCH] REFACTOR: update for core badge style removal (#26) --- .discourse-compatibility | 2 +- common/common.scss | 29 ++++--- .../discourse/initializers/category-icons.js | 79 +++++++------------ 3 files changed, 48 insertions(+), 62 deletions(-) diff --git a/.discourse-compatibility b/.discourse-compatibility index 7d87347..2f04d7e 100644 --- a/.discourse-compatibility +++ b/.discourse-compatibility @@ -1,2 +1,2 @@ +< 3.2.0.beta4-dev: 7afb20ed5730b268b39fb922cb595d446bdc37bc 3.1.999: d6844589085e842d59be06dfcf98e315d172d114 - diff --git a/common/common.scss b/common/common.scss index 38e0162..7b0d506 100644 --- a/common/common.scss +++ b/common/common.scss @@ -1,20 +1,25 @@ -span.category-badge-icon { - display: inline-flex; - align-self: center; - .d-icon { - opacity: 1; - font-size: 1.3em; +.badge-category.--has-icon { + // hide default bullet when icon is set + &:before { + display: none; } } -.categories-list .category h3 .d-icon, -.badge-wrapper .badge-category .d-icon, -.select-kit .select-kit-header .selected-name .name .badge-wrapper .d-icon { - margin-right: 5px; - margin-left: 0px; +.badge-category__icon { + display: inline-flex; + align-self: center; + color: var(--category-badge-color); + .d-icon { + color: inherit; + font-size: var(--font-up-2); + } +} + +.categories-list .category h3 .d-icon { + margin-right: 0.25em; + margin-left: 0; } -.badge-wrapper.bullet span.category-badge-icon .d-icon, .categories-list .category .category-icon .d-icon { color: inherit; } diff --git a/javascripts/discourse/initializers/category-icons.js b/javascripts/discourse/initializers/category-icons.js index dfdaad2..863d4e9 100644 --- a/javascripts/discourse/initializers/category-icons.js +++ b/javascripts/discourse/initializers/category-icons.js @@ -32,11 +32,6 @@ export default { lockIcon, }); - function categoryStripe(color, classes) { - let style = color ? "style='background-color: #" + color + ";'" : ""; - return ""; - } - function getIconItem(categorySlug) { if (!categorySlug) { return; @@ -68,7 +63,7 @@ export default { function categoryIconsRenderer(category, opts) { let siteSettings = helperContext().siteSettings; - let description = get(category, "description_text"); + let descriptionText = get(category, "description_text"); let restricted = get(category, "read_restricted"); let url = opts.url ? opts.url @@ -77,57 +72,41 @@ export default { let tagName = opts.link === false || opts.link === "false" ? "span" : "a"; let extraClasses = opts.extraClasses ? " " + opts.extraClasses : ""; - let color = get(category, "color"); let html = ""; let parentCat = null; let categoryDir = ""; + let dataAttributes = category + ? `data-category-id="${get(category, "id")}"` + : ""; + + /// Add custom category icon from theme settings + let iconItem = getIconItem(category.slug); if (!opts.hideParent) { parentCat = Category.findById(get(category, "parent_category_id")); } - const categoryStyle = opts.categoryStyle || siteSettings.category_style; - if (categoryStyle !== "none") { - if (parentCat && parentCat !== category) { - html += categoryStripe( - get(parentCat, "color"), - "badge-category-parent-bg" - ); - } - html += categoryStripe(color, "badge-category-bg"); - } - - let classNames = "badge-category clear-badge"; + let classNames = `badge-category ${iconItem ? "--has-icon" : ""}`; if (restricted) { classNames += " restricted"; } - let style = ""; - if (categoryStyle === "box") { - style = `style="color: #${get(category, "text_color")};"`; + if (parentCat) { + classNames += ` --has-parent`; + dataAttributes += ` data-parent-category-id="${parentCat.id}"`; } - html += - `"; - - /// Add custom category icon from theme settings - let iconItem = getIconItem(category.slug); + html += ``; if (iconItem) { - let itemColor = iconItem[2] - ? iconItem[2].match(/categoryColo(u*)r/) - ? `style="color: #${color}"` - : `style="color: ${iconItem[2]}"` - : ""; + let itemColor = iconItem[2] ? `style="color: ${iconItem[2]}"` : ""; let itemIcon = iconItem[1] !== "" ? iconHTML(iconItem[1]) : ""; - html += `${itemIcon}`; + html += `${itemIcon}`; } /// End custom category icon @@ -140,9 +119,10 @@ export default { if (restricted) { html += iconHTML(lockIcon); } - html += `${categoryName}`; + html += `${categoryName}`; + html += ""; - if (opts.topicCount && categoryStyle !== "box") { + if (opts.topicCount) { html += buildTopicCount(opts.topicCount); } @@ -150,15 +130,16 @@ export default { href = ` href="${href}" `; } - extraClasses = categoryStyle - ? categoryStyle + extraClasses - : extraClasses; - let afterBadgeWrapper = ""; - if (opts.topicCount && categoryStyle === "box") { - afterBadgeWrapper += buildTopicCount(opts.topicCount); + + if (opts.plusSubcategories && opts.lastSubcategory) { + afterBadgeWrapper += ` + ${I18n.t("category_row.plus_subcategories", { + count: opts.plusSubcategories, + })} + `; } - return `<${tagName} class="badge-wrapper ${extraClasses}" ${href}>${html}${afterBadgeWrapper}`; + return `<${tagName} class="badge-category__wrapper ${extraClasses}" ${href}>${html}${afterBadgeWrapper}`; } api.replaceCategoryLinkRenderer(categoryIconsRenderer);