UNPKG

30.5 kBSource Map (JSON)View Raw
1{"version":3,"sources":["ng://primeng/fileupload/fileupload.ts"],"names":["FileUpload","el","sanitizer","zone","http","this","method","invalidFileSizeMessageSummary","invalidFileSizeMessageDetail","invalidFileTypeMessageSummary","invalidFileTypeMessageDetail","invalidFileLimitMessageDetail","invalidFileLimitMessageSummary","previewWidth","chooseLabel","uploadLabel","cancelLabel","chooseIcon","uploadIcon","cancelIcon","showUploadButton","showCancelButton","mode","onBeforeUpload","EventEmitter","onSend","onUpload","onError","onClear","onRemove","onSelect","onProgress","uploadHandler","_files","progress","uploadedFileCount","Object","defineProperty","prototype","files","i","length","file","validate","isImage","objectURL","bypassSecurityTrustUrl","window","URL","createObjectURL","push","ngAfterContentInit","_this","templates","forEach","item","getType","fileTemplate","template","contentTemplate","toolbarTemplate","ngAfterViewInit","runOutsideAngular","content","nativeElement","addEventListener","onDragOver","bind","onFileSelect","event","type","isIE11","duplicateIEEvent","msgs","multiple","dataTransfer","target","isFileSelected","emit","originalEvent","currentFiles","fileLimit","checkFileLimit","hasFiles","auto","isFileLimitExceeded","upload","clearIEInput","clearInputElement","_b","__values","_c","next","done","sFile","value","name","size","document","accept","isFileTypeValid","severity","summary","replace","detail","maxFileSize","formatSize","acceptableTypes","split","map","trim","acceptableTypes_1","acceptableTypes_1_1","isWildcard","getTypeClass","getFileExtension","toLowerCase","fileType","substring","indexOf","pop","test","onImageLoad","img","revokeObjectURL","src","customUpload","uploading","formData_1","FormData","formData","append","post","url","headers","reportProgress","observe","withCredentials","subscribe","HttpEventType","Sent","Response","clear","UploadProgress","Math","round","error","remove","index","splice","focus","isChooseDisabled","toString","advancedFileInput","basicFileInput","onDragEnter","e","disabled","stopPropagation","preventDefault","DomHandler","addClass","dragHighlight","onDragLeave","removeClass","onDrop","onFocus","onBlur","bytes","floor","log","parseFloat","pow","toFixed","onSimpleUploaderClick","getBlockableElement","children","ngOnDestroy","removeEventListener","ElementRef","DomSanitizer","NgZone","HttpClient","__decorate","Input","Output","ContentChildren","PrimeTemplate","ViewChild","Component","selector","changeDetection","ChangeDetectionStrategy","Default","FileUploadModule","NgModule","imports","CommonModule","SharedModule","ButtonModule","ProgressBarModule","MessagesModule","exports","declarations"],"mappings":"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","sourcesContent":["import {NgModule,Component,OnDestroy,Input,Output,EventEmitter,TemplateRef,AfterViewInit,AfterContentInit,\n ContentChildren,QueryList,ViewChild,ElementRef,NgZone,ChangeDetectionStrategy} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DomSanitizer} from '@angular/platform-browser';\nimport {ButtonModule} from 'primeng/button';\nimport {MessagesModule} from 'primeng/messages';\nimport {ProgressBarModule} from 'primeng/progressbar';\nimport {DomHandler} from 'primeng/dom';\nimport {Message} from 'primeng/api';\nimport {PrimeTemplate,SharedModule} from 'primeng/api';\nimport {BlockableUI} from 'primeng/api';\nimport {HttpClient, HttpEvent, HttpEventType, HttpHeaders} from \"@angular/common/http\";\n\n@Component({\n selector: 'p-fileUpload',\n template: `\n <div [ngClass]=\"'ui-fileupload ui-widget'\" [ngStyle]=\"style\" [class]=\"styleClass\" *ngIf=\"mode === 'advanced'\">\n <div class=\"ui-fileupload-buttonbar ui-widget-header ui-corner-top\">\n <span class=\"ui-fileupload-choose\" [label]=\"chooseLabel\" [icon]=\"chooseIcon\" pButton [ngClass]=\"{'ui-state-focus': focus, 'ui-state-disabled':disabled || isChooseDisabled()}\"> \n <input #advancedfileinput type=\"file\" (change)=\"onFileSelect($event)\" [multiple]=\"multiple\" [accept]=\"accept\" [disabled]=\"disabled || isChooseDisabled()\" \n (focus)=\"onFocus()\" (blur)=\"onBlur()\" [attr.title]=\"''\">\n </span>\n\n <p-button *ngIf=\"!auto&&showUploadButton\" type=\"button\" [label]=\"uploadLabel\" [icon]=\"uploadIcon\" (onClick)=\"upload()\" [disabled]=\"!hasFiles() || isFileLimitExceeded()\"></p-button>\n <p-button *ngIf=\"!auto&&showCancelButton\" type=\"button\" [label]=\"cancelLabel\" [icon]=\"cancelIcon\" (onClick)=\"clear()\" [disabled]=\"!hasFiles() || uploading\"></p-button>\n\n <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n </div>\n <div #content [ngClass]=\"{'ui-fileupload-content ui-widget-content ui-corner-bottom':true}\"\n (dragenter)=\"onDragEnter($event)\" (dragleave)=\"onDragLeave($event)\" (drop)=\"onDrop($event)\">\n <p-progressBar [value]=\"progress\" [showValue]=\"false\" *ngIf=\"hasFiles()\"></p-progressBar>\n\n <p-messages [value]=\"msgs\" [enableService]=\"false\"></p-messages>\n\n <div class=\"ui-fileupload-files\" *ngIf=\"hasFiles()\">\n <div *ngIf=\"!fileTemplate\">\n <div class=\"ui-fileupload-row\" *ngFor=\"let file of files; let i = index;\">\n <div><img [src]=\"file.objectURL\" *ngIf=\"isImage(file)\" [width]=\"previewWidth\" /></div>\n <div>{{file.name}}</div>\n <div>{{formatSize(file.size)}}</div>\n <div>\n <button type=\"button\" icon=\"pi pi-times\" pButton (click)=\"remove($event,i)\" [disabled]=\"uploading\"></button>\n </div>\n </div>\n </div>\n <div *ngIf=\"fileTemplate\">\n <ng-template ngFor [ngForOf]=\"files\" [ngForTemplate]=\"fileTemplate\"></ng-template>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </div>\n </div>\n <span *ngIf=\"mode === 'basic'\" [ngClass]=\"{'ui-button ui-fileupload-choose ui-widget ui-state-default ui-corner-all ui-button-text-icon-left': true, \n 'ui-fileupload-choose-selected': hasFiles(),'ui-state-focus': focus, 'ui-state-disabled':disabled}\"\n [ngStyle]=\"style\" [class]=\"styleClass\" (mouseup)=\"onSimpleUploaderClick($event)\">\n <span class=\"ui-button-icon-left pi\" [ngClass]=\"{'pi-plus': !hasFiles()||auto, 'pi-upload': hasFiles()&&!auto}\"></span>\n <span class=\"ui-button-text ui-clickable\">{{auto ? chooseLabel : hasFiles() ? files[0].name : chooseLabel}}</span>\n <input #basicfileinput type=\"file\" [accept]=\"accept\" [multiple]=\"multiple\" [disabled]=\"disabled\"\n (change)=\"onFileSelect($event)\" *ngIf=\"!hasFiles()\" (focus)=\"onFocus()\" (blur)=\"onBlur()\">\n </span>\n `,\n changeDetection: ChangeDetectionStrategy.Default\n})\nexport class FileUpload implements AfterViewInit,AfterContentInit,OnDestroy,BlockableUI {\n\n @Input() name: string;\n\n @Input() url: string;\n\n @Input() method: string = 'POST';\n\n @Input() multiple: boolean;\n\n @Input() accept: string;\n\n @Input() disabled: boolean;\n\n @Input() auto: boolean;\n\n @Input() withCredentials: boolean;\n\n @Input() maxFileSize: number;\n\n @Input() invalidFileSizeMessageSummary: string = '{0}: Invalid file size, ';\n\n @Input() invalidFileSizeMessageDetail: string = 'maximum upload size is {0}.';\n\n @Input() invalidFileTypeMessageSummary: string = '{0}: Invalid file type, ';\n\n @Input() invalidFileTypeMessageDetail: string = 'allowed file types: {0}.';\n\n @Input() invalidFileLimitMessageDetail: string = 'limit is {0} at most.';\n\n @Input() invalidFileLimitMessageSummary: string = 'Maximum number of files exceeded, ';\n\n @Input() style: any;\n\n @Input() styleClass: string;\n\n @Input() previewWidth: number = 50;\n\n @Input() chooseLabel: string = 'Choose';\n\n @Input() uploadLabel: string = 'Upload';\n\n @Input() cancelLabel: string = 'Cancel';\n\n @Input() chooseIcon: string = 'pi pi-plus';\n\n @Input() uploadIcon: string = 'pi pi-upload';\n\n @Input() cancelIcon: string = 'pi pi-times';\n\n @Input() showUploadButton: boolean = true;\n\n @Input() showCancelButton: boolean = true;\n\n @Input() mode: string = 'advanced';\n\n @Input() headers: HttpHeaders;\n \n @Input() customUpload: boolean;\n\n @Input() fileLimit: number;\n\n @Output() onBeforeUpload: EventEmitter<any> = new EventEmitter();\n\n @Output() onSend: EventEmitter<any> = new EventEmitter();\n\n @Output() onUpload: EventEmitter<any> = new EventEmitter();\n\n @Output() onError: EventEmitter<any> = new EventEmitter();\n\n @Output() onClear: EventEmitter<any> = new EventEmitter();\n\n @Output() onRemove: EventEmitter<any> = new EventEmitter();\n\n @Output() onSelect: EventEmitter<any> = new EventEmitter();\n\n @Output() onProgress: EventEmitter<any> = new EventEmitter();\n\n @Output() uploadHandler: EventEmitter<any> = new EventEmitter();\n\n @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n @ViewChild('advancedfileinput') advancedFileInput: ElementRef;\n\n @ViewChild('basicfileinput') basicFileInput: ElementRef;\n\n @ViewChild('content') content: ElementRef;\n\n @Input() set files(files) {\n this._files = [];\n\n for(let i = 0; i < files.length; i++) {\n let file = files[i];\n\n if (this.validate(file)) {\n if (this.isImage(file)) {\n (<any>file).objectURL = this.sanitizer.bypassSecurityTrustUrl((window.URL.createObjectURL(files[i])));\n }\n\n this._files.push(files[i]);\n }\n }\n }\n\n get files(): File[] {\n return this._files;\n }\n\n public _files: File[] = [];\n\n public progress: number = 0;\n\n public dragHighlight: boolean;\n\n public msgs: Message[];\n\n public fileTemplate: TemplateRef<any>;\n\n public contentTemplate: TemplateRef<any>;\n\n public toolbarTemplate: TemplateRef<any>;\n\n public uploadedFileCount: number = 0;\n\n focus: boolean;\n\n uploading: boolean;\n\n duplicateIEEvent: boolean; // flag to recognize duplicate onchange event for file input\n\n constructor(private el: ElementRef, public sanitizer: DomSanitizer, public zone: NgZone, private http: HttpClient){}\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch(item.getType()) {\n case 'file':\n this.fileTemplate = item.template;\n break;\n\n case 'content':\n this.contentTemplate = item.template;\n break;\n\n case 'toolbar':\n this.toolbarTemplate = item.template;\n break;\n\n default:\n this.fileTemplate = item.template;\n break;\n }\n });\n }\n\n ngAfterViewInit() {\n if (this.mode === 'advanced') {\n this.zone.runOutsideAngular(() => {\n if (this.content)\n this.content.nativeElement.addEventListener('dragover', this.onDragOver.bind(this));\n });\n }\n }\n\n onFileSelect(event) {\n if (event.type !== 'drop' && this.isIE11() && this.duplicateIEEvent) {\n this.duplicateIEEvent = false;\n return;\n }\n\n this.msgs = [];\n if (!this.multiple) {\n this.files = [];\n }\n\n let files = event.dataTransfer ? event.dataTransfer.files : event.target.files;\n for(let i = 0; i < files.length; i++) {\n let file = files[i];\n\n if (!this.isFileSelected(file)){\n if (this.validate(file)) {\n if (this.isImage(file)) {\n file.objectURL = this.sanitizer.bypassSecurityTrustUrl((window.URL.createObjectURL(files[i])));\n }\n\n this.files.push(files[i]);\n }\n }\n }\n\n this.onSelect.emit({originalEvent: event, files: files, currentFiles: this.files});\n\n if (this.fileLimit && this.mode == \"advanced\") {\n this.checkFileLimit();\n }\n\n if (this.hasFiles() && this.auto && (!(this.mode === \"advanced\") || !this.isFileLimitExceeded())) {\n this.upload();\n }\n\n if (event.type !== 'drop' && this.isIE11()) {\n this.clearIEInput();\n } else {\n this.clearInputElement();\n }\n }\n\n isFileSelected(file: File): boolean{\n for(let sFile of this.files){\n if ((sFile.name + sFile.type + sFile.size) === (file.name + file.type+file.size)) {\n return true;\n }\n }\n\n return false;\n }\n\n isIE11() {\n return !!window['MSInputMethodContext'] && !!document['documentMode'];\n }\n\n validate(file: File): boolean {\n if (this.accept && !this.isFileTypeValid(file)) {\n this.msgs.push({\n severity: 'error',\n summary: this.invalidFileTypeMessageSummary.replace('{0}', file.name),\n detail: this.invalidFileTypeMessageDetail.replace('{0}', this.accept)\n });\n return false;\n }\n\n if (this.maxFileSize && file.size > this.maxFileSize) {\n this.msgs.push({\n severity: 'error',\n summary: this.invalidFileSizeMessageSummary.replace('{0}', file.name),\n detail: this.invalidFileSizeMessageDetail.replace('{0}', this.formatSize(this.maxFileSize))\n });\n return false;\n }\n\n return true;\n }\n\n private isFileTypeValid(file: File): boolean {\n let acceptableTypes = this.accept.split(',').map(type => type.trim());\n for(let type of acceptableTypes) {\n let acceptable = this.isWildcard(type) ? this.getTypeClass(file.type) === this.getTypeClass(type)\n : file.type == type || this.getFileExtension(file).toLowerCase() === type.toLowerCase();\n\n if (acceptable) {\n return true;\n }\n }\n\n return false;\n }\n\n getTypeClass(fileType: string): string {\n return fileType.substring(0, fileType.indexOf('/'));\n }\n\n isWildcard(fileType: string): boolean {\n return fileType.indexOf('*') !== -1;\n }\n\n getFileExtension(file: File): string {\n return '.' + file.name.split('.').pop();\n }\n\n isImage(file: File): boolean {\n return /^image\\//.test(file.type);\n }\n\n onImageLoad(img: any) {\n window.URL.revokeObjectURL(img.src);\n }\n\n upload() {\n if (this.customUpload) {\n if (this.fileLimit) {\n this.uploadedFileCount += this.files.length; \n }\n \n this.uploadHandler.emit({\n files: this.files\n });\n }\n else {\n this.uploading = true;\n this.msgs = [];\n let formData = new FormData();\n\n this.onBeforeUpload.emit({\n 'formData': formData\n });\n\n for (let i = 0; i < this.files.length; i++) {\n formData.append(this.name, this.files[i], this.files[i].name);\n }\n\n this.http.post(this.url, formData, {\n headers: this.headers, reportProgress: true, observe: 'events', withCredentials: this.withCredentials\n }).subscribe( (event: HttpEvent<any>) => {\n switch (event.type) {\n case HttpEventType.Sent:\n this.onSend.emit({\n originalEvent: event,\n 'formData': formData\n });\n break;\n case HttpEventType.Response:\n this.uploading = false;\n this.progress = 0;\n\n if (event['status'] >= 200 && event['status'] < 300) {\n if (this.fileLimit) {\n this.uploadedFileCount += this.files.length; \n }\n\n this.onUpload.emit({originalEvent: event, files: this.files});\n } else {\n this.onError.emit({files: this.files});\n }\n\n this.clear();\n break;\n case HttpEventType.UploadProgress: {\n if (event['loaded']) {\n this.progress = Math.round((event['loaded'] * 100) / event['total']);\n }\n\n this.onProgress.emit({originalEvent: event, progress: this.progress});\n break;\n }\n }\n },\n error => {\n this.uploading = false;\n this.onError.emit({files: this.files, error: error});\n });\n }\n }\n\n clear() {\n this.files = [];\n this.onClear.emit();\n this.clearInputElement();\n }\n\n remove(event: Event, index: number) {\n this.clearInputElement();\n this.onRemove.emit({originalEvent: event, file: this.files[index]});\n this.files.splice(index, 1);\n }\n\n isFileLimitExceeded() {\n if (this.fileLimit && this.fileLimit <= this.files.length + this.uploadedFileCount && this.focus) {\n this.focus = false;\n }\n\n return this.fileLimit && this.fileLimit < this.files.length + this.uploadedFileCount;\n }\n\n isChooseDisabled() {\n return this.fileLimit && this.fileLimit <= this.files.length + this.uploadedFileCount;\n }\n\n checkFileLimit() {\n if (this.isFileLimitExceeded()) {\n this.msgs.push({\n severity: 'error',\n summary: this.invalidFileLimitMessageSummary.replace('{0}', this.fileLimit.toString()),\n detail: this.invalidFileLimitMessageDetail.replace('{0}', this.fileLimit.toString())\n });\n }\n }\n\n clearInputElement() {\n if (this.advancedFileInput && this.advancedFileInput.nativeElement) {\n this.advancedFileInput.nativeElement.value = '';\n }\n\n if (this.basicFileInput && this.basicFileInput.nativeElement) {\n this.basicFileInput.nativeElement.value = '';\n }\n }\n\n clearIEInput() {\n if (this.advancedFileInput && this.advancedFileInput.nativeElement) {\n this.duplicateIEEvent = true; //IE11 fix to prevent onFileChange trigger again\n this.advancedFileInput.nativeElement.value = '';\n }\n }\n\n hasFiles(): boolean {\n return this.files && this.files.length > 0;\n }\n\n onDragEnter(e) {\n if (!this.disabled) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n onDragOver(e) {\n if (!this.disabled) {\n DomHandler.addClass(this.content.nativeElement, 'ui-fileupload-highlight');\n this.dragHighlight = true;\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n onDragLeave(event) {\n if (!this.disabled) {\n DomHandler.removeClass(this.content.nativeElement, 'ui-fileupload-highlight');\n }\n }\n\n onDrop(event) {\n if (!this.disabled) {\n DomHandler.removeClass(this.content.nativeElement, 'ui-fileupload-highlight');\n event.stopPropagation();\n event.preventDefault();\n\n let files = event.dataTransfer ? event.dataTransfer.files : event.target.files;\n let allowDrop = this.multiple||(files && files.length === 1);\n\n if (allowDrop) {\n this.onFileSelect(event);\n }\n }\n }\n\n onFocus() {\n this.focus = true;\n }\n\n onBlur() {\n this.focus = false;\n }\n\n formatSize(bytes) {\n if (bytes == 0) {\n return '0 B';\n }\n let k = 1024,\n dm = 3,\n sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],\n i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n }\n\n onSimpleUploaderClick(event: Event) {\n if (this.hasFiles()) {\n this.upload();\n }\n }\n\n getBlockableElement(): HTMLElement {\n return this.el.nativeElement.children[0];\n }\n\n ngOnDestroy() {\n if (this.content && this.content.nativeElement) {\n this.content.nativeElement.removeEventListener('dragover', this.onDragOver);\n }\n }\n}\n\n@NgModule({\n imports: [CommonModule,SharedModule,ButtonModule,ProgressBarModule,MessagesModule],\n exports: [FileUpload,SharedModule,ButtonModule,ProgressBarModule,MessagesModule],\n declarations: [FileUpload]\n})\nexport class FileUploadModule { }\n"]}
\No newline at end of file