diff --git a/app/controllers/embed_controller.rb b/app/controllers/embed_controller.rb index 49831758c..7cc2008c2 100644 --- a/app/controllers/embed_controller.rb +++ b/app/controllers/embed_controller.rb @@ -24,6 +24,20 @@ class EmbedController < ApplicationController discourse_expires_in 1.minute end + def count + + topic_embeds = TopicEmbed.where(embed_url: params[:embed_url]).includes(:topic).all + + by_url = {} + topic_embeds.each do |te| + by_url["#{te.embed_url}#discourse-comments"] = I18n.t('embed.replies', count: te.topic.posts_count - 1) + end + + respond_to do |format| + format.js { render json: {counts: by_url}, callback: params[:callback] } + end + end + private def ensure_embeddable diff --git a/config/routes.rb b/config/routes.rb index 8594520fb..7b26573a3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -243,6 +243,7 @@ Discourse::Application.routes.draw do get "topics/private-messages-unread/:username" => "list#private_messages_unread", as: "topics_private_messages_unread", constraints: {username: USERNAME_ROUTE_FORMAT} get 'embed/comments' => 'embed#comments' + get 'embed/count' => 'embed#count' # Topic routes get "t/:slug/:topic_id/wordpress" => "topics#wordpress", constraints: {topic_id: /\d+/} diff --git a/public/javascripts/count.js b/public/javascripts/count.js new file mode 100644 index 000000000..6fc942a10 --- /dev/null +++ b/public/javascripts/count.js @@ -0,0 +1,45 @@ +/* global discourseUrl:true */ + +(function() { + + + // Discover the URLs we want counts for + var links = document.getElementsByTagName("a"), + countFor = []; + + for(var i=0; i 0) { + // Send JSONP request for the counts + var d = document.createElement('script'); + d.src = discourseUrl + "embed/count?callback=discourseUpdateCounts&"; + + for (var j=0; j