FEATURE: add context for cross topic links
This commit is contained in:
parent
150ad01111
commit
fc2d61136d
|
@ -245,7 +245,21 @@ class CookedPostProcessor
|
|||
}
|
||||
|
||||
# apply oneboxes
|
||||
Oneboxer.apply(@doc) { |url| Oneboxer.onebox(url, args) }
|
||||
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.onebox(url, args)
|
||||
}
|
||||
|
||||
# make sure we grab dimensions for oneboxed images
|
||||
oneboxed_images.each { |img| limit_size!(img) }
|
||||
|
|
|
@ -33,13 +33,14 @@ module Onebox
|
|||
def to_html
|
||||
uri = URI::parse(@url)
|
||||
route = Rails.application.routes.recognize_path(uri.path)
|
||||
|
||||
url = @url.sub(/[&?]source_topic_id=(\d+)/, "")
|
||||
source_topic_id = $1.to_i
|
||||
|
||||
# Figure out what kind of onebox to show based on the URL
|
||||
case route[:controller]
|
||||
when 'topics'
|
||||
|
||||
linked = "<a href='#{@url}'>#{@url}</a>"
|
||||
linked = "<a href='#{url}'>#{url}</a>"
|
||||
if route[:post_number].present? && route[:post_number].to_i > 1
|
||||
# Post Link
|
||||
post = Post.find_by(topic_id: route[:topic_id], post_number: route[:post_number].to_i)
|
||||
|
@ -56,7 +57,9 @@ module Onebox
|
|||
excerpt.gsub!("[/quote]", "[quote]")
|
||||
quote = "[quote=\"#{post.user.username}, topic:#{topic.id}, slug:#{slug}, post:#{post.post_number}\"]#{excerpt}[/quote]"
|
||||
|
||||
cooked = PrettyText.cook(quote)
|
||||
args = {}
|
||||
args[:topic_id] = source_topic_id if source_topic_id > 0
|
||||
cooked = PrettyText.cook(quote, args)
|
||||
return cooked
|
||||
|
||||
else
|
||||
|
@ -77,7 +80,7 @@ module Onebox
|
|||
end
|
||||
|
||||
quote = post.excerpt(SiteSetting.post_onebox_maxlength)
|
||||
args = { original_url: @url,
|
||||
args = { original_url: url,
|
||||
title: topic.title,
|
||||
avatar: PrettyText.avatar_img(topic.user.avatar_template, 'tiny'),
|
||||
posts_count: topic.posts_count,
|
||||
|
|
|
@ -35,9 +35,14 @@ describe Onebox::Engine::DiscourseLocalOnebox do
|
|||
end
|
||||
|
||||
it "returns some onebox goodness if post exists and can be seen" do
|
||||
url = "#{Discourse.base_url}#{post2.url}"
|
||||
url = "#{Discourse.base_url}#{post2.url}?source_topic_id=#{post2.topic_id+1}"
|
||||
Guardian.any_instance.stubs(:can_see?).returns(true)
|
||||
html = Onebox.preview(url).to_s
|
||||
expect(html).to include(post2.excerpt)
|
||||
expect(html).to include(post2.topic.title)
|
||||
|
||||
url = "#{Discourse.base_url}#{post2.url}"
|
||||
html = Onebox.preview(url).to_s
|
||||
expect(html).to include(post2.user.username)
|
||||
expect(html).to include(post2.excerpt)
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue