Fix url generation in pages view. Show full filename with extension for pages. Distinguish in HTML between file and pages.

This commit is contained in:
Bart Kamphorst
2018-10-05 14:48:42 +02:00
parent eb9b71e94a
commit 3b9af34e0d
3 changed files with 26 additions and 19 deletions
@@ -676,7 +676,7 @@ ul.actions {
li { li {
a { a {
&.file, &.folder { &.file, &.page, &.folder {
background-position: 0 1px; background-position: 0 1px;
background-repeat: no-repeat; background-repeat: no-repeat;
padding-left: 20px; padding-left: 20px;
@@ -686,6 +686,10 @@ ul.actions {
background-image: $img_fileview_doc; background-image: $img_fileview_doc;
} }
&.page {
background-image: $img_fileview_doc;
}
&.folder { &.folder {
background-image: $img_fileview_folder; background-image: $img_fileview_folder;
} }
+15 -15
View File
@@ -37,34 +37,34 @@ module Precious
def files_folders def files_folders
if has_results if has_results
folders = {} folders = {}
page_files = {} files = {}
# 1012: Folders and Pages need to be separated # 1012: Folders and Pages need to be separated
@results.each do |page| @results.each do |result|
page_path = page.path result_path = result.path
page_path = page_path.sub(/^#{Regexp.escape(@path)}\//, '') unless @path.nil? result_path = result_path.sub(/^#{Regexp.escape(@path)}\//, '') unless @path.nil?
if page_path.include?('/') if result_path.include?('/')
folder = page_path.split('/').first # result contains a folder
folder = result_path.split('/').first
folder_path = @path ? "#{@path}/#{folder}" : folder folder_path = @path ? "#{@path}/#{folder}" : folder
folder_link = %{<li><a href="#{@base_url}/pages/#{folder_path}/" class="folder">#{folder}</a></li>} folder_link = %{<li><a href="#{@base_url}/pages/#{folder_path}/" class="folder">#{folder}</a></li>}
folders[folder] = folder_link unless folders.key?(folder) folders[folder] = folder_link unless folders.key?(folder)
elsif page_path != ".gitkeep" elsif result_path != ".gitkeep"
if defined? page.format # result is either a valid gollum page or another type of file
url = "#{@base_url}/#{page.escaped_url_path}" klass = (defined? result.format) ? "page" : "file"
else url = "#{@base_url}/#{result.escaped_url_path}"
url = "#{@base_url}/#{page.escaped_url_path}#{page.name}"
end file_link = %{<li><a href="#{url}" class="#{klass}">#{result.filename}</a>#{delete_file(url) if @allow_editing}</li>}
page_link = %{<li><a href="#{url}" class="file">#{page.name}</a>#{delete_file(url) if @allow_editing}</li>} files[result.name] = file_link
page_files[page.name] = page_link
end end
end end
# 1012: All Pages should be rendered as Folders first, then Pages, each sorted alphabetically # 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[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 result
else else
+6 -3
View File
@@ -6,6 +6,7 @@ FakePageResult = Struct.new(:path) do
def name def name
File.basename(path, File.extname(path)).gsub("-", " ") File.basename(path, File.extname(path)).gsub("-", " ")
end end
alias filename name
def escaped_url_path def escaped_url_path
CGI.escape(path).gsub(/\..+$/, "").gsub("%2F", "/") CGI.escape(path).gsub(/\..+$/, "").gsub("%2F", "/")
end end
@@ -18,8 +19,10 @@ FakeFileResult = Struct.new(:path) do
def name def name
File.basename(path).gsub("-", " ") File.basename(path).gsub("-", " ")
end end
alias filename name
def escaped_url_path def escaped_url_path
result = path.sub(/\/[^\/]+$/, '/') result = path.sub(/\/[^\/]+$/, '/')
result = result << name if result.include?('/')
CGI.escape(result).gsub("%2F", "/") CGI.escape(result).gsub("%2F", "/")
end end
end end
@@ -43,7 +46,7 @@ context "Precious::Views::Pages" do
@page.instance_variable_set("@base_url", "") @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")] 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) @page.instance_variable_set("@results", results)
assert_equal %{<li><a href="/pages/Gondor/" class="folder">Gondor</a></li>\n<li><a href="/pages/Mordor/" class="folder">Mordor</a></li>\n<li><a href="/pages/Rivendell/" class="folder">Rivendell</a></li>\n<li><a href="/Bilbo-Baggins" class="file">Bilbo Baggins</a></li>\n<li><a href="/Hobbit" class="file">Hobbit</a></li>\n<li><a href="/Home" class="file">Home</a></li>\n<li><a href="/My-Precious" class="file">My Precious</a></li>\n<li><a href="/roast-mutton" class="file">roast mutton</a></li>\n<li><a href="/Samwise-Gamgee" class="file">Samwise Gamgee</a></li>\n<li><a href="/Zamin" class="file">Zamin</a></li>}, @page.files_folders assert_equal %{<li><a href="/pages/Gondor/" class="folder">Gondor</a></li>\n<li><a href="/pages/Mordor/" class="folder">Mordor</a></li>\n<li><a href="/pages/Rivendell/" class="folder">Rivendell</a></li>\n<li><a href="/Bilbo-Baggins" class="page">Bilbo Baggins</a></li>\n<li><a href="/Hobbit" class="page">Hobbit</a></li>\n<li><a href="/Home" class="page">Home</a></li>\n<li><a href="/My-Precious" class="page">My Precious</a></li>\n<li><a href="/roast-mutton" class="page">roast mutton</a></li>\n<li><a href="/Samwise-Gamgee" class="page">Samwise Gamgee</a></li>\n<li><a href="/Zamin" class="page">Zamin</a></li>}, @page.files_folders
end end
test "files_folders from subdir" do test "files_folders from subdir" do
@@ -51,7 +54,7 @@ context "Precious::Views::Pages" do
@page.instance_variable_set("@base_url", "") @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")] 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) @page.instance_variable_set("@results", results)
assert_equal %{<li><a href="/pages/Mordor/Orc/" class="folder">Orc</a></li>\n<li><a href="/Mordor/Aragorn.pdf" class="file">Aragorn.pdf</a></li>\n<li><a href="/Mordor/Eye-Of-Sauron" class="file">Eye Of Sauron</a></li>}, @page.files_folders assert_equal %{<li><a href="/pages/Mordor/Orc/" class="folder">Orc</a></li>\n<li><a href="/Mordor/Aragorn.pdf" class="file">Aragorn.pdf</a></li>\n<li><a href="/Mordor/Eye-Of-Sauron" class="page">Eye Of Sauron</a></li>}, @page.files_folders
end end
test "base url" do test "base url" do
@@ -60,6 +63,6 @@ context "Precious::Views::Pages" do
@page.instance_variable_set("@base_url", "/wiki") @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")] 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) @page.instance_variable_set("@results", results)
assert_equal %{<li><a href="/wiki/pages/Mordor/Orc/" class="folder">Orc</a></li>\n<li><a href="/wiki/Mordor/Aragorn.pdf" class="file">Aragorn.pdf</a></li>\n<li><a href="/wiki/Mordor/Eye-Of-Sauron" class="file">Eye Of Sauron</a></li>}, @page.files_folders assert_equal %{<li><a href="/wiki/pages/Mordor/Orc/" class="folder">Orc</a></li>\n<li><a href="/wiki/Mordor/Aragorn.pdf" class="file">Aragorn.pdf</a></li>\n<li><a href="/wiki/Mordor/Eye-Of-Sauron" class="page">Eye Of Sauron</a></li>}, @page.files_folders
end end
end end