FEATURE: support silent internal links (#25472)
Internal links always notify and add internal connections in topics. This adds a special feature that lets you append `?silent=true` to a link to have it excluded from: 1. Notifications - users will not be notified for these links 2. Post links below posts in the UI This is specifically useful for large reports where adding all these connections just results in noise.
This commit is contained in:
parent
304a7f3e1a
commit
27301ae5c7
|
@ -289,6 +289,10 @@ class TopicLink < ActiveRecord::Base
|
||||||
# Store the same URL that will be used in the cooked version of the post
|
# Store the same URL that will be used in the cooked version of the post
|
||||||
url = UrlHelper.cook_url(upload.url, secure: upload.secure?)
|
url = UrlHelper.cook_url(upload.url, secure: upload.secure?)
|
||||||
elsif route = Discourse.route_for(parsed)
|
elsif route = Discourse.route_for(parsed)
|
||||||
|
# this is a special case for the silent flag
|
||||||
|
# in internal links
|
||||||
|
return nil if url && (url.split("?")[1] == "silent=true")
|
||||||
|
|
||||||
internal = true
|
internal = true
|
||||||
|
|
||||||
# We aren't interested in tracking internal links to users
|
# We aren't interested in tracking internal links to users
|
||||||
|
|
|
@ -69,6 +69,18 @@ RSpec.describe TopicLink do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "internal links" do
|
describe "internal links" do
|
||||||
|
it "can exclude links with ?silent=true" do
|
||||||
|
url = topic.url
|
||||||
|
raw = "[silent link](#{url}?silent=true)"
|
||||||
|
|
||||||
|
post = Fabricate(:post, user: user, raw: raw)
|
||||||
|
|
||||||
|
TopicLink.extract_from(post)
|
||||||
|
|
||||||
|
expect(topic.topic_links.count).to eq(0)
|
||||||
|
expect(post.topic.topic_links.count).to eq(0)
|
||||||
|
end
|
||||||
|
|
||||||
it "extracts onebox" do
|
it "extracts onebox" do
|
||||||
other_topic = Fabricate(:topic, user: user)
|
other_topic = Fabricate(:topic, user: user)
|
||||||
Fabricate(:post, topic: other_topic, user: user, raw: "some content for the first post")
|
Fabricate(:post, topic: other_topic, user: user, raw: "some content for the first post")
|
||||||
|
|
Loading…
Reference in New Issue