view rhodecode/templates/changeset/changeset.html @ 1703:f23828b00b21 beta

notification fixes and improvements
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 20 Nov 2011 22:26:55 +0200
parents b702d0d4b030
children 3efc47f59639
line wrap: on
line source

## -*- coding: utf-8 -*-

<%inherit file="/base/base.html"/>

<%def name="title()">
    ${c.repo_name} ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} - ${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;
    ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
</%def>

<%def name="page_nav()">
    ${self.menu('changelog')}     
</%def>

<%def name="fid(raw_id,path)" filter="strip">
  <% 
    return 'C-%s-%s' % (h.short_id(raw_id),h.safeid(h.safe_unicode(path))) 
  %>
</%def>

<%def name="main()">
<div class="box">
    <!-- box / title -->
    <div class="title">
        ${self.breadcrumbs()}
    </div>
    <div class="table">
		<div class="diffblock">
			<div class="code-header">
				<div>
                <span>${h.link_to(_('raw diff'),
				h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='show'))}</span>
				 &raquo; <span>${h.link_to(_('download diff'),
				h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='download'))}</span>
				<div class="comments-number" style="float:right;padding-right:5px">${len(c.comments)} comment(s) (${c.inline_cnt} ${_('inline')})</div>
                </div>
			</div>
		</div>
	    <div id="changeset_content">
			<div class="container">
	             <div class="left">
	                 <div class="date">${_('commit')} ${c.changeset.revision}: ${h.short_id(c.changeset.raw_id)}@${c.changeset.date}</div>
	                 <div class="author">
	                     <div class="gravatar">
	                         <img alt="gravatar" src="${h.gravatar_url(h.email(c.changeset.author),20)}"/>
	                     </div>
	                     <span>${h.person(c.changeset.author)}</span><br/>
	                     <span><a href="mailto:${h.email_or_none(c.changeset.author)}">${h.email_or_none(c.changeset.author)}</a></span><br/>
	                 </div>
	                 <div class="message">${h.link_to(h.wrap_paragraphs(c.changeset.message),h.url('changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</div>
	             </div>
	             <div class="right">
		             <div class="changes">
                        % if len(c.changeset.affected_files) <= c.affected_files_cut_off:	             
		                 <span class="removed" title="${_('removed')}">${len(c.changeset.removed)}</span>
		                 <span class="changed" title="${_('changed')}">${len(c.changeset.changed)}</span>
		                 <span class="added" title="${_('added')}">${len(c.changeset.added)}</span>
	                    % else:
                         <span class="removed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
                         <span class="changed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
                         <span class="added"   title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>	                    
	                    % endif		                 
		             </div>                  
		                 %if len(c.changeset.parents)>1:
		                 <div class="merge">
		                     ${_('merge')}<img alt="merge" src="${h.url('/images/icons/arrow_join.png')}"/>
		                 </div>
		                 %endif
		                 
		            %if c.changeset.parents:
		             %for p_cs in reversed(c.changeset.parents):
		                 <div class="parent">${_('Parent')} ${p_cs.revision}: ${h.link_to(h.short_id(p_cs.raw_id),
		                     h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}
		                 </div>
		             %endfor
                    %else: 
                        <div class="parent">${_('No parents')}</div>   
                    %endif		             
		         <span class="logtags">
		             <span class="branchtag" title="${'%s %s' % (_('branch'),c.changeset.branch)}">
		             ${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
		             %for tag in c.changeset.tags:
		                 <span class="tagtag"  title="${'%s %s' % (_('tag'),tag)}">
		                 ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
		             %endfor
		         </span>                                                                 
	                </div>              
	        </div>
	        <span style="font-size:1.1em;font-weight: bold">
	        ${_('%s files affected with %s additions and %s deletions.') % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}
	        </span>
	        <div class="cs_files">
	                %for change,filenode,diff,cs1,cs2,stat in c.changes:
	                    <div class="cs_${change}">
                            <div class="node">
                            %if change != 'removed':
                                ${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=self.fid(filenode.changeset.raw_id,filenode.path)))}
                            %else:
                                ${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=self.fid('',filenode.path)))}
                            %endif
                            </div>
		                    <div class="changes">${h.fancy_file_stats(stat)}</div>
	                    </div>
	                %endfor
	                % if c.cut_off:
	                  ${_('Changeset was too big and was cut off...')}
	                % endif
	        </div>         
	    </div>
	    
    </div>
    	
	%for change,filenode,diff,cs1,cs2,stat in c.changes:
		%if change !='removed':
		<div style="clear:both;height:10px"></div>
		<div class="diffblock  margined comm" id="${self.fid(filenode.changeset.raw_id,filenode.path)}">
			<div class="code-header">
				<div class="changeset_header">
					<span class="changeset_file">
						${h.link_to_if(change!='removed',h.safe_unicode(filenode.path),h.url('files_home',repo_name=c.repo_name,
						revision=filenode.changeset.raw_id,f_path=h.safe_unicode(filenode.path)))}
					</span>
					&raquo; <span>${h.link_to(_('diff'),
					h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='diff'))}</span>
					&raquo; <span>${h.link_to(_('raw diff'),
					h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='raw'))}</span>
					&raquo; <span>${h.link_to(_('download diff'),
					h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='download'))}</span>
                    <span style="float:right">
                      <label>
                      ${_('show inline comments')}
                      ${h.checkbox('',checked="checked",class_="show-inline-comments",id_for=self.fid(filenode.changeset.raw_id,filenode.path))}
                      </label>
                    </span>
				</div>
			</div>
			<div class="code-body">
                <div class="full_f_path" path="${filenode.path}"></div>        
				%if diff:
					${diff|n}
				%else:
					${_('No changes in this file')}
				%endif
			</div>
		</div>
		%endif
	%endfor
  
    <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
    ## template for inline comment form
    ${comment.comment_inline_form()}
    
    <div class="comments">
        <div class="comments-number">${len(c.comments)} comment(s) (${c.inline_cnt} ${_('inline')})</div>
        
        %for path, lines in c.inline_comments:
            <div style="display:none" class="inline-comment-placeholder" path="${path}" target_id="${self.fid(c.changeset.raw_id,path)}">
            % for line,comments in lines.iteritems():
                <div class="inline-comment-placeholder-line" line="${line}" target_id="${h.safeid(h.safe_unicode(path))}"> 
                %for co in comments:
                    ${comment.comment_block(co)}
                %endfor
                </div>
            %endfor
            </div>
        %endfor        
        
        %for co in c.comments:
            ${comment.comment_block(co)}
        %endfor
        %if c.rhodecode_user.username != 'default':
        <div class="comment-form">
            ${h.form(h.url('changeset_comment', repo_name=c.repo_name, revision=c.changeset.raw_id))}
            <strong>${_('Leave a comment')}</strong>
            <div class="clearfix">
                <div class="comment-help">
                    ${_('Comments parsed using')} <a href="${h.url('rst_help')}">RST</a> ${_('syntax')}
                </div>
                    ${h.textarea('text')}
            </div>
            <div class="comment-button">
            ${h.submit('save', _('Comment'), class_='ui-button')}
            </div>
            ${h.end_form()}
        </div>
        %endif
    </div>
    <script type="text/javascript">
      var deleteComment = function(comment_id){

          var url = "${url('changeset_comment_delete',repo_name=c.repo_name,comment_id='__COMMENT_ID__')}".replace('__COMMENT_ID__',comment_id);
          var postData = '_method=delete';
          var success = function(o){
              var n = YUD.get('comment-'+comment_id);
              n.parentNode.removeChild(n);
          }
          ajaxPOST(url,postData,success);
      }

      YUE.onDOMReady(function(){
    	  
    	  YUE.on(YUQ('.show-inline-comments'),'change',function(e){
    		  var show = 'none';
    		  var target = e.currentTarget;
    		  if(target.checked){
    			  var show = ''
    		  }
    		  var boxid = YUD.getAttribute(target,'id_for');
    		  var comments = YUQ('#{0} .inline-comments'.format(boxid));
    		  for(c in comments){ 
    		     YUD.setStyle(comments[c],'display',show);
    		  }
    	  })
    	  

          
          YUE.on(YUQ('.line'),'click',function(e){
        	  var tr = e.currentTarget;
        	  if(YUD.hasClass(tr,'form-open') || YUD.hasClass(tr,'context')){
        		  return
        	  }
        	  YUD.addClass(tr,'form-open');
        	  var node = tr.parentNode.parentNode.parentNode.getElementsByClassName('full_f_path')[0];
        	  var f_path = YUD.getAttribute(node,'path');
        	  var lineno = getLineNo(tr);
        	  var form = createInlineForm(tr, f_path, lineno);
        	  YUD.insertAfter(form,tr);
          });
          
          // inject comments into they proper positions
          var file_comments = YUQ('.inline-comment-placeholder');
          
          for (f in file_comments){
        	  var box = file_comments[f];
        	  var inlines = box.children;
        	  for(var i=0; i<inlines.length; i++){
        		  try{
          		    var inline = inlines[i];
          		    var lineno = YUD.getAttribute(inlines[i],'line');
          		    var lineid = "{0}_{1}".format(YUD.getAttribute(inline,'target_id'),lineno);
                    var target_line = YUD.get(lineid);
                    var comments = new YAHOO.util.Element(tableTr('inline-comments',inline.innerHTML))
                    YUD.insertAfter(comments,target_line.parentNode);
        		  }catch(e){}
        	  }
          }
      })
      
    </script> 
  </div>	
</%def>