From c649959e34aa230de66b6699caf1ca063ea5b4d1 Mon Sep 17 00:00:00 2001
From: Neil Lalonde <neillalonde@gmail.com>
Date: Wed, 19 Mar 2014 16:04:53 -0400
Subject: [PATCH] Show parent category on category badges

---
 .../discourse/helpers/application_helpers.js  |  3 +++
 app/assets/javascripts/discourse/lib/html.js  | 12 +++++++++++-
 .../components/basic-topic-list.js.handlebars |  2 +-
 .../list/topic_list_item.js.handlebars        |  2 +-
 .../components/basic-topic-list.js.handlebars |  2 +-
 .../mobile/list/topic_list_item.js.handlebars |  2 +-
 .../common/components/badges.css.scss         | 19 ++++++++++++++++---
 app/assets/stylesheets/mobile/topic-post.scss |  2 +-
 8 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/app/assets/javascripts/discourse/helpers/application_helpers.js b/app/assets/javascripts/discourse/helpers/application_helpers.js
index 90f2858b2..1c37e8431 100644
--- a/app/assets/javascripts/discourse/helpers/application_helpers.js
+++ b/app/assets/javascripts/discourse/helpers/application_helpers.js
@@ -79,6 +79,9 @@ function categoryLinkHTML(category, options) {
     if (options.hash.allowUncategorized) {
       categoryOptions.allowUncategorized = true;
     }
+    if (options.hash.showParent) {
+      categoryOptions.showParent = true;
+    }
     if (options.hash.categories) {
       categoryOptions.categories = Em.Handlebars.get(this, options.hash.categories, options);
     }
diff --git a/app/assets/javascripts/discourse/lib/html.js b/app/assets/javascripts/discourse/lib/html.js
index a47dd63ed..6663f6731 100644
--- a/app/assets/javascripts/discourse/lib/html.js
+++ b/app/assets/javascripts/discourse/lib/html.js
@@ -83,7 +83,8 @@ Discourse.HTML = {
     var name = Em.get(category, 'name'),
         description = Em.get(category, 'description'),
         restricted = Em.get(category, 'read_restricted'),
-        html = "<a href=\"" + Discourse.getURL("/category/") + Discourse.Category.slugFor(category) + "\" ";
+        url = Discourse.getURL("/category/") + Discourse.Category.slugFor(category),
+        html = "<a href=\"" + url + "\" ";
 
     html += "data-drop-close=\"true\" class=\"badge-category" + (restricted ? ' restricted' : '' ) + "\" ";
 
@@ -101,6 +102,15 @@ Discourse.HTML = {
       html += ">" + name + "</a>";
     }
 
+    if (opts.showParent && category.get('parent_category_id')) {
+      var parent = Discourse.Category.findById(category.get('parent_category_id'));
+      html = "<a class='badge-category-parent' style=\"" + (Discourse.HTML.categoryStyle(parent)||'') +
+             "\" href=\"" + url + "\"><span class='category-name'>" +
+             (Em.get(parent, 'read_restricted') ? "<i class='fa fa-group'></i> " : "") +
+             Em.get(parent, 'name') + "</span></a>" +
+             html;
+    }
+
     return html;
   }
 
diff --git a/app/assets/javascripts/discourse/templates/components/basic-topic-list.js.handlebars b/app/assets/javascripts/discourse/templates/components/basic-topic-list.js.handlebars
index b099a8691..1208e1a2d 100644
--- a/app/assets/javascripts/discourse/templates/components/basic-topic-list.js.handlebars
+++ b/app/assets/javascripts/discourse/templates/components/basic-topic-list.js.handlebars
@@ -42,7 +42,7 @@
 
           {{#unless controller.hideCategory}}
           <td class="category">
-            {{categoryLink topic.category}}
+            {{categoryLink topic.category showParent=true}}
           </td>
           {{/unless}}
 
diff --git a/app/assets/javascripts/discourse/templates/list/topic_list_item.js.handlebars b/app/assets/javascripts/discourse/templates/list/topic_list_item.js.handlebars
index 0be03104f..2b292d26b 100644
--- a/app/assets/javascripts/discourse/templates/list/topic_list_item.js.handlebars
+++ b/app/assets/javascripts/discourse/templates/list/topic_list_item.js.handlebars
@@ -37,7 +37,7 @@
 </td>
 
 {{#unless hideCategory}}
-<td class='category'>{{boundCategoryLink category}}</td>
+<td class='category'>{{boundCategoryLink category showParent=true}}</td>
 {{/unless}}
 
 <td class='posters'>
diff --git a/app/assets/javascripts/discourse/templates/mobile/components/basic-topic-list.js.handlebars b/app/assets/javascripts/discourse/templates/mobile/components/basic-topic-list.js.handlebars
index 668e0140c..7e10d90e6 100644
--- a/app/assets/javascripts/discourse/templates/mobile/components/basic-topic-list.js.handlebars
+++ b/app/assets/javascripts/discourse/templates/mobile/components/basic-topic-list.js.handlebars
@@ -30,7 +30,7 @@
             </div>
             <div class="topic-item-stats clearfix">
               <div class='category'>
-                {{categoryLink category}}
+                {{categoryLink category showParent=true}}
               </div>
               <div class="pull-right">
                 <div class='num posts'>
diff --git a/app/assets/javascripts/discourse/templates/mobile/list/topic_list_item.js.handlebars b/app/assets/javascripts/discourse/templates/mobile/list/topic_list_item.js.handlebars
index 71d2f2679..c687296bd 100644
--- a/app/assets/javascripts/discourse/templates/mobile/list/topic_list_item.js.handlebars
+++ b/app/assets/javascripts/discourse/templates/mobile/list/topic_list_item.js.handlebars
@@ -28,7 +28,7 @@
 <div class="topic-item-stats clearfix">
   {{#unless controller.hideCategory}}
     <div class='category'>
-      {{categoryLink category}}
+      {{categoryLink category showParent=true}}
     </div>
   {{/unless}}
 
diff --git a/app/assets/stylesheets/common/components/badges.css.scss b/app/assets/stylesheets/common/components/badges.css.scss
index a989ec74d..35a806286 100644
--- a/app/assets/stylesheets/common/components/badges.css.scss
+++ b/app/assets/stylesheets/common/components/badges.css.scss
@@ -18,18 +18,31 @@
 // Category badge
 // --------------------------------------------------
 
-.badge-category {
-  padding: 6px;
-  color: $tertiary_text_color;
+.badge-category, .badge-category-parent {
   font-size: 12px;
   font-weight: bold;
   white-space: nowrap;
   display: inline-block;
   line-height: 1;
+}
+
+.badge-category {
+  padding: 6px;
+  color: $tertiary_text_color;
   &[href] {
   color: $tertiary_text_color;
   }
+}
 
+.badge-category-parent {
+  padding: 6px 2px;
+  width: 2px;
+  .category-name {
+    display: none;
+  }
+  &:before {
+    content: "\a0";
+  }
 }
 
 .d-dropdown .badge-category {
diff --git a/app/assets/stylesheets/mobile/topic-post.scss b/app/assets/stylesheets/mobile/topic-post.scss
index 70cdcd897..c08b74cb3 100644
--- a/app/assets/stylesheets/mobile/topic-post.scss
+++ b/app/assets/stylesheets/mobile/topic-post.scss
@@ -256,7 +256,7 @@ a.star {
     display: none;
     }
 
-   a.badge-category {
+   a.badge-category, a.badge-category-parent {
     font-size: 10px;
     }