import './file-finder-buffer.css';
import React from 'dom-chef';
import select from 'select-dom';
import onetime from 'onetime';
import {isSafari} from 'webext-detect-page';
import * as pageDetect from 'github-url-detection';
import features from '.';
const getBufferField = onetime((): HTMLInputElement => (
as unknown as HTMLInputElement
));
function pjaxStartHandler(event: CustomEvent): void {
const destinationURL = event.detail?.url;
if (!destinationURL || !pageDetect.isFileFinder(new URL(destinationURL))) {
return;
}
const bufferField = getBufferField();
bufferField.value = '';
select('.pagehead h1 strong, [itemprop="name"]')!.after(
/,
{bufferField},
);
bufferField.focus();
// Hide the header elements instead of removing them so they can be restored #4999
document.documentElement.classList.add('rgh-file-finder-buffer');
}
function pjaxCompleteHandler(): void {
const bufferField = getBufferField();
const fileFinderInput = select('input#tree-finder-field');
if (fileFinderInput) {
fileFinderInput.value = bufferField.value;
fileFinderInput.selectionStart = bufferField.selectionStart;
fileFinderInput.selectionEnd = bufferField.selectionEnd;
fileFinderInput.dispatchEvent(new Event('input')); // Trigger search
}
// Make sure to clean up the repo header #4999
if (document.documentElement.classList.contains('rgh-file-finder-buffer')) {
bufferField.parentElement!.previousElementSibling!.remove();
bufferField.parentElement!.remove();
document.documentElement.classList.remove('rgh-file-finder-buffer');
}
}
function init(): void {
window.addEventListener('turbo:visit', pjaxStartHandler);
window.addEventListener('turbo:render', pjaxCompleteHandler);
}
void features.add(import.meta.url, {
include: [
pageDetect.isRepo,
],
exclude: [
isSafari,
],
awaitDomReady: false,
init,
});