Merge pull request #440 from haad/upstream
Add support for multi-level directory setups, where files are under mult...
This commit is contained in:
+25
-42
@@ -19,16 +19,15 @@ module Gollum
|
|||||||
%Q( <li class="file"><a href="#{url}">#{name}</a></li>\n)
|
%Q( <li class="file"><a href="#{url}">#{name}</a></li>\n)
|
||||||
end
|
end
|
||||||
|
|
||||||
def new_folder page
|
def new_folder folder_path
|
||||||
new_sub_folder ::File.dirname(page.path), page.name, page.filename_stripped
|
new_sub_folder folder_path
|
||||||
end
|
end
|
||||||
|
|
||||||
def new_sub_folder path, name, url
|
def new_sub_folder path
|
||||||
<<-HTML
|
<<-HTML
|
||||||
<li>
|
<li>
|
||||||
<label>#{path}</label> <input type="checkbox" checked />
|
<label>#{path}</label> <input type="checkbox" checked />
|
||||||
<ol>
|
<ol>
|
||||||
<li class="file"><a href="#{url}">#{name}</a></li>
|
|
||||||
HTML
|
HTML
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -101,54 +100,38 @@ module Gollum
|
|||||||
end
|
end
|
||||||
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.
|
# keep track of folder depth, 0 = at root.
|
||||||
depth = 0
|
cwd_array = []
|
||||||
|
changed = false
|
||||||
|
|
||||||
# process rest of folders
|
# 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] ]
|
page = @pages[ sorted_folders[ index ][1] ]
|
||||||
path = page.path
|
path = page.path
|
||||||
folder = ::File.dirname path
|
folder = ::File.dirname path
|
||||||
|
|
||||||
if last_folder == folder
|
tmp_array = folder.split('/')
|
||||||
# same folder
|
|
||||||
|
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
|
||||||
|
|
||||||
html += new_page page
|
html += new_page page
|
||||||
elsif folder.include?('/')
|
cwd_array = tmp_array
|
||||||
# check if we're going up or down a depth level
|
changed = false
|
||||||
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
|
end
|
||||||
|
|
||||||
# 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
|
|
||||||
end
|
|
||||||
|
|
||||||
last_folder = folder
|
|
||||||
end
|
|
||||||
|
|
||||||
# Process last folder's ending tags.
|
|
||||||
(depth+1).times {
|
|
||||||
depth.times { html += end_folder; }
|
|
||||||
depth = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# return the completed html
|
# return the completed html
|
||||||
enclose_tree html
|
enclose_tree html
|
||||||
end # end render_files
|
end # end render_files
|
||||||
|
|||||||
@@ -1,8 +1,16 @@
|
|||||||
<ol class="tree">
|
<ol class="tree">
|
||||||
<li>
|
<li>
|
||||||
<label>folder0/folder1/folder2</label> <input type="checkbox" checked />
|
<label>folder0</label> <input type="checkbox" checked />
|
||||||
|
<ol>
|
||||||
|
<li>
|
||||||
|
<label>folder1</label> <input type="checkbox" checked />
|
||||||
|
<ol>
|
||||||
|
<li>
|
||||||
|
<label>folder2</label> <input type="checkbox" checked />
|
||||||
<ol>
|
<ol>
|
||||||
<li class="file"><a href="0">0</a></li>
|
<li class="file"><a href="0">0</a></li>
|
||||||
|
</ol>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<label>folder3</label> <input type="checkbox" checked />
|
<label>folder3</label> <input type="checkbox" checked />
|
||||||
<ol>
|
<ol>
|
||||||
@@ -10,6 +18,8 @@
|
|||||||
</ol>
|
</ol>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<label>folder4</label> <input type="checkbox" checked />
|
<label>folder4</label> <input type="checkbox" checked />
|
||||||
|
|||||||
Reference in New Issue
Block a user