tiddlywiki
Version:
a non-linear personal web notebook
58 lines (54 loc) • 1.66 kB
JavaScript
/*\
title: $:/plugins/tiddlywiki/wikitext-serialize/rules/transcludeblock.js
type: application/javascript
module-type: wikiruleserializer
\*/
;
exports.name = "transcludeblock";
exports.serialize = function(tree,serialize) {
var result = "{{";
function handleTransclude(transcludeNode) {
// Handle field
if(transcludeNode.attributes.$field) {
result += "!!" + transcludeNode.attributes.$field.value;
}
// Check for index attribute
if(transcludeNode.attributes.$index) {
result += "##" + transcludeNode.attributes.$index.value;
}
// Handle template
var tiddlerTitle = tree.attributes.tiddler ? tree.attributes.tiddler.value : undefined;
if(transcludeNode.attributes.$tiddler && transcludeNode.attributes.$tiddler.value !== tiddlerTitle) {
result += "||" + transcludeNode.attributes.$tiddler.value;
}
// Check for parameters
var params = [];
var excludedAttributes = ["tiddler", "$tiddler", "$field", "$index", "$template"];
for(var key in transcludeNode.attributes) {
if(excludedAttributes.indexOf(key) === -1) {
params.push(transcludeNode.attributes[key].value);
}
}
if(params.length > 0) {
result += "|" + params.join("|");
}
}
function handleTiddler(tiddlerNode) {
// Check for tiddler attribute
if(tree.attributes.tiddler.value) {
result += tree.attributes.tiddler.value;
}
$tw.utils.each(tree.children, function(child) {
if(child.type === "transclude") {
handleTransclude(child);
}
});
}
if(tree.type === "tiddler") {
handleTiddler(tree);
} else if(tree.type === "transclude") {
handleTransclude(tree);
}
result += "}}\n\n";
return result;
};