Files @ 2aa7f454204e
Branch filter:

Location: kallithea/rhodecode/templates/changeset/changeset.html

Marcin Kuzminski
fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
## -*- 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;
        	  injectInlineForm(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 add = createInlineAddButton(target_line.parentNode,'${_("add another comment")}');
                    YUD.insertAfter(add,target_line.parentNode);
                    
                    var comment = new YAHOO.util.Element(tableTr('inline-comments',inline.innerHTML))
                    YUD.insertAfter(comment,target_line.parentNode);
        		  }catch(e){}
        	  }
          }
      })
      
    </script> 
  </div>	
</%def>