From 13a118f839dd4c8438ffe0683c5c362b286b7e4c Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Thu, 18 May 2023 23:42:59 +0800 Subject: [PATCH] fix: resolve path properly --- src/platforms/GitHub/DOMHelper.ts | 37 ++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/platforms/GitHub/DOMHelper.ts b/src/platforms/GitHub/DOMHelper.ts index 9cc48c3..9858dc5 100644 --- a/src/platforms/GitHub/DOMHelper.ts +++ b/src/platforms/GitHub/DOMHelper.ts @@ -17,6 +17,9 @@ const selectors = { 'nav[role="navigation"] ul[role="list"] li:nth-child(2) .AppHeader-context-item', }, branchSelector: 'button[id^="branch-picker-"]', + pathContext: '[data-testid="breadcrumbs"]', + pathContextFileName: '[data-testid="breadcrumbs-filename"]', + pathContextScreenReaderHeading: '[data-testid="screen-reader-heading"]', }, } @@ -265,17 +268,31 @@ export function getPath() { const pathElement = document.querySelector(blobPathElementSelector) || document.querySelector(folderPathElementSelector)?.nextElementSibling - if (!pathElement?.querySelector('.js-repo-root')) { - return [] + if (pathElement?.querySelector('.js-repo-root')) { + const path = (pathElement.textContent || '') + .replace(/\n/g, '') + .replace(/\/\s+Jump to.*/m, '') + .trim() + .split('/') + .filter(Boolean) + .slice(1) // the first is the repo's name + return path } - const path = ((pathElement as HTMLDivElement).textContent || '') - .replace(/\n/g, '') - .replace(/\/\s+Jump to.*/m, '') - .trim() - .split('/') - .filter(Boolean) - .slice(1) // the first is the repo's name - return path + + const pathContextElement = document.querySelector( + selectors.globalNavigation.pathContext, + )?.parentElement + let path = pathContextElement?.textContent?.trim() + if (path) { + // [Breadcrumbs]:repoName/:path + const screenReader = pathContextElement?.querySelector( + selectors.globalNavigation.pathContextScreenReaderHeading, + ) + if (screenReader) path = path.replace(screenReader.textContent || '', '') + return path.split('/').slice(1) + } + + return [] } export function isNativePRFileTreeShown() {