# Archive Browser [โ† Back to ZDDC](../README.md) Your digital filing cabinet - a complete document management system in a single HTML file. No installation, no updates, no cloud required. Just open it and start organizing. **[๐Ÿ”— Open Archive Browser](dist/archive.html)** - Click to use online, or right-click โ†’ "Save Link As" to keep your own copy forever. ## What Makes This Special? This is a "record player with the record" - the entire application travels with the file. Save it to a USB drive, email it to a colleague, or archive it with your project files. It will work exactly the same way in 20 years as it does today. No dependencies, no obsolescence. ## Quick Start 1. **Click "Select Directory"** - Choose your project folder 2. **All folders auto-expand** - See everything at once 3. **Type to filter** - Use the search boxes to find files instantly 4. **Click to sort** - Any column header sorts your data 5. **Download selected** - Check boxes and download as ZIP ## Overview The archive browser presents a two-pane interface: - **Navigation Pane** (left): Your folder hierarchy with smart filtering - **Content Area** (right): All your files in a searchable, sortable table ## User Interface Layout ### Navigation Pane The navigation pane displays a hierarchical folder structure with: 1. **Grouping Folders** (top level) - Folders that don't match transmittal naming convention - Used for organizational hierarchy (e.g., permissions, departments) - Has its own autofilter input - Supports multi-select (Shift+Click, Ctrl+Click) - **Right-click context menu** for recursive select/deselect of folder trees - **Collapsible section** with toggle button to hide/show when not needed - **Resizable height** - drag the divider to adjust space allocation - Default: 250px height, can be collapsed to header-only - Folders named "incoming" (case-insensitive) are excluded from default selection 2. **Transmittal Folders** (displayed in a flat sorted list in a separate section below the grouping folders) - Follow naming convention: `YYYY-MM-DD_TRACKINGNUMBER (STATUS) - TITLE` - Example: `2025-09-15_A101-203 (IFC) - Site Plan` - Has its own autofilter input - Supports multi-select - Only folders within selected grouping folders are visible - **Grouped by date** with collapsible date headers showing folder count - **Expand/collapse all** toggle button in section header - Date removed from individual folder display (shown in group header instead) - All transmittal folders selected by default (except those under "incoming") ### Content Area Displays files from all selected transmittal folders in a unified table. **Table Columns**: 1. **Tracking Number** - Extracted from filename 2. **Title** - Extracted from filename 3. **Revisions** - Shows all available revisions/documents for a tracking number - Each revision shows: revision identifier, status, and file links - Multiple files per revision supported (e.g., PDF, DWG) - Checkboxes for selecting individual files The Revisions column must provide an efficient way to both display all revisions and modifiers compactly while allowing for efficient selection of specific revisions. ## Core Features ### ๐Ÿ” Smart Search & Filter - **Find anything instantly** - Type in any filter box to narrow results - **Power search** - Use `+must have` or `-exclude` for precise filtering - **Excel-like sorting** - Click any column header to sort your data ### ๐Ÿ“ Organize Your Files - **Drag & drop** - Drop files onto folders to create organized transmittals - **Smart naming** - Automatically extracts document info from ZDDC filenames - **Version tracking** - See all revisions of a document in one place - **Batch operations** - Select multiple files for download or export ### ๐Ÿ”’ Data Integrity - **SHA-256 checksums** - Verify files haven't changed - **Hash caching** - Fast rescanning of large archives - **Export to ZIP/CSV** - Take your data with you Files are sorted by tracking number first, then by revision in proper order (~A, A, B, C+C1, C, 1, 2, 3, etc.) ## Technical Architecture ### Frontend Stack - **Vanilla JavaScript**: No framework dependencies - **Inline CSS**: Self-contained styling - **File System Access API**: Local directory access - **Web Crypto API**: SHA-256 file hashing ### Build System - Modular architecture with separate CSS and JavaScript files - Build script concatenates and inlines all assets - Produces single self-contained HTML file - No external dependencies in final output Uses the same build.sh structure as the transmittal project (requires Git Bash on Windows). ## Additional Features ### File Operations - **Download Selected**: Creates ZIP file of checked files - **Export CSV**: Exports only visible/filtered files with metadata - **Drag & Drop**: Drop files onto table rows to copy metadata - **File Renaming**: Modal for fixing non-conforming filenames ### Context Menu Operations (Right-click on Grouping Folders) - **Select This & Subfolders**: Recursively select folder and all descendants - **Deselect This & Subfolders**: Recursively deselect folder and all descendants - **Select All Visible**: Select all currently visible grouping folders - **Deselect All**: Clear all grouping folder selections Users can drag and drop files onto a grouping folder. The system creates a transmittal folder with the correct naming convention and displays a dialog where users can: - Confirm/edit the transmittal folder name - Review and correct file names to ensure ZDDC compliance - See preview of final file organization before committing ### Data Management - **SHA-256 Hashing**: Integrity verification for all files - **Hash Cache**: `.hashes.json` file to avoid re-hashing unchanged files - **Refresh**: Re-scan directories for changes Implements hash caching by creating a `.hashes.json` file in each scanned directory (when writable) to store file hashes and modification times, significantly improving performance on subsequent scans. ## Implementation Details ### Resizable Interface - **Column Resizing**: Draggable column borders with persistent widths - **Navigation Pane Width**: Drag horizontal divider between nav pane and content area - **Section Heights**: Drag vertical divider between grouping and transmittal sections - Visual feedback (blue highlight) when hovering or actively resizing - Minimum/maximum sizes enforced to prevent unusable layouts ### Performance Optimizations - Standard scrolling with sticky headers (no virtual scrolling needed) - Debounced search inputs - Progressive file scanning - Cached file metadata The table uses standard scrolling with sticky headers for navigation. No pagination or virtual scrolling is needed. ### Folder Hierarchy Logic 1. **Grouping Folders**: Any folder not matching transmittal convention 2. **Transmittal Folders**: Match `YYYY-MM-DD_TRACKINGNUMBER (STATUS) - TITLE` 3. **Selection Cascade** (strict enforcement): - If grouping folders exist, at least one must be selected to see transmittal folders - Selecting grouping folder shows only its transmittal folders - At least one transmittal folder must be selected to see files - Selecting transmittal folders shows only their files - Multiple selections combine results - **Default Selection**: All folders selected except "incoming" and its subfolders ### File Grouping Logic Files with the same tracking number are grouped together, showing: - Base revisions (A, B, C, 1, 2, 3) - Revision modifiers (+C1, +B1, +N1) - Draft indicators (~A, ~B) - Multiple file types per revision ## Filtering Each column has a text filter input. The syntax supports simple boolean logic per field: - Required token: `+token` must be present in that field. - Prohibited token: `-token` must not be present. - Parentheses group subโ€‘expressions: `(+revA plan)`. - Terms (without +/โˆ’) are ORโ€™ed within the same field: `as-built asbuilt`. - Wildcard support: `+token*` (starts with), `*token` (ends with), `token` (contains) Examples: - Only PDFs: in EXT filter, type `+pdf`. - Exclude superseded: in Status, type `-superseded`. - Revisions A or B, but not Draft: in Revision, type `revA revB -draft`. - Title contains both "floor" and "plan": Title `+floor +plan`. ## UI/UX Considerations ### Visual Design - Clean, professional interface - Hover states for interactive elements - Clear visual hierarchy - Consistent spacing and alignment - Status color coding (optional) Status codes are prominently displayed alongside revisions without color coding. The status is always shown as part of the revision information for clarity. ### Accessibility - Keyboard navigation support (Ctrl+Click, Shift+Click, Ctrl+A) - Right-click context menus for advanced operations - ARIA labels for screen readers - High contrast mode support - Resizable text and interface elements - Collapsible sections to reduce visual clutter ### Error Handling - Graceful handling of permission errors - Clear error messages - Recovery options - Console logging for debugging ## Browser Compatibility - **Required**: Chromium-based browsers (Chrome, Edge, Brave) for File System Access API - **Fallback**: Display message for unsupported browsers - **Print Styles**: Optimized for US Letter (8.5ร—11") - **Responsive Design**: Works on desktop and tablet screens ## Windows Path Length Limitations The application includes safeguards for Windows' 260-character path limit: - **Path Length Monitoring**: Warns when paths exceed 240 characters - **Depth Limits**: Stops scanning directories deeper than 10 levels - **Path Truncation**: Long paths are truncated in the UI while maintaining full paths internally - **Graceful Failure**: Files with paths too long are skipped with console warnings - **Display Optimization**: Shows `...` with shortened paths for better readability To enable long path support in Windows 10 (1607+): 1. Run `gpedit.msc` as Administrator 2. Navigate to: Computer Configuration โ†’ Administrative Templates โ†’ System โ†’ Filesystem 3. Enable "Enable Win32 long paths" 4. Restart your computer ## Security Considerations - No data leaves the browser - All processing happens locally - Directory permissions requested per-session - No tracking or analytics ## File Preview Clicking on a file link opens it in a new browser tab if the browser can display it (PDFs, images, text files), otherwise triggers a download. ## Deliverables 1. **Single HTML file** (`archive.html`) containing all functionality 2. **Modular source code** organized as: - `js/` - JavaScript modules - `css/` - CSS modules - `template.html` - HTML template - `build.sh` - Build script 3. **Documentation** embedded in the final HTML file ## CSS/JS Architecture ### CSS Files (loaded in dependency order) | File | Size | Purpose | |------|------|---------| | `css/base.css` | 1.5KB | Core styles, layout reset, typography, theme variables | | `css/components.css` | 10KB | Button styles, inputs, modal dialogs, menu systems | | `css/layout.css` | 3.7KB | Page structure, header/footer, container width | | `css/table.css` | 3.4KB | Table styling, cell padding, border styles, sorting headers | | `css/print.css` | 2.2KB | Print-specific styles, hide interactive elements | ### JavaScript Modules (loaded in dependency order) | File | Size | Purpose | |------|------|---------| | `js/parser.js` | 7.4KB | ZDDC filename parsing, revision extraction, status validation | | `js/hash.js` | 5.9KB | SHA-256 hashing for file integrity verification | | `js/drag-drop.js` | 9.1KB | File system access API integration, drag-and-drop handling | | `js/directory.js` | 11.9KB | Directory scanning, folder tree rendering, path handling | | `js/filtering.js` | 8.8KB | Boolean filter logic, column filtering, show/hide rows | | `js/table.js` | 26KB | Table rendering, row management, selection handling | | `js/export.js` | 8.2KB | JSON export, file download with ZDDC naming | | `js/events.js` | 18.9KB | Event bus, state change notifications, UI coordination | | `js/app.js` | 19.6KB | Main entry point, initialization, state management |