Mercurial > kallithea
changeset 2177:ee07357d9265 beta
unified annotation view with file source view
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sun, 01 Apr 2012 01:05:15 +0300 |
parents | 162bf5c978f8 |
children | 989c137f26eb |
files | rhodecode/config/routing.py rhodecode/controllers/files.py rhodecode/templates/files/files_annotate.html rhodecode/templates/files/files_source.html rhodecode/templates/files/files_ypjax.html |
diffstat | 5 files changed, 59 insertions(+), 192 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/config/routing.py Thu Mar 29 21:21:29 2012 +0200 +++ b/rhodecode/config/routing.py Sun Apr 01 01:05:15 2012 +0300 @@ -454,8 +454,8 @@ 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:.*}',
--- a/rhodecode/controllers/files.py Thu Mar 29 21:21:29 2012 +0200 +++ b/rhodecode/controllers/files.py Sun Apr 01 01:05:15 2012 +0300 @@ -112,7 +112,7 @@ @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: @@ -123,7 +123,7 @@ 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 @@ -219,16 +219,6 @@ 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
--- a/rhodecode/templates/files/files_annotate.html Thu Mar 29 21:21:29 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,136 +0,0 @@ -<%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('/'))} - » - ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))} - » - ${_('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>
--- a/rhodecode/templates/files/files_source.html Thu Mar 29 21:21:29 2012 +0200 +++ b/rhodecode/templates/files/files_source.html Sun Apr 01 01:05:15 2012 +0300 @@ -20,7 +20,11 @@ <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): @@ -43,60 +47,66 @@ ${_('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')}"))
--- a/rhodecode/templates/files/files_ypjax.html Thu Mar 29 21:21:29 2012 +0200 +++ b/rhodecode/templates/files/files_ypjax.html Sun Apr 01 01:05:15 2012 +0300 @@ -1,6 +1,9 @@ %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'/>