Show More
@@ -336,6 +336,7 b' class CommentsModel(BaseModel):' | |||
|
336 | 336 | comment.author = user |
|
337 | 337 | resolved_comment = self.__get_commit_comment( |
|
338 | 338 | validated_kwargs['resolves_comment_id']) |
|
339 | ||
|
339 | 340 | # check if the comment actually belongs to this PR |
|
340 | 341 | if resolved_comment and resolved_comment.pull_request and \ |
|
341 | 342 | resolved_comment.pull_request != pull_request: |
@@ -351,6 +352,10 b' class CommentsModel(BaseModel):' | |||
|
351 | 352 | # comment not bound to this repo, forbid |
|
352 | 353 | resolved_comment = None |
|
353 | 354 | |
|
355 | if resolved_comment and resolved_comment.resolved_by: | |
|
356 | # if this comment is already resolved, don't mark it again! | |
|
357 | resolved_comment = None | |
|
358 | ||
|
354 | 359 | comment.resolved_comment = resolved_comment |
|
355 | 360 | |
|
356 | 361 | pull_request_id = pull_request |
@@ -25,6 +25,7 b' var firefoxAnchorFix = function() {' | |||
|
25 | 25 | } |
|
26 | 26 | }; |
|
27 | 27 | |
|
28 | ||
|
28 | 29 | var linkifyComments = function(comments) { |
|
29 | 30 | var firstCommentId = null; |
|
30 | 31 | if (comments) { |
@@ -36,6 +37,7 b' var linkifyComments = function(comments)' | |||
|
36 | 37 | } |
|
37 | 38 | }; |
|
38 | 39 | |
|
40 | ||
|
39 | 41 | var bindToggleButtons = function() { |
|
40 | 42 | $('.comment-toggle').on('click', function() { |
|
41 | 43 | $(this).parent().nextUntil('tr.line').toggle('inline-comments'); |
@@ -43,7 +45,6 b' var bindToggleButtons = function() {' | |||
|
43 | 45 | }; |
|
44 | 46 | |
|
45 | 47 | |
|
46 | ||
|
47 | 48 | var _submitAjaxPOST = function(url, postData, successHandler, failHandler) { |
|
48 | 49 | failHandler = failHandler || function() {}; |
|
49 | 50 | postData = toQueryString(postData); |
@@ -63,8 +64,6 b' var _submitAjaxPOST = function(url, post' | |||
|
63 | 64 | }; |
|
64 | 65 | |
|
65 | 66 | |
|
66 | ||
|
67 | ||
|
68 | 67 | /* Comment form for main and inline comments */ |
|
69 | 68 | (function(mod) { |
|
70 | 69 | |
@@ -239,8 +238,7 b' var _submitAjaxPOST = function(url, post' | |||
|
239 | 238 | }; |
|
240 | 239 | |
|
241 | 240 | this.markCommentResolved = function(resolvedCommentId){ |
|
242 | $('#comment-label-{0}'.format(resolvedCommentId)).find('.resolved').show(); | |
|
243 | $('#comment-label-{0}'.format(resolvedCommentId)).find('.resolve').hide(); | |
|
241 | Rhodecode.comments.markCommentResolved(resolvedCommentId) | |
|
244 | 242 | }; |
|
245 | 243 | |
|
246 | 244 | this.isAllowedToSubmit = function() { |
@@ -1308,6 +1306,11 b' var CommentsController = function() {' | |||
|
1308 | 1306 | return $(tmpl); |
|
1309 | 1307 | } |
|
1310 | 1308 | |
|
1309 | this.markCommentResolved = function(commentId) { | |
|
1310 | $('#comment-label-{0}'.format(commentId)).find('.resolved').show(); | |
|
1311 | $('#comment-label-{0}'.format(commentId)).find('.resolve').hide(); | |
|
1312 | }; | |
|
1313 | ||
|
1311 | 1314 | this.createComment = function(node, f_path, line_no, resolutionComment) { |
|
1312 | 1315 | self.edit = false; |
|
1313 | 1316 | var $node = $(node); |
@@ -1403,7 +1406,7 b' var CommentsController = function() {' | |||
|
1403 | 1406 | |
|
1404 | 1407 | //mark visually which comment was resolved |
|
1405 | 1408 | if (resolvesCommentId) { |
|
1406 |
|
|
|
1409 | self.markCommentResolved(resolvesCommentId); | |
|
1407 | 1410 | } |
|
1408 | 1411 | |
|
1409 | 1412 | // run global callback on submit |
@@ -1493,9 +1496,144 b' var CommentsController = function() {' | |||
|
1493 | 1496 | return false; |
|
1494 | 1497 | }; |
|
1495 | 1498 | |
|
1499 | this.resolveTodo = function (elem, todoId) { | |
|
1500 | var commentId = todoId; | |
|
1501 | ||
|
1502 | SwalNoAnimation.fire({ | |
|
1503 | title: 'Resolve TODO {0}'.format(todoId), | |
|
1504 | showCancelButton: true, | |
|
1505 | confirmButtonText: _gettext('Yes'), | |
|
1506 | showLoaderOnConfirm: true, | |
|
1507 | ||
|
1508 | allowOutsideClick: function () { | |
|
1509 | !Swal.isLoading() | |
|
1510 | }, | |
|
1511 | preConfirm: function () { | |
|
1512 | var comment = $('#comment-' + commentId); | |
|
1513 | var commentData = comment.data(); | |
|
1514 | ||
|
1515 | var f_path = null | |
|
1516 | var line_no = null | |
|
1517 | if (commentData.commentInline) { | |
|
1518 | f_path = commentData.commentFPath; | |
|
1519 | line_no = commentData.commentLineNo; | |
|
1520 | } | |
|
1521 | ||
|
1522 | var renderer = templateContext.visual.default_renderer; | |
|
1523 | var commentBoxUrl = '{1}#comment-{0}'.format(commentId); | |
|
1524 | ||
|
1525 | // Pull request case | |
|
1526 | if (templateContext.pull_request_data.pull_request_id !== null) { | |
|
1527 | var commentUrl = pyroutes.url('pullrequest_comment_create', | |
|
1528 | { | |
|
1529 | 'repo_name': templateContext.repo_name, | |
|
1530 | 'pull_request_id': templateContext.pull_request_data.pull_request_id, | |
|
1531 | 'comment_id': commentId | |
|
1532 | }); | |
|
1533 | } else { | |
|
1534 | var commentUrl = pyroutes.url('repo_commit_comment_create', | |
|
1535 | { | |
|
1536 | 'repo_name': templateContext.repo_name, | |
|
1537 | 'commit_id': templateContext.commit_data.commit_id, | |
|
1538 | 'comment_id': commentId | |
|
1539 | }); | |
|
1540 | } | |
|
1541 | ||
|
1542 | if (renderer === 'rst') { | |
|
1543 | commentBoxUrl = '`#{0} <{1}#comment-{0}>`_'.format(commentId, commentUrl); | |
|
1544 | } else if (renderer === 'markdown') { | |
|
1545 | commentBoxUrl = '[#{0}]({1}#comment-{0})'.format(commentId, commentUrl); | |
|
1546 | } | |
|
1547 | var resolveText = _gettext('TODO from comment {0} was fixed.').format(commentBoxUrl); | |
|
1548 | ||
|
1549 | var postData = { | |
|
1550 | text: resolveText, | |
|
1551 | comment_type: 'note', | |
|
1552 | draft: false, | |
|
1553 | csrf_token: CSRF_TOKEN, | |
|
1554 | resolves_comment_id: commentId | |
|
1555 | } | |
|
1556 | if (commentData.commentInline) { | |
|
1557 | postData['f_path'] = f_path; | |
|
1558 | postData['line'] = line_no; | |
|
1559 | } | |
|
1560 | ||
|
1561 | return new Promise(function (resolve, reject) { | |
|
1562 | $.ajax({ | |
|
1563 | type: 'POST', | |
|
1564 | data: postData, | |
|
1565 | url: commentUrl, | |
|
1566 | headers: {'X-PARTIAL-XHR': true} | |
|
1567 | }) | |
|
1568 | .done(function (data) { | |
|
1569 | resolve(data); | |
|
1570 | }) | |
|
1571 | .fail(function (jqXHR, textStatus, errorThrown) { | |
|
1572 | var prefix = "Error while resolving TODO.\n" | |
|
1573 | var message = formatErrorMessage(jqXHR, textStatus, errorThrown, prefix); | |
|
1574 | ajaxErrorSwal(message); | |
|
1575 | }); | |
|
1576 | }) | |
|
1577 | } | |
|
1578 | ||
|
1579 | }) | |
|
1580 | .then(function (result) { | |
|
1581 | var success = function (json_data) { | |
|
1582 | resolvesCommentId = commentId; | |
|
1583 | var commentResolved = json_data[Object.keys(json_data)[0]] | |
|
1584 | ||
|
1585 | try { | |
|
1586 | ||
|
1587 | if (commentResolved.f_path) { | |
|
1588 | // inject newly created comments, json_data is {<comment_id>: {}} | |
|
1589 | self.attachInlineComment(json_data) | |
|
1590 | } else { | |
|
1591 | self.attachGeneralComment(json_data) | |
|
1592 | } | |
|
1593 | ||
|
1594 | //mark visually which comment was resolved | |
|
1595 | if (resolvesCommentId) { | |
|
1596 | self.markCommentResolved(resolvesCommentId); | |
|
1597 | } | |
|
1598 | ||
|
1599 | // run global callback on submit | |
|
1600 | if (window.commentFormGlobalSubmitSuccessCallback !== undefined) { | |
|
1601 | commentFormGlobalSubmitSuccessCallback({ | |
|
1602 | draft: false, | |
|
1603 | comment_id: commentId | |
|
1604 | }); | |
|
1605 | } | |
|
1606 | ||
|
1607 | } catch (e) { | |
|
1608 | console.error(e); | |
|
1609 | } | |
|
1610 | ||
|
1611 | if (window.updateSticky !== undefined) { | |
|
1612 | // potentially our comments change the active window size, so we | |
|
1613 | // notify sticky elements | |
|
1614 | updateSticky() | |
|
1615 | } | |
|
1616 | ||
|
1617 | if (window.refreshAllComments !== undefined) { | |
|
1618 | // if we have this handler, run it, and refresh all comments boxes | |
|
1619 | refreshAllComments() | |
|
1620 | } | |
|
1621 | // re trigger the linkification of next/prev navigation | |
|
1622 | linkifyComments($('.inline-comment-injected')); | |
|
1623 | timeagoActivate(); | |
|
1624 | tooltipActivate(); | |
|
1625 | }; | |
|
1626 | ||
|
1627 | if (result.value) { | |
|
1628 | $(elem).remove(); | |
|
1629 | success(result.value) | |
|
1630 | } | |
|
1631 | }) | |
|
1632 | }; | |
|
1633 | ||
|
1496 | 1634 | }; |
|
1497 | 1635 | |
|
1498 | 1636 | window.commentHelp = function(renderer) { |
|
1499 | 1637 | var funcData = {'renderer': renderer} |
|
1500 | 1638 | return renderTemplate('commentHelpHovercard', funcData) |
|
1501 | } No newline at end of file | |
|
1639 | } |
@@ -236,6 +236,14 b' if (show_disabled) {' | |||
|
236 | 236 | Created: |
|
237 | 237 | <time class="timeago" title="<%= created_on %>" datetime="<%= datetime %>"><%= $.timeago(datetime) %></time> |
|
238 | 238 | |
|
239 | <% if (is_todo) { %> | |
|
240 | <div style="text-align: center; padding-top: 5px"> | |
|
241 | <a class="btn btn-sm" href="#resolveTodo<%- comment_id -%>" onclick="Rhodecode.comments.resolveTodo(this, '<%- comment_id -%>'); return false"> | |
|
242 | <strong>Resolve TODO</strong> | |
|
243 | </a> | |
|
244 | </div> | |
|
245 | <% } %> | |
|
246 | ||
|
239 | 247 | </div> |
|
240 | 248 | |
|
241 | 249 | </script> |
General Comments 0
You need to be logged in to leave comments.
Login now