SCM browser: directories can now be collapsed and re-expanded with no additional request.

git-svn-id: http://redmine.rubyforge.org/svn/trunk@863 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2007-10-22 19:34:21 +00:00
parent 8ca4d35dcc
commit 33003e5b2d
3 changed files with 39 additions and 5 deletions

View File

@ -1,4 +1,4 @@
<table class="list"> <table class="list" id="browser">
<thead> <thead>
<tr id="root"> <tr id="root">
<th><%= l(:field_name) %></th> <th><%= l(:field_name) %></th>

View File

@ -1,15 +1,15 @@
<% @entries.each do |entry| %> <% @entries.each do |entry| %>
<% tr_id = Digest::MD5.hexdigest(entry.path) <% tr_id = Digest::MD5.hexdigest(entry.path)
depth = params[:depth].to_i %> depth = params[:depth].to_i %>
<tr id="<%= tr_id %>"> <tr id="<%= tr_id %>" class="<%= params[:parent_id] %>">
<td> <td>
<%= if entry.is_dir? <%= if entry.is_dir?
link_to_remote h(entry.name), link_to_remote h(entry.name),
{:url => {:action => 'browse', :id => @project, :path => entry.path, :rev => @rev, :depth => (depth + 1)}, {:url => {:action => 'browse', :id => @project, :path => entry.path, :rev => @rev, :depth => (depth + 1), :parent_id => tr_id},
:update => tr_id, :update => tr_id,
:position => :after, :position => :after,
:success => "Element.addClassName('#{tr_id}', 'open');", :success => "scmEntryLoaded('#{tr_id}')",
:condition => "!Element.hasClassName('#{tr_id}', 'open')" :condition => "scmEntryClick('#{tr_id}')"
}, },
{:href => url_for({:action => 'browse', :id => @project, :path => entry.path, :rev => @rev}), {:href => url_for({:action => 'browse', :id => @project, :path => entry.path, :rev => @rev}),
:class => ('icon icon-folder'), :class => ('icon icon-folder'),

View File

@ -59,6 +59,40 @@ function checkBulkEdit(form) {
return false; return false;
} }
function collapseScmEntry(id) {
var els = document.getElementsByClassName(id, 'browser');
for (var i = 0; i < els.length; i++) {
collapseScmEntry(els[i].id);
Element.hide(els[i]);
}
$(id).removeClassName('open');
}
function expandScmEntry(id) {
var els = document.getElementsByClassName(id, 'browser');
for (var i = 0; i < els.length; i++) {
Element.show(els[i]);
}
$(id).addClassName('open');
}
function scmEntryClick(id) {
el = $(id);
if (el.hasClassName('open')) {
collapseScmEntry(id);
return false;
} else if (el.hasClassName('loaded')) {
expandScmEntry(id);
return false;
}
return true;
}
function scmEntryLoaded(id) {
Element.addClassName(id, 'open');
Element.addClassName(id, 'loaded');
}
/* shows and hides ajax indicator */ /* shows and hides ajax indicator */
Ajax.Responders.register({ Ajax.Responders.register({
onCreate: function(){ onCreate: function(){