Commits

Marcin Kuzminski committed ee07357

unified annotation view with file source view

Comments (0)

Files changed (5)

rhodecode/config/routing.py

 
     rmap.connect('files_annotate_home',
                  '/{repo_name:.*}/annotate/{revision}/{f_path:.*}',
-                 controller='files', action='annotate', revision='tip',
-                 f_path='', conditions=dict(function=check_repo))
+                 controller='files', action='index', revision='tip',
+                 f_path='', annotate=True, conditions=dict(function=check_repo))
 
     rmap.connect('files_edit_home',
                  '/{repo_name:.*}/edit/{revision}/{f_path:.*}',

rhodecode/controllers/files.py

 
     @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
                                    'repository.admin')
-    def index(self, repo_name, revision, f_path):
+    def index(self, repo_name, revision, f_path, annotate=False):
         # redirect to given revision from form if given
         post_revision = request.POST.get('at_rev', None)
         if post_revision:
         c.changeset = self.__get_cs_or_redirect(revision, repo_name)
         c.branch = request.GET.get('branch', None)
         c.f_path = f_path
-
+        c.annotate = annotate
         cur_rev = c.changeset.revision
 
         # prev link
         response.content_type = mimetype
         return file_node.content
 
-    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
-                                   'repository.admin')
-    def annotate(self, repo_name, revision, f_path):
-        c.cs = self.__get_cs_or_redirect(revision, repo_name)
-        c.file = self.__get_filenode_or_redirect(repo_name, c.cs, f_path)
-
-        c.file_history = self._get_node_history(c.cs, f_path)
-        c.f_path = f_path
-        return render('files/files_annotate.html')
-
     @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
     def edit(self, repo_name, revision, f_path):
         r_post = request.POST

rhodecode/templates/files/files_annotate.html

-<%inherit file="/base/base.html"/>
-
-<%def name="title()">
-    ${c.repo_name} ${_('File annotate')} - ${c.rhodecode_name}
-</%def>
-
-<%def name="breadcrumbs_links()">
-    ${h.link_to(u'Home',h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
-    &raquo;
-    ${_('annotate')} @ R${c.cs.revision}:${h.short_id(c.cs.raw_id)}
-</%def>
-
-<%def name="page_nav()">
-		${self.menu('files')}
-</%def>
-<%def name="main()">
-<div class="box">
-    <!-- box / title -->
-    <div class="title">
-        ${self.breadcrumbs()}
-        <ul class="links">
-            <li>
-              <span style="text-transform: uppercase;"><a href="#">${_('branch')}: ${c.cs.branch}</a></span>
-            </li>
-        </ul>
-    </div>
-    <div class="table">
-		<div id="files_data">
-			<h3 class="files_location">${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cs.revision,c.file.path)}</h3>
-			<dl>
-			    <dt style="padding-top:10px;font-size:16px">${_('History')}</dt>
-			    <dd>
-			        <div>
-			        ${h.form(h.url('files_diff_home',repo_name=c.repo_name,f_path=c.f_path),method='get')}
-			        ${h.hidden('diff2',c.file.changeset.raw_id)}
-			        ${h.select('diff1',c.file.changeset.raw_id,c.file_history)}
-			        ${h.submit('diff','diff to revision',class_="ui-btn")}
-			        ${h.submit('show_rev','show at revision',class_="ui-btn")}
-			        ${h.end_form()}
-			        </div>
-			    </dd>
-			</dl>
-			<div id="body" class="codeblock">
-                <div class="code-header">
-                    <div class="stats">
-                        <div class="left"><img src="${h.url('/images/icons/file.png')}"/></div>
-                        <div class="left item">${h.link_to("r%s:%s" % (c.file.changeset.revision,h.short_id(c.file.changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id))}</div>
-                        <div class="left item">${h.format_byte_size(c.file.size,binary=True)}</div>
-                        <div class="left item last">${c.file.mimetype}</div>
-                        <div class="buttons">
-                          ${h.link_to(_('show source'),h.url('files_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")}
-                          ${h.link_to(_('show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")}
-                          ${h.link_to(_('download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")}
-                          % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
-                           % if not c.file.is_binary:
-                            ${h.link_to(_('edit'),h.url('files_edit_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")}
-                           % endif
-                          % endif
-                        </div>
-                    </div>
-                    <div class="author">
-                        <div class="gravatar">
-                            <img alt="gravatar" src="${h.gravatar_url(h.email(c.cs.author),16)}"/>
-                        </div>
-                        <div title="${c.cs.author}" class="user">${h.person(c.cs.author)}</div>
-                    </div>
-                    <div class="commit">${c.file.last_changeset.message}</div>
-                </div>
-				<div class="code-body">
-			       %if c.file.is_binary:
-			           ${_('Binary file (%s)') % c.file.mimetype}
-			       %else:
-					% if c.file.size < c.cut_off_limit:
-						${h.pygmentize_annotation(c.repo_name,c.file,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")}
-					%else:
-						${_('File is too big to display')} ${h.link_to(_('show as raw'),
-						h.url('files_raw_home',repo_name=c.repo_name,revision=c.cs.revision,f_path=c.f_path))}
-					%endif
-			       <script type="text/javascript">
-			           function highlight_lines(lines){
-			               for(pos in lines){
-			                 YUD.setStyle('L'+lines[pos],'background-color','#FFFFBE');
-			               }
-			           }
-			           page_highlights = location.href.substring(location.href.indexOf('#')+1).split('L');
-			           if (page_highlights.length == 2){
-			              highlight_ranges  = page_highlights[1].split(",");
-
-			              var h_lines = [];
-			              for (pos in highlight_ranges){
-			                   var _range = highlight_ranges[pos].split('-');
-			                   if(_range.length == 2){
-			                       var start = parseInt(_range[0]);
-			                       var end = parseInt(_range[1]);
-			                       if (start < end){
-			                           for(var i=start;i<=end;i++){
-			                               h_lines.push(i);
-			                           }
-			                       }
-			                   }
-			                   else{
-			                       h_lines.push(parseInt(highlight_ranges[pos]));
-			                   }
-			             }
-			           highlight_lines(h_lines);
-
-			           //remember original location
-			           var old_hash  = location.href.substring(location.href.indexOf('#'));
-
-			           // this makes a jump to anchor moved by 3 posstions for padding
-			           window.location.hash = '#L'+Math.max(parseInt(h_lines[0])-3,1);
-
-			           //sets old anchor
-			           window.location.hash = old_hash;
-
-			           }
-			       </script>
-				   %endif
-				</div>
-			</div>
-            <script type="text/javascript">
-            YAHOO.util.Event.onDOMReady(function(){
-                YUE.on('show_rev','click',function(e){
-                    YAHOO.util.Event.preventDefault(e);
-                    var cs = YAHOO.util.Dom.get('diff1').value;
-                    var url = "${h.url('files_annotate_home',repo_name=c.repo_name,revision='__CS__',f_path=c.f_path)}".replace('__CS__',cs);
-                    window.location = url;
-                    });
-               });
-            </script>
-		</div>
-    </div>
-</div>
-</%def>

rhodecode/templates/files/files_source.html

             <div class="left item"><pre>${h.format_byte_size(c.file.size,binary=True)}</pre></div>
             <div class="left item last"><pre>${c.file.mimetype}</pre></div>
             <div class="buttons">
-              ${h.link_to(_('show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
+              %if c.annotate:
+                ${h.link_to(_('show source'),    h.url('files_home',         repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
+              %else:
+                ${h.link_to(_('show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
+              %endif
               ${h.link_to(_('show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
               ${h.link_to(_('download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
               % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
 	       ${_('Binary file (%s)') % c.file.mimetype}
 	   %else:
 		% if c.file.size < c.cut_off_limit:
-			${h.pygmentize(c.file,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")}
+            %if c.annotate:
+              ${h.pygmentize_annotation(c.repo_name,c.file,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")}
+            %else:
+			  ${h.pygmentize(c.file,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")}
+            %endif
 		%else:
 			${_('File is too big to display')} ${h.link_to(_('show as raw'),
 			h.url('files_raw_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path))}
 		%endif
-       <script type="text/javascript">
-           function highlight_lines(lines){
-               for(pos in lines){
-                 YUD.setStyle('L'+lines[pos],'background-color','#FFFFBE');
-               }
-           }
-           page_highlights = location.href.substring(location.href.indexOf('#')+1).split('L');
-           if (page_highlights.length == 2){
-              highlight_ranges  = page_highlights[1].split(",");
-
-              var h_lines = [];
-              for (pos in highlight_ranges){
-                   var _range = highlight_ranges[pos].split('-');
-                   if(_range.length == 2){
-                       var start = parseInt(_range[0]);
-                       var end = parseInt(_range[1]);
-                       if (start < end){
-                           for(var i=start;i<=end;i++){
-                               h_lines.push(i);
-                           }
-                       }
-                   }
-                   else{
-                       h_lines.push(parseInt(highlight_ranges[pos]));
-                   }
-             }
-           highlight_lines(h_lines);
-
-           //remember original location
-           var old_hash  = location.href.substring(location.href.indexOf('#'));
-
-           // this makes a jump to anchor moved by 3 posstions for padding
-           window.location.hash = '#L'+Math.max(parseInt(h_lines[0])-3,1);
-
-           //sets old anchor
-           window.location.hash = old_hash;
-
-           }
-       </script>
      %endif
 	</div>
 </div>
 
 <script type="text/javascript">
 YUE.onDOMReady(function(){
+    function highlight_lines(lines){
+        for(pos in lines){
+          YUD.setStyle('L'+lines[pos],'background-color','#FFFFBE');
+        }
+    }
+    page_highlights = location.href.substring(location.href.indexOf('#')+1).split('L');
+    if (page_highlights.length == 2){
+       highlight_ranges  = page_highlights[1].split(",");
+
+       var h_lines = [];
+       for (pos in highlight_ranges){
+            var _range = highlight_ranges[pos].split('-');
+            if(_range.length == 2){
+                var start = parseInt(_range[0]);
+                var end = parseInt(_range[1]);
+                if (start < end){
+                    for(var i=start;i<=end;i++){
+                        h_lines.push(i);
+                    }
+                }
+            }
+            else{
+                h_lines.push(parseInt(highlight_ranges[pos]));
+            }
+      }
+    highlight_lines(h_lines);
+
+    //remember original location
+    var old_hash  = location.href.substring(location.href.indexOf('#'));
+
+    // this makes a jump to anchor moved by 3 posstions for padding
+    window.location.hash = '#L'+Math.max(parseInt(h_lines[0])-3,1);
+
+    //sets old anchor
+    window.location.hash = old_hash;
+
+    }
     YUE.on('show_rev','click',function(e){
     	YUE.preventDefault(e);
         var cs = YUD.get('diff1').value;
-        var url = "${h.url('files_home',repo_name=c.repo_name,revision='__CS__',f_path=c.f_path)}".replace('__CS__',cs);
+        %if c.annotate:
+          var url = "${h.url('files_annotate_home',repo_name=c.repo_name,revision='__CS__',f_path=c.f_path)}".replace('__CS__',cs);
+        %else:
+          var url = "${h.url('files_home',repo_name=c.repo_name,revision='__CS__',f_path=c.f_path)}".replace('__CS__',cs);
+        %endif
         window.location = url;
     });
     YUE.on('hlcode','mouseup',getSelectionLink("${_('Selection link')}"))

rhodecode/templates/files/files_ypjax.html

 %if c.file:
     <h3 class="files_location">
         ${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.changeset.raw_id,c.file.path)}
+        %if c.annotate:  
+        - ${_('annotation')} 
+        %endif        
     </h3>
         %if c.file.is_dir():
             <%include file='files_browser.html'/>
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.