Add announcement

This commit is contained in:
Lars Westermann 2019-06-11 13:50:11 +02:00
parent 7ac2e1c208
commit 594ac544dd
Signed by: lars.westermann
GPG key ID: 9D417FA5BB9D5E1D
18 changed files with 285 additions and 8 deletions

View file

@ -95,7 +95,8 @@ class WebSocketClient {
TrackRepository.handler,
UserRepository.handler,
WorkGroupRepository.handler,
PostRepository.handler
PostRepository.handler,
AnnouncementRepository.handler
)
init {

View file

@ -2,6 +2,7 @@ package de.kif.frontend
import de.kif.frontend.views.board.initBoard
import de.kif.frontend.views.calendar.initCalendar
import de.kif.frontend.views.initAnnouncement
import de.kif.frontend.views.table.initTableLayout
import de.kif.frontend.views.initWorkGroupConstraints
import de.kif.frontend.views.overview.initOverviewMain
@ -34,4 +35,7 @@ fun main() = init {
if (document.getElementsByClassName("board").length > 0) {
initBoard()
}
if (document.getElementsByClassName("announcement").length > 0) {
initAnnouncement()
}
}

View file

@ -0,0 +1,40 @@
package de.kif.frontend.repository
import de.kif.common.Message
import de.kif.common.Repository
import de.kif.common.RepositoryType
import de.kif.common.Serialization
import de.kif.common.model.Room
import de.kif.frontend.MessageHandler
import de.westermann.kobserve.event.EventHandler
import kotlinx.serialization.DynamicObjectParser
import kotlinx.serialization.list
import kotlinx.serialization.serializer
object AnnouncementRepository {
private val prefix = js("prefix")
val onUpdate = EventHandler<Unit>()
private val parser = DynamicObjectParser()
suspend fun getAnnouncement(): String {
val json = repositoryGet("$prefix/api/announcement") ?: return ""
return parser.parse(json, String.serializer())
}
suspend fun setAnnouncement(value: String){
return repositoryPost("$prefix/api/announcement", Serialization.stringify(String.serializer(), value))
?: throw IllegalStateException("Cannot set announcement!")
}
val handler = object : MessageHandler(RepositoryType.ROOM) {
override fun onCreate(id: Long) {}
override fun onUpdate(id: Long) = onUpdate.emit(Unit)
override fun onDelete(id: Long) {}
}
}

View file

@ -0,0 +1,21 @@
package de.kif.frontend.views
import de.kif.frontend.launch
import de.kif.frontend.repository.AnnouncementRepository
import org.w3c.dom.HTMLElement
import org.w3c.dom.get
import kotlin.browser.document
fun initAnnouncement() {
val announcement = document.getElementsByClassName("announcement")[0] as? HTMLElement ?: return
val span = announcement.children[0] as? HTMLElement ?: return
AnnouncementRepository.onUpdate {
launch {
val text = AnnouncementRepository.getAnnouncement()
announcement.classList.toggle("announcement-blank", text.isBlank())
span.textContent = text
}
}
}

View file

@ -205,3 +205,10 @@
margin-top: -1px !important;
}
}
.board-announcement {
position: fixed;
bottom: 3rem;
z-index: 10;
margin-bottom: 0 !important;
}

View file

@ -181,4 +181,21 @@ body.offline {
.offline-banner {
display: block;
}
}
}
.announcement {
height: 3rem;
line-height: 3rem;
text-align: center;
width: 100%;
font-size: 1.2rem;
background-color: var(--primary-color);
color: var(--primary-text-color);
box-shadow: 0 1px 4px var(--shadow-color);
margin-bottom: 1rem;
display: block;
&.announcement-blank {
display: none;
}
}