diff --git a/lib/gollum/views/pages.rb b/lib/gollum/views/pages.rb
index bd020d2a..ff11fcf7 100644
--- a/lib/gollum/views/pages.rb
+++ b/lib/gollum/views/pages.rb
@@ -31,9 +31,11 @@ module Precious
def files_folders
if has_results
- folder_links = []
+ folders = {}
+ page_files = {}
- @results.map { |page|
+ # 1012: Folders and Pages need to be separated
+ @results.each do |page|
page_path = page.path.sub(/^#{@path}\//, '')
if page_path.include?('/')
@@ -41,19 +43,23 @@ module Precious
folder_path = @path ? "#{@path}/#{folder}" : folder
folder_link = %{
#{folder}}
- unless folder_links.include?(folder_link)
- folder_links << folder_link
-
- folder_link
- end
+ folders[folder] = folder_link unless folders.key?(folder)
elsif page_path != ".gitkeep"
if defined? page.format
- %{#{page.name}}
+ page_link = %{#{page.name}}
+ page_files[page.name] = page_link
else
- %{#{page.name}}
+ page_link = %{#{page.name}}
+ page_files[page.name] = page_link
end
end
- }.compact.join("\n")
+ 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
else
""
end
diff --git a/test/test_pages_view.rb b/test/test_pages_view.rb
index 868ccacd..9f279d0e 100644
--- a/test/test_pages_view.rb
+++ b/test/test_pages_view.rb
@@ -39,12 +39,19 @@ context "Precious::Views::Pages" do
assert_equal 'Home', @page.breadcrumb
end
- test "files_folders" do
+ test "folders first" 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
+ end
+
+ test "files_folders from subdir" do
@page.instance_variable_set("@path", "Mordor")
@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 %{Eye Of Sauron\nAragorn.pdf\nOrc}, @page.files_folders
+ assert_equal %{Orc\nAragorn.pdf\nEye Of Sauron}, @page.files_folders
end
test "base url" do
@@ -53,6 +60,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 %{Eye Of Sauron\nAragorn.pdf\nOrc}, @page.files_folders
+ assert_equal %{Orc\nAragorn.pdf\nEye Of Sauron}, @page.files_folders
end
end