chrome-devtools-frontend 1.0.930109 → 1.0.930993
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/gni/devtools_grd_files.gni +2 -1
- package/front_end/core/host/InspectorFrontendHost.ts +8 -1
- package/front_end/core/host/InspectorFrontendHostAPI.ts +12 -0
- package/front_end/core/i18n/locales/en-US.json +3 -0
- package/front_end/core/i18n/locales/en-XL.json +3 -0
- package/front_end/core/protocol_client/InspectorBackend.ts +71 -71
- package/front_end/core/sdk/NetworkManager.ts +6 -2
- package/front_end/devtools_compatibility.js +8 -0
- package/front_end/legacy_test_runner/sources_test_runner/DebuggerTestRunner.js +2 -2
- package/front_end/legacy_test_runner/test_runner/TestRunner.js +2 -3
- package/front_end/models/bindings/BreakpointManager.ts +158 -154
- package/front_end/models/bindings/CSSWorkspaceBinding.ts +64 -56
- package/front_end/models/bindings/CompilerScriptMapping.ts +70 -70
- package/front_end/models/bindings/ContentProviderBasedProject.ts +20 -20
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +132 -132
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +73 -72
- package/front_end/models/bindings/DefaultScriptMapping.ts +22 -22
- package/front_end/models/bindings/FileUtils.ts +81 -81
- package/front_end/models/bindings/IgnoreListManager.ts +17 -17
- package/front_end/models/bindings/LiveLocation.ts +21 -21
- package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +28 -28
- package/front_end/models/bindings/ResourceMapping.ts +50 -50
- package/front_end/models/bindings/ResourceScriptMapping.ts +71 -71
- package/front_end/models/bindings/SASSSourceMapping.ts +32 -32
- package/front_end/models/bindings/StylesSourceMapping.ts +57 -57
- package/front_end/models/bindings/TempFile.ts +34 -34
- package/front_end/models/emulation/DeviceModeModel.ts +208 -203
- package/front_end/models/emulation/EmulatedDevices.ts +34 -34
- package/front_end/panels/console/ConsoleView.ts +2 -1
- package/front_end/panels/console/ConsoleViewMessage.ts +3 -3
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +133 -133
- package/front_end/panels/css_overview/CSSOverviewModel.ts +16 -16
- package/front_end/panels/css_overview/CSSOverviewPanel.ts +77 -77
- package/front_end/panels/css_overview/CSSOverviewProcessingView.ts +5 -5
- package/front_end/panels/css_overview/components/CSSOverviewStartView.ts +4 -4
- package/front_end/panels/elements/ElementsTreeElement.ts +6 -10
- package/front_end/panels/elements/ElementsTreeOutline.ts +3 -1
- package/front_end/panels/elements/components/LayoutPane.ts +6 -0
- package/front_end/panels/elements/elementsPanel.css +0 -1
- package/front_end/panels/elements/elementsTreeOutline.css +0 -4
- package/front_end/panels/lighthouse/LighthouseProtocolService.ts +7 -2
- package/front_end/panels/network/BlockedURLsPane.ts +8 -5
- package/front_end/panels/network/blockedURLsPane.css +0 -1
- package/front_end/panels/search/SearchView.ts +0 -2
- package/front_end/panels/sources/BreakpointEditDialog.ts +98 -81
- package/front_end/panels/sources/DebuggerPlugin.ts +15 -14
- package/front_end/ui/components/code_highlighter/CodeHighlighter.ts +18 -2
- package/front_end/ui/components/text_editor/config.ts +6 -0
- package/front_end/ui/components/text_editor/cursor_tooltip.ts +70 -0
- package/front_end/ui/components/text_editor/javascript.ts +590 -0
- package/front_end/ui/components/text_editor/text_editor.ts +1 -0
- package/front_end/ui/components/text_editor/theme.ts +11 -0
- package/front_end/ui/components/tree_outline/TreeOutline.ts +3 -1
- package/front_end/ui/legacy/ARIAUtils.ts +24 -8
- package/front_end/ui/legacy/components/text_editor/cmdevtools.css +1 -0
- package/front_end/ui/legacy/components/text_editor/text_editor-legacy.ts +0 -3
- package/front_end/ui/legacy/components/text_editor/text_editor.ts +0 -2
- package/package.json +1 -1
- package/scripts/migration/class-fields/migrate.js +15 -2
- package/scripts/migration/class-fields/migrate.sh +10 -0
- package/front_end/ui/legacy/components/text_editor/SyntaxHighlighter.ts +0 -62
|
@@ -22,22 +22,22 @@ import type {UnusedDeclaration} from './CSSOverviewUnusedDeclarations.js';
|
|
|
22
22
|
let CSSOverviewPanelInstance: CSSOverviewPanel;
|
|
23
23
|
|
|
24
24
|
export class CSSOverviewPanel extends UI.Panel.Panel {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
25
|
+
readonly #model: CSSOverviewModel;
|
|
26
|
+
readonly #controller: OverviewController;
|
|
27
|
+
readonly #startView: CSSOverviewComponents.CSSOverviewStartView.CSSOverviewStartView;
|
|
28
|
+
readonly #processingView: CSSOverviewProcessingView;
|
|
29
|
+
readonly #completedView: CSSOverviewCompletedView;
|
|
30
|
+
#backgroundColors!: Map<string, Set<Protocol.DOM.BackendNodeId>>;
|
|
31
|
+
#textColors!: Map<string, Set<Protocol.DOM.BackendNodeId>>;
|
|
32
|
+
#fillColors!: Map<string, Set<Protocol.DOM.BackendNodeId>>;
|
|
33
|
+
#borderColors!: Map<string, Set<Protocol.DOM.BackendNodeId>>;
|
|
34
|
+
#fontInfo!: Map<string, Map<string, Map<string, Protocol.DOM.BackendNodeId[]>>>;
|
|
35
|
+
#mediaQueries!: Map<string, Protocol.CSS.CSSMedia[]>;
|
|
36
|
+
#unusedDeclarations!: Map<string, UnusedDeclaration[]>;
|
|
37
|
+
#elementCount!: number;
|
|
38
|
+
#cancelled?: boolean;
|
|
39
|
+
#globalStyleStats!: GlobalStyleStats;
|
|
40
|
+
#textColorContrastIssues!: Map<string, ContrastIssue[]>;
|
|
41
41
|
|
|
42
42
|
private constructor() {
|
|
43
43
|
super('css_overview');
|
|
@@ -45,23 +45,23 @@ export class CSSOverviewPanel extends UI.Panel.Panel {
|
|
|
45
45
|
this.element.classList.add('css-overview-panel');
|
|
46
46
|
|
|
47
47
|
const [model] = SDK.TargetManager.TargetManager.instance().models(CSSOverviewModel);
|
|
48
|
-
this
|
|
48
|
+
this.#model = (model as CSSOverviewModel);
|
|
49
49
|
|
|
50
|
-
this
|
|
51
|
-
this
|
|
52
|
-
this
|
|
53
|
-
'overviewstartrequested', () => this
|
|
54
|
-
this
|
|
55
|
-
this
|
|
50
|
+
this.#controller = new OverviewController();
|
|
51
|
+
this.#startView = new CSSOverviewComponents.CSSOverviewStartView.CSSOverviewStartView();
|
|
52
|
+
this.#startView.addEventListener(
|
|
53
|
+
'overviewstartrequested', () => this.#controller.dispatchEventToListeners(Events.RequestOverviewStart));
|
|
54
|
+
this.#processingView = new CSSOverviewProcessingView(this.#controller);
|
|
55
|
+
this.#completedView = new CSSOverviewCompletedView(this.#controller, model.target());
|
|
56
56
|
|
|
57
|
-
this
|
|
57
|
+
this.#controller.addEventListener(Events.RequestOverviewStart, _event => {
|
|
58
58
|
Host.userMetrics.actionTaken(Host.UserMetrics.Action.CaptureCssOverviewClicked);
|
|
59
59
|
this.startOverview();
|
|
60
60
|
}, this);
|
|
61
|
-
this
|
|
62
|
-
this
|
|
63
|
-
this
|
|
64
|
-
this
|
|
61
|
+
this.#controller.addEventListener(Events.RequestOverviewCancel, this.cancelOverview, this);
|
|
62
|
+
this.#controller.addEventListener(Events.OverviewCompleted, this.overviewCompleted, this);
|
|
63
|
+
this.#controller.addEventListener(Events.Reset, this.reset, this);
|
|
64
|
+
this.#controller.addEventListener(Events.RequestNodeHighlight, this.requestNodeHighlight, this);
|
|
65
65
|
|
|
66
66
|
this.reset();
|
|
67
67
|
}
|
|
@@ -74,16 +74,16 @@ export class CSSOverviewPanel extends UI.Panel.Panel {
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
private reset(): void {
|
|
77
|
-
this
|
|
78
|
-
this
|
|
79
|
-
this
|
|
80
|
-
this
|
|
81
|
-
this
|
|
82
|
-
this
|
|
83
|
-
this
|
|
84
|
-
this
|
|
85
|
-
this
|
|
86
|
-
this
|
|
77
|
+
this.#backgroundColors = new Map();
|
|
78
|
+
this.#textColors = new Map();
|
|
79
|
+
this.#fillColors = new Map();
|
|
80
|
+
this.#borderColors = new Map();
|
|
81
|
+
this.#fontInfo = new Map();
|
|
82
|
+
this.#mediaQueries = new Map();
|
|
83
|
+
this.#unusedDeclarations = new Map();
|
|
84
|
+
this.#elementCount = 0;
|
|
85
|
+
this.#cancelled = false;
|
|
86
|
+
this.#globalStyleStats = {
|
|
87
87
|
styleRules: 0,
|
|
88
88
|
inlineStyles: 0,
|
|
89
89
|
externalSheets: 0,
|
|
@@ -99,45 +99,45 @@ export class CSSOverviewPanel extends UI.Panel.Panel {
|
|
|
99
99
|
nonSimple: 0,
|
|
100
100
|
},
|
|
101
101
|
};
|
|
102
|
-
this
|
|
102
|
+
this.#textColorContrastIssues = new Map();
|
|
103
103
|
this.renderInitialView();
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
private requestNodeHighlight(evt: Common.EventTarget.EventTargetEvent<number>): void {
|
|
107
|
-
this
|
|
107
|
+
this.#model.highlightNode((evt.data as Protocol.DOM.BackendNodeId));
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
private renderInitialView(): void {
|
|
111
|
-
this
|
|
112
|
-
this
|
|
111
|
+
this.#processingView.hideWidget();
|
|
112
|
+
this.#completedView.hideWidget();
|
|
113
113
|
|
|
114
|
-
this.contentElement.append(this
|
|
115
|
-
this
|
|
114
|
+
this.contentElement.append(this.#startView);
|
|
115
|
+
this.#startView.show();
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
private renderOverviewStartedView(): void {
|
|
119
|
-
this
|
|
120
|
-
this
|
|
119
|
+
this.#startView.hide();
|
|
120
|
+
this.#completedView.hideWidget();
|
|
121
121
|
|
|
122
|
-
this
|
|
122
|
+
this.#processingView.show(this.contentElement);
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
private renderOverviewCompletedView(): void {
|
|
126
|
-
this
|
|
127
|
-
this
|
|
128
|
-
|
|
129
|
-
this
|
|
130
|
-
this
|
|
131
|
-
backgroundColors: this
|
|
132
|
-
textColors: this
|
|
133
|
-
textColorContrastIssues: this
|
|
134
|
-
fillColors: this
|
|
135
|
-
borderColors: this
|
|
136
|
-
globalStyleStats: this
|
|
137
|
-
fontInfo: this
|
|
138
|
-
elementCount: this
|
|
139
|
-
mediaQueries: this
|
|
140
|
-
unusedDeclarations: this
|
|
126
|
+
this.#startView.hide();
|
|
127
|
+
this.#processingView.hideWidget();
|
|
128
|
+
|
|
129
|
+
this.#completedView.show(this.contentElement);
|
|
130
|
+
this.#completedView.setOverviewData({
|
|
131
|
+
backgroundColors: this.#backgroundColors,
|
|
132
|
+
textColors: this.#textColors,
|
|
133
|
+
textColorContrastIssues: this.#textColorContrastIssues,
|
|
134
|
+
fillColors: this.#fillColors,
|
|
135
|
+
borderColors: this.#borderColors,
|
|
136
|
+
globalStyleStats: this.#globalStyleStats,
|
|
137
|
+
fontInfo: this.#fontInfo,
|
|
138
|
+
elementCount: this.#elementCount,
|
|
139
|
+
mediaQueries: this.#mediaQueries,
|
|
140
|
+
unusedDeclarations: this.#unusedDeclarations,
|
|
141
141
|
});
|
|
142
142
|
}
|
|
143
143
|
|
|
@@ -145,52 +145,52 @@ export class CSSOverviewPanel extends UI.Panel.Panel {
|
|
|
145
145
|
this.renderOverviewStartedView();
|
|
146
146
|
|
|
147
147
|
const [globalStyleStats, { elementCount, backgroundColors, textColors, textColorContrastIssues, fillColors, borderColors, fontInfo, unusedDeclarations }, mediaQueries] = await Promise.all([
|
|
148
|
-
this
|
|
149
|
-
this
|
|
150
|
-
this
|
|
148
|
+
this.#model.getGlobalStylesheetStats(),
|
|
149
|
+
this.#model.getNodeStyleStats(),
|
|
150
|
+
this.#model.getMediaQueries(),
|
|
151
151
|
]);
|
|
152
152
|
|
|
153
153
|
if (elementCount) {
|
|
154
|
-
this
|
|
154
|
+
this.#elementCount = elementCount;
|
|
155
155
|
}
|
|
156
156
|
|
|
157
157
|
if (globalStyleStats) {
|
|
158
|
-
this
|
|
158
|
+
this.#globalStyleStats = globalStyleStats;
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
if (mediaQueries) {
|
|
162
|
-
this
|
|
162
|
+
this.#mediaQueries = mediaQueries;
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
if (backgroundColors) {
|
|
166
|
-
this
|
|
166
|
+
this.#backgroundColors = backgroundColors;
|
|
167
167
|
}
|
|
168
168
|
|
|
169
169
|
if (textColors) {
|
|
170
|
-
this
|
|
170
|
+
this.#textColors = textColors;
|
|
171
171
|
}
|
|
172
172
|
|
|
173
173
|
if (textColorContrastIssues) {
|
|
174
|
-
this
|
|
174
|
+
this.#textColorContrastIssues = textColorContrastIssues;
|
|
175
175
|
}
|
|
176
176
|
|
|
177
177
|
if (fillColors) {
|
|
178
|
-
this
|
|
178
|
+
this.#fillColors = fillColors;
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
if (borderColors) {
|
|
182
|
-
this
|
|
182
|
+
this.#borderColors = borderColors;
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
if (fontInfo) {
|
|
186
|
-
this
|
|
186
|
+
this.#fontInfo = fontInfo;
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
if (unusedDeclarations) {
|
|
190
|
-
this
|
|
190
|
+
this.#unusedDeclarations = unusedDeclarations;
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
-
this
|
|
193
|
+
this.#controller.dispatchEventToListeners(Events.OverviewCompleted);
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
private getStyleValue(styles: Protocol.CSS.CSSComputedStyleProperty[], name: string): string|undefined {
|
|
@@ -203,7 +203,7 @@ export class CSSOverviewPanel extends UI.Panel.Panel {
|
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
private cancelOverview(): void {
|
|
206
|
-
this
|
|
206
|
+
this.#cancelled = true;
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
private overviewCompleted(): void {
|
|
@@ -19,20 +19,20 @@ const UIStrings = {
|
|
|
19
19
|
const str_ = i18n.i18n.registerUIStrings('panels/css_overview/CSSOverviewProcessingView.ts', UIStrings);
|
|
20
20
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
21
21
|
export class CSSOverviewProcessingView extends UI.Widget.Widget {
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
readonly #formatter: Intl.NumberFormat;
|
|
23
|
+
readonly #controller: OverviewController;
|
|
24
24
|
fragment?: UI.Fragment.Fragment;
|
|
25
25
|
constructor(controller: OverviewController) {
|
|
26
26
|
super();
|
|
27
27
|
|
|
28
|
-
this
|
|
29
|
-
this
|
|
28
|
+
this.#formatter = new Intl.NumberFormat('en-US');
|
|
29
|
+
this.#controller = controller;
|
|
30
30
|
this.render();
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
private render(): void {
|
|
34
34
|
const cancelButton = UI.UIUtils.createTextButton(
|
|
35
|
-
i18nString(UIStrings.cancel), () => this
|
|
35
|
+
i18nString(UIStrings.cancel), () => this.#controller.dispatchEventToListeners(Events.RequestOverviewCancel), '',
|
|
36
36
|
true /* primary */);
|
|
37
37
|
this.setDefaultFocusedElement(cancelButton);
|
|
38
38
|
|
|
@@ -75,7 +75,7 @@ export class OverviewStartRequestedEvent extends Event {
|
|
|
75
75
|
|
|
76
76
|
export class CSSOverviewStartView extends HTMLElement {
|
|
77
77
|
static readonly litTagName = LitHtml.literal`devtools-css-overview-start-view`;
|
|
78
|
-
|
|
78
|
+
readonly #shadow = this.attachShadow({mode: 'open'});
|
|
79
79
|
#feedbackLink: HTMLAnchorElement;
|
|
80
80
|
|
|
81
81
|
constructor() {
|
|
@@ -87,7 +87,7 @@ export class CSSOverviewStartView extends HTMLElement {
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
connectedCallback(): void {
|
|
90
|
-
this
|
|
90
|
+
this.#shadow.adoptedStyleSheets = [cssOverviewStartViewStyles];
|
|
91
91
|
this.render();
|
|
92
92
|
}
|
|
93
93
|
|
|
@@ -149,12 +149,12 @@ export class CSSOverviewStartView extends HTMLElement {
|
|
|
149
149
|
</section>
|
|
150
150
|
<a class="feedback-standalone" href=${FEEDBACK_LINK} target="_blank">${i18nString(UIStrings.feedbackStandalone)}</a>
|
|
151
151
|
</div>
|
|
152
|
-
`, this
|
|
152
|
+
`, this.#shadow, {
|
|
153
153
|
host: this,
|
|
154
154
|
});
|
|
155
155
|
// clang-format on
|
|
156
156
|
|
|
157
|
-
const startButton = this
|
|
157
|
+
const startButton = this.#shadow.querySelector<HTMLElement>('.start-capture');
|
|
158
158
|
if (startButton) {
|
|
159
159
|
startButton.focus();
|
|
160
160
|
}
|
|
@@ -39,8 +39,9 @@ import * as Platform from '../../core/platform/platform.js';
|
|
|
39
39
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
40
40
|
import * as TextUtils from '../../models/text_utils/text_utils.js';
|
|
41
41
|
import * as Adorners from '../../ui/components/adorners/adorners.js';
|
|
42
|
+
import * as CodeHighlighter from '../../ui/components/code_highlighter/code_highlighter.js';
|
|
43
|
+
|
|
42
44
|
import type * as TextEditor from '../../ui/components/text_editor/text_editor.js';
|
|
43
|
-
import * as TextEditorLegacy from '../../ui/legacy/components/text_editor/text_editor.js';
|
|
44
45
|
import * as Components from '../../ui/legacy/components/utils/utils.js';
|
|
45
46
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
46
47
|
import * as Emulation from '../emulation/emulation.js';
|
|
@@ -1730,18 +1731,13 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
1730
1731
|
if (node.parentNode && node.parentNode.nodeName().toLowerCase() === 'script') {
|
|
1731
1732
|
const newNode = titleDOM.createChild('span', 'webkit-html-text-node webkit-html-js-node');
|
|
1732
1733
|
const text = node.nodeValue();
|
|
1733
|
-
newNode.textContent = text.
|
|
1734
|
-
|
|
1735
|
-
const javascriptSyntaxHighlighter =
|
|
1736
|
-
new TextEditorLegacy.SyntaxHighlighter.SyntaxHighlighter('text/javascript', true);
|
|
1737
|
-
javascriptSyntaxHighlighter.syntaxHighlightNode(newNode).then(updateSearchHighlight);
|
|
1734
|
+
newNode.textContent = text.replace(/^[\n\r]+|\s+$/g, '');
|
|
1735
|
+
CodeHighlighter.CodeHighlighter.highlightNode(newNode, 'text/javascript').then(updateSearchHighlight);
|
|
1738
1736
|
} else if (node.parentNode && node.parentNode.nodeName().toLowerCase() === 'style') {
|
|
1739
1737
|
const newNode = titleDOM.createChild('span', 'webkit-html-text-node webkit-html-css-node');
|
|
1740
1738
|
const text = node.nodeValue();
|
|
1741
|
-
newNode.textContent = text.
|
|
1742
|
-
|
|
1743
|
-
const cssSyntaxHighlighter = new TextEditorLegacy.SyntaxHighlighter.SyntaxHighlighter('text/css', true);
|
|
1744
|
-
cssSyntaxHighlighter.syntaxHighlightNode(newNode).then(updateSearchHighlight);
|
|
1739
|
+
newNode.textContent = text.replace(/^[\n\r]+|\s+$/g, '');
|
|
1740
|
+
CodeHighlighter.CodeHighlighter.highlightNode(newNode, 'text/css').then(updateSearchHighlight);
|
|
1745
1741
|
} else {
|
|
1746
1742
|
UI.UIUtils.createTextChild(titleDOM, '"');
|
|
1747
1743
|
const textNodeElement = titleDOM.createChild('span', 'webkit-html-text-node');
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
import * as Common from '../../core/common/common.js';
|
|
36
36
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
37
37
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
38
|
+
import * as CodeHighlighter from '../../ui/components/code_highlighter/code_highlighter.js';
|
|
38
39
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
39
40
|
|
|
40
41
|
import {linkifyDeferredNodeReference} from './DOMLinkifier.js';
|
|
@@ -105,7 +106,8 @@ export class ElementsTreeOutline extends
|
|
|
105
106
|
this.treeElementByNode = new WeakMap();
|
|
106
107
|
const shadowContainer = document.createElement('div');
|
|
107
108
|
this.shadowRoot = UI.Utils.createShadowRootWithCoreStyles(
|
|
108
|
-
shadowContainer,
|
|
109
|
+
shadowContainer,
|
|
110
|
+
{cssFile: [elementsTreeOutlineStyles, CodeHighlighter.Style.default], delegatesFocus: undefined});
|
|
109
111
|
const outlineDisclosureElement = this.shadowRoot.createChild('div', 'elements-disclosure');
|
|
110
112
|
|
|
111
113
|
this.elementInternal = this.element;
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import * as Common from '../../../core/common/common.js';
|
|
6
6
|
import * as ComponentHelpers from '../../../ui/components/helpers/helpers.js';
|
|
7
|
+
import * as UI from '../../../ui/legacy/legacy.js';
|
|
7
8
|
import * as LitHtml from '../../../ui/lit-html/lit-html.js';
|
|
8
9
|
|
|
9
10
|
import type {BooleanSetting, EnumSetting, Setting} from './LayoutPaneUtils.js';
|
|
@@ -53,6 +54,10 @@ const UIStrings = {
|
|
|
53
54
|
*@description Text in the Layout panel, when no flexbox elements are found
|
|
54
55
|
*/
|
|
55
56
|
noFlexboxLayoutsFoundOnThisPage: 'No flexbox layouts found on this page',
|
|
57
|
+
/**
|
|
58
|
+
*@description Screen reader announcement when opening color picker tool.
|
|
59
|
+
*/
|
|
60
|
+
colorPickerOpened: 'Color picker opened.',
|
|
56
61
|
};
|
|
57
62
|
const str_ = i18n.i18n.registerUIStrings('panels/elements/components/LayoutPane.ts', UIStrings);
|
|
58
63
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
@@ -240,6 +245,7 @@ export class LayoutPane extends HTMLElement {
|
|
|
240
245
|
const target = event.target as HTMLLabelElement;
|
|
241
246
|
const input = target.querySelector('input') as HTMLInputElement;
|
|
242
247
|
input.click();
|
|
248
|
+
UI.ARIAUtils.alert(i18nString(UIStrings.colorPickerOpened));
|
|
243
249
|
event.preventDefault();
|
|
244
250
|
};
|
|
245
251
|
const onColorLabelKeyDown = (event: KeyboardEvent): void => {
|
|
@@ -90,8 +90,13 @@ export class ProtocolService {
|
|
|
90
90
|
|
|
91
91
|
private initWorker(): Promise<Worker> {
|
|
92
92
|
this.lighthouseWorkerPromise = new Promise<Worker>(resolve => {
|
|
93
|
-
const
|
|
94
|
-
|
|
93
|
+
const workerUrl = new URL('../../entrypoints/lighthouse_worker/lighthouse_worker.js', import.meta.url);
|
|
94
|
+
const remoteBaseSearchParam = new URL(self.location.href).searchParams.get('remoteBase');
|
|
95
|
+
if (remoteBaseSearchParam) {
|
|
96
|
+
// Allows Lighthouse worker to fetch remote locale files.
|
|
97
|
+
workerUrl.searchParams.set('remoteBase', remoteBaseSearchParam);
|
|
98
|
+
}
|
|
99
|
+
const worker = new Worker(workerUrl, {type: 'module'});
|
|
95
100
|
|
|
96
101
|
worker.addEventListener('message', event => {
|
|
97
102
|
if (event.data === 'workerReady') {
|
|
@@ -135,18 +135,20 @@ export class BlockedURLsPane extends UI.Widget.VBox implements
|
|
|
135
135
|
this.list.addNewItem(0, {url: '', enabled: true});
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
renderItem(pattern: SDK.NetworkManager.BlockedPattern,
|
|
138
|
+
renderItem(pattern: SDK.NetworkManager.BlockedPattern, editable: boolean): Element {
|
|
139
139
|
const count = this.blockedRequestsCount(pattern.url);
|
|
140
140
|
const element = document.createElement('div');
|
|
141
141
|
element.classList.add('blocked-url');
|
|
142
142
|
const checkbox = (element.createChild('input', 'blocked-url-checkbox') as HTMLInputElement);
|
|
143
143
|
checkbox.type = 'checkbox';
|
|
144
144
|
checkbox.checked = pattern.enabled;
|
|
145
|
-
checkbox.disabled = !
|
|
145
|
+
checkbox.disabled = !editable;
|
|
146
146
|
element.createChild('div', 'blocked-url-label').textContent = pattern.url;
|
|
147
147
|
element.createChild('div', 'blocked-url-count').textContent = i18nString(UIStrings.dBlocked, {PH1: count});
|
|
148
|
-
|
|
149
|
-
|
|
148
|
+
if (editable) {
|
|
149
|
+
element.addEventListener('click', event => this.togglePattern(pattern, event));
|
|
150
|
+
checkbox.addEventListener('click', event => this.togglePattern(pattern, event));
|
|
151
|
+
}
|
|
150
152
|
return element;
|
|
151
153
|
}
|
|
152
154
|
|
|
@@ -226,10 +228,11 @@ export class BlockedURLsPane extends UI.Widget.VBox implements
|
|
|
226
228
|
private update(): Promise<void> {
|
|
227
229
|
const enabled = this.manager.blockingEnabled();
|
|
228
230
|
this.list.element.classList.toggle('blocking-disabled', !enabled && Boolean(this.manager.blockedPatterns().length));
|
|
231
|
+
|
|
229
232
|
this.enabledCheckbox.setChecked(enabled);
|
|
230
233
|
this.list.clear();
|
|
231
234
|
for (const pattern of this.manager.blockedPatterns()) {
|
|
232
|
-
this.list.appendItem(pattern,
|
|
235
|
+
this.list.appendItem(pattern, enabled);
|
|
233
236
|
}
|
|
234
237
|
return Promise.resolve();
|
|
235
238
|
}
|
|
@@ -440,8 +440,6 @@ export class SearchView extends UI.Widget.VBox {
|
|
|
440
440
|
}
|
|
441
441
|
|
|
442
442
|
private onAction(): void {
|
|
443
|
-
// Resetting alert variable to prime for next search query result.
|
|
444
|
-
UI.ARIAUtils.alert(' ');
|
|
445
443
|
const searchConfig = this.buildSearchConfig();
|
|
446
444
|
if (!searchConfig.query() || !searchConfig.query().length) {
|
|
447
445
|
return;
|