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:
parent
8ca4d35dcc
commit
33003e5b2d
|
@ -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>
|
||||||
|
|
|
@ -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'),
|
||||||
|
|
|
@ -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(){
|
||||||
|
|
Loading…
Reference in New Issue