mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
75 lines
2.4 KiB
JavaScript
75 lines
2.4 KiB
JavaScript
(function () {
|
|
var ns = $.namespace('pskl.utils');
|
|
|
|
var getFileInputElement = function (nwsaveas, accept) {
|
|
var fileInputElement = document.createElement('INPUT');
|
|
fileInputElement.setAttribute('type', 'file');
|
|
fileInputElement.setAttribute('nwworkingdir', '');
|
|
if (nwsaveas) {
|
|
fileInputElement.setAttribute('nwsaveas', nwsaveas);
|
|
}
|
|
if (accept) {
|
|
fileInputElement.setAttribute('accept', accept);
|
|
}
|
|
|
|
return fileInputElement;
|
|
};
|
|
|
|
ns.FileUtilsDesktop = {
|
|
chooseFilenameDialog : function (nwsaveas, accept) {
|
|
var deferred = Q.defer();
|
|
var fileInputElement = getFileInputElement(nwsaveas, accept);
|
|
var changeListener = function (evt) {
|
|
fileInputElement.removeEventListener('change', changeListener);
|
|
document.removeEventListener('click', changeListener);
|
|
deferred.resolve(fileInputElement.value);
|
|
};
|
|
|
|
fileInputElement.click();
|
|
|
|
fileInputElement.addEventListener('change', changeListener);
|
|
// there is no way to detect a cancelled fileInput popup
|
|
// as a crappy workaround we add a click listener on the document
|
|
// on top the change event listener
|
|
document.addEventListener('click', changeListener);
|
|
|
|
return deferred.promise;
|
|
},
|
|
|
|
/**
|
|
* Save data directly to disk, without showing a save dialog
|
|
* Requires Node-Webkit environment for file system access
|
|
* @param content - data to be saved
|
|
* @param {string} filename - fill path to the file
|
|
* @callback callback
|
|
*/
|
|
saveToFile : function(content, filename) {
|
|
var deferred = Q.defer();
|
|
var fs = window.require('fs');
|
|
fs.writeFile(filename, content, function (err) {
|
|
if (err) {
|
|
deferred.reject('FileUtilsDesktop::savetoFile() - error saving file: ' + filename + ' Error: ' + err);
|
|
} else {
|
|
deferred.resolve();
|
|
}
|
|
});
|
|
|
|
return deferred.promise;
|
|
},
|
|
|
|
readFile : function(filename) {
|
|
var deferred = Q.defer();
|
|
var fs = window.require('fs');
|
|
// NOTE: currently loading everything as utf8, which may not be desirable in future
|
|
fs.readFile(filename, 'utf8', function (err, data) {
|
|
if (err) {
|
|
deferred.reject('FileUtilsDesktop::readFile() - error reading file: ' + filename + ' Error: ' + err);
|
|
} else {
|
|
deferred.resolve(data);
|
|
}
|
|
});
|
|
return deferred.promise;
|
|
}
|
|
};
|
|
})();
|