Add comprehensive inline editing capabilities for all project files with visual modification tracking and batch save functionality. Features: - Edit buttons next to each file load button (Project, SVG, CSS, CSV) - Modal editor with syntax validation for JSON files - Real-time preview updates after applying changes - Visual "MODIFIED" badges on edited files - "Save Changes" button to download all modified files - Keyboard shortcuts (Escape to close editor) Implementation: - file-editor.js: New module handling all editor functionality - Editor modal with textarea for content editing - Modification tracking using Set data structure - File-specific validation (JSON syntax checking) - Batch download of all modified files - Visual badge updates for modified state - index.html: UI updates - Edit buttons added to all file items - Modal HTML structure for editor - Save Changes button in controls area - CSS styling for editor modal and modified badges - engine.js: Integration and data storage - Store CSV and CSS content when loaded (for editing) - Enable edit buttons when files are successfully loaded - Works with all loading methods (folder picker, individual files, auto-load) - CSS now loaded via fetch to store content (changed from link href) - Makefile: Include file-editor.js in distribution build User workflow: 1. Load project files (folder picker or individual files) 2. Click "✏️ Edit" button next to any file 3. Make changes in modal editor 4. Click "Apply Changes" to update and see immediate preview 5. Modified files show orange "MODIFIED" badge 6. Click "💾 Save Changes" to download all modified files at once Technical details: - Edit buttons start disabled, enabled when file loads - JSON validation prevents saving invalid configurations - Changes apply immediately to in-memory data - Timeline regenerates automatically after edits - Modified state persists until files are saved - Optional clearing of modified state after download Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
README TimelineSvg
TimelineSvg is a lightweight, browser-based system for generating multi-lane timelines as clean, scalable SVG graphics. It reads simple CSV files, applies a configurable project definition, and renders a fully customizable timeline without requiring any backend or build pipeline.
All processing happens locally in the user’s browser — completely offline and fully private.
Features
- Pure browser execution — no server, no installation
- CSV-driven timelines with customizable field mappings
- Automatic layout of months, lanes, and items
- SVG templates with macros (
{{MONTHS}},{{LANES}}) - Replaceable CSS and templates at runtime
- Internal and external view modes
- Offline SVG export (external view only)
- Extremely easy to extend or theme
How It Works
TimelineSvg is built around three components:
1. project.json — The project configuration
Each project folder provides a project.json, defining:
{
"name": "Example Project",
"dataSource": "example/sample.csv",
"stylesheet": "example/style.css",
"svgTemplate": "example/template.svg",
"settings": {
"timelineMonths": 18
},
"fieldMapping": {
"id": "ID",
"title": "Title",
"lane": "Lane",
"due": ["Due"]
}
}
This controls:
- data source
- styling
- template structure
- date range
- field mapping between CSV and internal timeline model
2. CSV input
The CSV must contain at least:
- a title
- a date (any common format:
YYYY-MM-DD,DD.MM.YYYY, etc.) - a lane/group field
Example:
ID,Title,Due,Lane
1,Implement API,2025-12-01,Backend
2,UI Prototype,2026-02-15,Frontend
3. Template-based SVG rendering
TimelineSvg replaces two macros in the template:
{{MONTHS}}→ month labels and vertical grid lines{{LANES}}→ lane backgrounds, labels, and items
Example template:
<svg xmlns="http://www.w3.org/2000/svg">
<rect width="100%" height="100%" fill="#FFFFFF"/>
{{MONTHS}}
{{LANES}}
</svg>
This makes TimelineSvg highly customizable: You can recreate any design, layout, or branding using your own SVG template.
Usage
1. Open the application
Just open index.html in any modern browser (Chrome, Firefox, Safari, Edge).
2. Load a project
You can choose between:
- Automatic loading - When served via HTTP, the app auto-loads from
project.jsonin project folders (binect/, my-project/, or example/) - Load Project Folder - Click "📂 Load Project Folder" and select an entire project directory. All files (project.json, CSV, CSS, SVG) will be loaded automatically
- Load files individually - Upload project.json first, then manually upload CSV, CSS, and SVG files using the individual file buttons
3. Preview the timeline
The timeline renders automatically when the CSV loads and is displayed inside the viewer container.
4. Switch views
- Internal View: IDs are visible
- External View: IDs are hidden (used for export)
5. Export SVG
Click Download SVG → an external-view SVG is saved to disk.
Project Structure
/
│ index.html
│ engine.js
│ generator.js
│
├─ example/
│ ├─ project.json
│ ├─ style.css
│ ├─ template.svg
│ └─ sample.csv
│
└─ my-project/
├─ project.json
├─ style.css
├─ template.svg
└─ data.csv
Customizing Your Own Project
To create your own timeline project:
- Duplicate the
example/folder - Adjust
project.json(dataSource, mappings, template) - Replace the CSV with your data
- Modify the SVG template for your layout
- Open
index.htmland load your project
TimelineSvg will take care of the rest.
Why SVG?
- infinitely scalable
- editable in design tools
- embeddable in documents, websites, and presentations
- easy to script, style, and customize
Requirements
- Any modern browser
- No build tools
- No server
- No dependencies except PapaParse (bundled by CDN)
xxx