From 3f138b8ee8bd8a67a462da809d4eefa1555dc7e9 Mon Sep 17 00:00:00 2001 From: Noel De Martin Date: Tue, 29 Nov 2022 11:35:31 +0100 Subject: [PATCH 1/3] MOBILE-4176 grades: Strip activity name --- src/core/features/grades/services/grades-helper.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core/features/grades/services/grades-helper.ts b/src/core/features/grades/services/grades-helper.ts index 77b5f52ba..81243a28d 100644 --- a/src/core/features/grades/services/grades-helper.ts +++ b/src/core/features/grades/services/grades-helper.ts @@ -36,6 +36,7 @@ import { CoreNavigator } from '@services/navigator'; import { makeSingleton, Translate } from '@singletons'; import { CoreError } from '@classes/errors/error'; import { CoreCourseHelper } from '@features/course/services/course-helper'; +import { CoreAppProvider } from '@services/app'; export const GRADES_PAGE_NAME = 'grades'; @@ -136,8 +137,15 @@ export class CoreGradesHelperProvider { row.rowclass += itemNameColumn.class.indexOf('hidden') >= 0 ? ' hidden' : ''; row.rowclass += itemNameColumn.class.indexOf('dimmed_text') >= 0 ? ' dimmed_text' : ''; - content = content.replace(/<\/span>/gi, '\n'); - content = CoreTextUtils.cleanTags(content, true); + if (useLegacyLayout) { + content = content.replace(/<\/span>/gi, '\n'); + content = CoreTextUtils.cleanTags(content); + } else { + // The activity type won't be included in the webservice response if behat is running. + content = CoreAppProvider.isAutomated() ? content : content.replace(/]+>.+?<\/span>/gi, ''); + content = CoreTextUtils.cleanTags(content, true); + } + name = 'gradeitem'; } else if (name === 'grade') { // Add the pass/fail class if present. From dba43ddaf458c906a692153ea2380e55a43381e2 Mon Sep 17 00:00:00 2001 From: Noel De Martin Date: Tue, 29 Nov 2022 11:38:16 +0100 Subject: [PATCH 2/3] MOBILE-4081 core: Improve fa-icon dev performance --- .eslintrc.js | 14 ++++++++++-- src/core/directives/fa-icon.ts | 42 +++++++++++++++++++++++++++------- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 865090c04..c2255aea6 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -103,12 +103,22 @@ const appConfig = { 'error', { selector: 'property', - modifiers: ['readonly'], + format: ['camelCase'], + }, + { + selector: 'property', + modifiers: ['public', 'readonly'], format: ['UPPER_CASE'], }, { selector: 'property', - format: ['camelCase'], + modifiers: ['protected', 'readonly'], + format: ['UPPER_CASE'], + }, + { + selector: 'property', + modifiers: ['private', 'readonly'], + format: ['UPPER_CASE'], }, { selector: 'property', diff --git a/src/core/directives/fa-icon.ts b/src/core/directives/fa-icon.ts index 9de2de27a..52e43b217 100644 --- a/src/core/directives/fa-icon.ts +++ b/src/core/directives/fa-icon.ts @@ -30,6 +30,11 @@ import { CoreConstants } from '@/core/constants'; }) export class CoreFaIconDirective implements AfterViewInit, OnChanges { + /** + * Object used to store whether icons exist or not during development. + */ + private static readonly DEV_ICONS_STATUS: Record> = {}; + @Input() name = ''; protected element: HTMLElement; @@ -89,14 +94,7 @@ export class CoreFaIconDirective implements AfterViewInit, OnChanges { const src = `assets/fonts/${font}/${library}/${iconName}.svg`; this.element.setAttribute('src', src); this.element.classList.add('faicon'); - - if (CoreConstants.BUILD.isDevelopment || CoreConstants.BUILD.isTesting) { - try { - await Http.get(src, { responseType: 'text' }).toPromise(); - } catch (error) { - this.logger.error(`Icon ${this.name} not found`); - } - } + this.validateIcon(this.name, src); } /** @@ -123,4 +121,32 @@ export class CoreFaIconDirective implements AfterViewInit, OnChanges { this.setIcon(); } + /** + * Validate that an icon exists, or show warning otherwise (only in development and testing environments). + * + * @param name Icon name. + * @param src Icon source url. + */ + private validateIcon(name: string, src: string): void { + if (!CoreConstants.BUILD.isDevelopment && !CoreConstants.BUILD.isTesting) { + return; + } + + if (!(src in CoreFaIconDirective.DEV_ICONS_STATUS)) { + CoreFaIconDirective.DEV_ICONS_STATUS[src] = Http.get(src, { responseType: 'text' }) + .toPromise() + .then(() => true) + .catch(() => false); + } + + // eslint-disable-next-line promise/catch-or-return + CoreFaIconDirective.DEV_ICONS_STATUS[src].then(exists => { + if (exists) { + return; + } + + return this.logger.error(`Icon ${name} not found`); + }); + } + } From 663bae9450a351bcb87906c4ea3d0f45d42356a3 Mon Sep 17 00:00:00 2001 From: Noel De Martin Date: Tue, 29 Nov 2022 11:39:40 +0100 Subject: [PATCH 3/3] MOBILE-4081 e2e: Increase behat timeout --- .github/workflows/acceptance.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/acceptance.yml b/.github/workflows/acceptance.yml index d49371457..d8ff19c9d 100644 --- a/.github/workflows/acceptance.yml +++ b/.github/workflows/acceptance.yml @@ -50,6 +50,7 @@ jobs: run: | export MOODLE_DOCKER_WWWROOT=$GITHUB_WORKSPACE/moodle cp $GITHUB_WORKSPACE/moodle-docker/config.docker-template.php $GITHUB_WORKSPACE/moodle/config.php + sed -i "61i\$CFG->behat_increasetimeout = 2;" $GITHUB_WORKSPACE/moodle/config.php sed -i "61i\$CFG->behat_ionic_wwwroot = 'http://moodleapp';" $GITHUB_WORKSPACE/moodle/config.php echo "define('TEST_MOD_BIGBLUEBUTTONBN_MOCK_SERVER', 'http://bbbmockserver/hash' . sha1(\$CFG->behat_wwwroot));" >> $GITHUB_WORKSPACE/moodle/config.php $GITHUB_WORKSPACE/moodle-docker/bin/moodle-docker-compose pull