blob: 1110290247fad36b5dc3a0f84b7fcafdbd988a41 [file] [log] [blame]
Patrick Hulcea087f622018-05-18 00:37:53 +00001// Copyright 2018 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5/**
6 * @override
7 */
8Audits2.ReportRenderer = class extends ReportRenderer {
9 /**
Paul Irish8f1e33d2018-05-31 02:29:50 +000010 * @param {!Element} el Parent element to render the report into.
11 * @param {!ReportRenderer.RunnerResultArtifacts=} artifacts
Patrick Hulcea087f622018-05-18 00:37:53 +000012 */
Paul Irish8f1e33d2018-05-31 02:29:50 +000013 static addViewTraceButton(el, artifacts) {
14 if (!artifacts || !artifacts.traces || !artifacts.traces.defaultPass)
15 return;
Patrick Hulcea087f622018-05-18 00:37:53 +000016
Paul Irish8f1e33d2018-05-31 02:29:50 +000017 const defaultPassTrace = artifacts.traces.defaultPass;
18 const timelineButton = UI.createTextButton(Common.UIString('View Trace'), onViewTraceClick, 'view-trace');
Paul Irishb5fc8bc2018-10-11 01:07:32 +000019 el.querySelector('.lh-column').appendChild(timelineButton);
Paul Irish8f1e33d2018-05-31 02:29:50 +000020 return el;
21
22 async function onViewTraceClick() {
Paul Irishca4e6bc2018-09-05 03:10:03 +000023 Host.userMetrics.actionTaken(Host.UserMetrics.Action.Audits2ViewTrace);
Paul Irish8f1e33d2018-05-31 02:29:50 +000024 await UI.inspectorView.showPanel('timeline');
25 Timeline.TimelinePanel.instance().loadFromEvents(defaultPassTrace.traceEvents);
26 }
Patrick Hulcea087f622018-05-18 00:37:53 +000027 }
cjamcl@google.comda0e4c62018-11-27 23:52:10 +000028
29 /**
30 * @param {!Element} el
31 */
32 static async linkifyNodeDetails(el) {
33 const mainTarget = SDK.targetManager.mainTarget();
34 const resourceTreeModel = mainTarget.model(SDK.ResourceTreeModel);
35 await resourceTreeModel.once(SDK.ResourceTreeModel.Events.Load);
36
37 const domModel = mainTarget.model(SDK.DOMModel);
38
39 for (const origElement of el.getElementsByClassName('lh-node')) {
40 /** @type {!DetailsRenderer.NodeDetailsJSON} */
41 const detailsItem = origElement.dataset;
42 if (!detailsItem.path)
43 return;
44
45 const nodeId = await domModel.pushNodeByPathToFrontend(detailsItem.path);
46
47 if (!nodeId)
48 return;
49 const node = domModel.nodeForId(nodeId);
50 if (!node)
51 return;
52
53 const element =
54 await Common.Linkifier.linkify(node, /** @type {!Common.Linkifier.Options} */ ({title: detailsItem.snippet}));
55 origElement.title = '';
56 origElement.textContent = '';
57 origElement.appendChild(element);
58 }
59 }
Patrick Hulcea087f622018-05-18 00:37:53 +000060};
61
62class ReportUIFeatures {
63 /**
64 * @param {!ReportRenderer.ReportJSON} report
65 */
66 initFeatures(report) {
67 }
68}