From 6abfbaff59f831ede7e3714aac491331623ca35b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20H=C3=B8xbro=20Hansen?= Date: Mon, 19 Feb 2024 16:45:16 +0100 Subject: [PATCH 1/5] Redraw if stylesheets is empty --- panel/models/html.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/panel/models/html.ts b/panel/models/html.ts index c6b25ac9a9..38c5b1c024 100644 --- a/panel/models/html.ts +++ b/panel/models/html.ts @@ -81,6 +81,8 @@ export class HTMLView extends PanelMarkupView { const html = this.process_tex() this.watch_stylesheets() this.set_html(html) + if (this.model.stylesheets.length === 0) + this.style_redraw() } style_redraw(): void { From 18bcece8ed6bbac20bc760db8500411dd7859a70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20H=C3=B8xbro=20Hansen?= Date: Mon, 19 Feb 2024 18:57:53 +0100 Subject: [PATCH 2/5] Move to layout.ts (and fix some indentation) --- panel/models/html.ts | 2 -- panel/models/layout.ts | 16 ++++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/panel/models/html.ts b/panel/models/html.ts index 38c5b1c024..c6b25ac9a9 100644 --- a/panel/models/html.ts +++ b/panel/models/html.ts @@ -81,8 +81,6 @@ export class HTMLView extends PanelMarkupView { const html = this.process_tex() this.watch_stylesheets() this.set_html(html) - if (this.model.stylesheets.length === 0) - this.style_redraw() } style_redraw(): void { diff --git a/panel/models/layout.ts b/panel/models/layout.ts index 95d06128eb..fb4b398616 100644 --- a/panel/models/layout.ts +++ b/panel/models/layout.ts @@ -34,16 +34,16 @@ export class PanelMarkupView extends WidgetView { for (const sts of this._applied_stylesheets) { const style_el = (sts as any).el if (style_el instanceof HTMLLinkElement) { - this._initialized_stylesheets[style_el.href] = false - style_el.addEventListener("load", () => { - this._initialized_stylesheets[style_el.href] = true - if ( - Object.values(this._initialized_stylesheets).every(Boolean) - ) - this.style_redraw() - }) + this._initialized_stylesheets[style_el.href] = false + style_el.addEventListener('load', () => { + this._initialized_stylesheets[style_el.href] = true + if (Object.values(this._initialized_stylesheets).every(Boolean)) + this.style_redraw() + }) } } + if (this.model.stylesheets.length === 0) + this.style_redraw() } style_redraw(): void { From 200c995b503e57532498235408466f963bde0ef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20H=C3=B8xbro=20Hansen?= Date: Mon, 19 Feb 2024 21:53:13 +0100 Subject: [PATCH 3/5] Add test --- panel/tests/ui/pane/test_markup.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/panel/tests/ui/pane/test_markup.py b/panel/tests/ui/pane/test_markup.py index 9babe5185f..d222b463aa 100644 --- a/panel/tests/ui/pane/test_markup.py +++ b/panel/tests/ui/pane/test_markup.py @@ -1,9 +1,12 @@ +from html import escape + import pytest pytest.importorskip("playwright") from playwright.sync_api import expect +from panel.models import HTML from panel.pane import Markdown from panel.tests.util import serve_component, wait_until @@ -85,3 +88,12 @@ def test_markdown_pane_visible_toggle(page): md.visible = True wait_until(lambda: page.locator(".markdown").locator("div").is_visible(), page) + +def test_html_model(page): + text = "

Header

" + html = HTML(text=escape(text), width=200, height=200) + serve_component(page, html) + + header_element = page.locator('h1:has-text("Header")') + assert header_element.is_visible() + assert header_element.text_content() == "Header" From b0a4aab64d8086ef1861a41b7bc37461e0020bd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20H=C3=B8xbro=20Hansen?= Date: Mon, 19 Feb 2024 22:00:12 +0100 Subject: [PATCH 4/5] Update panel/tests/ui/pane/test_markup.py --- panel/tests/ui/pane/test_markup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/panel/tests/ui/pane/test_markup.py b/panel/tests/ui/pane/test_markup.py index d222b463aa..f2bae01304 100644 --- a/panel/tests/ui/pane/test_markup.py +++ b/panel/tests/ui/pane/test_markup.py @@ -89,7 +89,8 @@ def test_markdown_pane_visible_toggle(page): wait_until(lambda: page.locator(".markdown").locator("div").is_visible(), page) -def test_html_model(page): +def test_html_model_no_stylesheet(page): + # regression test for https://github.com/holoviz/holoviews/issues/5963 text = "

Header

" html = HTML(text=escape(text), width=200, height=200) serve_component(page, html) From 6d56c820fc8ebf0aff434c385da21ff71355aaa2 Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Tue, 20 Feb 2024 10:24:11 +0100 Subject: [PATCH 5/5] Apply suggestions from code review --- panel/models/layout.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/panel/models/layout.ts b/panel/models/layout.ts index fb4b398616..0d9c5f1c5d 100644 --- a/panel/models/layout.ts +++ b/panel/models/layout.ts @@ -42,7 +42,7 @@ export class PanelMarkupView extends WidgetView { }) } } - if (this.model.stylesheets.length === 0) + if (Object.keys(this._initialized_stylesheets).length === 0) this.style_redraw() }