var readFirstNLines = (fileelement, count, process_content_fns) => { var thefile = fileelement.files[0]; 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, "hidden"); remove_class(droparea, "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; };