90 lines
5.1 KiB
HTML
90 lines
5.1 KiB
HTML
<ion-header>
|
|
<ion-toolbar>
|
|
<ion-buttons slot="start">
|
|
<ion-back-button [attr.aria-label]="'core.back' | translate"></ion-back-button>
|
|
</ion-buttons>
|
|
<ion-title>{{ 'addon.calendar.calendarevents' | translate }}</ion-title>
|
|
<ion-buttons slot="end">
|
|
<ion-button (click)="openFilter($event)" [attr.aria-label]="'core.filter' | translate">
|
|
<ion-icon slot="icon-only" name="fas-filter"></ion-icon>
|
|
</ion-button>
|
|
<core-context-menu>
|
|
<core-context-menu-item [hidden]="!notificationsEnabled" [priority]="600"
|
|
[content]="'core.settings.settings' | translate" (action)="openSettings()" iconAction="fas-cogs">
|
|
</core-context-menu-item>
|
|
<core-context-menu-item [hidden]="!eventsLoaded || !hasOffline || !isOnline" [priority]="400"
|
|
[content]="'core.settings.synchronizenow' | translate" (action)="doRefresh(undefined, $event, true)"
|
|
[iconAction]="syncIcon" [closeOnClick]="false"></core-context-menu-item>
|
|
</core-context-menu>
|
|
</ion-buttons>
|
|
</ion-toolbar>
|
|
</ion-header>
|
|
<ion-content>
|
|
<core-split-view>
|
|
<ion-refresher slot="fixed" [disabled]="!eventsLoaded" (ionRefresh)="doRefresh($event)">
|
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
|
</ion-refresher>
|
|
<core-loading [hideUntil]="eventsLoaded">
|
|
<!-- There is data to be synchronized -->
|
|
<ion-card class="core-warning-card" *ngIf="hasOffline">
|
|
<ion-item>
|
|
<ion-icon name="fas-exclamation-triangle" slot="start"></ion-icon>
|
|
<ion-label>{{ 'core.hasdatatosync' | translate:{$a: 'addon.calendar.calendar' | translate} }}</ion-label>
|
|
</ion-item>
|
|
</ion-card>
|
|
|
|
<core-empty-box *ngIf="!filteredEvents || !filteredEvents.length" icon="fas-calendar"
|
|
[message]="'addon.calendar.noevents' | translate">
|
|
</core-empty-box>
|
|
|
|
<ion-list *ngIf="filteredEvents && filteredEvents.length" class="ion-no-margin">
|
|
<ng-container *ngFor="let event of filteredEvents">
|
|
<ion-item-divider *ngIf="event.showDate">
|
|
<ion-label>{{ event.timestart * 1000 | coreFormatDate: "strftimedayshort" }}</ion-label>
|
|
</ion-item-divider>
|
|
<ion-item class="addon-calendar-event ion-text-wrap" [title]="event.name" (click)="gotoEvent(event.id)"
|
|
[class.core-selected-item]="event.id == eventId" [ngClass]="['addon-calendar-eventtype-'+event.eventtype]">
|
|
<img *ngIf="event.moduleIcon" src="{{event.moduleIcon}}" slot="start" class="core-module-icon">
|
|
<ion-icon *ngIf="event.eventIcon && !event.moduleIcon" [name]="event.eventIcon" slot="start">
|
|
</ion-icon>
|
|
<ion-label>
|
|
<h2>
|
|
<core-format-text [text]="event.name" [contextLevel]="event.contextLevel"
|
|
[contextInstanceId]="event.contextInstanceId">
|
|
</core-format-text>
|
|
</h2>
|
|
<p>
|
|
{{ event.timestart * 1000 | coreFormatDate: "strftimetime" }}
|
|
<span *ngIf="event.timeduration && event.endsSameDay">
|
|
- {{ (event.timestart + event.timeduration) * 1000 | coreFormatDate: "strftimetime" }}
|
|
</span>
|
|
<span *ngIf="event.timeduration && !event.endsSameDay">
|
|
- {{ (event.timestart + event.timeduration) * 1000 | coreFormatDate: "strftimedatetimeshort" }}
|
|
</span>
|
|
</p>
|
|
</ion-label>
|
|
<ion-note *ngIf="event.offline && !event.deleted" slot="end">
|
|
<ion-icon name="far-clock"></ion-icon>
|
|
<span class="ion-text-wrap">{{ 'core.notsent' | translate }}</span>
|
|
</ion-note>
|
|
<ion-note *ngIf="event.deleted" slot="end">
|
|
<ion-icon name="fas-trash"></ion-icon>
|
|
<span class="ion-text-wrap">{{ 'core.deletedoffline' | translate }}</span>
|
|
</ion-note>
|
|
</ion-item>
|
|
</ng-container>
|
|
</ion-list>
|
|
|
|
<core-infinite-loading [enabled]="canLoadMore" (action)="loadMoreEvents($event)" [error]="loadMoreError">
|
|
</core-infinite-loading>
|
|
</core-loading>
|
|
|
|
<!-- Create a calendar event. -->
|
|
<ion-fab slot="fixed" core-fab vertical="bottom" horizontal="end" *ngIf="canCreate">
|
|
<ion-fab-button (click)="openEdit()" [attr.aria-label]="'addon.calendar.newevent' | translate">
|
|
<ion-icon name="fas-plus"></ion-icon>
|
|
</ion-fab-button>
|
|
</ion-fab>
|
|
</core-split-view>
|
|
</ion-content>
|