Commit c725ad3d774b5dcf3b1b841b2650d6c76de4c640

Authored by Miguel Barão
1 parent 18f3abd6
Exists in master and in 1 other branch dev

- topics can be started by clicking anywhere in the table row

- updated QUESTIONS.md
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
... ... @@ -29,4 +29,7 @@ function change_password() {
29 29  
30 30 $(document).ready(function() {
31 31 $("#change_password").click(change_password);
  32 + $(".clickable-row").click(function () {
  33 + window.location = $(this).data("href");
  34 + });
32 35 });
... ...
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 %}
... ...