var readFirstNLines = (thefile, count, process_content_fns) => {
var reader = new FileReader();
if(typeof thefile !== "undefined" && thefile !== null) {
reader.addEventListener("load", (event) => {
var content = event
.target
.result
.split("\n")
.slice(0, count)
.map((line) => {return line.trim("\r");});
process_content_fns.forEach((fn) => {fn(content);});
});
reader.readAsText(thefile);
}
};
var read_first_n_lines = readFirstNLines;
var readBinaryFile = (file) => {
return new Promise((resolve, reject) => {
var _reader = new FileReader();
_reader.onload = (event) => {resolve(_reader.result);};
_reader.readAsArrayBuffer(file);
});
};
var Uint8ArrayToHex = (arr) => {
var toHex = (val) => {
_hex = val.toString(16);
if(_hex.length < 2) {
return "0" + val;
}
return _hex;
};
_hexstr = ""
arr.forEach((val) => {_hexstr += toHex(val)});
return _hexstr
};
var computeFileChecksum = (file) => {
return readBinaryFile(file)
.then((content) => {
return window.crypto.subtle.digest(
"SHA-256", new Uint8Array(content));
}).then((digest) => {
return Uint8ArrayToHex(new Uint8Array(digest))
});
};
var defaultResumableHandler = (event) => {
throw new Error("Please provide a valid event handler!");
};
var addHandler = (resumable, handlername, handler) => {
if(resumable.support) {
resumable.on(handlername, (handler || defaultResumableHandler));
}
return resumable;
};
var makeResumableHandler = (handlername) => {
return (resumable, handler) => {
return addHandler(resumable, handlername, handler);
};
};
var fileSuccessHandler = makeResumableHandler("fileSuccess");
var fileProgressHandler = makeResumableHandler("fileProgress");
var fileAddedHandler = makeResumableHandler("fileAdded");
var filesAddedHandler = makeResumableHandler("filesAdded");
var filesRetryHandler = makeResumableHandler("filesRetry");
var filesErrorHandler = makeResumableHandler("filesError");
var uploadStartHandler = makeResumableHandler("uploadStart");
var completeHandler = makeResumableHandler("complete");
var progressHandler = makeResumableHandler("progress");
var errorHandler = makeResumableHandler("error");
var markResumableDragAndDropElement = (resumable, fileinput, droparea, browsebutton) => {
if(resumable.support) {
//Hide file input element and display drag&drop UI
add_class(fileinput, "visually-hidden");
remove_class(droparea, "visually-hidden");
// Define UI elements for browse and drag&drop
resumable.assignDrop(droparea);
resumable.assignBrowse(browsebutton);
}
return resumable;
};
var makeResumableElement = (targeturi, fileinput, droparea, uploadbutton, filetype) => {
var resumable = Resumable({
target: targeturi,
fileType: filetype,
maxFiles: 1,
forceChunkSize: true,
generateUniqueIdentifier: (file, event) => {
return computeFileChecksum(file).then((checksum) => {
var _relativePath = (file.webkitRelativePath
|| file.relativePath
|| file.fileName
|| file.name);
return checksum + "-" + _relativePath.replace(
/[^a-zA-Z0-9_-]/img, "");
});
}
});
return resumable;
};