UX: Changes in top categories of hamburger menu (#6200)

This commit is contained in:
Vinoth Kannan 2018-07-30 14:13:00 +05:30 committed by GitHub
parent acde8d4323
commit 78d91b1daf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 39 additions and 49 deletions

View File

@ -51,14 +51,15 @@ export default createWidget("hamburger-categories", {
html(attrs) {
const href = Discourse.getURL("/categories");
let title = I18n.t("filters.categories.title");
if (attrs.moreCount > 0) {
title += I18n.t("categories.more", { count: attrs.moreCount });
}
let result = [
h(
"li.heading",
h(
"a.d-link.categories-link",
{ attributes: { href } },
I18n.t("filters.categories.title")
)
h("a.d-link.categories-link", { attributes: { href } }, title)
)
];
@ -70,19 +71,6 @@ export default createWidget("hamburger-categories", {
categories.map(c => this.attach("hamburger-category", c))
);
if (attrs.showMore) {
result = result.concat(
h(
"li.footer",
h(
"a.d-link.more-link",
{ attributes: { href } },
I18n.t("categories.more")
)
)
);
}
return result;
}
});

View File

@ -176,28 +176,28 @@ export default createWidget("hamburger-menu", {
},
listCategories() {
const maxCategoriesToDisplay = 6;
const maxCategoriesToDisplay = this.siteSettings
.hamburger_menu_categories_count;
const categoriesList = this.site.get("categoriesByCount");
let categories = [];
let showMore = categoriesList.length > maxCategoriesToDisplay;
let categories = categoriesList.slice();
if (this.currentUser) {
let categoryIds = this.currentUser.get("top_category_ids") || [];
categoryIds = categoryIds.concat(categoriesList.map(c => c.id)).uniq();
showMore = categoryIds.length > maxCategoriesToDisplay;
categoryIds = categoryIds.slice(0, maxCategoriesToDisplay);
categories = categoryIds.map(id => {
return categoriesList.find(c => c.id === id);
let i = 0;
categoryIds.forEach(id => {
const category = categories.find(c => c.id === id);
if (category) {
categories = categories.filter(c => c.id !== id);
categories.splice(i, 0, category);
i += 1;
}
});
categories = categories.filter(c => c);
} else {
showMore = categoriesList.length > maxCategoriesToDisplay;
categories = categoriesList.slice(0, maxCategoriesToDisplay);
}
return this.attach("hamburger-categories", { categories, showMore });
const moreCount = categories.length - maxCategoriesToDisplay;
categories = categories.slice(0, maxCategoriesToDisplay);
return this.attach("hamburger-categories", { categories, moreCount });
},
footerLinks(prioritizeFaq, faqUrl) {

View File

@ -108,14 +108,6 @@
}
}
.category-links {
.footer {
clear: both;
display: block;
padding: 0.25em 0.5em;
}
}
// note these topic counts only appear for anons in the category hamburger drop down
b.topics-count {
color: dark-light-choose($primary-medium, $secondary-medium);

View File

@ -2,8 +2,6 @@ require_dependency 'new_post_manager'
class CurrentUserSerializer < BasicUserSerializer
MAX_TOP_CATEGORIES_COUNT = 6.freeze
attributes :name,
:unread_notifications,
:unread_private_messages,
@ -169,7 +167,7 @@ class CurrentUserSerializer < BasicUserSerializer
WHEN notification_level = 4 THEN 3
END")
.pluck(:category_id)
.slice(0, MAX_TOP_CATEGORIES_COUNT)
.slice(0, SiteSetting.hamburger_menu_categories_count)
end
def dismissed_banner_key

View File

@ -571,7 +571,7 @@ en:
topic_stat_sentence:
one: "%{count} new topic in the past %{unit}."
other: "%{count} new topics in the past %{unit}."
more: "more"
more: " (%{count} more) ..."
ip_lookup:
title: IP Address Lookup

View File

@ -1655,6 +1655,8 @@ en:
suppress_uncategorized_badge: "Don't show the badge for uncategorized topics in topic lists."
hamburger_menu_categories_count: "How many categories can be displayed in the hamburger menu."
permalink_normalizations: "Apply the following regex before matching permalinks, for example: /(topic.*)\\?.*/\\1 will strip query strings from topic routes. Format is regex+string use \\1 etc. to access captures"
global_notice: "Display an URGENT, EMERGENCY global banner notice to all visitors, change to blank to hide it (HTML allowed)."

View File

@ -1415,6 +1415,10 @@ uncategorized:
client: true
default: true
hamburger_menu_categories_count:
client: true
default: 8
slug_generation_method:
default: 'ascii'
enum: 'SlugSetting'

View File

@ -2,7 +2,6 @@ import { moduleForWidget, widgetTest } from "helpers/widget-test";
moduleForWidget("hamburger-menu");
const maxCategoriesToDisplay = 6;
const topCategoryIds = [2, 3, 1];
widgetTest("prioritize faq", {
@ -128,10 +127,17 @@ widgetTest("general links", {
}
});
let maxCategoriesToDisplay;
widgetTest("top categories - anonymous", {
template: '{{mount-widget widget="hamburger-menu"}}',
anonymous: true,
beforeEach() {
this.siteSettings.hamburger_menu_categories_count = 8;
maxCategoriesToDisplay = this.siteSettings.hamburger_menu_categories_count;
},
test(assert) {
const count = this.site.get("categoriesByCount").length;
const maximum =
@ -144,15 +150,15 @@ widgetTest("top categories", {
template: '{{mount-widget widget="hamburger-menu"}}',
beforeEach() {
this.siteSettings.hamburger_menu_categories_count = 8;
maxCategoriesToDisplay = this.siteSettings.hamburger_menu_categories_count;
this.currentUser.set("top_category_ids", topCategoryIds);
},
test(assert) {
assert.equal(find(".category-link").length, maxCategoriesToDisplay);
const categoriesList = this.site
.get("categoriesByCount")
.reject(c => c.parent_category_id);
const categoriesList = this.site.get("categoriesByCount");
let ids = topCategoryIds
.concat(categoriesList.map(c => c.id))
.uniq()