'use strict';
var runtimeHtmlHelpers = require('../../../../runtime/html/helpers');
var attr = runtimeHtmlHelpers.a;
var escapeXmlAttr = runtimeHtmlHelpers.xa;
function isStringLiteral(node) {
return node.type === 'Literal' && typeof node.value === 'string';
}
function isNoEscapeXml(node) {
return node.type === 'AttributePlaceholder' &&
node.escape === false;
}
function flattenAttrConcats(node) {
// return [node];
function flattenHelper(node) {
if (node.type === 'BinaryExpression' && node.operator === '+') {
let left = flattenHelper(node.left);
let right = flattenHelper(node.right);
var isString = left.isString || right.isString;
if (isString) {
return {
isString: true,
concats: left.concats.concat(right.concats)
};
} else {
return {
isString: false,
concats: [node]
};
}
}
return {
isString: isStringLiteral(node) || node.type === 'AttributePlaceholder',
concats: [node]
};
}
var final = flattenHelper(node);
return final.concats;
}
function generateCodeForExpressionAttr(name, value, escape, codegen) {
var flattenedConcats = flattenAttrConcats(value);
var hasLiteral = false;
var builder = codegen.builder;
var finalNodes = [];
var context = codegen.context;
function addHtml(argument) {
finalNodes.push(builder.html(argument));
}
function addHtmlLiteral(value) {
finalNodes.push(builder.htmlLiteral(value));
}
for (let i=0; i