(defwidget traveldings [] (revealer :class "traveldings" :transition "crossfade" :reveal { traveldings_data != "null" } (traveldingsBarWidget) ) ) (defwidget traveldingsBarWidget [] (overlay (box :width 640 (label :halign "start" :text "${traveldings_data.line} -> ${strlength(traveldings_data.arrival_station) > 24 ? "${substring(traveldings_data.arrival_station, 0, 24)}…" : traveldings_data.arrival_station}${traveldings_data.arrival_platform_data_available ? " (Gl. ${traveldings_data.arrival_platform_real})" : ""}" ) (label :halign "end" :text { traveldings_data.time_left >= 3600 ? formattime(traveldings_data.time_left, "noch %-Hh %-Mmin", "Etc/UTC") : formattime(traveldings_data.time_left, "noch %-Mmin", "Etc/UTC") } ) ) (box (progress :class { traveldings_data.live ? "traveldings_live" : "traveldings_disconnected" } :value {traveldings_data.progress * 100} :orientation "horizontal" ) ) ) ) (deflisten traveldings_data :initial "null" "traveldings current" )