diff --git a/lib/gollum/file_view.rb b/lib/gollum/file_view.rb
index 032d6028..6f56d541 100644
--- a/lib/gollum/file_view.rb
+++ b/lib/gollum/file_view.rb
@@ -19,16 +19,15 @@ module Gollum
%Q(
#{name} \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
#{path}
- #{name}
HTML
end
@@ -101,54 +100,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
diff --git a/test/file_view/2_files_2_folders.txt b/test/file_view/2_files_2_folders.txt
index 11da79d0..a481bb0e 100644
--- a/test/file_view/2_files_2_folders.txt
+++ b/test/file_view/2_files_2_folders.txt
@@ -2,11 +2,11 @@
folder0
- 0
+ 0
folder1
- 1
+ 1
\ No newline at end of file
diff --git a/test/file_view/2_files_2_folders_1_root.txt b/test/file_view/2_files_2_folders_1_root.txt
index 7c1e4a96..95ba363b 100644
--- a/test/file_view/2_files_2_folders_1_root.txt
+++ b/test/file_view/2_files_2_folders_1_root.txt
@@ -3,11 +3,11 @@
folder0
- 0
+ 0
folder1
- 1
+ 1
\ No newline at end of file
diff --git a/test/file_view/nested_folders.txt b/test/file_view/nested_folders.txt
index 5daae668..d026e8be 100644
--- a/test/file_view/nested_folders.txt
+++ b/test/file_view/nested_folders.txt
@@ -1,12 +1,22 @@
- folder0/folder1/folder2
+ folder0
- 0
+
+ folder1
+
+
+ folder2
+
+ 0
+
+
folder3
- 1
+ 1
+
+
@@ -14,5 +24,5 @@
folder4
- 2
+ 2
\ No newline at end of file