swarm-js
Version:
Swarm tools for JavaScript.
55 lines (51 loc) • 1.65 kB
JavaScript
const picker = type => () => new Promise((resolve, reject) => {
const fileLoader = e => {
const directory = {};
const totalFiles = e.target.files.length;
let loadedFiles = 0;
[].map.call(e.target.files, file => {
const reader = new FileReader();
reader.onload = e => {
const data = new Uint8Array(e.target.result);
if (type === "directory") {
const path = file.webkitRelativePath;
directory[path.slice(path.indexOf("/")+1)] = {
type: "text/plain",
data: data
};
if (++loadedFiles === totalFiles)
resolve(directory);
} else if (type === "file") {
const path = file.webkitRelativePath;
resolve({"type": mimetype.lookup(path), "data": data});
} else {
resolve(data);
}
};
reader.readAsArrayBuffer(file);
});
};
let fileInput;
if (type === "directory") {
fileInput = document.createElement("input");
fileInput.addEventListener("change", fileLoader);
fileInput.type = "file";
fileInput.webkitdirectory = true;
fileInput.mozdirectory = true;
fileInput.msdirectory = true;
fileInput.odirectory = true;
fileInput.directory = true;
} else {
fileInput = document.createElement("input");
fileInput.addEventListener("change", fileLoader);
fileInput.type = "file";
};
const mouseEvent = document.createEvent("MouseEvents");
mouseEvent.initEvent("click", true, false);
fileInput.dispatchEvent(mouseEvent);
});
module.exports = {
data: picker("data"),
file: picker("file"),
directory: picker("directory"),
}