Module: Dolt::View::Tree
- Defined in:
- lib/libdolt/view/tree.rb
Instance Method Summary collapse
- #accumulate_path(pieces) ⇒ Object
- #object_path(root, object) ⇒ Object
- #object_url(repository, ref, path, object) ⇒ Object
- #partition_path(path, maxdepth = nil) ⇒ Object
- #tree_context(repo, ref, levels) ⇒ Object
- #tree_context_level_links(repo, ref, level) ⇒ Object
- #tree_entries(tree) ⇒ Object
- #tree_table_padding_td(partitioned) ⇒ Object
- #tree_table_padding_width(partitioned) ⇒ Object
Instance Method Details
#accumulate_path(pieces) ⇒ Object
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/libdolt/view/tree.rb', line 80 def accumulate_path(pieces) acc = [] pieces.map do |piece| piece.map do |p| next p if p == "" acc << p File.join(acc) end end end |
#object_path(root, object) ⇒ Object
22 23 24 25 |
# File 'lib/libdolt/view/tree.rb', line 22 def object_path(root, object) return object if object[:type] == :submodule File.join(root, object[:name]).sub(/^\//, "") end |
#object_url(repository, ref, path, object) ⇒ Object
27 28 29 |
# File 'lib/libdolt/view/tree.rb', line 27 def object_url(repository, ref, path, object) send(:"#{object[:type]}_url", repository, ref, object_path(path, object)) end |
#partition_path(path, maxdepth = nil) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/libdolt/view/tree.rb', line 68 def partition_path(path, maxdepth = nil) path = path.sub(/^\.?\//, "") result = [[""]] return result if path == "" parts = path.split("/") maxdepth ||= parts.length fill_first = [parts.length, [1, parts.length - maxdepth + 1].max].min fill_first.times { result[0] << parts.shift } result << [parts.shift] while parts.length > 0 result end |
#tree_context(repo, ref, levels) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/libdolt/view/tree.rb', line 36 def tree_context(repo, ref, levels) return "" if levels.length == 1 && levels[0].length == 1 total = 4 + levels.length colspan = total (levels.map do |level| html = <<-HTML <tr> #{'<td></td>' * (total - colspan)} <td colspan="#{colspan}"> #{tree_context_level_links(repo, ref, level)} </td> </tr> HTML colspan -= 1 html end).join end |
#tree_context_level_links(repo, ref, level) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/libdolt/view/tree.rb', line 54 def tree_context_level_links(repo, ref, level) extra = "<i class=\"icon icon-folder-open\"></i>" (level.map do |path| dir = File.dirname(path) dir = "" if dir == "." file = path == "" ? "/" : File.basename(path) url = object_url(repo, ref, dir, { :type => :tree, :name => file }) html = "<a href=\"#{url}\">#{extra} #{file}</a>" extra = extra == "" || extra == "/" ? "/" : "" html end).join(" ") end |
#tree_entries(tree) ⇒ Object
31 32 33 34 |
# File 'lib/libdolt/view/tree.rb', line 31 def tree_entries(tree) sort(tree.entries.select { |e| [:tree, :submodule].index(e[:type]) }) + sort(tree.entries.select { |e| e[:type] == :blob }) end |
#tree_table_padding_td(partitioned) ⇒ Object
95 96 97 |
# File 'lib/libdolt/view/tree.rb', line 95 def tree_table_padding_td(partitioned) "<td></td>" * tree_table_padding_width(partitioned) end |
#tree_table_padding_width(partitioned) ⇒ Object
91 92 93 |
# File 'lib/libdolt/view/tree.rb', line 91 def tree_table_padding_width(partitioned) partitioned.length == 1 ? partitioned[0].length - 1 : partitioned.length end |