From 2bc9b2ec868643d20999b91938788403c5d966fe Mon Sep 17 00:00:00 2001 From: Tom Preston-Werner Date: Mon, 26 Jul 2010 16:33:19 -0700 Subject: [PATCH] Implement Page#footer and display footer in frontend. --- lib/gollum/frontend/public/css/screen.css | 5 ++ lib/gollum/frontend/templates/page.mustache | 7 ++- lib/gollum/frontend/views/page.rb | 17 ++++++- lib/gollum/page.rb | 44 ++++++++++++++++++ .../06/131480411710c92a82fe2d1e76932c70feb2e5 | Bin 0 -> 234 bytes .../0e/d8cbe0a25235bd867e65193c7d837c66b328ef | 3 ++ .../24/49c2681badfd3c189e8ed658dacffe8ba48fe5 | Bin 0 -> 157 bytes .../96/97dc65e095658bbd1b8e8678e08881e86d32f1 | Bin 0 -> 57 bytes test/examples/lotr.git/refs/heads/master | 2 +- test/test_page.rb | 12 +++++ 10 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 test/examples/lotr.git/objects/06/131480411710c92a82fe2d1e76932c70feb2e5 create mode 100644 test/examples/lotr.git/objects/0e/d8cbe0a25235bd867e65193c7d837c66b328ef create mode 100644 test/examples/lotr.git/objects/24/49c2681badfd3c189e8ed658dacffe8ba48fe5 create mode 100644 test/examples/lotr.git/objects/96/97dc65e095658bbd1b8e8678e08881e86d32f1 diff --git a/lib/gollum/frontend/public/css/screen.css b/lib/gollum/frontend/public/css/screen.css index 673c5692..304d1c38 100644 --- a/lib/gollum/frontend/public/css/screen.css +++ b/lib/gollum/frontend/public/css/screen.css @@ -339,6 +339,11 @@ html {overflow-y: scroll;} /* Special markup considerations */ +.wikistyle.gollum.footer { + border-top: 4px solid #f0f0f0; + margin-top: 2em; +} + .wikistyle.gollum > h1:first-child { display: none; } diff --git a/lib/gollum/frontend/templates/page.mustache b/lib/gollum/frontend/templates/page.mustache index 89164917..321814dc 100644 --- a/lib/gollum/frontend/templates/page.mustache +++ b/lib/gollum/frontend/templates/page.mustache @@ -4,9 +4,14 @@ Home | Edit

{{human_name}}

-
+
{{{content}}}
+ {{#has_footer}} + + {{/has_footer}}
diff --git a/lib/gollum/frontend/views/page.rb b/lib/gollum/frontend/views/page.rb index 88f1297e..d3681288 100644 --- a/lib/gollum/frontend/views/page.rb +++ b/lib/gollum/frontend/views/page.rb @@ -1,7 +1,7 @@ module Precious module Views class Page < Layout - attr_reader :content, :page + attr_reader :content, :page, :footer def human_name @page.title @@ -23,6 +23,21 @@ module Precious @page.version.authored_date.strftime("%Y-%m-%d %H:%M:%S") end + def has_footer + @footer ||= @page.footer + !@footer.nil? + end + + def footer_content + @footer ||= @page.footer + @footer.formatted_data + end + + def footer_format + @footer ||= @page.footer + @footer.format.to_s + end + def versions i = @page.versions.size + 1 @page.versions.map do |v| diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index 7edb9002..cf28da60 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -148,6 +148,28 @@ module Gollum @wiki.repo.log('master', @path, log_pagination_options(options)) end + # Public: The footer Page. + # + # Returns the footer Page or nil if none exists. + def footer + dirs = self.path.split('/') + dirs.pop + while !dirs.empty? + tree = self.version.tree / dirs.join('/') + if page = find_page_in_this_tree(tree, dirs.join('/'), '_Footer') + return page + end + dirs.pop + end + + tree = self.version.tree + if page = find_page_in_this_tree(tree, '', '_Footer') + return page + end + + return nil + end + ######################################################################### # # Class Methods @@ -245,6 +267,28 @@ module Gollum return nil # nothing was found end + # Find a page in a given tree without recursing into subtrees. + # + # tree - The Grit::Tree in which to look. + # dir - The String path of the given Grit::Tree. + # name - The canonical String page name. + # + # Returns a Gollum::Page or nil if the page could not be found. + def find_page_in_this_tree(tree, dir, name) + treemap = {} + tree.contents.each do |item| + case item + when Grit::Blob + if page_match(name, item.name) + path = dir == '' ? '' : ::File.join('/', dir) + return populate(item, path) + end + end + end + + return nil # nothing was found + end + # Populate the Page with information from the Blob. # # blob - The Grit::Blob that contains the info. diff --git a/test/examples/lotr.git/objects/06/131480411710c92a82fe2d1e76932c70feb2e5 b/test/examples/lotr.git/objects/06/131480411710c92a82fe2d1e76932c70feb2e5 new file mode 100644 index 0000000000000000000000000000000000000000..268d2283f9918b3b16fdfc35d64f34c3323c0fdb GIT binary patch literal 234 zcmV5He)a}FfcPQQEYF!db67`ac%NP!Cv765^Et{jSigD5tv+XNdLiAXnYCQ6DQ}s$x zD@rnRQW<_de;@3kpuNjcbM+lzHr`3oZ%#=yF#rMu-~6JK{2~Sw&qEo~Yya9v%e?jP1r((wXXclJUAAhQ{EN9^KN5Yo8Ut^c{ItCD_E!c}alBi8 keo1N($o+3_8L{qr=&G=4>+;7HD)k0FfcPQQE;tH)%8!)4NfdA%FolwO<|av-TaRCMswBe zra(D|t504(oxQCTsy5y&Kfffk2&8J-^gF2!rlxl9mF{b+c+k=KBG>36R8?was$Nz> zIzyqe@3X7JBTEmla$2NHStB?`rvxdl0u3R+s_i8