1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-11-27 12:07:19 +00:00
TiddlyWiki5/core/modules/macros/download.js
Jeremy Ruston 52f59a4eb4 Medium-sized refactoring of macro architecture
Now event handlers are attached to element nodes, not to macro nodes.
2012-06-14 17:15:38 +01:00

59 lines
1.4 KiB
JavaScript

/*\
title: $:/core/modules/macros/download.js
type: application/javascript
module-type: macro
Download macro
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
exports.info = {
name: "download",
params: {
title: {byName: "default", type: "text"},
type: {byName: true, type: "text"},
"filename": {byName: true, type: "text"},
"label": {byName: true, type: "text"}
}
};
exports.handleEvent = function(event) {
if(event.type === "click") {
var text = this.wiki.renderTiddler(this.downloadType,this.downloadTitle),
link = document.createElement("a");
link.setAttribute("download",this.downloadFilename);
link.setAttribute("href","data:" + this.downloadType + "," + encodeURIComponent(text));
link.click();
event.preventDefault();
return false;
}
return true;
};
exports.executeMacro = function() {
this.downloadTitle = this.params.title || "$:/core/templates/tiddlywiki5.template.html";
this.downloadType = this.params.type || "text/plain";
this.downloadFilename = this.params.filename || this.downloadTitle;
var attributes = {},
content = [];
if(this.hasParameter("label")) {
content.push($tw.Tree.Text(this.params.label));
} else {
content.push($tw.Tree.Text("Download \"" + this.downloadFilename + "\""));
}
if(this.classes) {
attributes["class"] = this.classes.slice(0);
}
return $tw.Tree.Element("button",attributes,content,{
events: ["click"],
eventHandler: this
});
};
})();