UNPKG

@syncfusion/ej2-schedule

Version:

Flexible scheduling library with more built-in features and enhanced customization options similar to outlook and google calendar, allowing the users to plan and manage their appointments with efficient data-binding support.

740 lines (739 loc) 38.4 kB
var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); /* eslint-disable @typescript-eslint/no-explicit-any */ import { EventHandler, formatUnit, isNullOrUndefined, createElement, addClass, append, prepend, remove, extend } from '@syncfusion/ej2-base'; import { ViewBase } from './view-base'; import { MonthEvent } from '../event-renderer/month'; import * as util from '../base/util'; import * as event from '../base/constant'; import * as cls from '../base/css-constant'; /** * month view */ var Month = /** @class */ (function (_super) { __extends(Month, _super); function Month(parent) { var _this = _super.call(this, parent) || this; _this.dayNameFormat = 'wide'; _this.viewClass = 'e-month-view'; _this.isInverseTableSelect = false; _this.monthEvent = null; _this.monthDates = {}; return _this; } Month.prototype.addEventListener = function () { this.parent.on(event.scrollUiUpdate, this.onScrollUIUpdate, this); this.parent.on(event.dataReady, this.onDataReady, this); this.parent.on(event.cellClick, this.onCellClick, this); }; Month.prototype.removeEventListener = function () { if (this.parent) { this.parent.off(event.scrollUiUpdate, this.onScrollUIUpdate); this.parent.off(event.dataReady, this.onDataReady); this.parent.off(event.cellClick, this.onCellClick); } }; // eslint-disable-next-line @typescript-eslint/no-unused-vars Month.prototype.onDataReady = function (args) { this.monthEvent = new MonthEvent(this.parent); this.monthEvent.renderAppointments(); this.parent.notify(event.eventsLoaded, {}); }; // eslint-disable-next-line @typescript-eslint/no-unused-vars Month.prototype.onCellClick = function (event) { }; Month.prototype.onContentScroll = function (e) { if (!this.skipPersistenceSave) { this.parent.removeNewEventElement(); this.parent.notify(event.virtualScroll, e); this.scrollTopPanel(e.target); this.scrollLeftPanel(e.target); this.parent.uiStateValues.top = e.target.scrollTop; this.parent.uiStateValues.left = e.target.scrollLeft; this.setPersistence(); } }; Month.prototype.scrollLeftPanel = function (target) { var leftPanel = this.getLeftPanelElement(); if (leftPanel) { leftPanel.scrollTop = target.scrollTop; } }; Month.prototype.getLeftPanelElement = function () { return this.element.querySelector('.' + cls.WEEK_NUMBER_WRAPPER_CLASS); }; Month.prototype.onScrollUIUpdate = function (args) { var headerHeight = this.getHeaderBarHeight(); var header = this.getDatesHeaderElement(); var content = this.getContentAreaElement(); var height = this.parent.element.offsetHeight - headerHeight - header.offsetHeight; var leftPanel = this.getLeftPanelElement(); if (this.parent.height !== 'auto') { this.setContentHeight(content, leftPanel, height); } var scrollBarWidth = util.getScrollBarWidth(); header.firstElementChild.style[args.cssProperties.rtlBorder] = ''; header.style[args.cssProperties.rtlPadding] = ''; if (content.offsetWidth - content.clientWidth > 0) { header.firstElementChild.style[args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px'; header.style[args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px'; } else { header.firstElementChild.style[args.cssProperties.border] = ''; header.style[args.cssProperties.padding] = ''; } this.setColWidth(content); if (args.scrollPosition || !args.isPreventScrollUpdate && this.parent.currentView === 'TimelineMonth') { var top_1 = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.top : args.scrollPosition.top; if (leftPanel) { leftPanel.scrollTop = top_1; } content.scrollTop = top_1; if (this.parent.uiStateValues.isInitial) { this.scrollToSelectedDate(); this.parent.uiStateValues.isInitial = false; } else { content.scrollLeft = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.left : args.scrollPosition.left; } } this.retainScrollPosition(); }; Month.prototype.scrollToSelectedDate = function () { var selectedDate = new Date(this.parent.selectedDate); selectedDate.setHours(0, 0, 0, 0); var headerCell = this.element.querySelector('.' + cls.HEADER_CELLS_CLASS + '[data-date="' + selectedDate.getTime().toString() + '"]'); var content = this.getContentAreaElement(); if (!isNullOrUndefined(headerCell)) { content.scrollLeft = !this.parent.enableRtl ? headerCell.offsetLeft : -(this.parent.getContentTable().offsetWidth - headerCell.offsetLeft - headerCell.offsetWidth); } else { content.scrollLeft = 0; } if (content.scrollLeft === 0 && this.parent.uiStateValues.isInitial) { this.parent.uiStateValues.left = 0; } }; Month.prototype.setContentHeight = function (content, leftPanelElement, height) { content.style.height = 'auto'; if (this.parent.currentView === 'Month') { content.style.height = formatUnit(height); } if (leftPanelElement) { if (this.parent.currentView === 'MonthAgenda') { height = (this.parent.activeViewOptions.interval > 1) ? this.getContentAreaElement().firstElementChild.offsetHeight : this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).offsetHeight; } leftPanelElement.style.height = 'auto'; leftPanelElement.style.height = formatUnit(height - this.getScrollXIndent(content)); } }; Month.prototype.generateColumnLevels = function () { var colLevels = []; var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays); if (this.parent.activeViewOptions.group.resources.length > 0) { colLevels = this.parent.resourceBase.generateResourceLevels(level); if (this.parent.currentView === 'MonthAgenda') { colLevels = [level]; } if (this.parent.uiStateValues.isGroupAdaptive && this.parent.resourceBase.lastResourceLevel.length > 0) { var resourceLevel = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]; var levels_1 = this.getDateSlots(resourceLevel.renderDates, resourceLevel.workDays); if (this.parent.activeViewOptions.group.byDate && this.parent.activeViewOptions.group.hideNonWorkingDays) { var index = levels_1.findIndex(function (x, index) { return index !== 0 && x.date.getDay() === levels_1[0].date.getDay(); }); levels_1 = index > -1 ? levels_1.slice(0, index) : levels_1; } colLevels = [levels_1]; } } else { colLevels.push(level); } this.colLevels = colLevels; return colLevels; }; Month.prototype.getDateSlots = function (renderDates, workDays) { var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : workDays.length; var dateSlots = []; var isCurrentMonth = this.isCurrentMonth(this.parent.selectedDate); for (var col = 0; col < count; col++) { var classList = [cls.HEADER_CELLS_CLASS]; var currentDateIndex = renderDates.slice(0, count).map(function (date) { return date.getDay(); }); if (isCurrentMonth && currentDateIndex.indexOf(this.parent.currentTimezoneDate.getDay()) === col) { classList.push(cls.CURRENT_DAY_CLASS); } dateSlots.push({ date: renderDates[parseInt(col.toString(), 10)], type: 'monthDay', className: classList, colSpan: 1, workDays: workDays }); } return dateSlots; }; Month.prototype.getDayNameFormat = function () { if (this.parent.isAdaptive || this.parent.activeViewOptions.group.resources.length > 0) { return 'abbreviated'; } return 'wide'; }; Month.prototype.renderLayout = function (type) { this.dayNameFormat = this.getDayNameFormat(); this.setPanel(createElement('div', { className: cls.TABLE_WRAP_CLASS })); var clsList = [this.viewClass]; clsList.push(type); if (this.parent.activeViewOptions.group.byDate) { clsList.push('e-by-date'); if (this.parent.currentView !== 'Month') { this.parent.activeViewOptions.group.hideNonWorkingDays = false; } } if (this.parent.activeViewOptions.allowVirtualScrolling && !this.parent.uiStateValues.isGroupAdaptive) { clsList.push(cls.VIRTUAL_SCROLL_CLASS); } if (this.parent.rowAutoHeight && this.parent.eventSettings.ignoreWhitespace) { clsList.push(cls.IGNORE_WHITESPACE); } addClass([this.element], clsList); this.renderPanel(type); this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS)); this.element.querySelector('table').setAttribute('role', 'presentation'); this.colLevels = this.generateColumnLevels(); this.renderHeader(); this.renderContent(); var target = (this.parent.currentView === 'MonthAgenda') ? this.parent.activeView.getPanel() : this.parent.element; if (this.parent.uiStateValues.isGroupAdaptive && !target.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER)) { this.renderResourceMobileLayout(); } this.parent.notify(event.contentReady, {}); if (this.parent.uiStateValues.isCustomMonth) { this.parent.uiStateValues.isCustomMonth = false; } }; Month.prototype.refreshHeader = function () { remove(this.element.querySelector('tbody tr')); this.renderHeader(); this.parent.notify(event.contentReady, {}); var dateHeader = this.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS); var contentWrapper = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS); if (dateHeader) { dateHeader.scrollLeft = this.parent.uiStateValues.left; } if (contentWrapper) { contentWrapper.scrollLeft = this.parent.uiStateValues.left; } }; Month.prototype.wireCellEvents = function (element) { EventHandler.add(element, 'mousedown', this.parent.workCellAction.cellMouseDown, this.parent.workCellAction); EventHandler.add(element, 'click', this.parent.workCellAction.cellClick, this.parent.workCellAction); if (!this.parent.isAdaptive) { EventHandler.add(element, 'dblclick', this.parent.workCellAction.cellDblClick, this.parent.workCellAction); } }; Month.prototype.renderHeader = function () { var tr = createElement('tr'); this.renderLeftIndent(tr); var dateTd = createElement('td'); dateTd.appendChild(this.renderDatesHeader()); tr.appendChild(dateTd); prepend([tr], this.element.querySelector('tbody')); }; Month.prototype.renderLeftIndent = function (tr) { if (this.parent.activeViewOptions.showWeekNumber) { tr.appendChild(createElement('td', { className: 'e-left-indent' })); } }; Month.prototype.renderContent = function () { if (this.parent.activeViewOptions.group.resources.length > 0) { this.parent.resourceBase.renderedResources = extend([], this.parent.resourceBase.lastResourceLevel, null, true); } var tr = createElement('tr'); if (this.parent.activeViewOptions.showWeekNumber) { tr.appendChild(this.renderWeekNumberContent()); } var workTd = createElement('td'); var levels = this.colLevels.slice(0); if (this.parent.virtualScrollModule) { this.resetColLevels(); } var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS }); var contentArea = this.renderContentArea(); if (this.parent.currentView === 'Month') { wrap.appendChild(contentArea); } else { var monthAgendaWrapper = createElement('div', { className: cls.TABLE_CONTAINER_CLASS }); monthAgendaWrapper.appendChild(contentArea); wrap.appendChild(monthAgendaWrapper); } EventHandler.add(wrap, 'scroll', this.onContentScroll, this); workTd.appendChild(wrap); tr.appendChild(workTd); if (this.parent.virtualScrollModule) { this.colLevels = levels; this.parent.virtualScrollModule.renderVirtualTrack(wrap); } this.element.querySelector('tbody').appendChild(tr); this.renderAppointmentContainer(); }; Month.prototype.renderWeekNumberContent = function () { var dateCol = this.renderDates.map(function (date) { return new Date(+date); }); var td = createElement('td'); var contentWrapper = createElement('div', { className: cls.WEEK_NUMBER_WRAPPER_CLASS }); td.appendChild(contentWrapper); var contentWrapTable = this.createTableLayout(); contentWrapper.appendChild(contentWrapTable); var noOfDays = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : this.parent.activeViewOptions.workDays.length; for (var i = 0, length_1 = (this.renderDates.length / noOfDays); i < length_1; i++) { var dates = dateCol.splice(0, noOfDays); var weekNumber = this.parent.getWeekNumberContent(dates); contentWrapTable.querySelector('tbody').appendChild(this.createWeekNumberElement(weekNumber)); } return td; }; Month.prototype.renderAppointmentContainer = function () { //Here needs to render mobile view appointment details on selected date }; Month.prototype.renderDatesHeader = function () { var container = createElement('div', { className: cls.DATE_HEADER_CONTAINER_CLASS }); var wrap = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS }); container.appendChild(wrap); var table = this.createTableLayout(); if (this.parent.currentView === 'Month') { var thead = createElement('thead'); thead.appendChild(createElement('tr')); prepend([thead], table); } this.createColGroup(table, this.colLevels[this.colLevels.length - 1]); var trEle = createElement('tr'); for (var i = 0; i < this.colLevels.length; i++) { var level = this.colLevels[parseInt(i.toString(), 10)]; var ntr = trEle.cloneNode(); for (var j = 0; j < level.length; j++) { var td = level[parseInt(j.toString(), 10)]; ntr.appendChild(this.createHeaderCell(td)); } table.querySelector('tbody').appendChild(ntr); } wrap.appendChild(table); return container; }; Month.prototype.createHeaderCell = function (td) { var tdEle = createElement('td'); this.addAttributes(td, tdEle); if (td.type === 'monthDay') { var ele = createElement('span', { innerHTML: util.capitalizeFirstWord(this.parent.getDayNames(this.dayNameFormat)[td.date.getDay()], 'single') }); tdEle.appendChild(ele); } if (td.type === 'resourceHeader') { this.setResourceHeaderContent(tdEle, td); } if (td.type === 'dateHeader') { addClass([tdEle], cls.DATE_HEADER_CLASS); tdEle.setAttribute('data-date', td.date.getTime().toString()); if (this.parent.activeViewOptions.dateHeaderTemplate) { var cellArgs = { date: td.date, type: td.type }; var elementId = this.parent.element.id + '_'; var viewName = this.parent.activeViewOptions.dateHeaderTemplateName; var templateId = elementId + viewName + 'dateHeaderTemplate'; var dateTemplate = [].slice.call(this.parent.getDateHeaderTemplate()(cellArgs, this.parent, 'dateHeaderTemplate', templateId, false, undefined, undefined, this.parent.root)); if (dateTemplate && dateTemplate.length) { append(dateTemplate, tdEle); } } else { var ele = createElement('span', { className: cls.NAVIGATE_CLASS }); var skeleton = 'full'; var title = this.parent.globalize.formatDate(td.date, { skeleton: skeleton, calendar: this.parent.getCalendarMode() }); ele.setAttribute('title', util.capitalizeFirstWord(title, 'multiple')); var innerText = (this.parent.calendarUtil.isMonthStart(td.date) && !this.isCurrentDate(td.date) && !this.parent.isAdaptive) ? this.parent.globalize.formatDate(td.date, { format: 'MMM d', calendar: this.parent.getCalendarMode() }) : this.parent.globalize.formatDate(td.date, { skeleton: 'd', calendar: this.parent.getCalendarMode() }); ele.innerHTML = util.capitalizeFirstWord(innerText, 'single'); tdEle.appendChild(ele); } this.wireCellEvents(tdEle); } var args = { elementType: td.type, element: tdEle, date: td.date, groupIndex: td.groupIndex }; this.parent.trigger(event.renderCell, args); return tdEle; }; Month.prototype.getContentSlots = function () { if (!(this.colLevels[this.colLevels.length - 1] && this.colLevels[this.colLevels.length - 1][0])) { return []; } var slotDatas = []; var prepareSlots = function (rowIndex, renderDate, resData, classList) { var data = { date: new Date(+renderDate), groupIndex: resData.groupIndex, workDays: resData.workDays, type: 'monthCells', className: classList || [cls.WORK_CELLS_CLASS] }; if (!slotDatas[parseInt(rowIndex.toString(), 10)]) { slotDatas[parseInt(rowIndex.toString(), 10)] = []; } slotDatas[parseInt(rowIndex.toString(), 10)].push(data); }; var includeResource = this.parent.currentView !== 'MonthAgenda' && this.parent.activeViewOptions.group.resources.length > 0; if (includeResource && !this.parent.uiStateValues.isGroupAdaptive && !this.parent.activeViewOptions.group.byDate) { for (var _i = 0, _a = this.colLevels[this.colLevels.length - 2]; _i < _a.length; _i++) { var res = _a[_i]; var dates = res.renderDates.map(function (date) { return new Date(+date); }); var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : res.workDays.length; for (var i = 0; i < (res.renderDates.length / count); i++) { var colDates = dates.splice(0, count); for (var _b = 0, colDates_1 = colDates; _b < colDates_1.length; _b++) { var colDate = colDates_1[_b]; prepareSlots(i, colDate, res); } } } } else { var dates = this.renderDates.map(function (date) { return new Date(+date); }); var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : this.parent.activeViewOptions.workDays.length; var level = this.colLevels.slice(0, 1)[0]; var startIndex = this.renderDates.map(Number).indexOf(+level[0].date); for (var i = 0; i < (this.renderDates.length / count); i++) { var colDates = dates.splice(0, count); var k = startIndex; var _loop_1 = function (j) { var colDate = colDates[parseInt(k.toString(), 10)]; k++; if (includeResource) { var lastRow = this_1.colLevels[(this_1.colLevels.length - 1)]; var rowCount = lastRow.length / count; var resourcesTd = lastRow.slice(0, rowCount); if (this_1.parent.activeViewOptions.group.hideNonWorkingDays) { resourcesTd = lastRow.filter(function (x) { return x.date.getDay() === colDate.getDay(); }); if (resourcesTd.length === 0) { j = j - 1; return out_j_1 = j, "continue"; } } for (var resIndex = 0; resIndex < resourcesTd.length; resIndex++) { var clsList = void 0; if (resIndex !== 0) { clsList = [cls.WORK_CELLS_CLASS, cls.DISABLE_DATE]; } prepareSlots(i, colDate, resourcesTd[parseInt(resIndex.toString(), 10)], clsList); } } else { prepareSlots(i, colDate, this_1.colLevels[this_1.colLevels.length - 1][0]); } out_j_1 = j; }; var this_1 = this, out_j_1; for (var j = startIndex; j < (this.colLevels[0].length + startIndex) && j < colDates.length; j++) { _loop_1(j); j = out_j_1; } } } return slotDatas; }; Month.prototype.updateClassList = function (data) { if (!this.isCustomMonth() && this.isOtherMonth(data.date)) { data.className.push(cls.OTHERMONTH_CLASS); } if (!this.parent.isMinMaxDate(data.date)) { data.className.push(cls.DISABLE_DATES); } this.updateSelectedCellClass(data); }; // eslint-disable-next-line @typescript-eslint/no-unused-vars Month.prototype.updateSelectedCellClass = function (data) { return; }; Month.prototype.isOtherMonth = function (date) { return date.getTime() < this.monthDates.start.getTime() || date.getTime() > this.monthDates.end.getTime(); }; Month.prototype.renderContentArea = function () { var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS); this.setAriaAttributes(tbl); this.addAutoHeightClass(tbl); if (this.parent.currentView === 'TimelineMonth') { this.createColGroup(tbl, this.colLevels[this.colLevels.length - 1]); } var monthDate = new Date(this.parent.selectedDate.getTime()); this.monthDates = { start: this.parent.calendarUtil.firstDateOfMonth(monthDate), end: this.parent.calendarUtil.lastDateOfMonth(util.addMonths(monthDate, this.parent.activeViewOptions.interval - 1)) }; var tBody = tbl.querySelector('tbody'); append(this.getContentRows(), tBody); this.wireCellEvents(tBody); return tbl; }; Month.prototype.getContentRows = function () { var trows = []; var tr = createElement('tr'); var td = createElement('td'); var slotDatas = this.getContentSlots(); var isTimeline = this.parent.currentView === 'TimelineMonth'; var existingGroupIndices = isTimeline ? this.getGroupIndices() : []; for (var row = 0; row < slotDatas.length; row++) { if (existingGroupIndices.length > 0 && existingGroupIndices.indexOf(slotDatas[parseInt(row.toString(), 10)][0].groupIndex) > -1) { continue; } var ntr = tr.cloneNode(); for (var col = 0; col < slotDatas[parseInt(row.toString(), 10)].length; col++) { var ntd = this.createContentTd(slotDatas[parseInt(row.toString(), 10)][parseInt(col.toString(), 10)], td); ntr.appendChild(ntd); } trows.push(ntr); } return trows; }; Month.prototype.createContentTd = function (data, td) { var ntd = td.cloneNode(); if (data.colSpan) { ntd.setAttribute('colspan', data.colSpan.toString()); } this.updateClassList(data); var type = data.type; if (data.className.indexOf(cls.RESOURCE_PARENT_CLASS) !== -1) { data.className.push(cls.RESOURCE_GROUP_CELLS_CLASS); type = 'resourceGroupCells'; } if (this.parent.workHours.highlight && this.isWorkDay(data.date, data.workDays)) { data.className.push(cls.WORKDAY_CLASS); } if (this.isCurrentDate(data.date)) { data.className.push(cls.CURRENTDATE_CLASS); } addClass([ntd], data.className); ntd.setAttribute('data-date', data.date.getTime().toString()); if (!isNullOrUndefined(data.groupIndex) || this.parent.uiStateValues.isGroupAdaptive) { var groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex : data.groupIndex; ntd.setAttribute('data-group-index', '' + groupIndex); } this.renderDateHeaderElement(data, ntd); if (this.parent.activeViewOptions.cellTemplate) { var args_1 = { date: data.date, type: type, groupIndex: data.groupIndex }; var scheduleId = this.parent.element.id + '_'; var viewName = this.parent.activeViewOptions.cellTemplateName; var templateId = scheduleId + viewName + 'cellTemplate'; var cellTemplate = [].slice.call(this.parent.getCellTemplate()(args_1, this.parent, 'cellTemplate', templateId, false, undefined, undefined, this.parent.root)); append(cellTemplate, ntd); } var args = { elementType: type, element: ntd, date: data.date, groupIndex: data.groupIndex }; this.parent.trigger(event.renderCell, args); return ntd; }; Month.prototype.renderDateHeaderElement = function (data, ntd) { if (this.parent.currentView === 'TimelineMonth') { return; } var dateHeader = createElement('div', { className: cls.DATE_HEADER_CLASS }); if (this.parent.activeViewOptions.cellHeaderTemplate) { var args = { date: data.date, type: data.type, groupIndex: data.groupIndex }; var scheduleId = this.parent.element.id + '_'; var viewName = this.parent.activeViewOptions.cellHeaderTemplateName; var templateId = scheduleId + viewName + 'cellHeaderTemplate'; var cellHeaderTemplate = [].slice.call(this.parent.getCellHeaderTemplate()(args, this.parent, 'cellHeaderTemplate', templateId, false, undefined, undefined, this.parent.root)); append(cellHeaderTemplate, dateHeader); } else { var innerText = (this.parent.calendarUtil.isMonthStart(data.date) && !this.isCurrentDate(data.date) && !this.parent.isAdaptive) ? this.parent.globalize.formatDate(data.date, { format: 'MMM d', calendar: this.parent.getCalendarMode() }) : this.parent.globalize.formatDate(data.date, { skeleton: 'd', calendar: this.parent.getCalendarMode() }); dateHeader.innerHTML = util.capitalizeFirstWord(innerText, 'single'); } ntd.appendChild(dateHeader); if (this.getModuleName() === 'month') { addClass([dateHeader], cls.NAVIGATE_CLASS); var skeleton = 'full'; var announcementText = this.parent.globalize.formatDate(data.date, { skeleton: skeleton, calendar: this.parent.getCalendarMode() }); ntd.setAttribute('aria-label', announcementText); } }; Month.prototype.getMonthStart = function (currentDate) { var useDisplayDate = this.parent.currentView === 'Month' && !isNullOrUndefined(this.parent.activeViewOptions.displayDate) && !(this.parent.uiStateValues.isSwipeScroll) && (this.parent.uiStateValues.isCustomMonth || this.isCustomRange()); var date = useDisplayDate ? this.parent.activeViewOptions.displayDate : !(this.parent.uiStateValues.isCustomMonth || (!this.parent.uiStateValues.isSwipeScroll && this.isCustomRange())) && this.isCustomMonth() ? currentDate : this.parent.calendarUtil.firstDateOfMonth(currentDate); var monthStart = util.getWeekFirstDate(date, this.parent.activeViewOptions.firstDayOfWeek); return new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate()); }; Month.prototype.getMonthEnd = function (currentDate) { if (this.isCustomMonth()) { var start = this.getMonthStart(currentDate); var numberOfDays = util.WEEK_LENGTH * (this.parent.activeViewOptions.numberOfWeeks > 0 ? this.parent.activeViewOptions.numberOfWeeks : util.DEFAULT_WEEKS); return util.addDays(start, (numberOfDays - 1)); } else { var endDate = util.addMonths(currentDate, this.parent.activeViewOptions.interval - 1); var lastWeekOfMonth = util.getWeekFirstDate(this.parent.calendarUtil.lastDateOfMonth(endDate), this.parent.activeViewOptions.firstDayOfWeek); return util.addDays(lastWeekOfMonth, util.WEEK_LENGTH - 1); } }; Month.prototype.isCustomRange = function () { var dates = this.parent.getCurrentViewDates(); if (dates && dates.length > 0) { var selectedTime = util.resetTime(this.parent.selectedDate).getTime(); var weekFirstDate = util.getWeekFirstDate(dates[dates.length - 1], this.parent.activeViewOptions.firstDayOfWeek); return !(selectedTime >= util.getWeekFirstDate(dates[0], this.parent.activeViewOptions.firstDayOfWeek).getTime() && selectedTime <= util.addDays(weekFirstDate, 6).getTime()); } return false; }; Month.prototype.getRenderDates = function (workDays, selectedDate) { if (selectedDate === void 0) { selectedDate = this.parent.selectedDate; } var renderDates = []; var currentDate = util.resetTime(selectedDate); var start = this.getMonthStart(currentDate); var monthEnd = this.getMonthEnd(currentDate); do { if (this.parent.activeViewOptions.showWeekend) { renderDates.push(start); } else { if (this.isWorkDay(start, workDays)) { renderDates.push(start); } } start = util.addDays(start, 1); if (start.getHours() > 0) { start = util.resetTime(start); } } while (start.getTime() <= monthEnd.getTime()); if (!workDays) { this.renderDates = renderDates; } if (this.parent.headerModule) { this.parent.headerModule.previousNextIconHandler(); } return renderDates; }; Month.prototype.getNextPreviousDate = function (type) { if (this.isCustomMonth()) { var dates = this.parent.getCurrentViewDates(); var date = util.getWeekFirstDate(type === 'Next' ? dates[dates.length - 1] : dates[0], this.parent.activeViewOptions.firstDayOfWeek); return util.addDays(date, type === 'Next' ? util.WEEK_LENGTH : -(this.parent.activeViewOptions.numberOfWeeks > 0 ? this.parent.activeViewOptions.numberOfWeeks : util.DEFAULT_WEEKS) * util.WEEK_LENGTH); } else { return util.addMonths(this.parent.selectedDate, ((type === 'Next' ? 1 : -1) * this.parent.activeViewOptions.interval)); } }; Month.prototype.getStartDate = function () { return this.getMonthStart(this.parent.selectedDate); }; Month.prototype.getEndDate = function () { return this.getMonthEnd(this.parent.selectedDate); }; Month.prototype.getEndDateFromStartDate = function (start) { return util.addDays(new Date(start.getTime()), 1); }; Month.prototype.getDateRangeText = function (startDate, dateCollection) { if (startDate === void 0) { startDate = this.parent.selectedDate; } if (dateCollection === void 0) { dateCollection = null; } if (this.parent.isAdaptive || isNullOrUndefined(this.parent.activeViewOptions.dateFormat)) { var maxNumberOfDaysPerWeek = 7; startDate = !isNullOrUndefined(dateCollection) && dateCollection.length > maxNumberOfDaysPerWeek - 1 ? dateCollection[maxNumberOfDaysPerWeek - 1] : startDate; var endDate = void 0; var updateCustomRange = false; if (this.isCustomMonth()) { var dates = !isNullOrUndefined(dateCollection) && dateCollection.length > 0 ? dateCollection : this.parent.getCurrentViewDates(); updateCustomRange = dates[0].getMonth() !== dates[dates.length - 1].getMonth() || dates[0].getFullYear() !== dates[dates.length - 1].getFullYear(); if (updateCustomRange) { startDate = dates[0]; endDate = dates[dates.length - 1]; } } var isUpdateDateRange = (this.parent.currentView !== 'Month' || !this.isCustomMonth()); if (this.parent.activeViewOptions.interval > 1 && isUpdateDateRange || updateCustomRange) { endDate = endDate ? endDate : util.addMonths(util.lastDateOfMonth(startDate), this.parent.activeViewOptions.interval - 1); if (startDate.getFullYear() === endDate.getFullYear()) { var monthNames = (this.parent.globalize.formatDate(startDate, { format: 'MMMM', calendar: this.parent.getCalendarMode() })) + ' - ' + (this.parent.globalize.formatDate(endDate, { format: 'MMMM ', calendar: this.parent.getCalendarMode() })) + this.parent.globalize.formatDate(endDate, { skeleton: 'y', calendar: this.parent.getCalendarMode() }); return util.capitalizeFirstWord(monthNames, 'single'); } var text = (this.parent.globalize.formatDate(startDate, { format: 'MMMM', calendar: this.parent.getCalendarMode() })) + ' ' + startDate.getFullYear() + ' - ' + this.parent.globalize.formatDate(endDate, { format: 'MMMM ', calendar: this.parent.getCalendarMode() }) + this.parent.globalize.formatDate(endDate, { skeleton: 'y', calendar: this.parent.getCalendarMode() }); return util.capitalizeFirstWord(text, 'single'); } var format = (this.parent.activeViewOptions.dateFormat) ? this.parent.activeViewOptions.dateFormat : 'MMMM y'; return util.capitalizeFirstWord(this.parent.globalize.formatDate(startDate, { format: format, calendar: this.parent.getCalendarMode() }), 'single'); } return this.formatDateRange(!isNullOrUndefined(dateCollection) && dateCollection.length > 0 ? dateCollection[0] : this.parent.selectedDate); }; Month.prototype.getLabelText = function (view) { var viewStr = view.charAt(0).toLowerCase() + view.substring(1); return this.formatViewLabel(viewStr, this.getStartDate(), this.getEndDate()); }; Month.prototype.createWeekNumberElement = function (text) { var tr = createElement('tr'); var td = createElement('td', { className: cls.WEEK_NUMBER_CLASS, attrs: { 'title': (text ? this.parent.localeObj.getConstant('week') + ' ' + text : '') }, innerHTML: (text || '') }); tr.appendChild(td); var args = { elementType: 'weekNumberCell', element: td }; this.parent.trigger(event.renderCell, args); return tr; }; Month.prototype.unWireEvents = function () { var contentScrollableEle = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS); if (contentScrollableEle) { EventHandler.remove(contentScrollableEle, 'scroll', this.onContentScroll); } }; Month.prototype.isCustomMonth = function () { return this.parent.currentView === 'Month' && (!isNullOrUndefined(this.parent.activeViewOptions.displayDate) || this.parent.activeViewOptions.numberOfWeeks > 0); }; Month.prototype.getModuleName = function () { return 'month'; }; Month.prototype.destroy = function () { if (!this.parent || this.parent && this.parent.isDestroyed) { this.parent = null; return; } if (this.element) { if (this.monthEvent) { this.monthEvent.destroy(); this.monthEvent = null; } this.unWireEvents(); if (this.parent.resourceBase) { this.parent.resourceBase.destroy(); } if (this.parent.scheduleTouchModule) { this.parent.scheduleTouchModule.resetValues(); } _super.prototype.destroy.call(this); } }; return Month; }(ViewBase)); export { Month };