Added basic rule system
This commit is contained in:
parent
83544a28be
commit
71095cd5b8
|
@ -28,15 +28,25 @@
|
|||
<main>
|
||||
|
||||
<div id="spreadsheet" class="view">
|
||||
<form>
|
||||
<form onsubmit="createQuiz(event)">
|
||||
|
||||
Title:<br>
|
||||
<input type="text" id="titleField" required>
|
||||
Style:<br>
|
||||
<select type="select" id="styleField" required>
|
||||
<option value="FSG" >FSG </option>
|
||||
<option value="FSA" >FSA </option>
|
||||
<option value="FSN" >FSN </option>
|
||||
<option value="FSEast" >FSEast </option>
|
||||
<option value="FSCzech" >FSCzech </option>
|
||||
<option value="FSSpain" >FSSpain </option>
|
||||
<option value="FSSwitzerland">FSSwitzerland </option>
|
||||
</select>
|
||||
Paste your questions from a spreadsheet here:<br>
|
||||
<textarea rows="16" id="questions" required></textarea>
|
||||
<br>
|
||||
|
||||
<input type="button" value="Create Quiz" onclick="createQuiz()">
|
||||
<input type="submit" value="Create Quiz">
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
|
21
web/quiz.js
21
web/quiz.js
|
@ -51,7 +51,9 @@ function updateSubmitTimer() {
|
|||
|
||||
function startSubmitTimer(time) {
|
||||
|
||||
state.submitTimer = time || 30
|
||||
state.submitTimer = time || state.submitTime
|
||||
if (state.submitTimer == null)
|
||||
return
|
||||
|
||||
console.log('Setting submitTimer to ' + state.submitTimer + ' seconds.')
|
||||
|
||||
|
@ -139,21 +141,20 @@ function reStartQuiz() {
|
|||
}
|
||||
|
||||
|
||||
function createQuiz() {
|
||||
function createQuiz(e) {
|
||||
|
||||
e.preventDefault()
|
||||
|
||||
console.log('Creating new quiz')
|
||||
|
||||
state.title = document.getElementById('titleField').value
|
||||
if (state.title == '') {
|
||||
alert('Please enter a title')
|
||||
return
|
||||
}
|
||||
|
||||
clearState()
|
||||
removeLink()
|
||||
|
||||
state.title = document.getElementById('titleField').value
|
||||
state.style = document.getElementById('styleField').value
|
||||
|
||||
if (parseSpreadsheet().success == false) {
|
||||
console.log('Quiz creation failed.')
|
||||
alert('Quiz creation failed.')
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -165,6 +166,8 @@ function createQuiz() {
|
|||
|
||||
console.log('Quiz created')
|
||||
|
||||
return false
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -63,12 +63,12 @@ form {
|
|||
text-align: left !important;
|
||||
}
|
||||
|
||||
textarea, input {
|
||||
textarea, input, select {
|
||||
margin-top: 8px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
input[type="button"] {
|
||||
input[type="button"], input[type="submit"] {
|
||||
float: right;
|
||||
cursor: pointer;
|
||||
margin: 16px 0 16px 16px;
|
||||
|
@ -80,16 +80,16 @@ input[type="button"] {
|
|||
font-weight: bold;
|
||||
}
|
||||
|
||||
input[type="button"].center {
|
||||
input[type="button"].center, input[type="submit"].center {
|
||||
float: none;
|
||||
}
|
||||
|
||||
input[type="button"]:disabled {
|
||||
input[type="button"]:disabled, input[type="submit"]:disabled {
|
||||
cursor: auto;
|
||||
background: #888 !important;
|
||||
}
|
||||
|
||||
textarea, input[type="text"] {
|
||||
textarea, input[type="text"], select {
|
||||
background: #ddd;
|
||||
margin-bottom: 16px;
|
||||
padding: .5em;
|
||||
|
|
39
web/util.js
39
web/util.js
|
@ -4,10 +4,14 @@ const defaultState = {
|
|||
title: null,
|
||||
questions: [],
|
||||
success: 0,
|
||||
submitTime: null,
|
||||
submitTimer: 0,
|
||||
submitInterval: null,
|
||||
totalTimer: 0,
|
||||
totalInterval: null,
|
||||
questionTime: null,
|
||||
questionTimer: 0,
|
||||
questionInterval: null,
|
||||
}
|
||||
|
||||
var state
|
||||
|
@ -28,6 +32,41 @@ function updateTitles() {
|
|||
}
|
||||
|
||||
|
||||
const rules = {
|
||||
__default__: {
|
||||
sequential: false,
|
||||
submitTries: 1,
|
||||
submitTimeout: null,
|
||||
timedQs: false,
|
||||
allowQOvertime: false
|
||||
},
|
||||
'FSG' : { sequential: true, timedQs: true },
|
||||
'FSA' : { sequential: true, timedQs: true, allowQOvertime: true },
|
||||
'FSN' : { sequential: true },
|
||||
'FSEast' : { sequential: false },
|
||||
'FSCzech' : { sequential: false, submitTries: Infinity, submitTimeout: 30 },
|
||||
'FSSpain' : { sequential: true, submitTries: 3 },
|
||||
'FSSwitzerland' : { sequential: true },
|
||||
}
|
||||
|
||||
function getRule(name) {
|
||||
|
||||
var r = rules[state.style]
|
||||
|
||||
if (r.hasOwnProperty(name))
|
||||
return r[name]
|
||||
|
||||
var d = rules.__default__
|
||||
if (d.hasOwnProperty(name))
|
||||
return d[name]
|
||||
|
||||
console.error('No such rule:', name);
|
||||
|
||||
return undefined
|
||||
|
||||
}
|
||||
|
||||
|
||||
function changeView(view) {
|
||||
|
||||
for (el of document.querySelectorAll('.view'))
|
||||
|
|
Loading…
Reference in New Issue