From 89310e71c832e2845ac6d31b20e9c2e9a922e614 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Mon, 21 Oct 2013 18:33:00 +0100 Subject: [PATCH] Add a new version of rendertiddlers command So that we can test static html generation --- core/modules/commands/new_rendertiddlers.js | 66 +++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 core/modules/commands/new_rendertiddlers.js diff --git a/core/modules/commands/new_rendertiddlers.js b/core/modules/commands/new_rendertiddlers.js new file mode 100644 index 000000000..be513b0bb --- /dev/null +++ b/core/modules/commands/new_rendertiddlers.js @@ -0,0 +1,66 @@ +/*\ +title: $:/core/modules/commands/new_rendertiddlers.js +type: application/javascript +module-type: command + +Command to render several tiddlers to a folder of files + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +var widget = require("$:/core/modules/new_widgets/widget.js"); + +exports.info = { + name: "new_rendertiddlers", + synchronous: true +}; + +var Command = function(params,commander,callback) { + this.params = params; + this.commander = commander; + this.callback = callback; +}; + +Command.prototype.execute = function() { + if(this.params.length < 2) { + return "Missing filename"; + } + var self = this, + fs = require("fs"), + path = require("path"), + wiki = this.commander.wiki, + filter = this.params[0], + template = this.params[1], + pathname = this.params[2], + type = this.params[3] || "text/html", + extension = this.params[4] || ".html", + tiddlers = wiki.filterTiddlers(filter); + $tw.utils.each(tiddlers,function(title) { + var parser = wiki.new_parseTiddler(template), + parseTreeNode = parser ? {type: "widget", children: [{ + type: "setvariable", + attributes: { + name: {type: "string", value: "tiddlerTitle"}, + value: {type: "string", value: title} + }, + children: parser.tree + }]} : undefined, + widgetNode = new widget.widget(parseTreeNode,{ + wiki: wiki, + document: $tw.document + }); + var container = $tw.document.createElement("div"); + widgetNode.render(container,null); + var text = type === "text/html" ? container.innerHTML : container.textContent; + fs.writeFileSync(path.resolve(pathname,encodeURIComponent(title) + extension),text,"utf8"); + }); + return null; +}; + +exports.Command = Command; + +})();