(stats, fallback)
| 4843 | } |
| 4844 | |
| 4845 | function buildFolderSummaryHTML(stats, fallback) { |
| 4846 | const safeTitle = (key, fallbackText) => { |
| 4847 | const val = t(key); |
| 4848 | return val && val !== key ? val : fallbackText; |
| 4849 | }; |
| 4850 | const fmtCount = (val) => Number.isFinite(val) ? val.toLocaleString() : "-"; |
| 4851 | |
| 4852 | const folders = Number.isFinite(stats?.folders) ? stats.folders : fallback?.folders; |
| 4853 | const files = Number.isFinite(stats?.files) ? stats.files : fallback?.files; |
| 4854 | const bytes = Number.isFinite(stats?.bytes) ? stats.bytes : fallback?.bytes; |
| 4855 | |
| 4856 | const folderTitle = safeTitle("total_folders", "Total folders"); |
| 4857 | const fileTitle = safeTitle("total_files", "Total files"); |
| 4858 | const sizeTitle = safeTitle("total_size", "Total size"); |
| 4859 | |
| 4860 | const sizeStr = Number.isFinite(bytes) ? formatSize(bytes) : "-"; |
| 4861 | |
| 4862 | return ` |
| 4863 | <span class="fr-summary-item" title="${escapeHTML(folderTitle)}"> |
| 4864 | <span class="material-icons" aria-hidden="true">folder</span> |
| 4865 | <span class="fr-summary-count">${fmtCount(folders)}</span> |
| 4866 | </span> |
| 4867 | <span class="fr-summary-sep" aria-hidden="true">·</span> |
| 4868 | <span class="fr-summary-item" title="${escapeHTML(fileTitle)}"> |
| 4869 | <span class="material-icons" aria-hidden="true">insert_drive_file</span> |
| 4870 | <span class="fr-summary-count">${fmtCount(files)}</span> |
| 4871 | </span> |
| 4872 | <span class="fr-summary-sep" aria-hidden="true">·</span> |
| 4873 | <span class="fr-summary-item" title="${escapeHTML(sizeTitle)}"> |
| 4874 | <span class="material-icons" aria-hidden="true">storage</span> |
| 4875 | <span class="fr-summary-count">${escapeHTML(sizeStr)}</span> |
| 4876 | </span> |
| 4877 | `.trim(); |
| 4878 | } |
| 4879 | |
| 4880 | function refreshFileSummaryForPane(paneKey) { |
| 4881 | const actionsContainer = document.getElementById("fileListActions"); |
no test coverage detected