diff --git a/src/addons/block/activitymodules/components/activitymodules/activitymodules.scss b/src/addons/block/activitymodules/components/activitymodules/activitymodules.scss index 6f1f7df99..c2aba2a65 100644 --- a/src/addons/block/activitymodules/components/activitymodules/activitymodules.scss +++ b/src/addons/block/activitymodules/components/activitymodules/activitymodules.scss @@ -1,13 +1,7 @@ :host { - --mod-icon-filter: brightness(0); - core-mod-icon { background: transparent; margin: 0; - --filter: var(--mod-icon-filter); + --filter: var(--module-icon-filter); } } - -:host-context(html.dark) { - --mod-icon-filter: brightness(0) invert(1); -} diff --git a/src/addons/messages/pages/discussion/discussion.html b/src/addons/messages/pages/discussion/discussion.html index 2e9ec079a..775381ad4 100644 --- a/src/addons/messages/pages/discussion/discussion.html +++ b/src/addons/messages/pages/discussion/discussion.html @@ -6,7 +6,7 @@

+ onError="this.src='assets/img/group-avatar.svg'" core-external-content role="presentation" [siteId]="siteId"> diff --git a/src/addons/messages/pages/discussion/discussion.ts b/src/addons/messages/pages/discussion/discussion.ts index 307167767..74e817bc7 100644 --- a/src/addons/messages/pages/discussion/discussion.ts +++ b/src/addons/messages/pages/discussion/discussion.ts @@ -58,7 +58,6 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView @ViewChild(IonContent) content?: IonContent; @ViewChild(CoreInfiniteLoadingComponent) infinite?: CoreInfiniteLoadingComponent; - siteId: string; protected fetching = false; protected polling?: number; protected logger: CoreLogger; @@ -79,6 +78,7 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView conversation?: AddonMessagesConversationFormatted; // The conversation object (if it exists). userId?: number; // User ID you're talking to (only if group messaging not enabled or it's a new individual conversation). currentUserId: number; + siteId: string; title?: string; showInfo = false; conversationImage?: string; diff --git a/src/addons/mod/lti/services/handlers/module.ts b/src/addons/mod/lti/services/handlers/module.ts index 574758a90..70c8ce34a 100644 --- a/src/addons/mod/lti/services/handlers/module.ts +++ b/src/addons/mod/lti/services/handlers/module.ts @@ -22,7 +22,6 @@ import { AddonModLtiHelper } from '../lti-helper'; import { AddonModLtiIndexComponent } from '../../components/index'; import { CoreModuleHandlerBase } from '@features/course/classes/module-base-handler'; import { CoreCourse } from '@features/course/services/course'; -import { CoreSites } from '@services/sites'; /** * Handler to support LTI modules. @@ -87,19 +86,6 @@ export class AddonModLtiModuleHandlerService extends CoreModuleHandlerBase imple return module?.modicon ?? modicon ?? CoreCourse.getModuleIconSrc(this.modName); } - /** - * @inheritdoc - */ - iconIsShape(module?: CoreCourseModuleData | undefined, modicon?: string | undefined): boolean | undefined { - const iconUrl = module?.modicon ?? modicon; - - if (!iconUrl) { - return true; - } - - return iconUrl.startsWith(CoreSites.getRequiredCurrentSite().siteUrl); - } - } export const AddonModLtiModuleHandler = makeSingleton(AddonModLtiModuleHandlerService); diff --git a/src/addons/mod/resource/services/handlers/module.ts b/src/addons/mod/resource/services/handlers/module.ts index 55ba7518b..2ffc361f9 100644 --- a/src/addons/mod/resource/services/handlers/module.ts +++ b/src/addons/mod/resource/services/handlers/module.ts @@ -170,14 +170,5 @@ export class AddonModResourceModuleHandlerService extends CoreModuleHandlerBase return AddonModResourceIndexComponent; } - /** - * @inheritdoc - */ - iconIsShape(module?: CoreCourseModuleData | undefined, modicon?: string | undefined): boolean | undefined { - const iconUrl = module?.modicon ?? modicon; - - return !iconUrl?.startsWith('assets/img/files_legacy/') && !iconUrl?.endsWith('.png'); - } - } export const AddonModResourceModuleHandler = makeSingleton(AddonModResourceModuleHandlerService); diff --git a/src/addons/mod/url/services/handlers/module.ts b/src/addons/mod/url/services/handlers/module.ts index 02e9c557f..a67325fdf 100644 --- a/src/addons/mod/url/services/handlers/module.ts +++ b/src/addons/mod/url/services/handlers/module.ts @@ -218,15 +218,6 @@ export class AddonModUrlModuleHandlerService extends CoreModuleHandlerBase imple return this.shouldOpenLink(module); } - /** - * @inheritdoc - */ - iconIsShape(module?: CoreCourseModuleData | undefined, modicon?: string | undefined): boolean | undefined { - const iconUrl = module?.modicon ?? modicon; - - return !iconUrl?.startsWith('assets/img/files_legacy/') && !iconUrl?.endsWith('.png'); - } - /** * Log module viewed. */ diff --git a/src/core/components/mod-icon/mod-icon.scss b/src/core/components/mod-icon/mod-icon.scss index d7a2d78b0..0be4daed3 100644 --- a/src/core/components/mod-icon/mod-icon.scss +++ b/src/core/components/mod-icon/mod-icon.scss @@ -7,7 +7,6 @@ --icon-radius: var(--module-icon-radius, var(--radius-xs)); --margin-end: 0px; --margin-vertical: 0px; - --filter: brightness(0) invert(1); margin-top: var(--margin-vertical); margin-bottom: var(--margin-vertical); @@ -22,7 +21,7 @@ &.#{$type} { background-color: var(--activity#{$type}); img { - filter: var(--filter); + filter: var(--filter, brightness(0) invert(1)); } } } diff --git a/src/core/components/mod-icon/mod-icon.ts b/src/core/components/mod-icon/mod-icon.ts index 1f4777f9a..a51788f87 100644 --- a/src/core/components/mod-icon/mod-icon.ts +++ b/src/core/components/mod-icon/mod-icon.ts @@ -17,6 +17,7 @@ import { Component, ElementRef, Input, OnChanges, OnInit, SimpleChange } from '@ import { CoreCourse } from '@features/course/services/course'; import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate'; import { CoreSites } from '@services/sites'; +import { CoreUrlUtils } from '@services/utils/url'; const assetsPath = 'assets/img/'; const fallbackModName = 'external-tool'; @@ -54,12 +55,7 @@ export class CoreModIconComponent implements OnInit, OnChanges { async ngOnInit(): Promise { if (!this.modname && this.modicon) { // Guess module from the icon url. - const matches = this.modicon.match('/theme/image.php/[^/]+/([^/]+)/[-0-9]*/'); - this.modname = (matches && matches[1]) || ''; - - if (this.modname.startsWith('mod_')) { - this.modname = this.modname.substring(4); - } + this.modname = this.getComponentNameFromIconUrl(this.modicon); } this.modNameTranslated = CoreCourse.translateModuleName(this.modname, this.fallbackTranslation); @@ -105,16 +101,15 @@ export class CoreModIconComponent implements OnInit, OnChanges { !!this.modname && !!this.componentId && !this.isLocalUrl && - !this.icon.match('/theme/image.php/[^/]+/' + this.modname + '/[-0-9]*/'); + this.getComponentNameFromIconUrl(this.icon) != this.modname; - const iconIsShape = await CoreCourseModuleDelegate.moduleIconIsShape(this.modname, this.icon); - this.noFilter = iconIsShape === false; + this.noFilter = await this.getIconNoFilter(); } /** * Icon to load on error. */ - loadFallbackIcon(): void { + async loadFallbackIcon(): Promise { this.isLocalUrl = true; const moduleName = !this.modname || CoreCourse.CORE_MODULES.indexOf(this.modname) < 0 ? fallbackModName @@ -127,7 +122,75 @@ export class CoreModIconComponent implements OnInit, OnChanges { } this.icon = path + moduleName + '.svg'; - this.noFilter = false; + this.noFilter = await this.getIconNoFilter(); + } + + /** + * Returns if the icon does not need to be filtered. + * + * @returns wether the icon does not need to be filtered. + */ + protected async getIconNoFilter(): Promise { + // Earlier 4.0, icons were never filtered. + if (this.legacyIcon) { + return true; + } + + // No icon or local icon (not legacy), filter it. + if (!this.icon || this.isLocalUrl) { + return false; + } + + // If it's an Moodle Theme icon, check if filtericon is set and use it. + if (this.icon && CoreUrlUtils.isThemeImageUrl(this.icon)) { + const iconParams = CoreUrlUtils.extractUrlParams(this.icon); + if (iconParams['filtericon'] === '1') { + return false; + } + + // filtericon was introduced in 4.2 and backported to 4.1.3 and 4.0.8. + if (this.modname && !CoreSites.getCurrentSite()?.isVersionGreaterEqualThan(['4.0.8', '4.1.3', '4.2'])) { + // If version is prior to that, check if the url is a module icon and filter it. + if (this.getComponentNameFromIconUrl(this.icon) === this.modname) { + return false; + } + } + } + + // External icons, or non monologo, do not filter. + return true; + } + + /** + * Guesses the mod name form the url. + * + * @param iconUrl Icon url. + * @returns Guessed modname. + */ + protected getComponentNameFromIconUrl(iconUrl: string): string { + if (!CoreUrlUtils.isThemeImageUrl(this.icon)) { + // Cannot be guessed. + return ''; + } + + const iconParams = CoreUrlUtils.extractUrlParams(iconUrl); + let component = iconParams['component']; + + if (!component) { + const matches = iconUrl.match('/theme/image.php/[^/]+/([^/]+)/[-0-9]*/'); + component = (matches && matches[1]) || ''; + } + + // Some invalid components (others may be added later on). + if (component === 'core' || component === 'theme') { + return ''; + } + + if (component.startsWith('mod_')) { + component = component.substring(4); + } + + return component; } } diff --git a/src/core/components/user-avatar/core-user-avatar.html b/src/core/components/user-avatar/core-user-avatar.html index e968f63c2..a63a6c316 100644 --- a/src/core/components/user-avatar/core-user-avatar.html +++ b/src/core/components/user-avatar/core-user-avatar.html @@ -1,9 +1,9 @@ - - +
- - + diff --git a/src/core/components/user-avatar/user-avatar.scss b/src/core/components/user-avatar/user-avatar.scss index d94845afb..2b6e28aa9 100644 --- a/src/core/components/user-avatar/user-avatar.scss +++ b/src/core/components/user-avatar/user-avatar.scss @@ -4,40 +4,47 @@ position: relative; width: var(--core-avatar-size); height: var(--core-avatar-size); + padding: 0px; --contact-status-size: 14px; --margin-end-on-item: 8px; --margin-vertical-on-item: 8px; + --userpicture-padding: 0px; - img { + img.userpicture { border-radius: var(--core-avatar-radius); width: var(--core-avatar-size); height: var(--core-avatar-size); max-width: var(--core-avatar-size); max-height: var(--core-avatar-size); - } - img[alt] { - text-indent: -999999px; - white-space: nowrap; - overflow: hidden; - } - img[core-external-content]:not([src]), - img[core-external-content][src=""] { - visibility: visible; - display: inline-block; - position: relative; - &:after { - border-radius: var(--core-avatar-radius); - display: block; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: url('/assets/img/user-avatar.png'); - background-size: contain; - content: ""; + padding: var(--userpicture-padding); + &[alt] { + text-indent: -999999px; + white-space: nowrap; + overflow: hidden; + } + &:not([src]), + &[src=""] { + visibility: visible; + display: inline-block; + position: relative; + margin: var(--userpicture-padding); + width: calc(var(--core-avatar-size) - var(--userpicture-padding) - var(--userpicture-padding)); + height: calc(var(--core-avatar-size) - var(--userpicture-padding) - var(--userpicture-padding)); + &:after { + border-radius: var(--core-avatar-radius); + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: url('/assets/img/user-avatar.png'); + background-size: contain; + content: ""; + } } } + &.core-bar-button-image { padding: 0; width: var(--core-header-toolbar-button-image-size); @@ -74,9 +81,10 @@ border-radius: var(--core-avatar-radius); color: var(--gray-800); font-weight: normal; - width: var(--core-avatar-size); - height: var(--core-avatar-size); + width: calc(var(--core-avatar-size) - var(--userpicture-padding) - var(--userpicture-padding)); + height: calc(var(--core-avatar-size) - var(--userpicture-padding) - var(--userpicture-padding)); font-size: calc(var(--core-avatar-size)*0.3); + margin: var(--userpicture-padding); } &.large-avatar .userinitials { diff --git a/src/core/components/user-avatar/user-avatar.ts b/src/core/components/user-avatar/user-avatar.ts index 5013019e9..bdb7bee4c 100644 --- a/src/core/components/user-avatar/user-avatar.ts +++ b/src/core/components/user-avatar/user-avatar.ts @@ -20,8 +20,8 @@ import { CoreEventObserver, CoreEvents } from '@singletons/events'; import { USER_PROFILE_PICTURE_UPDATED, CoreUserBasicData } from '@features/user/services/user'; import { CoreNavigator } from '@services/navigator'; import { CoreNetwork } from '@services/network'; -import { CoreUrl } from '@singletons/url'; import { CoreUserHelper } from '@features/user/services/user-helper'; +import { CoreUrlUtils } from '@services/utils/url'; /** * Component to display a "user avatar". @@ -78,7 +78,7 @@ export class CoreUserAvatarComponent implements OnInit, OnChanges, OnDestroy { } /** - * Listen to changes. + * @inheritdoc */ ngOnChanges(changes: { [name: string]: SimpleChange }): void { // If something change, update the fields. @@ -111,7 +111,7 @@ export class CoreUserAvatarComponent implements OnInit, OnChanges, OnDestroy { this.initials = CoreUserHelper.getUserInitials(this.user); } - if (this.initials && this.avatarUrl && CoreUrl.parse(this.avatarUrl)?.path?.startsWith('/theme/image.php')) { + if (this.initials && this.avatarUrl && CoreUrlUtils.isThemeImageUrl(this.avatarUrl)) { this.avatarUrl = undefined; } @@ -166,7 +166,7 @@ export class CoreUserAvatarComponent implements OnInit, OnChanges, OnDestroy { } /** - * Component destroyed. + * @inheritdoc */ ngOnDestroy(): void { this.pictureObserver.off(); diff --git a/src/core/features/course/services/module-delegate.ts b/src/core/features/course/services/module-delegate.ts index 920734e01..dbd4b224d 100644 --- a/src/core/features/course/services/module-delegate.ts +++ b/src/core/features/course/services/module-delegate.ts @@ -93,6 +93,7 @@ export interface CoreCourseModuleHandler extends CoreDelegateHandler { * @param module Module to get the icon from. * @param modicon The mod icon string. * @returns Whether the icon should be treated as a shape. + * @deprecated since 4.3. Now it uses platform information. This function is not used anymore. */ iconIsShape?(module?: CoreCourseModuleData, modicon?: string): Promise | boolean | undefined; @@ -415,6 +416,7 @@ export class CoreCourseModuleDelegateService extends CoreDelegate { return await this.executeFunctionOnEnabled>(modname, 'iconIsShape', [module, modicon]); diff --git a/src/core/features/grades/pages/course/course.scss b/src/core/features/grades/pages/course/course.scss index 60ff2ab0a..388f624e4 100644 --- a/src/core/features/grades/pages/course/course.scss +++ b/src/core/features/grades/pages/course/course.scss @@ -8,7 +8,6 @@ --even-cell-hover: var(--light); --icon-color: var(--gray-500); --border-color: var(--stroke); - --mod-icon-filter: brightness(0); .odd { --cell-background: var(--odd-cell-background); @@ -29,7 +28,6 @@ --even-cell-background: var(--gray-900); --even-cell-hover: var(--gray-700); --icon-color: var(--gray-200); - --mod-icon-filter: brightness(0) invert(1); } .core-grades-table { @@ -89,7 +87,7 @@ --padding: 0px; --size: 16px; background: transparent; - --filter: var(--mod-icon-filter); + --filter: var(--module-icon-filter); } diff --git a/src/core/features/login/tests/behat/snapshots/test-basic-usage-of-login-in-app-add-a-new-account-in-the-app--site-name-in-displayed-when-adding-a-new-account_13.png b/src/core/features/login/tests/behat/snapshots/test-basic-usage-of-login-in-app-add-a-new-account-in-the-app--site-name-in-displayed-when-adding-a-new-account_13.png index b5a0d1bc1..37d2871fa 100644 Binary files a/src/core/features/login/tests/behat/snapshots/test-basic-usage-of-login-in-app-add-a-new-account-in-the-app--site-name-in-displayed-when-adding-a-new-account_13.png and b/src/core/features/login/tests/behat/snapshots/test-basic-usage-of-login-in-app-add-a-new-account-in-the-app--site-name-in-displayed-when-adding-a-new-account_13.png differ diff --git a/src/core/features/mainmenu/components/user-menu-button/user-menu-button.scss b/src/core/features/mainmenu/components/user-menu-button/user-menu-button.scss index 1b47049ad..4e2aba989 100644 --- a/src/core/features/mainmenu/components/user-menu-button/user-menu-button.scss +++ b/src/core/features/mainmenu/components/user-menu-button/user-menu-button.scss @@ -1,12 +1,7 @@ -core-user-avatar { - padding: 0; -} - :host-context(ion-tabs.placement-side ion-toolbar) { display: none; } -:host-context(ion-toolbar) core-user-avatar ::ng-deep img, -:host-context(ion-tab-bar) core-user-avatar ::ng-deep img { - padding: 6px !important; +:host core-user-avatar { + --userpicture-padding: 6px !important; } diff --git a/src/core/features/question/services/question-helper.ts b/src/core/features/question/services/question-helper.ts index 2880f5cd2..aad1dd3b8 100644 --- a/src/core/features/question/services/question-helper.ts +++ b/src/core/features/question/services/question-helper.ts @@ -27,6 +27,7 @@ import { makeSingleton, Translate } from '@singletons'; import { CoreQuestion, CoreQuestionProvider, CoreQuestionQuestionParsed, CoreQuestionsAnswers } from './question'; import { CoreQuestionDelegate } from './question-delegate'; import { CoreIcons } from '@singletons/icons'; +import { CoreUrlUtils } from '@services/utils/url'; /** * Service with some common functions to handle questions. @@ -678,7 +679,7 @@ export class CoreQuestionHelperProvider { return; } - if (fileUrl.indexOf('theme/image.php') > -1 && fileUrl.indexOf('flagged') > -1) { + if (CoreUrlUtils.isThemeImageUrl(fileUrl) && fileUrl.indexOf('flagged') > -1) { // Ignore flag images. return; } diff --git a/src/core/features/rating/services/rating.ts b/src/core/features/rating/services/rating.ts index a607e75ea..69fca017c 100644 --- a/src/core/features/rating/services/rating.ts +++ b/src/core/features/rating/services/rating.ts @@ -256,7 +256,7 @@ export class CoreRatingProvider { const response = await site.read('core_rating_get_item_ratings', params, preSets); - if (!site.isVersionGreaterEqualThan([' 3.6.5', '3.7.1', '3.8'])) { + if (!site.isVersionGreaterEqualThan(['3.6.5', '3.7.1', '3.8'])) { // MDL-65042 We need to fetch profiles because the returned profile pictures are incorrect. const promises = response.ratings.map((rating: CoreRatingItemRating) => CoreUser.getProfile(rating.userid, courseId, true, site.id).then((user) => { @@ -407,7 +407,7 @@ export class CoreRatingProvider { const ratingsResults = await Promise.all(promises); - if (!site.isVersionGreaterEqualThan([' 3.6.5', '3.7.1', '3.8'])) { + if (!site.isVersionGreaterEqualThan(['3.6.5', '3.7.1', '3.8'])) { const ratings: CoreRatingItemRating[] = [].concat.apply([], ratingsResults); const userIds = ratings.map((rating) => rating.userid); diff --git a/src/core/features/search/components/global-search-result/global-search-result.scss b/src/core/features/search/components/global-search-result/global-search-result.scss index 824d1823c..ccfbe4d05 100644 --- a/src/core/features/search/components/global-search-result/global-search-result.scss +++ b/src/core/features/search/components/global-search-result/global-search-result.scss @@ -4,7 +4,6 @@ --core-global-search-result-content-color: var(--gray-700); --core-global-search-result-context-color: var(--gray-600); --core-global-search-result-icon-size: 16px; - --mod-icon-filter: brightness(0); h3 { font-size: 16px; @@ -14,7 +13,7 @@ core-mod-icon { --size: var(--core-global-search-result-icon-size); - --filter: var(--mod-icon-filter); + --filter: var(--module-icon-filter); margin-inline-end: var(--spacing-2); margin-top: 0px; @@ -101,5 +100,4 @@ :host-context(html.dark) ion-item { --core-global-search-result-content-color: var(--gray-400); --core-global-search-result-context-color: var(--gray-500); - --mod-icon-filter: brightness(0) invert(1); } diff --git a/src/core/features/user/pages/about/about.ts b/src/core/features/user/pages/about/about.ts index bf18c2907..a43734ce4 100644 --- a/src/core/features/user/pages/about/about.ts +++ b/src/core/features/user/pages/about/about.ts @@ -33,6 +33,7 @@ import { CoreSite } from '@classes/site'; import { CoreFileUploaderHelper } from '@features/fileuploader/services/fileuploader-helper'; import { CoreMimetypeUtils } from '@services/utils/mimetype'; import { Translate } from '@singletons'; +import { CoreUrlUtils } from '@services/utils/url'; /** * Page that displays info about a user. @@ -247,7 +248,7 @@ export class CoreUserAboutPage implements OnInit, OnDestroy { return 'undefined'; } - if (avatarUrl.startsWith(`${this.site?.siteUrl}/theme/image.php`)) { + if (CoreUrlUtils.isThemeImageUrl(avatarUrl, this.site?.siteUrl)) { return 'default'; } diff --git a/src/core/features/user/services/user.ts b/src/core/features/user/services/user.ts index 3cb7203ee..c18a6034f 100644 --- a/src/core/features/user/services/user.ts +++ b/src/core/features/user/services/user.ts @@ -27,7 +27,7 @@ import { CoreStatusWithWarningsWSResponse, CoreWSExternalWarning } from '@servic import { CoreError } from '@classes/errors/error'; import { USERS_TABLE_NAME, CoreUserDBRecord } from './database/user'; import { CoreUserHelper } from './user-helper'; -import { CoreUrl } from '@singletons/url'; +import { CoreUrlUtils } from '@services/utils/url'; const ROOT_CACHE_KEY = 'mmUser:'; @@ -671,7 +671,7 @@ export class CoreUserProvider { // Do not prefetch when initials are set and image is default. if ('firstname' in entry || 'lastname' in entry) { const initials = CoreUserHelper.getUserInitials(entry); - if (initials && imageUrl && CoreUrl.parse(imageUrl)?.path === '/theme/image.php') { + if (initials && imageUrl && CoreUrlUtils.isThemeImageUrl(imageUrl)) { return; } } diff --git a/src/core/services/utils/url.ts b/src/core/services/utils/url.ts index f04f7c922..149630ec6 100644 --- a/src/core/services/utils/url.ts +++ b/src/core/services/utils/url.ts @@ -493,11 +493,16 @@ export class CoreUrlUtilsProvider { /** * Returns if a URL is a theme image URL. * - * @param url The URL to test. + * @param imageUrl The URL to test. + * @param siteUrl The Site Url. * @returns Whether the URL is a theme image URL. */ - isThemeImageUrl(url: string): boolean { - return url?.indexOf('/theme/image.php') !== -1; + isThemeImageUrl(imageUrl: string, siteUrl?: string): boolean { + if (siteUrl) { + return imageUrl.startsWith(`${siteUrl}/theme/image.php`); + } + + return imageUrl?.indexOf('/theme/image.php') !== -1; } /** diff --git a/src/theme/theme.base.scss b/src/theme/theme.base.scss index 18d615a3a..58cbb603c 100644 --- a/src/theme/theme.base.scss +++ b/src/theme/theme.base.scss @@ -980,6 +980,7 @@ ion-content.limited-width > :not([slot]) { ion-toolbar h1 img.core-bar-button-image, ion-toolbar h1 .core-bar-button-image img { padding: 4px; + --userpicture-padding: 4px; width: var(--core-header-toolbar-button-image-size); height: var(--core-header-toolbar-button-image-size); max-width: var(--core-header-toolbar-button-image-size); diff --git a/src/theme/theme.dark.scss b/src/theme/theme.dark.scss index c4d0def6c..2ee8044b2 100644 --- a/src/theme/theme.dark.scss +++ b/src/theme/theme.dark.scss @@ -130,6 +130,8 @@ html.dark { --core-login-input-background: var(--core-login-background); --core-login-input-color: var(--core-login-text-color); + --module-icon-filter: brightness(0) invert(1); + --core-question-correct-color: var(--success-tint); --core-question-correct-color-bg: var(--success-shade); --core-question-incorrect-color: var(--danger); diff --git a/src/theme/theme.light.scss b/src/theme/theme.light.scss index cfe8b4574..2077ad9d7 100644 --- a/src/theme/theme.light.scss +++ b/src/theme/theme.light.scss @@ -352,6 +352,8 @@ html { --core-messages-discussion-badge: var(--primary); --core-messages-discussion-badge-text: var(--white); + --module-icon-filter: brightness(0); + --addon-forum-avatar-size: var(--core-avatar-size); --addon-forum-border-color: var(--stroke); --addon-forum-highlight-color: var(--light);