@trailstash/ultra
Version:
A web based tool for making MapLibre GL maps with data from sources such as Overpass, GeoJSON, GPX, KML, TCX, etc
87 lines (73 loc) • 2.07 kB
JavaScript
import * as fontAwesome from "@fortawesome/fontawesome-svg-core";
import {
faLink,
faShareNodes,
faQuestion,
faDownload,
faPlay,
faXmark,
faRotate,
faUpRightAndDownLeftFromCenter,
faDownLeftAndUpRightToCenter,
faPaintbrush,
faPenToSquare,
faFileExport,
faTriangleExclamation,
} from "@fortawesome/free-solid-svg-icons";
import { h } from "../lib/dom.js";
import buttonStyle from "./button.css";
import { style as buttonCSS } from "./button.js";
import { normalizeCSS } from "../lib/normalize.js";
fontAwesome.library.add(faLink);
fontAwesome.library.add(faShareNodes);
fontAwesome.library.add(faQuestion);
fontAwesome.library.add(faDownload);
fontAwesome.library.add(faPlay);
fontAwesome.library.add(faXmark);
fontAwesome.library.add(faRotate);
fontAwesome.library.add(faUpRightAndDownLeftFromCenter);
fontAwesome.library.add(faDownLeftAndUpRightToCenter);
fontAwesome.library.add(faPaintbrush);
fontAwesome.library.add(faPenToSquare);
fontAwesome.library.add(faFileExport);
fontAwesome.library.add(faTriangleExclamation);
export const css = new CSSStyleSheet();
css.replaceSync(`
:host {
display: inline-block;
vertical-align: top;
}
svg {
display: inline-block;
height: 1em;
width: 1em;
vertical-align: top;
padding: 1px 0;
}
`);
export class FontAwesomeIcon extends HTMLElement {
static observedAttributes = ["icon"];
get icon() {
return this.getAttribute("icon");
}
set icon(value) {
this.setAttribute("icon", value);
}
constructor() {
super();
}
connectedCallback() {
this.shadow = this.attachShadow({ mode: "open" });
this.shadow.adoptedStyleSheets.push(normalizeCSS);
this.shadow.adoptedStyleSheets.push(css);
const { html } = fontAwesome.icon({ prefix: "fas", iconName: this.icon });
this.shadow.innerHTML = html[0];
}
attributeChangedCallback(name, oldVal, newVal) {
if (!this.shadow) {
return;
}
const { html } = fontAwesome.icon({ prefix: "fas", iconName: this.icon });
this.shadow.innerHTML = html[0];
}
}