Type.registerNamespace('Sys.Extended.UI'); Sys.Extended.UI.ConfirmButtonHiddenEventArgs = function(confirmed) { Sys.Extended.UI.ConfirmButtonHiddenEventArgs.initializeBase(this); this._confirmed = confirmed; } Sys.Extended.UI.ConfirmButtonHiddenEventArgs.prototype = { get_confirmed: function() { return this._confirmed; } } Sys.Extended.UI.ConfirmButtonHiddenEventArgs.registerClass('Sys.Extended.UI.ConfirmButtonHiddenEventArgs', Sys.EventArgs); Sys.Extended.UI.ConfirmButtonBehavior = function(element) { Sys.Extended.UI.ConfirmButtonBehavior.initializeBase(this, [element]); // Confirm text this._ConfirmTextValue = null; // Cancel value this._OnClientCancelValue = null; // Confirm on form submit this._ConfirmOnFormSubmit = false; // ModalPopup to use instead of window.confirm this._displayModalPopupID = null; // Script to call to initiate a postback this._postBackScript = null; // Click handler for the target control this._clickHandler = null; this._oldScript = null; } Sys.Extended.UI.ConfirmButtonBehavior.prototype = { initialize: function() { Sys.Extended.UI.ConfirmButtonBehavior.callBaseMethod(this, 'initialize'); var element = this.get_element(); // Attach the handler this._clickHandler = Function.createDelegate(this, this._onClick); $addHandler(element, "click", this._clickHandler); // hoist out any existing script // this._oldScript = element.getAttribute("onclick"); if(this._oldScript) element.setAttribute("onclick", null); // Hook into the ASP.NET WebForm_OnSubmit function to display the confirm dialog prior to submission if(this._ConfirmOnFormSubmit && (typeof (WebForm_OnSubmit) == 'function') && !Sys.Extended.UI.ConfirmButtonBehavior._originalWebForm_OnSubmit) { if(Sys.Extended.UI.TextBoxWatermarkBehavior && Sys.Extended.UI.TextBoxWatermarkBehavior._originalWebForm_OnSubmit) { // If TextBoxWatermark has already hooked the WebForm_OnSubmit, we want to run before it so the watermark removal is always last to run Sys.Extended.UI.ConfirmButtonBehavior._originalWebForm_OnSubmit = Sys.Extended.UI.TextBoxWatermarkBehavior._originalWebForm_OnSubmit; Sys.Extended.UI.TextBoxWatermarkBehavior._originalWebForm_OnSubmit = Sys.Extended.UI.ConfirmButtonBehavior.WebForm_OnSubmit; } else { // Hook WebForm_OnSubmit normally Sys.Extended.UI.ConfirmButtonBehavior._originalWebForm_OnSubmit = WebForm_OnSubmit; WebForm_OnSubmit = Sys.Extended.UI.ConfirmButtonBehavior.WebForm_OnSubmit; } } }, dispose: function() { // Detach event handlers if(this._clickHandler) { $removeHandler(this.get_element(), "click", this._clickHandler); this._clickHandler = null; } if(this._oldScript) { this.get_element().setAttribute("onclick", this._oldScript); this._oldScript = null; } Sys.Extended.UI.ConfirmButtonBehavior.callBaseMethod(this, 'dispose'); }, _onClick: function(e) { if(this.get_element() && !this.get_element().disabled) { if(this._ConfirmOnFormSubmit) { // Note that this behavior was triggered (for later) Sys.Extended.UI.ConfirmButtonBehavior._clickedBehavior = this; } else { // Display the dialog and cancel the click if necessary if(!this._displayConfirmDialog()) { e.preventDefault(); return false; } else if(this._oldScript) { if(String.isInstanceOfType(this._oldScript)) eval(this._oldScript); else if(typeof (this._oldScript) == 'function') this._oldScript(); } } } }, _displayConfirmDialog: function() { // Raise the showing event and potentially cancel var eventArgs = new Sys.CancelEventArgs(); this.raiseShowing(eventArgs); if(eventArgs.get_cancel()) return; if(this._displayModalPopupID) { // Using a ModalPopupBehavior instead of window.confirm var mpe = $find(this._displayModalPopupID); if(!mpe) throw Error.argument('displayModalPopupID', String.format(Sys.Extended.UI.Resources.CollapsiblePanel_NoControlID, this._displayModalPopupID)); // Hook into ModalPopupBehavior for the confirm result mpe.set_OnOkScript("$find('" + this.get_id() + "')._handleConfirmDialogCompletion(true);"); mpe.set_OnCancelScript("$find('" + this.get_id() + "')._handleConfirmDialogCompletion(false);"); // Show the ModalPopupBehavior mpe.show(); // Cancel postback since ModalPopupBehavior.show is asynchronous - _handleConfirmDialogCompletion will handle the result return false; } else { // Display window.confirm dialog var result = window.confirm(this._ConfirmTextValue); this._handleConfirmDialogCompletion(result); return result; } }, _handleConfirmDialogCompletion: function(result) { // Handle the completion of a confirm dialog (whether by window.confirm or ModalPopupBehavior) this.raiseHidden(new Sys.Extended.UI.ConfirmButtonHiddenEventArgs(result)); if(result) { // Confirmed - Initiate the postback if specified if(this._postBackScript) eval(this._postBackScript); } else { // Rejected - Execute the associated script if present if(this._OnClientCancelValue) window[this._OnClientCancelValue](); } }, get_OnClientCancel: function() { // The client-side script that executes when the cancel button is clicked on the confirm dialog. return this._OnClientCancelValue; }, set_OnClientCancel: function(value) { if(this._OnClientCancelValue != value) { this._OnClientCancelValue = value; this.raisePropertyChanged('OnClientCancel'); } }, get_ConfirmText: function() { // The text to show when you want to confirm the click. (Note: HTML entities can be used here (ex: " " for new-line)) return this._ConfirmTextValue; }, set_ConfirmText: function(value) { if(this._ConfirmTextValue != value) { this._ConfirmTextValue = value; this.raisePropertyChanged('ConfirmText'); } }, get_ConfirmOnFormSubmit: function() { // True iff the confirm dialog should run for form submission (i.e., after validators are all satisfied) return this._ConfirmOnFormSubmit; }, set_ConfirmOnFormSubmit: function(value) { if(this._ConfirmOnFormSubmit != value) { this._ConfirmOnFormSubmit = value; this.raisePropertyChanged('ConfirmOnFormSubmit'); } }, get_displayModalPopupID: function() { // ID of a ModalPopupBehavior to be used instead of the default window.confirm dialog return this._displayModalPopupID; }, set_displayModalPopupID: function(value) { if(this._displayModalPopupID != value) { this._displayModalPopupID = value; this.raisePropertyChanged('displayModalPopupID'); } }, get_postBackScript: function() { // Script to run to initiate a postback return this._postBackScript; }, set_postBackScript: function(value) { if(this._postBackScript != value) { this._postBackScript = value; this.raisePropertyChanged('postBackScript'); } }, add_showing: function(handler) { this.get_events().addHandler('showing', handler); }, remove_showing: function(handler) { this.get_events().removeHandler('showing', handler); }, raiseShowing: function(eventArgs) { var handler = this.get_events().getHandler('showing'); if(handler) handler(this, eventArgs); }, add_hidden: function(handler) { this.get_events().addHandler('hidden', handler); }, remove_hidden: function(handler) { this.get_events().removeHandler('hidden', handler); }, raiseHidden: function(eventArgs) { var handler = this.get_events().getHandler('hidden'); if(handler) handler(this, eventArgs); } } Sys.Extended.UI.ConfirmButtonBehavior.registerClass('Sys.Extended.UI.ConfirmButtonBehavior', Sys.Extended.UI.BehaviorBase); Sys.Extended.UI.ConfirmButtonBehavior.WebForm_OnSubmit = function() { // Wraps ASP.NET's WebForm_OnSubmit in order to display the confirm dialog prior to submission var result = Sys.Extended.UI.ConfirmButtonBehavior._originalWebForm_OnSubmit(); if(result && Sys.Extended.UI.ConfirmButtonBehavior._clickedBehavior) result = Sys.Extended.UI.ConfirmButtonBehavior._clickedBehavior._displayConfirmDialog(); Sys.Extended.UI.ConfirmButtonBehavior._clickedBehavior = null; return result; }