ソースを参照

Merge branch 'master' into sada_otazek

Adam Dominec 5 日 前
コミット
79fdfd07bf
6 ファイル変更105 行追加153 行削除
  1. 0 35
      app/__init__.py
  2. 28 22
      app/app.py
  3. 0 7
      app/home.py
  4. 77 24
      app/templates/home.html
  5. 0 15
      b end.py
  6. 0 50
      basen.txt

+ 0 - 35
app/__init__.py

@@ -1,35 +0,0 @@
-import os
-
-from flask import Flask
-
-
-def create_app(test_config=None):
-    # create and configure the app
-    app = Flask(__name__, instance_relative_config=True)
-    app.config.from_mapping(
-        SECRET_KEY="dev",
-        DATABASE=os.path.join(app.instance_path, "flaskr.sqlite"),
-    )
-
-    if test_config is None:
-        # load the instance config, if it exists, when not testing
-        app.config.from_pyfile("config.py", silent=True)
-    else:
-        # load the test config if passed in
-        app.config.from_mapping(test_config)
-
-    # ensure the instance folder exists
-    os.makedirs(app.instance_path, exist_ok=True)
-
-    # a simple page that says hello
-    @app.route("/health")
-    def health():
-        return "Health check passed!"
-
-    from . import home
-    app.register_blueprint(home.bp, url_prefix="/")
-
-    from . import questions
-    app.register_blueprint(questions.bp, url_prefix="/api/questions")
-
-    return app

+ 28 - 22
app/questions.py → app/app.py

@@ -1,42 +1,48 @@
-import os
 import json
+import os
 import random
-from flask import Blueprint, request, jsonify
-bp = Blueprint("questions", __name__)
-
+from flask import Flask, jsonify, render_template, request
 
-@bp.route("/")
 BASE_DIR = os.path.dirname(os.path.abspath(__file__))
 SCHEMA_PATH = os.path.normpath(os.path.join(BASE_DIR, '..', 'schema.json'))
+print(SCHEMA_PATH)
+
+app = Flask(__name__)
+
+@app.route("/")
+def index():
+    return render_template("home.html")
+
+@app.route("/health")
+def health():
+    return "Health check passed!"
 
 def load_questions():
-    try:
-        with open(SCHEMA_PATH, 'r', encoding='utf-8') as file:
-            return json.load(file)
-    
+    with open(SCHEMA_PATH, 'r', encoding='utf-8') as file:
+        return json.load(file)
+
+@app.route('/api/questions', methods=['GET'])
+def get_questions():
+    count_param = request.args.get('count', default=3)
     try:
         count = int(count_param)
     except ValueError:
         return jsonify({"error": "Parametr 'count' musí být platné číslo."}), 400
+    if count < 0:
+        return jsonify({"error": "Počet otázek nemůže být záporný."}), 400
 
-
-    all_questions = load_questions()
-    
-    if not all_questions:
+    try:
+        all_questions = load_questions()
+    except Exception as e:
+        print(e)
         return jsonify({"error": "Soubor schema.json nebyl nalezen nebo je prázdný."}), 500
 
-    if count < 0:
-        return jsonify({"error": "Počet otázek nemůže být záporný."}), 400
-        
     if count > len(all_questions):
         count = len(all_questions)
 
     random_questions = random.sample(all_questions, count)
+    return random_questions
 
-    return jsonify(random_questions) except FileNotFoundError:
-        return []
 
-@questions_bp.route('/api/questions', methods=['GET'])
-def get_questions():
-    count_param = request.args.get('count', default=3)
-   
+if __name__ == "__main__":
+    app.run(port=5000)

+ 0 - 7
app/home.py

@@ -1,7 +0,0 @@
-from flask import Blueprint, render_template
-
-bp = Blueprint("home", __name__)
-
-@bp.route("/")
-def index():
-    return render_template("home.html")

+ 77 - 24
app/templates/home.html

@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html lang="en"  x-data="{zacalqiz: false}">
+<html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -12,20 +12,74 @@
         .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: [],
+ 
+        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();
+            }
+        }
+    }
+}
+</script>
 </head>
-<body>
 
+<body x-data="quizApp()">
 <template x-if="!zacalqiz">
 <div>
     <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('questions.index') }}">Začít kvíz</a>
+        <a href="{{ url_for('index') }}">Začít kvíz</a>
     </div>
 </div>
 </template>
 <template x-if="zacalqiz">
-<div  class="flex flex-col items-center justify-center min-h-screen p-4">
+<div class="flex flex-col items-center justify-center min-h-screen p-4" x-data="{
+  skoncilqiz: false,
+  CurrentOtazka: 0,
+  SvobodaBody: 0,
+  SvobodovaBody: 0,
+  ReditelkBody: 0,
+  PasterikovaBody: 0,
+  HelgertBody: 0,
+  DominecBody: 0,
+  DudilieuxBody: 0,
+  HlavacekBody: 0,
+  HolasovaBody: 0,
+  BesinBody: 0,
+  JilekBody: 0,
+  JungovaBody: 0,
+  HorovaBody: 0,
+  KarnoltovaBody: 0,
+  ValdaBody: 0,
+  KozubekBody: 0,
+  HrabecBody: 0,
+  KubiskovaBody: 0,
+  MarekBody: 0,
+  LímanováBody: 0,
+  NajemnikBody: 0,
+  OrrBody: 0,
+  AparicioBody: 0,
+  HornicekBody: 0,
+  SibaBody: 0,
+  ToulecBody: 0,
+  UlrichovaBody: 0,
+  ZabranskaBody: 0,
+  ZalskaBody: 0,
+  SmidBody: 0,
+  LafreniereBody: 0,
+  StejskalBody: 0,
+  EkrtovaBody: 0,
+  BurdenovaBody: 0,
+  VavraBody: 0
+}">
 
     <div class="card bg-white w-full max-w-lg p-6 border-t-8 border-blue-700">
         
@@ -34,40 +88,39 @@
         </h1>
 
         <div class="mb-8">
-            <p class="text-lg font-semibold text-gray-700 mb-4 text-center">
-                Lorem ipsum dolor sit amet, consectetur?
-            </p>
+            <p class="text-lg font-semibold text-gray-700 mb-4 text-center" x-text="otazky[CurrentOtazka]['question']"></p>
 
             <div class="space-y-3">
-                <label class="block p-3 border rounded-lg cursor-pointer hover:bg-blue-50 transition">
-                    <input type="radio" name="q1" class="mr-2"> Lorem ipsum dolor
-                </label>
-                <label class="block p-3 border rounded-lg cursor-pointer hover:bg-blue-50 transition">
-                    <input type="radio" name="q1" class="mr-2"> Sit amet consectetur
-                </label>
-                <label class="block p-3 border rounded-lg cursor-pointer hover:bg-blue-50 transition">
-                    <input type="radio" name="q1" class="mr-2"> Adipiscing elit
-                </label>
-                <label class="block p-3 border rounded-lg cursor-pointer hover:bg-blue-50 transition">
-                    <input type="radio" name="q1" class="mr-2"> Sed do eiusmod
-                </label>
+                <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="q1"
+                            class="mr-2"
+                            :value="option"
+                        >
+                        <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">
+            <button class="px-6 py-2 bg-gray-200 text-gray-700 rounded font-bold hover:bg-gray-300 transition" x-on:click="CurrentOtazka = Math.max(CurrentOtazka - 1, 0)" x-bind:disabled="CurrentOtazka === 0">
                 Předchozí
             </button>
-            <button class="px-6 py-2 gjs-blue text-white rounded font-bold hover:opacity-90 transition">
+            <button class="px-6 py-2 gjs-blue text-white rounded font-bold hover:opacity-90 transition" x-on:click="CurrentOtazka = Math.min(CurrentOtazka + 1, otazky.length - 1)" x-bind:disabled="CurrentOtazka >= otazky.length - 1">
                 Další
             </button>
         </div>
 
     </div>
+
 </div>
 </template>
-    <button @click="zacalqiz = ! zacalqiz">Toggle Content</button>
-
+    <button @click="startQuiz()">Začít kvíz</button>
 </body>
 
-</html>
+</html>
+
+

+ 0 - 15
b end.py

@@ -1,15 +0,0 @@
-from flask import Flask, render_template
-
-app = Flask(__name__)
-
-@app.route("/")
-def index():
-    return render_template("home.html")
-
-@app.route("/health")
-def health():
-    return "Health check passed!"
-
-@app.route("/api/questions/")
-def questions_index():
-    return "Hello, World!"

+ 0 - 50
basen.txt

@@ -1,50 +0,0 @@
-Na chodbách šustí mokré bundy,
-v oknech se probouzí májový déšť,
-a ospalé hlasy v druhé rundě
-počítají minuty před testem z češt’.
-Křída se drolí, zvonek zvoní,
-v lavicích káva z termosky hřeje,
-pátek už v očích tiše voní
-a celé gymnázium lehce se směje.
-
-Mám se snad smát špatnému vtipu?
-Ten mozek z drátu a mikročipů
-Neví nic o českých básnických strukturách.
-A co má za slovo vůbec být "češť?"
-A dav jen s úsměvem volá "Nešť"!
-Já přiznám, že na mě padá strach.
-Ne, že ej-áj básnické střevo má
-Že lidská hloupost už nepozná 
-Rozdíl
-
-mám rád tuleně
-proč jsme je nedomestikovali?
-poezie je obtížná
-tuleň
-
-Pak velká přestávka rozlije hluk,
-housky, smích a kroky v běhu,
-v každém patře se chvěje vzduch
-tou zvláštní páteční útěchou.
-Za okny tramvaj líně cinkne,
-den se už naklání k volnosti,
-a gymnázium na chvíli ztichne
-v sladké předtuše budoucnosti.
-
-
-Recept na divokou kachnu
-
-Ingredience
-1 kg kachních prsou
-0,25 dcl červeného vína
-0,25 dcl vývaru
-divoké koření (celý pepř, nové koření, bobkový list) ve vajíčku na čaj
-olivový olej
-2 lžíce švestkového čatní
-trochu cukru
-sůl
-pepřová marináda
-
-Postup přípravy
-Nakrájíme cibuli a slaninu na kostičky, kachní prsa na nudličky. Slaninu rozpustíme na pánvi a zpěníme na ní cibuli. Kachní prsa osolíme, posypeme je pepřovou marinádou a hladkou moukou, vše promícháme a orestujeme na olivovém oleji. K masu přidáme k cibuli se slaninou, zalijeme červeným vínem a vývarem, přidáme divoké koření ve vajíčku, šťávu a dužinu z pomeranče a švestkové čatní. Vaříme do měkka.
-Podáváme s těstovinami, rýží nebo vařenými brambory.