Files
djledda-web/app/util.ts
Daniel Ledda f8a0cd50f8 update
2024-11-01 18:50:26 +01:00

62 lines
1.7 KiB
TypeScript

export function gid(id: string, doc: (Document | ShadowRoot) | undefined) {
return ((doc ?? document).getElementById(id));
}
export function qs(query: string, sub: (HTMLElement | ShadowRoot) | undefined) {
return ((sub ?? document).querySelector(query));
}
export function qsa(query: string, sub?: (HTMLElement | ShadowRoot) | undefined) {
return ((sub ?? document).querySelectorAll(query));
}
export function h<T extends keyof HTMLElementTagNameMap>(
tag: T,
opts?: Partial<HTMLElementTagNameMap[T]> | undefined,
children?: Node[],
) {
const newEl = Object.assign(document.createElement(tag), opts ?? {});
if (children) {
newEl.append(...children);
}
return newEl;
}
export function html(strs: TemplateStringsArray, ...vals: string[]) {
let result = strs[0];
for (let i = 1; i < strs.length; i++) {
result += vals[i] + strs[i];
}
const template = document.createElement("template");
template.innerHTML = result;
return template;
}
export function css(strs: TemplateStringsArray, ...vals: string[]) {
let result = strs[0];
for (let i = 1; i < strs.length; i++) {
result += vals[i] + strs[i];
}
const sheet = new CSSStyleSheet();
sheet.replaceSync(result);
return sheet;
}
/*
export class DJElement extends HTMLElement {
static styles: CSSStyleSheet;
static template: HTMLTemplateElement;
root: ShadowRoot;
constructor() {
super();
const statics = this.constructor as typeof DJElement;
this.root = this.attachShadow({ mode: "open" });
this.root.appendChild(statics.template.content.cloneNode(true));
this.root.adoptedStyleSheets = statics.styles ? [statics.styles] : [];
}
}
*/