'use strict'; var Node = require('./Node'); var Literal = require('./Literal'); var ok = require('assert').ok; var escapeXmlAttr = require('raptor-util/escapeXml').attr; var removeEscapeFunctions = require('../util/removeEscapeFunctions'); var compiler = require('../'); function isStringLiteral(node) { return node.type === 'Literal' && typeof node.value === 'string'; } function isNoEscapeXml(node) { return node.type === 'FunctionCall' && node.callee.type === 'Identifier' && node.callee.name === '$noEscapeXml'; } function isStringExpression(node) { return node.type === 'FunctionCall' && node.callee.type === 'Identifier' && (node.callee.name === '$noEscapeXml' || node.callee.name === '$escapeXml'); } 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) || isStringExpression(node), concats: [node] }; } var final = flattenHelper(node); return final.concats; } function generateCodeForExpressionAttr(name, value, codegen) { var flattenedConcats = flattenAttrConcats(value); var hasLiteral = false; for (let i=0; i