Fixes #590.
Unified · Split
| @@ -15,7 +15,7 @@ module Docs · 14 unmodified lines | ||
| 15 | 15 | css(tag.to_s).each do |node| |
| 16 | 16 | next unless value = node[attribute] |
| 17 | 17 | next if fragment_url_string?(value) || data_url_string?(value) |
| 18 | − node[attribute] = normalize_url(value) | |
| 18 | + node[attribute] = normalize_url(value) || (tag == :iframe ? value : '#') | |
| 19 | 19 | end |
| 20 | 20 | end |
| 21 | 21 | |
| @@ -31,7 +31,7 @@ module Docs · 9 unmodified lines | ||
| 31 | 31 | |
| 32 | 32 | url.to_s |
| 33 | 33 | rescue URI::InvalidURIError |
| 34 | − '#' | |
| 34 | + nil | |
| 35 | 35 | end |
| 36 | 36 | |
| 37 | 37 | def to_absolute_url(str) |
| @@ -39,11 +39,21 @@ class NormalizeUrlsFilterTest < MiniTest::Spec · 38 unmodified lines | ||
| 39 | 39 | assert_equal link_to(context[:url]), filter_output_string |
| 40 | 40 | end |
| 41 | 41 | |
| 42 | − it "rewrites invalid relative urls" do | |
| 42 | + it "rewrites invalid link urls" do | |
| 43 | 43 | @body = link_to '%' |
| 44 | 44 | assert_equal link_to('#'), filter_output_string |
| 45 | 45 | end |
| 46 | 46 | |
| 47 | + it "rewrites invalid image urls" do | |
| 48 | + @body = '<img src="%">' | |
| 49 | + assert_equal '<img src="#">', filter_output_string | |
| 50 | + end | |
| 51 | + | |
| 52 | + it "doesn't rewrite invalid iframe urls" do | |
| 53 | + @body = '<iframe src="%"></iframe>' | |
| 54 | + assert_equal @body, filter_output_string | |
| 55 | + end | |
| 56 | + | |
| 47 | 57 | it "repairs un-encoded spaces" do |
| 48 | 58 | @body = link_to 'http://example.com/#foo bar ' |
| 49 | 59 | assert_equal link_to('http://example.com/#foo%20bar'), filter_output_string |