First commit
Browse files- app.py +1 -1
- static/script.js +8 -4
- static/style.css +26 -0
- templates/client.html +8 -2
- templates/host.html +5 -2
app.py
CHANGED
|
@@ -10,7 +10,7 @@ app.config['SECRET_KEY'] = 'your_secret_key'
|
|
| 10 |
socketio = SocketIO(app)
|
| 11 |
|
| 12 |
questions = [
|
| 13 |
-
{"question": "What is the capital of France?", "options": ["
|
| 14 |
{"question": "What is the largest planet?", "options": ["Earth", "Mars", "Jupiter", "Saturn"], "correct": "Jupiter"}
|
| 15 |
]
|
| 16 |
initial_questions = questions.copy() # Keep a copy of the original questions to reset later
|
|
|
|
| 10 |
socketio = SocketIO(app)
|
| 11 |
|
| 12 |
questions = [
|
| 13 |
+
{"question": "What is the capital of France?", "options": ["Berlin", "Paris", "Rome", "Madrid"], "correct": "Paris"},
|
| 14 |
{"question": "What is the largest planet?", "options": ["Earth", "Mars", "Jupiter", "Saturn"], "correct": "Jupiter"}
|
| 15 |
]
|
| 16 |
initial_questions = questions.copy() # Keep a copy of the original questions to reset later
|
static/script.js
CHANGED
|
@@ -19,14 +19,18 @@ socket.on('update_participants', (data) => {
|
|
| 19 |
socket.on('new_question', (data) => {
|
| 20 |
document.getElementById('waiting-message').style.display = 'none';
|
| 21 |
document.getElementById('question-text').innerText = data.question;
|
| 22 |
-
const
|
| 23 |
-
|
|
|
|
|
|
|
| 24 |
).join('');
|
| 25 |
document.getElementById('options').innerHTML = options;
|
| 26 |
});
|
| 27 |
|
| 28 |
-
function
|
| 29 |
-
|
|
|
|
|
|
|
| 30 |
}
|
| 31 |
|
| 32 |
function checkAnswers() {
|
|
|
|
| 19 |
socket.on('new_question', (data) => {
|
| 20 |
document.getElementById('waiting-message').style.display = 'none';
|
| 21 |
document.getElementById('question-text').innerText = data.question;
|
| 22 |
+
const letters = ['a', 'b', 'c', 'd'];
|
| 23 |
+
const options = data.options.map((opt, index) =>
|
| 24 |
+
`<input type="radio" id="${letters[index]}" name="answer" value="${opt}">
|
| 25 |
+
<label for="${letters[index]}">${letters[index]}) ${opt}</label><br>`
|
| 26 |
).join('');
|
| 27 |
document.getElementById('options').innerHTML = options;
|
| 28 |
});
|
| 29 |
|
| 30 |
+
function submitForm(event) {
|
| 31 |
+
event.preventDefault();
|
| 32 |
+
const answer = document.querySelector('input[name="answer"]:checked').value;
|
| 33 |
+
socket.emit('submit_answer', { answer });
|
| 34 |
}
|
| 35 |
|
| 36 |
function checkAnswers() {
|
static/style.css
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
body {
|
| 2 |
+
background-color: #f4f4f4;
|
| 3 |
+
font-family: Arial, sans-serif;
|
| 4 |
+
}
|
| 5 |
+
|
| 6 |
+
.container {
|
| 7 |
+
max-width: 800px;
|
| 8 |
+
margin: 0 auto;
|
| 9 |
+
background-color: #fff;
|
| 10 |
+
padding: 20px;
|
| 11 |
+
border-radius: 8px;
|
| 12 |
+
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
h2, p {
|
| 16 |
+
font-size: 18px;
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
input[type="radio"] {
|
| 20 |
+
margin-right: 10px;
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
input[type="submit"] {
|
| 24 |
+
display: block;
|
| 25 |
+
margin-top: 20px;
|
| 26 |
+
}
|
templates/client.html
CHANGED
|
@@ -5,6 +5,7 @@
|
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
<title>Quiz Client</title>
|
| 7 |
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
|
|
|
| 8 |
</head>
|
| 9 |
<body>
|
| 10 |
<div class="container">
|
|
@@ -14,8 +15,13 @@
|
|
| 14 |
<div id="quiz-content" style="display: none;">
|
| 15 |
<h3>Logged in as: <span id="logged-user"></span></h3>
|
| 16 |
<h3 id="waiting-message" style="display: none;">Waiting for the Host...</h3>
|
| 17 |
-
<
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
<div id="results" class="mt-4"></div>
|
| 20 |
</div>
|
| 21 |
<div id="final-results" style="display: none;" class="mt-4">
|
|
|
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
<title>Quiz Client</title>
|
| 7 |
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
| 8 |
+
<link rel="stylesheet" href="/static/style.css">
|
| 9 |
</head>
|
| 10 |
<body>
|
| 11 |
<div class="container">
|
|
|
|
| 15 |
<div id="quiz-content" style="display: none;">
|
| 16 |
<h3>Logged in as: <span id="logged-user"></span></h3>
|
| 17 |
<h3 id="waiting-message" style="display: none;">Waiting for the Host...</h3>
|
| 18 |
+
<div id="question-section" class="mt-4">
|
| 19 |
+
<form id="quiz-form" onsubmit="submitForm(event)">
|
| 20 |
+
<p id="question-text"></p>
|
| 21 |
+
<div id="options"></div>
|
| 22 |
+
<input type="submit" value="Submit" class="btn btn-primary mt-2">
|
| 23 |
+
</form>
|
| 24 |
+
</div>
|
| 25 |
<div id="results" class="mt-4"></div>
|
| 26 |
</div>
|
| 27 |
<div id="final-results" style="display: none;" class="mt-4">
|
templates/host.html
CHANGED
|
@@ -5,6 +5,7 @@
|
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
<title>Quiz Host</title>
|
| 7 |
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
|
|
|
| 8 |
</head>
|
| 9 |
<body>
|
| 10 |
<div class="container">
|
|
@@ -14,8 +15,10 @@
|
|
| 14 |
<button onclick="checkAnswers()" class="btn btn-primary mt-2">Check Answers</button>
|
| 15 |
<button onclick="nextQuestion()" class="btn btn-secondary mt-2">Next Question</button>
|
| 16 |
<button onclick="endQuiz()" id="end-quiz" class="btn btn-danger mt-2" disabled>End Quiz</button>
|
| 17 |
-
<
|
| 18 |
-
|
|
|
|
|
|
|
| 19 |
<div id="results" class="mt-4"></div>
|
| 20 |
</div>
|
| 21 |
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.0/socket.io.js"></script>
|
|
|
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
<title>Quiz Host</title>
|
| 7 |
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
| 8 |
+
<link rel="stylesheet" href="/static/style.css">
|
| 9 |
</head>
|
| 10 |
<body>
|
| 11 |
<div class="container">
|
|
|
|
| 15 |
<button onclick="checkAnswers()" class="btn btn-primary mt-2">Check Answers</button>
|
| 16 |
<button onclick="nextQuestion()" class="btn btn-secondary mt-2">Next Question</button>
|
| 17 |
<button onclick="endQuiz()" id="end-quiz" class="btn btn-danger mt-2" disabled>End Quiz</button>
|
| 18 |
+
<div id="question-section" class="mt-4">
|
| 19 |
+
<p id="question-text"></p>
|
| 20 |
+
<div id="options"></div>
|
| 21 |
+
</div>
|
| 22 |
<div id="results" class="mt-4"></div>
|
| 23 |
</div>
|
| 24 |
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.0/socket.io.js"></script>
|