📄 collapsiblepanelbehavior.js
字号:
}
}
}
else {
this._checkCollapseHide();
}
if (this._collapsed) {
this.raiseCollapseComplete();
this.raiseCollapsed(Sys.EventArgs.Empty);
} else {
this.raiseExpandComplete()
this.raiseExpanded(new Sys.EventArgs());
}
},
_onMouseEnter : function(eventObj) {
/// <summary>
/// OnMouseOver Handler
/// </summary>
/// <param name="eventObj" type="Sys.UI.DomEvent" mayBeNull="true">
/// Event Info
/// </param>
if (this._autoExpand) {
this.expandPanel(eventObj);
}
},
_onMouseLeave : function(eventObj) {
/// <summary>
/// OnMouseOut Handler
/// </summary>
/// <param name="eventObj" type="Sys.UI.DomEvent" mayBeNull="true">
/// Event Info
/// </param>
if (this._autoCollapse) {
this.collapsePanel(eventObj);
}
},
_getExpandedSize : function() {
/// <summary>
/// Get the size of the panel when fully expanded
/// </summary>
/// <returns type="Number" integer="true">
/// Size of the panel when fully expanded
/// </returns>
if (this._expandedSize) {
return this._expandedSize;
}
if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
return this._childDiv.offsetHeight;
} else if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal) {
return this._childDiv.offsetWidth;
}
},
_getCollapsedSize : function() {
/// <summary>
/// Get the size of the panel when fully collapsed
/// </summary>
/// <returns type="Number" integer="true">
/// Size of the panel when fully collapsed
/// </returns>
if (this._collapsedSize) {
return this._collapsedSize;
}
return 0;
},
_getTargetSize : function() {
/// <summary>
/// Get the target size of the Panel
/// </summary>
/// <returns type="Number" integer="true">
/// Target size of the Panel
/// </returns>
var value;
if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
value = this.get_TargetHeight();
} else if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal) {
value = this.get_TargetWidth();
}
// Safari returns undefined if display is 'none'
//
if (value === undefined) {
value = 0;
}
return value;
},
_setTargetSize : function(value) {
/// <summary>
/// Set the target size of the panel
/// </summary>
/// <param name="value" type="Number" integer="true">
/// Target size of the panel
/// </param>
// we don't always want to set the target size here.
// if we don't have an expanded size, and we're not collapsed,
// and we're at (or past) our "maximum" size
//
var useSize = this._collapsed || this._expandedSize;
var e = this.get_element();
if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
if (useSize || value < e.offsetHeight) {
this.set_TargetHeight(value);
} else {
// if we're at our maximum size, flip to auto
// so that nested collapsible panels will
// work properly.
//
e.style.height = "auto";
this.raisePropertyChanged('TargetHeight');
}
} else if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal) {
if (useSize || value < e.offsetWidth) {
this.set_TargetWidth(value);
}
else {
e.style.width = "auto";
this.raisePropertyChanged('TargetWidth');
}
}
this._checkCollapseHide();
},
_setupChildDiv : function() {
/// <summary>
/// Set up a child div to host our panel contents
/// and then push the panel's children into it.
/// </summary>
var startSize = this._getTargetSize();
var e = this.get_element();
this._childDiv = e.cloneNode(false);
this._childDiv.id = '';
// move all children into the div.
//
while (e.hasChildNodes()) {
var child = e.childNodes[0];
child = e.removeChild(child);
this._childDiv.appendChild(child);
}
//On Parent
e.style.padding = "";
e.style.border = "";
// Setup scrolling on the child div and parent by only altering the scrolling
// for the expand direction letting the other fall into place naturally.
if (this._scrollContents) {
if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
e.style.overflowY = "scroll";
this._childDiv.style.overflowY = "";
} else {
e.style.overflowX = "scroll";
this._childDiv.style.overflowX = "";
}
// safari and opera do not recognize overflowX and overflowY
if (Sys.Browser.agent == Sys.Browser.Safari || Sys.Browser.agent == Sys.Browser.Opera) {
e.style.overflow = "scroll";
this._childDiv.style.overflow = "";
}
}
else {
if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
e.style.overflowY = "hidden";
this._childDiv.style.overflowY = "";
} else {
e.style.overflowX = "hidden";
this._childDiv.style.overflowX = "";
}
// safari and opera do not recognize overflowX and overflowY
if (Sys.Browser.Agent == Sys.Browser.Safari || Sys.Browser.Agent == Sys.Browser.Opera) {
e.style.overflow = "hidden";
this._childDiv.style.overflow = "";
}
}
//Delete some style after cloneNode
//On Clone
this._childDiv.style.position = "";
this._childDiv.style.margin = "";
// we optimize for the case where the original size is the collapsed size.
// if that's the case, we go ahead and set the inner panel to auto so you
// can still expand it but not see it expanded by default when the page loads.
//
if (startSize == this._collapsedSize) {
if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
this._childDiv.style.height = "auto";
} else if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal) {
this._childDiv.style.width = "auto";
}
}
e.appendChild(this._childDiv);
if (this._collapsed) {
startSize = this._getCollapsedSize();
}
else {
startSize = this._getExpandedSize();
}
// set up our initial size
//
if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
e.style.height = startSize + "px";
if (!this._expandedSize) {
e.style.height = "auto";
}
else {
e.style.height = this._expandedSize + "px";
}
this._childDiv.style.height = "auto";
} else if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal) {
e.style.width = startSize + "px";
if (!this._expandedSize) {
e.style.width = "auto";
}
else {
e.style.width = this._expandedSize + "px";
}
this._childDiv.style.width = "auto";
}
},
_setupState : function(isCollapsed) {
/// <summary>
/// Get all the state set consistently when we change modes
/// </summary>
/// <param name="isCollapsed" type="Boolean">
/// True to setup the state as if we're collapsed, false to setup the state as if we're expanded
/// </param>
if (isCollapsed) {
// change the text label ID if we have one.
//
if (this._textLabelID && this._collapsedText) {
var e = $get(this._textLabelID);
if (e) {
e.innerHTML = this._collapsedText;
}
}
// Change the image if we have one
if (this._imageControlID && this._collapsedImage) {
var i = $get(this._imageControlID);
if (i && i.src) {
i.src = this._collapsedImage;
if (this._expandedText || this._collapsedText) {
i.title = this._collapsedText;
}
}
}
}
else {
if (this._textLabelID && this._expandedText) {
var e = $get(this._textLabelID);
if (e) {
e.innerHTML = this._expandedText;
}
}
// Change the image if we have one
if (this._imageControlID && this._expandedImage) {
var i = $get(this._imageControlID);
if (i && i.src) {
i.src = this._expandedImage;
if (this._expandedText || this._collapsedText) {
i.title = this._expandedText;
}
}
}
}
// set our member variable and set the client state to reflect it
//
if (this._collapsed != isCollapsed) {
this._collapsed = isCollapsed;
this.raisePropertyChanged('Collapsed');
}
AjaxControlToolkit.CollapsiblePanelBehavior.callBaseMethod(this, 'set_ClientState', [this._collapsed.toString()]);
},
_toggle : function(eventObj) {
/// <summary>
/// Event handler to epxand or collapse the panel (based on its current state)
/// Internal function. Please use "togglePanel(eventObj)" to get same functionality.
/// </summary>
/// <param name="eventObj" type="Sys.UI.DomEvent" mayBeNull="true" optional="true">
/// Event Info
/// </param>
if (this.get_Collapsed()) {
return this.expandPanel(eventObj);
} else {
return this.collapsePanel(eventObj);
}
},
add_collapsing : function(handler) {
/// <summary>
/// Add an event handler for the collapsing event
/// </summary>
/// <param name="handler" type="Function" mayBeNull="false">
/// Event handler
/// </param>
/// <returns />
this.get_events().addHandler('collapsing', handler);
},
remove_collapsing : function(handler) {
/// <summary>
/// Remove an event handler from the collapsing event
/// </summary>
/// <param name="handler" type="Function" mayBeNull="false">
/// Event handler
/// </param>
/// <returns />
this.get_events().removeHandler('collapsing', handler);
},
raiseCollapsing : function(eventArgs) {
/// <summary>
/// Raise the collapsing event
/// </summary>
/// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
/// Event arguments for the collapsing event
/// </param>
/// <returns />
var handler = this.get_events().getHandler('collapsing');
if (handler) {
handler(this, eventArgs);
}
},
add_collapsed : function(handler) {
/// <summary>
/// Add an event handler for the collapsed event
/// </summary>
/// <param name="handler" type="Function" mayBeNull="false">
/// Event handler
/// </param>
/// <returns />
this.get_events().addHandler('collapsed', handler);
},
remove_collapsed : function(handler) {
/// <summary>
/// Remove an event handler from the collapsed event
/// </summary>
/// <param name="handler" type="Function" mayBeNull="false">
/// Event handler
/// </param>
/// <returns />
this.get_events().removeHandler('collapsed', handler);
},
raiseCollapsed : function(eventArgs) {
/// <summary>
/// Raise the collapsed event
/// </summary>
/// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
/// Event arguments for the collapsed event
/// </param>
/// <returns />
var handler = this.get_events().getHandler('collapsed');
if (handler) {
handler(this, eventArgs);
}
},
add_collapseComplete : function(handler) {
/// <summary>
/// Add a handler to the collapseComplete event
/// </summary>
/// <param name="handler" type="Function">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -