debug-server-next
Version:
Dev server for hippy-core.
58 lines (57 loc) • 2.21 kB
JavaScript
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import * as LitHtml from '../../lit-html/lit-html.js';
import * as ComponentHelpers from '../helpers/helpers.js';
import * as Coordinator from '../render_coordinator/render_coordinator.js';
import linkifierImplStyles from './linkifierImpl.css.js';
import * as LinkifierUtils from './LinkifierUtils.js';
const coordinator = Coordinator.RenderCoordinator.RenderCoordinator.instance();
export class LinkifierClick extends Event {
data;
constructor(data) {
super('linkifieractivated', {
bubbles: true,
composed: true,
});
this.data = data;
this.data = data;
}
}
export class Linkifier extends HTMLElement {
static litTagName = LitHtml.literal `devtools-linkifier`;
#shadow = this.attachShadow({ mode: 'open' });
#url = '';
#lineNumber;
#columnNumber;
set data(data) {
this.#url = data.url;
this.#lineNumber = data.lineNumber;
this.#columnNumber = data.columnNumber;
if (!this.#url) {
throw new Error('Cannot construct a Linkifier without providing a valid string URL.');
}
this.render();
}
connectedCallback() {
this.#shadow.adoptedStyleSheets = [linkifierImplStyles];
}
onLinkActivation(event) {
event.preventDefault();
const linkifierClickEvent = new LinkifierClick({
url: this.#url,
lineNumber: this.#lineNumber,
columnNumber: this.#columnNumber,
});
this.dispatchEvent(linkifierClickEvent);
}
async render() {
// Disabled until https://crbug.com/1079231 is fixed.
await coordinator.write(() => {
// clang-format off
LitHtml.render(LitHtml.html `<a class="link" href=${this.#url} =${this.onLinkActivation}><slot>${LinkifierUtils.linkText(this.#url, this.#lineNumber)}</slot></a>`, this.#shadow, { host: this });
// clang-format on
});
}
}
ComponentHelpers.CustomElements.defineComponent('devtools-linkifier', Linkifier);