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