moodle_local_treestudyplan/amd/src/downloader.js
2023-05-17 21:19:14 +02:00

71 lines
2.1 KiB
JavaScript

/*eslint no-console: "off"*/
/**
* Save a piece of text to file as if it was downloaded
* @param {string} filename
* @param {string} text
* @param {string} type
*/
export function download(filename, text, type) {
if(undefined == type) { type = "text/plain"; }
var pom = document.createElement('a');
pom.setAttribute('href', 'data:'+type+';charset=utf-8,' + encodeURIComponent(text));
pom.setAttribute('download', filename);
if (document.createEvent) {
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, true);
pom.dispatchEvent(event);
}
else {
pom.click();
}
}
/**
* This callback type is called `requestCallback` and is displayed as a global symbol.
*
* @callback fileOpenedCallback
* @param {File} file File name
* @param {string} content File Contents
*/
/**
* Open a file from disk and read its contents
* @param {fileOpenedCallback} onready Callback to run when file is opened
* @param {Array} accept Array of mime types that the file dialog will accept
*/
export function upload(onready,accept) {
let input = document.createElement('input');
input.type = 'file';
if(Array.isArray(accept)){
if(accept.count > 0){
input.accept = accept.join(", ");
}
} else if (undefined !== accept){
input.accept = accept;
}
input.onchange = () => {
let files = Array.from(input.files);
if(files.length > 0){
let file = files[0];
var reader = new FileReader();
reader.onload = function(e) {
var contents = e.target.result;
if(onready instanceof Function){
onready(file,contents);
}
};
reader.readAsText(file);
}
};
if (document.createEvent) {
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, true);
input.dispatchEvent(event);
}
else {
input.click();
}
}