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