UNPKG

chrome-devtools-frontend

Version:
68 lines (56 loc) 2.04 kB
// Copyright 2023 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import type * as SDK from '../../../core/sdk/sdk.js'; import * as UI from '../../../ui/legacy/legacy.js'; import {html, render, type TemplateResult} from '../../../ui/lit/lit.js'; import serviceWorkerRouterViewStyles from './serviceWorkerRouterView.css.js'; function renderRouterRule(rule: SDK.ServiceWorkerManager.ServiceWorkerRouterRule): TemplateResult { return html` <li class="router-rule"> <div class="rule-id">Rule ${rule.id}</div> <ul class="item"> <li class="condition"> <div class="rule-type">Condition</div> <div class="rule-value">${rule.condition}</div> </li> <li class="source"> <div class="rule-type">Source</div> <div class="rule-value">${rule.source}</div> </li> </ul> </li>`; } interface ViewInterface { rules: SDK.ServiceWorkerManager.ServiceWorkerRouterRule[]; } type View = (input: ViewInterface, output: undefined, target: HTMLElement) => void; const DEFAULT_VIEW: View = (input, _output, target) => { // clang-format off render(html` <style>${serviceWorkerRouterViewStyles}</style> <ul class="router-rules"> ${input.rules.map(renderRouterRule)} </ul>`, target); // clang-format on }; export class ServiceWorkerRouterView extends UI.Widget.Widget { #rules: SDK.ServiceWorkerManager.ServiceWorkerRouterRule[] = []; #view: View; constructor(element?: HTMLElement, view = DEFAULT_VIEW) { super(element, {useShadowDom: true}); this.#view = view; } set rules(rules: SDK.ServiceWorkerManager.ServiceWorkerRouterRule[]) { this.#rules = rules; if (this.#rules.length > 0) { this.requestUpdate(); } } get rules(): SDK.ServiceWorkerManager.ServiceWorkerRouterRule[] { return this.#rules; } override performUpdate(): void { this.#view({rules: this.#rules}, undefined, this.contentElement); } }