mirror of
https://github.com/TiddlyWiki/TiddlyWiki5.git
synced 2026-04-30 21:16:54 +00:00
JSZip Plugin: Add ability to build and download ZIP files
This commit is contained in:
103
plugins/tiddlywiki/jszip/startup.js
Normal file
103
plugins/tiddlywiki/jszip/startup.js
Normal file
@@ -0,0 +1,103 @@
|
||||
/*\
|
||||
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",
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
})();
|
||||
Reference in New Issue
Block a user