Files
gollum/lib/gollum/views/pages.rb
T
2018-12-10 19:52:23 +01:00

85 lines
2.6 KiB
Ruby

require "pathname"
module Precious
module Views
class Pages < Layout
attr_reader :results, :ref, :allow_editing
def title
"All pages in #{@ref}"
end
def breadcrumb
if @path
path = Pathname.new(@path)
breadcrumb = [%{<a href="#{pages_path}">Home</a>}]
path.descend do |crumb|
title = crumb.basename
if title == path.basename
breadcrumb << title
else
breadcrumb << %{<a href="#{pages_path}/#{crumb}/">#{title}</a>}
end
end
breadcrumb.join(" / ")
else
"Home"
end
end
def delete_file(url)
%Q(<div class="delete-file" data-file-path="#{url}" data-confirm="Are you sure you want to delete #{URI.decode(url)}?"><span><button type="submit" name="delete">Delete</button></span></div>)
end
def files_folders
if has_results
folders = {}
files = {}
# 1012: Folders and Pages need to be separated
@results.each do |result|
result_path = result.path
result_path = result_path.sub(/^#{Regexp.escape(@path)}\//, '') unless @path.nil?
if result_path.include?('/')
# result contains a folder
folder = result_path.split('/').first
folder_path = @path ? "#{@path}/#{folder}" : folder
folder_link = %{<li><a href="#{pages_path}/#{folder_path}/" class="folder">#{folder}</a></li>}
folders[folder] = folder_link unless folders.key?(folder)
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 = %{<li><a href="#{url}" class="#{klass}">#{result.filename}</a>#{delete_file(result.escaped_url_path) if @allow_editing}</li>}
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[files.sort_by{ | key, value | key.downcase } ].values.join("\n")
result
else
""
end
end
def has_results
!@results.empty?
end
def no_results
@results.empty?
end
end
end
end