UNPKG

primevue

Version:

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![npm version](https://badge.fury.io/js/primevue.svg)](https://badge.fury.io/js/primevue) [![Discord Chat](https://img.shields.io/discord/55794023

2 lines (1 loc) 11.7 kB
import e from"primevue/button";import t from"primevue/progressbar";import i from"primevue/message";import{DomHandler as l}from"primevue/utils";import s from"primevue/ripple";import{resolveComponent as o,resolveDirective as a,openBlock as n,createBlock as p,createVNode as r,withDirectives as d,withKeys as u,toDisplayString as h,createCommentVNode as c,Fragment as f,renderList as m,withCtx as g,createTextVNode as b,renderSlot as v}from"vue";var y={name:"FileUpload",emits:["select","uploader","before-upload","progress","upload","error","before-send","clear","remove"],props:{name:{type:String,default:null},url:{type:String,default:null},mode:{type:String,default:"advanced"},multiple:{type:Boolean,default:!1},accept:{type:String,default:null},disabled:{type:Boolean,default:!1},auto:{type:Boolean,default:!1},maxFileSize:{type:Number,default:null},invalidFileSizeMessage:{type:String,default:"{0}: Invalid file size, file size should be smaller than {1}."},invalidFileTypeMessage:{type:String,default:"{0}: Invalid file type, allowed file types: {1}."},fileLimit:{type:Number,default:null},invalidFileLimitMessage:{type:String,default:"Maximum number of files exceeded, limit is {0} at most."},withCredentials:{type:Boolean,default:!1},previewWidth:{type:Number,default:50},chooseLabel:{type:String,default:null},uploadLabel:{type:String,default:null},cancelLabel:{type:String,default:null},customUpload:{type:Boolean,default:!1},showUploadButton:{type:Boolean,default:!0},showCancelButton:{type:Boolean,default:!0}},duplicateIEEvent:!1,data:()=>({uploadedFileCount:0,files:[],messages:[],focused:!1,progress:null}),methods:{onFileSelect(e){if("drop"!==e.type&&this.isIE11()&&this.duplicateIEEvent)return void(this.duplicateIEEvent=!1);this.messages=[],this.files=this.files||[];let t=e.dataTransfer?e.dataTransfer.files:e.target.files;for(let e of t)this.isFileSelected(e)||this.validate(e)&&(this.isImage(e)&&(e.objectURL=window.URL.createObjectURL(e)),this.files.push(e));this.$emit("select",{originalEvent:e,files:this.files}),this.fileLimit&&this.checkFileLimit(),this.auto&&this.hasFiles&&!this.isFileLimitExceeded()&&this.upload(),"drop"!==e.type&&this.isIE11()?this.clearIEInput():this.clearInputElement()},choose(){this.$refs.fileInput.click()},upload(){if(this.customUpload)this.fileLimit&&(this.uploadedFileCount+=this.files.length),this.$emit("uploader",{files:this.files});else{let e=new XMLHttpRequest,t=new FormData;this.$emit("before-upload",{xhr:e,formData:t});for(let e of this.files)t.append(this.name,e,e.name);e.upload.addEventListener("progress",(e=>{e.lengthComputable&&(this.progress=Math.round(100*e.loaded/e.total)),this.$emit("progress",{originalEvent:e,progress:this.progress})})),e.onreadystatechange=()=>{4===e.readyState&&(this.progress=0,e.status>=200&&e.status<300?(this.fileLimit&&(this.uploadedFileCount+=this.files.length),this.$emit("upload",{xhr:e,files:this.files})):this.$emit("error",{xhr:e,files:this.files}),this.clear())},e.open("POST",this.url,!0),this.$emit("before-send",{xhr:e,formData:t}),e.withCredentials=this.withCredentials,e.send(t)}},clear(){this.files=[],this.messages=null,this.$emit("clear"),this.isAdvanced&&this.clearInputElement()},onFocus(){this.focused=!0},onBlur(){this.focused=!1},isFileSelected(e){if(this.files&&this.files.length)for(let t of this.files)if(t.name+t.type+t.size===e.name+e.type+e.size)return!0;return!1},isIE11:()=>!!window.MSInputMethodContext&&!!document.documentMode,validate(e){return this.accept&&!this.isFileTypeValid(e)?(this.messages.push(this.invalidFileTypeMessage.replace("{0}",e.name).replace("{1}",this.accept)),!1):!(this.maxFileSize&&e.size>this.maxFileSize)||(this.messages.push(this.invalidFileSizeMessage.replace("{0}",e.name).replace("{1}",this.formatSize(this.maxFileSize))),!1)},isFileTypeValid(e){let t=this.accept.split(",").map((e=>e.trim()));for(let i of t){if(this.isWildcard(i)?this.getTypeClass(e.type)===this.getTypeClass(i):e.type==i||this.getFileExtension(e).toLowerCase()===i.toLowerCase())return!0}return!1},getTypeClass:e=>e.substring(0,e.indexOf("/")),isWildcard:e=>-1!==e.indexOf("*"),getFileExtension:e=>"."+e.name.split(".").pop(),isImage:e=>/^image\//.test(e.type),onDragEnter(e){this.disabled||(e.stopPropagation(),e.preventDefault())},onDragOver(e){this.disabled||(l.addClass(this.$refs.content,"p-fileupload-highlight"),e.stopPropagation(),e.preventDefault())},onDragLeave(){this.disabled||l.removeClass(this.$refs.content,"p-fileupload-highlight")},onDrop(e){if(!this.disabled){l.removeClass(this.$refs.content,"p-fileupload-highlight"),e.stopPropagation(),e.preventDefault();const t=e.dataTransfer?e.dataTransfer.files:e.target.files;(this.multiple||t&&1===t.length)&&this.onFileSelect(e)}},onBasicUploaderClick(){this.hasFiles?this.upload():this.$refs.fileInput.click()},remove(e){this.clearInputElement();let t=this.files.splice(e,1)[0];this.files=[...this.files],this.$emit("remove",{file:t,files:this.files})},clearInputElement(){this.$refs.fileInput.value=""},clearIEInput(){this.$refs.fileInput&&(this.duplicateIEEvent=!0,this.$refs.fileInput.value="")},formatSize(e){if(0===e)return"0 B";let t=Math.floor(Math.log(e)/Math.log(1e3));return parseFloat((e/Math.pow(1e3,t)).toFixed(3))+" "+["B","KB","MB","GB","TB","PB","EB","ZB","YB"][t]},isFileLimitExceeded(){return this.fileLimit&&this.fileLimit<=this.files.length+this.uploadedFileCount&&this.focused&&(this.focused=!1),this.fileLimit&&this.fileLimit<this.files.length+this.uploadedFileCount},checkFileLimit(){this.isFileLimitExceeded()&&this.messages.push(this.invalidFileLimitMessage.replace("{0}",this.fileLimit.toString()))}},computed:{isAdvanced(){return"advanced"===this.mode},isBasic(){return"basic"===this.mode},advancedChooseButtonClass(){return["p-button p-component p-fileupload-choose",{"p-disabled":this.disabled,"p-focus":this.focused}]},basicChooseButtonClass(){return["p-button p-component p-fileupload-choose",{"p-fileupload-choose-selected":this.hasFiles,"p-disabled":this.disabled,"p-focus":this.focused}]},basicChooseButtonIconClass(){return["p-button-icon p-button-icon-left pi",{"pi-plus":!this.hasFiles||this.auto,"pi-upload":this.hasFiles&&!this.auto}]},basicChooseButtonLabel(){return this.auto?this.chooseButtonLabel:this.hasFiles?this.files[0].name:this.chooseButtonLabel},hasFiles(){return this.files&&this.files.length>0},chooseDisabled(){return this.disabled||this.fileLimit&&this.fileLimit<=this.files.length+this.uploadedFileCount},uploadDisabled(){return this.disabled||!this.hasFiles||this.fileLimit&&this.fileLimit<this.files.length},cancelDisabled(){return this.disabled||!this.hasFiles},chooseButtonLabel(){return this.chooseLabel||this.$primevue.config.locale.choose},uploadButtonLabel(){return this.uploadLabel||this.$primevue.config.locale.upload},cancelButtonLabel(){return this.cancelLabel||this.$primevue.config.locale.cancel}},components:{FileUploadButton:e,FileUploadProgressBar:t,FileUploadMessage:i},directives:{ripple:s}};const F={key:0,class:"p-fileupload p-fileupload-advanced p-component"},B={class:"p-fileupload-buttonbar"},C=r("span",{class:"p-button-icon p-button-icon-left pi pi-fw pi-plus"},null,-1),L={class:"p-button-label"},w={key:1,class:"p-fileupload-files"},x={class:"p-fileupload-filename"},S={key:2,class:"p-fileupload-empty"},k={key:1,class:"p-fileupload p-fileupload-basic p-component"},E={class:"p-button-label"};!function(e,t){void 0===t&&(t={});var i=t.insertAt;if(e&&"undefined"!=typeof document){var l=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css","top"===i&&l.firstChild?l.insertBefore(s,l.firstChild):l.appendChild(s),s.styleSheet?s.styleSheet.cssText=e:s.appendChild(document.createTextNode(e))}}("\n.p-fileupload-content {\n position: relative;\n}\n.p-fileupload-row {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n}\n.p-fileupload-row > div {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n width: 25%;\n}\n.p-fileupload-row > div:last-child {\n text-align: right;\n}\n.p-fileupload-content .p-progressbar {\n width: 100%;\n position: absolute;\n top: 0;\n left: 0;\n}\n.p-button.p-fileupload-choose {\n position: relative;\n overflow: hidden;\n}\n.p-button.p-fileupload-choose input[type=file] {\n display: none;\n}\n.p-fileupload-choose.p-fileupload-choose-selected input[type=file] {\n display: none;\n}\n.p-fileupload-filename {\n word-break: break-all;\n}\n.p-fluid .p-fileupload .p-button {\n width: auto;\n}\n"),y.render=function(e,t,i,l,s,y){const I=o("FileUploadButton"),D=o("FileUploadProgressBar"),$=o("FileUploadMessage"),M=a("ripple");return y.isAdvanced?(n(),p("div",F,[r("div",B,[d(r("span",{class:y.advancedChooseButtonClass,onClick:t[2]||(t[2]=(...e)=>y.choose&&y.choose(...e)),onKeydown:t[3]||(t[3]=u(((...e)=>y.choose&&y.choose(...e)),["enter"])),onFocus:t[4]||(t[4]=(...e)=>y.onFocus&&y.onFocus(...e)),onBlur:t[5]||(t[5]=(...e)=>y.onBlur&&y.onBlur(...e)),tabindex:"0"},[r("input",{ref:"fileInput",type:"file",onChange:t[1]||(t[1]=(...e)=>y.onFileSelect&&y.onFileSelect(...e)),multiple:i.multiple,accept:i.accept,disabled:y.chooseDisabled},null,40,["multiple","accept","disabled"]),C,r("span",L,h(y.chooseButtonLabel),1)],34),[[M]]),i.showUploadButton?(n(),p(I,{key:0,label:y.uploadButtonLabel,icon:"pi pi-upload",onClick:y.upload,disabled:y.uploadDisabled},null,8,["label","onClick","disabled"])):c("",!0),i.showCancelButton?(n(),p(I,{key:1,label:y.cancelButtonLabel,icon:"pi pi-times",onClick:y.clear,disabled:y.cancelDisabled},null,8,["label","onClick","disabled"])):c("",!0)]),r("div",{ref:"content",class:"p-fileupload-content",onDragenter:t[6]||(t[6]=(...e)=>y.onDragEnter&&y.onDragEnter(...e)),onDragover:t[7]||(t[7]=(...e)=>y.onDragOver&&y.onDragOver(...e)),onDragleave:t[8]||(t[8]=(...e)=>y.onDragLeave&&y.onDragLeave(...e)),onDrop:t[9]||(t[9]=(...e)=>y.onDrop&&y.onDrop(...e))},[y.hasFiles?(n(),p(D,{key:0,value:s.progress},null,8,["value"])):c("",!0),(n(!0),p(f,null,m(s.messages,(e=>(n(),p($,{severity:"error",key:e},{default:g((()=>[b(h(e),1)])),_:2},1024)))),128)),y.hasFiles?(n(),p("div",w,[(n(!0),p(f,null,m(s.files,((e,t)=>(n(),p("div",{class:"p-fileupload-row",key:e.name+e.type+e.size},[r("div",null,[y.isImage(e)?(n(),p("img",{key:0,role:"presentation",alt:e.name,src:e.objectURL,width:i.previewWidth},null,8,["alt","src","width"])):c("",!0)]),r("div",x,h(e.name),1),r("div",null,h(y.formatSize(e.size)),1),r("div",null,[r(I,{type:"button",icon:"pi pi-times",onClick:e=>y.remove(t)},null,8,["onClick"])])])))),128))])):c("",!0),e.$slots.empty&&!y.hasFiles?(n(),p("div",S,[v(e.$slots,"empty")])):c("",!0)],544)])):y.isBasic?(n(),p("div",k,[(n(!0),p(f,null,m(s.messages,(e=>(n(),p($,{severity:"error",key:e},{default:g((()=>[b(h(e),1)])),_:2},1024)))),128)),d(r("span",{class:y.basicChooseButtonClass,onMouseup:t[13]||(t[13]=(...e)=>y.onBasicUploaderClick&&y.onBasicUploaderClick(...e)),onKeydown:t[14]||(t[14]=u(((...e)=>y.choose&&y.choose(...e)),["enter"])),onFocus:t[15]||(t[15]=(...e)=>y.onFocus&&y.onFocus(...e)),onBlur:t[16]||(t[16]=(...e)=>y.onBlur&&y.onBlur(...e)),tabindex:"0"},[r("span",{class:y.basicChooseButtonIconClass},null,2),r("span",E,h(y.basicChooseButtonLabel),1),y.hasFiles?c("",!0):(n(),p("input",{key:0,ref:"fileInput",type:"file",accept:i.accept,disabled:i.disabled,onChange:t[10]||(t[10]=(...e)=>y.onFileSelect&&y.onFileSelect(...e)),onFocus:t[11]||(t[11]=(...e)=>y.onFocus&&y.onFocus(...e)),onBlur:t[12]||(t[12]=(...e)=>y.onBlur&&y.onBlur(...e))},null,40,["accept","disabled"]))],34),[[M]])])):c("",!0)};export default y;