changeset 1431:d5d7c40e8591 beta

changelog uses lazy loading of affected files details, in some scenarios this can improve speed of changelog page dramatically especially for larger repositories.
author Marcin Kuzminski <marcin@python-works.com>
date Sat, 16 Jul 2011 19:30:38 +0200
parents 9d19456c4f65
children 54306315e96f
files rhodecode/config/routing.py rhodecode/controllers/changelog.py rhodecode/public/css/style.css rhodecode/templates/changelog/changelog.html rhodecode/templates/changelog/changelog_details.html
diffstat 5 files changed, 44 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/config/routing.py	Sat Jul 16 14:07:11 2011 +0200
+++ b/rhodecode/config/routing.py	Sat Jul 16 19:30:38 2011 +0200
@@ -337,6 +337,10 @@
     rmap.connect('changelog_home', '/{repo_name:.*}/changelog',
                 controller='changelog', conditions=dict(function=check_repo))
 
+    rmap.connect('changelog_details', '/{repo_name:.*}/changelog_details/{cs}',
+                controller='changelog', action='changelog_details',
+                conditions=dict(function=check_repo))
+
     rmap.connect('files_home', '/{repo_name:.*}/files/{revision}/{f_path:.*}',
                 controller='files', revision='tip', f_path='',
                 conditions=dict(function=check_repo))
--- a/rhodecode/controllers/changelog.py	Sat Jul 16 14:07:11 2011 +0200
+++ b/rhodecode/controllers/changelog.py	Sat Jul 16 19:30:38 2011 +0200
@@ -76,6 +76,11 @@
 
         return render('changelog/changelog.html')
 
+    def changelog_details(self, cs):
+        if request.environ.get('HTTP_X_PARTIAL_XHR'):
+            c.cs = c.rhodecode_repo.get_changeset(cs)
+            return render('changelog/changelog_details.html')
+
     def _graph(self, repo, repo_size, size, p):
         """
         Generates a DAG graph for mercurial
--- a/rhodecode/public/css/style.css	Sat Jul 16 14:07:11 2011 +0200
+++ b/rhodecode/public/css/style.css	Sat Jul 16 19:30:38 2011 +0200
@@ -1787,6 +1787,16 @@
 clear:both;
 }
 
+.right .changes .changed_total{
+border:1px solid #DDD;
+display:block;
+float:right;
+text-align:center;
+min-width:45px;
+cursor: pointer;
+background:#FD8;
+font-weight: bold;
+}
 .right .changes .added,.changed,.removed {
 border:1px solid #DDD;
 display:block;
--- a/rhodecode/templates/changelog/changelog.html	Sat Jul 16 14:07:11 2011 +0200
+++ b/rhodecode/templates/changelog/changelog.html	Sat Jul 16 19:30:38 2011 +0200
@@ -59,20 +59,15 @@
 							<div class="message">${h.link_to(h.wrap_paragraphs(cs.message),h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div>
 						</div>	
 						<div class="right">
-									<div class="changes">
-									   % if len(cs.affected_files) <= c.affected_files_cut_off:						
-										<span class="removed tooltip" title="<b>${_('removed')}</b>${h.changed_tooltip(cs.removed)}">${len(cs.removed)}</span>
-										<span class="changed tooltip" title="<b>${_('changed')}</b>${h.changed_tooltip(cs.changed)}">${len(cs.changed)}</span>
-										<span class="added tooltip" title="<b>${_('added')}</b>${h.changed_tooltip(cs.added)}">${len(cs.added)}</span>
-									   % else:
-				                         <span class="removed tooltip" title="${_('affected %s files') % len(cs.affected_files)}">!</span>
-				                         <span class="changed tooltip" title="${_('affected %s files') % len(cs.affected_files)}">!</span>
-				                         <span class="added tooltip"   title="${_('affected %s files') % len(cs.affected_files)}">!</span>  									   
-									   % endif
+									<div id="${cs.raw_id}_changes_info" class="changes">
+                                        <span id="${cs.raw_id}" class="changed_total tooltip" 
+                                        title="${_('Affected number of files, click to show more details')}">
+                                        ${len(cs.affected_files)}
+                                        </span>
 									</div>					
 										%if len(cs.parents)>1:
 										<div class="merge">
-											${_('merge')}<img alt="merge" src="${h.url("/images/icons/arrow_join.png")}"/>
+											${_('merge')}<img alt="merge" src="${h.url('/images/icons/arrow_join.png')}"/>
 										</div>
 										%endif
 								   %if cs.parents:							
@@ -110,7 +105,7 @@
 				YAHOO.util.Event.onDOMReady(function(){
 					
                     //Monitor range checkboxes and build a link to changesets
-                    //ranges
+                    //ranges 
                     var checkboxes = YUD.getElementsByClassName('changeset_range');
                     var url_tmpl = "${h.url('changeset_home',repo_name=c.repo_name,revision='__REVRANGE__')}";
                     YUE.on(checkboxes,'click',function(e){      
@@ -139,6 +134,15 @@
                         }
                     });					
 					
+                    //Fetch changeset details 
+                    YUE.on(YUD.getElementsByClassName('changed_total'),'click',function(e){
+                    	var id = e.currentTarget.id
+                    	var url = "${h.url('changelog_details',repo_name=c.repo_name,cs='__CS__')}"
+                    	var url = url.replace('__CS__',id);
+                    	ypjax(url,id+'_changes_info',function(){tooltip_activate()});
+                    });
+                    
+                    
 					function set_canvas(heads) {
 						var c = document.getElementById('graph_nodes');
 						var t = document.getElementById('graph_content');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/templates/changelog/changelog_details.html	Sat Jul 16 19:30:38 2011 +0200
@@ -0,0 +1,9 @@
+% if len(c.cs.affected_files) <= c.affected_files_cut_off:                     
+<span class="removed tooltip" title="<b>${_('removed')}</b>${h.changed_tooltip(c.cs.removed)}">${len(c.cs.removed)}</span>
+<span class="changed tooltip" title="<b>${_('changed')}</b>${h.changed_tooltip(c.cs.changed)}">${len(c.cs.changed)}</span>
+<span class="added tooltip" title="<b>${_('added')}</b>${h.changed_tooltip(c.cs.added)}">${len(c.cs.added)}</span>
+% else:
+ <span class="removed tooltip" title="${_('affected %s files') % len(c.cs.affected_files)}">!</span>
+ <span class="changed tooltip" title="${_('affected %s files') % len(c.cs.affected_files)}">!</span>
+ <span class="added tooltip"   title="${_('affected %s files') % len(c.cs.affected_files)}">!</span>                                         
+% endif
\ No newline at end of file