import React from 'dom-chef'; import {$, elementExists} from 'select-dom'; import * as pageDetect from 'github-url-detection'; import {CodeIcon, PlusIcon, SearchIcon} from '@primer/octicons-react'; import observe from '../helpers/selector-observer.js'; import {assertNodeContent, wrap} from '../helpers/dom-utils.js'; import features from '../feature-manager.js'; /** Add tooltip on a wrapper to avoid breaking dropdown functionality */ function addTooltipToSummary(childElement: Element, tooltip: string): void { wrap( childElement.closest('details')!,
, ); } function cleanFilelistActions(searchButton: Element): void { searchButton.classList.add('tooltipped', 'tooltipped-ne'); searchButton.setAttribute('aria-label', 'Go to file'); // Replace "Go to file" with icon searchButton.firstChild!.replaceWith(); // This button doesn't appear on `isSingleFile` const addFileDropdown = searchButton.nextElementSibling!.querySelector('.dropdown-caret'); if (addFileDropdown) { addFileDropdown.parentElement!.classList.replace('d-md-flex', 'd-md-block'); // Replace label with icon assertNodeContent(addFileDropdown.previousSibling, 'Add file') .replaceWith(); addTooltipToSummary(addFileDropdown, 'Add file'); } if (!pageDetect.isRepoRoot()) { return; } const codeDropdownButton = $('get-repo summary')!; addTooltipToSummary(codeDropdownButton, 'Clone, open or download'); const label = $('.Button-label', codeDropdownButton)!; if (!elementExists('.octicon-code', codeDropdownButton)) { // The icon is missing for users without Codespaces https://github.com/refined-github/refined-github/pull/5074#issuecomment-983251719 label.before(); } label.remove(); } function init(signal: AbortSignal): void { // `.btn` selects the desktop version observe('.btn[data-hotkey="t"]', cleanFilelistActions, {signal}); } void features.add(import.meta.url, { include: [ pageDetect.isRepoTree, pageDetect.isSingleFile, ], exclude: [ pageDetect.isRepoFile404, ], init, }); /* Test URLs https://github.com/refined-github/sandbox https://github.com/refined-github/sandbox/tree/branch/with/slashes */