📄 calendarbehavior.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="../Common/DateTime.js" />
/// <reference path="../Common/Threading.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Animation/Animations.js" />
/// <reference path="../Animation/AnimationBehavior.js" />
/// <reference path="../PopupExtender/PopupBehavior.js" />
Type.registerNamespace("AjaxControlToolkit");
AjaxControlToolkit.CalendarBehavior = function(element) {
/// <summary>
/// A behavior that attaches a calendar date selector to a textbox
/// </summmary>
/// <param name="element" type="Sys.UI.DomElement">The element to attach to</param>
AjaxControlToolkit.CalendarBehavior.initializeBase(this, [element]);
this._textbox = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(element);
this._format = "d";
this._cssClass = "ajax__calendar";
this._enabled = true;
this._animated = true;
this._buttonID = null;
this._layoutRequested = 0;
this._layoutSuspended = false;
this._button = null;
this._popupMouseDown = false;
this._selectedDate = null;
this._visibleDate = null;
this._todaysDate = null;
this._firstDayOfWeek = AjaxControlToolkit.FirstDayOfWeek.Default;
this._container = null;
this._popupDiv = null;
this._header = null;
this._prevArrow = null;
this._nextArrow = null;
this._title = null;
this._body = null;
this._today = null;
this._days = null;
this._daysTable = null;
this._daysTableHeader = null;
this._daysTableHeaderRow = null;
this._daysBody = null;
this._months = null;
this._monthsTable = null;
this._monthsBody = null;
this._years = null;
this._yearsTable = null;
this._yearsBody = null;
this._popupPosition = AjaxControlToolkit.CalendarPosition.BottomLeft;
this._popupBehavior = null;
this._modeChangeAnimation = null;
this._modeChangeMoveTopOrLeftAnimation = null;
this._modeChangeMoveBottomOrRightAnimation = null;
this._mode = "days";
this._selectedDateChanging = false;
this._isOpen = false;
this._isAnimating = false;
this._width = 170;
this._height = 139;
this._modes = {"days" : null, "months" : null, "years" : null};
this._modeOrder = {"days" : 0, "months" : 1, "years" : 2 };
this._hourOffsetForDst = 12; // Hour value for calls to new Date(...) to avoid DST issues
this._blur = new AjaxControlToolkit.DeferredOperation(1, this, this.blur);
this._button$delegates = {
click : Function.createDelegate(this, this._button_onclick),
keypress : Function.createDelegate(this, this._button_onkeypress),
blur : Function.createDelegate(this, this._button_onblur)
}
this._element$delegates = {
change : Function.createDelegate(this, this._element_onchange),
keypress : Function.createDelegate(this, this._element_onkeypress),
click : Function.createDelegate(this, this._element_onclick),
focus : Function.createDelegate(this, this._element_onfocus),
blur : Function.createDelegate(this, this._element_onblur)
}
this._popup$delegates = {
mousedown: Function.createDelegate(this, this._popup_onmousedown),
mouseup: Function.createDelegate(this, this._popup_onmouseup),
drag: Function.createDelegate(this, this._popup_onevent),
dragstart: Function.createDelegate(this, this._popup_onevent),
select: Function.createDelegate(this, this._popup_onevent)
}
this._cell$delegates = {
mouseover : Function.createDelegate(this, this._cell_onmouseover),
mouseout : Function.createDelegate(this, this._cell_onmouseout),
click : Function.createDelegate(this, this._cell_onclick)
}
}
AjaxControlToolkit.CalendarBehavior.prototype = {
get_animated : function() {
/// <summary>
/// Whether changing modes is animated
/// </summary>
/// <value type="Boolean" />
return this._animated;
},
set_animated : function(value) {
if (this._animated != value) {
this._animated = value;
this.raisePropertyChanged("animated");
}
},
get_enabled : function() {
/// <value type="Boolean">
/// Whether this behavior is available for the current element
/// </value>
return this._enabled;
},
set_enabled : function(value) {
if (this._enabled != value) {
this._enabled = value;
this.raisePropertyChanged("enabled");
}
},
get_button : function() {
/// <value type="Sys.UI.DomElement">
/// The button to use to show the calendar (optional)
/// </value>
return this._button;
},
set_button : function(value) {
if (this._button != value) {
if (this._button && this.get_isInitialized()) {
$common.removeHandlers(this._button, this._button$delegates);
}
this._button = value;
if (this._button && this.get_isInitialized()) {
$addHandlers(this._button, this._button$delegates);
}
this.raisePropertyChanged("button");
}
},
get_popupPosition : function() {
/// <value type="AjaxControlToolkit.CalendarPosition">
/// Where the popup should be positioned relative to the target control.
/// Can be BottomLeft (Default), BottomRight, TopLeft, TopRight.
/// </value>
return this._popupPosition;
},
set_popupPosition : function(value) {
if (this._popupPosition != value) {
this._popupPosition = value;
this.raisePropertyChanged('popupPosition');
}
},
get_format : function() {
/// <value type="String">
/// The format to use for the date value
/// </value>
return this._format;
},
set_format : function(value) {
if (this._format != value) {
this._format = value;
this.raisePropertyChanged("format");
}
},
get_selectedDate : function() {
/// <value type="Date">
/// The date value represented by the text box
/// </value>
if (this._selectedDate == null) {
var value = this._textbox.get_Value();
if (value) {
value = this._parseTextValue(value);
if (value) {
this._selectedDate = value.getDateOnly();
}
}
}
return this._selectedDate;
},
set_selectedDate : function(value) {
if(value && (String.isInstanceOfType(value)) && (value.length != 0)) {
value = new Date(value);
}
if (value) value = value.getDateOnly();
if (this._selectedDate != value) {
this._selectedDate = value;
this._selectedDateChanging = true;
var text = "";
if (value) {
text = value.localeFormat(this._format);
}
if (text != this._textbox.get_Value()) {
this._textbox.set_Value(text);
this._fireChanged();
}
this._selectedDateChanging = false;
this.invalidate();
this.raisePropertyChanged("selectedDate");
}
},
get_visibleDate : function() {
/// <summary>
/// The date currently visible in the calendar
/// </summary>
/// <value type="Date" />
return this._visibleDate;
},
set_visibleDate : function(value) {
if (value) value = value.getDateOnly();
if (this._visibleDate != value) {
this._switchMonth(value, !this._isOpen);
this.raisePropertyChanged("visibleDate");
}
},
get_isOpen : function() {
/// <value type="Boolean">
/// Whether the calendar is open
/// </value>
return this._isOpen;
},
get_todaysDate : function() {
/// <value type="Date">
/// The date to use for "Today"
/// </value>
if (this._todaysDate != null) {
return this._todaysDate;
}
return new Date().getDateOnly();
},
set_todaysDate : function(value) {
if (value) value = value.getDateOnly();
if (this._todaysDate != value) {
this._todaysDate = value;
this.invalidate();
this.raisePropertyChanged("todaysDate");
}
},
get_firstDayOfWeek : function() {
/// <value type="AjaxControlToolkit.FirstDayOfWeek">
/// The day of the week to appear as the first day in the calendar
/// </value>
return this._firstDayOfWeek;
},
set_firstDayOfWeek : function(value) {
if (this._firstDayOfWeek != value) {
this._firstDayOfWeek = value;
this.invalidate();
this.raisePropertyChanged("firstDayOfWeek");
}
},
get_cssClass : function() {
/// <value type="String">
/// The CSS class selector to use to change the calendar's appearance
/// </value>
return this._cssClass;
},
set_cssClass : function(value) {
if (this._cssClass != value) {
if (this._cssClass && this.get_isInitialized()) {
Sys.UI.DomElement.removeCssClass(this._container, this._cssClass);
}
this._cssClass = value;
if (this._cssClass && this.get_isInitialized()) {
Sys.UI.DomElement.addCssClass(this._container, this._cssClass);
}
this.raisePropertyChanged("cssClass");
}
},
get_todayButton : function() {
/// <value type="Sys.UI.DomElement">
/// The button used to select todays date
/// </value>
return this._today;
},
get_dayCell : function(row, col) {
/// <value type="Sys.UI.DomElement">
/// Gets the day cell at the specified row or column
/// </value>
if (this._daysBody) {
return this._daysBody.rows[row].cells[col].firstChild;
}
return null;
},
add_showing : function(handler) {
/// <summary>
/// Adds an event handler for the <code>showiwng</code> event.
/// </summary>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -