UNPKG

calenstyle

Version:

CalenStyle is a Responsive Drag-and-Drop Event Calendar for Web, iOS, Android & Windows. CalenStyle is customizable plugin having multiple, clean-designed event calendar templates specially designed for web & mobile applications.

1,336 lines (1,114 loc) 135 kB
/* ----------------------------------------------------------------------------- CalenStyle - Responsive Event Calendar Version 2.0.8 Copyright (c)2017 Lajpat Shah Contributors : https://github.com/nehakadam/CalenStyle/contributors Repository : https://github.com/nehakadam/CalenStyle Homepage : https://nehakadam.github.io/CalenStyle ----------------------------------------------------------------------------- */ /*! ---------------------------------- CalenStyle Detail View Start ---------------------------------- */ //"use strict"; CalenStyle.prototype = $.extend(CalenStyle.prototype, { _getTimeSlotsArrayForCurrentView: function() { var to = this; var iNumOfDays = $.cf.compareStrings(to.setting.visibleView, "DayEventDetailView") ? 1 : to.tv.iNoVDay, iMaxTimeSlots = 24 * to.tv.iUTmSlt, bArrTemp, iDateIndex, iSlotsIndex, iTempIndex, iNumOfSlotsSpanned, iTempHour, iTempMinutes, iTempSlot, iTempSlotIndex; to.tv.bADVCur = []; to.tv.sADVInfo = []; // ---------------------- Set arrayOfTimeSlots Start -------------------------- for(iDateIndex = 0; iDateIndex < iNumOfDays; iDateIndex++) { bArrTemp = []; for(var iHoursIndex = 0; iHoursIndex < 24; iHoursIndex++) { for(iSlotsIndex = 0; iSlotsIndex < to.tv.iUTmSlt; iSlotsIndex++) { bArrTemp.push(0); } } bArrTemp.push(0); // For All Day to.tv.bADVCur.push(bArrTemp); } // ---------------------- Set arrayOfTimeSlots End ---------------------------- // ------------- Set RestrictedSection and BusinessHours in arrayOfTimeSlots Start -------------- var dThisTempDate = new Date(to.tv.dVDSDt), iThisTempDate = to.tv.dVDSDt.getTime(); for(iDateIndex = 0; iDateIndex < iNumOfDays; iDateIndex++) { if(to.tv.bABsDays[dThisTempDate.getDay()] || !to.setting.excludeNonBusinessHours) { bArrTemp = to.tv.bADVCur[iDateIndex]; var dArrTempResSec = to._getRestrictedSectionForCurrentView(dThisTempDate), oArrTempBusinessHours = to._getBusinessHoursForCurrentView(dThisTempDate); // ---------------------- Set Available Date Array Indicator Start -------------------------- if(oArrTempBusinessHours.length > 0) { for(iTempIndex = 0; iTempIndex < oArrTempBusinessHours.length; iTempIndex++) { var dArrTempAvailable = oArrTempBusinessHours[iTempIndex], dTempAvailableStart = new Date(dArrTempAvailable[0]), dTempAvailableEnd = new Date(dArrTempAvailable[1]); iNumOfSlotsSpanned = Math.floor((dTempAvailableEnd.getTime() - dTempAvailableStart.getTime()) / to.tv.iUTmMS); iTempHour = dTempAvailableStart.getHours(); iTempMinutes = dTempAvailableStart.getMinutes(); iTempSlot = Math.floor(iTempMinutes / to.setting.unitTimeInterval); for(iSlotsIndex = 0; iSlotsIndex < iNumOfSlotsSpanned; iSlotsIndex++) { iTempSlotIndex = (iTempHour === 0) ? iTempSlot : ((iTempHour * to.tv.iUTmSlt) + iTempSlot); bArrTemp[iTempSlotIndex] = 1; iTempMinutes += to.setting.unitTimeInterval; iTempSlot = Math.floor(iTempMinutes / to.setting.unitTimeInterval); if(iTempMinutes >= 60) { iTempMinutes = iTempMinutes % to.setting.unitTimeInterval; iTempSlot = Math.floor(iTempMinutes / to.setting.unitTimeInterval); iTempHour += 1; } } } } // ----------------------- Set Available Date Array Indicator End --------------------------- // --------------- Set RestrictedSection Date Array Indicator Start --------------------------------- if(dArrTempResSec.length > 0) { for(iTempIndex = 0; iTempIndex < dArrTempResSec.length; iTempIndex++) { var dArrResSec = dArrTempResSec[iTempIndex], dTempResSecStart = new Date(dArrResSec.start), bCompStart = to.compareDates(dThisTempDate, dTempResSecStart) === 0, dTempResSecEnd = new Date(dArrResSec.end), bCompEnd = to.compareDates(dThisTempDate, dTempResSecEnd) === 0; if(!bCompStart) dTempResSecStart = to._normalizeDateTime(dThisTempDate, "START", "T"); if(!bCompEnd) dTempResSecEnd = to._normalizeDateTime(dThisTempDate, "END", "T"); iNumOfSlotsSpanned = Math.round((dTempResSecEnd.getTime() - dTempResSecStart.getTime()) / to.tv.iUTmMS); iNumOfSlotsSpanned = (iNumOfSlotsSpanned === 0) ? 1 : (iNumOfSlotsSpanned > iMaxTimeSlots) ? iMaxTimeSlots : iNumOfSlotsSpanned; var iInfoIndex = 2, oDVInfo, bBGColorFound = false, bClassFound = false, bMatchFound = false, sResSecBg = dArrResSec.backgroundColor, bValidBGColor = $.cf.isValid(sResSecBg), sResSecClass = dArrResSec.class, bValidClass = $.cf.isValid(sResSecClass); if(bValidBGColor || bValidClass) { for(iInfoIndex = 0; iInfoIndex < to.tv.sADVInfo.length; iInfoIndex++) { oDVInfo = to.tv.sADVInfo[iInfoIndex]; bBGColorFound = bValidBGColor && (oDVInfo.bgColor === sResSecBg); bClassFound = bValidClass && (oDVInfo.class === sResSecClass); if(bValidBGColor && bValidClass) { if(bBGColorFound && bClassFound) { iInfoIndex = oDVInfo.index; bMatchFound = true; break; } } else { if(bBGColorFound || bClassFound) { iInfoIndex = oDVInfo.index; bMatchFound = true; break; } } } if(!bMatchFound) { oDVInfo = {}; iInfoIndex = 3 + to.tv.sADVInfo.length; oDVInfo.index = iInfoIndex; if(bValidBGColor) oDVInfo.bgColor = sResSecBg; if(bValidClass) oDVInfo.class = sResSecClass; to.tv.sADVInfo.push(oDVInfo); } } if(iNumOfSlotsSpanned === iMaxTimeSlots) { bArrTemp[bArrTemp.length - 1] = iInfoIndex; } iTempHour = dTempResSecStart.getHours(); iTempMinutes = dTempResSecStart.getMinutes(); iTempSlot = Math.floor(iTempMinutes / to.setting.unitTimeInterval); for(iSlotsIndex = 0; iSlotsIndex < iNumOfSlotsSpanned; iSlotsIndex++) { iTempSlotIndex = (iTempHour === 0) ? iTempSlot : ((iTempHour * to.tv.iUTmSlt) + iTempSlot); bArrTemp[iTempSlotIndex] = iInfoIndex; iTempMinutes += to.setting.unitTimeInterval; iTempSlot = Math.floor(iTempMinutes / to.setting.unitTimeInterval); if(iTempMinutes >= 60) { iTempMinutes = iTempMinutes % to.setting.unitTimeInterval; iTempSlot = Math.floor(iTempMinutes / to.setting.unitTimeInterval); iTempHour += 1; } } } } // --------------- Set RestrictedSection Date Array Indicator End ----------------------------------- to.tv.bADVCur[iDateIndex] = bArrTemp; } iThisTempDate += $.CalenStyle.extra.iMS.d; dThisTempDate = new Date(iThisTempDate); } // ------------- Set RestrictedSection and BusinessHours in arrayOfTimeSlots Start -------------- }, _getStartAndEndDatesOfEventWithId: function(iEventId) { var to = this; var oThisEvent = to.getEventWithId(iEventId); return [oThisEvent.start, oThisEvent.end]; }, _getNumberOfHoursOfEventWithId: function(sEventId) { var to = this; var oEvent = to.getEventWithId(sEventId); return to.__getNumberOfHoursOfEvent(oEvent.isAllDay, oEvent.start, oEvent.end); }, _getNumberOfDaysOfEventForWeek: function(bIsAllDay, dStartDateTime, dEndDateTime, bWithHours, bForView) { var to = this; var dTempEndDateTime; if(bIsAllDay && to.compareDateTimes(dStartDateTime, dEndDateTime) === 0) dTempEndDateTime = new Date(dEndDateTime.getTime() + $.CalenStyle.extra.iMS.d); else dTempEndDateTime = new Date(dEndDateTime); if(dTempEndDateTime.getHours() === 0 && dTempEndDateTime.getMinutes() === 0) dTempEndDateTime.setMinutes(dTempEndDateTime.getMinutes() - 1); var iNumOfDays = 0, dArrTempDates = to.__getStartAndEndDatesOfEventForView(bIsAllDay, dStartDateTime, dTempEndDateTime), dTempStartDate = dArrTempDates[0], dTempEndDate = dArrTempDates[1], iNumOfMinutes = Math.round((dTempEndDate.getTime() - dTempStartDate.getTime()) / $.CalenStyle.extra.iMS.m), iNumOfHours = Math.round(iNumOfMinutes / 60); if(iNumOfMinutes < 0) console.log("Invalid Start And End Dates " + dStartDateTime + " " + dTempEndDateTime); else { iNumOfDays = 0; if(to.compareDates(dTempStartDate, dTempEndDate) !== 0) { var dNewStartDate = to.setDateInFormat({"date": dTempStartDate}, "START"), dNewEndDate = to.setDateInFormat({"date": dTempEndDate}, "START"), iNewNumOfHours = (dNewEndDate.getTime() - dNewStartDate.getTime()) / $.CalenStyle.extra.iMS.h; iNumOfDays = Math.round(iNewNumOfHours / 24) + 1; if(bForView) { var dTempDate = new Date(dNewStartDate), iTempNumOfDays = 0; for(var iTempIndex = 0; iTempIndex < iNumOfDays; iTempIndex++) { if(to.__findWhetherDateIsVisibleInCurrentView(dTempDate, (bIsAllDay || iNumOfHours > 23), dTempStartDate, dTempEndDate)) iTempNumOfDays++; dTempDate.setDate(dTempDate.getDate() + 1); } iNumOfDays = iTempNumOfDays; } } else { if(bForView) { if(to.__findWhetherDateIsVisibleInCurrentView(dTempStartDate, (bIsAllDay || iNumOfHours > 23), dTempStartDate, dTempEndDate)) iNumOfDays = 1; } else iNumOfDays = 1; } } if(bWithHours) return [iNumOfDays, iNumOfHours]; else return iNumOfDays; }, _getLeftPositionOfEventSeg: function(iLeftPos) { var to = this; var iArrDVDaysLength = to.tv.fADVDayLftPos.length, iDVTableColumnWidth = $(to.elem).find(".cdvTableColumns").width(), iNewLeftPos = 0; for(var iTempIndex1 = 0; iTempIndex1 < iArrDVDaysLength; iTempIndex1++) { var iHoriStartPos = to.tv.fADVDayLftPos[iTempIndex1], iHoriEndPos = iHoriStartPos + iDVTableColumnWidth; iHoriStartPos -= 5; iHoriEndPos -= 5; if(iTempIndex1 === (iArrDVDaysLength - 1)) iHoriEndPos += 5; if(iLeftPos >= iHoriStartPos && iLeftPos <= iHoriEndPos) { iNewLeftPos = to.tv.fADVDayLftPos[iTempIndex1]; break; } } return iNewLeftPos; }, _getDateBasedOnLeftPosition: function(iLeftPos) { var to = this; if($.cf.compareStrings(to.setting.visibleView, "DayEventDetailView")) return to.setting.selectedDate; var iDVTableColumnWidth = $(to.elem).find(".cdvTableColumns").width(), iArrDVDaysLength = to.tv.fADVDayLftPos.length, iTempIndex = 0, iThisIndex = 0, iTempIndex1; for(iTempIndex1 = 0; iTempIndex1 < iArrDVDaysLength; iTempIndex1++) { var iHoriStartPos = to.tv.fADVDayLftPos[iTempIndex1] - 5, iHoriEndPos = iHoriStartPos + iDVTableColumnWidth - 5; if(iTempIndex1 === (iArrDVDaysLength - 1)) iHoriEndPos += 5; if(iLeftPos >= iHoriStartPos && iLeftPos <= iHoriEndPos) { iThisIndex = iTempIndex1 + 1; break; } } for(iTempIndex1 = 0; iTempIndex1 < to.tv.dAVDt.length; iTempIndex1++) { var dThisDate = to.tv.dAVDt[iTempIndex1]; if(to.__isDateInCurrentView(dThisDate)) { iTempIndex++; if(iTempIndex === iThisIndex) return dThisDate; } } }, _getDateForDayNumber: function(iDayNumber, bFromLeft) { var to = this; var iThisIndex = (bFromLeft) ? 0 : (to.tv.iNoVDay - 1), iThisDayNumber = 0; for(var iTempIndex = 0; iTempIndex < to.tv.iNoVDay; iTempIndex++) { iThisDayNumber++; if(iThisDayNumber === iDayNumber) return to.tv.dAVDt[iThisIndex]; iThisIndex = (bFromLeft) ? (iThisIndex + 1) : (iThisIndex - 1); } }, _createCopyOfArray: function(oArrInput) { var to = this; var oArrOutput = []; return oArrOutput.concat(oArrInput); }, //------------------------------- Event Segment Manipulation Start ------------------------------- _setPropertiesOfEventSeg: function() { var to = this; var oArrCollidingEvents = [], oTempArrEventSegs, oArrTempSlot, oArrTimeSlots, iSlotIndex; // ---------------------------- setPropertiesOfEventSegments ---------------------------- for(var iThisDay = 0; iThisDay < to.tv.dAVDt.length; iThisDay++) { var oArrConditions = []; oArrConditions.push(["eventSegStart", to.tv.dAVDt[iThisDay]]); var oArrTempEvents = to._getEventSegWith(oArrConditions); oArrTempEvents = to._sortEventSeg(to._createCopyOfArray(oArrTempEvents)); oArrTimeSlots = []; for(var iThisEvent = 0; iThisEvent < oArrTempEvents.length; iThisEvent++) { var oEventSeg = oArrTempEvents[iThisEvent], dSegStartDate = oEventSeg.eventSegStart, dSegEndDate = oEventSeg.eventSegEnd; if(oArrTimeSlots.length <= 0) { oTempArrEventSegs = new Array(oEventSeg); oArrTempSlot = new Array(dSegStartDate, dSegEndDate, oTempArrEventSegs); oArrTimeSlots.push(oArrTempSlot); } else { var bAddedInExisting = 0; for(iSlotIndex = 0; iSlotIndex < oArrTimeSlots.length; iSlotIndex++) { var oTimeSlot = oArrTimeSlots[iSlotIndex], dSlotStartDate = oTimeSlot[0], dSlotEndDate = oTimeSlot[1], bSegStartDate1 = 0, bSegStartDate2 = 0, bSegEndDate1 = 0, bSegEndDate2 = 0, iCompStartTime1 = to.compareDateTimes(dSegStartDate, dSlotStartDate), iCompStartTime2 = to.compareDateTimes(dSegStartDate, dSlotEndDate), iCompEndTime1 = to.compareDateTimes(dSegEndDate, dSlotStartDate), iCompEndTime2 = to.compareDateTimes(dSegEndDate, dSlotEndDate); if(iCompStartTime1 > 0 || iCompStartTime1 === 0) bSegStartDate1 = 1; if(iCompStartTime2 < 0) bSegStartDate2 = 1; if(iCompEndTime1 > 0) bSegEndDate1 = 1; if(iCompEndTime2 < 0 || iCompEndTime2 === 0) bSegEndDate2 = 1; if((bSegStartDate1 === 1 && bSegStartDate2 === 1) || (bSegEndDate1 === 1 && bSegEndDate2 === 1)) { var oArrSlotSegments = oTimeSlot[2]; oArrSlotSegments.push(oEventSeg); bAddedInExisting = 1; } if(iCompStartTime1 < 0) oTimeSlot[0] = dSegStartDate; // Changing StartTime if(iCompEndTime2 > 0 && iCompStartTime2 < 0) oTimeSlot[1] = dSegEndDate; // Changing EndTime } if(bAddedInExisting === 0) { oTempArrEventSegs = new Array(oEventSeg); oArrTempSlot = new Array(dSegStartDate, dSegEndDate, oTempArrEventSegs); oArrTimeSlots.push(oArrTempSlot); } } } oArrCollidingEvents.push(oArrTimeSlots); } // ------------------------------ Colliding Events ------------------------------- var oAEventsegColumns = []; for(var iIndex = 0; iIndex < oArrCollidingEvents.length; iIndex++) { oArrTimeSlots = oArrCollidingEvents[iIndex]; var oArrTempColumns = []; for(iSlotIndex = 0; iSlotIndex < oArrTimeSlots.length; iSlotIndex++) { var oArrTempTimeSlot = oArrTimeSlots[iSlotIndex], oAEventSegs = oArrTempTimeSlot[2], oArrColumns = to._assignEventSegToColumnsInDetailView(oAEventSegs); oArrTempColumns.push([oArrTempTimeSlot[0], oArrTempTimeSlot[1], oArrColumns]); } oAEventsegColumns.push(oArrTempColumns); } }, _getEventSegWith: function(oArrConditions) { var to = this; var oArrTempEvents = []; for(var iSeg = 0; iSeg < to.tv.oASmEvSeg.length; iSeg++) { var oEventSeg = to.tv.oASmEvSeg[iSeg], bConditionSatisfied = 0; for(var iCondition = 0; iCondition < oArrConditions.length; iCondition++) { var oCondition = oArrConditions[iCondition], propertyName = oCondition[0], compareToValue = oCondition[1]; if($.cf.compareStrings(propertyName, "eventSegStart") || $.cf.compareStrings(propertyName, "eventSegEnd")) { if(to.compareDates(oEventSeg[propertyName], compareToValue) === 0) bConditionSatisfied++; } else { if(oEventSeg[propertyName] === compareToValue) bConditionSatisfied++; } } if(bConditionSatisfied === oArrConditions.length) oArrTempEvents.push(oEventSeg); } return oArrTempEvents; }, _sortEventSeg: function(oArrTempEventSegs) { var to = this; // Event Segment Sorting Logic // 1. Sort Event Segments Based on StartDateTime // 2. Sort Events Based on Duration var iNumOfEventSegs = oArrTempEventSegs.length; if(iNumOfEventSegs > 1) { for(var iEventOut = 0; iEventOut < iNumOfEventSegs; iEventOut++) { var oEventSeg1 = oArrTempEventSegs[iEventOut], sEventSeg1Id = parseInt(oEventSeg1.eventId), dEvent1StartDate = to._getStartAndEndDatesOfEventWithId(sEventSeg1Id)[0], oTempEventSeg; for(var iEventIn = (iEventOut + 1); iEventIn < iNumOfEventSegs; iEventIn++) { var oEventSeg2 = oArrTempEventSegs[iEventIn], sEventSeg2Id = parseInt(oEventSeg2.eventId); if(sEventSeg1Id !== sEventSeg2Id) { var dEvent2StartDate = to._getStartAndEndDatesOfEventWithId(sEventSeg2Id)[0], iCompTimes = to.compareDateTimes(dEvent1StartDate, dEvent2StartDate); if(iCompTimes > 0) { oTempEventSeg = oEventSeg1; oEventSeg1 = oEventSeg2; oEventSeg2 = oTempEventSeg; oArrTempEventSegs[iEventOut] = oEventSeg1; dEvent1StartDate = dEvent2StartDate; oArrTempEventSegs[iEventIn] = oEventSeg2; } else if(iCompTimes === 0) { var iEvent1Hours = to._getNumberOfHoursOfEventWithId(sEventSeg1Id), iEvent2Hours = to._getNumberOfHoursOfEventWithId(sEventSeg2Id); if(iEvent2Hours > iEvent1Hours) { oTempEventSeg = oEventSeg1; oEventSeg1 = oEventSeg2; oEventSeg2 = oTempEventSeg; oArrTempEventSegs[iEventOut] = oEventSeg1; dEvent1StartDate = oEventSeg1.eventSegStart; oArrTempEventSegs[iEventIn] = oEventSeg2; } } } } } } return oArrTempEventSegs; }, _whetherEventsAreColliding: function(oEventSeg1, oEventSeg2) { var to = this; var dEventSeg1StartDate = oEventSeg1.eventSegStart, dEventSeg1EndDate = oEventSeg1.eventSegEnd, dEventSeg2StartDate = oEventSeg2.eventSegStart, dEventSeg2EndDate = oEventSeg2.eventSegEnd, bSegStartDate1 = 0, bSegStartDate2 = 0, bSegEndDate1 = 0, bSegEndDate2 = 0, iCompStartTime1 = to.compareDateTimes(dEventSeg1StartDate, dEventSeg2StartDate), iCompStartTime2 = to.compareDateTimes(dEventSeg1StartDate, dEventSeg2EndDate), iCompEndTime1 = to.compareDateTimes(dEventSeg1EndDate, dEventSeg2StartDate), iCompEndTime2 = to.compareDateTimes(dEventSeg1EndDate, dEventSeg2EndDate); if(iCompStartTime1 > 0 || iCompStartTime1 === 0) bSegStartDate1 = 1; if(iCompStartTime2 < 0) bSegStartDate2 = 1; if(iCompEndTime1 > 0) bSegEndDate1 = 1; if(iCompEndTime2 < 0 || iCompEndTime2 === 0) bSegEndDate2 = 1; if((bSegStartDate1 === 1 && bSegStartDate2 === 1) || (bSegEndDate1 === 1 && bSegEndDate2 === 1)) return true; else return false; }, _removeEventSegWithId: function(sId) { var to = this; var oArrTemp = []; sId = parseInt(sId); for(var iSegIndex = 0; iSegIndex < to.tv.oASmEvSeg.length; iSegIndex++) { var oEventSeg = to.tv.oASmEvSeg[iSegIndex]; if(parseInt(oEventSeg.eventId) !== parseInt(sId)) oArrTemp.push(oEventSeg); } to.tv.oASmEvSeg = []; to.tv.oASmEvSeg = oArrTemp; }, _createAndAddEventSegForId: function(sId, bIsAllDay, dStartDateTime, dEndDateTime) { var to = this; var dArrTempDates = to.__getStartAndEndDatesOfEventForView(bIsAllDay, dStartDateTime, dEndDateTime), dTempStartDate = dArrTempDates[0], dTempEndDate = dArrTempDates[1], iNumOfHours = to.__getNumberOfHoursOfEvent(bIsAllDay, dStartDateTime, dEndDateTime), iNumOfEventElements = to._getNumberOfDaysOfEventForWeek(bIsAllDay, dStartDateTime, dEndDateTime, false, true), sEventTimeFormat = to.setting.is24Hour ? "HH:mm" : "h[:m]sm", sStartDateTime = to.getDateInFormat({"date": dStartDateTime}, sEventTimeFormat, to.setting.is24Hour, true), sEndDateTime = to.getDateInFormat({"date": dEndDateTime}, sEventTimeFormat, to.setting.is24Hour, true); var dTempSDT = new Date(dTempStartDate); while(!to.__findWhetherDateIsVisibleInCurrentView(dTempSDT, (bIsAllDay || iNumOfHours > 23), dTempStartDate, dTempEndDate)) { dTempSDT.setDate(dTempSDT.getDate() + 1); dTempSDT = to.setDateInFormat({"date": dTempSDT}, "START"); } dTempStartDate = new Date(dTempSDT); var dThisDate = to.setDateInFormat({"date": dTempStartDate}, "START"); for(var iSegIndex = 0; iSegIndex < iNumOfEventElements; iSegIndex++) { var iWkIndex = to.__getDayIndexInView(dThisDate); var oSegArgs = {}; oSegArgs.iNumEvElem = iNumOfEventElements; oSegArgs.iId = sId; oSegArgs.sId = "Event-"+sId; oSegArgs.dStart = dStartDateTime; oSegArgs.dEnd = dEndDateTime; oSegArgs.dStartView = dTempStartDate; oSegArgs.dEndView = dTempEndDate; oSegArgs.dThisDate = dThisDate; oSegArgs.iEventElem = (iSegIndex + 1); oSegArgs.iWkIndex = iWkIndex; var oSegProperties = to._createAndAddEventSeg(oSegArgs), sSegId = "#" + oSegProperties.sId, sSegTitle = oSegProperties.sElemTitle, iSegTopPos = oSegProperties.iTopPos, iSegHeight = oSegProperties.iEventHeight, iSegLeftPos = to.tv.fADVDayLftPos[iWkIndex]; if(to.tv.oDVEdtgEv !== {} && $.cf.isValid(to.tv.oDVEdtgEv.dEditingDate) && to.compareDates(to.tv.oDVEdtgEv.dEditingDate, dThisDate) === 0) to.tv.oDVEdtgEv.iElemLeft = iSegLeftPos; var $oThisSeg = $(to.elem).find(sSegId); $oThisSeg.css({"top": iSegTopPos, "height": iSegHeight, "left": iSegLeftPos}); $oThisSeg.attr("data-pos", oSegProperties.sName); $oThisSeg.attr("title", sSegTitle); var oEventTooltip, sDateTime, sArrDateTime, oThisEvent; oEventTooltip = {}; sDateTime = to.getEventDateTimeString(dStartDateTime, dEndDateTime, bIsAllDay, "&&"); sArrDateTime = sDateTime.split("&&"); oThisEvent = to.getEventWithId(sId); oEventTooltip.title = oThisEvent.title || ""; oEventTooltip.startDateTime = sArrDateTime[0]; oEventTooltip.endDateTime = sArrDateTime[1]; $oThisSeg.data("tooltipcontent", oEventTooltip); if(iSegTopPos < 0) $oThisSeg.find(".cEventLink").css({"margin-top": Math.abs(iSegTopPos)}); else $oThisSeg.find(".cEventLink").css({"margin-top": 0}); $oThisSeg.find(".cdvEventTime").html(sStartDateTime + "-" + sEndDateTime); dThisDate = new Date(dThisDate.getTime() + $.CalenStyle.extra.iMS.d); } }, _createAndAddEventSeg: function(oSegArgs) { var to = this; var iId = oSegArgs.iId, sId = oSegArgs.sId, dStartDateTime = oSegArgs.dStart, dEndDateTime = oSegArgs.dEnd, dThisDate = oSegArgs.dThisDate, iEventElem = oSegArgs.iEventElem, iWkIndex = oSegArgs.iWkIndex, iTimeSlotTableRowHeight = (($(to.elem).find(".cdvTimeSlotTableRow" + ":eq(0)").outerHeight() + $(to.elem).find(".cdvTimeSlotTableRow" + ":eq(1)").outerHeight()) / 2), iEventUnitHeight = iTimeSlotTableRowHeight / to.setting.unitTimeInterval, iStartMinutes = 0, iStartHour = 0, iSlotMinutes = 0, sStartTime = "", iTopPos = 0, oThisDate = to.getDateInFormat({"date": dThisDate}, "object", false, false), dStartDateTimeThis, dEndDateTimeThis; if(to.setting.excludeNonBusinessHours) { dStartDateTimeThis = to.setDateInFormat({"iDate": {d: oThisDate.d, M: oThisDate.M, y: oThisDate.y, H: to.tv.oBsHours.startTime[0], m: to.tv.oBsHours.startTime[1], s: 0, ms: 0}}, ""); dEndDateTimeThis = to.setDateInFormat({"iDate": {d: oThisDate.d, M: oThisDate.M, y: oThisDate.y, H: to.tv.oBsHours.endTime[0], m: to.tv.oBsHours.endTime[1], s: 0, ms: 0}}, ""); } else { dStartDateTimeThis = to.setDateInFormat({"iDate": oThisDate}, "START"); dEndDateTimeThis = to.setDateInFormat({"iDate": oThisDate}, "END"); } var bBeforeDayStart = (to.compareDateTimes(dStartDateTime, dStartDateTimeThis) < 0), bAfterDayEnd = (to.compareDateTimes(dEndDateTime, dEndDateTimeThis) > 0), dStartDateTimeEv = bBeforeDayStart ? dStartDateTimeThis : dStartDateTime, dEndDateTimeEv = bAfterDayEnd ? dEndDateTimeThis : dEndDateTime, iActualHeight = (((dEndDateTimeEv.getTime() - dStartDateTime.getTime()) / $.CalenStyle.extra.iMS.m) * iEventUnitHeight), iVisibleHeight = (((dEndDateTimeEv.getTime() - dStartDateTimeEv.getTime()) / $.CalenStyle.extra.iMS.m) * iEventUnitHeight), iHeight = iVisibleHeight; iStartHour = dStartDateTimeEv.getHours(); iStartMinutes = dStartDateTimeEv.getMinutes(); iSlotMinutes = Math.floor(iStartMinutes / to.setting.unitTimeInterval) * to.setting.unitTimeInterval; sStartTime = to.getNumberStringInFormat(iStartHour, 2, false) + to.getNumberStringInFormat(iSlotMinutes, 2, false); iTopPos = $(to.elem).find(".cdvTimeSlotTableRow"+sStartTime).position().top; if(bBeforeDayStart) { iHeight = iActualHeight; iTopPos -= (iActualHeight - iVisibleHeight); } var sName = sStartTime + "|" + iWkIndex + "|" + iTopPos, sElemTitle = dStartDateTime + "\n" + dEndDateTime; sId += "-" + iEventElem; var oEventSeg = new CalEventSeg((iWkIndex + 1), iId, sElemTitle, sId, dStartDateTimeEv, dEndDateTimeEv, 0, 0); to.tv.oASmEvSeg.push(oEventSeg); var oSegProperties = {}; oSegProperties.sElemTitle = sElemTitle; oSegProperties.sId = sId; oSegProperties.sName = sName; oSegProperties.iTopPos = iTopPos; oSegProperties.iEventHeight = iHeight; return oSegProperties; }, _setOpacityOfEventSeg: function(sId, dEndDateTime) { var to = this; var bPassedEvent = (to.compareDates(dEndDateTime, $.CalenStyle.extra.dToday) < 0) ? true : false, bHasClass = $(to.elem).find(".Event-"+sId).hasClass("cBlurredEvent"); if(bPassedEvent && !bHasClass) $(to.elem).find(".Event-"+sId).addClass("cBlurredEvent"); if(!bPassedEvent && bHasClass) $(to.elem).find(".Event-"+sId).removeClass("cBlurredEvent"); }, _changeViewPropertiesWhileEditing: function(sWhen, sId) { var to = this; var sSelector; if($.cf.isValid(to.tv.oDVEdtgEv)) { if($.cf.compareStrings(to.tv.oDVEdtgEv.type, "cdvEvent")) sSelector = ".Event-"+sId; else if($.cf.compareStrings(to.tv.oDVEdtgEv.type, "cdvEventAllDay")) sSelector = "#Event-"+sId; if($.cf.compareStrings(sWhen, "BEFORE")) { if(! $(to.elem).find(sSelector).hasClass("cEditingEvent")) { if($.cf.compareStrings(to.tv.oDVEdtgEv.type, "cdvEvent")) $(to.elem).find(sSelector).addClass("cEditingEvent cEditingEventUI"); else $(to.elem).find(sSelector).addClass("cEditingEvent cEditingEventUI cEditingEventAllDay"); /* $(to.elem).find(".cEventTooltip").tooltip("close"); The above line gives an error if bootstrap plugin is included in the webpage as it overrides jQuery UI tooltip plugin. So if you are including Bootstrap it will be better to use bootstrap Tooltip and Popover. */ // if bootstrap toolip or popover plugin is applied //if($(to.elem).find("[data-original-title]").length === 0 && $(to.elem).find(".cEventTooltip").length > 0) // $(to.elem).find(".cEventTooltip").tooltip("close"); } } else if($.cf.compareStrings(sWhen, "AFTER")) { $(to.elem).find(sSelector).removeClass("cEditingEvent cEditingEventAllDay cEditingEventUI"); to.tv.iTSEndEditing = $.cf.getTimestamp(); } } }, //------------------------------- Event Segment Manipulation End ------------------------------- __updateDetailViewTable: function() { var to = this; var iDateIndex, sDVDaysClass, sColumnClass = (to.tv.iNoVDayDis === 1) ? "cdvSingleColumn" : "cdvMultiColumn", iScrollbarWidth = $.CalenStyle.extra.iScrollbarWidth; to._getTimeSlotsArrayForCurrentView(); if($.cf.compareStrings(to.tv.sLoadType, "Prev")) to.tv.dLoadDt = to.tv.dAVDt[0]; else if($.cf.compareStrings(to.tv.sLoadType, "Next")) to.tv.dLoadDt = to.tv.dAVDt[(to.tv.dAVDt.length - 1)]; var sTemplate = ""; //--------------------------------------------------------------------------------------------- sTemplate += "<thead>"; if(!$.cf.compareStrings(to.setting.visibleView, "DayEventDetailView")) sTemplate += "<tr class='cdvDetailTableRow1 cExceptDayEventDetailView'>"; else sTemplate += "<tr class='cdvDetailTableRow1 cDayEventDetailView'>"; sTemplate += "<td class='cdvDetailTableColumnTime'>"; sTemplate += "<div class='cdvCellWeekNumberLabel'></div>"; sTemplate += "<div class='cdvCellWeekNumber'></div>"; sTemplate += "</td>"; for(iDateIndex = 0; iDateIndex < to.tv.iNoVDayDis; iDateIndex++) { var sTempId = "cdvCellDay"+iDateIndex; sDVDaysClass = sColumnClass; if(iDateIndex === (to.tv.iNoVDayDis - 1)) sDVDaysClass += " cdvLastColumn"; sTemplate += "<td id='" + sTempId + "' class='cdvTableColumns "+sDVDaysClass+"'>"; if($.cf.compareStrings(to.setting.visibleView, "DayEventDetailView")) sTemplate += "<table class='cTable cdlvDaysTable cdlvDaysTableMain' cellspacing='0'></table>"; else sTemplate += "&nbsp;"; sTemplate += "</td>"; } if(iScrollbarWidth > 0) sTemplate += "<td class='cdvDetailTableScroll'>&nbsp;</td>"; sTemplate += "</tr>"; sTemplate += "</thead>"; //--------------------------------------------------------------------------------------------- sTemplate += "<tbody>"; sTemplate += "<tr class='cdvDetailTableRow2'>"; sTemplate += "<td class='cdvDetailTableColumnTime'> &nbsp; </td>"; for(iDateIndex = 0; iDateIndex < to.tv.iNoVDayDis; iDateIndex++) { var sDVDaysId = "cdvAllDayColumn"+iDateIndex; sDVDaysClass = ""; if(iDateIndex === (to.tv.iNoVDayDis - 1)) sDVDaysClass += " cdvLastColumn"; sTemplate += "<td id='"+sDVDaysId+"' class='cdvAllDayColumns "+sDVDaysClass+"' title='"+to.tv.dAVDt[iDateIndex]+"'> &nbsp; </td>"; } if(iScrollbarWidth > 0) sTemplate += "<td class='cdvDetailTableScroll'>&nbsp;</td>"; sTemplate += "</tr>"; //--------------------------------------------------------------------------------------------- sTemplate += "<tr class='cdvDetailTableRow3'>"; sTemplate += "<td class='cdvDetailTableColumnTime'> &nbsp; </td>"; for(iDateIndex = 0; iDateIndex < to.tv.iNoVDayDis; iDateIndex++) { sDVDaysClass = "cdvDetailTableColumn"+iDateIndex; if(iDateIndex === (to.tv.iNoVDayDis - 1)) sDVDaysClass += " cdvLastColumn"; sTemplate += "<td class='cdvTableColumns "+sDVDaysClass+"'> &nbsp; </td>"; } if(iScrollbarWidth > 0) sTemplate += "<td class='cdvDetailTableScroll'>&nbsp;</td>"; sTemplate += "</tr>"; sTemplate += "</tbody>"; //--------------------------------------------------------------------------------------------- $(to.elem).find(".cdvDetailTableMain").html(sTemplate); //---------------------------------------------------------------------------------------------- sTemplate = ""; sTemplate += "<span class='cdvCellHeaderAllDay'><span>"+to.setting.miscStrings.allDay+"</span></span>"; $(to.elem).find(".cdvContRow2Main").html(sTemplate); //------------------------------------------------------------------------------ if($.cf.compareStrings(to.setting.visibleView, "DayEventDetailView")) to.__updateDayListViewTable(false, true); else to._setDateStringsInDetailView(); //------------------------------------------------------------------------------ to._addTimeSlotTable(); //------------------------------------------------------------------------------ sTemplate = ""; sTemplate += "<div class='cdvContRow3Events'></div>"; $(to.elem).find(".cdvContRow3Main").append(sTemplate); //------------------------------------------------------------------------------ to._takeActionOnTimeSlotTableClick(); }, __addEventsInDetailView: function(sEventTypeToAdd) { var to = this; if(($.cf.compareStrings(sEventTypeToAdd, "AllDay") || $.cf.compareStrings(sEventTypeToAdd, "Both")) && $(to.elem).find(".cdvContRow2Main").length > 0) $(to.elem).find(".cdvContRow2Main .cdvEventAllDay").remove(); if(($.cf.compareStrings(sEventTypeToAdd, "Small") || $.cf.compareStrings(sEventTypeToAdd, "Both")) && $(to.elem).find(".cdvContRow3Events").length > 0) $(to.elem).find(".cdvContRow3Events").html(""); var oArrTempEvents = to.getArrayOfEventsForView(to.tv.dVDSDt, to.tv.dVDEDt), bHideEventIcon = $.cf.isValid(to.setting.hideEventIcon[to.setting.visibleView]) ? to.setting.hideEventIcon[to.setting.visibleView] : $.cf.isValid(to.setting.hideEventIcon.Default) ? to.setting.hideEventIcon.Default : false, bHideEventTime = $.cf.isValid(to.setting.hideEventTime[to.setting.visibleView]) ? to.setting.hideEventTime[to.setting.visibleView] : $.cf.isValid(to.setting.hideEventTime.Default) ? to.setting.hideEventTime.Default : false, sEventTimeFormat = to.setting.is24Hour ? "HH:mm" : "h[:m]sm"; if($.cf.compareStrings(sEventTypeToAdd, "Small") || $.cf.compareStrings(sEventTypeToAdd, "Both")) to.tv.oASmEvSeg = []; if($.cf.compareStrings(sEventTypeToAdd, "AllDay") || $.cf.compareStrings(sEventTypeToAdd, "Both")) to.tv.oAADEvSeg = []; if(oArrTempEvents.length > 0) { var oArrTempTopPos = []; for(var iEventIndex = 0; iEventIndex < oArrTempEvents.length; iEventIndex++) { var oEvent = oArrTempEvents[iEventIndex], dStartDateTime = null, dEndDateTime = null, bIsAllDay = 0, sTitle = "", sDesc = "", sType = "", sURL = "", sDroppableId = "", bIsMarked = false; if(oEvent.start !== null) dStartDateTime = oEvent.start; if(oEvent.end !== null) dEndDateTime = oEvent.end; if(oEvent.isAllDay !== null) bIsAllDay = oEvent.isAllDay; if(oEvent.title !== null) sTitle = oEvent.title; if(oEvent.desc !== null) sDesc = oEvent.desc; if(oEvent.type !== null) sType = oEvent.type; if(oEvent.url !== null) sURL = oEvent.url; if(oEvent.droppableId !== null) sDroppableId = oEvent.droppableId; if(oEvent.isMarked !== null) bIsMarked = oEvent.isMarked; if(bIsMarked) bIsAllDay = true; var dArrTempDates = to.__getStartAndEndDatesOfEventForView(bIsAllDay, dStartDateTime, dEndDateTime), dTempStartDate = dArrTempDates[0], dTempEndDate = dArrTempDates[1], iNumOfDaysOfEvent = to.getNumberOfDaysOfEvent(bIsAllDay, dStartDateTime, dEndDateTime, false, false, true), iNumOfEventElements = to._getNumberOfDaysOfEventForWeek(bIsAllDay, dStartDateTime, dEndDateTime, false, true), iTotalNumberOfHours = to.__getNumberOfHoursOfEvent(bIsAllDay, dStartDateTime, dEndDateTime); var sId; if(iNumOfEventElements > 0) { var dTempSDT = new Date(dTempStartDate); while(!to.__findWhetherDateIsVisibleInCurrentView(dTempSDT, (bIsAllDay || iTotalNumberOfHours > 23), dTempStartDate, dTempEndDate)) { dTempSDT.setDate(dTempSDT.getDate() + 1); dTempSDT = to.setDateInFormat({"date": dTempSDT}, "START"); } dTempStartDate = new Date(dTempSDT); var dThisDate = to.setDateInFormat({"date": dTempStartDate}, "START"), iThisDate = dThisDate.getTime(); //------------------------------------------------------------------------------------------- var sEventColor = oEvent.backgroundColor; sEventColor = ($.cf.compareStrings(sEventColor, "") || $.cf.compareStrings(sEventColor, "transparent")) ? "transparent" : sEventColor; var sEventBorderColor = oEvent.borderColor || $.cf.addHashToHexcode(to.setting.borderColor); sEventBorderColor = ($.cf.compareStrings(sEventBorderColor, "") || $.cf.compareStrings(sEventBorderColor, "transparent")) ? "transparent" : sEventBorderColor; var sEventTextColor = oEvent.textColor || $.cf.addHashToHexcode(to.setting.textColor); sEventTextColor = ($.cf.compareStrings(sEventTextColor, "") || $.cf.compareStrings(sEventTextColor, "transparent")) ? $.cf.addHashToHexcode(to.setting.textColor) : sEventTextColor; var sStyle = "", sIcon = "", sEventIconStyle = "", sEventIconDotStyle = "", sPartialEventStyle = "", sLinkStyle =""; if(bIsMarked) { if(oEvent.fromSingleColor) { sStyle += "background: " + sEventColor + "; "; sStyle += "border-color: " + sEventBorderColor + "; "; sStyle += "color: " + sEventTextColor + "; "; sLinkStyle = "color: " + sEventTextColor + "; "; sEventIconStyle = "background: " + sEventTextColor + "; color: #FFFFFF"; sEventIconDotStyle = "background: " + sEventTextColor + "; "; } else { sEventBorderColor = sEventColor; sStyle += "background: " + $.cf.getRGBAString(sEventColor, 0.1) + "; "; sStyle += "border-color: " + sEventBorderColor + "; "; sStyle += "color: " + sEventColor + "; "; sLinkStyle = "color: " + sEventColor + "; "; sEventIconStyle = "background: " + sEventColor + "; color: " + sEventTextColor; sEventIconDotStyle = "background: " + sEventColor + "; "; } } else { sStyle += "background: " + sEventColor + "; "; sStyle += "border-color: " + sEventBorderColor + "; "; sStyle += "color: " + sEventTextColor + "; "; sLinkStyle = "color: " + sEventTextColor + "; "; sEventIconStyle = "color: " + sEventTextColor + "; "; sEventIconDotStyle = "background: " + sEventTextColor + "; "; sPartialEventStyle = "border-color: " + (oEvent.fromSingleColor ? sEventTextColor : "#000000"); } if(sEventBorderColor === "transparent") sStyle += "border-width: 0px; "; if(bIsMarked) sIcon = ($.cf.isValid(oEvent.icon) && oEvent.icon !== "Dot") ? oEvent.icon : "cs-icon-Mark"; else sIcon = $.cf.isValid(oEvent.icon) ? oEvent.icon : to.setting.eventIcon; var iWkIndex = to.__getDayIndexInView(dThisDate), iLeftPos = to.tv.fADVDayLftPos[iWkIndex], iTopPos = 0, iEventHeight = 0, sEventClass, sDateTime, oEventTooltip, sTemplate, sIdElem, $oSeg, $oSegContent, sDataDroppableId, sArrDateTime; //------------------------------------------------------------------------------------------- if(bIsAllDay === 1 || bIsAllDay === true || (iTotalNumberOfHours > 23)) { if($.cf.compareStrings(sEventTypeToAdd, "AllDay") || $.cf.compareStrings(sEventTypeToAdd, "Both")) { sId = "Event-"+oEvent.calEventId; var bElementExists = $(to.elem).find("#"+sId).length > 0, bElementHasStartDate = false; if(bElementExists) { var dElemStartDate = new Date($(to.elem).find("#"+sId).data("startdate")); bElementHasStartDate = to.compareDates(dElemStartDate, dTempStartDate) !== 0; } if((bElementExists && bElementHasStartDate) || !bElementExists) { var iWidthUnits = iNumOfEventElements, bCompStartDates = to.compareDates(dStartDateTime, dTempStartDate), bVSDCompESD = to.compareDates(to.tv.dVDSDt, dStartDateTime), bVEDCompESD = to.compareDates(to.tv.dVDEDt, dStartDateTime), isFirstSegment = (bVSDCompESD <= 0) && (bVEDCompESD >= 0), bVSDCompEED = to.compareDates(to.tv.dVDSDt, dEndDateTime), bVEDCompEED = to.compareDates(to.tv.dVDEDt, dEndDateTime), isLastSegment = (bVSDCompEED <= 0) && (bVEDCompEED >= 0), bCompEndDates = to.compareDates(dEndDateTime, dTempEndDate), iNewTopIndex = 0, oArrTemp; if(oArrTempTopPos.length === 0) { iNewTopIndex = 1; oArrTemp = []; oArrTemp.push([dTempStartDate, dTempEndDate]); oArrTempTopPos.push([iNewTopIndex, oArrTemp]); } else { var iMaxTopIndex = 0; for(var iTempIndex = 0; iTempIndex < oArrTempTopPos.length; iTempIndex++) { oArrTemp = oArrTempTopPos[iTempIndex]; var iArrTempTopIndex = oArrTemp[0]; if(iArrTempTopIndex > iMaxTopIndex) iMaxTopIndex = iArrTempTopIndex; var oArrTempDates = oArrTemp[1]; var bSpaceAvailableForSegment = false; for(var iInnerIndex = 0; iInnerIndex < oArrTempDates.length; iInnerIndex++) { var oArrTempSEDates = oArrTempDates[iInnerIndex]; if(to.compareDates(dTempStartDate, oArrTempSEDates[1]) <= 0) { bSpaceAvailableForSegment = false; break; } else bSpaceAvailableForSegment = true; } if(bSpaceAvailableForSegment) { iNewTopIndex = iArrTempTopIndex; oArrTempDates.push([dTempStartDate, dTempEndDate]); break; } } if(iNewTopIndex === 0) { iNewTopIndex = iMaxTopIndex + 1; oArrTemp = []; oArrTemp.push([dTempStartDate, dTempEndDate]); oArrTempTopPos.push([iNewTopIndex, oArrTemp]); } } to.tv.oAADEvSeg.push([sId, iWidthUnits, iWkIndex, iNewTopIndex]); sEventClass = "cdvEventAllDay "; if(to.compareDates(dEndDateTime, $.CalenStyle.extra.dToday) < 0) sEventClass += "cBlurredEvent" +" "; if(to.setting.isTooltipInDetailView) sEventClass += " cEventTooltip"; if(bIsMarked) sEventClass += " cMarkedDayEvent"; sDataDroppableId = $.cf.isValid(sDroppableId) ? "data-droppableid='" + sDroppableId + "'" : ""; sTemplate = "<span id='" + sId + "' class='" + sEventClass + "' style='" + sStyle + "' data-startdate='" + dTempStartDate + "' " + sDataDroppableId + " title='' data-id='" + oEvent.calEventId + "'>"; sTemplate += "<a class='cEventLink' style='" + sLinkStyle + "'>"; if(bIsMarked) { sTemplate += "<span class='cdvEventTitle'>" + sTitle + "</span>"; //if(!bHideEventIcon && !$.cf.compareStrings(sIcon, "Dot")) sTemplate += "<span class='cdvEventIcon "+sIcon+"' style='" + sEventIconStyle + "'></span>"; if($.cf.compareStrings(to.setting.visibleView, "DayEventListView") && $.cf.isValid(oEvent.status)) sTemplate += "<span class='cdvEventStatus' style='border-color: " + oEvent.statusColor + ";'></span>"; } else { if(bCompStartDates !== 0) sTemplate += "<span class='cPartialEvent cPartialEventLeft' style='" + sPartialEventStyle + "'></span>"; if(!bHideEventTime && !bIsAllDay && (iNumOfDaysOfEvent > 1 && isFirstSegment)) sTemplate += "<span class='cdvEventTimeLeft'>" + to.getDateInFormat({"date": dStartDateTime}, sEventTimeFormat, to.setting.is24Hour, true) + "</span>"; if(!bHideEventIcon && !$.cf.compareStrings(sIcon, "Dot")) sTemplate += "<span class='cdvEventIcon " +sIcon+"' style='"+sEventIconStyle+"'></span>"; if($.cf.compareStrings(to.setting.visibleView, "DayEventListView") && $.cf.isValid(oEvent.status)) sTemplate += "<span class='cdvEventStatus' style='border-color: " + oEvent.statusColor + ";'></span>"; sTemplate += "<span class='" + "cdvEventTitle" + "'>" + sTitle + "</span>"; if(!bHideEventTime && !bIsAllDay && (iNumOfDaysOfEvent > 1 && isLastSegment)) sTemplate += "<span class='cdvEventTimeRight'>" + to.getDateInFormat({"date": dEndDateTime}, sEventTimeFormat, to.setting.is24Hour, true) + "</span>"; if(bCompEndDates !== 0) sTemplate += "<span class='cPartialEvent cPartialEventRight' style='" + sPartialEventStyle + "'></span>"; } sTemplate += "</a>"; sTemplate += "</span>"; $(to.elem).find(".cdvContRow2Main").append(sTemplate); sIdElem = "#"+sId; $oSeg = $(to.elem).find(sIdElem); $oSegContent = $oSeg.find(".cEventLink"); oEventTooltip = {}; sDateTime = to.getEventDateTimeString(dStartDateTime, dEndDateTime, bIsAllDay, "&&"); sArrDateTime = sDateTime.split("&&"); oEventTooltip.title = sTitle; oEventTooltip.startDateTime = sArrDateTime[0]; oEventTooltip.endDateTime = sArrDateTime[1]; $oSeg.data("tooltipcontent", oEventTooltip); if(to.setting.eventRendered) to.setting.eventRendered.call(to, oEvent, $oSeg, $oSegContent, to.setting.visibleView, false); if($.cf.isValid(sURL) || to.setting.eventClicked) { $oSegContent.on($.CalenStyle.extra.sClickHandler, {"url": sURL, "eventId": oEvent.calEventId, "eventElemSelector": sIdElem, "eventType": "AllDay", "view": "DetailView", "pluginId": to.tv.pluginId}, to.__bindClick); } } } } else { if($.cf.compareStrings(sEventTypeToAdd, "Small") || $.cf.compareStrings(sEventTypeToAdd, "Both")) { var sClass = "Event-"+oEvent.calEventId; if($(to.elem).find("."+sClass).length === 0) { for(var iEventElem = 1; iEventElem <= iNumOfEventElements; iEventElem++) { sId = sClass; iWkIndex = to.__getDayIndexInView(dThisDate); iLeftPos = to.tv.fADVDayLftPos[iWkIndex]; sEventClass = "cdvEvent "; if(to.compareDates(dEndDateTime, $.CalenStyle.extra.dToday) < 0) sEventClass += "cBlurredEvent "; sEventClass += sId; if(to.setting.isTooltipInDetailView) sEventClass += " cEventTooltip"; var oSegArgs = {}; oSegArgs.iNumEvElem = iNumOfEventElements; oSegArgs.iId = oEvent.calEventId; oSegArgs.sId = sId; oSegArgs.dStart = dStartDateTime; oSegArgs.dEnd = dEndDateTime; oSegArgs.dStartView = dTempStartDate; oSegArgs.dEndView = dTempEndDate; oSegArgs.dThisDate = dThisDate; oSegArgs.iEventElem = iEventElem; oSegArgs.iWkIndex = iWkIndex; var oSegProperties = to._createAndAddEventSeg(oSegArgs); var sName = oSegProperties.sName; sId = oSegProperties.sId; iTopPos = oSegProperties.iTopPos; iEventHeight = oSegProperties.iEventHeight; var sEventTime = to.getDateInFormat({"date": dStartDateTime}, sEventTimeFormat, to.setting.is24Hour, true) + " - " + to.getDateInFormat({"date": dEndDateTime}, sEventTimeFormat, to.setting.is24Hour, true); sStyle += "left: " + 0 + "px; top: " + 0 + "px; height: " + parseInt(iEventHeight) + "px; width: " + 10 + "px;"; sTemplate = ""; sDataDroppableId = $.cf.isValid(sDroppableId) ? "data-droppableid='" + sDroppableId + "'" : ""; sTemplate += "<span id='" + sId + "' class='" + sEventClass + "' style='" + sStyle + "' data-pos='" + sName + "' " + sDataDroppableId + " title='' data-id='" + oEvent.calEventId + "'>"; sTemplate += "<a class='cEventLink' style='color: " + sEventTextColor+ ";'>"; if(!bHideEventIcon && !$.cf.compareStrings(sIcon, "Dot")) sTemplate += "<span class='cdvEventIcon "+sIcon+"' style='"+sEventIconStyle +"' align='left'></span>"; sTemplate += "<div class='cdvEventDetails'>"; if($.cf.compareStrings(to.setting.visibleView, "DayEventListView") && $.cf.isValid(oEvent.status)) sTemplate += "<span class='cdvEventStatus' style='border-color: " + oEvent.statusColor + ";'></span>"; sTemplate += "<div class='cdvEventTitle'>" + sTitle + "</div>"; if(!bHideEventTime) sTemplate += "<div class='cdvEventTime'>" + sEventTime + "</div>"; sTemplate += "</div>"; sTemplate += "</a>"; sTemplate += "</span>"; $(to.elem).find(".cdvContRow3Main .cdvContRow3Events").append(sTemplate); sIdElem = "#"+sId; $oSeg = $(to.elem).find(sIdElem); $oSegContent = $oSeg.find(".cEventLink"); oEventTooltip = {}; sDateTime = to.getEventDateTimeString(dStartDateTime, dEndDateTime, bIsAllDay, "&&"); sArrDateTime = sDateTime.split("&&"); oEventTooltip.title = sTitle; oEventTooltip.startDateTime = sArrDateTime[0]; oEventTooltip.endDateTime = sArrDateTime[1]; $oSeg.data("tooltipcontent", oEventTooltip); iThisDate = iThisDate + $.CalenStyle.extra.iMS.d; dThisDate.setTime(iThisDate); if(to.setting.eventRendered) to.setting.eventRendered.call(to, oEvent, $oSeg, $oSegContent, to.setting.visibleView, false); if($.cf.isValid(sURL) || to.setting.eventClicked) { $oSegContent.on($.CalenStyle.extra.sClickHandler, {"url": sURL, "eventId": oEvent.calEventId, "eventElemSelector": sIdElem, "eventType": "Small", "view": "DetailView", "pluginId": to.tv.pluginId}, to.__bindClick); } } } } } } } to.tv.dDrgSDt = null; to.tv.dDrgEDt = null; if($.cf.compareStrings(sEventTypeToAdd, "AllDay") || $.cf.compareStrings(sEventTypeToAdd, "Both")) to._makeEventEditableInDetailView(".cdvEventAllDay"); if($.cf.compareStrings(sEventTypeToAdd, "Small") || $.cf.compareStrings(sEventTypeToAdd, "Both")) { to._setPropertiesOfEventSeg(); to._makeEventEditableInDetailView(".cdvEvent"); } if(to.setting.isTooltipInDetailView) to._addTooltipInDetailView(); if(to.setting.eventsAddedInView) to.setting.eventsAddedInView.call(to, to.setting.visibleView, ".cdvEvent, .cdvEventAllDay"); } else console.log("to.__addEventsInDetailView - No Events"); to.addRemoveViewLoader(false, "cEventLoaderBg"); to.addRemoveLoaderIndicators(false, "cEventLoaderIndicator"); }, _takeActionOnTimeSlotTableClick: function() { var to = this; $(to.elem).find(".calendarCont").on($.CalenStyle.extra.sClickHandler, function(e) { if(!$(to.elem).find(".cdvEvent").hasClass("cEditingEvent") && to.setting.cellClicked) { var pClickedAt = {}; pClickedAt.x = e.pageX || e.originalEvent.touches[0].pageX || e.originalEvent.changedTouches[0].pageX; pClickedAt.y = e.pageY || e.originalEvent.touches[0].pageY || e.originalEvent.changedTouches[0].pageY; var oArrElemsAtPt = to.__getElementsAtPoint(pClickedAt.x, pClickedAt.y); var dSelectedDateTime, iHours = 0, iMinutes = 0; var bElemAllDay, bElemSlot, bElemColumn; for(var iTempIndex = 0; iTempIndex < oArrElemsAtPt.length; iTempIndex++) { var $oTempElem = $(oArrElemsAtPt[iTempIndex]), bCDVAllDayColumns = $oTempElem.hasClass("cdvAllDayColumns"), bCDVTableColumns =