|
|
|
|
@ -36,6 +36,15 @@ export default function(node: Element, renderer: Renderer, options: RenderOption
|
|
|
|
|
class_expression_list.length > 0 &&
|
|
|
|
|
class_expression_list.reduce((lhs, rhs) => x`${lhs} + ' ' + ${rhs}`);
|
|
|
|
|
|
|
|
|
|
const style_expression_list = node.styles.map(style_directive => {
|
|
|
|
|
const { name, expression: { node: expression } } = style_directive;
|
|
|
|
|
return x`"${name}: " + ${expression} + ";"`;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const style_expression =
|
|
|
|
|
style_expression_list.length > 0 &&
|
|
|
|
|
style_expression_list.reduce((lhs, rhs) => x`${lhs} + ' ' + ${rhs}`);
|
|
|
|
|
|
|
|
|
|
if (node.attributes.some(attr => attr.is_spread)) {
|
|
|
|
|
// TODO dry this out
|
|
|
|
|
const args = [];
|
|
|
|
|
@ -68,7 +77,9 @@ export default function(node: Element, renderer: Renderer, options: RenderOption
|
|
|
|
|
renderer.add_expression(x`@spread([${args}], ${class_expression})`);
|
|
|
|
|
} else {
|
|
|
|
|
let add_class_attribute = !!class_expression;
|
|
|
|
|
let add_style_attribute = !!style_expression;
|
|
|
|
|
node.attributes.forEach(attribute => {
|
|
|
|
|
// console.log("SSR NODE ATTRIBUTE", attribute)
|
|
|
|
|
const name = attribute.name.toLowerCase();
|
|
|
|
|
const attr_name = node.namespace === namespaces.foreign ? attribute.name : fix_attribute_casing(attribute.name);
|
|
|
|
|
if (name === 'value' && node.name.toLowerCase() === 'textarea') {
|
|
|
|
|
@ -88,6 +99,9 @@ export default function(node: Element, renderer: Renderer, options: RenderOption
|
|
|
|
|
renderer.add_string(` ${attr_name}="`);
|
|
|
|
|
renderer.add_expression(x`[${get_class_attribute_value(attribute)}, ${class_expression}].join(' ').trim()`);
|
|
|
|
|
renderer.add_string('"');
|
|
|
|
|
} else if (name === 'style' && style_expression) {
|
|
|
|
|
add_style_attribute = false;
|
|
|
|
|
// TODO
|
|
|
|
|
} else if (attribute.chunks.length === 1 && attribute.chunks[0].type !== 'Text') {
|
|
|
|
|
const snippet = (attribute.chunks[0] as Expression).node;
|
|
|
|
|
renderer.add_expression(x`@add_attribute("${attr_name}", ${snippet}, ${boolean_attributes.has(name) ? 1 : 0})`);
|
|
|
|
|
@ -100,6 +114,9 @@ export default function(node: Element, renderer: Renderer, options: RenderOption
|
|
|
|
|
if (add_class_attribute) {
|
|
|
|
|
renderer.add_expression(x`@add_classes([${class_expression}].join(' ').trim())`);
|
|
|
|
|
}
|
|
|
|
|
if (add_style_attribute) {
|
|
|
|
|
renderer.add_expression(x`@add_styles(${style_expression})`);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
node.bindings.forEach(binding => {
|
|
|
|
|
|