Allow task list on commit comment area

This commit is contained in:
Kazuki Shimizu
2018-05-12 21:26:19 +09:00
parent 6d3dec518f
commit 342ad68212
5 changed files with 59 additions and 26 deletions

View File

@@ -705,6 +705,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
enableRefsLink = true,
enableAnchor = true,
enableLineBreaks = true,
enableTaskList = true,
hasWritePermission = true
)
)

View File

@@ -27,7 +27,7 @@
enableWikiLink = false,
enableRefsLink = true,
enableLineBreaks = true,
enableTaskList = false,
enableTaskList = true,
hasWritePermission = hasWritePermission
)
</div>

View File

@@ -344,27 +344,6 @@ $(function(){
return false;
});
var extractMarkdown = function(data){
$('body').append('<div id="tmp"></div>');
$('#tmp').html(data);
var markdown = $('#tmp textarea').val();
$('#tmp').remove();
return markdown;
};
var replaceTaskList = function(issueContentHtml, checkboxes) {
var ss = [],
markdown = extractMarkdown(issueContentHtml),
xs = markdown.split(/- \[[x| ]\]/g);
for (var i=0; i<xs.length; i++) {
ss.push(xs[i]);
if (checkboxes.eq(i).prop('checked')) ss.push('- [x]');
else ss.push('- [ ]');
}
ss.pop();
return ss.join('');
};
$('div[class*=commit-commentContent-]').on('click', ':checkbox', function(ev){
var $commentContent = $(ev.target).parents('div[class*=commit-commentContent-]'),
commentId = $commentContent.attr('class').match(/commit-commentContent-.+/)[0].replace(/commit-commentContent-/, ''),
@@ -376,7 +355,7 @@ $(function(){
type: 'POST',
data: {
issueId : 0,
content : replaceTaskList(responseContent, checkboxes)
content : applyTaskListCheckedStatus(responseContent, checkboxes)
},
success: function(data) {
$('.commit-commentContent-' + commentId).html(data.content);
@@ -396,7 +375,7 @@ $(function(){
type: 'POST',
data: {
title : $('#issueTitle').text(),
content : replaceTaskList(responseContent, checkboxes)
content : applyTaskListCheckedStatus(responseContent, checkboxes)
}
});
}
@@ -414,7 +393,7 @@ $(function(){
type: 'POST',
data: {
issueId : 0,
content : replaceTaskList(responseContent, checkboxes)
content : applyTaskListCheckedStatus(responseContent, checkboxes)
}
});
}

View File

@@ -78,7 +78,28 @@
var $tr = $form.closest('tr.not-diff');
// Apply comment
$tr.removeClass('inline-comment-form').html(tmp).find('.comment-box-container').html(data);
var $addedCommentContent = $tr.removeClass('inline-comment-form').html(tmp).find('.comment-box-container');
$addedCommentContent.html(data);
$addedCommentContent.find('div[class*=commit-commentContent-]').on('click', ':checkbox', function(ev){
var $commentContent = $(ev.target).parents('div[class*=commit-commentContent-]'),
commentId = $commentContent.attr('class').match(/commit-commentContent-.+/)[0].replace(/commit-commentContent-/, ''),
checkboxes = $commentContent.find(':checkbox');
$.get('@helpers.url(repository)/commit_comments/_data/' + commentId, { dataType : 'html' },
function(responseContent){
$.ajax({
url: '@helpers.url(repository)/commit_comments/edit/' + commentId,
type: 'POST',
data: {
issueId : 0,
content : applyTaskListCheckedStatus(responseContent, checkboxes)
},
success: function(data) {
$('.commit-commentContent-' + commentId).html(data.content);
}
});
}
);
});
// Show reply comment form
var replyComment = $tr.prev().find('.reply-comment').closest('.not-diff').show();

View File

@@ -726,3 +726,35 @@ function checkExtraMailAddress(){
$(this).remove();
}
}
/**
* function for extracting markdown from comment area.
* @param commentArea a comment area
* @returns {*|jQuery}
*/
var extractMarkdown = function(commentArea){
$('body').append('<div id="tmp"></div>');
$('#tmp').html(commentArea);
var markdown = $('#tmp textarea').val();
$('#tmp').remove();
return markdown;
};
/**
* function for applying checkboxes status of task list.
* @param commentArea a comment area
* @param checkboxes checkboxes for task list
* @returns {string} a markdown that applied checkbox status
*/
var applyTaskListCheckedStatus = function(commentArea, checkboxes) {
var ss = [],
markdown = extractMarkdown(commentArea),
xs = markdown.split(/- \[[x| ]\]/g);
for (var i=0; i<xs.length; i++) {
ss.push(xs[i]);
if (checkboxes.eq(i).prop('checked')) ss.push('- [x]');
else ss.push('- [ ]');
}
ss.pop();
return ss.join('');
};