Commit a0f5b4b0791a21f99c2445092f13a1fa8375b439

Authored by Miguel Barão
1 parent 7d7be851
Exists in master and in 1 other branch dev

- added codemirror to textarea questions.

BUGS.md
1 1  
2 2 # BUGS
3 3  
4   -- arranjar os links para static/libs como no perguntations.
5   -- quando erra uma textarea, o comment fica na nova pergunta que se gera.
6 4 - nao esta a guardar as respostas erradas.
7 5 - tabelas nas perguntas radio/checkbox não ocupam todo o espaço como em question.
8 6  
... ... @@ -18,13 +16,11 @@
18 16 - session management. close after inactive time.
19 17 - radio e checkboxes, aceitar numeros como seleccao das opcoes.
20 18 - reload das perguntas enquanto online. ver signal em http://stackabuse.com/python-async-await-tutorial/
21   -- pertuntas tipo tristate: (sim, não, não sei
22 19 - tabela de progresso de todos os alunos por topico.
23 20 - tabela com perguntas / quantidade de respostas certas/erradas.
24 21 - tabela com topicos / quantidade de estrelas.
25 22 - pymips: activar/desactivar instruções
26 23 - implementar servidor http com redirect para https.
27   -- usar codemirror no textarea
28 24 - ao fim de 3 tentativas com password errada, envia email com nova password.
29 25 - titulos das perguntas não suportam markdown.
30 26 - pagina report que permita ver tabela alunos/topicos, estatisticas perguntas mais falhadas, tempo médio por pergunta.
... ... @@ -32,6 +28,9 @@
32 28  
33 29 # FIXED
34 30  
  31 +- usar codemirror no textarea
  32 +- quando erra uma textarea, o comment fica na nova pergunta que se gera.
  33 +- arranjar os links para static/libs como no perguntations.
35 34 - each topic only loads a sample of K questions (max) in random order.
36 35 - change password modal nao aparece no ipad (safari e firefox)
37 36 - detect questions in questions.yaml without ref -> error ou generate default.
... ...
static/codemirror 0 → 120000
... ... @@ -0,0 +1 @@
  1 +libs/codemirror-5.37.0/
0 2 \ No newline at end of file
... ...
static/js/topic.js
... ... @@ -24,23 +24,7 @@ function updateQuestion(response){
24 24 if (e.shiftKey) postQuestion();
25 25 return false;
26 26 }});
27   - $("textarea").keydown(function (e) {
28   - if (e.keyCode == 13 && e.shiftKey) { // shift enter
29   - e.preventDefault();
30   - postQuestion();
31   - }
32   - else if (e.keyCode == 9) { // tab
33   - e.preventDefault(); // prevent loosing focus
34   - // get caret position/selection
35   - var start = this.selectionStart;
36   - var end = this.selectionEnd;
37   - var value = $(this).val();
38 27  
39   - // set textarea value to: text before caret + tab + text after caret
40   - $(this).val(value.substring(0, start) + " " + " " + " " + " " + value.substring(end));
41   - // put caret at right position again (add one for the tab)
42   - this.selectionStart = this.selectionEnd = start + 4;
43   - }});
44 28 $('#question_div').animateCSS('bounceInDown');
45 29 break;
46 30  
... ... @@ -75,6 +59,7 @@ function getQuestion() {
75 59 // Send answer and receive a response.
76 60 // The response can be a new_question or a shake if the answer is wrong.
77 61 function postQuestion() {
  62 + editor.save();
78 63 $.ajax({
79 64 type: "POST",
80 65 url: "/question",
... ...
templates/question-textarea.html
... ... @@ -2,7 +2,16 @@
2 2  
3 3 {% block answer %}
4 4  
5   -<textarea class="form-control" rows="{{ question['lines'] }}" name="answer" autofocus>{{ question['answer'] or '' }}</textarea><br />
  5 +<textarea class="form-control" rows="{{ question['lines'] }}" name="answer" id="code" autofocus>{{ question['answer'] or '' }}</textarea><br />
6 6 <input type="hidden" name="question_ref" value="{{ question['ref'] }}">
7 7  
  8 +<script>
  9 + var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
  10 + lineNumbers: true,
  11 + mode: "clike",
  12 + // matchBrackets: true,
  13 + // theme: "night",
  14 + });
  15 +</script>
  16 +
8 17 {% end %}
... ...
templates/topic.html
... ... @@ -23,6 +23,7 @@
23 23 <link rel="stylesheet" href="/static/MDB/css/mdb.min.css">
24 24 <link rel="stylesheet" href="/static/css/animate.min.css">
25 25 <link rel="stylesheet" href="/static/css/github.css">
  26 + <link rel="stylesheet" href="/static/codemirror/codemirror.css">
26 27 <link rel="stylesheet" href="/static/css/topic.css">
27 28  
28 29 <!-- Scripts -->
... ... @@ -31,6 +32,8 @@
31 32 <script defer src="/static/fontawesome/fontawesome-all.min.js"></script>
32 33 <script defer src="/static/bootstrap/js/bootstrap.min.js"></script>
33 34 <script defer src="/static/MDB/js/mdb.min.js"></script>
  35 + <script defer src="/static/codemirror/codemirror.js"></script>
  36 + <script defer src="/static/codemirror/z80.js"></script>
34 37  
35 38 <script defer src="/static/js/topic.js"></script>
36 39 </head>
... ...