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
  • \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 + 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 @@ -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
  • \n
  • Aragorn.pdf
  • \n
  • Eye Of Sauron
  • }, @page.files_folders + assert_equal %{
  • Orc
  • \n
  • Aragorn.pdf
  • \n
  • Eye 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
  • \n
  • Aragorn.pdf
  • \n
  • Eye Of Sauron
  • }, @page.files_folders + assert_equal %{
  • Orc
  • \n
  • Aragorn.pdf
  • \n
  • Eye Of Sauron
  • }, @page.files_folders end end