Add support for multi-level directory setups, where files are under multiple directories.
Generate HTML for them properly.
This commit is contained in:
+26
-40
@@ -19,16 +19,15 @@ module Gollum
|
||||
%Q( <li class="file"><a href="#{url}">#{name}</a></li>\n)
|
||||
end
|
||||
|
||||
def new_folder page
|
||||
new_sub_folder ::File.dirname(page.path), page.name, page.filename_stripped
|
||||
def new_folder folder_path
|
||||
new_sub_folder folder_path
|
||||
end
|
||||
|
||||
def new_sub_folder path, name, url
|
||||
def new_sub_folder path
|
||||
<<-HTML
|
||||
<li>
|
||||
<label>#{path}</label> <input type="checkbox" checked />
|
||||
<ol>
|
||||
<li class="file"><a href="#{url}">#{name}</a></li>
|
||||
HTML
|
||||
end
|
||||
|
||||
@@ -62,6 +61,8 @@ module Gollum
|
||||
# If there are no folders, then we're done.
|
||||
return enclose_tree(html) if folder_start <= -1
|
||||
|
||||
puts "!>> folder_start = #{folder_start}, count = #{count}"
|
||||
|
||||
# Handle special case of only one folder.
|
||||
if (count - folder_start == 1)
|
||||
page = @pages[ folder_start ]
|
||||
@@ -81,6 +82,7 @@ module Gollum
|
||||
|
||||
sorted_folders = []
|
||||
(folder_start).upto count - 1 do | index |
|
||||
puts "!>>sorted_folders => #{@pages[ index ].path} "
|
||||
sorted_folders += [[ @pages[ index ].path, index ]]
|
||||
end
|
||||
|
||||
@@ -101,54 +103,38 @@ module Gollum
|
||||
end
|
||||
end
|
||||
|
||||
# Process first folder
|
||||
page = @pages[ sorted_folders[ 0 ][1] ]
|
||||
html += new_folder page
|
||||
|
||||
last_folder = ::File.dirname page.path # define last_folder
|
||||
|
||||
# keep track of folder depth, 0 = at root.
|
||||
depth = 0
|
||||
cwd_array = []
|
||||
changed = false
|
||||
|
||||
# process rest of folders
|
||||
1.upto(sorted_folders.size - 1) do | index |
|
||||
0.upto(sorted_folders.size - 1) do | index |
|
||||
page = @pages[ sorted_folders[ index ][1] ]
|
||||
path = page.path
|
||||
folder = ::File.dirname path
|
||||
|
||||
if last_folder == folder
|
||||
# same folder
|
||||
html += new_page page
|
||||
elsif folder.include?('/')
|
||||
# check if we're going up or down a depth level
|
||||
if last_folder.scan('/').size > folder.scan('/').size
|
||||
# end tag for 1 subfolder & 1 parent folder
|
||||
# so emit 2 end tags
|
||||
2.times { html += end_folder; }
|
||||
depth -= 1
|
||||
else
|
||||
depth += 1
|
||||
end
|
||||
tmp_array = folder.split('/')
|
||||
|
||||
# subfolder
|
||||
html += new_sub_folder ::File.dirname(page.path).split('/').last, page.name, page.filename_stripped
|
||||
else
|
||||
# depth+1 because we need an additional end_folder
|
||||
(depth+1).times { html += end_folder; }
|
||||
depth = 0
|
||||
# New root folder
|
||||
html += new_folder page
|
||||
0.upto(tmp_array.size - 1) do |index|
|
||||
if cwd_array[index].nil? or changed then
|
||||
html += new_sub_folder tmp_array[index]
|
||||
next
|
||||
end
|
||||
|
||||
if cwd_array[index] != tmp_array[index] then
|
||||
changed = true
|
||||
index.upto(cwd_array.size - 1) do |i|
|
||||
html += end_folder
|
||||
end
|
||||
html += new_sub_folder tmp_array[index]
|
||||
end
|
||||
end
|
||||
|
||||
last_folder = folder
|
||||
html += new_page page
|
||||
cwd_array = tmp_array
|
||||
changed = false
|
||||
end
|
||||
|
||||
# Process last folder's ending tags.
|
||||
(depth+1).times {
|
||||
depth.times { html += end_folder; }
|
||||
depth = 0
|
||||
}
|
||||
|
||||
# return the completed html
|
||||
enclose_tree html
|
||||
end # end render_files
|
||||
|
||||
Reference in New Issue
Block a user