2020-05-02 20:22:44 +00:00
|
|
|
/*\
|
|
|
|
title: $:/plugins/tiddlywiki/jszip/startup.js
|
|
|
|
type: application/javascript
|
|
|
|
module-type: startup
|
|
|
|
|
|
|
|
Setup the root widget event handlers
|
|
|
|
|
|
|
|
\*/
|
|
|
|
(function(){
|
|
|
|
|
|
|
|
/*jslint node: true, browser: true */
|
|
|
|
/*global $tw: false */
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
var JSZip = require("$:/plugins/tiddlywiki/jszip/jszip.js");
|
|
|
|
|
|
|
|
// Export name and synchronous status
|
|
|
|
exports.name = "jszip";
|
|
|
|
exports.platforms = ["browser"];
|
|
|
|
exports.after = ["startup"];
|
|
|
|
exports.synchronous = true;
|
|
|
|
|
|
|
|
// Install the root widget event handlers
|
|
|
|
exports.startup = function() {
|
|
|
|
$tw.rootWidget.addEventListener("tm-zip-create",function(event) {
|
|
|
|
if(event.param) {
|
|
|
|
var zip = new JSZip();
|
|
|
|
saveZipTiddler(event.param,zip);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
$tw.rootWidget.addEventListener("tm-zip-add-text-file",function(event) {
|
|
|
|
var paramObject = event.paramObject || {};
|
|
|
|
if(event.param && paramObject.filename && paramObject.text) {
|
|
|
|
var zip = loadZipTiddler(event.param);
|
|
|
|
zip.file(paramObject.filename,paramObject.text);
|
|
|
|
saveZipTiddler(event.param,zip);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
$tw.rootWidget.addEventListener("tm-zip-render-file",function(event) {
|
|
|
|
var paramObject = event.paramObject || {};
|
|
|
|
if(event.param && paramObject.filename && paramObject.template) {
|
|
|
|
var zip = loadZipTiddler(event.param),
|
|
|
|
outputType = paramObject.output || "text/plain",
|
|
|
|
templateTitle = paramObject.template,
|
|
|
|
text = $tw.wiki.renderTiddler(outputType,templateTitle,{
|
|
|
|
parseAsInline: paramObject.mode === "inline",
|
2020-05-09 14:56:48 +00:00
|
|
|
parentWidget: event.widget,
|
2020-05-02 20:22:44 +00:00
|
|
|
variables: {
|
|
|
|
currentTiddler: paramObject.tiddler
|
|
|
|
}
|
|
|
|
});
|
|
|
|
zip.file(paramObject.filename,text);
|
|
|
|
saveZipTiddler(event.param,zip);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
$tw.rootWidget.addEventListener("tm-zip-download",function(event) {
|
|
|
|
var paramObject = event.paramObject || {};
|
|
|
|
if(event.param) {
|
|
|
|
downloadZipFile(event.param,paramObject.filename || "file.zip");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
function loadZipTiddler(title) {
|
|
|
|
return $tw.wiki.getGlobalCache("jszip",function() {
|
|
|
|
var zip = new JSZip(),
|
|
|
|
tiddler = $tw.wiki.getTiddler(title);
|
|
|
|
if(tiddler && tiddler.fields.type === "application/zip") {
|
|
|
|
try {
|
|
|
|
zip.load(tiddler.fields.text,{
|
|
|
|
base64: true
|
|
|
|
});
|
|
|
|
} catch(e) {
|
|
|
|
console.log("JSZip error: " + e)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return zip;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function saveZipTiddler(title,zip) {
|
|
|
|
var data = zip.generate({
|
|
|
|
type: "base64"
|
|
|
|
});
|
|
|
|
$tw.wiki.addTiddler({
|
|
|
|
title: title,
|
|
|
|
type: "application/zip",
|
|
|
|
text: data
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function downloadZipFile(title,filename) {
|
|
|
|
var tiddler = $tw.wiki.getTiddler(title);
|
|
|
|
if(tiddler && tiddler.fields.text && tiddler.fields.type === "application/zip") {
|
|
|
|
var link = document.createElement("a");
|
|
|
|
link.setAttribute("href","data:application/zip;base64," + encodeURIComponent(tiddler.fields.text));
|
|
|
|
link.setAttribute("download",filename);
|
|
|
|
document.body.appendChild(link);
|
|
|
|
link.click();
|
|
|
|
document.body.removeChild(link);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
})();
|