Skip to content

Commit 1e7cdde

Browse files
danilsomsikovDevtools-frontend LUCI CQ
authored and
Devtools-frontend LUCI CQ
committed
Expose intermediate property on the CheckboxLabel and remove the usage of checkboxElement in the browser_debugger
Bug: 410500405 Change-Id: I252b3f0f8dbb183ebd40c149064936c602c962ef Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6448904 Auto-Submit: Danil Somsikov <dsv@chromium.org> Reviewed-by: Simon Zünd <szuend@chromium.org> Commit-Queue: Simon Zünd <szuend@chromium.org> Commit-Queue: Danil Somsikov <dsv@chromium.org>
1 parent 065f241 commit 1e7cdde

File tree

4 files changed

+41
-30
lines changed

4 files changed

+41
-30
lines changed

front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -198,40 +198,40 @@ export abstract class CategorizedBreakpointsSidebarPane extends UI.Widget.VBox {
198198
private createCategory(name: SDK.CategorizedBreakpoint.Category): void {
199199
const labelNode =
200200
UI.UIUtils.CheckboxLabel.create(getLocalizedCategory(name), undefined, undefined, name, /* small */ true);
201-
labelNode.checkboxElement.addEventListener('click', this.categoryCheckboxClicked.bind(this, name), true);
202-
labelNode.checkboxElement.tabIndex = -1;
201+
labelNode.addEventListener('click', this.categoryCheckboxClicked.bind(this, name), true);
202+
labelNode.tabIndex = -1;
203203

204204
const treeElement = new UI.TreeOutline.TreeElement(labelNode, undefined, name);
205205
treeElement.listItemElement.addEventListener('keydown', event => {
206206
this.handleSpaceKeyEventOnBreakpoint(event, this.#categories.get(name));
207207
});
208208

209-
labelNode.checkboxElement.addEventListener('keydown', event => {
209+
labelNode.addEventListener('keydown', event => {
210210
treeElement.listItemElement.focus();
211211
this.handleSpaceKeyEventOnBreakpoint(event, this.#categories.get(name));
212212
});
213213

214214
UI.ARIAUtils.setChecked(treeElement.listItemElement, false);
215215
this.#categoriesTreeOutline.appendChild(treeElement);
216216

217-
this.#categories.set(name, {element: treeElement, checkbox: labelNode.checkboxElement});
217+
this.#categories.set(name, {element: treeElement, checkbox: labelNode});
218218
}
219219

220220
protected createBreakpoint(breakpoint: SDK.CategorizedBreakpoint.CategorizedBreakpoint): void {
221221
const labelNode = UI.UIUtils.CheckboxLabel.create(
222222
Sources.CategorizedBreakpointL10n.getLocalizedBreakpointName(breakpoint.name), undefined, undefined,
223223
Platform.StringUtilities.toKebabCase(breakpoint.name), /* small */ true);
224224
labelNode.classList.add('source-code', 'breakpoint');
225-
labelNode.checkboxElement.addEventListener('click', this.breakpointCheckboxClicked.bind(this, breakpoint), true);
226-
labelNode.checkboxElement.tabIndex = -1;
225+
labelNode.addEventListener('click', this.breakpointCheckboxClicked.bind(this, breakpoint), true);
226+
labelNode.tabIndex = -1;
227227

228228
const treeElement =
229229
new UI.TreeOutline.TreeElement(labelNode, undefined, Platform.StringUtilities.toKebabCase(breakpoint.name));
230230
treeElement.listItemElement.addEventListener('keydown', event => {
231231
this.handleSpaceKeyEventOnBreakpoint(event, this.#breakpoints.get(breakpoint));
232232
});
233233

234-
labelNode.checkboxElement.addEventListener('keydown', event => {
234+
labelNode.addEventListener('keydown', event => {
235235
treeElement.listItemElement.focus();
236236
this.handleSpaceKeyEventOnBreakpoint(event, this.#breakpoints.get(breakpoint));
237237
});
@@ -243,7 +243,7 @@ export abstract class CategorizedBreakpointsSidebarPane extends UI.Widget.VBox {
243243
category.element.appendChild(treeElement);
244244
}
245245
// Better to return that to produce a side-effect
246-
this.#breakpoints.set(breakpoint, {element: treeElement, checkbox: labelNode.checkboxElement});
246+
this.#breakpoints.set(breakpoint, {element: treeElement, checkbox: labelNode});
247247
}
248248

249249
protected getBreakpointFromPausedDetails(_details: SDK.DebuggerModel.DebuggerPausedDetails):
@@ -345,7 +345,7 @@ export abstract class CategorizedBreakpointsSidebarPane extends UI.Widget.VBox {
345345
}
346346
export interface Item {
347347
element: UI.TreeOutline.TreeElement;
348-
checkbox: HTMLInputElement;
348+
checkbox: UI.UIUtils.CheckboxLabel;
349349
}
350350

351351
const LOCALIZED_CATEGORIES: Record<SDK.CategorizedBreakpoint.Category, () => Platform.UIString.LocalizedString> = {

front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ let domBreakpointsSidebarPaneInstance: DOMBreakpointsSidebarPane;
136136

137137
export class DOMBreakpointsSidebarPane extends UI.Widget.VBox implements
138138
UI.ContextFlavorListener.ContextFlavorListener, UI.ListControl.ListDelegate<SDK.DOMDebuggerModel.DOMBreakpoint> {
139-
elementToCheckboxes: WeakMap<Element, HTMLInputElement>;
139+
elementToCheckboxes: WeakMap<Element, UI.UIUtils.CheckboxLabel>;
140140
readonly #emptyElement: HTMLElement;
141141
readonly #breakpoints: UI.ListModel.ListModel<SDK.DOMDebuggerModel.DOMBreakpoint>;
142142
#list: UI.ListControl.ListControl<SDK.DOMDebuggerModel.DOMBreakpoint>;
@@ -204,15 +204,14 @@ export class DOMBreakpointsSidebarPane extends UI.Widget.VBox implements
204204
UI.ARIAUtils.markAsListitem(element);
205205
element.tabIndex = -1;
206206

207-
const checkboxLabel = UI.UIUtils.CheckboxLabel.create(/* title */ undefined, item.enabled);
208-
const checkboxElement = checkboxLabel.checkboxElement;
209-
checkboxElement.addEventListener('click', this.checkboxClicked.bind(this, item), false);
210-
checkboxElement.tabIndex = -1;
211-
this.elementToCheckboxes.set(element, checkboxElement);
212-
element.appendChild(checkboxLabel);
207+
const checkbox = UI.UIUtils.CheckboxLabel.create(/* title */ undefined, item.enabled);
208+
checkbox.addEventListener('click', this.checkboxClicked.bind(this, item), false);
209+
checkbox.tabIndex = -1;
210+
this.elementToCheckboxes.set(element, checkbox);
211+
element.appendChild(checkbox);
213212
element.addEventListener('keydown', event => {
214213
if (event.key === ' ') {
215-
checkboxLabel.checkboxElement.click();
214+
checkbox.click();
216215
event.consume(true);
217216
}
218217
});
@@ -224,8 +223,8 @@ export class DOMBreakpointsSidebarPane extends UI.Widget.VBox implements
224223
const breakpointTypeLabel = BreakpointTypeLabels.get(item.type);
225224
description.textContent = breakpointTypeLabel ? breakpointTypeLabel() : null;
226225
const breakpointTypeText = breakpointTypeLabel ? breakpointTypeLabel() : '';
227-
UI.ARIAUtils.setLabel(checkboxElement, breakpointTypeText);
228-
checkboxElement.setAttribute('jslog', `${VisualLogging.toggle().track({click: true})}`);
226+
UI.ARIAUtils.setLabel(checkbox, breakpointTypeText);
227+
checkbox.setAttribute('jslog', `${VisualLogging.toggle().track({click: true})}`);
229228
const checkedStateText = item.enabled ? i18nString(UIStrings.checked) : i18nString(UIStrings.unchecked);
230229
const linkifiedNode = document.createElement('monospace');
231230
linkifiedNode.style.display = 'block';
@@ -235,7 +234,7 @@ export class DOMBreakpointsSidebarPane extends UI.Widget.VBox implements
235234
linkifiedNode.appendChild(linkified);
236235
// Give the checkbox an aria-label as it is required for all form element
237236
UI.ARIAUtils.setLabel(
238-
checkboxElement, i18nString(UIStrings.sS, {PH1: breakpointTypeText, PH2: linkified.deepTextContent()}));
237+
checkbox, i18nString(UIStrings.sS, {PH1: breakpointTypeText, PH2: linkified.deepTextContent()}));
239238
// The parent list element is the one that actually gets focused.
240239
// Assign it an aria-label with complete information for the screen reader to read out properly
241240
UI.ARIAUtils.setLabel(
@@ -249,7 +248,7 @@ export class DOMBreakpointsSidebarPane extends UI.Widget.VBox implements
249248
if (item === this.#highlightedBreakpoint) {
250249
element.classList.add('breakpoint-hit');
251250
UI.ARIAUtils.setDescription(element, i18nString(UIStrings.sBreakpointHit, {PH1: checkedStateText}));
252-
UI.ARIAUtils.setDescription(checkboxElement, i18nString(UIStrings.breakpointHit));
251+
UI.ARIAUtils.setDescription(checkbox, i18nString(UIStrings.breakpointHit));
253252
} else {
254253
UI.ARIAUtils.setDescription(element, checkedStateText);
255254
}

front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ const str_ = i18n.i18n.registerUIStrings('panels/browser_debugger/XHRBreakpoints
6363
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
6464
const containerToBreakpointEntry = new WeakMap<Element, HTMLElement>();
6565

66-
const breakpointEntryToCheckbox = new WeakMap<Element, HTMLInputElement>();
66+
const breakpointEntryToCheckbox = new WeakMap<Element, UI.UIUtils.CheckboxLabel>();
6767

6868
let xhrBreakpointsSidebarPaneInstance: XHRBreakpointsSidebarPane;
6969

@@ -193,18 +193,18 @@ export class XHRBreakpointsSidebarPane extends UI.Widget.VBox implements UI.Cont
193193
element.addEventListener('contextmenu', this.contextMenu.bind(this, item), true);
194194

195195
const title = item ? i18nString(UIStrings.urlContainsS, {PH1: item}) : i18nString(UIStrings.anyXhrOrFetch);
196-
const label = UI.UIUtils.CheckboxLabel.create(title, enabled, undefined, undefined, /* small */ true);
197-
UI.ARIAUtils.setHidden(label, true);
196+
const checkbox = UI.UIUtils.CheckboxLabel.create(title, enabled, undefined, undefined, /* small */ true);
197+
UI.ARIAUtils.setHidden(checkbox, true);
198198
UI.ARIAUtils.setLabel(element, title);
199-
element.appendChild(label);
200-
label.checkboxElement.addEventListener('click', this.checkboxClicked.bind(this, item, enabled), false);
199+
element.appendChild(checkbox);
200+
checkbox.addEventListener('click', this.checkboxClicked.bind(this, item, enabled), false);
201201
element.addEventListener('click', event => {
202202
if (event.target === element) {
203203
this.checkboxClicked(item, enabled);
204204
}
205205
}, false);
206-
breakpointEntryToCheckbox.set(element, label.checkboxElement);
207-
label.checkboxElement.tabIndex = -1;
206+
breakpointEntryToCheckbox.set(element, checkbox);
207+
checkbox.tabIndex = -1;
208208
element.tabIndex = -1;
209209
if (item === this.#list.selectedItem()) {
210210
element.tabIndex = 0;
@@ -230,8 +230,8 @@ export class XHRBreakpointsSidebarPane extends UI.Widget.VBox implements UI.Cont
230230
UI.ARIAUtils.setDescription(element, i18nString(UIStrings.breakpointHit));
231231
}
232232

233-
label.classList.add('cursor-auto');
234-
label.addEventListener('dblclick', this.labelClicked.bind(this, item), false);
233+
checkbox.classList.add('cursor-auto');
234+
checkbox.addEventListener('dblclick', this.labelClicked.bind(this, item), false);
235235
this.#breakpointElements.set(item, listItemElement);
236236
listItemElement.setAttribute('jslog', `${VisualLogging.item().track({
237237
click: true,

front_end/ui/legacy/UIUtils.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1364,6 +1364,18 @@ export class CheckboxLabel extends HTMLElement {
13641364
return this.checkboxElement.disabled;
13651365
}
13661366

1367+
set indeterminate(indeterminate: boolean) {
1368+
this.checkboxElement.indeterminate = indeterminate;
1369+
}
1370+
1371+
get indeterminate(): boolean {
1372+
return this.checkboxElement.indeterminate;
1373+
}
1374+
1375+
override click(): void {
1376+
this.checkboxElement.click();
1377+
}
1378+
13671379
/** Only to be used when the checkbox label is 'generated' (a regex, a className, etc). Most checkboxes should be create()'d with UIStrings */
13681380
static createWithStringLiteral(title?: string, checked?: boolean, jslogContext?: string, small?: boolean):
13691381
CheckboxLabel {

0 commit comments

Comments
 (0)