diff --git a/gollum.gemspec b/gollum.gemspec index 62c84760..2071a8fa 100644 --- a/gollum.gemspec +++ b/gollum.gemspec @@ -24,7 +24,10 @@ Gem::Specification.new do |s| s.extra_rdoc_files = %w[README.md LICENSE] s.add_dependency('grit', [">= 2.0.0", "< 3.0.0"]) + s.add_dependency('github-markup', [">= 0.4.0", "< 1.0.0"]) s.add_dependency('albino', "~> 1.0.0") + s.add_dependency('sinatra', "~> 1.0.0") + s.add_dependency('mustache', [">= 0.11.2", "< 1.0.0"]) s.add_development_dependency('shoulda') s.add_development_dependency('mocha') diff --git a/lib/gollum/frontend/app.rb b/lib/gollum/frontend/app.rb new file mode 100644 index 00000000..e7044548 --- /dev/null +++ b/lib/gollum/frontend/app.rb @@ -0,0 +1,62 @@ +require 'rubygems' + +require 'sinatra' +require 'gollum' +require 'mustache/sinatra' + +require 'gollum/frontend/views/layout' + +$path = "~/dev/mojombo/gollum/test/examples/lotr.git" + +module Precious + class App < Sinatra::Base + register Mustache::Sinatra + + dir = File.dirname(File.expand_path(__FILE__)) + + # We want to serve public assets for now + set :public, "#{dir}/public" + set :static, true + + set :mustache, { + # Tell mustache where the Views constant lives + :namespace => Precious, + + # Mustache templates live here + :templates => "#{dir}/templates", + + # Tell mustache where the views are + :views => "#{dir}/views" + } + + # Sinatra error handling + configure :development, :staging do + set :raise_errors, false + set :show_exceptions, true + set :dump_errors, true + set :clean_trace, false + end + + get '/' do + show_page_or_file('Home') + end + + get '/*' do + show_page_or_file(params[:splat].first) + end + + def show_page_or_file(name) + wiki = Gollum::Wiki.new($path) + if page = wiki.page(name) + @content = page.formatted_data + mustache :page + elsif file = wiki.file(name) + file.raw_data + else + halt 404 + end + end + end +end + +Precious::App.run! diff --git a/lib/gollum/frontend/public/css/global.css b/lib/gollum/frontend/public/css/global.css new file mode 100644 index 00000000..f9e98c50 --- /dev/null +++ b/lib/gollum/frontend/public/css/global.css @@ -0,0 +1,93 @@ +h1, h2, h3, h4, h5, h6 { + color: #f90; + font-weight: bold; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} + +h1 { + font-size: 36pt; +} + +h2 { + font-size: 32pt; +} + +h3 { + font-size: 28pt; +} + +h4 { + font-size: 24pt; +} + +h5 { + font-size: 20pt; +} + +h6 { + font-size: 16pt; +} + +p { + font-family: Georgia, serif; + font-size: 14pt; + line-height: 22pt; +} + +#content { + width: 60em; + margin: 0 auto; + color: #666; +} + +/***********************/ + +.frame { + margin: 1em 0; + display: inline-block; +} + +.frame img { + display: block; +} + +.frame > span { + display: block; + border: 1px solid #aaa; + padding: 4px; +} + +.frame span span { + display: block; + font-size: 10pt; + margin: 0; + padding: 4px 0 2px 0; + text-align: center; + line-height: 10pt; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} + +.float-left { + float: left; + padding: .5em 1em .25em 0; +} + +.float-right { + float: right; + padding: .5em 0 .25em 1em; +} + +.align-left { + display: block; + text-align: left; +} + +.align-center { + display: block; + text-align: center; +} + +.align-right { + display: block; + text-align: right; +} \ No newline at end of file diff --git a/lib/gollum/frontend/templates/layout.mustache b/lib/gollum/frontend/templates/layout.mustache new file mode 100644 index 00000000..5d3ad456 --- /dev/null +++ b/lib/gollum/frontend/templates/layout.mustache @@ -0,0 +1,15 @@ + + + + + + Gollum - {{title}} + + + + +
+ {{{yield}}} +
+ + diff --git a/lib/gollum/frontend/templates/page.mustache b/lib/gollum/frontend/templates/page.mustache new file mode 100644 index 00000000..86ee4641 --- /dev/null +++ b/lib/gollum/frontend/templates/page.mustache @@ -0,0 +1 @@ +{{{content}}} \ No newline at end of file diff --git a/lib/gollum/frontend/views/layout.rb b/lib/gollum/frontend/views/layout.rb new file mode 100644 index 00000000..ae53aa24 --- /dev/null +++ b/lib/gollum/frontend/views/layout.rb @@ -0,0 +1,12 @@ +module Precious + module Views + class Layout < Mustache + include Rack::Utils + alias_method :h, :escape_html + + def title + "Home" + end + end + end +end diff --git a/lib/gollum/frontend/views/page.rb b/lib/gollum/frontend/views/page.rb new file mode 100644 index 00000000..a1aa9b0d --- /dev/null +++ b/lib/gollum/frontend/views/page.rb @@ -0,0 +1,11 @@ +module Precious + module Views + class Page < Layout + attr_reader :content + + def title + "A Page" + end + end + end +end diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index c7ad7bd9..d1a7010b 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -100,7 +100,7 @@ module Gollum containered = true align ||= 'left' if %w{left right}.include?(align) - classes << "float-#{align};" + classes << "float-#{align}" end elsif %w{top texttop middle absmiddle bottom absbottom baseline}.include?(align) attrs << %{align="#{align}"} @@ -136,12 +136,12 @@ module Gollum if opts['frame'] || containered classes << 'frame' if opts['frame'] - %{
} + - %{
} + + %{} + + %{} + %{} + - (alt ? %{

#{alt}

} : '') + - %{
} + - %{
} + (alt ? %{#{alt}} : '') + + %{} + + %{} else %{} end diff --git a/templates/formatting.html b/templates/formatting.html new file mode 100644 index 00000000..dd0b3df5 --- /dev/null +++ b/templates/formatting.html @@ -0,0 +1,92 @@ + + +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas hendrerit eros felis. Nunc non enim at dolor malesuada pellentesque a quis nibh. Aliquam sit amet pretium ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas hendrerit eros felis. Nunc non enim at dolor malesuada pellentesque a quis nibh. Aliquam sit amet pretium ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas hendrerit eros felis. Nunc non enim at dolor malesuada pellentesque a quis nibh. Aliquam sit amet pretium ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas hendrerit eros felis. Nunc non enim at dolor malesuada pellentesque a quis nibh. Aliquam sit amet pretium ante. + +

+
+ +

Google

+
+
+ +Fusce ullamcorper orci enim. Duis lectus elit, convallis ac convallis sit amet, euismod imperdiet dolor. Nunc egestas nisi quis magna feugiat vitae fringilla elit fermentum. + +
+
+ +

Google

+
+
+ +Vivamus sollicitudin dolor sit amet elit mollis ultricies. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas hendrerit eros felis. Nunc non enim at dolor malesuada pellentesque a quis nibh. Aliquam sit amet pretium ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas hendrerit eros felis. Nunc non enim at dolor malesuada pellentesque a quis nibh. Aliquam sit amet pretium ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas hendrerit eros felis. Nunc non enim at dolor malesuada pellentesque a quis nibh. Aliquam sit amet pretium ante.

+ +

+
+ +

Google

+
+
+ +

Phasellus porta dignissim leo vel hendrerit. Nulla pellentesque nisi ac nunc malesuada aliquam. Nullam et cursus augue. Sed rhoncus pharetra odio, vel dictum diam facilisis et. Etiam molestie justo ut purus elementum rhoncus. Fusce nec augue lectus. Proin a nisl ac lectus facilisis tempus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent blandit tempus libero, in interdum odio dignissim quis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec quis arcu a metus tincidunt scelerisque eget sed mauris. Nullam pellentesque faucibus sodales. Integer ullamcorper enim id nibh tempor ultricies.

+ +
+
+ +

Google

+
+
+ +

Phasellus porta dignissim leo vel hendrerit. Nulla pellentesque nisi ac nunc malesuada aliquam. Nullam et cursus augue. Sed rhoncus pharetra odio, vel dictum diam facilisis et. Etiam molestie justo ut purus elementum rhoncus. Fusce nec augue lectus. Proin a nisl ac lectus facilisis tempus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent blandit tempus libero, in interdum odio dignissim quis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec quis arcu a metus tincidunt scelerisque eget sed mauris. Nullam pellentesque faucibus sodales. Integer ullamcorper enim id nibh tempor ultricies.

+ +

+

+
+ +
+
+

+ +

Phasellus porta dignissim leo vel hendrerit. Nulla pellentesque nisi ac nunc malesuada aliquam. Nullam et cursus augue. Sed rhoncus pharetra odio, vel dictum diam facilisis et. Etiam molestie justo ut purus elementum rhoncus. Fusce nec augue lectus. Proin a nisl ac lectus facilisis tempus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent blandit tempus libero, in interdum odio dignissim quis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec quis arcu a metus tincidunt scelerisque eget sed mauris. Nullam pellentesque faucibus sodales. Integer ullamcorper enim id nibh tempor ultricies.

+
+ +
+
Phasellus porta dignissim leo vel hendrerit. Nulla pellentesque nisi ac nunc malesuada aliquam. Nullam et cursus augue. Sed rhoncus pharetra odio, vel dictum diam facilisis et. Etiam molestie justo ut purus elementum rhoncus. Fusce nec augue lectus. Proin a nisl ac lectus facilisis tempus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent blandit tempus libero, in interdum odio dignissim quis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec quis arcu a metus tincidunt scelerisque eget sed mauris. Nullam pellentesque faucibus sodales. Integer ullamcorper enim id nibh tempor ultricies.

\ No newline at end of file diff --git a/test/examples/lotr.git/objects/01/676dc56d35c1999c6fe9043fe8b78d52a0e797 b/test/examples/lotr.git/objects/01/676dc56d35c1999c6fe9043fe8b78d52a0e797 new file mode 100644 index 00000000..6ff4cb89 Binary files /dev/null and b/test/examples/lotr.git/objects/01/676dc56d35c1999c6fe9043fe8b78d52a0e797 differ diff --git a/test/examples/lotr.git/objects/07/9a5887755dc6fbacfdb672abc168b0cce698fa b/test/examples/lotr.git/objects/07/9a5887755dc6fbacfdb672abc168b0cce698fa new file mode 100644 index 00000000..682d6357 Binary files /dev/null and b/test/examples/lotr.git/objects/07/9a5887755dc6fbacfdb672abc168b0cce698fa differ diff --git a/test/examples/lotr.git/objects/11/5bbf9fe8004aa6a06274b44ab93a84a06e3204 b/test/examples/lotr.git/objects/11/5bbf9fe8004aa6a06274b44ab93a84a06e3204 new file mode 100644 index 00000000..25024714 Binary files /dev/null and b/test/examples/lotr.git/objects/11/5bbf9fe8004aa6a06274b44ab93a84a06e3204 differ diff --git a/test/examples/lotr.git/objects/14/78ebf7ad4dc6a06c76cdb4aca0eba7f78796aa b/test/examples/lotr.git/objects/14/78ebf7ad4dc6a06c76cdb4aca0eba7f78796aa new file mode 100644 index 00000000..e9ffb999 Binary files /dev/null and b/test/examples/lotr.git/objects/14/78ebf7ad4dc6a06c76cdb4aca0eba7f78796aa differ diff --git a/test/examples/lotr.git/objects/1e/716a3178a76fe39ee7b88f0cf2dc4a447566f6 b/test/examples/lotr.git/objects/1e/716a3178a76fe39ee7b88f0cf2dc4a447566f6 new file mode 100644 index 00000000..42fc7843 Binary files /dev/null and b/test/examples/lotr.git/objects/1e/716a3178a76fe39ee7b88f0cf2dc4a447566f6 differ diff --git a/test/examples/lotr.git/objects/28/bb2f40d2e4c82a4ae62ef619a80a4b555e23ee b/test/examples/lotr.git/objects/28/bb2f40d2e4c82a4ae62ef619a80a4b555e23ee new file mode 100644 index 00000000..36693312 Binary files /dev/null and b/test/examples/lotr.git/objects/28/bb2f40d2e4c82a4ae62ef619a80a4b555e23ee differ diff --git a/test/examples/lotr.git/objects/2c/b9156ad383914561a8502fc70f5a1d887e48ad b/test/examples/lotr.git/objects/2c/b9156ad383914561a8502fc70f5a1d887e48ad new file mode 100644 index 00000000..9d786ae3 Binary files /dev/null and b/test/examples/lotr.git/objects/2c/b9156ad383914561a8502fc70f5a1d887e48ad differ diff --git a/test/examples/lotr.git/objects/37/fcc52509fb09142cafccaada0252f3de81873c b/test/examples/lotr.git/objects/37/fcc52509fb09142cafccaada0252f3de81873c new file mode 100644 index 00000000..88edefe5 Binary files /dev/null and b/test/examples/lotr.git/objects/37/fcc52509fb09142cafccaada0252f3de81873c differ diff --git a/test/examples/lotr.git/objects/4c/770a352f1e86071b680f879a89874bf59008fa b/test/examples/lotr.git/objects/4c/770a352f1e86071b680f879a89874bf59008fa new file mode 100644 index 00000000..0307e9c6 Binary files /dev/null and b/test/examples/lotr.git/objects/4c/770a352f1e86071b680f879a89874bf59008fa differ diff --git a/test/examples/lotr.git/objects/4f/de706c7c8d3b30b6caec8c82ff4c01261350f2 b/test/examples/lotr.git/objects/4f/de706c7c8d3b30b6caec8c82ff4c01261350f2 new file mode 100644 index 00000000..78a9ea4e --- /dev/null +++ b/test/examples/lotr.git/objects/4f/de706c7c8d3b30b6caec8c82ff4c01261350f2 @@ -0,0 +1,3 @@ +xK +1]}ɯ{":iy +^̐vIِCɖBXBRy4Fim`,uՔs+p!tqӐvi䘥AZ9Yt9v^յ3F}ɆJ \ No newline at end of file diff --git a/test/examples/lotr.git/objects/71/4323c104239440a5c66ab12a67ed07a83c404f b/test/examples/lotr.git/objects/71/4323c104239440a5c66ab12a67ed07a83c404f new file mode 100644 index 00000000..b003ac7f Binary files /dev/null and b/test/examples/lotr.git/objects/71/4323c104239440a5c66ab12a67ed07a83c404f differ diff --git a/test/examples/lotr.git/objects/79/8f6564abb42d7ed34621d53595cbbe84638949 b/test/examples/lotr.git/objects/79/8f6564abb42d7ed34621d53595cbbe84638949 new file mode 100644 index 00000000..df9cf90a --- /dev/null +++ b/test/examples/lotr.git/objects/79/8f6564abb42d7ed34621d53595cbbe84638949 @@ -0,0 +1 @@ +xA@ 9ϯMO ı 8P8TrObe2K]0f Gʀp SNh[~-nN}ނ-rL 0&YRiN_+8/%L|d0+,Vl=YGhu-G)A$ЩLrבR2ILaH?.R-+u+#FU_<3&Tկ۶/7u=GmWg.P +%]7`K{ O/7ppXߎ=6v+ŋ /n>O1x? fݎR3h+n}Dnoml \ No newline at end of file diff --git a/test/examples/lotr.git/objects/d9/e379fdea55b6ff3b71c110b3d2d7b55bbfd5ee b/test/examples/lotr.git/objects/d9/e379fdea55b6ff3b71c110b3d2d7b55bbfd5ee new file mode 100644 index 00000000..721127b6 Binary files /dev/null and b/test/examples/lotr.git/objects/d9/e379fdea55b6ff3b71c110b3d2d7b55bbfd5ee differ diff --git a/test/examples/lotr.git/objects/e3/415337d9ae2c0b4b00054a93727f4a7d3c3ca5 b/test/examples/lotr.git/objects/e3/415337d9ae2c0b4b00054a93727f4a7d3c3ca5 new file mode 100644 index 00000000..5f5e49e0 Binary files /dev/null and b/test/examples/lotr.git/objects/e3/415337d9ae2c0b4b00054a93727f4a7d3c3ca5 differ diff --git a/test/examples/lotr.git/objects/f2/5eccd98e9b667f9e22946f3e2f945378b8a72d b/test/examples/lotr.git/objects/f2/5eccd98e9b667f9e22946f3e2f945378b8a72d new file mode 100644 index 00000000..8b7776d1 --- /dev/null +++ b/test/examples/lotr.git/objects/f2/5eccd98e9b667f9e22946f3e2f945378b8a72d @@ -0,0 +1,2 @@ +xKj0@))#{$@hd&,k|CiuK͞q#EDn<ҐmBjׅE!jQ +TZJl1uU;|٧n/ x?hZ]Y`@4'=/)zsmp<`.ϣ5,L \ No newline at end of file diff --git a/test/examples/lotr.git/objects/f4/46205ac9df5b6a40c00785f06827f4a4dbd727 b/test/examples/lotr.git/objects/f4/46205ac9df5b6a40c00785f06827f4a4dbd727 new file mode 100644 index 00000000..15bedfdd --- /dev/null +++ b/test/examples/lotr.git/objects/f4/46205ac9df5b6a40c00785f06827f4a4dbd727 @@ -0,0 +1 @@ +xKj0@))#i,KPJEk}fhd&8^`).9&AO#)5-КGM(,F"-E"By T,V=VW9x]xl
b

\n" + output = "

a b

\n" 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

\n" + output = "

a

\n\n

\n\n

b

\n" 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

\n" + output = "

a

\n\n

\n\n

b

\n" 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

\n" + output = "

a

\n\n

\n\n

b

\n" 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

\n" + output = "

a

\n\n

\"Alpha\"Alpha

\n\n

b

\n" relative_image(content, output) end diff --git a/test/test_page.rb b/test/test_page.rb index 45b19b91..b5dac678 100644 --- a/test/test_page.rb +++ b/test/test_page.rb @@ -28,7 +28,7 @@ context "Page" do test "page versions" do page = @wiki.page('Bilbo Baggins') - assert_equal ['5bc1aaec6149e854078f1d0f8b71933bbc6c2e43'], + assert_equal ["f25eccd98e9b667f9e22946f3e2f945378b8a72d", "5bc1aaec6149e854078f1d0f8b71933bbc6c2e43"], page.versions.map { |v| v.id } end diff --git a/test/test_wiki.rb b/test/test_wiki.rb index 8d3ceded..2bb913de 100644 --- a/test/test_wiki.rb +++ b/test/test_wiki.rb @@ -17,25 +17,27 @@ context "Wiki" do test "shows paginated log with no page" do Gollum::Wiki.per_page = 3 assert_equal %w( - f01428b3138994aab19d5f880b6f37336ddf1f24 - fbabba862dfa7ac35b39042dd4ad780c9f67b8cb - df26e61e707116f81ebc6b935ec6d1676b7e96c4), + 4fde706c7c8d3b30b6caec8c82ff4c01261350f2 + 1e716a3178a76fe39ee7b88f0cf2dc4a447566f6 + afe2034d400ba21e13361f38f74900c51dbc7fde), @wiki.log.map { |c| c.id } end test "shows paginated log with 1st page" do Gollum::Wiki.per_page = 3 assert_equal %w( - f01428b3138994aab19d5f880b6f37336ddf1f24 - fbabba862dfa7ac35b39042dd4ad780c9f67b8cb - df26e61e707116f81ebc6b935ec6d1676b7e96c4), + 4fde706c7c8d3b30b6caec8c82ff4c01261350f2 + 1e716a3178a76fe39ee7b88f0cf2dc4a447566f6 + afe2034d400ba21e13361f38f74900c51dbc7fde), @wiki.log(:page => 1).map { |c| c.id } end test "shows paginated log with next page" do Gollum::Wiki.per_page = 3 assert_equal %w( - 5bc1aaec6149e854078f1d0f8b71933bbc6c2e43), + f25eccd98e9b667f9e22946f3e2f945378b8a72d + b0d108328459e44fff4a76cd19b10ddc34adce4b + f01428b3138994aab19d5f880b6f37336ddf1f24), @wiki.log(:page => 2).map { |c| c.id } end end