Commit 388d72e6bf9c3e72113b8c16d1cc266b41870eb9
1 parent
a8fad4ff
Exists in
master
and in
4 other branches
Add render_tree helper; simplify (speed up) tree_icon
Showing
6 changed files
with
44 additions
and
41 deletions
Show diff stats
app/assets/javascripts/tree.js.coffee
... | ... | @@ -15,6 +15,7 @@ $ -> |
15 | 15 | $("#tree-slider .tree-item").live 'click', (e) -> |
16 | 16 | $('.tree-item-file-name a', this).trigger('click') if (e.target.nodeName != "A") |
17 | 17 | |
18 | + # Show/Hide the loading spinner | |
18 | 19 | $('#tree-slider .tree-item-file-name a, .breadcrumb a, .project-refs-form').live |
19 | 20 | "ajax:beforeSend": -> $('.tree_progress').addClass("loading") |
20 | 21 | "ajax:complete": -> $('.tree_progress').removeClass("loading") | ... | ... |
app/decorators/tree_decorator.rb
... | ... | @@ -8,14 +8,14 @@ class TreeDecorator < ApplicationDecorator |
8 | 8 | |
9 | 9 | #parts = parts[0...-1] if is_blob? |
10 | 10 | |
11 | - yield(h.link_to("..", "#", remote: :true)) if parts.count > max_links | |
11 | + yield(h.link_to("..", "#", remote: true)) if parts.count > max_links | |
12 | 12 | |
13 | 13 | parts.each do |part| |
14 | 14 | part_path = File.join(part_path, part) unless part_path.empty? |
15 | 15 | part_path = part if part_path.empty? |
16 | 16 | |
17 | 17 | next unless parts.last(2).include?(part) if parts.count > max_links |
18 | - yield(h.link_to(h.truncate(part, length: 40), h.project_tree_path(project, h.tree_join(ref, part_path)), remote: :true)) | |
18 | + yield(h.link_to(h.truncate(part, length: 40), h.project_tree_path(project, h.tree_join(ref, part_path)), remote: true)) | |
19 | 19 | end |
20 | 20 | end |
21 | 21 | end | ... | ... |
app/helpers/tree_helper.rb
1 | 1 | module TreeHelper |
2 | - def tree_icon(content) | |
3 | - if content.is_a?(Grit::Blob) | |
4 | - if content.text? | |
5 | - image_tag "file_txt.png" | |
6 | - elsif content.image? | |
7 | - image_tag "file_img.png" | |
2 | + # Sorts a repository's tree so that folders are before files and renders | |
3 | + # their corresponding partials | |
4 | + # | |
5 | + # contents - A Grit::Tree object for the current tree | |
6 | + def render_tree(contents) | |
7 | + # Render Folders before Files/Submodules | |
8 | + folders, files = contents.partition { |v| v.kind_of?(Grit::Tree) } | |
9 | + | |
10 | + tree = "" | |
11 | + | |
12 | + # Render folders if we have any | |
13 | + tree += render partial: 'tree/tree_item', collection: folders, locals: {type: 'folder'} if folders.present? | |
14 | + | |
15 | + files.each do |f| | |
16 | + if f.respond_to?(:url) | |
17 | + # Object is a Submodule | |
18 | + tree += render partial: 'tree/submodule_item', object: f | |
8 | 19 | else |
9 | - image_tag "file_bin.png" | |
20 | + # Object is a Blob | |
21 | + tree += render partial: 'tree/tree_item', object: f, locals: {type: 'file'} | |
10 | 22 | end |
11 | - else | |
12 | - image_tag "file_dir.png" | |
13 | 23 | end |
24 | + | |
25 | + tree.html_safe | |
14 | 26 | end |
15 | 27 | |
16 | - def tree_hex_class(content) | |
17 | - "file_#{hexdigest(content.name)}" | |
28 | + # Return an image icon depending on the file type | |
29 | + # | |
30 | + # type - String type of the tree item; either 'folder' or 'file' | |
31 | + def tree_icon(type) | |
32 | + image = type == 'folder' ? 'file_dir.png' : 'file_txt.png' | |
33 | + image_tag(image, size: '16x16') | |
18 | 34 | end |
19 | 35 | |
20 | - def tree_full_path(content) | |
21 | - content.name.force_encoding('utf-8') | |
22 | - if params[:path] | |
23 | - File.join(params[:path], content.name) | |
24 | - else | |
25 | - content.name | |
26 | - end | |
36 | + def tree_hex_class(content) | |
37 | + "file_#{hexdigest(content.name)}" | |
27 | 38 | end |
28 | 39 | |
29 | 40 | # Public: Determines if a given filename is compatible with GitHub::Markup. | ... | ... |
app/views/tree/_tree.html.haml
... | ... | @@ -14,7 +14,6 @@ |
14 | 14 | - if tree.is_blob? |
15 | 15 | = render partial: "tree/tree_file", object: tree |
16 | 16 | - else |
17 | - - contents = tree.contents | |
18 | 17 | %table#tree-slider{class: "table_#{@hex_path} tree-table" } |
19 | 18 | %thead |
20 | 19 | %th Name |
... | ... | @@ -24,22 +23,16 @@ |
24 | 23 | = link_to "History", tree.history_path, class: "right" |
25 | 24 | |
26 | 25 | - if tree.up_dir? |
27 | - %tr{ class: "tree-item", url: tree.up_dir_path } | |
26 | + %tr.tree-item | |
28 | 27 | %td.tree-item-file-name |
29 | - = image_tag "file_empty.png" | |
30 | - = link_to "..", tree.up_dir_path, remote: :true | |
28 | + = image_tag "file_empty.png", size: '16x16' | |
29 | + = link_to "..", tree.up_dir_path, remote: true | |
31 | 30 | %td |
32 | 31 | %td |
33 | 32 | |
34 | - - index = 0 | |
35 | - - contents.select{ |i| i.is_a?(Grit::Tree)}.each do |content| | |
36 | - = render partial: "tree/tree_item", locals: { content: content, index: (index += 1) } | |
37 | - - contents.select{ |i| i.is_a?(Grit::Blob)}.each do |content| | |
38 | - = render partial: "tree/tree_item", locals: { content: content, index: (index += 1) } | |
39 | - - contents.select{ |i| i.is_a?(Grit::Submodule)}.each do |content| | |
40 | - = render partial: "tree/submodule_item", locals: { content: content, index: (index += 1) } | |
33 | + = render_tree(tree.contents) | |
41 | 34 | |
42 | - - if content = contents.select{ |c| c.is_a?(Grit::Blob) and c.name =~ /^readme/i }.first | |
35 | + - if content = tree.contents.find { |c| c.is_a?(Grit::Blob) and c.name =~ /^readme/i } | |
43 | 36 | .file_holder#README |
44 | 37 | .file_title |
45 | 38 | %i.icon-file | ... | ... |
app/views/tree/_tree_item.html.haml
1 | -- file = tree_full_path(content) | |
2 | -%tr{ class: "tree-item #{tree_hex_class(content)}", url: project_tree_path(@project, tree_join(@id, file)) } | |
1 | +%tr{ class: "tree-item #{tree_hex_class(tree_item)}" } | |
3 | 2 | %td.tree-item-file-name |
4 | - = tree_icon(content) | |
5 | - %strong= link_to truncate(content.name, length: 40), project_tree_path(@project, tree_join(@id || @commit.id, file)), remote: :true | |
3 | + = tree_icon(type) | |
4 | + %strong= link_to truncate(tree_item.name, length: 40), project_tree_path(@project, tree_join(@id || @commit.id, tree_item.name)), remote: true | |
6 | 5 | %td.tree_time_ago.cgray |
7 | - - if index == 1 | |
8 | - %span.log_loading | |
9 | - Loading commit data.. | |
10 | - = image_tag "ajax_loader_tree.gif", width: 14 | |
6 | + %span.log_loading.hide | |
7 | + Loading commit data... | |
8 | + = image_tag "ajax_loader_tree.gif", width: 14 | |
11 | 9 | %td.tree_commit | ... | ... |
app/views/tree/show.js.haml
1 | 1 | :plain |
2 | 2 | // Load Files list |
3 | - $("#tree-holder").html("#{escape_javascript(render(partial: "tree", locals: {commit: @commit, tree: @tree}))}"); | |
3 | + $("#tree-holder").html("#{escape_javascript(render(partial: "tree", locals: {tree: @tree}))}"); | |
4 | 4 | $("#tree-content-holder").show("slide", { direction: "right" }, 150); |
5 | 5 | $('.project-refs-form #path').val("#{@path}"); |
6 | 6 | ... | ... |