|
|
|
|
@ -3,12 +3,12 @@ import { hydrating } from '../hydration.js';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param {Element} dom
|
|
|
|
|
* @param {boolean|number} is_html
|
|
|
|
|
* @param {string|null} value
|
|
|
|
|
* @param {boolean | number} is_html
|
|
|
|
|
* @param {string | null} value
|
|
|
|
|
* @param {string} [hash]
|
|
|
|
|
* @param {Record<string,boolean>} [prev_classes]
|
|
|
|
|
* @param {Record<string,boolean>} [next_classes]
|
|
|
|
|
* @returns {Record<string,boolean>|undefined}
|
|
|
|
|
* @param {Record<string, boolean>} [prev_classes]
|
|
|
|
|
* @param {Record<string, boolean>} [next_classes]
|
|
|
|
|
* @returns {Record<string, boolean> | undefined}
|
|
|
|
|
*/
|
|
|
|
|
export function set_class(dom, is_html, value, hash, prev_classes, next_classes) {
|
|
|
|
|
// @ts-expect-error need to add __className to patched prototype
|
|
|
|
|
@ -16,6 +16,7 @@ export function set_class(dom, is_html, value, hash, prev_classes, next_classes)
|
|
|
|
|
|
|
|
|
|
if (hydrating || prev !== value) {
|
|
|
|
|
var next_class_name = to_class(value, hash, next_classes);
|
|
|
|
|
|
|
|
|
|
if (!hydrating || next_class_name !== dom.getAttribute('class')) {
|
|
|
|
|
// Removing the attribute when the value is only an empty string causes
|
|
|
|
|
// performance issues vs simply making the className an empty string. So
|
|
|
|
|
@ -29,12 +30,15 @@ export function set_class(dom, is_html, value, hash, prev_classes, next_classes)
|
|
|
|
|
dom.setAttribute('class', next_class_name);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// @ts-expect-error need to add __className to patched prototype
|
|
|
|
|
dom.__className = value;
|
|
|
|
|
} else if (next_classes) {
|
|
|
|
|
prev_classes = prev_classes ?? {};
|
|
|
|
|
|
|
|
|
|
for (const key in next_classes) {
|
|
|
|
|
const is_present = !!next_classes[key];
|
|
|
|
|
|
|
|
|
|
if (is_present !== !!prev_classes[key]) {
|
|
|
|
|
// TODO : use dom.classList.toggle instead ?
|
|
|
|
|
if (is_present) {
|
|
|
|
|
@ -45,5 +49,6 @@ export function set_class(dom, is_html, value, hash, prev_classes, next_classes)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return next_classes;
|
|
|
|
|
}
|
|
|
|
|
|