/*\
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
	});
};

})();
