diff --git a/main.py b/main.py index 9e631ac..4d24ac2 100644 --- a/main.py +++ b/main.py @@ -792,43 +792,13 @@ def _render_folder_index_page( template = string.Template(content) - # Build folder index sidebar HTML - prefix = path.rstrip("/") or "" - lines: list[str] = [] - - # Breadcrumb - lines.append("") - - # Folders - for folder in folders: - folder_path = f"{prefix}{folder}/" if prefix else f"{folder}/" - lines.append( - f'
' - f'📁 {folder}' - f"
" - ) - - # Files - for file in files: - file_path = f"{prefix}{file}" if prefix else file - href_params = "" - if current_order is not None and current_delay is not None: - href_params = f"?order={current_order}&delay={current_delay}" - lines.append( - f'
' - f'📄 {file}' - f"
" - ) - - folder_index_html = "\n".join(lines) + # Build folder index sidebar HTML using recursive tree renderer + folder_path = path.rstrip("/") or None + folder_index_html = _render_folder_index_html( + current_path=folder_path, + current_order=current_order, + current_delay=current_delay, + ) content = template.substitute( img_url="#", diff --git a/tests/test_navigate.py b/tests/test_navigate.py index 56f58c9..167f43b 100644 --- a/tests/test_navigate.py +++ b/tests/test_navigate.py @@ -106,6 +106,24 @@ class TestNavigatePage: response = await client_zip_navigate.get("/navigate/") assert "/navigate/top.txt" in response.text + async def test_subfolder_index_shows_nested_files( + self, client_zip_navigate: AsyncClient + ) -> None: + """Subfolder index shows files within that folder.""" + response = await client_zip_navigate.get("/navigate/folder/") + assert response.status_code == 200 + assert "/navigate/folder/deep.txt" in response.text + assert "/navigate/folder/image.png" in response.text + + async def test_subfolder_index_shows_full_tree( + self, client_zip_navigate: AsyncClient + ) -> None: + """Subfolder index sidebar shows full tree from root.""" + response = await client_zip_navigate.get("/navigate/folder/") + assert response.status_code == 200 + # Should still show root-level items in the tree + assert "/navigate/top.txt" in response.text + async def test_file_page_has_sidebar( self, client_zip_navigate: AsyncClient ) -> None: