primevue
Version:
[](https://opensource.org/licenses/MIT) [](https://badge.fury.io/js/primevue) [ • 14.1 kB
JavaScript
import e from"primevue/button";import l from"primevue/message";import i from"primevue/progressbar";import t from"primevue/ripple";import{DomHandler as s}from"primevue/utils";import o from"primevue/badge";import{resolveComponent as a,openBlock as n,createElementBlock as p,Fragment as d,renderList as r,createElementVNode as u,toDisplayString as h,createVNode as c,resolveDirective as f,renderSlot as m,withDirectives as g,normalizeClass as b,normalizeStyle as v,withKeys as F,createBlock as y,createCommentVNode as B,withCtx as C,createTextVNode as L}from"vue";var S={emits:["remove"],props:{files:{type:Array,default:()=>[]},badgeSeverity:{type:String,default:"warning"},badgeValue:{type:String,default:null},previewWidth:{type:Number,default:50}},methods:{formatSize(e){if(0===e)return"0 B";let l=Math.floor(Math.log(e)/Math.log(1e3));return parseFloat((e/Math.pow(1e3,l)).toFixed(3))+" "+["B","KB","MB","GB","TB","PB","EB","ZB","YB"][l]}},components:{FileUploadButton:e,FileUploadBadge:o}};const w=["alt","src","width"],I={class:"p-fileupload-file-details"},x={class:"p-fileupload-file-name"},E={class:"p-fileupload-file-size"},k={class:"p-fileupload-file-actions"};S.render=function(e,l,i,t,s,o){const f=a("FileUploadBadge"),m=a("FileUploadButton");return n(!0),p(d,null,r(i.files,((l,t)=>(n(),p("div",{key:l.name+l.type+l.size,class:"p-fileupload-file"},[u("img",{role:"presentation",class:"p-fileupload-file-thumbnail",alt:l.name,src:l.objectURL,width:i.previewWidth},null,8,w),u("div",I,[u("div",x,h(l.name),1),u("span",E,h(o.formatSize(l.size)),1),c(f,{value:i.badgeValue,class:"p-fileupload-file-badge",severity:i.badgeSeverity},null,8,["value","severity"])]),u("div",k,[c(m,{icon:"pi pi-times",onClick:l=>e.$emit("remove",t),class:"p-fileupload-file-remove p-button-text p-button-danger p-button-rounded"},null,8,["onClick"])])])))),128)};var D={name:"FileUpload",emits:["select","uploader","before-upload","progress","upload","error","before-send","clear","remove","remove-uploaded-file"],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},chooseIcon:{type:String,default:"pi pi-plus"},uploadIcon:{type:String,default:"pi pi-upload"},cancelIcon:{type:String,default:"pi pi-times"},style:null,class:null},duplicateIEEvent:!1,data:()=>({uploadedFileCount:0,files:[],messages:[],focused:!1,progress:null,uploadedFiles:[]}),methods:{onFileSelect(e){if("drop"!==e.type&&this.isIE11()&&this.duplicateIEEvent)return void(this.duplicateIEEvent=!1);this.messages=[],this.files=this.files||[];let l=e.dataTransfer?e.dataTransfer.files:e.target.files;for(let e of l)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}),this.clear();else{let e=new XMLHttpRequest,l=new FormData;this.$emit("before-upload",{xhr:e,formData:l});for(let e of this.files)l.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.uploadedFiles.push(...this.files),this.clear())},e.open("POST",this.url,!0),this.$emit("before-send",{xhr:e,formData:l}),e.withCredentials=this.withCredentials,e.send(l)}},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 l of this.files)if(l.name+l.type+l.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 l=this.accept.split(",").map((e=>e.trim()));for(let i of l){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||(s.addClass(this.$refs.content,"p-fileupload-highlight"),e.stopPropagation(),e.preventDefault())},onDragLeave(){this.disabled||s.removeClass(this.$refs.content,"p-fileupload-highlight")},onDrop(e){if(!this.disabled){s.removeClass(this.$refs.content,"p-fileupload-highlight"),e.stopPropagation(),e.preventDefault();const l=e.dataTransfer?e.dataTransfer.files:e.target.files;(this.multiple||l&&1===l.length)&&this.onFileSelect(e)}},onBasicUploaderClick(){this.hasFiles?this.upload():this.$refs.fileInput.click()},remove(e){this.clearInputElement();let l=this.files.splice(e,1)[0];this.files=[...this.files],this.$emit("remove",{file:l,files:this.files})},removeUploadedFile(e){let l=this.uploadedFiles.splice(e,1)[0];this.uploadedFiles=[...this.uploadedFiles],this.$emit("remove-uploaded-file",{file:l,files:this.uploadedFiles})},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 l=Math.floor(Math.log(e)/Math.log(1e3));return parseFloat((e/Math.pow(1e3,l)).toFixed(3))+" "+["B","KB","MB","GB","TB","PB","EB","ZB","YB"][l]},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()))},onMessageClose(){this.messages=null}},computed:{isAdvanced(){return"advanced"===this.mode},isBasic(){return"basic"===this.mode},advancedChooseButtonClass(){return["p-button p-component p-fileupload-choose",this.class,{"p-disabled":this.disabled,"p-focus":this.focused}]},basicChooseButtonClass(){return["p-button p-component p-fileupload-choose",this.class,{"p-fileupload-choose-selected":this.hasFiles,"p-disabled":this.disabled,"p-focus":this.focused}]},advancedChooseIconClass(){return["p-button-icon p-button-icon-left pi-fw",this.chooseIcon]},basicChooseButtonIconClass(){return["p-button-icon p-button-icon-left",!this.hasFiles||this.auto?this.uploadIcon:this.chooseIcon]},basicChooseButtonLabel(){return this.auto?this.chooseButtonLabel:this.hasFiles?this.files.map((e=>e.name)).join(", "):this.chooseButtonLabel},hasFiles(){return this.files&&this.files.length>0},hasUploadedFiles(){return this.uploadedFiles&&this.uploadedFiles.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},completedLabel(){return this.$primevue.config.locale.completed},pendingLabel(){return this.$primevue.config.locale.pending}},components:{FileUploadButton:e,FileUploadProgressBar:i,FileUploadMessage:l,FileContent:S},directives:{ripple:t}};const M={key:0,class:"p-fileupload p-fileupload-advanced p-component"},U=["multiple","accept","disabled"],$={class:"p-fileupload-buttonbar"},z={class:"p-button-label"},T={key:0,class:"p-fileupload-empty"},W={key:1,class:"p-fileupload p-fileupload-basic p-component"},R={class:"p-button-label"},V=["accept","disabled","multiple"];!function(e,l){void 0===l&&(l={});var i=l.insertAt;if(e&&"undefined"!=typeof document){var t=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css","top"===i&&t.firstChild?t.insertBefore(s,t.firstChild):t.appendChild(s),s.styleSheet?s.styleSheet.cssText=e:s.appendChild(document.createTextNode(e))}}("\n.p-fileupload-content {\n position: relative;\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-fileupload-buttonbar {\n display: flex;\n flex-wrap: wrap;\n}\n.p-fileupload > input[type='file'],\n.p-fileupload-basic input[type='file'] {\n display: none;\n}\n.p-fluid .p-fileupload .p-button {\n width: auto;\n}\n.p-fileupload-file {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n}\n.p-fileupload-file-thumbnail {\n flex-shrink: 0;\n}\n.p-fileupload-file-actions {\n margin-left: auto;\n}\n"),D.render=function(e,l,i,t,s,o){const S=a("FileUploadButton"),w=a("FileUploadProgressBar"),I=a("FileUploadMessage"),x=a("FileContent"),E=f("ripple");return o.isAdvanced?(n(),p("div",M,[u("input",{ref:"fileInput",type:"file",onChange:l[0]||(l[0]=(...e)=>o.onFileSelect&&o.onFileSelect(...e)),multiple:i.multiple,accept:i.accept,disabled:o.chooseDisabled},null,40,U),u("div",$,[m(e.$slots,"header",{files:s.files,uploadedFiles:s.uploadedFiles,chooseCallback:o.choose,uploadCallback:o.upload,clearCallback:o.clear},(()=>[g((n(),p("span",{class:b(o.advancedChooseButtonClass),style:v(i.style),onClick:l[1]||(l[1]=(...e)=>o.choose&&o.choose(...e)),onKeydown:l[2]||(l[2]=F(((...e)=>o.choose&&o.choose(...e)),["enter"])),onFocus:l[3]||(l[3]=(...e)=>o.onFocus&&o.onFocus(...e)),onBlur:l[4]||(l[4]=(...e)=>o.onBlur&&o.onBlur(...e)),tabindex:"0"},[u("span",{class:b(o.advancedChooseIconClass)},null,2),u("span",z,h(o.chooseButtonLabel),1)],38)),[[E]]),i.showUploadButton?(n(),y(S,{key:0,label:o.uploadButtonLabel,icon:i.uploadIcon,onClick:o.upload,disabled:o.uploadDisabled},null,8,["label","icon","onClick","disabled"])):B("",!0),i.showCancelButton?(n(),y(S,{key:1,label:o.cancelButtonLabel,icon:i.cancelIcon,onClick:o.clear,disabled:o.cancelDisabled},null,8,["label","icon","onClick","disabled"])):B("",!0)]))]),u("div",{ref:"content",class:"p-fileupload-content",onDragenter:l[5]||(l[5]=(...e)=>o.onDragEnter&&o.onDragEnter(...e)),onDragover:l[6]||(l[6]=(...e)=>o.onDragOver&&o.onDragOver(...e)),onDragleave:l[7]||(l[7]=(...e)=>o.onDragLeave&&o.onDragLeave(...e)),onDrop:l[8]||(l[8]=(...e)=>o.onDrop&&o.onDrop(...e))},[m(e.$slots,"content",{files:s.files,uploadedFiles:s.uploadedFiles,removeUploadedFileCallback:o.removeUploadedFile,removeFileCallback:o.remove,progress:s.progress,messages:s.messages},(()=>[o.hasFiles?(n(),y(w,{key:0,value:s.progress,showValue:!1},null,8,["value"])):B("",!0),(n(!0),p(d,null,r(s.messages,(e=>(n(),y(I,{key:e,severity:"error",onClose:o.onMessageClose},{default:C((()=>[L(h(e),1)])),_:2},1032,["onClose"])))),128)),o.hasFiles?(n(),y(x,{key:1,files:s.files,onRemove:o.remove,badgeValue:o.pendingLabel,previewWidth:i.previewWidth},null,8,["files","onRemove","badgeValue","previewWidth"])):B("",!0),c(x,{files:s.uploadedFiles,onRemove:o.removeUploadedFile,badgeValue:o.completedLabel,badgeSeverity:"success",previewWidth:i.previewWidth},null,8,["files","onRemove","badgeValue","previewWidth"])])),!e.$slots.empty||o.hasFiles||o.hasUploadedFiles?B("",!0):(n(),p("div",T,[m(e.$slots,"empty")]))],544)])):o.isBasic?(n(),p("div",W,[(n(!0),p(d,null,r(s.messages,(e=>(n(),y(I,{key:e,severity:"error",onClose:o.onMessageClose},{default:C((()=>[L(h(e),1)])),_:2},1032,["onClose"])))),128)),g((n(),p("span",{class:b(o.basicChooseButtonClass),style:v(i.style),onMouseup:l[12]||(l[12]=(...e)=>o.onBasicUploaderClick&&o.onBasicUploaderClick(...e)),onKeydown:l[13]||(l[13]=F(((...e)=>o.choose&&o.choose(...e)),["enter"])),onFocus:l[14]||(l[14]=(...e)=>o.onFocus&&o.onFocus(...e)),onBlur:l[15]||(l[15]=(...e)=>o.onBlur&&o.onBlur(...e)),tabindex:"0"},[u("span",{class:b(o.basicChooseButtonIconClass)},null,2),u("span",R,h(o.basicChooseButtonLabel),1),o.hasFiles?B("",!0):(n(),p("input",{key:0,ref:"fileInput",type:"file",accept:i.accept,disabled:i.disabled,multiple:i.multiple,onChange:l[9]||(l[9]=(...e)=>o.onFileSelect&&o.onFileSelect(...e)),onFocus:l[10]||(l[10]=(...e)=>o.onFocus&&o.onFocus(...e)),onBlur:l[11]||(l[11]=(...e)=>o.onBlur&&o.onBlur(...e))},null,40,V))],38)),[[E]])])):B("",!0)};export{D as default};