diff --git a/app/assets/javascripts/discourse/components/hamburger-category.js.es6 b/app/assets/javascripts/discourse/components/hamburger-category.js.es6 deleted file mode 100644 index 63b08fd70ee..00000000000 --- a/app/assets/javascripts/discourse/components/hamburger-category.js.es6 +++ /dev/null @@ -1,13 +0,0 @@ -import computed from 'ember-addons/ember-computed-decorators'; - -export default Ember.Component.extend({ - tagName: 'li', - classNames: ['category-link'], - - @computed('category.unreadTopics', 'category.newTopics') - unreadTotal(unreadTopics, newTopics) { - return parseInt(unreadTopics, 10) + parseInt(newTopics, 10); - }, - - showTopicCount: Ember.computed.not('currentUser') -}); diff --git a/app/assets/javascripts/discourse/templates/components/hamburger-category.hbs b/app/assets/javascripts/discourse/templates/components/hamburger-category.hbs deleted file mode 100644 index 9204b3d42d9..00000000000 --- a/app/assets/javascripts/discourse/templates/components/hamburger-category.hbs +++ /dev/null @@ -1,9 +0,0 @@ -{{category-link category allowUncategorized="true"}} - -{{#if unreadTotal}} - {{unreadTotal}} -{{/if}} - -{{#if showTopicCount}} - {{category.topic_count}} -{{/if}} diff --git a/app/assets/javascripts/discourse/templates/components/hamburger-menu.hbs b/app/assets/javascripts/discourse/templates/components/hamburger-menu.hbs index 6c3640a6c79..f0bc9397ab0 100644 --- a/app/assets/javascripts/discourse/templates/components/hamburger-menu.hbs +++ b/app/assets/javascripts/discourse/templates/components/hamburger-menu.hbs @@ -74,19 +74,7 @@ {{plugin-outlet "site-map-links-last"}} {{/menu-links}} - {{#if categories}} - - {{/if}} + {{mount-widget widget='hamburger-categories' args=(as-hash categories=categories)}}
{{#menu-links omitRule="true"}} diff --git a/app/assets/javascripts/discourse/widgets/category-link.js.es6 b/app/assets/javascripts/discourse/widgets/category-link.js.es6 new file mode 100644 index 00000000000..509f531f8af --- /dev/null +++ b/app/assets/javascripts/discourse/widgets/category-link.js.es6 @@ -0,0 +1,10 @@ +import RawHtml from 'discourse/widgets/raw-html'; +import { categoryBadgeHTML } from 'discourse/helpers/category-link'; + +// Right now it's RawHTML. Eventually it should emit nodes +export default class CategoryLink extends RawHtml { + constructor(attrs) { + attrs.html = categoryBadgeHTML(attrs.category, attrs); + super(attrs); + } +}; diff --git a/app/assets/javascripts/discourse/widgets/hamburger-categories.js.es6 b/app/assets/javascripts/discourse/widgets/hamburger-categories.js.es6 new file mode 100644 index 00000000000..cb86752c36f --- /dev/null +++ b/app/assets/javascripts/discourse/widgets/hamburger-categories.js.es6 @@ -0,0 +1,36 @@ +import { createWidget } from 'discourse/widgets/widget'; +import { h } from 'virtual-dom'; + +createWidget('hamburger-category', { + tagName: 'li.category-link', + + html(c) { + const results = [ this.attach('category_link', { category: c, allowUncategorized: true }) ]; + + const unreadTotal = parseInt(c.get('unreadTopics'), 10) + parseInt(c.get('newTopics'), 10); + if (unreadTotal) { + results.push(h('a.badge.badge-notification', { attributes: { href: c.get('url') } }, unreadTotal.toString())); + } + + if (!this.currentUser) { + results.push(h('b.topics-count', c.get('topic_count').toString())); + } + + return results; + } +}); + +export default createWidget('hamburger-categories', { + tagName: 'ul.category-links.clearfix', + + html(attrs) { + const href = Discourse.getURL('/categories'); + const result = [h('li.heading', + h('a.d-link.categories-link', { attributes: { href } }, I18n.t('filters.categories.title')) + )]; + + const categories = attrs.categories; + if (categories.length === 0) { return; } + return result.concat(categories.map(c => this.attach('hamburger-category', c))); + } +});