import './more-dropdown.css'; import React from 'dom-chef'; import select from 'select-dom'; import elementReady from 'element-ready'; import * as pageDetect from 'github-url-detection'; import DiffIcon from 'octicon/diff.svg'; import BranchIcon from 'octicon/git-branch.svg'; import HistoryIcon from 'octicon/history.svg'; import PackageIcon from 'octicon/package.svg'; import features from '.'; import {appendBefore} from '../helpers/dom-utils'; import {getRepoURL, getCurrentBranch} from '../github-helpers'; const repoUrl = getRepoURL(); function createDropdown(): void { // Markup copied from native GHE dropdown appendBefore( // GHE doesn't have `reponav > ul` select('.reponav > ul') ?? select('.reponav')!, '[data-selected-links^="repo_settings"]',
{'More '}
); } /* eslint-disable-next-line import/prefer-default-export */ export function createDropdownItem(label: string, url: string, attributes?: Record): Element { return (
  • {label}
  • ); } async function init(): Promise { // Wait for the tab bar to be loaded await elementReady([ '.pagehead + *', // Pre "Repository refresh" layout '.UnderlineNav-body + *' ].join()); const reference = getCurrentBranch(); const compareUrl = `/${repoUrl}/compare/${reference}`; const commitsUrl = `/${repoUrl}/commits/${reference}`; const dependenciesUrl = `/${repoUrl}/network/dependencies`; const nav = select('.js-responsive-underlinenav .UnderlineNav-body'); if (nav) { // "Repository refresh" layout nav.parentElement!.classList.add('rgh-has-more-dropdown'); select('.js-responsive-underlinenav-overflow ul')!.append(
  • , createDropdownItem('Compare', compareUrl), pageDetect.isEnterprise() ? '' : createDropdownItem('Dependencies', dependenciesUrl), createDropdownItem('Commits', commitsUrl), createDropdownItem('Branches', `/${repoUrl}/branches`) ); return; } // Pre "Repository refresh" layout if (!select.exists('.reponav-dropdown')) { createDropdown(); } const menu = select('.reponav-dropdown .dropdown-menu')!; menu.append( Compare , pageDetect.isEnterprise() ? '' : ( Dependencies ), Commits , Branches ); // Selector only affects desktop navigation for (const tab of select.all(` .hx_reponav [data-selected-links~="pulse"], .hx_reponav [data-selected-links~="security"] `)) { tab.remove(); menu.append( {[...tab.childNodes]} ); } } void features.add({ id: __filebasename, description: 'Adds links to `Commits`, `Branches`, `Dependencies`, and `Compare` in a new `More` dropdown.', screenshot: 'https://user-images.githubusercontent.com/1402241/55089736-d94f5300-50e8-11e9-9095-329ac74c1e9f.png' }, { include: [ pageDetect.isRepo ], waitForDomReady: false, init });