Normalize whitespace and strip <p> wrappers in question answers and feedback
This commit is contained in:
+40
-5
@@ -4,6 +4,7 @@ from django.utils import timezone
|
||||
from django.core.files.storage import FileSystemStorage
|
||||
from django.conf import settings
|
||||
from django.utils.html import format_html
|
||||
import re
|
||||
|
||||
from django.urls import reverse
|
||||
|
||||
@@ -112,16 +113,50 @@ class Question(QuestionBase):
|
||||
return self.stem
|
||||
|
||||
def clean(self):
|
||||
# normalize whitespace and strip surrounding <p>...</p> wrappers
|
||||
try:
|
||||
super().clean()
|
||||
except Exception:
|
||||
# If parent has no clean or it fails, ignore and continue
|
||||
pass
|
||||
|
||||
def _strip_outer_p(text):
|
||||
if not text:
|
||||
return text
|
||||
t = text.strip()
|
||||
# match <p> with optional attributes, e.g. <p>, <p class="...">, etc.
|
||||
m = re.match(r"^<p[^>]*>(.*)</p>$", t, flags=re.IGNORECASE | re.DOTALL)
|
||||
if m:
|
||||
return m.group(1).strip()
|
||||
return t
|
||||
|
||||
# Answers
|
||||
if self.a_answer:
|
||||
self.a_answer = self.a_answer.strip()
|
||||
self.a_answer = _strip_outer_p(self.a_answer)
|
||||
if self.b_answer:
|
||||
self.b_answer = self.b_answer.strip()
|
||||
self.b_answer = _strip_outer_p(self.b_answer)
|
||||
if self.c_answer:
|
||||
self.c_answer = self.c_answer.strip()
|
||||
self.c_answer = _strip_outer_p(self.c_answer)
|
||||
if self.d_answer:
|
||||
self.d_answer = self.d_answer.strip()
|
||||
self.d_answer = _strip_outer_p(self.d_answer)
|
||||
if self.e_answer:
|
||||
self.e_answer = self.e_answer.strip()
|
||||
self.e_answer = _strip_outer_p(self.e_answer)
|
||||
|
||||
# Per-answer feedbacks
|
||||
if hasattr(self, 'a_feedback') and self.a_feedback:
|
||||
self.a_feedback = _strip_outer_p(self.a_feedback)
|
||||
if hasattr(self, 'b_feedback') and self.b_feedback:
|
||||
self.b_feedback = _strip_outer_p(self.b_feedback)
|
||||
if hasattr(self, 'c_feedback') and self.c_feedback:
|
||||
self.c_feedback = _strip_outer_p(self.c_feedback)
|
||||
if hasattr(self, 'd_feedback') and self.d_feedback:
|
||||
self.d_feedback = _strip_outer_p(self.d_feedback)
|
||||
if hasattr(self, 'e_feedback') and self.e_feedback:
|
||||
self.e_feedback = _strip_outer_p(self.e_feedback)
|
||||
|
||||
# General feedback
|
||||
if hasattr(self, 'feedback') and self.feedback:
|
||||
self.feedback = _strip_outer_p(self.feedback)
|
||||
|
||||
def get_app_name(self):
|
||||
return "sbas"
|
||||
|
||||
Reference in New Issue
Block a user