Replace diaspora:// links in the text
This commit is contained in:
parent
4a994b0a48
commit
5f5d8c5e13
2 changed files with 91 additions and 8 deletions
|
|
@ -95,6 +95,12 @@ module Diaspora
|
||||||
def normalize
|
def normalize
|
||||||
@message = self.class.normalize(@message)
|
@message = self.class.normalize(@message)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def diaspora_links
|
||||||
|
@message = @message.gsub(DiasporaFederation::Federation::DiasporaUrlParser::DIASPORA_URL_REGEX) {|match_str|
|
||||||
|
Regexp.last_match(2) == "post" ? AppConfig.url_to("/posts/#{Regexp.last_match(3)}") : match_str
|
||||||
|
}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
DEFAULTS = {mentioned_people: [],
|
DEFAULTS = {mentioned_people: [],
|
||||||
|
|
@ -158,6 +164,7 @@ module Diaspora
|
||||||
def plain_text opts={}
|
def plain_text opts={}
|
||||||
process(opts) {
|
process(opts) {
|
||||||
make_mentions_plain_text
|
make_mentions_plain_text
|
||||||
|
diaspora_links
|
||||||
squish
|
squish
|
||||||
append_and_truncate
|
append_and_truncate
|
||||||
}
|
}
|
||||||
|
|
@ -167,6 +174,7 @@ module Diaspora
|
||||||
def plain_text_without_markdown opts={}
|
def plain_text_without_markdown opts={}
|
||||||
process(opts) {
|
process(opts) {
|
||||||
make_mentions_plain_text
|
make_mentions_plain_text
|
||||||
|
diaspora_links
|
||||||
strip_markdown
|
strip_markdown
|
||||||
squish
|
squish
|
||||||
append_and_truncate
|
append_and_truncate
|
||||||
|
|
@ -177,6 +185,7 @@ module Diaspora
|
||||||
def plain_text_for_json opts={}
|
def plain_text_for_json opts={}
|
||||||
process(opts) {
|
process(opts) {
|
||||||
normalize
|
normalize
|
||||||
|
diaspora_links
|
||||||
camo_urls if AppConfig.privacy.camo.proxy_markdown_images?
|
camo_urls if AppConfig.privacy.camo.proxy_markdown_images?
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
@ -186,6 +195,7 @@ module Diaspora
|
||||||
process(opts) {
|
process(opts) {
|
||||||
escape
|
escape
|
||||||
normalize
|
normalize
|
||||||
|
diaspora_links
|
||||||
render_mentions
|
render_mentions
|
||||||
render_tags
|
render_tags
|
||||||
squish
|
squish
|
||||||
|
|
@ -198,6 +208,7 @@ module Diaspora
|
||||||
process(opts) {
|
process(opts) {
|
||||||
process_newlines
|
process_newlines
|
||||||
normalize
|
normalize
|
||||||
|
diaspora_links
|
||||||
camo_urls if AppConfig.privacy.camo.proxy_markdown_images?
|
camo_urls if AppConfig.privacy.camo.proxy_markdown_images?
|
||||||
markdownify
|
markdownify
|
||||||
render_mentions
|
render_mentions
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,6 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
describe Diaspora::MessageRenderer do
|
describe Diaspora::MessageRenderer do
|
||||||
MESSAGE_NORMALIZTIONS = {
|
|
||||||
"\u202a#\u200eUSA\u202c" => "#USA",
|
|
||||||
"ള്" => "ള്"
|
|
||||||
}
|
|
||||||
|
|
||||||
def message(text, opts={})
|
def message(text, opts={})
|
||||||
Diaspora::MessageRenderer.new(text, opts)
|
Diaspora::MessageRenderer.new(text, opts)
|
||||||
end
|
end
|
||||||
|
|
@ -100,6 +95,20 @@ describe Diaspora::MessageRenderer do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with diaspora:// links" do
|
||||||
|
it "replaces diaspora:// links with pod-local links" do
|
||||||
|
target = FactoryGirl.create(:status_message)
|
||||||
|
expect(
|
||||||
|
message("Have a look at diaspora://#{target.diaspora_handle}/post/#{target.guid}.").html
|
||||||
|
).to match(/Have a look at #{AppConfig.url_to("/posts/#{target.guid}")}./)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "doesn't touch invalid diaspora:// links" do
|
||||||
|
text = "You can create diaspora://author/type/guid links!"
|
||||||
|
expect(message(text).html).to match(/#{text}/)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#markdownified" do
|
describe "#markdownified" do
|
||||||
|
|
@ -128,8 +137,11 @@ describe Diaspora::MessageRenderer do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "normalizes" do
|
it "normalizes" do
|
||||||
MESSAGE_NORMALIZTIONS.each do |input, output|
|
{
|
||||||
expect(message(input).plain_text_for_json).to eq output
|
"\u202a#\u200eUSA\u202c" => "<p><a class=\"tag\" href=\"/tags/USA\">#USA</a></p>\n",
|
||||||
|
"ള്" => "<p>ള്</p>\n"
|
||||||
|
}.each do |input, output|
|
||||||
|
expect(message(input).markdownified).to eq output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -180,6 +192,25 @@ describe Diaspora::MessageRenderer do
|
||||||
entities = '& ß ' ' "'
|
entities = '& ß ' ' "'
|
||||||
expect(message(entities).markdownified).to eq "<p>#{entities}</p>\n"
|
expect(message(entities).markdownified).to eq "<p>#{entities}</p>\n"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with diaspora:// links" do
|
||||||
|
it "replaces diaspora:// links with pod-local links" do
|
||||||
|
target1 = FactoryGirl.create(:status_message)
|
||||||
|
target2 = FactoryGirl.create(:status_message)
|
||||||
|
text = "Have a look at [this post](diaspora://#{target1.diaspora_handle}/post/#{target1.guid}) and " \
|
||||||
|
"this one too diaspora://#{target2.diaspora_handle}/post/#{target2.guid}."
|
||||||
|
|
||||||
|
rendered = message(text).markdownified
|
||||||
|
|
||||||
|
expect(rendered).to match(%r{at <a href="#{AppConfig.url_to("/posts/#{target1.guid}")}">this post</a> and})
|
||||||
|
expect(rendered).to match(/this one too #{AppConfig.url_to("/posts/#{target2.guid}")}./)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "doesn't touch invalid diaspora:// links" do
|
||||||
|
text = "You can create diaspora://author/type/guid links!"
|
||||||
|
expect(message(text).markdownified).to match(/#{text}/)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -210,6 +241,25 @@ describe Diaspora::MessageRenderer do
|
||||||
expect(msg.plain_text_without_markdown).to eq "@#{alice.diaspora_handle} is cool"
|
expect(msg.plain_text_without_markdown).to eq "@#{alice.diaspora_handle} is cool"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with diaspora:// links" do
|
||||||
|
it "replaces diaspora:// links with pod-local links" do
|
||||||
|
target1 = FactoryGirl.create(:status_message)
|
||||||
|
target2 = FactoryGirl.create(:status_message)
|
||||||
|
text = "Have a look at [this post](diaspora://#{target1.diaspora_handle}/post/#{target1.guid}) and " \
|
||||||
|
"this one too diaspora://#{target2.diaspora_handle}/post/#{target2.guid}."
|
||||||
|
|
||||||
|
rendered = message(text).plain_text_without_markdown
|
||||||
|
|
||||||
|
expect(rendered).to match(/look at this post \(#{AppConfig.url_to("/posts/#{target1.guid}")}\) and/)
|
||||||
|
expect(rendered).to match(/this one too #{AppConfig.url_to("/posts/#{target2.guid}")}./)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "doesn't touch invalid diaspora:// links" do
|
||||||
|
text = "You can create diaspora://author/type/guid links!"
|
||||||
|
expect(message(text).plain_text_without_markdown).to match(/#{text}/)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#urls" do
|
describe "#urls" do
|
||||||
|
|
@ -241,9 +291,31 @@ describe Diaspora::MessageRenderer do
|
||||||
|
|
||||||
describe "#plain_text_for_json" do
|
describe "#plain_text_for_json" do
|
||||||
it "normalizes" do
|
it "normalizes" do
|
||||||
MESSAGE_NORMALIZTIONS.each do |input, output|
|
{
|
||||||
|
"\u202a#\u200eUSA\u202c" => "#USA",
|
||||||
|
"ള്" => "ള്"
|
||||||
|
}.each do |input, output|
|
||||||
expect(message(input).plain_text_for_json).to eq output
|
expect(message(input).plain_text_for_json).to eq output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with diaspora:// links" do
|
||||||
|
it "replaces diaspora:// links with pod-local links" do
|
||||||
|
target1 = FactoryGirl.create(:status_message)
|
||||||
|
target2 = FactoryGirl.create(:status_message)
|
||||||
|
text = "Have a look at [this post](diaspora://#{target1.diaspora_handle}/post/#{target1.guid}) and " \
|
||||||
|
"this one too diaspora://#{target2.diaspora_handle}/post/#{target2.guid}."
|
||||||
|
|
||||||
|
rendered = message(text).plain_text_for_json
|
||||||
|
|
||||||
|
expect(rendered).to match(/look at \[this post\]\(#{AppConfig.url_to("/posts/#{target1.guid}")}\) and/)
|
||||||
|
expect(rendered).to match(/this one too #{AppConfig.url_to("/posts/#{target2.guid}")}./)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "doesn't touch invalid diaspora:// links" do
|
||||||
|
text = "You can create diaspora://author/type/guid links!"
|
||||||
|
expect(message(text).plain_text_for_json).to match(/#{text}/)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue