Commit d50fa6fc6a0b888f6bb1e19cf686b2ec6431e69e

Authored by Miguel Barão
1 parent 82ca86aa
Exists in master and in 1 other branch dev

- improved options in radio and checkbox questions.

- escape some symbols (e.g. <) to work in math.
templates/question-checkbox.html
@@ -5,10 +5,16 @@ @@ -5,10 +5,16 @@
5 <fieldset data-role="controlgroup"> 5 <fieldset data-role="controlgroup">
6 <div class="list-group"> 6 <div class="list-group">
7 {% for n, opt in enumerate(q['options']) %} 7 {% for n, opt in enumerate(q['options']) %}
8 - <a class="list-group-item">  
9 - <input type="checkbox" id="{{i}}:{{n}}" name="{{i}}" value="{{n}}">  
10 - <label for="{{n}}">{{ md(opt, q) }}</label>  
11 - </a> 8 + <a class="list-group-item">
  9 + <div class="d-flex flex-row">
  10 + <div class="p-1">
  11 + <input type="checkbox" id="{{i}}:{{n}}" name="{{i}}" value="{{n}}">
  12 + </div>
  13 + <div class="p-1">
  14 + <label for="{{n}}">{{ md(opt, q) }}</label>
  15 + </div>
  16 + </div>
  17 + </a>
12 {% end %} 18 {% end %}
13 </div> 19 </div>
14 </fieldset> 20 </fieldset>
templates/question-radio.html
@@ -5,10 +5,16 @@ @@ -5,10 +5,16 @@
5 <fieldset data-role="controlgroup"> 5 <fieldset data-role="controlgroup">
6 <div class="list-group"> 6 <div class="list-group">
7 {% for n, opt in enumerate(q['options']) %} 7 {% for n, opt in enumerate(q['options']) %}
8 - <a class="list-group-item">  
9 - <input type="radio" id="{{i}}:{{n}}" name="{{i}}" value="{{n}}">  
10 - <label for="{{n}}">{{ md(opt, q) }}</label>  
11 - </a> 8 + <a class="list-group-item">
  9 + <div class="d-flex flex-row">
  10 + <div class="p-1">
  11 + <input type="radio" id="{{i}}:{{n}}" name="{{i}}" value="{{n}}">
  12 + </div>
  13 + <div class="p-1">
  14 + <label for="{{n}}">{{ md(opt, q) }}</label>
  15 + </div>
  16 + </div>
  17 + </a>
12 {% end %} 18 {% end %}
13 </div> 19 </div>
14 </fieldset> 20 </fieldset>
@@ -124,7 +124,7 @@ class HighlightRenderer(mistune.Renderer): @@ -124,7 +124,7 @@ class HighlightRenderer(mistune.Renderer):
124 return fr'$$$ {text} $$$' 124 return fr'$$$ {text} $$$'
125 125
126 126
127 -markdown = MarkdownWithMath(HighlightRenderer(escape=False)) # hard_wrap=True to insert <br> on newline 127 +markdown = MarkdownWithMath(HighlightRenderer(escape=True)) # hard_wrap=True to insert <br> on newline
128 128
129 def md_to_html(text, q=None): 129 def md_to_html(text, q=None):
130 return markdown(text) 130 return markdown(text)
@@ -135,8 +135,14 @@ def md_to_html(text, q=None): @@ -135,8 +135,14 @@ def md_to_html(text, q=None):
135 def load_yaml(filename, default=None): 135 def load_yaml(filename, default=None):
136 try: 136 try:
137 f = open(path.expanduser(filename), 'r', encoding='utf-8') 137 f = open(path.expanduser(filename), 'r', encoding='utf-8')
  138 + except FileNotFoundError:
  139 + logger.error(f'Can\'t open "{script}": not found.')
  140 + return default
  141 + except PermissionError:
  142 + logger.error(f'Can\'t open "{script}": no permission.')
  143 + return default
138 except IOError: 144 except IOError:
139 - logger.error(f'Can\'t open file "{filename}"') 145 + logger.error(f'Can\'t open file "{filename}".')
140 return default 146 return default
141 else: 147 else:
142 with f: 148 with f: