Skip to content

Commit fea3d37

Browse files
committed
Add twitter card meta
1 parent dc5fcb8 commit fea3d37

File tree

2 files changed

+80
-7
lines changed

2 files changed

+80
-7
lines changed

hepek-components/shared/src/main/scala/ba/sake/hepek/html/HtmlPage.scala

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,14 @@ trait HtmlPage extends PageDependencies {
8080
metaSettings.ogDescription.map(c => meta(property := "og:description", content := c)),
8181
metaSettings.ogSiteName.map(c => meta(property := "og:site_name", content := c)),
8282
metaSettings.ogLocale.map(c => meta(property := "og:locale", content := c)),
83-
metaSettings.articleAuthor.map(c => meta(property := "article:author", content := c))
83+
metaSettings.articleAuthor.map(c => meta(property := "article:author", content := c)),
84+
// twitter
85+
metaSettings.twitterTitle.map(c => meta(name := "twitter:title", content := c)),
86+
metaSettings.twitterCard.map(c => meta(name := "twitter:card", content := c)),
87+
metaSettings.twitterSite.map(c => meta(name := "twitter:site", content := c)),
88+
metaSettings.twitterDescription.map(c => meta(name := "twitter:description", content := c)),
89+
metaSettings.twitterImage.map(c => meta(name := "twitter:image", content := c)),
90+
metaSettings.twitterImageAlt.map(c => meta(name := "twitter:image:alt", content := c))
8491
)
8592

8693
// <head>

hepek-components/shared/src/main/scala/ba/sake/hepek/html/MetaSettings.scala

Lines changed: 72 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ final class MetaSettings private (
1717
val geoPosition: Option[String],
1818
val geoRegion: Option[String],
1919
val geoPlacename: Option[String],
20-
// open graph (fb, twitter)
21-
// note: twitter falls back to OG https://developer.twitter.com/en/docs/tweets/optimize-with-cards/guides/getting-started#twitter-cards-and-open-graph
20+
// open graph fb and others
2221
val ogUrl: Option[String],
2322
val ogType: Option[String],
2423
val ogTitle: Option[String],
@@ -27,7 +26,14 @@ final class MetaSettings private (
2726
val ogDescription: Option[String],
2827
val ogSiteName: Option[String],
2928
val ogLocale: Option[String],
30-
val articleAuthor: Option[String]
29+
val articleAuthor: Option[String],
30+
// twitter card
31+
val twitterCard: Option[String], // usually set to "summary_large_image"
32+
val twitterSite: Option[String], // The Twitter @username of author
33+
val twitterTitle: Option[String],
34+
val twitterDescription: Option[String],
35+
val twitterImage: Option[String],
36+
val twitterImageAlt: Option[String]
3137
) {
3238

3339
def withCharset(charset: String): MetaSettings = copy(charset = charset)
@@ -121,6 +127,48 @@ final class MetaSettings private (
121127
Option(articleAuthor)
122128
)
123129

130+
def withTwitterCard(twitterCard: Option[String]): MetaSettings =
131+
copy(twitterCard = twitterCard)
132+
133+
def withTwitterCard(twitterCard: String): MetaSettings = withArticleAuthor(
134+
Option(twitterCard)
135+
)
136+
137+
def withTwitterSite(twitterSite: Option[String]): MetaSettings =
138+
copy(twitterSite = twitterSite)
139+
140+
def withTwitterSite(twitterSite: String): MetaSettings = withArticleAuthor(
141+
Option(twitterSite)
142+
)
143+
144+
def withTwitterTitle(twitterTitle: Option[String]): MetaSettings =
145+
copy(twitterTitle = twitterTitle)
146+
147+
def withTwitterTitle(twitterTitle: String): MetaSettings = withArticleAuthor(
148+
Option(twitterTitle)
149+
)
150+
151+
def withTwitterDescription(twitterDescription: Option[String]): MetaSettings =
152+
copy(twitterDescription = twitterDescription)
153+
154+
def withTwitterDescription(twitterDescription: String): MetaSettings = withArticleAuthor(
155+
Option(twitterDescription)
156+
)
157+
158+
def withTwitterImage(twitterImage: Option[String]): MetaSettings =
159+
copy(twitterImage = twitterImage)
160+
161+
def withTwitterImage(twitterImage: String): MetaSettings = withArticleAuthor(
162+
Option(twitterImage)
163+
)
164+
165+
def withTwitterImageAlt(twitterImageAlt: Option[String]): MetaSettings =
166+
copy(twitterImageAlt = twitterImageAlt)
167+
168+
def withTwitterImageAlt(twitterImageAlt: String): MetaSettings = withArticleAuthor(
169+
Option(twitterImageAlt)
170+
)
171+
124172
private def copy(
125173
charset: String = charset,
126174
xuaCompatible: String = xuaCompatible,
@@ -144,7 +192,13 @@ final class MetaSettings private (
144192
ogDescription: Option[String] = ogDescription,
145193
ogSiteName: Option[String] = ogSiteName,
146194
ogLocale: Option[String] = ogLocale,
147-
articleAuthor: Option[String] = articleAuthor
195+
articleAuthor: Option[String] = articleAuthor,
196+
twitterCard: Option[String] = twitterCard,
197+
twitterSite: Option[String] = twitterSite,
198+
twitterTitle: Option[String] = twitterTitle,
199+
twitterDescription: Option[String] = twitterDescription,
200+
twitterImage: Option[String] = twitterImage,
201+
twitterImageAlt: Option[String] = twitterImageAlt
148202
) =
149203
new MetaSettings(
150204
charset = charset,
@@ -169,7 +223,13 @@ final class MetaSettings private (
169223
ogDescription = ogDescription,
170224
ogSiteName = ogSiteName,
171225
ogLocale = ogLocale,
172-
articleAuthor = articleAuthor
226+
articleAuthor = articleAuthor,
227+
twitterCard = twitterCard,
228+
twitterSite = twitterSite,
229+
twitterTitle = twitterTitle,
230+
twitterDescription = twitterDescription,
231+
twitterImage = twitterImage,
232+
twitterImageAlt = twitterImageAlt
173233
)
174234
}
175235

@@ -197,5 +257,11 @@ object MetaSettings:
197257
ogDescription = None,
198258
ogSiteName = None,
199259
ogLocale = None,
200-
articleAuthor = None
260+
articleAuthor = None,
261+
twitterCard = Some("summary_large_image"),
262+
twitterSite = None,
263+
twitterTitle = None,
264+
twitterDescription = None,
265+
twitterImage = None,
266+
twitterImageAlt = None
201267
)

0 commit comments

Comments
 (0)