import React from 'dom-chef'; import select from 'select-dom'; import onetime from 'onetime'; 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 = ''; const repoName = select('.pagehead h1 strong, [itemprop="name"]')!; repoName.classList.remove('mr-2'); repoName.after( /, {bufferField} ); bufferField.focus(); for (const element of select.all('.pagehead-actions, .rgh-ci-link, .octotree-bookmark-btn')) { element.remove(); } } function pjaxCompleteHandler(): void { const fileFinderInput = select('#tree-finder-field'); if (fileFinderInput) { const bufferField = getBufferField(); fileFinderInput.value = bufferField.value; fileFinderInput.selectionStart = bufferField.selectionStart; fileFinderInput.selectionEnd = bufferField.selectionEnd; fileFinderInput.dispatchEvent(new Event('input')); // Trigger search } } function init(): void { window.addEventListener('pjax:start', pjaxStartHandler); window.addEventListener('pjax:complete', pjaxCompleteHandler); } void features.add(__filebasename, { include: [ pageDetect.isRepo ], awaitDomReady: false, init: onetime(init) });