@quick-game/cli
Version:
Command line interface for rapid qg development
61 lines • 2.48 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 Platform from '../../../core/platform/platform.js';
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;
static eventName = 'linkifieractivated';
constructor(data) {
super(LinkifierClick.eventName, {
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 = Platform.DevToolsPath.EmptyUrlString;
#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.');
}
void 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
// eslint-disable-next-line rulesdir/ban_a_tags_in_lit_html
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);
//# sourceMappingURL=LinkifierImpl.js.map