Files
slava.home/main_plugin/dgrm/infrastructure/file.js

61 lines
1.3 KiB
JavaScript
Executable File

/**
* save file to user
* @param {Blob} blob
* @param {string} name
*/
export function fileSave(blob, name) { ('showSaveFilePicker' in window) ? fileSaveAs(blob) : fileDownload(blob, name); }
/**
* save file with "File save as" dialog
* @param {Blob} blob
*/
async function fileSaveAs(blob) {
try {
// @ts-ignore
const writable = await (await window.showSaveFilePicker({
types: [
{
description: 'PNG Image',
accept: {
'image/png': ['.png']
}
}
]
})).createWritable();
await writable.write(blob);
await writable.close();
} catch {
alert('File not saved');
}
}
/**
* save file with default download process
* @param {Blob} blob
* @param {string} name
*/
function fileDownload(blob, name) {
const link = document.createElement('a');
link.download = name;
link.href = URL.createObjectURL(blob);
link.click();
URL.revokeObjectURL(link.href);
link.remove();
}
/**
* @param {string} accept
* @param {BlobCallback} callBack
*/
export function fileOpen(accept, callBack) {
const input = document.createElement('input');
input.type = 'file';
input.multiple = false;
input.accept = accept;
input.onchange = async function() {
callBack((!input.files?.length) ? null : input.files[0]);
};
input.click();
input.remove();
}