Add more OpenGraph data
authorLanius Trolling <lanius@laniustrolling.dev>
Tue, 8 Aug 2023 17:29:39 +0000 (13:29 -0400)
committerLanius Trolling <lanius@laniustrolling.dev>
Tue, 8 Aug 2023 17:29:39 +0000 (13:29 -0400)
src/main/kotlin/info/mechyrdia/data/data.kt
src/main/kotlin/info/mechyrdia/lore/parser_toc.kt
src/main/kotlin/info/mechyrdia/lore/view_og.kt
src/main/kotlin/info/mechyrdia/lore/view_tpl.kt
src/main/kotlin/info/mechyrdia/lore/views_lore.kt

index c15c4dca2be927300ef56a17a49a201f0cae39de..ee9ad5e3ce5d6b7e75a5220e84b88b7a98429415 100644 (file)
@@ -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()
+                               }
                }
        }
 }
index 89180657be11c95d92ae4984c6b82816e54ea191..ec352cdc3400f46535cf076924346f3452a6dc2e 100644 (file)
@@ -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)
                }
        }
        
index e6c745c0f81bcd22fd4085f27fe6189bf309f598..94374d7acacb1a75639283523c8c2a11bc9e29df 100644 (file)
@@ -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)
index d42afc898265e9aaac9c97366f5dbb53eeeca2da..29d1a4d0ed338f5daa78e442e58cf6eb30752c75 100644 (file)
@@ -50,8 +50,10 @@ fun ApplicationCall.page(pageTitle: String, navBar: List<NavItem>? = 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") {}
index f92dcf743a4cb281b9406f05a841773c6b9d6a23..6b132f3151eaa4321d02a2f06e48067eb064ce27 100644 (file)
@@ -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) }