UNPKG

ngx-dynamic-hooks

Version:

Automatically insert live Angular components into a dynamic string of content (based on their selector or any pattern of your choice) and render the result in the DOM.

110 lines 14.8 kB
import { Inject, Injectable, Optional } from '@angular/core'; import { PLATFORM_SERVICE } from './platformService'; import * as i0 from "@angular/core"; import * as i1 from "./defaultPlatformService"; /** * Wrapper class that either calls user-provided PlatformService methods or falls back to default implementations */ export class AutoPlatformService { constructor(userPlatformService, defaultPlatformService) { this.userPlatformService = userPlatformService; this.defaultPlatformService = defaultPlatformService; } getFor(methodName) { if (this.userPlatformService && typeof this.userPlatformService[methodName] === 'function') { return this.userPlatformService; } else { return this.defaultPlatformService; } } getNgVersion() { return this.getFor('getNgVersion').getNgVersion(); } sanitize(content) { return this.getFor('sanitize').sanitize(content); } createElement(tagName) { return this.getFor('createElement').createElement(tagName); } sortElements(a, b) { return this.getFor('sortElements').sortElements(a, b); } cloneElement(element) { return this.getFor('cloneElement').cloneElement(element); } getTagName(element) { return this.getFor('getTagName').getTagName(element); } getOpeningTag(element) { return this.getFor('getOpeningTag').getOpeningTag(element); } getClosingTag(element) { return this.getFor('getClosingTag').getClosingTag(element); } getAttributeNames(element) { return this.getFor('getAttributeNames').getAttributeNames(element); } getAttribute(element, attributeName) { return this.getFor('getAttribute').getAttribute(element, attributeName); } setAttribute(element, attributeName, value) { return this.getFor('setAttribute').setAttribute(element, attributeName, value); } removeAttribute(element, attributeName) { return this.getFor('removeAttribute').removeAttribute(element, attributeName); } getParentNode(element) { return this.getFor('getParentNode').getParentNode(element); } querySelectorAll(parentElement, selector) { return this.getFor('querySelectorAll').querySelectorAll(parentElement, selector); } getChildNodes(node) { return this.getFor('getChildNodes').getChildNodes(node); } appendChild(parentElement, childElement) { return this.getFor('appendChild').appendChild(parentElement, childElement); } insertBefore(parentElement, childElement, referenceElement) { return this.getFor('insertBefore').insertBefore(parentElement, childElement, referenceElement); } clearChildNodes(element) { return this.getFor('clearChildNodes').clearChildNodes(element); } removeChild(parentElement, childElement) { return this.getFor('removeChild').removeChild(parentElement, childElement); } getInnerContent(element) { return this.getFor('getInnerContent').getInnerContent(element); } setInnerContent(element, content) { return this.getFor('setInnerContent').setInnerContent(element, content); } isTextNode(element) { return this.getFor('isTextNode').isTextNode(element); } createTextNode(content) { return this.getFor('createTextNode').createTextNode(content); } getTextContent(element) { return this.getFor('getTextContent').getTextContent(element); } dispatchEvent(element, name, payload) { return this.getFor('dispatchEvent').dispatchEvent(element, name, payload); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AutoPlatformService, deps: [{ token: PLATFORM_SERVICE, optional: true }, { token: i1.DefaultPlatformService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AutoPlatformService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AutoPlatformService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [PLATFORM_SERVICE] }] }, { type: i1.DefaultPlatformService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b1BsYXRmb3JtU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1keW5hbWljLWhvb2tzL3NyYy9saWIvc2VydmljZXMvcGxhdGZvcm0vYXV0b1BsYXRmb3JtU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUEyQixnQkFBZ0IsRUFBbUIsTUFBTSxtQkFBbUIsQ0FBQzs7O0FBRy9GOztHQUVHO0FBSUgsTUFBTSxPQUFPLG1CQUFtQjtJQUU5QixZQUEwRCxtQkFBb0MsRUFBVSxzQkFBOEM7UUFBNUYsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFpQjtRQUFVLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7SUFDdEosQ0FBQztJQUVPLE1BQU0sQ0FBRSxVQUFrQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxPQUFRLElBQUksQ0FBQyxtQkFBMkIsQ0FBQyxVQUFVLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNwRyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQTtRQUNqQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxZQUFhLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQWU7UUFDdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQWU7UUFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FB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Qjs7MEJBR2MsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wbGV0ZVBsYXRmb3JtU2VydmljZSwgUExBVEZPUk1fU0VSVklDRSwgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi9wbGF0Zm9ybVNlcnZpY2UnO1xuaW1wb3J0IHsgRGVmYXVsdFBsYXRmb3JtU2VydmljZSB9IGZyb20gJy4vZGVmYXVsdFBsYXRmb3JtU2VydmljZSc7XG5cbi8qKlxuICogV3JhcHBlciBjbGFzcyB0aGF0IGVpdGhlciBjYWxscyB1c2VyLXByb3ZpZGVkIFBsYXRmb3JtU2VydmljZSBtZXRob2RzIG9yIGZhbGxzIGJhY2sgdG8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnNcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXV0b1BsYXRmb3JtU2VydmljZSBpbXBsZW1lbnRzIENvbXBsZXRlUGxhdGZvcm1TZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KFBMQVRGT1JNX1NFUlZJQ0UpIHByaXZhdGUgdXNlclBsYXRmb3JtU2VydmljZTogUGxhdGZvcm1TZXJ2aWNlLCBwcml2YXRlIGRlZmF1bHRQbGF0Zm9ybVNlcnZpY2U6IERlZmF1bHRQbGF0Zm9ybVNlcnZpY2UpIHtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9yIChtZXRob2ROYW1lOiBzdHJpbmcpOiBQbGF0Zm9ybVNlcnZpY2Uge1xuICAgIGlmICh0aGlzLnVzZXJQbGF0Zm9ybVNlcnZpY2UgJiYgdHlwZW9mICh0aGlzLnVzZXJQbGF0Zm9ybVNlcnZpY2UgYXMgYW55KVttZXRob2ROYW1lXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMudXNlclBsYXRmb3JtU2VydmljZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UGxhdGZvcm1TZXJ2aWNlO1xuICAgIH1cbiAgfVxuXG4gIGdldE5nVmVyc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGb3IoJ2dldE5nVmVyc2lvbicpLmdldE5nVmVyc2lvbiEoKTtcbiAgfVxuICBcbiAgc2FuaXRpemUoY29udGVudDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9yKCdzYW5pdGl6ZScpLnNhbml0aXplIShjb250ZW50KTtcbiAgfVxuXG4gIGNyZWF0ZUVsZW1lbnQodGFnTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9yKCdjcmVhdGVFbGVtZW50JykuY3JlYXRlRWxlbWVudCEodGFnTmFtZSk7XG4gIH1cblxuICBzb3J0RWxlbWVudHMoYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldEZvcignc29ydEVsZW1lbnRzJykuc29ydEVsZW1lbnRzIShhLCBiKTtcbiAgfVxuXG4gIGNsb25lRWxlbWVudChlbGVtZW50OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGb3IoJ2Nsb25lRWxlbWVudCcpLmNsb25lRWxlbWVudCEoZWxlbWVudCk7XG4gIH1cblxuICBnZXRUYWdOYW1lKGVsZW1lbnQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmdldEZvcignZ2V0VGFnTmFtZScpLmdldFRhZ05hbWUhKGVsZW1lbnQpO1xuICB9XG5cbiAgZ2V0T3BlbmluZ1RhZyhlbGVtZW50OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGb3IoJ2dldE9wZW5pbmdUYWcnKS5nZXRPcGVuaW5nVGFnIShlbGVtZW50KTtcbiAgfVxuXG4gIGdldENsb3NpbmdUYWcoZWxlbWVudDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9yKCdnZXRDbG9zaW5nVGFnJykuZ2V0Q2xvc2luZ1RhZyEoZWxlbWVudCk7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVOYW1lcyhlbGVtZW50OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGb3IoJ2dldEF0dHJpYnV0ZU5hbWVzJykuZ2V0QXR0cmlidXRlTmFtZXMhKGVsZW1lbnQpO1xuICB9XG5cbiAgZ2V0QXR0cmlidXRlKGVsZW1lbnQ6IGFueSwgYXR0cmlidXRlTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9yKCdnZXRBdHRyaWJ1dGUnKS5nZXRBdHRyaWJ1dGUhKGVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpO1xuICB9XG5cbiAgc2V0QXR0cmlidXRlKGVsZW1lbnQ6IGFueSwgYXR0cmlidXRlTmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9yKCdzZXRBdHRyaWJ1dGUnKS5zZXRBdHRyaWJ1dGUhKGVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIHJlbW92ZUF0dHJpYnV0ZShlbGVtZW50OiBhbnksIGF0dHJpYnV0ZU5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldEZvcigncmVtb3ZlQXR0cmlidXRlJykucmVtb3ZlQXR0cmlidXRlIShlbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUoZWxlbWVudDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9yKCdnZXRQYXJlbnROb2RlJykuZ2V0UGFyZW50Tm9kZSEoZWxlbWVudCk7XG4gIH1cblxuICBxdWVyeVNlbGVjdG9yQWxsKHBhcmVudEVsZW1lbnQ6IGFueSwgc2VsZWN0b3I6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldEZvcigncXVlcnlTZWxlY3RvckFsbCcpLnF1ZXJ5U2VsZWN0b3JBbGwhKHBhcmVudEVsZW1lbnQsIHNlbGVjdG9yKTtcbiAgfVxuXG4gIGdldENoaWxkTm9kZXMobm9kZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9yKCdnZXRDaGlsZE5vZGVzJykuZ2V0Q2hpbGROb2RlcyEobm9kZSk7XG4gIH1cblxuICBhcHBlbmRDaGlsZChwYXJlbnRFbGVtZW50OiBhbnksIGNoaWxkRWxlbWVudDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9yKCdhcHBlbmRDaGlsZCcpLmFwcGVuZENoaWxkIShwYXJlbnRFbGVtZW50LCBjaGlsZEVsZW1lbnQpO1xuICB9XG5cbiAgaW5zZXJ0QmVmb3JlKHBhcmVudEVsZW1lbnQ6IGFueSwgY2hpbGRFbGVtZW50OiBhbnksIHJlZmVyZW5jZUVsZW1lbnQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmdldEZvcignaW5zZXJ0QmVmb3JlJykuaW5zZXJ0QmVmb3JlIShwYXJlbnRFbGVtZW50LCBjaGlsZEVsZW1lbnQsIHJlZmVyZW5jZUVsZW1lbnQpO1xuICB9XG4gIFxuICBjbGVhckNoaWxkTm9kZXMoZWxlbWVudDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9yKCdjbGVhckNoaWxkTm9kZXMnKS5jbGVhckNoaWxkTm9kZXMhKGVsZW1lbnQpO1xuICB9XG5cbiAgcmVtb3ZlQ2hpbGQocGFyZW50RWxlbWVudDogYW55LCBjaGlsZEVsZW1lbnQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmdldEZvcigncmVtb3ZlQ2hpbGQnKS5yZW1vdmVDaGlsZCEocGFyZW50RWxlbWVudCwgY2hpbGRFbGVtZW50KTtcbiAgfVxuXG4gIGdldElubmVyQ29udGVudChlbGVtZW50OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGb3IoJ2dldElubmVyQ29udGVudCcpLmdldElubmVyQ29udGVudCEoZWxlbWVudCk7XG4gIH1cblxuICBzZXRJbm5lckNvbnRlbnQoZWxlbWVudDogYW55LCBjb250ZW50OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGb3IoJ3NldElubmVyQ29udGVudCcpLnNldElubmVyQ29udGVudCEoZWxlbWVudCwgY29udGVudCk7XG4gIH1cblxuICBpc1RleHROb2RlKGVsZW1lbnQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmdldEZvcignaXNUZXh0Tm9kZScpLmlzVGV4dE5vZGUhKGVsZW1lbnQpO1xuICB9XG5cbiAgY3JlYXRlVGV4dE5vZGUoY29udGVudDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9yKCdjcmVhdGVUZXh0Tm9kZScpLmNyZWF0ZVRleHROb2RlIShjb250ZW50KTtcbiAgfVxuXG4gIGdldFRleHRDb250ZW50KGVsZW1lbnQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmdldEZvcignZ2V0VGV4dENvbnRlbnQnKS5nZXRUZXh0Q29udGVudCEoZWxlbWVudCk7XG4gIH1cblxuICBkaXNwYXRjaEV2ZW50KGVsZW1lbnQ6IGFueSwgbmFtZTogc3RyaW5nLCBwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGb3IoJ2Rpc3BhdGNoRXZlbnQnKS5kaXNwYXRjaEV2ZW50IShlbGVtZW50LCBuYW1lLCBwYXlsb2FkKTtcbiAgfVxuXG59Il19