UNPKG

ngx-printer

Version:

An easy to use service to print a window or parts of a window (div). Printing of Angular Templates or Components is possible.

1 lines 52.9 kB
{"version":3,"file":"ngx-printer.mjs","sources":["../../../projects/ngx-printer/src/lib/helper.ts","../../../projects/ngx-printer/src/lib/ngx-printer.component.ts","../../../projects/ngx-printer/src/lib/ngx-print-marker-position.enum.ts","../../../projects/ngx-printer/src/lib/print-service-config.ts","../../../projects/ngx-printer/src/lib/ngx-printer.service.ts","../../../projects/ngx-printer/src/lib/print-item.ts","../../../projects/ngx-printer/src/lib/print-item.directive.ts","../../../projects/ngx-printer/src/lib/print-item-button.directive.ts","../../../projects/ngx-printer/src/lib/print-item-marker.directive.ts","../../../projects/ngx-printer/src/lib/no-print.directive.ts","../../../projects/ngx-printer/src/lib/ngx-printer.module.ts","../../../projects/ngx-printer/src/public_api.ts","../../../projects/ngx-printer/src/ngx-printer.ts"],"sourcesContent":["\r\nexport class Helpers {\r\n\r\n /**\r\n * Copy Css links to new page\r\n * @param printWindow\r\n */\r\n public static copyCss(printWindowDoc: Document) {\r\n\r\n const links = document.querySelectorAll('link');\r\n const styles = document.querySelectorAll('style');\r\n const base = document.querySelector('base');\r\n\r\n const targetHead = printWindowDoc.getElementsByTagName('head')[0];\r\n\r\n if (base) {\r\n targetHead.appendChild(document.importNode(base, true));\r\n }\r\n\r\n links.forEach(link => {\r\n targetHead.appendChild(document.importNode(link, true));\r\n });\r\n\r\n styles.forEach(style => {\r\n targetHead.appendChild(document.importNode(style, true));\r\n });\r\n }\r\n\r\n}\r\n\r\n","import {\r\n Component,\r\n OnInit,\r\n Renderer2,\r\n ElementRef,\r\n Output,\r\n EventEmitter\r\n} from '@angular/core';\r\n\r\n/**\r\n * Component used to render content when printed to current window\r\n */\r\n@Component({\r\n selector: 'ngx-printer',\r\n template: `\r\n <ng-content></ng-content>\r\n `,\r\n styleUrls: ['./ngx-printer.component.css'],\r\n standalone: false\r\n})\r\nexport class NgxPrinterComponent implements OnInit {\r\n\r\n private _renderClass = 'default';\r\n public get renderClass() {\r\n return this._renderClass;\r\n }\r\n public set renderClass(value) {\r\n this._renderClass = value;\r\n this.setCustomClass();\r\n }\r\n\r\n /**\r\n * Display single image\r\n */\r\n private _imgSrc = 'default';\r\n public get imgSrc() {\r\n return this._imgSrc;\r\n }\r\n public set imgSrc(value) {\r\n this._imgSrc = value;\r\n this.addImage(this._imgSrc);\r\n }\r\n\r\n @Output() completed = new EventEmitter<boolean>();\r\n\r\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {}\r\n\r\n ngOnInit() {}\r\n\r\n /**\r\n * Attach custom class to element\r\n */\r\n private setCustomClass() {\r\n const natElement = this.elementRef.nativeElement;\r\n\r\n this.renderer.removeClass(natElement, 'default');\r\n this.renderer.addClass(natElement, this._renderClass);\r\n }\r\n\r\n /**\r\n * Add custom image\r\n * @param source \r\n */\r\n private addImage(source: string) {\r\n const natElement = this.elementRef.nativeElement;\r\n\r\n const newImgElement = this.renderer.createElement('img');\r\n this.renderer.setAttribute(newImgElement, 'src', source);\r\n\r\n this.renderer.listen(newImgElement, 'load', (evt) => {\r\n console.log('loading completed', evt);\r\n this.completed.emit(true);\r\n });\r\n\r\n this.renderer.appendChild(natElement, newImgElement);\r\n }\r\n}\r\n","export enum ngxPrintMarkerPosition {\r\n Topleft,\r\n TopRight,\r\n BottomLeft,\r\n BottomRight\r\n}\r\n","import { ngxPrintMarkerPosition } from './ngx-print-marker-position.enum';\r\n/**\r\n * Config for service - used in forRoot\r\n */\r\nexport class PrintServiceConfig {\r\n /** Print in a new window or not */\r\n printOpenWindow ? = true;\r\n\r\n /** Wait time before opening print dialog */\r\n timeToWaitRender ? = 200;\r\n\r\n /** Class name to be used when printing in current window */\r\n renderClass?: string;\r\n\r\n /* Name ofapp route component - usally 'app-root' used by print to same window */\r\n appRootName ? = 'app-root';\r\n\r\n /* Default postion for image used in directive printerMarker */\r\n markerPosition ? = ngxPrintMarkerPosition.Topleft;\r\n\r\n /* Just show preview without fireing the print command - default is false */\r\n printPreviewOnly ? = false;\r\n}\r\n","import { Helpers } from \"./helper\";\r\nimport { ngxPrintMarkerPosition } from \"./ngx-print-marker-position.enum\";\r\nimport { PrintItem } from \"./print-item\";\r\nimport {\r\n ComponentFactoryResolver,\r\n EnvironmentInjector,\r\n Injectable,\r\n Injector,\r\n Optional,\r\n TemplateRef,\r\n Type,\r\n createComponent,\r\n} from \"@angular/core\";\r\nimport { NgxPrinterComponent } from \"./ngx-printer.component\";\r\nimport { BehaviorSubject } from \"rxjs\";\r\nimport { PrintServiceConfig } from \"./print-service-config\";\r\n\r\nexport type Content<T> = string | HTMLElement | TemplateRef<T> | Type<T>;\r\n\r\n/**\r\n * Main print service\r\n */\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class NgxPrinterService {\r\n private printWindowOpen = new BehaviorSubject<boolean>(false);\r\n\r\n /**\r\n * @internal\r\n */\r\n private _printItems = new BehaviorSubject<PrintItem[]>([]);\r\n $printItems = this._printItems.asObservable();\r\n\r\n private openNgxPrinter: HTMLElement;\r\n\r\n /**\r\n * Wait time to render before open print dialog in ms\r\n * Default is 200\r\n */\r\n timeToWaitRender = 200;\r\n\r\n /**\r\n * Class used in component when printing to current window\r\n */\r\n renderClass = \"default\";\r\n\r\n /**\r\n * Open new window to print or not\r\n * Default is true\r\n */\r\n printOpenWindow = true;\r\n\r\n /**\r\n * Name of root component\r\n * Default is app-root\r\n */\r\n appRootName = \"app-root\";\r\n\r\n /**\r\n * Do not fire print event - just show preview\r\n * Default is false\r\n */\r\n printPreviewOnly = false;\r\n\r\n appRoot: HTMLElement;\r\n appRootDislaySetting = \"\";\r\n\r\n $printWindowOpen = this.printWindowOpen.asObservable();\r\n eventadded = [];\r\n markerPosition: ngxPrintMarkerPosition;\r\n\r\n constructor(\r\n @Optional() config: PrintServiceConfig,\r\n private envInjector: EnvironmentInjector,\r\n ) {\r\n this.setRootConfigOptions(config);\r\n }\r\n\r\n /**\r\n * Set global config from forRoot\r\n * @param config\r\n */\r\n private setRootConfigOptions(config: PrintServiceConfig): void {\r\n if (config) {\r\n config.timeToWaitRender &&\r\n (this.timeToWaitRender = config.timeToWaitRender);\r\n\r\n config.renderClass && (this.renderClass = config.renderClass);\r\n\r\n config.appRootName && (this.appRootName = config.appRootName);\r\n\r\n config.markerPosition && (this.markerPosition = config.markerPosition);\r\n\r\n if (config.hasOwnProperty(\"printPreviewOnly\")) {\r\n this.printPreviewOnly = config.printPreviewOnly;\r\n }\r\n\r\n if (config.hasOwnProperty(\"printOpenWindow\")) {\r\n this.printOpenWindow = config.printOpenWindow;\r\n }\r\n }\r\n }\r\n\r\n /***\r\n * Print a div identified by its id\r\n * @example\r\n * this.printerService.printDiv('printDiv');\r\n */\r\n public printDiv(divID: string): void {\r\n const divToPrint = document.getElementById(divID);\r\n\r\n if (divToPrint) {\r\n this.print(divToPrint, this.printOpenWindow);\r\n } else {\r\n console.log(`div with id ${divID} not found..`);\r\n }\r\n }\r\n\r\n /***\r\n * Print an Element identified by its className using getElementsByClassName\r\n * Prints the first one found\r\n */\r\n public printByClassName(className: string): void {\r\n const elementToPrint = document.getElementsByClassName(className);\r\n\r\n if (elementToPrint && elementToPrint.length > 0) {\r\n this.print(<HTMLScriptElement>elementToPrint[0], this.printOpenWindow);\r\n } else {\r\n console.log(\"element with id ${className} not found..\");\r\n }\r\n }\r\n\r\n /**\r\n * Print Angular TemplateRef or a Component or String\r\n * @param contentToPrint\r\n * @example\r\n * this.printerService.printAngular(this.PrintTemplateTpl);\r\n */\r\n public printAngular(contentToPrint: any, context?: any): void {\r\n const nativeEl = this.createComponent(contentToPrint, null, context);\r\n\r\n this.print(nativeEl.nativeElement, this.printOpenWindow);\r\n }\r\n\r\n /**\r\n * Print single img\r\n * @example\r\n * this.printerService.printImg('assets/bratwurst.jpg');\r\n */\r\n public printImg(imgSrc: string): void {\r\n const compRef = this.createComponent(null, imgSrc);\r\n const openNewWindow = this.printOpenWindow;\r\n\r\n compRef.instance.completed.subscribe((val) => {\r\n compRef.hostView.detectChanges();\r\n console.log(\"completed:\", val);\r\n this.print(compRef.location.nativeElement, openNewWindow);\r\n });\r\n }\r\n\r\n /**\r\n * Print an native Element (HTML Element)\r\n * @param nativeElement\r\n * @example\r\n * this.printerService.printHTMLElement(this.PrintComponent.nativeElement);\r\n */\r\n public printHTMLElement(nativeElement: HTMLElement): void {\r\n this.print(nativeElement, this.printOpenWindow);\r\n }\r\n\r\n /**\r\n * Create and render component\r\n * @param contentToRender\r\n */\r\n private createComponent(\r\n contentToRender: any,\r\n imgSrc?: string,\r\n context?: any\r\n ): any {\r\n \r\n let componentRef: any;\r\n\r\n if (contentToRender) {\r\n if (context === undefined) {\r\n context = null;\r\n }\r\n const ngContent = this.resolveNgContent(contentToRender, context);\r\n\r\n componentRef = createComponent(NgxPrinterComponent, {\r\n environmentInjector: this.envInjector,\r\n projectableNodes: ngContent\r\n });\r\n\r\n } else {\r\n componentRef = createComponent(NgxPrinterComponent, {\r\n environmentInjector: this.envInjector,\r\n });\r\n }\r\n\r\n componentRef.instance.renderClass = this.renderClass;\r\n\r\n if (imgSrc) {\r\n componentRef.instance.imgSrc = imgSrc;\r\n return componentRef;\r\n }\r\n\r\n componentRef.hostView.detectChanges();\r\n return componentRef.location; // location is native element\r\n }\r\n\r\n /**\r\n * Main print function\r\n * @param printContent\r\n */\r\n private print(printContent: any, printOpenWindow: boolean): void {\r\n if (printOpenWindow === true) {\r\n const printContentClone = document.importNode(printContent, true); // printContent.cloneNode(true);\r\n \r\n this.hideBeforePrint(printContentClone);\r\n this.printInNewWindow(printContentClone);\r\n }\r\n if (printOpenWindow === false) {\r\n const printContentClone = document.importNode(printContent, true); // printContent.cloneNode(true);\r\n this.hideBeforePrint(printContentClone);\r\n const nativeEl = this.createComponent(printContentClone).nativeElement;\r\n this.openNgxPrinter = nativeEl;\r\n document.body.appendChild(this.openNgxPrinter);\r\n\r\n this.getAppRoot();\r\n\r\n this.appRoot && (this.appRoot.style.display = \"none\");\r\n\r\n this.printCurrentWindow();\r\n }\r\n }\r\n\r\n /**\r\n * Print using a new window / tab\r\n * @param divToPrint\r\n */\r\n private printInNewWindow(divToPrint: HTMLElement): void {\r\n const printWindow = window.open(\"\", \"PRINT\");\r\n const title = document.title;\r\n\r\n printWindow.document.write(\r\n \"<HTML><HEAD><TITLE>\" + title + \"</TITLE></HEAD><BODY></BODY></HTML>\"\r\n );\r\n // printWindow.document.write(document.documentElement.innerHTML);\r\n\r\n const printWindowDoc = printWindow.document;\r\n Helpers.copyCss(printWindowDoc);\r\n\r\n printWindowDoc.body.style.margin = \"0 0\";\r\n printWindowDoc.body.appendChild(divToPrint);\r\n printWindow.document.close();\r\n\r\n setTimeout(\r\n () => this.printTabWindow(printWindow, printWindowDoc),\r\n this.timeToWaitRender\r\n );\r\n }\r\n\r\n /**\r\n * Print window in new tab\r\n */\r\n private printTabWindow(printWindow: Window, printWindowDoc: Document): void {\r\n if (this.printPreviewOnly) {\r\n return;\r\n }\r\n this.registerPrintEvent(printWindow, true);\r\n this.printWindowOpen.next(true);\r\n printWindow.focus(); // necessary for IE >= 10*/\r\n if (printWindowDoc.execCommand(\"print\") === false) {\r\n printWindow.print();\r\n }\r\n }\r\n\r\n /**\r\n * Print the whole current window\r\n */\r\n public printCurrentWindow(): void {\r\n if (this.printPreviewOnly) {\r\n return;\r\n }\r\n this.registerPrintEvent(window, false);\r\n setTimeout(() => {\r\n this.printWindowOpen.next(true);\r\n if (document.execCommand(\"print\") === false) {\r\n window.print();\r\n }\r\n }, this.timeToWaitRender);\r\n }\r\n\r\n /**\r\n * Listen to print event of window\r\n * @param printWindow\r\n */\r\n private registerPrintEvent(\r\n printWindow: Window,\r\n printWithOpenInNewWindow: boolean\r\n ) {\r\n const that = this;\r\n printWindow.focus(); // necessary for IE >= 10*/\r\n\r\n if (that.eventadded[printWindow.name]) {\r\n return;\r\n }\r\n\r\n // hacky: see\r\n // https://stackoverflow.com/questions/66110639/afterprint-event-not-firing-on-first-page-load-in-chrome\r\n \r\n printWindow.addEventListener('beforeprint', () => {});\r\n\r\n printWindow.addEventListener('afterprint', () => {\r\n this.eventadded[printWindow.name] = true;\r\n console.log('afterprint');\r\n \r\n if (printWithOpenInNewWindow) {\r\n that.eventadded[printWindow.name] = false;\r\n }\r\n that.cleanUp(printWindow, printWithOpenInNewWindow);\r\n that.printWindowOpen.next(false);\r\n });\r\n }\r\n\r\n /**\r\n * Close tab or clean up dom\r\n * @internal\r\n */\r\n private cleanUp(printWindow: Window, printOpenWindow: boolean): void {\r\n if (printOpenWindow === true) {\r\n console.log(\"close print window\");\r\n printWindow.close();\r\n setTimeout(() => {\r\n printWindow.close();\r\n }, 20);\r\n }\r\n if (printOpenWindow === false) {\r\n if (!this.openNgxPrinter) {\r\n return;\r\n }\r\n if (document.body.getElementsByTagName(\"ngx-printer\").length === 0) {\r\n return;\r\n }\r\n\r\n if (this.appRoot) {\r\n if (this.appRootDislaySetting !== \"\") {\r\n this.appRoot.style.display = this.appRootDislaySetting;\r\n } else {\r\n this.appRoot.style.display = \"\";\r\n }\r\n }\r\n\r\n document.body.removeChild(this.openNgxPrinter);\r\n this.openNgxPrinter = null;\r\n }\r\n }\r\n\r\n /**\r\n * Hide an element before printing\r\n * @param parentDiv\r\n */\r\n private hideBeforePrint(parentDiv: HTMLElement): void {\r\n const childrenOfDiv = parentDiv.querySelectorAll(\".no_print_indicator\");\r\n\r\n for (let i = 0; i < childrenOfDiv.length; i++) {\r\n const child = childrenOfDiv[i] as HTMLElement;\r\n child.style.display = \"none\";\r\n }\r\n }\r\n\r\n /**\r\n * Search for Angular App Root\r\n * @internal\r\n */\r\n private getAppRoot(): void {\r\n const appRoot = document.body.getElementsByTagName(this.appRootName);\r\n if (appRoot.length === 0) {\r\n return null;\r\n } else {\r\n this.appRoot = <HTMLElement>appRoot[0];\r\n this.appRootDislaySetting = this.appRoot.style.display;\r\n }\r\n }\r\n\r\n /**\r\n * Add a new item to print\r\n * Used by directive\r\n * @internal\r\n * @param newPrintItem HTML id\r\n */\r\n public addPrintItem(newPrintItem: PrintItem): void {\r\n const tmpItems = this._printItems.getValue();\r\n\r\n tmpItems.push(newPrintItem);\r\n this._printItems.next(tmpItems);\r\n }\r\n\r\n /**\r\n * Delete a print item from service\r\n * Used by directive\r\n * @internal\r\n * @param idOfItemToRemove\r\n */\r\n public removePrintItem(idOfItemToRemove: string): void {\r\n const tmpItems = this._printItems.getValue();\r\n const newIitems = tmpItems.filter((item) => item.id !== idOfItemToRemove);\r\n\r\n this._printItems.next(newIitems);\r\n }\r\n\r\n /**\r\n * Gets a single print item from service\r\n * Used by directive\r\n * @internal\r\n * @param idOfItemToFind\r\n */\r\n public getPrintItem(idOfItemToRemove: string): PrintItem {\r\n const tmpItems = this._printItems.getValue();\r\n const foundItem = tmpItems.find((item) => item.id === idOfItemToRemove);\r\n\r\n return foundItem;\r\n }\r\n\r\n /**\r\n * Print a print Item\r\n * @param printItemToPrint\r\n */\r\n public printPrintItem(printItemToPrint: PrintItem): void {\r\n this.printHTMLElement(printItemToPrint.nativeElement);\r\n }\r\n\r\n /**\r\n * Print al list of print Items one after the other\r\n * @param printItemToPrint\r\n */\r\n public printPrintItems(\r\n printItemsToPrint: PrintItem[],\r\n className?: string\r\n ): void {\r\n const newDiv = <HTMLDivElement>document.createElement(\"div\");\r\n\r\n if (className) {\r\n newDiv.classList.add(className);\r\n } else {\r\n newDiv.style.display = \"flex\";\r\n newDiv.style.flexDirection = \"column\";\r\n }\r\n\r\n printItemsToPrint.forEach((element) => {\r\n newDiv.appendChild(element.nativeElement.cloneNode(true));\r\n });\r\n\r\n this.printHTMLElement(newDiv);\r\n }\r\n\r\n /**\r\n * Create node or angular component and returns an array of nodes\r\n * @param content\r\n * @internal\r\n */\r\n private resolveNgContent<T>(content: Content<T>, context: any): any {\r\n if (typeof content === \"string\") {\r\n const element = document.createTextNode(content);\r\n\r\n return [[element]];\r\n }\r\n\r\n if (content instanceof TemplateRef) {\r\n const viewRef = content.createEmbeddedView(context);\r\n\r\n viewRef.detectChanges();\r\n\r\n return [viewRef.rootNodes];\r\n }\r\n\r\n if (content instanceof HTMLElement) {\r\n return [[content]];\r\n }\r\n\r\n /** Otherwise it's a component */\r\n\r\n let componentRef = createComponent(content, {\r\n environmentInjector: this.envInjector,\r\n });\r\n\r\n\r\n componentRef.changeDetectorRef.detectChanges();\r\n \r\n return [[componentRef.location.nativeElement]];\r\n }\r\n}\r\n","\r\n/**\r\n * A class to store an item which can be printed\r\n */\r\nexport class PrintItem {\r\n /**\r\n * HTML id of anchor\r\n */\r\n id: string;\r\n\r\n /**\r\n * Optional name\r\n */\r\n printDisplayName: string;\r\n\r\n /**\r\n * HTML Element\r\n */\r\n nativeElement: HTMLElement;\r\n\r\n constructor() {}\r\n}\r\n","import { Directive, ElementRef, OnInit, OnDestroy, Input } from '@angular/core';\r\nimport { NgxPrinterService } from './ngx-printer.service';\r\nimport { PrintItem } from './print-item';\r\n\r\n/**\r\n * A directive to mark and store an HTML-Element as an item which\r\n * can be printed\r\n * An id has to be set\r\n */\r\n@Directive({\n selector: '[ngxPrintItem]',\n standalone: false\n})\r\nexport class PrintItemDirective implements OnInit, OnDestroy {\r\n\r\n /**\r\n * Optional name to be shown in an component\r\n */\r\n @Input()\r\n printName: string;\r\n\r\n constructor(private el: ElementRef, private printerService: NgxPrinterService) {\r\n }\r\n\r\n ngOnInit() {\r\n if (this.el.nativeElement.id) {\r\n const tmpPrintItem = new PrintItem();\r\n tmpPrintItem.id = this.el.nativeElement.id;\r\n tmpPrintItem.nativeElement = this.el.nativeElement;\r\n\r\n this.printerService.addPrintItem(tmpPrintItem);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.el.nativeElement.id) {\r\n this.printerService.removePrintItem( this.el.nativeElement.id);\r\n }\r\n }\r\n\r\n}\r\n","import { Directive, ElementRef, Input, OnInit } from '@angular/core';\r\nimport { NgxPrinterService } from './ngx-printer.service';\r\nimport { PrintItem } from './print-item';\r\n\r\n/**\r\n * Directly add function to a button to print an item\r\n */\r\n@Directive({\n selector: '[ngxPrintItemButton]',\n standalone: false\n})\r\nexport class PrintItemButtonDirective implements OnInit {\r\n\r\n /**\r\n * Id of print item to be printed\r\n */\r\n @Input()\r\n printItemId = '';\r\n\r\n /**\r\n * html id of div to be printed\r\n */\r\n @Input()\r\n divID = '';\r\n\r\n /**\r\n * print item by class name\r\n */\r\n @Input()\r\n className = '';\r\n\r\n /**\r\n * print current window\r\n */\r\n @Input()\r\n printWindow = 'false';\r\n\r\n\r\n constructor(\r\n private el: ElementRef,\r\n private printerService: NgxPrinterService\r\n ) {}\r\n\r\n ngOnInit() {\r\n if (this.el.nativeElement && this.checkInputs()) {\r\n this.el.nativeElement.addEventListener('click', () => {\r\n if (this.printItemId !== '') {\r\n this.prinPrintItem();\r\n }\r\n if (this.divID !== '') {\r\n this.printerService.printDiv(this.divID);\r\n }\r\n if (this.className !== '') {\r\n this.printerService.printByClassName(this.className);\r\n }\r\n if (this.printWindow !== 'false') {\r\n this.printerService.printCurrentWindow();\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Check if at least one property is set\r\n */\r\n private checkInputs() {\r\n const check = !(this.printWindow === 'false' && this.printItemId === '' && this.divID === '' && this.className === '');\r\n return check;\r\n }\r\n\r\n /**\r\n * print item from print items\r\n */\r\n private prinPrintItem() {\r\n const itemToPrint = this.printerService.getPrintItem(this.printItemId);\r\n if (itemToPrint) {\r\n this.printerService.printPrintItem(itemToPrint);\r\n }\r\n }\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n OnInit,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n} from '@angular/core';\r\nimport { NgxPrinterService } from './ngx-printer.service';\r\nimport { ngxPrintMarkerPosition } from './ngx-print-marker-position.enum';\r\n\r\n\r\n/**\r\n * Mark an div as printable and provide direct print function\r\n */\r\n@Directive({\n selector: '[ngxPrintItemMarker]',\n standalone: false\n})\r\nexport class PrintItemMarkerDirective implements OnInit {\r\n @Input()\r\n customClass = '';\r\n\r\n @Input()\r\n directPrint = false;\r\n\r\n @Input()\r\n imgPosition = ngxPrintMarkerPosition.Topleft;\r\n\r\n /**\r\n * Data for an svg image used as background url\r\n * @example\r\n * backgroundImage = 'data:image/svg+xml;base64,PD9....'\r\n *\r\n */\r\n @Input()\r\n backgroundImage =\r\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAgNTAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDUwIDUwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGQ9Ik0zOS4zODcsMjEuNDcxSDMyLjI5VjExLjE5OWMwLTAuNTUzLTAuNDQ3LTEtMS0xSDE3LjQ4NGMtMC41NTMsMC0xLDAuNDQ3LTEsMXYxMC4yNzFIOS4zODdjLTAuNTUzLDAtMSwwLjQ0Ny0xLDFWMzUuNDUNCgljMCwwLjU1MywwLjQ0NywxLDEsMWg2Ljg5NHYzLjU2NWMwLDAuNTUzLDAuNDQ3LDEsMSwxaDEzLjgwNmMwLjU1MywwLDEtMC40NDcsMS0xVjM2LjQ1aDcuMzAxYzAuNTUzLDAsMS0wLjQ0NywxLTFWMjIuNDcxDQoJQzQwLjM4NywyMS45MTgsMzkuOTM5LDIxLjQ3MSwzOS4zODcsMjEuNDcxeiBNMTguNDg0LDEyLjE5OUgzMC4yOXY5LjI3MUgxOC40ODRWMTIuMTk5eiBNMzAuMDg2LDM5LjAxNkgxOC4yOHYtNi4zMjloMTEuODA2VjM5LjAxNg0KCXogTTM4LjM4NywzNC40NWgtNi4zMDF2LTIuNzY0YzAtMC41NTMtMC40NDctMS0xLTFIMTcuMjhjLTAuNTUzLDAtMSwwLjQ0Ny0xLDF2Mi43NjRoLTUuODk0VjIzLjQ3MWg2Ljg5NA0KCWMwLjA2OCwwLjAxNCwwLjEzMSwwLjA0MSwwLjIwMywwLjA0MUgzMS4yOWMwLjA3MiwwLDAuMTM2LTAuMDI3LDAuMjAzLTAuMDQxaDYuODkzVjM0LjQ1eiIvPg0KPC9zdmc+DQo=';\r\n\r\n imgMainStyles = {\r\n 'background-color': '#c3c3b6',\r\n height: '16px',\r\n width: '16px',\r\n position: 'absolute',\r\n cursor: 'pointer'\r\n };\r\n\r\n imgPositionTopLeft = {\r\n left: '1px',\r\n top: '1px',\r\n };\r\n\r\n imgPositionTopRight = {\r\n right: '1px',\r\n top: '1px',\r\n };\r\n\r\n imgPositionBottomLeft = {\r\n left: '1px',\r\n bottom: '1px',\r\n };\r\n\r\n imgPositionBottomRight = {\r\n right: '1px',\r\n bottom: '1px',\r\n };\r\n\r\n /**\r\n * Event fired when marker clicked\r\n * @emits\r\n */\r\n @Output()\r\n printClicked = new EventEmitter<any>();\r\n\r\n constructor(\r\n private el: ElementRef,\r\n private renderer2: Renderer2,\r\n private printerService: NgxPrinterService\r\n ) {}\r\n\r\n ngOnInit() {\r\n const newIndicator = document.createElement('div');\r\n this.imgPosition = this.printerService.markerPosition;\r\n\r\n this.addIndicatorDiv(this.el, newIndicator);\r\n\r\n newIndicator.addEventListener('click', () => {\r\n if (this.directPrint) {\r\n const elementToPrint = this.el.nativeElement.getElementsByClassName(\r\n 'print_indicator'\r\n );\r\n\r\n if (elementToPrint && elementToPrint.length > 0) {\r\n this.renderer2.setStyle(elementToPrint[0], 'visibility', 'hidden');\r\n this.printerService.printHTMLElement(this.el.nativeElement);\r\n this.renderer2.setStyle(elementToPrint[0], 'visibility', 'visible');\r\n } else {\r\n console.log('element with indicator class not found..');\r\n }\r\n }\r\n this.printClicked.emit(true);\r\n });\r\n }\r\n\r\n /**\r\n * Change and add div with Indicator\r\n * @param el\r\n * @param newIndicator\r\n */\r\n private addIndicatorDiv(el: ElementRef<any>, newIndicator: HTMLDivElement) {\r\n const natElement = el.nativeElement;\r\n this.renderer2.addClass(newIndicator, 'print_indicator');\r\n this.renderer2.setStyle(natElement, 'position', 'relative');\r\n this.renderer2.appendChild(el.nativeElement, newIndicator);\r\n if (this.customClass === '') {\r\n this.setCss(newIndicator);\r\n } else {\r\n this.renderer2.addClass(newIndicator, this.customClass);\r\n }\r\n }\r\n\r\n /**\r\n * Set the default css properties\r\n * @param newIndicator\r\n */\r\n private setCss(newIndicator: HTMLDivElement) {\r\n Object.keys(this.imgMainStyles).forEach((element) => {\r\n newIndicator.style.setProperty(`${element}`, this.imgMainStyles[element]);\r\n });\r\n\r\n this.setPosition(newIndicator);\r\n\r\n const imgUrl = 'url(' + this.backgroundImage + ')';\r\n newIndicator.style.setProperty(`background-image`, imgUrl);\r\n }\r\n\r\n /**\r\n * Set image position\r\n * @internal\r\n * @param newIndicator\r\n */\r\n private setPosition(newIndicator: HTMLDivElement) {\r\n switch (this.imgPosition) {\r\n case ngxPrintMarkerPosition.Topleft: {\r\n Object.keys(this.imgPositionTopLeft).forEach((element) => {\r\n newIndicator.style.setProperty(\r\n `${element}`,\r\n this.imgPositionTopLeft[element]\r\n );\r\n });\r\n break;\r\n }\r\n case ngxPrintMarkerPosition.TopRight: {\r\n Object.keys(this.imgPositionTopRight).forEach((element) => {\r\n newIndicator.style.setProperty(\r\n `${element}`,\r\n this.imgPositionTopRight[element]\r\n );\r\n });\r\n break;\r\n }\r\n case ngxPrintMarkerPosition.BottomLeft: {\r\n Object.keys(this.imgPositionBottomLeft).forEach((element) => {\r\n newIndicator.style.setProperty(\r\n `${element}`,\r\n this.imgPositionBottomLeft[element]\r\n );\r\n });\r\n break;\r\n }\r\n case ngxPrintMarkerPosition.BottomRight: {\r\n Object.keys(this.imgPositionBottomRight).forEach((element) => {\r\n newIndicator.style.setProperty(\r\n `${element}`,\r\n this.imgPositionBottomRight[element]\r\n );\r\n });\r\n break;\r\n }\r\n default: {\r\n Object.keys(this.imgPositionTopLeft).forEach((element) => {\r\n newIndicator.style.setProperty(\r\n `${element}`,\r\n this.imgPositionTopLeft[element]\r\n );\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","import { Directive, ElementRef, Renderer2 } from '@angular/core';\r\n\r\n/**\r\n * Directive to mark an element so that it should NOT be printed\r\n */\r\n@Directive({\n selector: '[ngxNoPrint]',\n standalone: false\n})\r\nexport class NoPrintDirective {\r\n\r\n constructor(private el: ElementRef, private renderer2: Renderer2) {\r\n if (this.el) {\r\n this.renderer2.addClass(this.el.nativeElement, 'no_print_indicator');\r\n }\r\n }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { NgxPrinterComponent } from './ngx-printer.component';\r\nimport { PrintServiceConfig } from './print-service-config';\r\nimport { PrintItemDirective } from './print-item.directive';\r\nimport { PrintItemButtonDirective } from './print-item-button.directive';\r\nimport { PrintItemMarkerDirective } from './print-item-marker.directive';\r\nimport { NoPrintDirective } from './no-print.directive';\r\n\r\n@NgModule({\r\n declarations: [NgxPrinterComponent, PrintItemDirective, PrintItemButtonDirective, PrintItemMarkerDirective, NoPrintDirective],\r\n imports: [],\r\n exports: [NgxPrinterComponent, PrintItemDirective, PrintItemButtonDirective, PrintItemMarkerDirective, NoPrintDirective]\r\n})\r\nexport class NgxPrinterModule {\r\n static forRoot(config: PrintServiceConfig): ModuleWithProviders<NgxPrinterModule> {\r\n return {\r\n ngModule: NgxPrinterModule,\r\n providers: [{ provide: PrintServiceConfig, useValue: config }]\r\n };\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ngx-printer\r\n */\r\n\r\nexport * from './lib/ngx-printer.service';\r\nexport * from './lib/ngx-printer.component';\r\nexport * from './lib/ngx-printer.module';\r\nexport * from './lib/ngx-print-marker-position.enum';\r\nexport * from './lib/print-item';\r\nexport * from './lib/print-item.directive';\r\nexport * from './lib/no-print.directive';\r\nexport * from './lib/print-item-button.directive';\r\nexport * from './lib/print-service-config';\r\nexport * from './lib/print-item-marker.directive';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.PrintServiceConfig","i1.NgxPrinterService"],"mappings":"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