diff --git a/app/models/text_article.rb b/app/models/text_article.rb
index 8c41e04..82c07d4 100644
--- a/app/models/text_article.rb
+++ b/app/models/text_article.rb
@@ -20,4 +20,23 @@ class TextArticle < Article
def can_display_versions?
true
end
+
+ before_save :set_relative_path
+
+ def set_relative_path
+ parsed = Hpricot(self.body.to_s)
+ parsed.search('img[@src]').map { |i| change_element_path(i, 'src') }
+ parsed.search('a[@href]').map { |i| change_element_path(i, 'href') }
+ self.body = parsed.to_s
+ end
+
+ def change_element_path(el, attribute)
+ fullpath = /(https?):\/\/(#{environment.default_hostname})(:\d+)?(\/.*)/.match(el[attribute])
+ if fullpath
+ domain = fullpath[2]
+ path = fullpath[4]
+ el[attribute] = path if domain == environment.default_hostname
+ end
+ end
+
end
diff --git a/test/unit/text_article_test.rb b/test/unit/text_article_test.rb
index dbc73c0..eb9b7e5 100644
--- a/test/unit/text_article_test.rb
+++ b/test/unit/text_article_test.rb
@@ -37,4 +37,51 @@ class TextArticleTest < ActiveSupport::TestCase
assert_equal Blog.icon_name, TextArticle.icon_name(article)
end
+ should 'change image path to relative' do
+ person = create_user('testuser').person
+ article = TextArticle.new(:profile => person, :name => 'test')
+ env = Environment.default
+ article.body = "
"
+ article.save!
+ assert_equal "
", article.body
+ end
+
+ should 'change link to relative path' do
+ person = create_user('testuser').person
+ article = TextArticle.new(:profile => person, :name => 'test')
+ env = Environment.default
+ article.body = "test"
+ article.save!
+ assert_equal "test", article.body
+ end
+
+ should 'change image path to relative for domain with https' do
+ person = create_user('testuser').person
+ article = TextArticle.new(:profile => person, :name => 'test')
+ env = Environment.default
+ article.body = "
"
+ article.save!
+ assert_equal "
", article.body
+ end
+
+ should 'change image path to relative for domain with port' do
+ person = create_user('testuser').person
+ article = TextArticle.new(:profile => person, :name => 'test')
+ env = Environment.default
+ article.body = "
"
+ article.save!
+ assert_equal "
", article.body
+ end
+
+ should 'change image path to relative for domain with www' do
+ person = create_user('testuser').person
+ article = TextArticle.new(:profile => person, :name => 'test')
+ env = Environment.default
+ env.force_www = true
+ env.save!
+ article.body = "
"
+ article.save!
+ assert_equal "
", article.body
+ end
+
end
--
libgit2 0.21.2