From 6a2d153c3df600bf43d278eda15ac0efb9f45c17 Mon Sep 17 00:00:00 2001 From: Adam Hamsik Date: Tue, 17 Jul 2012 10:34:11 +0200 Subject: [PATCH 1/3] Add support for multi-level directory setups, where files are under multiple directories. Generate HTML for them properly. --- lib/gollum/file_view.rb | 66 ++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 40 deletions(-) diff --git a/lib/gollum/file_view.rb b/lib/gollum/file_view.rb index 032d6028..6474b66b 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
    1. -
    2. #{name}
    3. 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 From 3199a4b2cb38a48b56809efbb265e515396dcdc7 Mon Sep 17 00:00:00 2001 From: Adam Hamsik Date: Tue, 17 Jul 2012 11:09:46 +0200 Subject: [PATCH 2/3] Remove debug puts. --- lib/gollum/file_view.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/gollum/file_view.rb b/lib/gollum/file_view.rb index 6474b66b..6f56d541 100644 --- a/lib/gollum/file_view.rb +++ b/lib/gollum/file_view.rb @@ -61,8 +61,6 @@ 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 ] @@ -82,7 +80,6 @@ module Gollum sorted_folders = [] (folder_start).upto count - 1 do | index | - puts "!>>sorted_folders => #{@pages[ index ].path} " sorted_folders += [[ @pages[ index ].path, index ]] end From 6ce76af2becc2a109959519e4248ed78a94a0f17 Mon Sep 17 00:00:00 2001 From: Adam Hamsik Date: Tue, 17 Jul 2012 12:00:23 +0200 Subject: [PATCH 3/3] Fix tests. --- test/file_view/2_files_2_folders.txt | 4 ++-- test/file_view/2_files_2_folders_1_root.txt | 4 ++-- test/file_view/nested_folders.txt | 18 ++++++++++++++---- 3 files changed, 18 insertions(+), 8 deletions(-) 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 @@
      1. -
      2. 0
      3. +
      4. 0
      1. -
      2. 1
      3. +
      4. 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 @@
      1. -
      2. 0
      3. +
      4. 0
      1. -
      2. 1
      3. +
      4. 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 @@
      1. - +
          -
        1. 0
        2. +
        3. + +
            +
          1. + +
              +
            1. 0
            2. +
            +
            1. -
            2. 1
            3. +
            4. 1
            5. +
            +
        @@ -14,5 +24,5 @@
        1. -
        2. 2
        3. +
        4. 2
        \ No newline at end of file