@paperbits/common
Version:
Paperbits common components.
35 lines (27 loc) • 1.38 kB
text/typescript
import { ISiteService, SiteSettingsContract } from "../sites";
import { HtmlPage } from "./htmlPage";
import { HtmlPagePublisherPlugin } from "./htmlPagePublisherPlugin";
export class LinkedDataHtmlPagePublisherPlugin implements HtmlPagePublisherPlugin {
constructor(private readonly siteService: ISiteService) { }
public async apply(document: Document, page: HtmlPage): Promise<void> {
let linkedDataObject: any = page.linkedData;
/* Ensure rendering structured data for home page only */
if (page.permalink !== "/" && !linkedDataObject) {
return;
}
if (!linkedDataObject) {
const settings = await this.siteService.getSettings<any>();
const siteSettings: SiteSettingsContract = settings.site;
linkedDataObject = {
"@context": "http://www.schema.org",
"@type": "Organization",
"name": siteSettings.title,
"description": siteSettings.description
};
}
const structuredDataScriptElement = document.createElement("script");
structuredDataScriptElement.setAttribute("type", "application/ld+json");
structuredDataScriptElement.innerHTML = JSON.stringify(linkedDataObject);
document.head.appendChild(structuredDataScriptElement);
}
}