livebook/assets/js/lib/attribute.js

28 lines
613 B
JavaScript
Raw Normal View History

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