livebook/assets/js/lib/attribute.js
2024-02-03 00:58:44 +08:00

27 lines
614 B
JavaScript

export function parseHookProps(element, names) {
const props = {};
for (const name of names) {
const attr = `data-p-${name}`;
if (!element.hasAttribute(attr)) {
throw new Error(
`Missing attribute "${attr}" on element <${element.tagName}:${element.id}>`,
);
}
const value = element.getAttribute(attr);
props[kebabToCamelCase(name)] = JSON.parse(value);
}
return props;
}
function kebabToCamelCase(name) {
const [part, ...parts] = name.split("-");
return [
part,
...parts.map((part) => part.charAt(0).toUpperCase() + part.slice(1)),
].join("");
}