[templates} Fix escaping HTML bugs in notes]
This commit is contained in:
@ -51,26 +51,28 @@ class BaseLogData(JSONDataclass):
|
|||||||
return {}
|
return {}
|
||||||
|
|
||||||
def notes_as_str(self, separator: str = " | ") -> str:
|
def notes_as_str(self, separator: str = " | ") -> str:
|
||||||
|
import html
|
||||||
import re
|
import re
|
||||||
|
|
||||||
if not self.notes:
|
if not self.notes:
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
if isinstance(self.notes, str):
|
if isinstance(self.notes, str):
|
||||||
note_str = self.notes.encode("utf-8").decode("unicode_escape")
|
return html.escape(re.sub(r"\s*\[start:\d+\|end:\d+\]$", "", self.notes))
|
||||||
return re.sub(r"\s*\[start:\d+\|end:\d+\]$", "", note_str)
|
|
||||||
|
|
||||||
if isinstance(self.notes, list):
|
if isinstance(self.notes, list):
|
||||||
cleaned_notes = []
|
cleaned_notes = []
|
||||||
for note in self.notes:
|
for note in self.notes:
|
||||||
cleaned = note.encode("utf-8").decode("unicode_escape")
|
cleaned = html.escape(re.sub(r"\s*\[start:\d+\|end:\d+\]$", "", note))
|
||||||
cleaned = re.sub(r"\s*\[start:\d+\|end:\d+\]$", "", cleaned)
|
|
||||||
cleaned_notes.append(cleaned)
|
cleaned_notes.append(cleaned)
|
||||||
return separator.join(cleaned_notes)
|
return separator.join(cleaned_notes)
|
||||||
|
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
def notes_as_html(self) -> str:
|
def notes_as_html(self) -> str:
|
||||||
|
import html
|
||||||
|
from django.utils.safestring import mark_safe
|
||||||
|
|
||||||
if not self.notes:
|
if not self.notes:
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
@ -82,11 +84,11 @@ class BaseLogData(JSONDataclass):
|
|||||||
|
|
||||||
html_notes = []
|
html_notes = []
|
||||||
for note in notes_list:
|
for note in notes_list:
|
||||||
escaped_note = note.encode("utf-8").decode("unicode_escape")
|
for line in note.split("\n"):
|
||||||
for line in escaped_note.split("\n"):
|
|
||||||
if line.strip():
|
if line.strip():
|
||||||
html_notes.append(f'<div class="sticky-note">{line}</div>')
|
escaped_line = html.escape(line)
|
||||||
return "".join(html_notes)
|
html_notes.append(f'<div class="sticky-note">{escaped_line}</div>')
|
||||||
|
return mark_safe("".join(html_notes))
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
|||||||
@ -35,7 +35,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td><a href={{scrobble.get_absolute_url}}>{{scrobble.local_timestamp}}</a></td>
|
<td><a href={{scrobble.get_absolute_url}}>{{scrobble.local_timestamp}}</a></td>
|
||||||
<td>{% if scrobble.logdata.calories %}{{scrobble.logdata.calories}}{% else %}{{scrobble.media_obj.calories}}{% endif %}</td>
|
<td>{% if scrobble.logdata.calories %}{{scrobble.logdata.calories}}{% else %}{{scrobble.media_obj.calories}}{% endif %}</td>
|
||||||
<td>{{scrobble.logdata.notes_as_str|safe}}</td>
|
<td>{{scrobble.logdata.notes_as_str}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
@ -37,7 +37,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td><a href="{{scrobble.get_absolute_url}}">{{scrobble.local_timestamp}}</a></td>
|
<td><a href="{{scrobble.get_absolute_url}}">{{scrobble.local_timestamp}}</a></td>
|
||||||
<td><a href="{{scrobble.get_media_source_url}}">{{scrobble.logdata.title}}</a></td>
|
<td><a href="{{scrobble.get_media_source_url}}">{{scrobble.logdata.title}}</a></td>
|
||||||
<td>{{scrobble.logdata.notes_as_str|safe}}</td>
|
<td>{{scrobble.logdata.notes_as_str}}</td>
|
||||||
<td>{{scrobble.source}}</td>
|
<td>{{scrobble.source}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
@ -66,7 +66,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td><a href={{scrobble.get_absolute_url}}>{{scrobble.local_timestamp}}</a></td>
|
<td><a href={{scrobble.get_absolute_url}}>{{scrobble.local_timestamp}}</a></td>
|
||||||
<td>{% for person in scrobble.logdata.with_people%}{{person}}{% if not forloop.last %}, {% endif%}{% endfor %}</td>
|
<td>{% for person in scrobble.logdata.with_people%}{{person}}{% if not forloop.last %}, {% endif%}{% endfor %}</td>
|
||||||
<td>{{scrobble.logdata.notes_as_str|safe}}</td>
|
<td>{{scrobble.logdata.notes_as_str}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
@ -64,7 +64,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td><a href="{{scrobble.get_absolute_url}}">{{scrobble.local_timestamp}}</a></td>
|
<td><a href="{{scrobble.get_absolute_url}}">{{scrobble.local_timestamp}}</a></td>
|
||||||
<td><a href="{{scrobble.get_media_source_url}}">{{scrobble.logdata.title}}</a></td>
|
<td><a href="{{scrobble.get_media_source_url}}">{{scrobble.logdata.title}}</a></td>
|
||||||
<td>{{scrobble.logdata.notes_as_str|safe}}</td>
|
<td>{{scrobble.logdata.notes_as_str}}</td>
|
||||||
<td>{{scrobble.source}}</td>
|
<td>{{scrobble.source}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
@ -190,7 +190,7 @@
|
|||||||
{% for scrobble in scrobbles.all %}
|
{% for scrobble in scrobbles.all %}
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href={{scrobble.get_absolute_url}}>{{scrobble.local_timestamp}}</a></td>
|
<td><a href={{scrobble.get_absolute_url}}>{{scrobble.local_timestamp}}</a></td>
|
||||||
<td>{% if scrobble.logdata.notes %}{{ scrobble.logdata.notes_as_str|safe }}{% endif %}
|
<td>{% if scrobble.logdata.notes %}{{ scrobble.logdata.notes_as_str }}{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
Reference in New Issue
Block a user