import React from 'dom-chef'; import select from 'select-dom'; import delegate from 'delegate-it'; import * as pageDetect from 'github-url-detection'; import copyToClipboard from 'copy-text-to-clipboard'; import features from '.'; import {groupButtons} from '../github-helpers/group-buttons'; function handleClick({delegateTarget: button}: delegate.Event): void { const file = button.closest('.Box, .js-gist-file-update-container')!; const content = select.all('.blob-code-inner', file) .map(({innerText: line}) => line === '\n' ? '' : line) // Must be `.innerText` .join('\n'); copyToClipboard(content); button.textContent = 'Copied!'; button.classList.remove('tooltipped'); setTimeout(() => { button.textContent = 'Copy'; button.classList.add('tooltipped'); }, 2000); } function renderButton(): void { for (const button of select.all([ '.file-actions .btn[href*="/raw/"]', // `isGist` '[data-hotkey="b"]' ])) { const copyButton = ( ); const group = button.closest('.BtnGroup'); if (group) { group.prepend(copyButton); } else { groupButtons([button, copyButton]); } } } function removeButton(): void { select('.rgh-copy-file')?.remove(); } function init(): void { delegate(document, '.rgh-copy-file', 'click', handleClick); if (select.exists('.blob > .markdown-body')) { delegate(document, '.rgh-md-source', 'rgh:view-markdown-source', renderButton); delegate(document, '.rgh-md-source', 'rgh:view-markdown-rendered', removeButton); } else { renderButton(); } } void features.add(__filebasename, { include: [ pageDetect.isSingleFile, pageDetect.isGist ], init });