learnlytics-go/components/components.templ
2025-03-20 12:35:13 +01:00

241 lines
7.5 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package components
import (
"time"
"strconv"
"math/rand/v2"
)
func getCurrentTime() string {
loc, err := time.LoadLocation("Europe/Berlin")
if err != nil {
}
t := time.Now().In(loc)
layout := "02.01.2006 15:04"
return t.Format(layout)
}
func genRandomData(count int) []float64 {
data := make([]float64, count)
for i := 0; i < count; i++ {
data[i] = rand.NormFloat64() * 30 + 50
}
return data
}
templ base(title string) {
<!DOCTYPE html>
<html lang="en" data-theme="dark">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta
name="description"
content="Learnlytics: WebApp to manage classrooms"
/>
<meta name="google" content="notranslate"/>
<link rel="icon" href="assets/img/icon/favicon.ico" type="image/x-icon"/>
<link rel="apple-touch-icon" sizes="180x180" href="assets/img/icon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="assets/img/icon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="assets/img/icon/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="stylesheet" href="assets/css/colors.css" />
<link rel="stylesheet" href="assets/css/style.css" />
<link rel="stylesheet" href="assets/css/grid_layout.css" />
<title>Learnlytics - { title }</title>
<script src="assets/js/utils.js"></script>
<script src="assets/js/chartUtils.js"></script>
<script src="assets/js/htmx.min.js"></script>
<script src="assets/js/chart.js"></script>
<script>
Chart.defaults.color = "#E0E1DD";
Chart.defaults.backgroundColor = "#2ec4b6";
Chart.defaults.borderColor = "#00000000";
Chart.defaults.font.family = "'lato-regular', sans-serif";
Chart.defaults.plugins.align = 'center';
Chart.defaults.plugins.display = true;
Chart.defaults.plugins.padding = 10;
</script>
</head>
<body>
@navbar()
<div class="content_container">
{ children... }
</div>
</body>
</html>
}
templ footer() {
<footer>
<p>Author: @DerGrumpf</p>
</footer>
}
templ navbar() {
<div class="navbar">
<ul>
<li><img src="assets/img/learnlytics.svg" alt="Learnlytics Logo"></li>
<li><a href="/">Dashboard</a></li>
<li><a href="/">Dashboard</a></li>
<li><a href="/">Dashboard</a></li>
<li><a href="/">Dashboard</a></li>
<li><a href="/">About</a></li>
</ul>
</div>
}
templ selectList(labels []string) {
<div class="select_list">
<form>
<fieldset>
<legend>Students:</legend>
for index, label := range labels {
<label for={ strconv.Itoa(index) }>{ label }</label>
<input type="radio" id={ strconv.Itoa(index) }><br><br>
}
</fieldset>
</form>
</div>
}
templ usercard(username string) {
<div class="usercard">
<img src="assets/img/user.jpeg" alt="Avatar">
<h1>{ username }</h1>
<div class="two-split">
<div class="grid-item-left">
<p>Insitution:</p>
</div>
<div class="grid-item-left">
<p>IFN @ TU BS</p>
</div>
<div class="grid-item-left">
<p>Mail:</p>
</div>
<div class="grid-item-left">
<p>p.keier@beyerstedt-it.de</p>
</div>
<div class="grid-item-left">
<p>Created:</p>
</div>
<div class="grid-item-left">
<p>{ getCurrentTime() }</p>
</div>
</div>
</div>
}
templ NotFound() {
@base("Error") {
<div class="error">
<h1>404 - Not Found</h1>
<div class="side_by_side">
<img src="assets/img/smiley-x.svg" alt="Dead Smiley">
<img src="assets/img/failed-exam.svg" alt="Failed Exam">
</div>
<h2>This Page Didn't Pass the Exam</h2>
<p>It tried, but it didnt make the cut.</p>
<p>Better check the <a href="/">Dashboard</a> instead!</p>
</div>
}
}
templ Test() {
@base("Test") {
<div class="two-split two-row">
<div class="grid-item-center">
Test
</div>
<div class="grid-item-center">
@polarChart(
"1",
genRandomData(6),
[]string{"Klasse 8a", "Klasse 5b", "Klasse 6c", "Klasse 10d", "Englisch LK 12", "Geschickte GK 11"},
"Points scored",
"Classes",
"Classes",
"",
)
</div>
<div class="grid-item-center">
Test
</div>
<div class="grid-item-center">
@doughnutChart(
"1",
genRandomData(6),
[]string{"Klasse 8a", "Klasse 5b", "Klasse 6c", "Klasse 10d", "Englisch LK 12", "Geschickte GK 11"},
"Points scored",
"Classes",
"Classes",
"",
)
</div>
</div>
}
}
templ Dashboard(username string) {
@base("Dashboard") {
<div class="two-split three-row">
<div class="grid-item-center">
@usercard(username)
</div>
<div class="grid-item-center">
@barChart(
"2",
genRandomData(6),
[]string{"Klasse 8a", "Klasse 5b", "Klasse 6c", "Klasse 10d", "Englisch LK 12", "Geschickte GK 11"},
"Points scored",
"Classes",
"Classes",
"",
)
</div>
<div class="grid-item-center">
@selectList([]string{"Phil Keier", "Calvin Brandt", "Nova Eib"})
</div>
<div class="grid-item-center">
@barLineChart(
"1",
[]float64{31, 15, 18, 35, 20, 20, 22, 27, 24, 30},
[]string{"Tutorial 1", "Tutorial 2", "Extended Applications", "Numpy & MatPlotLib", "SciPy", "MonteCarlo", "Pandas & Seaborn", "Folium", "Statistical Test Methods", "Data Analysis"},
"Points scored",
"Lectures",
"Lectures",
"Points",
)
</div>
</div>
}
}
templ Login() {
@base("Login") {
<div class="login">
<img src="assets/img/learnlytics.svg" alt="Learnlytics Logo">
<h1>Learnlytics</h1>
<form action="/" method="POST">
<input type="text" id="username" name="username" placeholder="Username" required><br><br>
<input type="password" id="password" name="password" placeholder="Password" required><br><br>
<input type="submit" value="Login">
</form>
</div>
}
}