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
JavaScript
/**
* @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