Эх сурвалжийг харах

Přidat 'templates thml nove'

hugo 2 долоо хоног өмнө
parent
commit
ca0f5615b1
1 өөрчлөгдсөн 97 нэмэгдсэн , 0 устгасан
  1. 97 0
      templates thml nove

+ 97 - 0
templates thml nove

@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
+    <title>Kvíz: Který učitel na GJS jsi ty?</title>
+    <script src="https://cdn.tailwindcss.com"></script>
+    <script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
+    <style>
+        body { background-color: #f0f4f8; }
+        .gjs-blue { background-color: #0055a4; }
+        .card { border-radius: 15px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); }
+    </style>
+<script>
+function quizApp() {
+    return {
+        zacalqiz: false,
+        otazky: [],
+        // answers: { [otazka.id]: index vybrané možnosti }
+        // Slovník místo samostatných XxxBody proměnných – getSummary() pak
+        // nepotřebuje hardcoded seznam učitelů a funguje pro libovolná data.
+        answers: {},
+
+        async startQuiz() {
+            this.zacalqiz = !this.zacalqiz;
+            if (this.zacalqiz && !this.otazky.length) {
+                const res = await fetch('/api/questions?count=5');
+                this.otazky = await res.json();
+            }
+        },
+
+        getSummary() {
+            const scores = {};
+            for (const otazka of this.otazky) {
+                const i = this.answers[otazka.id];
+                if (i !== undefined)
+                    scores[otazka.results[i]] = (scores[otazka.results[i]] ?? 0) + 1;
+            }
+            const top = Object.entries(scores).sort((a, b) => b[1] - a[1])[0];
+            return top
+                ? { teacher: top[0], similarityPercent: Math.round(top[1] / Object.keys(this.answers).length * 100), scores }
+                : { teacher: null, similarityPercent: 0, scores };
+        }
+    }
+}
+
+document.addEventListener('alpine:init', () => {
+    window.getSummary = () => Alpine.$data(document.querySelector('[x-data]')).getSummary();
+});
+</script>
+</head>
+<body x-data="quizApp()">
+
+<template x-if="!zacalqiz">
+<div>
+    <h1>silly_qiz</h1>
+    <h3 class="rainbow">toto bude mega giga silly qiz, aby jste mohli zjistit který z učítelů gimjs jste :3</h3>
+    <a href="{{ url_for('index') }}">Začít kvíz</a>
+</div>
+</template>
+
+<template x-if="zacalqiz">
+<div class="flex flex-col items-center justify-center min-h-screen p-4" x-data="{ CurrentOtazka: 0 }">
+    <div class="card bg-white w-full max-w-lg p-6 border-t-8 border-blue-700">
+        <h1 class="text-2xl font-bold text-center text-gray-800 mb-8">Který učitel na GJS jsi ty?</h1>
+        <div class="mb-8">
+            <p class="text-lg font-semibold text-gray-700 mb-4 text-center" x-text="otazky[CurrentOtazka].question"></p>
+            <div class="space-y-3">
+                <template x-for="(option, index) in otazky[CurrentOtazka].options" :key="index">
+                    <label class="block p-3 border rounded-lg cursor-pointer hover:bg-blue-50 transition">
+                        <input type="radio"
+                            :name="'q' + otazky[CurrentOtazka].id"
+                            :value="index"
+                            :checked="answers[otazky[CurrentOtazka].id] === index"
+                            @change="answers[otazky[CurrentOtazka].id] = index"
+                            class="mr-2">
+                        <span x-text="option"></span>
+                    </label>
+                </template>
+            </div>
+        </div>
+        <div class="flex justify-between mt-10">
+            <button class="px-6 py-2 bg-gray-200 text-gray-700 rounded font-bold hover:bg-gray-300 transition"
+                @click="CurrentOtazka = Math.max(CurrentOtazka - 1, 0)"
+                :disabled="CurrentOtazka === 0">Předchozí</button>
+            <button class="px-6 py-2 gjs-blue text-white rounded font-bold hover:opacity-90 transition"
+                @click="CurrentOtazka = Math.min(CurrentOtazka + 1, otazky.length - 1)"
+                :disabled="CurrentOtazka >= otazky.length - 1">Další</button>
+        </div>
+    </div>
+</div>
+</template>
+
+<button @click="startQuiz()">Začít kvíz</button>
+</body>
+</html>