{"version":3,"file":"ipi-soft-ng-components-image.mjs","sources":["../../../../projects/ipi-soft/ng-components/image/src/ipi-img.service.ts","../../../../projects/ipi-soft/ng-components/image/src/ipi-img.component.ts","../../../../projects/ipi-soft/ng-components/image/ipi-soft-ng-components-image.ts"],"sourcesContent":["import { Inject, Injectable } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\n\nimport { Observable, of } from 'rxjs';\nimport { tap, finalize, share, map, catchError } from 'rxjs/operators';\n\n@Injectable({\n  providedIn: 'root'\n})\n\nexport class IpiImgService {\n\n  constructor(private http: HttpClient, @Inject(DOCUMENT) private document: Document) { }\n\n  private svgs = new Map<string, SVGElement>();\n  private svgsLoading = new Map<string, Observable<SVGElement>>();\n\n  public defaultSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"m 4 1 c -1.644531 0 -3 1.355469 -3 3 v 1 h 1 v -1 c 0 -1.109375 0.890625 -2 2 -2 h 1 v -1 z m 2 0 v 1 h 4 v -1 z m 5 0 v 1 h 1 c 1.109375 0 2 0.890625 2 2 v 1 h 1 v -1 c 0 -1.644531 -1.355469 -3 -3 -3 z m -5 4 c -0.550781 0 -1 0.449219 -1 1 s 0.449219 1 1 1 s 1 -0.449219 1 -1 s -0.449219 -1 -1 -1 z m -5 1 v 4 h 1 v -4 z m 13 0 v 4 h 1 v -4 z m -4.5 2 l -2 2 l -1.5 -1 l -2 2 v 0.5 c 0 0.5 0.5 0.5 0.5 0.5 h 7 s 0.472656 -0.035156 0.5 -0.5 v -1 z m -8.5 3 v 1 c 0 1.644531 1.355469 3 3 3 h 1 v -1 h -1 c -1.109375 0 -2 -0.890625 -2 -2 v -1 z m 13 0 v 1 c 0 1.109375 -0.890625 2 -2 2 h -1 v 1 h 1 c 1.644531 0 3 -1.355469 3 -3 v -1 z m -8 3 v 1 h 4 v -1 z m 0 0\" fill=\"#2e3434\" fill-opacity=\"0.34902\"/></svg>'; \n\n  public loadImg(url: string): Observable<SVGElement> | string {\n    if (!url.endsWith('.svg')) {\n      return url;\n    }\n\n    if (this.svgs.has(url)) {\n      return of(this.svgs.get(url) as SVGElement);\n    }\n\n    if (this.svgsLoading.has(url)) {\n      return this.svgsLoading.get(url) as Observable<SVGElement>;\n    }\n\n    const observable = this.getSvg(url)\n      .pipe(\n        catchError(() => { return of(this.defaultSvg); }),\n        map(content => this.createSVG(content)),\n        tap(element => this.svgs.set(url, element as SVGElement)),\n        finalize(() => this.svgsLoading.delete(url)),\n        share()\n      );\n\n    this.svgsLoading.set(url, observable);\n\n    return observable;\n  }\n\n  private getSvg(url: string): Observable<string> {\n    return this.http.get(url, { responseType: 'text' });\n  }\n\n  private createSVG(content: string): SVGElement {\n      const div = this.document.createElement('DIV');\n\n      div.innerHTML = content;\n\n      return div.querySelector('svg') as SVGElement;\n  }\n\n}\n","import { ChangeDetectorRef, Component, ElementRef, Inject, Input, Renderer2, SimpleChanges } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { Subscription } from 'rxjs';\n\nimport { IpiImgService } from './ipi-img.service';\n\nclass ImageHelper {\n  loaded = false;\n  imgSub?: Subscription;\n}\n\n@Component({\n  selector: 'ipi-img',\n  template: '<ng-content></ng-content>',\n})\n\nexport class IpiImageComponent {\n\n  constructor(\n    private element: ElementRef,\n    private renderer: Renderer2,\n    private imgService: IpiImgService,\n    @Inject(DOCUMENT) private document: Document,\n    private changeDetectorRef: ChangeDetectorRef) {\n      this.changeDetectorRef.detach();\n  }\n\n  @Input() src!: string;\n  @Input() ariaLabel!: string;\n\n  private helper = new ImageHelper();\n\n  public ngOnInit(): void {\n    this.init();\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy();\n  }\n\n  public ngOnChanges(changeRecord: SimpleChanges): void {\n    if (!this.helper.loaded) {\n      return;\n    }\n\n    if (changeRecord['src']) {\n      this.destroy();\n\n      this.init();\n    }\n\n    if (changeRecord['ariaLabel']) {\n      this.setAriaLabel(changeRecord['ariaLabel'].currentValue);\n    }\n  }\n\n  private init(): void {\n    if (!this.src || !this.ariaLabel) {\n      return;\n     }\n\n    const img = this.imgService.loadImg(this.src);\n\n    if (typeof img === 'string') {\n      this.initImage(img);\n\n      return;\n    }\n\n    this.helper.imgSub = img.subscribe(img => { this.initSvg(img); });\n  }\n\n  private destroy(): void {\n    if (this.helper.imgSub) {\n      this.helper.imgSub.unsubscribe();\n    }\n\n    this.helper = new ImageHelper();\n  }\n\n  private initImage(url: string): void {\n    const img = this.document.createElement('img');\n    img.onerror = () => { this.onImgError(elem, img); };\n  \n    const elem = this.element.nativeElement;\n    elem.innerHTML = '';\n\n    this.setStyling(img);\n\n    img.src = url;\n\n    this.renderer.appendChild(elem, img);\n    this.setAriaLabel(this.ariaLabel);\n  \n    this.helper.loaded = true;\n    this.copyNgContentAttribute(elem, img);\n  }\n\n  private initSvg(svg: SVGElement): void {\n    if (this.helper.loaded || !svg) {\n      return;\n    }\n\n    const clonedSvg = svg.cloneNode(true) as SVGElement;\n\n    this.setStyling(clonedSvg);\n\n    const elem = this.element.nativeElement;\n    elem.innerHTML = '';\n\n    this.renderer.appendChild(elem, clonedSvg);\n    this.helper.loaded = true;\n\n    if (!(this.ariaLabel === undefined && elem.firstChild.hasAttribute('aria-label')) && this.ariaLabel) {\n      this.setAriaLabel(this.ariaLabel);\n    }\n\n    this.copyNgContentAttribute(elem, clonedSvg);\n  }\n\n  private setAriaLabel(label: string): void {\n    const img = this.element.nativeElement.firstChild;\n\n    if (img) {\n      if (label === '') {\n        this.renderer.setAttribute(img, 'aria-hidden', 'true');\n        this.renderer.removeAttribute(img, 'aria-label');\n      } else {\n        this.renderer.removeAttribute(img, 'aria-hidden');\n        this.renderer.setAttribute(img, 'aria-label', label);\n      }\n    }\n  }\n\n  private setStyling(element: SVGElement | HTMLImageElement) {\n    this.element.nativeElement.style.display = 'flex';\n    this.element.nativeElement.style.justifyContent = 'center';\n    this.element.nativeElement.style.alignItems = 'center';\n\n    element.style.width = 'inherit';\n    element.style.maxWidth = 'inherit';\n\n    element.style.height = 'inherit';\n    element.style.maxHeight = 'inherit';\n  }\n\n  private onImgError(element: any, img: HTMLImageElement): void {\n    this.renderer.removeChild(element, img);\n\n    let svg = document.createRange().createContextualFragment(this.imgService.defaultSvg);\n\n    this.renderer.appendChild(element, svg);\n\n    setTimeout(() => {\n      this.renderer.setAttribute(element.firstChild, 'aria-label', 'A broken or missing image');\n    });\n  }\n\n  private copyNgContentAttribute(hostElem: any, icon: SVGElement | HTMLImageElement) {\n    const attributes = hostElem.attributes as NamedNodeMap;\n\n    for (let i = 0; i < attributes.length; i += 1) {\n      const attribute = attributes.item(i);\n  \n      if (attribute && attribute.name.startsWith('_ngcontent')) {\n        this.setNgContentAttribute(icon, attribute.name);\n        break;\n      }\n    }\n  }\n\n  private setNgContentAttribute(parent: Node, attributeName: string) {\n    this.renderer.setAttribute(parent, attributeName, '');\n\n    for (let i = 0; i < parent.childNodes.length; i += 1) {\n      const child = parent.childNodes[i];\n\n      if (child instanceof Element) {\n        this.setNgContentAttribute(child, attributeName);\n      }\n    }\n  }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}