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
  • \n
  • Mordor
  • \n
  • Rivendell
  • \n
  • Bilbo Baggins
  • \n
  • Hobbit
  • \n
  • Home
  • \n
  • My Precious
  • \n
  • roast mutton
  • \n
  • Samwise Gamgee
  • \n
  • Zamin
  • }, @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
  • \n
  • Aragorn.pdf
  • \n
  • Orc
  • }, @page.files_folders + assert_equal %{
  • Orc
  • \n
  • Aragorn.pdf
  • \n
  • Eye 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
  • \n
  • Aragorn.pdf
  • \n
  • Orc
  • }, @page.files_folders + assert_equal %{
  • Orc
  • \n
  • Aragorn.pdf
  • \n
  • Eye Of Sauron
  • }, @page.files_folders end end