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