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
runBlocking {
for (holder in TableHolder.entries)
- holder.initialize()
+ launch {
+ holder.initialize()
+ }
}
}
}
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)
}
}
@Serializable
data class OpenGraphData(
- val title: String,
val desc: String,
val image: 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)
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") {}
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) }