Reports Directory
This directory contains modules responsible for generating various types of reports within SageUtils. The report generation functionality has been refactored into multiple focused modules for better maintainability and separation of concerns.
Files
reportGenerator.js (Main Orchestrator)
Purpose: Main orchestrator for HTML report generation
Lines: 863 (51% smaller after refactoring!)
Complexity: Medium (reduced from High)
Key Functions:
generateHtmlContent(options): Main report generation orchestratorgenerateHtmlContentWithProgress(options): Report generation with progress trackinggenerateTableRows(models, options): Generate table rows for modelsgenerateTableRowsWithProgress(models, options): Table generation with progress trackingopenHtmlReport(htmlContent, title): Opens generated report in new window
Re-exports for External Compatibility:
escapeHtml,formatFileSizefrommodelFormatters.js
htmlTemplates.js (Template Engine)
Purpose: HTML document templates, CSS styles, and client-side JavaScript
Lines: 595
Complexity: Medium
Key Functions:
generateCssStyles(): Complete CSS styling systemgenerateClientSideJs(sortBy): Interactive JavaScript functionalitygenerateHtmlDocumentStart(currentDateTime, cssStyles, clientJs): Document headergenerateModelStatsSection(...): Statistics and filter information displaygenerateTableSection(sectionTitle, modelCount, tableRows, visibleColumns): Complete table sectionsgenerateTableHeaders(visibleColumns): Table header generationgenerateHtmlDocumentEnd(): Document footer
modelSorting.js (Sorting & Grouping)
Purpose: Model sorting and grouping logic
Lines: 216
Complexity: Medium
Key Functions:
sortModels(models, sortBy): Sort models by various criteriagroupModelsByCivitaiId(models): Group models by Civitai IDgenerateGroupInfo(models): Generate grouping metadata
modelDeduplication.js (Duplicate Detection)
Purpose: Model deduplication and path normalization
Lines: 145
Complexity: Low
Key Functions:
deduplicateModels(models): Remove duplicate models from arraysnormalizePath(filePath): Normalize file paths for comparison
modelFormatters.js (Utility Functions)
Purpose: Formatting and utility functions
Lines: 75
Complexity: Low
Key Functions:
getFileSize(filePath): Retrieve file size from serverescapeHtml(str): HTML entity escapingformatFileSize(bytes): Human-readable file size formattinggetBaseModelStyle(baseModel): CSS styling for model types
Architecture
The reports directory is now organized with clear separation of concerns:
js/reports/
├── reportGenerator.js (main orchestrator, external API)
├── htmlTemplates.js (HTML/CSS/JS templates)
├── modelSorting.js (sorting & grouping logic)
├── modelDeduplication.js (duplicate detection)
└── modelFormatters.js (utility functions)
Dependencies:
../shared/civitai.js- Civitai API integration../shared/constants.js- Configuration constants
Refactoring Benefits
This modular structure provides:
- Better Maintainability: Each module has a single responsibility
- Easier Testing: Smaller, focused modules are easier to test
- Improved Performance: Better tree-shaking and loading efficiency
- Enhanced Collaboration: Multiple developers can work on different aspects
- Code Reusability: Components can be imported independently
Development Guidelines
When working with the reports modules:
- Single Responsibility: Keep each module focused on its specific purpose
- Clear Dependencies: Maintain clean import/export boundaries
- Consistent APIs: Follow established patterns for function signatures
- Comprehensive Documentation: Include JSDoc comments for all public functions
- Performance Considerations: Be mindful of large model collections
- Browser Compatibility: Test interactive features across browsers
Future Enhancements
The modular structure makes it easier to add new features:
- CSV/Excel export modules
- PDF report generators
- Custom template themes
- Report caching and optimization
- Advanced filtering and search
- Real-time report updates
Refactoring History
Original: Single monolithic file (1766 lines)
Current: 5 focused modules (1894 total lines, 51% main file reduction)
Status: ✅ Refactoring Complete