📄 calendarbehavior.js
字号:
},
focus : function() {
if (this._button) {
this._button.focus();
} else {
this.get_element().focus();
}
},
blur : function(force) {
if (!force && Sys.Browser.agent === Sys.Browser.Opera) {
this._blur.post(true);
} else {
if (!this._popupMouseDown) {
this.hide();
}
// make sure we clean up the flag due to issues with alert/alt-tab/etc
this._popupMouseDown = false;
}
},
suspendLayout : function() {
/// <summary>
/// Suspends layout of the behavior while setting properties
/// </summary>
this._layoutSuspended++;
},
resumeLayout : function() {
/// <summary>
/// Resumes layout of the behavior and performs any pending layout requests
/// </summary>
this._layoutSuspended--;
if (this._layoutSuspended <= 0) {
this._layoutSuspended = 0;
if (this._layoutRequested) {
this._performLayout();
}
}
},
invalidate : function() {
/// <summary>
/// Performs layout of the behavior unless layout is suspended
/// </summary>
if (this._layoutSuspended > 0) {
this._layoutRequested = true;
} else {
this._performLayout();
}
},
_buildCalendar : function() {
/// <summary>
/// Builds the calendar's layout
/// </summary>
var elt = this.get_element();
var id = this.get_id();
this._container = $common.createElementFromTemplate({
nodeName : "div",
properties : { id : id + "_container" },
cssClasses : [this._cssClass]
}, elt.parentNode);
this._popupDiv = $common.createElementFromTemplate({
nodeName : "div",
events : this._popup$delegates,
properties : {
id : id + "_popupDiv"
},
cssClasses : ["ajax__calendar_container"],
visible : false
}, this._container);
},
_buildHeader : function() {
/// <summary>
/// Builds the header for the calendar
/// </summary>
var id = this.get_id();
this._header = $common.createElementFromTemplate({
nodeName : "div",
properties : { id : id + "_header" },
cssClasses : [ "ajax__calendar_header" ]
}, this._popupDiv);
var prevArrowWrapper = $common.createElementFromTemplate({ nodeName : "div" }, this._header);
this._prevArrow = $common.createElementFromTemplate({
nodeName : "div",
properties : {
id : id + "_prevArrow",
mode : "prev"
},
events : this._cell$delegates,
cssClasses : [ "ajax__calendar_prev" ]
}, prevArrowWrapper);
var nextArrowWrapper = $common.createElementFromTemplate({ nodeName : "div" }, this._header);
this._nextArrow = $common.createElementFromTemplate({
nodeName : "div",
properties : {
id : id + "_nextArrow",
mode : "next"
},
events : this._cell$delegates,
cssClasses : [ "ajax__calendar_next" ]
}, nextArrowWrapper);
var titleWrapper = $common.createElementFromTemplate({ nodeName : "div" }, this._header);
this._title = $common.createElementFromTemplate({
nodeName : "div",
properties : {
id : id + "_title",
mode : "title"
},
events : this._cell$delegates,
cssClasses : [ "ajax__calendar_title" ]
}, titleWrapper);
},
_buildBody : function() {
/// <summary>
/// Builds the body region for the calendar
/// </summary>
this._body = $common.createElementFromTemplate({
nodeName : "div",
properties : { id : this.get_id() + "_body" },
cssClasses : [ "ajax__calendar_body" ]
}, this._popupDiv);
this._buildDays();
this._buildMonths();
this._buildYears();
},
_buildFooter : function() {
/// <summary>
/// Builds the footer for the calendar
/// </summary>
var todayWrapper = $common.createElementFromTemplate({ nodeName : "div" }, this._popupDiv);
this._today = $common.createElementFromTemplate({
nodeName : "div",
properties : {
id : this.get_id() + "_today",
mode : "today"
},
events : this._cell$delegates,
cssClasses : [ "ajax__calendar_footer", "ajax__calendar_today" ]
}, todayWrapper);
},
_buildDays : function() {
/// <summary>
/// Builds a "days of the month" view for the calendar
/// </summary>
var dtf = Sys.CultureInfo.CurrentCulture.dateTimeFormat;
var id = this.get_id();
this._days = $common.createElementFromTemplate({
nodeName : "div",
properties : { id : id + "_days" },
cssClasses : [ "ajax__calendar_days" ]
}, this._body);
this._modes["days"] = this._days;
this._daysTable = $common.createElementFromTemplate({
nodeName : "table",
properties : {
id : id + "_daysTable",
cellPadding : 0,
cellSpacing : 0,
border : 0,
style : { margin : "auto" }
}
}, this._days);
this._daysTableHeader = $common.createElementFromTemplate({ nodeName : "thead", properties : { id : id + "_daysTableHeader" } }, this._daysTable);
this._daysTableHeaderRow = $common.createElementFromTemplate({ nodeName : "tr", properties : { id : id + "_daysTableHeaderRow" } }, this._daysTableHeader);
for (var i = 0; i < 7; i++) {
var dayCell = $common.createElementFromTemplate({ nodeName : "td" }, this._daysTableHeaderRow);
var dayDiv = $common.createElementFromTemplate({
nodeName : "div",
cssClasses : [ "ajax__calendar_dayname" ]
}, dayCell);
}
this._daysBody = $common.createElementFromTemplate({ nodeName: "tbody", properties : { id : id + "_daysBody" } }, this._daysTable);
for (var i = 0; i < 6; i++) {
var daysRow = $common.createElementFromTemplate({ nodeName : "tr" }, this._daysBody);
for(var j = 0; j < 7; j++) {
var dayCell = $common.createElementFromTemplate({ nodeName : "td" }, daysRow);
var dayDiv = $common.createElementFromTemplate({
nodeName : "div",
properties : {
mode : "day",
id : id + "_day_" + i + "_" + j,
innerHTML : " "
},
events : this._cell$delegates,
cssClasses : [ "ajax__calendar_day" ]
}, dayCell);
}
}
},
_buildMonths : function() {
/// <summary>
/// Builds a "months of the year" view for the calendar
/// </summary>
var dtf = Sys.CultureInfo.CurrentCulture.dateTimeFormat;
var id = this.get_id();
this._months = $common.createElementFromTemplate({
nodeName : "div",
properties : { id : id + "_months" },
cssClasses : [ "ajax__calendar_months" ],
visible : false
}, this._body);
this._modes["months"] = this._months;
this._monthsTable = $common.createElementFromTemplate({
nodeName : "table",
properties : {
id : id + "_monthsTable",
cellPadding : 0,
cellSpacing : 0,
border : 0,
style : { margin : "auto" }
}
}, this._months);
this._monthsBody = $common.createElementFromTemplate({ nodeName : "tbody", properties : { id : id + "_monthsBody" } }, this._monthsTable);
for (var i = 0; i < 3; i++) {
var monthsRow = $common.createElementFromTemplate({ nodeName : "tr" }, this._monthsBody);
for (var j = 0; j < 4; j++) {
var monthCell = $common.createElementFromTemplate({ nodeName : "td" }, monthsRow);
var monthDiv = $common.createElementFromTemplate({
nodeName : "div",
properties : {
id : id + "_month_" + i + "_" + j,
mode : "month",
month : (i * 4) + j,
innerHTML : "<br />" + dtf.AbbreviatedMonthNames[(i * 4) + j]
},
events : this._cell$delegates,
cssClasses : [ "ajax__calendar_month" ]
}, monthCell);
}
}
},
_buildYears : function() {
/// <summary>
/// Builds a "years in this decade" view for the calendar
/// </summary>
var id = this.get_id();
this._years = $common.createElementFromTemplate({
nodeName : "div",
properties : { id : id + "_years" },
cssClasses : [ "ajax__calendar_years" ],
visible : false
}, this._body);
this._modes["years"] = this._years;
this._yearsTable = $common.createElementFromTemplate({
nodeName : "table",
properties : {
id : id + "_yearsTable",
cellPadding : 0,
cellSpacing : 0,
border : 0,
style : { margin : "auto" }
}
}, this._years);
this._yearsBody = $common.createElementFromTemplate({ nodeName : "tbody", properties : { id : id + "_yearsBody" } }, this._yearsTable);
for (var i = 0; i < 3; i++) {
var yearsRow = $common.createElementFromTemplate({ nodeName : "tr" }, this._yearsBody);
for (var j = 0; j < 4; j++) {
var yearCell = $common.createElementFromTemplate({ nodeName : "td" }, yearsRow);
var yearDiv = $common.createElementFromTemplate({
nodeName : "div",
properties : {
id : id + "_year_" + i + "_" + j,
mode : "year",
year : ((i * 4) + j) - 1
},
events : this._cell$delegates,
cssClasses : [ "ajax__calendar_year" ]
}, yearCell);
}
}
},
_performLayout : function() {
/// <summmary>
/// Updates the various views of the calendar to match the current selected and visible dates
/// </summary>
var elt = this.get_element();
if (!elt) return;
if (!this.get_isInitialized()) return;
if (!this._isOpen) return;
var dtf = Sys.CultureInfo.CurrentCulture.dateTimeFormat;
var selectedDate = this.get_selectedDate();
var visibleDate = this._getEffectiveVisibleDate();
var todaysDate = this.get_todaysDate();
switch (this._mode) {
case "days":
var firstDayOfWeek = this._getFirstDayOfWeek();
var daysToBacktrack = visibleDate.getDay() - firstDayOfWeek;
if (daysToBacktrack <= 0)
daysToBacktrack += 7;
var startDate = new Date(visibleDate.getFullYear(), visibleDate.getMonth(), visibleDate.getDate() - daysToBacktrack, this._hourOffsetForDst);
var currentDate = startDate;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -