FEATURE: show tags in crawler view of tags page for static site

FEATURE: show tags in crawler view of tags page for static site

Previously tags page would have an empty page in crawler view

diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb
index bd381bd..b45e5e2 100644
--- a/app/controllers/tags_controller.rb
+++ b/app/controllers/tags_controller.rb
@@ -27,44 +27,45 @@ class TagsController < ::ApplicationController
     @description_meta = I18n.t("tags.title")
     @title = @description_meta
 
-    respond_to do |format|
+    show_all_tags = guardian.can_admin_tags? && guardian.is_admin?
 
-      format.html do
-        render :index
+    if SiteSetting.tags_listed_by_group
+      ungrouped_tags = Tag.where("tags.id NOT IN (SELECT tag_id FROM tag_group_memberships)")
+      ungrouped_tags = ungrouped_tags.where("tags.topic_count > 0") unless show_all_tags
+
+      grouped_tag_counts = TagGroup.visible(guardian).order('name ASC').includes(:tags).map do |tag_group|
+        { id: tag_group.id, name: tag_group.name, tags: self.class.tag_counts_json(tag_group.tags) }
       end
 
-      format.json do
-        show_all_tags = guardian.can_admin_tags? && guardian.is_admin?
+      @tags = self.class.tag_counts_json(ungrouped_tags)
+      @extras = { tag_groups: grouped_tag_counts }
+    else
+      tags = show_all_tags ? Tag.all : Tag.where("tags.topic_count > 0")
+      unrestricted_tags = DiscourseTagging.filter_visible(tags, guardian)
 
-        if SiteSetting.tags_listed_by_group
-          ungrouped_tags = Tag.where("tags.id NOT IN (SELECT tag_id FROM tag_group_memberships)")
-          ungrouped_tags = ungrouped_tags.where("tags.topic_count > 0") unless show_all_tags
+      categories = Category.where("id IN (SELECT category_id FROM category_tags)")
+        .where("id IN (?)", guardian.allowed_category_ids)
+        .includes(:tags)
 
-          grouped_tag_counts = TagGroup.visible(guardian).order('name ASC').includes(:tags).map do |tag_group|
-            { id: tag_group.id, name: tag_group.name, tags: self.class.tag_counts_json(tag_group.tags) }
-          end
+      category_tag_counts = categories.map do |c|
+        { id: c.id, tags: self.class.tag_counts_json(c.tags) }
+      end
 
-          render json: {
-            tags: self.class.tag_counts_json(ungrouped_tags),
-            extras: { tag_groups: grouped_tag_counts }
-          }
-        else
-          tags = show_all_tags ? Tag.all : Tag.where("tags.topic_count > 0")
-          unrestricted_tags = DiscourseTagging.filter_visible(tags, guardian)
+      @tags = self.class.tag_counts_json(unrestricted_tags)
+      @extras = { categories: category_tag_counts }
+    end
 
-          categories = Category.where("id IN (SELECT category_id FROM category_tags)")
-            .where("id IN (?)", guardian.allowed_category_ids)
-            .includes(:tags)
+    respond_to do |format|
 
-          category_tag_counts = categories.map do |c|
-            { id: c.id, tags: self.class.tag_counts_json(c.tags) }
-          end
+      format.html do
+        render :index
+      end
 
-          render json: {
-            tags: self.class.tag_counts_json(unrestricted_tags),
-            extras: { categories: category_tag_counts }
-          }
-        end
+      format.json do
+        render json: {
+          tags: @tags,
+          extras: @extras
+        }
       end
     end
   end
diff --git a/app/views/tags/_tag.html.erb b/app/views/tags/_tag.html.erb
new file mode 100644
index 0000000..b8258f9
--- /dev/null
+++ b/app/views/tags/_tag.html.erb
@@ -0,0 +1,6 @@
+<div class="tag-box">
+  <a href="<%= Discourse.base_url %>/tags/<%= tag[:id] %>" class="discourse-tag simple"><%= tag[:text] %></a>
+  <% if tag[:count] && tag[:count] > 0 %>
+    <span class="tag-count">x <%= tag[:count] %></span>
+  <% end %>
+</div>
diff --git a/app/views/tags/index.html.erb b/app/views/tags/index.html.erb
index cc250d4..823b146 100644
--- a/app/views/tags/index.html.erb
+++ b/app/views/tags/index.html.erb
@@ -1,3 +1,45 @@
 <% content_for :head do %>
   <%= raw crawlable_meta_data(title: @title, description: @description_meta) %>
 <% end %>
+
+<div class="tag-crawler">
+
+  <% if @extras[:categories] %>
+    <% @extras[:categories].each do |category| %>
+      <div class="tag-list">
+        <% if category[:name] %>
+          <h3><%= category[:name] %></h3>
+        <% end %>
+        <% category[:tags].each do |tag| %>
+          <%= render "tag", tag: tag %>
+        <% end %>
+      </div>
+      <div class="clearfix"></div>
+    <% end %>
+  <% end %>
+
+  <% if @extras[:tag_groups] %>
+    <% @extras[:tag_groups].each do |tag_group| %>
+      <div class="tag-list">
+        <% if tag_group[:name] %>
+          <h3><%= tag_group[:name] %></h3>
+        <% end %>
+        <% tag_group[:tags].each do |tag| %>
+          <%= render "tag", tag: tag %>
+        <% end %>
+      </div>
+      <div class="clearfix"></div>
+    <% end %>
+  <% end %>
+
+  <% if @tags.present? %>
+    <div class="tag-list">
+      <h3><%= t 'js.tagging.other_tags' %></h3>
+      <% @tags.each do |tag| %>
+        <%= render "tag", tag: tag %>
+      <% end %>
+    </div>
+    <div class="clearfix"></div>
+  <% end %>
+
+</div>

GitHub sha: b510006c

1 Like