UNPKG

ngx-seo

Version:

`ngx-seo` is a library to help generate and inject proper JSON-LD objects and Meta tags that allow for social sharing into server-side generated Angular applications using Universal.

94 lines 6.45 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Inject, Injectable, Optional, PLATFORM_ID } from '@angular/core'; import { DOCUMENT } from '@angular/common'; import { isPlatformBrowser } from '@angular/common'; export class JsonLdService { /** * @param {?} platformId * @param {?} doc */ constructor(platformId, doc) { this.platformId = platformId; this.doc = doc; this.jsonLd = {}; } /** * @param {?} type * @param {?} rawData * @return {?} */ setData(type, rawData) { this.jsonLd = this.getObject(type, rawData); this.injectBrowser(); } /** * @param {?} type * @param {?=} rawData * @return {?} */ getObject(type, rawData) { /** @type {?} */ let object = { '@context': 'http://schema.org', '@type': type, }; if (rawData) { object = Object.assign({}, object, rawData); } return object; } /** * @return {?} */ toJson() { return JSON.stringify(this.jsonLd); } /** * @private * @return {?} */ injectBrowser() { if (this.platformId && isPlatformBrowser(this.platformId)) { /** @type {?} */ let ldJsonScriptTag = this.doc.head.querySelector(`script[type='application/ld+json']`); if (ldJsonScriptTag) { ldJsonScriptTag.textContent = this.toJson(); } else { ldJsonScriptTag = this.doc.createElement('script'); ldJsonScriptTag.setAttribute('type', 'application/ld+json'); ldJsonScriptTag.textContent = this.toJson(); this.doc.head.appendChild(ldJsonScriptTag); } } } } JsonLdService.decorators = [ { type: Injectable } ]; /** @nocollapse */ JsonLdService.ctorParameters = () => [ { type: Object, decorators: [{ type: Optional }, { type: Inject, args: [PLATFORM_ID,] }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] } ]; if (false) { /** * @type {?} * @private */ JsonLdService.prototype.jsonLd; /** * @type {?} * @private */ JsonLdService.prototype.platformId; /** * @type {?} * @private */ JsonLdService.prototype.doc; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1sZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXNlby8iLCJzb3VyY2VzIjpbImxpYi9qc29uLWxkL2pzb24tbGQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHcEQsTUFBTSxPQUFPLGFBQWE7Ozs7O0lBSXhCLFlBQ29ELFVBQWtCLEVBQ3JCLEdBQVE7UUFETCxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ3JCLFFBQUcsR0FBSCxHQUFHLENBQUs7UUFKakQsV0FBTSxHQUFRLEVBQUUsQ0FBQztJQU16QixDQUFDOzs7Ozs7SUFFRCxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQVk7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQzs7Ozs7O0lBRUQsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFhOztZQUN2QixNQUFNLEdBQUc7WUFDWCxVQUFVLEVBQUUsbUJBQW1CO1lBQy9CLE9BQU8sRUFBRSxJQUFJO1NBQ2Q7UUFDRCxJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0scUJBQ0QsTUFBTSxFQUNOLE9BQU8sQ0FDWCxDQUFDO1NBQ0g7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzs7O0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQzs7Ozs7SUFFTyxhQUFhO1FBQ25CLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7O2dCQUNyRCxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLG9DQUFvQyxDQUFDO1lBQ3ZGLElBQUksZUFBZSxFQUFFO2dCQUNuQixlQUFlLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUM3QztpQkFBTTtnQkFDTCxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ25ELGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUM7Z0JBQzVELGVBQWUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDNUM7U0FDRjtJQUNILENBQUM7OztZQTlDRixVQUFVOzs7O1lBTXVELE1BQU0sdUJBQW5FLFFBQVEsWUFBSSxNQUFNLFNBQUMsV0FBVzs0Q0FDOUIsUUFBUSxZQUFJLE1BQU0sU0FBQyxRQUFROzs7Ozs7O0lBSjlCLCtCQUF5Qjs7Ozs7SUFHdkIsbUNBQW9FOzs7OztJQUNwRSw0QkFBdUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSnNvbkxkU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBqc29uTGQ6IGFueSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZDogT2JqZWN0LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgcmVhZG9ubHkgZG9jOiBhbnksXG4gICkge1xuICB9XG5cbiAgc2V0RGF0YSh0eXBlLCByYXdEYXRhOiBhbnkpIHtcbiAgICB0aGlzLmpzb25MZCA9IHRoaXMuZ2V0T2JqZWN0KHR5cGUsIHJhd0RhdGEpO1xuICAgIHRoaXMuaW5qZWN0QnJvd3NlcigpO1xuICB9XG5cbiAgZ2V0T2JqZWN0KHR5cGUsIHJhd0RhdGE/OiBhbnkpIHtcbiAgICBsZXQgb2JqZWN0ID0ge1xuICAgICAgJ0Bjb250ZXh0JzogJ2h0dHA6Ly9zY2hlbWEub3JnJyxcbiAgICAgICdAdHlwZSc6IHR5cGUsXG4gICAgfTtcbiAgICBpZiAocmF3RGF0YSkge1xuICAgICAgb2JqZWN0ID0ge1xuICAgICAgICAuLi5vYmplY3QsXG4gICAgICAgIC4uLnJhd0RhdGEsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgdG9Kc29uKCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmpzb25MZCk7XG4gIH1cblxuICBwcml2YXRlIGluamVjdEJyb3dzZXIoKSB7XG4gICAgaWYgKHRoaXMucGxhdGZvcm1JZCAmJiBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICBsZXQgbGRKc29uU2NyaXB0VGFnID0gdGhpcy5kb2MuaGVhZC5xdWVyeVNlbGVjdG9yKGBzY3JpcHRbdHlwZT0nYXBwbGljYXRpb24vbGQranNvbiddYCk7XG4gICAgICBpZiAobGRKc29uU2NyaXB0VGFnKSB7XG4gICAgICAgIGxkSnNvblNjcmlwdFRhZy50ZXh0Q29udGVudCA9IHRoaXMudG9Kc29uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZEpzb25TY3JpcHRUYWcgPSB0aGlzLmRvYy5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgbGRKc29uU2NyaXB0VGFnLnNldEF0dHJpYnV0ZSgndHlwZScsICdhcHBsaWNhdGlvbi9sZCtqc29uJyk7XG4gICAgICAgIGxkSnNvblNjcmlwdFRhZy50ZXh0Q29udGVudCA9IHRoaXMudG9Kc29uKCk7XG4gICAgICAgIHRoaXMuZG9jLmhlYWQuYXBwZW5kQ2hpbGQobGRKc29uU2NyaXB0VGFnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuIl19