This plugin has a few useful rules. The only thing I dislike about it is that it pulls in a rather big number of dependencies for react-related rules we don't use, but it can't really be avoided. Rule docs: https://github.com/github/eslint-plugin-github?tab=readme-ov-file#rulestags/v1.22.0-rc0
@@ -12,6 +12,7 @@ plugins: | |||
- "@eslint-community/eslint-plugin-eslint-comments" | |||
- "@stylistic/eslint-plugin-js" | |||
- eslint-plugin-array-func | |||
- eslint-plugin-github | |||
- eslint-plugin-i | |||
- eslint-plugin-jquery | |||
- eslint-plugin-no-jquery | |||
@@ -209,6 +210,29 @@ rules: | |||
func-names: [0] | |||
func-style: [0] | |||
getter-return: [2] | |||
github/a11y-aria-label-is-well-formatted: [0] | |||
github/a11y-no-title-attribute: [0] | |||
github/a11y-no-visually-hidden-interactive-element: [0] | |||
github/a11y-role-supports-aria-props: [0] | |||
github/a11y-svg-has-accessible-name: [0] | |||
github/array-foreach: [0] | |||
github/async-currenttarget: [2] | |||
github/async-preventdefault: [2] | |||
github/authenticity-token: [0] | |||
github/get-attribute: [0] | |||
github/js-class-name: [0] | |||
github/no-blur: [0] | |||
github/no-d-none: [0] | |||
github/no-dataset: [2] | |||
github/no-dynamic-script-tag: [2] | |||
github/no-implicit-buggy-globals: [2] | |||
github/no-inner-html: [0] | |||
github/no-innerText: [2] | |||
github/no-then: [2] | |||
github/no-useless-passive: [2] | |||
github/prefer-observers: [2] | |||
github/require-passive-events: [2] | |||
github/unescaped-html-literal: [0] | |||
grouped-accessor-pairs: [2] | |||
guard-for-in: [0] | |||
id-blacklist: [0] |
@@ -79,4 +79,8 @@ async function main() { | |||
]); | |||
} | |||
main().then(exit).catch(exit); | |||
try { | |||
exit(await main()); | |||
} catch (err) { | |||
exit(err); | |||
} |
@@ -63,4 +63,8 @@ async function main() { | |||
]); | |||
} | |||
main().then(exit).catch(exit); | |||
try { | |||
exit(await main()); | |||
} catch (err) { | |||
exit(err); | |||
} |
@@ -67,6 +67,7 @@ | |||
"@vitejs/plugin-vue": "5.0.4", | |||
"eslint": "8.56.0", | |||
"eslint-plugin-array-func": "4.0.0", | |||
"eslint-plugin-github": "4.10.1", | |||
"eslint-plugin-i": "2.29.1", | |||
"eslint-plugin-jquery": "1.5.1", | |||
"eslint-plugin-no-jquery": "2.7.0", |
@@ -194,7 +194,7 @@ export function initRepoCodeView() { | |||
const blob = await $.get(`${url}?${query}&anchor=${anchor}`); | |||
currentTarget.closest('tr').outerHTML = blob; | |||
}); | |||
$(document).on('click', '.copy-line-permalink', async (e) => { | |||
await clippie(toAbsoluteUrl(e.currentTarget.getAttribute('data-url'))); | |||
$(document).on('click', '.copy-line-permalink', async ({currentTarget}) => { | |||
await clippie(toAbsoluteUrl(currentTarget.getAttribute('data-url'))); | |||
}); | |||
} |
@@ -69,16 +69,12 @@ function initRepoIssueListCheckboxes() { | |||
} | |||
} | |||
updateIssuesMeta( | |||
url, | |||
action, | |||
issueIDs, | |||
elementId, | |||
).then(() => { | |||
try { | |||
await updateIssuesMeta(url, action, issueIDs, elementId); | |||
window.location.reload(); | |||
}).catch((reason) => { | |||
showErrorToast(reason.responseJSON.error); | |||
}); | |||
} catch (err) { | |||
showErrorToast(err.responseJSON?.error ?? err.message); | |||
} | |||
}); | |||
} | |||
@@ -344,19 +344,15 @@ export async function updateIssuesMeta(url, action, issueIds, elementId) { | |||
export function initRepoIssueComments() { | |||
if ($('.repository.view.issue .timeline').length === 0) return; | |||
$('.re-request-review').on('click', function (e) { | |||
$('.re-request-review').on('click', async function (e) { | |||
e.preventDefault(); | |||
const url = $(this).data('update-url'); | |||
const issueId = $(this).data('issue-id'); | |||
const id = $(this).data('id'); | |||
const isChecked = $(this).hasClass('checked'); | |||
updateIssuesMeta( | |||
url, | |||
isChecked ? 'detach' : 'attach', | |||
issueId, | |||
id, | |||
).then(() => window.location.reload()); | |||
await updateIssuesMeta(url, isChecked ? 'detach' : 'attach', issueId, id); | |||
window.location.reload(); | |||
}); | |||
$(document).on('click', (event) => { |
@@ -205,12 +205,15 @@ export function initRepoCommentForm() { | |||
$listMenu.find('.no-select.item').on('click', function (e) { | |||
e.preventDefault(); | |||
if (hasUpdateAction) { | |||
updateIssuesMeta( | |||
$listMenu.data('update-url'), | |||
'clear', | |||
$listMenu.data('issue-id'), | |||
'', | |||
).then(reloadConfirmDraftComment); | |||
(async () => { | |||
await updateIssuesMeta( | |||
$listMenu.data('update-url'), | |||
'clear', | |||
$listMenu.data('issue-id'), | |||
'', | |||
); | |||
reloadConfirmDraftComment(); | |||
})(); | |||
} | |||
$(this).parent().find('.item').each(function () { | |||
@@ -248,12 +251,15 @@ export function initRepoCommentForm() { | |||
$(this).addClass('selected active'); | |||
if (hasUpdateAction) { | |||
updateIssuesMeta( | |||
$menu.data('update-url'), | |||
'', | |||
$menu.data('issue-id'), | |||
$(this).data('id'), | |||
).then(reloadConfirmDraftComment); | |||
(async () => { | |||
await updateIssuesMeta( | |||
$menu.data('update-url'), | |||
'', | |||
$menu.data('issue-id'), | |||
$(this).data('id'), | |||
); | |||
reloadConfirmDraftComment(); | |||
})(); | |||
} | |||
let icon = ''; | |||
@@ -281,12 +287,15 @@ export function initRepoCommentForm() { | |||
}); | |||
if (hasUpdateAction) { | |||
updateIssuesMeta( | |||
$menu.data('update-url'), | |||
'', | |||
$menu.data('issue-id'), | |||
$(this).data('id'), | |||
).then(reloadConfirmDraftComment); | |||
(async () => { | |||
await updateIssuesMeta( | |||
$menu.data('update-url'), | |||
'', | |||
$menu.data('issue-id'), | |||
$(this).data('id'), | |||
); | |||
reloadConfirmDraftComment(); | |||
})(); | |||
} | |||
$list.find('.selected').html(''); |