diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000000..6c0301949d8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.json] +indent_size = 2 + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/.github/workflows/migration.yml b/.github/workflows/migration.yml deleted file mode 100644 index 360a4361b96..00000000000 --- a/.github/workflows/migration.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Migration checks - -on: workflow_dispatch - -jobs: - checks: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v3 - with: - node-version-file: '.nvmrc' - - run: npm ci --no-audit - - run: result=$(find src -type f -iname '*.html' -exec sh -c 'cat {} | tr "\n" " " | grep -Eo "class=\"[^\"]+\"[^>]+class=\"" ' \; | wc -l); test $result -eq 0 - - run: npm install -D @ionic/v4-migration-tslint - - run: npx tslint -c ionic-migration.json -p tsconfig.json diff --git a/.gitignore b/.gitignore index d3b41f8be86..4d221f5fada 100644 --- a/.gitignore +++ b/.gitignore @@ -6,32 +6,70 @@ .tmp *.tmp *.tmp.* -*.sublime-project -*.sublime-workspace -.DS_Store -Thumbs.db UserInterfaceState.xcuserstate $RECYCLE.BIN/ *.log log.txt -npm-debug.log* -/.idea -/.ionic -/.sass-cache /.sourcemaps /.versions /coverage -/dist -/node_modules + +# Ionic +/.ionic +/www /platforms /plugins -/www -/src/assets/lib -/moodle.config.*.json -!/moodle.config.example.json +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-project +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + + +# Miscellaneous +/.angular +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db + +# Moodle App +/src/assets/lib /src/assets/lang/* /src/assets/env.json + +/moodle.config.*.json +!/moodle.config.example.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 71bb27499d1..2442fe5acc9 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,5 +1,6 @@ { "recommendations": [ + "ionic.ionic", "dbaeumer.vscode-eslint", "angular.ng-template" ] diff --git a/config.xml b/config.xml index d49d3832507..faeac4d6454 100644 --- a/config.xml +++ b/config.xml @@ -1,5 +1,5 @@ - + Moodle Moodle official app Moodle Mobile team @@ -28,7 +28,7 @@ - + @@ -220,7 +220,7 @@ - 4.3.0 + 4.4.0 diff --git a/ionic-migration.json b/ionic-migration.json deleted file mode 100644 index 8da7980983b..00000000000 --- a/ionic-migration.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "rulesDirectory": ["@ionic/v4-migration-tslint/rules"], - "rules": { - "ion-action-sheet-method-create-parameters-renamed": true, - "ion-alert-method-create-parameters-renamed": true, - "ion-back-button-not-added-by-default": { "options": [true], "severity": "warning" }, - "ion-button-attributes-renamed": true, - "ion-button-is-now-an-element": true, - "ion-buttons-attributes-renamed": true, - "ion-col-attributes-renamed": true, - "ion-datetime-capitalization-changed": true, - "ion-fab-attributes-renamed": true, - "ion-fab-button-is-now-an-element": true, - "ion-fab-fixed-content": true, - "ion-icon-attribute-is-active-removed": true, - "ion-item-attributes-renamed": true, - "ion-item-divider-ion-label-required": true, - "ion-item-ion-label-required": true, - "ion-item-is-now-an-element": true, - "ion-item-option-is-now-an-element": true, - "ion-item-option-method-get-sliding-percent-renamed": true, - "ion-item-options-attribute-values-renamed": true, - "ion-label-attributes-renamed": true, - "ion-list-header-ion-label-required": true, - "ion-loading-method-create-parameters-renamed": true, - "ion-menu-events-renamed": true, - "ion-menu-toggle-is-now-an-element": true, - "ion-navbar-is-now-ion-toolbar": true, - "ion-option-is-now-ion-select-option": true, - "ion-overlay-method-create-should-use-await": true, - "ion-overlay-method-present-should-use-await": { "options": [true], "severity": "warning" }, - "ion-radio-attributes-renamed": true, - "ion-radio-group-is-now-an-element": true, - "ion-radio-slot-required": true, - "ion-range-attributes-renamed": true, - "ion-segment-button-ion-label-required": true, - "ion-spinner-attribute-values-renamed": true, - "ion-tabs-refactored": { "options": [true], "severity": "warning" }, - "ion-text-is-now-an-element": true - } -} - - diff --git a/moodle.config.json b/moodle.config.json index 52774b16ace..dbf81aa21f6 100644 --- a/moodle.config.json +++ b/moodle.config.json @@ -1,8 +1,8 @@ { "app_id": "com.moodle.moodlemobile", "appname": "Moodle Mobile", - "versioncode": 43001, - "versionname": "4.3.0", + "versioncode": 44000, + "versionname": "4.4.0", "cache_update_frequency_usually": 420000, "cache_update_frequency_often": 1200000, "cache_update_frequency_sometimes": 3600000, diff --git a/package-lock.json b/package-lock.json index 951be9d5f78..d2f9d11592f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "moodlemobile", - "version": "4.3.0", + "version": "4.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 702ef442890..1e932876fb0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "moodlemobile", - "version": "4.3.0", + "version": "4.4.0", "description": "The official app for Moodle.", "author": { "name": "Moodle Pty Ltd.", diff --git a/src/addons/badges/pages/issued-badge/issued-badge.ts b/src/addons/badges/pages/issued-badge/issued-badge.ts index 1440e7f02db..640b75e5ec6 100644 --- a/src/addons/badges/pages/issued-badge/issued-badge.ts +++ b/src/addons/badges/pages/issued-badge/issued-badge.ts @@ -13,7 +13,6 @@ // limitations under the License. import { Component, OnDestroy, OnInit } from '@angular/core'; -import { IonRefresher } from '@ionic/angular'; import { CoreTimeUtils } from '@services/utils/time'; import { CoreDomUtils } from '@services/utils/dom'; import { CoreSites } from '@services/sites'; @@ -130,7 +129,7 @@ export class AddonBadgesIssuedBadgePage implements OnInit, OnDestroy { * * @param refresher Refresher. */ - async refreshBadges(refresher?: IonRefresher): Promise { + async refreshBadges(refresher?: HTMLIonRefresherElement): Promise { await CoreUtils.ignoreErrors(Promise.all([ AddonBadges.invalidateUserBadges(this.courseId, this.userId), ])); diff --git a/src/addons/badges/pages/user-badges/user-badges.html b/src/addons/badges/pages/user-badges/user-badges.html index 8b872cbea9d..d91a5e0e893 100644 --- a/src/addons/badges/pages/user-badges/user-badges.html +++ b/src/addons/badges/pages/user-badges/user-badges.html @@ -19,7 +19,7 @@

{{ 'addon.badges.badges' | translate }}

+ (click)="badges.select(badge)" [attr.aria-current]="badges.getItemAriaCurrent(badge)" [detail]="true"> diff --git a/src/addons/badges/pages/user-badges/user-badges.ts b/src/addons/badges/pages/user-badges/user-badges.ts index 9d02a2c5f2f..eab870748cb 100644 --- a/src/addons/badges/pages/user-badges/user-badges.ts +++ b/src/addons/badges/pages/user-badges/user-badges.ts @@ -13,7 +13,6 @@ // limitations under the License. import { AfterViewInit, Component, OnDestroy, ViewChild } from '@angular/core'; -import { IonRefresher } from '@ionic/angular'; import { AddonBadges, AddonBadgesUserBadge } from '../../services/badges'; import { CoreTimeUtils } from '@services/utils/time'; import { CoreDomUtils } from '@services/utils/dom'; @@ -90,7 +89,7 @@ export class AddonBadgesUserBadgesPage implements AfterViewInit, OnDestroy { * * @param refresher Refresher. */ - async refreshBadges(refresher?: IonRefresher): Promise { + async refreshBadges(refresher?: HTMLIonRefresherElement): Promise { await CoreUtils.ignoreErrors( AddonBadges.invalidateUserBadges( this.badges.getSource().COURSE_ID, diff --git a/src/addons/block/activitymodules/components/activitymodules/addon-block-activitymodules.html b/src/addons/block/activitymodules/components/activitymodules/addon-block-activitymodules.html index b4f800003c9..98aebcd595c 100644 --- a/src/addons/block/activitymodules/components/activitymodules/addon-block-activitymodules.html +++ b/src/addons/block/activitymodules/components/activitymodules/addon-block-activitymodules.html @@ -1,10 +1,10 @@ - +

{{ 'addon.block_activitymodules.pluginname' | translate }}

- + {{ entry.name }} diff --git a/src/addons/block/myoverview/components/myoverview/addon-block-myoverview.html b/src/addons/block/myoverview/components/myoverview/addon-block-myoverview.html index 0c7735f127d..176c08c90a9 100644 --- a/src/addons/block/myoverview/components/myoverview/addon-block-myoverview.html +++ b/src/addons/block/myoverview/components/myoverview/addon-block-myoverview.html @@ -1,4 +1,4 @@ - +

{{ 'addon.block_myoverview.pluginname' | translate }}

@@ -88,11 +88,11 @@

{{ 'addon.block_myoverview.pluginname' | translate }}

- - @@ -123,7 +123,7 @@

{{ 'addon.block_myoverview.pluginname' | translate }}

- + diff --git a/src/addons/block/myoverview/components/myoverview/myoverview.ts b/src/addons/block/myoverview/components/myoverview/myoverview.ts index bbf81203765..efe60ab1425 100644 --- a/src/addons/block/myoverview/components/myoverview/myoverview.ts +++ b/src/addons/block/myoverview/components/myoverview/myoverview.ts @@ -31,7 +31,7 @@ import { CoreUtils } from '@services/utils/utils'; import { CoreDomUtils } from '@services/utils/dom'; import { CoreTextUtils } from '@services/utils/text'; import { AddonCourseCompletion } from '@addons/coursecompletion/services/coursecompletion'; -import { IonRefresher, IonSearchbar } from '@ionic/angular'; +import { IonSearchbar } from '@ionic/angular'; import { CoreNavigator } from '@services/navigator'; import { PageLoadWatcher } from '@classes/page-load-watcher'; import { PageLoadsManager } from '@classes/page-loads-manager'; @@ -191,7 +191,7 @@ export class AddonBlockMyOverviewComponent extends CoreBlockBaseComponent implem * @param done Function to call when done. * @returns Promise resolved when done. */ - async doRefresh(refresher?: IonRefresher, done?: () => void): Promise { + async doRefresh(refresher?: HTMLIonRefresherElement, done?: () => void): Promise { if (this.loaded) { return this.refreshContent().finally(() => { refresher?.complete(); diff --git a/src/addons/block/onlineusers/components/onlineusers/onlineusers.scss b/src/addons/block/onlineusers/components/onlineusers/onlineusers.scss index 1de16d87888..678e73a3fe9 100644 --- a/src/addons/block/onlineusers/components/onlineusers/onlineusers.scss +++ b/src/addons/block/onlineusers/components/onlineusers/onlineusers.scss @@ -1,4 +1,4 @@ -@import "~theme/globals"; +@use "theme/globals" as *; :host { --core-avatar-size: 30px; diff --git a/src/addons/block/recentactivity/components/recentactivity/recentactivity.scss b/src/addons/block/recentactivity/components/recentactivity/recentactivity.scss index a72a303fb20..14537fe1c6f 100644 --- a/src/addons/block/recentactivity/components/recentactivity/recentactivity.scss +++ b/src/addons/block/recentactivity/components/recentactivity/recentactivity.scss @@ -1,4 +1,4 @@ -@import "~theme/globals"; +@use "theme/globals" as *; :host .core-block-content ::ng-deep { .activitydate, .activityhead { diff --git a/src/addons/block/recentlyaccessedcourses/components/recentlyaccessedcourses/addon-block-recentlyaccessedcourses.html b/src/addons/block/recentlyaccessedcourses/components/recentlyaccessedcourses/addon-block-recentlyaccessedcourses.html index d4b28ea36da..66e1245d72c 100644 --- a/src/addons/block/recentlyaccessedcourses/components/recentlyaccessedcourses/addon-block-recentlyaccessedcourses.html +++ b/src/addons/block/recentlyaccessedcourses/components/recentlyaccessedcourses/addon-block-recentlyaccessedcourses.html @@ -1,4 +1,4 @@ - +

{{ 'addon.block_recentlyaccessedcourses.pluginname' | translate }}

diff --git a/src/addons/block/recentlyaccesseditems/components/recentlyaccesseditems/addon-block-recentlyaccesseditems.html b/src/addons/block/recentlyaccesseditems/components/recentlyaccesseditems/addon-block-recentlyaccesseditems.html index 2b185a8781a..9d157d6d1d3 100644 --- a/src/addons/block/recentlyaccesseditems/components/recentlyaccesseditems/addon-block-recentlyaccesseditems.html +++ b/src/addons/block/recentlyaccesseditems/components/recentlyaccesseditems/addon-block-recentlyaccesseditems.html @@ -1,4 +1,4 @@ - +

{{ 'addon.block_recentlyaccesseditems.pluginname' | translate }}

@@ -14,7 +14,7 @@

{{ 'addon.block_recentlyaccesseditems.pluginname' | translate }}

- + diff --git a/src/addons/block/recentlyaccesseditems/components/recentlyaccesseditems/recentlyaccesseditems.scss b/src/addons/block/recentlyaccesseditems/components/recentlyaccesseditems/recentlyaccesseditems.scss index 77fad00dd0e..9f161779f01 100644 --- a/src/addons/block/recentlyaccesseditems/components/recentlyaccesseditems/recentlyaccesseditems.scss +++ b/src/addons/block/recentlyaccesseditems/components/recentlyaccesseditems/recentlyaccesseditems.scss @@ -1,4 +1,4 @@ -@import "~theme/globals"; +@use "theme/globals" as *; :host { .core-horizontal-scroll div.core-horizontal-scroll-item { diff --git a/src/addons/block/sitemainmenu/components/sitemainmenu/addon-block-sitemainmenu.html b/src/addons/block/sitemainmenu/components/sitemainmenu/addon-block-sitemainmenu.html index 11bc7d2b8f8..4b6d5b6bacc 100644 --- a/src/addons/block/sitemainmenu/components/sitemainmenu/addon-block-sitemainmenu.html +++ b/src/addons/block/sitemainmenu/components/sitemainmenu/addon-block-sitemainmenu.html @@ -1,4 +1,4 @@ - +

{{ 'addon.block_sitemainmenu.pluginname' | translate }}

diff --git a/src/addons/block/starredcourses/components/starredcourses/addon-block-starredcourses.html b/src/addons/block/starredcourses/components/starredcourses/addon-block-starredcourses.html index 88e7fdfcea9..7d297b7712e 100644 --- a/src/addons/block/starredcourses/components/starredcourses/addon-block-starredcourses.html +++ b/src/addons/block/starredcourses/components/starredcourses/addon-block-starredcourses.html @@ -1,4 +1,4 @@ - +

{{ 'addon.block_starredcourses.pluginname' | translate }}

diff --git a/src/addons/block/timeline/classes/section.ts b/src/addons/block/timeline/classes/section.ts index ae82df5a0fd..08a5f11043f 100644 --- a/src/addons/block/timeline/classes/section.ts +++ b/src/addons/block/timeline/classes/section.ts @@ -44,7 +44,7 @@ export class AddonBlockTimelineSection { this.overdue = overdue; this.dateRange = dateRange; this.course = course; - this.dataSubject$ = new BehaviorSubject({ + this.dataSubject$ = new BehaviorSubject({ events: [], lastEventId: canLoadMore, canLoadMore: typeof canLoadMore !== 'undefined', diff --git a/src/addons/block/timeline/components/events/addon-block-timeline-events.html b/src/addons/block/timeline/components/events/addon-block-timeline-events.html index 4428d0f642a..d84981b9629 100644 --- a/src/addons/block/timeline/components/events/addon-block-timeline-events.html +++ b/src/addons/block/timeline/components/events/addon-block-timeline-events.html @@ -14,7 +14,7 @@

{{ dayEvents.dayTimestamp * 1000 | coreFormatDat - diff --git a/src/addons/block/timeline/components/events/events.scss b/src/addons/block/timeline/components/events/events.scss index 07634e1d5dd..68e7378f5b7 100644 --- a/src/addons/block/timeline/components/events/events.scss +++ b/src/addons/block/timeline/components/events/events.scss @@ -1,4 +1,4 @@ -@import "~theme/globals"; +@use "theme/globals" as *; h3 { font-weight: bold; diff --git a/src/addons/block/timeline/components/timeline/addon-block-timeline.html b/src/addons/block/timeline/components/timeline/addon-block-timeline.html index 92d91128610..b20b7952dee 100644 --- a/src/addons/block/timeline/components/timeline/addon-block-timeline.html +++ b/src/addons/block/timeline/components/timeline/addon-block-timeline.html @@ -1,4 +1,4 @@ - +

{{ 'addon.block_timeline.pluginname' | translate }}

diff --git a/src/addons/block/timeline/components/timeline/timeline.ts b/src/addons/block/timeline/components/timeline/timeline.ts index b9ee654cc99..e61a52f5c97 100644 --- a/src/addons/block/timeline/components/timeline/timeline.ts +++ b/src/addons/block/timeline/components/timeline/timeline.ts @@ -56,7 +56,7 @@ export class AddonBlockTimelineComponent implements OnInit, ICoreBlockComponent constructor() { this.logger = CoreLogger.getInstance('AddonBlockTimelineComponent'); - this.search$ = new BehaviorSubject(null); + this.search$ = new BehaviorSubject(null); this.initializeSort(); this.initializeFilter(); this.initializeSections(); diff --git a/src/addons/blog/pages/entries/entries.html b/src/addons/blog/pages/entries/entries.html index fb9ffa77cb7..ff2f5d39bf5 100644 --- a/src/addons/blog/pages/entries/entries.html +++ b/src/addons/blog/pages/entries/entries.html @@ -65,7 +65,7 @@

- + {{ 'addon.blog.linktooriginalentry' | translate }} diff --git a/src/addons/blog/pages/entries/entries.ts b/src/addons/blog/pages/entries/entries.ts index b5ee6033597..a570d0786bb 100644 --- a/src/addons/blog/pages/entries/entries.ts +++ b/src/addons/blog/pages/entries/entries.ts @@ -19,7 +19,6 @@ import { CoreComments } from '@features/comments/services/comments'; import { CoreMainMenuDeepLinkManager } from '@features/mainmenu/classes/deep-link-manager'; import { CoreTag } from '@features/tag/services/tag'; import { CoreUser, CoreUserProfile } from '@features/user/services/user'; -import { IonRefresher } from '@ionic/angular'; import { CoreAnalytics, CoreAnalyticsEventType } from '@services/analytics'; import { CoreNavigator } from '@services/navigator'; import { CoreSites } from '@services/sites'; @@ -272,7 +271,7 @@ export class AddonBlogEntriesPage implements OnInit { * * @param refresher Refresher instance. */ - refresh(refresher?: IonRefresher): void { + refresh(refresher?: HTMLIonRefresherElement): void { const promises = this.entries.map((entry) => CoreComments.invalidateCommentsData('user', entry.userid, this.component, entry.id, 'format_blog')); diff --git a/src/addons/calendar/calendar-common.scss b/src/addons/calendar/calendar-common.scss index 3746e787297..8b3f5108fe2 100644 --- a/src/addons/calendar/calendar-common.scss +++ b/src/addons/calendar/calendar-common.scss @@ -1,4 +1,4 @@ -@import "~theme/globals"; +@use "theme/globals" as *; :host { diff --git a/src/addons/calendar/components/calendar/calendar.scss b/src/addons/calendar/components/calendar/calendar.scss index 0df183e400e..f3d27322f2c 100644 --- a/src/addons/calendar/components/calendar/calendar.scss +++ b/src/addons/calendar/components/calendar/calendar.scss @@ -1,4 +1,4 @@ -@import "~theme/globals"; +@use "theme/globals" as *; :host { --addon-calendar-blank-day-background-color: var(--light); diff --git a/src/addons/calendar/components/filter/filter.scss b/src/addons/calendar/components/filter/filter.scss index 29e652dd0b2..dd51360a82d 100644 --- a/src/addons/calendar/components/filter/filter.scss +++ b/src/addons/calendar/components/filter/filter.scss @@ -1,4 +1,4 @@ -@import "~theme/globals"; +@use "theme/globals" as *; :host { ion-item { diff --git a/src/addons/calendar/pages/day/day.ts b/src/addons/calendar/pages/day/day.ts index 1f539005c66..83c8e41a81c 100644 --- a/src/addons/calendar/pages/day/day.ts +++ b/src/addons/calendar/pages/day/day.ts @@ -13,7 +13,6 @@ // limitations under the License. import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core'; -import { IonRefresher } from '@ionic/angular'; import { CoreNetwork } from '@services/network'; import { CoreEventObserver, CoreEvents } from '@singletons/events'; import { CoreSites } from '@services/sites'; @@ -301,7 +300,7 @@ export class AddonCalendarDayPage implements OnInit, OnDestroy { * @param done Function to call when done. * @returns Promise resolved when done. */ - async doRefresh(refresher?: IonRefresher, done?: () => void): Promise { + async doRefresh(refresher?: HTMLIonRefresherElement, done?: () => void): Promise { if (!this.loaded) { return; } diff --git a/src/addons/calendar/pages/edit-event/edit-event.html b/src/addons/calendar/pages/edit-event/edit-event.html index a61fcb89940..102ac07dc88 100644 --- a/src/addons/calendar/pages/edit-event/edit-event.html +++ b/src/addons/calendar/pages/edit-event/edit-event.html @@ -51,7 +51,7 @@

{{ title | translate }}

- +

{{ 'core.category' | translate }}

@@ -64,7 +64,7 @@

{{ title | translate }}

- +

{{ 'core.course' | translate }}

@@ -75,7 +75,7 @@

{{ title | translate }}

- + diff --git a/src/addons/calendar/pages/edit-event/edit-event.ts b/src/addons/calendar/pages/edit-event/edit-event.ts index a6dd52dd03e..993603f9e1a 100644 --- a/src/addons/calendar/pages/edit-event/edit-event.ts +++ b/src/addons/calendar/pages/edit-event/edit-event.ts @@ -14,7 +14,6 @@ import { Component, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core'; import { FormControl, FormGroup, FormBuilder, Validators } from '@angular/forms'; -import { IonRefresher } from '@ionic/angular'; import { CoreEvents } from '@singletons/events'; import { CoreGroup, CoreGroups } from '@services/groups'; import { CoreSites } from '@services/sites'; @@ -383,7 +382,7 @@ export class AddonCalendarEditEventPage implements OnInit, OnDestroy, CanLeave { * * @param refresher Refresher. */ - refreshData(refresher?: IonRefresher): void { + refreshData(refresher?: HTMLIonRefresherElement): void { const promises = [ AddonCalendar.invalidateAccessInformation(this.courseId), AddonCalendar.invalidateAllowedEventTypes(this.courseId), diff --git a/src/addons/calendar/pages/event/event.html b/src/addons/calendar/pages/event/event.html index 494a78e422a..81a83d325ae 100644 --- a/src/addons/calendar/pages/event/event.html +++ b/src/addons/calendar/pages/event/event.html @@ -72,7 +72,7 @@

{{ 'addon.calendar.type' + event.formattedType | translate }}

- +

{{ 'core.course' | translate}}

diff --git a/src/addons/calendar/pages/event/event.ts b/src/addons/calendar/pages/event/event.ts index 59b6eb62248..3aedbbeb89e 100644 --- a/src/addons/calendar/pages/event/event.ts +++ b/src/addons/calendar/pages/event/event.ts @@ -13,7 +13,6 @@ // limitations under the License. import { Component, OnDestroy, OnInit } from '@angular/core'; -import { IonRefresher } from '@ionic/angular'; import { AlertOptions } from '@ionic/core'; import { AddonCalendar, @@ -419,7 +418,7 @@ export class AddonCalendarEventPage implements OnInit, OnDestroy { * @param showErrors Whether to show sync errors to the user. * @returns Promise resolved when done. */ - async doRefresh(refresher?: IonRefresher, done?: () => void, showErrors= false): Promise { + async doRefresh(refresher?: HTMLIonRefresherElement, done?: () => void, showErrors= false): Promise { if (!this.eventLoaded) { return; } diff --git a/src/addons/calendar/pages/index/index.ts b/src/addons/calendar/pages/index/index.ts index cd48d82d18d..ac6828c7411 100644 --- a/src/addons/calendar/pages/index/index.ts +++ b/src/addons/calendar/pages/index/index.ts @@ -13,7 +13,6 @@ // limitations under the License. import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core'; -import { IonRefresher } from '@ionic/angular'; import { CoreNetwork } from '@services/network'; import { CoreEventObserver, CoreEvents } from '@singletons/events'; import { CoreSites } from '@services/sites'; @@ -263,7 +262,7 @@ export class AddonCalendarIndexPage implements OnInit, OnDestroy { * @param showErrors Whether to show sync errors to the user. * @returns Promise resolved when done. */ - async doRefresh(refresher?: IonRefresher, done?: () => void, showErrors?: boolean): Promise { + async doRefresh(refresher?: HTMLIonRefresherElement, done?: () => void, showErrors?: boolean): Promise { if (!this.loaded) { return; } diff --git a/src/addons/competency/pages/competencies/competencies.html b/src/addons/competency/pages/competencies/competencies.html index 72793a1db8a..33b3afe4383 100644 --- a/src/addons/competency/pages/competencies/competencies.html +++ b/src/addons/competency/pages/competencies/competencies.html @@ -20,7 +20,7 @@

+ [attr.aria-current]="competencies.getItemAriaCurrent(competency)" button [detail]="true">

{ + async refreshCompetencies(refresher?: HTMLIonRefresherElement): Promise { await this.competencies.getSource().invalidateCache(); this.competencies.getSource().setDirty(true); diff --git a/src/addons/competency/pages/competency/competency.page.ts b/src/addons/competency/pages/competency/competency.page.ts index bf14914aca7..9431a03e939 100644 --- a/src/addons/competency/pages/competency/competency.page.ts +++ b/src/addons/competency/pages/competency/competency.page.ts @@ -30,7 +30,6 @@ import { AddonCompetencyProvider, } from '@addons/competency/services/competency'; import { CoreNavigator } from '@services/navigator'; -import { IonRefresher } from '@ionic/angular'; import { ContextLevel } from '@/core/constants'; import { CoreUtils } from '@services/utils/utils'; import { ADDON_COMPETENCY_SUMMARY_PAGE } from '@addons/competency/competency.module'; @@ -173,7 +172,7 @@ export class AddonCompetencyCompetencyPage implements OnInit, OnDestroy { * * @param refresher Refresher. */ - async refreshCompetency(refresher: IonRefresher): Promise { + async refreshCompetency(refresher: HTMLIonRefresherElement): Promise { const source = this.competencies.getSource(); await CoreUtils.ignoreErrors( diff --git a/src/addons/competency/pages/competencysummary/competencysummary.page.ts b/src/addons/competency/pages/competencysummary/competencysummary.page.ts index 1495a9e6e27..00dd18b0c1f 100644 --- a/src/addons/competency/pages/competencysummary/competencysummary.page.ts +++ b/src/addons/competency/pages/competencysummary/competencysummary.page.ts @@ -15,7 +15,6 @@ import { Component, OnInit } from '@angular/core'; import { ContextLevel } from '@/core/constants'; import { AddonCompetencySummary, AddonCompetency } from '@addons/competency/services/competency'; -import { IonRefresher } from '@ionic/angular'; import { CoreNavigator } from '@services/navigator'; import { CoreDomUtils } from '@services/utils/dom'; import { CoreUtils } from '@services/utils/utils'; @@ -113,7 +112,7 @@ export class AddonCompetencyCompetencySummaryPage implements OnInit { * * @param refresher Refresher. */ - refreshCompetency(refresher: IonRefresher): void { + refreshCompetency(refresher: HTMLIonRefresherElement): void { AddonCompetency.invalidateCompetencySummary(this.competencyId).finally(() => { this.fetchCompetency().finally(() => { refresher?.complete(); diff --git a/src/addons/competency/pages/coursecompetencies/coursecompetencies.html b/src/addons/competency/pages/coursecompetencies/coursecompetencies.html index f4afee0b493..5d5369b9412 100644 --- a/src/addons/competency/pages/coursecompetencies/coursecompetencies.html +++ b/src/addons/competency/pages/coursecompetencies/coursecompetencies.html @@ -65,7 +65,7 @@

+ [attr.aria-label]="competency.competency.shortname" [detail]="true" button>

diff --git a/src/addons/competency/pages/coursecompetencies/coursecompetencies.page.ts b/src/addons/competency/pages/coursecompetencies/coursecompetencies.page.ts index cf780f27d77..665842828cd 100644 --- a/src/addons/competency/pages/coursecompetencies/coursecompetencies.page.ts +++ b/src/addons/competency/pages/coursecompetencies/coursecompetencies.page.ts @@ -18,7 +18,6 @@ import { AddonCompetencyDataForCourseCompetenciesPageCompetency, } from '@addons/competency/services/competency'; import { CoreUserProfile } from '@features/user/services/user'; -import { IonRefresher } from '@ionic/angular'; import { CoreNavigator } from '@services/navigator'; import { CoreDomUtils } from '@services/utils/dom'; import { ContextLevel } from '@/core/constants'; @@ -148,7 +147,7 @@ export class AddonCompetencyCourseCompetenciesPage implements OnInit, OnDestroy * * @param refresher Refresher. */ - async refreshCourseCompetencies(refresher?: IonRefresher): Promise { + async refreshCourseCompetencies(refresher?: HTMLIonRefresherElement): Promise { await this.competencies.getSource().invalidateCache(); this.fetchCourseCompetencies().finally(() => { diff --git a/src/addons/competency/pages/plan/plan.html b/src/addons/competency/pages/plan/plan.html index 5090642c41e..dbe72926335 100644 --- a/src/addons/competency/pages/plan/plan.html +++ b/src/addons/competency/pages/plan/plan.html @@ -81,7 +81,7 @@

+ [attr.aria-label]="competency.competency.shortname" [detail]="true" button>

{ + async refreshLearningPlan(refresher: HTMLIonRefresherElement): Promise { await this.competencies.getSource().invalidateCache(); this.fetchLearningPlan().finally(() => { diff --git a/src/addons/competency/pages/planlist/planlist.html b/src/addons/competency/pages/planlist/planlist.html index c1959b4a91f..f980c458b65 100644 --- a/src/addons/competency/pages/planlist/planlist.html +++ b/src/addons/competency/pages/planlist/planlist.html @@ -19,7 +19,7 @@

{{ 'addon.competency.userplans' | translate }}

+ [attr.aria-current]="plans.getItemAriaCurrent(plan)" button [detail]="true">

diff --git a/src/addons/competency/pages/planlist/planlist.ts b/src/addons/competency/pages/planlist/planlist.ts index db2030b98e4..c725a372c8a 100644 --- a/src/addons/competency/pages/planlist/planlist.ts +++ b/src/addons/competency/pages/planlist/planlist.ts @@ -13,7 +13,6 @@ // limitations under the License. import { AfterViewInit, Component, OnDestroy, ViewChild } from '@angular/core'; -import { IonRefresher } from '@ionic/angular'; import { CoreDomUtils } from '@services/utils/dom'; import { CoreSplitViewComponent } from '@components/split-view/split-view'; import { CoreNavigator } from '@services/navigator'; @@ -86,7 +85,7 @@ export class AddonCompetencyPlanListPage implements AfterViewInit, OnDestroy { * * @param refresher Refresher. */ - async refreshLearningPlans(refresher: IonRefresher): Promise { + async refreshLearningPlans(refresher: HTMLIonRefresherElement): Promise { await this.plans.getSource().invalidateCache(); this.plans.getSource().setDirty(true); diff --git a/src/addons/coursecompletion/pages/report/report.ts b/src/addons/coursecompletion/pages/report/report.ts index b58921aa386..6449ec70100 100644 --- a/src/addons/coursecompletion/pages/report/report.ts +++ b/src/addons/coursecompletion/pages/report/report.ts @@ -18,7 +18,6 @@ import { } from '@addons/coursecompletion/services/coursecompletion'; import { Component, OnInit } from '@angular/core'; import { CoreUser, CoreUserProfile } from '@features/user/services/user'; -import { IonRefresher } from '@ionic/angular'; import { CoreAnalytics, CoreAnalyticsEventType } from '@services/analytics'; import { CoreNavigator } from '@services/navigator'; import { CoreSites } from '@services/sites'; @@ -112,7 +111,7 @@ export class AddonCourseCompletionReportPage implements OnInit { * * @param refresher Refresher instance. */ - async refreshCompletion(refresher?: IonRefresher): Promise { + async refreshCompletion(refresher?: HTMLIonRefresherElement): Promise { await AddonCourseCompletion.invalidateCourseCompletion(this.courseId, this.userId).finally(() => { this.fetchCompletion().finally(() => { refresher?.complete(); diff --git a/src/addons/enrol/guest/services/enrol-handler.ts b/src/addons/enrol/guest/services/enrol-handler.ts index 0a0b174c4af..00c2a13131c 100644 --- a/src/addons/enrol/guest/services/enrol-handler.ts +++ b/src/addons/enrol/guest/services/enrol-handler.ts @@ -98,7 +98,7 @@ export class AddonEnrolGuestHandlerService implements CoreEnrolGuestHandler { return false; } - const validatePassword = async (password: string): Promise => { + const validatePassword = async (password = ''): Promise => { const modal = await CoreDomUtils.showModalLoading('core.loading', true); try { diff --git a/src/addons/filter/mathjaxloader/services/handlers/mathjaxloader.ts b/src/addons/filter/mathjaxloader/services/handlers/mathjaxloader.ts index aca1a89164e..5d40042a93a 100644 --- a/src/addons/filter/mathjaxloader/services/handlers/mathjaxloader.ts +++ b/src/addons/filter/mathjaxloader/services/handlers/mathjaxloader.ts @@ -407,8 +407,8 @@ type MathJaxWindow = Window & { MathJax?: any; // eslint-disable-line @typescript-eslint/naming-convention, @typescript-eslint/no-explicit-any M?: { // eslint-disable-line @typescript-eslint/naming-convention filter_mathjaxloader?: { // eslint-disable-line @typescript-eslint/naming-convention - _lang: ''; // eslint-disable-line @typescript-eslint/naming-convention - _configured: false; // eslint-disable-line @typescript-eslint/naming-convention + _lang: string; // eslint-disable-line @typescript-eslint/naming-convention + _configured: boolean; // eslint-disable-line @typescript-eslint/naming-convention // Add the configuration to the head and set the lang. configure: (params: Record) => void; _setLocale: () => void; // eslint-disable-line @typescript-eslint/naming-convention diff --git a/src/addons/messageoutput/airnotifier/pages/devices/devices.ts b/src/addons/messageoutput/airnotifier/pages/devices/devices.ts index 6c7b1087d2b..829d4f798f5 100644 --- a/src/addons/messageoutput/airnotifier/pages/devices/devices.ts +++ b/src/addons/messageoutput/airnotifier/pages/devices/devices.ts @@ -13,7 +13,6 @@ // limitations under the License. import { Component, OnDestroy, OnInit } from '@angular/core'; -import { IonRefresher } from '@ionic/angular'; import { CoreDomUtils } from '@services/utils/dom'; import { CorePushNotifications } from '@features/pushnotifications/services/pushnotifications'; @@ -123,7 +122,7 @@ export class AddonMessageOutputAirnotifierDevicesPage implements OnInit, OnDestr * * @param refresher Refresher. */ - async refreshDevices(refresher: IonRefresher): Promise { + async refreshDevices(refresher: HTMLIonRefresherElement): Promise { try { await CoreUtils.ignoreErrors(AddonMessageOutputAirnotifier.invalidateUserDevices()); diff --git a/src/addons/messages/components/conversation-info/conversation-info.component.ts b/src/addons/messages/components/conversation-info/conversation-info.component.ts index bfca2d625cb..8ce92e4819d 100644 --- a/src/addons/messages/components/conversation-info/conversation-info.component.ts +++ b/src/addons/messages/components/conversation-info/conversation-info.component.ts @@ -13,7 +13,6 @@ // limitations under the License. import { Component, Input, OnInit } from '@angular/core'; -import { IonRefresher } from '@ionic/angular'; import { AddonMessagesConversationFormatted, AddonMessagesConversationMember, @@ -116,7 +115,7 @@ export class AddonMessagesConversationInfoComponent implements OnInit { * @param refresher Refresher. * @returns Promise resolved when done. */ - async refreshData(refresher?: IonRefresher): Promise { + async refreshData(refresher?: HTMLIonRefresherElement): Promise { const promises: Promise[] = []; promises.push(AddonMessages.invalidateConversation(this.conversationId)); diff --git a/src/addons/messages/components/conversation-info/conversation-info.html b/src/addons/messages/components/conversation-info/conversation-info.html index 3a4fb4af7c9..8d53b3dce3d 100644 --- a/src/addons/messages/components/conversation-info/conversation-info.html +++ b/src/addons/messages/components/conversation-info/conversation-info.html @@ -35,7 +35,7 @@

+ [detail]="true" button> diff --git a/src/addons/messages/messages-common.scss b/src/addons/messages/messages-common.scss index 255a9a15697..da75d734809 100644 --- a/src/addons/messages/messages-common.scss +++ b/src/addons/messages/messages-common.scss @@ -1,4 +1,4 @@ -@import "~theme/globals"; +@use "theme/globals" as *; :host { .addon-messages-conversation-item, diff --git a/src/addons/messages/pages/contacts-35/contacts.html b/src/addons/messages/pages/contacts-35/contacts.html index 1e52521dfda..e79d83c11cc 100644 --- a/src/addons/messages/pages/contacts-35/contacts.html +++ b/src/addons/messages/pages/contacts-35/contacts.html @@ -22,10 +22,10 @@

{{ 'addon.messages.contacts' | translate }}

autocorrect="off" spellcheck="false" lengthCheck="2" [disabled]="!loaded" searchArea="AddonMessagesContacts"> - - @@ -42,7 +42,7 @@

{{ 'addon.messages.contacts' | translate }}

diff --git a/src/addons/messages/pages/contacts-35/contacts.ts b/src/addons/messages/pages/contacts-35/contacts.ts index a5dd98e8a42..d69838ec0bc 100644 --- a/src/addons/messages/pages/contacts-35/contacts.ts +++ b/src/addons/messages/pages/contacts-35/contacts.ts @@ -13,7 +13,6 @@ // limitations under the License. import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core'; -import { IonRefresher } from '@ionic/angular'; import { CoreSites } from '@services/sites'; import { AddonMessagesProvider, @@ -129,7 +128,7 @@ export class AddonMessagesContacts35Page implements OnInit, OnDestroy { * @param refresher Refresher. * @returns Promise resolved when done. */ - async refreshData(refresher?: IonRefresher): Promise { + async refreshData(refresher?: HTMLIonRefresherElement): Promise { try { if (this.searchString) { // User has searched, update the search. diff --git a/src/addons/messages/pages/contacts/contacts.html b/src/addons/messages/pages/contacts/contacts.html index c049589e052..1ac69356814 100644 --- a/src/addons/messages/pages/contacts/contacts.html +++ b/src/addons/messages/pages/contacts/contacts.html @@ -28,7 +28,7 @@

{{ 'addon.messages.contacts' | translate }}

@@ -67,7 +67,7 @@

{{ 'addon.messages.contacts' | translate }}

+ [attr.aria-current]="request.id == selectedUserId ? 'page' : 'false'" [detail]="true"> diff --git a/src/addons/messages/pages/contacts/contacts.ts b/src/addons/messages/pages/contacts/contacts.ts index 187a392938c..94766b892c4 100644 --- a/src/addons/messages/pages/contacts/contacts.ts +++ b/src/addons/messages/pages/contacts/contacts.ts @@ -23,7 +23,6 @@ import { import { CoreNavigator } from '@services/navigator'; import { CoreScreen } from '@services/screen'; import { CoreDomUtils } from '@services/utils/dom'; -import { IonRefresher } from '@ionic/angular'; import { CoreSplitViewComponent } from '@components/split-view/split-view'; /** @@ -216,7 +215,7 @@ export class AddonMessagesContactsPage implements OnInit, OnDestroy { * @param refresher Refresher. * @returns Promise resolved when done. */ - async refreshData(refresher?: IonRefresher): Promise { + async refreshData(refresher?: HTMLIonRefresherElement): Promise { try { if (this.selected == 'confirmed') { // No need to invalidate contacts, we always try to get the latest. diff --git a/src/addons/messages/pages/discussion/discussion.html b/src/addons/messages/pages/discussion/discussion.html index 775381ad496..0e402e14f45 100644 --- a/src/addons/messages/pages/discussion/discussion.html +++ b/src/addons/messages/pages/discussion/discussion.html @@ -103,17 +103,17 @@

- -

+ +

{{ 'addon.messages.unabletomessage' | translate }}

-
+

{{ 'addon.messages.youhaveblockeduser' | translate }}

{{ 'addon.messages.unblockuser' | translate }}
-
+

{{ 'addon.messages.isnotinyourcontacts' | translate: {$a: otherMember.fullname} }}

@@ -122,7 +122,7 @@

{{ 'addon.messages.sendcontactrequest' | translate }}

-
+

{{ 'addon.messages.userwouldliketocontactyou' | translate: {$a: otherMember.fullname} }}

{{ 'addon.messages.acceptandaddcontact' | translate }} @@ -131,13 +131,13 @@

{{ 'addon.messages.decline' | translate }}

-
+

{{ 'addon.messages.contactrequestsent' | translate }}

{{ 'addon.messages.yourcontactrequestpending' | translate: {$a: otherMember.fullname} }}

- diff --git a/src/addons/messages/pages/discussion/discussion.scss b/src/addons/messages/pages/discussion/discussion.scss index 0c82d4a8788..2de83952c58 100644 --- a/src/addons/messages/pages/discussion/discussion.scss +++ b/src/addons/messages/pages/discussion/discussion.scss @@ -1,5 +1,4 @@ -@import "~theme/components/discussion.scss"; -@import "~theme/globals.scss"; +@use "theme/globals" as *; :host { diff --git a/src/addons/messages/pages/discussion/discussion.ts b/src/addons/messages/pages/discussion/discussion.ts index 74e817bc731..6f36ec0f9c3 100644 --- a/src/addons/messages/pages/discussion/discussion.ts +++ b/src/addons/messages/pages/discussion/discussion.ts @@ -51,7 +51,7 @@ import { CoreDom } from '@singletons/dom'; @Component({ selector: 'page-addon-messages-discussion', templateUrl: 'discussion.html', - styleUrls: ['discussion.scss'], + styleUrls: ['../../../../theme/components/discussion.scss', 'discussion.scss'], }) export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterViewInit { diff --git a/src/addons/messages/pages/discussions-35/discussions.html b/src/addons/messages/pages/discussions-35/discussions.html index bb3368ca33e..a95d142d888 100644 --- a/src/addons/messages/pages/discussions-35/discussions.html +++ b/src/addons/messages/pages/discussions-35/discussions.html @@ -28,7 +28,7 @@

{{ 'addon.messages.messages' | translate }}

+ [attr.aria-label]="'addon.messages.contacts' | translate" [detail]="true" button>

{{ 'addon.messages.contacts' | translate }}

@@ -46,7 +46,7 @@

{{ 'core.searchresults' | translate }}

+ [attr.aria-current]="result.userid == discussionUserId ? 'page' : 'false'" [detail]="false">

{{ result.fullname }}

@@ -60,7 +60,7 @@

{{ 'core.searchresults' | translate }}

+ [attr.aria-current]="discussion.message!.user == discussionUserId ? 'page' : 'false'" [detail]="false">
diff --git a/src/addons/messages/pages/discussions-35/discussions.ts b/src/addons/messages/pages/discussions-35/discussions.ts index f82f985aeb1..5dfa7cac357 100644 --- a/src/addons/messages/pages/discussions-35/discussions.ts +++ b/src/addons/messages/pages/discussions-35/discussions.ts @@ -29,7 +29,6 @@ import { CorePushNotificationsNotificationBasicData } from '@features/pushnotifi import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate'; import { Subscription } from 'rxjs'; import { Translate } from '@singletons'; -import { IonRefresher } from '@ionic/angular'; import { CoreNavigator } from '@services/navigator'; import { CoreScreen } from '@services/screen'; import { CoreMainMenuDeepLinkManager } from '@features/mainmenu/classes/deep-link-manager'; @@ -166,7 +165,7 @@ export class AddonMessagesDiscussions35Page implements OnInit, OnDestroy { * @param refreshUnreadCounts Whteher to refresh unread counts. * @returns Promise resolved when done. */ - async refreshData(refresher?: IonRefresher, refreshUnreadCounts: boolean = true): Promise { + async refreshData(refresher?: HTMLIonRefresherElement, refreshUnreadCounts: boolean = true): Promise { const promises: Promise[] = []; promises.push(AddonMessages.invalidateDiscussionsCache(this.siteId)); diff --git a/src/addons/messages/pages/group-conversations/group-conversations.html b/src/addons/messages/pages/group-conversations/group-conversations.html index 9cca75e2dee..eb9e0fdd785 100644 --- a/src/addons/messages/pages/group-conversations/group-conversations.html +++ b/src/addons/messages/pages/group-conversations/group-conversations.html @@ -27,7 +27,7 @@

{{ 'addon.messages.messages' | translate }}

- +

{{ 'addon.messages.contacts' | translate }}

@@ -38,10 +38,10 @@

{{ 'addon.messages.contacts' | translate }}

- + [detail]="false"> @@ -73,9 +73,9 @@

{{ 'core.favourites' | translate }} ({{ favourites.count }})

- + aria-controls="addon-messages-groupconversations-group" role="heading" [detail]="false"> @@ -106,10 +106,10 @@

{{ 'addon.messages.groupconversations' | translate }} ({{ group.count }}) - + [detail]="false"> @@ -147,7 +147,7 @@

{{ 'addon.messages.individualconversations' | translate }} ({{ individual.co - { + async refreshData(refresher?: HTMLIonRefresherElement, refreshUnreadCounts: boolean = true): Promise { // Don't invalidate conversations and so, they always try to get latest data. try { await AddonMessages.invalidateContactRequestsCountCache(this.siteId); diff --git a/src/addons/messages/pages/search/search.html b/src/addons/messages/pages/search/search.html index afbf8b2275e..72cc82dfec4 100644 --- a/src/addons/messages/pages/search/search.html +++ b/src/addons/messages/pages/search/search.html @@ -45,7 +45,7 @@

{{ item.titleString | translate }}

+ (click)="openConversation(result)" [attr.aria-current]="result == selectedResult ? 'page' : 'false'" [detail]="true" button>

@@ -68,7 +68,7 @@

{{ item.titleString | translate }}

- +
{{ 'core.loadmore' | translate }} diff --git a/src/addons/messages/pages/settings/settings.ts b/src/addons/messages/pages/settings/settings.ts index 8b0a1ab78d8..91d9e6c2ba3 100644 --- a/src/addons/messages/pages/settings/settings.ts +++ b/src/addons/messages/pages/settings/settings.ts @@ -25,7 +25,6 @@ import { CoreEvents } from '@singletons/events'; import { CoreSites } from '@services/sites'; import { CoreDomUtils } from '@services/utils/dom'; import { CoreConstants } from '@/core/constants'; -import { IonRefresher } from '@ionic/angular'; import { AddonNotificationsPreferencesNotificationProcessorState } from '@addons/notifications/services/notifications'; import { CorePlatform } from '@services/platform'; @@ -251,7 +250,7 @@ export class AddonMessagesSettingsPage implements OnInit, OnDestroy { * * @param refresher Refresher. */ - refreshPreferences(refresher?: IonRefresher): void { + refreshPreferences(refresher?: HTMLIonRefresherElement): void { AddonMessages.invalidateMessagePreferences().finally(() => { this.fetchPreferences().finally(() => { refresher?.complete(); diff --git a/src/addons/mod/assign/components/index/addon-mod-assign-index.html b/src/addons/mod/assign/components/index/addon-mod-assign-index.html index e7e04b991e6..3f65bb593e8 100644 --- a/src/addons/mod/assign/components/index/addon-mod-assign-index.html +++ b/src/addons/mod/assign/components/index/addon-mod-assign-index.html @@ -46,7 +46,8 @@ - +

{{ 'addon.mod_assign.numberofteams' | translate }}

{{ 'addon.mod_assign.numberofparticipants' | translate }}

diff --git a/src/addons/mod/assign/components/index/index.ts b/src/addons/mod/assign/components/index/index.ts index 638ba22153e..e72b848c7d6 100644 --- a/src/addons/mod/assign/components/index/index.ts +++ b/src/addons/mod/assign/components/index/index.ts @@ -54,7 +54,7 @@ import { AddonModAssignSubmissionComponent } from '../submission/submission'; }) export class AddonModAssignIndexComponent extends CoreCourseModuleMainActivityComponent implements OnInit, OnDestroy { - @ViewChild(AddonModAssignSubmissionComponent) submissionComponent?: AddonModAssignSubmissionComponent; + @ViewChild(AddonModAssignSubmissionComponent) submissionComponent?: AddonModAssignSubmissionComponent; component = AddonModAssignProvider.COMPONENT; pluginName = 'assign'; diff --git a/src/addons/mod/assign/components/submission/addon-mod-assign-submission.html b/src/addons/mod/assign/components/submission/addon-mod-assign-submission.html index 2bd756e013c..475acc689cb 100644 --- a/src/addons/mod/assign/components/submission/addon-mod-assign-submission.html +++ b/src/addons/mod/assign/components/submission/addon-mod-assign-submission.html @@ -264,7 +264,7 @@

{{ 'addon.mod_assign.userswhoneedtosubmit' | translate: {$a: ''} }}

+ *ngIf="feedback?.gradefordisplay && (!isGrading || grade.method !== 'simple')">

{{ 'addon.mod_assign.currentgrade' | translate }}

@@ -280,7 +280,7 @@

{{ 'addon.mod_assign.userswhoneedtosubmit' | translate: {$a: ''} }}

- +

{{ 'addon.mod_assign.gradeoutof' | translate: {$a: gradeInfo!.grade} }}

@@ -291,7 +291,7 @@

{{ 'addon.mod_assign.userswhoneedtosubmit' | translate: {$a: ''} }}

- +

{{ 'addon.mod_assign.grade' | translate }}

@@ -323,13 +323,13 @@

{{ 'addon.mod_assign.userswhoneedtosubmit' | translate: {$a: ''} }}

{{ 'addon.mod_assign.currentassigngrade' | translate }}

-

{{ grade.unreleasedGrade}} / {{ gradeInfo.grade }}

-

{{ grade.unreleasedGrade }}

+

{{ grade.unreleasedGrade}} / {{ gradeInfo.grade }}

+

{{ grade.unreleasedGrade }}

- +

{{ 'addon.mod_assign.currentgrade' | translate }}

@@ -393,7 +393,7 @@

{{ 'addon.mod_assign.userswhoneedtosubmit' | translate: {$a: ''} }}

+ [attr.aria-label]="grader!.fullname" [detail]="true">

{{ 'addon.mod_assign.gradedby' | translate }}

diff --git a/src/addons/mod/assign/pages/index/index.html b/src/addons/mod/assign/pages/index/index.html index 2d3f9be934f..0ee3bc5a826 100644 --- a/src/addons/mod/assign/pages/index/index.html +++ b/src/addons/mod/assign/pages/index/index.html @@ -5,7 +5,7 @@

- +

diff --git a/src/addons/mod/assign/pages/submission-list/submission-list.html b/src/addons/mod/assign/pages/submission-list/submission-list.html index 61399abfcf0..dfc60842153 100644 --- a/src/addons/mod/assign/pages/submission-list/submission-list.html +++ b/src/addons/mod/assign/pages/submission-list/submission-list.html @@ -28,7 +28,7 @@

+ [attr.aria-current]="submissions.getItemAriaCurrent(submission)" [detail]="true">

{{submission.userfullname}}

diff --git a/src/addons/mod/assign/pages/submission-list/submission-list.ts b/src/addons/mod/assign/pages/submission-list/submission-list.ts index d0a59e2e03f..a928309873c 100644 --- a/src/addons/mod/assign/pages/submission-list/submission-list.ts +++ b/src/addons/mod/assign/pages/submission-list/submission-list.ts @@ -16,7 +16,6 @@ import { Component, OnDestroy, AfterViewInit, ViewChild } from '@angular/core'; import { CoreListItemsManager } from '@classes/items-management/list-items-manager'; import { CoreRoutedItemsManagerSourcesTracker } from '@classes/items-management/routed-items-manager-sources-tracker'; import { CoreSplitViewComponent } from '@components/split-view/split-view'; -import { IonRefresher } from '@ionic/angular'; import { CoreGroupInfo } from '@services/groups'; import { CoreNavigator } from '@services/navigator'; import { CoreSites } from '@services/sites'; @@ -208,7 +207,7 @@ export class AddonModAssignSubmissionListPage implements AfterViewInit, OnDestro * * @param refresher Refresher. */ - refreshList(refresher?: IonRefresher): void { + refreshList(refresher?: HTMLIonRefresherElement): void { this.refreshAllData(true).finally(() => { refresher?.complete(); }); diff --git a/src/addons/mod/assign/pages/submission-review/submission-review.ts b/src/addons/mod/assign/pages/submission-review/submission-review.ts index 6749d9f1b6a..699ff30136f 100644 --- a/src/addons/mod/assign/pages/submission-review/submission-review.ts +++ b/src/addons/mod/assign/pages/submission-review/submission-review.ts @@ -18,7 +18,6 @@ import { CoreRoutedItemsManagerSourcesTracker } from '@classes/items-management/ import { CoreSwipeNavigationItemsManager } from '@classes/items-management/swipe-navigation-items-manager'; import { CoreCourse } from '@features/course/services/course'; import { CanLeave } from '@guards/can-leave'; -import { IonRefresher } from '@ionic/angular'; import { CoreNavigator } from '@services/navigator'; import { CoreScreen } from '@services/screen'; import { CoreDomUtils } from '@services/utils/dom'; @@ -210,7 +209,7 @@ export class AddonModAssignSubmissionReviewPage implements OnInit, OnDestroy, Ca * * @param refresher Refresher. */ - refreshSubmission(refresher?: IonRefresher): void { + refreshSubmission(refresher?: HTMLIonRefresherElement): void { this.refreshAllData().finally(() => { refresher?.complete(); }); diff --git a/src/addons/mod/assign/services/assign-offline.ts b/src/addons/mod/assign/services/assign-offline.ts index e275a489b8e..cf8d095f01d 100644 --- a/src/addons/mod/assign/services/assign-offline.ts +++ b/src/addons/mod/assign/services/assign-offline.ts @@ -28,6 +28,7 @@ import { SUBMISSIONS_GRADES_TABLE, SUBMISSIONS_TABLE, } from './database/assign'; +import { CoreArray } from '@singletons/array'; /** * Service to handle offline assign. @@ -86,8 +87,8 @@ export class AddonModAssignOfflineProvider { const results = await Promise.all(promises); // Flatten array. - const flatten: (AddonModAssignSubmissionsDBRecord | AddonModAssignSubmissionsGradingDBRecord)[] = - [].concat.apply([], results); + const flatten = CoreArray + .flatten(results); // Get assign id. let assignIds: number[] = flatten.map((assign) => assign.assignid); diff --git a/src/addons/mod/assign/services/handlers/prefetch.ts b/src/addons/mod/assign/services/handlers/prefetch.ts index 0cb4fc2f425..b90c16a2813 100644 --- a/src/addons/mod/assign/services/handlers/prefetch.ts +++ b/src/addons/mod/assign/services/handlers/prefetch.ts @@ -166,7 +166,7 @@ export class AddonModAssignPrefetchHandlerService extends CoreCourseActivityPref // Get intro and activity files from the submission status if it's a student. // It's ok if they were already obtained from the assignment instance, they won't be downloaded twice. - const files = canViewAllSubmissions ? + const files: CoreWSFile[] = canViewAllSubmissions ? [] : (submissionStatus.assignmentdata?.attachments?.intro || []) .concat(submissionStatus.assignmentdata?.attachments?.activity || []); diff --git a/src/addons/mod/assign/submission/comments/component/addon-mod-assign-submission-comments.html b/src/addons/mod/assign/submission/comments/component/addon-mod-assign-submission-comments.html index 157d9f52752..912151506f2 100644 --- a/src/addons/mod/assign/submission/comments/component/addon-mod-assign-submission-comments.html +++ b/src/addons/mod/assign/submission/comments/component/addon-mod-assign-submission-comments.html @@ -1,4 +1,4 @@ - +

{{plugin.name}}

{{ plugin.name }}

- +

{{ plugin.name }}

diff --git a/src/addons/mod/assign/submission/onlinetext/component/addon-mod-assign-submission-onlinetext.html b/src/addons/mod/assign/submission/onlinetext/component/addon-mod-assign-submission-onlinetext.html index 43f6b2009d1..b417a128610 100644 --- a/src/addons/mod/assign/submission/onlinetext/component/addon-mod-assign-submission-onlinetext.html +++ b/src/addons/mod/assign/submission/onlinetext/component/addon-mod-assign-submission-onlinetext.html @@ -13,7 +13,7 @@

{{ plugin.name }}

- +

{{ plugin.name }}

diff --git a/src/addons/mod/bigbluebuttonbn/components/index/index.html b/src/addons/mod/bigbluebuttonbn/components/index/index.html index 0b2dccaf494..bb1d82c2581 100644 --- a/src/addons/mod/bigbluebuttonbn/components/index/index.html +++ b/src/addons/mod/bigbluebuttonbn/components/index/index.html @@ -92,7 +92,7 @@

{{ 'addon.mod_bigbluebuttonbn.view_section_title_recordings' | translate }}< + [attr.aria-label]="(recording.expanded ? 'core.collapse' : 'core.expand') | translate" [detail]="false"> @@ -108,7 +108,7 @@

{{ 'addon.mod_bigbluebuttonbn.view_section_title_recordings' | translate }}<

{{ recording.playbackLabel }}

-

{{ playback.name }}

diff --git a/src/addons/mod/bigbluebuttonbn/pages/index/index.html b/src/addons/mod/bigbluebuttonbn/pages/index/index.html index 273ff5994da..506ef400b0d 100644 --- a/src/addons/mod/bigbluebuttonbn/pages/index/index.html +++ b/src/addons/mod/bigbluebuttonbn/pages/index/index.html @@ -5,7 +5,7 @@

- +

diff --git a/src/addons/mod/book/components/index/addon-mod-book-index.html b/src/addons/mod/book/components/index/addon-mod-book-index.html index 89b4c085b82..4d62979c4b9 100644 --- a/src/addons/mod/book/components/index/addon-mod-book-index.html +++ b/src/addons/mod/book/components/index/addon-mod-book-index.html @@ -20,7 +20,7 @@

{{ 'addon.mod_book.toc' | translate }}

-

diff --git a/src/addons/mod/book/components/toc/toc.html b/src/addons/mod/book/components/toc/toc.html index 7d63bbfea22..f633ab0ffab 100644 --- a/src/addons/mod/book/components/toc/toc.html +++ b/src/addons/mod/book/components/toc/toc.html @@ -14,7 +14,7 @@

{{ 'addon.mod_book.toc' | translate }}