diff --git a/src/app/calendar-app/calendar-app.component.html b/src/app/calendar-app/calendar-app.component.html index d539940ae..2e003588e 100644 --- a/src/app/calendar-app/calendar-app.component.html +++ b/src/app/calendar-app/calendar-app.component.html @@ -93,7 +93,12 @@ - {{ mwlView ? (viewDate | calendarDate:(mwlView + 'ViewTitle'):'en') : 'Overview' }} + + {{ title }} + + + {{ mwlView ? (viewDate | calendarDate:(mwlView + 'ViewTitle'):'en') : 'Overview' }} + @@ -224,7 +229,7 @@

Calendar Menu

-
+
diff --git a/src/app/calendar-app/calendar-app.component.scss b/src/app/calendar-app/calendar-app.component.scss index c56f1a8d7..2c9b5ac56 100644 --- a/src/app/calendar-app/calendar-app.component.scss +++ b/src/app/calendar-app/calendar-app.component.scss @@ -18,6 +18,33 @@ } } +.calendarTitle { + margin: 0 12px; +} + +.calendarMobileHeader { + align-items: center; + display: flex; + flex: 1 1 auto; + justify-content: center; + min-width: 0; + + .calendarTitle { + flex: 1 1 auto; + min-width: 0; + overflow: hidden; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; + } + + .calendarToolbarButton { + flex: 0 0 auto; + min-width: 40px; + padding: 0 8px; + } +} + .updateInfo { &:hover { background-color: #fff; diff --git a/src/app/calendar-app/calendar-app.component.spec.ts b/src/app/calendar-app/calendar-app.component.spec.ts index e2b29af55..65f5f35fb 100644 --- a/src/app/calendar-app/calendar-app.component.spec.ts +++ b/src/app/calendar-app/calendar-app.component.spec.ts @@ -40,6 +40,7 @@ import { MatIcon } from '@angular/material/icon'; import { MatIconTestingModule } from '@angular/material/icon/testing'; import moment from 'moment'; import ICAL from 'ical.js'; +import { RunboxCalendarView } from './runbox-calendar-view'; describe('CalendarAppComponent', () => { let component: CalendarAppComponent; @@ -228,6 +229,19 @@ END:VCALENDAR expect(icon.style.color).toBe('pink'); }); + it('should use a short title in mobile day view', () => { + component.mobileQuery.matches = true; + component.viewDate = new Date(2020, 4, 23); + component.setView(RunboxCalendarView.Day); + + fixture.detectChanges(); + + const title = fixture.debugElement.nativeElement.querySelector('.calendarTitle'); + + expect(component.mobileCalendarTitle).toBe('Sat, May 23, 2020'); + expect(title.innerText.trim()).toBe('Sat, May 23, 2020'); + }); + it('should display events', () => { mockData['events'] = simpleEvents; component.calendarservice.syncCaldav(true); diff --git a/src/app/calendar-app/calendar-app.component.ts b/src/app/calendar-app/calendar-app.component.ts index 0f1195171..9863a6abb 100644 --- a/src/app/calendar-app/calendar-app.component.ts +++ b/src/app/calendar-app/calendar-app.component.ts @@ -24,6 +24,7 @@ import { OnDestroy, ViewChild, } from '@angular/core'; +import { formatDate } from '@angular/common'; import { ActivatedRoute, Router } from '@angular/router'; @@ -166,6 +167,19 @@ export class CalendarAppComponent implements OnDestroy { clearInterval(this.viewRefreshInterval); } + get mobileCalendarTitle(): string | null { + if (!this.mobileQuery.matches || this.view !== RunboxCalendarView.Day) { + return null; + } + + const currentYear = new Date().getFullYear(); + const titleFormat = this.viewDate.getFullYear() === currentYear + ? 'EEE, MMM d' + : 'EEE, MMM d, y'; + + return formatDate(this.viewDate, titleFormat, 'en'); + } + addEvent(on?: Date): void { // setup new event const new_event = RunboxCalendarEvent.newEmpty(this.calendarservice.me.timezone);