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
JavaScript
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