mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-11-30 13:29:56 +00:00
2381fb5312
Instead of the simple ‘prefix’ and ‘extension’ parameters, we now accept a filename filter. As well as allowing prefixes and suffixes to be added via filter operators, we can also transform the title
233 lines
6.0 KiB
JavaScript
233 lines
6.0 KiB
JavaScript
/*\
|
|
title: $:/plugins/tiddlywiki/aws/command.js
|
|
type: application/javascript
|
|
module-type: command
|
|
|
|
--aws command
|
|
|
|
\*/
|
|
(function(){
|
|
|
|
/*jslint node: true, browser: true */
|
|
/*global $tw: false */
|
|
"use strict";
|
|
|
|
var async,
|
|
awsUtils;
|
|
|
|
exports.info = {
|
|
name: "aws",
|
|
synchronous: false
|
|
};
|
|
|
|
var Command = function(params,commander,callback) {
|
|
async = require("$:/plugins/tiddlywiki/async/async.js");
|
|
awsUtils = require("$:/plugins/tiddlywiki/aws/utils.js");
|
|
this.params = params;
|
|
this.commander = commander;
|
|
this.callback = callback;
|
|
};
|
|
|
|
Command.prototype.execute = function() {
|
|
var self = this,
|
|
wiki = this.commander.wiki,
|
|
subCommand = this.params[0],
|
|
fn = this.subCommands[subCommand];
|
|
if(!fn) {
|
|
return this.callback("AWS: Unknown subcommand")
|
|
}
|
|
fn.bind(this)();
|
|
return null;
|
|
};
|
|
|
|
Command.prototype.subCommands = {};
|
|
|
|
// Load tiddlers from files in an S3 bucket
|
|
Command.prototype.subCommands["s3-load"] = function() {
|
|
var self = this,
|
|
wiki = this.commander.wiki,
|
|
region = this.params[1],
|
|
bucket = this.params[2],
|
|
filepaths = this.params.slice(3);
|
|
// Check parameters
|
|
if(!region || !bucket || filepaths.length < 1) {
|
|
throw "Missing parameters";
|
|
}
|
|
async.eachLimit(
|
|
filepaths,
|
|
20,
|
|
function(filepath,callback) {
|
|
awsUtils.getFile(region,bucket,filepath,function(err,data) {
|
|
if(err) {
|
|
return callback(err);
|
|
}
|
|
var tiddlers = self.commander.wiki.deserializeTiddlers(data.type,data.body,{});
|
|
$tw.utils.each(tiddlers,function(tiddler) {
|
|
self.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));
|
|
});
|
|
callback(null);
|
|
});
|
|
},
|
|
function(err,results) {
|
|
self.callback(err,results);
|
|
}
|
|
);
|
|
return null;
|
|
};
|
|
|
|
// Render a tiddler to an S3 bucket
|
|
Command.prototype.subCommands["s3-rendertiddler"] = function() {
|
|
var self = this,
|
|
wiki = this.commander.wiki,
|
|
title = this.params[1],
|
|
region = this.params[2],
|
|
bucket = this.params[3],
|
|
filename = this.params[4],
|
|
type = this.params[5] || "text/html",
|
|
template = this.params[6],
|
|
zipfilename = this.params[7],
|
|
saveType = this.params[8] || type,
|
|
variables = {};
|
|
// Check parameters
|
|
if(!title || !region || !bucket || !filename) {
|
|
throw "Missing parameters";
|
|
}
|
|
// Process the template if present
|
|
if(template) {
|
|
variables.currentTiddler = title;
|
|
title = template;
|
|
}
|
|
// Render the tiddler
|
|
var text = this.commander.wiki.renderTiddler(type,title,{variables: variables}),
|
|
type = "text/plain",
|
|
encoding = ($tw.config.contentTypeInfo[type] || {encoding: "utf8"}).encoding;
|
|
// Zip it if needed
|
|
if(zipfilename) {
|
|
var JSZip = require("$:/plugins/tiddlywiki/jszip/jszip.js"),
|
|
zip = new JSZip();
|
|
zip.file(filename,new Buffer(text,encoding));
|
|
text = zip.generate({type: "base64"});
|
|
type = "application/zip";
|
|
filename = zipfilename;
|
|
}
|
|
// Save the file
|
|
async.series([
|
|
awsUtils.putFile.bind(null,region,bucket,filename,text,saveType)
|
|
],
|
|
function(err,results){
|
|
self.callback(err,results);
|
|
});
|
|
return null;
|
|
};
|
|
|
|
Command.prototype.subCommands["s3-rendertiddlers"] = function() {
|
|
var self = this,
|
|
wiki = this.commander.wiki,
|
|
filter = this.params[1],
|
|
template = this.params[2],
|
|
region = this.params[3],
|
|
bucket = this.params[4],
|
|
filenameFilter = this.params[5],
|
|
type = this.params[6] || "text/html",
|
|
saveType = this.params[7] || type,
|
|
tiddlers = wiki.filterTiddlers(filter);
|
|
// Check parameters
|
|
if(!filter || !template || !region || !bucket || !filenameFilter) {
|
|
throw "Missing parameters";
|
|
}
|
|
async.eachLimit(
|
|
tiddlers,
|
|
20,
|
|
function(title,callback) {
|
|
var parser = wiki.parseTiddler(template),
|
|
widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),
|
|
container = $tw.fakeDocument.createElement("div");
|
|
widgetNode.render(container,null);
|
|
var text = type === "text/html" ? container.innerHTML : container.textContent,
|
|
filename = wiki.filterTiddlers(filenameFilter,$tw.rootWidget,function(iterator) {
|
|
iterator(wiki.getTiddler(title),title)
|
|
})[0];
|
|
awsUtils.putFile(region,bucket,filename,text,saveType,callback);
|
|
},
|
|
function(err,results) {
|
|
self.callback(err,results);
|
|
}
|
|
);
|
|
return null;
|
|
};
|
|
|
|
// Save a tiddler to an S3 bucket
|
|
Command.prototype.subCommands["s3-savetiddler"] = function() {
|
|
var self = this,
|
|
wiki = this.commander.wiki,
|
|
title = this.params[1],
|
|
region = this.params[2],
|
|
bucket = this.params[3],
|
|
filename = this.params[4],
|
|
zipfilename = this.params[5],
|
|
saveType = this.params[6],
|
|
tiddler = wiki.getTiddler(title),
|
|
text = tiddler.fields.text,
|
|
type = tiddler.fields.type,
|
|
encoding = ($tw.config.contentTypeInfo[type] || {encoding: "utf8"}).encoding;
|
|
// Check parameters
|
|
if(!title || !region || !bucket || !filename) {
|
|
throw "Missing parameters";
|
|
}
|
|
// Zip it if needed
|
|
if(zipfilename) {
|
|
var JSZip = require("$:/plugins/tiddlywiki/jszip/jszip.js"),
|
|
zip = new JSZip();
|
|
zip.file(filename,new Buffer(text,encoding));
|
|
text = zip.generate({type: "base64"});
|
|
type = "application/zip";
|
|
filename = zipfilename;
|
|
}
|
|
// Save the file
|
|
async.series([
|
|
awsUtils.putFile.bind(null,region,bucket,filename,text,saveType || type)
|
|
],
|
|
function(err,results){
|
|
self.callback(err,results);
|
|
});
|
|
return null;
|
|
};
|
|
|
|
// Save a tiddler to an S3 bucket
|
|
Command.prototype.subCommands["s3-savetiddlers"] = function() {
|
|
var self = this,
|
|
wiki = this.commander.wiki,
|
|
filter = this.params[1],
|
|
region = this.params[2],
|
|
bucket = this.params[3],
|
|
filenameFilter = this.params[4],
|
|
saveType = this.params[5],
|
|
tiddlers = wiki.filterTiddlers(filter);
|
|
// Check parameters
|
|
if(!filter || !region || !bucket || !filenameFilter) {
|
|
throw "Missing parameters";
|
|
}
|
|
async.eachLimit(
|
|
tiddlers,
|
|
20,
|
|
function(title,callback) {
|
|
var tiddler = wiki.getTiddler(title),
|
|
text = tiddler.fields.text || "",
|
|
type = tiddler.fields.type || "text/vnd.tiddlywiki",
|
|
filename = wiki.filterTiddlers(filenameFilter,$tw.rootWidget,function(iterator) {
|
|
iterator(wiki.getTiddler(title),title)
|
|
})[0];
|
|
awsUtils.putFile(region,bucket,filename,text,saveType || type,callback);
|
|
},
|
|
function(err,results) {
|
|
self.callback(err,results);
|
|
}
|
|
);
|
|
return null;
|
|
};
|
|
|
|
exports.Command = Command;
|
|
|
|
})();
|
|
|