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("'); + } + + 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-links links=internalLinks}} - {{#if topic.details.can_reply_as_new_topic}} - {{i18n post.reply_as_new_topic}} - {{/if}} -
    + {{post-gutter links=internalLinks canReplyAsNewTopic=topic.details.can_reply_as_new_topic}}