master
Denis MIGDAL 2 years ago
parent b01ef15c02
commit ae7b4ef4df

@ -243,20 +243,18 @@ for name in $ELEM.getAttributeNames():
```typescript ```typescript
// [TS] TypeScript // [TS] TypeScript
type CreateOpts = Partial<{ type CreateOpts = Partial<{
children : readonly Element[], content : string|Element|readonly Element[],
textContent: string,
id : string, id : string,
classes : readonly string[], classes : readonly string[],
attrs : readonly Record<string, string>, attrs : readonly Record<string, string|boolean>,
dataset : readonly Record<string, string>, dataset : readonly Record<string, string|boolean>,
cssvars : readonly Record<string, string>, cssvars : readonly Record<string, string>,
listeners : readonly Record<string, (ev: Event) => void> listeners : readonly Record<string, (ev: Event) => void>
parent : Element parent : Element
}>; }>;
function create<T extends keyof HTMLElementTagNameMap>(tagname: T, function create<T extends keyof HTMLElementTagNameMap>(tagname: T,
{ {
children = null, content = [],
textContent = null,
id = null, id = null,
classes = [], classes = [],
attrs = {}, attrs = {},
@ -268,22 +266,33 @@ function create<T extends keyof HTMLElementTagNameMap>(tagname: T,
let elem = document.createElement(tagname) as HTMLElementTagNameMap[T]; let elem = document.createElement(tagname) as HTMLElementTagNameMap[T];
if( children !== null ) if( ! Array.isArray(content) )
elem.replaceChildren(...children); content = [content];
elem.replaceChildren(...content);
if( textContent !== null )
elem.textContent = textContent;
if( id !== null ) if( id !== null )
elem.id = id; elem.id = id;
elem.classList.add(...classes); elem.classList.add(...classes);
for(let attrname in attrs) for(let name in attrs) {
elem.setAttribute(attrname, attrs[attrname]); const value = attrs[name];
if( typeof value === "boolean")
for(let dataname in dataset) elem.toggleAttribute(name, value);
elem.dataset[dataname] = dataset[dataname]; else
elem.setAttribute(name, value);
}
for(let name in dataset) {
const value = dataset[name];
if( value === true )
elem.dataset[dataname] = "";
else if(value === false)
delete elem.dataset[name];
else
elem.dataset[dataname] = value;
}
for(let cssvarname in cssvars) for(let cssvarname in cssvars)
elem.style.setProperty(`--${cssvarname}`, cssvars[cssvarname]) elem.style.setProperty(`--${cssvarname}`, cssvars[cssvarname])

Loading…
Cancel
Save