@@ -224,8 +227,12 @@
- {{ 'addon.mod_lesson.progresscompleted' | translate:{$a: eolData.progresscompleted.value} }}
-
+
+ {{ 'addon.mod_lesson.progresscompleted' | translate:{$a: eolData.progresscompleted.value} }}
+
+
+
diff --git a/src/addons/mod/lesson/pages/player/player.page.ts b/src/addons/mod/lesson/pages/player/player.page.ts
index 0f3d01787..1a014068c 100644
--- a/src/addons/mod/lesson/pages/player/player.page.ts
+++ b/src/addons/mod/lesson/pages/player/player.page.ts
@@ -98,8 +98,8 @@ export class AddonModLessonPlayerPage implements OnInit, OnDestroy, CanLeave {
loadingMenu?: boolean; // Whether the lesson menu is being loaded.
mediaFile?: CoreWSExternalFile; // Media file of the lesson.
activityLink?: AddonModLessonActivityLink; // Next activity link data.
+ cmId!: number; // Course module ID.
- protected cmId!: number; // Course module ID.
protected password?: string; // Lesson password (if any).
protected forceLeave = false; // If true, don't perform any check when leaving the view.
protected offline?: boolean; // Whether we are in offline mode.
diff --git a/src/addons/mod/lesson/pages/user-retake/user-retake.html b/src/addons/mod/lesson/pages/user-retake/user-retake.html
index 77900e473..0684f5507 100644
--- a/src/addons/mod/lesson/pages/user-retake/user-retake.html
+++ b/src/addons/mod/lesson/pages/user-retake/user-retake.html
@@ -19,7 +19,7 @@
{{student.fullname}}
-
+
diff --git a/src/addons/mod/scorm/components/index/addon-mod-scorm-index.html b/src/addons/mod/scorm/components/index/addon-mod-scorm-index.html
index 60c6f6f9a..b5d76b0f0 100644
--- a/src/addons/mod/scorm/components/index/addon-mod-scorm-index.html
+++ b/src/addons/mod/scorm/components/index/addon-mod-scorm-index.html
@@ -242,7 +242,8 @@
{{ progressMessage | translate }}
-
+
+
diff --git a/src/core/classes/tabs.ts b/src/core/classes/tabs.ts
index 190e754f4..92f76b076 100644
--- a/src/core/classes/tabs.ts
+++ b/src/core/classes/tabs.ts
@@ -670,5 +670,6 @@ export type CoreTabBase = {
icon?: string; // The tab icon.
badge?: string; // A badge to add in the tab.
badgeStyle?: string; // The badge color.
+ badgeA11yText?: string; // Accessibility text to add on the badge.
enabled?: boolean; // Whether the tab is enabled.
};
diff --git a/src/core/components/context-menu/context-menu-item.ts b/src/core/components/context-menu/context-menu-item.ts
index 42eee0c8d..10e9da41d 100644
--- a/src/core/components/context-menu/context-menu-item.ts
+++ b/src/core/components/context-menu/context-menu-item.ts
@@ -50,6 +50,7 @@ export class CoreContextMenuItemComponent implements OnInit, OnDestroy, OnChange
@Input() priority?: number; // Used to sort items. The highest priority, the highest position.
@Input() badge?: string; // A badge to show in the item.
@Input() badgeClass?: number; // A class to set in the badge.
+ @Input() badgeA11yText?: string; // Description for the badge, if needed.
@Input() hidden?: boolean; // Whether the item should be hidden.
@Output() action?: EventEmitter<() => void>; // Will emit an event when the item clicked.
@Output() onClosed?: EventEmitter<() => void>; // Will emit an event when the popover is closed because the item was clicked.
diff --git a/src/core/components/context-menu/core-context-menu-popover.html b/src/core/components/context-menu/core-context-menu-popover.html
index 98a46c630..64a3bacf2 100644
--- a/src/core/components/context-menu/core-context-menu-popover.html
+++ b/src/core/components/context-menu/core-context-menu-popover.html
@@ -12,6 +12,11 @@
[class.icon-slash]="item.iconSlash" slot="end">
-
{{item.badge}}
+
+ {{item.badge}}
+
+ {{ item.badgeA11yText | translate: {$a : item.badge } }}
+
+
diff --git a/src/core/components/progress-bar/core-progress-bar.html b/src/core/components/progress-bar/core-progress-bar.html
index 7583839a4..90f75d9df 100644
--- a/src/core/components/progress-bar/core-progress-bar.html
+++ b/src/core/components/progress-bar/core-progress-bar.html
@@ -1,5 +1,9 @@
= 0">
-
diff --git a/src/core/components/progress-bar/progress-bar.ts b/src/core/components/progress-bar/progress-bar.ts
index 39267d2f0..615aef875 100644
--- a/src/core/components/progress-bar/progress-bar.ts
+++ b/src/core/components/progress-bar/progress-bar.ts
@@ -14,6 +14,7 @@
import { Component, Input, OnChanges, SimpleChange, ChangeDetectionStrategy } from '@angular/core';
import { DomSanitizer, SafeStyle } from '@angular/platform-browser';
+import { Translate } from '@singletons';
/**
* Component to show a progress bar and its value.
@@ -31,7 +32,12 @@ export class CoreProgressBarComponent implements OnChanges {
@Input() progress!: number | string; // Percentage from 0 to 100.
@Input() text?: string; // Percentage in text to be shown at the right. If not defined, progress will be used.
+ @Input() a11yText?: string; // Accessibility text to read before the percentage.
+ @Input() ariaDescribedBy?: string; // ID of the element that described the progress, if any.
+
width?: SafeStyle;
+ progressBarValueText?: string;
+
protected textSupplied = false;
constructor(private sanitizer: DomSanitizer) { }
@@ -66,6 +72,11 @@ export class CoreProgressBarComponent implements OnChanges {
this.width = this.sanitizer.bypassSecurityTrustStyle(this.progress + '%');
}
}
+
+ if (changes.text || changes.progress || changes.a11yText) {
+ this.progressBarValueText = (this.a11yText ? Translate.instant(this.a11yText) + ' ' : '') +
+ Translate.instant('core.percentagenumber', { $a: this.text });
+ }
}
}
diff --git a/src/core/components/tabs-outlet/core-tabs-outlet.html b/src/core/components/tabs-outlet/core-tabs-outlet.html
index c6963585f..a7d721128 100644
--- a/src/core/components/tabs-outlet/core-tabs-outlet.html
+++ b/src/core/components/tabs-outlet/core-tabs-outlet.html
@@ -30,7 +30,12 @@
>
{{ tab.title | translate}}
-
{{ tab.badge }}
+
+ {{ tab.badge }}
+
+ {{ tab.badgeA11yText | translate: {$a : tab.badge } }}
+
+
diff --git a/src/core/components/tabs/core-tabs.html b/src/core/components/tabs/core-tabs.html
index c15340c3d..940758613 100644
--- a/src/core/components/tabs/core-tabs.html
+++ b/src/core/components/tabs/core-tabs.html
@@ -28,7 +28,12 @@
>
{{ tab.title | translate}}
-
{{ tab.badge }}
+
+ {{ tab.badge }}
+
+ {{ tab.badgeA11yText | translate: {$a : tab.badge } }}
+
+
diff --git a/src/core/components/tabs/tab.ts b/src/core/components/tabs/tab.ts
index dcd9c1f71..8f11dd03e 100644
--- a/src/core/components/tabs/tab.ts
+++ b/src/core/components/tabs/tab.ts
@@ -49,6 +49,7 @@ export class CoreTabComponent implements OnInit, OnDestroy, CoreTabBase {
@Input() icon?: string; // The tab icon.
@Input() badge?: string; // A badge to add in the tab.
@Input() badgeStyle?: string; // The badge color.
+ @Input() badgeA11yText?: string; // Accessibility text to add on the badge.
@Input() class?: string; // Class, if needed.
@Input() set enabled(value: boolean) { // Whether the tab should be shown.
value = value === undefined ? true : value;
diff --git a/src/core/features/course/components/format/core-course-format.html b/src/core/features/course/components/format/core-course-format.html
index 50e81e8e7..223fe9458 100644
--- a/src/core/features/course/components/format/core-course-format.html
+++ b/src/core/features/course/components/format/core-course-format.html
@@ -45,7 +45,8 @@
-
+
+
@@ -158,7 +159,9 @@
diff --git a/src/core/features/courses/pages/my-courses/my-courses.html b/src/core/features/courses/pages/my-courses/my-courses.html
index b0e57f1c8..6e7d6f8a6 100644
--- a/src/core/features/courses/pages/my-courses/my-courses.html
+++ b/src/core/features/courses/pages/my-courses/my-courses.html
@@ -20,7 +20,10 @@
[attr.aria-label]="'core.loading' | translate">
{{downloadAllCoursesBadge}}
+ role="progressbar" [attr.aria-valuemax]="downloadAllCoursesTotal"
+ [attr.aria-valuenow]="downloadAllCoursesCount" [attr.aria-valuetext]="downloadAllCoursesBadgeA11yText">
+ {{downloadAllCoursesBadge}}
+
diff --git a/src/core/features/courses/pages/my-courses/my-courses.ts b/src/core/features/courses/pages/my-courses/my-courses.ts
index eb5f2d0b8..967e51484 100644
--- a/src/core/features/courses/pages/my-courses/my-courses.ts
+++ b/src/core/features/courses/pages/my-courses/my-courses.ts
@@ -26,6 +26,7 @@ import { CoreCourseHelper } from '@features/course/services/course-helper';
import { CoreConstants } from '@/core/constants';
import { CoreCourseOptionsDelegate } from '@features/course/services/course-options-delegate';
import { CoreNavigator } from '@services/navigator';
+import { Translate } from '@singletons';
/**
* Page that displays the list of courses the user is enrolled in.
@@ -48,6 +49,9 @@ export class CoreCoursesMyCoursesPage implements OnInit, OnDestroy {
downloadAllCoursesLoading = false;
downloadAllCoursesBadge = '';
downloadAllCoursesEnabled = false;
+ downloadAllCoursesCount?: number;
+ downloadAllCoursesTotal?: number;
+ downloadAllCoursesBadgeA11yText = '';
protected myCoursesObserver: CoreEventObserver;
protected siteUpdatedObserver: CoreEventObserver;
@@ -183,6 +187,10 @@ export class CoreCoursesMyCoursesPage implements OnInit, OnDestroy {
try {
await CoreCourseHelper.confirmAndPrefetchCourses(this.courses, (progress) => {
this.downloadAllCoursesBadge = progress.count + ' / ' + progress.total;
+ this.downloadAllCoursesBadgeA11yText =
+ Translate.instant('core.course.downloadcoursesprogressdescription', progress);
+ this.downloadAllCoursesCount = progress.count;
+ this.downloadAllCoursesTotal = progress.total;
});
} catch (error) {
if (!this.isDestroyed) {
diff --git a/src/core/features/grades/pages/courses/courses.html b/src/core/features/grades/pages/courses/courses.html
index 8ebd5f052..4a4ef30bf 100644
--- a/src/core/features/grades/pages/courses/courses.html
+++ b/src/core/features/grades/pages/courses/courses.html
@@ -35,7 +35,12 @@
contextLevel="course"
>
- {{course.grade}}
+
+
+ {{ 'core.grades.grade' | translate }}
+
+ {{course.grade}}
+
diff --git a/src/core/features/login/lang.json b/src/core/features/login/lang.json
index 29cf529c3..ecf4be149 100644
--- a/src/core/features/login/lang.json
+++ b/src/core/features/login/lang.json
@@ -105,6 +105,7 @@
"signuprequiredfieldnotsupported": "The signup form contains a required custom field that isn't supported in the app. Please create your account using a web browser.",
"siteaddress": "Your site",
"siteaddressplaceholder": "https://campus.example.edu",
+ "sitebadgedescription": "There are {{count}} unread notifications.",
"sitehasredirect": "Your site contains at least one HTTP redirect. The app cannot follow redirects, this could be the issue that's preventing the app from connecting to your site.",
"siteinmaintenance": "Your site is in maintenance mode",
"sitepolicynotagreederror": "Site policy not agreed.",
@@ -121,4 +122,4 @@
"webservicesnotenabled": "Your host site may not have enabled Web services. Please contact your administrator for help.",
"youcanstillconnectwithcredentials": "You can still connect to the site by entering your username and password.",
"yourenteredsite": "Connect to your site"
-}
\ No newline at end of file
+}
diff --git a/src/core/features/login/pages/sites/sites.html b/src/core/features/login/pages/sites/sites.html
index e9c437993..c7a7bdaf2 100644
--- a/src/core/features/login/pages/sites/sites.html
+++ b/src/core/features/login/pages/sites/sites.html
@@ -29,7 +29,10 @@
{{site.siteUrl}}
- {{site.badge}}
+
+ {{site.badge}}
+ {{ 'core.login.sitebadgedescription' | translate:{ count: site.badge } }}
+
diff --git a/src/core/features/tag/lang.json b/src/core/features/tag/lang.json
index b94bad4fd..bf320e3f6 100644
--- a/src/core/features/tag/lang.json
+++ b/src/core/features/tag/lang.json
@@ -8,6 +8,7 @@
"searchtags": "Search tags",
"showingfirsttags": "Showing {{$a}} most popular tags",
"tag": "Tag",
+ "tagareabadgedescription": "There are {{count}} items.",
"tagarea_course": "Courses",
"tagarea_course_modules": "Activities and resources",
"tagarea_post": "Blog posts",
diff --git a/src/core/features/tag/pages/index/index.html b/src/core/features/tag/pages/index/index.html
index fb6fbed96..da105551b 100644
--- a/src/core/features/tag/pages/index/index.html
+++ b/src/core/features/tag/pages/index/index.html
@@ -23,7 +23,10 @@
{{ area!.nameKey | translate }}
- {{ area!.badge }}
+
+ {{ area!.badge }}
+ {{ 'core.tag.tagareabadgedescription' | translate:{ count: area!.badge } }}
+