69 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * Confirmation Modal Manager
 | |
|  * Handles showing and hiding a Bootstrap modal for confirmations and prompts.
 | |
|  */
 | |
| class Confirmation {
 | |
|     constructor(modalId) {
 | |
|         this.modalElement = document.getElementById(modalId);
 | |
|         this.modal = new bootstrap.Modal(this.modalElement);
 | |
|         this.messageElement = this.modalElement.querySelector('#confirmationMessage');
 | |
|         this.inputElement = this.modalElement.querySelector('#confirmationInput');
 | |
|         this.confirmButton = this.modalElement.querySelector('#confirmButton');
 | |
|         this.titleElement = this.modalElement.querySelector('.modal-title');
 | |
|         this.currentResolver = null;
 | |
|     }
 | |
| 
 | |
|     _show(message, title, showInput = false, defaultValue = '') {
 | |
|         return new Promise((resolve) => {
 | |
|             this.currentResolver = resolve;
 | |
|             this.titleElement.textContent = title;
 | |
|             this.messageElement.textContent = message;
 | |
| 
 | |
|             if (showInput) {
 | |
|                 this.inputElement.style.display = 'block';
 | |
|                 this.inputElement.value = defaultValue;
 | |
|                 this.inputElement.focus();
 | |
|             } else {
 | |
|                 this.inputElement.style.display = 'none';
 | |
|             }
 | |
| 
 | |
|             this.confirmButton.onclick = () => this._handleConfirm(showInput);
 | |
|             this.modalElement.addEventListener('hidden.bs.modal', () => this._handleCancel(), { once: true });
 | |
|             
 | |
|             this.modal.show();
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     _handleConfirm(isPrompt) {
 | |
|         if (this.currentResolver) {
 | |
|             const value = isPrompt ? this.inputElement.value : true;
 | |
|             this.currentResolver(value);
 | |
|             this._cleanup();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     _handleCancel() {
 | |
|         if (this.currentResolver) {
 | |
|             this.currentResolver(null); // Resolve with null for cancellation
 | |
|             this._cleanup();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     _cleanup() {
 | |
|         this.confirmButton.onclick = null;
 | |
|         this.modal.hide();
 | |
|         this.currentResolver = null;
 | |
|     }
 | |
| 
 | |
|     confirm(message, title = 'Confirmation') {
 | |
|         return this._show(message, title, false);
 | |
|     }
 | |
| 
 | |
|     prompt(message, defaultValue = '', title = 'Prompt') {
 | |
|         return this._show(message, title, true, defaultValue);
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Make it globally available
 | |
| window.ConfirmationManager = new Confirmation('confirmationModal');
 |