From de17138c4b6a056aaba3ec584e126ba10d2693e1 Mon Sep 17 00:00:00 2001 From: Lanius Trolling Date: Tue, 8 Aug 2023 13:29:39 -0400 Subject: [PATCH] Add more OpenGraph data --- src/main/kotlin/info/mechyrdia/data/data.kt | 5 ++++- src/main/kotlin/info/mechyrdia/lore/parser_toc.kt | 8 +++----- src/main/kotlin/info/mechyrdia/lore/view_og.kt | 7 ++++--- src/main/kotlin/info/mechyrdia/lore/view_tpl.kt | 4 +++- src/main/kotlin/info/mechyrdia/lore/views_lore.kt | 15 +++++++++++++-- 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/main/kotlin/info/mechyrdia/data/data.kt b/src/main/kotlin/info/mechyrdia/data/data.kt index c15c4dc..ee9ad5e 100644 --- a/src/main/kotlin/info/mechyrdia/data/data.kt +++ b/src/main/kotlin/info/mechyrdia/data/data.kt @@ -7,6 +7,7 @@ import com.mongodb.client.model.ReplaceOptions import info.mechyrdia.auth.SessionStorageDoc import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.serialization.KSerializer import kotlinx.serialization.SerialName @@ -90,7 +91,9 @@ object ConnectionHolder { runBlocking { for (holder in TableHolder.entries) - holder.initialize() + launch { + holder.initialize() + } } } } diff --git a/src/main/kotlin/info/mechyrdia/lore/parser_toc.kt b/src/main/kotlin/info/mechyrdia/lore/parser_toc.kt index 8918065..ec352cd 100644 --- a/src/main/kotlin/info/mechyrdia/lore/parser_toc.kt +++ b/src/main/kotlin/info/mechyrdia/lore/parser_toc.kt @@ -39,11 +39,9 @@ class TableOfContentsBuilder { fun toPageTitle() = title ?: MISSING_TITLE - fun toOpenGraph() = title?.let { title -> - description?.let { desc -> - image?.let { image -> - OpenGraphData(title, desc, image) - } + fun toOpenGraph() = description?.let { desc -> + image?.let { image -> + OpenGraphData(desc, image) } } diff --git a/src/main/kotlin/info/mechyrdia/lore/view_og.kt b/src/main/kotlin/info/mechyrdia/lore/view_og.kt index e6c745c..94374d7 100644 --- a/src/main/kotlin/info/mechyrdia/lore/view_og.kt +++ b/src/main/kotlin/info/mechyrdia/lore/view_og.kt @@ -8,7 +8,6 @@ import kotlinx.serialization.Serializable @Serializable data class OpenGraphData( - val title: String, val desc: String, val image: String ) @@ -21,8 +20,10 @@ fun HEAD.ogProperty(property: String, content: String) { } context(ApplicationCall) -fun HEAD.renderOgData(data: OpenGraphData) { - ogProperty("title", data.title) +fun HEAD.renderOgData(title: String, data: OpenGraphData) { + meta(name = "description", content = data.desc) + + ogProperty("title", title) ogProperty("type", "website") ogProperty("description", data.desc) ogProperty("image", data.image) diff --git a/src/main/kotlin/info/mechyrdia/lore/view_tpl.kt b/src/main/kotlin/info/mechyrdia/lore/view_tpl.kt index d42afc8..29d1a4d 100644 --- a/src/main/kotlin/info/mechyrdia/lore/view_tpl.kt +++ b/src/main/kotlin/info/mechyrdia/lore/view_tpl.kt @@ -50,8 +50,10 @@ fun ApplicationCall.page(pageTitle: String, navBar: List? = null, sideb meta(charset = "utf-8") meta(name = "viewport", content = "width=device-width, initial-scale=1.0") + meta(name = "theme-color", content = "#FFCC33") + ogData?.let { data -> - renderOgData(data) + renderOgData(pageTitle, data) } script(src = "/static/obj-viewer/three.js") {} diff --git a/src/main/kotlin/info/mechyrdia/lore/views_lore.kt b/src/main/kotlin/info/mechyrdia/lore/views_lore.kt index f92dcf7..6b132f3 100644 --- a/src/main/kotlin/info/mechyrdia/lore/views_lore.kt +++ b/src/main/kotlin/info/mechyrdia/lore/views_lore.kt @@ -9,16 +9,27 @@ import kotlinx.coroutines.async import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.toList import kotlinx.html.* +import kotlinx.serialization.Serializable import java.io.File +@Serializable +data class IntroMetaData( + val title: String, + val desc: String, + val image: String +) { + val ogData: OpenGraphData + get() = OpenGraphData(desc, image) +} + suspend fun ApplicationCall.loreIntroPage(): HTML.() -> Unit { val metaJsonFile = File(Configuration.CurrentConfiguration.articleDir).parentFile.combineSafe("introMeta.json") - val metaData = JsonFileCodec.decodeFromString(OpenGraphData.serializer(), metaJsonFile.readText()) + val metaData = JsonFileCodec.decodeFromString(IntroMetaData.serializer(), metaJsonFile.readText()) val htmlFile = File(Configuration.CurrentConfiguration.articleDir).parentFile.combineSafe("intro.html") val fileHtml = htmlFile.readText() - return page(metaData.title, standardNavBar(), null, metaData) { + return page(metaData.title, standardNavBar(), null, metaData.ogData) { section { a { id = "page-top" } unsafe { raw(fileHtml) } -- 2.25.1