V2 von Brett her
This commit is contained in:
parent
2b29093086
commit
743e57395a
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -9,4 +9,3 @@ data/
|
|||
*.swo
|
||||
|
||||
*.db
|
||||
twitter.toml
|
||||
|
|
|
@ -7,3 +7,6 @@ reference = "2019-06-06"
|
|||
|
||||
[general]
|
||||
wiki_url = "https://wiki.kif.rocks/w/index.php?title=KIF470:Arbeitskreise&action=raw"
|
||||
|
||||
[twitter]
|
||||
timeline = "https://twitter.com/kiforbiter?ref_src=twsrc%5Etfw"
|
||||
|
|
|
@ -28,18 +28,15 @@
|
|||
padding: 0 0.4rem;
|
||||
|
||||
&:nth-child(1) {
|
||||
flex-grow: 4;
|
||||
|
||||
padding-left: 0.15rem;
|
||||
padding-right: 0.15rem;
|
||||
flex-grow: 5;
|
||||
}
|
||||
|
||||
&:nth-child(2) {
|
||||
flex-grow: 3;
|
||||
flex-grow: 4;
|
||||
}
|
||||
|
||||
&:nth-child(3) {
|
||||
flex-grow: 3;
|
||||
flex-grow: 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -66,59 +63,53 @@
|
|||
}
|
||||
|
||||
.board-schedule-box {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 0.5rem;
|
||||
padding: 1rem;
|
||||
padding-bottom: 0.5rem;
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
}
|
||||
|
||||
.board-card-header {
|
||||
font-family: 'Montserrat', sans-serif;
|
||||
font-weight: 600;
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
|
||||
.board-schedule {
|
||||
position: relative;
|
||||
flex-grow: 1;
|
||||
flex-basis: 0;
|
||||
min-width: 15rem;
|
||||
|
||||
padding: 0.6rem;
|
||||
margin: 0 0.25rem 0.5rem;
|
||||
line-height: 1.3rem;
|
||||
height: 2rem;
|
||||
|
||||
&:not(:last-child) {
|
||||
border-bottom: solid 1px var(--table-border-color)
|
||||
}
|
||||
}
|
||||
|
||||
.board-schedule-bottom {
|
||||
display: block;
|
||||
padding-left: 1rem;
|
||||
padding-right: 0.5rem;
|
||||
line-height: 1rem;
|
||||
clear: both;
|
||||
.board-schedule-color {
|
||||
width: 1.2rem;
|
||||
|
||||
& > span {
|
||||
|
||||
&:first-child {
|
||||
float: left;
|
||||
}
|
||||
&:last-child {
|
||||
float: right;
|
||||
}
|
||||
span {
|
||||
display: block;
|
||||
background-color: var(--primary-color);
|
||||
width: 0.8rem;
|
||||
height: 0.8rem;
|
||||
border-radius: 100%;
|
||||
margin-top: 0.1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.board-schedule-color {
|
||||
background-color: var(--primary-color);
|
||||
position: absolute;
|
||||
top: 1.25rem;
|
||||
left: 0.6rem;
|
||||
width: 0.8rem;
|
||||
height: 0.8rem;
|
||||
border-radius: 100%;
|
||||
.board-schedule-time {
|
||||
width: 7rem;
|
||||
color: var(--text-secondary-color)
|
||||
}
|
||||
|
||||
.board-schedule-name {
|
||||
display: block;
|
||||
padding-left: 1rem;
|
||||
line-height: 1.3rem;
|
||||
}
|
||||
|
||||
font-family: 'Montserrat', sans-serif;
|
||||
font-weight: 600;
|
||||
padding-top: 0.35rem;
|
||||
padding-bottom: 0.35rem;
|
||||
.board-schedule-room {
|
||||
width: 4rem;
|
||||
text-align: right;
|
||||
color: var(--text-secondary-color)
|
||||
}
|
|
@ -97,6 +97,7 @@ a {
|
|||
display: block;
|
||||
position: relative;
|
||||
padding-left: 2.5rem;
|
||||
width: 8rem;
|
||||
|
||||
&::after {
|
||||
content: '';
|
||||
|
|
|
@ -9,9 +9,7 @@ import io.ktor.routing.Route
|
|||
import io.ktor.routing.get
|
||||
import kotlinx.css.CSSBuilder
|
||||
import kotlinx.css.Color
|
||||
import kotlinx.html.div
|
||||
import kotlinx.html.span
|
||||
import kotlinx.html.unsafe
|
||||
import kotlinx.html.*
|
||||
import java.util.*
|
||||
|
||||
fun Route.board() {
|
||||
|
@ -26,16 +24,6 @@ fun Route.board() {
|
|||
|
||||
respondMain(true, true) { theme ->
|
||||
content {
|
||||
/*
|
||||
div("board-header") {
|
||||
div {
|
||||
+"KIF 47.0"
|
||||
}
|
||||
div("board-header-date") {
|
||||
+formatDateTime(Date().time)
|
||||
}
|
||||
}
|
||||
*/
|
||||
div("board") {
|
||||
div("board-schedules") {
|
||||
attributes["data-reference"] = referenceTime.toString()
|
||||
|
@ -44,50 +32,24 @@ fun Route.board() {
|
|||
+"AKs"
|
||||
}
|
||||
|
||||
div("board-schedule-box") {
|
||||
div("board-card board-schedule-box") {
|
||||
div("board-card-header") {
|
||||
+"Running"
|
||||
}
|
||||
table {
|
||||
for ((schedule, time) in scheduleList) {
|
||||
div("board-card board-schedule") {
|
||||
attributes["data-id"] = schedule.id.toString()
|
||||
createBoardSchedule(schedule, time)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
span("board-schedule-color") {
|
||||
attributes["style"] = CSSBuilder().apply {
|
||||
val c = schedule.workGroup.track?.color
|
||||
if (c != null) {
|
||||
backgroundColor = Color(c.toString())
|
||||
}
|
||||
}.toString()
|
||||
}
|
||||
span("board-schedule-name") {
|
||||
+schedule.workGroup.name
|
||||
}
|
||||
|
||||
div("board-schedule-bottom") {
|
||||
span("board-schedule-time") {
|
||||
attributes["data-time"] = time.toString()
|
||||
attributes["data-duration"] = schedule.workGroup.length.toString()
|
||||
|
||||
|
||||
val startTime = (time % MINUTES_OF_DAY).let {
|
||||
if (it < 0) it + MINUTES_OF_DAY else it
|
||||
}
|
||||
val sm = (startTime % 60).toString().padStart(2, '0')
|
||||
val sh = (startTime / 60).toString().padStart(2, '0')
|
||||
val startTimeString = "$sh:$sm"
|
||||
|
||||
val endTime = ((time + schedule.workGroup.length) % MINUTES_OF_DAY).let {
|
||||
if (it < 0) it + MINUTES_OF_DAY else it
|
||||
}
|
||||
val em = (endTime % 60).toString().padStart(2, '0')
|
||||
val eh = (endTime / 60).toString().padStart(2, '0')
|
||||
val endTimeString = "$eh:$em"
|
||||
|
||||
+"$startTimeString - $endTimeString"
|
||||
}
|
||||
|
||||
span("board-schedule-room") {
|
||||
+schedule.room.name
|
||||
}
|
||||
}
|
||||
div("board-card board-schedule-box") {
|
||||
div("board-card-header") {
|
||||
+"Upcoming"
|
||||
}
|
||||
table {
|
||||
for ((schedule, time) in scheduleList) {
|
||||
createBoardSchedule(schedule, time)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -108,8 +70,7 @@ fun Route.board() {
|
|||
}
|
||||
div("board-card") {
|
||||
unsafe {
|
||||
raw(
|
||||
"""
|
||||
raw("""
|
||||
<a
|
||||
class="twitter-timeline"
|
||||
href="${Configuration.Twitter.timeline}"
|
||||
|
@ -119,10 +80,9 @@ fun Route.board() {
|
|||
data-cards="hidden"
|
||||
data-lang="de"
|
||||
data-dnt="true"
|
||||
>Tweets by kiforbiter</a>
|
||||
>Twitter wall</a>
|
||||
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
|
||||
""".trimIndent()
|
||||
)
|
||||
""".trimIndent())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -131,3 +91,50 @@ fun Route.board() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun TABLE.createBoardSchedule(schedule: Schedule, time: Int) {
|
||||
tr("board-schedule") {
|
||||
attributes["data-id"] = schedule.id.toString()
|
||||
|
||||
td("board-schedule-color") {
|
||||
span {
|
||||
attributes["style"] = CSSBuilder().apply {
|
||||
val c = schedule.workGroup.track?.color
|
||||
if (c != null) {
|
||||
backgroundColor = Color(c.toString())
|
||||
}
|
||||
}.toString()
|
||||
}
|
||||
}
|
||||
|
||||
td("board-schedule-time") {
|
||||
attributes["data-time"] = time.toString()
|
||||
attributes["data-duration"] = schedule.workGroup.length.toString()
|
||||
|
||||
|
||||
val startTime = (time % MINUTES_OF_DAY).let {
|
||||
if (it < 0) it + MINUTES_OF_DAY else it
|
||||
}
|
||||
val sm = (startTime % 60).toString().padStart(2, '0')
|
||||
val sh = (startTime / 60).toString().padStart(2, '0')
|
||||
val startTimeString = "$sh:$sm"
|
||||
|
||||
val endTime = ((time + schedule.workGroup.length) % MINUTES_OF_DAY).let {
|
||||
if (it < 0) it + MINUTES_OF_DAY else it
|
||||
}
|
||||
val em = (endTime % 60).toString().padStart(2, '0')
|
||||
val eh = (endTime / 60).toString().padStart(2, '0')
|
||||
val endTimeString = "$eh:$em"
|
||||
|
||||
+"$startTimeString - $endTimeString"
|
||||
}
|
||||
|
||||
td("board-schedule-name") {
|
||||
+schedule.workGroup.name
|
||||
}
|
||||
|
||||
td("board-schedule-room") {
|
||||
+schedule.room.name
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -105,7 +105,7 @@ fun Route.overview() {
|
|||
data-cards="hidden"
|
||||
data-lang="de"
|
||||
data-dnt="true"
|
||||
>Tweets by kiforbiter</a>
|
||||
>Twitter wall</a>
|
||||
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
|
||||
""".trimIndent())
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ uploads = "data/uploads"
|
|||
database = "data/portal.db"
|
||||
|
||||
[schedule]
|
||||
reference = "2019-03-27"
|
||||
reference = "1970-01-01"
|
||||
|
||||
[security]
|
||||
session_name = "SESSION"
|
||||
|
@ -20,5 +20,4 @@ allowed_upload_extensions = "png, jpg, jpeg"
|
|||
wiki_url = ""
|
||||
|
||||
[twitter]
|
||||
username = ""
|
||||
password = ""
|
||||
timeline = ""
|
||||
|
|
Loading…
Reference in a new issue