diff --git a/src/platforms/GitHub/DOMHelper.ts b/src/platforms/GitHub/DOMHelper.ts index c622e5a..68343f4 100644 --- a/src/platforms/GitHub/DOMHelper.ts +++ b/src/platforms/GitHub/DOMHelper.ts @@ -36,12 +36,18 @@ const selectors = { 'nav[role="navigation"] ul[role="list"] li:nth-child(2) .AppHeader-context-item', ].join(), }, - branchSelector: 'button[id^="branch-picker-"]', + treeViewBranchSelector: ['#react-repos-tree-pane-ref-selector'].join(), + branchSelector: [ + 'button[id^="branch-picker-"]', + '#ref-picker-repos-header-ref-selector-wide', + ].join(), pathContext: '[data-testid="breadcrumbs"]', pathContextFileName: '[data-testid="breadcrumbs-filename"]', pathContextScreenReaderHeading: '[data-testid="screen-reader-heading"]', embeddedData: { app: 'script[type="application/json"][data-target="react-app.embeddedData"]', + reactAppCodeView: + 'react-app[app-name="react-code-view"] script[type="application/json"][data-target="react-app.embeddedData"]', reposOverview: '[partial-name="repos-overview"] script[type="application/json"][data-target="react-partial.embeddedData"]', pullRequest: 'script[type="application/json"][data-target="react-app.embeddedData"]', @@ -79,6 +85,11 @@ function resolveEmbeddedAppData() { if (s.is(data, embeddedDataStruct.app)) return getMetaFromPayload(data.payload) } +function resolveEmbeddedCodeViewData() { + const data = getDOMJSON(selectors.globalNavigation.embeddedData.reactAppCodeView) + if (s.is(data, embeddedDataStruct.codeViewApp)) return data.payload +} + function resolveEmbeddedReposOverviewData() { const data = getDOMJSON(selectors.globalNavigation.embeddedData.reposOverview) if (s.is(data, embeddedDataStruct.reposOverview)) @@ -175,6 +186,22 @@ export function getCommitTitle() { } export function getCurrentBranch(passive = false) { + const embeddedData = resolveEmbeddedCodeViewData() + if (embeddedData) { + return embeddedData.refInfo.name + } + + { + const treeViewSelectedBranchButtonSelector = [ + selectors.globalNavigation.treeViewBranchSelector, + ].join() + const treeViewSelectedBranchButtonElement = $(treeViewSelectedBranchButtonSelector) + const branchName = treeViewSelectedBranchButtonElement?.textContent.trim() + if (branchName) { + return branchName + } + } + const selectedBranchButtonSelector = [ 'main #branch-select-menu summary', 'main .branch-select-menu summary', @@ -220,7 +247,9 @@ export function getCurrentBranch(passive = false) { }) if (branchNameFromCodeTab) return branchNameFromCodeTab - if (!passive) raiseError(new Error('cannot get current branch')) + if (!passive) { + raiseError(new Error('cannot get current branch')) + } } /** diff --git a/src/platforms/GitHub/embeddedDataStructures.ts b/src/platforms/GitHub/embeddedDataStructures.ts index 3cdfb9a..8ddc54c 100644 --- a/src/platforms/GitHub/embeddedDataStructures.ts +++ b/src/platforms/GitHub/embeddedDataStructures.ts @@ -70,6 +70,15 @@ const app = s.type({ payload: repoPayload, }) +const codeViewApp = s.type({ + payload: s.type({ + refInfo: s.type({ + name: s.string(), + refType: s.string(), + }), + }), +}) + const diffSummary = s.type({ changeType: s.string(), highestAnnotationLevel: s.nullable(s.string()), @@ -111,5 +120,6 @@ export const embeddedDataStruct = { repoPayload, reposOverview, app, + codeViewApp, pullRequest, }