Skip to content

Commit

Permalink
Merge pull request #5410 from jekyll/pr/i18n-url-filters
Browse files Browse the repository at this point in the history
Merge pull request 5410
  • Loading branch information
jekyllbot committed Sep 29, 2016
2 parents 459bc17 + 2b30c06 commit 553fae8
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 3 deletions.
1 change: 1 addition & 0 deletions jekyll.gemspec
Expand Up @@ -38,4 +38,5 @@ Gem::Specification.new do |s|
s.add_runtime_dependency('jekyll-sass-converter', '~> 1.0')
s.add_runtime_dependency('jekyll-watch', '~> 1.1')
s.add_runtime_dependency("pathutil", "~> 0.9")
s.add_runtime_dependency('addressable', '~> 2.4')
end
8 changes: 5 additions & 3 deletions lib/jekyll/filters/url_filters.rb
@@ -1,3 +1,5 @@
require "addressable/uri"

module Jekyll
module Filters
module URLFilters
Expand All @@ -10,7 +12,7 @@ def absolute_url(input)
return if input.nil?
site = @context.registers[:site]
return relative_url(input).to_s if site.config["url"].nil?
URI(site.config["url"] + relative_url(input)).to_s
Addressable::URI.parse(site.config["url"] + relative_url(input)).normalize.to_s
end

# Produces a URL relative to the domain root based on site.baseurl.
Expand All @@ -22,9 +24,9 @@ def relative_url(input)
return if input.nil?
site = @context.registers[:site]
return ensure_leading_slash(input.to_s) if site.config["baseurl"].nil?
URI(
Addressable::URI.parse(
ensure_leading_slash(site.config["baseurl"]) + ensure_leading_slash(input.to_s)
).to_s
).normalize.to_s
end

private
Expand Down
14 changes: 14 additions & 0 deletions test/test_filters.rb
Expand Up @@ -367,6 +367,15 @@ def select; end
})
assert_equal "http://example.com/base", filter.absolute_url(page_url)
end

should "normalize international URLs" do
page_url = ""
filter = make_filter_mock({
"url" => "http://ümlaut.example.org/",
"baseurl" => nil
})
assert_equal "http://xn--mlaut-jva.example.org/", filter.absolute_url(page_url)
end
end

context "relative_url filter" do
Expand All @@ -386,6 +395,11 @@ def select; end
assert_equal "/base/#{page_url}", filter.relative_url(page_url)
end

should "normalize international URLs" do
page_url = "错误.html"
assert_equal "/base/%E9%94%99%E8%AF%AF.html", @filter.relative_url(page_url)
end

should "be ok with a nil 'baseurl'" do
page_url = "about/my_favorite_page/"
filter = make_filter_mock({
Expand Down

0 comments on commit 553fae8

Please sign in to comment.