diff --git a/src/main/twirl/gitbucket/core/helper/diff.scala.html b/src/main/twirl/gitbucket/core/helper/diff.scala.html index ddb997c..2cc6f9f 100644 --- a/src/main/twirl/gitbucket/core/helper/diff.scala.html +++ b/src/main/twirl/gitbucket/core/helper/diff.scala.html @@ -10,7 +10,7 @@ @import org.eclipse.jgit.diff.DiffEntry.ChangeType @if(showIndex){
-
+
@@ -151,20 +151,21 @@ } window.viewType = 1; if(("&" + location.search.substring(1)).indexOf("&diff=split") != -1){ - $('.container').removeClass('container').addClass('container-wide'); window.viewType = 0; } renderDiffs(); $('#btn-unified').click(function(){ window.viewType = 1; - $('.container-wide').removeClass('container-wide').addClass('container'); + $('#btn-unified').addClass('active'); + $('#btn-split').removeClass('active'); renderDiffs(); }); $('#btn-split').click(function(){ window.viewType = 0; - $('.container').removeClass('container').addClass('container-wide'); + $('#btn-unified').removeClass('active'); + $('#btn-split').addClass('active'); renderDiffs(); }); @@ -174,6 +175,7 @@ } $(this).closest('table').find('.not-diff').toggle(); }); + $('.ignore-whitespace').change(function() { renderOneDiff($(this).closest("table").find(".diffText"), viewType); }); @@ -188,22 +190,56 @@ } return $(''); } + if (typeof $('#show-notes')[0] !== 'undefined' && !$('#show-notes')[0].checked) { $('#comment-list').children('.inline-comment').hide(); } + + function showCommentForm(commitId, fileName, oldLineNumber, newLineNumber, $tr){ + // assemble Ajax url + var url = '@helpers.url(repository)/commit/' + commitId + '/comment/_form?fileName=' + fileName@issueId.map { id => + '&issueId=@id' }; + if (!isNaN(oldLineNumber) && oldLineNumber) { + url += ('&oldLineNumber=' + oldLineNumber) + } + if (!isNaN(newLineNumber) && newLineNumber) { + url += ('&newLineNumber=' + newLineNumber) + } + // send Ajax request + $.get(url, { dataType : 'html' }, function(responseContent) { + // create container + var tmp; + if (!isNaN(oldLineNumber) && oldLineNumber) { + if (!isNaN(newLineNumber) && newLineNumber) { + tmp = getInlineContainer(); + } else { + tmp = getInlineContainer('old'); + } + } else { + tmp = getInlineContainer('new'); + } + // add comment textarea + tmp.addClass('inline-comment-form').children('.comment-box-container').html(responseContent); + $tr.nextAll(':not(.not-diff):first').before(tmp); + // hide reply comment field + $(tmp).closest('.not-diff').prev().find('.reply-comment').closest('.not-diff').hide(); + // focus textarea + tmp.find('textarea').focus(); + }); + } + + // Add comment button $('.diff-outside').on('click','table.diff .add-comment',function() { var $this = $(this); var $tr = $this.closest('tr'); var $check = $this.closest('table:not(.diff)').find('.toggle-notes'); - var url = ''; + //var url = ''; if (!$check.prop('checked')) { $check.prop('checked', true).trigger('change'); } if (!$tr.nextAll(':not(.not-diff):first').prev().hasClass('inline-comment-form')) { var commitId = $this.closest('.table-bordered').attr('commitId'), fileName = $this.closest('.table-bordered').attr('fileName'), - oldLineNumber, newLineNumber, - url = '@helpers.url(repository)/commit/' + commitId + '/comment/_form?fileName=' + fileName@issueId.map { id => + '&issueId=@id' }; + oldLineNumber, newLineNumber; if (viewType == 0) { oldLineNumber = $this.parent().prev('.oldline').attr('line-number'); newLineNumber = $this.parent().prev('.newline').attr('line-number'); @@ -211,30 +247,27 @@ oldLineNumber = $this.parent().prevAll('.oldline').attr('line-number'); newLineNumber = $this.parent().prevAll('.newline').attr('line-number'); } - if (!isNaN(oldLineNumber) && oldLineNumber) { - url += ('&oldLineNumber=' + oldLineNumber) - } - if (!isNaN(newLineNumber) && newLineNumber) { - url += ('&newLineNumber=' + newLineNumber) - } - $.get(url, { dataType : 'html' }, function(responseContent) { - var tmp; - if (!isNaN(oldLineNumber) && oldLineNumber) { - if (!isNaN(newLineNumber) && newLineNumber) { - tmp = getInlineContainer(); - } else { - tmp = getInlineContainer('old'); - } - } else { - tmp = getInlineContainer('new'); - } - tmp.addClass('inline-comment-form').children('.comment-box-container').html(responseContent); - $tr.nextAll(':not(.not-diff):first').before(tmp); - }); + + showCommentForm(commitId, fileName, oldLineNumber, newLineNumber, $tr); } }).on('click', 'table.diff .btn-default', function() { + // Cancel comment form + $(this).closest('.not-diff').prev().find('.reply-comment').closest('.not-diff').show(); $(this).closest('.inline-comment-form').remove(); }); + + // Reply comment + $('.diff-outside').on('click', '.reply-comment',function(){ + var $this = $(this); + var $tr = $this.closest('tr'); + var commitId = $this.closest('.table-bordered').attr('commitId'); + var fileName = $this.data('filename'); + var oldLineNumber = $this.data('oldline'); + var newLineNumber = $this.data('newline'); + + showCommentForm(commitId, fileName, oldLineNumber, newLineNumber, $tr); + }); + function renderOneCommitCommentIntoDiff($v, diff){ var filename = $v.attr('filename'); var oldline = $v.attr('oldline'); @@ -257,6 +290,7 @@ tmp.hide(); } } + function renderStatBar(add, del){ if(add + del > 5){ if(add){ @@ -282,6 +316,7 @@ } return ret; } + function renderOneDiff(diffText, viewType){ var table = diffText.closest("table[data-diff-id]"); var i = table.data("diff-id"); @@ -305,12 +340,59 @@ } }); } + return table; } + + function renderReplyComment($table){ + var elements = {}; + var filename, newline, oldline; + $table.find('.comment-box-container .inline-comment').each(function(i, e){ + filename = $(e).attr('filename'); + newline = $(e).attr('newline'); + oldline = $(e).attr('oldline'); + var key = filename + '-' + newline + '-' + oldline; + elements[key] = { + element: $(e), + filename: filename, + newline: newline, + oldline: oldline + }; + }); + for(var key in elements){ + filename = elements[key]['filename']; + oldline = elements[key]['oldline']; + newline = elements[key]['newline']; + + var $v = $('
') + .append($('') + .data('filename', filename) + .data('newline', newline) + .data('oldline', oldline)); + + var tmp; + if (typeof oldline !== 'undefined') { + if (typeof newline !== 'undefined') { + tmp = getInlineContainer(); + } else { + tmp = getInlineContainer('old'); + } + tmp.children('td:first').html($v); + } else { + tmp = getInlineContainer('new'); + tmp.children('td:last').html($v); + } + elements[key]['element'].closest('.not-diff').after(tmp); + } + } + function renderDiffs(){ var i = 0, diffs = $('.diffText'); function render(){ if(diffs[i]){ - renderOneDiff($(diffs[i]), viewType); + var $table = renderOneDiff($(diffs[i]), viewType); + @if(hasWritePermission) { + renderReplyComment($table); + } i++; setTimeout(render); } diff --git a/src/main/twirl/gitbucket/core/issues/commentlist.scala.html b/src/main/twirl/gitbucket/core/issues/commentlist.scala.html index 976969d..0211a2d 100644 --- a/src/main/twirl/gitbucket/core/issues/commentlist.scala.html +++ b/src/main/twirl/gitbucket/core/issues/commentlist.scala.html @@ -201,7 +201,6 @@ $.post('@helpers.url(repository)/issue_comments/delete/' + id, function(data){ if(data > 0) { - $('#comment-' + id).prev('div.issue-avatar-image').remove(); $('#comment-' + id).remove(); } }); @@ -230,7 +229,6 @@ function(data){ if(data > 0) { $('.commit-comment-' + id).closest('.not-diff').remove(); - $('.commit-comment-' + id).closest('.inline-comment').remove(); } }); } diff --git a/src/main/twirl/gitbucket/core/repo/commentform.scala.html b/src/main/twirl/gitbucket/core/repo/commentform.scala.html index 1908c00..1e0b20c 100644 --- a/src/main/twirl/gitbucket/core/repo/commentform.scala.html +++ b/src/main/twirl/gitbucket/core/repo/commentform.scala.html @@ -44,7 +44,7 @@