diff --git a/lib/cooked_post_processor.rb b/lib/cooked_post_processor.rb index 8651502c8f7..d96d81f6836 100644 --- a/lib/cooked_post_processor.rb +++ b/lib/cooked_post_processor.rb @@ -621,7 +621,16 @@ class CookedPostProcessor end if @omit_nofollow || !SiteSetting.add_rel_nofollow_to_user_content - @doc.css(".onebox-body a, .onebox a").each { |a| a.remove_attribute("rel") } + @doc.css(".onebox-body a[rel], .onebox a[rel]").each do |a| + rel_values = a['rel'].split(' ').map(&:downcase) + rel_values.delete('nofollow') + rel_values.delete('ugc') + if rel_values.blank? + a.remove_attribute("rel") + else + a["rel"] = rel_values.join(' ') + end + end end end diff --git a/spec/components/cooked_post_processor_spec.rb b/spec/components/cooked_post_processor_spec.rb index fef1e06aa3c..9164a7a4786 100644 --- a/spec/components/cooked_post_processor_spec.rb +++ b/spec/components/cooked_post_processor_spec.rb @@ -1102,13 +1102,13 @@ describe CookedPostProcessor do SiteSetting.add_rel_nofollow_to_user_content = false Oneboxer.expects(:onebox) .with("http://www.youtube.com/watch?v=9bZkp7q19f0", invalidate_oneboxes: true, user_id: nil, category_id: post.topic.category_id) - .returns('') + .returns('') cpp.post_process_oneboxes end it "removes nofollow noopener from links" do expect(cpp).to be_dirty - expect(cpp.html).to match_html '' + expect(cpp.html).to match_html '' end end @@ -1123,13 +1123,13 @@ describe CookedPostProcessor do SiteSetting.tl3_links_no_follow = false Oneboxer.expects(:onebox) .with("http://www.youtube.com/watch?v=9bZkp7q19f0", invalidate_oneboxes: true, user_id: nil, category_id: post.topic.category_id) - .returns('') + .returns('') cpp.post_process_oneboxes end - it "removes nofollow noopener from links" do + it "removes nofollow ugc from links" do expect(cpp).to be_dirty - expect(cpp.html).to match_html '' + expect(cpp.html).to match_html '' end end