commit
						7d862ea37d
					
				@ -6,7 +6,7 @@
 | 
				
			|||||||
        <!-- Download all courses. -->
 | 
					        <!-- Download all courses. -->
 | 
				
			||||||
        <div *ngIf="downloadCoursesEnabled && filteredCourses.length > 0" class="core-button-spinner">
 | 
					        <div *ngIf="downloadCoursesEnabled && filteredCourses.length > 0" class="core-button-spinner">
 | 
				
			||||||
            <ion-button *ngIf="!prefetchCoursesData.loading" fill="clear" (click)="prefetchCourses()"
 | 
					            <ion-button *ngIf="!prefetchCoursesData.loading" fill="clear" (click)="prefetchCourses()"
 | 
				
			||||||
                [attr.aria-label]="prefetchCoursesData.statusTranslatable | translate">
 | 
					                [ariaLabel]="prefetchCoursesData.statusTranslatable | translate">
 | 
				
			||||||
                <ion-icon [name]="prefetchCoursesData.icon" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon [name]="prefetchCoursesData.icon" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
            <ion-badge class="core-course-download-courses-progress" *ngIf="prefetchCoursesData.badge" role="progressbar"
 | 
					            <ion-badge class="core-course-download-courses-progress" *ngIf="prefetchCoursesData.badge" role="progressbar"
 | 
				
			||||||
@ -85,11 +85,11 @@
 | 
				
			|||||||
        </ion-col>
 | 
					        </ion-col>
 | 
				
			||||||
        <ion-col size="auto" *ngIf="isLayoutSwitcherAvailable">
 | 
					        <ion-col size="auto" *ngIf="isLayoutSwitcherAvailable">
 | 
				
			||||||
            <ion-button *ngIf="layout === 'card'" fill="outline" (click)="toggleLayout('list')"
 | 
					            <ion-button *ngIf="layout === 'card'" fill="outline" (click)="toggleLayout('list')"
 | 
				
			||||||
                [attr.aria-label]="'addon.block_myoverview.aria:list' | translate">
 | 
					                [ariaLabel]="'addon.block_myoverview.aria:list' | translate">
 | 
				
			||||||
                <ion-icon slot="icon-only" name="fas-list" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" name="fas-list" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
            <ion-button *ngIf="layout === 'list'" fill="outline" (click)="toggleLayout('card')"
 | 
					            <ion-button *ngIf="layout === 'list'" fill="outline" (click)="toggleLayout('card')"
 | 
				
			||||||
                [attr.aria-label]="'addon.block_myoverview.aria:card' | translate">
 | 
					                [ariaLabel]="'addon.block_myoverview.aria:card' | translate">
 | 
				
			||||||
                <ion-icon slot="icon-only" name="fas-table-cells-large" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" name="fas-table-cells-large" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-col>
 | 
					        </ion-col>
 | 
				
			||||||
 | 
				
			|||||||
@ -73,7 +73,7 @@
 | 
				
			|||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <ion-button class="ion-margin" expand="block" [attr.aria-label]="'core.save' | translate"
 | 
					            <ion-button class="ion-margin" expand="block" [ariaLabel]="'core.save' | translate"
 | 
				
			||||||
                [disabled]="form.invalid || (entry && !hasDataChangedForEdit)" (click)="save()">
 | 
					                [disabled]="form.invalid || (entry && !hasDataChangedForEdit)" (click)="save()">
 | 
				
			||||||
                {{ 'core.save' | translate }}
 | 
					                {{ 'core.save' | translate }}
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
 | 
				
			|||||||
@ -41,8 +41,8 @@
 | 
				
			|||||||
                </h3>
 | 
					                </h3>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                @if (entry.userid === currentUserId && optionsAvailable) {
 | 
					                @if (entry.userid === currentUserId && optionsAvailable) {
 | 
				
			||||||
                <ion-button fill="clear" [attr.aria-label]="'core.displayoptions' | translate"
 | 
					                <ion-button fill="clear" [ariaLabel]="'core.displayoptions' | translate" (click)="showEntryActionsPopover($event, entry)"
 | 
				
			||||||
                    (click)="showEntryActionsPopover($event, entry)" class="entry-options">
 | 
					                    class="entry-options">
 | 
				
			||||||
                    <ion-icon slot="icon-only" aria-hidden="true" name="ellipsis-vertical" />
 | 
					                    <ion-icon slot="icon-only" aria-hidden="true" name="ellipsis-vertical" />
 | 
				
			||||||
                </ion-button>
 | 
					                </ion-button>
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
				
			|||||||
@ -12,7 +12,7 @@
 | 
				
			|||||||
        <ion-grid class="ion-no-padding addon-calendar-navigation">
 | 
					        <ion-grid class="ion-no-padding addon-calendar-navigation">
 | 
				
			||||||
            <ion-row class="ion-align-items-center">
 | 
					            <ion-row class="ion-align-items-center">
 | 
				
			||||||
                <ion-col class="ion-text-start" *ngIf="canNavigate">
 | 
					                <ion-col class="ion-text-start" *ngIf="canNavigate">
 | 
				
			||||||
                    <ion-button fill="clear" (click)="loadPrevious()" [attr.aria-label]="'addon.calendar.monthprev' | translate">
 | 
					                    <ion-button fill="clear" (click)="loadPrevious()" [ariaLabel]="'addon.calendar.monthprev' | translate">
 | 
				
			||||||
                        <ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" />
 | 
					                        <ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
                </ion-col>
 | 
					                </ion-col>
 | 
				
			||||||
@ -23,7 +23,7 @@
 | 
				
			|||||||
                    </h2>
 | 
					                    </h2>
 | 
				
			||||||
                </ion-col>
 | 
					                </ion-col>
 | 
				
			||||||
                <ion-col class="ion-text-end" *ngIf="canNavigate">
 | 
					                <ion-col class="ion-text-end" *ngIf="canNavigate">
 | 
				
			||||||
                    <ion-button fill="clear" (click)="loadNext()" [attr.aria-label]="'addon.calendar.monthnext' | translate">
 | 
					                    <ion-button fill="clear" (click)="loadNext()" [ariaLabel]="'addon.calendar.monthnext' | translate">
 | 
				
			||||||
                        <ion-icon name="fas-chevron-right" slot="icon-only" aria-hidden="true" />
 | 
					                        <ion-icon name="fas-chevron-right" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
                </ion-col>
 | 
					                </ion-col>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
<ion-header class="no-title">
 | 
					<ion-header class="no-title">
 | 
				
			||||||
    <ion-toolbar>
 | 
					    <ion-toolbar>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +0,0 @@
 | 
				
			|||||||
:host {
 | 
					 | 
				
			||||||
    .addon-calendar-event {
 | 
					 | 
				
			||||||
        cursor: pointer;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -36,7 +36,7 @@ import { Translate } from '@singletons';
 | 
				
			|||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
    selector: 'addon-calendar-upcoming-events',
 | 
					    selector: 'addon-calendar-upcoming-events',
 | 
				
			||||||
    templateUrl: 'addon-calendar-upcoming-events.html',
 | 
					    templateUrl: 'addon-calendar-upcoming-events.html',
 | 
				
			||||||
    styleUrls: ['../../calendar-common.scss', 'upcoming-events.scss'],
 | 
					    styleUrls: ['../../calendar-common.scss'],
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonCalendarUpcomingEventsComponent implements OnInit, DoCheck, OnDestroy {
 | 
					export class AddonCalendarUpcomingEventsComponent implements OnInit, DoCheck, OnDestroy {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@
 | 
				
			|||||||
            <h1>{{ 'addon.calendar.calendarevents' | translate }}</h1>
 | 
					            <h1>{{ 'addon.calendar.calendarevents' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="openFilter()" [attr.aria-label]="'core.filter' | translate">
 | 
					            <ion-button fill="clear" (click)="openFilter()" [ariaLabel]="'core.filter' | translate">
 | 
				
			||||||
                <ion-icon slot="icon-only" name="fas-filter" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" name="fas-filter" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
            <core-context-menu>
 | 
					            <core-context-menu>
 | 
				
			||||||
@ -31,7 +31,7 @@
 | 
				
			|||||||
            <ion-grid class="ion-no-padding safe-area-padding">
 | 
					            <ion-grid class="ion-no-padding safe-area-padding">
 | 
				
			||||||
                <ion-row class="ion-align-items-center">
 | 
					                <ion-row class="ion-align-items-center">
 | 
				
			||||||
                    <ion-col class="ion-text-start">
 | 
					                    <ion-col class="ion-text-start">
 | 
				
			||||||
                        <ion-button fill="clear" (click)="loadPrevious()" [attr.aria-label]="'addon.calendar.dayprev' | translate">
 | 
					                        <ion-button fill="clear" (click)="loadPrevious()" [ariaLabel]="'addon.calendar.dayprev' | translate">
 | 
				
			||||||
                            <ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" />
 | 
					                            <ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                        </ion-button>
 | 
					                        </ion-button>
 | 
				
			||||||
                    </ion-col>
 | 
					                    </ion-col>
 | 
				
			||||||
@ -39,7 +39,7 @@
 | 
				
			|||||||
                        <h2>{{ periodName }}</h2>
 | 
					                        <h2>{{ periodName }}</h2>
 | 
				
			||||||
                    </ion-col>
 | 
					                    </ion-col>
 | 
				
			||||||
                    <ion-col class="ion-text-end">
 | 
					                    <ion-col class="ion-text-end">
 | 
				
			||||||
                        <ion-button fill="clear" (click)="loadNext()" [attr.aria-label]="'addon.calendar.daynext' | translate">
 | 
					                        <ion-button fill="clear" (click)="loadNext()" [ariaLabel]="'addon.calendar.daynext' | translate">
 | 
				
			||||||
                            <ion-icon name="fas-chevron-right" slot="icon-only" aria-hidden="true" />
 | 
					                            <ion-icon name="fas-chevron-right" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                        </ion-button>
 | 
					                        </ion-button>
 | 
				
			||||||
                    </ion-col>
 | 
					                    </ion-col>
 | 
				
			||||||
 | 
				
			|||||||
@ -117,8 +117,7 @@
 | 
				
			|||||||
                    <ion-label>
 | 
					                    <ion-label>
 | 
				
			||||||
                        <p class="item-heading">{{ 'addon.calendar.reminders' | translate }}</p>
 | 
					                        <p class="item-heading">{{ 'addon.calendar.reminders' | translate }}</p>
 | 
				
			||||||
                    </ion-label>
 | 
					                    </ion-label>
 | 
				
			||||||
                    <ion-button fill="clear" (click)="addReminder()" slot="end"
 | 
					                    <ion-button fill="clear" (click)="addReminder()" slot="end" [ariaLabel]="'addon.calendar.setnewreminder' | translate">
 | 
				
			||||||
                        [attr.aria-label]="'addon.calendar.setnewreminder' | translate">
 | 
					 | 
				
			||||||
                        <ion-icon name="fas-plus" slot="icon-only" aria-hidden="true" />
 | 
					                        <ion-icon name="fas-plus" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
                </ion-item-divider>
 | 
					                </ion-item-divider>
 | 
				
			||||||
@ -126,7 +125,7 @@
 | 
				
			|||||||
                    <ion-label>
 | 
					                    <ion-label>
 | 
				
			||||||
                        <p>{{ reminder.label }}</p>
 | 
					                        <p>{{ reminder.label }}</p>
 | 
				
			||||||
                    </ion-label>
 | 
					                    </ion-label>
 | 
				
			||||||
                    <ion-button fill="clear" (click)="removeReminder(reminder)" [attr.aria-label]="'core.delete' | translate" slot="end">
 | 
					                    <ion-button fill="clear" (click)="removeReminder(reminder)" [ariaLabel]="'core.delete' | translate" slot="end">
 | 
				
			||||||
                        <ion-icon name="fas-trash" color="danger" slot="icon-only" aria-hidden="true" />
 | 
					                        <ion-icon name="fas-trash" color="danger" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
                </ion-item>
 | 
					                </ion-item>
 | 
				
			||||||
 | 
				
			|||||||
@ -149,7 +149,7 @@
 | 
				
			|||||||
                        <p class="item-heading">{{ reminder.label }}</p>
 | 
					                        <p class="item-heading">{{ reminder.label }}</p>
 | 
				
			||||||
                        <p *ngIf="reminder.sublabel">{{ reminder.sublabel }}</p>
 | 
					                        <p *ngIf="reminder.sublabel">{{ reminder.sublabel }}</p>
 | 
				
			||||||
                    </ion-label>
 | 
					                    </ion-label>
 | 
				
			||||||
                    <ion-button fill="clear" (click)="deleteReminder(reminder.id, $event)" [attr.aria-label]="'core.delete' | translate"
 | 
					                    <ion-button fill="clear" (click)="deleteReminder(reminder.id, $event)" [ariaLabel]="'core.delete' | translate"
 | 
				
			||||||
                        slot="end">
 | 
					                        slot="end">
 | 
				
			||||||
                        <ion-icon name="fas-trash" color="danger" slot="icon-only" aria-hidden="true" />
 | 
					                        <ion-icon name="fas-trash" color="danger" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
 | 
				
			|||||||
@ -8,7 +8,7 @@
 | 
				
			|||||||
            <p *ngIf="!showCalendar" class="subheading">{{ 'addon.calendar.upcomingevents' | translate }}</p>
 | 
					            <p *ngIf="!showCalendar" class="subheading">{{ 'addon.calendar.upcomingevents' | translate }}</p>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="openFilter()" [attr.aria-label]="'core.filter' | translate">
 | 
					            <ion-button fill="clear" (click)="openFilter()" [ariaLabel]="'core.filter' | translate">
 | 
				
			||||||
                <ion-icon slot="icon-only" name="fas-filter" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" name="fas-filter" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
            <core-context-menu>
 | 
					            <core-context-menu>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1>{{ 'addon.messages.groupinfo' | translate }}</h1>
 | 
					            <h1>{{ 'addon.messages.groupinfo' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@
 | 
				
			|||||||
            <h1>{{ 'addon.messages.contacts' | translate }}</h1>
 | 
					            <h1>{{ 'addon.messages.contacts' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="gotoSearch()" [attr.aria-label]="'addon.messages.searchcombined' | translate">
 | 
					            <ion-button fill="clear" (click)="gotoSearch()" [ariaLabel]="'addon.messages.searchcombined' | translate">
 | 
				
			||||||
                <ion-icon name="fas-magnifying-glass" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-magnifying-glass" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
            <!-- Add an empty context menu so split view pages can add items, otherwise the menu disappears in some cases. -->
 | 
					            <!-- Add an empty context menu so split view pages can add items, otherwise the menu disappears in some cases. -->
 | 
				
			||||||
 | 
				
			|||||||
@ -7,10 +7,10 @@
 | 
				
			|||||||
            <h1>{{ 'addon.messages.messages' | translate }}</h1>
 | 
					            <h1>{{ 'addon.messages.messages' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="gotoSearch()" [attr.aria-label]="'addon.messages.searchcombined' | translate">
 | 
					            <ion-button fill="clear" (click)="gotoSearch()" [ariaLabel]="'addon.messages.searchcombined' | translate">
 | 
				
			||||||
                <ion-icon name="fas-magnifying-glass" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-magnifying-glass" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
            <ion-button (click)="gotoSettings()" [attr.aria-label]="'addon.messages.messagepreferences' | translate">
 | 
					            <ion-button (click)="gotoSettings()" [ariaLabel]="'addon.messages.messagepreferences' | translate">
 | 
				
			||||||
                <ion-icon name="fas-gear" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-gear" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
            <!-- Add an empty context menu so split view pages can add items, otherwise the menu disappears in some cases. -->
 | 
					            <!-- Add an empty context menu so split view pages can add items, otherwise the menu disappears in some cases. -->
 | 
				
			||||||
 | 
				
			|||||||
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB  | 
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1>{{ plugin.name }}</h1>
 | 
					            <h1>{{ plugin.name }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -267,7 +267,7 @@
 | 
				
			|||||||
                            </p>
 | 
					                            </p>
 | 
				
			||||||
                        </ion-label>
 | 
					                        </ion-label>
 | 
				
			||||||
                        <ion-button slot="end" *ngIf="feedback!.advancedgrade" (click)="showAdvancedGrade()"
 | 
					                        <ion-button slot="end" *ngIf="feedback!.advancedgrade" (click)="showAdvancedGrade()"
 | 
				
			||||||
                            [attr.aria-label]="'core.showadvanced' |translate">
 | 
					                            [ariaLabel]="'core.showadvanced' |translate">
 | 
				
			||||||
                            <ion-icon name="fas-magnifying-glass" slot="icon-only" aria-hidden="true" />
 | 
					                            <ion-icon name="fas-magnifying-glass" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                        </ion-button>
 | 
					                        </ion-button>
 | 
				
			||||||
                    </ion-item>
 | 
					                    </ion-item>
 | 
				
			||||||
 | 
				
			|||||||
@ -9,7 +9,7 @@
 | 
				
			|||||||
    </ion-label>
 | 
					    </ion-label>
 | 
				
			||||||
    <div slot="end">
 | 
					    <div slot="end">
 | 
				
			||||||
        <div class="ion-text-end">
 | 
					        <div class="ion-text-end">
 | 
				
			||||||
            <ion-button fill="clear" *ngIf="canEdit" (click)="editComment()" [attr.aria-label]="'core.edit' | translate">
 | 
					            <ion-button fill="clear" *ngIf="canEdit" (click)="editComment()" [ariaLabel]="'core.edit' | translate">
 | 
				
			||||||
                <ion-icon name="fas-pen" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-pen" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1>{{ 'addon.mod_book.toc' | translate }}</h1>
 | 
					            <h1>{{ 'addon.mod_book.toc' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -9,7 +9,7 @@
 | 
				
			|||||||
            </h1>
 | 
					            </h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button (click)="showToc()" [attr.aria-label]="'addon.mod_book.toc' | translate" aria-haspopup="true" *ngIf="loaded">
 | 
					            <ion-button (click)="showToc()" [ariaLabel]="'addon.mod_book.toc' | translate" aria-haspopup="true" *ngIf="loaded">
 | 
				
			||||||
                <ion-icon name="fas-bookmark" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-bookmark" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1>{{ 'addon.mod_chat.currentusers' | translate }}</h1>
 | 
					            <h1>{{ 'addon.mod_chat.currentusers' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -9,7 +9,7 @@
 | 
				
			|||||||
            </h1>
 | 
					            </h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" *ngIf="loaded" (click)="showChatUsers()" [attr.aria-label]="'core.users' | translate">
 | 
					            <ion-button fill="clear" *ngIf="loaded" (click)="showChatUsers()" [ariaLabel]="'core.users' | translate">
 | 
				
			||||||
                <ion-icon name="fas-users" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-users" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,34 +1,33 @@
 | 
				
			|||||||
<ion-button size="small" *ngIf="action === 'actionsmenu'" fill="clear" (click)="actionsMenu($event)"
 | 
					<ion-button size="small" *ngIf="action === 'actionsmenu'" fill="clear" (click)="actionsMenu($event)"
 | 
				
			||||||
    [attr.aria-label]="'addon.mod_data.actionsmenu' | translate">
 | 
					    [ariaLabel]="'addon.mod_data.actionsmenu' | translate">
 | 
				
			||||||
    <ion-icon name="fas-ellipsis-vertical" slot="icon-only" aria-hidden="true" />
 | 
					    <ion-icon name="fas-ellipsis-vertical" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
</ion-button>
 | 
					</ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<ion-button size="small" *ngIf="action === 'more'" fill="clear" (click)="viewEntry()"
 | 
					<ion-button size="small" *ngIf="action === 'more'" fill="clear" (click)="viewEntry()" [ariaLabel]="'addon.mod_data.showmore' | translate">
 | 
				
			||||||
    [attr.aria-label]="'addon.mod_data.showmore' | translate">
 | 
					 | 
				
			||||||
    <ion-icon name="fas-magnifying-glass-plus" slot="icon-only" aria-hidden="true" />
 | 
					    <ion-icon name="fas-magnifying-glass-plus" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
</ion-button>
 | 
					</ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<ion-button size="small" *ngIf="action === 'edit'" fill="clear" (click)="editEntry()" [attr.aria-label]="'core.edit' | translate">
 | 
					<ion-button size="small" *ngIf="action === 'edit'" fill="clear" (click)="editEntry()" [ariaLabel]="'core.edit' | translate">
 | 
				
			||||||
    <ion-icon name="fas-pen" slot="icon-only" aria-hidden="true" />
 | 
					    <ion-icon name="fas-pen" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
</ion-button>
 | 
					</ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<ion-button size="small" *ngIf="action === 'delete' && !entry.deleted" fill="clear" color="danger" (click)="deleteEntry()"
 | 
					<ion-button size="small" *ngIf="action === 'delete' && !entry.deleted" fill="clear" color="danger" (click)="deleteEntry()"
 | 
				
			||||||
    [attr.aria-label]="'core.delete' | translate">
 | 
					    [ariaLabel]="'core.delete' | translate">
 | 
				
			||||||
    <ion-icon name="fas-trash" slot="icon-only" aria-hidden="true" />
 | 
					    <ion-icon name="fas-trash" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
</ion-button>
 | 
					</ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<ion-button size="small" *ngIf="action === 'delete' && entry.deleted" fill="clear" color="danger" (click)="undoDelete()"
 | 
					<ion-button size="small" *ngIf="action === 'delete' && entry.deleted" fill="clear" color="danger" (click)="undoDelete()"
 | 
				
			||||||
    [attr.aria-label]="'core.restore' | translate">
 | 
					    [ariaLabel]="'core.restore' | translate">
 | 
				
			||||||
    <ion-icon name="fas-rotate-left" slot="icon-only" aria-hidden="true" />
 | 
					    <ion-icon name="fas-rotate-left" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
</ion-button>
 | 
					</ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<ion-button size="small" *ngIf="action === 'approve'" fill="clear" (click)="approveEntry()"
 | 
					<ion-button size="small" *ngIf="action === 'approve'" fill="clear" (click)="approveEntry()"
 | 
				
			||||||
    [attr.aria-label]="'addon.mod_data.approve' | translate">
 | 
					    [ariaLabel]="'addon.mod_data.approve' | translate">
 | 
				
			||||||
    <ion-icon name="fas-thumbs-up" slot="icon-only" aria-hidden="true" />
 | 
					    <ion-icon name="fas-thumbs-up" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
</ion-button>
 | 
					</ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<ion-button size="small" *ngIf="action === 'disapprove'" fill="clear" (click)="disapproveEntry()"
 | 
					<ion-button size="small" *ngIf="action === 'disapprove'" fill="clear" (click)="disapproveEntry()"
 | 
				
			||||||
    [attr.aria-label]="'addon.mod_data.disapprove' | translate">
 | 
					    [ariaLabel]="'addon.mod_data.disapprove' | translate">
 | 
				
			||||||
    <ion-icon name="far-thumbs-down" slot="icon-only" aria-hidden="true" />
 | 
					    <ion-icon name="far-thumbs-down" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
</ion-button>
 | 
					</ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button *ngIf="canSearch" (click)="showSearch()" [attr.aria-label]="'addon.mod_data.search' | translate">
 | 
					    <ion-button *ngIf="canSearch" (click)="showSearch()" [ariaLabel]="'addon.mod_data.search' | translate">
 | 
				
			||||||
        <ion-icon name="fas-magnifying-glass" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-magnifying-glass" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
    <core-context-menu>
 | 
					    <core-context-menu>
 | 
				
			||||||
@ -10,7 +10,7 @@
 | 
				
			|||||||
            (action)="gotoEntry(firstEntry)" />
 | 
					            (action)="gotoEntry(firstEntry)" />
 | 
				
			||||||
    </core-context-menu>
 | 
					    </core-context-menu>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1>{{ 'addon.mod_data.search' | translate }}</h1>
 | 
					            <h1>{{ 'addon.mod_data.search' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
@ -19,7 +19,7 @@
 | 
				
			|||||||
    <form (ngSubmit)="searchEntries($event)" [formGroup]="searchForm" #searchFormEl>
 | 
					    <form (ngSubmit)="searchEntries($event)" [formGroup]="searchForm" #searchFormEl>
 | 
				
			||||||
        <ion-list class="ion-no-margin">
 | 
					        <ion-list class="ion-no-margin">
 | 
				
			||||||
            <ion-item [hidden]="search.searchingAdvanced">
 | 
					            <ion-item [hidden]="search.searchingAdvanced">
 | 
				
			||||||
                <ion-input type="text" [attr.aria-label]="'addon.mod_data.search' | translate"
 | 
					                <ion-input type="text" [ariaLabel]="'addon.mod_data.search' | translate"
 | 
				
			||||||
                    placeholder="{{ 'addon.mod_data.search' | translate}}" name="text" formControlName="text" />
 | 
					                    placeholder="{{ 'addon.mod_data.search' | translate}}" name="text" formControlName="text" />
 | 
				
			||||||
            </ion-item>
 | 
					            </ion-item>
 | 
				
			||||||
            <ion-item class="ion-text-wrap">
 | 
					            <ion-item class="ion-text-wrap">
 | 
				
			||||||
 | 
				
			|||||||
@ -48,15 +48,14 @@
 | 
				
			|||||||
    <div collapsible-footer *ngIf="entryLoaded && hasPrevious || hasNext" slot="fixed" appearOnBottom>
 | 
					    <div collapsible-footer *ngIf="entryLoaded && hasPrevious || hasNext" slot="fixed" appearOnBottom>
 | 
				
			||||||
        <ion-row class="ion-justify-content-between ion-align-items-center ion-no-padding ion-wrap">
 | 
					        <ion-row class="ion-justify-content-between ion-align-items-center ion-no-padding ion-wrap">
 | 
				
			||||||
            <ion-col class="ion-text-start ion-no-padding core-navigation-arrow" size="auto">
 | 
					            <ion-col class="ion-text-start ion-no-padding core-navigation-arrow" size="auto">
 | 
				
			||||||
                <ion-button [disabled]="!hasPrevious" fill="clear" [attr.aria-label]="'core.previous' | translate"
 | 
					                <ion-button [disabled]="!hasPrevious" fill="clear" [ariaLabel]="'core.previous' | translate"
 | 
				
			||||||
                    (click)="gotoEntry(offset! -1)">
 | 
					                    (click)="gotoEntry(offset! -1)">
 | 
				
			||||||
                    <ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" />
 | 
					                    <ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                </ion-button>
 | 
					                </ion-button>
 | 
				
			||||||
            </ion-col>
 | 
					            </ion-col>
 | 
				
			||||||
            <ion-col class="ion-text-center" />
 | 
					            <ion-col class="ion-text-center" />
 | 
				
			||||||
            <ion-col class="ion-text-end ion-no-padding core-navigation-arrow" size="auto">
 | 
					            <ion-col class="ion-text-end ion-no-padding core-navigation-arrow" size="auto">
 | 
				
			||||||
                <ion-button [disabled]="!hasNext" fill="clear" [attr.aria-label]=" 'core.next' | translate"
 | 
					                <ion-button [disabled]="!hasNext" fill="clear" [ariaLabel]=" 'core.next' | translate" (click)="gotoEntry(offset! + 1)">
 | 
				
			||||||
                    (click)="gotoEntry(offset! + 1)">
 | 
					 | 
				
			||||||
                    <ion-icon name="fas-chevron-right" slot="icon-only" aria-hidden="true" />
 | 
					                    <ion-icon name="fas-chevron-right" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                </ion-button>
 | 
					                </ion-button>
 | 
				
			||||||
            </ion-col>
 | 
					            </ion-col>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,9 +1,9 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" *ngIf="showSearch" (click)="openSearch()" [attr.aria-label]="'core.search' | translate">
 | 
					    <ion-button fill="clear" *ngIf="showSearch" (click)="openSearch()" [ariaLabel]="'core.search' | translate">
 | 
				
			||||||
        <ion-icon name="fas-magnifying-glass" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-magnifying-glass" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
    <!-- Add an empty context menu so split view pages can add items, otherwise the menu disappears in some cases. -->
 | 
					    <!-- Add an empty context menu so split view pages can add items, otherwise the menu disappears in some cases. -->
 | 
				
			||||||
@ -135,7 +135,7 @@
 | 
				
			|||||||
                    </ion-row>
 | 
					                    </ion-row>
 | 
				
			||||||
                </ion-label>
 | 
					                </ion-label>
 | 
				
			||||||
                <ion-button *ngIf="canPin || discussion.canlock || discussion.canfavourite" fill="clear"
 | 
					                <ion-button *ngIf="canPin || discussion.canlock || discussion.canfavourite" fill="clear"
 | 
				
			||||||
                    [attr.aria-label]="('core.displayoptions' | translate)" (click)="showOptionsMenu($event, discussion)" slot="end">
 | 
					                    [ariaLabel]="('core.displayoptions' | translate)" (click)="showOptionsMenu($event, discussion)" slot="end">
 | 
				
			||||||
                    <ion-icon name="ellipsis-vertical" slot="icon-only" aria-hidden="true" />
 | 
					                    <ion-icon name="ellipsis-vertical" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                </ion-button>
 | 
					                </ion-button>
 | 
				
			||||||
            </ion-item>
 | 
					            </ion-item>
 | 
				
			||||||
 | 
				
			|||||||
@ -16,7 +16,7 @@
 | 
				
			|||||||
                            [attr.aria-label]="'addon.mod_forum.unread' | translate">
 | 
					                            [attr.aria-label]="'addon.mod_forum.unread' | translate">
 | 
				
			||||||
                            <ion-icon name="fas-circle" color="primary" aria-hidden="true" />
 | 
					                            <ion-icon name="fas-circle" color="primary" aria-hidden="true" />
 | 
				
			||||||
                        </ion-note>
 | 
					                        </ion-note>
 | 
				
			||||||
                        <ion-button *ngIf="optionsMenuEnabled" fill="clear" [attr.aria-label]="('core.displayoptions' | translate)"
 | 
					                        <ion-button *ngIf="optionsMenuEnabled" fill="clear" [ariaLabel]="('core.displayoptions' | translate)"
 | 
				
			||||||
                            (click)="showOptionsMenu($event)">
 | 
					                            (click)="showOptionsMenu($event)">
 | 
				
			||||||
                            <ion-icon name="ellipsis-vertical" slot="icon-only" aria-hidden="true" />
 | 
					                            <ion-icon name="ellipsis-vertical" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                        </ion-button>
 | 
					                        </ion-button>
 | 
				
			||||||
@ -45,7 +45,7 @@
 | 
				
			|||||||
                                [attr.aria-label]="'addon.mod_forum.unread' | translate">
 | 
					                                [attr.aria-label]="'addon.mod_forum.unread' | translate">
 | 
				
			||||||
                                <ion-icon name="fas-circle" color="primary" aria-hidden="true" />
 | 
					                                <ion-icon name="fas-circle" color="primary" aria-hidden="true" />
 | 
				
			||||||
                            </ion-note>
 | 
					                            </ion-note>
 | 
				
			||||||
                            <ion-button *ngIf="optionsMenuEnabled" fill="clear" [attr.aria-label]="('core.displayoptions' | translate)"
 | 
					                            <ion-button *ngIf="optionsMenuEnabled" fill="clear" [ariaLabel]="('core.displayoptions' | translate)"
 | 
				
			||||||
                                (click)="showOptionsMenu($event)">
 | 
					                                (click)="showOptionsMenu($event)">
 | 
				
			||||||
                                <ion-icon name="ellipsis-vertical" slot="icon-only" aria-hidden="true" />
 | 
					                                <ion-icon name="ellipsis-vertical" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                            </ion-button>
 | 
					                            </ion-button>
 | 
				
			||||||
 | 
				
			|||||||
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 24 KiB  | 
@ -1,16 +1,15 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button *ngIf="!showLoading && glossary && glossary.browsemodes && glossary.browsemodes.length > 1" (click)="openModePicker($event)"
 | 
					    <ion-button *ngIf="!showLoading && glossary && glossary.browsemodes && glossary.browsemodes.length > 1" (click)="openModePicker($event)"
 | 
				
			||||||
        [attr.aria-label]="'addon.mod_glossary.browsemode' | translate">
 | 
					        [ariaLabel]="'addon.mod_glossary.browsemode' | translate">
 | 
				
			||||||
        <ion-icon name="fas-sort" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-sort" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <ion-button *ngIf="!showLoading && glossary" (click)="toggleSearch()" [attr.aria-label]="'addon.mod_glossary.bysearch' | translate">
 | 
					    <ion-button *ngIf="!showLoading && glossary" (click)="toggleSearch()" [ariaLabel]="'addon.mod_glossary.bysearch' | translate">
 | 
				
			||||||
        <ion-icon name="fas-magnifying-glass" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-magnifying-glass" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <ion-button *ngIf="!showLoading" fill="clear" (click)="openModuleSummary()" aria-haspopup="true"
 | 
					    <ion-button *ngIf="!showLoading" fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        [attr.aria-label]="'core.info' | translate">
 | 
					 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -67,11 +67,10 @@
 | 
				
			|||||||
            <ion-item *ngIf="canDelete || canEdit">
 | 
					            <ion-item *ngIf="canDelete || canEdit">
 | 
				
			||||||
                <div slot="end">
 | 
					                <div slot="end">
 | 
				
			||||||
                    <ion-button *ngIf="canDelete" fill="clear" color="danger" (click)="deleteEntry()"
 | 
					                    <ion-button *ngIf="canDelete" fill="clear" color="danger" (click)="deleteEntry()"
 | 
				
			||||||
                        [attr.aria-label]="'addon.mod_glossary.deleteentry' | translate">
 | 
					                        [ariaLabel]="'addon.mod_glossary.deleteentry' | translate">
 | 
				
			||||||
                        <ion-icon slot="icon-only" name="fas-trash" aria-hidden="true" />
 | 
					                        <ion-icon slot="icon-only" name="fas-trash" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
                    <ion-button *ngIf="canEdit" fill="clear" (click)="editEntry()"
 | 
					                    <ion-button *ngIf="canEdit" fill="clear" (click)="editEntry()" [ariaLabel]="'addon.mod_glossary.editentry' | translate">
 | 
				
			||||||
                        [attr.aria-label]="'addon.mod_glossary.editentry' | translate">
 | 
					 | 
				
			||||||
                        <ion-icon slot="icon-only" name="fas-pen" aria-hidden="true" />
 | 
					                        <ion-icon slot="icon-only" name="fas-pen" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -8,7 +8,7 @@
 | 
				
			|||||||
            (action)="viewAllAttempts()" iconAction="fas-chart-bar" />
 | 
					            (action)="viewAllAttempts()" iconAction="fas-chart-bar" />
 | 
				
			||||||
    </core-context-menu>
 | 
					    </core-context-menu>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1>{{ 'addon.mod_imscp.toc' | translate }}</h1>
 | 
					            <h1>{{ 'addon.mod_imscp.toc' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@
 | 
				
			|||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button *ngIf="loaded" (click)="showToc()" aria-haspopup="true" [attr.aria-label]="'addon.mod_imscp.toc' | translate">
 | 
					            <ion-button *ngIf="loaded" (click)="showToc()" aria-haspopup="true" [ariaLabel]="'addon.mod_imscp.toc' | translate">
 | 
				
			||||||
                <ion-icon name="fas-bookmark" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-bookmark" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1>{{ pageInstance?.lesson?.name }}</h1>
 | 
					            <h1>{{ pageInstance?.lesson?.name }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -9,7 +9,7 @@
 | 
				
			|||||||
            </h1>
 | 
					            </h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" *ngIf="displayMenu || mediaFile" [attr.aria-label]="'addon.mod_lesson.lessonmenu' | translate"
 | 
					            <ion-button fill="clear" *ngIf="displayMenu || mediaFile" [ariaLabel]="'addon.mod_lesson.lessonmenu' | translate"
 | 
				
			||||||
                (click)="showMenu()">
 | 
					                (click)="showMenu()">
 | 
				
			||||||
                <ion-icon name="fas-bookmark" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-bookmark" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
@ -72,7 +72,7 @@
 | 
				
			|||||||
                        <!-- Short answer. -->
 | 
					                        <!-- Short answer. -->
 | 
				
			||||||
                        <ion-item class="ion-text-wrap" *ngSwitchCase="'shortanswer'">
 | 
					                        <ion-item class="ion-text-wrap" *ngSwitchCase="'shortanswer'">
 | 
				
			||||||
                            <ion-input [type]="question.input!.type" placeholder="{{ 'addon.mod_lesson.youranswer' | translate }}"
 | 
					                            <ion-input [type]="question.input!.type" placeholder="{{ 'addon.mod_lesson.youranswer' | translate }}"
 | 
				
			||||||
                                [attr.aria-label]="'addon.mod_lesson.youranswer' | translate" [id]="question.input!.id"
 | 
					                                [ariaLabel]="'addon.mod_lesson.youranswer' | translate" [id]="question.input!.id"
 | 
				
			||||||
                                [formControlName]="question.input!.name" autocorrect="off" [maxlength]="question.input!.maxlength" />
 | 
					                                [formControlName]="question.input!.name" autocorrect="off" [maxlength]="question.input!.maxlength" />
 | 
				
			||||||
                        </ion-item>
 | 
					                        </ion-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -36,6 +36,9 @@
 | 
				
			|||||||
            min-height: 60px;
 | 
					            min-height: 60px;
 | 
				
			||||||
            padding-top: var(--mdl-spacing-2);
 | 
					            padding-top: var(--mdl-spacing-2);
 | 
				
			||||||
            padding-bottom: var(--mdl-spacing-2);
 | 
					            padding-bottom: var(--mdl-spacing-2);
 | 
				
			||||||
 | 
					            @include margin-horizontal(var(--mdl-spacing-2), null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            font: var(--mdl-typography-body-font-md);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            p {
 | 
					            p {
 | 
				
			||||||
                margin: 0px;
 | 
					                margin: 0px;
 | 
				
			||||||
@ -44,13 +47,15 @@
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ion-accordion-group {
 | 
					        ion-accordion-group {
 | 
				
			||||||
            border-top: 1px solid var(--stroke);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            .accordion-expanded	.addon-mod_quiz-attempt-title-info,
 | 
					            .accordion-expanded	.addon-mod_quiz-attempt-title-info,
 | 
				
			||||||
            .accordion-expanding .addon-mod_quiz-attempt-title-info {
 | 
					            .accordion-expanding .addon-mod_quiz-attempt-title-info {
 | 
				
			||||||
                visibility: hidden;
 | 
					                visibility: hidden;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            h3 {
 | 
				
			||||||
 | 
					                font: var(--mdl-typography-subtitle-font-md);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            hr {
 | 
					            hr {
 | 
				
			||||||
                background-color: var(--stroke);
 | 
					                background-color: var(--stroke);
 | 
				
			||||||
                height: 1px;
 | 
					                height: 1px;
 | 
				
			||||||
@ -58,19 +63,11 @@
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ion-accordion:nth-child(odd) {
 | 
					            ion-accordion:nth-child(odd) {
 | 
				
			||||||
                background-color: var(--core-table-odd-cell-background);
 | 
					                --ion-item-background: var(--core-table-odd-cell-background);
 | 
				
			||||||
 | 
					 | 
				
			||||||
                ::ng-deep ion-item {
 | 
					 | 
				
			||||||
                    --background: var(--core-table-odd-cell-background);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ion-accordion:nth-child(even) {
 | 
					            ion-accordion:nth-child(even) {
 | 
				
			||||||
                background-color: var(--core-table-even-cell-background);
 | 
					                --ion-item-background: var(--core-table-even-cell-background);
 | 
				
			||||||
 | 
					 | 
				
			||||||
                ::ng-deep ion-item {
 | 
					 | 
				
			||||||
                    --background: var(--core-table-even-cell-background);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1>{{ 'addon.mod_quiz.quiznavigation' | translate }}</h1>
 | 
					            <h1>{{ 'addon.mod_quiz.quiznavigation' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1>{{ title | translate }}</h1>
 | 
					            <h1>{{ title | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -12,11 +12,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" id="addon-mod_quiz-connection-error-button" [hidden]="!autoSaveError"
 | 
					            <ion-button fill="clear" id="addon-mod_quiz-connection-error-button" [hidden]="!autoSaveError"
 | 
				
			||||||
                (click)="showConnectionError($event)" [attr.aria-label]="'addon.mod_quiz.connectionerror' | translate"
 | 
					                (click)="showConnectionError($event)" [ariaLabel]="'addon.mod_quiz.connectionerror' | translate" aria-haspopup="dialog">
 | 
				
			||||||
                aria-haspopup="dialog">
 | 
					 | 
				
			||||||
                <ion-icon name="fas-circle-exclamation" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-circle-exclamation" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
            <ion-button *ngIf="navigation.length" [attr.aria-label]="'addon.mod_quiz.opentoc' | translate" (click)="openNavigation()">
 | 
					            <ion-button *ngIf="navigation.length" [ariaLabel]="'addon.mod_quiz.opentoc' | translate" (click)="openNavigation()">
 | 
				
			||||||
                <ion-icon name="fas-bookmark" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-bookmark" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -8,8 +8,8 @@
 | 
				
			|||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" *ngIf="navigation.length" [attr.aria-label]="'addon.mod_quiz.opentoc' | translate"
 | 
					            <ion-button fill="clear" *ngIf="navigation.length" [ariaLabel]="'addon.mod_quiz.opentoc' | translate" (click)="openNavigation()"
 | 
				
			||||||
                (click)="openNavigation()" aria-haspopup="true">
 | 
					                aria-haspopup="true">
 | 
				
			||||||
                <ion-icon name="fas-bookmark" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-bookmark" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
@ -44,7 +44,7 @@
 | 
				
			|||||||
        <div collapsible-footer appearOnBottom *ngIf="loaded && numPages > 1" slot="fixed">
 | 
					        <div collapsible-footer appearOnBottom *ngIf="loaded && numPages > 1" slot="fixed">
 | 
				
			||||||
            <ion-row class="ion-justify-content-between ion-align-items-center ion-no-padding ion-wrap">
 | 
					            <ion-row class="ion-justify-content-between ion-align-items-center ion-no-padding ion-wrap">
 | 
				
			||||||
                <ion-col class="ion-text-start ion-no-padding core-navigation-arrow" size="auto" *ngIf="!showAll">
 | 
					                <ion-col class="ion-text-start ion-no-padding core-navigation-arrow" size="auto" *ngIf="!showAll">
 | 
				
			||||||
                    <ion-button [disabled]="previousPage < 0" fill="clear" [attr.aria-label]="'core.previous' | translate"
 | 
					                    <ion-button [disabled]="previousPage < 0" fill="clear" [ariaLabel]="'core.previous' | translate"
 | 
				
			||||||
                        (click)="changePage(previousPage)">
 | 
					                        (click)="changePage(previousPage)">
 | 
				
			||||||
                        <ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" />
 | 
					                        <ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
@ -57,7 +57,7 @@
 | 
				
			|||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
                </ion-col>
 | 
					                </ion-col>
 | 
				
			||||||
                <ion-col class="ion-text-end ion-no-padding core-navigation-arrow" size="auto" *ngIf="!showAll">
 | 
					                <ion-col class="ion-text-end ion-no-padding core-navigation-arrow" size="auto" *ngIf="!showAll">
 | 
				
			||||||
                    <ion-button [disabled]="nextPage >= numPages" fill="clear" [attr.aria-label]="'core.next' | translate"
 | 
					                    <ion-button [disabled]="nextPage >= numPages" fill="clear" [ariaLabel]="'core.next' | translate"
 | 
				
			||||||
                        (click)="changePage(nextPage)">
 | 
					                        (click)="changePage(nextPage)">
 | 
				
			||||||
                        <ion-icon name="fas-chevron-right" slot="icon-only" aria-hidden="true" />
 | 
					                        <ion-icon name="fas-chevron-right" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1>{{ 'addon.mod_scorm.toc' | translate }}</h1>
 | 
					            <h1>{{ 'addon.mod_scorm.toc' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@
 | 
				
			|||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <core-button-with-spinner *ngIf="showToc" [loading]="loadingToc">
 | 
					            <core-button-with-spinner *ngIf="showToc" [loading]="loadingToc">
 | 
				
			||||||
                <ion-button fill="clear" *ngIf="toc.length" (click)="openToc()" [attr.aria-label]="'addon.mod_scorm.toc' | translate"
 | 
					                <ion-button fill="clear" *ngIf="toc.length" (click)="openToc()" [ariaLabel]="'addon.mod_scorm.toc' | translate"
 | 
				
			||||||
                    aria-haspopup="true">
 | 
					                    aria-haspopup="true">
 | 
				
			||||||
                    <ion-icon name="fas-bookmark" slot="icon-only" aria-hidden="true" />
 | 
					                    <ion-icon name="fas-bookmark" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                </ion-button>
 | 
					                </ion-button>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,13 +1,13 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <!-- Select subwiki. -->
 | 
					    <!-- Select subwiki. -->
 | 
				
			||||||
    <ion-button *ngIf="subwikiData.count > 1" (click)="showSubwikiPicker($event)" [attr.aria-label]="'addon.mod_wiki.subwiki' | translate"
 | 
					    <ion-button *ngIf="subwikiData.count > 1" (click)="showSubwikiPicker($event)" [ariaLabel]="'addon.mod_wiki.subwiki' | translate"
 | 
				
			||||||
        aria-haspopup="true">
 | 
					        aria-haspopup="true">
 | 
				
			||||||
        <ion-icon *ngIf="!groupWiki" name="fas-user" aria-hidden="true" />
 | 
					        <ion-icon *ngIf="!groupWiki" name="fas-user" aria-hidden="true" />
 | 
				
			||||||
        <ion-icon *ngIf="groupWiki" name="fas-users" aria-hidden="true" />
 | 
					        <ion-icon *ngIf="groupWiki" name="fas-users" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <ion-button *ngIf="!showLoading && currentPageObj" (click)="openMap()" [attr.aria-label]="'addon.mod_wiki.map' | translate"
 | 
					    <ion-button *ngIf="!showLoading && currentPageObj" (click)="openMap()" [ariaLabel]="'addon.mod_wiki.map' | translate"
 | 
				
			||||||
        aria-haspopup="true">
 | 
					        aria-haspopup="true">
 | 
				
			||||||
        <ion-icon name="fas-map" aria-hidden="true" />
 | 
					        <ion-icon name="fas-map" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
@ -19,7 +19,7 @@
 | 
				
			|||||||
            (action)="goToNewPage()" />
 | 
					            (action)="goToNewPage()" />
 | 
				
			||||||
    </core-context-menu>
 | 
					    </core-context-menu>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1>{{ 'addon.mod_wiki.map' | translate }}</h1>
 | 
					            <h1>{{ 'addon.mod_wiki.map' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@
 | 
				
			|||||||
    <core-loading [hideUntil]="loaded">
 | 
					    <core-loading [hideUntil]="loaded">
 | 
				
			||||||
        <form [formGroup]="pageForm" #editPageForm *ngIf="loaded">
 | 
					        <form [formGroup]="pageForm" #editPageForm *ngIf="loaded">
 | 
				
			||||||
            <ion-item class="ion-text-wrap" *ngIf="canEditTitle">
 | 
					            <ion-item class="ion-text-wrap" *ngIf="canEditTitle">
 | 
				
			||||||
                <ion-input [attr.aria-label]="'addon.mod_wiki.newpagetitle' | translate" name="title" type="text"
 | 
					                <ion-input [ariaLabel]="'addon.mod_wiki.newpagetitle' | translate" name="title" type="text"
 | 
				
			||||||
                    [placeholder]="'addon.mod_wiki.newpagetitle' | translate" formControlName="title" />
 | 
					                    [placeholder]="'addon.mod_wiki.newpagetitle' | translate" formControlName="title" />
 | 
				
			||||||
            </ion-item>
 | 
					            </ion-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<!-- Buttons to add to the header. -->
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [attr.aria-label]="'core.info' | translate">
 | 
					    <ion-button fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
 | 
				
			||||||
        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1>{{ 'addon.mod_workshop.userplan' | translate }}</h1>
 | 
					            <h1>{{ 'addon.mod_workshop.userplan' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@
 | 
				
			|||||||
            <h1>{{ 'addon.mod_workshop.editsubmission' | translate }}</h1>
 | 
					            <h1>{{ 'addon.mod_workshop.editsubmission' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="save()" [attr.aria-label]="'core.save' | translate">
 | 
					            <ion-button fill="clear" (click)="save()" [ariaLabel]="'core.save' | translate">
 | 
				
			||||||
                {{ 'core.save' | translate }}
 | 
					                {{ 'core.save' | translate }}
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,7 @@
 | 
				
			|||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end" [hidden]="!loaded">
 | 
					        <ion-buttons slot="end" [hidden]="!loaded">
 | 
				
			||||||
            <ion-button *ngIf="assessmentId && access.assessingallowed" fill="clear" (click)="saveAssessment()"
 | 
					            <ion-button *ngIf="assessmentId && access.assessingallowed" fill="clear" (click)="saveAssessment()"
 | 
				
			||||||
                [attr.aria-label]="'core.save' | translate">
 | 
					                [ariaLabel]="'core.save' | translate">
 | 
				
			||||||
                {{ 'core.save' | translate }}
 | 
					                {{ 'core.save' | translate }}
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
            <ion-button *ngIf="canAddFeedback" fill="clear" (click)="saveEvaluation()">
 | 
					            <ion-button *ngIf="canAddFeedback" fill="clear" (click)="saveEvaluation()">
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1>{{ 'addon.notes.addnewnote' | translate }}</h1>
 | 
					            <h1>{{ 'addon.notes.addnewnote' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
@ -20,7 +20,7 @@
 | 
				
			|||||||
            </ion-select>
 | 
					            </ion-select>
 | 
				
			||||||
        </ion-item>
 | 
					        </ion-item>
 | 
				
			||||||
        <ion-item>
 | 
					        <ion-item>
 | 
				
			||||||
            <ion-textarea [attr.aria-label]="'addon.notes.note' | translate" placeholder="{{ 'addon.notes.note' | translate }}" rows="5"
 | 
					            <ion-textarea [ariaLabel]="'addon.notes.note' | translate" placeholder="{{ 'addon.notes.note' | translate }}" rows="5"
 | 
				
			||||||
                [(ngModel)]="text" name="text" required="required" />
 | 
					                [(ngModel)]="text" name="text" required="required" />
 | 
				
			||||||
        </ion-item>
 | 
					        </ion-item>
 | 
				
			||||||
        <div class="ion-padding">
 | 
					        <div class="ion-padding">
 | 
				
			||||||
 | 
				
			|||||||
@ -11,8 +11,7 @@
 | 
				
			|||||||
    </ion-toolbar>
 | 
					    </ion-toolbar>
 | 
				
			||||||
</ion-header>
 | 
					</ion-header>
 | 
				
			||||||
<core-navbar-buttons slot="end">
 | 
					<core-navbar-buttons slot="end">
 | 
				
			||||||
    <ion-button [hidden]="!canDeleteNotes" slot="end" fill="clear" (click)="toggleDelete()"
 | 
					    <ion-button [hidden]="!canDeleteNotes" slot="end" fill="clear" (click)="toggleDelete()" [ariaLabel]="'core.toggledelete' | translate">
 | 
				
			||||||
        [attr.aria-label]="'core.toggledelete' | translate">
 | 
					 | 
				
			||||||
        <ion-icon name="fas-pen" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-pen" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
    <core-context-menu>
 | 
					    <core-context-menu>
 | 
				
			||||||
@ -80,12 +79,12 @@
 | 
				
			|||||||
                        </span>
 | 
					                        </span>
 | 
				
			||||||
                    </p>
 | 
					                    </p>
 | 
				
			||||||
                    <ion-button *ngIf="note.deleted" slot="end" fill="clear" color="danger" (click)="undoDeleteNote($event, note)"
 | 
					                    <ion-button *ngIf="note.deleted" slot="end" fill="clear" color="danger" (click)="undoDeleteNote($event, note)"
 | 
				
			||||||
                        [attr.aria-label]="'core.restore' | translate">
 | 
					                        [ariaLabel]="'core.restore' | translate">
 | 
				
			||||||
                        <ion-icon name="fas-rotate-left" slot="icon-only" aria-hidden="true" />
 | 
					                        <ion-icon name="fas-rotate-left" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
                    <ion-button *ngIf="showDelete && !note.deleted && (type !== 'personal' || note.usermodified === currentUserId)"
 | 
					                    <ion-button *ngIf="showDelete && !note.deleted && (type !== 'personal' || note.usermodified === currentUserId)"
 | 
				
			||||||
                        slot="end" fill="clear" [@coreSlideInOut]="'fromRight'" color="danger" (click)="deleteNote($event, note)"
 | 
					                        slot="end" fill="clear" [@coreSlideInOut]="'fromRight'" color="danger" (click)="deleteNote($event, note)"
 | 
				
			||||||
                        [attr.aria-label]="'core.delete' | translate">
 | 
					                        [ariaLabel]="'core.delete' | translate">
 | 
				
			||||||
                        <ion-icon name="fas-trash" slot="icon-only" aria-hidden="true" />
 | 
					                        <ion-icon name="fas-trash" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
                </ion-item>
 | 
					                </ion-item>
 | 
				
			||||||
 | 
				
			|||||||
@ -15,7 +15,7 @@
 | 
				
			|||||||
                [contextInstanceId]="contextInstanceId" [courseId]="courseId" (afterRender)="textRendered()" />
 | 
					                [contextInstanceId]="contextInstanceId" [courseId]="courseId" (afterRender)="textRendered()" />
 | 
				
			||||||
        </ion-label>
 | 
					        </ion-label>
 | 
				
			||||||
    </ion-item>
 | 
					    </ion-item>
 | 
				
			||||||
    <div class="fake-ion-item ion-text-wrap" [hidden]="!question.loaded">
 | 
					    <div class="fake-ion-item ion-text-wrap" [class.readonly]="question.readOnly" [hidden]="!question.loaded">
 | 
				
			||||||
        <core-format-text *ngIf="question.ddArea" [adaptImg]="false" [component]="component" [componentId]="componentId"
 | 
					        <core-format-text *ngIf="question.ddArea" [adaptImg]="false" [component]="component" [componentId]="componentId"
 | 
				
			||||||
            [text]="question.ddArea" [filter]="false" (afterRender)="ddAreaRendered()" />
 | 
					            [text]="question.ddArea" [filter]="false" (afterRender)="ddAreaRendered()" />
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,12 +4,20 @@
 | 
				
			|||||||
:host {
 | 
					:host {
 | 
				
			||||||
    --ddimageortext-border-drop: var(--medium);
 | 
					    --ddimageortext-border-drop: var(--medium);
 | 
				
			||||||
    --ddimageortext-draghome-background: var(--core-dd-question-color-2);
 | 
					    --ddimageortext-draghome-background: var(--core-dd-question-color-2);
 | 
				
			||||||
 | 
					    --cursor: pointer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .readonly,
 | 
				
			||||||
 | 
					    core-format-text ::ng-deep .readonly {
 | 
				
			||||||
 | 
					        --cursor: auto;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.addon-qtype-ddimageortext-container {
 | 
					.addon-qtype-ddimageortext-container {
 | 
				
			||||||
    min-height: 80px; // To display the loading.
 | 
					    min-height: 80px; // To display the loading.
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
core-format-text ::ng-deep {
 | 
					core-format-text ::ng-deep {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    div.ddarea {
 | 
					    div.ddarea {
 | 
				
			||||||
@ -39,7 +47,7 @@ core-format-text ::ng-deep {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        div.draghome {
 | 
					        div.draghome {
 | 
				
			||||||
            border: 1px solid var(--core-dd-question-border);
 | 
					            border: 1px solid var(--core-dd-question-border);
 | 
				
			||||||
            cursor: pointer;
 | 
					            cursor: var(--cursor);
 | 
				
			||||||
            background-color: var(--ddimageortext-draghome-background);
 | 
					            background-color: var(--ddimageortext-draghome-background);
 | 
				
			||||||
            display: inline-block;
 | 
					            display: inline-block;
 | 
				
			||||||
            height: auto;
 | 
					            height: auto;
 | 
				
			||||||
@ -78,23 +86,17 @@ core-format-text ::ng-deep {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        .drag {
 | 
					        .drag {
 | 
				
			||||||
            border: 1px solid var(--core-dd-question-border);
 | 
					            border: 1px solid var(--core-dd-question-border);
 | 
				
			||||||
            cursor: pointer;
 | 
					            cursor: var(--cursor);
 | 
				
			||||||
            z-index: 2;
 | 
					            z-index: 2;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        .drag.placed {
 | 
					        .drag.placed {
 | 
				
			||||||
            border: 1px solid var(--ddimageortext-border-drop);
 | 
					            border: 1px solid var(--ddimageortext-border-drop);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        .dragitems.readonly .drag {
 | 
					        .dragitems > div {
 | 
				
			||||||
            cursor: auto;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        .dragitems>div {
 | 
					 | 
				
			||||||
            clear: both;
 | 
					            clear: both;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        .dragitems {
 | 
					        .dragitems {
 | 
				
			||||||
            cursor: pointer;
 | 
					            cursor: var(--cursor);
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        .dragitems.readonly {
 | 
					 | 
				
			||||||
            cursor: auto;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        .drag img {
 | 
					        .drag img {
 | 
				
			||||||
            display: block;
 | 
					            display: block;
 | 
				
			||||||
@ -106,10 +108,7 @@ core-format-text ::ng-deep {
 | 
				
			|||||||
            border: 1px solid var(--ddimageortext-border-drop);
 | 
					            border: 1px solid var(--ddimageortext-border-drop);
 | 
				
			||||||
            position: absolute;
 | 
					            position: absolute;
 | 
				
			||||||
            z-index: 1;
 | 
					            z-index: 1;
 | 
				
			||||||
            cursor: pointer;
 | 
					            cursor: var(--cursor);
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        .readonly .dropzone {
 | 
					 | 
				
			||||||
            cursor: auto;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        div.dragitems div.draghome, div.dragitems div.drag {
 | 
					        div.dragitems div.draghome, div.dragitems div.drag {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,13 @@
 | 
				
			|||||||
// Style ddmarker content a bit. Almost all these styles are copied from Moodle.
 | 
					// Style ddmarker content a bit. Almost all these styles are copied from Moodle.
 | 
				
			||||||
 | 
					:host {
 | 
				
			||||||
 | 
					    --cursor: pointer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .readonly,
 | 
				
			||||||
 | 
					    core-format-text ::ng-deep .readonly {
 | 
				
			||||||
 | 
					        --cursor: auto;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.addon-qtype-ddmarker-container {
 | 
					.addon-qtype-ddmarker-container {
 | 
				
			||||||
    min-height: 80px; // To display the loading.
 | 
					    min-height: 80px; // To display the loading.
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -33,18 +42,11 @@ core-format-text ::ng-deep {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    .dragitems, // Previous to 3.9.
 | 
					    .dragitems, // Previous to 3.9.
 | 
				
			||||||
    .draghomes {
 | 
					    .draghomes {
 | 
				
			||||||
        &.readonly {
 | 
					 | 
				
			||||||
            .dragitem,
 | 
					 | 
				
			||||||
            .marker {
 | 
					 | 
				
			||||||
                cursor: auto;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        .dragitem, // Previous to 3.9.
 | 
					        .dragitem, // Previous to 3.9.
 | 
				
			||||||
        .draghome,
 | 
					        .draghome,
 | 
				
			||||||
        .marker {
 | 
					        .marker {
 | 
				
			||||||
            vertical-align: top;
 | 
					            vertical-align: top;
 | 
				
			||||||
            cursor: pointer;
 | 
					            cursor: var(--cursor);
 | 
				
			||||||
            position: relative;
 | 
					            position: relative;
 | 
				
			||||||
            margin: 10px;
 | 
					            margin: 10px;
 | 
				
			||||||
            display: inline-block;
 | 
					            display: inline-block;
 | 
				
			||||||
@ -70,7 +72,7 @@ core-format-text ::ng-deep {
 | 
				
			|||||||
    .droparea {
 | 
					    .droparea {
 | 
				
			||||||
        .dragitem,
 | 
					        .dragitem,
 | 
				
			||||||
        .marker {
 | 
					        .marker {
 | 
				
			||||||
            cursor: pointer;
 | 
					            cursor: var(--cursor);
 | 
				
			||||||
            position: absolute;
 | 
					            position: absolute;
 | 
				
			||||||
            vertical-align: top;
 | 
					            vertical-align: top;
 | 
				
			||||||
            z-index: 2;
 | 
					            z-index: 2;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,16 @@
 | 
				
			|||||||
@use "theme/globals" as *;
 | 
					@use "theme/globals" as *;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Style ddwtos content a bit. Almost all these styles are copied from Moodle.
 | 
					// Style ddwtos content a bit. Almost all these styles are copied from Moodle.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:host {
 | 
				
			||||||
 | 
					    --cursor: pointer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .readonly,
 | 
				
			||||||
 | 
					    core-format-text ::ng-deep .readonly {
 | 
				
			||||||
 | 
					        --cursor: default;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.addon-qtype-ddwtos-container {
 | 
					.addon-qtype-ddwtos-container {
 | 
				
			||||||
    min-height: 80px; // To display the loading.
 | 
					    min-height: 80px; // To display the loading.
 | 
				
			||||||
    position: relative;
 | 
					    position: relative;
 | 
				
			||||||
@ -27,7 +37,7 @@ core-format-text ::ng-deep, .drags ::ng-deep {
 | 
				
			|||||||
        border: 1px solid var(--core-dd-question-border);
 | 
					        border: 1px solid var(--core-dd-question-border);
 | 
				
			||||||
        margin-bottom: 2px;
 | 
					        margin-bottom: 2px;
 | 
				
			||||||
        border-radius: 5px;
 | 
					        border-radius: 5px;
 | 
				
			||||||
        cursor: pointer;
 | 
					        cursor: var(--cursor);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    .draghome, .drag {
 | 
					    .draghome, .drag {
 | 
				
			||||||
        display: inline-block;
 | 
					        display: inline-block;
 | 
				
			||||||
@ -48,7 +58,7 @@ core-format-text ::ng-deep, .drags ::ng-deep {
 | 
				
			|||||||
        z-index: 2;
 | 
					        z-index: 2;
 | 
				
			||||||
        border-radius: 5px;
 | 
					        border-radius: 5px;
 | 
				
			||||||
        line-height: 25px;
 | 
					        line-height: 25px;
 | 
				
			||||||
        cursor: pointer;
 | 
					        cursor: var(--cursor);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    .drag.selected,
 | 
					    .drag.selected,
 | 
				
			||||||
    .drop.selected {
 | 
					    .drop.selected {
 | 
				
			||||||
@ -60,17 +70,10 @@ core-format-text ::ng-deep, .drags ::ng-deep {
 | 
				
			|||||||
    &.notreadonly .draghome,
 | 
					    &.notreadonly .draghome,
 | 
				
			||||||
    &.notreadonly .drop,
 | 
					    &.notreadonly .drop,
 | 
				
			||||||
    &.notreadonly .answercontainer {
 | 
					    &.notreadonly .answercontainer {
 | 
				
			||||||
        cursor: pointer;
 | 
					        cursor: var(--cursor);
 | 
				
			||||||
        border-radius: 5px;
 | 
					        border-radius: 5px;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    &.readonly .drag,
 | 
					 | 
				
			||||||
    &.readonly .draghome,
 | 
					 | 
				
			||||||
    &.readonly .drop,
 | 
					 | 
				
			||||||
    &.readonly .answercontainer {
 | 
					 | 
				
			||||||
        cursor: default;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    span.incorrect {
 | 
					    span.incorrect {
 | 
				
			||||||
        background-color: var(--core-question-incorrect-color-bg);
 | 
					        background-color: var(--core-question-incorrect-color-bg);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -16,7 +16,7 @@
 | 
				
			|||||||
            <input *ngIf="question.answerDraftIdInput" type="hidden" [name]="question.answerDraftIdInput.name"
 | 
					            <input *ngIf="question.answerDraftIdInput" type="hidden" [name]="question.answerDraftIdInput.name"
 | 
				
			||||||
                [value]="question.answerDraftIdInput.value">
 | 
					                [value]="question.answerDraftIdInput.value">
 | 
				
			||||||
            <!-- Plain text textarea. -->
 | 
					            <!-- Plain text textarea. -->
 | 
				
			||||||
            <ion-textarea *ngIf="question.isPlainText" [attr.aria-label]="'core.question.answer' | translate" class="core-question-textarea"
 | 
					            <ion-textarea *ngIf="question.isPlainText" [ariaLabel]="'core.question.answer' | translate" class="core-question-textarea"
 | 
				
			||||||
                [ngClass]='{"core-monospaced": question.isMonospaced}' placeholder="{{ 'core.question.answer' | translate }}"
 | 
					                [ngClass]='{"core-monospaced": question.isMonospaced}' placeholder="{{ 'core.question.answer' | translate }}"
 | 
				
			||||||
                [attr.name]="question.textarea.name" [ngModel]="question.textarea.text" />
 | 
					                [attr.name]="question.textarea.name" [ngModel]="question.textarea.text" />
 | 
				
			||||||
            <!-- Rich text editor. -->
 | 
					            <!-- Rich text editor. -->
 | 
				
			||||||
 | 
				
			|||||||
@ -16,25 +16,27 @@
 | 
				
			|||||||
    <!-- Checkbox for multiple choice. -->
 | 
					    <!-- Checkbox for multiple choice. -->
 | 
				
			||||||
    <ng-container *ngIf="question.multi">
 | 
					    <ng-container *ngIf="question.multi">
 | 
				
			||||||
        <ion-item class="ion-text-wrap answer" *ngFor="let option of question.options">
 | 
					        <ion-item class="ion-text-wrap answer" *ngFor="let option of question.options">
 | 
				
			||||||
 | 
					            <div class="flex-column">
 | 
				
			||||||
                <ion-checkbox [attr.name]="option.name" [(ngModel)]="option.checked" [disabled]="option.disabled"
 | 
					                <ion-checkbox [attr.name]="option.name" [(ngModel)]="option.checked" [disabled]="option.disabled"
 | 
				
			||||||
                    [color]='(option.isCorrect === 1 ? "success": "") + (option.isCorrect === 0 ? "danger": "")'>
 | 
					                    [color]='(option.isCorrect === 1 ? "success": "") + (option.isCorrect === 0 ? "danger": "")'>
 | 
				
			||||||
                <div>
 | 
					                    <div class="flex-grow ion-text-wrap">
 | 
				
			||||||
                        <div [class]="option.class">
 | 
					                        <div [class]="option.class">
 | 
				
			||||||
                            <core-format-text [component]="component" [componentId]="componentId" [text]="option.text"
 | 
					                            <core-format-text [component]="component" [componentId]="componentId" [text]="option.text"
 | 
				
			||||||
                                [contextLevel]="contextLevel" [contextInstanceId]="contextInstanceId" [courseId]="courseId" />
 | 
					                                [contextLevel]="contextLevel" [contextInstanceId]="contextInstanceId" [courseId]="courseId" />
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    <div *ngIf="option.feedback" class="specificfeedback">
 | 
					 | 
				
			||||||
                        <core-format-text [component]="component" [componentId]="componentId" [text]="option.feedback"
 | 
					 | 
				
			||||||
                            [contextLevel]="contextLevel" [contextInstanceId]="contextInstanceId" [courseId]="courseId" />
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                    <ion-icon *ngIf="option.isCorrect === 1" class="core-correct-icon" name="fas-check" color="success"
 | 
					                    <ion-icon *ngIf="option.isCorrect === 1" class="core-correct-icon" name="fas-check" color="success"
 | 
				
			||||||
                        [attr.aria-label]="'core.question.correct' | translate" />
 | 
					                        [attr.aria-label]="'core.question.correct' | translate" />
 | 
				
			||||||
                    <ion-icon *ngIf="option.isCorrect === 0" class="core-correct-icon" name="fas-xmark" color="danger"
 | 
					                    <ion-icon *ngIf="option.isCorrect === 0" class="core-correct-icon" name="fas-xmark" color="danger"
 | 
				
			||||||
                        [attr.aria-label]="'core.question.incorrect' | translate" />
 | 
					                        [attr.aria-label]="'core.question.incorrect' | translate" />
 | 
				
			||||||
                </ion-checkbox>
 | 
					                </ion-checkbox>
 | 
				
			||||||
 | 
					                <div *ngIf="option.feedback" class="specificfeedback">
 | 
				
			||||||
 | 
					                    <core-format-text [component]="component" [componentId]="componentId" [text]="option.feedback"
 | 
				
			||||||
 | 
					                        [contextLevel]="contextLevel" [contextInstanceId]="contextInstanceId" [courseId]="courseId" />
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
            <!-- ion-checkbox doesn't use an input. Create a hidden input to hold the value. -->
 | 
					            <!-- ion-checkbox doesn't use an input. Create a hidden input to hold the value. -->
 | 
				
			||||||
 | 
					            <!-- @TODO Check if this is still needed -->
 | 
				
			||||||
            <input type="hidden" [ngModel]="option.checked" [attr.name]="option.name">
 | 
					            <input type="hidden" [ngModel]="option.checked" [attr.name]="option.name">
 | 
				
			||||||
        </ion-item>
 | 
					        </ion-item>
 | 
				
			||||||
    </ng-container>
 | 
					    </ng-container>
 | 
				
			||||||
@ -42,23 +44,26 @@
 | 
				
			|||||||
    <!-- Radio buttons for single choice. -->
 | 
					    <!-- Radio buttons for single choice. -->
 | 
				
			||||||
    <ion-radio-group *ngIf="!question.multi" [(ngModel)]="question.singleChoiceModel" [name]="question.optionsName">
 | 
					    <ion-radio-group *ngIf="!question.multi" [(ngModel)]="question.singleChoiceModel" [name]="question.optionsName">
 | 
				
			||||||
        <ion-item class="ion-text-wrap answer" *ngFor="let option of question.options">
 | 
					        <ion-item class="ion-text-wrap answer" *ngFor="let option of question.options">
 | 
				
			||||||
 | 
					            <div class="flex-column">
 | 
				
			||||||
                <ion-radio [value]="option.value" [disabled]="option.disabled"
 | 
					                <ion-radio [value]="option.value" [disabled]="option.disabled"
 | 
				
			||||||
                    [color]='(option.isCorrect === 1 ? "success": "") + (option.isCorrect === 0 ? "danger": "")'>
 | 
					                    [color]='(option.isCorrect === 1 ? "success": "") + (option.isCorrect === 0 ? "danger": "")'>
 | 
				
			||||||
                <div>
 | 
					                    <div class="flex-grow ion-text-wrap">
 | 
				
			||||||
                        <div [class]="option.class">
 | 
					                        <div [class]="option.class">
 | 
				
			||||||
                            <core-format-text [component]="component" [componentId]="componentId" [text]="option.text"
 | 
					                            <core-format-text [component]="component" [componentId]="componentId" [text]="option.text"
 | 
				
			||||||
                                [contextLevel]="contextLevel" [contextInstanceId]="contextInstanceId" [courseId]="courseId" />
 | 
					                                [contextLevel]="contextLevel" [contextInstanceId]="contextInstanceId" [courseId]="courseId" />
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    <div *ngIf="option.feedback" class="specificfeedback">
 | 
					 | 
				
			||||||
                        <core-format-text [component]="component" [componentId]="componentId" [text]="option.feedback"
 | 
					 | 
				
			||||||
                            [contextLevel]="contextLevel" [contextInstanceId]="contextInstanceId" [courseId]="courseId" />
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                    <ion-icon *ngIf="option.isCorrect === 1" class="core-correct-icon" name="fas-check" color="success"
 | 
					                    <ion-icon *ngIf="option.isCorrect === 1" class="core-correct-icon" name="fas-check" color="success"
 | 
				
			||||||
                        [attr.aria-label]="'core.question.correct' | translate" />
 | 
					                        [attr.aria-label]="'core.question.correct' | translate" />
 | 
				
			||||||
                    <ion-icon *ngIf="option.isCorrect === 0" class="core-correct-icon" name="fas-xmark" color="danger"
 | 
					                    <ion-icon *ngIf="option.isCorrect === 0" class="core-correct-icon" name="fas-xmark" color="danger"
 | 
				
			||||||
                        [attr.aria-label]="'core.question.incorrect' | translate" />
 | 
					                        [attr.aria-label]="'core.question.incorrect' | translate" />
 | 
				
			||||||
                </ion-radio>
 | 
					                </ion-radio>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <div *ngIf="option.feedback" class="specificfeedback">
 | 
				
			||||||
 | 
					                    <core-format-text [component]="component" [componentId]="componentId" [text]="option.feedback"
 | 
				
			||||||
 | 
					                        [contextLevel]="contextLevel" [contextInstanceId]="contextInstanceId" [courseId]="courseId" />
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
        </ion-item>
 | 
					        </ion-item>
 | 
				
			||||||
        <ion-button *ngIf="!question.disabled" class="ion-text-wrap ion-margin-top" expand="block" fill="outline"
 | 
					        <ion-button *ngIf="!question.disabled" class="ion-text-wrap ion-margin-top" expand="block" fill="outline"
 | 
				
			||||||
            [disabled]="!question.singleChoiceModel" (click)="clear()" type="button">
 | 
					            [disabled]="!question.singleChoiceModel" (click)="clear()" type="button">
 | 
				
			||||||
@ -66,6 +71,7 @@
 | 
				
			|||||||
        </ion-button>
 | 
					        </ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- ion-radio doesn't use an input. Create a hidden input to hold the selected value. -->
 | 
					        <!-- ion-radio doesn't use an input. Create a hidden input to hold the selected value. -->
 | 
				
			||||||
 | 
					        <!-- @TODO Check if this is still needed -->
 | 
				
			||||||
        <input type="hidden" [ngModel]="question.singleChoiceModel" [attr.name]="question.optionsName">
 | 
					        <input type="hidden" [ngModel]="question.singleChoiceModel" [attr.name]="question.optionsName">
 | 
				
			||||||
    </ion-radio-group>
 | 
					    </ion-radio-group>
 | 
				
			||||||
</ion-list>
 | 
					</ion-list>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,9 +1,13 @@
 | 
				
			|||||||
 | 
					@use "theme/globals" as *;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:host ::ng-deep {
 | 
					:host ::ng-deep {
 | 
				
			||||||
    .specificfeedback {
 | 
					    .specificfeedback {
 | 
				
			||||||
        background-color: var(--core-question-feedback-color-bg);
 | 
					        background-color: var(--core-question-feedback-color-bg);
 | 
				
			||||||
        color: var(--core-question-feedback-color);
 | 
					        color: var(--core-question-feedback-color);
 | 
				
			||||||
        display: inline;
 | 
					 | 
				
			||||||
        padding: 0 .7em;
 | 
					        padding: 0 .7em;
 | 
				
			||||||
 | 
					        font-size: var(--text-size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        @include pointer-events-on-buttons();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .d-flex {
 | 
					    .d-flex {
 | 
				
			||||||
 | 
				
			|||||||
@ -35,11 +35,11 @@
 | 
				
			|||||||
                @if (!dragDisabled) {
 | 
					                @if (!dragDisabled) {
 | 
				
			||||||
                <div slot="end" class="flex-row">
 | 
					                <div slot="end" class="flex-row">
 | 
				
			||||||
                    <ion-button fill="clear" (click)="moveItemByClick($event, false, item.id)" data-action="move-backward"
 | 
					                    <ion-button fill="clear" (click)="moveItemByClick($event, false, item.id)" data-action="move-backward"
 | 
				
			||||||
                        [attr.aria-label]="'core.moveup' | translate" [attr.aria-description]="item.contentText">
 | 
					                        [ariaLabel]="'core.moveup' | translate" [attr.aria-description]="item.contentText">
 | 
				
			||||||
                        <ion-icon slot="icon-only" name="fas-chevron-up" aria-hidden="true" />
 | 
					                        <ion-icon slot="icon-only" name="fas-chevron-up" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
                    <ion-button fill="clear" (click)="moveItemByClick($event, true, item.id)" data-action="move-forward"
 | 
					                    <ion-button fill="clear" (click)="moveItemByClick($event, true, item.id)" data-action="move-forward"
 | 
				
			||||||
                        [attr.aria-label]="'core.movedown' | translate" [attr.aria-description]="item.contentText">
 | 
					                        [ariaLabel]="'core.movedown' | translate" [attr.aria-description]="item.contentText">
 | 
				
			||||||
                        <ion-icon slot="icon-only" name="fas-chevron-down" aria-hidden="true" />
 | 
					                        <ion-icon slot="icon-only" name="fas-chevron-down" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -56,7 +56,7 @@
 | 
				
			|||||||
                    </ion-badge>
 | 
					                    </ion-badge>
 | 
				
			||||||
                </ion-label>
 | 
					                </ion-label>
 | 
				
			||||||
                <ion-button slot="end" (click)="deleteCourse($event, course)" [disabled]="course.isDownloading" color="danger" fill="clear"
 | 
					                <ion-button slot="end" (click)="deleteCourse($event, course)" [disabled]="course.isDownloading" color="danger" fill="clear"
 | 
				
			||||||
                    [attr.aria-label]="'addon.storagemanager.deletedatafrom' | translate:
 | 
					                    [ariaLabel]="'addon.storagemanager.deletedatafrom' | translate:
 | 
				
			||||||
                { name: course.title }">
 | 
					                { name: course.title }">
 | 
				
			||||||
                    <ion-icon name="fas-trash" slot="icon-only" aria-hidden="true" />
 | 
					                    <ion-icon name="fas-trash" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                </ion-button>
 | 
					                </ion-button>
 | 
				
			||||||
 | 
				
			|||||||
@ -8,7 +8,7 @@
 | 
				
			|||||||
                </span>
 | 
					                </span>
 | 
				
			||||||
                <span *ngIf="!maxSubmissionsReadable">{{ 'core.maxfilesize' | translate:{$a: maxSizeReadable} }}</span>
 | 
					                <span *ngIf="!maxSubmissionsReadable">{{ 'core.maxfilesize' | translate:{$a: maxSizeReadable} }}</span>
 | 
				
			||||||
            </ion-label>
 | 
					            </ion-label>
 | 
				
			||||||
            <ion-button slot="end" (click)="add()" [attr.aria-label]="'core.fileuploader.addfiletext' | translate"
 | 
					            <ion-button slot="end" (click)="add()" [ariaLabel]="'core.fileuploader.addfiletext' | translate"
 | 
				
			||||||
                *ngIf="unlimitedFiles || (maxSubmissions !== undefined && maxSubmissions >= 0 && files && files.length < maxSubmissions)">
 | 
					                *ngIf="unlimitedFiles || (maxSubmissions !== undefined && maxSubmissions >= 0 && files && files.length < maxSubmissions)">
 | 
				
			||||||
                <ion-icon name="fas-plus" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-plus" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
<ion-button [hidden]="hideMenu" fill="clear" [attr.aria-label]="ariaLabel" (click)="showContextMenu($event)" aria-haspopup="true"
 | 
					<ion-button [hidden]="hideMenu" fill="clear" [ariaLabel]="ariaLabel" (click)="showContextMenu($event)" aria-haspopup="true"
 | 
				
			||||||
    [attr.aria-controls]="uniqueId">
 | 
					    [attr.aria-controls]="uniqueId">
 | 
				
			||||||
    <ion-icon [name]="icon" slot="icon-only" aria-hidden="true" />
 | 
					    <ion-icon [name]="icon" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
</ion-button>
 | 
					</ion-button>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,13 +1,13 @@
 | 
				
			|||||||
<ng-container *ngIf="enabled && !loading">
 | 
					<ng-container *ngIf="enabled && !loading">
 | 
				
			||||||
    <!-- Download button. -->
 | 
					    <!-- Download button. -->
 | 
				
			||||||
    <ion-button *ngIf="status === statusNotDownloaded" fill="clear" (click)="download($event, false)" @coreShowHideAnimation
 | 
					    <ion-button *ngIf="status === statusNotDownloaded" fill="clear" (click)="download($event, false)" @coreShowHideAnimation
 | 
				
			||||||
        [attr.aria-label]="(statusTranslatable || 'core.download') | translate">
 | 
					        [ariaLabel]="(statusTranslatable || 'core.download') | translate">
 | 
				
			||||||
        <ion-icon slot="icon-only" name="fas-cloud-arrow-down" aria-hidden="true" />
 | 
					        <ion-icon slot="icon-only" name="fas-cloud-arrow-down" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- Refresh button. -->
 | 
					    <!-- Refresh button. -->
 | 
				
			||||||
    <ion-button *ngIf="status === statusOutdated || (status === statusDownloaded && !canTrustDownload)" fill="clear"
 | 
					    <ion-button *ngIf="status === statusOutdated || (status === statusDownloaded && !canTrustDownload)" fill="clear"
 | 
				
			||||||
        (click)="download($event, true)" @coreShowHideAnimation [attr.aria-label]="(statusTranslatable || 'core.refresh') | translate">
 | 
					        (click)="download($event, true)" @coreShowHideAnimation [ariaLabel]="(statusTranslatable || 'core.refresh') | translate">
 | 
				
			||||||
        <ion-icon slot="icon-only" name="fam-cloud-refresh" aria-hidden="true" />
 | 
					        <ion-icon slot="icon-only" name="fam-cloud-refresh" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -19,8 +19,8 @@
 | 
				
			|||||||
                <ion-icon slot="icon-only" [name]="openButtonIcon" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" [name]="openButtonIcon" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <ion-button fill="clear" *ngIf="!isDownloading && canDelete" (click)="delete($event)"
 | 
					            <ion-button fill="clear" *ngIf="!isDownloading && canDelete" (click)="delete($event)" [ariaLabel]="'core.delete' | translate"
 | 
				
			||||||
                [attr.aria-label]="'core.delete' | translate" color="danger">
 | 
					                color="danger">
 | 
				
			||||||
                <ion-icon slot="icon-only" name="fas-trash" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" name="fas-trash" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,9 +1,9 @@
 | 
				
			|||||||
<ion-button fill="clear" (click)="scroll($event, 'backward')" [hidden]="scrollPosition === 'hidden'" [disabled]="scrollPosition === 'start'"
 | 
					<ion-button fill="clear" (click)="scroll($event, 'backward')" [hidden]="scrollPosition === 'hidden'" [disabled]="scrollPosition === 'start'"
 | 
				
			||||||
    [attr.aria-label]="'core.scrollbackward' | translate" [attr.aria-controls]="targetId">
 | 
					    [ariaLabel]="'core.scrollbackward' | translate" [attr.aria-controls]="targetId">
 | 
				
			||||||
    <ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" flip-rtl="false" />
 | 
					    <ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" flip-rtl="false" />
 | 
				
			||||||
</ion-button>
 | 
					</ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<ion-button fill="clear" (click)="scroll($event, 'forward')" [hidden]="scrollPosition === 'hidden'" [disabled]="scrollPosition === 'end'"
 | 
					<ion-button fill="clear" (click)="scroll($event, 'forward')" [hidden]="scrollPosition === 'hidden'" [disabled]="scrollPosition === 'end'"
 | 
				
			||||||
    [attr.aria-label]="'core.scrollforward' | translate" [attr.aria-controls]="targetId">
 | 
					    [ariaLabel]="'core.scrollforward' | translate" [attr.aria-controls]="targetId">
 | 
				
			||||||
    <ion-icon name="fas-chevron-right" slot="icon-only" aria-hidden="true" flip-rtl="false" />
 | 
					    <ion-icon name="fas-chevron-right" slot="icon-only" aria-hidden="true" flip-rtl="false" />
 | 
				
			||||||
</ion-button>
 | 
					</ion-button>
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@
 | 
				
			|||||||
<ng-container *ngIf="safeUrl && !launchExternalLabel">
 | 
					<ng-container *ngIf="safeUrl && !launchExternalLabel">
 | 
				
			||||||
    <core-navbar-buttons slot="end" prepend *ngIf="initialized && showFullscreenOnToolbar && !loading">
 | 
					    <core-navbar-buttons slot="end" prepend *ngIf="initialized && showFullscreenOnToolbar && !loading">
 | 
				
			||||||
        <ion-button fill="clear" (click)="toggleFullscreen()"
 | 
					        <ion-button fill="clear" (click)="toggleFullscreen()"
 | 
				
			||||||
            [attr.aria-label]="(fullscreen ? 'core.disablefullscreen' : 'core.fullscreen') | translate">
 | 
					            [ariaLabel]="(fullscreen ? 'core.disablefullscreen' : 'core.fullscreen') | translate">
 | 
				
			||||||
            <ion-icon [name]="fullscreen ? 'fas-compress' : 'fas-expand'" slot="icon-only" aria-hidden="true" />
 | 
					            <ion-icon [name]="fullscreen ? 'fas-compress' : 'fas-expand'" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
        </ion-button>
 | 
					        </ion-button>
 | 
				
			||||||
    </core-navbar-buttons>
 | 
					    </core-navbar-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -31,12 +31,10 @@
 | 
				
			|||||||
    --contents-display: block;
 | 
					    --contents-display: block;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @include core-transition(all, 200ms);
 | 
					    @include core-transition(all, 200ms);
 | 
				
			||||||
    pointer-events: none;
 | 
					 | 
				
			||||||
    display: var(--contents-display);
 | 
					    display: var(--contents-display);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    &.core-loading-loaded {
 | 
					    &.core-loading-loaded {
 | 
				
			||||||
        position: static;
 | 
					        position: static;
 | 
				
			||||||
        pointer-events: auto;
 | 
					 | 
				
			||||||
        --contents-display: contents;
 | 
					        --contents-display: contents;
 | 
				
			||||||
        --internal-loading-inline-min-height: 0px;
 | 
					        --internal-loading-inline-min-height: 0px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -19,25 +19,26 @@
 | 
				
			|||||||
            <!-- Form to edit the file's name. -->
 | 
					            <!-- Form to edit the file's name. -->
 | 
				
			||||||
            <ion-input type="text" name="filename" [placeholder]="'core.filename' | translate" autocapitalize="none" autocorrect="off"
 | 
					            <ion-input type="text" name="filename" [placeholder]="'core.filename' | translate" autocapitalize="none" autocorrect="off"
 | 
				
			||||||
                (click)="$event.stopPropagation()" core-auto-focus [(ngModel)]="newFileName" *ngIf="editMode"
 | 
					                (click)="$event.stopPropagation()" core-auto-focus [(ngModel)]="newFileName" *ngIf="editMode"
 | 
				
			||||||
                [attr.aria-label]="'core.filename' | translate" />
 | 
					                [ariaLabel]="'core.filename' | translate" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <div class="buttons" slot="end">
 | 
					            <div class="buttons" slot="end">
 | 
				
			||||||
                <ion-button fill="clear" *ngIf="isIOS && !editMode" (click)="openFile($event, true)"
 | 
					                <ion-button fill="clear" *ngIf="isIOS && !editMode" (click)="openFile($event, true)"
 | 
				
			||||||
                    [attr.aria-label]="openButtonLabel | translate">
 | 
					                    [ariaLabel]="openButtonLabel | translate">
 | 
				
			||||||
                    <ion-icon slot="icon-only" [name]="openButtonIcon" aria-hidden="true" />
 | 
					                    <ion-icon slot="icon-only" [name]="openButtonIcon" aria-hidden="true" />
 | 
				
			||||||
                </ion-button>
 | 
					                </ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                <ng-container *ngIf="manage">
 | 
					                <ng-container *ngIf="manage">
 | 
				
			||||||
                    <ion-button *ngIf="editMode" fill="clear" [attr.aria-label]="'core.save' | translate" color="success" type="submit">
 | 
					                    <ion-button *ngIf="editMode" fill="clear" [ariaLabel]="'core.save' | translate" color="success"
 | 
				
			||||||
 | 
					                        (click)="changeName(newFileName, $event)">
 | 
				
			||||||
                        <ion-icon name="fas-check" slot="icon-only" aria-hidden="true" />
 | 
					                        <ion-icon name="fas-check" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    <ion-button *ngIf="!editMode" fill="clear" [core-suppress-events] (onClick)="activateEdit($event)"
 | 
					                    <ion-button *ngIf="!editMode" fill="clear" [core-suppress-events] (onClick)="activateEdit($event)"
 | 
				
			||||||
                        [attr.aria-label]="'core.edit' | translate">
 | 
					                        [ariaLabel]="'core.edit' | translate">
 | 
				
			||||||
                        <ion-icon name="fas-pen" slot="icon-only" aria-hidden="true" />
 | 
					                        <ion-icon name="fas-pen" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    <ion-button *ngIf="!editMode" fill="clear" (click)="deleteFile($event)" [attr.aria-label]="'core.delete' | translate"
 | 
					                    <ion-button *ngIf="!editMode" fill="clear" (click)="deleteFile($event)" [ariaLabel]="'core.delete' | translate"
 | 
				
			||||||
                        color="danger">
 | 
					                        color="danger">
 | 
				
			||||||
                        <ion-icon name="fas-trash" slot="icon-only" aria-hidden="true" />
 | 
					                        <ion-icon name="fas-trash" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                    </ion-button>
 | 
					                    </ion-button>
 | 
				
			||||||
 | 
				
			|||||||
@ -30,11 +30,11 @@
 | 
				
			|||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <ion-button *ngIf="showDelete && !message.deleted && message.delete !== false" fill="clear" [@coreSlideInOut]="'fromRight'"
 | 
					        <ion-button *ngIf="showDelete && !message.deleted && message.delete !== false" fill="clear" [@coreSlideInOut]="'fromRight'"
 | 
				
			||||||
            color="danger" (click)="delete($event)" [attr.aria-label]="'addon.messages.deletemessage' | translate" class="delete-button">
 | 
					            color="danger" (click)="delete($event)" [ariaLabel]="'addon.messages.deletemessage' | translate" class="delete-button">
 | 
				
			||||||
            <ion-icon name="fas-trash" slot="icon-only" aria-hidden="true" />
 | 
					            <ion-icon name="fas-trash" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
        </ion-button>
 | 
					        </ion-button>
 | 
				
			||||||
        <ion-button *ngIf="showDelete && message.deleted" fill="clear" [@coreSlideInOut]="'fromRight'" color="danger"
 | 
					        <ion-button *ngIf="showDelete && message.deleted" fill="clear" [@coreSlideInOut]="'fromRight'" color="danger"
 | 
				
			||||||
            (click)="undoDelete($event)" [attr.aria-label]="'core.restore' | translate" class="delete-button">
 | 
					            (click)="undoDelete($event)" [ariaLabel]="'core.restore' | translate" class="delete-button">
 | 
				
			||||||
            <ion-icon name="fas-rotate-left" slot="icon-only" aria-hidden="true" />
 | 
					            <ion-icon name="fas-rotate-left" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
        </ion-button>
 | 
					        </ion-button>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<ion-row class="ion-justify-content-between ion-align-items-center ion-no-padding ion-wrap" *ngIf="items.length > 1">
 | 
					<ion-row class="ion-justify-content-between ion-align-items-center ion-no-padding ion-wrap" *ngIf="items.length > 1">
 | 
				
			||||||
    <ion-col class="ion-text-start ion-no-padding core-navigation-arrow" size="auto">
 | 
					    <ion-col class="ion-text-start ion-no-padding core-navigation-arrow" size="auto">
 | 
				
			||||||
        <ion-button [disabled]="previousIndex < 0" fill="clear" [attr.aria-label]="previousTitle" (click)="navigate(previousIndex)">
 | 
					        <ion-button [disabled]="previousIndex < 0" fill="clear" [ariaLabel]="previousTitle" (click)="navigate(previousIndex)">
 | 
				
			||||||
            <ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" />
 | 
					            <ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
        </ion-button>
 | 
					        </ion-button>
 | 
				
			||||||
    </ion-col>
 | 
					    </ion-col>
 | 
				
			||||||
@ -8,7 +8,7 @@
 | 
				
			|||||||
        <core-progress-bar [progress]="progress" [text]="progressText" *ngIf="currentIndex >= 0" />
 | 
					        <core-progress-bar [progress]="progress" [text]="progressText" *ngIf="currentIndex >= 0" />
 | 
				
			||||||
    </ion-col>
 | 
					    </ion-col>
 | 
				
			||||||
    <ion-col class="ion-text-end ion-no-padding core-navigation-arrow" size="auto">
 | 
					    <ion-col class="ion-text-end ion-no-padding core-navigation-arrow" size="auto">
 | 
				
			||||||
        <ion-button [disabled]="nextIndex >= items.length" fill="clear" [attr.aria-label]="nextTitle" (click)="navigate(nextIndex)">
 | 
					        <ion-button [disabled]="nextIndex >= items.length" fill="clear" [ariaLabel]="nextTitle" (click)="navigate(nextIndex)">
 | 
				
			||||||
            <ion-icon name="fas-chevron-right" slot="icon-only" aria-hidden="true" />
 | 
					            <ion-icon name="fas-chevron-right" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
        </ion-button>
 | 
					        </ion-button>
 | 
				
			||||||
    </ion-col>
 | 
					    </ion-col>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1>{{ title | translate }}</h1>
 | 
					            <h1>{{ title | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
@ -14,7 +14,7 @@
 | 
				
			|||||||
    <form (ngSubmit)="submitPassword($event)" #passwordForm>
 | 
					    <form (ngSubmit)="submitPassword($event)" #passwordForm>
 | 
				
			||||||
        <div>
 | 
					        <div>
 | 
				
			||||||
            <ion-item>
 | 
					            <ion-item>
 | 
				
			||||||
                <ion-input [attr.aria-label]="placeholder | translate" class="ion-text-wrap core-ioninput-password" name="password"
 | 
					                <ion-input [ariaLabel]="placeholder | translate" class="ion-text-wrap core-ioninput-password" name="password"
 | 
				
			||||||
                    type="password" placeholder="{{ placeholder | translate }}" [(ngModel)]="password" core-auto-focus
 | 
					                    type="password" placeholder="{{ placeholder | translate }}" [(ngModel)]="password" core-auto-focus
 | 
				
			||||||
                    [clearOnEdit]="false">
 | 
					                    [clearOnEdit]="false">
 | 
				
			||||||
                    <core-show-password slot="end" />
 | 
					                    <core-show-password slot="end" />
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,7 @@
 | 
				
			|||||||
        (keyup.meta.enter)="enterKeyUp($event, 'meta')" (keydown.enter)="enterKeyDown($event)"
 | 
					        (keyup.meta.enter)="enterKeyUp($event, 'meta')" (keydown.enter)="enterKeyDown($event)"
 | 
				
			||||||
        (keydown.control.enter)="enterKeyDown($event, 'control')" (keydown.meta.enter)="enterKeyDown($event, 'meta')">
 | 
					        (keydown.control.enter)="enterKeyDown($event, 'control')" (keydown.meta.enter)="enterKeyDown($event, 'meta')">
 | 
				
			||||||
    </textarea>
 | 
					    </textarea>
 | 
				
			||||||
    <ion-button fill="clear" size="large" type="submit" [disabled]="!message || sendDisabled" [attr.aria-label]="'core.send' | translate"
 | 
					    <ion-button fill="clear" size="large" type="submit" [disabled]="!message || sendDisabled" [ariaLabel]="'core.send' | translate"
 | 
				
			||||||
        [core-suppress-events] (onClick)="submitForm($event)">
 | 
					        [core-suppress-events] (onClick)="submitForm($event)">
 | 
				
			||||||
        <ion-icon name="send" slot="icon-only" aria-hidden="true" flip-rtl />
 | 
					        <ion-icon name="send" slot="icon-only" aria-hidden="true" flip-rtl />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
<ng-content />
 | 
					<ng-content />
 | 
				
			||||||
<ion-button fill="clear" [attr.aria-label]="(shown ? 'core.hide' : 'core.show') | translate" core-suppress-events (onClick)="toggle($event)"
 | 
					<ion-button fill="clear" [ariaLabel]="(shown ? 'core.hide' : 'core.show') | translate" core-suppress-events (onClick)="toggle($event)"
 | 
				
			||||||
    (mousedown)="doNotBlur($event)" (keydown)="doNotBlur($event)" (keyup)="toggle($event)">
 | 
					    (mousedown)="doNotBlur($event)" (keydown)="doNotBlur($event)" (keyup)="toggle($event)">
 | 
				
			||||||
    <ion-icon [name]="shown ? 'fas-eye-slash' : 'fas-eye'" slot="icon-only" aria-hidden="true" />
 | 
					    <ion-icon [name]="shown ? 'fas-eye-slash' : 'fas-eye'" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
</ion-button>
 | 
					</ion-button>
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,7 @@
 | 
				
			|||||||
        <ion-spinner *ngIf="!hideUntil" [attr.aria-label]="'core.loading' | translate" />
 | 
					        <ion-spinner *ngIf="!hideUntil" [attr.aria-label]="'core.loading' | translate" />
 | 
				
			||||||
        <ng-container *ngIf="hideUntil">
 | 
					        <ng-container *ngIf="hideUntil">
 | 
				
			||||||
            <ion-button fill="clear" class="arrow-button" (click)="slidePrev()" [disabled]="!showPrevButton"
 | 
					            <ion-button fill="clear" class="arrow-button" (click)="slidePrev()" [disabled]="!showPrevButton"
 | 
				
			||||||
                [attr.aria-label]="'core.previous' | translate">
 | 
					                [ariaLabel]="'core.previous' | translate">
 | 
				
			||||||
                <ion-icon *ngIf="showPrevButton" name="fas-chevron-left" aria-hidden="true" slot="icon-only" />
 | 
					                <ion-icon *ngIf="showPrevButton" name="fas-chevron-left" aria-hidden="true" slot="icon-only" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
            <swiper-container #swiperRef [slidesPerView]="swiperOpts.slidesPerView" role="tablist" [attr.aria-label]="description">
 | 
					            <swiper-container #swiperRef [slidesPerView]="swiperOpts.slidesPerView" role="tablist" [attr.aria-label]="description">
 | 
				
			||||||
@ -29,7 +29,7 @@
 | 
				
			|||||||
                </ng-container>
 | 
					                </ng-container>
 | 
				
			||||||
            </swiper-container>
 | 
					            </swiper-container>
 | 
				
			||||||
            <ion-button fill="clear" class="arrow-button" (click)="slideNext()" [disabled]="!showNextButton"
 | 
					            <ion-button fill="clear" class="arrow-button" (click)="slideNext()" [disabled]="!showNextButton"
 | 
				
			||||||
                [attr.aria-label]="'core.next' | translate">
 | 
					                [ariaLabel]="'core.next' | translate">
 | 
				
			||||||
                <ion-icon *ngIf="showNextButton" name="fas-chevron-right" aria-hidden="true" slot="icon-only" />
 | 
					                <ion-icon *ngIf="showNextButton" name="fas-chevron-right" aria-hidden="true" slot="icon-only" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ng-container>
 | 
					        </ng-container>
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
    <ion-spinner *ngIf="!hideUntil" [attr.aria-label]="'core.loading' | translate" />
 | 
					    <ion-spinner *ngIf="!hideUntil" [attr.aria-label]="'core.loading' | translate" />
 | 
				
			||||||
    <ng-container *ngIf="hideUntil">
 | 
					    <ng-container *ngIf="hideUntil">
 | 
				
			||||||
        <ion-button fill="clear" class="arrow-button" (click)="slidePrev()" [disabled]="!showPrevButton"
 | 
					        <ion-button fill="clear" class="arrow-button" (click)="slidePrev()" [disabled]="!showPrevButton"
 | 
				
			||||||
            [attr.aria-label]="'core.previous' | translate">
 | 
					            [ariaLabel]="'core.previous' | translate">
 | 
				
			||||||
            <ion-icon *ngIf="showPrevButton" name="fas-chevron-left" aria-hidden="true" slot="icon-only" />
 | 
					            <ion-icon *ngIf="showPrevButton" name="fas-chevron-left" aria-hidden="true" slot="icon-only" />
 | 
				
			||||||
        </ion-button>
 | 
					        </ion-button>
 | 
				
			||||||
        <swiper-container #swiperRef [slidesPerView]="swiperOpts.slidesPerView" role="tablist" [attr.aria-label]="description">
 | 
					        <swiper-container #swiperRef [slidesPerView]="swiperOpts.slidesPerView" role="tablist" [attr.aria-label]="description">
 | 
				
			||||||
@ -27,7 +27,7 @@
 | 
				
			|||||||
            </ng-container>
 | 
					            </ng-container>
 | 
				
			||||||
        </swiper-container>
 | 
					        </swiper-container>
 | 
				
			||||||
        <ion-button fill="clear" class="arrow-button" (click)="slideNext()" [disabled]="!showNextButton"
 | 
					        <ion-button fill="clear" class="arrow-button" (click)="slideNext()" [disabled]="!showNextButton"
 | 
				
			||||||
            [attr.aria-label]="'core.next' | translate">
 | 
					            [ariaLabel]="'core.next' | translate">
 | 
				
			||||||
            <ion-icon *ngIf="showNextButton" name="fas-chevron-right" aria-hidden="true" slot="icon-only" />
 | 
					            <ion-icon *ngIf="showNextButton" name="fas-chevron-right" aria-hidden="true" slot="icon-only" />
 | 
				
			||||||
        </ion-button>
 | 
					        </ion-button>
 | 
				
			||||||
    </ng-container>
 | 
					    </ng-container>
 | 
				
			||||||
 | 
				
			|||||||
@ -22,7 +22,7 @@ import { CoreDom } from '@singletons/dom';
 | 
				
			|||||||
 * Directive to auto focus an element when a view is loaded.
 | 
					 * Directive to auto focus an element when a view is loaded.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * The value of the input will decide if show keyboard when focusing the element (only on Android).
 | 
					 * The value of the input will decide if show keyboard when focusing the element (only on Android).
 | 
				
			||||||
 * In case value is nofocus, the directive is disabled.
 | 
					 * In case value is false, the directive is disabled.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * <ion-input [core-auto-focus]="showKeyboard">
 | 
					 * <ion-input [core-auto-focus]="showKeyboard">
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,3 @@
 | 
				
			|||||||
<ion-button (click)="openBlocks()" [userTour]="userTour" [attr.aria-label]="'core.block.opendrawerblocks' | translate" color="secondary">
 | 
					<ion-button (click)="openBlocks()" [userTour]="userTour" [ariaLabel]="'core.block.opendrawerblocks' | translate" color="secondary">
 | 
				
			||||||
    <ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" />
 | 
					    <ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
</ion-button>
 | 
					</ion-button>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
<ion-header class="no-title">
 | 
					<ion-header class="no-title">
 | 
				
			||||||
    <ion-toolbar>
 | 
					    <ion-toolbar>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon name="fas-xmark" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@
 | 
				
			|||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button *ngIf="canDeleteComments" slot="end" fill="clear" (click)="toggleDelete()"
 | 
					            <ion-button *ngIf="canDeleteComments" slot="end" fill="clear" (click)="toggleDelete()"
 | 
				
			||||||
                [attr.aria-label]="'core.toggledelete' | translate">
 | 
					                [ariaLabel]="'core.toggledelete' | translate">
 | 
				
			||||||
                <ion-icon *ngIf="!showDelete" name="fas-pen" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon *ngIf="!showDelete" name="fas-pen" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
                <ion-icon *ngIf="showDelete" name="fas-check" slot="icon-only" aria-hidden="true" />
 | 
					                <ion-icon *ngIf="showDelete" name="fas-check" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1>{{ 'core.contentlinks.chooseaccount' | translate }}</h1>
 | 
					            <h1>{{ 'core.contentlinks.chooseaccount' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
<core-navbar-buttons slot="end" prepend>
 | 
					<core-navbar-buttons slot="end" prepend>
 | 
				
			||||||
    <ion-button fill="clear" (click)="gotoCourseDownloads()" [attr.aria-label]="'addon.storagemanager.coursedownloads' | translate">
 | 
					    <ion-button fill="clear" (click)="gotoCourseDownloads()" [ariaLabel]="'addon.storagemanager.coursedownloads' | translate">
 | 
				
			||||||
        <ion-icon name="fas-cloud-arrow-down" slot="icon-only" aria-hidden="true" />
 | 
					        <ion-icon name="fas-cloud-arrow-down" slot="icon-only" aria-hidden="true" />
 | 
				
			||||||
    </ion-button>
 | 
					    </ion-button>
 | 
				
			||||||
</core-navbar-buttons>
 | 
					</core-navbar-buttons>
 | 
				
			||||||
@ -31,12 +31,12 @@
 | 
				
			|||||||
        <div collapsible-footer appearOnBottom *ngIf="displayCourseIndex && (previousSection || nextSection)" slot="fixed">
 | 
					        <div collapsible-footer appearOnBottom *ngIf="displayCourseIndex && (previousSection || nextSection)" slot="fixed">
 | 
				
			||||||
            <div class="core-course-section-nav-buttons safe-area-padding-horizontal list-item-limited-width">
 | 
					            <div class="core-course-section-nav-buttons safe-area-padding-horizontal list-item-limited-width">
 | 
				
			||||||
                <ion-button *ngIf="previousSection" (click)="sectionChanged(previousSection)" expand="block"
 | 
					                <ion-button *ngIf="previousSection" (click)="sectionChanged(previousSection)" expand="block"
 | 
				
			||||||
                    [attr.aria-label]="('core.previous' | translate) + ': ' + previousSection.name" class="ion-text-nowrap">
 | 
					                    [ariaLabel]="('core.previous' | translate) + ': ' + previousSection.name" class="ion-text-nowrap">
 | 
				
			||||||
                    <ion-icon name="fas-arrow-left" slot="start" aria-hidden="true" />
 | 
					                    <ion-icon name="fas-arrow-left" slot="start" aria-hidden="true" />
 | 
				
			||||||
                    <core-format-text [text]="previousSection.name" contextLevel="course" [contextInstanceId]="course.id" />
 | 
					                    <core-format-text [text]="previousSection.name" contextLevel="course" [contextInstanceId]="course.id" />
 | 
				
			||||||
                </ion-button>
 | 
					                </ion-button>
 | 
				
			||||||
                <ion-button *ngIf="nextSection" (click)="sectionChanged(nextSection)" expand="block"
 | 
					                <ion-button *ngIf="nextSection" (click)="sectionChanged(nextSection)" expand="block"
 | 
				
			||||||
                    [attr.aria-label]="('core.next' | translate) + ': ' + nextSection.name" class="ion-text-nowrap">
 | 
					                    [ariaLabel]="('core.next' | translate) + ': ' + nextSection.name" class="ion-text-nowrap">
 | 
				
			||||||
                    <core-format-text [text]="nextSection.name" contextLevel="course" [contextInstanceId]="course.id" />
 | 
					                    <core-format-text [text]="nextSection.name" contextLevel="course" [contextInstanceId]="course.id" />
 | 
				
			||||||
                    <ion-icon name="fas-arrow-right" slot="end" aria-hidden="true" />
 | 
					                    <ion-icon name="fas-arrow-right" slot="end" aria-hidden="true" />
 | 
				
			||||||
                </ion-button>
 | 
					                </ion-button>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
            <h1 id="core-course-section-selector-label">{{ 'core.course.courseindex' | translate }}</h1>
 | 
					            <h1 id="core-course-section-selector-label">{{ 'core.course.courseindex' | translate }}</h1>
 | 
				
			||||||
        </ion-title>
 | 
					        </ion-title>
 | 
				
			||||||
        <ion-buttons slot="end">
 | 
					        <ion-buttons slot="end">
 | 
				
			||||||
            <ion-button fill="clear" (click)="closeModal()" [attr.aria-label]="'core.close' | translate">
 | 
					            <ion-button fill="clear" (click)="closeModal()" [ariaLabel]="'core.close' | translate">
 | 
				
			||||||
                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
					                <ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
        </ion-buttons>
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
				
			|||||||
@ -20,14 +20,14 @@
 | 
				
			|||||||
        </ng-container>
 | 
					        </ng-container>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <ng-container *ngIf="!completion.isautomatic">
 | 
					        <ng-container *ngIf="!completion.isautomatic">
 | 
				
			||||||
            <ion-button *ngIf="completed" color="success" [attr.aria-label]="accessibleDescription" (click)="completionClicked($event)"
 | 
					            <ion-button *ngIf="completed" color="success" [ariaLabel]="accessibleDescription" (click)="completionClicked($event)"
 | 
				
			||||||
                class="completioninfo completion_complete chip">
 | 
					                class="completioninfo completion_complete chip">
 | 
				
			||||||
                <ion-icon name="fas-check" slot="start" aria-hidden="true" />
 | 
					                <ion-icon name="fas-check" slot="start" aria-hidden="true" />
 | 
				
			||||||
                {{ 'core.course.completion_manual:done' | translate }}
 | 
					                {{ 'core.course.completion_manual:done' | translate }}
 | 
				
			||||||
                <ion-icon *ngIf="completion.offline" name="fas-arrows-rotate"
 | 
					                <ion-icon *ngIf="completion.offline" name="fas-arrows-rotate"
 | 
				
			||||||
                    [attr.aria-label]="'core.course.manualcompletionnotsynced' | translate" slot="end" />
 | 
					                    [attr.aria-label]="'core.course.manualcompletionnotsynced' | translate" slot="end" />
 | 
				
			||||||
            </ion-button>
 | 
					            </ion-button>
 | 
				
			||||||
            <ion-button *ngIf="!completed" fill="outline" [attr.aria-label]="accessibleDescription" (click)="completionClicked($event)"
 | 
					            <ion-button *ngIf="!completed" fill="outline" [ariaLabel]="accessibleDescription" (click)="completionClicked($event)"
 | 
				
			||||||
                class="completioninfo completion_incomplete chip">
 | 
					                class="completioninfo completion_incomplete chip">
 | 
				
			||||||
                {{ 'core.course.completion_manual:markdone' | translate }}
 | 
					                {{ 'core.course.completion_manual:markdone' | translate }}
 | 
				
			||||||
                <ion-icon *ngIf="completion.offline" name="fas-arrows-rotate"
 | 
					                <ion-icon *ngIf="completion.offline" name="fas-arrows-rotate"
 | 
				
			||||||
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user