Merge pull request #4052 from crazyserver/MOBILE-4470

Mobile 4470
main
Dani Palou 2024-05-17 13:21:40 +02:00 committed by GitHub
commit 7d862ea37d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
161 changed files with 486 additions and 496 deletions

View File

@ -6,7 +6,7 @@
<!-- Download all courses. -->
<div *ngIf="downloadCoursesEnabled && filteredCourses.length > 0" class="core-button-spinner">
<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-button>
<ion-badge class="core-course-download-courses-progress" *ngIf="prefetchCoursesData.badge" role="progressbar"
@ -85,11 +85,11 @@
</ion-col>
<ion-col size="auto" *ngIf="isLayoutSwitcherAvailable">
<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-button>
<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-button>
</ion-col>

View File

@ -73,7 +73,7 @@
</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()">
{{ 'core.save' | translate }}
</ion-button>

View File

@ -41,8 +41,8 @@
</h3>
@if (entry.userid === currentUserId && optionsAvailable) {
<ion-button fill="clear" [attr.aria-label]="'core.displayoptions' | translate"
(click)="showEntryActionsPopover($event, entry)" class="entry-options">
<ion-button fill="clear" [ariaLabel]="'core.displayoptions' | translate" (click)="showEntryActionsPopover($event, entry)"
class="entry-options">
<ion-icon slot="icon-only" aria-hidden="true" name="ellipsis-vertical" />
</ion-button>
}

View File

@ -12,7 +12,7 @@
<ion-grid class="ion-no-padding addon-calendar-navigation">
<ion-row class="ion-align-items-center">
<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-button>
</ion-col>
@ -23,7 +23,7 @@
</h2>
</ion-col>
<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-button>
</ion-col>

View File

@ -1,7 +1,7 @@
<ion-header class="no-title">
<ion-toolbar>
<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-button>
</ion-buttons>

View File

@ -1,5 +0,0 @@
:host {
.addon-calendar-event {
cursor: pointer;
}
}

View File

@ -36,7 +36,7 @@ import { Translate } from '@singletons';
@Component({
selector: 'addon-calendar-upcoming-events',
templateUrl: 'addon-calendar-upcoming-events.html',
styleUrls: ['../../calendar-common.scss', 'upcoming-events.scss'],
styleUrls: ['../../calendar-common.scss'],
})
export class AddonCalendarUpcomingEventsComponent implements OnInit, DoCheck, OnDestroy {

View File

@ -7,7 +7,7 @@
<h1>{{ 'addon.calendar.calendarevents' | translate }}</h1>
</ion-title>
<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-button>
<core-context-menu>
@ -31,7 +31,7 @@
<ion-grid class="ion-no-padding safe-area-padding">
<ion-row class="ion-align-items-center">
<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-button>
</ion-col>
@ -39,7 +39,7 @@
<h2>{{ periodName }}</h2>
</ion-col>
<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-button>
</ion-col>

View File

@ -117,8 +117,7 @@
<ion-label>
<p class="item-heading">{{ 'addon.calendar.reminders' | translate }}</p>
</ion-label>
<ion-button fill="clear" (click)="addReminder()" slot="end"
[attr.aria-label]="'addon.calendar.setnewreminder' | translate">
<ion-button fill="clear" (click)="addReminder()" slot="end" [ariaLabel]="'addon.calendar.setnewreminder' | translate">
<ion-icon name="fas-plus" slot="icon-only" aria-hidden="true" />
</ion-button>
</ion-item-divider>
@ -126,7 +125,7 @@
<ion-label>
<p>{{ reminder.label }}</p>
</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-button>
</ion-item>

View File

@ -149,7 +149,7 @@
<p class="item-heading">{{ reminder.label }}</p>
<p *ngIf="reminder.sublabel">{{ reminder.sublabel }}</p>
</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">
<ion-icon name="fas-trash" color="danger" slot="icon-only" aria-hidden="true" />
</ion-button>

View File

@ -8,7 +8,7 @@
<p *ngIf="!showCalendar" class="subheading">{{ 'addon.calendar.upcomingevents' | translate }}</p>
</ion-title>
<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-button>
<core-context-menu>

View File

@ -4,7 +4,7 @@
<h1>{{ 'addon.messages.groupinfo' | translate }}</h1>
</ion-title>
<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-button>
</ion-buttons>

View File

@ -7,7 +7,7 @@
<h1>{{ 'addon.messages.contacts' | translate }}</h1>
</ion-title>
<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-button>
<!-- Add an empty context menu so split view pages can add items, otherwise the menu disappears in some cases. -->

View File

@ -7,10 +7,10 @@
<h1>{{ 'addon.messages.messages' | translate }}</h1>
</ion-title>
<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-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-button>
<!-- 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

View File

@ -4,7 +4,7 @@
<h1>{{ plugin.name }}</h1>
</ion-title>
<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-button>
</ion-buttons>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -267,7 +267,7 @@
</p>
</ion-label>
<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-button>
</ion-item>

View File

@ -9,7 +9,7 @@
</ion-label>
<div slot="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-button>
</div>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -4,7 +4,7 @@
<h1>{{ 'addon.mod_book.toc' | translate }}</h1>
</ion-title>
<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-button>
</ion-buttons>

View File

@ -9,7 +9,7 @@
</h1>
</ion-title>
<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-button>
</ion-buttons>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -4,7 +4,7 @@
<h1>{{ 'addon.mod_chat.currentusers' | translate }}</h1>
</ion-title>
<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-button>
</ion-buttons>

View File

@ -9,7 +9,7 @@
</h1>
</ion-title>
<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-button>
</ion-buttons>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -1,34 +1,33 @@
<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-button>
<ion-button size="small" *ngIf="action === 'more'" fill="clear" (click)="viewEntry()"
[attr.aria-label]="'addon.mod_data.showmore' | translate">
<ion-button size="small" *ngIf="action === 'more'" fill="clear" (click)="viewEntry()" [ariaLabel]="'addon.mod_data.showmore' | translate">
<ion-icon name="fas-magnifying-glass-plus" slot="icon-only" aria-hidden="true" />
</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-button>
<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-button>
<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-button>
<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-button>
<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-button>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
<core-context-menu>
@ -10,7 +10,7 @@
(action)="gotoEntry(firstEntry)" />
</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-button>
</core-navbar-buttons>

View File

@ -4,7 +4,7 @@
<h1>{{ 'addon.mod_data.search' | translate }}</h1>
</ion-title>
<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-button>
</ion-buttons>
@ -19,7 +19,7 @@
<form (ngSubmit)="searchEntries($event)" [formGroup]="searchForm" #searchFormEl>
<ion-list class="ion-no-margin">
<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" />
</ion-item>
<ion-item class="ion-text-wrap">

View File

@ -48,15 +48,14 @@
<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-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)">
<ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" />
</ion-button>
</ion-col>
<ion-col class="ion-text-center" />
<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"
(click)="gotoEntry(offset! + 1)">
<ion-button [disabled]="!hasNext" fill="clear" [ariaLabel]=" 'core.next' | translate" (click)="gotoEntry(offset! + 1)">
<ion-icon name="fas-chevron-right" slot="icon-only" aria-hidden="true" />
</ion-button>
</ion-col>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -1,9 +1,9 @@
<!-- Buttons to add to the header. -->
<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-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-button>
<!-- 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-label>
<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-button>
</ion-item>

View File

@ -16,7 +16,7 @@
[attr.aria-label]="'addon.mod_forum.unread' | translate">
<ion-icon name="fas-circle" color="primary" aria-hidden="true" />
</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)">
<ion-icon name="ellipsis-vertical" slot="icon-only" aria-hidden="true" />
</ion-button>
@ -45,7 +45,7 @@
[attr.aria-label]="'addon.mod_forum.unread' | translate">
<ion-icon name="fas-circle" color="primary" aria-hidden="true" />
</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)">
<ion-icon name="ellipsis-vertical" slot="icon-only" aria-hidden="true" />
</ion-button>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -1,16 +1,15 @@
<!-- Buttons to add to the header. -->
<core-navbar-buttons slot="end">
<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-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-button>
<ion-button *ngIf="!showLoading" fill="clear" (click)="openModuleSummary()" aria-haspopup="true"
[attr.aria-label]="'core.info' | translate">
<ion-button *ngIf="!showLoading" fill="clear" (click)="openModuleSummary()" aria-haspopup="true" [ariaLabel]="'core.info' | translate">
<ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
</ion-button>
</core-navbar-buttons>

View File

@ -67,11 +67,10 @@
<ion-item *ngIf="canDelete || canEdit">
<div slot="end">
<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-button>
<ion-button *ngIf="canEdit" fill="clear" (click)="editEntry()"
[attr.aria-label]="'addon.mod_glossary.editentry' | translate">
<ion-button *ngIf="canEdit" fill="clear" (click)="editEntry()" [ariaLabel]="'addon.mod_glossary.editentry' | translate">
<ion-icon slot="icon-only" name="fas-pen" aria-hidden="true" />
</ion-button>
</div>

View File

@ -8,7 +8,7 @@
(action)="viewAllAttempts()" iconAction="fas-chart-bar" />
</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-button>
</core-navbar-buttons>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -4,7 +4,7 @@
<h1>{{ 'addon.mod_imscp.toc' | translate }}</h1>
</ion-title>
<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-button>
</ion-buttons>

View File

@ -10,7 +10,7 @@
</ion-title>
<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-button>
</ion-buttons>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -4,7 +4,7 @@
<h1>{{ pageInstance?.lesson?.name }}</h1>
</ion-title>
<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-button>
</ion-buttons>

View File

@ -9,7 +9,7 @@
</h1>
</ion-title>
<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()">
<ion-icon name="fas-bookmark" slot="icon-only" aria-hidden="true" />
</ion-button>
@ -72,7 +72,7 @@
<!-- Short answer. -->
<ion-item class="ion-text-wrap" *ngSwitchCase="'shortanswer'">
<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" />
</ion-item>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -36,6 +36,9 @@
min-height: 60px;
padding-top: 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 {
margin: 0px;
@ -44,13 +47,15 @@
}
ion-accordion-group {
border-top: 1px solid var(--stroke);
.accordion-expanded .addon-mod_quiz-attempt-title-info,
.accordion-expanding .addon-mod_quiz-attempt-title-info {
visibility: hidden;
}
h3 {
font: var(--mdl-typography-subtitle-font-md);
}
hr {
background-color: var(--stroke);
height: 1px;
@ -58,19 +63,11 @@
}
ion-accordion:nth-child(odd) {
background-color: var(--core-table-odd-cell-background);
::ng-deep ion-item {
--background: var(--core-table-odd-cell-background);
}
--ion-item-background: var(--core-table-odd-cell-background);
}
ion-accordion:nth-child(even) {
background-color: var(--core-table-even-cell-background);
::ng-deep ion-item {
--background: var(--core-table-even-cell-background);
}
--ion-item-background: var(--core-table-even-cell-background);
}
}
}

View File

@ -4,7 +4,7 @@
<h1>{{ 'addon.mod_quiz.quiznavigation' | translate }}</h1>
</ion-title>
<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-button>
</ion-buttons>

View File

@ -4,7 +4,7 @@
<h1>{{ title | translate }}</h1>
</ion-title>
<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-button>
</ion-buttons>

View File

@ -12,11 +12,10 @@
<ion-buttons slot="end">
<ion-button fill="clear" id="addon-mod_quiz-connection-error-button" [hidden]="!autoSaveError"
(click)="showConnectionError($event)" [attr.aria-label]="'addon.mod_quiz.connectionerror' | translate"
aria-haspopup="dialog">
(click)="showConnectionError($event)" [ariaLabel]="'addon.mod_quiz.connectionerror' | translate" aria-haspopup="dialog">
<ion-icon name="fas-circle-exclamation" slot="icon-only" aria-hidden="true" />
</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-button>
</ion-buttons>

View File

@ -8,8 +8,8 @@
</ion-title>
<ion-buttons slot="end">
<ion-button fill="clear" *ngIf="navigation.length" [attr.aria-label]="'addon.mod_quiz.opentoc' | translate"
(click)="openNavigation()" aria-haspopup="true">
<ion-button fill="clear" *ngIf="navigation.length" [ariaLabel]="'addon.mod_quiz.opentoc' | translate" (click)="openNavigation()"
aria-haspopup="true">
<ion-icon name="fas-bookmark" slot="icon-only" aria-hidden="true" />
</ion-button>
</ion-buttons>
@ -44,7 +44,7 @@
<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-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)">
<ion-icon name="fas-chevron-left" slot="icon-only" aria-hidden="true" />
</ion-button>
@ -57,7 +57,7 @@
</ion-button>
</ion-col>
<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)">
<ion-icon name="fas-chevron-right" slot="icon-only" aria-hidden="true" />
</ion-button>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -4,7 +4,7 @@
<h1>{{ 'addon.mod_scorm.toc' | translate }}</h1>
</ion-title>
<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-button>
</ion-buttons>

View File

@ -10,7 +10,7 @@
</ion-title>
<ion-buttons slot="end">
<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">
<ion-icon name="fas-bookmark" slot="icon-only" aria-hidden="true" />
</ion-button>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -1,13 +1,13 @@
<!-- Buttons to add to the header. -->
<core-navbar-buttons slot="end">
<!-- 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">
<ion-icon *ngIf="!groupWiki" name="fas-user" aria-hidden="true" />
<ion-icon *ngIf="groupWiki" name="fas-users" aria-hidden="true" />
</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">
<ion-icon name="fas-map" aria-hidden="true" />
</ion-button>
@ -19,7 +19,7 @@
(action)="goToNewPage()" />
</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-button>
</core-navbar-buttons>

View File

@ -4,7 +4,7 @@
<h1>{{ 'addon.mod_wiki.map' | translate }}</h1>
</ion-title>
<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-button>
</ion-buttons>

View File

@ -20,7 +20,7 @@
<core-loading [hideUntil]="loaded">
<form [formGroup]="pageForm" #editPageForm *ngIf="loaded">
<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" />
</ion-item>

View File

@ -1,6 +1,6 @@
<!-- Buttons to add to the header. -->
<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-button>
</core-navbar-buttons>

View File

@ -4,7 +4,7 @@
<h1>{{ 'addon.mod_workshop.userplan' | translate }}</h1>
</ion-title>
<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-button>
</ion-buttons>

View File

@ -7,7 +7,7 @@
<h1>{{ 'addon.mod_workshop.editsubmission' | translate }}</h1>
</ion-title>
<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 }}
</ion-button>
</ion-buttons>

View File

@ -11,7 +11,7 @@
</ion-title>
<ion-buttons slot="end" [hidden]="!loaded">
<ion-button *ngIf="assessmentId && access.assessingallowed" fill="clear" (click)="saveAssessment()"
[attr.aria-label]="'core.save' | translate">
[ariaLabel]="'core.save' | translate">
{{ 'core.save' | translate }}
</ion-button>
<ion-button *ngIf="canAddFeedback" fill="clear" (click)="saveEvaluation()">

View File

@ -4,7 +4,7 @@
<h1>{{ 'addon.notes.addnewnote' | translate }}</h1>
</ion-title>
<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-button>
</ion-buttons>
@ -20,7 +20,7 @@
</ion-select>
</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" />
</ion-item>
<div class="ion-padding">

View File

@ -11,8 +11,7 @@
</ion-toolbar>
</ion-header>
<core-navbar-buttons slot="end">
<ion-button [hidden]="!canDeleteNotes" slot="end" fill="clear" (click)="toggleDelete()"
[attr.aria-label]="'core.toggledelete' | translate">
<ion-button [hidden]="!canDeleteNotes" slot="end" fill="clear" (click)="toggleDelete()" [ariaLabel]="'core.toggledelete' | translate">
<ion-icon name="fas-pen" slot="icon-only" aria-hidden="true" />
</ion-button>
<core-context-menu>
@ -80,12 +79,12 @@
</span>
</p>
<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-button>
<ion-button *ngIf="showDelete && !note.deleted && (type !== 'personal' || note.usermodified === currentUserId)"
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-button>
</ion-item>

View File

@ -15,7 +15,7 @@
[contextInstanceId]="contextInstanceId" [courseId]="courseId" (afterRender)="textRendered()" />
</ion-label>
</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"
[text]="question.ddArea" [filter]="false" (afterRender)="ddAreaRendered()" />
</div>

View File

@ -4,12 +4,20 @@
:host {
--ddimageortext-border-drop: var(--medium);
--ddimageortext-draghome-background: var(--core-dd-question-color-2);
--cursor: pointer;
.readonly,
core-format-text ::ng-deep .readonly {
--cursor: auto;
}
}
.addon-qtype-ddimageortext-container {
min-height: 80px; // To display the loading.
}
core-format-text ::ng-deep {
div.ddarea {
@ -39,7 +47,7 @@ core-format-text ::ng-deep {
div.draghome {
border: 1px solid var(--core-dd-question-border);
cursor: pointer;
cursor: var(--cursor);
background-color: var(--ddimageortext-draghome-background);
display: inline-block;
height: auto;
@ -78,23 +86,17 @@ core-format-text ::ng-deep {
.drag {
border: 1px solid var(--core-dd-question-border);
cursor: pointer;
cursor: var(--cursor);
z-index: 2;
}
.drag.placed {
border: 1px solid var(--ddimageortext-border-drop);
}
.dragitems.readonly .drag {
cursor: auto;
}
.dragitems>div {
.dragitems > div {
clear: both;
}
.dragitems {
cursor: pointer;
}
.dragitems.readonly {
cursor: auto;
cursor: var(--cursor);
}
.drag img {
display: block;
@ -106,10 +108,7 @@ core-format-text ::ng-deep {
border: 1px solid var(--ddimageortext-border-drop);
position: absolute;
z-index: 1;
cursor: pointer;
}
.readonly .dropzone {
cursor: auto;
cursor: var(--cursor);
}
div.dragitems div.draghome, div.dragitems div.drag {

View File

@ -1,4 +1,13 @@
// 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 {
min-height: 80px; // To display the loading.
}
@ -33,18 +42,11 @@ core-format-text ::ng-deep {
.dragitems, // Previous to 3.9.
.draghomes {
&.readonly {
.dragitem,
.marker {
cursor: auto;
}
}
.dragitem, // Previous to 3.9.
.draghome,
.marker {
vertical-align: top;
cursor: pointer;
cursor: var(--cursor);
position: relative;
margin: 10px;
display: inline-block;
@ -70,7 +72,7 @@ core-format-text ::ng-deep {
.droparea {
.dragitem,
.marker {
cursor: pointer;
cursor: var(--cursor);
position: absolute;
vertical-align: top;
z-index: 2;

View File

@ -1,6 +1,16 @@
@use "theme/globals" as *;
// 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 {
min-height: 80px; // To display the loading.
position: relative;
@ -27,7 +37,7 @@ core-format-text ::ng-deep, .drags ::ng-deep {
border: 1px solid var(--core-dd-question-border);
margin-bottom: 2px;
border-radius: 5px;
cursor: pointer;
cursor: var(--cursor);
}
.draghome, .drag {
display: inline-block;
@ -48,7 +58,7 @@ core-format-text ::ng-deep, .drags ::ng-deep {
z-index: 2;
border-radius: 5px;
line-height: 25px;
cursor: pointer;
cursor: var(--cursor);
}
.drag.selected,
.drop.selected {
@ -60,17 +70,10 @@ core-format-text ::ng-deep, .drags ::ng-deep {
&.notreadonly .draghome,
&.notreadonly .drop,
&.notreadonly .answercontainer {
cursor: pointer;
cursor: var(--cursor);
border-radius: 5px;
}
&.readonly .drag,
&.readonly .draghome,
&.readonly .drop,
&.readonly .answercontainer {
cursor: default;
}
span.incorrect {
background-color: var(--core-question-incorrect-color-bg);
}

View File

@ -16,7 +16,7 @@
<input *ngIf="question.answerDraftIdInput" type="hidden" [name]="question.answerDraftIdInput.name"
[value]="question.answerDraftIdInput.value">
<!-- 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 }}"
[attr.name]="question.textarea.name" [ngModel]="question.textarea.text" />
<!-- Rich text editor. -->

View File

@ -16,25 +16,27 @@
<!-- Checkbox for multiple choice. -->
<ng-container *ngIf="question.multi">
<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"
[color]='(option.isCorrect === 1 ? "success": "") + (option.isCorrect === 0 ? "danger": "")'>
<div>
<div class="flex-grow ion-text-wrap">
<div [class]="option.class">
<core-format-text [component]="component" [componentId]="componentId" [text]="option.text"
[contextLevel]="contextLevel" [contextInstanceId]="contextInstanceId" [courseId]="courseId" />
</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>
<ion-icon *ngIf="option.isCorrect === 1" class="core-correct-icon" name="fas-check" color="success"
[attr.aria-label]="'core.question.correct' | translate" />
<ion-icon *ngIf="option.isCorrect === 0" class="core-correct-icon" name="fas-xmark" color="danger"
[attr.aria-label]="'core.question.incorrect' | translate" />
</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. -->
<!-- @TODO Check if this is still needed -->
<input type="hidden" [ngModel]="option.checked" [attr.name]="option.name">
</ion-item>
</ng-container>
@ -42,23 +44,26 @@
<!-- Radio buttons for single choice. -->
<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">
<div class="flex-column">
<ion-radio [value]="option.value" [disabled]="option.disabled"
[color]='(option.isCorrect === 1 ? "success": "") + (option.isCorrect === 0 ? "danger": "")'>
<div>
<div class="flex-grow ion-text-wrap">
<div [class]="option.class">
<core-format-text [component]="component" [componentId]="componentId" [text]="option.text"
[contextLevel]="contextLevel" [contextInstanceId]="contextInstanceId" [courseId]="courseId" />
</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>
<ion-icon *ngIf="option.isCorrect === 1" class="core-correct-icon" name="fas-check" color="success"
[attr.aria-label]="'core.question.correct' | translate" />
<ion-icon *ngIf="option.isCorrect === 0" class="core-correct-icon" name="fas-xmark" color="danger"
[attr.aria-label]="'core.question.incorrect' | translate" />
</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-button *ngIf="!question.disabled" class="ion-text-wrap ion-margin-top" expand="block" fill="outline"
[disabled]="!question.singleChoiceModel" (click)="clear()" type="button">
@ -66,6 +71,7 @@
</ion-button>
<!-- 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">
</ion-radio-group>
</ion-list>

View File

@ -1,9 +1,13 @@
@use "theme/globals" as *;
:host ::ng-deep {
.specificfeedback {
background-color: var(--core-question-feedback-color-bg);
color: var(--core-question-feedback-color);
display: inline;
padding: 0 .7em;
font-size: var(--text-size);
@include pointer-events-on-buttons();
}
.d-flex {

View File

@ -35,11 +35,11 @@
@if (!dragDisabled) {
<div slot="end" class="flex-row">
<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-button>
<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-button>
</div>

View File

@ -56,7 +56,7 @@
</ion-badge>
</ion-label>
<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 }">
<ion-icon name="fas-trash" slot="icon-only" aria-hidden="true" />
</ion-button>

View File

@ -8,7 +8,7 @@
</span>
<span *ngIf="!maxSubmissionsReadable">{{ 'core.maxfilesize' | translate:{$a: maxSizeReadable} }}</span>
</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)">
<ion-icon name="fas-plus" slot="icon-only" aria-hidden="true" />
</ion-button>

View File

@ -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">
<ion-icon [name]="icon" slot="icon-only" aria-hidden="true" />
</ion-button>

View File

@ -1,13 +1,13 @@
<ng-container *ngIf="enabled && !loading">
<!-- Download button. -->
<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-button>
<!-- Refresh button. -->
<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-button>

View File

@ -19,8 +19,8 @@
<ion-icon slot="icon-only" [name]="openButtonIcon" aria-hidden="true" />
</ion-button>
<ion-button fill="clear" *ngIf="!isDownloading && canDelete" (click)="delete($event)"
[attr.aria-label]="'core.delete' | translate" color="danger">
<ion-button fill="clear" *ngIf="!isDownloading && canDelete" (click)="delete($event)" [ariaLabel]="'core.delete' | translate"
color="danger">
<ion-icon slot="icon-only" name="fas-trash" aria-hidden="true" />
</ion-button>
</div>

View File

@ -1,9 +1,9 @@
<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-button>
<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-button>

View File

@ -6,7 +6,7 @@
<ng-container *ngIf="safeUrl && !launchExternalLabel">
<core-navbar-buttons slot="end" prepend *ngIf="initialized && showFullscreenOnToolbar && !loading">
<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-button>
</core-navbar-buttons>

View File

@ -31,12 +31,10 @@
--contents-display: block;
@include core-transition(all, 200ms);
pointer-events: none;
display: var(--contents-display);
&.core-loading-loaded {
position: static;
pointer-events: auto;
--contents-display: contents;
--internal-loading-inline-min-height: 0px;

View File

@ -19,25 +19,26 @@
<!-- Form to edit the file's name. -->
<ion-input type="text" name="filename" [placeholder]="'core.filename' | translate" autocapitalize="none" autocorrect="off"
(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">
<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-button>
<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-button>
<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-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">
<ion-icon name="fas-trash" slot="icon-only" aria-hidden="true" />
</ion-button>

View File

@ -30,11 +30,11 @@
</div>
<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-button>
<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-button>
</div>

View File

@ -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-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-button>
</ion-col>
@ -8,7 +8,7 @@
<core-progress-bar [progress]="progress" [text]="progressText" *ngIf="currentIndex >= 0" />
</ion-col>
<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-button>
</ion-col>

View File

@ -4,7 +4,7 @@
<h1>{{ title | translate }}</h1>
</ion-title>
<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-button>
</ion-buttons>
@ -14,7 +14,7 @@
<form (ngSubmit)="submitPassword($event)" #passwordForm>
<div>
<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
[clearOnEdit]="false">
<core-show-password slot="end" />

View File

@ -5,7 +5,7 @@
(keyup.meta.enter)="enterKeyUp($event, 'meta')" (keydown.enter)="enterKeyDown($event)"
(keydown.control.enter)="enterKeyDown($event, 'control')" (keydown.meta.enter)="enterKeyDown($event, 'meta')">
</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)">
<ion-icon name="send" slot="icon-only" aria-hidden="true" flip-rtl />
</ion-button>

View File

@ -1,5 +1,5 @@
<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)">
<ion-icon [name]="shown ? 'fas-eye-slash' : 'fas-eye'" slot="icon-only" aria-hidden="true" />
</ion-button>

View File

@ -3,7 +3,7 @@
<ion-spinner *ngIf="!hideUntil" [attr.aria-label]="'core.loading' | translate" />
<ng-container *ngIf="hideUntil">
<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-button>
<swiper-container #swiperRef [slidesPerView]="swiperOpts.slidesPerView" role="tablist" [attr.aria-label]="description">
@ -29,7 +29,7 @@
</ng-container>
</swiper-container>
<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-button>
</ng-container>

View File

@ -2,7 +2,7 @@
<ion-spinner *ngIf="!hideUntil" [attr.aria-label]="'core.loading' | translate" />
<ng-container *ngIf="hideUntil">
<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-button>
<swiper-container #swiperRef [slidesPerView]="swiperOpts.slidesPerView" role="tablist" [attr.aria-label]="description">
@ -27,7 +27,7 @@
</ng-container>
</swiper-container>
<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-button>
</ng-container>

View File

@ -22,7 +22,7 @@ import { CoreDom } from '@singletons/dom';
* 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).
* In case value is nofocus, the directive is disabled.
* In case value is false, the directive is disabled.
*
* <ion-input [core-auto-focus]="showKeyboard">
*/

View File

@ -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-button>

View File

@ -1,7 +1,7 @@
<ion-header class="no-title">
<ion-toolbar>
<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-button>
</ion-buttons>

View File

@ -10,7 +10,7 @@
</ion-title>
<ion-buttons slot="end">
<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-check" slot="icon-only" aria-hidden="true" />
</ion-button>

View File

@ -4,7 +4,7 @@
<h1>{{ 'core.contentlinks.chooseaccount' | translate }}</h1>
</ion-title>
<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-button>
</ion-buttons>

View File

@ -1,5 +1,5 @@
<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-button>
</core-navbar-buttons>
@ -31,12 +31,12 @@
<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">
<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" />
<core-format-text [text]="previousSection.name" contextLevel="course" [contextInstanceId]="course.id" />
</ion-button>
<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" />
<ion-icon name="fas-arrow-right" slot="end" aria-hidden="true" />
</ion-button>

View File

@ -4,7 +4,7 @@
<h1 id="core-course-section-selector-label">{{ 'core.course.courseindex' | translate }}</h1>
</ion-title>
<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-button>
</ion-buttons>

View File

@ -20,14 +20,14 @@
</ng-container>
<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">
<ion-icon name="fas-check" slot="start" aria-hidden="true" />
{{ 'core.course.completion_manual:done' | translate }}
<ion-icon *ngIf="completion.offline" name="fas-arrows-rotate"
[attr.aria-label]="'core.course.manualcompletionnotsynced' | translate" slot="end" />
</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">
{{ 'core.course.completion_manual:markdone' | translate }}
<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