This commit is contained in:
Daniel Ledda
2024-10-31 23:46:23 +01:00
parent 314ccaa677
commit bcb820f35e
36 changed files with 4427 additions and 61 deletions

59
app/util.ts Normal file
View File

@@ -0,0 +1,59 @@
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] : [];
}
}