|
|
|
@ -212,22 +212,11 @@ export default class Element extends Node {
|
|
|
|
|
block.builders.unmount.addLine(`@detachNode(${name});`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// add CSS encapsulation attribute
|
|
|
|
|
if (this._needsCssAttribute && !this.generator.customElement) {
|
|
|
|
|
if (!this.attributes.find(a => a.type === 'Attribute' && a.name === 'class')) {
|
|
|
|
|
block.builders.hydrate.addLine(
|
|
|
|
|
this.namespace
|
|
|
|
|
? `@setAttribute(${name}, "class", "${this.generator.stylesheet.id}");`
|
|
|
|
|
: `${name}.className = "${this.generator.stylesheet.id}";`
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TODO move this into a class as well?
|
|
|
|
|
if (this._cssRefAttribute) {
|
|
|
|
|
block.builders.hydrate.addLine(
|
|
|
|
|
`@setAttribute(${name}, "svelte-ref-${this._cssRefAttribute}", "");`
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
// TODO move this into a class as well?
|
|
|
|
|
if (this._cssRefAttribute) {
|
|
|
|
|
block.builders.hydrate.addLine(
|
|
|
|
|
`@setAttribute(${name}, "svelte-ref-${this._cssRefAttribute}", "");`
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// insert static children with textContent or innerHTML
|
|
|
|
@ -438,17 +427,9 @@ export default class Element extends Node {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
node.attributes.forEach((attr: Node) => {
|
|
|
|
|
const value = (node._needsCssAttribute && attr.name === 'class')
|
|
|
|
|
? [{ type: 'Text', data: `${attr.value[0].data} ${generator.stylesheet.id}` }]
|
|
|
|
|
: attr.value;
|
|
|
|
|
|
|
|
|
|
open += ` ${fixAttributeCasing(attr.name)}${stringifyAttributeValue(value)}`
|
|
|
|
|
open += ` ${fixAttributeCasing(attr.name)}${stringifyAttributeValue(attr.value)}`
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (node._needsCssAttribute && !node.attributes.find(a => a.name === 'class')) {
|
|
|
|
|
open += ` class="${generator.stylesheet.id}"`;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isVoidElementName(node.name)) return open + '>';
|
|
|
|
|
|
|
|
|
|
return `${open}>${node.children.map(toHTML).join('')}</${node.name}>`;
|
|
|
|
@ -688,6 +669,30 @@ export default class Element extends Node {
|
|
|
|
|
|
|
|
|
|
return `@appendNode(${this.var}, ${name}._slotted${this.generator.legacy ? `["default"]` : `.default`});`;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
addCssClass() {
|
|
|
|
|
if (this._addedCssClass || this.generator.customElement) return;
|
|
|
|
|
this._addedCssClass = true;
|
|
|
|
|
const classAttribute = this.attributes.find(a => a.name === 'class');
|
|
|
|
|
if (classAttribute && classAttribute.value !== true) {
|
|
|
|
|
if (classAttribute.value.length === 1 && classAttribute.value[0].type === 'Text') {
|
|
|
|
|
classAttribute.value[0].data += ` ${this.generator.stylesheet.id}`;
|
|
|
|
|
} else {
|
|
|
|
|
(<Node[]>classAttribute.value).push(
|
|
|
|
|
new Node({ type: 'Text', data: ` ${this.generator.stylesheet.id}` })
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
this.attributes.push(
|
|
|
|
|
new Attribute({
|
|
|
|
|
generator: this.generator,
|
|
|
|
|
name: 'class',
|
|
|
|
|
value: [new Node({ type: 'Text', data: `${this.generator.stylesheet.id}` })],
|
|
|
|
|
parent: this,
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getRenderStatement(
|
|
|
|
|