{"version":3,"file":"ngx-print-element.mjs","sources":["../../../projects/ngx-print-element/src/lib/ngx-print-element.helper.ts","../../../projects/ngx-print-element/src/lib/ngx-print-element.service.ts","../../../projects/ngx-print-element/src/lib/ngx-print-element.directive.ts","../../../projects/ngx-print-element/src/lib/ngx-print-element.component.ts","../../../projects/ngx-print-element/src/public-api.ts","../../../projects/ngx-print-element/src/ngx-print-element.ts"],"sourcesContent":["import { ElementRef, Renderer2 } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { Config } from \"./ngx-print-element.service\";\r\n\r\nconst defaultOptions: Config = {\r\n  htmlType: 'domObj',\r\n  printMode: 'template',\r\n  pageTitle: '',\r\n  templateString: '',\r\n  popupProperties: '',\r\n  stylesheets: [],\r\n  styles: [],\r\n  baseHref: ''\r\n};\r\n\r\n\r\ninterface _H {\r\n  head: HTMLHeadElement;\r\n  nameUID: string;\r\n  nameUIDHead: string;\r\n  nameUIDBody: string;\r\n  nameUIDIFrame: string;\r\n}\r\n\r\n/**\r\n * HEAD Element\r\n * @returns \r\n */\r\nconst HEAD = (): _H => {\r\n  const head = document.getElementsByTagName('head')[0];\r\n  const ID = (Math.round(Math.random() * 9999999)).toString();\r\n  const nameUID = `ngx-print-element-${ID}`;\r\n  const nameUIDHead = `ngx-print-element-head-${ID}`;\r\n  const nameUIDBody = `ngx-print-element-body-${ID}`;\r\n  const nameUIDIFrame = `ngx-print-element-iframe-${ID}`;\r\n  return { head, nameUID, nameUIDHead, nameUIDBody, nameUIDIFrame };\r\n}\r\n\r\n/**\r\n * ADD_STYLE_HEAD\r\n * @param _H \r\n */\r\nconst ADD_STYLE_HEAD = (_H: _H) => {\r\n  const style = document.createElement('style');\r\n  style.innerHTML = BUILD_STYLE(_H);\r\n  style.id = `${_H.nameUIDHead}`;\r\n  _H.head.appendChild(style);\r\n}\r\n\r\n/**\r\n * BUILD_STYLE\r\n * @param _H \r\n * @returns \r\n */\r\nconst BUILD_STYLE = (_H: _H): string => {\r\n  return `\r\n  @media print {\r\n    .${_H.nameUIDBody} {\r\n      visibility: hidden !important;\r\n    }\r\n    .${_H.nameUID},\r\n    .${_H.nameUID} * {\r\n        visibility: visible !important;\r\n    }\r\n    .${_H.nameUID} {\r\n        position: absolute !important;\r\n        left: 0 !important;\r\n        top: 0 !important;\r\n    }\r\n    .${_H.nameUID} .print-none {\r\n        display: none !important;\r\n    }\r\n    /* ----- Author: DaiDH ----- */\r\n    /* Copyright (C) 2022 - ${new Date().getFullYear()} */\r\n  }`\r\n};\r\n\r\n/**\r\n * REMOVE_STYLE_HEAD\r\n * @param _H \r\n */\r\nconst REMOVE_STYLE_HEAD = (_H: _H) => {\r\n  const styleToRemove = document.getElementById(_H.nameUIDHead);\r\n  if (styleToRemove) {\r\n    _H.head.removeChild(styleToRemove);\r\n  }\r\n}\r\n\r\n/**\r\n * getBaseHref\r\n * @param options \r\n * @returns \r\n */\r\nexport const getBaseHref = (options: Config) => {\r\n  const port = (window.location.port) ? `:${window.location.port}` : '';\r\n  const buildURL = `${window.location.protocol}//${window.location.hostname}${port}${window.location.pathname}`;\r\n  const finalURL = options.baseHref ? options.baseHref : buildURL;\r\n  return finalURL;\r\n};\r\n\r\n/**\r\n * getMarkup\r\n * print-html-element\r\n * @param element \r\n * @param options \r\n * @param _H \r\n * @returns \r\n */\r\nexport const getMarkup = (element: any, options: Config, _H: _H) => {\r\n  const template = options.templateString;\r\n  const templateRegex = new RegExp(/{{\\s*printBody\\s*}}/gi);\r\n  let stylesheets;\r\n  let styles;\r\n  const html = [];\r\n\r\n  if (options.htmlType === 'domObj') {\r\n    element = element.outerHTML;\r\n  }\r\n\r\n  if (options.htmlType === 'text') {\r\n    element = element.innerText;\r\n  }\r\n\r\n  if (template && templateRegex.test(template)) {\r\n    element = template.replace(templateRegex, element);\r\n  }\r\n\r\n  html.push(`<html><head><title>${options.pageTitle || ''}</title>`);\r\n\r\n  // If stylesheet URL's or list of stylesheet URL's are specified, override page stylesheets\r\n  if (options.stylesheets) {\r\n    stylesheets = Array.isArray(options.stylesheets) ? options.stylesheets : [options.stylesheets];\r\n  } else {\r\n    stylesheets = Array.prototype.slice\r\n      .call(document.getElementsByTagName('link'))\r\n      .map(link => link);\r\n  }\r\n\r\n  stylesheets.forEach((f: any) => {\r\n    html.push(`<link rel=\"${f.rel}\" href=\"${f.href}\">`);\r\n  });\r\n\r\n  // If inline styles or list of inline styles are specified, override inline styles\r\n  if (options.styles) {\r\n    styles = Array.isArray(options.styles) ? [...options.styles, BUILD_STYLE(_H)] : [options.styles + BUILD_STYLE(_H)];\r\n  } else {\r\n    styles = Array.prototype.slice\r\n      .call(document.getElementsByTagName('style'))\r\n      .map(style => style.innerHTML);\r\n  }\r\n\r\n  styles.forEach((style: any) => {\r\n    html.push(`<style type=\"text/css\">${style}</style>`);\r\n  });\r\n\r\n  html.push(`<base href=\"${getBaseHref(options)}\"/>`);\r\n  html.push(`</head><body class=\"${_H.nameUID}\">`);\r\n  html.push(element);\r\n  html.push('</body></html>');\r\n\r\n  return html.join('');\r\n};\r\n\r\n/**\r\n * Print window.open\r\n * @param element \r\n * @param selfOptions \r\n * @param as \r\n */\r\nexport const printElementWindow = (element: ElementRef<any>, selfOptions: Config = {}, as: Subject<any>) => {\r\n  try {\r\n    const options = { ...defaultOptions, ...selfOptions };\r\n    const container = element.nativeElement;\r\n    const _H = HEAD();\r\n\r\n    // New window\r\n    const printWindow = window.open('about:blank', 'printElementWindow', options.popupProperties) as any;\r\n    const printDocument = printWindow && printWindow.document as any;\r\n\r\n    // Get markup to be printed\r\n    const markup = getMarkup(container, options, _H);\r\n\r\n    ADD_STYLE_HEAD(_H);\r\n\r\n    // Close\r\n    const onPrintFinished = (printed: any) => {\r\n      printDocument.close();\r\n      printWindow.close();\r\n      REMOVE_STYLE_HEAD(_H);\r\n      AS_COMPLETE(as, { close: true });\r\n    };\r\n\r\n    // Print\r\n    printWindow.focus();\r\n    printDocument.write(markup);\r\n    setTimeout(() => onPrintFinished(printWindow.print()), selfOptions && selfOptions.windowOpenTimeout || 500);\r\n    printWindow.onbeforeprint = (event: any) => AS_COMPLETE(as, event);\r\n    printWindow.onafterprint = (event: any) => AS_COMPLETE(as, event);\r\n  } catch (error) {\r\n    AS_COMPLETE(as, error);\r\n  }\r\n};\r\n\r\n/**\r\n * Print iFrame\r\n * @param element \r\n * @param selfOptions \r\n * @param as \r\n */\r\nexport const printIFrame = (element: ElementRef<any>, selfOptions: Config = {}, as: Subject<any>,) => {\r\n  try {\r\n    // Declare\r\n    const options = { ...defaultOptions, ...selfOptions };\r\n    const container = element.nativeElement;\r\n    const _H = HEAD();\r\n\r\n    // Get markup to be printed\r\n    const markup = getMarkup(container, options, _H);\r\n\r\n    // Create iframe\r\n    let iframe = document.createElement('iframe') as HTMLIFrameElement | any;\r\n    iframe.setAttribute('id', _H.nameUIDIFrame);\r\n    iframe.setAttribute('class', _H.nameUIDIFrame);\r\n    iframe.setAttribute('src', 'about:blank');\r\n    iframe.setAttribute('frameBorder', '0');\r\n    iframe.setAttribute('scrolling', 'no');\r\n    iframe.setAttribute('style', 'position:fixed;bottom:100%;right:100%;');\r\n    document.body.appendChild(iframe);\r\n\r\n    let iDocument: any = null;\r\n    if (iframe.contentDocument) {\r\n      iDocument = iframe.contentDocument;\r\n    } else if (iframe.contentWindow) {\r\n      iDocument = iframe.contentWindow.document;\r\n    }\r\n\r\n    ADD_STYLE_HEAD(_H);\r\n\r\n    // SetTimeout fixesiframe printMode does not work in firefox\r\n    setTimeout(() => {\r\n\r\n      // Close\r\n      const onPrintFinished = (printed: any) => {\r\n        iDocument.close();\r\n        REMOVE_STYLE_HEAD(_H);\r\n        iframe.remove();\r\n        AS_COMPLETE(as, { close: true });\r\n      };\r\n\r\n      // Print\r\n      iframe.contentWindow.focus();\r\n      iDocument.open();\r\n      iDocument.write(markup);\r\n      setTimeout(() => onPrintFinished(iframe.contentWindow.print()), selfOptions && selfOptions.windowOpenTimeout || 200);\r\n      iframe.contentWindow.onbeforeprint = (event: any) => AS_COMPLETE(as, event);\r\n      iframe.contentWindow.onafterprint = (event: any) => AS_COMPLETE(as, event);\r\n    });\r\n  } catch (error) {\r\n    AS_COMPLETE(as, error);\r\n  }\r\n}\r\n\r\n/**\r\n * Print default\r\n * @param element \r\n * @param renderer \r\n * @param as \r\n */\r\nexport const printDefault = (element: ElementRef<any>, renderer: Renderer2, selfOptions: Config = {}, as: Subject<any>) => {\r\n  try {\r\n    // Declare\r\n    const container = element.nativeElement;\r\n    const _H = HEAD();\r\n\r\n    // Add visibility hidden into body\r\n    const bodyEls = Array.from(document.querySelectorAll('body'));\r\n    if (bodyEls.length) {\r\n      bodyEls.forEach((f: any) => f && f.classList.add(_H.nameUIDBody));\r\n      renderer.addClass(container, _H.nameUID);\r\n      ADD_STYLE_HEAD(_H);\r\n    }\r\n\r\n    // Close\r\n    const onPrintFinished = (printed: any) => {\r\n      // Clear visibility: hidden\r\n      bodyEls.forEach((f: any) => f && f.classList.remove(_H.nameUIDBody));\r\n      renderer.setAttribute(container, 'class', container.className.replace(_H.nameUID, ''));\r\n      REMOVE_STYLE_HEAD(_H);\r\n      AS_COMPLETE(as, { close: true });\r\n    };\r\n\r\n    // Print\r\n    window.focus();\r\n    setTimeout(() => onPrintFinished(window.print()), selfOptions && selfOptions.windowOpenTimeout || 0);\r\n    window.onbeforeprint = (event: any) => AS_COMPLETE(as, event);\r\n    window.onafterprint = (event: any) => AS_COMPLETE(as, event);\r\n  } catch (error) {\r\n    AS_COMPLETE(as, error);\r\n  }\r\n}\r\n\r\n\r\n/**\r\n * Rxjs complete\r\n * @param as \r\n * @param data \r\n * @param error \r\n */\r\nexport const AS_COMPLETE = (as: Subject<any>, data: any, error = null) => {\r\n  error ? as.error(error) : as.next(data);\r\n};\r\n","import { ElementRef, Injectable, Renderer2 } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { printDefault, printElementWindow, printIFrame } from './ngx-print-element.helper';\r\n\r\nexport interface Config {\r\n  htmlType?: string;\r\n  printMode?: string;\r\n  pageTitle?: string;\r\n  templateString?: string;\r\n  popupProperties?: string;\r\n  stylesheets?: {\r\n    rel?: string,\r\n    href?: string\r\n  }[],\r\n  styles?: string[];\r\n  baseHref?: string;\r\n  windowOpenTimeout?: number;\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class NgxPrintElementService {\r\n\r\n  public renderer!: Renderer2;\r\n\r\n  /**\r\n   * Print\r\n   * @param element \r\n   * @param config \r\n   * @returns \r\n   */\r\n  public print(element: ElementRef<any>, config?: Config): Subject<any> {\r\n    const as = new Subject();\r\n    // Create and insert new print section\r\n    if (element) {\r\n      // Element\r\n      if (config) {\r\n        // Config\r\n        if (config.printMode === 'template') {\r\n          // iframe\r\n          printIFrame(element, config, as);\r\n        }\r\n        if (config.printMode === 'template-popup') {\r\n          // windows\r\n          printElementWindow(element, config, as);\r\n        }\r\n      } else {\r\n        // No config\r\n        printDefault(element, this.renderer, config, as);\r\n      }\r\n    }\r\n    return as;\r\n  }\r\n}\r\n","import { Directive, OnInit, Renderer2 } from '@angular/core';\r\nimport { NgxPrintElementService } from './ngx-print-element.service';\r\n\r\n@Directive({\r\n  standalone: true,\r\n  selector: '[ngxPrintElement]'\r\n})\r\nexport class NgxPrintElementDirective implements OnInit {\r\n\r\n  constructor(\r\n    private renderer: Renderer2,\r\n    private prints: NgxPrintElementService\r\n  ) {\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.prints.renderer = this.renderer;\r\n  }\r\n}\r\n","import { Component, ElementRef } from '@angular/core';\r\nimport { Config, NgxPrintElementService } from './ngx-print-element.service';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'ngx-print-element',\r\n  standalone: true,\r\n  imports: [],\r\n  template: `<ng-content></ng-content>`,\r\n  exportAs: 'element'\r\n})\r\nexport class NgxPrintElementComponent {\r\n\r\n  constructor(private prints: NgxPrintElementService) { }\r\n\r\n  /**\r\n   * Print\r\n   * @param elementRef \r\n   * @param config \r\n   * @returns \r\n   */\r\n  public print(elementRef: ElementRef<any>, config?: Config): Subject<any> {\r\n    return this.prints.print(elementRef, config);\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of ngx-print-element\r\n */\r\n\r\nexport * from './lib/ngx-print-element.directive';\r\nexport * from './lib/ngx-print-element.service';\r\nexport * from './lib/ngx-print-element.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxPrintElementService"],"mappings":"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"}