From 390fcb9657b7a57f929b20723bb8074fdea582bc Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Thu, 31 Mar 2022 21:21:26 +0200 Subject: [PATCH 1/3] Ensure css_files are referenced from correct relative path --- panel/io/resources.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/panel/io/resources.py b/panel/io/resources.py index 6fc8ba5442..a6f6cc8e42 100644 --- a/panel/io/resources.py +++ b/panel/io/resources.py @@ -275,10 +275,19 @@ def css_files(self): files = super(Resources, self).css_files self.extra_resources(files, '__css__') + css_files = [] + for css_file in files: + if (css_file.startswith(state.base_url) or css_file.startswith('static/')): + if css_file.startswith(state.base_url): + css_file = js_file[len(state.base_url):] + if state.rel_path: + css_file = f'{state.rel_path}/{css_file}' + css_files.append(css_file) + for cssf in config.css_files: if os.path.isfile(cssf) or cssf in files: continue - files.append(cssf) + css_files.append(cssf) if self.mode == 'server': if state.rel_path: dist_dir = f'{state.rel_path}/{LOCAL_DIST}' @@ -290,8 +299,8 @@ def css_files(self): for cssf in glob.glob(str(DIST_DIR / 'css' / '*.css')): if self.mode == 'inline': break - files.append(dist_dir + f'css/{os.path.basename(cssf)}') - return files + css_files.append(dist_dir + f'css/{os.path.basename(cssf)}') + return css_files @property def render_js(self): From c83f56ad2edcdb2ed6da1e2ed851baf66674f69e Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Thu, 31 Mar 2022 21:29:32 +0200 Subject: [PATCH 2/3] Add tests --- panel/tests/test_server.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/panel/tests/test_server.py b/panel/tests/test_server.py index f0e10447db..4e44508868 100644 --- a/panel/tests/test_server.py +++ b/panel/tests/test_server.py @@ -18,7 +18,7 @@ from panel.pane import Markdown from panel.reactive import ReactiveHTML from panel.template import BootstrapTemplate -from panel.widgets import Button, Tabulator +from panel.widgets import Button, Tabulator, Terminal def test_get_server(html_server_session): @@ -677,3 +677,31 @@ def test_server_component_custom_resources_with_subpath_and_prefix_relative_url( r = requests.get(f"http://localhost:{port}/prefix/subpath/component") content = r.content.decode('utf-8') assert 'href="../components/panel.tests.test_server/CustomComponent/__css__/./assets/custom.css"' in content + + +def test_server_component_css_with_prefix_relative_url(): + component = Terminal() + + port = 6027 + serve({'component': component}, port=port, threaded=True, show=False) + + # Wait for server to start + time.sleep(1) + + r = requests.get(f"http://localhost:{port}/component") + content = r.content.decode('utf-8') + assert 'href="static/extensions/panel/bundled/terminal/xterm@4.11.0/css/xterm.css' in content + + +def test_server_component_css_with_subpath_and_prefix_relative_url(): + component = Terminal() + + port = 6028 + serve({'/subpath/component': component}, port=port, threaded=True, show=False, prefix='prefix') + + # Wait for server to start + time.sleep(1) + + r = requests.get(f"http://localhost:{port}/prefix/subpath/component") + content = r.content.decode('utf-8') + assert 'href="../static/extensions/panel/bundled/terminal/xterm@4.11.0/css/xterm.css' in content From 4835e417ef4ec35d8b1aa2966fbace86018b6748 Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Thu, 31 Mar 2022 21:56:35 +0200 Subject: [PATCH 3/3] Fix flake --- panel/io/resources.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/panel/io/resources.py b/panel/io/resources.py index a6f6cc8e42..fc6522520b 100644 --- a/panel/io/resources.py +++ b/panel/io/resources.py @@ -279,7 +279,7 @@ def css_files(self): for css_file in files: if (css_file.startswith(state.base_url) or css_file.startswith('static/')): if css_file.startswith(state.base_url): - css_file = js_file[len(state.base_url):] + css_file = css_file[len(state.base_url):] if state.rel_path: css_file = f'{state.rel_path}/{css_file}' css_files.append(css_file)