forked from sffc/socketio-file-upload
-
Notifications
You must be signed in to change notification settings - Fork 1
/
client.min.js
6 lines (6 loc) · 4.64 KB
/
client.min.js
1
2
3
4
5
6
/* Socket IO File Upload Client-Side Library
* Copyright (C) 2015 Shane Carr and others
* Released under the X11 License
* For more information, visit: https://github.com/vote539/socketio-file-upload
*/
!function(e,t,n){"function"==typeof define&&define.amd?define([],n):"object"==typeof module&&module.exports?module.exports=n():e[t]=n()}(this,"SocketIOFileUpload",function(){return function(e){"use strict";var t=this;if(!window.File||!window.FileReader)throw new Error("Socket.IO File Upload: Browser Not Supported");var n={},i=[],r=[],o={};t.fileInputElementId="siofu_input",t.resetFileInputs=!0,t.useText=!1,t.serializedOctets=!1,t.useBuffer=!0,t.chunkSize=102400,t.chunkDelay=0;var u=function(e,n){var i=document.createEvent("Event");i.initEvent(e,!1,!1);for(var r in n)n.hasOwnProperty(r)&&(i[r]=n[r]);return t.dispatchEvent(i)},a=[],s=function(e,t,n,i){e.addEventListener(t,n,i),a.push(arguments)},f=function(e,t,n,i){e.removeEventListener&&e.removeEventListener(t,n,i)},l=function(){for(var e=a.length-1;e>=0;e--)f.apply(this,a[e]);a=[]},d=function(n){if(null!==t.maxFileSize&&n.size>t.maxFileSize)return void u("error",{file:n,message:"Attempt by client to upload file exceeding the maximum file size",code:1});var o=u("start",{file:n});if(o){var a,l=new FileReader,d=i.length,c=t.useText,m=0;l._realReader&&(l=l._realReader),i.push(n);var v={id:d},p=t.chunkSize;(p>=n.size||0>=p)&&(p=n.size);var h=function(i,r,o){var u=!1;if(!c)try{var a=new Uint8Array(o);t.serializedOctets?o=a:t.useBuffer?o=a.buffer:(u=!0,o=g(a))}catch(s){return void e.emit("siofu_done",{id:d,interrupt:!0})}e.emit("siofu_progress",{id:d,size:n.size,start:i,end:r,content:o,base64:u})},y=function(){e.emit("siofu_done",{id:d})},E=function(){if(!v.abort){var e=n.slice(m,Math.min(m+p,n.size));c?l.readAsText(e):l.readAsArrayBuffer(e)}},b=function(e){if(!v.abort){var i=Math.min(m+p,n.size);h(m,i,e.target.result),u("progress",{file:n,bytesLoaded:i,name:a}),m+=p,m<n.size?setTimeout(E,t.chunkDelay):(y(),u("load",{file:n,reader:l,name:a}))}};s(l,"load",b),s(l,"error",function(){e.emit("siofu_done",{id:d,interrupt:!0}),f(l,"load",b)}),s(l,"abort",function(){e.emit("siofu_done",{id:d,interrupt:!0}),f(l,"load",b)}),e.emit("siofu_start",{name:n.name,mtime:n.lastModified,meta:n.meta,size:n.size,encoding:c?"text":"octet",id:d});var z=function(e){a=e,E()};return r.push(z),v}},c=function(e){for(var t=0;t<e.length;t++){var n=d(e[t]);o[n.id]=n}},m=function(){var e=document.getElementById(t.fileInputElementId);return e||(e=document.createElement("input"),e.setAttribute("type","file"),e.setAttribute("id",t.fileInputElementId),e.style.display="none",document.body.appendChild(e)),e},v=function(){var e=document.getElementById(t.fileInputElementId);e&&e.parentNode.removeChild(e)},p=function(e){if(0!==e.length){for(var t=0;t<e.length;t++)e[t].meta||(e[t].meta={});var n=u("choose",{files:e});n&&c(e)}},h=function(e){var n=e.target.files||e.dataTransfer.files;if(e.preventDefault(),p(n),t.resetFileInputs){try{e.target.value=""}catch(i){}if(e.target.value){var r=document.createElement("form"),o=e.target.parentNode,u=e.target.nextSibling;r.appendChild(e.target),r.reset(),o.insertBefore(e.target,u)}}};this.submitFiles=function(e){e&&p(e)},this.listenOnSubmit=function(e,t){t.files&&s(e,"click",function(){p(t.files)},!1)},this.listenOnArraySubmit=function(e,t){for(var n in t)this.listenOnSubmit(e,t[n])},this.listenOnInput=function(e){e.files&&s(e,"change",h,!1)},this.listenOnDrop=function(e){s(e,"dragover",function(e){e.preventDefault()},!1),s(e,"drop",h)},this.prompt=function(){var e=m();s(e,"change",h,!1);var t=document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),e.dispatchEvent(t)},this.destroy=function(){l(),v();for(var e in o)o.hasOwnProperty(e)&&(o[e].abort=!0);n=null,i=null,r=null,o=null},this.addEventListener=function(e,t){n[e]||(n[e]=[]),n[e].push(t)},this.removeEventListener=function(e,t){if(!n[e])return!1;for(var i=0;i<n[e].length;i++)if(n[e][i]===t)return n[e].splice(i,1),!0;return!1},this.dispatchEvent=function(e){var t=n[e.type];if(!t)return!0;for(var i=!0,r=0;r<t.length;r++){var o=t[r](e);o===!1&&(i=!1)}return i};var g=function(e){var t,n=e.buffer.byteLength,i="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(t=0;n>t;t+=3)i+=r[e[t]>>2],i+=r[(3&e[t])<<4|e[t+1]>>4],i+=r[(15&e[t+1])<<2|e[t+2]>>6],i+=r[63&e[t+2]];return n%3===2?i=i.substring(0,i.length-1)+"=":n%3===1&&(i=i.substring(0,i.length-2)+"=="),i};s(e,"siofu_ready",function(e){r[e.id](e.name)}),s(e,"siofu_complete",function(e){u("complete",{file:i[e.id],detail:e.detail,success:e.success})}),s(e,"siofu_error",function(e){u("error",{file:i[e.id],message:e.message,code:0}),o[e.id].abort=!0})}});