From 7562ca9aaac82dee2c72dfcc46c324a1ef1c059c Mon Sep 17 00:00:00 2001 From: Falko Schindler Date: Fri, 24 Nov 2023 14:43:20 +0100 Subject: [PATCH] encode/decode dollar symbol (fixes #2079) --- nicegui/client.py | 3 ++- nicegui/templates/index.html | 3 ++- tests/test_element.py | 7 +++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/nicegui/client.py b/nicegui/client.py index 7f54d3abf..474a3963f 100644 --- a/nicegui/client.py +++ b/nicegui/client.py @@ -105,7 +105,8 @@ def build_response(self, request: Request, status_code: int = 200) -> Response: 'elements': elements.replace('&', '&') .replace('<', '<') .replace('>', '>') - .replace('`', '`'), + .replace('`', '`') + .replace('$', '$'), 'head_html': self.head_html, 'body_html': '\n' + self.body_html + '\n' + '\n'.join(vue_html), 'vue_scripts': '\n'.join(vue_scripts), diff --git a/nicegui/templates/index.html b/nicegui/templates/index.html index 0a313b5cc..a08d8c0cd 100644 --- a/nicegui/templates/index.html +++ b/nicegui/templates/index.html @@ -64,7 +64,8 @@ const loaded_components = new Set(); const raw_elements = String.raw`{{ elements | safe }}`; - const elements = JSON.parse(raw_elements.replace(/`/g, '`') + const elements = JSON.parse(raw_elements.replace(/$/g, '$') + .replace(/`/g, '`') .replace(/>/g, '>') .replace(/</g, '<') .replace(/&/g, '&')); diff --git a/tests/test_element.py b/tests/test_element.py index 335281710..95fa86c1b 100644 --- a/tests/test_element.py +++ b/tests/test_element.py @@ -275,3 +275,10 @@ def test_invalid_tags(screen: Screen): ui.element(tag) screen.open('/') + + +def test_bad_characters(screen: Screen): + ui.html(r'& ` ${foo}') + + screen.open('/') + screen.should_contain(r'& ` ${foo}')