Changeset - 7db8e58cee2f
[Not reviewed]
default
0 2 0
Jan Heylen - 10 years ago 2015-11-29 16:43:42
heyleke@gmail.com
diffs: introduce 'show inline comments' control for pull-requests too

Make diff_block_simple control inline comments like diff_block does.

.show-inline-comments handling is moved to the generic diff handling js.

I am not sure this is useful when the whole diff is sent to the client side
anyway ... but for now, let's be consistent.
2 files changed with 18 insertions and 13 deletions:
0 comments (0 inline, 0 general)
kallithea/templates/changeset/changeset.html
Show inline comments
 
@@ -164,109 +164,96 @@ ${self.repo_context_bar('changelog', c.c
 
            <div class="changes_txt">
 
            % if c.limited_diff:
 
            ${ungettext('%s file changed','%s files changed',len(c.changeset.affected_files)) % (len(c.changeset.affected_files))}:
 
            % else:
 
            ${ungettext('%s file changed with %s insertions and %s deletions','%s files changed with %s insertions and %s deletions', len(c.changeset.affected_files)) % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}:
 
            %endif
 
            </div>
 
            <div class="cs_files">
 
              %for FID, (cs1, cs2, change, path, diff, stats) in c.changes[c.changeset.raw_id].iteritems():
 
                  <div class="cs_${change}">
 
                        <div class="node">
 
                            <i class="icon-diff-${change}"></i>
 
                            <a href="#${FID}">${h.safe_unicode(path)}</a>
 
                        </div>
 
                    <div class="changes">${h.fancy_file_stats(stats)}</div>
 
                  </div>
 
              %endfor
 
              % if c.limited_diff:
 
                <h5>${_('Changeset was too big and was cut off...')} <a href="${h.url.current(fulldiff=1, **request.GET.mixed())}">${_('Show full diff anyway')}</a></h5>
 
              % endif
 
            </div>
 
        </div>
 

	
 
    </div>
 

	
 
    ## diff block
 
    <div class="commentable-diff">
 
    <%namespace name="diff_block" file="/changeset/diff_block.html"/>
 
    ${diff_block.diff_block_js()}
 
    ${diff_block.diff_block(c.changes[c.changeset.raw_id])}
 
    % if c.limited_diff:
 
      <h4>${_('Changeset was too big and was cut off...')} <a href="${h.url.current(fulldiff=1, **request.GET.mixed())}">${_('Show full diff anyway')}</a></h4>
 
    % endif
 
    </div>
 

	
 
    ## template for inline comment form
 
    ${comment.comment_inline_form()}
 

	
 
    ## render comments and inlines
 
    ${comment.generate_comments()}
 

	
 
    ## main comment form and it status
 
    ${comment.comments(h.url('changeset_comment', repo_name=c.repo_name, revision=c.changeset.raw_id),
 
                       h.changeset_status(c.db_repo, c.changeset.raw_id))}
 

	
 
    ## FORM FOR MAKING JS ACTION AS CHANGESET COMMENTS
 
    <script type="text/javascript">
 
      $(document).ready(function(){
 
          $('.show-inline-comments').change(function(e){
 
              var target = e.currentTarget;
 
              if(target == null){
 
                  target = this;
 
              }
 
              var boxid = $(target).attr('id_for');
 
              if(target.checked){
 
                  $('#{0} .inline-comments'.format(boxid)).show();
 
              }else{
 
                  $('#{0} .inline-comments'.format(boxid)).hide();
 
              }
 
          });
 

	
 
          $('.code-difftable').on('click', '.add-bubble', function(e){
 
              show_comment_form($(this));
 
          });
 

	
 
          move_comments($(".comments .comments-list-chunk"));
 

	
 
          pyroutes.register('changeset_home',
 
                            "${h.url('changeset_home', repo_name='%(repo_name)s', revision='%(revision)s')}",
 
                            ['repo_name', 'revision']);
 

	
 
          //next links
 
          $('#child_link').on('click', function(e){
 
              //fetch via ajax what is going to be the next link, if we have
 
              //>1 links show them to user to choose
 
              if(!$('#child_link').hasClass('disabled')){
 
                  $.ajax({
 
                    url: '${h.url('changeset_children',repo_name=c.repo_name, revision=c.changeset.raw_id)}',
 
                    success: function(data) {
 
                      if(data.results.length === 0){
 
                          $('#child_link').addClass('disabled');
 
                          $('#child_link').html('${_('No revisions')}');
 
                      }
 
                      if(data.results.length === 1){
 
                          var commit = data.results[0];
 
                          window.location = pyroutes.url('changeset_home', {'repo_name': '${c.repo_name}','revision': commit.raw_id});
 
                      }
 
                      else if(data.results.length === 2){
 
                          $('#child_link').addClass('disabled');
 
                          $('#child_link').addClass('double');
 
                          var _html = '';
 
                          _html +='<a title="__title__" href="__url__">__rev__</a> <i style="color:#036185" class="icon-right-open"></i>'
 
                                  .replace('__rev__','r{0}:{1}'.format(data.results[0].revision, data.results[0].raw_id.substr(0,6)))
 
                                  .replace('__title__', data.results[0].message)
 
                                  .replace('__url__', pyroutes.url('changeset_home', {'repo_name': '${c.repo_name}','revision': data.results[0].raw_id}));
 
                          _html +='<br/>'
 
                          _html +='<a title="__title__" href="__url__">__rev__</a> <i style="color:#036185" class="icon-right-open"></i>'
 
                                  .replace('__rev__','r{0}:{1}'.format(data.results[1].revision, data.results[1].raw_id.substr(0,6)))
 
                                  .replace('__title__', data.results[1].message)
 
                                  .replace('__url__', pyroutes.url('changeset_home', {'repo_name': '${c.repo_name}','revision': data.results[1].raw_id}));
 
                          $('#child_link').html(_html);
 
                      }
 
                    }
 
                  });
 
              e.preventDefault();
 
              }
 
          });
 

	
 
          //prev links
kallithea/templates/changeset/diff_block.html
Show inline comments
 
@@ -72,113 +72,131 @@
 
<%def name="diff_block_simple(files, changes)">
 
<div class="diff-collapse">
 
    <span target="${'diff-container-%s' % (id(changes))}" class="diff-collapse-button">&uarr; ${_('Collapse Diff')} &uarr;</span>
 
</div>
 
<div class="diff-container" id="${'diff-container-%s' % (id(changes))}">
 
  %for fid, ch, f, stat in files:
 
    <%
 
    op, filename, diff = changes[fid]
 
    id_fid = h.FID('', filename)
 
    url_fid = '' # or None
 
    a_rev, cs_rev = c.a_rev, c.cs_rev
 
    a_repo_name, cs_repo_name = c.a_repo.repo_name, c.cs_repo.repo_name
 
    a_ref_type, a_ref_name = c.a_ref_type, c.a_ref_name
 
    cs_ref_type, cs_ref_name = c.cs_ref_type, c.cs_ref_name
 
    %>
 
    <div id="${id_fid}_target" style="clear:both;margin-top:25px"></div>
 
    <div id="${id_fid}" class="diffblock margined comm">
 
        <div class="code-header">
 
            <div class="changeset_header">
 
                <div class="changeset_file">
 
                    ${h.safe_unicode(filename)} |
 
                    ## TODO: link to ancestor and head of other instead of exactly other
 
                    %if op == 'A':
 
                      ${_('Added')}
 
                      <a class="spantag" href="${h.url('files_home', repo_name=cs_repo_name, f_path=filename, revision=cs_rev)}">${h.short_ref(cs_ref_type, cs_ref_name)}</a>
 
                    %elif op == 'M':
 
                      <a class="spantag" href="${h.url('files_home', repo_name=a_repo_name, f_path=filename, revision=a_rev)}">${h.short_ref(a_ref_type, a_ref_name)}</a>
 
                      <i class="icon-right"></i>
 
                      <a class="spantag" href="${h.url('files_home', repo_name=cs_repo_name, f_path=filename, revision=cs_rev)}">${h.short_ref(cs_ref_type, cs_ref_name)}</a>
 
                    %elif op == 'D':
 
                      ${_('Deleted')}
 
                      <a class="spantag" href="${h.url('files_home', repo_name=a_repo_name, f_path=filename, revision=a_rev)}">${h.short_ref(a_ref_type, a_ref_name)}</a>
 
                    %elif op == 'R':
 
                      ${_('Renamed')}
 
                      <a class="spantag" href="${h.url('files_home', repo_name=a_repo_name, f_path=filename, revision=a_rev)}">${h.short_ref(a_ref_type, a_ref_name)}</a>
 
                      <i class="icon-right"></i>
 
                      <a class="spantag" href="${h.url('files_home', repo_name=cs_repo_name, f_path=filename, revision=cs_rev)}">${h.short_ref(cs_ref_type, cs_ref_name)}</a>
 
                    %else:
 
                      ${op}???
 
                    %endif
 
                </div>
 
                <div class="diff-actions">
 
                  <a href="${h.url('files_diff_2way_home',repo_name=cs_repo_name,f_path=h.safe_unicode(filename),diff1=a_rev,diff2=cs_rev,diff='diff',fulldiff=1)}" class="tooltip" title="${_('Show full side-by-side diff for this file')}">
 
                      <i class="icon-docs"></i>
 
                  </a>
 
                  ${c.ignorews_url(request.GET, url_fid)}
 
                  ${c.context_url(request.GET, url_fid)}
 
                </div>
 
                <span style="float:right;margin-top:-3px">
 
                    <label>
 
                        ${_('Show inline comments')}
 
                        ${h.checkbox('',checked="checked",class_="show-inline-comments",id_for=url_fid)}
 
                    </label>
 
                </span>
 
            </div>
 
        </div>
 
        <div class="code-body full_f_path" data-f_path="${h.safe_unicode(filename)}">
 
            ${diff|n}
 
            %if filename.rsplit('.')[-1] in ['png', 'gif', 'jpg', 'bmp']:
 
              <div class="btn btn-image-diff-show">Show images</div>
 
              %if op == 'M':
 
                <div id="${id_fid}_image-diff" class="btn btn-image-diff-swap" style="display:none">Press to swap images</div>
 
              %endif
 
              <div style="font-size: 0">
 
                %if op in 'DM':
 
                  <img id="${id_fid}_image-diff-img-a" class="img-diff img-diff-swapable" style="display:none"
 
                      realsrc="${h.url('files_raw_home',repo_name=a_repo_name,revision=a_rev,f_path=filename)}" />
 
                %endif
 
                %if op in 'AM':
 
                  <img id="${id_fid}_image-diff-img-b" class="img-diff img-diff-swapable" style="display:none"
 
                      realsrc="${h.url('files_raw_home',repo_name=cs_repo_name,revision=cs_rev,f_path=filename)}" />
 
                %endif
 
              </div>
 
            %endif
 
        </div>
 
    </div>
 
  %endfor
 
</div>
 
</%def>
 

	
 
<%def name="diff_block_js()">
 
<script type="text/javascript">
 
$(document).ready(function(){
 
    $('.btn-image-diff-show').click(function(e){
 
        $('.btn-image-diff-show').hide();
 
        $('.btn-image-diff-swap').show();
 
        $('.img-diff-swapable')
 
            .each(function(i,e){
 
                    $(e).prop('src', $(e).attr('realsrc'));
 
                })
 
            .show();
 
        });
 

	
 
    $('.btn-image-diff-swap').mousedown(function(e){
 
        $('#'+e.currentTarget.id+'-img-a.img-diff-swapable')
 
          .before($('#'+e.currentTarget.id+'-img-b.img-diff-swapable'));
 
    });
 
    var reset = function(e){
 
        $('#'+e.currentTarget.id+'-img-a.img-diff-swapable')
 
          .after($('#'+e.currentTarget.id+'-img-b.img-diff-swapable'));
 
    };
 
    $('.btn-image-diff-swap').mouseup(reset);
 
    $('.btn-image-diff-swap').mouseleave(reset);
 

	
 
    $('.diff-collapse-button').click(function(e) {
 
        var $button = $(e.currentTarget);
 
        var $target = $('#' + $button.attr('target'));
 
        if($target.hasClass('hidden')){
 
            $target.removeClass('hidden');
 
            $button.html("&uarr; {0} &uarr;".format(_TM['Collapse Diff']));
 
        }
 
        else if(!$target.hasClass('hidden')){
 
            $target.addClass('hidden');
 
            $button.html("&darr; {0} &darr;".format(_TM['Expand Diff']));
 
        }
 
    });
 
    $('.show-inline-comments').change(function(e){
 
        var target = e.currentTarget;
 
        if(target == null){
 
            target = this;
 
        }
 
        var boxid = $(target).attr('id_for');
 
        if(target.checked){
 
            $('#{0} .inline-comments'.format(boxid)).show();
 
        }else{
 
            $('#{0} .inline-comments'.format(boxid)).hide();
 
        }
 
    });
 
});
 
</script>
 
</%def>
0 comments (0 inline, 0 general)