/**
* File utils is used to read and write files.
*
* Can be used alongside with object serialization to store and load objects from file.
*
* @class
* @static
*/
function FileUtils(){}
/**
* Read a local or remote file as text data.
*
* @param {string} fname Path or URL of the file being read.
* @param {Function} onLoad onLoad callback receives the read data as parameter.
* @param {Function} onError onError call is called when a error occurs while reading the file.
*/
FileUtils.read = function(fname, onLoad, onError)
{
var file = new XMLHttpRequest();
file.overrideMimeType("text/plain");
file.open("GET", fname, true);
if(onLoad !== undefined)
{
file.onload = function()
{
onLoad(file.response);
};
}
if(onError !== undefined)
{
file.onerror = onError;
}
file.send(null);
};
/**
* Write text to a file and automatically download it from blob storage.
*
* @method writeFile
* @param {string} fname Path of the file to write.
* @param {string} data Text data to be written to the file.
*/
FileUtils.write = function(fname, data)
{
var blob = new Blob([data], {type:"octet/stream"});
var download = document.createElement("a");
download.download = fname;
download.href = window.URL.createObjectURL(blob);
download.style.display = "none";
download.onclick = function()
{
document.body.removeChild(this);
};
document.body.appendChild(download);
download.click();
};
/**
* Open file chooser dialog window for the user to select files stored in the system.
*
* The files selected are retrieved using the onLoad callback that receives a array of File objects.
*
* @param {Function} onLoad onLoad callback that receives array of files as parameter.
* @param {string} filter File type filter (e.g. ".zip,.rar, etc)
*/
FileUtils.select = function(onLoad, filter)
{
var chooser = document.createElement("input");
chooser.type = "file";
chooser.style.display = "none";
document.body.appendChild(chooser);
if(filter !== undefined)
{
chooser.accept = filter;
}
chooser.onchange = function(event)
{
if(onLoad !== undefined)
{
onLoad(chooser.files);
}
document.body.removeChild(chooser);
};
chooser.click();
};
export {FileUtils};