📄 modalpopupbehavior.js
字号:
// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Permissive License.
// See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx.
// All other rights reserved.
/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../DynamicPopulate/DynamicPopulateBehavior.js" />
/// <reference path="../RoundedCorners/RoundedCornersBehavior.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../DropShadow/DropShadowBehavior.js" />
/// <reference path="../Compat/DragDrop/DragDropScripts.js" />
/// <reference path="../DragPanel/FloatingBehavior.js" />
Type.registerNamespace('AjaxControlToolkit');
AjaxControlToolkit.ModalPopupRepositionMode = function() {
/// <summary>
/// The ModalPopupRepositionMode enumeration describes how the modal popup repositions
/// </summary>
/// <field name="None" type="Number" integer="true" />
/// <field name="RepositionOnWindowResize" type="Number" integer="true" />
/// <field name="RepositionOnWindowScroll" type="Number" integer="true" />
/// <field name="RepositionOnWindowResizeAndScroll" type="Number" integer="true" />
throw Error.invalidOperation();
}
AjaxControlToolkit.ModalPopupRepositionMode.prototype = {
None : 0,
RepositionOnWindowResize : 1,
RepositionOnWindowScroll : 2,
RepositionOnWindowResizeAndScroll : 3
}
AjaxControlToolkit.ModalPopupRepositionMode.registerEnum('AjaxControlToolkit.ModalPopupRepositionMode');
AjaxControlToolkit.ModalPopupBehavior = function(element) {
/// <summary>
/// The ModalPopupBehavior is used to display the target element as a modal dialog
/// </summary>
/// <param name="element" type="Sys.UI.DomElement" domElement="true">
/// DOM Element the behavior is associated with
/// </param>
AjaxControlToolkit.ModalPopupBehavior.initializeBase(this, [element]);
// Properties
this._PopupControlID = null;
this._PopupDragHandleControlID = null;
this._BackgroundCssClass = null;
this._DropShadow = false;
this._Drag = false;
this._OkControlID = null;
this._CancelControlID = null;
this._OnOkScript = null;
this._OnCancelScript = null;
this._xCoordinate = -1;
this._yCoordinate = -1;
this._repositionMode = AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResizeAndScroll;
// Variables
this._backgroundElement = null;
this._foregroundElement = null;
this._relativeOrAbsoluteParentElement = null;
this._popupElement = null;
this._dragHandleElement = null;
this._showHandler = null;
this._okHandler = null;
this._cancelHandler = null;
this._scrollHandler = null;
this._resizeHandler = null;
this._windowHandlersAttached = false;
this._dropShadowBehavior = null;
this._dragBehavior = null;
this._isIE6 = false;
this._saveTabIndexes = new Array();
this._saveDesableSelect = new Array();
this._tagWithTabIndex = new Array('A','AREA','BUTTON','INPUT','OBJECT','SELECT','TEXTAREA','IFRAME');
}
AjaxControlToolkit.ModalPopupBehavior.prototype = {
initialize : function() {
/// <summary>
/// Initialize the behavior
/// </summary>
/*
<div superpopup - drag container resizable><div -- drag handle\dropshadow foreground></div></div>
*/
AjaxControlToolkit.ModalPopupBehavior.callBaseMethod(this, 'initialize');
this._isIE6 = (Sys.Browser.agent == Sys.Browser.InternetExplorer && Sys.Browser.version < 7);
if(this._PopupDragHandleControlID)
this._dragHandleElement = $get(this._PopupDragHandleControlID);
this._popupElement = $get(this._PopupControlID);
if(this._DropShadow)
{
this._foregroundElement = document.createElement('div');
this._foregroundElement.id = this.get_id() + '_foregroundElement';
this._popupElement.parentNode.appendChild(this._foregroundElement);
this._foregroundElement.appendChild(this._popupElement);
}
else
{
this._foregroundElement = this._popupElement;
}
this._backgroundElement = document.createElement('div');
this._backgroundElement.id = this.get_id() + '_backgroundElement';
this._backgroundElement.style.display = 'none';
this._backgroundElement.style.position = 'fixed';
this._backgroundElement.style.left = '0px';
this._backgroundElement.style.top = '0px';
// Want zIndex to big enough that the background sits above everything else
// CSS 2.1 defines no bounds for the <integer> type, so pick arbitrarily
this._backgroundElement.style.zIndex = 10000;
if (this._BackgroundCssClass) {
this._backgroundElement.className = this._BackgroundCssClass;
}
this._foregroundElement.parentNode.appendChild(this._backgroundElement);
this._foregroundElement.style.display = 'none';
this._foregroundElement.style.position = 'fixed';
this._foregroundElement.style.zIndex = $common.getCurrentStyle(this._backgroundElement, 'zIndex', this._backgroundElement.style.zIndex) + 1;
this._showHandler = Function.createDelegate(this, this._onShow);
$addHandler(this.get_element(), 'click', this._showHandler);
if (this._OkControlID) {
this._okHandler = Function.createDelegate(this, this._onOk);
$addHandler($get(this._OkControlID), 'click', this._okHandler);
}
if (this._CancelControlID) {
this._cancelHandler = Function.createDelegate(this, this._onCancel);
$addHandler($get(this._CancelControlID), 'click', this._cancelHandler);
}
this._scrollHandler = Function.createDelegate(this, this._onLayout);
this._resizeHandler = Function.createDelegate(this, this._onLayout);
// Need to know when partial updates complete
this.registerPartialUpdateEvents();
},
dispose : function() {
/// <summary>
/// Dispose the behavior
/// </summary>
// Going away; restore any changes to the page
this._hideImplementation();
if (this._foregroundElement && this._foregroundElement.parentNode) {
// Remove background we added to the DOM
this._foregroundElement.parentNode.removeChild(this._backgroundElement);
if(this._DropShadow) {
// Remove DIV wrapper added in initialize
this._foregroundElement.parentNode.appendChild(this._popupElement);
this._foregroundElement.parentNode.removeChild(this._foregroundElement);
}
}
this._scrollHandler = null;
this._resizeHandler = null;
if (this._cancelHandler && $get(this._CancelControlID)) {
$removeHandler($get(this._CancelControlID), 'click', this._cancelHandler);
this._cancelHandler = null;
}
if (this._okHandler && $get(this._OkControlID)) {
$removeHandler($get(this._OkControlID), 'click', this._okHandler);
this._okHandler = null;
}
if (this._showHandler) {
$removeHandler(this.get_element(), 'click', this._showHandler);
this._showHandler = null;
}
AjaxControlToolkit.ModalPopupBehavior.callBaseMethod(this, 'dispose');
},
_attachPopup : function() {
/// <summary>
/// Attach the event handlers for the popup
/// </summary>
if (this._DropShadow && !this._dropShadowBehavior) {
this._dropShadowBehavior = $create(AjaxControlToolkit.DropShadowBehavior, {}, null, null, this._popupElement);
}
if (this._dragHandleElement && !this._dragBehavior) {
this._dragBehavior = $create(AjaxControlToolkit.FloatingBehavior, {"handle" : this._dragHandleElement}, null, null, this._foregroundElement);
}
$addHandler(window, 'resize', this._resizeHandler);
$addHandler(window, 'scroll', this._scrollHandler);
this._windowHandlersAttached = true;
},
_detachPopup : function() {
/// <summary>
/// Detach the event handlers for the popup
/// </summary>
if (this._windowHandlersAttached) {
if (this._scrollHandler) {
$removeHandler(window, 'scroll', this._scrollHandler);
}
if (this._resizeHandler) {
$removeHandler(window, 'resize', this._resizeHandler);
}
this._windowHandlersAttached = false;
}
if (this._dragBehavior) {
this._dragBehavior.dispose();
this._dragBehavior = null;
}
if (this._dropShadowBehavior) {
this._dropShadowBehavior.dispose();
this._dropShadowBehavior = null;
}
},
_onShow : function(e) {
/// <summary>
/// Handler for the target's click event
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">
/// Event info
/// </param>
if (!this.get_element().disabled) {
this.show();
e.preventDefault();
return false;
}
},
_onOk : function(e) {
/// <summary>
/// Handler for the modal dialog's OK button click
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">
/// Event info
/// </param>
var element = $get(this._OkControlID);
if (element && !element.disabled) {
if (this.hide() && this._OnOkScript) {
window.setTimeout(this._OnOkScript, 0);
}
e.preventDefault();
return false;
}
},
_onCancel : function(e) {
/// <summary>
/// Handler for the modal dialog's Cancel button click
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">
/// Event info
/// </param>
var element = $get(this._CancelControlID);
if (element && !element.disabled) {
if (this.hide() && this._OnCancelScript) {
window.setTimeout(this._OnCancelScript, 0);
}
e.preventDefault();
return false;
}
},
_onLayout : function(e) {
/// <summary>
/// Handler for scrolling and resizing events that would require a repositioning of the modal dialog
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">
/// Event info
/// </param>
var positioning = this.get_repositionMode();
if (((positioning === AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowScroll) ||
(positioning === AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResizeAndScroll)) && (e.type === 'scroll')) {
this._layout();
} else if (((positioning === AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResize) ||
(positioning === AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResizeAndScroll)) && (e.type === 'resize')) {
this._layout();
} else {
// Layout background element again to make sure it covers the whole background.
// This needs to be called separately since _layout will not be always called
// to reposition the popup depending on the RepositionMode but the background needs
// to handle the resize/scroll every time.
this._layoutBackgroundElement();
}
},
show : function() {
/// <summary>
/// Display the element referenced by PopupControlID as a modal dialog
/// </summary>
var eventArgs = new Sys.CancelEventArgs();
this.raiseShowing(eventArgs);
if (eventArgs.get_cancel()) {
return;
}
this.populate();
this._attachPopup();
this._backgroundElement.style.display = '';
this._foregroundElement.style.display = '';
this._popupElement.style.display = '';
if (this._isIE6) {
this._foregroundElement.style.position = 'absolute';
this._backgroundElement.style.position = 'absolute';
// find the relative or absolute parent
var tempRelativeOrAbsoluteParent = this._foregroundElement.parentNode;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -