Fix bug where links to posts weren't being tracked

This commit is contained in:
Robin Ward 2013-02-13 15:22:04 -05:00
parent 941820ac88
commit dee9e9a51f
4 changed files with 58 additions and 1 deletions

View File

@ -53,6 +53,15 @@ class TopicLink < ActiveRecord::Base
topic_id = route[:topic_id]
post_number = route[:post_number] || 1
# Store the canonical URL
topic = Topic.where(id: topic_id).first
if topic.present?
url = "#{Discourse.base_url}#{topic.relative_url}"
url << "/#{post_number}" if post_number.to_i > 1
end
end
# Skip linking to ourselves

View File

@ -216,6 +216,18 @@ module PrettyText
doc.css("a").each do |l|
links << l.attributes["href"].to_s
end
doc.css("aside.quote").each do |a|
topic_id = a.attributes['data-topic']
url = "/t/topic/#{topic_id}"
if post_number = a.attributes['data-post']
url << "/#{post_number}"
end
links << url
end
links
end

View File

@ -148,6 +148,14 @@ test
PrettyText.extract_links("<a href='http://cnn.com'>http://bla.com</a>").to_a.should == ["http://cnn.com"]
end
it "should extract links to topics" do
PrettyText.extract_links("<aside class=\"quote\" data-topic=\"321\">aside</aside>").to_a.should == ["/t/topic/321"]
end
it "should extract links to posts" do
PrettyText.extract_links("<aside class=\"quote\" data-topic=\"1234\" data-post=\"4567\">aside</aside>").to_a.should == ["/t/topic/1234/4567"]
end
it "should not preserve tags in code blocks" do
PrettyText.excerpt("<pre><code class='handlebars'>&lt;h3&gt;Hours&lt;/h3&gt;</code></pre>",100).should == "&lt;h3&gt;Hours&lt;/h3&gt;"
end

View File

@ -46,12 +46,40 @@ describe TopicLink do
describe 'internal links' do
context "rendered onebox" do
before do
@other_topic = Fabricate(:topic, user: @user)
@other_topic.posts.create(user: @user, raw: "some content for the first post")
@other_post = @other_topic.posts.create(user: @user, raw: "some content for the second post")
@url = "http://#{test_uri.host}/t/#{@other_topic.slug}/#{@other_topic.id}/#{@other_post.post_number}"
@topic.posts.create(user: @user, raw: 'initial post')
@post = @topic.posts.create(user: @user, raw: "Link to another topic:\n\n#{@url}\n\n")
@post.reload
TopicLink.extract_from(@post)
@link = @topic.topic_links.first
end
it "should have a link" do
@link.should be_present
end
it "should be the canonical URL" do
@link.url.should == @url
end
end
context 'topic link' do
before do
@other_topic = Fabricate(:topic, user: @user)
@other_post = @other_topic.posts.create(user: @user, raw: "some content")
@url = "http://#{test_uri.host}/t/topic-slug/#{@other_topic.id}"
@url = "http://#{test_uri.host}/t/#{@other_topic.slug}/#{@other_topic.id}"
@topic.posts.create(user: @user, raw: 'initial post')
@post = @topic.posts.create(user: @user, raw: "Link to another topic: #{@url}")