Fixes #214 - Marko v3: <script marko-init>

This commit is contained in:
Patrick Steele-Idem 2016-02-03 14:37:57 -07:00
parent d3f18a020e
commit 9abbf5d2ec
8 changed files with 33 additions and 22 deletions

View File

@ -222,6 +222,8 @@ class Parser {
}); });
return; return;
} }
} else if (attrName === 'marko-init') {
return 'static-text';
} }
} }

View File

@ -70,8 +70,21 @@ var coreAttrHandlers = [
} }
], ],
[ [
'marko-preserve-whitespace', function(attr, node) { 'marko-preserve-whitespace', function(attr, node, el) {
node.setPreserveWhitespace(true); el.setPreserveWhitespace(true);
}
],
[
'marko-init', function(attr, node, el) {
if (el.tagName !== 'script') {
this.addError('The "marko-init" attribute should only be used on the <script> tag');
return;
}
var bodyText = el.bodyText;
el.noOutput = true;
this.context.addStaticCode(bodyText);
el.detach();
return null;
} }
] ]
]; ];
@ -123,8 +136,11 @@ module.exports = function transform(el, context) {
var newNode = attributeTransfomer[attrName](attr, node, el); var newNode = attributeTransfomer[attrName](attr, node, el);
if (newNode !== false) { if (newNode !== false) {
el.removeAttribute(attrName); el.removeAttribute(attrName);
if (newNode !== undefined) {
if (newNode) { if (newNode) {
newNode.pos = node.pos; newNode.pos = node.pos;
}
node = newNode; node = newNode;
} }
} }

View File

@ -27,11 +27,11 @@
"preserve-whitespace": true "preserve-whitespace": true
}, },
"<script>": { "<script>": {
"preserve-whitespace": true "preserve-whitespace": true,
}, "@marko-init": "boolean",
"<template-init>": { "@*": {
"code-generator": "./template-init-tag", "ignore": true
"body": "static-text" }
}, },
"<textarea>": { "<textarea>": {
"preserve-whitespace": true "preserve-whitespace": true

View File

@ -1,7 +0,0 @@
module.exports = function codeGenerator(elNode, codegen) {
var bodyText = elNode.bodyText;
elNode.noOutput = true;
codegen.addStaticCode(bodyText);
};

View File

@ -1,7 +1,7 @@
--- ---
<template-init> <script marko-init>
var name = '${name}<div if(foo)></div>'; var name = '${name}<div if(foo)></div>';
</template-init> </script>
Hello ${name}! Hello ${name}!
--- ---

View File

@ -1,7 +1,7 @@
<template-init> <script marko-init>
function greeting(name, out) { function greeting(name, out) {
out.write('Hello ' + name + '!'); out.write('Hello ' + name + '!');
} }
</template-init> </script>
<invoke greeting('Frank', out)/> <invoke greeting('John', out)/> <invoke greeting('Frank', out)/> <invoke greeting('John', out)/>

View File

@ -1,7 +1,7 @@
--- ---
<template-init> <script marko-init>
var testHelpers = require('./test-helpers') var testHelpers = require('./test-helpers')
</template-init> </script>
Hello ${testHelpers.upperCase("world")}! Hello ${testHelpers.upperCase("world")}!
Hello ${testHelpers.trim(" World ")}! Hello ${testHelpers.trim(" World ")}!