- Introduced multiple JavaScript scripts for handling drag & drop functionality: - `bridge_script.js`: Original implementation with popup prevention. - `bridge_script_debug.js`: Debug version with extensive logging for troubleshooting. - `bridge_script_v2.js`: Enhanced version extending DataTransfer for better integration. - `bridge_script_hybrid.js`: Hybrid approach allowing parallel native file drag. - `bridge_script_drop_intercept.js`: Intercepts drop events for custom handling. - `bridge_script_intercept.js`: Prevents browser drag for ALT+drag, using Qt for file drag. - Added detailed documentation in `SCRIPT_VARIANTS.md` outlining usage, status, and recommended workflows for each script. - Implemented logging features to capture drag events, DataTransfer modifications, and network requests for better debugging. - Enhanced DataTransfer handling to support Windows-specific file formats and improve user experience during drag & drop operations.
6 KiB
🚀 QUICK START - Popup-Problem lösen
Problem Zusammenfassung
- ✅ File-Drop funktioniert (Z:\ Laufwerk)
- ❌ Web-App Popup erscheint nicht nach Drop (Auschecken-Dialog)
Grund: Unser JavaScript verhindert das Browser-Drag-Event mit preventDefault(), daher bekommt die Web-App kein Drop-Event.
🎯 Lösungsstrategie
Phase 1: DEBUGGING (ca. 15-30 Min)
→ Herausfinden WIE das Popup ausgelöst wird
Phase 2: IMPLEMENTATION (ca. 30-60 Min)
→ Popup-Trigger nach File-Drop manuell aufrufen
📋 Phase 1: Debugging - JETZT STARTEN
Schritt 1: Debug-Script aktivieren
# Datei öffnen
code "C:\Development\VS Code Projects\webdrop_bridge\src\webdrop_bridge\ui\main_window.py"
Zeile ~433 in _install_bridge_script() ändern:
# VORHER:
script_path = Path(__file__).parent / "bridge_script.js"
# NACHHER (für Debugging):
script_path = Path(__file__).parent / "bridge_script_debug.js"
Speichern (Ctrl+S).
Schritt 2: Anwendung starten
cd "C:\Development\VS Code Projects\webdrop_bridge"
python -m webdrop_bridge.main
Schritt 3: Browser DevTools öffnen
- Wenn WebDrop Bridge lädt
- F12 drücken → DevTools öffnen
- Console-Tab auswählen
- Sie sollten sehen:
[WebDrop DEBUG] Ready! Perform ALT-drag+drop and watch the logs.
Schritt 4: ALT-Drag+Drop durchführen
-
In der GlobalDAM Anwendung:
- ALT-Taste gedrückt halten
- Asset draggen
- Irgendwo droppen (z.B. auf dem Desktop)
-
Popup sollte erscheinen! (Auschecken-Ja/Nein)
-
Sofort zur Browser-Console wechseln!
Schritt 5: Logs analysieren
Suchen Sie in der Console nach:
✅ A) Modal/Popup Detektion
[MODAL OPENED] <<<< DAS WOLLEN WIR SEHEN!
Modal element: <div class="...">
Classes: modal-dialog checkout-dialog
Wenn gefunden → Popup wird durch DOM-Manipulation ausgelöst
Merkblatt: Notieren Sie die className und textContent
✅ B) API-Call Detection
[FETCH] https://dev.agravity.io/api/assets/abc123/checkout
oder
[XHR] POST https://dev.agravity.io/api/assets/abc123/checkout
Wenn gefunden → Popup wird durch API-Response ausgelöst
Merkblatt: Notieren Sie die vollständige URL und Methode (POST/GET)
✅ C) Event Detection
[EVENT] DROP
Target: ...
DataTransfer: ...
Merkblatt: Notieren Sie welche Events feuern NACHDEM Drop passiert
Schritt 6: Detailanalyse
In der Browser Console, führen Sie aus:
// Event-Statistik
webdrop_debug.getEventCounts()
// Asset-Card Component untersuchen (wenn Angular DevTools installiert)
var card = document.querySelector('ay-asset-card');
var component = webdrop_debug.getComponent(card);
console.log('Component methods:', Object.getOwnPropertyNames(Object.getPrototypeOf(component)));
Merkblatt: Notieren Sie:
- Welche Methoden hat das Component? (z.B.
onCheckout,showDialog, etc.) - Gibt es einen
click-Handler auf dem Asset?
📝 Was Sie herausfinden müssen
Nach dem Debugging sollten Sie wissen:
-
WIE wird Popup ausgelöst?
- API-Call nach Drop (URL: ________________________)
- DOM-Element wird erstellt (Class: ________________)
- Angular Component Methode (Name: ________________)
- Click-Event auf Button (Selector: _______________)
-
WANN wird Popup ausgelöst?
- Sofort nach Drop
- Nach Verzögerung (_____ Sekunden)
- Nach API-Response
- Nach User-Interaction
-
WELCHE Daten werden benötigt?
- Asset-ID (Beispiel: _________________________)
- Collection-ID (Beispiel: ______________________)
- User-ID (Beispiel: ___________________________)
- Weitere: ____________________________________
🔧 Phase 2: Implementation (NACHDEM Debugging abgeschlossen)
Basierend auf Ihren Erkenntnissen:
Fall A: Popup durch API-Call
In bridge_script.js hinzufügen (nach erfolgreichem File-Drop):
// Nach Qt File-Drop Erfolg
function triggerCheckoutPopup(assetId) {
fetch('https://dev.agravity.io/api/assets/' + assetId + '/checkout', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
// ggf. Authorization Header
},
body: JSON.stringify({
// Parameter basierend auf Debug-Logs
})
})
.then(response => response.json())
.then(data => {
console.log('Checkout popup triggered via API');
});
}
Fall B: Popup durch Component-Methode
function triggerCheckoutPopup(assetId) {
var card = document.getElementById(assetId);
if (card && window.ng) {
var component = ng.getComponent(card);
if (component && component.onCheckout) {
component.onCheckout();
}
}
}
Fall C: Popup durch Click-Simulation
function triggerCheckoutPopup(assetId) {
var button = document.querySelector('[data-action="checkout"]');
if (button) {
button.click();
}
}
⚡ Troubleshooting
Problem: Kein [MODAL OPENED] Log
Lösung: Popup wird möglicherweise anders erstellt. Suchen Sie in Network-Tab nach API-Calls
Problem: Zu viele Logs
Lösung: Console Filter nutzen: [MODAL] oder [FETCH]
Problem: webdrop_debug not defined
Lösung: Debug-Script wurde nicht richtig geladen. main_window.py prüfen.
Problem: Angular DevTools fehlt
Lösung: Chrome Extension installieren: "Angular DevTools"
📞 Nächste Schritte
- ✅ Debug-Script aktivieren (oben Schritt 1)
- ✅ Logs sammeln (Schritt 3-6)
- ✅ Ergebnisse notieren (Merkblatt)
- → Ergebnisse mitteilen → Ich helfe bei Implementation!
📄 Zusätzliche Dokumentation
- DRAG_DROP_PROBLEM_ANALYSIS.md - Detaillierte Problem-Analyse
- SCRIPT_VARIANTS.md - Alle verfügbaren Scripts
- ANGULAR_CDK_ANALYSIS.md - Angular Framework Details
Hinweis: Das Debug-Script hat Performance-Overhead. Nach dem Debugging zurück zu bridge_script.js wechseln!