/*! * Name: vue-upload-component * Version: 2.6.0-beta.3 * Author: LianYue */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.VueUploadComponent=t()}(this,function(){"use strict";function e(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:"";return new Promise(function(n,o){t.isFile?t.file(function(e){n([{size:e.size,name:i+e.name,type:e.type,file:e}])}):t.isDirectory&&r.dropDirectory?t.createReader().readEntries(function(o){var a=[];!function s(u){if(!o[u]||a.length&&!r.multiple)return n(a);r.getEntry(o[u],i+t.name+"/").then(function(t){a.push.apply(a,e(t)),s(u+1)})}(0)}):n([])})},remove:function(e){var t=this.get(e);if(t){if(this.emitFilter(void 0,t))return!1;var r=this.files.concat([]),i=r.indexOf(t);if(-1===i)return console.error("remove",t),!1;r.splice(i,1),this.files=r,delete this.maps[t.id],this.emitInput(),this.emitFile(void 0,t)}return t},update:function(e,t){var i=this.get(e);if(i){var n=r({},i,t);if(!i.fileObject||!i.active||n.active||n.error||n.success||(n.error="abort"),this.emitFilter(n,i))return!1;var o=this.files.concat([]),a=o.indexOf(i);return-1===a?(console.error("update",i),!1):(o.splice(a,1,n),this.files=o,delete this.maps[i.id],this.maps[n.id]=n,this.emitInput(),this.emitFile(n,i),n)}return!1},emitFilter:function(e,t){var r=!1;return this.$emit("input-filter",e,t,function(){return r=!0}),r},emitFile:function(e,t){this.$emit("input-file",e,t),!(e&&e.fileObject&&e.active)||t&&t.active?e&&e.fileObject&&e.active||!t||!t.fileObject||!t.active||this.uploading--:(this.uploading++,this.$nextTick(function(){var t=this;setTimeout(function(){t.upload(e).then(function(){(e=t.get(e))&&e.fileObject&&t.update(e,{active:!1,success:!e.error})}).catch(function(r){t.update(e,{active:!1,success:!1,error:r.code||r.error||r.message||r})})},parseInt(50*Math.random()+50,10))})),!this.active||Boolean(e)===Boolean(t)&&e.active===t.active||this.watchActive(!0)},emitInput:function(){this.$emit("input",this.files)},upload:function(e){var t=this.get(e);if(!t)return Promise.reject("not_exists");if(!t.fileObject)return Promise.reject("file_object");if(t.error)return Promise.reject(t.error);if(t.success)return Promise.resolve(t);var r=this.extensions;return r&&(r.length||void 0===r.length)&&("object"===(void 0===r?"undefined":i(r))&&r instanceof RegExp||("string"==typeof r&&(r=r.split(",").map(function(e){return e.trim()}).filter(function(e){return e})),r=new RegExp("\\.("+r.join("|").replace(/\./g,"\\.")+")$","i")),-1===t.name.search(r))?Promise.reject("extension"):this.size>0&&t.size>=0&&t.size>this.size?Promise.reject("size"):this.features.html5&&t.putAction?this.uploadPut(t):this.features.html5?this.uploadHtml5(t):this.uploadHtml4(t)},uploadPut:function(e){var t=[],r=void 0;for(var i in e.data)null!==(r=e.data[i])&&void 0!==r&&t.push(encodeURIComponent(i)+"="+encodeURIComponent(r));var n=t.length?(-1===e.putAction.indexOf("?")?"?":"&")+t.join("&"):"",o=new XMLHttpRequest;return o.open("PUT",e.putAction+n),this.uploadXhr(o,e,e.file)},uploadHtml5:function(e){var t=new window.FormData,r=void 0;for(var n in e.data)(r=e.data[n])&&"object"===(void 0===r?"undefined":i(r))&&"function"!=typeof r.toString?t.append(n,JSON.stringify(r)):null!==r&&void 0!==r&&t.append(n,r);t.append(this.name,e.file);var o=new XMLHttpRequest;return o.open("POST",e.postAction),this.uploadXhr(o,e,t)},uploadXhr:function(e,t,r){var i=this,n=t,o=0,a=0;e.upload.onprogress=function(e){if(n=i.get(n),e.lengthComputable&&n&&n.fileObject&&n.active){var t=Math.round(Date.now()/1e3);t!==o&&(o=t,n=i.update(n,{progress:(e.loaded/e.total*100).toFixed(2),speed:e.loaded-a}),a=e.loaded)}};var s=setInterval(function(){if(!(n=i.get(n))||!n.fileObject||n.success||n.error||!n.active){s&&(clearInterval(s),s=!1);try{e.abort(),e.timeout=1}catch(e){}}},100);return new Promise(function(t,o){var a=void 0,u=function(r){if(!a){if(a=!0,s&&(clearInterval(s),s=!1),!(n=i.get(n)))return o("not_exists");if(!n.fileObject)return o("file_object");if(n.error)return o(n.error);if(!n.active)return o("abort");if(n.success)return t(n);var u={};switch(r.type){case"timeout":case"abort":u.error=r.type;break;case"error":e.status?e.status>=500?u.error="server":e.status>=400&&(u.error="denied"):u.error="network";break;default:e.status>=500?u.error="server":e.status>=400?u.error="denied":u.progress="100.00"}if(e.responseText){var d=e.getResponseHeader("Content-Type");d&&-1!==d.indexOf("/json")?u.response=JSON.parse(e.responseText):u.response=e.responseText}return(n=i.update(n,u)).error?o(n.error):t(n)}};e.onload=u,e.onerror=u,e.onabort=u,e.ontimeout=u,n.timeout&&(e.timeout=n.timeout);for(var d in n.headers)e.setRequestHeader(d,n.headers[d]);n=i.update(n,{xhr:e}),e.send(r)})},uploadHtml4:function(e){var t=this,r=e,n=function(e){27===e.keyCode&&e.preventDefault()},o=document.createElement("iframe");o.id="upload-iframe-"+r.id,o.name="upload-iframe-"+r.id,o.src="about:blank",o.setAttribute("style","width:1px;height:1px;top:-999em;position:absolute; margin-top:-999em;");var a=document.createElement("form");a.action=r.postAction,a.name="upload-form-"+r.id,a.setAttribute("method","POST"),a.setAttribute("target","upload-iframe-"+r.id),a.setAttribute("enctype","multipart/form-data");var s=void 0,u=void 0;for(var d in r.data)(s=r.data[d])&&"object"===(void 0===s?"undefined":i(s))&&"function"!=typeof s.toString&&(s=JSON.stringify(s)),null!==s&&void 0!==s&&((u=document.createElement("input")).type="hidden",u.name=d,a.appendChild(u));a.appendChild(r.el),document.body.appendChild(o).appendChild(a);var l=function(){var e=void 0;try{o.contentWindow&&(e=o.contentWindow.document)}catch(e){}if(!e)try{e=o.contentDocument?o.contentDocument:o.document}catch(t){e=o.document}return e&&e.body?e.body.innerHTML:null};return new Promise(function(e,i){setTimeout(function(){if(!(r=t.update(r,{iframe:o})))return i("not_exists");var s=setInterval(function(){(r=t.get(r))&&r.fileObject&&!r.success&&!r.error&&r.active||(s&&(clearInterval(s),s=!1),o.onabort({type:r?"abort":"not_exists"}))},100),u=void 0,d=function(o){if(!u){if(u=!0,s&&(clearInterval(s),s=!1),document.body.removeEventListener("keydown",n),!(r=t.get(r)))return i("not_exists");if(!r.fileObject)return i("file_object");if(r.error)return i(r.error);if(!r.active)return i("abort");if(r.success)return e(r);var a=l(),d={};switch(o.type){case"abort":d.error="abort";break;case"error":r.error?d.error=r.error:d.error=null===a?"network":"denied";break;default:r.error?d.error=r.error:null===d?d.error="network":d.progress="100.00"}if(null!==a){if(a&&"{"===a.substr(0,1)&&"}"===a.substr(a.length-1,1))try{a=JSON.parse(a)}catch(e){}d.response=a}return(r=t.update(r,d)).error?i(r.error):e(r)}};o.onload=d,o.onerror=d,o.onabort=d,document.body.addEventListener("keydown",n),a.submit()},50)}).then(function(e){return o.parentNode&&o.parentNode.removeChild(o),e}).catch(function(e){return o.parentNode&&o.parentNode.removeChild(o),e})},watchActive:function(e){for(var t=void 0,r=0;t=this.files[r];)if(r++,t.fileObject)if(e&&!this.destroy){if(this.uploading>=this.thread||this.uploading&&!this.features.html5)break;t.active||t.error||t.success||this.update(t,{active:!0})}else t.active&&this.update(t,{active:!1});else;0===this.uploading&&(this.active=!1)},watchDrop:function(e){var t=e;if(this.features.drop){if(this.dropElement)try{document.removeEventListener("dragenter",this.onDragenter,!1),document.removeEventListener("dragleave",this.onDragleave,!1),this.dropElement.removeEventListener("dragover",this.onDragover,!1),this.dropElement.removeEventListener("drop",this.onDrop,!1)}catch(e){}t?"string"==typeof t?t=document.querySelector(t)||this.$root.$el.querySelector(t):!0===t&&(t=this.$parent.$el):t=!1,this.dropElement=t,this.dropElement&&(document.addEventListener("dragenter",this.onDragenter,!1),document.addEventListener("dragleave",this.onDragleave,!1),this.dropElement.addEventListener("dragover",this.onDragover,!1),this.dropElement.addEventListener("drop",this.onDrop,!1))}},onDragenter:function(e){e.preventDefault(),this.dropActive||(this.dropActive=!0)},onDragleave:function(e){e.preventDefault(),("HTML"===e.target.nodeName||0===e.screenX&&0===e.screenY&&0===e.screenY&&!e.fromElement&&e.offsetX<0)&&(this.dropActive=!1)},onDragover:function(e){e.preventDefault()},onDrop:function(e){e.preventDefault(),this.dropActive=!1,this.addDataTransfer(e.dataTransfer)}}},o=Object.freeze({default:n});return o&&n||o}); //# sourceMappingURL=vue-upload-component.min.js.map