Add config

This commit is contained in:
Lars Westermann 2019-05-29 12:44:33 +02:00
parent 32596228fe
commit 997f374fe4
Signed by: lars.westermann
GPG key ID: 9D417FA5BB9D5E1D
18 changed files with 287 additions and 120 deletions

View file

@ -3,11 +3,28 @@ package de.kif.frontend.views.overview
import de.kif.frontend.iterator
import de.kif.frontend.launch
import de.kif.frontend.repository.PostRepository
import de.westermann.kobserve.event.subscribe
import org.w3c.dom.HTMLElement
import org.w3c.dom.HTMLTextAreaElement
import org.w3c.dom.events.EventListener
import org.w3c.dom.get
import kotlin.browser.document
import kotlin.dom.clear
private fun sortOverviewPosts(container: HTMLElement) {
val list = container.children.iterator().asSequence().toList()
val sorted = list.sortedWith(compareBy(
{ if (it.dataset["pinned"]?.toBoolean() == true) 0 else 1 },
{ -(it.dataset["id"]?.toLong() ?: -1) }
))
container.clear()
for (element in sorted) {
container.appendChild(element)
}
}
fun initOverviewMain() {
val main = document.getElementsByClassName("overview-main")[0] as HTMLElement
@ -15,24 +32,13 @@ fun initOverviewMain() {
PostRepository.onCreate {
val post = PostView.create(it)
post.classList += "overview-post"
main.appendChild(post.html)
val first = main.firstElementChild as? HTMLElement
sortOverviewPosts(main)
}
if (first == null) {
main.appendChild(post.html)
return@onCreate
}
if (first.classList.contains("post")) {
main.insertBefore(post.html, first)
return@onCreate
}
val next = first.nextElementSibling as? HTMLElement
if (next == null) {
main.appendChild(post.html)
} else {
main.insertBefore(post.html, next)
}
subscribe<PostChangeEvent> {
sortOverviewPosts(main)
}
}

View file

@ -1,8 +1,8 @@
package de.kif.frontend.views.overview
import de.kif.common.model.Post
import de.kif.frontend.launch
import de.kif.frontend.repository.PostRepository
import de.westermann.kobserve.event.emit
import de.westermann.kwebview.View
import de.westermann.kwebview.components.Link
import de.westermann.kwebview.createHtmlView
@ -16,7 +16,13 @@ class PostView(
view: HTMLElement
) : View(view) {
private var postId = dataset["id"]?.toLongOrNull() ?: -1
val postId = dataset["id"]?.toLongOrNull() ?: -1
var pinned: Boolean
get() = dataset["pinned"] == "true"
set(value) {
dataset["pinned"] = value.toString()
}
private val nameView: Link
private val contentView: View
@ -27,8 +33,11 @@ class PostView(
nameView.text = p.name
nameView.target = "/p/${p.url}"
pinned = p.pinned
contentView.html.innerHTML = PostRepository.htmlByUrl(p.url)
emit(PostChangeEvent(postId))
}
}
@ -67,3 +76,5 @@ class PostView(
}
}
}
data class PostChangeEvent(val id: Long)

View file

@ -967,12 +967,6 @@ form {
min-width: 20%;
}
.overview-shortcuts {
a {
display: block;
}
}
.overview-twitter {
height: 20rem;
background-color: #b3e6f9;