Module: Dolt::View::Tree

Defined in:
lib/libdolt/view/tree.rb

Instance Method Summary collapse

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
# File 'lib/libdolt/view/tree.rb', line 22

def object_path(root, object)
  File.join(root, object[:name]).sub(/^\//, "")
end

#object_url(repository, ref, path, object) ⇒ Object



26
27
28
29
# File 'lib/libdolt/view/tree.rb', line 26

def object_url(repository, ref, path, object)
  return object[:url] if object[:type] == :submodule
  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


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