tiddlywiki
Version:
a non-linear personal web notebook
43 lines (39 loc) • 1.41 kB
JavaScript
/*\
title: $:/plugins/tiddlywiki/wikitext-serialize/rules/conditional.js
type: application/javascript
module-type: wikiruleserializer
\*/
;
exports.name = "conditional";
exports.serialize = function(tree,serialize) {
// We always have "if" at the beginning
var filterCondition = tree.attributes.filter.value;
var ifClauseText = serialize(tree.children[0].children);
var result = "<%if " + filterCondition + "%>" + ifClauseText;
function serializeElseIf(listNode) {
// We receive the only list node inside list-template node
if(!listNode || listNode.type !== "list") {
return "<%else%>" + serialize(listNode);
}
var filter = listNode.attributes.filter.value || "";
var bodyText = serialize(listNode.children[0].children);
var nextConditionResult = "";
// May has an only any node inside list-empty node
if(listNode.children[1] && listNode.children[1].children[0]) {
if(listNode.children[1].children[0].type === "list") {
nextConditionResult = serializeElseIf(listNode.children[1].children[0]);
} else {
nextConditionResult = "<%else%>" + serialize(listNode.children[1]);
}
}
return "<%elseif " + filter + "%>" + bodyText + nextConditionResult;
}
if(tree.children[1] && tree.children[1].children) {
result += serializeElseIf(tree.children[1].children[0]);
}
result += "<%endif%>";
if(tree.isBlock) {
result += "\n\n";
}
return result;
};