mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
Fixes #541 - Fixed handling of placeholders in string attribute value
This commit is contained in:
parent
d91fc9efa8
commit
271b726ecc
@ -49,6 +49,7 @@ function flattenAttrConcats(node) {
|
||||
|
||||
function generateCodeForExpressionAttr(name, value, escape, codegen) {
|
||||
var flattenedConcats = flattenAttrConcats(value);
|
||||
|
||||
var hasLiteral = false;
|
||||
var builder = codegen.builder;
|
||||
var finalNodes = [];
|
||||
@ -64,7 +65,7 @@ function generateCodeForExpressionAttr(name, value, escape, codegen) {
|
||||
|
||||
|
||||
for (let i=0; i<flattenedConcats.length; i++) {
|
||||
if (flattenedConcats[i].type === 'Literal') {
|
||||
if (flattenedConcats[i].type === 'Literal' || flattenedConcats[i].type === 'AttributePlaceholder') {
|
||||
hasLiteral = true;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -65,6 +65,8 @@ class HtmlElementVDOM extends Node {
|
||||
} else if (typeof literalValue === 'number') {
|
||||
value.value = literalValue.toString();
|
||||
}
|
||||
} else if (value.type === 'AttributePlaceholder') {
|
||||
value = codegen.builder.functionCall(context.helper('str'), [value]);
|
||||
}
|
||||
|
||||
attributesArg[name] = value;
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
var marko_template = module.exports = require("marko/html").t(__filename),
|
||||
marko_helpers = require("marko/runtime/html/helpers"),
|
||||
marko_classAttr = marko_helpers.ca,
|
||||
marko_attr = marko_helpers.a,
|
||||
marko_escapeXmlAttr = marko_helpers.xa,
|
||||
marko_str = marko_helpers.s;
|
||||
marko_str = marko_helpers.s,
|
||||
marko_escapeXmlAttr = marko_helpers.xa;
|
||||
|
||||
function render(data, out) {
|
||||
out.w("<div" +
|
||||
marko_classAttr(data.className) +
|
||||
marko_attr("class2", data.className, false) +
|
||||
" foo=\"a" +
|
||||
" class2=\"" +
|
||||
marko_str(data.className) +
|
||||
"\" foo=\"a" +
|
||||
marko_escapeXmlAttr(data.foo) +
|
||||
"b\" bar=\"a " +
|
||||
marko_escapeXmlAttr(data.foo) +
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
<input type="checkbox" checked="${data.checked}">
|
||||
<input type="checkbox" checked=data.checked>
|
||||
|
||||
<button disabled>Button</button>
|
||||
|
||||
<select>
|
||||
<option value="${option.value}"
|
||||
selected="${option.selected}"
|
||||
selected=option.selected
|
||||
for(option in data.options)>
|
||||
|
||||
${option.value}
|
||||
|
||||
@ -1 +1 @@
|
||||
<img alt="${data.myAlt || true}">
|
||||
<img alt=(data.myAlt || true)>
|
||||
|
||||
1
test/autotests/render/attr-value-obj/expected.html
Normal file
1
test/autotests/render/attr-value-obj/expected.html
Normal file
@ -0,0 +1 @@
|
||||
<div data-foo="Frank"></div><div data-foo='{"name":"Frank"}'></div>
|
||||
9
test/autotests/render/attr-value-obj/template.marko
Normal file
9
test/autotests/render/attr-value-obj/template.marko
Normal file
@ -0,0 +1,9 @@
|
||||
var foo = {
|
||||
name: 'Frank',
|
||||
toString: function() {
|
||||
return this.name;
|
||||
}
|
||||
};
|
||||
|
||||
<div data-foo="${foo}"/>
|
||||
<div data-foo=foo/>
|
||||
1
test/autotests/render/attr-value-obj/test.js
Normal file
1
test/autotests/render/attr-value-obj/test.js
Normal file
@ -0,0 +1 @@
|
||||
exports.templateData = {};
|
||||
@ -2,14 +2,14 @@
|
||||
|
||||
<div class="tabs">
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="${tab.liClass}" for(tab in tabs)>
|
||||
<li class=tab.liClass for(tab in tabs)>
|
||||
<a href="#${tab.id}" data-toggle="tab">
|
||||
${tab.title}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div id="${tab.id}" class="${tab.divClass}" for(tab in tabs)>
|
||||
<div id=tab.id class=tab.divClass for(tab in tabs)>
|
||||
<invoke tab.renderBody(out) if(tab.renderBody) />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
<div class="tabs">
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="${tab.liClass}" for(tab in tabs)>
|
||||
<li class=tab.liClass for(tab in tabs)>
|
||||
<a href="#${tab.id}" data-toggle="tab">
|
||||
${tab.title}
|
||||
</a>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user