mirror of
				https://github.com/Theodor-Springmann-Stiftung/kgpz_web.git
				synced 2025-10-31 01:55:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			83 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * ErrorModal Web Component
 | |
|  * A reusable error modal component without shadow DOM for Tailwind compatibility
 | |
|  */
 | |
| class ErrorModal extends HTMLElement {
 | |
|     constructor() {
 | |
|         super();
 | |
|         // No shadow DOM - use regular DOM for Tailwind styling
 | |
|         this.innerHTML = `
 | |
|             <div id="error-modal" class="fixed inset-0 bg-black bg-opacity-50 hidden z-50 flex items-center justify-center backdrop-blur-sm">
 | |
|                 <div class="bg-white rounded-lg shadow-xl max-w-md w-full mx-4 max-h-96 overflow-y-auto">
 | |
|                     <div class="p-6">
 | |
|                         <div class="flex items-center justify-between mb-4">
 | |
|                             <h3 class="text-lg font-semibold text-red-600 flex items-center gap-2">
 | |
|                                 <i class="ri-error-warning-line text-xl"></i>
 | |
|                                 Fehler
 | |
|                             </h3>
 | |
|                             <button class="close-btn text-gray-400 hover:text-gray-600 transition-colors">
 | |
|                                 <i class="ri-close-line text-xl"></i>
 | |
|                             </button>
 | |
|                         </div>
 | |
|                         <div class="error-content text-slate-700">
 | |
|                             <!-- Error content will be loaded here -->
 | |
|                         </div>
 | |
|                         <div class="mt-6 flex justify-end">
 | |
|                             <button class="close-btn px-4 py-2 bg-slate-600 hover:bg-slate-700 text-white rounded transition-colors">
 | |
|                                 Schließen
 | |
|                             </button>
 | |
|                         </div>
 | |
|                     </div>
 | |
|                 </div>
 | |
|             </div>
 | |
|         `;
 | |
| 
 | |
|         this.modal = this.querySelector('#error-modal');
 | |
|         this.errorContent = this.querySelector('.error-content');
 | |
|         this.closeButtons = this.querySelectorAll('.close-btn');
 | |
| 
 | |
|         this.setupEventListeners();
 | |
|     }
 | |
| 
 | |
|     setupEventListeners() {
 | |
|         // Close button clicks
 | |
|         this.closeButtons.forEach(btn => {
 | |
|             btn.addEventListener('click', () => this.close());
 | |
|         });
 | |
| 
 | |
|         // Close on ESC key
 | |
|         document.addEventListener('keydown', (event) => {
 | |
|             if (event.key === 'Escape' && !this.modal.classList.contains('hidden')) {
 | |
|                 this.close();
 | |
|             }
 | |
|         });
 | |
| 
 | |
|         // Close when clicking outside modal
 | |
|         this.modal.addEventListener('click', (event) => {
 | |
|             if (event.target === this.modal) {
 | |
|                 this.close();
 | |
|             }
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     show(content) {
 | |
|         this.errorContent.innerHTML = content;
 | |
|         this.modal.classList.remove('hidden');
 | |
|     }
 | |
| 
 | |
|     close() {
 | |
|         this.modal.classList.add('hidden');
 | |
|     }
 | |
| 
 | |
|     // Global helper functions for backward compatibility
 | |
|     connectedCallback() {
 | |
|         // Make functions globally available
 | |
|         window.showErrorModal = (content) => this.show(content);
 | |
|         window.closeErrorModal = () => this.close();
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Define the custom element
 | |
| customElements.define('error-modal', ErrorModal);
 | |
| 
 | |
| export { ErrorModal }; | 
