Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove jQuery from the repo commit functions #29230

Merged
merged 13 commits into from
Feb 22, 2024
92 changes: 46 additions & 46 deletions web_src/js/features/repo-commit.js
Original file line number Diff line number Diff line change
@@ -1,70 +1,70 @@
import $ from 'jquery';
import {createTippy} from '../modules/tippy.js';
import {toggleElem} from '../utils/dom.js';

const {csrfToken} = window.config;
import {parseDom} from '../utils.js';
import {POST} from '../modules/fetch.js';

export function initRepoEllipsisButton() {
$('.js-toggle-commit-body').on('click', function (e) {
e.preventDefault();
const expanded = $(this).attr('aria-expanded') === 'true';
toggleElem($(this).parent().find('.commit-body'));
$(this).attr('aria-expanded', String(!expanded));
});
for (const button of document.querySelectorAll('.js-toggle-commit-body')) {
button.addEventListener('click', function (e) {
e.preventDefault();
const expanded = this.getAttribute('aria-expanded') === 'true';
toggleElem(this.parentElement.querySelector('.commit-body'));
this.setAttribute('aria-expanded', String(!expanded));
});
}
}

export function initRepoCommitLastCommitLoader() {
const notReadyEls = document.querySelectorAll('table#repo-files-table tr.notready');
if (!notReadyEls.length) return;

export async function initRepoCommitLastCommitLoader() {
const entryMap = {};
const entries = [];
for (const el of notReadyEls) {
const entryname = el.getAttribute('data-entryname');
entryMap[entryname] = $(el);
entries.push(entryname);

const entries = Array.from(document.querySelectorAll('table#repo-files-table tr.notready'), (el) => {
entryname = el.getAttribute('data-entryname');
entryMap[entryname] = el;
return entryname;
});

if (entries.length === 0) {
return;
}

const lastCommitLoaderURL = $('table#repo-files-table').data('lastCommitLoaderUrl');
const lastCommitLoaderURL = document.querySelector('table#repo-files-table').getAttribute('data-last-commit-loader-url');
silverwind marked this conversation as resolved.
Show resolved Hide resolved

if (entries.length > 200) {
$.post(lastCommitLoaderURL, {
_csrf: csrfToken,
}, (data) => {
$('table#repo-files-table').replaceWith(data);
});
// For more than 200 entries, replace the entire table
const response = await POST(lastCommitLoaderURL);
const data = await response.text();
document.querySelector('table#repo-files-table').outerHTML = data;
return;
6543 marked this conversation as resolved.
Show resolved Hide resolved
}

$.post(lastCommitLoaderURL, {
_csrf: csrfToken,
'f': entries,
}, (data) => {
$(data).find('tr').each((_, row) => {
if (row.className === 'commit-list') {
$('table#repo-files-table .commit-list').replaceWith(row);
return;
}
// there are other <tr> rows in response (eg: <tr class="has-parent">)
// at the moment only the "data-entryname" rows should be processed
const entryName = $(row).attr('data-entryname');
if (entryName) {
entryMap[entryName].replaceWith(row);
}
});
});
// For fewer entries, update individual rows
const response = await POST(lastCommitLoaderURL, {data: {'f': entries}});
const data = await response.text();
6543 marked this conversation as resolved.
Show resolved Hide resolved
const doc = parseDom(data, 'text/html');
for (const row of doc.querySelectorAll('tr')) {
if (row.className === 'commit-list') {
document.querySelector('table#repo-files-table .commit-list')?.replaceWith(row);
continue;
}
// there are other <tr> rows in response (eg: <tr class="has-parent">)
// at the moment only the "data-entryname" rows should be processed
const entryName = row.getAttribute('data-entryname');
if (entryName) {
entryMap[entryName]?.replaceWith(row);
}
}
}

export function initCommitStatuses() {
$('[data-tippy="commit-statuses"]').each(function () {
const top = $('.repository.file.list').length > 0 || $('.repository.diff').length > 0;
for (const element of document.querySelectorAll('[data-tippy="commit-statuses"]')) {
const top = document.querySelector('.repository.file.list') || document.querySelector('.repository.diff');

createTippy(this, {
content: this.nextElementSibling,
createTippy(element, {
content: element.nextElementSibling,
placement: top ? 'top-start' : 'bottom-start',
interactive: true,
role: 'dialog',
theme: 'box-with-header',
});
});
}
}
Loading