chrome-devtools-frontend 1.0.1559913 → 1.0.1561080
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/front_end/core/host/InspectorFrontendHostStub.ts +0 -3
- package/front_end/core/platform/ArrayUtilities.ts +13 -0
- package/front_end/core/root/Runtime.ts +0 -5
- package/front_end/core/sdk/DOMModel.ts +8 -0
- package/front_end/core/sdk/NetworkManager.ts +4 -0
- package/front_end/core/sdk/NetworkRequest.ts +9 -0
- package/front_end/core/sdk/OverlayModel.ts +20 -9
- package/front_end/entrypoints/main/MainImpl.ts +2 -1
- package/front_end/generated/InspectorBackendCommands.ts +4 -2
- package/front_end/generated/protocol-mapping.d.ts +7 -0
- package/front_end/generated/protocol-proxy-api.d.ts +5 -0
- package/front_end/generated/protocol.ts +24 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +23 -22
- package/front_end/models/badges/UserBadges.ts +48 -16
- package/front_end/models/greendev/Prototypes.ts +6 -1
- package/front_end/models/trace/extras/TraceTree.ts +1 -1
- package/front_end/models/trace/handlers/PageLoadMetricsHandler.ts +8 -3
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +11 -142
- package/front_end/panels/ai_assistance/PatchWidget.ts +90 -72
- package/front_end/panels/ai_assistance/ai_assistance.ts +1 -0
- package/front_end/panels/ai_assistance/components/ChatInput.ts +701 -0
- package/front_end/panels/ai_assistance/components/ChatView.ts +71 -1268
- package/front_end/panels/ai_assistance/components/UserActionRow.ts +514 -31
- package/front_end/panels/ai_assistance/components/chatInput.css +387 -0
- package/front_end/panels/ai_assistance/components/chatView.css +38 -599
- package/front_end/panels/ai_assistance/components/userActionRow.css +230 -0
- package/front_end/panels/autofill/AutofillView.ts +2 -2
- package/front_end/panels/changes/ChangesView.ts +15 -1
- package/front_end/panels/changes/changesView.css +6 -0
- package/front_end/panels/common/BadgeNotification.ts +44 -58
- package/front_end/panels/common/CopyChangesToPrompt.ts +233 -0
- package/front_end/panels/common/common.ts +1 -0
- package/front_end/panels/elements/ElementsTreeElement.ts +183 -359
- package/front_end/panels/elements/ElementsTreeOutline.ts +0 -6
- package/front_end/panels/elements/ShortcutTreeElement.ts +57 -50
- package/front_end/panels/elements/StylePropertiesSection.ts +1 -3
- package/front_end/panels/elements/components/AdornerManager.ts +5 -149
- package/front_end/panels/issues/HiddenIssuesRow.ts +1 -2
- package/front_end/panels/issues/IssueKindView.ts +2 -4
- package/front_end/panels/issues/IssueView.ts +2 -4
- package/front_end/panels/network/NetworkDataGridNode.ts +65 -1
- package/front_end/panels/network/NetworkLogView.ts +2 -4
- package/front_end/panels/network/NetworkLogViewColumns.ts +9 -0
- package/front_end/panels/screencast/ScreencastApp.ts +1 -0
- package/front_end/panels/settings/SettingsScreen.ts +3 -2
- package/front_end/panels/timeline/CompatibilityTracksAppender.ts +14 -1
- package/front_end/panels/timeline/ThirdPartyTreeView.ts +1 -4
- package/front_end/panels/timeline/TimelineController.ts +185 -3
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +52 -25
- package/front_end/panels/timeline/TimelineFlameChartView.ts +1 -0
- package/front_end/panels/timeline/TimelinePanel.ts +17 -104
- package/front_end/panels/timeline/TimelineTreeView.ts +1 -0
- package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +2 -2
- package/front_end/panels/timeline/components/insights/Table.ts +3 -3
- package/front_end/panels/whats_new/ReleaseNoteText.ts +15 -9
- package/front_end/panels/whats_new/resources/WNDT.md +6 -6
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/codemirror.next/rebuild.sh +1 -1
- package/front_end/third_party/lit/rebuild.sh +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +2 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.js +9 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPResponse.d.ts +3 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPResponse.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPResponse.js +9 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPResponse.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Request.d.ts +3 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Request.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Request.js +10 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Request.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +8 -4
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +10 -1
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +13 -7
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +2 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.js +9 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPResponse.d.ts +3 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPResponse.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPResponse.js +9 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPResponse.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Request.d.ts +3 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Request.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Request.js +10 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Request.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +8 -4
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +10 -1
- package/front_end/third_party/puppeteer/package/package.json +3 -3
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +2 -3
- package/front_end/third_party/puppeteer/package/src/bidi/HTTPRequest.ts +13 -0
- package/front_end/third_party/puppeteer/package/src/bidi/HTTPResponse.ts +10 -0
- package/front_end/third_party/puppeteer/package/src/bidi/core/Request.ts +15 -0
- package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +9 -4
- package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/ui/components/adorners/Adorner.ts +8 -68
- package/front_end/ui/legacy/TabbedPane.ts +1 -1
- package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
- package/package.json +2 -1
|
@@ -33,6 +33,8 @@
|
|
|
33
33
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
34
34
|
*/
|
|
35
35
|
|
|
36
|
+
import '../../ui/components/adorners/adorners.js';
|
|
37
|
+
|
|
36
38
|
import * as Common from '../../core/common/common.js';
|
|
37
39
|
import * as Host from '../../core/host/host.js';
|
|
38
40
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
@@ -47,12 +49,12 @@ import * as TextUtils from '../../models/text_utils/text_utils.js';
|
|
|
47
49
|
import * as Workspace from '../../models/workspace/workspace.js';
|
|
48
50
|
import * as CodeMirror from '../../third_party/codemirror.next/codemirror.next.js';
|
|
49
51
|
import type {DirectiveResult} from '../../third_party/lit/lib/directive.js';
|
|
50
|
-
import * as Adorners from '../../ui/components/adorners/adorners.js';
|
|
52
|
+
import type * as Adorners from '../../ui/components/adorners/adorners.js';
|
|
51
53
|
import * as Buttons from '../../ui/components/buttons/buttons.js';
|
|
52
54
|
import * as CodeHighlighter from '../../ui/components/code_highlighter/code_highlighter.js';
|
|
53
55
|
import * as Highlighting from '../../ui/components/highlighting/highlighting.js';
|
|
54
56
|
import * as TextEditor from '../../ui/components/text_editor/text_editor.js';
|
|
55
|
-
import {
|
|
57
|
+
import {Icon} from '../../ui/kit/kit.js';
|
|
56
58
|
import * as Components from '../../ui/legacy/components/utils/utils.js';
|
|
57
59
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
58
60
|
import * as Lit from '../../ui/lit/lit.js';
|
|
@@ -69,7 +71,7 @@ import {type ElementsTreeOutline, MappedCharToEntity} from './ElementsTreeOutlin
|
|
|
69
71
|
import {ImagePreviewPopover} from './ImagePreviewPopover.js';
|
|
70
72
|
import {getRegisteredDecorators, type MarkerDecorator, type MarkerDecoratorRegistration} from './MarkerDecorator.js';
|
|
71
73
|
|
|
72
|
-
const {html, nothing, render, Directives: {ref
|
|
74
|
+
const {html, nothing, render, Directives: {ref}} = Lit;
|
|
73
75
|
|
|
74
76
|
const UIStrings = {
|
|
75
77
|
/**
|
|
@@ -394,20 +396,26 @@ export interface ViewInput {
|
|
|
394
396
|
|
|
395
397
|
showViewSourceAdorner: boolean;
|
|
396
398
|
showScrollAdorner: boolean;
|
|
397
|
-
|
|
399
|
+
showScrollSnapAdorner: boolean;
|
|
398
400
|
nodeInfo?: DocumentFragment;
|
|
399
401
|
topLayerIndex: number;
|
|
402
|
+
scrollSnapAdornerActive: boolean;
|
|
400
403
|
|
|
401
404
|
onGutterClick: (e: Event) => void;
|
|
402
|
-
onAdornerAdded: (adorner: Adorners.Adorner.Adorner) => void;
|
|
403
|
-
onAdornerRemoved: (adorner: Adorners.Adorner.Adorner) => void;
|
|
404
405
|
onContainerAdornerClick: (e: Event) => void;
|
|
405
406
|
onFlexAdornerClick: (e: Event) => void;
|
|
406
407
|
onGridAdornerClick: (e: Event) => void;
|
|
407
408
|
onMediaAdornerClick: (e: Event) => void;
|
|
408
409
|
onPopoverAdornerClick: (e: Event) => void;
|
|
410
|
+
onScrollSnapAdornerClick: (e: Event) => void;
|
|
409
411
|
onTopLayerAdornerClick: (e: Event) => void;
|
|
410
412
|
onViewSourceAdornerClick: () => void;
|
|
413
|
+
onSlotAdornerClick: (e: Event) => void;
|
|
414
|
+
showSlotAdorner: boolean;
|
|
415
|
+
slotName?: string;
|
|
416
|
+
showStartingStyleAdorner: boolean;
|
|
417
|
+
startingStyleAdornerActive: boolean;
|
|
418
|
+
onStartingStyleAdornerClick: (e: Event) => void;
|
|
411
419
|
}
|
|
412
420
|
|
|
413
421
|
export interface ViewOutput {
|
|
@@ -416,51 +424,39 @@ export interface ViewOutput {
|
|
|
416
424
|
contentElement?: HTMLElement;
|
|
417
425
|
}
|
|
418
426
|
|
|
419
|
-
function adornerRef(
|
|
427
|
+
export function adornerRef(): DirectiveResult<typeof Lit.Directives.RefDirective> {
|
|
420
428
|
let adorner: Adorners.Adorner.Adorner|undefined;
|
|
421
429
|
return ref((el?: Element) => {
|
|
422
430
|
if (adorner) {
|
|
423
|
-
|
|
431
|
+
ElementsPanel.instance().deregisterAdorner(adorner);
|
|
424
432
|
}
|
|
425
433
|
adorner = el as Adorners.Adorner.Adorner;
|
|
426
|
-
|
|
427
434
|
if (adorner) {
|
|
428
435
|
if (ElementsPanel.instance().isAdornerEnabled(adorner.name)) {
|
|
429
436
|
adorner.show();
|
|
430
437
|
} else {
|
|
431
438
|
adorner.hide();
|
|
432
439
|
}
|
|
433
|
-
|
|
440
|
+
ElementsPanel.instance().registerAdorner(adorner);
|
|
434
441
|
}
|
|
435
442
|
});
|
|
436
443
|
}
|
|
437
444
|
|
|
445
|
+
function handleAdornerKeydown(cb: (event: Event) => void): (event: KeyboardEvent) => void {
|
|
446
|
+
return (event: KeyboardEvent) => {
|
|
447
|
+
if (event.code === 'Enter' || event.code === 'Space') {
|
|
448
|
+
cb(event);
|
|
449
|
+
event.preventDefault();
|
|
450
|
+
event.stopPropagation();
|
|
451
|
+
}
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
|
|
438
455
|
export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLElement): void => {
|
|
439
|
-
const
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
const containerAdornerConfig = ElementsComponents.AdornerManager.getRegisteredAdorner(
|
|
444
|
-
ElementsComponents.AdornerManager.RegisteredAdorners.CONTAINER);
|
|
445
|
-
const flexAdornerConfig =
|
|
446
|
-
ElementsComponents.AdornerManager.getRegisteredAdorner(ElementsComponents.AdornerManager.RegisteredAdorners.FLEX);
|
|
447
|
-
const gridAdornerConfig =
|
|
448
|
-
ElementsComponents.AdornerManager.getRegisteredAdorner(ElementsComponents.AdornerManager.RegisteredAdorners.GRID);
|
|
449
|
-
const subgridAdornerConfig = ElementsComponents.AdornerManager.getRegisteredAdorner(
|
|
450
|
-
ElementsComponents.AdornerManager.RegisteredAdorners.SUBGRID);
|
|
451
|
-
const gridLanesAdornerConfig = ElementsComponents.AdornerManager.getRegisteredAdorner(
|
|
452
|
-
ElementsComponents.AdornerManager.RegisteredAdorners.GRID_LANES);
|
|
453
|
-
const mediaAdornerConfig = ElementsComponents.AdornerManager.getRegisteredAdorner(
|
|
454
|
-
ElementsComponents.AdornerManager.RegisteredAdorners.MEDIA);
|
|
455
|
-
const popoverAdornerConfig = ElementsComponents.AdornerManager.getRegisteredAdorner(
|
|
456
|
-
ElementsComponents.AdornerManager.RegisteredAdorners.POPOVER);
|
|
457
|
-
const topLayerAdornerConfig = ElementsComponents.AdornerManager.getRegisteredAdorner(
|
|
458
|
-
ElementsComponents.AdornerManager.RegisteredAdorners.TOP_LAYER);
|
|
459
|
-
const scrollAdornerConfig = ElementsComponents.AdornerManager.getRegisteredAdorner(
|
|
460
|
-
ElementsComponents.AdornerManager.RegisteredAdorners.SCROLL);
|
|
461
|
-
const hasAdorners = input.adorners?.size || input.showAdAdorner || input.showContainerAdorner ||
|
|
462
|
-
input.showFlexAdorner || input.showGridAdorner || input.showGridLanesAdorner || input.showMediaAdorner ||
|
|
463
|
-
input.showPopoverAdorner || input.showTopLayerAdorner || input.showViewSourceAdorner || input.showScrollAdorner;
|
|
456
|
+
const hasAdorners = input.showAdAdorner || input.showContainerAdorner || input.showFlexAdorner ||
|
|
457
|
+
input.showGridAdorner || input.showGridLanesAdorner || input.showMediaAdorner || input.showPopoverAdorner ||
|
|
458
|
+
input.showTopLayerAdorner || input.showViewSourceAdorner || input.showScrollAdorner ||
|
|
459
|
+
input.showScrollSnapAdorner || input.showSlotAdorner || input.showStartingStyleAdorner;
|
|
464
460
|
// clang-format off
|
|
465
461
|
render(html`
|
|
466
462
|
<div ${ref(el => { output.contentElement = el as HTMLElement; })}>
|
|
@@ -472,34 +468,31 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
|
|
|
472
468
|
${hasAdorners ? html`<div class="adorner-container ${!hasAdorners ? 'hidden' : ''}">
|
|
473
469
|
${input.showAdAdorner ? html`<devtools-adorner
|
|
474
470
|
aria-label=${i18nString(UIStrings.thisFrameWasIdentifiedAsAnAd)}
|
|
475
|
-
.
|
|
476
|
-
|
|
477
|
-
|
|
471
|
+
.name=${ElementsComponents.AdornerManager.RegisteredAdorners.AD}
|
|
472
|
+
jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.AD)}
|
|
473
|
+
${adornerRef()}>
|
|
474
|
+
<span>${ElementsComponents.AdornerManager.RegisteredAdorners.AD}</span>
|
|
478
475
|
</devtools-adorner>` : nothing}
|
|
479
476
|
${input.showViewSourceAdorner ? html`<devtools-adorner
|
|
480
|
-
.
|
|
477
|
+
.name=${ElementsComponents.AdornerManager.RegisteredAdorners.VIEW_SOURCE}
|
|
478
|
+
jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.VIEW_SOURCE)}
|
|
481
479
|
aria-label=${i18nString(UIStrings.viewSourceCode)}
|
|
482
480
|
@click=${input.onViewSourceAdornerClick}
|
|
483
|
-
${adornerRef(
|
|
484
|
-
<span>${
|
|
481
|
+
${adornerRef()}>
|
|
482
|
+
<span>${ElementsComponents.AdornerManager.RegisteredAdorners.VIEW_SOURCE}</span>
|
|
485
483
|
</devtools-adorner>` : nothing}
|
|
486
484
|
${input.showContainerAdorner ? html`<devtools-adorner
|
|
487
485
|
class=clickable
|
|
488
486
|
role=button
|
|
489
487
|
toggleable=true
|
|
490
488
|
tabindex=0
|
|
491
|
-
.
|
|
492
|
-
jslog=${VisualLogging.adorner(
|
|
489
|
+
.name=${ElementsComponents.AdornerManager.RegisteredAdorners.CONTAINER}
|
|
490
|
+
jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.CONTAINER).track({click: true})}
|
|
493
491
|
active=${input.containerAdornerActive}
|
|
494
492
|
aria-label=${input.containerAdornerActive ? i18nString(UIStrings.enableContainer) : i18nString(UIStrings.disableContainer)}
|
|
495
493
|
@click=${input.onContainerAdornerClick}
|
|
496
|
-
@keydown=${(
|
|
497
|
-
|
|
498
|
-
input.onContainerAdornerClick(event);
|
|
499
|
-
event.stopPropagation();
|
|
500
|
-
}
|
|
501
|
-
}}
|
|
502
|
-
${adornerRef(input)}>
|
|
494
|
+
@keydown=${handleAdornerKeydown(input.onContainerAdornerClick)}
|
|
495
|
+
${adornerRef()}>
|
|
503
496
|
<span class="adorner-with-icon">
|
|
504
497
|
<devtools-icon name="container"></devtools-icon>
|
|
505
498
|
<span>${input.containerType}</span>
|
|
@@ -510,78 +503,55 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
|
|
|
510
503
|
role=button
|
|
511
504
|
toggleable=true
|
|
512
505
|
tabindex=0
|
|
513
|
-
.
|
|
514
|
-
jslog=${VisualLogging.adorner(
|
|
506
|
+
.name=${ElementsComponents.AdornerManager.RegisteredAdorners.FLEX}
|
|
507
|
+
jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.FLEX).track({click: true})}
|
|
515
508
|
active=${input.flexAdornerActive}
|
|
516
509
|
aria-label=${input.flexAdornerActive ? i18nString(UIStrings.disableFlexMode) : i18nString(UIStrings.enableFlexMode)}
|
|
517
510
|
@click=${input.onFlexAdornerClick}
|
|
518
|
-
@keydown=${(
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
event.stopPropagation();
|
|
522
|
-
}
|
|
523
|
-
}}
|
|
524
|
-
${adornerRef(input)}>
|
|
525
|
-
<span>${flexAdornerConfig.name}</span>
|
|
511
|
+
@keydown=${handleAdornerKeydown(input.onFlexAdornerClick)}
|
|
512
|
+
${adornerRef()}>
|
|
513
|
+
<span>${ElementsComponents.AdornerManager.RegisteredAdorners.FLEX}</span>
|
|
526
514
|
</devtools-adorner>`: nothing}
|
|
527
515
|
${input.showGridAdorner ? html`<devtools-adorner
|
|
528
516
|
class=clickable
|
|
529
517
|
role=button
|
|
530
518
|
toggleable=true
|
|
531
519
|
tabindex=0
|
|
532
|
-
.
|
|
533
|
-
|
|
534
|
-
jslogContext: input.isSubgrid ? subgridAdornerConfig.name : gridAdornerConfig.name,
|
|
535
|
-
}}
|
|
536
|
-
jslog=${VisualLogging.adorner(input.isSubgrid ? subgridAdornerConfig.name : gridAdornerConfig.name).track({click: true})}
|
|
520
|
+
.name=${input.isSubgrid ? ElementsComponents.AdornerManager.RegisteredAdorners.SUBGRID : ElementsComponents.AdornerManager.RegisteredAdorners.GRID}
|
|
521
|
+
jslog=${VisualLogging.adorner(input.isSubgrid ? ElementsComponents.AdornerManager.RegisteredAdorners.SUBGRID : ElementsComponents.AdornerManager.RegisteredAdorners.GRID).track({click: true})}
|
|
537
522
|
active=${input.gridAdornerActive}
|
|
538
523
|
aria-label=${input.gridAdornerActive ? i18nString(UIStrings.disableGridMode) : i18nString(UIStrings.enableGridMode)}
|
|
539
524
|
@click=${input.onGridAdornerClick}
|
|
540
|
-
@keydown=${(
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
event.stopPropagation();
|
|
544
|
-
}
|
|
545
|
-
}}
|
|
546
|
-
${adornerRef(input)}>
|
|
547
|
-
<span>${input.isSubgrid ? subgridAdornerConfig.name : gridAdornerConfig.name}</span>
|
|
525
|
+
@keydown=${handleAdornerKeydown(input.onGridAdornerClick)}
|
|
526
|
+
${adornerRef()}>
|
|
527
|
+
<span>${input.isSubgrid ? ElementsComponents.AdornerManager.RegisteredAdorners.SUBGRID : ElementsComponents.AdornerManager.RegisteredAdorners.GRID}</span>
|
|
548
528
|
</devtools-adorner>`: nothing}
|
|
549
529
|
${input.showGridLanesAdorner ? html`<devtools-adorner
|
|
550
530
|
class=clickable
|
|
551
531
|
role=button
|
|
552
532
|
toggleable=true
|
|
553
533
|
tabindex=0
|
|
554
|
-
.
|
|
555
|
-
jslog=${VisualLogging.adorner(
|
|
534
|
+
.name=${ElementsComponents.AdornerManager.RegisteredAdorners.GRID_LANES}
|
|
535
|
+
jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.GRID_LANES).track({click: true})}
|
|
556
536
|
active=${input.gridAdornerActive}
|
|
557
537
|
aria-label=${input.gridAdornerActive ? i18nString(UIStrings.disableGridLanesMode) : i18nString(UIStrings.enableGridLanesMode)}
|
|
558
538
|
@click=${input.onGridAdornerClick}
|
|
559
|
-
@keydown=${(
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
event.stopPropagation();
|
|
563
|
-
}
|
|
564
|
-
}}
|
|
565
|
-
${adornerRef(input)}>
|
|
566
|
-
<span>${gridLanesAdornerConfig.name}</span>
|
|
539
|
+
@keydown=${handleAdornerKeydown(input.onGridAdornerClick)}
|
|
540
|
+
${adornerRef()}>
|
|
541
|
+
<span>${ElementsComponents.AdornerManager.RegisteredAdorners.GRID_LANES}</span>
|
|
567
542
|
</devtools-adorner>`: nothing}
|
|
568
543
|
${input.showMediaAdorner ? html`<devtools-adorner
|
|
569
544
|
class=clickable
|
|
570
545
|
role=button
|
|
571
546
|
tabindex=0
|
|
572
|
-
.
|
|
573
|
-
jslog=${VisualLogging.adorner(
|
|
547
|
+
.name=${ElementsComponents.AdornerManager.RegisteredAdorners.MEDIA}
|
|
548
|
+
jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.MEDIA).track({click: true})}
|
|
574
549
|
aria-label=${i18nString(UIStrings.openMediaPanel)}
|
|
575
550
|
@click=${input.onMediaAdornerClick}
|
|
576
|
-
@keydown=${(
|
|
577
|
-
|
|
578
|
-
input.onMediaAdornerClick(event);
|
|
579
|
-
event.stopPropagation();
|
|
580
|
-
}
|
|
581
|
-
}}
|
|
582
|
-
${adornerRef(input)}>
|
|
551
|
+
@keydown=${handleAdornerKeydown(input.onMediaAdornerClick)}
|
|
552
|
+
${adornerRef()}>
|
|
583
553
|
<span class="adorner-with-icon">
|
|
584
|
-
${
|
|
554
|
+
${ElementsComponents.AdornerManager.RegisteredAdorners.MEDIA}<devtools-icon name="select-element"></devtools-icon>
|
|
585
555
|
</span>
|
|
586
556
|
</devtools-adorner>`: nothing}
|
|
587
557
|
${input.showPopoverAdorner ? html`<devtools-adorner
|
|
@@ -589,48 +559,74 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
|
|
|
589
559
|
role=button
|
|
590
560
|
toggleable=true
|
|
591
561
|
tabindex=0
|
|
592
|
-
.
|
|
593
|
-
jslog=${VisualLogging.adorner(
|
|
562
|
+
.name=${ElementsComponents.AdornerManager.RegisteredAdorners.POPOVER}
|
|
563
|
+
jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.POPOVER).track({click: true})}
|
|
594
564
|
active=${input.popoverAdornerActive}
|
|
595
565
|
aria-label=${input.popoverAdornerActive ? i18nString(UIStrings.stopForceOpenPopover) : i18nString(UIStrings.forceOpenPopover)}
|
|
596
566
|
@click=${input.onPopoverAdornerClick}
|
|
597
|
-
@keydown=${(
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
event.stopPropagation();
|
|
601
|
-
}
|
|
602
|
-
}}
|
|
603
|
-
${adornerRef(input)}>
|
|
604
|
-
<span>${popoverAdornerConfig.name}</span>
|
|
567
|
+
@keydown=${handleAdornerKeydown(input.onPopoverAdornerClick)}
|
|
568
|
+
${adornerRef()}>
|
|
569
|
+
<span>${ElementsComponents.AdornerManager.RegisteredAdorners.POPOVER}</span>
|
|
605
570
|
</devtools-adorner>`: nothing}
|
|
606
571
|
${input.showTopLayerAdorner ? html`<devtools-adorner
|
|
607
572
|
class=clickable
|
|
608
573
|
role=button
|
|
609
574
|
tabindex=0
|
|
610
|
-
.
|
|
611
|
-
jslog=${VisualLogging.adorner(
|
|
575
|
+
.name=${ElementsComponents.AdornerManager.RegisteredAdorners.TOP_LAYER}
|
|
576
|
+
jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.TOP_LAYER).track({click: true})}
|
|
612
577
|
aria-label=${i18nString(UIStrings.reveal)}
|
|
613
578
|
@click=${input.onTopLayerAdornerClick}
|
|
614
|
-
@keydown=${(
|
|
615
|
-
|
|
616
|
-
input.onTopLayerAdornerClick(event);
|
|
617
|
-
event.stopPropagation();
|
|
618
|
-
}
|
|
619
|
-
}}
|
|
620
|
-
${adornerRef(input)}>
|
|
579
|
+
@keydown=${handleAdornerKeydown(input.onTopLayerAdornerClick)}
|
|
580
|
+
${adornerRef()}>
|
|
621
581
|
<span class="adorner-with-icon">
|
|
622
582
|
${`top-layer (${input.topLayerIndex})`}<devtools-icon name="select-element"></devtools-icon>
|
|
623
583
|
</span>
|
|
624
584
|
</devtools-adorner>`: nothing}
|
|
625
|
-
${
|
|
626
|
-
|
|
627
|
-
|
|
585
|
+
${input.showStartingStyleAdorner ? html`<devtools-adorner
|
|
586
|
+
class="starting-style"
|
|
587
|
+
.name=${ElementsComponents.AdornerManager.RegisteredAdorners.STARTING_STYLE}
|
|
588
|
+
jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.STARTING_STYLE).track({click: true})}
|
|
589
|
+
active=${input.startingStyleAdornerActive}
|
|
590
|
+
toggleable=true
|
|
591
|
+
aria-label=${input.startingStyleAdornerActive ? i18nString(UIStrings.disableStartingStyle) : i18nString(UIStrings.enableStartingStyle)}
|
|
592
|
+
@click=${input.onStartingStyleAdornerClick}
|
|
593
|
+
@keydown=${handleAdornerKeydown(input.onStartingStyleAdornerClick)}
|
|
594
|
+
${adornerRef()}>
|
|
595
|
+
<span>${ElementsComponents.AdornerManager.RegisteredAdorners.STARTING_STYLE}</span>
|
|
596
|
+
</devtools-adorner>` : nothing}
|
|
628
597
|
${input.showScrollAdorner ? html`<devtools-adorner
|
|
629
598
|
class="scroll"
|
|
630
|
-
.
|
|
599
|
+
.name=${ElementsComponents.AdornerManager.RegisteredAdorners.SCROLL}
|
|
600
|
+
jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.SCROLL).track({click: true})}
|
|
631
601
|
aria-label=${i18nString(UIStrings.elementHasScrollableOverflow)}
|
|
632
|
-
${adornerRef(
|
|
633
|
-
<span>${
|
|
602
|
+
${adornerRef()}>
|
|
603
|
+
<span>${ElementsComponents.AdornerManager.RegisteredAdorners.SCROLL}</span>
|
|
604
|
+
</devtools-adorner>` : nothing}
|
|
605
|
+
${input.showSlotAdorner ? html`<devtools-adorner
|
|
606
|
+
class=clickable
|
|
607
|
+
role=button
|
|
608
|
+
tabindex=0
|
|
609
|
+
.name=${ElementsComponents.AdornerManager.RegisteredAdorners.SLOT}
|
|
610
|
+
jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.SLOT).track({click: true})}
|
|
611
|
+
@click=${input.onSlotAdornerClick}
|
|
612
|
+
@mousedown=${(e: Event) => e.stopPropagation()}
|
|
613
|
+
${adornerRef()}>
|
|
614
|
+
<span class="adorner-with-icon">
|
|
615
|
+
<devtools-icon name="select-element"></devtools-icon>
|
|
616
|
+
<span>${ElementsComponents.AdornerManager.RegisteredAdorners.SLOT}</span>
|
|
617
|
+
</span>
|
|
618
|
+
</devtools-adorner>`: nothing}
|
|
619
|
+
${input.showScrollSnapAdorner ? html`<devtools-adorner
|
|
620
|
+
class="scroll-snap"
|
|
621
|
+
.name=${ElementsComponents.AdornerManager.RegisteredAdorners.SCROLL_SNAP}
|
|
622
|
+
jslog=${VisualLogging.adorner(ElementsComponents.AdornerManager.RegisteredAdorners.SCROLL_SNAP).track({click: true})}
|
|
623
|
+
active=${input.scrollSnapAdornerActive}
|
|
624
|
+
toggleable=true
|
|
625
|
+
aria-label=${input.scrollSnapAdornerActive ? i18nString(UIStrings.disableScrollSnap) : i18nString(UIStrings.enableScrollSnap)}
|
|
626
|
+
@click=${input.onScrollSnapAdornerClick}
|
|
627
|
+
@keydown=${handleAdornerKeydown(input.onScrollSnapAdornerClick)}
|
|
628
|
+
${adornerRef()}>
|
|
629
|
+
<span>${ElementsComponents.AdornerManager.RegisteredAdorners.SCROLL_SNAP}</span>
|
|
634
630
|
</devtools-adorner>` : nothing}
|
|
635
631
|
</div>`: nothing}
|
|
636
632
|
</div>
|
|
@@ -665,12 +661,14 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
665
661
|
readonly tagTypeContext: TagTypeContext;
|
|
666
662
|
|
|
667
663
|
#adornersThrottler = new Common.Throttler.Throttler(100);
|
|
668
|
-
#adorners = new Set<Adorners.Adorner.Adorner>();
|
|
669
664
|
#nodeInfo?: DocumentFragment;
|
|
670
665
|
#containerAdornerActive = false;
|
|
671
666
|
#flexAdornerActive = false;
|
|
672
667
|
#gridAdornerActive = false;
|
|
673
668
|
#popoverAdornerActive = false;
|
|
669
|
+
|
|
670
|
+
#scrollSnapAdornerActive = false;
|
|
671
|
+
#startingStyleAdornerActive = false;
|
|
674
672
|
#layout: SDK.CSSModel.LayoutProperties|null = null;
|
|
675
673
|
|
|
676
674
|
constructor(node: SDK.DOMModel.DOMNode, isClosingTag?: boolean) {
|
|
@@ -701,8 +699,6 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
701
699
|
tagType: TagType.OPENING,
|
|
702
700
|
canAddAttributes: this.nodeInternal.nodeType() === Node.ELEMENT_NODE,
|
|
703
701
|
};
|
|
704
|
-
void this.updateStyleAdorners();
|
|
705
|
-
|
|
706
702
|
void this.#updateAdorners();
|
|
707
703
|
}
|
|
708
704
|
this.expandAllButtonElement = null;
|
|
@@ -778,15 +774,10 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
778
774
|
}
|
|
779
775
|
}
|
|
780
776
|
|
|
781
|
-
get adorners(): Adorners.Adorner.Adorner[] {
|
|
782
|
-
return Array.from(this.#adorners);
|
|
783
|
-
}
|
|
784
|
-
|
|
785
777
|
performUpdate(): void {
|
|
786
778
|
DEFAULT_VIEW(
|
|
787
779
|
{
|
|
788
780
|
containerAdornerActive: this.#containerAdornerActive,
|
|
789
|
-
adorners: !this.isClosingTag() ? this.#adorners : undefined,
|
|
790
781
|
showAdAdorner: this.nodeInternal.isAdFrameNode(),
|
|
791
782
|
showContainerAdorner: Boolean(this.#layout?.containerType) && !this.isClosingTag(),
|
|
792
783
|
containerType: this.#layout?.containerType,
|
|
@@ -805,21 +796,30 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
805
796
|
showScrollAdorner: ((this.node().nodeName() === 'HTML' && this.node().ownerDocument?.isScrollable()) ||
|
|
806
797
|
(this.node().nodeName() !== '#document' && this.node().isScrollable())) &&
|
|
807
798
|
!this.isClosingTag(),
|
|
799
|
+
showScrollSnapAdorner: Boolean(this.#layout?.hasScroll) && !this.isClosingTag(),
|
|
800
|
+
scrollSnapAdornerActive: this.#scrollSnapAdornerActive,
|
|
801
|
+
showSlotAdorner: Boolean(this.nodeInternal.assignedSlot) && !this.isClosingTag(),
|
|
802
|
+
showStartingStyleAdorner: this.nodeInternal.affectedByStartingStyles() && !this.isClosingTag(),
|
|
803
|
+
startingStyleAdornerActive: this.#startingStyleAdornerActive,
|
|
808
804
|
nodeInfo: this.#nodeInfo,
|
|
805
|
+
onStartingStyleAdornerClick: (event: Event) => this.#onStartingStyleAdornerClick(event),
|
|
806
|
+
onSlotAdornerClick: () => {
|
|
807
|
+
if (this.nodeInternal.assignedSlot) {
|
|
808
|
+
const deferredNode = this.nodeInternal.assignedSlot.deferredNode;
|
|
809
|
+
deferredNode.resolve(node => {
|
|
810
|
+
void Common.Revealer.reveal(node);
|
|
811
|
+
});
|
|
812
|
+
}
|
|
813
|
+
},
|
|
809
814
|
topLayerIndex: this.node().topLayerIndex(),
|
|
810
815
|
onViewSourceAdornerClick: this.revealHTMLInSources.bind(this),
|
|
811
816
|
onGutterClick: this.showContextMenu.bind(this),
|
|
812
|
-
onAdornerAdded: adorner => {
|
|
813
|
-
ElementsPanel.instance().registerAdorner(adorner);
|
|
814
|
-
},
|
|
815
|
-
onAdornerRemoved: adorner => {
|
|
816
|
-
ElementsPanel.instance().deregisterAdorner(adorner);
|
|
817
|
-
},
|
|
818
817
|
onContainerAdornerClick: (event: Event) => this.#onContainerAdornerClick(event),
|
|
819
818
|
onFlexAdornerClick: (event: Event) => this.#onFlexAdornerClick(event),
|
|
820
819
|
onGridAdornerClick: (event: Event) => this.#onGridAdornerClick(event),
|
|
821
820
|
onMediaAdornerClick: (event: Event) => this.#onMediaAdornerClick(event),
|
|
822
821
|
onPopoverAdornerClick: (event: Event) => this.#onPopoverAdornerClick(event),
|
|
822
|
+
onScrollSnapAdornerClick: (event: Event) => this.#onScrollSnapAdornerClick(event),
|
|
823
823
|
onTopLayerAdornerClick: () => {
|
|
824
824
|
if (!this.treeOutline) {
|
|
825
825
|
return;
|
|
@@ -1042,25 +1042,6 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
1042
1042
|
this.#expandedChildrenLimit = expandedChildrenLimit;
|
|
1043
1043
|
}
|
|
1044
1044
|
|
|
1045
|
-
createSlotLink(nodeShortcut: SDK.DOMModel.DOMNodeShortcut|null): void {
|
|
1046
|
-
if (!isOpeningTag(this.tagTypeContext)) {
|
|
1047
|
-
return;
|
|
1048
|
-
}
|
|
1049
|
-
if (nodeShortcut) {
|
|
1050
|
-
const config = ElementsComponents.AdornerManager.getRegisteredAdorner(
|
|
1051
|
-
ElementsComponents.AdornerManager.RegisteredAdorners.SLOT);
|
|
1052
|
-
const adorner = this.adornSlot(config);
|
|
1053
|
-
this.#adorners.add(adorner);
|
|
1054
|
-
const deferredNode = nodeShortcut.deferredNode;
|
|
1055
|
-
adorner.addEventListener('click', () => {
|
|
1056
|
-
deferredNode.resolve(node => {
|
|
1057
|
-
void Common.Revealer.reveal(node);
|
|
1058
|
-
});
|
|
1059
|
-
});
|
|
1060
|
-
adorner.addEventListener('mousedown', e => e.consume(), false);
|
|
1061
|
-
}
|
|
1062
|
-
}
|
|
1063
|
-
|
|
1064
1045
|
private createSelection(): void {
|
|
1065
1046
|
const contentElement = this.contentElement;
|
|
1066
1047
|
if (!contentElement) {
|
|
@@ -1114,15 +1095,16 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
1114
1095
|
this.nodeInternal.addEventListener(SDK.DOMModel.DOMNodeEvents.TOP_LAYER_INDEX_CHANGED, this.performUpdate, this);
|
|
1115
1096
|
this.nodeInternal.addEventListener(
|
|
1116
1097
|
SDK.DOMModel.DOMNodeEvents.SCROLLABLE_FLAG_UPDATED, this.#onScrollableFlagUpdated, this);
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
SDK.OverlayModel.Events.PERSISTENT_CONTAINER_QUERY_OVERLAY_STATE_CHANGED,
|
|
1098
|
+
this.nodeInternal.addEventListener(
|
|
1099
|
+
SDK.DOMModel.DOMNodeEvents.CONTAINER_QUERY_OVERLAY_STATE_CHANGED,
|
|
1120
1100
|
this.#onPersistentContainerQueryOverlayStateChanged, this);
|
|
1121
|
-
|
|
1122
|
-
SDK.
|
|
1101
|
+
this.nodeInternal.addEventListener(
|
|
1102
|
+
SDK.DOMModel.DOMNodeEvents.FLEX_CONTAINER_OVERLAY_STATE_CHANGED,
|
|
1123
1103
|
this.#onPersistentFlexContainerOverlayStateChanged, this);
|
|
1124
|
-
|
|
1125
|
-
SDK.
|
|
1104
|
+
this.nodeInternal.addEventListener(
|
|
1105
|
+
SDK.DOMModel.DOMNodeEvents.GRID_OVERLAY_STATE_CHANGED, this.#onPersistentGridOverlayStateChanged, this);
|
|
1106
|
+
this.nodeInternal.addEventListener(
|
|
1107
|
+
SDK.DOMModel.DOMNodeEvents.SCROLL_SNAP_OVERLAY_STATE_CHANGED, this.#onPersistentScrollSnapOverlayStateChanged,
|
|
1126
1108
|
this);
|
|
1127
1109
|
}
|
|
1128
1110
|
}
|
|
@@ -1137,49 +1119,56 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
1137
1119
|
this.nodeInternal.removeEventListener(SDK.DOMModel.DOMNodeEvents.TOP_LAYER_INDEX_CHANGED, this.performUpdate, this);
|
|
1138
1120
|
this.nodeInternal.removeEventListener(
|
|
1139
1121
|
SDK.DOMModel.DOMNodeEvents.SCROLLABLE_FLAG_UPDATED, this.#onScrollableFlagUpdated, this);
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
SDK.OverlayModel.Events.PERSISTENT_CONTAINER_QUERY_OVERLAY_STATE_CHANGED,
|
|
1122
|
+
this.nodeInternal.removeEventListener(
|
|
1123
|
+
SDK.DOMModel.DOMNodeEvents.CONTAINER_QUERY_OVERLAY_STATE_CHANGED,
|
|
1143
1124
|
this.#onPersistentContainerQueryOverlayStateChanged, this);
|
|
1144
|
-
|
|
1145
|
-
SDK.
|
|
1125
|
+
this.nodeInternal.removeEventListener(
|
|
1126
|
+
SDK.DOMModel.DOMNodeEvents.FLEX_CONTAINER_OVERLAY_STATE_CHANGED,
|
|
1146
1127
|
this.#onPersistentFlexContainerOverlayStateChanged, this);
|
|
1147
|
-
|
|
1148
|
-
SDK.
|
|
1128
|
+
this.nodeInternal.removeEventListener(
|
|
1129
|
+
SDK.DOMModel.DOMNodeEvents.GRID_OVERLAY_STATE_CHANGED, this.#onPersistentGridOverlayStateChanged, this);
|
|
1130
|
+
this.nodeInternal.removeEventListener(
|
|
1131
|
+
SDK.DOMModel.DOMNodeEvents.SCROLL_SNAP_OVERLAY_STATE_CHANGED, this.#onPersistentScrollSnapOverlayStateChanged,
|
|
1132
|
+
this);
|
|
1149
1133
|
}
|
|
1150
1134
|
|
|
1151
1135
|
#onScrollableFlagUpdated(): void {
|
|
1152
1136
|
void this.#updateAdorners();
|
|
1153
1137
|
}
|
|
1154
1138
|
|
|
1155
|
-
#onPersistentContainerQueryOverlayStateChanged(
|
|
1156
|
-
|
|
1157
|
-
const {nodeId: eventNodeId, enabled} = event.data;
|
|
1158
|
-
if (eventNodeId !== this.nodeInternal.id) {
|
|
1159
|
-
return;
|
|
1160
|
-
}
|
|
1161
|
-
this.#containerAdornerActive = enabled;
|
|
1139
|
+
#onPersistentContainerQueryOverlayStateChanged(event: Common.EventTarget.EventTargetEvent<{enabled: boolean}>): void {
|
|
1140
|
+
this.#containerAdornerActive = event.data.enabled;
|
|
1162
1141
|
this.performUpdate();
|
|
1163
1142
|
}
|
|
1164
1143
|
|
|
1165
|
-
#onPersistentFlexContainerOverlayStateChanged(
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
this.#
|
|
1144
|
+
#onPersistentFlexContainerOverlayStateChanged(event: Common.EventTarget.EventTargetEvent<{enabled: boolean}>): void {
|
|
1145
|
+
this.#flexAdornerActive = event.data.enabled;
|
|
1146
|
+
this.performUpdate();
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1149
|
+
#onPersistentGridOverlayStateChanged(event: Common.EventTarget.EventTargetEvent<{enabled: boolean}>): void {
|
|
1150
|
+
this.#gridAdornerActive = event.data.enabled;
|
|
1172
1151
|
this.performUpdate();
|
|
1173
1152
|
}
|
|
1174
1153
|
|
|
1175
|
-
#
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1154
|
+
#onPersistentScrollSnapOverlayStateChanged(event: Common.EventTarget.EventTargetEvent<{enabled: boolean}>): void {
|
|
1155
|
+
this.#scrollSnapAdornerActive = event.data.enabled;
|
|
1156
|
+
this.performUpdate();
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
#onScrollSnapAdornerClick(event: Event): void {
|
|
1160
|
+
event.stopPropagation();
|
|
1161
|
+
const node = this.node();
|
|
1162
|
+
const nodeId = node.id;
|
|
1163
|
+
if (!nodeId) {
|
|
1179
1164
|
return;
|
|
1180
1165
|
}
|
|
1181
|
-
|
|
1182
|
-
this
|
|
1166
|
+
const model = node.domModel().overlayModel();
|
|
1167
|
+
if (this.#scrollSnapAdornerActive) {
|
|
1168
|
+
model.hideScrollSnapInPersistentOverlay(nodeId);
|
|
1169
|
+
} else {
|
|
1170
|
+
model.highlightScrollSnapInPersistentOverlay(nodeId);
|
|
1171
|
+
}
|
|
1183
1172
|
}
|
|
1184
1173
|
|
|
1185
1174
|
override onattach(): void {
|
|
@@ -2896,69 +2885,6 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
2896
2885
|
});
|
|
2897
2886
|
}
|
|
2898
2887
|
|
|
2899
|
-
// TODO: add unit tests for adorner-related methods after component and TypeScript works are done
|
|
2900
|
-
adorn({name}: {name: string}, content?: HTMLElement): Adorners.Adorner.Adorner {
|
|
2901
|
-
let adornerContent = content;
|
|
2902
|
-
if (!adornerContent) {
|
|
2903
|
-
adornerContent = document.createElement('span');
|
|
2904
|
-
adornerContent.textContent = name;
|
|
2905
|
-
}
|
|
2906
|
-
const adorner = new Adorners.Adorner.Adorner();
|
|
2907
|
-
adorner.data = {
|
|
2908
|
-
name,
|
|
2909
|
-
content: adornerContent,
|
|
2910
|
-
jslogContext: name,
|
|
2911
|
-
};
|
|
2912
|
-
if (isOpeningTag(this.tagTypeContext)) {
|
|
2913
|
-
this.#adorners.add(adorner);
|
|
2914
|
-
ElementsPanel.instance().registerAdorner(adorner);
|
|
2915
|
-
this.updateAdorners();
|
|
2916
|
-
}
|
|
2917
|
-
return adorner;
|
|
2918
|
-
}
|
|
2919
|
-
|
|
2920
|
-
adornSlot({name}: {name: string}): Adorners.Adorner.Adorner {
|
|
2921
|
-
const linkIcon = createIcon('select-element');
|
|
2922
|
-
const slotText = document.createElement('span');
|
|
2923
|
-
slotText.textContent = name;
|
|
2924
|
-
const adornerContent = document.createElement('span');
|
|
2925
|
-
adornerContent.append(linkIcon);
|
|
2926
|
-
adornerContent.append(slotText);
|
|
2927
|
-
adornerContent.classList.add('adorner-with-icon');
|
|
2928
|
-
const adorner = new Adorners.Adorner.Adorner();
|
|
2929
|
-
adorner.data = {
|
|
2930
|
-
name,
|
|
2931
|
-
content: adornerContent,
|
|
2932
|
-
jslogContext: 'slot',
|
|
2933
|
-
};
|
|
2934
|
-
this.#adorners.add(adorner);
|
|
2935
|
-
ElementsPanel.instance().registerAdorner(adorner);
|
|
2936
|
-
this.updateAdorners();
|
|
2937
|
-
return adorner;
|
|
2938
|
-
}
|
|
2939
|
-
|
|
2940
|
-
removeAdorner(adornerToRemove: Adorners.Adorner.Adorner): void {
|
|
2941
|
-
ElementsPanel.instance().deregisterAdorner(adornerToRemove);
|
|
2942
|
-
adornerToRemove.remove();
|
|
2943
|
-
this.#adorners.delete(adornerToRemove);
|
|
2944
|
-
this.updateAdorners();
|
|
2945
|
-
}
|
|
2946
|
-
|
|
2947
|
-
/**
|
|
2948
|
-
* @param adornerType optional type of adorner to remove. If not provided, remove all adorners.
|
|
2949
|
-
*/
|
|
2950
|
-
removeAdornersByType(adornerType?: ElementsComponents.AdornerManager.RegisteredAdorners): void {
|
|
2951
|
-
if (!isOpeningTag(this.tagTypeContext)) {
|
|
2952
|
-
return;
|
|
2953
|
-
}
|
|
2954
|
-
|
|
2955
|
-
for (const adorner of this.#adorners) {
|
|
2956
|
-
if (adorner.name === adornerType || !adornerType) {
|
|
2957
|
-
this.removeAdorner(adorner);
|
|
2958
|
-
}
|
|
2959
|
-
}
|
|
2960
|
-
}
|
|
2961
|
-
|
|
2962
2888
|
updateAdorners(): void {
|
|
2963
2889
|
// TODO: remove adornersThrottler in favour of throttled updated (requestUpdate/performUpdate).
|
|
2964
2890
|
void this.#adornersThrottler.schedule(this.#updateAdorners.bind(this));
|
|
@@ -2966,7 +2892,6 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
2966
2892
|
|
|
2967
2893
|
async #updateAdorners(): Promise<void> {
|
|
2968
2894
|
if (this.isClosingTag()) {
|
|
2969
|
-
this.performUpdate();
|
|
2970
2895
|
return;
|
|
2971
2896
|
}
|
|
2972
2897
|
const node = this.node();
|
|
@@ -2980,41 +2905,6 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
2980
2905
|
this.performUpdate();
|
|
2981
2906
|
}
|
|
2982
2907
|
|
|
2983
|
-
// TODO: remove in favour of updateAdorners.
|
|
2984
|
-
async updateStyleAdorners(): Promise<void> {
|
|
2985
|
-
if (!isOpeningTag(this.tagTypeContext)) {
|
|
2986
|
-
return;
|
|
2987
|
-
}
|
|
2988
|
-
|
|
2989
|
-
const node = this.node();
|
|
2990
|
-
const nodeId = node.id;
|
|
2991
|
-
if (node.nodeType() === Node.COMMENT_NODE || node.nodeType() === Node.DOCUMENT_FRAGMENT_NODE ||
|
|
2992
|
-
node.nodeType() === Node.TEXT_NODE || nodeId === undefined) {
|
|
2993
|
-
return;
|
|
2994
|
-
}
|
|
2995
|
-
const layout = await node.domModel().cssModel().getLayoutPropertiesFromComputedStyle(nodeId);
|
|
2996
|
-
// TODO: move this to the template.
|
|
2997
|
-
this.removeAdornersByType(ElementsComponents.AdornerManager.RegisteredAdorners.SUBGRID);
|
|
2998
|
-
this.removeAdornersByType(ElementsComponents.AdornerManager.RegisteredAdorners.GRID);
|
|
2999
|
-
this.removeAdornersByType(ElementsComponents.AdornerManager.RegisteredAdorners.GRID_LANES);
|
|
3000
|
-
this.removeAdornersByType(ElementsComponents.AdornerManager.RegisteredAdorners.FLEX);
|
|
3001
|
-
this.removeAdornersByType(ElementsComponents.AdornerManager.RegisteredAdorners.SCROLL_SNAP);
|
|
3002
|
-
this.removeAdornersByType(ElementsComponents.AdornerManager.RegisteredAdorners.MEDIA);
|
|
3003
|
-
this.removeAdornersByType(ElementsComponents.AdornerManager.RegisteredAdorners.STARTING_STYLE);
|
|
3004
|
-
if (layout) {
|
|
3005
|
-
if (layout.hasScroll) {
|
|
3006
|
-
this.pushScrollSnapAdorner();
|
|
3007
|
-
}
|
|
3008
|
-
}
|
|
3009
|
-
|
|
3010
|
-
if (Root.Runtime.hostConfig.devToolsStartingStyleDebugging?.enabled) {
|
|
3011
|
-
const affectedByStartingStyles = node.affectedByStartingStyles();
|
|
3012
|
-
if (affectedByStartingStyles) {
|
|
3013
|
-
this.pushStartingStyleAdorner();
|
|
3014
|
-
}
|
|
3015
|
-
}
|
|
3016
|
-
}
|
|
3017
|
-
|
|
3018
2908
|
async #onPopoverAdornerClick(event: Event): Promise<void> {
|
|
3019
2909
|
event.stopPropagation();
|
|
3020
2910
|
const node = this.node();
|
|
@@ -3030,79 +2920,22 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
3030
2920
|
this.performUpdate();
|
|
3031
2921
|
}
|
|
3032
2922
|
|
|
3033
|
-
|
|
2923
|
+
#onStartingStyleAdornerClick(event: Event): void {
|
|
2924
|
+
event.stopPropagation();
|
|
3034
2925
|
const node = this.node();
|
|
3035
2926
|
const nodeId = node.id;
|
|
3036
2927
|
if (!nodeId) {
|
|
3037
2928
|
return;
|
|
3038
2929
|
}
|
|
3039
|
-
const
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
|
|
3043
|
-
|
|
3044
|
-
const onClick = ((() => {
|
|
3045
|
-
const model = node.domModel().overlayModel();
|
|
3046
|
-
if (adorner.isActive()) {
|
|
3047
|
-
model.highlightScrollSnapInPersistentOverlay(nodeId);
|
|
3048
|
-
} else {
|
|
3049
|
-
model.hideScrollSnapInPersistentOverlay(nodeId);
|
|
3050
|
-
}
|
|
3051
|
-
}) as EventListener);
|
|
3052
|
-
|
|
3053
|
-
adorner.addInteraction(onClick, {
|
|
3054
|
-
isToggle: true,
|
|
3055
|
-
shouldPropagateOnKeydown: false,
|
|
3056
|
-
ariaLabelDefault: i18nString(UIStrings.enableScrollSnap),
|
|
3057
|
-
ariaLabelActive: i18nString(UIStrings.disableScrollSnap),
|
|
3058
|
-
});
|
|
3059
|
-
|
|
3060
|
-
node.domModel().overlayModel().addEventListener(
|
|
3061
|
-
SDK.OverlayModel.Events.PERSISTENT_SCROLL_SNAP_OVERLAY_STATE_CHANGED, event => {
|
|
3062
|
-
const {nodeId: eventNodeId, enabled} = event.data;
|
|
3063
|
-
if (eventNodeId !== nodeId) {
|
|
3064
|
-
return;
|
|
3065
|
-
}
|
|
3066
|
-
adorner.toggle(enabled);
|
|
3067
|
-
});
|
|
3068
|
-
|
|
3069
|
-
this.#adorners.add(adorner);
|
|
3070
|
-
|
|
3071
|
-
if (node.domModel().overlayModel().isHighlightedScrollSnapInPersistentOverlay(nodeId)) {
|
|
3072
|
-
adorner.toggle(true);
|
|
3073
|
-
}
|
|
3074
|
-
}
|
|
3075
|
-
|
|
3076
|
-
pushStartingStyleAdorner(): void {
|
|
3077
|
-
const node = this.node();
|
|
3078
|
-
const nodeId = node.id;
|
|
3079
|
-
if (!nodeId) {
|
|
3080
|
-
return;
|
|
2930
|
+
const model = node.domModel().cssModel();
|
|
2931
|
+
if (this.#startingStyleAdornerActive) {
|
|
2932
|
+
model.forceStartingStyle(node, false);
|
|
2933
|
+
} else {
|
|
2934
|
+
model.forceStartingStyle(node, true);
|
|
3081
2935
|
}
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
const adorner = this.adorn(config);
|
|
3085
|
-
adorner.classList.add('starting-style');
|
|
3086
|
-
|
|
3087
|
-
const onClick = ((() => {
|
|
3088
|
-
const model = node.domModel().cssModel();
|
|
3089
|
-
if (adorner.isActive()) {
|
|
3090
|
-
model.forceStartingStyle(node, true);
|
|
3091
|
-
} else {
|
|
3092
|
-
model.forceStartingStyle(node, false);
|
|
3093
|
-
}
|
|
3094
|
-
}) as EventListener);
|
|
3095
|
-
|
|
3096
|
-
adorner.addInteraction(onClick, {
|
|
3097
|
-
isToggle: true,
|
|
3098
|
-
shouldPropagateOnKeydown: false,
|
|
3099
|
-
ariaLabelDefault: i18nString(UIStrings.enableStartingStyle),
|
|
3100
|
-
ariaLabelActive: i18nString(UIStrings.disableStartingStyle),
|
|
3101
|
-
});
|
|
3102
|
-
|
|
3103
|
-
this.#adorners.add(adorner);
|
|
2936
|
+
this.#startingStyleAdornerActive = !this.#startingStyleAdornerActive;
|
|
2937
|
+
this.performUpdate();
|
|
3104
2938
|
}
|
|
3105
|
-
|
|
3106
2939
|
}
|
|
3107
2940
|
|
|
3108
2941
|
export const InitialChildrenLimit = 500;
|
|
@@ -3119,15 +2952,6 @@ export const ForbiddenClosingTagElements = new Set<string>([
|
|
|
3119
2952
|
/** These tags we do not allow editing their tag name. **/
|
|
3120
2953
|
export const EditTagBlocklist = new Set<string>(['html', 'head', 'body']);
|
|
3121
2954
|
|
|
3122
|
-
export function adornerComparator(adornerA: Adorners.Adorner.Adorner, adornerB: Adorners.Adorner.Adorner): number {
|
|
3123
|
-
const compareCategories =
|
|
3124
|
-
ElementsComponents.AdornerManager.compareAdornerNamesByCategory(adornerB.name, adornerB.name);
|
|
3125
|
-
if (compareCategories === 0) {
|
|
3126
|
-
return adornerA.name.localeCompare(adornerB.name);
|
|
3127
|
-
}
|
|
3128
|
-
return compareCategories;
|
|
3129
|
-
}
|
|
3130
|
-
|
|
3131
2955
|
export function convertUnicodeCharsToHTMLEntities(text: string): {
|
|
3132
2956
|
text: string,
|
|
3133
2957
|
entityRanges: TextUtils.TextRange.SourceRange[],
|