From 7fa14ceabd903df63cdbf3262add88251ec5fb43 Mon Sep 17 00:00:00 2001 From: Phil Kunz Date: Fri, 6 Nov 2020 01:11:26 +0000 Subject: [PATCH] fix(core): update --- ts/interfaces/index.ts | 1 + ts/websetup.classes.tag.jsonldtag.ts | 46 ++++++++++++------------- ts/websetup.classes.tag.opengraphtag.ts | 10 ++++++ ts/websetup.classes.taglevel.ts | 17 ++++++--- ts/websetup.classes.tagmanager.ts | 6 ++++ 5 files changed, 51 insertions(+), 29 deletions(-) diff --git a/ts/interfaces/index.ts b/ts/interfaces/index.ts index ca7fd9c..1d872f0 100644 --- a/ts/interfaces/index.ts +++ b/ts/interfaces/index.ts @@ -3,6 +3,7 @@ import * as plugins from '../websetup.plugins'; export interface IMetaObject { title: string; description?: string; + twitterHandle?: string; canonicalDomain?: string; ldCompany?: plugins.tsclass.business.ICompany; ldProduct?: any; diff --git a/ts/websetup.classes.tag.jsonldtag.ts b/ts/websetup.classes.tag.jsonldtag.ts index 59d27ad..564dbb7 100644 --- a/ts/websetup.classes.tag.jsonldtag.ts +++ b/ts/websetup.classes.tag.jsonldtag.ts @@ -35,35 +35,33 @@ export class JsonLdTag extends Tag { return ldTag; } - public static createNewsArticleLd (newsArticleArg: plugins.tsclass.content.IArticle) { + public static createNewsArticleJsonLd(newsArticleArg: plugins.tsclass.content.IArticle) { const newsArticleLd = { - "@context": "https://schema.org", - "@type": "NewsArticle", - "mainEntityOfPage": { - "@type": "WebPage", - "@id": window.location.href + '@context': 'https://schema.org', + '@type': 'NewsArticle', + mainEntityOfPage: { + '@type': 'WebPage', + '@id': window.location.href, }, - "headline": "Article headline", - "image": [ - newsArticleArg.featuredImageUrl - ], - "datePublished": new Date(newsArticleArg.timestamp).toISOString(), - "dateModified": new Date(newsArticleArg.timestamp).toISOString(), - "author": { - "@type": "Person", - "name": `${newsArticleArg.author.firstName} ${newsArticleArg.author.surName}` + headline: 'Article headline', + image: [newsArticleArg.featuredImageUrl], + datePublished: new Date(newsArticleArg.timestamp).toISOString(), + dateModified: new Date(newsArticleArg.timestamp).toISOString(), + author: { + '@type': 'Person', + name: `${newsArticleArg.author.firstName} ${newsArticleArg.author.surName}`, }, - "publisher": { - "@type": "Organization", - "name": newsArticleArg.author.surName, // TODO - "logo": { - "@type": "ImageObject", - "url": newsArticleArg.author.surName // TODO - } + publisher: { + '@type': 'Organization', + name: newsArticleArg.author.surName, // TODO + logo: { + '@type': 'ImageObject', + url: newsArticleArg.author.surName, // TODO + }, }, - "description": newsArticleArg.author.firstName + description: newsArticleArg.author.firstName, }; - const ldTag = new JsonLdTag(newsArticleArg); + const ldTag = new JsonLdTag(newsArticleLd); return ldTag; } diff --git a/ts/websetup.classes.tag.opengraphtag.ts b/ts/websetup.classes.tag.opengraphtag.ts index 294ecbe..17d4e59 100644 --- a/ts/websetup.classes.tag.opengraphtag.ts +++ b/ts/websetup.classes.tag.opengraphtag.ts @@ -1,6 +1,16 @@ +import * as plugins from './websetup.plugins'; import { Tag } from './websetup.classes.tag'; export class OpengraphTag extends Tag { + public static createNewsArticleOgTags (newsArticleArg: plugins.tsclass.content.IArticle) { + const tagArray: OpengraphTag[] = []; + tagArray.push(new OpengraphTag('og:url', newsArticleArg.url)); + tagArray.push(new OpengraphTag('og:title', newsArticleArg.title)); + tagArray.push(new OpengraphTag('og:description', newsArticleArg.content)); + tagArray.push(new OpengraphTag('og:image', newsArticleArg.featuredImageUrl)); + return tagArray; + } + constructor(propertyNameArg: string, contentArg: string) { super(); const openGraphElement = document.createElement('meta'); diff --git a/ts/websetup.classes.taglevel.ts b/ts/websetup.classes.taglevel.ts index 933a044..17bd822 100644 --- a/ts/websetup.classes.taglevel.ts +++ b/ts/websetup.classes.taglevel.ts @@ -31,10 +31,16 @@ export class TagLevel { this.tagManagerRef = tagManagerRefArg; } - public addTag(tagArg: Tag) { - this.tags.push(tagArg); - if (this.state === 'enabled') { - tagArg.appendToDom(); + public addTag(tagArg: Tag | Tag[]) { + if (tagArg instanceof Array) { + for (const tagArg2 of tagArg) { + this.addTag(tagArg2); + } + } else { + this.tags.push(tagArg); + if (this.state === 'enabled') { + tagArg.appendToDom(); + } } } @@ -70,7 +76,8 @@ export class TagLevel { } public addNewsArticleInfo(articleArg: plugins.tsclass.content.IArticle) { - this.addTag(JsonLdTag.createNewsArticleLd(articleArg)); + this.addTag(JsonLdTag.createNewsArticleJsonLd(articleArg)); + this.addTag(OpengraphTag.createNewsArticleOgTags(articleArg)); } public async enable() { diff --git a/ts/websetup.classes.tagmanager.ts b/ts/websetup.classes.tagmanager.ts index 95475e1..4516dd7 100644 --- a/ts/websetup.classes.tagmanager.ts +++ b/ts/websetup.classes.tagmanager.ts @@ -16,6 +16,12 @@ export class TagManager { // global tag level this.globalLevel.addTag(new MetaTag('google', 'notranslate')); this.globalLevel.addTag(new MetaTag('revisit-after', '1 days')); + + if (metaObjectArg.twitterHandle) { + this.globalLevel.addTag(new MetaTag('twitter:card', 'summary_large_image')); + this.globalLevel.addTag(new MetaTag('twitter:site', metaObjectArg.twitterHandle)); + this.globalLevel.addTag(new MetaTag('twitter:creator', metaObjectArg.twitterHandle)); + } // base tag level this.baseLevel.title = metaObjectArg.title;