gitea/web_src/js/features/repo-common.js
Yarden Shoham ed3892d843
Remove jQuery AJAX from the archive download links (#29380)
- Removed all jQuery AJAX calls and replaced with our fetch wrapper
- Tested the repo archive download links dropdown functionality and it
works as before

# Demo using `fetch` instead of jQuery AJAX

![action](https://github.com/go-gitea/gitea/assets/20454870/db791249-bca1-4d22-ac5e-623f68023e15)

---------

Signed-off-by: Yarden Shoham <git@yardenshoham.com>
2024-02-25 16:53:44 +00:00

90 lines
2.5 KiB
JavaScript

import $ from 'jquery';
import {hideElem, showElem} from '../utils/dom.js';
import {POST} from '../modules/fetch.js';
async function getArchive($target, url, first) {
try {
const response = await POST(url);
if (response.status === 200) {
const data = await response.json();
if (!data) {
// XXX Shouldn't happen?
$target.closest('.dropdown').children('i').removeClass('loading');
return;
}
if (!data.complete) {
$target.closest('.dropdown').children('i').addClass('loading');
// Wait for only three quarters of a second initially, in case it's
// quickly archived.
setTimeout(() => {
getArchive($target, url, false);
}, first ? 750 : 2000);
} else {
// We don't need to continue checking.
$target.closest('.dropdown').children('i').removeClass('loading');
window.location.href = url;
}
}
} catch {
$target.closest('.dropdown').children('i').removeClass('loading');
}
}
export function initRepoArchiveLinks() {
$('.archive-link').on('click', function (event) {
event.preventDefault();
const url = $(this).attr('href');
if (!url) return;
getArchive($(event.target), url, true);
});
}
export function initRepoCloneLink() {
const $repoCloneSsh = $('#repo-clone-ssh');
const $repoCloneHttps = $('#repo-clone-https');
const $inputLink = $('#repo-clone-url');
if ((!$repoCloneSsh.length && !$repoCloneHttps.length) || !$inputLink.length) {
return;
}
$repoCloneSsh.on('click', () => {
localStorage.setItem('repo-clone-protocol', 'ssh');
window.updateCloneStates();
});
$repoCloneHttps.on('click', () => {
localStorage.setItem('repo-clone-protocol', 'https');
window.updateCloneStates();
});
$inputLink.on('focus', () => {
$inputLink.trigger('select');
});
}
export function initRepoCommonBranchOrTagDropdown(selector) {
$(selector).each(function () {
const $dropdown = $(this);
$dropdown.find('.reference.column').on('click', function () {
hideElem($dropdown.find('.scrolling.reference-list-menu'));
showElem($($(this).data('target')));
return false;
});
});
}
export function initRepoCommonFilterSearchDropdown(selector) {
const $dropdown = $(selector);
$dropdown.dropdown({
fullTextSearch: 'exact',
selectOnKeydown: false,
onChange(_text, _value, $choice) {
if ($choice.attr('data-url')) {
window.location.href = $choice.attr('data-url');
}
},
message: {noResults: $dropdown.attr('data-no-results')},
});
}