diff options
author | 2021-07-19 06:19:17 -0400 | |
---|---|---|
committer | 2021-07-19 06:19:17 -0400 | |
commit | f56ac118ade1b34513a46fb0f6f699e53883ada1 (patch) | |
tree | 5293e2c72dbb381d47cda89c814099511a78d4b7 /source/features/more-dropdown-links.tsx | |
parent | ac1293a44880c83e3177729719029e26defb4e3e (diff) | |
download | refined-github-f56ac118ade1b34513a46fb0f6f699e53883ada1.tar.gz refined-github-f56ac118ade1b34513a46fb0f6f699e53883ada1.tar.zst refined-github-f56ac118ade1b34513a46fb0f6f699e53883ada1.zip |
Rename `more-dropdown` to `more-dropdown-links` (#4584)
Diffstat (limited to 'source/features/more-dropdown-links.tsx')
-rw-r--r-- | source/features/more-dropdown-links.tsx | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/source/features/more-dropdown-links.tsx b/source/features/more-dropdown-links.tsx new file mode 100644 index 00000000..14c4296d --- /dev/null +++ b/source/features/more-dropdown-links.tsx @@ -0,0 +1,68 @@ +import './more-dropdown-links.css'; +import React from 'dom-chef'; +import select from 'select-dom'; +import elementReady from 'element-ready'; +import * as pageDetect from 'github-url-detection'; + +import features from '.'; +import getDefaultBranch from '../github-helpers/get-default-branch'; +import {buildRepoURL, getCurrentCommittish} from '../github-helpers'; + +export function createDropdownItem(label: string, url: string, attributes?: Record<string, string>): Element { + return ( + <li {...attributes}> + <a role="menuitem" className="dropdown-item" href={url}> + {label} + </a> + </li> + ); +} + +export function onlyShowInDropdown(id: string): void { + const tabItem = select(`[data-tab-item$="${id}"]`); + if (!tabItem && pageDetect.isEnterprise()) { // GHE #3962 + return; + } + + (tabItem!.closest('li') ?? tabItem!.closest('.UnderlineNav-item'))!.classList.add('d-none'); + + const menuItem = select(`[data-menu-item$="${id}"]`)!; + menuItem.removeAttribute('data-menu-item'); + menuItem.hidden = false; + // The item has to be moved somewhere else because the overflow nav is order-dependent + select('.js-responsive-underlinenav-overflow ul')!.append(menuItem); +} + +export async function unhideOverflowDropdown(): Promise<void> { + // Wait for the tab bar to be loaded + const repoNavigationBar = (await elementReady('.UnderlineNav-body'))!; + repoNavigationBar.parentElement!.classList.add('rgh-has-more-dropdown'); +} + +async function init(): Promise<void> { + const reference = getCurrentCommittish() ?? await getDefaultBranch(); + const compareUrl = buildRepoURL('compare', reference); + const commitsUrl = buildRepoURL('commits', reference); + const branchesUrl = buildRepoURL('branches'); + const dependenciesUrl = buildRepoURL('network/dependencies'); + await unhideOverflowDropdown(); + + select('.js-responsive-underlinenav-overflow ul')!.append( + <li className="dropdown-divider" role="separator"/>, + createDropdownItem('Compare', compareUrl), + pageDetect.isEnterprise() ? '' : createDropdownItem('Dependencies', dependenciesUrl), + createDropdownItem('Commits', commitsUrl), + createDropdownItem('Branches', branchesUrl), + ); +} + +void features.add(__filebasename, { + include: [ + pageDetect.isRepo, + ], + exclude: [ + pageDetect.isEmptyRepo, + ], + awaitDomReady: false, + init, +}); |