Commit 0b8b6900ac0a021271b4da6b036ddbbc6e125ea6
1 parent
d0561132
Exists in
master
and in
29 other branches
Set relative path to images and link on TextArticle
Showing
2 changed files
with
66 additions
and
0 deletions
Show diff stats
app/models/text_article.rb
... | ... | @@ -20,4 +20,23 @@ class TextArticle < Article |
20 | 20 | def can_display_versions? |
21 | 21 | true |
22 | 22 | end |
23 | + | |
24 | + before_save :set_relative_path | |
25 | + | |
26 | + def set_relative_path | |
27 | + parsed = Hpricot(self.body.to_s) | |
28 | + parsed.search('img[@src]').map { |i| change_element_path(i, 'src') } | |
29 | + parsed.search('a[@href]').map { |i| change_element_path(i, 'href') } | |
30 | + self.body = parsed.to_s | |
31 | + end | |
32 | + | |
33 | + def change_element_path(el, attribute) | |
34 | + fullpath = /(https?):\/\/(#{environment.default_hostname})(:\d+)?(\/.*)/.match(el[attribute]) | |
35 | + if fullpath | |
36 | + domain = fullpath[2] | |
37 | + path = fullpath[4] | |
38 | + el[attribute] = path if domain == environment.default_hostname | |
39 | + end | |
40 | + end | |
41 | + | |
23 | 42 | end | ... | ... |
test/unit/text_article_test.rb
... | ... | @@ -37,4 +37,51 @@ class TextArticleTest < ActiveSupport::TestCase |
37 | 37 | assert_equal Blog.icon_name, TextArticle.icon_name(article) |
38 | 38 | end |
39 | 39 | |
40 | + should 'change image path to relative' do | |
41 | + person = create_user('testuser').person | |
42 | + article = TextArticle.new(:profile => person, :name => 'test') | |
43 | + env = Environment.default | |
44 | + article.body = "<img src=\"http://#{env.default_hostname}/test.png\" />" | |
45 | + article.save! | |
46 | + assert_equal "<img src=\"/test.png\" />", article.body | |
47 | + end | |
48 | + | |
49 | + should 'change link to relative path' do | |
50 | + person = create_user('testuser').person | |
51 | + article = TextArticle.new(:profile => person, :name => 'test') | |
52 | + env = Environment.default | |
53 | + article.body = "<a href=\"http://#{env.default_hostname}/test\">test</a>" | |
54 | + article.save! | |
55 | + assert_equal "<a href=\"/test\">test</a>", article.body | |
56 | + end | |
57 | + | |
58 | + should 'change image path to relative for domain with https' do | |
59 | + person = create_user('testuser').person | |
60 | + article = TextArticle.new(:profile => person, :name => 'test') | |
61 | + env = Environment.default | |
62 | + article.body = "<img src=\"https://#{env.default_hostname}/test.png\" />" | |
63 | + article.save! | |
64 | + assert_equal "<img src=\"/test.png\" />", article.body | |
65 | + end | |
66 | + | |
67 | + should 'change image path to relative for domain with port' do | |
68 | + person = create_user('testuser').person | |
69 | + article = TextArticle.new(:profile => person, :name => 'test') | |
70 | + env = Environment.default | |
71 | + article.body = "<img src=\"http://#{env.default_hostname}:3000/test.png\" />" | |
72 | + article.save! | |
73 | + assert_equal "<img src=\"/test.png\" />", article.body | |
74 | + end | |
75 | + | |
76 | + should 'change image path to relative for domain with www' do | |
77 | + person = create_user('testuser').person | |
78 | + article = TextArticle.new(:profile => person, :name => 'test') | |
79 | + env = Environment.default | |
80 | + env.force_www = true | |
81 | + env.save! | |
82 | + article.body = "<img src=\"http://#{env.default_hostname}:3000/test.png\" />" | |
83 | + article.save! | |
84 | + assert_equal "<img src=\"/test.png\" />", article.body | |
85 | + end | |
86 | + | |
40 | 87 | end | ... | ... |