diff --git a/app/models/topic_link.rb b/app/models/topic_link.rb index d4215ae8128..2d63c1281ae 100644 --- a/app/models/topic_link.rb +++ b/app/models/topic_link.rb @@ -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 diff --git a/lib/pretty_text.rb b/lib/pretty_text.rb index 075bc543b41..af8b2d22161 100644 --- a/lib/pretty_text.rb +++ b/lib/pretty_text.rb @@ -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 diff --git a/spec/components/pretty_text_spec.rb b/spec/components/pretty_text_spec.rb index 5aaa9330ede..bcd5875b863 100644 --- a/spec/components/pretty_text_spec.rb +++ b/spec/components/pretty_text_spec.rb @@ -148,6 +148,14 @@ test PrettyText.extract_links("http://bla.com").to_a.should == ["http://cnn.com"] end + it "should extract links to topics" do + PrettyText.extract_links("").to_a.should == ["/t/topic/321"] + end + + it "should extract links to posts" do + PrettyText.extract_links("").to_a.should == ["/t/topic/1234/4567"] + end + it "should not preserve tags in code blocks" do PrettyText.excerpt("
<h3>Hours</h3>
",100).should == "<h3>Hours</h3>"
end
diff --git a/spec/models/topic_link_spec.rb b/spec/models/topic_link_spec.rb
index b158ccf8628..ba11abdf0ec 100644
--- a/spec/models/topic_link_spec.rb
+++ b/spec/models/topic_link_spec.rb
@@ -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}")