diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 73886a66..e63e96b1 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -44,7 +44,12 @@ module Gollum end data = process_tags(data) data = process_code(data) - data = sanitize.clean!(data) if sanitize + if sanitize || block_given? + doc = Nokogiri::HTML::DocumentFragment.parse(data) + doc = sanitize.clean_node!(doc) if sanitize + yield doc if block_given? + data = doc_to_html(doc) + end data = process_tex(data) data.gsub!(/

<\/p>/, '') data diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index cf1c9f59..2b9ad5ad 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -132,8 +132,8 @@ module Gollum # Public: The formatted contents of the page. # # Returns the String data. - def formatted_data - @blob && @wiki.markup_class.new(self).render(historical?) + def formatted_data(&block) + @blob && @wiki.markup_class.new(self).render(historical?, &block) end # Public: The format of the page. diff --git a/test/test_markup.rb b/test/test_markup.rb index c75ad1a6..892685af 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -25,6 +25,31 @@ context "Markup" do end end + test "Gollum::Markup#render yields a DocumentFragment" do + yielded = false + @wiki.write_page("Yielded", :markdown, "abc", commit_details) + + page = @wiki.page("Yielded") + markup = Gollum::Markup.new(page) + markup.render do |doc| + assert_kind_of Nokogiri::HTML::DocumentFragment, doc + yielded = true + end + assert yielded + end + + test "Gollum::Page#formatted_data yields a DocumentFragment" do + yielded = false + @wiki.write_page("Yielded", :markdown, "abc", commit_details) + + page = @wiki.page("Yielded") + page.formatted_data do |doc| + assert_kind_of Nokogiri::HTML::DocumentFragment, doc + yielded = true + end + assert yielded + end + ######################################################################### # # Links