2012-05-11 16:36:04 +00:00
|
|
|
/*\
|
|
|
|
title: $:/core/modules/commands/server.js
|
|
|
|
type: application/javascript
|
|
|
|
module-type: command
|
|
|
|
|
2012-05-19 17:23:14 +00:00
|
|
|
Serve tiddlers over http
|
2012-05-11 16:36:04 +00:00
|
|
|
|
|
|
|
\*/
|
|
|
|
(function(){
|
|
|
|
|
|
|
|
/*jslint node: true, browser: true */
|
|
|
|
/*global $tw: false */
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
exports.info = {
|
|
|
|
name: "server",
|
|
|
|
synchronous: true
|
|
|
|
};
|
|
|
|
|
|
|
|
var Command = function(params,commander,callback) {
|
|
|
|
this.params = params;
|
|
|
|
this.commander = commander;
|
|
|
|
this.callback = callback;
|
|
|
|
};
|
|
|
|
|
|
|
|
Command.prototype.execute = function() {
|
|
|
|
var self = this,
|
|
|
|
util = require("util"),
|
|
|
|
fs = require("fs"),
|
|
|
|
url = require("url"),
|
|
|
|
path = require("path"),
|
|
|
|
http = require("http"),
|
|
|
|
port = this.params[0] || "8080",
|
2012-06-01 17:26:55 +00:00
|
|
|
rootTiddler = this.params[1] || "$:/core/templates/tiddlywiki5.template.html",
|
2012-05-11 16:36:04 +00:00
|
|
|
renderType = this.params[2] || "text/plain",
|
|
|
|
serveType = this.params[3] || "text/html";
|
|
|
|
http.createServer(function(request, response) {
|
|
|
|
var path = url.parse(request.url).pathname;
|
|
|
|
switch(request.method) {
|
|
|
|
case "PUT":
|
|
|
|
var data = "";
|
|
|
|
request.on("data",function(chunk) {
|
|
|
|
data += chunk.toString();
|
|
|
|
});
|
|
|
|
request.on("end",function() {
|
|
|
|
var title = decodeURIComponent(path.substr(1));
|
|
|
|
self.commander.wiki.addTiddler(new $tw.Tiddler(JSON.parse(data),{title: title}));
|
|
|
|
response.writeHead(204, "OK");
|
|
|
|
response.end();
|
|
|
|
});
|
|
|
|
break;
|
|
|
|
case "DELETE":
|
|
|
|
self.commander.wiki.deleteTiddler(decodeURIComponent(path.substr(1)));
|
|
|
|
response.writeHead(204, "OK");
|
|
|
|
response.end();
|
|
|
|
break;
|
|
|
|
case "GET":
|
|
|
|
if(path === "/") {
|
|
|
|
response.writeHead(200, {"Content-Type": serveType});
|
|
|
|
var text = self.commander.wiki.renderTiddler(renderType,rootTiddler);
|
|
|
|
response.end(text, "utf8");
|
|
|
|
} else {
|
|
|
|
response.writeHead(404);
|
|
|
|
response.end();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}).listen(port);
|
|
|
|
if(this.commander.verbose) {
|
|
|
|
console.log("Serving on port " + port);
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.Command = Command;
|
|
|
|
|
|
|
|
})();
|