diff --git a/lib/gollum/public/gollum/stylesheets/gollum.scss b/lib/gollum/public/gollum/stylesheets/gollum.scss
index a145f625..d2358015 100644
--- a/lib/gollum/public/gollum/stylesheets/gollum.scss
+++ b/lib/gollum/public/gollum/stylesheets/gollum.scss
@@ -676,7 +676,7 @@ ul.actions {
li {
a {
- &.file, &.folder {
+ &.file, &.page, &.folder {
background-position: 0 1px;
background-repeat: no-repeat;
padding-left: 20px;
@@ -685,6 +685,10 @@ ul.actions {
&.file {
background-image: $img_fileview_doc;
}
+
+ &.page {
+ background-image: $img_fileview_doc;
+ }
&.folder {
background-image: $img_fileview_folder;
diff --git a/lib/gollum/views/pages.rb b/lib/gollum/views/pages.rb
index 465d4487..612ba2ad 100644
--- a/lib/gollum/views/pages.rb
+++ b/lib/gollum/views/pages.rb
@@ -37,34 +37,34 @@ module Precious
def files_folders
if has_results
folders = {}
- page_files = {}
+ files = {}
# 1012: Folders and Pages need to be separated
- @results.each do |page|
- page_path = page.path
- page_path = page_path.sub(/^#{Regexp.escape(@path)}\//, '') unless @path.nil?
+ @results.each do |result|
+ result_path = result.path
+ result_path = result_path.sub(/^#{Regexp.escape(@path)}\//, '') unless @path.nil?
- if page_path.include?('/')
- folder = page_path.split('/').first
+ if result_path.include?('/')
+ # result contains a folder
+ folder = result_path.split('/').first
folder_path = @path ? "#{@path}/#{folder}" : folder
folder_link = %{
#{folder}}
folders[folder] = folder_link unless folders.key?(folder)
- elsif page_path != ".gitkeep"
- if defined? page.format
- url = "#{@base_url}/#{page.escaped_url_path}"
- else
- url = "#{@base_url}/#{page.escaped_url_path}#{page.name}"
- end
- page_link = %{#{page.name}#{delete_file(url) if @allow_editing}}
- page_files[page.name] = page_link
+ elsif result_path != ".gitkeep"
+ # result is either a valid gollum page or another type of file
+ klass = (defined? result.format) ? "page" : "file"
+ url = "#{@base_url}/#{result.escaped_url_path}"
+
+ file_link = %{#{result.filename}#{delete_file(url) if @allow_editing}}
+ files[result.name] = file_link
end
end
# 1012: All Pages should be rendered as Folders first, then Pages, each sorted alphabetically
result = Hash[folders.sort_by{| key, value | key.downcase} ].values.join("\n") + "\n"
- result += Hash[page_files.sort_by{ | key, value | key.downcase } ].values.join("\n")
+ result += Hash[files.sort_by{ | key, value | key.downcase } ].values.join("\n")
result
else
diff --git a/test/test_pages_view.rb b/test/test_pages_view.rb
index 9f279d0e..bd06939c 100644
--- a/test/test_pages_view.rb
+++ b/test/test_pages_view.rb
@@ -6,6 +6,7 @@ FakePageResult = Struct.new(:path) do
def name
File.basename(path, File.extname(path)).gsub("-", " ")
end
+ alias filename name
def escaped_url_path
CGI.escape(path).gsub(/\..+$/, "").gsub("%2F", "/")
end
@@ -18,8 +19,10 @@ FakeFileResult = Struct.new(:path) do
def name
File.basename(path).gsub("-", " ")
end
+ alias filename name
def escaped_url_path
result = path.sub(/\/[^\/]+$/, '/')
+ result = result << name if result.include?('/')
CGI.escape(result).gsub("%2F", "/")
end
end
@@ -43,7 +46,7 @@ context "Precious::Views::Pages" do
@page.instance_variable_set("@base_url", "")
results = [FakePageResult.new("Gondor/Bromir.md"), FakePageResult.new("Hobbit.md"), FakePageResult.new("Home.md"), FakePageResult.new("Mordor/Eye-Of-Sauron.md"), FakePageResult.new("Mordor/todo.md"), FakePageResult.new("Rivendell/Elrond.md"), FakePageResult.new("My-Precious.md"), FakePageResult.new("Zamin.md"), FakePageResult.new("Samwise-Gamgee.md"), FakePageResult.new("roast-mutton.md"), FakePageResult.new("Bilbo-Baggins.md")]
@page.instance_variable_set("@results", results)
- assert_equal %{Gondor\nMordor\nRivendell\nBilbo Baggins\nHobbit\nHome\nMy Precious\nroast mutton\nSamwise Gamgee\nZamin}, @page.files_folders
+ assert_equal %{Gondor\nMordor\nRivendell\nBilbo Baggins\nHobbit\nHome\nMy Precious\nroast mutton\nSamwise Gamgee\nZamin}, @page.files_folders
end
test "files_folders from subdir" do
@@ -51,7 +54,7 @@ context "Precious::Views::Pages" do
@page.instance_variable_set("@base_url", "")
results = [FakePageResult.new("Mordor/Eye-Of-Sauron.md"), FakeFileResult.new("Mordor/Aragorn.pdf"), FakePageResult.new("Mordor/Orc/Saruman.md"), FakeFileResult.new("Mordor/.gitkeep")]
@page.instance_variable_set("@results", results)
- assert_equal %{Orc\nAragorn.pdf\nEye Of Sauron}, @page.files_folders
+ assert_equal %{Orc\nAragorn.pdf\nEye Of Sauron}, @page.files_folders
end
test "base url" do
@@ -60,6 +63,6 @@ context "Precious::Views::Pages" do
@page.instance_variable_set("@base_url", "/wiki")
results = [FakePageResult.new("Mordor/Eye-Of-Sauron.md"), FakeFileResult.new("Mordor/Aragorn.pdf"), FakePageResult.new("Mordor/Orc/Saruman.md"), FakePageResult.new("Mordor/.gitkeep")]
@page.instance_variable_set("@results", results)
- assert_equal %{Orc\nAragorn.pdf\nEye Of Sauron}, @page.files_folders
+ assert_equal %{Orc\nAragorn.pdf\nEye Of Sauron}, @page.files_folders
end
end