...
This commit is contained in:
		
							
								
								
									
										68
									
								
								static/js/confirmation.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								static/js/confirmation.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| /** | ||||
|  * 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'); | ||||
		Reference in New Issue
	
	Block a user