55 lines
1.5 KiB
Go
55 lines
1.5 KiB
Go
package components
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// RenderClock — jam digital blok, 5 baris, format HH:MM:SS.
|
|
// Teks polos (tanpa ANSI); pemanggil yang mewarnai.
|
|
func RenderClock(t time.Time) []string {
|
|
s := t.Format("15:04:05")
|
|
rows := make([]string, 5)
|
|
for _, r := range s {
|
|
glyph, ok := blockDigits[r]
|
|
if !ok {
|
|
glyph = blockDigits[' ']
|
|
}
|
|
for i := range rows {
|
|
if rows[i] != "" {
|
|
rows[i] += " "
|
|
}
|
|
rows[i] += glyph[i]
|
|
}
|
|
}
|
|
return rows
|
|
}
|
|
|
|
var blockDigits = map[rune][]string{
|
|
'0': {"███", "█ █", "█ █", "█ █", "███"},
|
|
'1': {" █ ", " █ ", " █ ", " █ ", " █ "},
|
|
'2': {"███", " █", "███", "█ ", "███"},
|
|
'3': {"███", " █", "███", " █", "███"},
|
|
'4': {"█ █", "█ █", "███", " █", " █"},
|
|
'5': {"███", "█ ", "███", " █", "███"},
|
|
'6': {"███", "█ ", "███", "█ █", "███"},
|
|
'7': {"███", " █", " █", " █", " █"},
|
|
'8': {"███", "█ █", "███", "█ █", "███"},
|
|
'9': {"███", "█ █", "███", " █", "███"},
|
|
':': {" ", "█", " ", "█", " "},
|
|
' ': {" ", " ", " ", " ", " "},
|
|
}
|
|
|
|
// CenterBlock — pusatkan tiap baris blok dalam lebar w (helper tampilan).
|
|
func CenterBlock(rows []string, w int) []string {
|
|
out := make([]string, len(rows))
|
|
for i, r := range rows {
|
|
pad := (w - len([]rune(r))) / 2
|
|
if pad < 0 {
|
|
pad = 0
|
|
}
|
|
out[i] = strings.Repeat(" ", pad) + r
|
|
}
|
|
return out
|
|
}
|