1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-11-09 19:39:57 +00:00
TiddlyWiki5/js/macros/list.js
Jeremy Ruston 398831b0d9 Major reorganisation of wikitext rendering
Getting ready to support selective refresh of DOM elements
2012-01-24 16:26:37 +00:00

78 lines
1.9 KiB
JavaScript

/*\
title: js/macros/list.js
\*/
(function(){
/*jslint node: true */
"use strict";
var utils = require("../Utils.js");
var handlers = {
all: function(store) {
return store.getTitles("title","excludeLists");
},
missing: function(store) {
return store.getMissingTitles();
},
orphans: function(store) {
return store.getOrphanTitles();
},
shadowed: function(store) {
return store.getShadowTitles();
},
touched: function(store) {
// Server syncing isn't implemented yet
return [];
},
filter: function(store) {
// Filters aren't implemented yet
return [];
}
};
exports.macro = {
name: "list",
types: ["text/html","text/plain"],
dependentAll: true, // Tiddlers containing <<list>> macro are dependent on every tiddler
params: {
type: {byName: "default", type: "text", optional: false},
template: {byName: true, type: "tiddler", optional: true},
emptyMessage: {byName: true, type: "text", optional: true}
},
handler: function(type,tiddler,store,params) {
var templateType = "text/x-tiddlywiki",
templateText = "<<view title link>>",
template = params.template ? store.getTiddler(params.template) : null,
output = [],
isHtml = type === "text/html",
encoder = isHtml ? utils.htmlEncode : function(x) {return x;},
pushTag = isHtml ? function(x) {output.push(x);} : function(x) {},
handler,
t;
if(template) {
templateType = template.type;
templateText = template.text;
}
handler = handlers[params.type];
handler = handler || handlers.all;
var tiddlers = handler(store);
if(tiddlers.length === 0) {
return params.emptyMessage ? encoder(params.emptyMessage) : "";
} else {
var renderer = store.compileText(templateType,templateText,type);
pushTag("<ul>");
for(t=0; t<tiddlers.length; t++) {
pushTag("<li>");
output.push(renderer.render(store.getTiddler(tiddlers[t]),store));
pushTag("</li>");
}
pushTag("</ul>");
return output.join("");
}
}
};
})();