{"version":3,"file":"axulus-uikit-fileupload.mjs","sources":["../../src/app/components/fileupload/fileupload.ts","../../src/app/components/fileupload/axulus-uikit-fileupload.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { HttpClient, HttpEvent, HttpEventType, HttpHeaders } from '@angular/common/http';\nimport {\n  AfterContentInit,\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  Input,\n  NgModule,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  TemplateRef,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { BlockableUI, Message, PrimeNGConfig, PrimeTemplate, SharedModule, TranslationKeys } from '@axulus/uikit/api';\nimport { ButtonModule } from '@axulus/uikit/button';\nimport { DomHandler } from '@axulus/uikit/dom';\nimport { MessagesModule } from '@axulus/uikit/messages';\nimport { ProgressBarModule } from '@axulus/uikit/progressbar';\nimport { RippleModule } from '@axulus/uikit/ripple';\nimport { Subscription } from 'rxjs';\n\n@Component({\n  selector: 'p-fileUpload',\n  template: `\n    <div [ngClass]=\"'p-fileupload p-fileupload-advanced p-component'\" [ngStyle]=\"style\" [class]=\"styleClass\" *ngIf=\"mode === 'advanced'\">\n      <div class=\"p-fileupload-buttonbar\">\n        <span\n          class=\"p-button p-component p-fileupload-choose\"\n          [ngClass]=\"{ 'p-focus': focus, 'p-disabled': disabled || isChooseDisabled() }\"\n          (focus)=\"onFocus()\"\n          (blur)=\"onBlur()\"\n          pRipple\n          (click)=\"choose()\"\n          (keydown.enter)=\"choose()\"\n          tabindex=\"0\"\n          [class]=\"chooseStyleClass\"\n        >\n          <input\n            #advancedfileinput\n            type=\"file\"\n            (change)=\"onFileSelect($event)\"\n            [multiple]=\"multiple\"\n            [accept]=\"accept\"\n            [disabled]=\"disabled || isChooseDisabled()\"\n            [attr.title]=\"''\"\n          />\n          <span [ngClass]=\"'p-button-icon p-button-icon-left'\" [class]=\"chooseIcon\"></span>\n          <span class=\"p-button-label\">{{ chooseButtonLabel }}</span>\n        </span>\n\n        <p-button\n          *ngIf=\"!auto && showUploadButton\"\n          type=\"button\"\n          [label]=\"uploadButtonLabel\"\n          [icon]=\"uploadIcon\"\n          (onClick)=\"upload()\"\n          [disabled]=\"!hasFiles() || isFileLimitExceeded()\"\n          [styleClass]=\"uploadStyleClass\"\n        ></p-button>\n        <p-button\n          *ngIf=\"!auto && showCancelButton\"\n          type=\"button\"\n          [label]=\"cancelButtonLabel\"\n          [icon]=\"cancelIcon\"\n          (onClick)=\"clear()\"\n          [disabled]=\"!hasFiles() || uploading\"\n          [styleClass]=\"cancelStyleClass\"\n        ></p-button>\n\n        <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n      </div>\n      <div\n        #content\n        class=\"p-fileupload-content\"\n        (dragenter)=\"onDragEnter($event)\"\n        (dragleave)=\"onDragLeave($event)\"\n        (drop)=\"onDrop($event)\"\n      >\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=\"p-fileupload-files\" *ngIf=\"hasFiles()\">\n          <div *ngIf=\"!fileTemplate\">\n            <div class=\"p-fileupload-row\" *ngFor=\"let file of files; let i = index\">\n              <div>\n                <img [src]=\"file.objectURL\" *ngIf=\"isImage(file)\" [width]=\"previewWidth\" (error)=\"imageError($event)\" />\n              </div>\n              <div class=\"p-fileupload-filename\">{{ file.name }}</div>\n              <div>{{ formatSize(file.size) }}</div>\n              <div>\n                <button\n                  type=\"button\"\n                  icon=\"pi pi-times\"\n                  pButton\n                  (click)=\"remove($event, i)\"\n                  [disabled]=\"uploading\"\n                  [class]=\"removeStyleClass\"\n                ></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; context: { $implicit: files }\"></ng-container>\n      </div>\n    </div>\n    <div class=\"p-fileupload p-fileupload-basic p-component\" *ngIf=\"mode === 'basic'\">\n      <p-messages [value]=\"msgs\" [enableService]=\"false\"></p-messages>\n      <span\n        [ngClass]=\"{\n          'p-button p-component p-fileupload-choose': true,\n          'p-button-icon-only': !chooseLabel,\n          'p-fileupload-choose-selected': hasFiles(),\n          'p-focus': focus,\n          'p-disabled': disabled\n        }\"\n        [ngStyle]=\"style\"\n        [class]=\"styleClass\"\n        (mouseup)=\"onBasicUploaderClick()\"\n        (keydown)=\"onBasicKeydown($event)\"\n        tabindex=\"0\"\n        pRipple\n      >\n        <span class=\"p-button-icon p-button-icon-left pi\" [ngClass]=\"hasFiles() && !auto ? uploadIcon : chooseIcon\"></span>\n        <span *ngIf=\"basicButtonLabel\" class=\"p-button-label\">{{ basicButtonLabel }}</span>\n        <input\n          #basicfileinput\n          type=\"file\"\n          [accept]=\"accept\"\n          [multiple]=\"multiple\"\n          [disabled]=\"disabled\"\n          (change)=\"onFileSelect($event)\"\n          *ngIf=\"!hasFiles()\"\n          (focus)=\"onFocus()\"\n          (blur)=\"onBlur()\"\n        />\n      </span>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  styleUrls: ['./fileupload.css'],\n  host: {\n    class: 'p-element'\n  }\n})\nexport class FileUpload implements AfterViewInit, AfterContentInit, OnInit, OnDestroy, BlockableUI {\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;\n\n  @Input() uploadLabel: string;\n\n  @Input() cancelLabel: string;\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  @Input() uploadStyleClass: string;\n\n  @Input() cancelStyleClass: string;\n\n  @Input() removeStyleClass: string;\n\n  @Input() chooseStyleClass: string;\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  @Output() onImageError: 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 get basicButtonLabel(): string {\n    if (this.auto || !this.hasFiles()) {\n      return this.chooseLabel;\n    }\n\n    return this.uploadLabel ?? this.files[0].name;\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  translationSubscription: Subscription;\n\n  constructor(\n    private el: ElementRef,\n    public sanitizer: DomSanitizer,\n    public zone: NgZone,\n    private http: HttpClient,\n    public cd: ChangeDetectorRef,\n    public config: PrimeNGConfig\n  ) {}\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  ngOnInit() {\n    this.translationSubscription = this.config.translationObserver.subscribe(() => {\n      this.cd.markForCheck();\n    });\n  }\n\n  ngAfterViewInit() {\n    if (this.mode === 'advanced') {\n      this.zone.runOutsideAngular(() => {\n        if (this.content) this.content.nativeElement.addEventListener('dragover', this.onDragOver.bind(this));\n      });\n    }\n  }\n\n  choose() {\n    this.advancedFileInput.nativeElement.click();\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    this.msgs = [];\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)\n        ? 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      this.cd.markForCheck();\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[this.method](this.url, formData, {\n        headers: this.headers,\n        reportProgress: true,\n        observe: 'events',\n        withCredentials: this.withCredentials\n      }).subscribe(\n        (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          this.cd.markForCheck();\n        },\n        (error) => {\n          this.uploading = false;\n          this.onError.emit({ files: this.files, error: error });\n        }\n      );\n    }\n  }\n\n  clear() {\n    this.files = [];\n    this.onClear.emit();\n    this.clearInputElement();\n    this.cd.markForCheck();\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    this.checkFileLimit();\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    this.msgs = [];\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    } else {\n      this.msgs = [];\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, 'p-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, 'p-fileupload-highlight');\n    }\n  }\n\n  onDrop(event) {\n    if (!this.disabled) {\n      DomHandler.removeClass(this.content.nativeElement, 'p-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 = 1000,\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  onBasicUploaderClick() {\n    if (this.hasFiles()) this.upload();\n    else this.basicFileInput.nativeElement.click();\n  }\n\n  onBasicKeydown(event: KeyboardEvent) {\n    switch (event.code) {\n      case 'Space':\n      case 'Enter':\n        this.onBasicUploaderClick();\n\n        event.preventDefault();\n        break;\n    }\n  }\n\n  imageError(event) {\n    this.onImageError.emit(event);\n  }\n\n  getBlockableElement(): HTMLElement {\n    return this.el.nativeElement.children[0];\n  }\n\n  get chooseButtonLabel(): string {\n    return this.chooseLabel || this.config.getTranslation(TranslationKeys.CHOOSE);\n  }\n\n  get uploadButtonLabel(): string {\n    return this.uploadLabel || this.config.getTranslation(TranslationKeys.UPLOAD);\n  }\n\n  get cancelButtonLabel(): string {\n    return this.cancelLabel || this.config.getTranslation(TranslationKeys.CANCEL);\n  }\n\n  ngOnDestroy() {\n    if (this.content && this.content.nativeElement) {\n      this.content.nativeElement.removeEventListener('dragover', this.onDragOver);\n    }\n\n    if (this.translationSubscription) {\n      this.translationSubscription.unsubscribe();\n    }\n  }\n}\n\n@NgModule({\n  imports: [CommonModule, SharedModule, ButtonModule, ProgressBarModule, MessagesModule, RippleModule],\n  exports: [FileUpload, SharedModule],\n  declarations: [FileUpload]\n})\nexport class FileUploadModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}