Code:
Ext.define(null,{
override: 'Ext.panel.Date',
privates:{
refreshPanes: function() {
if (this.isConfiguring) {
return;
}
var i, panes = this.getInnerItems();
//
for (i = 0; i < panes.length; ++i) {
panes[i].refresh();
}
},
applyDisabledDates: function(dates) {
if (!dates) {
return dates;
}
// eslint-disable-next-line vars-on-top
var cfg = {
dates: {}
},
re = [],
item, i, len;
if (dates instanceof RegExp) {
cfg.re = dates;
}
else {
if (!Ext.isArray(dates)) {
dates = [dates];
}
for (i = 0, len = dates.length; i < len; i++) {
item = dates[i];
if (item instanceof Date) {
// disable clearing of time.
//item = Ext.Date.clearTime(item);
cfg.dates[item.getTime()] = true;
}
else if (item instanceof RegExp) {
re.push(item.source);
}
else {
re.push(Ext.String.escapeRegex(item));
}
}
if (re.length) {
cfg.re = new RegExp('(?:' + re.join('|') + ')');
}
}
return cfg;
},
isDateDisabled: function(date) {
var me = this,
ms = date.getTime(),
minDate = me.getMinDate(),
maxDate = me.getMaxDate(),
disabled, disabledDays, disabledDates, formatted, re;
disabledDates = me.getDisabledDates();
if (minDate) minDate.setHours(12);
if (maxDate) maxDate.setHours(12);
disabled = (minDate && ms < minDate.getTime()) || (maxDate && ms > maxDate.getTime());
if (!disabled) {
disabledDays = me.getDisabledDays();
if (disabledDays) {
disabled = disabledDays[date.getDay()];
}
}
if (!disabled) {
if (disabledDates) {
disabled = disabledDates.dates[ms];
re = disabledDates.re;
if (!disabled && re) {
formatted = Ext.Date.format(date, me.getFormat());
disabled = re.test(formatted);
}
}
}
return !!disabled;
},
getCenterIndex: function() {
var count = this.getInnerItems().length,
index = count;
return !index ? index : index % 2 ? Math.floor(index / 2) + 1 : Math.floor(index / 2);
}
}
});
Ext.define(null, {
override: 'Ext.panel.DateView',
refreshCell: function(params) {
var me = this,
cell = params.cell,
date = params.date,
dayOfWeek = date.getDay(),
ms = date.getTime(),
specialDates = params.specialDates,
specialDays = params.specialDays,
cls = [me.cellCls],
formatted = Ext.Date.format(date, params.format),
empty = params.outside && params.hideOutside,
html, special, disabled;
if (!empty) {
if (params.outsidePrevious) {
cls.push(me.outsideCls, me.prevMonthCls);
}
else if (params.outsideNext) {
cls.push(me.outsideCls, me.nextMonthCls);
}
else {
cls.push(me.currentMonthCls);
// Today should not be marked in previous or next month
if (Ext.Date.isEqual(date, params.today)) {
cls.push(me.todayCls);
}
}
if (params.weekendDays[dayOfWeek]) {
cls.push(me.weekendDayCls);
}
if (!special && specialDays) {
special = specialDays[dayOfWeek];
}
if (specialDates) {
special = specialDates.dates[ms] ||
(specialDates.re && specialDates.re.test(formatted));
}
if (special) {
cls.push(me.specialDateCls);
}
}
else {
cls.push(me.emptyCls);
}
disabled = me.getParent().isDateDisabled(date);
if (!empty && disabled) {
cls.push(me.disabledDayCls);
}
cell.tabIndex = -1;
if (empty) {
html = ' ';
}
else {
html = Ext.Date.format(date, params.dateCellFormat);
}
cell.firstChild.innerHTML = html;
if (me.transformCellCls) {
me.transformCellCls(date, cls);
}
cell.className = cls.join(' ');
// We need this in event handlers
cell.date = date;
cell.disabled = disabled;
},
refresh: function() {
var me = this,
ExtDate = Ext.Date,
cells = me.bodyCells,
monthStart, startOffset, startDate, startDay, date,
cellMap, cell, params, i, len, outPrev, outNext,
currentMonth, month;
// Calling getters might cause recursive refresh() calls, we don't want that
if (me.refreshing) {
return;
}
me.refreshing = true;
monthStart = me.getMonth();
monthStart.setHours(12);
startDay = me.getStartDay();
startOffset = startDay - monthStart.getDay();
if (startOffset > 0) {
startOffset -= 7;
}
startDate = ExtDate.add(monthStart, ExtDate.DAY, startOffset);
cellMap = me.cellMap = {};
currentMonth = monthStart.getMonth();
params = {
today: Ext.Date.clearTime(new Date()),
weekendDays: me.getWeekendDays(),
specialDates: me.getSpecialDates(),
specialDays: me.getSpecialDays(),
format: me.getFormat(),
dateCellFormat: me.getDateCellFormat(),
hideOutside: me.getHideOutside()
};
for (i = 0, len = cells.length; i < len; i++) {
cell = cells[i];
date = ExtDate.add(startDate, ExtDate.DAY, i);
month = date.getMonth();
outPrev = month < currentMonth;
outNext = month > currentMonth;
cellMap[ExtDate.clearTime(date, true).getTime()] = cell;
params.cell = cell;
params.date = date;
params.outside = outPrev || outNext;
params.outsidePrevious = outPrev;
params.outsideNext = outNext;
me.refreshCell(params);
}
me.captionElement.setHtml(Ext.Date.format(monthStart, me.getCaptionFormat()));
me.refreshing = false;
}
});