From 28a9f770e67ff3c7a80c21a3381d2d7c60344e38 Mon Sep 17 00:00:00 2001 From: Florent Poittevin <florent.poittevin@unige.ch> Date: Fri, 18 Feb 2022 14:55:56 +0100 Subject: [PATCH 1/2] =?UTF-8?q?=EF=BB=BFfeat:=20[DLCM-2111]=20manage=20dar?= =?UTF-8?q?k=20mode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/app.component.html | 4 +- src/app/app.component.scss | 16 +++++- src/app/app.module.ts | 4 +- .../container/footer/footer.container.html | 2 +- .../container/footer/footer.container.scss | 21 ++++++- .../container/footer/footer.container.ts | 2 + ...y-policy-terms-of-use-approval.dialog.html | 3 +- .../components/dialogs/user/user.dialog.html | 1 + .../components/dialogs/user/user.dialog.scss | 10 +++- .../abstract-main-toolbar.presentational.ts | 57 ++++++++++++++----- ...bar-desktop-horizontal.presentational.html | 4 +- ...bar-desktop-horizontal.presentational.scss | 27 ++++----- .../main-toolbar-mobile.presentational.html | 5 +- .../main-toolbar.presentational.html | 8 ++- .../main-toolbar.presentational.ts | 15 ++++- .../user-menu/user-menu.presentational.html | 5 +- .../user-menu/user-menu.presentational.ts | 23 +++++++- .../admin-language-create-edit.dialog.html | 1 + ...al-fields-detail-create-update.dialog.html | 1 + ...-unit-additional-fields-rename.dialog.html | 1 + ...in-research-domain-create-edit.dialog.html | 1 + ...in-user-edit-role-current-user.dialog.html | 1 + .../deposit-file/deposit-file.container.scss | 16 +++++- .../deposit-aip-upload.dialog.html | 11 ++-- .../deposit-aip-upload.dialog.scss | 44 +++++++++----- ...osit-file-change-data-category.dialog.html | 1 + .../deposit-file-move.dialog.html | 1 + .../deposit-file-upload-archive.dialog.html | 1 + .../deposit-file-upload.dialog.html | 4 +- .../deposit-file-upload.dialog.scss | 12 ++++ .../deposit-order-author.dialog.html | 1 + .../deposit-person-alternative.dialog.html | 1 + .../deposit-person-alternative.dialog.scss | 16 +++++- .../deposit-person/deposit-person.dialog.html | 1 + .../deposit-reject/deposit-reject.dialog.html | 1 + .../deposit-form.presentational.scss | 19 ++++++- .../deposit-list/deposit-list.routable.scss | 21 ++++++- ...icted-request-access-dialog.component.html | 1 + .../home-archive-detail.presentational.scss | 21 ++++++- ...home-main-page-content.presentational.scss | 6 +- .../home-partners.presentational.scss | 13 ++++- .../home-rss-wrapper.presentational.scss | 2 +- .../home-search-bar.presentational.scss | 5 +- .../home-search-facet.presentational.scss | 6 ++ .../home-twitter-widget.presentational.scss | 2 + .../home-twitter-widget.presentational.ts | 31 +++++++--- .../home-tweeter-wrapper.presentational.ts | 4 +- .../home-page/home-page.routable.scss | 9 +-- .../home/models/twitter-widget.model.ts | 1 + .../order-all-order-form.presentational.scss | 2 +- .../order-all-order-detail-edit.routable.scss | 3 +- .../order-my-order.presentational.scss | 6 ++ ...nizational-unit-request-access.dialog.html | 1 + ...zational-unit-request-creation.dialog.html | 1 + src/app/icons.ts | 7 ++- src/app/label-translate-solidify.ts | 2 + ...ed-file-and-aip-information.container.scss | 27 +++++++++ ...shared-image-upload-wrapper.container.scss | 6 ++ ...d-table-person-orgunit-role.container.scss | 26 ++++++++- .../shared-userguide-sidebar.container.scss | 24 +++++++- .../shared-upload-image.dialog.html | 1 + .../shared-archive-tile.presentational.scss | 6 +- .../shared-checksum-item.presentational.scss | 7 +++ .../shared-folder-tree.presentational.scss | 18 +++++- ...red-abstract-file-aip-detail.routable.scss | 6 +- src/app/shared/enums/icon-name.enum.ts | 1 + src/app/shared/enums/label-translate.enum.ts | 2 + .../shared-aip-approve-disposal.dialog.html | 1 + .../shared-aip-extend-retention.dialog.html | 1 + src/app/stores/app.state.ts | 5 +- src/assets/highlightjs/dark.css | 10 ++++ src/assets/highlightjs/light.css | 10 ++++ src/assets/i18n/de.json | 9 ++- src/assets/i18n/en.json | 9 ++- src/assets/i18n/fr.json | 13 +++-- src/assets/language-icons/de.svg | 1 - src/assets/language-icons/en.svg | 1 - src/assets/language-icons/fr.svg | 1 - src/sass/abstracts/_variables.scss | 8 +++ src/sass/main.scss | 6 +- src/sass/override/dark-mode-override.scss | 6 ++ src/sass/override/material-override.scss | 5 +- src/sass/themes/basic-theme.scss | 8 --- src/sass/themes/centella-theme.scss | 20 ++++++- src/sass/themes/dlcm-theme.scss | 20 ++++++- src/sass/themes/olos-theme.scss | 20 ++++++- src/sass/themes/yareta-theme.scss | 20 ++++++- 87 files changed, 640 insertions(+), 143 deletions(-) create mode 100644 src/assets/highlightjs/dark.css create mode 100644 src/assets/highlightjs/light.css delete mode 100644 src/assets/language-icons/de.svg delete mode 100644 src/assets/language-icons/en.svg delete mode 100644 src/assets/language-icons/fr.svg create mode 100644 src/sass/override/dark-mode-override.scss delete mode 100644 src/sass/themes/basic-theme.scss diff --git a/src/app/app.component.html b/src/app/app.component.html index 106c22a85..c25ffd933 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -26,8 +26,9 @@ (navigateChange)="navigate($event)" (searchChange)="search($event)" (themeChange)="themeChange($event)" + (darkModeChange)="darkThemeChange($event)" (userGuideOpen)="openUserGuideSidebar()" - [currentLanguage]="appLanguageObs | async" + [language]="appLanguageObs | async" [currentPath]="currentModule" [displayCart]="displayCart" [isHomePage]="isHomePage" @@ -38,6 +39,7 @@ [numberPendingRequestNotificationInbox]="numberPendingRequestNotificationInboxObs | async" [photoUser]="currentPhotoUserObs | async" [theme]="themeObs | async" + [darkMode]="darkModeObs | async" [userRoles]="userRolesObs | async" [user]="currentUserObs | async" > diff --git a/src/app/app.component.scss b/src/app/app.component.scss index 3c31dd84f..6c67a5d78 100644 --- a/src/app/app.component.scss +++ b/src/app/app.component.scss @@ -91,8 +91,18 @@ } } -:host-context(body[theme='olos']) { - .breadcrumb-banner-wrapper { - background-color: $background-grey; +@include isInDarkMode { + .app-wrapper { + .header { + .breadcrumb-banner-wrapper { + background-color: $dark-mode-toolbar; + } + } + } + + .spinner-general-wrapper { + > .spinner-background { + background-color: $dark-mode-background; + } } } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index a6371bbb9..6f4451a29 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -99,6 +99,7 @@ import { HIGHLIGHT_OPTIONS, HighlightModule, } from "ngx-highlightjs"; +import {HighlightOptions} from "ngx-highlightjs/lib/highlight.model"; import { TourMatMenuModule, TourService, @@ -322,7 +323,8 @@ export const HttpLoaderFactory: (http: HttpClient) => HttpTranslateLoaderExtra = xml: () => import("highlight.js/lib/languages/xml"), json: () => import("highlight.js/lib/languages/json"), }, - }, + themePath: "assets/highlightjs", + } as HighlightOptions, }, ], bootstrap: [AppComponent], diff --git a/src/app/components/container/footer/footer.container.html b/src/app/components/container/footer/footer.container.html index 3b0ff9b9c..77ce5234f 100644 --- a/src/app/components/container/footer/footer.container.html +++ b/src/app/components/container/footer/footer.container.html @@ -25,7 +25,7 @@ target="_blank" >University of Geneva</a> - <solidify-icon [iconName]="iconNameEnum.unigeBlack" + <solidify-icon [iconName]="(darkModeObs | async) ? iconNameEnum.unigeWhite : iconNameEnum.unigeBlack" class="size-20 unige" ></solidify-icon> </div> diff --git a/src/app/components/container/footer/footer.container.scss b/src/app/components/container/footer/footer.container.scss index 5621749a0..c15f8fcdd 100644 --- a/src/app/components/container/footer/footer.container.scss +++ b/src/app/components/container/footer/footer.container.scss @@ -14,7 +14,6 @@ $color-text: $grey; align-items: center; z-index: $z-index-footer; - .left, .right { display: grid; @@ -38,7 +37,6 @@ $color-text: $grey; //display: none; } } - } .copyrights { @@ -98,3 +96,22 @@ $color-text: $grey; } } + +@include isInDarkMode { + background-color: $dark-mode-toolbar; + color: $dark-mode-text-color; + + .copyrights { + a { + color: $dark-mode-text-color; + } + } + + .right { + .toc { + ::ng-deep .open-button { + color: $dark-mode-text-color; + } + } + } +} diff --git a/src/app/components/container/footer/footer.container.ts b/src/app/components/container/footer/footer.container.ts index e402da58e..fa7fe4db5 100644 --- a/src/app/components/container/footer/footer.container.ts +++ b/src/app/components/container/footer/footer.container.ts @@ -28,6 +28,7 @@ import { Output, } from "@angular/core"; import {appActionNameSpace} from "@app/stores/app.action"; +import {AppState} from "@app/stores/app.state"; import {AppTocState} from "@app/stores/toc/app-toc.state"; import {Store} from "@ngxs/store"; import {SharedAbstractContainer} from "@shared/components/containers/shared-abstract/shared-abstract.container"; @@ -54,6 +55,7 @@ export class FooterContainer extends SharedAbstractContainer { integrationGuideObs: Observable<string> = MemoizedUtil.select(this._store, AppTocState, state => state.integrationGuide); apisObs: Observable<string> = MemoizedUtil.select(this._store, AppTocState, state => state.apis); userDocumentationObs: Observable<string> = MemoizedUtil.select(this._store, AppTocState, state => state.userDocumentation); + darkModeObs: Observable<boolean> = MemoizedUtil.select(this._store, AppState, state => state.darkMode); @Input() updateVersion: string | undefined; diff --git a/src/app/components/dialogs/privacy-policy-terms-of-use-approval/privacy-policy-terms-of-use-approval.dialog.html b/src/app/components/dialogs/privacy-policy-terms-of-use-approval/privacy-policy-terms-of-use-approval.dialog.html index 9af4abcc1..e32969907 100644 --- a/src/app/components/dialogs/privacy-policy-terms-of-use-approval/privacy-policy-terms-of-use-approval.dialog.html +++ b/src/app/components/dialogs/privacy-policy-terms-of-use-approval/privacy-policy-terms-of-use-approval.dialog.html @@ -1,5 +1,5 @@ <solidify-base-action-dialog [titleToTranslate]="'app.privacy-policy-terms-of-use-approval.dialog.title' | translate" - solidifyFocusFirstElement + solidifyFocusFirstElement > <span>{{'app.privacy-policy-terms-of-use-approval.dialog.link' | translate}}</span> <form (ngSubmit)="onSubmit()" @@ -32,6 +32,7 @@ > <button [mat-dialog-close]="" mat-button + color="primary" >{{labelTranslateEnum.close | translate}} </button> <button (click)="onSubmit()" diff --git a/src/app/components/dialogs/user/user.dialog.html b/src/app/components/dialogs/user/user.dialog.html index 9792fcda9..e39e1a7e6 100644 --- a/src/app/components/dialogs/user/user.dialog.html +++ b/src/app/components/dialogs/user/user.dialog.html @@ -42,6 +42,7 @@ <div mat-dialog-actions> <button [mat-dialog-close]="" mat-button + color="primary" >{{labelTranslateEnum.close | translate}}</button> <button (click)="validate()" (onEnter)="validate()" diff --git a/src/app/components/dialogs/user/user.dialog.scss b/src/app/components/dialogs/user/user.dialog.scss index 6ac475e12..a5c48d9c5 100644 --- a/src/app/components/dialogs/user/user.dialog.scss +++ b/src/app/components/dialogs/user/user.dialog.scss @@ -1,4 +1,4 @@ -@import "src/sass/abstracts/abstracts"; +@import "abstracts/abstracts"; :host { .dialog-body { @@ -34,3 +34,11 @@ } } } + +@include isInDarkMode { + .dialog-body { + .title { + border-bottom-color: $dark-mode-line; + } + } +} diff --git a/src/app/components/presentationals/main-toolbar/abstract-main-toolbar/abstract-main-toolbar.presentational.ts b/src/app/components/presentationals/main-toolbar/abstract-main-toolbar/abstract-main-toolbar.presentational.ts index e3e34e6f7..9c4957da1 100644 --- a/src/app/components/presentationals/main-toolbar/abstract-main-toolbar/abstract-main-toolbar.presentational.ts +++ b/src/app/components/presentationals/main-toolbar/abstract-main-toolbar/abstract-main-toolbar.presentational.ts @@ -50,6 +50,7 @@ import { ObservableUtil, SOLIDIFY_CONSTANTS, } from "solidify-frontend"; +import LanguageEnum = Enums.Language.LanguageEnum; @Directive() export abstract class AbstractMainToolbarPresentational extends SharedAbstractPresentational { @@ -59,9 +60,6 @@ export abstract class AbstractMainToolbarPresentational extends SharedAbstractPr @Input() currentPath: string; - @Input() - currentLanguage: Enums.Language.LanguageEnum; - @Input() user: User; @@ -84,10 +82,15 @@ export abstract class AbstractMainToolbarPresentational extends SharedAbstractPr // Theme private readonly _themeBS: BehaviorSubject<ThemeEnum | undefined> = new BehaviorSubject<ThemeEnum | undefined>(undefined); - @Output("themeChange") readonly themeObs: Observable<ThemeEnum | undefined> = ObservableUtil.asObservable(this._themeBS); + // Dark mode + private readonly _darkModeBS: BehaviorSubject<boolean | undefined> = new BehaviorSubject<boolean | undefined>(undefined); + + @Output("darkModeChange") + readonly darkModeObs: Observable<boolean | undefined> = ObservableUtil.asObservable(this._darkModeBS); + isProduction: boolean = environment.production; isDemoMode: boolean = environment.isDemoMode; isOpen: boolean = false; @@ -109,15 +112,49 @@ export abstract class AbstractMainToolbarPresentational extends SharedAbstractPr this._theme = theme; } + private get _language(): LanguageEnum | undefined { + return this._languageBS.getValue(); + } + + private set _language(value: LanguageEnum | undefined) { + this._languageBS.next(value); + } + + get language(): LanguageEnum | undefined { + return this._language; + } + + @Input() + set language(language: LanguageEnum | undefined) { + this._language = language; + } + + private get _darkMode(): boolean | undefined { + return this._darkModeBS.getValue(); + } + + private set _darkMode(value: boolean | undefined) { + this._darkModeBS.next(value); + } + + get darkMode(): boolean | undefined { + return this._darkMode; + } + + @Input() + set darkMode(darkMode: boolean | undefined) { + this._darkMode = darkMode; + } + // Navigate protected readonly _navigateBS: BehaviorSubject<string | undefined> = new BehaviorSubject<string | undefined>(undefined); @Output("navigateChange") readonly navigateObs: Observable<string | undefined> = ObservableUtil.asObservable(this._navigateBS); // Language - private readonly _languageBS: BehaviorSubject<Enums.Language.LanguageEnum | undefined> = new BehaviorSubject<Enums.Language.LanguageEnum | undefined>(undefined); + private readonly _languageBS: BehaviorSubject<LanguageEnum | undefined> = new BehaviorSubject<LanguageEnum | undefined>(undefined); @Output("languageChange") - readonly languageObs: Observable<Enums.Language.LanguageEnum | undefined> = ObservableUtil.asObservable(this._languageBS); + readonly languageObs: Observable<LanguageEnum | undefined> = ObservableUtil.asObservable(this._languageBS); // Logout private readonly _logoutBS: BehaviorSubject<void | undefined> = new BehaviorSubject<void | undefined>(undefined); @@ -222,10 +259,6 @@ export abstract class AbstractMainToolbarPresentational extends SharedAbstractPr this._navigateBS.next(path); } - useLanguage(language: Enums.Language.LanguageEnum): void { - this._languageBS.next(language); - } - toggleMenu(): void { this.isOpen = !this.isOpen; } @@ -249,10 +282,6 @@ export abstract class AbstractMainToolbarPresentational extends SharedAbstractPr logout(): void { this._logoutBS.next(); } - - navigateToInstitution(): void { - window.open(this.institutionUrl, "_blank"); - } } export interface MenuToolbar { diff --git a/src/app/components/presentationals/main-toolbar/main-toolbar-desktop-horizontal/main-toolbar-desktop-horizontal.presentational.html b/src/app/components/presentationals/main-toolbar/main-toolbar-desktop-horizontal/main-toolbar-desktop-horizontal.presentational.html index ad96fd747..615a51761 100644 --- a/src/app/components/presentationals/main-toolbar/main-toolbar-desktop-horizontal/main-toolbar-desktop-horizontal.presentational.html +++ b/src/app/components/presentationals/main-toolbar/main-toolbar-desktop-horizontal/main-toolbar-desktop-horizontal.presentational.html @@ -80,8 +80,7 @@ </solidify-icon> </button> - <solidify-language-selector (languageChange)="useLanguage($event)" - [currentLanguage]="currentLanguage" + <solidify-language-selector [(language)]="language" class="language-selector" > </solidify-language-selector> @@ -106,6 +105,7 @@ <dlcm-user-menu (logoutChange)="logout()" (userGuideOpen)="openUserGuide()" [(theme)]="theme" + [(darkMode)]="darkMode" [listMenuAdmin]="getListMenuAdmin()" [photoUser]="photoUser" [user]="user" diff --git a/src/app/components/presentationals/main-toolbar/main-toolbar-desktop-horizontal/main-toolbar-desktop-horizontal.presentational.scss b/src/app/components/presentationals/main-toolbar/main-toolbar-desktop-horizontal/main-toolbar-desktop-horizontal.presentational.scss index 4e857ee74..af279e033 100644 --- a/src/app/components/presentationals/main-toolbar/main-toolbar-desktop-horizontal/main-toolbar-desktop-horizontal.presentational.scss +++ b/src/app/components/presentationals/main-toolbar/main-toolbar-desktop-horizontal/main-toolbar-desktop-horizontal.presentational.scss @@ -1,16 +1,4 @@ -@import "src/sass/abstracts/abstracts"; - -:host-context(body[theme='dlcm']), :host-context(body[theme='olos']) { - .toolbar { - // Boilerplate for theming scss depending of environment conf - } -} - -:host-context(body[theme='olos']) { - .instance-logo { - filter: invert(100%); - } -} +@import "abstracts/abstracts"; :host { .toolbar { @@ -147,3 +135,16 @@ } } } + +@include isInDarkMode { + .toolbar { + background-color: $dark-mode-toolbar; + color: $dark-mode-text-color; + + .right-part { + .separator { + background-color: $dark-mode-line; + } + } + } +} diff --git a/src/app/components/presentationals/main-toolbar/main-toolbar-mobile/main-toolbar-mobile.presentational.html b/src/app/components/presentationals/main-toolbar/main-toolbar-mobile/main-toolbar-mobile.presentational.html index 910cbaa39..4b1539ad9 100644 --- a/src/app/components/presentationals/main-toolbar/main-toolbar-mobile/main-toolbar-mobile.presentational.html +++ b/src/app/components/presentationals/main-toolbar/main-toolbar-mobile/main-toolbar-mobile.presentational.html @@ -39,10 +39,7 @@ </ng-template> </li> <li class="language-selector-line"> - <solidify-language-selector (languageChange)="useLanguage($event)" - [currentLanguage]="currentLanguage" - > - </solidify-language-selector> + <solidify-language-selector [(language)]="language"></solidify-language-selector> </li> <ng-template [ngIfElse]="loggedOut" diff --git a/src/app/components/presentationals/main-toolbar/main-toolbar/main-toolbar.presentational.html b/src/app/components/presentationals/main-toolbar/main-toolbar/main-toolbar.presentational.html index 0c2aa7b44..026692a64 100644 --- a/src/app/components/presentationals/main-toolbar/main-toolbar/main-toolbar.presentational.html +++ b/src/app/components/presentationals/main-toolbar/main-toolbar/main-toolbar.presentational.html @@ -4,8 +4,9 @@ (navigateChange)="changeNavigate($event)" (searchChange)="search($event)" (themeChange)="changeTheme($event)" + (darkModeChange)="changeDarkMode($event)" (userGuideOpen)="openUserGuide()" - [currentLanguage]="currentLanguage" + [language]="language" [currentPath]="currentPath" [displayCart]="displayCart" [isHomePage]="isHomePage" @@ -16,6 +17,7 @@ [numberPendingRequestNotificationInbox]="numberPendingRequestNotificationInbox" [photoUser]="photoUser" [theme]="theme" + [darkMode]="darkMode" [userRoles]="userRoles" [user]="user" class="horizontal-toolbar" @@ -27,13 +29,15 @@ (logoutChange)="logout()" (navigateChange)="changeNavigate($event)" (themeChange)="changeTheme($event)" - [currentLanguage]="currentLanguage" + (darkModeChange)="changeDarkMode($event)" + [language]="language" [currentPath]="currentPath" [logged]="logged" [numberArchiveInCart]="numberArchiveInCart" [numberMyOrderReadyNew]="numberMyOrderReadyNew" [numberPendingRequestNotificationInbox]="numberPendingRequestNotificationInbox" [theme]="theme" + [darkMode]="darkMode" [userRoles]="userRoles" class="mobile-toolbar" > diff --git a/src/app/components/presentationals/main-toolbar/main-toolbar/main-toolbar.presentational.ts b/src/app/components/presentationals/main-toolbar/main-toolbar/main-toolbar.presentational.ts index 7b44b624e..374f21846 100644 --- a/src/app/components/presentationals/main-toolbar/main-toolbar/main-toolbar.presentational.ts +++ b/src/app/components/presentationals/main-toolbar/main-toolbar/main-toolbar.presentational.ts @@ -51,7 +51,7 @@ export class MainToolbarPresentational extends SharedAbstractPresentational { currentPath: string; @Input() - currentLanguage: Enums.Language.LanguageEnum; + language: Enums.Language.LanguageEnum; @Input() userRoles: Enums.UserApplicationRole.UserApplicationRoleEnum[]; @@ -74,6 +74,9 @@ export class MainToolbarPresentational extends SharedAbstractPresentational { @Input() theme: ThemeEnum; + @Input() + darkMode: boolean; + @Input() logo: string; @@ -87,6 +90,10 @@ export class MainToolbarPresentational extends SharedAbstractPresentational { @Output("themeChange") readonly themeObs: Observable<ThemeEnum | undefined> = ObservableUtil.asObservable(this._themeBS); + private readonly _darkModeBS: BehaviorSubject<boolean | undefined> = new BehaviorSubject<boolean | undefined>(undefined); + @Output("darkModeChange") + readonly darkModeObs: Observable<boolean | undefined> = ObservableUtil.asObservable(this._darkModeBS); + // Navigate private readonly _navigateBS: BehaviorSubject<string | undefined> = new BehaviorSubject<string | undefined>(undefined); @Output("navigateChange") @@ -123,6 +130,12 @@ export class MainToolbarPresentational extends SharedAbstractPresentational { } } + changeDarkMode(darkMode: boolean): void { + if (this._darkModeBS.value !== darkMode) { + this._darkModeBS.next(darkMode); + } + } + changeLanguage(language: Enums.Language.LanguageEnum): void { if (this._languageBS.value !== language) { this._languageBS.next(language); diff --git a/src/app/components/presentationals/user-menu/user-menu.presentational.html b/src/app/components/presentationals/user-menu/user-menu.presentational.html index 53710881f..102eed51f 100644 --- a/src/app/components/presentationals/user-menu/user-menu.presentational.html +++ b/src/app/components/presentationals/user-menu/user-menu.presentational.html @@ -67,12 +67,11 @@ </button> <button (click)="toggleDarkMode()" (onEnter)="toggleDarkMode()" - [disabled]="true" mat-menu-item solidifyShortCuts > - <solidify-icon [iconName]="iconNameEnum.darkMode"></solidify-icon> - <span>{{'app.module.darkMode' | translate}}</span> + <solidify-icon [iconName]="darkMode ? iconNameEnum.lightMode : iconNameEnum.darkMode"></solidify-icon> + <span>{{(darkMode ? labelTranslateEnum.lightMode : labelTranslateEnum.darkMode) | translate}}</span> </button> <button (click)="logout()" mat-menu-item diff --git a/src/app/components/presentationals/user-menu/user-menu.presentational.ts b/src/app/components/presentationals/user-menu/user-menu.presentational.ts index fd85d5450..5bdf873ff 100644 --- a/src/app/components/presentationals/user-menu/user-menu.presentational.ts +++ b/src/app/components/presentationals/user-menu/user-menu.presentational.ts @@ -80,6 +80,23 @@ export class UserMenuPresentational extends SharedAbstractPresentational { this._theme = theme; } + private get _darkMode(): boolean | undefined { + return this._darkModeChangeBS.getValue(); + } + + private set _darkMode(value: boolean | undefined) { + this._darkModeChangeBS.next(value); + } + + get darkMode(): boolean | undefined { + return this._darkMode; + } + + @Input() + set darkMode(darkMode: boolean | undefined) { + this._darkMode = darkMode; + } + @Input() listMenuAdmin: MenuToolbar[]; @@ -100,6 +117,10 @@ export class UserMenuPresentational extends SharedAbstractPresentational { @Output("themeChange") readonly themeChangeObs: Observable<ThemeEnum | undefined> = ObservableUtil.asObservable(this._themeChangeBS); + private readonly _darkModeChangeBS: BehaviorSubject<boolean | undefined> = new BehaviorSubject<boolean | undefined>(undefined); + @Output("darkModeChange") + readonly darkModeChangeObs: Observable<boolean | undefined> = ObservableUtil.asObservable(this._darkModeChangeBS); + constructor(private readonly _dialog: MatDialog) { super(); } @@ -130,6 +151,6 @@ export class UserMenuPresentational extends SharedAbstractPresentational { } toggleDarkMode(): void { - + this._darkModeChangeBS.next(!this._darkModeChangeBS.value); } } diff --git a/src/app/features/admin/language/components/dialogs/admin-language-create-edit/admin-language-create-edit.dialog.html b/src/app/features/admin/language/components/dialogs/admin-language-create-edit/admin-language-create-edit.dialog.html index fbea1a2b2..4ae5b145c 100644 --- a/src/app/features/admin/language/components/dialogs/admin-language-create-edit/admin-language-create-edit.dialog.html +++ b/src/app/features/admin/language/components/dialogs/admin-language-create-edit/admin-language-create-edit.dialog.html @@ -14,6 +14,7 @@ <button [mat-dialog-close]="" [solidifyAutoFocus]="true" mat-button + color="primary" > {{KEY_CANCEL_BUTTON | translate}} </button> diff --git a/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog.html b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog.html index 4ec3c2cff..23e927e13 100644 --- a/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog.html +++ b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog.html @@ -14,6 +14,7 @@ <button [mat-dialog-close]="" [solidifyAutoFocus]="true" mat-button + color="primary" > {{labelTranslateEnum.close | translate}} </button> diff --git a/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-rename/admin-organizational-unit-additional-fields-rename.dialog.html b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-rename/admin-organizational-unit-additional-fields-rename.dialog.html index ac82058f5..b2644e220 100644 --- a/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-rename/admin-organizational-unit-additional-fields-rename.dialog.html +++ b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-rename/admin-organizational-unit-additional-fields-rename.dialog.html @@ -25,6 +25,7 @@ <button [mat-dialog-close]="" cdkFocusInitial mat-button + color="primary" >{{labelTranslateEnum.close | translate}} </button> <button (click)="onSubmit()" diff --git a/src/app/features/admin/research-domain/components/dialogs/admin-research-domain-create-edit/admin-research-domain-create-edit.dialog.html b/src/app/features/admin/research-domain/components/dialogs/admin-research-domain-create-edit/admin-research-domain-create-edit.dialog.html index c8ab25b88..52c9e68d6 100644 --- a/src/app/features/admin/research-domain/components/dialogs/admin-research-domain-create-edit/admin-research-domain-create-edit.dialog.html +++ b/src/app/features/admin/research-domain/components/dialogs/admin-research-domain-create-edit/admin-research-domain-create-edit.dialog.html @@ -15,6 +15,7 @@ <button [mat-dialog-close]="" [solidifyAutoFocus]="true" mat-button + color="primary" > {{KEY_CANCEL_BUTTON | translate}} </button> diff --git a/src/app/features/admin/user/components/dialogs/admin-user-edit-role-current-user/admin-user-edit-role-current-user.dialog.html b/src/app/features/admin/user/components/dialogs/admin-user-edit-role-current-user/admin-user-edit-role-current-user.dialog.html index a100ee17d..7fafe858d 100644 --- a/src/app/features/admin/user/components/dialogs/admin-user-edit-role-current-user/admin-user-edit-role-current-user.dialog.html +++ b/src/app/features/admin/user/components/dialogs/admin-user-edit-role-current-user/admin-user-edit-role-current-user.dialog.html @@ -32,6 +32,7 @@ <button [mat-dialog-close]="" [solidifyFocusFirstElement]="true" mat-button + color="primary" >{{labelTranslateEnum.cancel | translate}}</button> <button (click)="confirm()" (onEnter)="confirm()" diff --git a/src/app/features/deposit/components/containers/deposit-file/deposit-file.container.scss b/src/app/features/deposit/components/containers/deposit-file/deposit-file.container.scss index a5bad7f6b..6ad277ba4 100644 --- a/src/app/features/deposit/components/containers/deposit-file/deposit-file.container.scss +++ b/src/app/features/deposit/components/containers/deposit-file/deposit-file.container.scss @@ -1,5 +1,5 @@ @import "solidify-frontend/lib/components/routables/abstract-detail-edit-common/abstract-detail-edit-common.routable"; -@import "src/sass/abstracts/abstracts"; +@import "abstracts/abstracts"; :host { padding: 0; @@ -79,3 +79,17 @@ } } } + +@include isInDarkMode { + .header { + .left-part { + .selector-file-view-mode { + a { + &:not(.is-active) { + color: $dark-mode-text-disabled; + } + } + } + } + } +} diff --git a/src/app/features/deposit/components/dialogs/deposit-aip-upload/deposit-aip-upload.dialog.html b/src/app/features/deposit/components/dialogs/deposit-aip-upload/deposit-aip-upload.dialog.html index 585257286..c7254dab5 100644 --- a/src/app/features/deposit/components/dialogs/deposit-aip-upload/deposit-aip-upload.dialog.html +++ b/src/app/features/deposit/components/dialogs/deposit-aip-upload/deposit-aip-upload.dialog.html @@ -1,11 +1,11 @@ <solidify-base-action-dialog [titleToTranslate]="'deposit.aip.modal.title.main' | translate"> <h2>{{'deposit.aip.modal.title.search' | translate }}</h2> <solidify-search-input (valueChange)="search($event)" - [appearance]="appearanceInputMaterial" - [labelToTranslate]="labelTranslateEnum.nameLabel" - [searchAutoFocus]="false" - [value]="searchObs | async" - class="search-bar" + [appearance]="appearanceInputMaterial" + [labelToTranslate]="labelTranslateEnum.nameLabel" + [searchAutoFocus]="false" + [value]="searchObs | async" + class="search-bar" > </solidify-search-input> @@ -39,6 +39,7 @@ <button [mat-dialog-close]="" [solidifyAutoFocus]="true" mat-button + color="primary" >{{labelTranslateEnum.close | translate}} </button> <button (click)="onSubmit()" diff --git a/src/app/features/deposit/components/dialogs/deposit-aip-upload/deposit-aip-upload.dialog.scss b/src/app/features/deposit/components/dialogs/deposit-aip-upload/deposit-aip-upload.dialog.scss index 2edf8273c..08ad6a78d 100644 --- a/src/app/features/deposit/components/dialogs/deposit-aip-upload/deposit-aip-upload.dialog.scss +++ b/src/app/features/deposit/components/dialogs/deposit-aip-upload/deposit-aip-upload.dialog.scss @@ -1,19 +1,37 @@ -@import "src/sass/abstracts/abstracts"; +@import "abstracts/abstracts"; -li { - &.aip-item { - background-color: $extra-light-grey; - margin: 0; - padding: 8px 10px; - cursor: pointer; - } +:host { + li { + &.aip-item { + background-color: $extra-light-grey; + margin: 0; + padding: 8px 10px; + cursor: pointer; + } + + &:nth-child(odd) { + background-color: $extra-ultra-light-grey; + } - &:nth-child(odd) { - background-color: $extra-ultra-light-grey; + &.selected { + background-color: $primary-color; + color: $white; + } } +} + +@include isInDarkMode { + li { + &.aip-item { + background-color: $dark-mode-background; + } + + &:nth-child(odd) { + background-color: $dark-mode-toolbar; + } - &.selected { - background-color: $primary-color; - color: $white; + &.selected { + background-color: $primary-color; + } } } diff --git a/src/app/features/deposit/components/dialogs/deposit-file-change-data-category/deposit-file-change-data-category.dialog.html b/src/app/features/deposit/components/dialogs/deposit-file-change-data-category/deposit-file-change-data-category.dialog.html index 6458434fa..6603d30dc 100644 --- a/src/app/features/deposit/components/dialogs/deposit-file-change-data-category/deposit-file-change-data-category.dialog.html +++ b/src/app/features/deposit/components/dialogs/deposit-file-change-data-category/deposit-file-change-data-category.dialog.html @@ -59,6 +59,7 @@ <button [mat-dialog-close]="" cdkFocusInitial mat-button + color="primary" >{{labelTranslateEnum.close | translate}} </button> <button (click)="onSubmit()" diff --git a/src/app/features/deposit/components/dialogs/deposit-file-move/deposit-file-move.dialog.html b/src/app/features/deposit/components/dialogs/deposit-file-move/deposit-file-move.dialog.html index 0bd38cf07..96a6e7bb2 100644 --- a/src/app/features/deposit/components/dialogs/deposit-file-move/deposit-file-move.dialog.html +++ b/src/app/features/deposit/components/dialogs/deposit-file-move/deposit-file-move.dialog.html @@ -24,6 +24,7 @@ <button [mat-dialog-close]="" cdkFocusInitial mat-button + color="primary" >{{labelTranslateEnum.close | translate}} </button> <button (click)="onSubmit()" diff --git a/src/app/features/deposit/components/dialogs/deposit-file-upload-archive/deposit-file-upload-archive.dialog.html b/src/app/features/deposit/components/dialogs/deposit-file-upload-archive/deposit-file-upload-archive.dialog.html index a5493637f..6ee024e28 100644 --- a/src/app/features/deposit/components/dialogs/deposit-file-upload-archive/deposit-file-upload-archive.dialog.html +++ b/src/app/features/deposit/components/dialogs/deposit-file-upload-archive/deposit-file-upload-archive.dialog.html @@ -115,6 +115,7 @@ <button [mat-dialog-close]="" [solidifyAutoFocus]="true" mat-button + color="primary" >{{labelTranslateEnum.close | translate}} </button> <button (click)="onSubmit()" diff --git a/src/app/features/deposit/components/dialogs/deposit-file-upload/deposit-file-upload.dialog.html b/src/app/features/deposit/components/dialogs/deposit-file-upload/deposit-file-upload.dialog.html index 62cf73620..accff98f7 100644 --- a/src/app/features/deposit/components/dialogs/deposit-file-upload/deposit-file-upload.dialog.html +++ b/src/app/features/deposit/components/dialogs/deposit-file-upload/deposit-file-upload.dialog.html @@ -115,7 +115,8 @@ {{labelTranslateEnum.provideChecksums | translate}} </mat-checkbox> <div class="checksum-generated-indicator">{{labelTranslateEnum.checksums | translate}} : - <span *ngIf="formValidationHelper.getFormControl(formGroup, formDefinitionChecksum.checksumGeneratedIsLoadingCounter)?.value > 0; else noPending" + <span *ngIf="formValidationHelper.getFormControl(formGroup, formDefinitionChecksum.checksumGeneratedIsLoadingCounter)?.value > 0; else + noPending" class="calculating" > {{labelTranslateEnum.calculating | translate}} @@ -248,6 +249,7 @@ <button [mat-dialog-close]="" [solidifyAutoFocus]="true" mat-button + color="primary" >{{labelTranslateEnum.close | translate}} </button> <button (click)="onSubmit()" diff --git a/src/app/features/deposit/components/dialogs/deposit-file-upload/deposit-file-upload.dialog.scss b/src/app/features/deposit/components/dialogs/deposit-file-upload/deposit-file-upload.dialog.scss index a98dac6d0..911b29882 100644 --- a/src/app/features/deposit/components/dialogs/deposit-file-upload/deposit-file-upload.dialog.scss +++ b/src/app/features/deposit/components/dialogs/deposit-file-upload/deposit-file-upload.dialog.scss @@ -59,3 +59,15 @@ opacity: 1; } } + +@include isInDarkMode { + .expansion-panel { + .checksum-header-wrapper { + .checksum-generated-indicator { + .calculating { + background-color: $dark-mode-toolbar; + } + } + } + } +} diff --git a/src/app/features/deposit/components/dialogs/deposit-order-author/deposit-order-author.dialog.html b/src/app/features/deposit/components/dialogs/deposit-order-author/deposit-order-author.dialog.html index 12f7f0c97..abe74da23 100644 --- a/src/app/features/deposit/components/dialogs/deposit-order-author/deposit-order-author.dialog.html +++ b/src/app/features/deposit/components/dialogs/deposit-order-author/deposit-order-author.dialog.html @@ -33,6 +33,7 @@ <button [mat-dialog-close]="" [solidifyAutoFocus]="true" mat-button + color="primary" >{{labelTranslateEnum.close | translate}}</button> <button (click)="validate()" color="primary" diff --git a/src/app/features/deposit/components/dialogs/deposit-person-alternative/deposit-person-alternative.dialog.html b/src/app/features/deposit/components/dialogs/deposit-person-alternative/deposit-person-alternative.dialog.html index 8c35b2a2e..05a354ba1 100644 --- a/src/app/features/deposit/components/dialogs/deposit-person-alternative/deposit-person-alternative.dialog.html +++ b/src/app/features/deposit/components/dialogs/deposit-person-alternative/deposit-person-alternative.dialog.html @@ -52,6 +52,7 @@ <button [mat-dialog-close]="" [solidifyAutoFocus]="true" mat-button + color="primary" >{{labelTranslateEnum.close | translate}}</button> <button (click)="submit(selectedDepositPerson)" [disabled]="!selectedDepositPerson" diff --git a/src/app/features/deposit/components/dialogs/deposit-person-alternative/deposit-person-alternative.dialog.scss b/src/app/features/deposit/components/dialogs/deposit-person-alternative/deposit-person-alternative.dialog.scss index 0c6a2e1b2..2c3a7ada7 100644 --- a/src/app/features/deposit/components/dialogs/deposit-person-alternative/deposit-person-alternative.dialog.scss +++ b/src/app/features/deposit/components/dialogs/deposit-person-alternative/deposit-person-alternative.dialog.scss @@ -1,4 +1,4 @@ -@import "src/sass/abstracts/abstracts"; +@import "abstracts/abstracts"; :host { ::ng-deep { @@ -63,4 +63,18 @@ } } +@include isInDarkMode { + ::ng-deep .mat-list-item { + &:nth-child(even) { + background-color: $dark-mode-toolbar; + } + + &:focus { + background-color: $dark-mode-menu-active; + } + &.is-active { + background-color: $primary-color; + } + } +} diff --git a/src/app/features/deposit/components/dialogs/deposit-person/deposit-person.dialog.html b/src/app/features/deposit/components/dialogs/deposit-person/deposit-person.dialog.html index 5c3b1f2d4..ee8e60a3c 100644 --- a/src/app/features/deposit/components/dialogs/deposit-person/deposit-person.dialog.html +++ b/src/app/features/deposit/components/dialogs/deposit-person/deposit-person.dialog.html @@ -12,6 +12,7 @@ <button [mat-dialog-close]="" [solidifyAutoFocus]="true" mat-button + color="primary" >{{labelTranslateEnum.close | translate}}</button> <button (click)="formPresentational?.onSubmit()" [disabled]="!formPresentational?.form.valid || !formPresentational?.form.dirty || (isLoadingPersonObs | async)" diff --git a/src/app/features/deposit/components/dialogs/deposit-reject/deposit-reject.dialog.html b/src/app/features/deposit/components/dialogs/deposit-reject/deposit-reject.dialog.html index 1c6199511..60bf7a4ea 100644 --- a/src/app/features/deposit/components/dialogs/deposit-reject/deposit-reject.dialog.html +++ b/src/app/features/deposit/components/dialogs/deposit-reject/deposit-reject.dialog.html @@ -25,6 +25,7 @@ <button [mat-dialog-close]="" cdkFocusInitial mat-button + color="primary" >{{labelTranslateEnum.close | translate}} </button> <button (click)="onSubmit()" diff --git a/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.scss b/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.scss index 904464be1..84e6ba0d2 100644 --- a/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.scss +++ b/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.scss @@ -2,9 +2,7 @@ @import "abstracts/abstracts"; :host { - form { - .header { display: grid; grid-template-columns: max-content max-content; @@ -15,7 +13,6 @@ } .org-unit { - font-size: 20px; padding-bottom: 18px; white-space: nowrap; @@ -105,3 +102,19 @@ } } } + +@include isInDarkMode { + form { + .header { + .org-unit { + .label { + color: $dark-mode-text-disabled; + } + + .name { + color: $dark-mode-text-color; + } + } + } + } +} diff --git a/src/app/features/deposit/components/routables/deposit-list/deposit-list.routable.scss b/src/app/features/deposit/components/routables/deposit-list/deposit-list.routable.scss index 72e109fd7..e6d663925 100644 --- a/src/app/features/deposit/components/routables/deposit-list/deposit-list.routable.scss +++ b/src/app/features/deposit/components/routables/deposit-list/deposit-list.routable.scss @@ -1,7 +1,6 @@ @import "solidify-frontend/lib/components/routables/abstract-list/abstract-list.routable"; @import "abstracts/abstracts"; - :host { .toolbar-wrapper { display: flex; @@ -74,3 +73,23 @@ } } } + +@include isInDarkMode { + .toolbar-wrapper { + background-color: $dark-mode-background; + box-shadow: 0 0 0 $dark-mode-background, 0 -2px 0 $dark-mode-background; // avoid glitch when play with zooming on browser + + } + + .tab-header { + background-color: $dark-mode-background; + + ::ng-deep { + .mat-tab-labels { + .mat-tab-label { + color: $dark-mode-text-color; + } + } + } + } +} diff --git a/src/app/features/home/components/dialogs/archive-restricted-request-access/home-archive-restricted-request-access-dialog.component.html b/src/app/features/home/components/dialogs/archive-restricted-request-access/home-archive-restricted-request-access-dialog.component.html index 25819b327..866edc1ed 100644 --- a/src/app/features/home/components/dialogs/archive-restricted-request-access/home-archive-restricted-request-access-dialog.component.html +++ b/src/app/features/home/components/dialogs/archive-restricted-request-access/home-archive-restricted-request-access-dialog.component.html @@ -25,6 +25,7 @@ <button [mat-dialog-close]="" cdkFocusInitial mat-button + color="primary" >{{labelTranslateEnum.close | translate}} </button> <button (click)="onSubmit()" diff --git a/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.scss b/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.scss index 84467a113..5de47af17 100644 --- a/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.scss +++ b/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.scss @@ -184,7 +184,7 @@ $padding-bottom-desktop: 20px; line-height: 1.42857143; word-break: break-all; word-wrap: break-word; - background-color: #f5f5f5; + background-color: $white; border: 1px solid #ccc; border-radius: 4px; overflow-x: auto; @@ -243,3 +243,22 @@ $padding-bottom-desktop: 20px; padding-top: 20px; } } + + +@include isInDarkMode { + .shared-detail-presentation { + .image-wrapper { + border-color: $dark-mode-line; + } + + .title { + color: $dark-mode-text-color; + } + } + + .pre { + border-color: $dark-mode-line; + background-color: #0d1117; + } +} + diff --git a/src/app/features/home/components/presentationals/home-main-page-content/home-main-page-content.presentational.scss b/src/app/features/home/components/presentationals/home-main-page-content/home-main-page-content.presentational.scss index ebca9d8b8..ba7b80cfd 100644 --- a/src/app/features/home/components/presentationals/home-main-page-content/home-main-page-content.presentational.scss +++ b/src/app/features/home/components/presentationals/home-main-page-content/home-main-page-content.presentational.scss @@ -5,10 +5,10 @@ grid-template-columns: 1fr max-content; grid-gap: 20px; background-color: $extra-ultra-light-grey; - border-radius: 2px; padding: 20px; align-items: center; max-height: 420px; + border-radius: 8px; .buttons { height: 100%; @@ -30,3 +30,7 @@ } } } + +@include isInDarkMode { + background-color: $dark-mode-toolbar; +} diff --git a/src/app/features/home/components/presentationals/home-partners/home-partners.presentational.scss b/src/app/features/home/components/presentationals/home-partners/home-partners.presentational.scss index cdcd99ed8..17f04bac2 100644 --- a/src/app/features/home/components/presentationals/home-partners/home-partners.presentational.scss +++ b/src/app/features/home/components/presentationals/home-partners/home-partners.presentational.scss @@ -1,4 +1,4 @@ -@import "src/sass/abstracts/abstracts"; +@import "abstracts/abstracts"; :host { .title { @@ -73,3 +73,14 @@ } } } + +@include isInDarkMode { + .title { + border-bottom-color: $dark-mode-line; + } + + .list-logo-wrapper { + background-color: $white; + border-radius: 8px; + } +} diff --git a/src/app/features/home/components/presentationals/home-rss-wrapper/home-rss-wrapper.presentational.scss b/src/app/features/home/components/presentationals/home-rss-wrapper/home-rss-wrapper.presentational.scss index 0a2657770..5b48eaa10 100644 --- a/src/app/features/home/components/presentationals/home-rss-wrapper/home-rss-wrapper.presentational.scss +++ b/src/app/features/home/components/presentationals/home-rss-wrapper/home-rss-wrapper.presentational.scss @@ -1,4 +1,4 @@ -@import "src/sass/abstracts/abstracts"; +@import "abstracts/abstracts"; .rss-wrapper { display: flex; diff --git a/src/app/features/home/components/presentationals/home-search-bar/home-search-bar.presentational.scss b/src/app/features/home/components/presentationals/home-search-bar/home-search-bar.presentational.scss index afee336b2..57360f8c6 100644 --- a/src/app/features/home/components/presentationals/home-search-bar/home-search-bar.presentational.scss +++ b/src/app/features/home/components/presentationals/home-search-bar/home-search-bar.presentational.scss @@ -1,4 +1,4 @@ -@import "src/sass/abstracts/abstracts"; +@import "abstracts/abstracts"; :host { display: block; @@ -13,9 +13,12 @@ height: 35px; .input { + border: none; + background-color: transparent; padding-left: 20px; text-align: left; padding-top: 4px; + color: $text-color; } } } diff --git a/src/app/features/home/components/presentationals/home-search-facet/home-search-facet.presentational.scss b/src/app/features/home/components/presentationals/home-search-facet/home-search-facet.presentational.scss index 774e2c2ba..595508e50 100644 --- a/src/app/features/home/components/presentationals/home-search-facet/home-search-facet.presentational.scss +++ b/src/app/features/home/components/presentationals/home-search-facet/home-search-facet.presentational.scss @@ -105,3 +105,9 @@ $padding-left-right: 20px; } } + +@include isInDarkMode { + .panel { + background: $dark-mode-toolbar; + } +} diff --git a/src/app/features/home/components/presentationals/home-tweet-detail/home-twitter-widget.presentational.scss b/src/app/features/home/components/presentationals/home-tweet-detail/home-twitter-widget.presentational.scss index e69de29bb..9dab6e2be 100644 --- a/src/app/features/home/components/presentationals/home-tweet-detail/home-twitter-widget.presentational.scss +++ b/src/app/features/home/components/presentationals/home-tweet-detail/home-twitter-widget.presentational.scss @@ -0,0 +1,2 @@ +@import "abstracts/abstracts"; + diff --git a/src/app/features/home/components/presentationals/home-tweet-detail/home-twitter-widget.presentational.ts b/src/app/features/home/components/presentationals/home-tweet-detail/home-twitter-widget.presentational.ts index 860eb789f..059d91fd2 100644 --- a/src/app/features/home/components/presentationals/home-tweet-detail/home-twitter-widget.presentational.ts +++ b/src/app/features/home/components/presentationals/home-tweet-detail/home-twitter-widget.presentational.ts @@ -40,11 +40,17 @@ import { } from "@app/features/home/models/twitter-widget.model"; import {TwitterService} from "@app/features/home/services/twitter.service"; import {SharedAbstractPresentational} from "@app/shared/components/presentationals/shared-abstract/shared-abstract.presentational"; +import {AppState} from "@app/stores/app.state"; +import {Store} from "@ngxs/store"; import { catchError, + take, tap, } from "rxjs/operators"; -import {LoggingService} from "solidify-frontend"; +import { + LoggingService, + MemoizedUtil, +} from "solidify-frontend"; @Component({ selector: "dlcm-home-twitter-widget-presentational", @@ -75,12 +81,13 @@ export class HomeTwitterWidgetPresentational extends SharedAbstractPresentationa height: number | undefined; @Input() - chrome: TwitterChromeEnum[] = [TwitterChromeEnum.noborders]; + chrome: TwitterChromeEnum[] = [TwitterChromeEnum.noborders, TwitterChromeEnum.transparent]; constructor(private readonly _renderer: Renderer2, private readonly _element: ElementRef, private readonly _twitterService: TwitterService, private readonly _loggingService: LoggingService, + private readonly _store: Store, @Inject(WINDOW) private readonly _window: Window) { super(); } @@ -89,6 +96,7 @@ export class HomeTwitterWidgetPresentational extends SharedAbstractPresentationa // https://developer.twitter.com/en/docs/twitter-for-websites/javascript-api/guides/scripting-factory-functions this.subscribe(this._twitterService.loadScript(this._renderer) .pipe( + take(1), tap((twitterMetadata: TwitterMetadata) => { const nativeElement: Element = this._element.nativeElement; const dataSource: DataSource = { @@ -97,6 +105,7 @@ export class HomeTwitterWidgetPresentational extends SharedAbstractPresentationa userId: this.userId, }; const options: Options = { + theme: MemoizedUtil.selectSnapshot(this._store, AppState, state => state.darkMode) ? "dark" : undefined, tweetLimit: this.tweetLimit, height: this.height, chrome: this.chrome, @@ -104,11 +113,19 @@ export class HomeTwitterWidgetPresentational extends SharedAbstractPresentationa borderColor: this.borderColor, }; - twitterMetadata.widgets.createTimeline(dataSource, nativeElement, options) - .then((iframe: any) => {}) - .catch((message: string) => { - this._loggingService.logWarning("Twitter : Could not create widget", message); - }); + this.subscribe(MemoizedUtil.select(this._store, AppState, state => state.darkMode).pipe( + tap(enabled => { + const list: NodeList = this._element.nativeElement.querySelectorAll("iframe"); + list.forEach(node => { + this._element.nativeElement.removeChild(node); + }); + options.theme = enabled ? "dark" : undefined; + twitterMetadata.widgets.createTimeline(dataSource, nativeElement, options) + .then((iframe: any) => {}) + .catch((message: string) => { + this._loggingService.logWarning("Twitter : Could not create widget", message); + }); + }))); }), catchError((err: any) => { this._loggingService.logWarning("Twitter : Error loading twitter widget", err); diff --git a/src/app/features/home/components/presentationals/home-tweet-wrapper/home-tweeter-wrapper.presentational.ts b/src/app/features/home/components/presentationals/home-tweet-wrapper/home-tweeter-wrapper.presentational.ts index 84f5e90da..45a2c4134 100644 --- a/src/app/features/home/components/presentationals/home-tweet-wrapper/home-tweeter-wrapper.presentational.ts +++ b/src/app/features/home/components/presentationals/home-tweet-wrapper/home-tweeter-wrapper.presentational.ts @@ -28,7 +28,7 @@ import { import {TwitterChromeEnum} from "@app/features/home/enums/twitter-chrome.enum"; import {TwitterSourceTypeEnum} from "@app/features/home/enums/twitter-source-type.enum"; import {SharedAbstractPresentational} from "@app/shared/components/presentationals/shared-abstract/shared-abstract.presentational"; -import {environment} from "../../../../../../environments/environment"; +import {environment} from "@environments/environment"; @Component({ selector: "dlcm-home-twitter-wrapper-presentational", @@ -40,5 +40,5 @@ export class HomeTwitterWrapperPresentational extends SharedAbstractPresentation readonly sourceType: string = TwitterSourceTypeEnum.profile; readonly screenName: string = environment.twitterAccount; readonly tweetLimit: number = environment.twitterTweetToDisplay; - readonly chrome: TwitterChromeEnum[] = [TwitterChromeEnum.noborders]; + readonly chrome: TwitterChromeEnum[] = [TwitterChromeEnum.noborders, TwitterChromeEnum.transparent]; } diff --git a/src/app/features/home/components/routables/home-page/home-page.routable.scss b/src/app/features/home/components/routables/home-page/home-page.routable.scss index 809777af9..b0b71e43f 100644 --- a/src/app/features/home/components/routables/home-page/home-page.routable.scss +++ b/src/app/features/home/components/routables/home-page/home-page.routable.scss @@ -117,9 +117,10 @@ @include content(); } -:host-context(body[theme='election']) { - .toolbar-size-guard, - .toolbar-wrapper { - height: 600px; +@include isInDarkMode { + .news-wrapper { + > .separator { + border-color: $dark-mode-line; + } } } diff --git a/src/app/features/home/models/twitter-widget.model.ts b/src/app/features/home/models/twitter-widget.model.ts index 668048792..16fe2d520 100644 --- a/src/app/features/home/models/twitter-widget.model.ts +++ b/src/app/features/home/models/twitter-widget.model.ts @@ -36,6 +36,7 @@ export class DataSource { export class Options { tweetLimit?: number; + theme?: string; height?: number; chrome?: TwitterChromeEnum[]; ariaPolite?: string; diff --git a/src/app/features/order/features/all-order/components/presentationals/all-order-form/order-all-order-form.presentational.scss b/src/app/features/order/features/all-order/components/presentationals/all-order-form/order-all-order-form.presentational.scss index 6ead70cb3..1c081bca2 100644 --- a/src/app/features/order/features/all-order/components/presentationals/all-order-form/order-all-order-form.presentational.scss +++ b/src/app/features/order/features/all-order/components/presentationals/all-order-form/order-all-order-form.presentational.scss @@ -1,2 +1,2 @@ @import "solidify-frontend/lib/components/presentationals/abstract-form/abstract-form.presentational"; -@import "src/sass/abstracts/abstracts"; +@import "abstracts/abstracts"; diff --git a/src/app/features/order/features/all-order/components/routables/all-order-detail-edit/order-all-order-detail-edit.routable.scss b/src/app/features/order/features/all-order/components/routables/all-order-detail-edit/order-all-order-detail-edit.routable.scss index a923ff106..b233b4b0f 100644 --- a/src/app/features/order/features/all-order/components/routables/all-order-detail-edit/order-all-order-detail-edit.routable.scss +++ b/src/app/features/order/features/all-order/components/routables/all-order-detail-edit/order-all-order-detail-edit.routable.scss @@ -1,5 +1,5 @@ @import "solidify-frontend/lib/components/routables/abstract-detail-edit-common/abstract-detail-edit-common.routable"; -@import "src/sass/abstracts/abstracts"; +@import "abstracts/abstracts"; :host { .wrapper { @@ -12,7 +12,6 @@ display: flex; flex-direction: column; align-items: center; - background-color: $white; h2 { margin: 0; diff --git a/src/app/features/order/features/my-order/components/presentationals/my-order/order-my-order.presentational.scss b/src/app/features/order/features/my-order/components/presentationals/my-order/order-my-order.presentational.scss index 8bd2e2640..71febb516 100644 --- a/src/app/features/order/features/my-order/components/presentationals/my-order/order-my-order.presentational.scss +++ b/src/app/features/order/features/my-order/components/presentationals/my-order/order-my-order.presentational.scss @@ -134,3 +134,9 @@ } } } + +@include isInDarkMode { + .archives { + border-right-color: $dark-mode-line; + } +} diff --git a/src/app/features/preservation-space/organizational-unit/components/dialogs/organizational-unit-request-access/preservation-space-organizational-unit-request-access.dialog.html b/src/app/features/preservation-space/organizational-unit/components/dialogs/organizational-unit-request-access/preservation-space-organizational-unit-request-access.dialog.html index 6127a20cc..99c2e581b 100644 --- a/src/app/features/preservation-space/organizational-unit/components/dialogs/organizational-unit-request-access/preservation-space-organizational-unit-request-access.dialog.html +++ b/src/app/features/preservation-space/organizational-unit/components/dialogs/organizational-unit-request-access/preservation-space-organizational-unit-request-access.dialog.html @@ -46,6 +46,7 @@ <button [mat-dialog-close]="" cdkFocusInitial mat-button + color="primary" >{{labelTranslateEnum.close | translate}} </button> <button (click)="validate()" diff --git a/src/app/features/preservation-space/organizational-unit/components/dialogs/organizational-unit-request-creation/preservation-space-organizational-unit-request-creation.dialog.html b/src/app/features/preservation-space/organizational-unit/components/dialogs/organizational-unit-request-creation/preservation-space-organizational-unit-request-creation.dialog.html index 67688445f..b86d47f4f 100644 --- a/src/app/features/preservation-space/organizational-unit/components/dialogs/organizational-unit-request-creation/preservation-space-organizational-unit-request-creation.dialog.html +++ b/src/app/features/preservation-space/organizational-unit/components/dialogs/organizational-unit-request-creation/preservation-space-organizational-unit-request-creation.dialog.html @@ -42,6 +42,7 @@ <button [mat-dialog-close]="" cdkFocusInitial mat-button + color="primary" >{{labelTranslateEnum.close | translate}} </button> <button (click)="onSubmit()" diff --git a/src/app/icons.ts b/src/app/icons.ts index 2d17ea1a6..7cd66e51f 100644 --- a/src/app/icons.ts +++ b/src/app/icons.ts @@ -726,7 +726,12 @@ export const icons: IconInfos[] = [ { name: IconNameEnum.darkMode, lib: IconLibEnum.materialIcon, - icon: "brightness_medium", + icon: "bedtime", + }, + { + name: IconNameEnum.lightMode, + lib: IconLibEnum.materialIcon, + icon: "brightness_5", }, { name: IconNameEnum.creationDate, diff --git a/src/app/label-translate-solidify.ts b/src/app/label-translate-solidify.ts index da122e32b..9229d8bed 100644 --- a/src/app/label-translate-solidify.ts +++ b/src/app/label-translate-solidify.ts @@ -164,6 +164,8 @@ export const labelTranslateSolidify: LabelTranslateInterface = { cookieConsentDownloadTokenTitle: MARK_AS_TRANSLATABLE("cookieConsentSidebar.downloadToken.title"), cookieConsentSidebarLanguageDescription: MARK_AS_TRANSLATABLE("cookieConsentSidebar.language.description"), cookieConsentSidebarLanguageTitle: MARK_AS_TRANSLATABLE("cookieConsentSidebar.language.title"), + cookieConsentSidebarDarkModeDescription: MARK_AS_TRANSLATABLE("cookieConsentSidebar.darkMode.description"), + cookieConsentSidebarDarkModeTitle: MARK_AS_TRANSLATABLE("cookieConsentSidebar.darkMode.title"), cookieConsentSidebarPersonalizeCookieDescription: MARK_AS_TRANSLATABLE("cookieConsentSidebar.personalizeCookie.description"), cookieConsentSidebarPersonalizeCookieTitle: MARK_AS_TRANSLATABLE("cookieConsentSidebar.personalizeCookie.title"), cookieConsentSidebarTitle: MARK_AS_TRANSLATABLE("cookieConsentSidebar.title"), diff --git a/src/app/shared/components/containers/shared-file-and-aip-information/shared-file-and-aip-information.container.scss b/src/app/shared/components/containers/shared-file-and-aip-information/shared-file-and-aip-information.container.scss index 1b5403d72..804f7979b 100644 --- a/src/app/shared/components/containers/shared-file-and-aip-information/shared-file-and-aip-information.container.scss +++ b/src/app/shared/components/containers/shared-file-and-aip-information/shared-file-and-aip-information.container.scss @@ -162,3 +162,30 @@ } } + +@include isInDarkMode { + .container { + .visualization { + &.fullscreen { + background-color: $dark-mode-background; + } + } + + .informations { + .item-content { + .key { + color: $dark-mode-text-disabled; + } + } + } + + .no-preview { + border-color: $dark-mode-line; + + .package { + background: $white; + color: $black; + } + } + } +} diff --git a/src/app/shared/components/containers/shared-image-upload-wrapper/shared-image-upload-wrapper.container.scss b/src/app/shared/components/containers/shared-image-upload-wrapper/shared-image-upload-wrapper.container.scss index ad311d123..70ddaa746 100644 --- a/src/app/shared/components/containers/shared-image-upload-wrapper/shared-image-upload-wrapper.container.scss +++ b/src/app/shared/components/containers/shared-image-upload-wrapper/shared-image-upload-wrapper.container.scss @@ -40,3 +40,9 @@ $size-height: 300px; } } } + +@include isInDarkMode { + .wrapper-avatar { + border-color: $dark-mode-line; + } +} diff --git a/src/app/shared/components/containers/shared-table-person-orgunit-role/shared-table-person-orgunit-role.container.scss b/src/app/shared/components/containers/shared-table-person-orgunit-role/shared-table-person-orgunit-role.container.scss index 774110de4..65455ffeb 100644 --- a/src/app/shared/components/containers/shared-table-person-orgunit-role/shared-table-person-orgunit-role.container.scss +++ b/src/app/shared/components/containers/shared-table-person-orgunit-role/shared-table-person-orgunit-role.container.scss @@ -12,7 +12,6 @@ table { width: 100%; border-spacing: 0; - padding-bottom: 10px; thead { background-color: $primary-color; @@ -61,9 +60,32 @@ } .no-item { - padding-top: 10px; + padding: 20px 10px; text-align: center; color: $light-grey; font-size: 16px; } } + +@include isInDarkMode { + :host(.disabled) { + .no-item { + color: $dark-mode-text-disabled; + } + } + + table { + tbody { + tr { + &:nth-child(odd) { + background-color: $dark-mode-toolbar; + } + } + } + } + + .no-item { + background-color: $dark-mode-toolbar; + color: $dark-mode-text-color; + } +} diff --git a/src/app/shared/components/containers/shared-userguide-sidebar/shared-userguide-sidebar.container.scss b/src/app/shared/components/containers/shared-userguide-sidebar/shared-userguide-sidebar.container.scss index f2d6b05a6..af86c72a5 100644 --- a/src/app/shared/components/containers/shared-userguide-sidebar/shared-userguide-sidebar.container.scss +++ b/src/app/shared/components/containers/shared-userguide-sidebar/shared-userguide-sidebar.container.scss @@ -1,4 +1,4 @@ -@import "src/sass/abstracts/abstracts"; +@import "abstracts/abstracts"; :host { display: flex; @@ -8,7 +8,7 @@ top: 0; right: 0; width: 400px; - background: white; + background: $white; height: 100vh; z-index: $z-index-main-toolbar-userguide-sidebar; box-shadow: 0 8px 10px -4px #5858582e; @@ -83,3 +83,23 @@ :host(.hide) { display: none; } + +@include isInDarkMode { + .user-guide-sidebar { + background: $dark-mode-background; + + .list ::ng-deep { + ul { + li { + a { + color: $dark-mode-text-color; + + &:hover { + background-color: $dark-mode-menu-active; + } + } + } + } + } + } +} diff --git a/src/app/shared/components/dialogs/shared-upload-image/shared-upload-image.dialog.html b/src/app/shared/components/dialogs/shared-upload-image/shared-upload-image.dialog.html index 6358c89e4..938b87d0c 100644 --- a/src/app/shared/components/dialogs/shared-upload-image/shared-upload-image.dialog.html +++ b/src/app/shared/components/dialogs/shared-upload-image/shared-upload-image.dialog.html @@ -28,6 +28,7 @@ > <button [mat-dialog-close]="" mat-button + color="primary" >{{labelTranslateEnum.cancel | translate}}</button> <button (click)="confirm()" [disabled]="(imageCropped | isNullOrUndefined)" diff --git a/src/app/shared/components/presentationals/shared-archive-tile/shared-archive-tile.presentational.scss b/src/app/shared/components/presentationals/shared-archive-tile/shared-archive-tile.presentational.scss index 18d0fcd61..c093a0758 100644 --- a/src/app/shared/components/presentationals/shared-archive-tile/shared-archive-tile.presentational.scss +++ b/src/app/shared/components/presentationals/shared-archive-tile/shared-archive-tile.presentational.scss @@ -1,4 +1,4 @@ -@import "src/sass/abstracts/abstracts"; +@import "abstracts/abstracts"; $size-image: 125px; @@ -197,3 +197,7 @@ $size-image: 125px; } } } + +@include isInDarkMode { + border-color: $dark-mode-line; +} diff --git a/src/app/shared/components/presentationals/shared-checksum-item/shared-checksum-item.presentational.scss b/src/app/shared/components/presentationals/shared-checksum-item/shared-checksum-item.presentational.scss index 3b47ce8fb..066e1e0db 100644 --- a/src/app/shared/components/presentationals/shared-checksum-item/shared-checksum-item.presentational.scss +++ b/src/app/shared/components/presentationals/shared-checksum-item/shared-checksum-item.presentational.scss @@ -27,3 +27,10 @@ font-size: 10px; } } + +@include isInDarkMode { + .algo { + color: $white; + background-color: $dark-mode-toolbar; + } +} diff --git a/src/app/shared/components/presentationals/shared-folder-tree/shared-folder-tree.presentational.scss b/src/app/shared/components/presentationals/shared-folder-tree/shared-folder-tree.presentational.scss index b16031262..c064371c4 100644 --- a/src/app/shared/components/presentationals/shared-folder-tree/shared-folder-tree.presentational.scss +++ b/src/app/shared/components/presentationals/shared-folder-tree/shared-folder-tree.presentational.scss @@ -1,4 +1,4 @@ -@import "src/sass/abstracts/abstracts"; +@import "abstracts/abstracts"; :host { $line-item-size: 30px; @@ -91,4 +91,20 @@ } } +@include isInDarkMode { + .file-tree { + background-color: transparent; + + .folder-node { + color: $dark-mode-text-color; + .mat-icon-button { + &[disabled="true"] { + ::ng-deep { + color: $dark-mode-text-disabled; + } + } + } + } + } +} diff --git a/src/app/shared/components/routables/shared-abstract-file-aip-detail/shared-abstract-file-aip-detail.routable.scss b/src/app/shared/components/routables/shared-abstract-file-aip-detail/shared-abstract-file-aip-detail.routable.scss index 53fcb0507..998dff9aa 100644 --- a/src/app/shared/components/routables/shared-abstract-file-aip-detail/shared-abstract-file-aip-detail.routable.scss +++ b/src/app/shared/components/routables/shared-abstract-file-aip-detail/shared-abstract-file-aip-detail.routable.scss @@ -7,7 +7,11 @@ left: 0; right: 0; z-index: $z-index-file-detail; - background-color: #ffffff; + background-color: $white; min-height: 300px; display: block; } + +@include isInDarkMode { + background-color: $dark-mode-background; +} diff --git a/src/app/shared/enums/icon-name.enum.ts b/src/app/shared/enums/icon-name.enum.ts index df1853a63..5be3587b0 100644 --- a/src/app/shared/enums/icon-name.enum.ts +++ b/src/app/shared/enums/icon-name.enum.ts @@ -165,6 +165,7 @@ export class IconNameEnum extends IconNamePartialEnum { @PropertyName() static unigeWhite: string; @PropertyName() static theme: string; @PropertyName() static darkMode: string; + @PropertyName() static lightMode: string; @PropertyName() static creationDate: string; @PropertyName() static defaultValue: string; @PropertyName() static change: string; diff --git a/src/app/shared/enums/label-translate.enum.ts b/src/app/shared/enums/label-translate.enum.ts index 309630c2a..e99926da8 100644 --- a/src/app/shared/enums/label-translate.enum.ts +++ b/src/app/shared/enums/label-translate.enum.ts @@ -126,6 +126,8 @@ export class LabelTranslateEnum { static personalize: string = MARK_AS_TRANSLATABLE("general.button.personalize"); static deleteDeposit: string = MARK_AS_TRANSLATABLE("general.button.deleteDeposit"); static putInError: string = MARK_AS_TRANSLATABLE("general.button.putInError"); + static lightMode: string = MARK_AS_TRANSLATABLE("general.button.lightMode"); + static darkMode: string = MARK_AS_TRANSLATABLE("general.button.darkMode"); static home: string = MARK_AS_TRANSLATABLE("general.label.home"); static uploadAvatar: string = MARK_AS_TRANSLATABLE("general.label.uploadAvatar"); diff --git a/src/app/shared/features/aip/components/dialogs/aip-approve-disposal/shared-aip-approve-disposal.dialog.html b/src/app/shared/features/aip/components/dialogs/aip-approve-disposal/shared-aip-approve-disposal.dialog.html index 6b6d5e260..ebebe1fe3 100644 --- a/src/app/shared/features/aip/components/dialogs/aip-approve-disposal/shared-aip-approve-disposal.dialog.html +++ b/src/app/shared/features/aip/components/dialogs/aip-approve-disposal/shared-aip-approve-disposal.dialog.html @@ -26,6 +26,7 @@ <button [mat-dialog-close]="" cdkFocusInitial mat-button + color="primary" >{{labelTranslateEnum.close | translate}} </button> <button (click)="onSubmit()" diff --git a/src/app/shared/features/aip/components/dialogs/aip-extend-retention/shared-aip-extend-retention.dialog.html b/src/app/shared/features/aip/components/dialogs/aip-extend-retention/shared-aip-extend-retention.dialog.html index d0cd3a989..9bc2b7474 100644 --- a/src/app/shared/features/aip/components/dialogs/aip-extend-retention/shared-aip-extend-retention.dialog.html +++ b/src/app/shared/features/aip/components/dialogs/aip-extend-retention/shared-aip-extend-retention.dialog.html @@ -13,6 +13,7 @@ <button [mat-dialog-close]="" cdkFocusInitial mat-button + color="primary" >{{labelTranslateEnum.close | translate}} </button> <button (click)="onSubmit()" diff --git a/src/app/stores/app.state.ts b/src/app/stores/app.state.ts index 96566eb05..9fa136626 100644 --- a/src/app/stores/app.state.ts +++ b/src/app/stores/app.state.ts @@ -101,6 +101,7 @@ import {LabelTranslateEnum} from "@shared/enums/label-translate.enum"; import {LocalStorageEnum} from "@shared/enums/local-storage.enum"; import {ShortDoi} from "@shared/models/short-doi.model"; import {Token} from "@shared/models/token.model"; +import {HighlightLoader} from "ngx-highlightjs"; import {Observable} from "rxjs"; import { catchError, @@ -183,6 +184,7 @@ export class AppState extends SolidifyAppState<AppStateModel> { protected readonly _apiService: ApiService, protected readonly _httpClient: HttpClient, protected readonly _notificationService: NotificationService, + protected readonly _hljsLoader: HighlightLoader, public readonly _dialog: MatDialog) { super(_store, _translate, @@ -214,7 +216,8 @@ export class AppState extends SolidifyAppState<AppStateModel> { forceLogin: false, loadModule: true, }, - environment); + environment, + _hljsLoader); } @Selector() diff --git a/src/assets/highlightjs/dark.css b/src/assets/highlightjs/dark.css new file mode 100644 index 000000000..03b6da8bf --- /dev/null +++ b/src/assets/highlightjs/dark.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub Dark + Description: Dark theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-dark + Current colors taken from GitHub's CSS +*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c} \ No newline at end of file diff --git a/src/assets/highlightjs/light.css b/src/assets/highlightjs/light.css new file mode 100644 index 000000000..275239a7a --- /dev/null +++ b/src/assets/highlightjs/light.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub + Description: Light theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-light + Current colors taken from GitHub's CSS +*/.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#005cc5}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-code,.hljs-comment,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0} \ No newline at end of file diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 0be59a499..218d0a7b9 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -505,8 +505,7 @@ "title": "{{name}}: Statusverlauf" }, "module": { - "cart": "Daten herunterladen", - "darkMode": "Dunkler Hintergrund" + "cart": "Daten herunterladen" }, "notFound": { "title": "Die angeforderte Ressource existiert nicht oder nicht mehr..." @@ -590,6 +589,10 @@ "description": "cookieConsentSidebar.cart.description", "title": "cookieConsentSidebar.cart.title" }, + "darkMode": { + "description": "cookieConsentSidebar.darkMode.description", + "title": "cookieConsentSidebar.darkMode.title" + }, "downloadToken": { "description": "cookieConsentSidebar.downloadToken.description", "title": "cookieConsentSidebar.downloadToken.title" @@ -1115,6 +1118,7 @@ "copyIdToClipboard": "ID in die Zwischenablage kopieren", "create": "Erstellen", "createDeposit": "Datenablage erstellen", + "darkMode": "general.button.darkMode", "decline": "Ablehnen", "deepChecksums": "Genaue Prüfsummen", "delete": "Löschen", @@ -1136,6 +1140,7 @@ "fullscreen": "Vollbild", "goToAip": "Weiter zu AIP", "init": "Initialisieren", + "lightMode": "general.button.lightMode", "login": "Anmeldung", "logout": "Abmeldung", "markAsDone": "Als erledigt markieren", diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 875c8c4d5..88dc48e97 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -505,8 +505,7 @@ "title": "{{name}}: Status history" }, "module": { - "cart": "Download order", - "darkMode": "Dark mode" + "cart": "Download order" }, "notFound": { "title": "The requested resource does not exist or no longer exists..." @@ -590,6 +589,10 @@ "description": "Allows you to use the archive download order to group archive downloads", "title": "Archive download order" }, + "darkMode": { + "description": "Permet de sauvegarder le dernier mode de luminosité", + "title": "Brightness mode" + }, "downloadToken": { "description": "Allows you to download files", "title": "Download token" @@ -1115,6 +1118,7 @@ "copyIdToClipboard": "Copy ID to clipboard", "create": "Create", "createDeposit": "Create new deposit", + "darkMode": "Dark mode", "decline": "Decline", "deepChecksums": "Deep checksums", "delete": "Delete", @@ -1136,6 +1140,7 @@ "fullscreen": "Fullscreen", "goToAip": "Go to AIP", "init": "Init", + "lightMode": "Light mode", "login": "Login", "logout": "Logout", "markAsDone": "Mark as done", diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json index 83957bb63..52aafa4fe 100644 --- a/src/assets/i18n/fr.json +++ b/src/assets/i18n/fr.json @@ -505,8 +505,7 @@ "title": "{{name}} : Historique des statuts" }, "module": { - "cart": "Demande de Téléchargement", - "darkMode": "Mode sombre" + "cart": "Demande de Téléchargement" }, "notFound": { "title": "La resource demandée n'existe pas ou plus..." @@ -590,6 +589,10 @@ "description": "Permet d'utiliser la demande de téléchargement d'archives pour grouper le téléchargement d'archives", "title": "Demande de téléchargement d'archives" }, + "darkMode": { + "description": "Permet de sauvegarder le dernier mode de luminosité", + "title": "Mode de luminosité" + }, "downloadToken": { "description": "Permet de pouvoir télécharger des fichiers", "title": "Jeton de téléchargement" @@ -599,8 +602,8 @@ "title": "Google Analytics" }, "language": { - "description": "Permet de sauvegarder votre language favorie pour charger le site dans la bonne langue lors de votre prochaine visite", - "title": "Langage favori" + "description": "Permet de sauvegarder votre language favori pour charger le site dans la bonne langue lors de votre prochaine visite", + "title": "Language favori" }, "multiSelectLastSelectionContributor": { "description": "Permet de proposer en premier les contributeurs que vous avez utilisés dernièrement", @@ -1115,6 +1118,7 @@ "copyIdToClipboard": "Copier l'identifiant dans le presse-papiers", "create": "Créer", "createDeposit": "Créer un nouveau dépôt", + "darkMode": "Mode sombre", "decline": "Décliner", "deepChecksums": "Profond checksums", "delete": "Supprimer", @@ -1136,6 +1140,7 @@ "fullscreen": "Plein écran", "goToAip": "Aller à l'AIP", "init": "Initialiser", + "lightMode": "Mode lumineux", "login": "Connexion", "logout": "Déconnexion", "markAsDone": "Marquer comme traité", diff --git a/src/assets/language-icons/de.svg b/src/assets/language-icons/de.svg deleted file mode 100644 index 61412de91..000000000 --- a/src/assets/language-icons/de.svg +++ /dev/null @@ -1 +0,0 @@ -<svg id="Calque_1" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16.88 10.05"><title>DE</title><path d="M10,9.69a5.62,5.62,0,0,1-.36,2.05,4.65,4.65,0,0,1-1,1.59,4.58,4.58,0,0,1-1.58,1,5.53,5.53,0,0,1-2,.37H1.19V4.66H5A5.33,5.33,0,0,1,7,5a4.58,4.58,0,0,1,1.58,1,4.65,4.65,0,0,1,1,1.59A5.62,5.62,0,0,1,10,9.69Zm-1.52,0a4.77,4.77,0,0,0-.25-1.61,3.37,3.37,0,0,0-.69-1.2,3,3,0,0,0-1.09-.75A3.69,3.69,0,0,0,5,5.87H2.69v7.64H5a3.69,3.69,0,0,0,1.44-.26A3,3,0,0,0,7.5,12.5a3.37,3.37,0,0,0,.69-1.2A4.73,4.73,0,0,0,8.44,9.69Z" transform="translate(-1.19 -4.66)"/><path d="M18.08,13.5v1.22H11.84V4.66h6.23V5.87H13.34V9.06h3.81v1.17H13.34V13.5Z" transform="translate(-1.19 -4.66)"/></svg> \ No newline at end of file diff --git a/src/assets/language-icons/en.svg b/src/assets/language-icons/en.svg deleted file mode 100644 index b8e640c2e..000000000 --- a/src/assets/language-icons/en.svg +++ /dev/null @@ -1 +0,0 @@ -<svg id="Calque_1" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16.31 10.05"><title>EN</title><path d="M7.88,13.68v1.21H1.65v-10H7.88V6.05H3.15V9.24H7v1.17H3.15v3.27Z" transform="translate(-1.65 -4.84)"/><path d="M18,4.84V14.89H17.2a.65.65,0,0,1-.29-.06.82.82,0,0,1-.23-.2L11,7.29c0,.12,0,.25,0,.37s0,.23,0,.34v6.89H9.73v-10h.77a.72.72,0,0,1,.29,0A.69.69,0,0,1,11,5.1l5.69,7.34a2.56,2.56,0,0,1,0-.39c0-.13,0-.25,0-.36V4.84Z" transform="translate(-1.65 -4.84)"/></svg> \ No newline at end of file diff --git a/src/assets/language-icons/fr.svg b/src/assets/language-icons/fr.svg deleted file mode 100644 index d104588f2..000000000 --- a/src/assets/language-icons/fr.svg +++ /dev/null @@ -1 +0,0 @@ -<svg id="Calque_1" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.46 10.05"><title>FR</title><path d="M3.39,6.93v3.36h4V11.5h-4v4.27H1.89V5.71H8.13V6.93Z" transform="translate(-1.89 -5.71)"/><path d="M17.35,15.77H16a.62.62,0,0,1-.58-.32L13,12a.76.76,0,0,0-.26-.25,1,1,0,0,0-.42-.08h-1v4.13H9.81V5.71h2.9a6.34,6.34,0,0,1,1.68.2,3.49,3.49,0,0,1,1.16.57,2.36,2.36,0,0,1,.68.89,2.86,2.86,0,0,1,.22,1.16,3.21,3.21,0,0,1-.16,1,2.77,2.77,0,0,1-.48.83,3,3,0,0,1-.76.63,3.39,3.39,0,0,1-1,.4,1.54,1.54,0,0,1,.48.47Zm-4.69-5.21a3.42,3.42,0,0,0,1-.14,2,2,0,0,0,.73-.4,1.59,1.59,0,0,0,.45-.61A2.13,2.13,0,0,0,15,8.63a1.56,1.56,0,0,0-.57-1.31,2.8,2.8,0,0,0-1.71-.44H11.3v3.68Z" transform="translate(-1.89 -5.71)"/></svg> \ No newline at end of file diff --git a/src/sass/abstracts/_variables.scss b/src/sass/abstracts/_variables.scss index 938401a7d..bf0bb0af7 100644 --- a/src/sass/abstracts/_variables.scss +++ b/src/sass/abstracts/_variables.scss @@ -16,3 +16,11 @@ $toolbar-width: 60px; $main-toolbar-height: 80px; $header-mobile-toolbar: 54px; $breadcrumb-height: 38px; + +// ------------ +// THEMES +// ------------ +$theme-yareta: 'yareta'; +$theme-olos: 'olos'; +$theme-dlcm: 'dlcm'; +$theme-centella: 'centella'; diff --git a/src/sass/main.scss b/src/sass/main.scss index a29138e8a..2022d24f5 100644 --- a/src/sass/main.scss +++ b/src/sass/main.scss @@ -6,12 +6,12 @@ @import "abstracts/mixins"; @import "base/typography"; @import "layout/dialogs"; -@import "src/sass/override/material-override"; -@import "themes/basic-theme"; +@import "override/dark-mode-override"; +@import "override/material-override"; @import "themes/yareta-theme"; @import "themes/dlcm-theme"; @import "themes/olos-theme"; @import "themes/centella-theme"; -@import "highlight.js/styles/github.css"; +//@import "highlight.js/styles/github.css"; @import "@angular/cdk/overlay-prebuilt.css"; diff --git a/src/sass/override/dark-mode-override.scss b/src/sass/override/dark-mode-override.scss new file mode 100644 index 000000000..ac6eb9213 --- /dev/null +++ b/src/sass/override/dark-mode-override.scss @@ -0,0 +1,6 @@ +@import "solidify-frontend/lib/scss/override/dark-mode-override"; +@import "abstracts/abstracts"; + +@mixin dlcm-dark-mode-override { + @include solidify-dark-mode-override-rules; +} diff --git a/src/sass/override/material-override.scss b/src/sass/override/material-override.scss index 79fd083f9..1cd50a648 100644 --- a/src/sass/override/material-override.scss +++ b/src/sass/override/material-override.scss @@ -1,6 +1,3 @@ -@import "abstracts/mixins"; @import "solidify-frontend/lib/scss/override/material-override"; +@import "abstracts/abstracts"; -mat-error { - @include truncate-with-ellipsis; -} diff --git a/src/sass/themes/basic-theme.scss b/src/sass/themes/basic-theme.scss deleted file mode 100644 index eff0d1f86..000000000 --- a/src/sass/themes/basic-theme.scss +++ /dev/null @@ -1,8 +0,0 @@ -@use '@angular/material' as mat; -@import "themes/yareta-theme"; - -$basic-theme: $yareta-theme; - -// Load basic theme -@include mat.all-component-themes($basic-theme); -@include material-label; diff --git a/src/sass/themes/centella-theme.scss b/src/sass/themes/centella-theme.scss index 8cd6111ca..05c260b05 100644 --- a/src/sass/themes/centella-theme.scss +++ b/src/sass/themes/centella-theme.scss @@ -91,12 +91,26 @@ $centella-theme: mat.define-light-theme( $warn ); +$centella-dark-theme: mat.define-dark-theme( + $primary, + $accent, + $warn +); + // Include theme styles for core and each component used in your app. // Alternatively, you can import and @include the theme mixins for each component // that you are using. -body[theme=centella] { - @include mat.all-component-themes($centella-theme); - @include material-label; +@include isInTheme($theme-centella, true) { --primary-color: #{map-get($mat-centella-primary, 950)}; --primary-color-lighter: #{map-get($mat-centella-primary, 800)}; + + &:not([dark-mode='true']) { + @include mat.all-component-themes($centella-theme); + @include material-label; + } + + &[dark-mode='true'] { + @include mat.all-component-colors($centella-dark-theme); + @include dlcm-dark-mode-override; + } } diff --git a/src/sass/themes/dlcm-theme.scss b/src/sass/themes/dlcm-theme.scss index 7d999a0d2..a3ca6bf08 100644 --- a/src/sass/themes/dlcm-theme.scss +++ b/src/sass/themes/dlcm-theme.scss @@ -15,9 +15,23 @@ $dlcm-theme: mat.define-light-theme( $warn ); -body[theme=dlcm] { - @include mat.all-component-themes($dlcm-theme); - @include material-label; +$dlcm-dark-theme: mat.define-dark-theme( + $primary, + $accent, + $warn +); + +@include isInTheme($theme-dlcm, true) { --primary-color: #{map-get($primary, 800)}; --primary-color-lighter: #028dd6; + + &:not([dark-mode='true']) { + @include mat.all-component-themes($dlcm-theme); + @include material-label; + } + + &[dark-mode='true'] { + @include mat.all-component-colors($dlcm-dark-theme); + @include dlcm-dark-mode-override; + } } diff --git a/src/sass/themes/olos-theme.scss b/src/sass/themes/olos-theme.scss index 39509ad03..853288e88 100644 --- a/src/sass/themes/olos-theme.scss +++ b/src/sass/themes/olos-theme.scss @@ -54,9 +54,23 @@ $olos-theme: mat.define-light-theme( $warn ); -body[theme=olos] { - @include mat.all-component-themes($olos-theme); - @include material-label; +$olos-dark-theme: mat.define-dark-theme( + $primary, + $accent, + $warn +); + +@include isInTheme($theme-olos, true) { --primary-color: #{map-get($olos-red, 900)}; --primary-color-lighter: #{map-get($olos-red, 700)}; + + &:not([dark-mode='true']) { + @include mat.all-component-themes($olos-theme); + @include material-label; + } + + &[dark-mode='true'] { + @include mat.all-component-colors($olos-dark-theme); + @include dlcm-dark-mode-override; + } } diff --git a/src/sass/themes/yareta-theme.scss b/src/sass/themes/yareta-theme.scss index 63fb9a702..10d16fcce 100644 --- a/src/sass/themes/yareta-theme.scss +++ b/src/sass/themes/yareta-theme.scss @@ -91,12 +91,26 @@ $yareta-theme: mat.define-light-theme( $warn ); +$yareta-dark-theme: mat.define-dark-theme( + $primary, + $accent, + $warn +); + // Include theme styles for core and each component used in your app. // Alternatively, you can import and @include the theme mixins for each component // that you are using. -body[theme=yareta] { - @include mat.all-component-themes($yareta-theme); - @include material-label; +@include isInTheme($theme-yareta, true) { --primary-color: #{map-get($mat-yareta-primary, 950)}; --primary-color-lighter: #{map-get($mat-yareta-primary, 800)}; + + &:not([dark-mode='true']) { + @include mat.all-component-themes($yareta-theme); + @include material-label; + } + + &[dark-mode='true'] { + @include mat.all-component-colors($yareta-dark-theme); + @include dlcm-dark-mode-override; + } } -- GitLab From 5b1dca7d74a5eb034b708c93bd5e062f943b56c5 Mon Sep 17 00:00:00 2001 From: Florent Poittevin <florent.poittevin@unige.ch> Date: Wed, 2 Mar 2022 15:29:33 +0100 Subject: [PATCH 2/2] chore: update to solidify 3.0.13 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3062b69a5..6d87e8e6f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,7 +53,7 @@ "normalize.css": "8.0.1", "patch-package": "6.4.7", "rxjs": "7.5.2", - "solidify-frontend": "3.0.12", + "solidify-frontend": "3.0.13", "tiff.js": "1.0.0", "tslib": "2.3.1", "videojs-wavesurfer": "3.8.0", @@ -19674,9 +19674,9 @@ } }, "node_modules/solidify-frontend": { - "version": "3.0.12", - "resolved": "https://nexus.unige.ch/repository/npm-all/solidify-frontend/-/solidify-frontend-3.0.12.tgz", - "integrity": "sha512-YbWDp06LSOlOLd/5q7KVHv9PbJY/OG4tieZP4kEBBMM8iIAif0vN76XPKnrS6JDvd9bmmmQpHpXNFMFYcUrrYQ==", + "version": "3.0.13", + "resolved": "https://nexus.unige.ch/repository/npm-all/solidify-frontend/-/solidify-frontend-3.0.13.tgz", + "integrity": "sha512-6/crKKjFB1wkg9gO/Qkb6gF1i4JTTDyQ9CN3g21UIeGz/xxWCuTTNUEbS6ySN8X7Ip33WbCffeKVt4SZ1lvshw==", "license": "GPL-2.0-or-later", "dependencies": { "tslib": "^2.3.0" @@ -35891,9 +35891,9 @@ } }, "solidify-frontend": { - "version": "3.0.12", - "resolved": "https://nexus.unige.ch/repository/npm-all/solidify-frontend/-/solidify-frontend-3.0.12.tgz", - "integrity": "sha512-YbWDp06LSOlOLd/5q7KVHv9PbJY/OG4tieZP4kEBBMM8iIAif0vN76XPKnrS6JDvd9bmmmQpHpXNFMFYcUrrYQ==", + "version": "3.0.13", + "resolved": "https://nexus.unige.ch/repository/npm-all/solidify-frontend/-/solidify-frontend-3.0.13.tgz", + "integrity": "sha512-6/crKKjFB1wkg9gO/Qkb6gF1i4JTTDyQ9CN3g21UIeGz/xxWCuTTNUEbS6ySN8X7Ip33WbCffeKVt4SZ1lvshw==", "requires": { "tslib": "^2.3.0" } diff --git a/package.json b/package.json index 8c3df3c07..091c9523d 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "normalize.css": "8.0.1", "patch-package": "6.4.7", "rxjs": "7.5.2", - "solidify-frontend": "3.0.12", + "solidify-frontend": "3.0.13", "tiff.js": "1.0.0", "tslib": "2.3.1", "videojs-wavesurfer": "3.8.0", -- GitLab