Commit f88a2617e65ecc037d3f885965efcee39745163d

Authored by Dmitriy Zaporozhets
1 parent 1a2bacfb

Tree ajax log. progress bar & refactoring

app/assets/images/ajax_loader_tree.gif 0 → 100644

6.38 KB

app/assets/javascripts/application.js
@@ -114,3 +114,8 @@ function showDiff(link) { @@ -114,3 +114,8 @@ function showDiff(link) {
114 return _chosen.apply(this, [default_options]); 114 return _chosen.apply(this, [default_options]);
115 }}) 115 }})
116 })(jQuery); 116 })(jQuery);
  117 +
  118 +
  119 +function ajaxGet(url) {
  120 + $.ajax({type: "GET", url: url, dataType: "script"});
  121 +}
app/helpers/application_helper.rb
@@ -134,4 +134,8 @@ module ApplicationHelper @@ -134,4 +134,8 @@ module ApplicationHelper
134 end 134 end
135 active ? "current" : nil 135 active ? "current" : nil
136 end 136 end
  137 +
  138 + def hexdigest(string)
  139 + Digest::SHA1.hexdigest string
  140 + end
137 end 141 end
app/helpers/tree_helper.rb 0 → 100644
@@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
  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"
  8 + else
  9 + image_tag "file_bin.png"
  10 + end
  11 + else
  12 + image_tag "file_dir.png"
  13 + end
  14 + end
  15 +
  16 + def tree_hex_class(content)
  17 + "file_#{hexdigest(content.name)}"
  18 + end
  19 +
  20 + def tree_full_path(content)
  21 + if params[:path]
  22 + File.join(params[:path], content.name)
  23 + else
  24 + content.name
  25 + end
  26 + end
  27 +end
app/views/refs/_tree.html.haml
@@ -29,12 +29,13 @@ @@ -29,12 +29,13 @@
29 %td 29 %td
30 %td 30 %td
31 31
  32 + - index = 0
32 - contents.select{ |i| i.is_a?(Grit::Tree)}.each do |content| 33 - contents.select{ |i| i.is_a?(Grit::Tree)}.each do |content|
33 - = render :partial => "refs/tree_item", :locals => { :content => content } 34 + = render :partial => "refs/tree_item", :locals => { :content => content, :index => (index += 1) }
34 - contents.select{ |i| i.is_a?(Grit::Blob)}.each do |content| 35 - contents.select{ |i| i.is_a?(Grit::Blob)}.each do |content|
35 - = render :partial => "refs/tree_item", :locals => { :content => content } 36 + = render :partial => "refs/tree_item", :locals => { :content => content, :index => (index += 1) }
36 - contents.select{ |i| i.is_a?(Grit::Submodule)}.each do |content| 37 - contents.select{ |i| i.is_a?(Grit::Submodule)}.each do |content|
37 - = render :partial => "refs/submodule_item", :locals => { :content => content } 38 + = render :partial => "refs/submodule_item", :locals => { :content => content, :index => (index += 1) }
38 39
39 - if content = contents.select{ |c| c.is_a?(Grit::Blob) and c.name =~ /^readme/i }.first 40 - if content = contents.select{ |c| c.is_a?(Grit::Blob) and c.name =~ /^readme/i }.first
40 .file_holder#README 41 .file_holder#README
@@ -58,8 +59,9 @@ @@ -58,8 +59,9 @@
58 59
59 }); 60 });
60 61
  62 + // Load last commit log for each file in tree
61 $(window).load(function(){ 63 $(window).load(function(){
62 - $.ajax({type: "GET", url: '#{@logs_path}', dataType: "script"}); 64 + ajaxGet('#{@logs_path}');
63 }); 65 });
64 66
65 67
app/views/refs/_tree_item.html.haml
1 -- file = params[:path] ? File.join(params[:path], content.name) : content.name  
2 -%tr{ :class => "tree-item file_#{Digest::SHA1.hexdigest(content.name)}", :url => tree_file_project_ref_path(@project, @ref, file) } 1 +- file = tree_full_path(content)
  2 +%tr{ :class => "tree-item #{tree_hex_class(content)}", :url => tree_file_project_ref_path(@project, @ref, file) }
3 %td.tree-item-file-name 3 %td.tree-item-file-name
4 - - if content.is_a?(Grit::Blob)  
5 - - if content.text?  
6 - = image_tag "file_txt.png", :class => "tree-ico"  
7 - - elsif content.image?  
8 - = image_tag "file_img.png", :class => "tree-ico"  
9 - - else  
10 - = image_tag "file_bin.png", :class => "tree-ico"  
11 - - else  
12 - = image_tag "file_dir.png", :class => "tree-ico" 4 + = tree_icon(content)
13 = link_to truncate(content.name, :length => 40), tree_file_project_ref_path(@project, @ref || @commit.id, file), :remote => :true 5 = link_to truncate(content.name, :length => 40), tree_file_project_ref_path(@project, @ref || @commit.id, file), :remote => :true
14 %td.tree_time_ago.cgray 6 %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
15 %td.tree_commit 11 %td.tree_commit
app/views/refs/logs_tree.js.haml
@@ -4,6 +4,6 @@ @@ -4,6 +4,6 @@
4 - tm = @project.team_member_by_name_or_email(content_commit.author_email, content_commit.author_name) 4 - tm = @project.team_member_by_name_or_email(content_commit.author_email, content_commit.author_name)
5 5
6 :plain 6 :plain
7 - var row = $("table.table_#{@hex_path} tr.file_#{Digest::SHA1.hexdigest(file_name)}"); 7 + var row = $("table.table_#{@hex_path} tr.file_#{hexdigest(file_name)}");
8 row.find("td.tree_time_ago").html('#{escape_javascript(time_ago_in_words(content_commit.committed_date))} ago'); 8 row.find("td.tree_time_ago").html('#{escape_javascript(time_ago_in_words(content_commit.committed_date))} ago');
9 row.find("td.tree_commit").html('#{escape_javascript(render("tree_commit", :tm => tm, :content_commit => content_commit))}'); 9 row.find("td.tree_commit").html('#{escape_javascript(render("tree_commit", :tm => tm, :content_commit => content_commit))}');
app/views/refs/tree.js.haml
1 :plain 1 :plain
  2 + // Load Files list
2 $("#tree-holder").html("#{escape_javascript(render(:partial => "tree", :locals => {:repo => @repo, :commit => @commit, :tree => @tree}))}"); 3 $("#tree-holder").html("#{escape_javascript(render(:partial => "tree", :locals => {:repo => @repo, :commit => @commit, :tree => @tree}))}");
3 $("#tree-content-holder").show("slide", { direction: "right" }, 150); 4 $("#tree-content-holder").show("slide", { direction: "right" }, 150);
4 $('.project-refs-form #path').val("#{params[:path]}"); 5 $('.project-refs-form #path').val("#{params[:path]}");
5 6
6 - 7 + // Load last commit log for each file in tree
7 $('#tree-slider').waitForImages(function() { 8 $('#tree-slider').waitForImages(function() {
8 - $.ajax({type: "GET", url: '#{@logs_path}', dataType: "script"}); 9 + ajaxGet('#{@logs_path}');
9 }); 10 });