From 1eb65caff48a037b895fdc1773f4b42688c75e14 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Wed, 7 Dec 2011 11:46:35 +0100 Subject: [PATCH 1/7] Remove dependency on Redcarpet Now Gollum does all its Markdown processing through GitHub::Markup; if you require a custom Markdown renderer using Redcarpet or another library, you can hot-load it from your own code base: Gollum::Wiki.markup_classes[:markdown] = YourRedcarpetRenderer --- lib/gollum/markup.rb | 47 -------------------------------------------- lib/gollum/wiki.rb | 16 +++++++-------- test/test_wiki.rb | 12 +++++++---- 3 files changed, 15 insertions(+), 60 deletions(-) diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index ba1d1969..f2de18f8 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -433,51 +433,4 @@ module Gollum def update_cache(type, id, data) end end - - begin - require 'redcarpet' - - class MarkupGFM < Markup - def render(no_follow = false) - sanitize = no_follow ? - @wiki.history_sanitizer : - @wiki.sanitizer - - data = extract_tex(@data.dup) - data = extract_code(data) - data = extract_tags(data) - - flags = [ - :autolink, - :fenced_code, - :tables, - :strikethrough, - :lax_htmlblock, - :no_intraemphasis - ] - data = Redcarpet.new(data, *flags).to_html - data = process_tags(data) - data = process_code(data) - - doc = Nokogiri::HTML::DocumentFragment.parse(data) - - doc.search('pre').each do |node| - next unless lang = node['lang'] - next unless lexer = Pygments::Lexer[lang] - text = node.inner_text - html = lexer.highlight(text) - node.replace(html) - end - - doc = sanitize.clean_node!(doc) if sanitize - yield doc if block_given? - - data = doc_to_html(doc) - data = process_tex(data) - data - end - end - rescue LoadError - MarkupGFM = Markup - end end diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 19cfb1e5..31a9fdbe 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -54,32 +54,30 @@ module Gollum # Gets the markup class used by all instances of this Wiki. # Default: Gollum::Markup def markup_classes - @markup_classes || + @markup_classes ||= if superclass.respond_to?(:markup_classes) superclass.markup_classes else - classes = Hash.new(::Gollum::Markup) - - # Add custom markup classes for different languages - classes[:markdown] = ::Gollum::MarkupGFM - classes + Hash.new(::Gollum::Markup) end end # Gets the default markup class used by all instances of this Wiki. # Kept for backwards compatibility until Gollum v2.x - def markup_class - markup_classes[:default] + def markup_class(language=:default) + markup_classes[language] end # Sets the default markup class used by all instances of this Wiki. # Kept for backwards compatibility until Gollum v2.x def markup_class=(default) - new_classes = Hash.new default @markup_classes = Hash.new(default).update(markup_classes) default end + alias_method :default_markup_class, :markup_class + alias_method :default_markup_class=, :markup_class= + # Gets the default sanitization options for current pages used by # instances of this Wiki. def sanitization diff --git a/test/test_wiki.rb b/test/test_wiki.rb index fd37c56c..b7a61cba 100644 --- a/test/test_wiki.rb +++ b/test/test_wiki.rb @@ -11,13 +11,17 @@ context "Wiki" do assert_equal Gollum::Markup, Gollum::Wiki.markup_class end - test "#markup_class= doesn't clobber alternate markups" do + test "#default_markup_class= doesn't clobber alternate markups" do custom = Class.new(Gollum::Markup) - Gollum::Wiki.markup_class = custom + custom_md = Class.new(Gollum::Markup) - assert_equal custom, Gollum::Wiki.markup_class + Gollum::Wiki.markup_classes = Hash.new Gollum::Markup + Gollum::Wiki.markup_classes[:markdown] = custom_md + Gollum::Wiki.default_markup_class = custom + + assert_equal custom, Gollum::Wiki.default_markup_class assert_equal custom, Gollum::Wiki.markup_classes[:orgmode] - assert_equal Gollum::MarkupGFM, Gollum::Wiki.markup_classes[:markdown] + assert_equal custom_md, Gollum::Wiki.markup_classes[:markdown] end test "repo path" do From 108876d9a1851ca43948956f7fd28dbc9a045105 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Wed, 7 Dec 2011 12:34:59 +0100 Subject: [PATCH 2/7] Do not assume Markdown output is XHTML Self-closing tags are bad for your health. --- test/test_markup.rb | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/test/test_markup.rb b/test/test_markup.rb index 27433086..77da35b3 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -189,7 +189,7 @@ context "Markup" do page = @wiki.page(name) output = page.formatted_data - assert_equal %{

a b

}, output + assert_equal %{

a b

}, output end end @@ -200,7 +200,7 @@ context "Markup" do page = @wiki.page(name) output = page.formatted_data - assert_equal %{

a b

}, output + assert_equal %{

a b

}, output end end @@ -212,7 +212,7 @@ context "Markup" do @wiki.write_page("Bilbo Baggins", :markdown, "a [[/alpha.jpg]] [[a | /alpha.jpg]] b", commit_details) page = @wiki.page("Bilbo Baggins") - assert_equal %{

a a b

}, page.formatted_data + assert_equal %{

a a b

}, page.formatted_data end test "image with relative path on root" do @@ -223,7 +223,7 @@ context "Markup" do index.commit("Add alpha.jpg") page = @wiki.page("Bilbo Baggins") - assert_equal %{

a a b

}, page.formatted_data + assert_equal %{

a a b

}, page.formatted_data end test "image with relative path" do @@ -235,7 +235,7 @@ context "Markup" do page = @wiki.page("Bilbo Baggins") output = page.formatted_data - assert_equal %{

a a b

}, output + assert_equal %{

a a b

}, output end test "image with absolute path on a preview" do @@ -245,7 +245,7 @@ context "Markup" do index.commit("Add alpha.jpg") page = @wiki.preview_page("Test", "a [[/alpha.jpg]] b", :markdown) - assert_equal %{

a b

}, page.formatted_data + assert_equal %{

a b

}, page.formatted_data end test "image with relative path on a preview" do @@ -256,12 +256,12 @@ context "Markup" do index.commit("Add alpha.jpg") page = @wiki.preview_page("Test", "a [[alpha.jpg]] [[greek/alpha.jpg]] b", :markdown) - assert_equal %{

a b

}, page.formatted_data + assert_equal %{

a b

}, page.formatted_data end test "image with alt" do content = "a [[alpha.jpg|alt=Alpha Dog]] b" - output = %{

a Alpha Dog b

} + output = %{

a Alpha Dog b

} relative_image(content, output) end @@ -269,7 +269,7 @@ context "Markup" do %w{em px}.each do |unit| %w{width height}.each do |dim| content = "a [[alpha.jpg|#{dim}=100#{unit}]] b" - output = "

a b

" + output = "

a b

" relative_image(content, output) end end @@ -278,7 +278,7 @@ context "Markup" do test "image with bogus dimension" do %w{width height}.each do |dim| content = "a [[alpha.jpg|#{dim}=100]] b" - output = "

a b

" + output = "

a b

" relative_image(content, output) end end @@ -286,7 +286,7 @@ context "Markup" do test "image with vertical align" do %w{top texttop middle absmiddle bottom absbottom baseline}.each do |align| content = "a [[alpha.jpg|align=#{align}]] b" - output = "

a b

" + output = "

a b

" relative_image(content, output) end end @@ -294,40 +294,40 @@ context "Markup" do test "image with horizontal align" do %w{left center right}.each do |align| content = "a [[alpha.jpg|align=#{align}]] b" - output = "

a b

" + output = "

a b

" relative_image(content, output) end end test "image with float" do content = "a\n\n[[alpha.jpg|float]]\n\nb" - output = "

a

\n\n

\n\n

b

" + output = "

a

\n\n

\n\n

b

" relative_image(content, output) end test "image with float and align" do %w{left right}.each do |align| content = "a\n\n[[alpha.jpg|float|align=#{align}]]\n\nb" - output = "

a

\n\n

\n\n

b

" + output = "

a

\n\n

\n\n

b

" relative_image(content, output) end end test "image with frame" do content = "a\n\n[[alpha.jpg|frame]]\n\nb" - output = "

a

\n\n

\n\n

b

" + output = "

a

\n\n

\n\n

b

" relative_image(content, output) end test "absolute image with frame" do content = "a\n\n[[http://example.com/bilbo.jpg|frame]]\n\nb" - output = "

a

\n\n

\n\n

b

" + output = "

a

\n\n

\n\n

b

" relative_image(content, output) end test "image with frame and alt" do content = "a\n\n[[alpha.jpg|frame|alt=Alpha]]\n\nb" - output = "

a

\n\n

\"Alpha\"Alpha

\n\n

b

" + output = "

a

\n\n

\"Alpha\"Alpha

\n\n

b

" relative_image(content, output) end From af09f99c8a9ac75d8c31b3e4ddcb6b5c5c216d94 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Wed, 7 Dec 2011 13:02:54 +0100 Subject: [PATCH 3/7] Fix newline tests in code blocks --- test/test_markup.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_markup.rb b/test/test_markup.rb index 77da35b3..601ab9fd 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -376,7 +376,7 @@ context "Markup" do test "code blocks" do content = "a\n\n```ruby\nx = 1\n```\n\nb" - output = "

a

\n\n
" +
+    output = "

a

\n\n
\n
" +
              "x = " +
              "1\n
\n
\n\n\n

b

" @@ -391,7 +391,7 @@ context "Markup" do test "code blocks with carriage returns" do content = "a\r\n\r\n```ruby\r\nx = 1\r\n```\r\n\r\nb" - output = "

a

\n\n
" +
+    output = "

a

\n\n
\n
" +
              "x = " +
              "1\n
\n
\n\n\n

b

" From 654b5b176b6d2ca273a7981e57415245f486df5c Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Wed, 7 Dec 2011 16:38:16 +0100 Subject: [PATCH 4/7] Bump GitHub::Markup dependency --- gollum.gemspec | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gollum.gemspec b/gollum.gemspec index 192cde1e..e8caba6d 100644 --- a/gollum.gemspec +++ b/gollum.gemspec @@ -23,7 +23,7 @@ Gem::Specification.new do |s| s.extra_rdoc_files = %w[README.md LICENSE] s.add_dependency('grit', "~> 2.4.1") - s.add_dependency('github-markup', [">= 0.4.0", "< 1.0.0"]) + s.add_dependency('github-markup', [">= 0.7.0", "< 1.0.0"]) s.add_dependency('pygments.rb', "~> 0.2.0") s.add_dependency('posix-spawn', "~> 0.3.0") s.add_dependency('sinatra', "~> 1.0") @@ -35,7 +35,6 @@ Gem::Specification.new do |s| s.add_development_dependency('RedCloth') s.add_development_dependency('mocha') s.add_development_dependency('org-ruby') - s.add_development_dependency('rdiscount') s.add_development_dependency('shoulda') s.add_development_dependency('rack-test') s.add_development_dependency('wikicloth', '~> 0.6.3') From 8014486fd814a5fc5131579be31b4723141aca68 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Wed, 7 Dec 2011 18:53:51 +0100 Subject: [PATCH 5/7] XHTML is dead Do not enforce the XHTML conversion for Wiki pages. HTML is cool! --- lib/gollum/markup.rb | 6 +----- test/test_markup.rb | 38 +++++++++++++++++++------------------- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index f2de18f8..4daaf2cd 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -53,17 +53,13 @@ module Gollum doc = Nokogiri::HTML::DocumentFragment.parse(data) doc = sanitize.clean_node!(doc) if sanitize yield doc if block_given? - data = doc_to_html(doc) + data = doc.to_html end data = process_tex(data) data.gsub!(/

<\/p>/, '') data end - def doc_to_html(doc) - doc.to_xhtml(:save_with => Nokogiri::XML::Node::SaveOptions::AS_XHTML) - end - ######################################################################### # # TeX diff --git a/test/test_markup.rb b/test/test_markup.rb index 27433086..601ab9fd 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -189,7 +189,7 @@ context "Markup" do page = @wiki.page(name) output = page.formatted_data - assert_equal %{

a b

}, output + assert_equal %{

a b

}, output end end @@ -200,7 +200,7 @@ context "Markup" do page = @wiki.page(name) output = page.formatted_data - assert_equal %{

a b

}, output + assert_equal %{

a b

}, output end end @@ -212,7 +212,7 @@ context "Markup" do @wiki.write_page("Bilbo Baggins", :markdown, "a [[/alpha.jpg]] [[a | /alpha.jpg]] b", commit_details) page = @wiki.page("Bilbo Baggins") - assert_equal %{

a a b

}, page.formatted_data + assert_equal %{

a a b

}, page.formatted_data end test "image with relative path on root" do @@ -223,7 +223,7 @@ context "Markup" do index.commit("Add alpha.jpg") page = @wiki.page("Bilbo Baggins") - assert_equal %{

a a b

}, page.formatted_data + assert_equal %{

a a b

}, page.formatted_data end test "image with relative path" do @@ -235,7 +235,7 @@ context "Markup" do page = @wiki.page("Bilbo Baggins") output = page.formatted_data - assert_equal %{

a a b

}, output + assert_equal %{

a a b

}, output end test "image with absolute path on a preview" do @@ -245,7 +245,7 @@ context "Markup" do index.commit("Add alpha.jpg") page = @wiki.preview_page("Test", "a [[/alpha.jpg]] b", :markdown) - assert_equal %{

a b

}, page.formatted_data + assert_equal %{

a b

}, page.formatted_data end test "image with relative path on a preview" do @@ -256,12 +256,12 @@ context "Markup" do index.commit("Add alpha.jpg") page = @wiki.preview_page("Test", "a [[alpha.jpg]] [[greek/alpha.jpg]] b", :markdown) - assert_equal %{

a b

}, page.formatted_data + assert_equal %{

a b

}, page.formatted_data end test "image with alt" do content = "a [[alpha.jpg|alt=Alpha Dog]] b" - output = %{

a Alpha Dog b

} + output = %{

a Alpha Dog b

} relative_image(content, output) end @@ -269,7 +269,7 @@ context "Markup" do %w{em px}.each do |unit| %w{width height}.each do |dim| content = "a [[alpha.jpg|#{dim}=100#{unit}]] b" - output = "

a b

" + output = "

a b

" relative_image(content, output) end end @@ -278,7 +278,7 @@ context "Markup" do test "image with bogus dimension" do %w{width height}.each do |dim| content = "a [[alpha.jpg|#{dim}=100]] b" - output = "

a b

" + output = "

a b

" relative_image(content, output) end end @@ -286,7 +286,7 @@ context "Markup" do test "image with vertical align" do %w{top texttop middle absmiddle bottom absbottom baseline}.each do |align| content = "a [[alpha.jpg|align=#{align}]] b" - output = "

a b

" + output = "

a b

" relative_image(content, output) end end @@ -294,40 +294,40 @@ context "Markup" do test "image with horizontal align" do %w{left center right}.each do |align| content = "a [[alpha.jpg|align=#{align}]] b" - output = "

a b

" + output = "

a b

" relative_image(content, output) end end test "image with float" do content = "a\n\n[[alpha.jpg|float]]\n\nb" - output = "

a

\n\n

\n\n

b

" + output = "

a

\n\n

\n\n

b

" relative_image(content, output) end test "image with float and align" do %w{left right}.each do |align| content = "a\n\n[[alpha.jpg|float|align=#{align}]]\n\nb" - output = "

a

\n\n

\n\n

b

" + output = "

a

\n\n

\n\n

b

" relative_image(content, output) end end test "image with frame" do content = "a\n\n[[alpha.jpg|frame]]\n\nb" - output = "

a

\n\n

\n\n

b

" + output = "

a

\n\n

\n\n

b

" relative_image(content, output) end test "absolute image with frame" do content = "a\n\n[[http://example.com/bilbo.jpg|frame]]\n\nb" - output = "

a

\n\n

\n\n

b

" + output = "

a

\n\n

\n\n

b

" relative_image(content, output) end test "image with frame and alt" do content = "a\n\n[[alpha.jpg|frame|alt=Alpha]]\n\nb" - output = "

a

\n\n

\"Alpha\"Alpha

\n\n

b

" + output = "

a

\n\n

\"Alpha\"Alpha

\n\n

b

" relative_image(content, output) end @@ -376,7 +376,7 @@ context "Markup" do test "code blocks" do content = "a\n\n```ruby\nx = 1\n```\n\nb" - output = "

a

\n\n
" +
+    output = "

a

\n\n
\n
" +
              "x = " +
              "1\n
\n
\n\n\n

b

" @@ -391,7 +391,7 @@ context "Markup" do test "code blocks with carriage returns" do content = "a\r\n\r\n```ruby\r\nx = 1\r\n```\r\n\r\nb" - output = "

a

\n\n
" +
+    output = "

a

\n\n
\n
" +
              "x = " +
              "1\n
\n
\n\n\n

b

" From 5163f11ecb1830f461f6ddacf7fbb79efccdd7e5 Mon Sep 17 00:00:00 2001 From: rick Date: Thu, 22 Dec 2011 09:30:27 -0700 Subject: [PATCH 6/7] allow ftp and irc protocol links in wiki pages --- lib/gollum/sanitization.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gollum/sanitization.rb b/lib/gollum/sanitization.rb index ce813e6b..615feb26 100644 --- a/lib/gollum/sanitization.rb +++ b/lib/gollum/sanitization.rb @@ -43,7 +43,7 @@ module Gollum # Default whitelisted protocols for URLs. PROTOCOLS = { - 'a' => {'href' => ['http', 'https', 'mailto', :relative]}, + 'a' => {'href' => ['http', 'https', 'mailto', 'ftp', 'irc', :relative]}, 'img' => {'src' => ['http', 'https', :relative]} }.freeze From 7b0a714e1f5f2100dd50a0af48b4c0d5a4095c42 Mon Sep 17 00:00:00 2001 From: Patrik Ragnarsson Date: Sat, 17 Mar 2012 19:06:11 +0100 Subject: [PATCH 7/7] Serve Gravatars via SSL. --- lib/gollum/frontend/templates/history.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gollum/frontend/templates/history.mustache b/lib/gollum/frontend/templates/history.mustache index 0f8c165d..eb4b6f5b 100755 --- a/lib/gollum/frontend/templates/history.mustache +++ b/lib/gollum/frontend/templates/history.mustache @@ -29,7 +29,7 @@ - avatar: {{author}} {{author}}