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}")