diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2007-10-22 17:45:41 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2007-10-22 17:45:41 +0000 |
commit | 8ca4d35dcc466df18b0fa6a322d00b030b183d15 (patch) | |
tree | d6730f57a3defdf28c0a7dd7455b4ff9920eb35e | |
parent | b30b6717a271f06290c07479b7e26446f039e4df (diff) | |
download | redmine-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.rb | 6 | ||||
-rw-r--r-- | app/views/repositories/_dir_list.rhtml | 21 | ||||
-rw-r--r-- | app/views/repositories/_dir_list_content.rhtml | 32 | ||||
-rw-r--r-- | public/images/folder.png | bin | 1026 -> 506 bytes | |||
-rw-r--r-- | public/images/folder_open.png | bin | 0 -> 488 bytes | |||
-rw-r--r-- | public/javascripts/prototype.js | 2 | ||||
-rw-r--r-- | public/stylesheets/application.css | 1 |
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 Binary files differindex d2ab69ad5..03e56110c 100644 --- a/public/images/folder.png +++ b/public/images/folder.png diff --git a/public/images/folder_open.png b/public/images/folder_open.png Binary files differnew file mode 100644 index 000000000..2b49d314a --- /dev/null +++ b/public/images/folder_open.png 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); } |