/** * @license * Copyright 2021 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import {FunctionComponent} from 'preact'; import {renderReport} from '../../../report/renderer/api.js'; import {useExternalRenderer} from '../util'; /** * The default behavior of anchor links is not compatible with the flow report's hash navigation. * This function converts a category score anchor link to a flow report link. * e.g. -> */ function convertAnchor(link: HTMLAnchorElement, index: number) { // Clear existing event listeners by cloning node. const newLink = link.cloneNode(true) as HTMLAnchorElement; if (!newLink.hash) return newLink; const nodeId = link.hash.substr(1); newLink.hash = `#index=${index}&anchor=${nodeId}`; newLink.onclick = e => { e.preventDefault(); const el = document.getElementById(nodeId); if (el) el.scrollIntoView(); }; link.replaceWith(newLink); } export const Report: FunctionComponent<{hashState: LH.HashState}> = ({hashState}) => { const ref = useExternalRenderer(() => { return renderReport(hashState.currentLhr, { disableFireworks: true, disableDarkMode: true, omitTopbar: true, omitGlobalStyles: true, onPageAnchorRendered: link => convertAnchor(link, hashState.index), }); }, [hashState]); return (
); };