diff options
author | Yarden Shoham <git@yardenshoham.com> | 2024-03-02 11:29:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-02 17:29:04 +0800 |
commit | 2089b974c8bf670de5c6801fa48c229fd9291a7b (patch) | |
tree | 481c9bd22022fdec7c961e7403c716cba3c3809d /web_src/js/features/repo-home.js | |
parent | a53d268aca87a281aadc2246541f8749eddcebed (diff) | |
download | gitea-2089b974c8bf670de5c6801fa48c229fd9291a7b.tar.gz gitea-2089b974c8bf670de5c6801fa48c229fd9291a7b.zip |
Remove jQuery AJAX from the repo tag edit form (#29526)
- Removed all jQuery AJAX calls and replaced with our fetch wrapper
- Tested the repo tag edit form functionality and it works as before
# Demo using `fetch` instead of jQuery AJAX
![action](https://github.com/go-gitea/gitea/assets/20454870/11126bc4-1666-44ae-8644-a6351da43514)
---------
Signed-off-by: Yarden Shoham <git@yardenshoham.com>
Diffstat (limited to 'web_src/js/features/repo-home.js')
-rw-r--r-- | web_src/js/features/repo-home.js | 59 |
1 files changed, 30 insertions, 29 deletions
diff --git a/web_src/js/features/repo-home.js b/web_src/js/features/repo-home.js index 3603fae2e9..bbba7b103e 100644 --- a/web_src/js/features/repo-home.js +++ b/web_src/js/features/repo-home.js @@ -1,8 +1,9 @@ import $ from 'jquery'; import {stripTags} from '../utils.js'; import {hideElem, showElem} from '../utils/dom.js'; +import {POST} from '../modules/fetch.js'; -const {appSubUrl, csrfToken} = window.config; +const {appSubUrl} = window.config; export function initRepoTopicBar() { const mgrBtn = $('#manage_topic'); @@ -30,50 +31,50 @@ export function initRepoTopicBar() { mgrBtn.focus(); }); - saveBtn.on('click', () => { + saveBtn.on('click', async () => { const topics = $('input[name=topics]').val(); - $.post(saveBtn.attr('data-link'), { - _csrf: csrfToken, - topics - }, (_data, _textStatus, xhr) => { - if (xhr.responseJSON.status === 'ok') { + const data = new FormData(); + data.append('topics', topics); + + const response = await POST(saveBtn.attr('data-link'), {data}); + + if (response.ok) { + const responseData = await response.json(); + if (responseData.status === 'ok') { viewDiv.children('.topic').remove(); if (topics.length) { const topicArray = topics.split(','); topicArray.sort(); - for (let i = 0; i < topicArray.length; i++) { + for (const topic of topicArray) { const link = $('<a class="ui repo-topic large label topic gt-m-0"></a>'); - link.attr('href', `${appSubUrl}/explore/repos?q=${encodeURIComponent(topicArray[i])}&topic=1`); - link.text(topicArray[i]); + link.attr('href', `${appSubUrl}/explore/repos?q=${encodeURIComponent(topic)}&topic=1`); + link.text(topic); link.insertBefore(mgrBtn); // insert all new topics before manage button } } hideElem(editDiv); showElem(viewDiv); } - }).fail((xhr) => { - if (xhr.status === 422) { - if (xhr.responseJSON.invalidTopics.length > 0) { - topicPrompts.formatPrompt = xhr.responseJSON.message; - - const {invalidTopics} = xhr.responseJSON; - const topicLabels = topicDropdown.children('a.ui.label'); - - for (const [index, value] of topics.split(',').entries()) { - for (let i = 0; i < invalidTopics.length; i++) { - if (invalidTopics[i] === value) { - topicLabels.eq(index).removeClass('green').addClass('red'); - } - } + } else if (response.status === 422) { + const responseData = await response.json(); + if (responseData.invalidTopics.length > 0) { + topicPrompts.formatPrompt = responseData.message; + + const {invalidTopics} = responseData; + const topicLabels = topicDropdown.children('a.ui.label'); + for (const [index, value] of topics.split(',').entries()) { + if (invalidTopics.includes(value)) { + topicLabels.eq(index).removeClass('green').addClass('red'); } - } else { - topicPrompts.countPrompt = xhr.responseJSON.message; } + } else { + topicPrompts.countPrompt = responseData.message; } - }).always(() => { - topicForm.form('validate form'); - }); + } + + // Always validate the form + topicForm.form('validate form'); }); topicDropdown.dropdown({ |