chrome-devtools-frontend 1.0.1578729 → 1.0.1579812
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/docs/cookbook/devtools_on_devtools.md +2 -2
- package/docs/feature-specs/elements-gutter-decorators.md +40 -0
- package/docs/feature-specs/elements-tree-selection-and-hover.md +31 -0
- package/docs/feature-specs/images/elements-gutter-decorators-multiple.png +0 -0
- package/docs/get_the_code.md +3 -3
- package/front_end/generated/ARIAProperties.js +0 -6
- package/front_end/generated/InspectorBackendCommands.ts +1 -1
- package/front_end/generated/protocol.ts +1 -0
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.snapshot.txt +30 -0
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +79 -0
- package/front_end/models/javascript_metadata/NativeFunctions.js +4 -0
- package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +5 -3
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +18 -4
- package/front_end/panels/ai_assistance/components/ChatInput.ts +38 -18
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +7 -4
- package/front_end/panels/ai_assistance/components/ChatView.ts +2 -0
- package/front_end/panels/ai_assistance/components/chatInput.css +10 -3
- package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -1
- package/front_end/panels/application/DeviceBoundSessionsView.ts +51 -76
- package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +1 -0
- package/front_end/panels/application/components/BackForwardCacheView.ts +4 -2
- package/front_end/panels/autofill/AutofillView.ts +1 -1
- package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +1 -0
- package/front_end/panels/common/AiCodeGenerationTeaser.ts +2 -2
- package/front_end/panels/common/AiCodeGenerationUpgradeDialog.ts +4 -4
- package/front_end/panels/console/ConsoleViewMessage.ts +1 -0
- package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +78 -0
- package/front_end/panels/elements/ElementsTreeElement.ts +93 -121
- package/front_end/panels/elements/ElementsTreeOutline.ts +1 -0
- package/front_end/panels/elements/LayoutPane.ts +8 -7
- package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +1 -1
- package/front_end/panels/elements/components/StylePropertyEditor.ts +2 -1
- package/front_end/panels/elements/elements.ts +3 -0
- package/front_end/panels/elements/elementsTreeOutline.css +16 -5
- package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -1
- package/front_end/panels/lighthouse/LighthouseStartView.ts +1 -1
- package/front_end/panels/lighthouse/lighthouseStartView.css +6 -0
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +1 -1
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +1 -1
- package/front_end/panels/media/PlayerListView.ts +1 -1
- package/front_end/panels/network/NetworkLogView.ts +2 -5
- package/front_end/panels/network/NetworkLogViewColumns.ts +2 -1
- package/front_end/panels/network/components/RequestHeaderSection.ts +1 -1
- package/front_end/panels/protocol_monitor/JSONEditor.ts +1 -1
- package/front_end/panels/recorder/components/RecordingListView.ts +1 -1
- package/front_end/panels/recorder/components/StepEditor.ts +3 -3
- package/front_end/panels/settings/EditFileSystemView.ts +8 -8
- package/front_end/panels/settings/KeybindsSettingsTab.ts +2 -1
- package/front_end/panels/settings/SettingsScreen.ts +4 -4
- package/front_end/panels/sources/components/HeadersView.ts +2 -2
- package/front_end/panels/timeline/components/BreadcrumbsUI.ts +1 -1
- package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +1 -1
- package/front_end/panels/timeline/overlays/OverlaysImpl.ts +47 -26
- package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.ts +121 -39
- package/front_end/panels/timeline/overlays/components/timespanBreakdownOverlay.css +106 -101
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/components/suggestion_input/SuggestionInput.ts +7 -12
- package/front_end/ui/components/tree_outline/TreeOutline.ts +1 -1
- package/front_end/ui/legacy/InplaceEditor.ts +1 -1
- package/front_end/ui/legacy/ListControl.ts +2 -1
- package/front_end/ui/legacy/ListWidget.ts +1 -1
- package/front_end/ui/legacy/SoftContextMenu.ts +2 -1
- package/front_end/ui/legacy/Treeoutline.ts +1 -0
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +4 -2
- package/front_end/ui/legacy/components/data_grid/SortableDataGrid.ts +59 -9
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +28 -15
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +2 -2
- package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
- package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +3 -3
- package/front_end/ui/legacy/components/source_frame/JSONView.ts +2 -3
- package/front_end/ui/visual_logging/Debugging.ts +1 -1
- package/package.json +1 -1
|
@@ -582,27 +582,25 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
|
|
|
582
582
|
<devtools-report>
|
|
583
583
|
<devtools-report-section-header role="heading" aria-level="2">${
|
|
584
584
|
i18nString(UIStrings.sessionConfig)}</devtools-report-section-header>
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
i18nString(UIStrings.allowedRefreshInitiators),
|
|
599
|
-
sessionAndEvents.session.allowedRefreshInitiators.join(', '), 'dbsc-allowed-refresh-initiators')}
|
|
585
|
+
<devtools-report-key>${i18nString(UIStrings.keySite)}</devtools-report-key>
|
|
586
|
+
<devtools-report-value>${key.site}</devtools-report-value>
|
|
587
|
+
<devtools-report-key>${i18nString(UIStrings.keyId)}</devtools-report-key>
|
|
588
|
+
<devtools-report-value>${key.id}</devtools-report-value>
|
|
589
|
+
<devtools-report-key>${i18nString(UIStrings.refreshUrl)}</devtools-report-key>
|
|
590
|
+
<devtools-report-value>${sessionAndEvents.session.refreshUrl}</devtools-report-value>
|
|
591
|
+
<devtools-report-key>${i18nString(UIStrings.expiryDate)}</devtools-report-key>
|
|
592
|
+
<devtools-report-value>${
|
|
593
|
+
new Date(sessionAndEvents.session.expiryDate * 1000).toLocaleString()}</devtools-report-value>
|
|
594
|
+
<devtools-report-key>${i18nString(UIStrings.cachedChallenge)}</devtools-report-key>
|
|
595
|
+
<devtools-report-value>${sessionAndEvents.session.cachedChallenge || ''}</devtools-report-value>
|
|
596
|
+
<devtools-report-key>${i18nString(UIStrings.allowedRefreshInitiators)}</devtools-report-key>
|
|
597
|
+
<devtools-report-value>${sessionAndEvents.session.allowedRefreshInitiators.join(', ')}</devtools-report-value>
|
|
600
598
|
<devtools-report-section-header role="heading" aria-level="2">${
|
|
601
599
|
i18nString(UIStrings.scope)}</devtools-report-section-header>
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
600
|
+
<devtools-report-key>${i18nString(UIStrings.origin)}</devtools-report-key>
|
|
601
|
+
<devtools-report-value>${inclusionRules.origin}</devtools-report-value>
|
|
602
|
+
<devtools-report-key>${i18nString(UIStrings.includeSite)}</devtools-report-key>
|
|
603
|
+
<devtools-report-value>${boolToString(inclusionRules.includeSite)}</devtools-report-value>
|
|
606
604
|
</devtools-report>
|
|
607
605
|
${
|
|
608
606
|
inclusionRules.urlRules.length > 0 ? html`
|
|
@@ -710,78 +708,62 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
|
|
|
710
708
|
const creationEventDetails =
|
|
711
709
|
selectedEvent?.creationEventDetails &&
|
|
712
710
|
html`
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
html`
|
|
720
|
-
${
|
|
721
|
-
renderKeyValue(
|
|
722
|
-
i18nString(UIStrings.updatedSessionConfig), i18nString(UIStrings.yes),
|
|
723
|
-
'dbsc-creation-updated-session-config')}
|
|
711
|
+
<devtools-report-key>${i18nString(UIStrings.fetchResult)}</devtools-report-key>
|
|
712
|
+
<devtools-report-value>${
|
|
713
|
+
fetchResultToString(selectedEvent.creationEventDetails.fetchResult)}</devtools-report-value>
|
|
714
|
+
${selectedEvent.creationEventDetails.newSession && html`
|
|
715
|
+
<devtools-report-key>${i18nString(UIStrings.updatedSessionConfig)}</devtools-report-key>
|
|
716
|
+
<devtools-report-value>${i18nString(UIStrings.yes)}</devtools-report-value>
|
|
724
717
|
`}
|
|
725
718
|
`;
|
|
726
719
|
const refreshEventDetails =
|
|
727
720
|
selectedEvent?.refreshEventDetails &&
|
|
728
721
|
html`
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
i18nString(UIStrings.causedAnyRequestDeferrals),
|
|
736
|
-
boolToString(!selectedEvent.refreshEventDetails.wasFullyProactiveRefresh),
|
|
737
|
-
'dbsc-refresh-was-fully-proactive-refresh')}
|
|
722
|
+
<devtools-report-key>${i18nString(UIStrings.refreshResult)}</devtools-report-key>
|
|
723
|
+
<devtools-report-value>${
|
|
724
|
+
refreshResultToString(selectedEvent.refreshEventDetails.refreshResult)}</devtools-report-value>
|
|
725
|
+
<devtools-report-key>${i18nString(UIStrings.causedAnyRequestDeferrals)}</devtools-report-key>
|
|
726
|
+
<devtools-report-value>${
|
|
727
|
+
boolToString(!selectedEvent.refreshEventDetails.wasFullyProactiveRefresh)}</devtools-report-value>
|
|
738
728
|
${
|
|
739
729
|
selectedEvent.refreshEventDetails.fetchResult &&
|
|
740
730
|
html`
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
'dbsc-refresh-fetch-result')}
|
|
731
|
+
<devtools-report-key>${i18nString(UIStrings.fetchResult)}</devtools-report-key>
|
|
732
|
+
<devtools-report-value>${
|
|
733
|
+
fetchResultToString(selectedEvent.refreshEventDetails.fetchResult)}</devtools-report-value>
|
|
745
734
|
`}
|
|
746
|
-
${
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
${
|
|
750
|
-
renderKeyValue(
|
|
751
|
-
i18nString(UIStrings.updatedSessionConfig), i18nString(UIStrings.yes),
|
|
752
|
-
'dbsc-refresh-updated-session-config')}
|
|
735
|
+
${selectedEvent.refreshEventDetails.newSession && html`
|
|
736
|
+
<devtools-report-key>${i18nString(UIStrings.updatedSessionConfig)}</devtools-report-key>
|
|
737
|
+
<devtools-report-value>${i18nString(UIStrings.yes)}</devtools-report-value>
|
|
753
738
|
`}
|
|
754
739
|
`;
|
|
755
740
|
const challengeEventDetails =
|
|
756
741
|
selectedEvent?.challengeEventDetails &&
|
|
757
742
|
html`
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
renderKeyValue(
|
|
764
|
-
i18nString(UIStrings.challenge), selectedEvent.challengeEventDetails.challenge, 'dbsc-challenge')}
|
|
743
|
+
<devtools-report-key>${i18nString(UIStrings.challengeResult)}</devtools-report-key>
|
|
744
|
+
<devtools-report-value>${
|
|
745
|
+
challengeResultToString(selectedEvent.challengeEventDetails.challengeResult)}</devtools-report-value>
|
|
746
|
+
<devtools-report-key>${i18nString(UIStrings.challenge)}</devtools-report-key>
|
|
747
|
+
<devtools-report-value>${selectedEvent.challengeEventDetails.challenge}</devtools-report-value>
|
|
765
748
|
`;
|
|
766
749
|
const terminationEventDetails =
|
|
767
750
|
selectedEvent?.terminationEventDetails &&
|
|
768
751
|
html`
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
deletionReasonToString(selectedEvent.terminationEventDetails.deletionReason), 'dbsc-termination-reason')}
|
|
752
|
+
<devtools-report-key>${i18nString(UIStrings.deletionReason)}</devtools-report-key>
|
|
753
|
+
<devtools-report-value>${
|
|
754
|
+
deletionReasonToString(selectedEvent.terminationEventDetails.deletionReason)}</devtools-report-value>
|
|
773
755
|
`;
|
|
774
756
|
const eventDetailsContentHtml = selectedEvent ?
|
|
775
757
|
html`
|
|
776
758
|
<devtools-report>
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
759
|
+
<devtools-report-key>${i18nString(UIStrings.keySite)}</devtools-report-key>
|
|
760
|
+
<devtools-report-value>${selectedEvent.site}</devtools-report-value>
|
|
761
|
+
<devtools-report-key>${i18nString(UIStrings.sessionId)}</devtools-report-key>
|
|
762
|
+
<devtools-report-value>${selectedEvent.sessionId}</devtools-report-value>
|
|
763
|
+
<devtools-report-key>${i18nString(UIStrings.type)}</devtools-report-key>
|
|
764
|
+
<devtools-report-value>${getEventTypeString(selectedEvent)}</devtools-report-value>
|
|
765
|
+
<devtools-report-key>${i18nString(UIStrings.eventResult)}</devtools-report-key>
|
|
766
|
+
<devtools-report-value>${succeededToString(selectedEvent.succeeded)}</devtools-report-value>
|
|
785
767
|
${creationEventDetails}
|
|
786
768
|
${refreshEventDetails}
|
|
787
769
|
${challengeEventDetails}
|
|
@@ -888,13 +870,6 @@ export class DeviceBoundSessionsView extends UI.Widget.VBox {
|
|
|
888
870
|
}
|
|
889
871
|
}
|
|
890
872
|
|
|
891
|
-
function renderKeyValue(key: string, value: string, id: string): TemplateResult {
|
|
892
|
-
return html`
|
|
893
|
-
<devtools-report-key id=${id}>${key}</devtools-report-key>
|
|
894
|
-
<devtools-report-value role="text" aria-describedby=${id}>${value}</devtools-report-value>
|
|
895
|
-
`;
|
|
896
|
-
}
|
|
897
|
-
|
|
898
873
|
function ruleTypeToString(ruleType: Protocol.Network.DeviceBoundSessionUrlRuleRuleType): string {
|
|
899
874
|
switch (ruleType) {
|
|
900
875
|
case Protocol.Network.DeviceBoundSessionUrlRuleRuleType.Exclude:
|
|
@@ -180,6 +180,7 @@ export class ServiceWorkerUpdateCycleView {
|
|
|
180
180
|
const tr = this.tableElement.createChild('tr', 'service-worker-update-timeline');
|
|
181
181
|
tr.setAttribute('jslog', `${VisualLogging.treeItem('update-timeline').track({
|
|
182
182
|
click: true,
|
|
183
|
+
resize: true,
|
|
183
184
|
keydown: 'ArrowLeft|ArrowRight|ArrowUp|ArrowDown|Enter|Space',
|
|
184
185
|
})}`);
|
|
185
186
|
this.rows.push(tr);
|
|
@@ -353,7 +353,7 @@ function renderFramesPerReason(frames: string[]|undefined): LitTemplate {
|
|
|
353
353
|
}
|
|
354
354
|
const rows = [html`<div>${i18nString(UIStrings.framesPerIssue, {n: frames.length})}</div>`];
|
|
355
355
|
rows.push(...frames.map(url => html`<div class="text-ellipsis" title=${url}
|
|
356
|
-
jslog=${VisualLogging.treeItem()}>${url}</div>`));
|
|
356
|
+
jslog=${VisualLogging.treeItem().track({resize: true})}>${url}</div>`));
|
|
357
357
|
return html`
|
|
358
358
|
<div class="details-list"
|
|
359
359
|
jslog=${VisualLogging.tree('frames-per-issue')}>
|
|
@@ -361,7 +361,9 @@ function renderFramesPerReason(frames: string[]|undefined): LitTemplate {
|
|
|
361
361
|
rows,
|
|
362
362
|
title: i18nString(UIStrings.framesPerIssue, {n: frames.length}),
|
|
363
363
|
} as ExpandableList.ExpandableList.ExpandableListData}
|
|
364
|
-
jslog=${VisualLogging.treeItem()
|
|
364
|
+
jslog=${VisualLogging.treeItem().track({
|
|
365
|
+
resize: true
|
|
366
|
+
})}></devtools-expandable-list>
|
|
365
367
|
</div>
|
|
366
368
|
`;
|
|
367
369
|
}
|
|
@@ -144,7 +144,7 @@ const DEFAULT_VIEW: View = (input: ViewInput, _output: ViewOutput, target: HTMLE
|
|
|
144
144
|
// clang-format off
|
|
145
145
|
return html`
|
|
146
146
|
<span class=${spanClasses}
|
|
147
|
-
jslog=${VisualLogging.item('matched-address-item').track({hover: true})}
|
|
147
|
+
jslog=${VisualLogging.item('matched-address-item').track({hover: true, resize: true})}
|
|
148
148
|
@mouseenter=${() => input.onHighlightMatchesInAddress(startIndex)}
|
|
149
149
|
@mouseleave=${input.onClearHighlightedMatches}>
|
|
150
150
|
${templateLines}
|
|
@@ -238,6 +238,7 @@ export class XHRBreakpointsSidebarPane extends UI.Widget.VBox implements UI.Cont
|
|
|
238
238
|
listItemElement.setAttribute('jslog', `${VisualLogging.item().track({
|
|
239
239
|
click: true,
|
|
240
240
|
dblclick: true,
|
|
241
|
+
resize: true,
|
|
241
242
|
keydown: 'ArrowUp|ArrowDown|PageUp|PageDown|Enter|Space',
|
|
242
243
|
})}`);
|
|
243
244
|
return listItemElement;
|
|
@@ -18,11 +18,11 @@ const UIStringsNotTranslate = {
|
|
|
18
18
|
/**
|
|
19
19
|
* @description Text for teaser to generate code.
|
|
20
20
|
*/
|
|
21
|
-
ctrlItoGenerateCode: '
|
|
21
|
+
ctrlItoGenerateCode: 'ctrl+i to generate code',
|
|
22
22
|
/**
|
|
23
23
|
* @description Text for teaser to generate code in Mac.
|
|
24
24
|
*/
|
|
25
|
-
cmdItoGenerateCode: '
|
|
25
|
+
cmdItoGenerateCode: 'cmd+i to generate code',
|
|
26
26
|
/**
|
|
27
27
|
* @description Aria label for teaser to generate code.
|
|
28
28
|
*/
|
|
@@ -22,16 +22,16 @@ const UIStringsNotTranslate = {
|
|
|
22
22
|
* @description First item in the description.
|
|
23
23
|
*/
|
|
24
24
|
describeCodeInComment:
|
|
25
|
-
'Pressing
|
|
25
|
+
'Pressing ctrl+i on a comment in the Console and Sources panels now generates entire code blocks based on the instructions in the comment',
|
|
26
26
|
/**
|
|
27
27
|
* @description First item in the description.
|
|
28
28
|
*/
|
|
29
29
|
describeCodeInCommentForMacOs:
|
|
30
|
-
'Pressing
|
|
30
|
+
'Pressing cmd+i on a comment in the Console and Sources panels now generates entire code blocks based on the instructions in the comment',
|
|
31
31
|
/**
|
|
32
32
|
* @description Second item in the description.
|
|
33
33
|
*/
|
|
34
|
-
asYouType: 'You will still receive the real-time, as-you-type suggestions to help you code faster
|
|
34
|
+
asYouType: 'You will still receive the real-time, as-you-type suggestions to help you code faster',
|
|
35
35
|
/**
|
|
36
36
|
* @description Third item in the description.
|
|
37
37
|
*/
|
|
@@ -97,7 +97,7 @@ export class AiCodeGenerationUpgradeDialog {
|
|
|
97
97
|
<div class="right-buttons">
|
|
98
98
|
<devtools-button
|
|
99
99
|
@click=${() => {
|
|
100
|
-
result.resolve(
|
|
100
|
+
result.resolve(false);
|
|
101
101
|
void UI.ViewManager.ViewManager.instance().showView('chrome-ai');
|
|
102
102
|
}}
|
|
103
103
|
jslogcontext="ai-code-generation-upgrade-dialog.manage-in-settings"
|
|
@@ -1425,6 +1425,7 @@ export class ConsoleViewMessage implements ConsoleViewportElement {
|
|
|
1425
1425
|
this.elementInternal.className = 'console-message-wrapper';
|
|
1426
1426
|
this.elementInternal.setAttribute('jslog', `${VisualLogging.item('console-message').track({
|
|
1427
1427
|
click: true,
|
|
1428
|
+
resize: true,
|
|
1428
1429
|
keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Enter|Space|Home|End',
|
|
1429
1430
|
})}`);
|
|
1430
1431
|
this.elementInternal.removeChildren();
|
|
@@ -11,6 +11,8 @@ import * as UI from '../../ui/legacy/legacy.js';
|
|
|
11
11
|
import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
|
|
12
12
|
import {PanelUtils} from '../utils/utils.js';
|
|
13
13
|
|
|
14
|
+
import type {EditorHandles} from './ElementsTreeElement.js';
|
|
15
|
+
|
|
14
16
|
export class AdoptedStyleSheetTreeElement extends UI.TreeOutline.TreeElement {
|
|
15
17
|
private eventListener: Common.EventTarget.EventDescriptor|null = null;
|
|
16
18
|
|
|
@@ -58,6 +60,8 @@ export class AdoptedStyleSheetTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
58
60
|
}
|
|
59
61
|
|
|
60
62
|
export class AdoptedStyleSheetContentsTreeElement extends UI.TreeOutline.TreeElement {
|
|
63
|
+
private editing: EditorHandles|null = null;
|
|
64
|
+
|
|
61
65
|
constructor(private readonly styleSheetHeader: SDK.CSSStyleSheetHeader.CSSStyleSheetHeader) {
|
|
62
66
|
super('');
|
|
63
67
|
}
|
|
@@ -69,6 +73,9 @@ export class AdoptedStyleSheetContentsTreeElement extends UI.TreeOutline.TreeEle
|
|
|
69
73
|
}
|
|
70
74
|
|
|
71
75
|
override onunbind(): void {
|
|
76
|
+
if (this.editing) {
|
|
77
|
+
this.editing.cancel();
|
|
78
|
+
}
|
|
72
79
|
this.styleSheetHeader.cssModel().removeEventListener(
|
|
73
80
|
SDK.CSSModel.Events.StyleSheetChanged, this.onStyleSheetChanged, this);
|
|
74
81
|
}
|
|
@@ -91,4 +98,75 @@ export class AdoptedStyleSheetContentsTreeElement extends UI.TreeOutline.TreeEle
|
|
|
91
98
|
void this.onpopulate();
|
|
92
99
|
}
|
|
93
100
|
}
|
|
101
|
+
|
|
102
|
+
override ondblclick(event: Event): boolean {
|
|
103
|
+
if (this.editing) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
void this.startEditing(event.target as Element);
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
override onenter(): boolean {
|
|
111
|
+
if (this.editing) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
const target = this.listItemElement.querySelector('.webkit-html-text-node');
|
|
115
|
+
if (target) {
|
|
116
|
+
void this.startEditing(target);
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
private async startEditing(target: Element): Promise<void> {
|
|
123
|
+
if (this.editing || UI.UIUtils.isBeingEdited(target)) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const textNode = target.enclosingNodeOrSelfWithClass('webkit-html-text-node');
|
|
128
|
+
if (!textNode) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const data = await this.styleSheetHeader.requestContentData();
|
|
133
|
+
textNode.textContent = (TextUtils.ContentData.ContentData.isError(data) || !data.isTextContent) ? '' : data.text;
|
|
134
|
+
|
|
135
|
+
const config =
|
|
136
|
+
new UI.InplaceEditor.Config(this.editingCommitted.bind(this), () => this.editingCancelled(), undefined);
|
|
137
|
+
|
|
138
|
+
const editorHandles = UI.InplaceEditor.InplaceEditor.startEditing(textNode, config);
|
|
139
|
+
if (!editorHandles) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
this.editing = {
|
|
144
|
+
commit: editorHandles.commit,
|
|
145
|
+
cancel: editorHandles.cancel,
|
|
146
|
+
editor: undefined,
|
|
147
|
+
resize: () => {},
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const componentSelection = this.listItemElement.getComponentSelection();
|
|
151
|
+
componentSelection?.selectAllChildren(textNode);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
private async editingCommitted(element: Element, newText: string, oldText: string|null): Promise<void> {
|
|
155
|
+
this.editing = null;
|
|
156
|
+
|
|
157
|
+
if (newText !== oldText) {
|
|
158
|
+
await this.styleSheetHeader.cssModel().setStyleSheetText(this.styleSheetHeader.id, newText, false);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
this.editingCancelled();
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
private editingCancelled(): void {
|
|
165
|
+
this.editing = null;
|
|
166
|
+
void this.onpopulate();
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
isEditing(): boolean {
|
|
170
|
+
return this.editing !== null;
|
|
171
|
+
}
|
|
94
172
|
}
|