Merge pull request #8700 from cmpadden/techdocs-internal-link-new-tab

Support cmd/ctrl+click to open internal Techdoc links in a new tab
This commit is contained in:
Johan Haals
2022-01-04 09:27:52 +01:00
committed by GitHub
2 changed files with 27 additions and 11 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs': patch
---
Adds support for opening internal Techdocs links in a new tab with CTRL+Click or CMD+Click
@@ -358,21 +358,32 @@ export const useTechDocsReaderDom = (entityRef: EntityName): Element | null => {
scrollIntoAnchor(),
addLinkClickListener({
baseUrl: window.location.origin,
onClick: (_: MouseEvent, url: string) => {
onClick: (event: MouseEvent, url: string) => {
// detect if CTRL or META keys are pressed so that links can be opened in a new tab with `window.open`
const modifierActive = event.ctrlKey || event.metaKey;
const parsedUrl = new URL(url);
// hash exists when anchor is clicked on secondary sidebar
if (parsedUrl.hash) {
navigate(`${parsedUrl.pathname}${parsedUrl.hash}`);
// Scroll to hash if it's on the current page
transformedElement
?.querySelector(`#${parsedUrl.hash.slice(1)}`)
?.scrollIntoView();
if (modifierActive) {
window.open(`${parsedUrl.pathname}${parsedUrl.hash}`, '_blank');
} else {
navigate(`${parsedUrl.pathname}${parsedUrl.hash}`);
// Scroll to hash if it's on the current page
transformedElement
?.querySelector(`#${parsedUrl.hash.slice(1)}`)
?.scrollIntoView();
}
} else {
navigate(parsedUrl.pathname);
// Scroll to top of reader if primary sidebar link is clicked
transformedElement
?.querySelector('.md-content__inner')
?.scrollIntoView();
if (modifierActive) {
window.open(parsedUrl.pathname, '_blank');
} else {
navigate(parsedUrl.pathname);
// Scroll to top of reader if primary sidebar link is clicked
transformedElement
?.querySelector('.md-content__inner')
?.scrollIntoView();
}
}
},
}),