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 | ... | ... |