diff --git a/app/assets/javascripts/discourse/components/post-gutter.js b/app/assets/javascripts/discourse/components/post-gutter.js
new file mode 100644
index 000000000..23cac6dd1
--- /dev/null
+++ b/app/assets/javascripts/discourse/components/post-gutter.js
@@ -0,0 +1,73 @@
+var MAX_SHOWN = 5;
+
+Discourse.PostGutterComponent = Em.Component.extend({
+ classNameBindings: [':span5', ':gutter'],
+
+ // Roll up links to avoid duplicates
+ collapsed: function() {
+ var seen = {},
+ result = [],
+ links = this.get('links');
+
+ if (!Em.isEmpty(links)) {
+ links.forEach(function(l) {
+ var title = Em.get(l, 'title');
+ if (!seen[title]) {
+ result.pushObject(l);
+ seen[title] = true;
+ }
+ });
+ }
+ return result;
+ }.property('links'),
+
+ render: function(buffer) {
+ var links = this.get('collapsed'),
+ toRender = links,
+ collapsed = !this.get('expanded');
+
+ if (!Em.isEmpty(links)) {
+ if (collapsed) {
+ toRender = toRender.slice(0, MAX_SHOWN);
+ }
+
+ buffer.push("
");
+ toRender.forEach(function(l) {
+ var direction = Em.get(l, 'reflection') ? 'left' : 'right',
+ clicks = Em.get(l, 'clicks');
+
+ buffer.push("- ");
+ buffer.push("");
+ buffer.push(Em.get(l, 'title'));
+ if (clicks) {
+ buffer.push("" + clicks + "");
+ }
+ buffer.push("
");
+ });
+
+ if (collapsed) {
+ var remaining = links.length - MAX_SHOWN;
+ if (remaining > 0) {
+ buffer.push("- " + I18n.t('post.more_links', {count: remaining}) + "
");
+ }
+ }
+ buffer.push('
');
+ }
+
+ if ((links.length <= MAX_SHOWN || !collapsed) && this.get('canReplyAsNewTopic')) {
+ buffer.push("" + I18n.t('post.reply_as_new_topic') + "");
+ }
+ },
+
+ _rerenderIfNeeded: function() {
+ this.rerender();
+ }.observes('expanded'),
+
+ click: function(e) {
+ if ($(e.target).hasClass('toggle-more')) {
+ this.toggleProperty('expanded');
+ return false;
+ }
+ return true;
+ }
+});
diff --git a/app/assets/javascripts/discourse/components/post-links.js b/app/assets/javascripts/discourse/components/post-links.js
deleted file mode 100644
index 4d79db278..000000000
--- a/app/assets/javascripts/discourse/components/post-links.js
+++ /dev/null
@@ -1,49 +0,0 @@
-var MAX_SHOWN = 5;
-
-Discourse.PostLinksComponent = Em.Component.extend({
- tagName: 'ul',
- classNameBindings: [':post-links'],
-
- render: function(buffer) {
- var links = this.get('links'),
- toRender = links;
-
- if (Em.isEmpty(links)) { return; }
-
- if (!this.get('expanded')) {
- toRender = toRender.slice(0, MAX_SHOWN);
- }
-
- toRender.forEach(function(l) {
- var direction = Em.get(l, 'reflection') ? 'left' : 'right',
- clicks = Em.get(l, 'clicks');
-
- buffer.push("");
- buffer.push("");
- buffer.push(Em.get(l, 'title'));
- if (clicks) {
- buffer.push("" + clicks + "");
- }
- buffer.push("");
- });
-
- if (!this.get('expanded')) {
- var remaining = links.length - MAX_SHOWN;
- if (remaining > 0) {
- buffer.push("" + I18n.t('post.more_links', {count: remaining}) + "");
- }
- }
- },
-
- _rerenderIfNeeded: function() {
- this.rerender();
- }.observes('expanded'),
-
- click: function(e) {
- if ($(e.target).hasClass('toggle-more')) {
- this.toggleProperty('expanded');
- return false;
- }
- return true;
- }
-});
diff --git a/app/assets/javascripts/discourse/templates/post.js.handlebars b/app/assets/javascripts/discourse/templates/post.js.handlebars
index 4cbcc7279..9dc33fb66 100644
--- a/app/assets/javascripts/discourse/templates/post.js.handlebars
+++ b/app/assets/javascripts/discourse/templates/post.js.handlebars
@@ -92,12 +92,7 @@
{{view Discourse.TopicMapContainerView post=this topic=controller.model}}
-
+ {{post-gutter links=internalLinks canReplyAsNewTopic=topic.details.can_reply_as_new_topic}}