MOBILE-4470 chore: ion-button input & textarea now supports ariaLabel

main
Pau Ferrer Ocaña 2024-05-16 13:05:41 +02:00
parent a88147e5b0
commit ba72120574
134 changed files with 219 additions and 228 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

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

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>

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

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

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

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

@ -19,25 +19,25 @@
<!-- 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" type="submit">
<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

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

View File

@ -1,13 +1,13 @@
<ng-container *ngIf="completion && !completion.isautomatic">
<ng-container *ngIf="completion.istrackeduser">
<ion-button *ngIf="completion.state" color="success" [attr.aria-label]="accessibleDescription" (click)="completionClicked($event)"
<ion-button *ngIf="completion.state" color="success" [ariaLabel]="accessibleDescription" (click)="completionClicked($event)"
class="ion-text-wrap 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="!completion.state" fill="outline" [attr.aria-label]="accessibleDescription" (click)="completionClicked($event)"
<ion-button *ngIf="!completion.state" fill="outline" [ariaLabel]="accessibleDescription" (click)="completionClicked($event)"
class="ion-text-wrap chip">
{{ 'core.course.completion_manual:markdone' | translate }}
<ion-icon *ngIf="completion?.offline" name="fas-arrows-rotate"

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 slot="icon-only" name="fas-xmark" aria-hidden="true" />
</ion-button>
</ion-buttons>
@ -24,7 +24,7 @@
</h1>
</ion-label>
<ion-button fill="clear" *ngIf="displayOptions.displayOpenInBrowser && externalUrl" [href]="externalUrl" core-link
[showBrowserWarning]="false" [attr.aria-label]="'core.openinbrowser' | translate" slot="end" [class.hidden]="!isTeacher"
[showBrowserWarning]="false" [ariaLabel]="'core.openinbrowser' | translate" slot="end" [class.hidden]="!isTeacher"
class="core-module-oib-button">
<ion-icon name="fas-up-right-from-square" slot="icon-only" aria-hidden="true" />
</ion-button>
@ -164,7 +164,7 @@
<ion-badge color="light">{{ size | coreBytesToSize }}</ion-badge>
</ion-label>
<ion-button *ngIf="!removeFilesLoading" [disabled]="prefetchLoading" (click)="removeFiles()" color="danger" fill="clear"
[attr.aria-label]="'core.clearstoreddata' | translate:{$a: size | coreBytesToSize}" slot="end">
[ariaLabel]="'core.clearstoreddata' | translate:{$a: size | coreBytesToSize}" slot="end">
<ion-icon name="fas-trash" slot="icon-only" aria-hidden="true" />
</ion-button>
<ion-spinner *ngIf="removeFilesLoading" slot="end" aria-hidden="true" />

View File

@ -5,7 +5,7 @@
</ion-buttons>
<ion-title />
<ion-buttons slot="end" *ngIf="isModal">
<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>
@ -41,7 +41,7 @@
</ion-chip>
</ion-label>
<ion-button *ngIf="displayOpenInBrowser" fill="clear" [href]="courseUrl" core-link [showBrowserWarning]="false"
[attr.aria-label]="'core.openinbrowser' | translate" slot="end" [class.hidden]="!isTeacher"
[ariaLabel]="'core.openinbrowser' | translate" slot="end" [class.hidden]="!isTeacher"
class="core-course-oib-button">
<ion-icon name="fas-up-right-from-square" slot="icon-only" aria-hidden="true" />
</ion-button>

View File

@ -10,7 +10,7 @@
</ion-title>
<ion-buttons slot="end">
<ion-button fill="clear" (click)="openCourseSummary()" [attr.aria-label]="'core.course.coursesummary' | translate">
<ion-button fill="clear" (click)="openCourseSummary()" [ariaLabel]="'core.course.coursesummary' | translate">
<ion-icon name="fas-circle-info" slot="icon-only" aria-hidden="true" />
</ion-button>
<!-- Add an empty context menu so tab pages can add items, otherwise the menu disappears in some cases. -->

View File

@ -11,10 +11,10 @@
<ion-buttons slot="end">
<ion-button fill="clear" *ngIf="displayOpenInBrowser && module.url && module.uservisible && !unsupported" [href]="module.url"
core-link [showBrowserWarning]="false" [attr.aria-label]="'core.openinbrowser' | translate">
core-link [showBrowserWarning]="false" [ariaLabel]="'core.openinbrowser' | translate">
<ion-icon name="fas-up-right-from-square" 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>
</ion-buttons>

View File

@ -17,7 +17,7 @@
<div class="core-button-spinner" *ngIf="courseOptionMenuEnabled">
<!-- Options menu. -->
<ion-button fill="clear" (click)="showCourseOptionsMenu($event)" *ngIf="!showSpinner"
[attr.aria-label]="('core.displayoptions' | translate)">
[ariaLabel]="('core.displayoptions' | translate)">
<ion-icon name="ellipsis-vertical" slot="icon-only" aria-hidden="true" />
</ion-button>

View File

@ -1,5 +1,5 @@
<core-navbar-buttons slot="end" prepend>
<ion-button *ngIf="searchEnabled" (click)="openSearch()" [attr.aria-label]="'core.courses.searchcourses' | translate">
<ion-button *ngIf="searchEnabled" (click)="openSearch()" [ariaLabel]="'core.courses.searchcourses' | translate">
<ion-icon name="fas-magnifying-glass" slot="icon-only" aria-hidden="true" />
</ion-button>
</core-navbar-buttons>

View File

@ -4,7 +4,7 @@
<h1>{{ 'core.dataprivacy.contactdataprotectionofficer' | translate }}</h1>
</ion-title>
<ion-buttons slot="end">
<ion-button fill="clear" (click)="close()" [attr.aria-label]="'core.close' | translate">
<ion-button fill="clear" (click)="close()" [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>{{ 'core.dataprivacy.createnewdatarequest' | translate }}</h1>
</ion-title>
<ion-buttons slot="end">
<ion-button fill="clear" (click)="close()" [attr.aria-label]="'core.close' | translate">
<ion-button fill="clear" (click)="close()" [ariaLabel]="'core.close' | translate">
<ion-icon slot="icon-only" name="fas-xmark" aria-hidden="true" />
</ion-button>
</ion-buttons>

View File

@ -33,12 +33,12 @@
<ion-row>
<ion-col />
<ion-col class="ion-text-center">
<ion-button fill="clear" *ngIf="!hasCaptured" (click)="actionClicked()" [attr.aria-label]="title">
<ion-button fill="clear" *ngIf="!hasCaptured" (click)="actionClicked()" [ariaLabel]="title">
<ion-icon *ngIf="!isCapturing && isVideo" name="fas-video" slot="icon-only" aria-hidden="true" />
<ion-icon *ngIf="isImage" name="fas-camera" slot="icon-only" aria-hidden="true" />
<ion-icon *ngIf="isCapturing" name="fas-square" slot="icon-only" aria-hidden="true" />
</ion-button>
<ion-button fill="clear" *ngIf="hasCaptured" (click)="discard()" [attr.aria-label]="'core.discard' | translate">
<ion-button fill="clear" *ngIf="hasCaptured" (click)="discard()" [ariaLabel]="'core.discard' | translate">
<ion-icon color="danger" name="fas-trash" slot="icon-only" aria-hidden="true" />
</ion-button>
</ion-col>

View File

@ -1,7 +1,7 @@
<header>
<h1>{{ 'core.fileuploader.audiotitle' | translate }}</h1>
<ion-button shape="round" fill="clear" [attr.aria-label]="'core.close' | translate" (click)="cancel()">
<ion-button shape="round" fill="clear" [ariaLabel]="'core.close' | translate" (click)="cancel()">
<ion-icon slot="icon-only" name="close" />
</ion-button>
</header>
@ -12,8 +12,7 @@
<div *ngIf="status === 'empty'" class="core-audio-recorder--wrapper">
<p>{{ 'core.fileuploader.startrecordinginstructions' | translate }}</p>
<ion-button shape="round" color="danger" [attr.aria-label]="'core.fileuploader.startrecording' | translate"
(click)="startRecording()">
<ion-button shape="round" color="danger" [ariaLabel]="'core.fileuploader.startrecording' | translate" (click)="startRecording()">
<ion-icon slot="icon-only" name="fas-microphone" />
</ion-button>
</div>
@ -31,18 +30,18 @@
<div class="core-audio-recorder--control">
<ion-button *ngIf="status === 'recording-ongoing'" shape="round" fill="clear"
[attr.aria-label]="'core.fileuploader.pauserecording' | translate" (click)="pauseRecording()">
[ariaLabel]="'core.fileuploader.pauserecording' | translate" (click)="pauseRecording()">
<ion-icon slot="icon-only" name="fas-circle-pause" />
</ion-button>
<ion-button *ngIf="status === 'recording-paused'" [attr.aria-label]="'core.fileuploader.resumerecording' | translate"
<ion-button *ngIf="status === 'recording-paused'" [ariaLabel]="'core.fileuploader.resumerecording' | translate"
shape="round" fill="clear" color="danger" (click)="resumeRecording()">
<ion-icon slot="icon-only" name="fas-microphone" />
</ion-button>
</div>
<div class="core-audio-recorder--control">
<ion-button shape="round" fill="clear" [attr.aria-label]="'core.fileuploader.stoprecording' | translate"
<ion-button shape="round" fill="clear" [ariaLabel]="'core.fileuploader.stoprecording' | translate"
(click)="stopRecording()">
<ion-icon slot="icon-only" name="fa-check" />
</ion-button>
@ -57,7 +56,7 @@
<div class="core-audio-recorder--controls">
<div class="core-audio-recorder--control">
<ion-button shape="round" fill="clear" color="danger" [attr.aria-label]="'core.fileuploader.discardrecording' | translate"
<ion-button shape="round" fill="clear" color="danger" [ariaLabel]="'core.fileuploader.discardrecording' | translate"
(click)="discardRecording()">
<ion-icon slot="icon-only" name="fas-trash" />
</ion-button>

View File

@ -1,11 +1,10 @@
<div *ngIf="!showPackage && urlParams" class="core-h5p-placeholder">
<ion-button class="core-h5p-placeholder-play-button" fill="clear" (click)="play($event)"
[attr.aria-label]="'core.h5p.play' | translate">
<ion-button class="core-h5p-placeholder-play-button" fill="clear" (click)="play($event)" [ariaLabel]="'core.h5p.play' | translate">
<ion-icon name="far-circle-play" slot="icon-only" aria-hidden="true" />
</ion-button>
<div class="core-h5p-placeholder-download-container">
<core-download-refresh [status]="state" [enabled]="canDownload$ | async" [loading]="calculating$ | async" [canTrustDownload]="true"
<core-download-refresh [status]="state" [enabled]="canDownload$ | async" [loading]="calculating$ | async" [canTrustDownload]="true"
(action)="download()" />
</div>
</div>

View File

@ -4,7 +4,7 @@
<div class="core-login-methods" *ngIf="loginMethods.length">
<ion-button [fill]="'outline'" class="ion-text-wrap ion-margin" *ngFor="let method of loginMethods" (click)="method.action()"
[attr.aria-label]="method.name" expand="block">
[ariaLabel]="method.name" expand="block">
<ion-icon *ngIf="method.icon" [name]="method.icon" slot="start" />
<ion-label>{{ method.name }}</ion-label>
</ion-button>
@ -21,7 +21,7 @@
<ion-list *ngIf="identityProviders.length" class="core-login-identity-providers">
<h2 class="item-heading">{{ 'core.login.potentialidps' | translate }}</h2>
<ion-button [fill]="'outline'" *ngFor="let provider of identityProviders" class="ion-text-wrap ion-margin core-oauth-provider"
(click)="oauthClicked(provider)" [attr.aria-label]="provider.name" expand="block">
(click)="oauthClicked(provider)" [ariaLabel]="provider.name" expand="block">
<img *ngIf="provider.iconurl" [src]="provider.iconurl" alt="" width="32" height="32" slot="start" aria-hidden="true">
<ion-label>{{ provider.name }}</ion-label>
</ion-button>

Some files were not shown because too many files have changed in this diff Show More