177 lines
No EOL
5.7 KiB
Markdown
177 lines
No EOL
5.7 KiB
Markdown
# Calendar Plantempus
|
|
|
|
En moderne, event-drevet kalenderapplikation bygget med TypeScript og ASP.NET Core.
|
|
|
|
## Projekt Information
|
|
|
|
- **Projekt ID:** 8ecf2aa3-a2e4-4cc3-aa18-1c4352f00ff1
|
|
- **Repository:** Calendar (afb8a8ec-cdbc-4c55-8631-fd0285974485)
|
|
- **Status:** Under aktiv udvikling
|
|
|
|
## Teknisk Arkitektur
|
|
|
|
- **Frontend:** TypeScript med esbuild som bundler
|
|
- **Arkitektur:** Event-drevet med CustomEvents (`document.dispatchEvent`/`addEventListener`)
|
|
- **Backend:** ASP.NET Core Kestrel server
|
|
- **Styling:** Modulær CSS struktur uden eksterne frameworks
|
|
- **Bundling:** esbuild for TypeScript transpilering og bundling
|
|
|
|
## Arkitekturelle Principper
|
|
|
|
- **Ingen global state** - Alt state håndteres i de relevante managers
|
|
- **Event-drevet kommunikation** - Alle komponenter kommunikerer via DOM CustomEvents
|
|
- **Modulær opbygning** - Hver manager har et specifikt ansvarsområde
|
|
- **Ren DOM manipulation** - Ingen eksterne JavaScript frameworks (React, Vue, etc.)
|
|
- **Custom HTML tags** - Semantisk markup med custom elements
|
|
|
|
## Implementerede Komponenter
|
|
|
|
Projektet følger en manager-baseret arkitektur, hvor hver manager er ansvarlig for et specifikt aspekt af kalenderen:
|
|
|
|
### 1. CalendarManager
|
|
Hovedkoordinator for alle managers
|
|
- Initialiserer og koordinerer alle andre managers
|
|
- Håndterer global konfiguration
|
|
- Administrerer kalender lifecycle
|
|
|
|
### 2. ViewManager
|
|
Håndterer kalendervisninger
|
|
- Skifter mellem dag/uge/måned visninger
|
|
- Opdaterer UI baseret på den valgte visning
|
|
- Renderer kalender grid struktur
|
|
|
|
### 3. NavigationManager
|
|
Håndterer navigation
|
|
- Implementerer prev/next/today funktionalitet
|
|
- Håndterer dato navigation
|
|
- Opdaterer week info (uge nummer, dato range)
|
|
|
|
### 4. EventManager
|
|
Administrerer events
|
|
- Håndterer event lifecycle og CRUD operationer
|
|
- Loader og synkroniserer event data
|
|
- Administrerer event selection og state
|
|
|
|
### 5. EventRenderer
|
|
Renderer events i DOM
|
|
- Positionerer events korrekt i kalender grid
|
|
- Håndterer event styling baseret på type
|
|
- Implementerer visual feedback for event interactions
|
|
|
|
### 6. DataManager
|
|
Håndterer data operationer
|
|
- Mock data loading for udvikling
|
|
- Event data transformation
|
|
- Data persistence interface
|
|
|
|
### 7. GridManager
|
|
Administrerer kalender grid
|
|
- Opretter og vedligeholder grid struktur
|
|
- Håndterer time slots og positioning
|
|
- Responsive grid layout
|
|
|
|
## CSS Struktur
|
|
|
|
Projektet har en modulær CSS struktur for bedre organisering:
|
|
|
|
- **`calendar-base-css.css`** - Grundlæggende styling og CSS custom properties
|
|
- **`calendar-components-css.css`** - UI komponenter og controls
|
|
- **`calendar-events-css.css`** - Event styling og farver
|
|
- **`calendar-layout-css.css`** - Layout struktur og grid
|
|
- **`calendar-popup-css.css`** - Popup og modal styling
|
|
- **`calendar.css`** - Samlet styling fra POC (bruges i øjeblikket)
|
|
|
|
## Kommende Funktionalitet
|
|
|
|
Baseret på projektstrukturen planlægges følgende komponenter:
|
|
|
|
### Utilities
|
|
- **PositionUtils** - Konvertering mellem pixels og tidspunkter
|
|
- **SnapUtils** - Snap-to-interval funktionalitet
|
|
- **DOMUtils** - DOM manipulation utilities
|
|
|
|
### Interaction Managers
|
|
- **DragManager** - Drag & drop funktionalitet for events
|
|
- **ResizeManager** - Resize funktionalitet for events
|
|
- **PopupManager** - Håndtering af event detaljer og popups
|
|
|
|
### Feature Managers
|
|
- **SearchManager** - Søgefunktionalitet i events
|
|
- **TimeManager** - Current time indicator
|
|
- **LoadingManager** - Loading states og error handling
|
|
|
|
### Avancerede Features
|
|
- Collision detection system for overlappende events
|
|
- Animation system for smooth transitions
|
|
- Event creation funktionalitet (double-click, drag-to-create)
|
|
- Multi-day event support
|
|
- Touch support for mobile enheder
|
|
- Keyboard navigation
|
|
|
|
## Projekt Struktur
|
|
|
|
```
|
|
Calendar Plantempus/
|
|
├── src/ # TypeScript source files
|
|
│ ├── constants/ # Konstanter og enums
|
|
│ ├── core/ # Core funktionalitet
|
|
│ ├── managers/ # Manager klasser
|
|
│ ├── types/ # TypeScript type definitioner
|
|
│ └── utils/ # Utility funktioner
|
|
├── wwwroot/ # Static web assets
|
|
│ ├── css/ # Stylesheets
|
|
│ ├── js/ # Compiled JavaScript
|
|
│ └── index.html # Main HTML file
|
|
├── build.js # esbuild configuration
|
|
├── tsconfig.json # TypeScript configuration
|
|
├── package.json # Node.js dependencies
|
|
└── Program.cs # ASP.NET Core server
|
|
```
|
|
|
|
## Kom i Gang
|
|
|
|
### Forudsætninger
|
|
- .NET 8.0 SDK
|
|
- Node.js (for esbuild)
|
|
|
|
### Installation
|
|
1. Klon repository
|
|
2. Installer dependencies: `npm install`
|
|
3. Build TypeScript: `npm run build`
|
|
4. Start server: `dotnet run`
|
|
5. Åbn browser på `http://localhost:8000`
|
|
|
|
### Development
|
|
- **Build TypeScript:** `npm run build`
|
|
- **Watch mode:** `npm run watch` (hvis konfigureret)
|
|
- **Start server:** `dotnet run`
|
|
|
|
## Event System
|
|
|
|
Projektet bruger et event-drevet system hvor alle komponenter kommunikerer via DOM CustomEvents:
|
|
|
|
```typescript
|
|
// Dispatch event
|
|
document.dispatchEvent(new CustomEvent('calendar:view-changed', {
|
|
detail: { view: 'week', date: new Date() }
|
|
}));
|
|
|
|
// Listen for event
|
|
document.addEventListener('calendar:view-changed', (event) => {
|
|
// Handle view change
|
|
});
|
|
```
|
|
|
|
## Bidrag
|
|
|
|
Dette projekt følger clean code principper og modulær arkitektur. Når du bidrager:
|
|
|
|
1. Følg den eksisterende manager-baserede struktur
|
|
2. Brug event-drevet kommunikation mellem komponenter
|
|
3. Undgå global state - hold state i relevante managers
|
|
4. Skriv semantisk HTML med custom tags
|
|
5. Brug modulær CSS struktur
|
|
|
|
## Licens
|
|
|
|
[Specificer licens her] |