mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
Fixes #181 - Marko v3: Scriptlets
This commit is contained in:
parent
298cc2a336
commit
ada3f81bd3
@ -42,6 +42,8 @@ var Property = require('./ast/Property');
|
||||
var VariableDeclarator = require('./ast/VariableDeclarator');
|
||||
var ThisExpression = require('./ast/ThisExpression');
|
||||
var Expression = require('./ast/Expression');
|
||||
var Scriptlet = require('./ast/Scriptlet');
|
||||
|
||||
var parseExpression = require('./util/parseExpression');
|
||||
var parseJavaScriptArgs = require('./util/parseJavaScriptArgs');
|
||||
var removeEscapeFunctions = require('./util/removeEscapeFunctions');
|
||||
@ -367,6 +369,10 @@ class Builder {
|
||||
return new Return({argument});
|
||||
}
|
||||
|
||||
scriptlet(code) {
|
||||
return new Scriptlet({code});
|
||||
}
|
||||
|
||||
selfInvokingFunction(params, args, body) {
|
||||
if (arguments.length === 1) {
|
||||
body = arguments[0];
|
||||
|
||||
@ -67,6 +67,11 @@ class HtmlJsParser {
|
||||
handlers.handleComment(event.value);
|
||||
},
|
||||
|
||||
onScriptlet(event) {
|
||||
// <% (code) %>
|
||||
handlers.handleScriptlet(event.value);
|
||||
},
|
||||
|
||||
onError(event) {
|
||||
handlers.handleError(event);
|
||||
}
|
||||
|
||||
@ -184,6 +184,13 @@ class Parser {
|
||||
this.parentNode.appendChild(text);
|
||||
}
|
||||
|
||||
handleScriptlet(code) {
|
||||
this.prevTextNode = null;
|
||||
var builder = this.context.builder;
|
||||
var scriptlet = builder.scriptlet(code);
|
||||
this.parentNode.appendChild(scriptlet);
|
||||
}
|
||||
|
||||
handleError(event) {
|
||||
this.context.addError({
|
||||
message: event.message,
|
||||
|
||||
26
compiler/ast/Scriptlet.js
Normal file
26
compiler/ast/Scriptlet.js
Normal file
@ -0,0 +1,26 @@
|
||||
'use strict';
|
||||
|
||||
var Node = require('./Node');
|
||||
var adjustIndent = require('../util/adjustIndent');
|
||||
|
||||
class Scriptlet extends Node {
|
||||
constructor(def) {
|
||||
super('Scriptlet');
|
||||
this.code = def.code;
|
||||
}
|
||||
|
||||
generateCode(codegen) {
|
||||
var code = this.code;
|
||||
|
||||
if (!code) {
|
||||
return;
|
||||
}
|
||||
|
||||
code = adjustIndent(code, codegen.currentIndent);
|
||||
|
||||
codegen.write(code);
|
||||
codegen.write('\n');
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Scriptlet;
|
||||
49
test/fixtures/parser/autotest/scriptlet/expected.json
vendored
Normal file
49
test/fixtures/parser/autotest/scriptlet/expected.json
vendored
Normal file
@ -0,0 +1,49 @@
|
||||
{
|
||||
"type": "TemplateRoot",
|
||||
"body": [
|
||||
{
|
||||
"type": "Scriptlet",
|
||||
"code": " if (true) { "
|
||||
},
|
||||
{
|
||||
"type": "Text",
|
||||
"argument": {
|
||||
"type": "Literal",
|
||||
"value": "\n HELLO\n"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Scriptlet",
|
||||
"code": " } "
|
||||
},
|
||||
{
|
||||
"type": "Text",
|
||||
"argument": {
|
||||
"type": "Literal",
|
||||
"value": "\n"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Scriptlet",
|
||||
"code": " if (false) { "
|
||||
},
|
||||
{
|
||||
"type": "Text",
|
||||
"argument": {
|
||||
"type": "Literal",
|
||||
"value": "\n WORLD\n"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Scriptlet",
|
||||
"code": " } "
|
||||
},
|
||||
{
|
||||
"type": "Text",
|
||||
"argument": {
|
||||
"type": "Literal",
|
||||
"value": "\n"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
8
test/fixtures/parser/autotest/scriptlet/template.marko
vendored
Normal file
8
test/fixtures/parser/autotest/scriptlet/template.marko
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
<% if (true) { %>
|
||||
HELLO
|
||||
<% } %>
|
||||
<% if (false) { %>
|
||||
WORLD
|
||||
<% } %>
|
||||
---
|
||||
@ -1,6 +0,0 @@
|
||||
{% if (true) { %}
|
||||
HELLO
|
||||
{% } %}
|
||||
{% if (false) { %}
|
||||
WORLD
|
||||
{% } %}
|
||||
11
test/fixtures/render/autotest/scriptlet/template.marko
vendored
Normal file
11
test/fixtures/render/autotest/scriptlet/template.marko
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
<var a=4/>
|
||||
---
|
||||
<% a=10 %>
|
||||
${a}
|
||||
<% if (true) { %>
|
||||
HELLO
|
||||
<% } %>
|
||||
<% if (false) { %>
|
||||
WORLD
|
||||
<% } %>
|
||||
---
|
||||
Loading…
x
Reference in New Issue
Block a user