diff options
author | 赵智超 <1012112796@qq.com> | 2020-09-03 00:55:13 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-02 12:55:13 -0400 |
commit | 3981f1b1278f558721e4b40b6fdbba9365b9cb1b (patch) | |
tree | 088b17fc7caa1fa99218bc0fc21a220a02cd8faa /web_src | |
parent | ea775e67fbfb42d70e207b5960e373e9def78648 (diff) | |
download | gitea-3981f1b1278f558721e4b40b6fdbba9365b9cb1b.tar.gz gitea-3981f1b1278f558721e4b40b6fdbba9365b9cb1b.zip |
Remove duplicate logic in initListSubmits (#12660)
* Remove duplicate logic in initListSubmits
Using the same logic to handle Choosing reviewers and assignees as
choosing label. It's the first step of #10926.
Signed-off-by: a1012112796 <1012112796@qq.com>
* fix choose block
* fix nit
* try fix bug
* simple code
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Diffstat (limited to 'web_src')
-rw-r--r-- | web_src/js/index.js | 92 |
1 files changed, 36 insertions, 56 deletions
diff --git a/web_src/js/index.js b/web_src/js/index.js index a8965a437f..1c23d0f735 100644 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -157,7 +157,7 @@ function initLabelEdit() { }); } -function updateIssuesMeta(url, action, issueIds, elementId, isAdd) { +function updateIssuesMeta(url, action, issueIds, elementId) { return new Promise(((resolve) => { $.ajax({ type: 'POST', @@ -167,7 +167,6 @@ function updateIssuesMeta(url, action, issueIds, elementId, isAdd) { action, issue_ids: issueIds, id: elementId, - is_add: isAdd }, success: resolve }); @@ -373,21 +372,20 @@ function initCommentForm() { const $list = $(`.ui.${outerSelector}.list`); const $noSelect = $list.find('.no-select'); const $listMenu = $(`.${selector} .menu`); - let hasLabelUpdateAction = $listMenu.data('action') === 'update'; - const labels = {}; + let hasUpdateAction = $listMenu.data('action') === 'update'; + const items = {}; $(`.${selector}`).dropdown('setting', 'onHide', () => { - hasLabelUpdateAction = $listMenu.data('action') === 'update'; // Update the var - if (hasLabelUpdateAction) { + hasUpdateAction = $listMenu.data('action') === 'update'; // Update the var + if (hasUpdateAction) { const promises = []; - Object.keys(labels).forEach((elementId) => { - const label = labels[elementId]; + Object.keys(items).forEach((elementId) => { + const item = items[elementId]; const promise = updateIssuesMeta( - label['update-url'], - label.action, - label['issue-id'], + item['update-url'], + item.action, + item['issue-id'], elementId, - label['is-checked'] ); promises.push(promise); }); @@ -395,67 +393,49 @@ function initCommentForm() { } }); - $listMenu.find('.item:not(.no-select)').on('click', function () { - // we don't need the action attribute when updating assignees - if (selector === 'select-assignees-modify' || selector === 'select-reviewers-modify') { - // UI magic. We need to do this here, otherwise it would destroy the functionality of - // adding/removing labels - - if ($(this).data('can-change') === 'block') { - return false; - } - - if ($(this).hasClass('checked')) { - $(this).removeClass('checked'); - $(this).find('.octicon-check').addClass('invisible'); - $(this).data('is-checked', 'remove'); - } else { - $(this).addClass('checked'); - $(this).find('.octicon-check').removeClass('invisible'); - $(this).data('is-checked', 'add'); - } - - updateIssuesMeta( - $listMenu.data('update-url'), - '', - $listMenu.data('issue-id'), - $(this).data('id'), - $(this).data('is-checked') - ); - $listMenu.data('action', 'update'); // Update to reload the page when we updated items + $listMenu.find('.item:not(.no-select)').on('click', function (e) { + e.preventDefault(); + if ($(this).hasClass('ban-change')) { return false; } + hasUpdateAction = $listMenu.data('action') === 'update'; // Update the var if ($(this).hasClass('checked')) { $(this).removeClass('checked'); $(this).find('.octicon-check').addClass('invisible'); - if (hasLabelUpdateAction) { - if (!($(this).data('id') in labels)) { - labels[$(this).data('id')] = { + if (hasUpdateAction) { + if (!($(this).data('id') in items)) { + items[$(this).data('id')] = { 'update-url': $listMenu.data('update-url'), action: 'detach', 'issue-id': $listMenu.data('issue-id'), }; } else { - delete labels[$(this).data('id')]; + delete items[$(this).data('id')]; } } } else { $(this).addClass('checked'); $(this).find('.octicon-check').removeClass('invisible'); - if (hasLabelUpdateAction) { - if (!($(this).data('id') in labels)) { - labels[$(this).data('id')] = { + if (hasUpdateAction) { + if (!($(this).data('id') in items)) { + items[$(this).data('id')] = { 'update-url': $listMenu.data('update-url'), action: 'attach', 'issue-id': $listMenu.data('issue-id'), }; } else { - delete labels[$(this).data('id')]; + delete items[$(this).data('id')]; } } } + // TODO: Which thing should be done for choosing review requests + // to make choosed items be shown on time here? + if (selector === 'select-reviewers-modify' || selector === 'select-assignees-modify') { + return false; + } + const listIds = []; $(this).parent().find('.item').each(function () { if ($(this).hasClass('checked')) { @@ -473,23 +453,26 @@ function initCommentForm() { $($(this).parent().data('id')).val(listIds.join(',')); return false; }); - $listMenu.find('.no-select.item').on('click', function () { - if (hasLabelUpdateAction || selector === 'select-assignees-modify') { + $listMenu.find('.no-select.item').on('click', function (e) { + e.preventDefault(); + if (hasUpdateAction) { updateIssuesMeta( $listMenu.data('update-url'), 'clear', $listMenu.data('issue-id'), '', - '' ).then(reload); } $(this).parent().find('.item').each(function () { $(this).removeClass('checked'); $(this).find('.octicon').addClass('invisible'); - $(this).data('is-checked', 'remove'); }); + if (selector === 'select-reviewers-modify' || selector === 'select-assignees-modify') { + return false; + } + $list.find('.item').each(function () { $(this).addClass('hide'); }); @@ -521,7 +504,6 @@ function initCommentForm() { '', $menu.data('issue-id'), $(this).data('id'), - $(this).data('is-checked') ).then(reload); } switch (input_id) { @@ -552,7 +534,6 @@ function initCommentForm() { '', $menu.data('issue-id'), $(this).data('id'), - $(this).data('is-checked') ).then(reload); } @@ -672,10 +653,9 @@ function initIssueComments() { event.preventDefault(); updateIssuesMeta( url, - '', + isChecked === 'true' ? 'attach' : 'detach', issueId, id, - isChecked ).then(reload); }); |