diff --git a/js/macros/list.js b/js/macros/list.js index a532e4d47..b49c76e2d 100644 --- a/js/macros/list.js +++ b/js/macros/list.js @@ -9,6 +9,29 @@ title: js/macros/list.js 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"], @@ -19,7 +42,34 @@ exports.macro = { emptyMessage: {byName: true, type: "text", optional: true} }, code: function(type,tiddler,store,params) { - return "Listing!"; + var templateType = "text/x-tiddlywiki", + templateText = "<>", + 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.fields.type; + templateText = template.fields.text; + } + handler = handlers[params.type]; + handler = handler || handlers.all; + var tiddlers = handler(store); + if(tiddlers.length === 0) { + return params.emptyMessage ? encoder(params.emptyMessage) : ""; + } else { + pushTag(""); + return output.join(""); + } } };