'use strict'; var Node = require('./Node'); var Literal = require('./Literal'); var ok = require('assert').ok; var escapeXmlAttr = require('raptor-util/escapeXml').attr; var compiler = require('../'); 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; for (let i=0; i