@pieninck/ionic2-calendar 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1027 -0
- package/fesm2022/pieninck-ionic2-calendar.mjs +2214 -0
- package/fesm2022/pieninck-ionic2-calendar.mjs.map +1 -0
- package/package.json +41 -0
- package/types/pieninck-ionic2-calendar.d.ts +543 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pieninck-ionic2-calendar.mjs","sources":["../../src/calendar.service.ts","../../src/monthview.ts","../../src/monthview.html","../../src/init-position-scroll.ts","../../src/weekview.ts","../../src/weekview.html","../../src/dayview.ts","../../src/dayview.html","../../src/calendar.interface.ts","../../src/calendar.ts","../../src/calendar.html","../../src/calendar.module.ts","../../src/pieninck-ionic2-calendar.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\r\nimport {Observable, Subject} from 'rxjs';\r\n\r\nimport {ICalendarComponent, IView, CalendarMode, QueryMode} from './calendar.interface';\r\n\r\n@Injectable()\r\nexport class CalendarService {\r\n queryMode!: QueryMode;\r\n currentDateChangedFromParent$: Observable<Date>;\r\n currentDateChangedFromChildren$: Observable<Date>;\r\n eventSourceChanged$: Observable<void>;\r\n slideChanged$: Observable<number>;\r\n slideUpdated$: Observable<void>;\r\n\r\n private _currentDate: Date = new Date();\r\n private currentDateChangedFromParent = new Subject<Date>();\r\n private currentDateChangedFromChildren = new Subject<Date>();\r\n private eventSourceChanged = new Subject<void>();\r\n private slideChanged = new Subject<number>();\r\n private slideUpdated = new Subject<void>();\r\n\r\n constructor() {\r\n this.currentDateChangedFromParent$ = this.currentDateChangedFromParent.asObservable();\r\n this.currentDateChangedFromChildren$ = this.currentDateChangedFromChildren.asObservable();\r\n this.eventSourceChanged$ = this.eventSourceChanged.asObservable();\r\n this.slideChanged$ = this.slideChanged.asObservable();\r\n this.slideUpdated$ = this.slideUpdated.asObservable();\r\n }\r\n\r\n setCurrentDate(val: Date, fromParent: boolean = false) {\r\n this._currentDate = new Date(val);\r\n if (fromParent) {\r\n this.currentDateChangedFromParent.next(val);\r\n } else {\r\n this.currentDateChangedFromChildren.next(val);\r\n }\r\n }\r\n\r\n get currentDate(): Date {\r\n return this._currentDate;\r\n }\r\n\r\n rangeChanged(component: ICalendarComponent) {\r\n if (this.queryMode === 'local') {\r\n if (component.eventSource && component.onDataLoaded) {\r\n component.onDataLoaded();\r\n }\r\n } else if (this.queryMode === 'remote') {\r\n let rangeStart = new Date(component.range.startTime.getTime()),\r\n rangeEnd = new Date(component.range.endTime.getTime());\r\n\r\n rangeStart.setHours(0);\r\n if (rangeStart.getHours() === 23) {\r\n rangeStart.setTime(rangeStart.getTime() + 3600000);\r\n }\r\n\r\n rangeEnd.setHours(0);\r\n if (rangeEnd.getHours() === 23) {\r\n rangeEnd.setTime(rangeEnd.getTime() + 3600000);\r\n }\r\n component.onRangeChanged.emit({\r\n startTime: rangeStart,\r\n endTime: rangeEnd\r\n });\r\n }\r\n }\r\n\r\n private getStep(mode: CalendarMode): { years: number; months: number; days: number; } {\r\n switch (mode) {\r\n case 'month':\r\n return {\r\n years: 0,\r\n months: 1,\r\n days: 0\r\n };\r\n case 'week':\r\n return {\r\n years: 0,\r\n months: 0,\r\n days: 7\r\n };\r\n case 'day':\r\n return {\r\n years: 0,\r\n months: 0,\r\n days: 1\r\n };\r\n }\r\n }\r\n\r\n getAdjacentCalendarDate(mode: CalendarMode, direction: number): Date {\r\n let calculateCalendarDate = this.currentDate;\r\n const step = this.getStep(mode),\r\n year = calculateCalendarDate.getFullYear() + direction * step.years,\r\n month = calculateCalendarDate.getMonth() + direction * step.months,\r\n date = calculateCalendarDate.getDate() + direction * step.days;\r\n\r\n calculateCalendarDate = new Date(year, month, date, 12, 0, 0);\r\n\r\n if (mode === 'month') {\r\n const firstDayInNextMonth = new Date(year, month + 1, 1, 12, 0, 0);\r\n if (firstDayInNextMonth.getTime() <= calculateCalendarDate.getTime()) {\r\n calculateCalendarDate = new Date(firstDayInNextMonth.getTime() - 24 * 60 * 60 * 1000);\r\n }\r\n }\r\n return calculateCalendarDate;\r\n }\r\n\r\n getAdjacentViewStartTime(component: ICalendarComponent, direction: number): Date {\r\n let adjacentCalendarDate = this.getAdjacentCalendarDate(component.mode, direction);\r\n return component.getRange(adjacentCalendarDate).startTime;\r\n }\r\n\r\n populateAdjacentViews(component: ICalendarComponent) {\r\n let currentViewStartDate: Date,\r\n currentViewData: IView[],\r\n toUpdateViewIndex: number,\r\n currentViewIndex = component.currentViewIndex;\r\n\r\n if (component.direction === 1) {\r\n currentViewStartDate = this.getAdjacentViewStartTime(component, 1);\r\n toUpdateViewIndex = (currentViewIndex + 1) % 3;\r\n component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);\r\n } else if (component.direction === -1) {\r\n currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\r\n toUpdateViewIndex = (currentViewIndex + 2) % 3;\r\n component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);\r\n } else {\r\n if (!component.views) {\r\n currentViewData = [];\r\n currentViewStartDate = component.range.startTime;\r\n currentViewData.push(component.getViewData(currentViewStartDate));\r\n currentViewStartDate = this.getAdjacentViewStartTime(component, 1);\r\n currentViewData.push(component.getViewData(currentViewStartDate));\r\n currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\r\n currentViewData.push(component.getViewData(currentViewStartDate));\r\n component.views = currentViewData;\r\n } else {\r\n currentViewStartDate = component.range.startTime;\r\n component.views[currentViewIndex] = component.getViewData(currentViewStartDate);\r\n currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\r\n toUpdateViewIndex = (currentViewIndex + 2) % 3;\r\n component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);\r\n currentViewStartDate = this.getAdjacentViewStartTime(component, 1);\r\n toUpdateViewIndex = (currentViewIndex + 1) % 3;\r\n component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);\r\n }\r\n }\r\n }\r\n\r\n loadEvents() {\r\n this.eventSourceChanged.next();\r\n }\r\n\r\n slide(direction: number) {\r\n this.slideChanged.next(direction);\r\n }\r\n\r\n update() {\r\n this.slideUpdated.next();\r\n }\r\n}\r\n","import {\r\n Component,\r\n OnInit,\r\n OnChanges,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n SimpleChanges,\r\n TemplateRef,\r\n OnDestroy,\r\n AfterViewInit,\r\n NgZone,\r\n ViewChild,\r\n ElementRef\r\n} from '@angular/core';\r\nimport {Subscription} from 'rxjs';\r\nimport {DatePipe} from '@angular/common';\r\nimport {Swiper} from 'swiper';\r\nimport {SwiperOptions} from 'swiper/types';\r\n\r\nimport {ICalendarComponent, IEvent, IMonthView, IMonthViewRow, ITimeSelected, IRange, CalendarMode, IDateFormatter, IMonthViewDisplayEventTemplateContext, IMonthViewEventDetailTemplateContext} from './calendar.interface';\r\nimport {CalendarService} from './calendar.service';\r\n\r\n@Component({\r\n selector: 'monthview',\r\n templateUrl: './monthview.html',\r\n styleUrls: ['./monthview.css'],\r\n standalone: false,\r\n})\r\nexport class MonthViewComponent implements ICalendarComponent, OnInit, OnDestroy, OnChanges, AfterViewInit {\r\n\r\n constructor(private calendarService: CalendarService, private zone:NgZone) {\r\n } \r\n\r\n private slider!: Swiper;\r\n @ViewChild('monthViewSwiper') swiperElement?: ElementRef;\r\n\r\n @Input() monthviewDisplayEventTemplate!: TemplateRef<IMonthViewDisplayEventTemplateContext>;\r\n @Input() monthviewInactiveDisplayEventTemplate!: TemplateRef<IMonthViewDisplayEventTemplateContext>;\r\n @Input() monthviewEventDetailTemplate!: TemplateRef<IMonthViewEventDetailTemplateContext>;\r\n\r\n @Input() formatDay?: string;\r\n @Input() formatDayHeader?: string;\r\n @Input() formatMonthTitle?: string;\r\n @Input() eventSource!: IEvent[];\r\n @Input() startingDayMonth!: number;\r\n @Input() showEventDetail = true;\r\n @Input() noEventsLabel?: string;\r\n @Input() autoSelect = true;\r\n @Input() markDisabled?: (date: Date) => boolean;\r\n @Input() locale!: string;\r\n @Input() dateFormatter?: IDateFormatter;\r\n @Input() dir = '';\r\n @Input() lockSwipeToPrev?: boolean = false;\r\n @Input() lockSwipeToNext?: boolean = false;\r\n @Input() lockSwipes?: boolean = false;\r\n @Input() sliderOptions?: SwiperOptions;\r\n\r\n @Output() onRangeChanged = new EventEmitter<IRange>();\r\n @Output() onEventSelected = new EventEmitter<IEvent>();\r\n @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\r\n @Output() onTitleChanged = new EventEmitter<string>();\r\n\r\n public views: IMonthView[] = [];\r\n public currentViewIndex = 0;\r\n public selectedDate?: IMonthViewRow;\r\n public range!: IRange;\r\n public mode: CalendarMode = 'month';\r\n public direction = 0;\r\n\r\n private moveOnSelected = false;\r\n private inited = false;\r\n\r\n private currentDateChangedFromParentSubscription?: Subscription;\r\n private eventSourceChangedSubscription?: Subscription;\r\n private slideChangedSubscription?: Subscription;\r\n private slideUpdatedSubscription?: Subscription;\r\n\r\n private formatDayLabel!: (date: Date) => string;\r\n private formatDayHeaderLabel!: (date: Date) => string;\r\n private formatTitle!: (date: Date) => string;\r\n\r\n static getDates(startDate: Date, n: number): Date[] {\r\n const dates = new Array(n),\r\n current = new Date(startDate.getTime());\r\n let i = 0;\r\n while (i < n) {\r\n dates[i++] = new Date(current.getTime());\r\n current.setDate(current.getDate() + 1);\r\n }\r\n return dates;\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.sliderOptions) {\r\n this.sliderOptions = {};\r\n }\r\n this.sliderOptions.loop = true;\r\n this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;\r\n this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;\r\n this.sliderOptions.allowTouchMove = !this.lockSwipes;\r\n\r\n if (this.dateFormatter && this.dateFormatter.formatMonthViewDay) {\r\n this.formatDayLabel = this.dateFormatter.formatMonthViewDay;\r\n } else {\r\n const dayLabelDatePipe = new DatePipe('en-US');\r\n this.formatDayLabel = function(date: Date) {\r\n return dayLabelDatePipe.transform(date, this.formatDay)||'';\r\n };\r\n }\r\n\r\n if (this.dateFormatter && this.dateFormatter.formatMonthViewDayHeader) {\r\n this.formatDayHeaderLabel = this.dateFormatter.formatMonthViewDayHeader;\r\n } else {\r\n const datePipe = new DatePipe(this.locale);\r\n this.formatDayHeaderLabel = function(date: Date) {\r\n return datePipe.transform(date, this.formatDayHeader)||'';\r\n };\r\n }\r\n\r\n if (this.dateFormatter && this.dateFormatter.formatMonthViewTitle) {\r\n this.formatTitle = this.dateFormatter.formatMonthViewTitle;\r\n } else {\r\n const datePipe = new DatePipe(this.locale);\r\n this.formatTitle = function(date: Date) {\r\n return datePipe.transform(date, this.formatMonthTitle)||'';\r\n };\r\n }\r\n\r\n this.refreshView();\r\n this.inited = true;\r\n\r\n this.currentDateChangedFromParentSubscription = this.calendarService.currentDateChangedFromParent$.subscribe(currentDate => {\r\n this.refreshView();\r\n });\r\n\r\n this.eventSourceChangedSubscription = this.calendarService.eventSourceChanged$.subscribe(() => {\r\n this.onDataLoaded();\r\n });\r\n\r\n this.slideChangedSubscription = this.calendarService.slideChanged$.subscribe(direction => {\r\n if (direction === 1) {\r\n this.slider.slideNext();\r\n } else if (direction === -1) {\r\n this.slider.slidePrev();\r\n }\r\n });\r\n\r\n this.slideUpdatedSubscription = this.calendarService.slideUpdated$.subscribe(() => {\r\n this.slider.update();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.currentDateChangedFromParentSubscription) {\r\n this.currentDateChangedFromParentSubscription.unsubscribe();\r\n this.currentDateChangedFromParentSubscription = undefined;\r\n }\r\n\r\n if (this.eventSourceChangedSubscription) {\r\n this.eventSourceChangedSubscription.unsubscribe();\r\n this.eventSourceChangedSubscription = undefined;\r\n }\r\n\r\n if (this.slideChangedSubscription) {\r\n this.slideChangedSubscription.unsubscribe();\r\n this.slideChangedSubscription = undefined;\r\n }\r\n\r\n if (this.slideUpdatedSubscription) {\r\n this.slideUpdatedSubscription.unsubscribe();\r\n this.slideUpdatedSubscription = undefined;\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (!this.inited) {\r\n return;\r\n }\r\n\r\n const eventSourceChange = changes['eventSource'];\r\n if (eventSourceChange && eventSourceChange.currentValue) {\r\n this.onDataLoaded();\r\n }\r\n\r\n const lockSwipeToPrev = changes['lockSwipeToPrev'];\r\n if (lockSwipeToPrev) {\r\n this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;\r\n }\r\n\r\n const lockSwipeToNext = changes['lockSwipeToNext'];\r\n if (lockSwipeToNext) {\r\n this.slider.allowSlideNext = !lockSwipeToNext.currentValue;\r\n }\r\n\r\n const lockSwipes = changes['lockSwipes'];\r\n if (lockSwipes) {\r\n this.slider.allowTouchMove = !lockSwipes.currentValue;\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.slider = new Swiper(this.swiperElement?.nativeElement, this.sliderOptions);\r\n let me = this;\r\n this.slider.on('slideNextTransitionEnd', function() {\r\n me.onSlideChanged(1);\r\n });\r\n\r\n this.slider.on('slidePrevTransitionEnd', function() {\r\n me.onSlideChanged(-1);\r\n });\r\n\r\n if(this.dir == 'rtl') {\r\n this.slider.changeLanguageDirection('rtl');\r\n }\r\n\r\n const title = this.getTitle();\r\n this.onTitleChanged.emit(title);\r\n }\r\n\r\n setSwiperInstance(swiper: any) {\r\n this.slider = swiper;\r\n }\r\n\r\n onSlideChanged(direction: number) {\r\n this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;\r\n this.move(direction);\r\n }\r\n\r\n move(direction: number) {\r\n if (direction === 0) {\r\n return;\r\n }\r\n\r\n this.direction = direction;\r\n if (!this.moveOnSelected) {\r\n const adjacentDate = this.calendarService.getAdjacentCalendarDate(this.mode, direction);\r\n this.calendarService.setCurrentDate(adjacentDate);\r\n }\r\n this.refreshView();\r\n this.direction = 0;\r\n this.moveOnSelected = false;\r\n }\r\n\r\n createDateObject(date: Date): IMonthViewRow {\r\n let disabled = false;\r\n if (this.markDisabled) {\r\n disabled = this.markDisabled(date);\r\n }\r\n\r\n return {\r\n date,\r\n events: [],\r\n label: this.formatDayLabel(date),\r\n secondary: false,\r\n disabled\r\n };\r\n }\r\n\r\n getViewData(startTime: Date): IMonthView {\r\n const startDate = startTime,\r\n date = startDate.getDate(),\r\n month = (startDate.getMonth() + (date !== 1 ? 1 : 0)) % 12;\r\n\r\n const dates = MonthViewComponent.getDates(startDate, 42);\r\n const days: IMonthViewRow[] = [];\r\n for (let i = 0; i < 42; i++) {\r\n const dateObject = this.createDateObject(dates[i]);\r\n dateObject.secondary = dates[i].getMonth() !== month;\r\n days[i] = dateObject;\r\n }\r\n\r\n const dayHeaders: string[] = [];\r\n for (let i = 0; i < 7; i++) {\r\n dayHeaders.push(this.formatDayHeaderLabel(days[i].date));\r\n }\r\n return {\r\n dates: days,\r\n dayHeaders\r\n };\r\n }\r\n\r\n getHighlightClass(date: IMonthViewRow): string {\r\n let className = '';\r\n\r\n if (date.hasEvent) {\r\n if (date.secondary) {\r\n className = 'monthview-secondary-with-event';\r\n } else {\r\n className = 'monthview-primary-with-event';\r\n }\r\n }\r\n\r\n if (date.selected) {\r\n if (className) {\r\n className += ' ';\r\n }\r\n className += 'monthview-selected';\r\n }\r\n\r\n if (date.current) {\r\n if (className) {\r\n className += ' ';\r\n }\r\n className += 'monthview-current';\r\n }\r\n\r\n if (date.secondary) {\r\n if (className) {\r\n className += ' ';\r\n }\r\n className += 'text-muted';\r\n }\r\n\r\n if (date.disabled) {\r\n if (className) {\r\n className += ' ';\r\n }\r\n className += 'monthview-disabled';\r\n }\r\n return className;\r\n }\r\n\r\n getRange(currentDate: Date): IRange {\r\n const year = currentDate.getFullYear(),\r\n month = currentDate.getMonth(),\r\n firstDayOfMonth = new Date(year, month, 1, 12, 0, 0), // set hour to 12 to avoid DST problem\r\n\r\n difference = this.startingDayMonth - firstDayOfMonth.getDay(),\r\n numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : -difference,\r\n startDate = new Date(firstDayOfMonth.getTime());\r\n\r\n if (numDisplayedFromPreviousMonth > 0) {\r\n startDate.setDate(-numDisplayedFromPreviousMonth + 1);\r\n }\r\n\r\n const endDate = new Date(startDate.getTime());\r\n endDate.setDate(endDate.getDate() + 42);\r\n\r\n return {\r\n startTime: startDate,\r\n endTime: endDate\r\n };\r\n }\r\n\r\n onDataLoaded() {\r\n const range = this.range,\r\n eventSource = this.eventSource,\r\n len = eventSource ? eventSource.length : 0,\r\n startTime = range.startTime,\r\n endTime = range.endTime,\r\n utcStartTime = Date.UTC(startTime.getFullYear(), startTime.getMonth(), startTime.getDate()),\r\n utcEndTime = Date.UTC(endTime.getFullYear(), endTime.getMonth(), endTime.getDate()),\r\n currentViewIndex = this.currentViewIndex,\r\n dates = this.views[currentViewIndex].dates,\r\n oneDay = 86400000,\r\n eps = 0.0006;\r\n\r\n for (let r = 0; r < 42; r += 1) {\r\n if (dates[r].hasEvent) {\r\n dates[r].hasEvent = false;\r\n dates[r].events = [];\r\n }\r\n }\r\n\r\n for (let i = 0; i < len; i += 1) {\r\n const event = eventSource[i],\r\n eventStartTime = event.startTime,\r\n eventEndTime = event.endTime;\r\n\r\n let eventUTCStartTime: number,\r\n eventUTCEndTime: number;\r\n if (event.allDay) {\r\n eventUTCStartTime = eventStartTime.getTime();\r\n eventUTCEndTime = eventEndTime.getTime();\r\n } else {\r\n eventUTCStartTime = Date.UTC(eventStartTime.getFullYear(), eventStartTime.getMonth(), eventStartTime.getDate());\r\n eventUTCEndTime = Date.UTC(eventEndTime.getFullYear(), eventEndTime.getMonth(), eventEndTime.getDate() + 1);\r\n }\r\n\r\n if (eventUTCEndTime <= utcStartTime || eventUTCStartTime >= utcEndTime) {\r\n continue;\r\n }\r\n\r\n let timeDifferenceStart: number,\r\n timeDifferenceEnd: number;\r\n\r\n if (eventUTCStartTime < utcStartTime) {\r\n timeDifferenceStart = 0;\r\n } else {\r\n timeDifferenceStart = (eventUTCStartTime - utcStartTime) / oneDay;\r\n }\r\n\r\n if (eventUTCEndTime > utcEndTime) {\r\n timeDifferenceEnd = (utcEndTime - utcStartTime) / oneDay;\r\n } else {\r\n timeDifferenceEnd = (eventUTCEndTime - utcStartTime) / oneDay;\r\n }\r\n\r\n let index = Math.floor(timeDifferenceStart);\r\n const endIndex = Math.ceil(timeDifferenceEnd - eps);\r\n while (index < endIndex) {\r\n dates[index].hasEvent = true;\r\n let eventSet = dates[index].events;\r\n if (eventSet) {\r\n eventSet.push(event);\r\n } else {\r\n eventSet = [];\r\n eventSet.push(event);\r\n dates[index].events = eventSet;\r\n }\r\n index += 1;\r\n }\r\n }\r\n\r\n for (let r = 0; r < 42; r += 1) {\r\n if (dates[r].hasEvent) {\r\n dates[r].events.sort(this.compareEvent);\r\n }\r\n }\r\n\r\n if (this.autoSelect) {\r\n let findSelected = false;\r\n for (let r = 0; r < 42; r += 1) {\r\n if (dates[r].selected) {\r\n this.selectedDate = dates[r];\r\n findSelected = true;\r\n break;\r\n }\r\n }\r\n\r\n if (findSelected && this.selectedDate) {\r\n this.onTimeSelected.emit({\r\n selectedTime: this.selectedDate.date,\r\n events: this.selectedDate.events,\r\n disabled: this.selectedDate.disabled\r\n });\r\n }\r\n }\r\n }\r\n\r\n refreshView() {\r\n this.range = this.getRange(this.calendarService.currentDate);\r\n\r\n if (this.inited) {\r\n const title = this.getTitle();\r\n this.onTitleChanged.emit(title);\r\n }\r\n this.calendarService.populateAdjacentViews(this);\r\n this.updateCurrentView(this.range.startTime, this.views[this.currentViewIndex]);\r\n this.calendarService.rangeChanged(this);\r\n }\r\n\r\n getTitle(): string {\r\n const currentViewStartDate = this.range.startTime,\r\n date = currentViewStartDate.getDate(),\r\n month = (currentViewStartDate.getMonth() + (date !== 1 ? 1 : 0)) % 12,\r\n year = currentViewStartDate.getFullYear() + (date !== 1 && month === 0 ? 1 : 0),\r\n headerDate = new Date(year, month, 1, 12, 0, 0, 0);\r\n return this.formatTitle(headerDate);\r\n }\r\n\r\n private compareEvent(event1: IEvent, event2: IEvent): number {\r\n if (event1.allDay) {\r\n return 1;\r\n } else if (event2.allDay) {\r\n return -1;\r\n } else {\r\n return (event1.startTime.getTime() - event2.startTime.getTime());\r\n }\r\n }\r\n\r\n select(viewDate: IMonthViewRow) {\r\n if (!this.views) {\r\n return;\r\n }\r\n\r\n const selectedDate = viewDate.date,\r\n events = viewDate.events;\r\n\r\n if (!viewDate.disabled) {\r\n const dates = this.views[this.currentViewIndex].dates,\r\n currentCalendarDate = this.calendarService.currentDate,\r\n currentMonth = currentCalendarDate.getMonth(),\r\n currentYear = currentCalendarDate.getFullYear(),\r\n selectedMonth = selectedDate.getMonth(),\r\n selectedYear = selectedDate.getFullYear();\r\n let direction = 0;\r\n\r\n if (currentYear === selectedYear) {\r\n if (currentMonth !== selectedMonth) {\r\n direction = currentMonth < selectedMonth ? 1 : -1;\r\n }\r\n } else {\r\n direction = currentYear < selectedYear ? 1 : -1;\r\n }\r\n\r\n this.calendarService.setCurrentDate(selectedDate);\r\n if (direction === 0) {\r\n const currentViewStartDate = this.range.startTime,\r\n oneDay = 86400000,\r\n selectedDayDifference = Math.round((Date.UTC(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);\r\n\r\n for (let r = 0; r < 42; r += 1) {\r\n dates[r].selected = false;\r\n }\r\n\r\n if (selectedDayDifference >= 0 && selectedDayDifference < 42) {\r\n dates[selectedDayDifference].selected = true;\r\n this.selectedDate = dates[selectedDayDifference];\r\n }\r\n } else {\r\n this.moveOnSelected = true;\r\n this.slideView(direction);\r\n }\r\n }\r\n\r\n this.onTimeSelected.emit({selectedTime: selectedDate, events, disabled: viewDate.disabled});\r\n }\r\n\r\n slideView(direction: number) {\r\n if (direction === 1) {\r\n this.slider.slideNext();\r\n } else if (direction === -1) {\r\n this.slider.slidePrev();\r\n }\r\n }\r\n\r\n updateCurrentView(currentViewStartDate: Date, view: IMonthView) {\r\n const currentCalendarDate = this.calendarService.currentDate,\r\n today = new Date(),\r\n oneDay = 86400000,\r\n selectedDayDifference = Math.round((Date.UTC(currentCalendarDate.getFullYear(), currentCalendarDate.getMonth(), currentCalendarDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay),\r\n currentDayDifference = Math.round((Date.UTC(today.getFullYear(), today.getMonth(), today.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);\r\n\r\n for (let r = 0; r < 42; r += 1) {\r\n view.dates[r].selected = false;\r\n }\r\n\r\n if (selectedDayDifference >= 0 && selectedDayDifference < 42 && !view.dates[selectedDayDifference].disabled && (this.autoSelect || this.moveOnSelected)) {\r\n view.dates[selectedDayDifference].selected = true;\r\n this.selectedDate = view.dates[selectedDayDifference];\r\n } else {\r\n this.selectedDate = undefined;\r\n }\r\n\r\n if (currentDayDifference >= 0 && currentDayDifference < 42) {\r\n view.dates[currentDayDifference].current = true;\r\n }\r\n }\r\n\r\n eventSelected(event: IEvent) {\r\n this.onEventSelected.emit(event);\r\n }\r\n}\r\n","<div class=\"swiper monthview-swiper\" #monthViewSwiper>\r\n <div class=\"swiper-wrapper\">\r\n <div class=\"swiper-slide\">\r\n <table *ngIf=\"0===currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let dayHeader of views[0].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\" tappable (click)=\"select(views[0].dates[row*7+col])\"\r\n [ngClass]=\"getHighlightClass(views[0].dates[row*7+col])\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"0!==currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr class=\"text-center\">\r\n <th *ngFor=\"let dayHeader of views[0].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n <tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"swiper-slide\">\r\n <table *ngIf=\"1===currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let dayHeader of views[1].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\" tappable (click)=\"select(views[1].dates[row*7+col])\"\r\n [ngClass]=\"getHighlightClass(views[1].dates[row*7+col])\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"1!==currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr class=\"text-center\">\r\n <th *ngFor=\"let dayHeader of views[1].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n <tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"swiper-slide\">\r\n <table *ngIf=\"2===currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let dayHeader of views[2].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\" tappable (click)=\"select(views[2].dates[row*7+col])\"\r\n [ngClass]=\"getHighlightClass(views[2].dates[row*7+col])\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"2!==currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr class=\"text-center\">\r\n <th *ngFor=\"let dayHeader of views[2].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n <tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <ng-template [ngTemplateOutlet]=\"monthviewEventDetailTemplate\"\r\n [ngTemplateOutletContext]=\"{showEventDetail:showEventDetail, selectedDate: selectedDate, noEventsLabel: noEventsLabel}\">\r\n </ng-template>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ElementRef,\r\n SimpleChanges,\r\n OnChanges,\r\n AfterViewInit,\r\n OnDestroy,\r\n ViewEncapsulation,\r\n NgZone\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'init-position-scroll',\r\n template: `\r\n <div class=\"scroll-content\" style=\"height:100%\">\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n styles: [`\r\n .scroll-content {\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n } \r\n `],\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: false\r\n})\r\nexport class initPositionScrollComponent implements OnChanges, AfterViewInit, OnDestroy {\r\n @Input() initPosition!:number;\r\n @Input() emitEvent?:boolean;\r\n @Output() onScroll = new EventEmitter<number>();\r\n\r\n private element:ElementRef;\r\n private scrollContent!:HTMLElement;\r\n private handler!:()=>void;\r\n private listenerAttached:boolean = false;\r\n\r\n constructor(el:ElementRef, private ngZone: NgZone) {\r\n this.element = el;\r\n }\r\n\r\n ngOnChanges(changes:SimpleChanges) {\r\n let initPosition = changes['initPosition'];\r\n if (initPosition && initPosition.currentValue !== undefined && this.scrollContent && initPosition.currentValue != this.scrollContent.scrollTop) {\r\n const me =this;\r\n this.ngZone.run(() => {\r\n me.scrollContent.scrollTop = initPosition.currentValue;\r\n });\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n const scrollContent = this.scrollContent = this.element.nativeElement.querySelector('.scroll-content');\r\n if (this.initPosition !== undefined) {\r\n scrollContent.scrollTop = this.initPosition;\r\n }\r\n\r\n if (this.emitEvent && !this.listenerAttached) {\r\n let onScroll = this.onScroll;\r\n let me = this;\r\n this.handler = function () {\r\n if(me.initPosition != scrollContent.scrollTop) {\r\n onScroll.emit(scrollContent.scrollTop);\r\n }\r\n };\r\n this.listenerAttached = true;\r\n scrollContent.addEventListener('scroll', this.handler);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.listenerAttached) {\r\n this.scrollContent.removeEventListener('scroll', this.handler);\r\n this.listenerAttached = false;\r\n }\r\n }\r\n}\r\n","import {DatePipe} from '@angular/common';\r\nimport {\r\n Component,\r\n OnInit,\r\n OnChanges,\r\n HostBinding,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n TemplateRef,\r\n ElementRef,\r\n OnDestroy, \r\n AfterViewInit,\r\n NgZone,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {Subscription} from 'rxjs';\r\nimport {Swiper} from 'swiper';\r\nimport {SwiperOptions} from 'swiper/types';\r\n\r\nimport type {\r\n ICalendarComponent,\r\n IDisplayEvent,\r\n IEvent,\r\n ITimeSelected,\r\n IRange,\r\n IWeekView,\r\n IWeekViewRow,\r\n IWeekViewDateRow,\r\n CalendarMode,\r\n IDateFormatter,\r\n IDisplayWeekViewHeader,\r\n IDisplayAllDayEvent,\r\n IWeekViewAllDayEventSectionTemplateContext,\r\n IWeekViewNormalEventSectionTemplateContext\r\n} from './calendar.interface';\r\nimport {CalendarService} from './calendar.service';\r\n\r\n@Component({\r\n selector: 'weekview',\r\n templateUrl: './weekview.html',\r\n styleUrls: ['./weekview.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: false\r\n})\r\nexport class WeekViewComponent implements ICalendarComponent, OnInit, OnChanges, OnDestroy, AfterViewInit {\r\n\r\n constructor(private calendarService: CalendarService, private elm: ElementRef, private zone: NgZone) {\r\n }\r\n\r\n private slider!: Swiper;\r\n @ViewChild('weekViewSwiper') swiperElement?: ElementRef;\r\n\r\n @HostBinding('class.weekview') class = true;\r\n\r\n @Input() weekviewHeaderTemplate!: TemplateRef<IDisplayWeekViewHeader>;\r\n @Input() weekviewAllDayEventTemplate!: TemplateRef<IDisplayAllDayEvent>;\r\n @Input() weekviewNormalEventTemplate!: TemplateRef<IDisplayEvent>;\r\n @Input() weekviewAllDayEventSectionTemplate!: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\r\n @Input() weekviewNormalEventSectionTemplate!: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\r\n @Input() weekviewInactiveAllDayEventSectionTemplate!: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\r\n @Input() weekviewInactiveNormalEventSectionTemplate!: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\r\n\r\n @Input() formatWeekTitle?: string;\r\n @Input() formatWeekViewDayHeader?: string;\r\n @Input() formatHourColumn?: string;\r\n @Input() startingDayWeek!: number;\r\n @Input() allDayLabel?: string;\r\n @Input() hourParts!: number;\r\n @Input() eventSource!: IEvent[];\r\n @Input() autoSelect = true;\r\n @Input() markDisabled?: (date: Date) => boolean;\r\n @Input() locale!: string;\r\n @Input() dateFormatter?: IDateFormatter;\r\n @Input() dir = '';\r\n @Input() scrollToHour = 0;\r\n @Input() preserveScrollPosition?: boolean;\r\n @Input() lockSwipeToPrev?: boolean;\r\n @Input() lockSwipeToNext?: boolean;\r\n @Input() lockSwipes?: boolean;\r\n @Input() startHour!: number;\r\n @Input() endHour!: number;\r\n @Input() sliderOptions?: SwiperOptions;\r\n @Input() hourSegments!: number;\r\n\r\n @Output() onRangeChanged = new EventEmitter<IRange>();\r\n @Output() onEventSelected = new EventEmitter<IEvent>();\r\n @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\r\n @Output() onDayHeaderSelected = new EventEmitter<ITimeSelected>();\r\n @Output() onTitleChanged = new EventEmitter<string>();\r\n\r\n public readonly sliderIndexList = [0, 1, 2];\r\n public views: IWeekView[] = [];\r\n public currentViewIndex = 0;\r\n public range!: IRange;\r\n public direction = 0;\r\n public mode: CalendarMode = 'week';\r\n\r\n private inited = false;\r\n private currentDateChangedFromParentSubscription?: Subscription;\r\n private eventSourceChangedSubscription?: Subscription;\r\n private slideChangedSubscription?: Subscription;\r\n private slideUpdatedSubscription?: Subscription;\r\n\r\n public hourColumnLabels!: string[];\r\n public initScrollPosition!: number;\r\n private formatDayHeader!: (date: Date) => string;\r\n private formatTitle!: (date: Date) => string;\r\n private formatHourColumnLabel!: (date: Date) => string;\r\n private hourRange!: number;\r\n\r\n static createDateObjects(startTime: Date, startHour: number, endHour: number, timeInterval: number): IWeekViewRow[][] {\r\n const times: IWeekViewRow[][] = [],\r\n currentHour = 0,\r\n currentDate = startTime.getDate();\r\n let hourStep,\r\n minStep;\r\n\r\n if (timeInterval < 1) {\r\n hourStep = Math.floor(1 / timeInterval);\r\n minStep = 60;\r\n } else {\r\n hourStep = 1;\r\n minStep = Math.floor(60 / timeInterval);\r\n }\r\n\r\n for (let hour = startHour; hour < endHour; hour += hourStep) {\r\n for (let interval = 0; interval < 60; interval += minStep) {\r\n const row: IWeekViewRow[] = [];\r\n for (let day = 0; day < 7; day += 1) {\r\n const time = new Date(startTime.getTime());\r\n time.setHours(currentHour + hour, interval);\r\n time.setDate(currentDate + day);\r\n row.push({\r\n events: [],\r\n time\r\n });\r\n }\r\n times.push(row);\r\n }\r\n }\r\n return times;\r\n }\r\n\r\n static getDates(startTime: Date, n: number): IWeekViewDateRow[] {\r\n const dates = new Array(n),\r\n current = new Date(startTime.getTime());\r\n let i = 0;\r\n while (i < n) {\r\n dates[i++] = {\r\n date: new Date(current.getTime()),\r\n events: [],\r\n dayHeader: ''\r\n };\r\n current.setDate(current.getDate() + 1);\r\n }\r\n return dates;\r\n }\r\n\r\n private static compareEventByStartOffset(eventA: IDisplayEvent, eventB: IDisplayEvent): number {\r\n return eventA.startOffset - eventB.startOffset;\r\n }\r\n\r\n private static calculateWidth(orderedEvents: IDisplayEvent[], size: number, hourParts: number) {\r\n const totalSize = size * hourParts,\r\n cells = new Array(totalSize);\r\n\r\n // sort by position in descending order, the right most columns should be calculated first\r\n orderedEvents.sort((eventA, eventB) => {\r\n return eventB.position - eventA.position;\r\n });\r\n for (let i = 0; i < totalSize; i += 1) {\r\n cells[i] = {\r\n calculated: false,\r\n events: []\r\n };\r\n }\r\n const len = orderedEvents.length;\r\n for (let i = 0; i < len; i += 1) {\r\n const event = orderedEvents[i];\r\n let index = event.startIndex * hourParts + event.startOffset;\r\n while (index < event.endIndex * hourParts - event.endOffset) {\r\n cells[index].events.push(event);\r\n index += 1;\r\n }\r\n }\r\n\r\n let i = 0;\r\n while (i < len) {\r\n let event:IDisplayEvent|undefined = orderedEvents[i];\r\n if (!event.overlapNumber) {\r\n const overlapNumber = event.position + 1;\r\n event.overlapNumber = overlapNumber;\r\n const eventQueue = [event];\r\n while (event = eventQueue.shift()) { \r\n let index = event.startIndex * hourParts + event.startOffset;\r\n while (index < event.endIndex * hourParts - event.endOffset) {\r\n if (!cells[index].calculated) {\r\n cells[index].calculated = true;\r\n if (cells[index].events) {\r\n const eventCountInCell = cells[index].events.length;\r\n for (let j = 0; j < eventCountInCell; j += 1) {\r\n const currentEventInCell = cells[index].events[j];\r\n if (!currentEventInCell.overlapNumber) {\r\n currentEventInCell.overlapNumber = overlapNumber;\r\n eventQueue.push(currentEventInCell);\r\n }\r\n }\r\n }\r\n }\r\n index += 1;\r\n }\r\n }\r\n }\r\n i += 1;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.sliderOptions) {\r\n this.sliderOptions = {};\r\n }\r\n this.sliderOptions.loop = true;\r\n this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;\r\n this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;\r\n this.sliderOptions.allowTouchMove = !this.lockSwipes;\r\n\r\n this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\r\n if (this.dateFormatter && this.dateFormatter.formatWeekViewDayHeader) {\r\n this.formatDayHeader = this.dateFormatter.formatWeekViewDayHeader;\r\n } else {\r\n const datePipe = new DatePipe(this.locale);\r\n this.formatDayHeader = function (date: Date) {\r\n return datePipe.transform(date, this.formatWeekViewDayHeader)||'';\r\n };\r\n }\r\n\r\n if (this.dateFormatter && this.dateFormatter.formatWeekViewTitle) {\r\n this.formatTitle = this.dateFormatter.formatWeekViewTitle;\r\n } else {\r\n const datePipe = new DatePipe(this.locale);\r\n this.formatTitle = function (date: Date) {\r\n return datePipe.transform(date, this.formatWeekTitle)||'';\r\n };\r\n }\r\n\r\n if (this.dateFormatter && this.dateFormatter.formatWeekViewHourColumn) {\r\n this.formatHourColumnLabel = this.dateFormatter.formatWeekViewHourColumn;\r\n } else {\r\n const datePipe = new DatePipe(this.locale);\r\n this.formatHourColumnLabel = function (date: Date) {\r\n return datePipe.transform(date, this.formatHourColumn)||'';\r\n };\r\n }\r\n\r\n this.refreshView();\r\n this.hourColumnLabels = this.getHourColumnLabels();\r\n this.inited = true;\r\n\r\n this.currentDateChangedFromParentSubscription = this.calendarService.currentDateChangedFromParent$.subscribe(currentDate => {\r\n this.refreshView();\r\n });\r\n\r\n this.eventSourceChangedSubscription = this.calendarService.eventSourceChanged$.subscribe(() => {\r\n this.onDataLoaded();\r\n });\r\n\r\n this.slideChangedSubscription = this.calendarService.slideChanged$.subscribe(direction => {\r\n if (direction === 1) {\r\n this.slider.slideNext();\r\n } else if (direction === -1) {\r\n this.slider.slidePrev();\r\n }\r\n });\r\n\r\n this.slideUpdatedSubscription = this.calendarService.slideUpdated$.subscribe(() => {\r\n this.slider.update();\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.slider = new Swiper(this.swiperElement?.nativeElement, this.sliderOptions);\r\n let me = this;\r\n this.slider.on('slideNextTransitionEnd', function() {\r\n me.onSlideChanged(1);\r\n });\r\n\r\n this.slider.on('slidePrevTransitionEnd', function() {\r\n me.onSlideChanged(-1);\r\n });\r\n\r\n if(this.dir === 'rtl') {\r\n this.slider.changeLanguageDirection('rtl');\r\n }\r\n\r\n const title = this.getTitle();\r\n this.onTitleChanged.emit(title);\r\n\r\n if (this.scrollToHour > 0) {\r\n const hourColumns = this.elm.nativeElement.querySelector('.weekview-normal-event-container').querySelectorAll('.calendar-hour-column');\r\n const me = this;\r\n setTimeout(() => {\r\n me.initScrollPosition = hourColumns[me.scrollToHour - me.startHour].offsetTop;\r\n }, 50);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (!this.inited) {\r\n return;\r\n }\r\n\r\n if ((changes['startHour'] || changes['endHour']) && (!changes['startHour'].isFirstChange() || !changes['endHour'].isFirstChange())) {\r\n this.views = [];\r\n this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\r\n this.direction = 0;\r\n this.refreshView();\r\n this.hourColumnLabels = this.getHourColumnLabels();\r\n }\r\n\r\n const eventSourceChange = changes['eventSource'];\r\n if (eventSourceChange && eventSourceChange.currentValue) {\r\n this.onDataLoaded();\r\n }\r\n\r\n const lockSwipeToPrev = changes['lockSwipeToPrev'];\r\n if (lockSwipeToPrev) {\r\n this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;\r\n }\r\n\r\n const lockSwipeToNext = changes['lockSwipeToNext'];\r\n if (lockSwipeToPrev) {\r\n this.slider.allowSlideNext = !lockSwipeToNext.currentValue;\r\n }\r\n\r\n const lockSwipes = changes['lockSwipes'];\r\n if (lockSwipes) {\r\n this.slider.allowTouchMove = !lockSwipes.currentValue;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.currentDateChangedFromParentSubscription) {\r\n this.currentDateChangedFromParentSubscription.unsubscribe();\r\n this.currentDateChangedFromParentSubscription = undefined;\r\n }\r\n\r\n if (this.eventSourceChangedSubscription) {\r\n this.eventSourceChangedSubscription.unsubscribe();\r\n this.eventSourceChangedSubscription = undefined;\r\n }\r\n\r\n if (this.slideChangedSubscription) {\r\n this.slideChangedSubscription.unsubscribe();\r\n this.slideChangedSubscription = undefined;\r\n }\r\n\r\n if (this.slideUpdatedSubscription) {\r\n this.slideUpdatedSubscription.unsubscribe();\r\n this.slideUpdatedSubscription = undefined;\r\n }\r\n }\r\n\r\n onSlideChanged(direction: number) {\r\n this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;\r\n this.move(direction);\r\n }\r\n\r\n move(direction: number) {\r\n if (direction === 0) {\r\n return;\r\n }\r\n this.direction = direction;\r\n const adjacent = this.calendarService.getAdjacentCalendarDate(this.mode, direction);\r\n this.calendarService.setCurrentDate(adjacent);\r\n this.refreshView();\r\n this.direction = 0;\r\n }\r\n\r\n private getHourColumnLabels(): string[] {\r\n const hourColumnLabels: string[] = [];\r\n for (let hour = 0, length = this.views[0].rows.length; hour < length; hour += 1) {\r\n // handle edge case for DST\r\n if (hour === 0 && this.views[0].rows[hour][0].time.getHours() !== this.startHour) {\r\n const time = new Date(this.views[0].rows[hour][0].time);\r\n time.setDate(time.getDate() + 1);\r\n time.setHours(this.startHour);\r\n hourColumnLabels.push(this.formatHourColumnLabel(time));\r\n } else {\r\n hourColumnLabels.push(this.formatHourColumnLabel(this.views[0].rows[hour][0].time));\r\n }\r\n }\r\n return hourColumnLabels;\r\n }\r\n\r\n getViewData(startTime: Date): IWeekView {\r\n const dates = WeekViewComponent.getDates(startTime, 7);\r\n for (let i = 0; i < 7; i++) {\r\n dates[i].dayHeader = this.formatDayHeader(dates[i].date);\r\n }\r\n\r\n return {\r\n rows: WeekViewComponent.createDateObjects(startTime, this.startHour, this.endHour, this.hourSegments),\r\n dates\r\n };\r\n }\r\n\r\n getRange(currentDate: Date): IRange {\r\n const year = currentDate.getFullYear(),\r\n month = currentDate.getMonth(),\r\n date = currentDate.getDate(),\r\n day = currentDate.getDay();\r\n let difference = day - this.startingDayWeek;\r\n\r\n if (difference < 0) {\r\n difference += 7;\r\n }\r\n\r\n // set hour to 12 to avoid DST problem\r\n const firstDayOfWeek = new Date(year, month, date - difference, 12, 0, 0),\r\n endTime = new Date(year, month, date - difference + 7, 12, 0, 0);\r\n\r\n return {\r\n startTime: firstDayOfWeek,\r\n endTime\r\n };\r\n }\r\n\r\n onDataLoaded() {\r\n const eventSource = this.eventSource,\r\n len = eventSource ? eventSource.length : 0,\r\n startTime = this.range.startTime,\r\n endTime = this.range.endTime,\r\n utcStartTime = Date.UTC(startTime.getFullYear(), startTime.getMonth(), startTime.getDate()),\r\n utcEndTime = Date.UTC(endTime.getFullYear(), endTime.getMonth(), endTime.getDate()),\r\n currentViewIndex = this.currentViewIndex,\r\n rows = this.views[currentViewIndex].rows,\r\n dates = this.views[currentViewIndex].dates,\r\n oneHour = 3600000,\r\n oneDay = 86400000,\r\n // add allday eps\r\n eps = 0.016,\r\n rangeStartRowIndex = this.startHour * this.hourSegments,\r\n rangeEndRowIndex = this.endHour * this.hourSegments,\r\n allRows = 24 * this.hourSegments;\r\n let allDayEventInRange = false,\r\n normalEventInRange = false;\r\n\r\n for (let i = 0; i < 7; i += 1) {\r\n dates[i].events = [];\r\n dates[i].hasEvent = false;\r\n }\r\n\r\n for (let day = 0; day < 7; day += 1) {\r\n for (let hour = 0; hour < this.hourRange; hour += 1) {\r\n rows[hour][day].events = [];\r\n }\r\n }\r\n for (let i = 0; i < len; i += 1) {\r\n const event = eventSource[i];\r\n const eventStartTime = event.startTime;\r\n const eventEndTime = event.endTime;\r\n\r\n let eventUTCStartTime: number,\r\n eventUTCEndTime: number;\r\n\r\n if (event.allDay) {\r\n eventUTCStartTime = eventStartTime.getTime();\r\n eventUTCEndTime = eventEndTime.getTime();\r\n } else {\r\n eventUTCStartTime = Date.UTC(eventStartTime.getFullYear(), eventStartTime.getMonth(), eventStartTime.getDate());\r\n eventUTCEndTime = Date.UTC(eventEndTime.getFullYear(), eventEndTime.getMonth(), eventEndTime.getDate() + 1);\r\n }\r\n\r\n if (eventUTCEndTime <= utcStartTime || eventUTCStartTime >= utcEndTime || eventStartTime >= eventEndTime) {\r\n continue;\r\n }\r\n\r\n if (event.allDay) {\r\n allDayEventInRange = true;\r\n\r\n let allDayStartIndex: number;\r\n if (eventUTCStartTime <= utcStartTime) {\r\n allDayStartIndex = 0;\r\n } else {\r\n allDayStartIndex = Math.round((eventUTCStartTime - utcStartTime) / oneDay);\r\n }\r\n\r\n let allDayEndIndex: number;\r\n if (eventUTCEndTime >= utcEndTime) {\r\n allDayEndIndex = Math.round((utcEndTime - utcStartTime) / oneDay);\r\n } else {\r\n allDayEndIndex = Math.round((eventUTCEndTime - utcStartTime) / oneDay);\r\n }\r\n\r\n const displayAllDayEvent: IDisplayEvent = {\r\n event,\r\n startIndex: allDayStartIndex,\r\n endIndex: allDayEndIndex,\r\n startOffset: 0,\r\n endOffset: 0,\r\n position: 0\r\n };\r\n\r\n let eventSet = dates[allDayStartIndex].events;\r\n if (eventSet) {\r\n eventSet.push(displayAllDayEvent);\r\n } else {\r\n eventSet = [];\r\n eventSet.push(displayAllDayEvent);\r\n dates[allDayStartIndex].events = eventSet;\r\n }\r\n dates[allDayStartIndex].hasEvent = true;\r\n } else {\r\n normalEventInRange = true;\r\n\r\n let timeDifferenceStart: number;\r\n if (eventUTCStartTime < utcStartTime) {\r\n timeDifferenceStart = 0;\r\n } else {\r\n timeDifferenceStart = (eventUTCStartTime - utcStartTime) / oneHour * this.hourSegments + (eventStartTime.getHours() + eventStartTime.getMinutes() / 60) * this.hourSegments;\r\n }\r\n\r\n let timeDifferenceEnd: number;\r\n if (eventUTCEndTime > utcEndTime) {\r\n timeDifferenceEnd = (utcEndTime - utcStartTime) / oneHour * this.hourSegments;\r\n } else {\r\n timeDifferenceEnd = (eventUTCEndTime - oneDay - utcStartTime) / oneHour * this.hourSegments + (eventEndTime.getHours() + eventEndTime.getMinutes() / 60) * this.hourSegments;\r\n }\r\n\r\n const startIndex = Math.floor(timeDifferenceStart),\r\n endIndex = Math.ceil(timeDifferenceEnd - eps);\r\n let startRowIndex = startIndex % allRows,\r\n dayIndex = Math.floor(startIndex / allRows),\r\n endOfDay = dayIndex * allRows,\r\n startOffset = 0,\r\n endOffset = 0;\r\n\r\n if (this.hourParts !== 1) {\r\n if (startRowIndex < rangeStartRowIndex) {\r\n startOffset = 0;\r\n } else {\r\n startOffset = Math.floor((timeDifferenceStart - startIndex) * this.hourParts);\r\n }\r\n }\r\n\r\n do {\r\n endOfDay += allRows;\r\n let endRowIndex: number;\r\n if (endOfDay < endIndex) {\r\n endRowIndex = allRows;\r\n } else {\r\n if (endOfDay === endIndex) {\r\n endRowIndex = allRows;\r\n } else {\r\n endRowIndex = endIndex % allRows;\r\n }\r\n if (this.hourParts !== 1) {\r\n if (endRowIndex > rangeEndRowIndex) {\r\n endOffset = 0;\r\n } else {\r\n endOffset = Math.floor((endIndex - timeDifferenceEnd) * this.hourParts);\r\n }\r\n }\r\n }\r\n if (startRowIndex < rangeStartRowIndex) {\r\n startRowIndex = 0;\r\n } else {\r\n startRowIndex -= rangeStartRowIndex;\r\n }\r\n if (endRowIndex > rangeEndRowIndex) {\r\n endRowIndex = rangeEndRowIndex;\r\n }\r\n endRowIndex -= rangeStartRowIndex;\r\n\r\n if (startRowIndex < endRowIndex) {\r\n const displayEvent = {\r\n event,\r\n startIndex: startRowIndex,\r\n endIndex: endRowIndex,\r\n startOffset,\r\n endOffset,\r\n position: 0\r\n };\r\n let eventSet = rows[startRowIndex][dayIndex].events;\r\n if (eventSet) {\r\n eventSet.push(displayEvent);\r\n } else {\r\n eventSet = [];\r\n eventSet.push(displayEvent);\r\n rows[startRowIndex][dayIndex].events = eventSet;\r\n }\r\n dates[dayIndex].hasEvent = true;\r\n }\r\n startRowIndex = 0;\r\n startOffset = 0;\r\n dayIndex += 1;\r\n } while (endOfDay < endIndex);\r\n }\r\n }\r\n\r\n if (normalEventInRange) {\r\n for (let day = 0; day < 7; day += 1) {\r\n let orderedEvents: IDisplayEvent[] = [];\r\n for (let hour = 0; hour < this.hourRange; hour += 1) {\r\n if (rows[hour][day].events) {\r\n rows[hour][day].events.sort(WeekViewComponent.compareEventByStartOffset);\r\n orderedEvents = orderedEvents.concat(rows[hour][day].events);\r\n }\r\n }\r\n if (orderedEvents.length > 0) {\r\n this.placeEvents(orderedEvents);\r\n }\r\n }\r\n }\r\n\r\n if (allDayEventInRange) {\r\n let orderedAllDayEvents: IDisplayEvent[] = [];\r\n for (let day = 0; day < 7; day += 1) {\r\n if (dates[day].events) {\r\n orderedAllDayEvents = orderedAllDayEvents.concat(dates[day].events);\r\n }\r\n }\r\n if (orderedAllDayEvents.length > 0) {\r\n this.placeAllDayEvents(orderedAllDayEvents);\r\n }\r\n }\r\n\r\n if (this.autoSelect) {\r\n let selectedDate;\r\n for (let r = 0; r < 7; r += 1) {\r\n if (dates[r].selected) {\r\n selectedDate = dates[r];\r\n break;\r\n }\r\n }\r\n\r\n if (selectedDate) {\r\n let disabled = false;\r\n if (this.markDisabled) {\r\n disabled = this.markDisabled(selectedDate.date);\r\n }\r\n\r\n this.onTimeSelected.emit({\r\n selectedTime: selectedDate.date,\r\n events: selectedDate.events.map(e => e.event),\r\n disabled\r\n });\r\n }\r\n }\r\n }\r\n\r\n refreshView() {\r\n this.range = this.getRange(this.calendarService.currentDate);\r\n\r\n if (this.inited) {\r\n const title = this.getTitle();\r\n this.onTitleChanged.emit(title);\r\n }\r\n this.calendarService.populateAdjacentViews(this);\r\n this.updateCurrentView(this.range.startTime, this.views[this.currentViewIndex]);\r\n this.calendarService.rangeChanged(this);\r\n }\r\n\r\n getTitle(): string {\r\n const firstDayOfWeek = new Date(this.range.startTime.getTime());\r\n firstDayOfWeek.setHours(12, 0, 0, 0);\r\n return this.formatTitle(firstDayOfWeek);\r\n }\r\n\r\n getHighlightClass(date: IWeekViewDateRow): string {\r\n let className = '';\r\n\r\n if (date.hasEvent) {\r\n if (className) {\r\n className += ' ';\r\n }\r\n className = 'weekview-with-event';\r\n }\r\n\r\n if (date.selected) {\r\n if (className) {\r\n className += ' ';\r\n }\r\n className += 'weekview-selected';\r\n }\r\n\r\n if (date.current) {\r\n if (className) {\r\n className += ' ';\r\n }\r\n className += 'weekview-current';\r\n }\r\n\r\n return className;\r\n }\r\n\r\n select(selectedTime: Date, events: IDisplayEvent[]) {\r\n let disabled = false;\r\n if (this.markDisabled) {\r\n disabled = this.markDisabled(selectedTime);\r\n }\r\n\r\n this.onTimeSelected.emit({\r\n selectedTime,\r\n events: events.map(e => e.event),\r\n disabled\r\n });\r\n }\r\n\r\n placeEvents(orderedEvents: IDisplayEvent[]) {\r\n this.calculatePosition(orderedEvents);\r\n WeekViewComponent.calculateWidth(orderedEvents, this.hourRange, this.hourParts);\r\n }\r\n\r\n placeAllDayEvents(orderedEvents: IDisplayEvent[]) {\r\n this.calculatePosition(orderedEvents);\r\n }\r\n\r\n overlap(event1: IDisplayEvent, event2: IDisplayEvent): boolean {\r\n let earlyEvent = event1,\r\n lateEvent = event2;\r\n if (event1.startIndex > event2.startIndex || (event1.startIndex === event2.startIndex && event1.startOffset > event2.startOffset)) {\r\n earlyEvent = event2;\r\n lateEvent = event1;\r\n }\r\n\r\n if (earlyEvent.endIndex <= lateEvent.startIndex) {\r\n return false;\r\n } else {\r\n return !(earlyEvent.endIndex - lateEvent.startIndex === 1 && earlyEvent.endOffset + lateEvent.startOffset >= this.hourParts);\r\n }\r\n }\r\n\r\n calculatePosition(events: IDisplayEvent[]) {\r\n const len = events.length,\r\n isForbidden = new Array(len);\r\n let maxColumn = 0;\r\n\r\n for (let i = 0; i < len; i += 1) {\r\n let col: number;\r\n for (col = 0; col < maxColumn; col += 1) {\r\n isForbidden[col] = false;\r\n }\r\n for (let j = 0; j < i; j += 1) {\r\n if (this.overlap(events[i], events[j])) {\r\n isForbidden[events[j].position] = true;\r\n }\r\n }\r\n for (col = 0; col < maxColumn; col += 1) {\r\n if (!isForbidden[col]) {\r\n break;\r\n }\r\n }\r\n if (col < maxColumn) {\r\n events[i].position = col;\r\n } else {\r\n events[i].position = maxColumn++;\r\n }\r\n }\r\n\r\n if (this.dir === 'rtl') {\r\n for (let i = 0; i < len; i += 1) {\r\n events[i].position = maxColumn - 1 - events[i].position;\r\n }\r\n }\r\n }\r\n\r\n updateCurrentView(currentViewStartDate: Date, view: IWeekView) {\r\n const currentCalendarDate = this.calendarService.currentDate,\r\n today = new Date(),\r\n oneDay = 86400000,\r\n selectedDayDifference = Math.round((Date.UTC(currentCalendarDate.getFullYear(), currentCalendarDate.getMonth(), currentCalendarDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay),\r\n currentDayDifference = Math.floor((Date.UTC(today.getFullYear(), today.getMonth(), today.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);\r\n\r\n for (let r = 0; r < 7; r += 1) {\r\n view.dates[r].selected = false;\r\n }\r\n\r\n if (selectedDayDifference >= 0 && selectedDayDifference < 7 && this.autoSelect) {\r\n view.dates[selectedDayDifference].selected = true;\r\n }\r\n\r\n if (currentDayDifference >= 0 && currentDayDifference < 7) {\r\n view.dates[currentDayDifference].current = true;\r\n }\r\n }\r\n\r\n daySelected(viewDate: IWeekViewDateRow) {\r\n const selectedDate = viewDate.date,\r\n dates = this.views[this.currentViewIndex].dates,\r\n currentViewStartDate = this.range.startTime,\r\n oneDay = 86400000,\r\n selectedDayDifference = Math.round((Date.UTC(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);\r\n\r\n this.calendarService.setCurrentDate(selectedDate);\r\n\r\n for (let r = 0; r < 7; r += 1) {\r\n dates[r].selected = false;\r\n }\r\n\r\n if (selectedDayDifference >= 0 && selectedDayDifference < 7) {\r\n dates[selectedDayDifference].selected = true;\r\n }\r\n\r\n let disabled = false;\r\n if (this.markDisabled) {\r\n disabled = this.markDisabled(selectedDate);\r\n }\r\n\r\n this.onDayHeaderSelected.emit({selectedTime: selectedDate, events: viewDate.events.map(e => e.event), disabled});\r\n }\r\n\r\n setScrollPosition(scrollPosition: number) {\r\n this.initScrollPosition = scrollPosition;\r\n }\r\n}\r\n","<div class=\"swiper weekview-swiper\" #weekViewSwiper>\r\n <div class=\"swiper-wrapper slides-container\" [dir]=\"dir\">\r\n <div *ngFor=\"let sliderIndex of sliderIndexList\" class=\"swiper-slide slide-container weekview-slide-container\">\r\n <table class=\"table table-bordered table-fixed weekview-header\">\r\n <thead>\r\n <tr>\r\n <th class=\"calendar-hour-column\"></th>\r\n <th class=\"weekview-header text-center\" *ngFor=\"let date of views[sliderIndex].dates\"\r\n [ngClass]=\"getHighlightClass(date)\" (click)=\"daySelected(date)\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{viewDate:date}\">\r\n </ng-template>\r\n </th>\r\n </tr>\r\n </thead>\r\n </table>\r\n <div *ngIf=\"sliderIndex===currentViewIndex\">\r\n <div class=\"weekview-allday-table\">\r\n <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\r\n <div class=\"weekview-allday-content-wrapper scroll-content\">\r\n <table class=\"table table-fixed weekview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td *ngFor=\"let day of views[sliderIndex].dates\" class=\"calendar-cell\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{day:day, eventTemplate:weekviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll class=\"weekview-normal-event-container\" [initPosition]=\"initScrollPosition\"\r\n [emitEvent]=\"preserveScrollPosition\" (onScroll)=\"setScrollPosition($event)\">\r\n <table class=\"table table-bordered table-fixed weekview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td *ngFor=\"let tm of row\" class=\"calendar-cell\" tappable\r\n (click)=\"select(tm.time, tm.events)\">\r\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:weekviewNormalEventTemplate}\">\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </div>\r\n <div *ngIf=\"sliderIndex!==currentViewIndex\">\r\n <div class=\"weekview-allday-table\">\r\n <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\r\n <div class=\"weekview-allday-content-wrapper scroll-content\">\r\n <table class=\"table table-fixed weekview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td *ngFor=\"let day of views[sliderIndex].dates\" class=\"calendar-cell\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewInactiveAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{day:day}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll class=\"weekview-normal-event-container\" [initPosition]=\"initScrollPosition\">\r\n <table class=\"table table-bordered table-fixed weekview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td *ngFor=\"let tm of row\" class=\"calendar-cell\">\r\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts}\">\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { DatePipe } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n Input,\r\n NgZone,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChild,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { Swiper } from 'swiper';\r\nimport { SwiperOptions } from 'swiper/types';\r\n\r\nimport {\r\n CalendarMode,\r\n ICalendarComponent,\r\n IDateFormatter,\r\n IDayView,\r\n IDayViewAllDayEventSectionTemplateContext,\r\n IDayViewCategoryItemTemplateContext,\r\n IDayViewNormalEventSectionTemplateContext,\r\n IDayViewRow,\r\n IDisplayAllDayEvent,\r\n IDisplayEvent,\r\n IEvent,\r\n IRange,\r\n ITimeSelected\r\n} from './calendar.interface';\r\nimport { CalendarService } from './calendar.service';\r\n\r\n@Component({\r\n selector: 'dayview',\r\n templateUrl: './dayview.html',\r\n styleUrls: ['./dayview.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: false\r\n})\r\nexport class DayViewComponent implements ICalendarComponent, OnInit, OnChanges, OnDestroy, AfterViewInit {\r\n constructor(private calendarService: CalendarService, private elm: ElementRef, private zone: NgZone) {}\r\n\r\n private slider!: Swiper;\r\n @ViewChild('dayViewSwiper') swiperElement?: ElementRef;\r\n\r\n @HostBinding('class.dayview') class = true;\r\n\r\n @Input() dayviewCategoryItemTemplate!: TemplateRef<IDayViewCategoryItemTemplateContext>;\r\n @Input() dayviewAllDayEventTemplate!: TemplateRef<IDisplayAllDayEvent>;\r\n @Input() dayviewNormalEventTemplate!: TemplateRef<IDisplayEvent>;\r\n @Input() dayviewAllDayEventSectionTemplate!: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\r\n @Input() dayviewNormalEventSectionTemplate!: TemplateRef<IDayViewNormalEventSectionTemplateContext>;\r\n @Input() dayviewInactiveAllDayEventSectionTemplate!: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\r\n @Input() dayviewInactiveNormalEventSectionTemplate!: TemplateRef<IDayViewNormalEventSectionTemplateContext>;\r\n\r\n @Input() formatHourColumn?: string;\r\n @Input() formatDayTitle?: string;\r\n @Input() allDayLabel?: string;\r\n @Input() hourParts!: number;\r\n @Input() eventSource!: IEvent[];\r\n @Input() markDisabled?: (date: Date) => boolean;\r\n @Input() locale!: string;\r\n @Input() dateFormatter?: IDateFormatter;\r\n @Input() dir = '';\r\n @Input() scrollToHour = 0;\r\n @Input() preserveScrollPosition?: boolean;\r\n @Input() lockSwipeToPrev?: boolean = false;\r\n @Input() lockSwipeToNext?: boolean = false;\r\n @Input() lockSwipes?: boolean = false;\r\n @Input() startHour!: number;\r\n @Input() endHour!: number;\r\n @Input() sliderOptions?: SwiperOptions;\r\n @Input() hourSegments!: number;\r\n @Input() dayviewCategorySource?: Set<string>;\r\n @Input() dayviewShowCategoryView?: boolean;\r\n\r\n @Output() onRangeChanged = new EventEmitter<IRange>();\r\n @Output() onEventSelected = new EventEmitter<IEvent>();\r\n @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\r\n @Output() onTitleChanged = new EventEmitter<string>(true);\r\n\r\n public readonly sliderIndexList = [0, 1, 2];\r\n public views: IDayView[] = [];\r\n public currentViewIndex = 0;\r\n public direction = 0;\r\n public mode: CalendarMode = 'day';\r\n public range!: IRange;\r\n\r\n private inited = false;\r\n private callbackOnInit = true;\r\n private currentDateChangedFromParentSubscription?: Subscription;\r\n private eventSourceChangedSubscription?: Subscription;\r\n private slideChangedSubscription?: Subscription;\r\n private slideUpdatedSubscription?: Subscription;\r\n\r\n public hourColumnLabels!: string[];\r\n public initScrollPosition!: number;\r\n private formatTitle!: (date: Date) => string;\r\n private formatHourColumnLabel!: (date: Date) => string;\r\n private hourRange!: number;\r\n\r\n static createDateObjects(startTime: Date, startHour: number, endHour: number, timeInterval: number): IDayViewRow[] {\r\n const rows: IDayViewRow[] = [],\r\n currentHour = 0,\r\n currentDate = startTime.getDate();\r\n let time: Date, hourStep, minStep;\r\n\r\n if (timeInterval < 1) {\r\n hourStep = Math.floor(1 / timeInterval);\r\n minStep = 60;\r\n } else {\r\n hourStep = 1;\r\n minStep = Math.floor(60 / timeInterval);\r\n }\r\n\r\n for (let hour = startHour; hour < endHour; hour += hourStep) {\r\n for (let interval = 0; interval < 60; interval += minStep) {\r\n time = new Date(startTime.getTime());\r\n time.setHours(currentHour + hour, interval);\r\n time.setDate(currentDate);\r\n rows.push({\r\n time,\r\n events: [],\r\n eventsGroupByCategory: new Map()\r\n });\r\n }\r\n }\r\n return rows;\r\n }\r\n\r\n private static compareEventByStartOffset(eventA: IDisplayEvent, eventB: IDisplayEvent) {\r\n return eventA.startOffset - eventB.startOffset;\r\n }\r\n\r\n private static calculateWidth(orderedEvents: IDisplayEvent[], size: number, hourParts: number) {\r\n const totalSize = size * hourParts,\r\n cells: { calculated: boolean; events: IDisplayEvent[] }[] = new Array(totalSize);\r\n\r\n // sort by position in descending order, the right most columns should be calculated first\r\n orderedEvents.sort((eventA, eventB) => {\r\n return eventB.position - eventA.position;\r\n });\r\n for (let i = 0; i < totalSize; i += 1) {\r\n cells[i] = {\r\n calculated: false,\r\n events: []\r\n };\r\n }\r\n const len = orderedEvents.length;\r\n for (let i = 0; i < len; i += 1) {\r\n const event = orderedEvents[i];\r\n let index = event.startIndex * hourParts + event.startOffset;\r\n while (index < event.endIndex * hourParts - event.endOffset) {\r\n cells[index].events.push(event);\r\n index += 1;\r\n }\r\n }\r\n\r\n let i = 0;\r\n while (i < len) {\r\n let event: IDisplayEvent | undefined = orderedEvents[i];\r\n if (!event.overlapNumber) {\r\n const overlapNumber = event.position + 1;\r\n event.overlapNumber = overlapNumber;\r\n const eventQueue = [event];\r\n while ((event = eventQueue.shift())) {\r\n let index = event.startIndex * hourParts + event.startOffset;\r\n while (index < event.endIndex * hourParts - event.endOffset) {\r\n if (!cells[index].calculated) {\r\n cells[index].calculated = true;\r\n if (cells[index].events) {\r\n const eventCountInCell = cells[index].events.length;\r\n for (let j = 0; j < eventCountInCell; j += 1) {\r\n const currentEventInCell = cells[index].events[j];\r\n if (!currentEventInCell.overlapNumber) {\r\n currentEventInCell.overlapNumber = overlapNumber;\r\n eventQueue.push(currentEventInCell);\r\n }\r\n }\r\n }\r\n }\r\n index += 1;\r\n }\r\n }\r\n }\r\n i += 1;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.sliderOptions) {\r\n this.sliderOptions = {};\r\n }\r\n this.sliderOptions.loop = true;\r\n this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;\r\n this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;\r\n this.sliderOptions.allowTouchMove = !this.lockSwipes;\r\n\r\n this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\r\n if (this.dateFormatter && this.dateFormatter.formatDayViewTitle) {\r\n this.formatTitle = this.dateFormatter.formatDayViewTitle;\r\n } else {\r\n const datePipe = new DatePipe(this.locale);\r\n this.formatTitle = function (date: Date) {\r\n return datePipe.transform(date, this.formatDayTitle) || '';\r\n };\r\n }\r\n\r\n if (this.dateFormatter && this.dateFormatter.formatDayViewHourColumn) {\r\n this.formatHourColumnLabel = this.dateFormatter.formatDayViewHourColumn;\r\n } else {\r\n const datePipe = new DatePipe(this.locale);\r\n this.formatHourColumnLabel = function (date: Date) {\r\n return datePipe.transform(date, this.formatHourColumn) || '';\r\n };\r\n }\r\n\r\n this.refreshView();\r\n this.hourColumnLabels = this.getHourColumnLabels();\r\n\r\n this.inited = true;\r\n\r\n this.currentDateChangedFromParentSubscription = this.calendarService.currentDateChangedFromParent$.subscribe(\r\n currentDate => {\r\n this.refreshView();\r\n }\r\n );\r\n\r\n this.eventSourceChangedSubscription = this.calendarService.eventSourceChanged$.subscribe(() => {\r\n this.onDataLoaded();\r\n });\r\n\r\n this.slideChangedSubscription = this.calendarService.slideChanged$.subscribe(direction => {\r\n if (direction === 1) {\r\n this.slider.slideNext();\r\n } else if (direction === -1) {\r\n this.slider.slidePrev();\r\n }\r\n });\r\n\r\n this.slideUpdatedSubscription = this.calendarService.slideUpdated$.subscribe(() => {\r\n this.slider.update();\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.slider = new Swiper(this.swiperElement?.nativeElement, this.sliderOptions);\r\n let me = this;\r\n this.slider.on('slideNextTransitionEnd', function () {\r\n me.onSlideChanged(1);\r\n });\r\n\r\n this.slider.on('slidePrevTransitionEnd', function () {\r\n me.onSlideChanged(-1);\r\n });\r\n\r\n if (this.dir === 'rtl') {\r\n this.slider.changeLanguageDirection('rtl');\r\n }\r\n\r\n const title = this.getTitle();\r\n this.onTitleChanged.emit(title);\r\n\r\n if (this.scrollToHour > 0) {\r\n const hourColumns = this.elm.nativeElement\r\n .querySelector('.dayview-normal-event-container')\r\n .querySelectorAll('.calendar-hour-column');\r\n const me = this;\r\n setTimeout(() => {\r\n me.initScrollPosition = hourColumns[me.scrollToHour - me.startHour].offsetTop;\r\n }, 50);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (!this.inited) {\r\n return;\r\n }\r\n if (\r\n (changes['startHour'] || changes['endHour']) &&\r\n (!changes['startHour'].isFirstChange() || !changes['endHour'].isFirstChange())\r\n ) {\r\n this.views = [];\r\n this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\r\n this.direction = 0;\r\n this.refreshView();\r\n this.hourColumnLabels = this.getHourColumnLabels();\r\n }\r\n\r\n const eventSourceChange = changes['eventSource'];\r\n if (eventSourceChange && eventSourceChange.currentValue) {\r\n this.onDataLoaded();\r\n }\r\n\r\n const lockSwipeToPrev = changes['lockSwipeToPrev'];\r\n if (lockSwipeToPrev) {\r\n this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;\r\n }\r\n\r\n const lockSwipeToNext = changes['lockSwipeToNext'];\r\n if (lockSwipeToPrev) {\r\n this.slider.allowSlideNext = !lockSwipeToNext.currentValue;\r\n }\r\n\r\n const lockSwipes = changes['lockSwipes'];\r\n if (lockSwipes) {\r\n this.slider.allowTouchMove = !lockSwipes.currentValue;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.currentDateChangedFromParentSubscription) {\r\n this.currentDateChangedFromParentSubscription.unsubscribe();\r\n this.currentDateChangedFromParentSubscription = undefined;\r\n }\r\n\r\n if (this.eventSourceChangedSubscription) {\r\n this.eventSourceChangedSubscription.unsubscribe();\r\n this.eventSourceChangedSubscription = undefined;\r\n }\r\n\r\n if (this.slideChangedSubscription) {\r\n this.slideChangedSubscription.unsubscribe();\r\n this.slideChangedSubscription = undefined;\r\n }\r\n\r\n if (this.slideUpdatedSubscription) {\r\n this.slideUpdatedSubscription.unsubscribe();\r\n this.slideUpdatedSubscription = undefined;\r\n }\r\n }\r\n\r\n onSlideChanged(direction: number) {\r\n this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;\r\n this.move(direction);\r\n }\r\n\r\n move(direction: number) {\r\n if (direction === 0) {\r\n return;\r\n }\r\n\r\n this.direction = direction;\r\n const adjacentDate = this.calendarService.getAdjacentCalendarDate(this.mode, direction);\r\n this.calendarService.setCurrentDate(adjacentDate);\r\n this.refreshView();\r\n this.direction = 0;\r\n }\r\n\r\n private getHourColumnLabels(): string[] {\r\n const hourColumnLabels: string[] = [];\r\n for (let hour = 0, length = this.views[0].rows.length; hour < length; hour += 1) {\r\n // handle edge case for DST\r\n if (hour === 0 && this.views[0].rows[hour].time.getHours() !== this.startHour) {\r\n const time = new Date(this.views[0].rows[hour].time);\r\n time.setDate(time.getDate() + 1);\r\n time.setHours(this.startHour);\r\n hourColumnLabels.push(this.formatHourColumnLabel(time));\r\n } else {\r\n hourColumnLabels.push(this.formatHourColumnLabel(this.views[0].rows[hour].time));\r\n }\r\n }\r\n return hourColumnLabels;\r\n }\r\n\r\n getViewData(startTime: Date): IDayView {\r\n return {\r\n rows: DayViewComponent.createDateObjects(startTime, this.startHour, this.endHour, this.hourSegments),\r\n allDayEvents: [],\r\n categorizedAllDayEventsMap: new Map<string, IDisplayAllDayEvent[]>()\r\n };\r\n }\r\n\r\n getRange(currentDate: Date): IRange {\r\n const year = currentDate.getFullYear(),\r\n month = currentDate.getMonth(),\r\n date = currentDate.getDate(),\r\n startTime = new Date(year, month, date, 12, 0, 0),\r\n endTime = new Date(year, month, date + 1, 12, 0, 0);\r\n\r\n return {\r\n startTime,\r\n endTime\r\n };\r\n }\r\n\r\n onDataLoaded() {\r\n const eventSource = this.eventSource,\r\n len = eventSource ? eventSource.length : 0,\r\n startTime = this.range.startTime,\r\n endTime = this.range.endTime,\r\n utcStartTime = Date.UTC(startTime.getFullYear(), startTime.getMonth(), startTime.getDate()),\r\n utcEndTime = Date.UTC(endTime.getFullYear(), endTime.getMonth(), endTime.getDate()),\r\n currentViewIndex = this.currentViewIndex,\r\n rows = this.views[currentViewIndex].rows,\r\n allDayEvents: IDisplayAllDayEvent[] = (this.views[currentViewIndex].allDayEvents = []),\r\n oneHour = 3600000,\r\n eps = 0.016,\r\n rangeStartRowIndex = this.startHour * this.hourSegments,\r\n rangeEndRowIndex = this.endHour * this.hourSegments;\r\n let normalEventInRange = false;\r\n\r\n for (let hour = 0; hour < this.hourRange; hour += 1) {\r\n rows[hour].events = [];\r\n rows[hour].eventsGroupByCategory = undefined;\r\n }\r\n\r\n for (let i = 0; i < len; i += 1) {\r\n const event = eventSource[i];\r\n const eventStartTime = event.startTime;\r\n const eventEndTime = event.endTime;\r\n let eventUTCStartTime: number, eventUTCEndTime: number;\r\n\r\n if (event.allDay) {\r\n eventUTCStartTime = eventStartTime.getTime();\r\n eventUTCEndTime = eventEndTime.getTime();\r\n } else {\r\n eventUTCStartTime = Date.UTC(\r\n eventStartTime.getFullYear(),\r\n eventStartTime.getMonth(),\r\n eventStartTime.getDate()\r\n );\r\n eventUTCEndTime = Date.UTC(\r\n eventEndTime.getFullYear(),\r\n eventEndTime.getMonth(),\r\n eventEndTime.getDate() + 1\r\n );\r\n }\r\n\r\n if (eventUTCEndTime <= utcStartTime || eventUTCStartTime >= utcEndTime || eventStartTime >= eventEndTime) {\r\n continue;\r\n }\r\n\r\n if (event.allDay) {\r\n allDayEvents.push({\r\n event\r\n });\r\n } else {\r\n normalEventInRange = true;\r\n\r\n let timeDifferenceStart: number;\r\n if (eventUTCStartTime < utcStartTime) {\r\n timeDifferenceStart = 0;\r\n } else {\r\n timeDifferenceStart =\r\n (eventStartTime.getHours() + eventStartTime.getMinutes() / 60) * this.hourSegments;\r\n }\r\n\r\n let timeDifferenceEnd: number;\r\n if (eventUTCEndTime > utcEndTime) {\r\n timeDifferenceEnd = ((utcEndTime - utcStartTime) / oneHour) * this.hourSegments;\r\n } else {\r\n timeDifferenceEnd = (eventEndTime.getHours() + eventEndTime.getMinutes() / 60) * this.hourSegments;\r\n }\r\n\r\n let startIndex = Math.floor(timeDifferenceStart);\r\n let endIndex = Math.ceil(timeDifferenceEnd - eps);\r\n let startOffset = 0;\r\n let endOffset = 0;\r\n if (this.hourParts !== 1) {\r\n if (startIndex < rangeStartRowIndex) {\r\n startOffset = 0;\r\n } else {\r\n startOffset = Math.floor((timeDifferenceStart - startIndex) * this.hourParts);\r\n }\r\n if (endIndex > rangeEndRowIndex) {\r\n endOffset = 0;\r\n } else {\r\n endOffset = Math.floor((endIndex - timeDifferenceEnd) * this.hourParts);\r\n }\r\n }\r\n\r\n if (startIndex < rangeStartRowIndex) {\r\n startIndex = 0;\r\n } else {\r\n startIndex -= rangeStartRowIndex;\r\n }\r\n if (endIndex > rangeEndRowIndex) {\r\n endIndex = rangeEndRowIndex;\r\n }\r\n endIndex -= rangeStartRowIndex;\r\n\r\n if (startIndex < endIndex) {\r\n const displayEvent: IDisplayEvent = {\r\n event,\r\n startIndex,\r\n endIndex,\r\n startOffset,\r\n endOffset,\r\n position: 0\r\n };\r\n\r\n let eventSet = rows[startIndex].events;\r\n if (eventSet) {\r\n eventSet.push(displayEvent);\r\n } else {\r\n eventSet = [];\r\n eventSet.push(displayEvent);\r\n rows[startIndex].events = eventSet;\r\n }\r\n\r\n // setup eventsGroupedByCategory\r\n if (this.dayviewShowCategoryView && this.dayviewCategorySource && event.category) {\r\n let groupedEvents = rows[startIndex].eventsGroupByCategory;\r\n if (groupedEvents) {\r\n if (Array.isArray(groupedEvents.get(event.category))) {\r\n groupedEvents.get(event.category)?.push(displayEvent);\r\n } else {\r\n groupedEvents.set(event.category, [displayEvent]);\r\n }\r\n } else {\r\n groupedEvents = new Map();\r\n groupedEvents.set(event.category, [displayEvent]);\r\n rows[startIndex].eventsGroupByCategory = groupedEvents;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (normalEventInRange) {\r\n if (this.dayviewShowCategoryView && this.dayviewCategorySource) {\r\n for (const category of this.dayviewCategorySource) {\r\n let displayEvents: IDisplayEvent[] = [];\r\n\r\n for (let hour = 0; hour < this.hourRange; hour += 1) {\r\n let groupedEvents = rows[hour].eventsGroupByCategory?.get(category);\r\n if (groupedEvents) {\r\n groupedEvents.sort(DayViewComponent.compareEventByStartOffset);\r\n displayEvents = displayEvents.concat(groupedEvents);\r\n }\r\n }\r\n\r\n if (displayEvents.length > 0) {\r\n this.placeEvents(displayEvents);\r\n }\r\n }\r\n } else {\r\n let orderedEvents: IDisplayEvent[] = [];\r\n for (let hour = 0; hour < this.hourRange; hour += 1) {\r\n if (rows[hour].events) {\r\n rows[hour].events.sort(DayViewComponent.compareEventByStartOffset);\r\n orderedEvents = orderedEvents.concat(rows[hour].events);\r\n }\r\n }\r\n if (orderedEvents.length > 0) {\r\n this.placeEvents(orderedEvents);\r\n }\r\n }\r\n }\r\n\r\n if (this.dayviewShowCategoryView && this.dayviewCategorySource) {\r\n this.categorizeAllDayEvents(allDayEvents);\r\n }\r\n }\r\n\r\n categorizeAllDayEvents(allDayEvents: IDisplayAllDayEvent[]) {\r\n const categoryIdAllDayEventsMap = (this.views[\r\n this.currentViewIndex\r\n ].categorizedAllDayEventsMap = new Map<string, IDisplayAllDayEvent[]>());\r\n\r\n for (const displayAllDayEvent of allDayEvents) {\r\n if (displayAllDayEvent.event.category) {\r\n if (categoryIdAllDayEventsMap.get(displayAllDayEvent.event.category)) {\r\n categoryIdAllDayEventsMap.get(displayAllDayEvent.event.category)?.push(displayAllDayEvent);\r\n } else {\r\n categoryIdAllDayEventsMap.set(displayAllDayEvent.event.category, [displayAllDayEvent]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n refreshView() {\r\n this.range = this.getRange(this.calendarService.currentDate);\r\n if (this.inited) {\r\n const title = this.getTitle();\r\n this.onTitleChanged.emit(title);\r\n }\r\n\r\n this.calendarService.populateAdjacentViews(this);\r\n this.calendarService.rangeChanged(this);\r\n }\r\n\r\n getTitle(): string {\r\n const startingDate = new Date(this.range.startTime.getTime());\r\n startingDate.setHours(12, 0, 0, 0);\r\n return this.formatTitle(startingDate);\r\n }\r\n\r\n select(row: IDayViewRow, category?: string) {\r\n const selectedTime = row.time;\r\n let events = row.events;\r\n if (category) {\r\n events = row.eventsGroupByCategory?.get(category) || [];\r\n }\r\n\r\n let disabled = false;\r\n if (this.markDisabled) {\r\n disabled = this.markDisabled(selectedTime);\r\n }\r\n\r\n this.onTimeSelected.emit({\r\n selectedTime,\r\n category,\r\n events: events.map(e => e.event),\r\n disabled\r\n });\r\n }\r\n\r\n placeEvents(orderedEvents: IDisplayEvent[]) {\r\n this.calculatePosition(orderedEvents);\r\n DayViewComponent.calculateWidth(orderedEvents, this.hourRange, this.hourParts);\r\n }\r\n\r\n placeAllDayEvents(orderedEvents: IDisplayEvent[]) {\r\n this.calculatePosition(orderedEvents);\r\n }\r\n\r\n overlap(event1: IDisplayEvent, event2: IDisplayEvent): boolean {\r\n let earlyEvent = event1,\r\n lateEvent = event2;\r\n if (\r\n event1.startIndex > event2.startIndex ||\r\n (event1.startIndex === event2.startIndex && event1.startOffset > event2.startOffset)\r\n ) {\r\n earlyEvent = event2;\r\n lateEvent = event1;\r\n }\r\n\r\n if (earlyEvent.endIndex <= lateEvent.startIndex) {\r\n return false;\r\n } else {\r\n return !(\r\n earlyEvent.endIndex - lateEvent.startIndex === 1 &&\r\n earlyEvent.endOffset + lateEvent.startOffset >= this.hourParts\r\n );\r\n }\r\n }\r\n\r\n calculatePosition(events: IDisplayEvent[]) {\r\n const len = events.length,\r\n isForbidden: boolean[] = new Array(len);\r\n let maxColumn = 0,\r\n col: number;\r\n\r\n for (let i = 0; i < len; i += 1) {\r\n for (col = 0; col < maxColumn; col += 1) {\r\n isForbidden[col] = false;\r\n }\r\n for (let j = 0; j < i; j += 1) {\r\n if (this.overlap(events[i], events[j])) {\r\n isForbidden[events[j].position] = true;\r\n }\r\n }\r\n for (col = 0; col < maxColumn; col += 1) {\r\n if (!isForbidden[col]) {\r\n break;\r\n }\r\n }\r\n if (col < maxColumn) {\r\n events[i].position = col;\r\n } else {\r\n events[i].position = maxColumn++;\r\n }\r\n }\r\n\r\n if (this.dir === 'rtl') {\r\n for (let i = 0; i < len; i += 1) {\r\n events[i].position = maxColumn - 1 - events[i].position;\r\n }\r\n }\r\n }\r\n\r\n eventSelected(event: IEvent) {\r\n this.onEventSelected.emit(event);\r\n }\r\n\r\n setScrollPosition(scrollPosition: number) {\r\n this.initScrollPosition = scrollPosition;\r\n }\r\n}\r\n","<div class=\"swiper dayview-swiper\" #dayViewSwiper>\r\n <div class=\"swiper-wrapper slides-container\" [dir]=\"dir\">\r\n <div *ngFor=\"let sliderIndex of sliderIndexList\" class=\"swiper-slide slide-container dayview-slide-container\">\r\n <ng-container *ngIf=\"!dayviewShowCategoryView\">\r\n <div class=\"dayview-allday-table\">\r\n <div class=\"dayview-allday-label\">{{allDayLabel}}</div>\r\n <div class=\"dayview-allday-content-wrapper scroll-content\">\r\n <table class=\"table table-bordered dayview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td *ngIf=\"sliderIndex===currentViewIndex\" class=\"calendar-cell\"\r\n [ngClass]=\"{'calendar-event-wrap':views[sliderIndex].allDayEvents.length>0}\"\r\n [ngStyle]=\"{height: 25*views[sliderIndex].allDayEvents.length+'px'}\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents:views[sliderIndex].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"sliderIndex!==currentViewIndex\" class=\"calendar-cell\"\r\n [ngClass]=\"{'calendar-event-wrap':views[sliderIndex].allDayEvents.length>0}\"\r\n [ngStyle]=\"{height: 25*views[sliderIndex].allDayEvents.length+'px'}\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents:views[sliderIndex].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll *ngIf=\"sliderIndex===currentViewIndex\" class=\"dayview-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\" [emitEvent]=\"preserveScrollPosition\"\r\n (onScroll)=\"setScrollPosition($event)\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let tm of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td class=\"calendar-cell\" tappable (click)=\"select(tm)\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n <init-position-scroll *ngIf=\"sliderIndex!==currentViewIndex\" class=\"dayview-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let tm of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td class=\"calendar-cell\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"dayviewShowCategoryView\">\r\n <div class=\"dayview-category-header\">\r\n <table class=\"table table-fixed table-bordered dayview-category-header-table\">\r\n <thead>\r\n <tr>\r\n <th class=\"dayview-category-header-item calendar-hour-column\"></th>\r\n <th *ngFor=\"let category of dayviewCategorySource\" class=\"dayview-category-header-item\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewCategoryItemTemplate\" [ngTemplateOutletContext]=\"{category}\">\r\n </ng-template>\r\n </th>\r\n </tr>\r\n </thead>\r\n </table>\r\n </div>\r\n\r\n <div class=\"dayview-allday-table\">\r\n <div class=\"dayview-allday-label\">{{ allDayLabel }}</div>\r\n <div class=\"dayview-allday-content-wrapper dayview-allday-category-wrapper scroll-content\">\r\n <table class=\"table table-fixed table-bordered dayview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td class=\"calendar-cell\" *ngFor=\"let category of dayviewCategorySource\">\r\n <div class=\"calendar-event-wrap\">\r\n <ng-template *ngIf=\"sliderIndex === currentViewIndex\"\r\n [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents: views[currentViewIndex].categorizedAllDayEventsMap.get(category)!, eventTemplate: dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n <ng-template *ngIf=\"sliderIndex !== currentViewIndex \"\r\n [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents: views[currentViewIndex].categorizedAllDayEventsMap.get(category)!, eventTemplate: dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll *ngIf=\"sliderIndex === currentViewIndex\"\r\n class=\"dayview-normal-event-container dayview-categorized-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\" [emitEvent]=\"preserveScrollPosition\"\r\n (onScroll)=\"setScrollPosition($event)\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{ hourColumnLabels[i] }}\r\n </td>\r\n <td *ngIf=\"dayviewCategorySource?.size === 0\" class=\"calendar-cell\" (click)=\"select(row)\" tappable>\r\n <ng-template [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: [], time: row.time }, hourParts, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n <td *ngFor=\"let category of dayviewCategorySource\" class=\"calendar-cell\" (click)=\"select(row, category)\"\r\n tappable>\r\n <ng-template\r\n [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: row.eventsGroupByCategory?.get(category)!, time: row.time }, hourParts, category, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n\r\n <init-position-scroll *ngIf=\"sliderIndex !== currentViewIndex\"\r\n class=\"dayview-normal-event-container dayview-categorized-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{ hourColumnLabels[i] }}\r\n </td>\r\n <td *ngIf=\"dayviewCategorySource?.size === 0\" class=\"calendar-cell\" (click)=\"select(row)\" tappable>\r\n <ng-template [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: [], time: row.time }, hourParts, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n <td *ngFor=\"let category of dayviewCategorySource\" class=\"calendar-cell\" (click)=\"select(row, category)\"\r\n tappable>\r\n <ng-template\r\n [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: row.eventsGroupByCategory?.get(category)!, time: row.time }, hourParts, category, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>","import { EventEmitter, TemplateRef } from '@angular/core';\r\n\r\nexport interface IEvent {\r\n allDay: boolean;\r\n endTime: Date;\r\n startTime: Date;\r\n title: string;\r\n category?: string;\r\n}\r\n\r\nexport interface IRange {\r\n startTime: Date;\r\n endTime: Date;\r\n}\r\n\r\nexport interface IView {}\r\n\r\nexport interface IDayView extends IView {\r\n allDayEvents: IDisplayAllDayEvent[];\r\n rows: IDayViewRow[];\r\n categorizedAllDayEventsMap: Map<string, IDisplayAllDayEvent[]>;\r\n}\r\n\r\n/**\r\n * should be renamed to IDayViewCell since row could be vertically sliced into pieces of categories\r\n */\r\nexport interface IDayViewRow {\r\n events: IDisplayEvent[];\r\n eventsGroupByCategory?: Map<string, IDisplayEvent[]>;\r\n time: Date;\r\n}\r\n\r\nexport interface IMonthView extends IView {\r\n dates: IMonthViewRow[];\r\n dayHeaders: string[];\r\n}\r\n\r\nexport interface IMonthViewRow {\r\n current?: boolean;\r\n date: Date;\r\n events: IEvent[];\r\n hasEvent?: boolean;\r\n label: string;\r\n secondary: boolean;\r\n selected?: boolean;\r\n disabled: boolean;\r\n}\r\n\r\nexport interface IWeekView extends IView {\r\n dates: IWeekViewDateRow[];\r\n rows: IWeekViewRow[][];\r\n}\r\n\r\nexport interface IWeekViewDateRow {\r\n current?: boolean;\r\n date: Date;\r\n events: IDisplayEvent[];\r\n hasEvent?: boolean;\r\n selected?: boolean;\r\n dayHeader: string;\r\n}\r\n\r\nexport interface IWeekViewRow {\r\n events: IDisplayEvent[];\r\n time: Date;\r\n}\r\n\r\nexport interface IDisplayEvent {\r\n endIndex: number;\r\n endOffset: number;\r\n event: IEvent;\r\n startIndex: number;\r\n startOffset: number;\r\n overlapNumber?: number;\r\n position: number;\r\n}\r\n\r\nexport interface IDisplayWeekViewHeader {\r\n viewDate: IWeekViewDateRow;\r\n}\r\n\r\nexport interface IDisplayAllDayEvent {\r\n event: IEvent;\r\n}\r\n\r\nexport interface ICalendarComponent {\r\n currentViewIndex: number;\r\n direction: number;\r\n eventSource: IEvent[];\r\n getRange: { (date: Date): IRange };\r\n getViewData: { (date: Date): IView };\r\n mode: CalendarMode;\r\n range: IRange;\r\n views: IView[];\r\n onDataLoaded: { (): void };\r\n onRangeChanged: EventEmitter<IRange>;\r\n}\r\n\r\nexport interface ITimeSelected {\r\n events: IEvent[];\r\n selectedTime: Date;\r\n disabled: boolean;\r\n category?: string;\r\n}\r\n\r\nexport interface IMonthViewDisplayEventTemplateContext {\r\n view?: IView;\r\n row?: number;\r\n col?: number;\r\n showEventDetail?: boolean;\r\n selectedDate?: IMonthViewRow;\r\n noEventsLabel?: string;\r\n}\r\n\r\nexport interface IMonthViewEventDetailTemplateContext {\r\n showEventDetail: boolean;\r\n selectedDate?: IMonthViewRow;\r\n noEventsLabel?: string;\r\n}\r\n\r\nexport interface IWeekViewAllDayEventSectionTemplateContext {\r\n day: IWeekViewDateRow;\r\n eventTemplate?: TemplateRef<IDisplayAllDayEvent>;\r\n}\r\n\r\nexport interface IWeekViewNormalEventSectionTemplateContext {\r\n tm: IWeekViewRow;\r\n eventTemplate?: TemplateRef<IDisplayEvent>;\r\n hourParts?: number;\r\n}\r\n\r\nexport interface IDayViewAllDayEventSectionTemplateContext {\r\n allDayEvents: IDisplayAllDayEvent[];\r\n eventTemplate?: TemplateRef<IDisplayAllDayEvent>;\r\n}\r\n\r\nexport interface IDayViewNormalEventSectionTemplateContext {\r\n tm: IDayViewRow;\r\n eventTemplate?: TemplateRef<IDisplayEvent>;\r\n hourParts?: number;\r\n category?: string;\r\n}\r\n\r\nexport interface IDayViewCategoryItemTemplateContext {\r\n category: string;\r\n}\r\n\r\nexport interface IDateFormatter {\r\n formatMonthViewDay?: { (date: Date): string };\r\n formatMonthViewDayHeader?: { (date: Date): string };\r\n formatMonthViewTitle?: { (date: Date): string };\r\n formatWeekViewDayHeader?: { (date: Date): string };\r\n formatWeekViewTitle?: { (date: Date): string };\r\n formatWeekViewHourColumn?: { (date: Date): string };\r\n formatDayViewTitle?: { (date: Date): string };\r\n formatDayViewHourColumn?: { (date: Date): string };\r\n}\r\n\r\nexport type CalendarMode = 'day' | 'month' | 'week';\r\n\r\nexport type QueryMode = 'local' | 'remote';\r\n\r\nexport enum Step {\r\n QuarterHour = 15,\r\n HalfHour = 30,\r\n Hour = 60,\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output, TemplateRef, Inject, LOCALE_ID, NgZone } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { CalendarService } from './calendar.service';\r\nimport SwiperCore from 'swiper';\r\nimport { IonicSlides } from '@ionic/angular';\r\nimport { IEvent, CalendarMode, QueryMode, Step, IMonthViewDisplayEventTemplateContext, IMonthViewEventDetailTemplateContext, IDisplayWeekViewHeader, IDisplayAllDayEvent, IDisplayEvent, IWeekViewAllDayEventSectionTemplateContext, IDayViewAllDayEventSectionTemplateContext, IWeekViewNormalEventSectionTemplateContext, IDayViewNormalEventSectionTemplateContext, IDateFormatter, IRange, ITimeSelected, IDayViewCategoryItemTemplateContext } from './calendar.interface';\r\n\r\nSwiperCore.use([IonicSlides]);\r\n\r\n\r\n@Component({\r\n selector: 'calendar',\r\n templateUrl: './calendar.html',\r\n styleUrls: ['./calendar.css'],\r\n providers: [CalendarService],\r\n standalone: false\r\n})\r\nexport class CalendarComponent implements OnInit {\r\n @Input()\r\n get currentDate():Date {\r\n return this._currentDate;\r\n }\r\n\r\n set currentDate(val:Date) {\r\n if (!val) {\r\n val = new Date();\r\n }\r\n\r\n this._currentDate = val;\r\n this.calendarService.setCurrentDate(val, true);\r\n this.onCurrentDateChanged.emit(this._currentDate);\r\n }\r\n\r\n @Input() eventSource:IEvent[] = [];\r\n @Input() calendarMode:CalendarMode = 'month';\r\n @Input() formatDay:string = 'd';\r\n @Input() formatDayHeader:string = 'EEE';\r\n @Input() formatDayTitle:string = 'MMMM dd, yyyy';\r\n @Input() formatWeekTitle:string = 'MMMM yyyy, \\'Week\\' w';\r\n @Input() formatMonthTitle:string = 'MMMM yyyy';\r\n @Input() formatWeekViewDayHeader:string = 'EEE d';\r\n @Input() formatHourColumn:string = 'ha';\r\n @Input() showEventDetail:boolean = true;\r\n @Input() startingDayMonth:number = 0;\r\n @Input() startingDayWeek:number = 0;\r\n @Input() allDayLabel:string = 'all day';\r\n @Input() noEventsLabel:string = 'No Events';\r\n @Input() queryMode:QueryMode = 'local';\r\n @Input() step:Step = Step.Hour;\r\n @Input() timeInterval:number = 60;\r\n @Input() autoSelect:boolean = true;\r\n @Input() markDisabled?:(date:Date) => boolean;\r\n @Input() monthviewDisplayEventTemplate?:TemplateRef<IMonthViewDisplayEventTemplateContext>;\r\n @Input() monthviewInactiveDisplayEventTemplate?:TemplateRef<IMonthViewDisplayEventTemplateContext>;\r\n @Input() monthviewEventDetailTemplate?:TemplateRef<IMonthViewEventDetailTemplateContext>;\r\n @Input() weekviewHeaderTemplate?:TemplateRef<IDisplayWeekViewHeader>;\r\n @Input() weekviewAllDayEventTemplate?:TemplateRef<IDisplayAllDayEvent>;\r\n @Input() weekviewNormalEventTemplate?:TemplateRef<IDisplayEvent>;\r\n @Input() dayviewCategoryItemTemplate?: TemplateRef<IDayViewCategoryItemTemplateContext>;\r\n @Input() dayviewAllDayEventTemplate?:TemplateRef<IDisplayAllDayEvent>;\r\n @Input() dayviewNormalEventTemplate?:TemplateRef<IDisplayEvent>;\r\n @Input() weekviewAllDayEventSectionTemplate?:TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\r\n @Input() weekviewNormalEventSectionTemplate?:TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\r\n @Input() dayviewAllDayEventSectionTemplate?:TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\r\n @Input() dayviewNormalEventSectionTemplate?:TemplateRef<IDayViewNormalEventSectionTemplateContext>;\r\n @Input() weekviewInactiveAllDayEventSectionTemplate?:TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\r\n @Input() weekviewInactiveNormalEventSectionTemplate?:TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\r\n @Input() dayviewInactiveAllDayEventSectionTemplate?:TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\r\n @Input() dayviewInactiveNormalEventSectionTemplate?:TemplateRef<IDayViewNormalEventSectionTemplateContext>;\r\n @Input() dateFormatter?:IDateFormatter;\r\n @Input() dir:string = \"\";\r\n @Input() scrollToHour:number = 0;\r\n @Input() preserveScrollPosition:boolean = false;\r\n @Input() lockSwipeToPrev:boolean = false;\r\n @Input() lockSwipeToNext:boolean = false;\r\n @Input() lockSwipes:boolean = false;\r\n @Input() locale:string = \"\";\r\n @Input() startHour:number = 0;\r\n @Input() endHour:number = 24;\r\n @Input() sliderOptions:any;\r\n @Input() dayviewCategorySource?:Set<string>;\r\n @Input() dayviewShowCategoryView:boolean = false;\r\n\r\n @Output() onCurrentDateChanged = new EventEmitter<Date>();\r\n @Output() onRangeChanged = new EventEmitter<IRange>();\r\n @Output() onEventSelected = new EventEmitter<IEvent>();\r\n @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\r\n @Output() onDayHeaderSelected = new EventEmitter<ITimeSelected>();\r\n @Output() onTitleChanged = new EventEmitter<string>(true);\r\n\r\n private _currentDate:Date = new Date();\r\n public hourParts = 1;\r\n public hourSegments = 1;\r\n private currentDateChangedFromChildrenSubscription?:Subscription;\r\n\r\n constructor(private calendarService:CalendarService, @Inject(LOCALE_ID) private appLocale:string, private ngZone: NgZone) {\r\n this.locale = appLocale;\r\n }\r\n\r\n ngOnInit() {\r\n if (this.autoSelect) {\r\n if (this.autoSelect.toString() === 'false') {\r\n this.autoSelect = false;\r\n } else {\r\n this.autoSelect = true;\r\n }\r\n }\r\n this.hourSegments = 60 / this.timeInterval;\r\n this.hourParts = 60 / this.step;\r\n if(this.hourParts <= this.hourSegments) {\r\n this.hourParts = 1;\r\n } else {\r\n this.hourParts = this.hourParts / this.hourSegments;\r\n }\r\n this.startHour = parseInt(this.startHour.toString());\r\n this.endHour = parseInt(this.endHour.toString());\r\n this.calendarService.queryMode = this.queryMode;\r\n\r\n this.currentDateChangedFromChildrenSubscription = this.calendarService.currentDateChangedFromChildren$.subscribe(currentDate => {\r\n this._currentDate = currentDate;\r\n this.onCurrentDateChanged.emit(currentDate);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.currentDateChangedFromChildrenSubscription) {\r\n this.currentDateChangedFromChildrenSubscription.unsubscribe();\r\n this.currentDateChangedFromChildrenSubscription = undefined;\r\n }\r\n }\r\n\r\n rangeChanged(range:IRange) {\r\n this.onRangeChanged.emit(range);\r\n }\r\n\r\n eventSelected(event:IEvent) {\r\n this.onEventSelected.emit(event);\r\n }\r\n\r\n timeSelected(timeSelected:ITimeSelected) {\r\n this.onTimeSelected.emit(timeSelected);\r\n }\r\n\r\n daySelected(daySelected:ITimeSelected) {\r\n this.onDayHeaderSelected.emit(daySelected);\r\n }\r\n\r\n titleChanged(title:string) {\r\n this.onTitleChanged.emit(title);\r\n }\r\n\r\n loadEvents() {\r\n this.calendarService.loadEvents();\r\n }\r\n\r\n slideNext() {\r\n this.calendarService.slide(1);\r\n }\r\n\r\n slidePrev() {\r\n this.calendarService.slide(-1);\r\n }\r\n\r\n update() {\r\n this.calendarService.update();\r\n }\r\n}\r\n","<ng-template #monthviewDefaultDisplayEventTemplate let-view=\"view\" let-row=\"row\" let-col=\"col\">\r\n {{view.dates[row*7+col].label}}\r\n</ng-template>\r\n<ng-template #monthviewDefaultEventDetailTemplate let-showEventDetail=\"showEventDetail\" let-selectedDate=\"selectedDate\"\r\n let-noEventsLabel=\"noEventsLabel\">\r\n <ion-list class=\"event-detail-container\" has-bouncing=\"false\" *ngIf=\"showEventDetail\" overflow-scroll=\"false\">\r\n <ion-item *ngFor=\"let event of selectedDate?.events\" (click)=\"eventSelected(event)\">\r\n <span *ngIf=\"!event.allDay\" class=\"monthview-eventdetail-timecolumn\">{{event.startTime|date: 'HH:mm'}}\r\n -\r\n {{event.endTime|date: 'HH:mm'}}\r\n </span>\r\n <span *ngIf=\"event.allDay\" class=\"monthview-eventdetail-timecolumn\">{{allDayLabel}}</span>\r\n <span class=\"event-detail\"> | {{event.title}} </span>\r\n <span class=\"event-detail event-category-detail\" *ngIf=\"event.categoryId\">[{{event.categoryName}}]</span>\r\n </ion-item>\r\n <ion-item *ngIf=\"selectedDate?.events.length==0\">\r\n <div class=\"no-events-label\">{{noEventsLabel}}</div>\r\n </ion-item>\r\n </ion-list>\r\n</ng-template>\r\n<ng-template #defaultWeekviewHeaderTemplate let-viewDate=\"viewDate\">\r\n {{ viewDate.dayHeader }}\r\n</ng-template>\r\n<ng-template #defaultCategoryItemTemplate let-category=\"category\">\r\n {{ category }}\r\n</ng-template>\r\n<ng-template #defaultAllDayEventTemplate let-displayEvent=\"displayEvent\">\r\n <div class=\"calendar-event-inner\">{{displayEvent.event.title}}</div>\r\n</ng-template>\r\n<ng-template #defaultNormalEventTemplate let-displayEvent=\"displayEvent\">\r\n <div class=\"calendar-event-inner\">{{displayEvent.event.title}}</div>\r\n</ng-template>\r\n<ng-template #defaultWeekViewAllDayEventSectionTemplate let-day=\"day\" let-eventTemplate=\"eventTemplate\">\r\n <div [ngClass]=\"{'calendar-event-wrap': day.events}\" *ngIf=\"day.events\"\r\n [ngStyle]=\"{height: 25*day.events.length+'px'}\">\r\n <div *ngFor=\"let displayEvent of day.events\" class=\"calendar-event\" tappable\r\n (click)=\"eventSelected(displayEvent.event)\"\r\n [ngStyle]=\"{top: 25*displayEvent.position+'px', width: 100*(displayEvent.endIndex-displayEvent.startIndex)+'%', height: '25px'}\">\r\n <ng-template [ngTemplateOutlet]=\"eventTemplate\" [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultDayViewAllDayEventSectionTemplate let-allDayEvents=\"allDayEvents\"\r\n let-eventTemplate=\"eventTemplate\">\r\n <div *ngFor=\"let displayEvent of allDayEvents; let eventIndex=index\" class=\"calendar-event\" tappable\r\n (click)=\"eventSelected(displayEvent.event)\" [ngStyle]=\"{top: 25*eventIndex+'px',width: '100%',height:'25px'}\">\r\n <ng-template [ngTemplateOutlet]=\"eventTemplate\" [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\">\r\n </ng-template>\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultNormalEventSectionTemplate let-tm=\"tm\" let-hourParts=\"hourParts\" let-eventTemplate=\"eventTemplate\">\r\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\r\n <div *ngFor=\"let displayEvent of tm.events\" class=\"calendar-event\" tappable\r\n (click)=\"eventSelected(displayEvent.event)\"\r\n [ngStyle]=\"{top: (37*displayEvent.startOffset/hourParts)+'px',left: 100/displayEvent.overlapNumber*displayEvent.position+'%', width: 100/displayEvent.overlapNumber+'%', height: 37*(displayEvent.endIndex -displayEvent.startIndex - (displayEvent.endOffset + displayEvent.startOffset)/hourParts)+'px'}\">\r\n <ng-template [ngTemplateOutlet]=\"eventTemplate\" [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultInactiveAllDayEventSectionTemplate>\r\n</ng-template>\r\n<ng-template #defaultInactiveNormalEventSectionTemplate>\r\n</ng-template>\r\n\r\n<div [ngSwitch]=\"calendarMode\" class=\"{{calendarMode}}view-container\">\r\n <monthview *ngSwitchCase=\"'month'\" [formatDay]=\"formatDay\" [formatDayHeader]=\"formatDayHeader\"\r\n [formatMonthTitle]=\"formatMonthTitle\" [startingDayMonth]=\"startingDayMonth\" [showEventDetail]=\"showEventDetail\"\r\n [noEventsLabel]=\"noEventsLabel\" [autoSelect]=\"autoSelect\" [eventSource]=\"eventSource\"\r\n [markDisabled]=\"markDisabled\"\r\n [monthviewDisplayEventTemplate]=\"monthviewDisplayEventTemplate||monthviewDefaultDisplayEventTemplate\"\r\n [monthviewInactiveDisplayEventTemplate]=\"monthviewInactiveDisplayEventTemplate||monthviewDefaultDisplayEventTemplate\"\r\n [monthviewEventDetailTemplate]=\"monthviewEventDetailTemplate||monthviewDefaultEventDetailTemplate\"\r\n [locale]=\"locale\" [dateFormatter]=\"dateFormatter\" [dir]=\"dir\" [lockSwipeToPrev]=\"lockSwipeToPrev\"\r\n [lockSwipeToNext]=\"lockSwipeToNext\" [lockSwipes]=\"lockSwipes\" [sliderOptions]=\"sliderOptions\"\r\n (onRangeChanged)=\"rangeChanged($event)\" (onEventSelected)=\"eventSelected($event)\"\r\n (onTimeSelected)=\"timeSelected($event)\" (onTitleChanged)=\"titleChanged($event)\">\r\n </monthview>\r\n <weekview *ngSwitchCase=\"'week'\" [formatWeekTitle]=\"formatWeekTitle\"\r\n [formatWeekViewDayHeader]=\"formatWeekViewDayHeader\" [formatHourColumn]=\"formatHourColumn\"\r\n [startingDayWeek]=\"startingDayWeek\" [allDayLabel]=\"allDayLabel\" [hourParts]=\"hourParts\"\r\n [autoSelect]=\"autoSelect\" [hourSegments]=\"hourSegments\" [eventSource]=\"eventSource\"\r\n [markDisabled]=\"markDisabled\" [weekviewHeaderTemplate]=\"weekviewHeaderTemplate||defaultWeekviewHeaderTemplate\"\r\n [weekviewAllDayEventTemplate]=\"weekviewAllDayEventTemplate||defaultAllDayEventTemplate\"\r\n [weekviewNormalEventTemplate]=\"weekviewNormalEventTemplate||defaultNormalEventTemplate\"\r\n [weekviewAllDayEventSectionTemplate]=\"weekviewAllDayEventSectionTemplate||defaultWeekViewAllDayEventSectionTemplate\"\r\n [weekviewNormalEventSectionTemplate]=\"weekviewNormalEventSectionTemplate||defaultNormalEventSectionTemplate\"\r\n [weekviewInactiveAllDayEventSectionTemplate]=\"weekviewInactiveAllDayEventSectionTemplate||defaultInactiveAllDayEventSectionTemplate\"\r\n [weekviewInactiveNormalEventSectionTemplate]=\"weekviewInactiveNormalEventSectionTemplate||defaultInactiveNormalEventSectionTemplate\"\r\n [locale]=\"locale\" [dateFormatter]=\"dateFormatter\" [dir]=\"dir\" [scrollToHour]=\"scrollToHour\"\r\n [preserveScrollPosition]=\"preserveScrollPosition\" [lockSwipeToPrev]=\"lockSwipeToPrev\"\r\n [lockSwipeToNext]=\"lockSwipeToNext\" [lockSwipes]=\"lockSwipes\" [startHour]=\"startHour\" [endHour]=\"endHour\"\r\n [sliderOptions]=\"sliderOptions\" (onRangeChanged)=\"rangeChanged($event)\"\r\n (onEventSelected)=\"eventSelected($event)\" (onDayHeaderSelected)=\"daySelected($event)\"\r\n (onTimeSelected)=\"timeSelected($event)\" (onTitleChanged)=\"titleChanged($event)\">\r\n </weekview>\r\n <dayview *ngSwitchCase=\"'day'\" [formatDayTitle]=\"formatDayTitle\" [formatHourColumn]=\"formatHourColumn\"\r\n [allDayLabel]=\"allDayLabel\" [hourParts]=\"hourParts\" [hourSegments]=\"hourSegments\" [eventSource]=\"eventSource\"\r\n [markDisabled]=\"markDisabled\"\r\n [dayviewCategoryItemTemplate]=\"dayviewCategoryItemTemplate||defaultCategoryItemTemplate\"\r\n [dayviewAllDayEventTemplate]=\"dayviewAllDayEventTemplate||defaultAllDayEventTemplate\"\r\n [dayviewNormalEventTemplate]=\"dayviewNormalEventTemplate||defaultNormalEventTemplate\"\r\n [dayviewAllDayEventSectionTemplate]=\"dayviewAllDayEventSectionTemplate||defaultDayViewAllDayEventSectionTemplate\"\r\n [dayviewNormalEventSectionTemplate]=\"dayviewNormalEventSectionTemplate||defaultNormalEventSectionTemplate\"\r\n [dayviewInactiveAllDayEventSectionTemplate]=\"dayviewInactiveAllDayEventSectionTemplate||defaultInactiveAllDayEventSectionTemplate\"\r\n [dayviewInactiveNormalEventSectionTemplate]=\"dayviewInactiveNormalEventSectionTemplate||defaultInactiveNormalEventSectionTemplate\"\r\n [locale]=\"locale\" [dateFormatter]=\"dateFormatter\" [dir]=\"dir\" [scrollToHour]=\"scrollToHour\"\r\n [preserveScrollPosition]=\"preserveScrollPosition\" [lockSwipeToPrev]=\"lockSwipeToPrev\"\r\n [lockSwipeToNext]=\"lockSwipeToNext\" [lockSwipes]=\"lockSwipes\" [startHour]=\"startHour\" [endHour]=\"endHour\"\r\n [sliderOptions]=\"sliderOptions\" (onRangeChanged)=\"rangeChanged($event)\"\r\n [dayviewCategorySource]=\"dayviewCategorySource\"\r\n [dayviewShowCategoryView]=\"dayviewShowCategoryView\"\r\n (onEventSelected)=\"eventSelected($event)\" (onTimeSelected)=\"timeSelected($event)\"\r\n (onTitleChanged)=\"titleChanged($event)\">\r\n </dayview>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IonicModule } from '@ionic/angular';\r\nimport { MonthViewComponent } from './monthview';\r\nimport { WeekViewComponent } from './weekview';\r\nimport { DayViewComponent } from './dayview';\r\nimport { CalendarComponent } from './calendar';\r\nimport { initPositionScrollComponent } from './init-position-scroll';\r\n\r\n@NgModule({\r\n declarations: [\r\n MonthViewComponent, WeekViewComponent, DayViewComponent, CalendarComponent, initPositionScrollComponent\r\n ],\r\n imports: [IonicModule, CommonModule],\r\n exports: [CalendarComponent]\r\n})\r\nexport class NgCalendarModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.CalendarService","i3.initPositionScrollComponent","i2","i3","i4.MonthViewComponent","i5.WeekViewComponent","i6.DayViewComponent"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pieninck/ionic2-calendar",
|
|
3
|
+
"version": "3.0.1",
|
|
4
|
+
"description": "Ionic calendar component",
|
|
5
|
+
"main": "fesm2022/pieninck-ionic2-calendar.mjs",
|
|
6
|
+
"module": "fesm2022/pieninck-ionic2-calendar.mjs",
|
|
7
|
+
"types": "types/pieninck-ionic2-calendar.d.ts",
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"keywords": [
|
|
10
|
+
"Ionic",
|
|
11
|
+
"calendar"
|
|
12
|
+
],
|
|
13
|
+
"author": {
|
|
14
|
+
"name": "Jan-Niklas Pieninck"
|
|
15
|
+
},
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/pieninck/Ionic2-Calendar.git"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"tslib": "^2.8.1"
|
|
23
|
+
},
|
|
24
|
+
"peerDependencies": {
|
|
25
|
+
"@angular/common": "^21.1.5",
|
|
26
|
+
"@angular/forms": "^21.1.5",
|
|
27
|
+
"@angular/core": "^21.1.5",
|
|
28
|
+
"@ionic/angular": "^8.7.17",
|
|
29
|
+
"swiper": "^12.1.2"
|
|
30
|
+
},
|
|
31
|
+
"typings": "types/pieninck-ionic2-calendar.d.ts",
|
|
32
|
+
"exports": {
|
|
33
|
+
"./package.json": {
|
|
34
|
+
"default": "./package.json"
|
|
35
|
+
},
|
|
36
|
+
".": {
|
|
37
|
+
"types": "./types/pieninck-ionic2-calendar.d.ts",
|
|
38
|
+
"default": "./fesm2022/pieninck-ionic2-calendar.mjs"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|