Commit c725ad3d774b5dcf3b1b841b2650d6c76de4c640
1 parent
18f3abd6
Exists in
master
and in
1 other branch
- topics can be started by clicking anywhere in the table row
- updated QUESTIONS.md
Showing
3 changed files
with
26 additions
and
20 deletions
Show diff stats
QUESTIONS.md
1 | 1 | # Questions |
2 | 2 | |
3 | -Questions are saved in files in the [YAML](http://www.yaml.org/start.html) format. Each file has a list of questions with the following structure: | |
3 | +Questions are saved in files in the [YAML](http://www.yaml.org/start.html) format. Each file contains a list of questions like | |
4 | 4 | |
5 | 5 | ```yaml |
6 | 6 | - type: radio |
7 | - ref: question1 | |
7 | + ref: myquestion1 | |
8 | 8 | ... |
9 | 9 | |
10 | 10 | - type: checkbox |
11 | - ref: question2 | |
11 | + ref: myquestion2 | |
12 | 12 | ... |
13 | 13 | ``` |
14 | 14 | |
15 | -The following kinds kinds of questions are supported: | |
15 | +where each question is specified in a dictionary. | |
16 | +The `type` key is mandatory and specifies the type of question (multiple choice, text, etc). | |
17 | +The other keys available will depend on the type of question. | |
18 | +The field `ref` is not strictly required but still recommended, if not defined it will default to a string with the filename and the question index, e.g., `questions.yaml:12`. | |
19 | + | |
20 | +The following types of questions are supported: | |
16 | 21 | |
17 | 22 | type | kind of answer |
18 | 23 | -----|----------------- |
19 | -[radio](#radio) | Choose exactly one option from list of options. | |
24 | +[radio](#radio) | Choose exactly one option from a list of options. | |
20 | 25 | [checkbox](#checkbox) | Choose zero, one or more options. |
21 | -[text](#text) | Line of text which is matched against a list of acceptable answers. | |
26 | +[text](#text) | Line of text which is compared against a list of acceptable answers. | |
22 | 27 | [text-regex](#text-regex) | Similar to text, but the answer is validated by a regular expression. |
23 | -[numeric-interval](#numeric-interval) | Answer is interpreted as a floating point value (e.g. `1.2e-3`), which is checked against a closed interval. | |
24 | -[textarea](#textarea) | The answer is a multiline block of text that is sent to an external program for assessment. The printed output of the external program is parsed to obtain the result. | |
25 | -[information, warning, alert and success](#information-warning-alert-and-success) | These are not really questions, just information panels intended to be used in tests to convey information. There is no answer and it's always correct. | |
26 | -[generator](#generator) | This is not a really a question type. It means that this question will be generated by an external program, and the actual type is defined there. | |
28 | +[numeric-interval](#numeric-interval) | Answer is interpreted as a floating point value (e.g. `1.2e-3`), and is checked against a closed interval. | |
29 | +[textarea](#textarea) | The answer is a multiline block of text that is sent to an external program for assessment. The printed output of the external program is parsed (yaml) to obtain the result. | |
30 | +[information, warning, alert, success](#information-warning-alert-and-success) | These are not really questions, just information panels intended to be used to convey information. There is no space for an answer and the correction returns always correct. | |
31 | +[generator](#generator) | This is not a real question type. It means that this question will be generated by an external program, and the actual type is defined there. | |
27 | 32 | |
28 | -In all questions, the field `type` is required. The field `ref` is not strictly required but still recommended, if not defined will default to FIXME. | |
33 | +## Question types | |
29 | 34 | |
30 | -## radio | |
35 | +### radio | |
31 | 36 | |
32 | 37 | Only one option can be selected as the answer. If no option is selected, the question is considered unanswered. |
33 | 38 | |
... | ... | @@ -53,18 +58,18 @@ All fields are optional except `type` and `options`. `title` and `text` default |
53 | 58 | |
54 | 59 | The `correct` field can be used in multiple ways and in combination with `shuffle`, `discount` and `choose` fields: |
55 | 60 | |
56 | -- if not present, the first option is considered correct (options are usually shuffled...). | |
57 | -- it can be the index (0-based) of the correct option, e.g., `correct: 0`. | |
61 | +- if not present, the first option is considered correct (options are shuffled by default when presented to the student). | |
62 | +- it can be the index (0-based) of the correct option, e.g., `correct: 0` for the first option. | |
58 | 63 | - it can be a list of numbers between 0 and 1, e.g., `correct: [1, 0, 0]`. In this case, the first option is 100% correct while the others are 0%. If `discount: true` (the default), then the wrong ones will be penalized by $-1/(n-1)=-\tfrac{1}{2}$, where $n$ is the number of options. |
59 | 64 | - there can be more than one correct option in the list, which is then marked in the correct field, e.g. `correct: [1, 1, 0]`. In this case, one of the correct options will be randomly selected, and the remaining wrong ones appended. |
60 | 65 | - there can also be a long list of right and wrong options from which to build the question options. E.g. if `correct: [1,1,1,0,0,0,0]` and `choose: 3` is defined, then 1 correct option and 2 wrong ones are randomly selected from the list. |
61 | 66 | - finally it's also possible to have a question that is *"not-completely-right"* or *"not-completely-wrong"*. This can be done using numbers between 0 and 1, e.g., `correct: [1, 0.3, 0]`. This practice is discouraged. |
62 | 67 | |
63 | -In some situations one may not want the options to be shuffled, e.g., if they show several steps of a proof and the student should mark the wrong step. In that case use `shuffle: false`. | |
68 | +In some situations one may not want the options to be shuffled. In that case use `shuffle: false`. | |
64 | 69 | |
65 | -## checkbox | |
70 | +### checkbox | |
66 | 71 | |
67 | -Zero, one or multiple options can be selected. The question is always considered as answered, even if no options are selected, which is also a valid answed. | |
72 | +Zero, one or multiple options can be selected. The question is always considered as answered, even if no options are selected. | |
68 | 73 | |
69 | 74 | The simplest format is |
70 | 75 | ... | ... |
static/js/maintopics.js
templates/maintopics-table.html
... | ... | @@ -87,7 +87,7 @@ |
87 | 87 | </tr> |
88 | 88 | |
89 | 89 | {% else %} |
90 | - <tr> | |
90 | + <tr class="clickable-row" data-href="/topic/{{t['ref']}}"> | |
91 | 91 | <td class="text-primary"> |
92 | 92 | {% if t['type']=='chapter' %} |
93 | 93 | <div class="lead"> |
... | ... | @@ -98,7 +98,6 @@ |
98 | 98 | {% end %} |
99 | 99 | </td> |
100 | 100 | <td class="text-center"> |
101 | - <a href="/topic/{{t['ref']}}"> | |
102 | 101 | {% if t['level'] < 0.01 %} |
103 | 102 | <i class="fas fa-lock-open text-success"></i> |
104 | 103 | {% elif t['type']=='chapter' %} |
... | ... | @@ -112,7 +111,6 @@ |
112 | 111 | </span> |
113 | 112 | </div> |
114 | 113 | {% end %} |
115 | - </a> | |
116 | 114 | </td> |
117 | 115 | </tr> |
118 | 116 | {% end %} | ... | ... |