changeset 2951:301773d07012 beta

Lazy loading on my journal page
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 23 Oct 2012 00:02:59 +0200
parents 528c7f210b12
children 029a40c58df7
files rhodecode/config/routing.py rhodecode/controllers/journal.py rhodecode/templates/admin/users/user_edit_my_account.html rhodecode/templates/journal/journal.html rhodecode/templates/journal/journal_page_repos.html
diffstat 5 files changed, 100 insertions(+), 70 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/config/routing.py	Mon Oct 22 22:47:07 2012 +0200
+++ b/rhodecode/config/routing.py	Tue Oct 23 00:02:59 2012 +0200
@@ -347,6 +347,8 @@
         m.connect('api', '/api')
 
     #USER JOURNAL
+    rmap.connect('journal_my_repos', '%s/journal_my_repos' % ADMIN_PREFIX,
+                 controller='journal', action='index_my_repos')
     rmap.connect('journal', '%s/journal' % ADMIN_PREFIX,
                  controller='journal', action='index')
     rmap.connect('journal_rss', '%s/journal/rss' % ADMIN_PREFIX,
--- a/rhodecode/controllers/journal.py	Mon Oct 22 22:47:07 2012 +0200
+++ b/rhodecode/controllers/journal.py	Tue Oct 23 00:02:59 2012 +0200
@@ -61,11 +61,6 @@
         p = safe_int(request.params.get('page', 1), 1)
 
         c.user = User.get(self.rhodecode_user.user_id)
-        all_repos = self.sa.query(Repository)\
-                     .filter(Repository.user_id == c.user.user_id)\
-                     .order_by(func.lower(Repository.repo_name)).all()
-
-        c.user_repos = ScmModel().get_repos(all_repos)
 
         c.following = self.sa.query(UserFollowing)\
             .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\
@@ -83,6 +78,16 @@
             return c.journal_data
         return render('journal/journal.html')
 
+    @LoginRequired()
+    @NotAnonymous()
+    def index_my_repos(self):
+        if request.environ.get('HTTP_X_PARTIAL_XHR'):
+            all_repos = self.sa.query(Repository)\
+                     .filter(Repository.user_id == c.user.user_id)\
+                     .order_by(func.lower(Repository.repo_name)).all()
+            c.user_repos = ScmModel().get_repos(all_repos)
+            return render('journal/journal_page_repos.html')
+
     @LoginRequired(api_access=True)
     @NotAnonymous()
     def journal_atom(self):
--- a/rhodecode/templates/admin/users/user_edit_my_account.html	Mon Oct 22 22:47:07 2012 +0200
+++ b/rhodecode/templates/admin/users/user_edit_my_account.html	Tue Oct 23 00:02:59 2012 +0200
@@ -135,7 +135,7 @@
     YUD.setStyle('q_filter','display','');
 
 
-    var url = "${h.url('admin_settings_my_repos')}";
+    var url = "${h.url('journal_my_repos')}";
     ypjax(url, 'my', function(){
         table_sort();
         filter_activate();
@@ -171,7 +171,6 @@
 if (url[1]) {
     //We have a hash
     var tabHash = url[1];
-    console.log(tabs, tabHash)
     tabs[tabHash]();
 }
 
--- a/rhodecode/templates/journal/journal.html	Mon Oct 22 22:47:07 2012 +0200
+++ b/rhodecode/templates/journal/journal.html	Tue Oct 23 00:02:59 2012 +0200
@@ -38,7 +38,7 @@
         <div class="title">
             <h5>
             <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/>
-            <a id="show_my" class="link-white" href="#my">${_('My repos')}</a> / <a id="show_watched" class="link-white" href="#watched">${_('Watched')}</a>
+            <a id="show_watched" class="link-white" href="#watched">${_('Watched')}</a> / <a id="show_my" class="link-white" href="#my">${_('My repos')}</a> 
             </h5>
              %if h.HasPermissionAny('hg.admin','hg.create.repository')():
              <ul class="links">
@@ -49,57 +49,12 @@
              %endif
         </div>
         <!-- end box / title -->
-        <div id="my" class="table">
-            %if c.user_repos:
-            <div id='repos_list_wrap' class="yui-skin-sam">
-            <table id="repos_list">
-             <thead>
-                  <tr>
-                  <th></th>
-                  <th class="left">${_('Name')}</th>
-                  <th class="left">${_('Revision')}</th>
-                  <th class="left">${_('Action')}</th>
-                  <th class="left">${_('Action')}</th>
-             </thead>
-             <tbody>
-                 <%namespace name="dt" file="/data_table/_dt_elements.html"/>
-                 %for repo in c.user_repos:
-                    <tr>
-                        ##QUICK MENU
-                        <td class="quick_repo_menu">
-                          ${dt.quick_menu(repo['name'])}
-                        </td>
-                        ##REPO NAME AND ICONS
-                        <td class="reponame">
-                          ${dt.repo_name(repo['name'],repo['dbrepo']['repo_type'],repo['dbrepo']['private'],h.AttributeDict(repo['dbrepo_fork']))}
-                        </td>
-                        ##LAST REVISION
-                        <td>
-                            ${dt.revision(repo['name'],repo['rev'],repo['tip'],repo['author'],repo['last_msg'])}
-                        </td>
-                        ##
-                        <td><a href="${h.url('repo_settings_home',repo_name=repo['name'])}" title="${_('edit')}"><img class="icon" alt="${_('private')}" src="${h.url('/images/icons/application_form_edit.png')}"/></a></td>
-                        <td>
-                          ${h.form(url('repo_settings_delete', repo_name=repo['name']),method='delete')}
-                            ${h.submit('remove_%s' % repo['name'],'',class_="delete_icon action_button",onclick="return confirm('"+_('Confirm to delete this repository')+"');")}
-                          ${h.end_form()}
-                        </td>
-                    </tr>
-                 %endfor
-             </tbody>
-             </table>
-             </div>
-             %else:
-                <div style="padding:5px 0px 10px 0px;">
-                ${_('No repositories yet')}
-                %if h.HasPermissionAny('hg.admin','hg.create.repository')():
-                    ${h.link_to(_('create one now'),h.url('admin_settings_create_repository'),class_="ui-btn")}
-                %endif
-                </div>
-             %endif
+        <div id="my" class="table" style="display:none">
+        ## loaded via AJAX
+        ${_('Loading...')}
         </div>
 
-        <div id="watched" class="table" style="display:none">
+        <div id="watched" class="table">
           %if c.following:
             <table>
             <thead>
@@ -151,20 +106,27 @@
     </div>
 
     <script type="text/javascript">
-
-    YUE.on('show_my','click',function(e){
+    var show_my = function(e){
         YUD.setStyle('watched','display','none');
         YUD.setStyle('my','display','');
-        var nodes = YUQ('#my tr td a.repo_name');
-        var target = 'q_filter';
-        var func = function(node){
-            return node.parentNode.parentNode.parentNode.parentNode;
-        }
-        q_filter(target,nodes,func);
-        YUE.preventDefault(e);
+
+        var url = "${h.url('admin_settings_my_repos')}";
+        ypjax(url, 'my', function(){
+            tooltip_activate();
+            quick_repo_menu();
+            var nodes = YUQ('#my tr td a.repo_name');
+            var func = function(node){
+                return node.parentNode.parentNode.parentNode;
+            }            
+            q_filter('q_filter',nodes,func);
+        });        
+        
+    }
+    YUE.on('show_my','click',function(e){
+        show_my(e);
     })
-    YUE.on('show_watched','click',function(e){
-        YUD.setStyle('my','display','none');
+    var show_watched = function(e){
+    	YUD.setStyle('my','display','none');
         YUD.setStyle('watched','display','');
         var nodes = YUQ('#watched .watched_repo a');
         var target = 'q_filter';
@@ -172,8 +134,24 @@
             return node.parentNode.parentNode;
         }
         q_filter(target,nodes,func);
-        YUE.preventDefault(e);
+    }
+    YUE.on('show_watched','click',function(e){
+        show_watched(e);
     })
+    //init watched
+    show_watched();
+    
+    var tabs = {
+        'watched': show_watched,
+        'my': show_my,
+    }
+    var url = location.href.split('#');
+    if (url[1]) {
+        //We have a hash
+        var tabHash = url[1];
+        tabs[tabHash]();
+    }    
+    
     YUE.on('refresh','click',function(e){
         ypjax(e.currentTarget.href,"journal",function(){show_more_event();tooltip_activate();});
         YUE.preventDefault(e);
@@ -224,6 +202,5 @@
         q_filter('q_filter',YUQ('#my tr td a.repo_name'),func);
     });
 
-
     </script>
 </%def>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/templates/journal/journal_page_repos.html	Tue Oct 23 00:02:59 2012 +0200
@@ -0,0 +1,47 @@
+%if c.user_repos:
+<div id='repos_list_wrap' class="yui-skin-sam">
+<table id="repos_list">
+ <thead>
+      <tr>
+      <th></th>
+      <th class="left">${_('Name')}</th>
+      <th class="left">${_('Revision')}</th>
+      <th class="left">${_('Action')}</th>
+      <th class="left">${_('Action')}</th>
+ </thead>
+ <tbody>
+     <%namespace name="dt" file="/data_table/_dt_elements.html"/>
+     %for repo in c.user_repos:
+        <tr>
+            ##QUICK MENU
+            <td class="quick_repo_menu">
+              ${dt.quick_menu(repo['name'])}
+            </td>
+            ##REPO NAME AND ICONS
+            <td class="reponame">
+              ${dt.repo_name(repo['name'],repo['dbrepo']['repo_type'],repo['dbrepo']['private'],h.AttributeDict(repo['dbrepo_fork']))}
+            </td>
+            ##LAST REVISION
+            <td>
+                ${dt.revision(repo['name'],repo['rev'],repo['tip'],repo['author'],repo['last_msg'])}
+            </td>
+            ##
+            <td><a href="${h.url('repo_settings_home',repo_name=repo['name'])}" title="${_('edit')}"><img class="icon" alt="${_('private')}" src="${h.url('/images/icons/application_form_edit.png')}"/></a></td>
+            <td>
+              ${h.form(url('repo_settings_delete', repo_name=repo['name']),method='delete')}
+                ${h.submit('remove_%s' % repo['name'],'',class_="delete_icon action_button",onclick="return confirm('"+_('Confirm to delete this repository')+"');")}
+              ${h.end_form()}
+            </td>
+        </tr>
+     %endfor
+ </tbody>
+ </table>
+ </div>
+ %else:
+    <div style="padding:5px 0px 10px 0px;">
+    ${_('No repositories yet')}
+    %if h.HasPermissionAny('hg.admin','hg.create.repository')():
+        ${h.link_to(_('create one now'),h.url('admin_settings_create_repository'),class_="ui-btn")}
+    %endif
+    </div>
+ %endif
\ No newline at end of file