import kotlinx.html.li
import kotlinx.html.ol
import kotlinx.html.section
-import kotlinx.html.span
import kotlinx.html.style
import kotlinx.html.title
import kotlinx.html.ul
+import kotlinx.html.unsafe
import net.pterodactylus.rhynodge.Reaction
import net.pterodactylus.rhynodge.states.AbstractState
import java.time.LocalDateTime
head {
title { +"Savoy Programme" }
style("text/css") {
- +"html { font-family: Roboto; }"
- +"section.new-movies > .label { font-family: Impact; background-color: black; padding: 0.5ex; font-size: 200%; color: #ffffee; font-weight: bold; }"
- +"section.new-movies ul { padding: 0; margin: 0; }"
- +"section.new-movies li.movie { list-style: none; width: 250px; height: 353px; display: inline-block; position: relative; margin: 1ex 1ex 1ex 0ex; }"
- +"section.new-movies li.movie img { width: 100%; height: 100%; display: block; position: absolute; z-index: -1; }"
- +"section.new-movies li.movie .text { color: white; text-shadow: 2px 2px black; font-weight: bold; font-size: 150%; display: flex; flex-direction: column; justify-content: end; width: 100%; height: 100%; }"
- +"section.new-movies li.movie .text .name { padding: 1ex; font-size: 120%; }"
+ unsafe {
+ +"html { font-family: 'Recursive Sans Linear Static', Roboto, serif; }"
+ +"section.new-movies > .label { font-family: Impact, sans-serif; background-color: black; padding: 0.5ex; font-size: 200%; color: #ffffee; font-weight: bold; position: sticky; top: 0px; }"
+ +"section.new-movies ul { padding: 0; margin: 0; }"
+ +"section.new-movies li.movie { list-style: none; display: grid; margin: 1ex 1ex 1ex 0ex; grid-template-columns: 250px auto; }"
+ +"section.new-movies li.movie img { grid-area: 1/1/2/2; height: 353px; }"
+ +"section.new-movies li.movie .text { color: white; text-shadow: 2px 2px black; font-weight: bold; font-size: 150%; display: flex; flex-direction: column; justify-content: end; grid-area: 1/1/2/2; height: 353px; }"
+ +"section.new-movies li.movie .text .name { padding: 1ex; font-size: 120%; }"
+ +"section.new-movies li.movie .description { padding: 1ex; }"
- +"section.daily-programmes ol { padding: 0; }"
- +"section.daily-programmes li { list-style: none; }"
- +"section.daily-programmes li.day > .label { font-family: Impact; background-color: black; padding: 0.5ex; font-size: 200%; color: #ffffee; font-weight: bold; }"
- +"section.daily-programmes li .performances { display: flex; border-top: 1ex; }"
- +"section.daily-programmes li.performance { width: 250px; height: 353px; display: inline-block; margin: 1ex 1ex 1ex 0ex; position: relative; }"
- +"section.daily-programmes li.performance a { width: 100%; height: 100%; display: block; text-decoration: none; }"
- +"section.daily-programmes li.performance a img { width: 100%; height: 100%; display: block; position: absolute; z-index: -1; }"
- +"section.daily-programmes li.performance a .text { color: white; text-shadow: 2px 2px black; font-weight: bold; font-size: 150%; width: 100%; height: 100%; }"
- +"section.daily-programmes li.performance a .text .time { padding: 1ex; text-align: right; }"
- +"section.daily-programmes li.performance a .text .type { padding: 0ex 1ex 1ex 1ex; text-align: right; }"
- +"section.daily-programmes li.performance a .text .name { padding: 1ex; font-size: 120%; bottom: 0px; position: absolute; }"
+ +"section.daily-programmes ol { padding: 0; }"
+ +"section.daily-programmes li { list-style: none; }"
+ +"section.daily-programmes li.day > .label { font-family: Impact, sans-serif; background-color: black; padding: 0.5ex; font-size: 200%; color: #ffffee; font-weight: bold; position: sticky; top: 0px; }"
+ +"section.daily-programmes li .performances { border-top: 1ex; }"
+ +"section.daily-programmes li.performance { display: inline-block; margin: 1ex 1ex 1ex 0ex; }"
+ +"section.daily-programmes li.performance a { text-decoration: none; color: white; text-shadow: 2px 2px black; font-weight: bold; font-size: 150%; display: grid; width: 250px; height: 353px; grid-template-rows: 0fr 0fr 1fr 0fr; grid-template-columns: 250px; }"
+ +"section.daily-programmes li.performance a img { grid-area: 1/1/5/1; z-index: -1; width: 100%; height: 100%; }"
+ +"section.daily-programmes li.performance a .time { grid-area: 1/1/2/1; padding: 1ex 1ex 0ex 1ex; text-align: right; }"
+ +"section.daily-programmes li.performance a .type { grid-area: 2/1/3/1; padding: 0ex 1ex 1ex 1ex; text-align: right; }"
+ +"section.daily-programmes li.performance a .name { grid-area: 4/1/5/1; padding: 1ex; font-size: 120%; }"
+ }
}
}
body {
+(movie.name)
}
}
+ div("description") {
+ +movie.description
+ }
}
}
}
section("daily-programmes") {
ol("days") {
- movies.flatMap { it.performances.map(Performance::getTime).map(LocalDateTime::toLocalDate) }.distinct().sorted().forEach { date ->
+ movies.flatMap { it.performances.map(Performance::time).map(LocalDateTime::toLocalDate) }.distinct().sorted().forEach { date ->
li("day") {
attributes += "data-date" to "%tY-%<tm-%<td".format(date)
div("label") {
li("performance") {
a(href = performance.link) {
img(src = movie.imageUrl)
- div("text") {
- div("time") {
- +("%tH:%<tM".format(performance.time))
- }
- div("type") {
- +performance.type
- }
- div("name") {
- +(movie.name)
- }
+ div("time") {
+ +("%tH:%<tM".format(performance.time))
+ }
+ div("type") {
+ +performance.type
+ }
+ div("name") {
+ +(movie.name)
}
}
}
override fun triggered() = newMovies.isNotEmpty() || triggered
private val earliestMovie = movies.minByOrNull { it.earliestPerformance ?: LocalDateTime.MAX }
- private val Movie.earliestPerformance: LocalDateTime? get() = performances.minOfOrNull(Performance::getTime)
+ private val Movie.earliestPerformance: LocalDateTime? get() = performances.minOfOrNull(Performance::time)
}