mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2025-07-19 18:32:50 +00:00
Add support for elseif blocks
This commit is contained in:
parent
bd1bad68d8
commit
981f905830
@ -53,6 +53,10 @@ exports.parse = function() {
|
|||||||
var filterCondition = this.parser.source.substring(this.match.index + this.match[0].length,this.terminateIfMatch.index);
|
var filterCondition = this.parser.source.substring(this.match.index + this.match[0].length,this.terminateIfMatch.index);
|
||||||
// Advance the parser position to past the %}
|
// Advance the parser position to past the %}
|
||||||
this.parser.pos = this.terminateIfMatch.index + this.terminateIfMatch[0].length;
|
this.parser.pos = this.terminateIfMatch.index + this.terminateIfMatch[0].length;
|
||||||
|
return this.parseIfBlock(filterCondition);
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.parseIfBlock = function(filterCondition) {
|
||||||
// Create the list widget
|
// Create the list widget
|
||||||
var listWidget = {
|
var listWidget = {
|
||||||
type: "list",
|
type: "list",
|
||||||
@ -73,7 +77,7 @@ exports.parse = function() {
|
|||||||
$tw.utils.addAttributeToParseTreeNode(listWidget,"variable","condition");
|
$tw.utils.addAttributeToParseTreeNode(listWidget,"variable","condition");
|
||||||
$tw.utils.addAttributeToParseTreeNode(listWidget,"limit","1");
|
$tw.utils.addAttributeToParseTreeNode(listWidget,"limit","1");
|
||||||
// Parse the body looking for else or endif
|
// Parse the body looking for else or endif
|
||||||
var reEndString = "\\{\\%\\s*(endif)\\s*\\%\\}|\\{\\%\\s*(else)\\s*\\%\\}",
|
var reEndString = "\\{\\%\\s*(endif)\\s*\\%\\}|\\{\\%\\s*(else)\\s*\\%\\}|\\{\\%\\s*(elseif)\\s+([\\s\\S]+?)\\%\\}",
|
||||||
ex;
|
ex;
|
||||||
if(this.is.block) {
|
if(this.is.block) {
|
||||||
ex = this.parser.parseBlocksTerminatedExtended(reEndString);
|
ex = this.parser.parseBlocksTerminatedExtended(reEndString);
|
||||||
@ -99,6 +103,9 @@ exports.parse = function() {
|
|||||||
}
|
}
|
||||||
// Put the parsed content inside the list empty template
|
// Put the parsed content inside the list empty template
|
||||||
listWidget.children[1].children = ex.tree;
|
listWidget.children[1].children = ex.tree;
|
||||||
|
} else if(ex.match[3] === "elseif") {
|
||||||
|
// Parse the elseif block by reusing this parser, passing the new filter condition
|
||||||
|
listWidget.children[1].children = this.parseIfBlock(ex.match[4]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Return the parse tree node
|
// Return the parse tree node
|
||||||
|
32
editions/test/tiddlers/tests/data/conditionals/Elseif.tid
Normal file
32
editions/test/tiddlers/tests/data/conditionals/Elseif.tid
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
title: Conditionals/Elseif
|
||||||
|
description: Elseif conditional shortcut syntax
|
||||||
|
type: text/vnd.tiddlywiki-multiple
|
||||||
|
tags: [[$:/tags/wiki-test-spec]]
|
||||||
|
|
||||||
|
title: Text
|
||||||
|
|
||||||
|
This is a {% if [<something>match[one]] %}Elephant{% elseif [<something>match[two]] %}Antelope{% else %}Crocodile{% endif %}, I think.
|
||||||
|
+
|
||||||
|
title: Output
|
||||||
|
|
||||||
|
<$let something="one">
|
||||||
|
{{Text}}
|
||||||
|
</$let>
|
||||||
|
|
||||||
|
<$let something="two">
|
||||||
|
{{Text}}
|
||||||
|
</$let>
|
||||||
|
|
||||||
|
<$let something="three">
|
||||||
|
{{Text}}
|
||||||
|
</$let>
|
||||||
|
+
|
||||||
|
title: ExpectedResult
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This is a Elephant, I think.
|
||||||
|
</p><p>
|
||||||
|
This is a Antelope, I think.
|
||||||
|
</p><p>
|
||||||
|
This is a Crocodile, I think.
|
||||||
|
</p>
|
Loading…
x
Reference in New Issue
Block a user