📄 calendarbehavior.js
字号:
/// <returns type="Boolean" />
var value = this._getEffectiveVisibleDate();
switch (part) {
case 'd':
return (date.getFullYear() != value.getFullYear() || date.getMonth() != value.getMonth());
case 'M':
return false;
case 'y':
var minYear = (Math.floor(value.getFullYear() / 10) * 10);
return date.getFullYear() < minYear || (minYear + 10) <= date.getFullYear();
}
return false;
},
_getCssClass : function(date, part) {
/// <summary>
/// Gets the cssClass to apply to a cell based on a supplied date
/// </summary>
/// <param name="date" type="Date">The date to match</param>
/// <param name="part" type="String">The most significant part of the date to test</param>
/// <returns type="String" />
if (this._isSelected(date, part)) {
return "ajax__calendar_active";
} else if (this._isOther(date, part)) {
return "ajax__calendar_other";
} else {
return "";
}
},
_getEffectiveVisibleDate : function() {
var value = this.get_visibleDate();
if (value == null)
value = this.get_selectedDate();
if (value == null)
value = this.get_todaysDate();
return new Date(value.getFullYear(), value.getMonth(), 1, this._hourOffsetForDst);
},
_getFirstDayOfWeek : function() {
/// <summary>
/// Gets the first day of the week
/// </summary>
if (this.get_firstDayOfWeek() != AjaxControlToolkit.FirstDayOfWeek.Default) {
return this.get_firstDayOfWeek();
}
return Sys.CultureInfo.CurrentCulture.dateTimeFormat.FirstDayOfWeek;
},
_parseTextValue : function(text) {
/// <summary>
/// Converts a text value from the textbox into a date
/// </summary>
/// <param name="text" type="String" mayBeNull="true">The text value to parse</param>
/// <returns type="Date" />
var value = null;
if(text) {
value = Date.parseLocale(text, this.get_format());
}
if(isNaN(value)) {
value = null;
}
return value;
},
_element_onfocus : function(e) {
/// <summary>
/// Handles the focus event of the element
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
if (!this._enabled) return;
if (!this._button) {
this.show();
// make sure we clean up the flag due to issues with alert/alt-tab/etc
this._popupMouseDown = false;
}
},
_element_onblur : function(e) {
/// <summary>
/// Handles the blur event of the element
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
if (!this._enabled) return;
if (!this._button) {
this.blur();
}
},
_element_onchange : function(e) {
/// <summary>
/// Handles the change event of the element
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
if (!this._selectedDateChanging) {
var value = this._parseTextValue(this._textbox.get_Value());
if (value) value = value.getDateOnly();
this._selectedDate = value;
if (this._isOpen) {
this._switchMonth(this._selectedDate, this._selectedDate == null);
}
}
},
_element_onkeypress : function(e) {
/// <summary>
/// Handles the keypress event of the element
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
if (!this._enabled) return;
if (!this._button && e.charCode == Sys.UI.Key.esc) {
e.stopPropagation();
e.preventDefault();
this.hide();
}
},
_element_onclick : function(e) {
/// <summary>
/// Handles the click event of the element
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
if (!this._enabled) return;
if (!this._button) {
this.show();
// make sure we clean up the flag due to issues with alert/alt-tab/etc
this._popupMouseDown = false;
}
},
_popup_onevent : function(e) {
/// <summary>
/// Handles the drag-start event of the popup calendar
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
e.stopPropagation();
e.preventDefault();
},
_popup_onmousedown : function(e) {
/// <summary>
/// Handles the mousedown event of the popup
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
// signal that the popup has received a mousedown event, this handles
// onblur issues on browsers like FF, OP, and SF
this._popupMouseDown = true;
},
_popup_onmouseup : function(e) {
/// <summary>
/// Handles the mouseup event of the popup
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
// signal that the popup has received a mouseup event, this handles
// onblur issues on browsers like FF, OP, and SF
if (Sys.Browser.agent === Sys.Browser.Opera && this._blur.get_isPending()) {
this._blur.cancel();
}
this._popupMouseDown = false;
this.focus();
},
_cell_onmouseover : function(e) {
/// <summary>
/// Handles the mouseover event of a cell
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
e.stopPropagation();
if (Sys.Browser.agent === Sys.Browser.Safari) {
// Safari doesn't reliably call _cell_onmouseout, so clear other cells here to keep the UI correct
for (var i = 0; i < this._daysBody.rows.length; i++) {
var row = this._daysBody.rows[i];
for (var j = 0; j < row.cells.length; j++) {
Sys.UI.DomElement.removeCssClass(row.cells[j].firstChild.parentNode, "ajax__calendar_hover");
}
}
}
var target = e.target;
Sys.UI.DomElement.addCssClass(target.parentNode, "ajax__calendar_hover");
},
_cell_onmouseout : function(e) {
/// <summary>
/// Handles the mouseout event of a cell
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
e.stopPropagation();
var target = e.target;
Sys.UI.DomElement.removeCssClass(target.parentNode, "ajax__calendar_hover");
},
_cell_onclick : function(e) {
/// <summary>
/// Handles the click event of a cell
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
e.stopPropagation();
e.preventDefault();
if (!this._enabled) return;
var target = e.target;
var visibleDate = this._getEffectiveVisibleDate();
Sys.UI.DomElement.removeCssClass(target.parentNode, "ajax__calendar_hover");
switch(target.mode) {
case "prev":
case "next":
this._switchMonth(target.date);
break;
case "title":
switch (this._mode) {
case "days": this._switchMode("months"); break;
case "months": this._switchMode("years"); break;
}
break;
case "month":
if (target.month == visibleDate.getMonth()) {
this._switchMode("days");
} else {
this._visibleDate = target.date;
this._switchMode("days");
}
break;
case "year":
if (target.date.getFullYear() == visibleDate.getFullYear()) {
this._switchMode("months");
} else {
this._visibleDate = target.date;
this._switchMode("months");
}
break;
case "day":
this.set_selectedDate(target.date);
this._switchMonth(target.date);
this._blur.post(true);
this.raiseDateSelectionChanged();
break;
case "today":
this.set_selectedDate(target.date);
this._switchMonth(target.date);
this._blur.post(true);
this.raiseDateSelectionChanged();
break;
}
},
_button_onclick : function(e) {
/// <summary>
/// Handles the click event of the asociated button
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
e.preventDefault();
e.stopPropagation();
if (!this._enabled) return;
if (!this._isOpen) {
this.show();
} else {
this.hide();
}
this.focus();
// make sure we clean up the flag due to issues with alert/alt-tab/etc
this._popupMouseDown = false;
},
_button_onblur : function(e) {
/// <summary>
/// Handles the blur event of the button
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
if (!this._enabled) return;
if (!this._popupMouseDown) {
this.hide();
}
// make sure we clean up the flag due to issues with alert/alt-tab/etc
this._popupMouseDown = false;
},
_button_onkeypress : function(e) {
/// <summary>
/// Handles the keypress event of the element
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
if (!this._enabled) return;
if (e.charCode == Sys.UI.Key.esc) {
e.stopPropagation();
e.preventDefault();
this.hide();
}
// make sure we clean up the flag due to issues with alert/alt-tab/etc
this._popupMouseDown = false;
}
}
AjaxControlToolkit.CalendarBehavior.registerClass("AjaxControlToolkit.CalendarBehavior", AjaxControlToolkit.BehaviorBase);
AjaxControlToolkit.CalendarPosition = function() {
/// <summary>
/// Position of the popup relative to the target control
/// </summary>
/// <field name="BottomLeft" type="Number" integer="true" />
/// <field name="BottomRight" type="Number" integer="true" />
/// <field name="TopLeft" type="Number" integer="true" />
/// <field name="TopRight" type="Number" integer="true" />
/// <field name="Right" type="Number" integer="true" />
/// <field name="Left" type="Number" integer="true" />
throw Error.invalidOperation();
}
AjaxControlToolkit.CalendarPosition.prototype = {
BottomLeft: 0,
BottomRight: 1,
TopLeft: 2,
TopRight: 3,
Right: 4,
Left: 5
}
AjaxControlToolkit.CalendarPosition.registerEnum('AjaxControlToolkit.CalendarPosition');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -