import React from 'dom-chef'; import select from 'select-dom'; import delegate from 'delegate-it'; import ClippyIcon from 'octicon/clippy.svg'; import * as pageDetect from 'github-url-detection'; import features from '.'; import {getCurrentBranch, getPRHeadRepo, getRepo, getUsername} from '../github-helpers'; // Logic explained in https://github.com/sindresorhus/refined-github/pull/3596#issuecomment-720910840 function getRemoteName(): string | undefined { const author = getPRHeadRepo()!.owner; if (author === getUsername()) { return; // `origin`, don't add remote } if (author !== getRepo()!.owner) { return author; } if (select('[aria-label="Edit Pull Request title"]')) { return; // It's a collaborator, it's likely to be `origin` } return 'upstream'; } const connectionType = { HTTPS: location.origin + '/', SSH: `git@${location.hostname}:` }; function checkoutOption(remote?: string, remoteType?: 'HTTPS' | 'SSH'): JSX.Element { return ( <> {remote &&

{remoteType}

}
					
						{remote && `git remote add ${remote} ${connectionType[remoteType!]}${getPRHeadRepo()!.nameWithOwner}.git\n`}
						git fetch {remote ?? 'origin'} {getCurrentBranch()}{'\n'}
						git switch {remote && `--track ${getPRHeadRepo()!.owner}/`}{getCurrentBranch()}
					
				
); } function handleMenuOpening({delegateTarget: dropdown}: delegate.Event): void { dropdown.classList.add('rgh-git-checkout'); // Mark this as processed const tabContainer = select('[action="/users/checkout-preference"]', dropdown)!.closest('tab-container')!; tabContainer.style.minWidth = '370px'; select('.UnderlineNav-body', tabContainer)!.append( ); const remoteName = getRemoteName(); tabContainer.append( ); } function init(): void { // `useCapture` required to be fired before GitHub's handlers delegate(document, '.gh-header-actions Details:not(.rgh-git-checkout)', 'toggle', handleMenuOpening, true); } void features.add(__filebasename, { include: [ pageDetect.isPR ], exclude: [ () => select.exists('#partial-discussion-header [title="Status: Merged"], #partial-discussion-header [title="Status: Closed"]') ], init });