🎉 Neu in Version 1.8.0
🐛 Löschen via Rechtsklick repariert
Entitäten, Beziehungen und Attribute können wieder über das Kontextmenü (Rechtsklick) gelöscht werden. Der Fehler lag in der deleteTarget()-Funktion: Da sowohl Entitäten als auch Beziehungen ein attributes-Array besitzen, wurde die Unterscheidung nicht korrekt getroffen. Die Erkennung prüft jetzt – analog zum Kontextmenü-Aufbau – zusätzlich auf das Vorhandensein von x/y (Entität) bzw. a/b (Beziehung).
🚧 Elemente bleiben auf der Zeichenebene sichtbar
Beim manuellen Verschieben von Entitäten per Drag & Drop können diese nicht mehr über den linken oder oberen Rand der Zeichenfläche hinaus bewegt werden und damit aus dem sichtbaren Bereich verschwinden. Zusätzlich wird die Canvas-Größe nach jedem abgeschlossenen Drag neu berechnet, sodass weit nach rechts oder unten gezogene Elemente automatisch scrollbar bleiben.
PDF-Dateiname (bereits in v1.7.7)
Der PDF-Export verwendet denselben Projektnamen aus dem Feld Dateiname wie PNG- und SVG-Export.
🖼 Große Zeichenflächen werden automatisch eingepasst
Große ERM-Diagramme werden jetzt beim Laden und beim Ändern der Fenstergröße so eingepasst, dass alle Teile des Diagramms sichtbar und erreichbar bleiben. Das betrifft besonders importierte oder manuell weit auseinandergezogene Modelle, bei denen einzelne Attribute, Entitäten oder Beziehungsrauten zuvor außerhalb der Zeichenfläche liegen konnten.
- ✅ Die Canvas-Größe wird dynamisch aus den tatsächlichen Diagrammgrenzen berechnet.
- ✅ Entitäten, Attribute, Beziehungsattribute und Beziehungrauten werden bei der Größenberechnung berücksichtigt.
- ✅ Elemente mit negativen Koordinaten werden beim Laden automatisch mit Sicherheitsabstand in den sichtbaren Bereich verschoben.
- ✅ Beim Fenster-Resize wird die Zeichenfläche nicht mehr versehentlich wieder auf eine zu kleine Standardgröße reduziert.
- ✅ Die Funktion zum Einsammeln ausgerissener Elemente arbeitet robuster und berücksichtigt nun auch große Diagrammausdehnungen.
Technischer Hintergrund
Die Version 1.7.7 erweitert die interne Bounds-Berechnung. Nicht nur die Positionen der Entitäten, sondern auch die Ausdehnung der Attribute, Beziehungsattribute und Rauten fließt in die Berechnung der notwendigen Zeichenfläche ein. Dadurch bleiben weit außen liegende Diagrammteile scrollbar und wieder per Maus oder Touch erreichbar.
💾 Autosave – Diagramm überlebt jeden Browser-Reload
Das aktuelle Diagramm wird bei jeder Änderung automatisch im lokalen Browser-Speicher (localStorage) gesichert. Beim nächsten Öffnen (auch nach Reload oder versehentlichem Schließen) wird es automatisch wiederhergestellt.
- ✅ Autosave bei jeder Modelländerung (Entität/Beziehung/Attribut hinzufügen, löschen, umbenennen)
- ✅ Autosave nach jedem Drag (Element verschieben)
- ✅ Autosave beim Laden einer JSON-Datei
- ✅ Wiederherstellung beim Seitenstart mit Hinweis + Zeitstempel
- ✅ Daten bleiben im Browser – keine Cloud, kein Server
🔄 Automatischer Versions-Check
Der Editor prüft alle 5 Minuten, ob eine neuere Version auf dem Server verfügbar ist. Bei einer neueren Version erscheint ein orangener Banner oben im Fenster.
- ✅ Versions-Check beim Start (nach 3 Sek.) und alle 5 Min.
- ✅ Kein nervöses Polling – Server-Fehler werden still ignoriert
- ✅ "Jetzt aktualisieren" speichert erst, dann lädt die Seite neu
- ✅ Banner kann mit ✕ geschlossen werden (kein Zwang)
⚙️ Einrichtung auf dem Server (einmalig):
Damit der Versions-Check funktioniert, muss eine Datei version.json im Root des Webservers liegen:
https://erm.siemens-gymnasium-berlin.de/version.json
Beispielinhalt der Datei:
{
"version": "1.7.7",
"released": "2026-05-11"
}
Bei jedem neuen Release: version auf die neue Versionsnummer setzen. Die Datei version.json liegt dem Release bei.
Ablauf beim Update-Hinweis:
- Schüler hat den Editor seit Tagen geöffnet
- Lehrkraft deployt neue Version + aktualisiert
version.json - Spätestens 5 Min. später erscheint orangener Banner beim Schüler
- Schüler klickt "Jetzt aktualisieren" → Diagramm wird gespeichert → Reload
- Neue Version lädt, Diagramm wird automatisch wiederhergestellt
- Kein Datenverlust!
✨ Hauptfeatures
🎨 Chen-Notation
Vollständige Umsetzung der Chen-Notation mit Rechtecken für Entitäten, Rauten für Beziehungen und Ellipsen für Attribute.
🔄 AutoLayout
Force-directed Algorithmus für automatische, optimale Anordnung mit Kollisionsvermeidung und intelligenter Attribut-Positionierung.
🔢 Kardinalitäten
Flexible 3-Parameter-Steuerung mit direkter absoluter Positionierung für präzise Platzierung.
✅ Live-Validierung
Echtzeit-Überprüfung mit farbigen Badges und automatischer Fehleranzeige inkl. Primärschlüssel-Prüfung.
💾 Multi-Format Export
PNG, SVG, JSON und optimierter PDF-Export (DIN A4) mit automatischer Orientierung.
📱 Responsive
Funktioniert auf Desktop, Tablet und Smartphone mit Touch-Unterstützung.
🔗 Reflexive Beziehungen
Unterstützung für selbstbezügliche Relationen mit Rollenbezeichnungen.
🎯 Raster-Snap
Automatisches Einrasten am 10px-Raster für präzise Anordnung.
🌐 Online verfügbar
Der ERM Editor ist öffentlich zugänglich unter:
https://erm.siemens-gymnasium-berlin.de
Netzwerkzugriff auf diese Domain ist für den Editor erlaubt und erforderlich.
🎮 Bedienung
Entitäten erstellen
- Namen eingeben im Feld "Entitätsname"
- Button "➕ Entität hinzufügen" klicken
- Entität erscheint auf der Zeichenfläche und kann verschoben werden
Attribute hinzufügen
- Entität auswählen (Dropdown "Entität auswählen")
- Attributname eingeben
- Optional: Als Primärschlüssel markieren (Checkbox "Primärschlüssel")
- Button "➕ Attribut hinzufügen" klicken
Beziehungen erstellen
- Namen für die Beziehung eingeben
- Entität A auswählen
- Entität B auswählen
- Kardinalitäten eingeben (z.B. "1", "N", "M", "0..1")
- Optional: Rolle A und Rolle B für reflexive Beziehungen
- Button "➕ Beziehung hinzufügen" klicken
AutoLayout verwenden
- Im Abschnitt "🔄 AutoLayout" den Button "🔄 AutoLayout anwenden" klicken
- Der Force-directed Algorithmus ordnet alle Elemente automatisch an
- Entitäten werden gleichmäßig verteilt
- Attribute werden kreisförmig um Entitäten platziert
- Beziehungsattribute werden ebenfalls optimiert positioniert
Kontextmenü
Rechtsklick auf Elemente öffnet Kontextmenü zum:
- Bearbeiten von Namen
- Löschen von Elementen
- Bearbeiten von Rollen (bei reflexiven Beziehungen)
- Ändern von Attributen (Primärschlüssel-Status)
🔢 Kardinalitäten - Präzise Positionierung
Das 3-Parameter-System (v1.6.3)
| Parameter | Funktion | Standard |
|---|---|---|
| Senkrechter Offset | Abstand der virtuellen Linie von der Verbindungslinie (horizontal: oberhalb, vertikal: links) | 18 |
| Abstand | Horizontaler Abstand zwischen den beiden Kardinalitäten auf der virtuellen Linie | 150 |
| Längs-Verschiebung | Verschiebt beide Kardinalitäten gemeinsam entlang der virtuellen Linie | 0 |
Empfohlene Einstellungen
Für enge Diagramme:
- Senkrechter Offset:
15 - Abstand:
120 - Längs-Verschiebung:
0
Für weitläufige Diagramme:
- Senkrechter Offset:
22 - Abstand:
180 - Längs-Verschiebung:
0
Für lange Beziehungsnamen:
- Längs-Verschiebung erhöhen (z.B.
30oder50) - Damit liegen die Kardinalitäten weiter außen und überlappen nicht mit dem Beziehungsnamen
Technischer Hintergrund (v1.6.3)
Direkte absolute Positionierung
Version 1.6.3 implementiert eine neue, zuverlässigere Methode:
- Horizontale Linien:
cardPosY = diamondConn.y - Math.abs(perpOffset)→ immer oberhalb - Vertikale Linien:
cardPosX = diamondConn.x - Math.abs(perpOffset)→ immer links - Entlang-Richtung nutzt weiterhin Einheitsvektor (ux, uy)
Math.abs()macht die Positionierung robust gegenüber negativen Werten
🔄 AutoLayout - Intelligente Anordnung
Funktionsweise
Der AutoLayout-Algorithmus verwendet ein Force-directed Layout basierend auf physikalischen Kräften:
1. Abstoßungskräfte (Entitäten)
- Alle Entitäten stoßen sich gegenseitig ab
- Verhindert Überlappungen und sorgt für gleichmäßige Verteilung
- Stärke nimmt mit der Entfernung ab (inverse Quadratfunktion)
2. Anziehungskräfte (Beziehungen)
- Verbundene Entitäten ziehen sich an
- Hält zusammengehörige Elemente nah beieinander
- Linearproportional zur Entfernung
3. Intelligente Attribut-Positionierung
- Attribute werden kreisförmig um ihre Entität angeordnet
- Der Algorithmus sucht die größte Lücke zwischen bestehenden Beziehungslinien
- Attribute werden in dieser Lücke platziert → minimale Überschneidungen
- Bei nur einem Attribut: optimale Position wird automatisch gewählt
4. Raster-Snap
- Alle finalen Positionen werden am 10px-Raster ausgerichtet
- Sorgt für saubere, professionelle Darstellung
- Erstellen Sie zuerst Ihr komplettes Datenmodell
- Klicken Sie auf "🔄 AutoLayout anwenden"
- Justieren Sie bei Bedarf einzelne Positionen manuell nach
💾 Export-Funktionen
Verfügbare Formate
| Format | Verwendungszweck | Besonderheiten |
|---|---|---|
| PNG | Präsentationen, Dokumentationen, Websites | Rasterformat, transparent, hohe Qualität |
| SVG | Vektorgrafiken, Webentwicklung, Druckvorstufe | Verlustfrei skalierbar, editierbar |
| JSON | Speichern & Laden, Versionskontrolle, Backup | Komplettes Datenmodell mit allen Metadaten |
| Abgaben, Drucken, Archivierung | DIN A4 optimiert, automatische Orientierung |
PDF-Export (DIN A4 optimiert)
Automatische Optimierung in v1.6.0+
- Bounding-Box-Berechnung: Nur das tatsächliche Diagramm wird erfasst (kein leerer Canvas-Bereich)
- Automatische Orientierung:
- Querformat bei breiten Diagrammen (Breite > Höhe)
- Hochformat bei hohen Diagrammen (Höhe > Breite)
- Zentrierte Darstellung: Das Diagramm wird mittig auf der A4-Seite platziert
- Automatische Skalierung: Bei Bedarf wird das Diagramm verkleinert, um auf eine Seite zu passen
- 15mm Rand: Professioneller Seitenrand rundherum
- Dateiname: Der Name aus dem Feld Dateiname wird auch beim PDF-Druckfenster als Dokumenttitel gesetzt.
Dateiname anpassen
Im Bereich "💾 Datei-Verwaltung" können Sie einen Dateinamen eingeben:
- Dieser Name wird für PNG-, SVG- und PDF-Exporte verwendet
- Fallback: "erm-model" wenn das Feld leer ist
- Dateiendung wird automatisch ergänzt
💡 Tipps & Tricks
Allgemeine Tipps
- Speichern nicht vergessen: Exportieren Sie regelmäßig als JSON, um Ihre Arbeit zu sichern
- Raster nutzen: Elemente rasten automatisch am 10px-Raster ein für saubere Ausrichtung
- Tastenkombinationen:
Strg+S(Windows) oderCmd+S(Mac) zum schnellen Speichern - Validierung beachten: Das farbige Badge zeigt Fehler sofort an
Problemlösungen
Kardinalitäten überlappen sich:
- Abstand erhöhen (z.B. von 150 auf 180)
- Oder: Längs-Verschiebung anpassen
Kardinalitäten zu weit von der Raute entfernt:
- Abstand verringern (z.B. von 150 auf 120)
- Senkrechter Offset anpassen (z.B. von 18 auf 15)
Kardinalitäten überlappen mit Beziehungsnamen:
- Längs-Verschiebung erhöhen (z.B. auf 40 oder 50)
- Dadurch wandern die Kardinalitäten weiter nach außen
Attribute überlappen mit Beziehungslinien:
- "🔄 AutoLayout anwenden" - der Algorithmus findet die optimale Lücke
- Oder: Attribute manuell verschieben
Diagramm zu groß für PDF:
- AutoLayout verwenden für kompaktere Anordnung
- Oder: Entitäten manuell näher zusammenschieben
- PDF skaliert automatisch, aber kleinere Diagramme sind besser lesbar
Best Practices für große Diagramme
- Zentrale Entitäten in die Mitte platzieren
- Verwandte Entitäten gruppieren
- AutoLayout als Startpunkt verwenden
- Kardinalitäts-Abstand bei vielen Beziehungen reduzieren (120-130)
- Regelmäßig zwischenspeichern (JSON-Export)
⚙️ Technische Details
Systemanforderungen
- Browser: Chrome 90+, Firefox 88+, Safari 14+, Edge 90+
- Mobile: iOS Safari, Chrome Mobile, Samsung Internet
- JavaScript: Muss aktiviert sein
- Canvas-Support: Wird benötigt für Zeichnung
Architektur
- Single-File-Application: Komplett in einer HTML-Datei
- Keine externen Abhängigkeiten: Funktioniert offline
- Canvas API: Für performante Rendering
- JSON-Datenmodell: Einfach zu speichern und zu laden
- Event-driven: Reaktive UI-Updates
Datenmodell-Struktur
Das exportierte JSON enthält:
- entities: Array mit allen Entitäten (Name, Position, Attribute)
- relationships: Array mit allen Beziehungen (Name, Entitäten, Kardinalitäten, Rollen)
- displaySettings: Kardinalitäts-Parameter, Sidebar-Breite
- metadata: Editor-Version, Erstellungs-/Änderungsdatum, Autor
Kompatibilität
- Dateien aus älteren Versionen können geladen werden
- Fehlende Parameter werden mit Standardwerten ergänzt
- Neue Features sind abwärtskompatibel
https://erm.siemens-gymnasium-berlin.de gehostet. Netzwerkzugriff auf diese Domain ist erforderlich und erlaubt.
📋 Versionshistorie
Version 1.8.0 (Juni 2026) Aktuell
- 🐛 Löschen via Rechtsklick repariert: Entitäten, Beziehungen und Attribute können wieder zuverlässig über das Kontextmenü gelöscht werden. Der Erkennungstest in
deleteTarget()unterschied bisher Entitäten und Beziehungen nicht korrekt (beide haben einattributes-Array), was dazu führte, dass Beziehungen als Entitäten behandelt wurden. - 🚧 Elemente bleiben auf der Zeichenebene: Beim manuellen Verschieben (Drag) können Entitäten nicht mehr über den oberen oder linken Rand der Zeichenfläche hinaus bewegt werden und damit verschwinden. Der Canvas wird nach jedem Drag automatisch neu berechnet, sodass auch nach rechts/unten gezogene Elemente erreichbar bleiben.
- 🔢 Versionsnummer auf 1.8.0 angehoben.
Version 1.7.7 (Mai 2026)
- 📄 PDF-Dateiname korrigiert: Der PDF-Export nutzt nun den angegebenen Dateinamen als Dokumenttitel des Druckfensters. Dadurch schlägt der Browser beim Speichern als PDF denselben Namen vor wie bei PNG und SVG.
Version 1.7.6 (Mai 2026)
- 🖼 Dynamische Zeichenfläche: Große ERM-Diagramme werden beim Laden und bei Fenstergrößenänderungen automatisch eingepasst, sodass alle Teile sichtbar und wieder ansprechbar bleiben.
- 📍 Automatisches Zurückholen: Elemente mit negativen Koordinaten werden beim Laden in den erreichbaren Bereich verschoben.
- ⟲ Einsammel-Funktion verbessert: Berücksichtigt jetzt Entitäten, Attribute, Beziehungsattribute und Beziehungsrauten bei der Größenberechnung.
- 🔧 Touch-Zoom korrigiert: kleiner JavaScript-Syntaxfehler im Pinch-Zoom-Block behoben.
Version 1.7.2 (April 2026)
- 💾 Autosave: Diagramm wird bei jeder Änderung in localStorage gesichert
- 🔄 Autorestore: Diagramm wird beim Seitenstart automatisch wiederhergestellt
- 🔔 Versions-Check: Prüft alle 5 Min. auf neue Versionen via
version.json - 🟠 Update-Banner: Zeigt Hinweis bei neuer Version – "Aktualisieren" speichert erst, dann Reload
- 📄 version.json: Neue Server-Datei für Versions-Management
Version 1.7.1 (April 2026)
- 🐛 Erkennungslogik Entität/Beziehung korrigiert
- 🎛️ Konvertierungs-Dialog: Auswahl der zu verbindenden Entitäten
- 🎯 Intelligente Positionierung bei Beziehung→Entität
Version 1.7.0 (April 2026)
- 🎓 Erstes Feature: Konvertierung Entität ↔ Beziehung (hatte noch Bugs)
Version 1.6.5 (Februar 2026)
- 🔄 AutoLayout Verbesserungen: Kompaktere Anordnung mit reduzierten Spacing-Werten
- 🐛 KRITISCHER FIX: Canvas-Overflow behoben - Entitäten werden nicht mehr herausgetrieben
- ✅ Canvas-Grenzen implementiert (max 1200x1000px)
- ⚡ Schwächere repulsive Forces und bessere Attribute-Positionierung
Version 1.6.4 (Februar 2026)
- 🖱️ Zoom-Fix: Mouse Events bei allen Browser-Zoom-Leveln funktionieren
- ✅
canvasXY()zoom-aware mitcurrentZoom-Faktor - 🔧 Alle Touch-Event-Handler konsistent aktualisiert
- 📱 Kontextmenü-Trigger funktioniert zuverlässig
Version 1.6.0 (Februar 2026)
- 🔄 AutoLayout: Force-directed Algorithmus für automatische Anordnung
- 🎯 Intelligente Attribut-Positionierung mit Lücken-Erkennung
- ✅ Primärschlüssel-Validierung: Warnung bei mehreren PKs pro Entität
- 📄 PDF-Export optimiert: DIN A4 mit Bounding-Box und auto-Orientierung
- 🔗 Links auf
erm.siemens-gymnasium-berlin.degesetzt - 🐛 Bugfix: Duplizierten JavaScript-Block entfernt (~280 Zeilen)
Version 1.5.2 (Januar 2026)
- 🎨 UI-Verbesserungen und Bugfixes
- 📝 Verbesserte Fehlerbehandlung
- 🔧 Performance-Optimierungen
Version 1.4.0 (Januar 2026)
- ✅ Verbessertes Validierungs-UI mit farbigen Badges
- 📋 Editierbares Datenmodell-Textfeld (vorher "Debug")
- 💾 Dynamische Dateinamen bei PNG/SVG/PDF-Export
- 🎨 Tool-Gruppierung mit farbigen Boxen
- 🔧 UTF-8 Encoding-Probleme behoben
- 📱 Verbesserte Touch-Unterstützung
Version 1.3.3 (Januar 2026)
- 🐛 SVG-Export Bugfixes
- 📝 README-Dokumentation aktualisiert
- 🔧 Stabilität-Verbesserungen
Version 1.2.1 (Januar 2026)
- 🎯 Revolutionäres 3-Parameter-System: Virtuelle Parallellinie für Kardinalitäten
- 📐 Intuitive Parameter: Senkrechter Offset, Abstand, Längs-Verschiebung
- 🔄 Automatische Anpassung für alle Orientierungen
- 📚 Umfangreiche Dokumentation mit ASCII-Diagrammen
Version 1.2.0 (Januar 2026)
- 🎛️ Dropdown-Interface für Kardinalitäts-Positionen
- ⚡ Live-Updates: Keine "Apply"-Buttons mehr nötig
- 🎯 5 Presets für verschiedene Orientierungen
- 🔧 Verbesserte Benutzerfreundlichkeit
Version 1.1.0 (Januar 2026)
- 🔄 Reflexive Beziehungen mit Rollenbezeichnungen
- 📐 Vektorbasierte Kardinalitäts-Positionierung
- 🎨 Kontextmenü für Bearbeitung
- 💾 Metadaten im JSON-Export
Version 1.0.1 (Januar 2026)
- 🎉 Erste stabile Version
- 📐 Chen-Notation vollständig implementiert
- 💾 Multi-Format Export (PNG, SVG, JSON)
- ✅ Live-Validierung
- 📱 Responsive Design