'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('../'); var parseExpression = require('../util/parseExpression'); 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 isEscapeXml(node) { return node.type === 'FunctionCall' && node.callee.type === 'Identifier' && node.callee.name === 'escapeXml'; } 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 handleEscaping(node) { // // function handleEscapingHelper(node, escaping) { // if (node.type === 'Literal') { // } else if (isEscapeXml(node)) { // return handleEscapingHelper(node.arguments[0], true); // } else if (isNoEscapeXml(node)) { // return handleEscapingHelper(node.arguments[0], escaping false); // } // } // // var finalNode = handleEscapingHelper(node, true /* default to escaping */); // return finalNode; // } function removeEscapeFunctions(node) { var walker = compiler.createWalker({ enter: function(node, parent) { if (isNoEscapeXml(node) || isEscapeXml(node)) { return node.args[0]; } } }); return walker.walk(node); } function generateCodeForExpressionAttr(name, value, codegen) { var flattenedConcats = flattenAttrConcats(value); var hasLiteral = false; for (let i=0; i