devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
342 lines (256 loc) • 11.9 kB
JavaScript
"use strict";
var $ = require("../../core/renderer"),
noop = require("../../core/utils/common").noop,
BaseView = require("./ui.calendar.base_view"),
dateUtils = require("../../core/utils/date"),
extend = require("../../core/utils/extend").extend,
dateLocalization = require("../../localization/date"),
dateSerialization = require("../../core/utils/date_serialization"),
typeUtils = require("../../core/utils/type");
var CALENDAR_OTHER_MONTH_CLASS = "dx-calendar-other-month",
CALENDAR_OTHER_VIEW_CLASS = "dx-calendar-other-view";
var Views = {
"month": BaseView.inherit({
_getViewName: function _getViewName() {
return "month";
},
_getDefaultOptions: function _getDefaultOptions() {
return extend(this.callBase(), {
firstDayOfWeek: undefined,
rowCount: 6,
colCount: 7
});
},
_renderImpl: function _renderImpl() {
this.callBase();
this._renderHeader();
},
_renderBody: function _renderBody() {
this.callBase();
this._$table.find("." + CALENDAR_OTHER_VIEW_CLASS).addClass(CALENDAR_OTHER_MONTH_CLASS);
},
_renderFocusTarget: noop,
getCellAriaLabel: function getCellAriaLabel(date) {
return dateLocalization.format(date, "longdate");
},
_renderHeader: function _renderHeader() {
var that = this;
var $header = $("<thead>");
this._$table.prepend($header);
var $headerRow = $("<tr>");
$header.append($headerRow);
var appendCell = this.option("rtl") ? function (row, cell) {
row.prepend(cell);
} : function (row, cell) {
row.append(cell);
};
this._iterateCells(this.option("colCount"), function (i) {
var $cell = $("<th>").text(that._getDayCaption(that._getFirstDayOfWeek() + i));
appendCell($headerRow, $cell);
});
},
getNavigatorCaption: function getNavigatorCaption() {
return dateLocalization.format(this.option("date"), "monthandyear");
},
_isTodayCell: function _isTodayCell(cellDate) {
var today = new Date();
return dateUtils.sameDate(cellDate, today);
},
_isDateOutOfRange: function _isDateOutOfRange(cellDate) {
var minDate = this.option("min"),
maxDate = this.option("max");
return !dateUtils.dateInRange(cellDate, minDate, maxDate, "date");
},
_isOtherView: function _isOtherView(cellDate) {
return cellDate.getMonth() !== this.option("date").getMonth();
},
_getCellText: function _getCellText(cellDate) {
return dateLocalization.format(cellDate, "d");
},
_getDayCaption: function _getDayCaption(day) {
var daysInWeek = this.option("colCount");
return dateLocalization.getDayNames("abbreviated")[day % daysInWeek];
},
_getFirstCellData: function _getFirstCellData() {
var firstDay = dateUtils.getFirstMonthDate(this.option("date")),
firstMonthDayOffset = this._getFirstDayOfWeek() - firstDay.getDay(),
daysInWeek = this.option("colCount");
if (firstMonthDayOffset >= 0) {
firstMonthDayOffset -= daysInWeek;
}
firstDay.setDate(firstDay.getDate() + firstMonthDayOffset);
return firstDay;
},
_getNextCellData: function _getNextCellData(date) {
date = new Date(date);
date.setDate(date.getDate() + 1);
return date;
},
_getFirstDayOfWeek: function _getFirstDayOfWeek() {
return typeUtils.isDefined(this.option("firstDayOfWeek")) ? this.option("firstDayOfWeek") : dateLocalization.firstDayOfWeekIndex();
},
_getCellByDate: function _getCellByDate(date) {
return this._$table.find("td[data-value='" + dateSerialization.serializeDate(date, dateUtils.getShortDateFormat()) + "']");
},
isBoundary: function isBoundary(date) {
return dateUtils.sameMonthAndYear(date, this.option("min")) || dateUtils.sameMonthAndYear(date, this.option("max"));
},
_getDefaultDisabledDatesHandler: function _getDefaultDisabledDatesHandler(disabledDates) {
return function (args) {
var isDisabledDate = disabledDates.some(function (item) {
return dateUtils.sameDate(item, args.date);
});
if (isDisabledDate) {
return true;
}
};
}
}),
"year": BaseView.inherit({
_getViewName: function _getViewName() {
return "year";
},
_isTodayCell: function _isTodayCell(cellDate) {
return dateUtils.sameMonthAndYear(cellDate, new Date());
},
_isDateOutOfRange: function _isDateOutOfRange(cellDate) {
return !dateUtils.dateInRange(cellDate, dateUtils.getFirstMonthDate(this.option("min")), dateUtils.getLastMonthDate(this.option("max")));
},
_isOtherView: function _isOtherView() {
return false;
},
_getCellText: function _getCellText(cellDate) {
return dateLocalization.getMonthNames("abbreviated")[cellDate.getMonth()];
},
_getFirstCellData: function _getFirstCellData() {
var data = new Date(this.option("date"));
data.setDate(1);
data.setMonth(0);
return data;
},
_getNextCellData: function _getNextCellData(date) {
date = new Date(date);
date.setMonth(date.getMonth() + 1);
return date;
},
_getCellByDate: function _getCellByDate(date) {
var foundDate = new Date(date);
foundDate.setDate(1);
return this._$table.find("td[data-value='" + dateSerialization.serializeDate(foundDate, dateUtils.getShortDateFormat()) + "']");
},
getCellAriaLabel: function getCellAriaLabel(date) {
return dateLocalization.format(date, "monthandyear");
},
getNavigatorCaption: function getNavigatorCaption() {
return dateLocalization.format(this.option("date"), "yyyy");
},
isBoundary: function isBoundary(date) {
return dateUtils.sameYear(date, this.option("min")) || dateUtils.sameYear(date, this.option("max"));
}
}),
"decade": BaseView.inherit({
_getViewName: function _getViewName() {
return "decade";
},
_isTodayCell: function _isTodayCell(cellDate) {
return dateUtils.sameYear(cellDate, new Date());
},
_isDateOutOfRange: function _isDateOutOfRange(cellDate) {
var min = this.option("min"),
max = this.option("max");
return !dateUtils.dateInRange(cellDate.getFullYear(), min && min.getFullYear(), max && max.getFullYear());
},
_isOtherView: function _isOtherView(cellDate) {
var date = new Date(cellDate);
date.setMonth(1);
return !dateUtils.sameDecade(date, this.option("date"));
},
_getCellText: function _getCellText(cellDate) {
return dateLocalization.format(cellDate, "yyyy");
},
_getFirstCellData: function _getFirstCellData() {
var year = dateUtils.getFirstYearInDecade(this.option("date")) - 1;
return new Date(year, 0, 1);
},
_getNextCellData: function _getNextCellData(date) {
date = new Date(date);
date.setFullYear(date.getFullYear() + 1);
return date;
},
getNavigatorCaption: function getNavigatorCaption() {
var currentDate = this.option("date"),
firstYearInDecade = dateUtils.getFirstYearInDecade(currentDate),
startDate = new Date(currentDate),
endDate = new Date(currentDate);
startDate.setFullYear(firstYearInDecade);
endDate.setFullYear(firstYearInDecade + 9);
return dateLocalization.format(startDate, "yyyy") + "-" + dateLocalization.format(endDate, "yyyy");
},
_isValueOnCurrentView: function _isValueOnCurrentView(currentDate, value) {
return dateUtils.sameDecade(currentDate, value);
},
_getCellByDate: function _getCellByDate(date) {
var foundDate = new Date(date);
foundDate.setDate(1);
foundDate.setMonth(0);
return this._$table.find("td[data-value='" + dateSerialization.serializeDate(foundDate, dateUtils.getShortDateFormat()) + "']");
},
isBoundary: function isBoundary(date) {
return dateUtils.sameDecade(date, this.option("min")) || dateUtils.sameDecade(date, this.option("max"));
}
}),
"century": BaseView.inherit({
_getViewName: function _getViewName() {
return "century";
},
_isTodayCell: function _isTodayCell(cellDate) {
return dateUtils.sameDecade(cellDate, new Date());
},
_isDateOutOfRange: function _isDateOutOfRange(cellDate) {
var decade = dateUtils.getFirstYearInDecade(cellDate),
minDecade = dateUtils.getFirstYearInDecade(this.option("min")),
maxDecade = dateUtils.getFirstYearInDecade(this.option("max"));
return !dateUtils.dateInRange(decade, minDecade, maxDecade);
},
_isOtherView: function _isOtherView(cellDate) {
var date = new Date(cellDate);
date.setMonth(1);
return !dateUtils.sameCentury(date, this.option("date"));
},
_getCellText: function _getCellText(cellDate) {
var startDate = dateLocalization.format(cellDate, "yyyy"),
endDate = new Date(cellDate);
endDate.setFullYear(endDate.getFullYear() + 9);
return startDate + " - " + dateLocalization.format(endDate, "yyyy");
},
_getFirstCellData: function _getFirstCellData() {
var decade = dateUtils.getFirstDecadeInCentury(this.option("date")) - 10;
return new Date(decade, 0, 1);
},
_getNextCellData: function _getNextCellData(date) {
date = new Date(date);
date.setFullYear(date.getFullYear() + 10);
return date;
},
_getCellByDate: function _getCellByDate(date) {
var foundDate = new Date(date);
foundDate.setDate(1);
foundDate.setMonth(0);
foundDate.setFullYear(dateUtils.getFirstYearInDecade(foundDate));
return this._$table.find("td[data-value='" + dateSerialization.serializeDate(foundDate, dateUtils.getShortDateFormat()) + "']");
},
getNavigatorCaption: function getNavigatorCaption() {
var currentDate = this.option("date"),
firstDecadeInCentury = dateUtils.getFirstDecadeInCentury(currentDate),
startDate = new Date(currentDate),
endDate = new Date(currentDate);
startDate.setFullYear(firstDecadeInCentury);
endDate.setFullYear(firstDecadeInCentury + 99);
return dateLocalization.format(startDate, "yyyy") + "-" + dateLocalization.format(endDate, "yyyy");
},
isBoundary: function isBoundary(date) {
return dateUtils.sameCentury(date, this.option("min")) || dateUtils.sameCentury(date, this.option("max"));
}
})
};
module.exports = Views;