summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2007-10-22 17:45:41 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2007-10-22 17:45:41 +0000
commit8ca4d35dcc466df18b0fa6a322d00b030b183d15 (patch)
treed6730f57a3defdf28c0a7dd7455b4ff9920eb35e
parentb30b6717a271f06290c07479b7e26446f039e4df (diff)
downloadredmine-8ca4d35dcc466df18b0fa6a322d00b030b183d15.tar.gz
redmine-8ca4d35dcc466df18b0fa6a322d00b030b183d15.zip
Added a bit of AJAX on the SCM browser (tree view).
git-svn-id: http://redmine.rubyforge.org/svn/trunk@862 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/controllers/repositories_controller.rb6
-rw-r--r--app/views/repositories/_dir_list.rhtml21
-rw-r--r--app/views/repositories/_dir_list_content.rhtml32
-rw-r--r--public/images/folder.pngbin1026 -> 506 bytes
-rw-r--r--public/images/folder_open.pngbin0 -> 488 bytes
-rw-r--r--public/javascripts/prototype.js2
-rw-r--r--public/stylesheets/application.css1
7 files changed, 44 insertions, 18 deletions
diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb
index 9439481e2..945cb2623 100644
--- a/app/controllers/repositories_controller.rb
+++ b/app/controllers/repositories_controller.rb
@@ -56,7 +56,11 @@ class RepositoriesController < ApplicationController
def browse
@entries = @repository.entries(@path, @rev)
- show_error and return unless @entries
+ if request.xhr?
+ @entries ? render(:partial => 'dir_list_content') : render(:nothing => true)
+ else
+ show_error unless @entries
+ end
end
def changes
diff --git a/app/views/repositories/_dir_list.rhtml b/app/views/repositories/_dir_list.rhtml
index 5555ee87e..b9c3fd54c 100644
--- a/app/views/repositories/_dir_list.rhtml
+++ b/app/views/repositories/_dir_list.rhtml
@@ -1,26 +1,15 @@
<table class="list">
-<thead><tr>
+<thead>
+<tr id="root">
<th><%= l(:field_name) %></th>
<th><%= l(:field_filesize) %></th>
<th><%= l(:label_revision) %></th>
<th><%= l(:label_date) %></th>
<th><%= l(:field_author) %></th>
<th><%= l(:field_comments) %></th>
-</tr></thead>
-<tbody>
-<% total_size = 0
-@entries.each do |entry| %>
-<tr class="<%= cycle 'odd', 'even' %>">
-<td><%= link_to h(entry.name), { :action => (entry.is_dir? ? 'browse' : 'changes'), :id => @project, :path => entry.path, :rev => @rev }, :class => ("icon " + (entry.is_dir? ? 'icon-folder' : 'icon-file')) %></td>
-<td align="right"><%= (entry.size ? number_to_human_size(entry.size) : "?") unless entry.is_dir? %></td>
-<td align="right"><%= link_to(entry.lastrev.name, :action => 'revision', :id => @project, :rev => entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %></td>
-<td align="center"><%= format_time(entry.lastrev.time) if entry.lastrev %></td>
-<td align="center"><em><%=h(entry.lastrev.author) if entry.lastrev %></em></td>
-<% changeset = @project.repository.changesets.find_by_revision(entry.lastrev.identifier) if entry.lastrev %>
-<td><%=h truncate(changeset.comments, 100) unless changeset.nil? %></td>
</tr>
-<% total_size += entry.size if entry.size
-end %>
+</thead>
+<tbody>
+<%= render :partial => 'dir_list_content' %>
</tbody>
</table>
-<p class="textright"><em><%= l(:label_total) %>: <%= number_to_human_size(total_size) %></em></p> \ No newline at end of file
diff --git a/app/views/repositories/_dir_list_content.rhtml b/app/views/repositories/_dir_list_content.rhtml
new file mode 100644
index 000000000..742da4951
--- /dev/null
+++ b/app/views/repositories/_dir_list_content.rhtml
@@ -0,0 +1,32 @@
+<% @entries.each do |entry| %>
+<% tr_id = Digest::MD5.hexdigest(entry.path)
+ depth = params[:depth].to_i %>
+<tr id="<%= tr_id %>">
+<td>
+<%= if entry.is_dir?
+ link_to_remote h(entry.name),
+ {:url => {:action => 'browse', :id => @project, :path => entry.path, :rev => @rev, :depth => (depth + 1)},
+ :update => tr_id,
+ :position => :after,
+ :success => "Element.addClassName('#{tr_id}', 'open');",
+ :condition => "!Element.hasClassName('#{tr_id}', 'open')"
+ },
+ {:href => url_for({:action => 'browse', :id => @project, :path => entry.path, :rev => @rev}),
+ :class => ('icon icon-folder'),
+ :style => "margin-left: #{18 * depth}px;"
+ }
+else
+ link_to h(entry.name),
+ {:action => (entry.is_dir? ? 'browse' : 'changes'), :id => @project, :path => entry.path, :rev => @rev},
+ :class => 'icon icon-file',
+ :style => "margin-left: #{18 * depth}px;"
+end %>
+</td>
+<td align="right"><%= (entry.size ? number_to_human_size(entry.size) : "?") unless entry.is_dir? %></td>
+<td align="right"><%= link_to(entry.lastrev.name, :action => 'revision', :id => @project, :rev => entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %></td>
+<td align="center"><%= format_time(entry.lastrev.time) if entry.lastrev %></td>
+<td align="center"><em><%=h(entry.lastrev.author) if entry.lastrev %></em></td>
+<% changeset = @project.repository.changesets.find_by_revision(entry.lastrev.identifier) if entry.lastrev %>
+<td><%=h truncate(changeset.comments, 50) unless changeset.nil? %></td>
+</tr>
+<% end %>
diff --git a/public/images/folder.png b/public/images/folder.png
index d2ab69ad5..03e56110c 100644
--- a/public/images/folder.png
+++ b/public/images/folder.png
Binary files differ
diff --git a/public/images/folder_open.png b/public/images/folder_open.png
new file mode 100644
index 000000000..2b49d314a
--- /dev/null
+++ b/public/images/folder_open.png
Binary files differ
diff --git a/public/javascripts/prototype.js b/public/javascripts/prototype.js
index 505822177..2735d10dc 100644
--- a/public/javascripts/prototype.js
+++ b/public/javascripts/prototype.js
@@ -1629,7 +1629,7 @@ Abstract.Insertion.prototype = {
} catch (e) {
var tagName = this.element.tagName.toUpperCase();
if (['TBODY', 'TR'].include(tagName)) {
- this.insertContent(this.contentFromAnonymousTable());
+ this.insertContent(this.contentFromAnonymousTable()._reverse());
} else {
throw e;
}
diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css
index 298e5748b..cf0c3baf5 100644
--- a/public/stylesheets/application.css
+++ b/public/stylesheets/application.css
@@ -432,6 +432,7 @@ vertical-align: middle;
.icon-txt { background-image: url(../images/txt.png); }
.icon-file { background-image: url(../images/file.png); }
.icon-folder { background-image: url(../images/folder.png); }
+.open .icon-folder { background-image: url(../images/folder_open.png); }
.icon-package { background-image: url(../images/package.png); }
.icon-home { background-image: url(../images/home.png); }
.icon-user { background-image: url(../images/user.png); }