diff --git a/app/models/post_analyzer.rb b/app/models/post_analyzer.rb index 4e2bf369e81..70f1bf01233 100644 --- a/app/models/post_analyzer.rb +++ b/app/models/post_analyzer.rb @@ -11,7 +11,7 @@ class PostAnalyzer def cook(*args) cooked = PrettyText.cook(*args) - result = Oneboxer.apply(cooked) do |url, _| + result = Oneboxer.apply(cooked, topic_id: @topic_id) do |url, _| Oneboxer.invalidate(url) if args.last[:invalidate_oneboxes] Oneboxer.cached_onebox url end diff --git a/lib/cooked_post_processor.rb b/lib/cooked_post_processor.rb index a74e4fa7414..9c606a23dd4 100644 --- a/lib/cooked_post_processor.rb +++ b/lib/cooked_post_processor.rb @@ -245,19 +245,7 @@ class CookedPostProcessor } # apply oneboxes - Oneboxer.apply(@doc) { |url| - - # hack urls to create proper expansions - if url =~ Regexp.new("^#{Discourse.base_url.gsub(".","\\.")}.*$", true) - uri = URI.parse(url) rescue nil - if uri && uri.path - route = Rails.application.routes.recognize_path(uri.path) rescue nil - if route && route[:controller] == 'topics' - url += (url =~ /\?/ ? "&" : "?") + "&source_topic_id=#{@post.topic_id}" - end - end - end - + Oneboxer.apply(@doc, topic_id: @post.topic_id) { |url| Oneboxer.onebox(url, args) } diff --git a/lib/oneboxer.rb b/lib/oneboxer.rb index 50aa8bc7b06..5557b8e750e 100644 --- a/lib/oneboxer.rb +++ b/lib/oneboxer.rb @@ -76,12 +76,30 @@ module Oneboxer doc end - def self.apply(string_or_doc) + def self.append_source_topic_id(url, topic_id) + # hack urls to create proper expansions + if url =~ Regexp.new("^#{Discourse.base_url.gsub(".","\\.")}.*$", true) + uri = URI.parse(url) rescue nil + if uri && uri.path + route = Rails.application.routes.recognize_path(uri.path) rescue nil + if route && route[:controller] == 'topics' + url += (url =~ /\?/ ? "&" : "?") + "source_topic_id=#{topic_id}" + end + end + end + url + end + + def self.apply(string_or_doc, args=nil) doc = string_or_doc doc = Nokogiri::HTML::fragment(doc) if doc.is_a?(String) changed = false Oneboxer.each_onebox_link(doc) do |url, element| + + if args && args[:topic_id] + url = append_source_topic_id(url, args[:topic_id]) + end onebox, _preview = yield(url,element) if onebox parsed_onebox = Nokogiri::HTML::fragment(onebox)