@spartacus/storefront
Version:
Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.
52 lines • 5.9 kB
JavaScript
import { Directive, HostBinding, Input } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "./json-ld-script.factory";
import * as i2 from "@angular/platform-browser";
/**
* Low level directive that adds a json-ld script tag to the component.
* This code bypasses the strict XSS security, as otherwise we're not able
* to append a script tag with JS inside.
*
* This helper directive is actually not used in Spartacus, as Spartacus
* appends json-ld the data to the document body.
*
* This directive can however be used by merchants to write static schema data
* to the DOM in a save way.
*/
export class JsonLdDirective {
constructor(jsonLdScriptFactory, sanitizer) {
this.jsonLdScriptFactory = jsonLdScriptFactory;
this.sanitizer = sanitizer;
}
/**
* Writes the schema data to a json-ld script element.
*/
set cxJsonLd(schema) {
this.jsonLD = this.generateJsonLdScript(schema);
}
/**
* Returns the json-ld script tag with the schema data. The script is
* _bypassing_ sanitization explicitly.
*/
generateJsonLdScript(schema) {
if (schema && this.jsonLdScriptFactory.isJsonLdRequired()) {
const sanitizedSchema = this.jsonLdScriptFactory.sanitize(schema);
const html = `<script type="application/ld+json">${sanitizedSchema}</script>`;
return this.sanitizer.bypassSecurityTrustHtml(html);
}
}
}
JsonLdDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: JsonLdDirective, deps: [{ token: i1.JsonLdScriptFactory }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Directive });
JsonLdDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.0.5", type: JsonLdDirective, selector: "[cxJsonLd]", inputs: { cxJsonLd: "cxJsonLd" }, host: { properties: { "innerHTML": "this.jsonLD" } }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: JsonLdDirective, decorators: [{
type: Directive,
args: [{
selector: '[cxJsonLd]',
}]
}], ctorParameters: function () { return [{ type: i1.JsonLdScriptFactory }, { type: i2.DomSanitizer }]; }, propDecorators: { cxJsonLd: [{
type: Input
}], jsonLD: [{
type: HostBinding,
args: ['innerHTML']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1sZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdG9yZWZyb250bGliL2Ntcy1zdHJ1Y3R1cmUvc2VvL3N0cnVjdHVyZWQtZGF0YS9qc29uLWxkLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFJOUQ7Ozs7Ozs7Ozs7R0FVRztBQUlILE1BQU0sT0FBTyxlQUFlO0lBVTFCLFlBQ1ksbUJBQXdDLEVBQ3hDLFNBQXVCO1FBRHZCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsY0FBUyxHQUFULFNBQVMsQ0FBYztJQUNoQyxDQUFDO0lBWko7O09BRUc7SUFDSCxJQUFhLFFBQVEsQ0FBQyxNQUFtQjtRQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBU0Q7OztPQUdHO0lBQ08sb0JBQW9CLENBQUMsTUFBbUI7UUFDaEQsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDekQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsRSxNQUFNLElBQUksR0FBRyxzQ0FBc0MsZUFBZSxXQUFXLENBQUM7WUFDOUUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JEO0lBQ0gsQ0FBQzs7NEdBekJVLGVBQWU7Z0dBQWYsZUFBZTsyRkFBZixlQUFlO2tCQUgzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO2lCQUN2QjtxSUFLYyxRQUFRO3NCQUFwQixLQUFLO2dCQUlvQixNQUFNO3NCQUEvQixXQUFXO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RCaW5kaW5nLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgSnNvbkxkU2NyaXB0RmFjdG9yeSB9IGZyb20gJy4vanNvbi1sZC1zY3JpcHQuZmFjdG9yeSc7XG5cbi8qKlxuICogTG93IGxldmVsIGRpcmVjdGl2ZSB0aGF0IGFkZHMgYSBqc29uLWxkIHNjcmlwdCB0YWcgdG8gdGhlIGNvbXBvbmVudC5cbiAqIFRoaXMgY29kZSBieXBhc3NlcyB0aGUgc3RyaWN0IFhTUyBzZWN1cml0eSwgYXMgb3RoZXJ3aXNlIHdlJ3JlIG5vdCBhYmxlXG4gKiB0byBhcHBlbmQgYSBzY3JpcHQgdGFnIHdpdGggSlMgaW5zaWRlLlxuICpcbiAqIFRoaXMgaGVscGVyIGRpcmVjdGl2ZSBpcyBhY3R1YWxseSBub3QgdXNlZCBpbiBTcGFydGFjdXMsIGFzIFNwYXJ0YWN1c1xuICogYXBwZW5kcyBqc29uLWxkIHRoZSBkYXRhIHRvIHRoZSBkb2N1bWVudCBib2R5LlxuICpcbiAqIFRoaXMgZGlyZWN0aXZlIGNhbiBob3dldmVyIGJlIHVzZWQgYnkgbWVyY2hhbnRzIHRvIHdyaXRlIHN0YXRpYyBzY2hlbWEgZGF0YVxuICogdG8gdGhlIERPTSBpbiBhIHNhdmUgd2F5LlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY3hKc29uTGRdJyxcbn0pXG5leHBvcnQgY2xhc3MgSnNvbkxkRGlyZWN0aXZlIHtcbiAgLyoqXG4gICAqIFdyaXRlcyB0aGUgc2NoZW1hIGRhdGEgdG8gYSBqc29uLWxkIHNjcmlwdCBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGN4SnNvbkxkKHNjaGVtYTogc3RyaW5nIHwge30pIHtcbiAgICB0aGlzLmpzb25MRCA9IHRoaXMuZ2VuZXJhdGVKc29uTGRTY3JpcHQoc2NoZW1hKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnaW5uZXJIVE1MJykganNvbkxEOiBTYWZlSHRtbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQganNvbkxkU2NyaXB0RmFjdG9yeTogSnNvbkxkU2NyaXB0RmFjdG9yeSxcbiAgICBwcm90ZWN0ZWQgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBqc29uLWxkIHNjcmlwdCB0YWcgd2l0aCB0aGUgc2NoZW1hIGRhdGEuIFRoZSBzY3JpcHQgaXNcbiAgICogX2J5cGFzc2luZ18gc2FuaXRpemF0aW9uIGV4cGxpY2l0bHkuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2VuZXJhdGVKc29uTGRTY3JpcHQoc2NoZW1hOiBzdHJpbmcgfCB7fSk6IFNhZmVIdG1sIHtcbiAgICBpZiAoc2NoZW1hICYmIHRoaXMuanNvbkxkU2NyaXB0RmFjdG9yeS5pc0pzb25MZFJlcXVpcmVkKCkpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZFNjaGVtYSA9IHRoaXMuanNvbkxkU2NyaXB0RmFjdG9yeS5zYW5pdGl6ZShzY2hlbWEpO1xuICAgICAgY29uc3QgaHRtbCA9IGA8c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9sZCtqc29uXCI+JHtzYW5pdGl6ZWRTY2hlbWF9PC9zY3JpcHQ+YDtcbiAgICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChodG1sKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==