{"version":3,"file":"chunk-fdtcv50t.js","sources":["packages/promo/app/src/promo-content-loader/promo-page-dommanipulator.service.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\n\nimport { PromoPageContent } from './promo.models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PromoPageDomManipulatorService {\n promoAssetAttributeName: string = 'data-promo-asset';\n\n constructor(\n private titleService: Title,\n private metaService: Meta,\n ) {}\n\n manipulateDom(promoPageContent: PromoPageContent): void {\n this.setHtmlTitle(promoPageContent.Title);\n\n this.setPageDescription(promoPageContent.PageDescription);\n\n this.setBodyClass(promoPageContent.BodyClass);\n\n this.removeCustomAssets();\n\n this.addProductGlobalJavascriptVariable(promoPageContent.Product);\n\n this.addAssets(promoPageContent.AssetManagementHead, promoPageContent.AssetManagementBottom);\n }\n\n setHtmlTitle(title: string): void {\n if (title) {\n this.titleService.setTitle(title);\n }\n }\n setPageDescription(description: string): void {\n if (description) {\n this.metaService.updateTag({ name: 'description', content: description });\n }\n }\n\n setBodyClass(bodyClass: string): void {\n if (bodyClass) {\n document.body.className = bodyClass;\n }\n }\n\n removeCustomAssets(): void {\n const elementsToRemove: any = this.getAllElementsWithAttribute(this.promoAssetAttributeName);\n for (let i: any = 0; i < elementsToRemove.length; i++) {\n const element: any = elementsToRemove[i];\n\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n }\n }\n\n addProductGlobalJavascriptVariable(product: string): void {\n if (!product) {\n return;\n }\n\n const productScript: any = this.createScriptTag();\n\n productScript.innerHTML = \"var gPluginsPromoProduct = '\" + this.escapeHtml(product) + \"';\";\n\n this.appendElement(document.head, productScript);\n }\n\n addScriptPageAssetHeader(scriptElement: string): void {\n if (!scriptElement) {\n return;\n }\n const prepareScriptElement: any = this.createScriptTag();\n prepareScriptElement.innerHTML = this.escapeHtml(scriptElement);\n this.appendElement(document.head, prepareScriptElement);\n }\n\n addStylePageAssetHeader(styleElement: string): void {\n if (!styleElement) {\n return;\n }\n const prepareStyleElement = this.createStyleTag();\n let embeddedHTMLWithCssSymbols = this.escapeHtml(styleElement);\n prepareStyleElement.innerHTML = embeddedHTMLWithCssSymbols.replaceAll(' > ', ' > ');\n this.appendElement(document.head, prepareStyleElement);\n }\n\n addAssets(headerHtml: any, footerHtml: any): void {\n this.appendElements(document.head, headerHtml);\n\n this.appendElements(document.body, footerHtml);\n }\n\n appendElements(parentNode: any, html: any): void {\n if (!html) {\n return;\n }\n\n const wrapper: any = document.createElement('div');\n wrapper.innerHTML = html;\n const elements: any = wrapper.childNodes;\n\n let elementToAdd: any;\n\n for (let i: any = 0; i < elements.length; i++) {\n const element: any = elements[i];\n\n if (this.isInvalidElementToAdd(element)) {\n continue;\n }\n\n if (element.nodeName === 'SCRIPT') {\n elementToAdd = this.createScriptTagFromNode(element);\n } else {\n elementToAdd = element.cloneNode(true);\n }\n\n this.appendElement(parentNode, elementToAdd);\n }\n }\n\n createScriptTagFromNode(element: any): HTMLScriptElement {\n const script: HTMLScriptElement = this.createScriptTag();\n if (element.src) {\n script.src = element.src;\n }\n\n if (element.text && element.text.trim() !== '') {\n script.text = element.text;\n }\n if (element.type) {\n script.type = element.type;\n }\n\n return script;\n }\n\n appendElement(containerNode: any, elementToAdd: any): void {\n if (elementToAdd.setAttribute) {\n elementToAdd.setAttribute(this.promoAssetAttributeName, '');\n elementToAdd.setAttribute('name', this.promoAssetAttributeName);\n }\n containerNode.appendChild(elementToAdd);\n }\n\n isInvalidElementToAdd(element: any): boolean {\n return element.nodeType !== 1;\n }\n\n createScriptTag(): HTMLScriptElement {\n const script: HTMLScriptElement = document.createElement('script');\n script.type = 'text/javascript';\n return script;\n }\n\n createStyleTag(): HTMLStyleElement {\n const style: HTMLStyleElement = document.createElement('style');\n return style;\n }\n escapeHtml(str: string): string {\n const div: HTMLDivElement = document.createElement('div');\n div.appendChild(document.createTextNode(str));\n return div.innerHTML;\n }\n\n getAllElementsWithAttribute(attribute: string): Element[] {\n const matchingElements: any[] = [];\n const allElements: any = document.getElementsByTagName('*');\n for (let i: any = 0, n: any = allElements.length; i < n; i++) {\n if (allElements[i].getAttribute(attribute) !== null) {\n // element exists with attribute. Add to array.\n matchingElements.push(allElements[i]);\n }\n }\n return matchingElements;\n }\n}\n"],"names":["PromoPageDomManipulatorService","constructor","titleService","metaService","promoAssetAttributeName","manipulateDom","promoPageContent","setHtmlTitle","Title","setPageDescription","PageDescription","setBodyClass","BodyClass","removeCustomAssets","addProductGlobalJavascriptVariable","Product","addAssets","AssetManagementHead","AssetManagementBottom","title","setTitle","description","updateTag","name","content","bodyClass","document","body","className","elementsToRemove","getAllElementsWithAttribute","i","length","element","parentNode","removeChild","product","productScript","createScriptTag","innerHTML","escapeHtml","appendElement","head","addScriptPageAssetHeader","scriptElement","prepareScriptElement","addStylePageAssetHeader","styleElement","prepareStyleElement","createStyleTag","embeddedHTMLWithCssSymbols","replaceAll","headerHtml","footerHtml","appendElements","html","wrapper","createElement","elements","childNodes","elementToAdd","isInvalidElementToAdd","nodeName","createScriptTagFromNode","cloneNode","script","src","text","trim","type","containerNode","setAttribute","appendChild","nodeType","str","div","createTextNode","attribute","matchingElements","allElements","getElementsByTagName","n","getAttribute","push","ɵɵinject","Meta","factory","ɵfac","providedIn","_PromoPageDomManipulatorService"],"mappings":"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"}