Fix UTF-8 header and add test
This commit is contained in:
@@ -109,7 +109,7 @@ module Precious
|
|||||||
# Wraps page formatted data to Nokogiri::HTML document.
|
# Wraps page formatted data to Nokogiri::HTML document.
|
||||||
#
|
#
|
||||||
def build_document(content)
|
def build_document(content)
|
||||||
Nokogiri::HTML(%{<div id="gollum-root">} + content + %{</div>})
|
Nokogiri::HTML::fragment(%{<div id="gollum-root">} + content.to_s + %{</div>}, 'UTF-8')
|
||||||
end
|
end
|
||||||
|
|
||||||
# Finds header node inside Nokogiri::HTML document.
|
# Finds header node inside Nokogiri::HTML document.
|
||||||
@@ -134,7 +134,7 @@ module Precious
|
|||||||
def page_header_from_content(content)
|
def page_header_from_content(content)
|
||||||
doc = build_document(content)
|
doc = build_document(content)
|
||||||
title = find_header_node(doc)
|
title = find_header_node(doc)
|
||||||
Sanitize.clean(title.to_html(:encoding => 'UTF-8')).strip unless title.empty?
|
Sanitize.clean(title.to_xhtml(:encoding => 'UTF-8')).strip unless title.empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns page content without title if it was extracted.
|
# Returns page content without title if it was extracted.
|
||||||
@@ -143,7 +143,8 @@ module Precious
|
|||||||
doc = build_document(content)
|
doc = build_document(content)
|
||||||
title = find_header_node(doc)
|
title = find_header_node(doc)
|
||||||
title.remove unless title.empty?
|
title.remove unless title.empty?
|
||||||
doc.css("div#gollum-root").inner_html
|
# .inner_html will cause href escaping on UTF-8
|
||||||
|
doc.css("div#gollum-root").children.to_xhtml(:encoding => 'UTF-8')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
+15
-1
@@ -38,10 +38,24 @@ context "Frontend" do
|
|||||||
assert_equal 'm-plus-f', 'μ†ℱ'.to_url
|
assert_equal 'm-plus-f', 'μ†ℱ'.to_url
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'utf-8 kcode' do
|
test "utf-8 kcode" do
|
||||||
assert_equal 'μ†ℱ'.scan(/./), ["μ", "†", "ℱ"]
|
assert_equal 'μ†ℱ'.scan(/./), ["μ", "†", "ℱ"]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "UTF-8 headers href preserved" do
|
||||||
|
page = 'utfh1'
|
||||||
|
text = '한글'
|
||||||
|
|
||||||
|
# don't use h1 or it will be promoted to replace file name
|
||||||
|
# which doesn't generate a normal header link
|
||||||
|
@wiki.write_page(page, :markdown, '## ' + text,
|
||||||
|
{ :name => 'user1', :email => 'user1' });
|
||||||
|
|
||||||
|
get page
|
||||||
|
|
||||||
|
assert_match /<h2>#{text}<a class="anchor" id="#{text}" href="##{text}"><\/a><\/h2>/, last_response.body
|
||||||
|
end
|
||||||
|
|
||||||
test "retain edit information" do
|
test "retain edit information" do
|
||||||
page1 = 'page1'
|
page1 = 'page1'
|
||||||
user1 = 'user1'
|
user1 = 'user1'
|
||||||
|
|||||||
Reference in New Issue
Block a user