var FileUpload = function(t, uploadBtnText, returnCB){ var events = new EventManager(), hiddenInput = getHiddenInput(), btnText = uploadBtnText || 'Upload', ele = getElementFromString('
' + btnText + '
'); if(!returnCB) console.error("You must have a return callback to initialize FileUpload.") t.appendChild(ele); events.add(ele, 'click', openFileInput); events.add(ele, 'dragover', dragHover); events.add(ele, 'dragleave', dragHover); events.add(ele, 'drop', checkFileInput); events.add(hiddenInput, 'change', checkFileInput); this.open = openFileInput; this.exit = exit; function openFileInput(e){ if(e && e.preventDefault) e.preventDefault(); hiddenInput.click(); } function checkFileInput(e){ e.target.classList.remove('bright'); var f = (e.target && !!e.target.files) ? e.target.files[0] : null; if(!f) f = (e.path && !!e.path[0].files) ? e.path[0].files[0] : null; if(!f) f = (e.dataTransfer && !!e.dataTransfer.files) ? e.dataTransfer.files[0] : null; if(!f) return; var fr = new FileReader(); fr.onload = function(e) { var result = e.target.result; returnCB(result, f); } fr.readAsText(f); } function dragHover(e) { e.stopPropagation(); e.preventDefault(); if(e.type === 'dragover') { e.target.classList.add('bright'); } else { e.target.classList.remove('bright'); } } function exit(){ removeChild(t, ele); if(!!events) events.reset(); events = hiddenInput = ele = null; } };