diff --git a/eslint.config.mjs b/eslint.config.mjs index 17f461a8f4..f635a8b504 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -318,8 +318,9 @@ export default tseslint.config( 'no-jquery/no-data': [0], 'no-jquery/no-deferred': [2], 'no-jquery/no-delegate': [2], + 'no-jquery/no-done-fail': [2], 'no-jquery/no-each-collection': [0], - 'no-jquery/no-each-util': [0], + 'no-jquery/no-each-util': [2], 'no-jquery/no-each': [0], 'no-jquery/no-error-shorthand': [2], 'no-jquery/no-error': [2], @@ -331,6 +332,7 @@ export default tseslint.config( 'no-jquery/no-find-collection': [0], 'no-jquery/no-find-util': [2], 'no-jquery/no-find': [0], + 'no-jquery/no-fx': [2], 'no-jquery/no-fx-interval': [2], 'no-jquery/no-global-eval': [2], 'no-jquery/no-global-selector': [0], @@ -350,7 +352,7 @@ export default tseslint.config( 'no-jquery/no-live': [2], 'no-jquery/no-load-shorthand': [2], 'no-jquery/no-load': [2], - 'no-jquery/no-map-collection': [0], + 'no-jquery/no-map-collection': [2], 'no-jquery/no-map-util': [2], 'no-jquery/no-map': [2], 'no-jquery/no-merge': [2], @@ -374,12 +376,12 @@ export default tseslint.config( 'no-jquery/no-selector-prop': [2], 'no-jquery/no-serialize': [2], 'no-jquery/no-size': [2], - 'no-jquery/no-sizzle': [0], + 'no-jquery/no-sizzle': [2], 'no-jquery/no-slide': [2], 'no-jquery/no-sub': [2], 'no-jquery/no-support': [2], 'no-jquery/no-text': [0], - 'no-jquery/no-trigger': [0], + 'no-jquery/no-trigger': [2], 'no-jquery/no-trim': [2], 'no-jquery/no-type': [2], 'no-jquery/no-unique': [2], diff --git a/web_src/js/components/RepoBranchTagSelector.vue b/web_src/js/components/RepoBranchTagSelector.vue index cd86499ddc..12ff564aa7 100644 --- a/web_src/js/components/RepoBranchTagSelector.vue +++ b/web_src/js/components/RepoBranchTagSelector.vue @@ -98,14 +98,14 @@ const sfc = { $(`#${this.branchForm} input[name="refType"]`).val('branch'); } if (this.submitForm) { - $(`#${this.branchForm}`).trigger('submit'); + document.getElementById(this.branchForm).requestSubmit(); } this.menuVisible = false; } }, createNewBranch() { if (!this.showCreateNewBranch) return; - $(this.$refs.newBranchForm).trigger('submit'); + this.$refs.newBranchForm.requestSubmit(); }, focusSearchField() { nextTick(() => { diff --git a/web_src/js/features/admin/common.js b/web_src/js/features/admin/common.js index 9934c3dd17..b46f4f8a74 100644 --- a/web_src/js/features/admin/common.js +++ b/web_src/js/features/admin/common.js @@ -175,7 +175,7 @@ export function initAdminCommon() { onUsePagedSearchChange(); } }); - $('#auth_type').trigger('change'); + document.getElementById('auth_type').dispatchEvent(new Event('change')); document.getElementById('security_protocol')?.addEventListener('change', onSecurityProtocolChange); document.getElementById('use_paged_search')?.addEventListener('change', onUsePagedSearchChange); document.getElementById('oauth2_provider')?.addEventListener('change', () => onOAuth2Change(true)); @@ -200,10 +200,12 @@ export function initAdminCommon() { } if (document.querySelector('.admin.authentication')) { - $('#auth_name').on('input', function () { + const authNameEl = document.getElementById('auth_name'); + authNameEl.addEventListener('input', (el) => { // appSubUrl is either empty or is a path that starts with `/` and doesn't have a trailing slash. - document.getElementById('oauth2-callback-url').textContent = `${window.location.origin}${appSubUrl}/user/oauth2/${encodeURIComponent(this.value)}/callback`; - }).trigger('input'); + document.getElementById('oauth2-callback-url').textContent = `${window.location.origin}${appSubUrl}/user/oauth2/${encodeURIComponent(el.target.value)}/callback`; + }); + authNameEl.dispatchEvent(new Event('input')); } // Notice diff --git a/web_src/js/features/common-global.js b/web_src/js/features/common-global.js index 7848a14b66..7d553f9692 100644 --- a/web_src/js/features/common-global.js +++ b/web_src/js/features/common-global.js @@ -57,7 +57,7 @@ export function initGlobalEnterQuickSubmit() { export function initGlobalButtonClickOnEnter() { $(document).on('keypress', 'div.ui.button,span.ui.button', (e) => { if (e.code === ' ' || e.code === 'Enter') { - $(e.target).trigger('click'); + e.target.click(); e.preventDefault(); } }); @@ -314,7 +314,7 @@ export function initGlobalLinkActions() { closable: false, onApprove: async () => { if ($this.data('type') === 'form') { - $($this.data('form')).trigger('submit'); + document.querySelector($this.data('form')).requestSubmit(); return; } if ($this[0].getAttribute('hx-confirm')) { diff --git a/web_src/js/features/comp/LabelEdit.js b/web_src/js/features/comp/LabelEdit.js index 2cc75cc6b0..a97c7fe34c 100644 --- a/web_src/js/features/comp/LabelEdit.js +++ b/web_src/js/features/comp/LabelEdit.js @@ -38,7 +38,7 @@ export function initCompLabelEdit(selector) { form.reportValidity(); return false; } - $('.new-label.form').trigger('submit'); + document.querySelector('.new-label.form').requestSubmit(); }, }).modal('show'); return false; @@ -75,7 +75,7 @@ export function initCompLabelEdit(selector) { form.reportValidity(); return false; } - $('.edit-label.form').trigger('submit'); + document.querySelector('.edit-label.form').requestSubmit(); }, }).modal('show'); return false; diff --git a/web_src/js/features/comp/ReactionSelector.js b/web_src/js/features/comp/ReactionSelector.js index fd4601fb91..357a33f469 100644 --- a/web_src/js/features/comp/ReactionSelector.js +++ b/web_src/js/features/comp/ReactionSelector.js @@ -23,7 +23,7 @@ export function initCompReactionSelector($parent) { $react.remove(); } if (!data.empty) { - const $attachments = $content.find('.segment.bottom:first'); + const $attachments = $content.find('.segment.bottom').first(); $react = $(data.html); if ($attachments.length > 0) { $react.insertBefore($attachments); diff --git a/web_src/js/features/org-team.js b/web_src/js/features/org-team.js index 9b059b3a46..fe816da865 100644 --- a/web_src/js/features/org-team.js +++ b/web_src/js/features/org-team.js @@ -10,13 +10,12 @@ export function initOrgTeamSearchRepoBox() { url: `${appSubUrl}/repo/search?q={query}&uid=${$searchRepoBox.data('uid')}`, onResponse(response) { const items = []; - $.each(response.data, (_i, item) => { + for (const item of response.data) { items.push({ title: item.repository.full_name.split('/')[1], description: item.repository.full_name, }); - }); - + } return {results: items}; }, }, diff --git a/web_src/js/features/repo-code.js b/web_src/js/features/repo-code.js index 794cc38010..2ff9e611ae 100644 --- a/web_src/js/features/repo-code.js +++ b/web_src/js/features/repo-code.js @@ -184,7 +184,8 @@ export function initRepoCodeView() { $('html, body').scrollTop($first.offset().top - 200); } } - }).trigger('hashchange'); + }); + window.dispatchEvent(new Event('hashchange')); } $(document).on('click', '.fold-file', ({currentTarget}) => { invertFileFolding(currentTarget.closest('.file-content'), currentTarget); diff --git a/web_src/js/features/repo-common.js b/web_src/js/features/repo-common.js index 88aa93d850..02a0499f95 100644 --- a/web_src/js/features/repo-common.js +++ b/web_src/js/features/repo-common.js @@ -33,25 +33,25 @@ export function initRepoArchiveLinks() { } export function initRepoCloneLink() { - const $repoCloneSsh = $('#repo-clone-ssh'); - const $repoCloneHttps = $('#repo-clone-https'); - const $inputLink = $('#repo-clone-url'); + const repoCloneSSH = document.getElementById('repo-clone-ssh'); + const repoCloneHTTPS = document.getElementById('repo-clone-https'); + const inputLink = document.getElementById('repo-clone-url'); - if ((!$repoCloneSsh.length && !$repoCloneHttps.length) || !$inputLink.length) { + if ((!repoCloneSSH && !repoCloneHTTPS) || !inputLink) { return; } - $repoCloneSsh.on('click', () => { + repoCloneSSH.addEventListener('click', () => { localStorage.setItem('repo-clone-protocol', 'ssh'); window.updateCloneStates(); }); - $repoCloneHttps.on('click', () => { + repoCloneHTTPS.addEventListener('click', () => { localStorage.setItem('repo-clone-protocol', 'https'); window.updateCloneStates(); }); - $inputLink.on('focus', () => { - $inputLink.trigger('select'); + inputLink.addEventListener('focus', () => { + inputLink.select(); }); } diff --git a/web_src/js/features/repo-editor.js b/web_src/js/features/repo-editor.js index 5b59b66f80..d3f5f2f8a9 100644 --- a/web_src/js/features/repo-editor.js +++ b/web_src/js/features/repo-editor.js @@ -185,7 +185,7 @@ export function initRepoEditor() { $('#edit-empty-content-modal') .modal({ onApprove() { - $('.edit.form').trigger('submit'); + document.querySelector('.edit.form').requestSubmit(); }, }) .modal('show'); diff --git a/web_src/js/features/repo-issue.js b/web_src/js/features/repo-issue.js index c28bf08442..889687da3e 100644 --- a/web_src/js/features/repo-issue.js +++ b/web_src/js/features/repo-issue.js @@ -37,27 +37,27 @@ export function initRepoIssueTimeTracking() { $('.issue-start-time-modal').modal({ duration: 200, onApprove() { - $('#add_time_manual_form').trigger('submit'); + document.getElementById('add_time_manual_form').requestSubmit(); }, }).modal('show'); $('.issue-start-time-modal input').on('keydown', (e) => { if ((e.keyCode || e.key) === 13) { - $('#add_time_manual_form').trigger('submit'); + document.getElementById('add_time_manual_form').requestSubmit(); } }); }); $(document).on('click', '.issue-start-time, .issue-stop-time', () => { - $('#toggle_stopwatch_form').trigger('submit'); + document.getElementById('toggle_stopwatch_form').requestSubmit(); }); $(document).on('click', '.issue-cancel-time', () => { - $('#cancel_stopwatch_form').trigger('submit'); + document.getElementById('cancel_stopwatch_form').requestSubmit(); }); $(document).on('click', 'button.issue-delete-time', function () { const sel = `.issue-delete-time-modal[data-id="${$(this).data('id')}"]`; $(sel).modal({ duration: 200, onApprove() { - $(`${sel} form`).trigger('submit'); + document.getElementById(`${sel} form`).requestSubmit(); }, }).modal('show'); }); @@ -139,7 +139,7 @@ export function initRepoIssueSidebarList() { const filteredResponse = {success: true, results: []}; const currIssueId = $('#new-dependency-drop-list').data('issue-id'); // Parse the response from the api to work with our dropdown - $.each(response, (_i, issue) => { + for (const [_, issue] of Object.entries(response)) { // Don't list current issue in the dependency list. if (issue.id === currIssueId) { return; @@ -149,7 +149,7 @@ export function initRepoIssueSidebarList() { }