@ux-aspects/ux-aspects
Version:
Open source user interface framework for building modern, responsive, mobile big data applications
30 lines • 3.94 kB
JavaScript
import { Directive, HostBinding, Input, SecurityContext, inject } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import * as i0 from "@angular/core";
export class SafeInnerHtmlDirective {
constructor() {
this._sanitizer = inject(DomSanitizer);
}
set safeInnerHtml(value) {
// Angular's DomSanitizer allows anchor tags, however it does remove any dangerous attributes. That being said
// we still want to escape any anchor tags regardless.
value = value.replace(/<a/g, '<a').replace(/<\/a>/g, '</a>');
this.safeHtml = this._sanitizer.sanitize(SecurityContext.HTML, value);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SafeInnerHtmlDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: SafeInnerHtmlDirective, isStandalone: true, selector: "[uxSafeInnerHtml]", inputs: { safeInnerHtml: ["uxSafeInnerHtml", "safeInnerHtml"] }, host: { properties: { "innerHtml": "this.safeHtml" } }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SafeInnerHtmlDirective, decorators: [{
type: Directive,
args: [{
standalone: true,
selector: '[uxSafeInnerHtml]',
}]
}], propDecorators: { safeHtml: [{
type: HostBinding,
args: ['innerHtml']
}], safeInnerHtml: [{
type: Input,
args: ['uxSafeInnerHtml']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS1pbm5lci1odG1sLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kaXJlY3RpdmVzL3NhZmUtaW5uZXItaHRtbC9zYWZlLWlubmVyLWh0bWwuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSwyQkFBMkIsQ0FBQzs7QUFNbkUsTUFBTSxPQUFPLHNCQUFzQjtJQUpuQztRQUttQixlQUFVLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBWXBEO0lBUEMsSUFBOEIsYUFBYSxDQUFDLEtBQWE7UUFDdkQsOEdBQThHO1FBQzlHLHNEQUFzRDtRQUN0RCxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUV0RSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEUsQ0FBQzsrR0FaVSxzQkFBc0I7bUdBQXRCLHNCQUFzQjs7NEZBQXRCLHNCQUFzQjtrQkFKbEMsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLG1CQUFtQjtpQkFDOUI7OEJBS1csUUFBUTtzQkFEakIsV0FBVzt1QkFBQyxXQUFXO2dCQUdNLGFBQWE7c0JBQTFDLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0QmluZGluZywgSW5wdXQsIFNlY3VyaXR5Q29udGV4dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1t1eFNhZmVJbm5lckh0bWxdJyxcbn0pXG5leHBvcnQgY2xhc3MgU2FmZUlubmVySHRtbERpcmVjdGl2ZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuXG4gIEBIb3N0QmluZGluZygnaW5uZXJIdG1sJylcbiAgcHJvdGVjdGVkIHNhZmVIdG1sPzogU2FmZUh0bWw7XG5cbiAgQElucHV0KCd1eFNhZmVJbm5lckh0bWwnKSBzZXQgc2FmZUlubmVySHRtbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgLy8gQW5ndWxhcidzIERvbVNhbml0aXplciBhbGxvd3MgYW5jaG9yIHRhZ3MsIGhvd2V2ZXIgaXQgZG9lcyByZW1vdmUgYW55IGRhbmdlcm91cyBhdHRyaWJ1dGVzLiBUaGF0IGJlaW5nIHNhaWRcbiAgICAvLyB3ZSBzdGlsbCB3YW50IHRvIGVzY2FwZSBhbnkgYW5jaG9yIHRhZ3MgcmVnYXJkbGVzcy5cbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLzxhL2csICcmbHQ7YScpLnJlcGxhY2UoLzxcXC9hPi9nLCAnJmx0Oy9hJmd0OycpO1xuXG4gICAgdGhpcy5zYWZlSHRtbCA9IHRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShTZWN1cml0eUNvbnRleHQuSFRNTCwgdmFsdWUpO1xuICB9XG59XG4iXX0=