icon = '▶' if is_collapsed else '▼'
content_style = ' style="display: none;"' if is_collapsed else ''
+ file_word = "file" if tree.count == 1 else "files"
+ sample_word = "sample" if tree.samples == 1 else "samples"
section_html = f'''
<div class="type-section">
<div class="type-header" onclick="toggleTypeSection(this)">
<span class="type-icon">{icon}</span>
<span class="type-title">{type_names[module_type]}</span>
- <span class="type-stats">({tree.count} files, {tree.samples:,} samples)</span>
+ <span class="type-stats">({tree.count} {file_word}, {tree.samples:,} {sample_word})</span>
</div>
<div class="type-content"{content_style}>
'''
parts = []
# Render folder header (collapsed by default)
+ file_word = "file" if node.count == 1 else "files"
+ sample_word = "sample" if node.samples == 1 else "samples"
parts.append(f'{indent}<div class="folder-node collapsed" data-level="{level}">')
parts.append(f'{indent} <div class="folder-header" onclick="toggleFolder(this)">')
parts.append(f'{indent} <span class="folder-icon">▶</span>')
parts.append(f'{indent} <span class="folder-name">📁 {html.escape(name)}</span>')
- parts.append(f'{indent} <span class="folder-stats">({node.count} files, {node.samples:,} samples)</span>')
+ parts.append(f'{indent} <span class="folder-stats">'
+ f'({node.count} {file_word}, {node.samples:,} {sample_word})</span>')
parts.append(f'{indent} </div>')
parts.append(f'{indent} <div class="folder-content" style="display: none;">')