diff --git a/examples/templating/index.js b/examples/templating/index.js index d268e43..6cbce41 100644 --- a/examples/templating/index.js +++ b/examples/templating/index.js @@ -6,9 +6,19 @@ export class Counter extends WebComponent { }; get template() { return html` - +
+ + +
`; } } diff --git a/package.json b/package.json index 0cd15d8..957fafa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "web-component-base", - "version": "2.0.0-beta.15", + "version": "2.0.0-beta.16", "description": "A zero-dependency, ~600 Bytes (minified & gzipped), JS base class for creating reactive custom elements easily", "type": "module", "exports": { diff --git a/src/utils/create-element.js b/src/utils/create-element.js index 601f102..2e7e285 100644 --- a/src/utils/create-element.js +++ b/src/utils/create-element.js @@ -1,3 +1,5 @@ +import { getCamelCase } from "./get-camel-case.js"; + export function createElement(tree) { if (!tree.type) { const leaves = typeof tree === "object" ? Object.keys(tree) : []; @@ -9,9 +11,17 @@ export function createElement(tree) { const el = document.createElement(tree.type); if (tree.props) { Object.keys(tree.props).forEach(prop => { - let domProp = prop.startsWith('on') ? prop.toLowerCase() : prop; - if (domProp === 'class') domProp = 'className'; - el[domProp] = tree.props[prop] + let domProp = prop.toLowerCase(); + if (domProp.startsWith('data-')) { + const dataProp = domProp.replace('data-', ''); + el.dataset[getCamelCase(dataProp)] = tree.props[prop]; + } else { + switch(domProp) { + case 'class': domProp = 'className'; break; + case 'for': domProp = 'htmlFor'; break; + } + el[domProp] = tree.props[prop] + } }) } tree.children?.forEach((child) => {