From ab494a484e737a3f7b9ffead5e12eb815e8c5ffc Mon Sep 17 00:00:00 2001 From: irismarie Date: Fri, 26 Feb 2021 14:01:55 +0100 Subject: [PATCH 01/45] [WIP] allow branding --- src/branding/branding.js | 37 ++++++++++++++++++++ src/branding/brands.js | 70 +++++++++++++++++++++++++++++++++++++ src/common/header.js | 4 +-- src/common/home.js | 43 ++++------------------- src/common/menu-sidebar.js | 43 +++++++++++++++++++---- src/config.js | 15 ++++---- src/img/slew-logo.png | Bin 0 -> 3939 bytes src/router.js | 1 + 8 files changed, 160 insertions(+), 53 deletions(-) create mode 100644 src/branding/branding.js create mode 100644 src/branding/brands.js create mode 100644 src/img/slew-logo.png diff --git a/src/branding/branding.js b/src/branding/branding.js new file mode 100644 index 0000000..5baa395 --- /dev/null +++ b/src/branding/branding.js @@ -0,0 +1,37 @@ +/** + * This file is part of VILLASweb. + * + * VILLASweb is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * VILLASweb is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with VILLASweb. If not, see . + ******************************************************************************/ + +import brands from './brands' +import config from '../config' +import _ from 'lodash'; + +class Branding { + constructor(chosenbrand) { + var brand = _.get(brands, [chosenbrand]); + if (!brand) { + console.error("Branding '" + chosenbrand + "' not available, will use 'villasweb' branding"); + brand = _.get(brands, ['villasweb']); + } + + this.brand = brand; + } + + static instance = Branding.instance || new Branding(config.branding); +}; + + +export default Branding; \ No newline at end of file diff --git a/src/branding/brands.js b/src/branding/brands.js new file mode 100644 index 0000000..45db6c7 --- /dev/null +++ b/src/branding/brands.js @@ -0,0 +1,70 @@ +/** + * This file is part of VILLASweb. + * + * VILLASweb is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * VILLASweb is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with VILLASweb. If not, see . + ******************************************************************************/ + +const brands = { + villasweb: { + title: 'VILLASweb', + subtitle: 'ACS', + logo: 'villas_web.svg', + pages: { + home: true, + scenarios: true, + infrastructure: true, + users: true, + account: true, + api: true, + }, + links: { + "VILLASframework project": "http://fein-aachen.org/projects/villas-framework/", + "VILLASweb Documentation": "https://villas.fein-aachen.org/doc/web.html", + "VILLASweb frontend source": "https://git.rwth-aachen.de/acs/public/villas/web", + "VILLASweb backend source":"https://git.rwth-aachen.de/acs/public/villas/web-backend-go", + } + }, + slew: { + title: 'SLEW', + subtitle: 'Second Life for Energiewende', + logo: "slew-logo.png", + pages: { + home: true, + scenarios: true, + infrastructure: false, + users: false, + account: false, + api: false + }, + links: { + "DPsim Simulator": "https://dpsim.fein-aachen.org", + "VILLASframework": "https://villas.fein-aachen.org/doc" + } + }, + test: { + title: 'SLEW', + subtitle: 'Second Life for Energiewende', + logo: "slew-logo.png", + pages: { + home: true, + scenarios: true, + infrastructure: false, + users: false, + account: false, + api: false + }, + } +} + +export default brands; \ No newline at end of file diff --git a/src/common/header.js b/src/common/header.js index c5c71b7..69b0980 100644 --- a/src/common/header.js +++ b/src/common/header.js @@ -19,14 +19,14 @@ import React from 'react'; import { Col, Button } from 'react-bootstrap'; import { Hidden } from 'react-grid-system' import Icon from './icon'; -import config from '../config'; +import Branding from '../branding/branding'; class Header extends React.Component { render() { return (
-

{config.instance} - {config.subtitle}

+

{Branding.instance.brand.title} - {Branding.instance.brand.subtitle}

diff --git a/src/common/home.js b/src/common/home.js index 5932022..f8aa894 100644 --- a/src/common/home.js +++ b/src/common/home.js @@ -17,9 +17,11 @@ import React from 'react'; -import config from '../config'; import { Redirect } from "react-router-dom"; import { NavLink } from 'react-router-dom'; +import Branding from '../branding/branding'; + +const images = require.context('../img', true) class Home extends React.Component { @@ -38,50 +40,19 @@ class Home extends React.Component { return (); } + const brand = Branding.instance.brand; + return (
- Logo VILLASweb + Logo VILLASweb

Home

- {/*Welcome to {config.instance} hosted by {config.admin.name}!
*/} - Welcome to {config.instance}! + Welcome to {Branding.instance.brand.title}!

You are logged in as user {currentUser.username} with ID {currentUser.id} and role {currentUser.role}.

- - {/*

Data Model

- Datamodel VILLASweb - -

Terminology

- -
Infrastructure Component
-
    -
  • A component of research infrastructure
  • -
  • Category: for example simulator, gateway, amplifier, database, etc.
  • -
  • Type: for example RTDS, OpalRT, VILLASnode, Cassandra
  • -
- -
Component Configuration
-
    -
  • Input signals: Signals that can be modified in VILLASweb
  • -
  • Output signals: Signals that can be visualized on dashboards of VILLASweb
  • -
  • Parameters: Further configuration parameters of the infrastructure component
  • -
- -
Dashboard
-
    -
  • Visualize ongoing experiments in real-time
  • -
  • Interact with ongoing experiments in real-time
  • -
- -
Scenario
-
    -
  • A collection of component configurations and dashboards for a specific experiment
  • -
  • Users can have access to multiple scenarios
  • -
*/} -

Credits

VILLASweb is an open source project developed by the Institute for Automation of Complex Power Systems at RWTH Aachen University.

Logo ACS diff --git a/src/common/menu-sidebar.js b/src/common/menu-sidebar.js index 2e953f8..1b7208e 100644 --- a/src/common/menu-sidebar.js +++ b/src/common/menu-sidebar.js @@ -17,24 +17,53 @@ import React from 'react'; import { NavLink } from 'react-router-dom'; +import Branding from '../branding/branding'; + class SidebarMenu extends React.Component { render() { + const brand = Branding.instance.brand; + console.log(brand.links) + let links = [] + + /*++++ + for (var key of Object.keys(brand.links) ) { + console.log(`${key}: ${brand.links[key]}`); + links.push(
  • {key}
  • ); + }*/ + + if (brand.links) { + Object.keys(brand.links).forEach(key => { + console.log(`${key}: ${brand.links[key]}`); + links.push(
  • {key}
  • ); + }) + } + + return (

    Menu

      -
    • Home
    • -
    • Scenarios
    • -
    • Infrastructure Components
    • - { this.props.currentRole === 'Admin' ? -
    • User Management
    • : '' + + + + {this.props.currentRole === 'Admin' ? +
    • User Management
    • : '' } -
    • Account
    • +
    • Logout
    • -
    • API Browser
    • +
    + { + links.length > 0 ? +
    +

    +

    Links

    +
      {links}
    +
    + : '' + }
    ); } diff --git a/src/config.js b/src/config.js index 874e58f..c7998c0 100644 --- a/src/config.js +++ b/src/config.js @@ -16,13 +16,12 @@ ******************************************************************************/ const config = { - publicPathBase: 'public/', - instance: 'VILLASweb', - subtitle: 'ACS', - admin: { - name: 'Institute for Automation of Complex Power Systems (ACS), RWTH Aachen University, Germany', - mail: 'stvogel@eonerc.rwth-aachen.de' - } -}; + publicPathBase: 'public/', + admin: { + name: 'Institute for Automation of Complex Power Systems (ACS), RWTH Aachen University, Germany', + mail: 'stvogel@eonerc.rwth-aachen.de' + }, + branding: 'slew', +} export default config diff --git a/src/img/slew-logo.png b/src/img/slew-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..747bf8339dac5f79adc1e39d6a5c451e7481c3df GIT binary patch literal 3939 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 Date: Wed, 3 Mar 2021 16:37:06 +0100 Subject: [PATCH 02/45] get homepage from branding subdirectory --- src/branding/branding.js | 22 +++ src/branding/slew/slew_home.js | 41 +++++ .../villasweb}/img/datamodel.png | Bin .../villasweb}/img/eonerc_rwth.svg | 0 src/{ => branding/villasweb}/img/erigrid2.png | Bin .../villasweb}/img/european_commission.svg | 0 src/{ => branding/villasweb}/img/jara.svg | 0 src/{ => branding/villasweb}/img/reserve.svg | 0 src/{ => branding/villasweb}/img/uel.png | Bin .../villasweb}/img/uel_efre.jpeg | Bin src/branding/villasweb/img/villas_web.svg | 158 ++++++++++++++++++ src/branding/villasweb/villasweb-home.js | 66 ++++++++ src/common/home.js | 62 +------ src/config.js | 3 +- 14 files changed, 295 insertions(+), 57 deletions(-) create mode 100644 src/branding/slew/slew_home.js rename src/{ => branding/villasweb}/img/datamodel.png (100%) rename src/{ => branding/villasweb}/img/eonerc_rwth.svg (100%) rename src/{ => branding/villasweb}/img/erigrid2.png (100%) rename src/{ => branding/villasweb}/img/european_commission.svg (100%) rename src/{ => branding/villasweb}/img/jara.svg (100%) rename src/{ => branding/villasweb}/img/reserve.svg (100%) rename src/{ => branding/villasweb}/img/uel.png (100%) rename src/{ => branding/villasweb}/img/uel_efre.jpeg (100%) create mode 100644 src/branding/villasweb/img/villas_web.svg create mode 100644 src/branding/villasweb/villasweb-home.js diff --git a/src/branding/branding.js b/src/branding/branding.js index 5baa395..bbc8a48 100644 --- a/src/branding/branding.js +++ b/src/branding/branding.js @@ -19,18 +19,40 @@ import brands from './brands' import config from '../config' import _ from 'lodash'; +import {villasweb_home} from './villasweb/villasweb-home'; +import {slew_home} from './slew/slew_home'; + + class Branding { constructor(chosenbrand) { var brand = _.get(brands, [chosenbrand]); if (!brand) { console.error("Branding '" + chosenbrand + "' not available, will use 'villasweb' branding"); brand = _.get(brands, ['villasweb']); + chosenbrand = 'villasweb' } this.brand = brand; + this.name = chosenbrand; } static instance = Branding.instance || new Branding(config.branding); + + getHome(username = '' , userid = '', role = '') { + var homepage = ''; + switch(this.name) { + case 'villasweb': + homepage = villasweb_home(this.brand.title, username, userid, role); + break; + case 'slew': + homepage = slew_home(); + break; + default: + homepage = villasweb_home(); + break; + } + return homepage; + } }; diff --git a/src/branding/slew/slew_home.js b/src/branding/slew/slew_home.js new file mode 100644 index 0000000..812b703 --- /dev/null +++ b/src/branding/slew/slew_home.js @@ -0,0 +1,41 @@ +/** + * This file is part of VILLASweb. + * + * VILLASweb is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * VILLASweb is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with VILLASweb. If not, see . + ******************************************************************************/ +import React from 'react'; + + +export function slew_home() { + + return ( +
    +

    SLEW is a learning platform for running experiments in a virtual power engineering world. + The platform enables to interact with the experiments in real time and perform analyses on the experimental results.

    + +

    The motivation behind is the ongoing transformation of the energy system, which is making the system more and more complex. + Hence, understanding new phenomena and underlying interactions is getting more challenging, also because real experimental + activities for obtaining a better understanding are not possible for obvious reasons of security and safety.

    + +

    The SLEW platform gives the possibility to perform experiments in a virtual infrastructure and to learn from the execution + of complex models. It provides a virtual power engineering world where complex phenomena take place while users can interact + with the system in real time.

    + +

    The platform is based on the real-time simulation tool DPsim developed in RWTH, + which is available as open-source software project to the power engineering community. Besides, it integrates the interactive + computing environment Jupyter for further analysis of experimental results.

    +
    ) + +} + diff --git a/src/img/datamodel.png b/src/branding/villasweb/img/datamodel.png similarity index 100% rename from src/img/datamodel.png rename to src/branding/villasweb/img/datamodel.png diff --git a/src/img/eonerc_rwth.svg b/src/branding/villasweb/img/eonerc_rwth.svg similarity index 100% rename from src/img/eonerc_rwth.svg rename to src/branding/villasweb/img/eonerc_rwth.svg diff --git a/src/img/erigrid2.png b/src/branding/villasweb/img/erigrid2.png similarity index 100% rename from src/img/erigrid2.png rename to src/branding/villasweb/img/erigrid2.png diff --git a/src/img/european_commission.svg b/src/branding/villasweb/img/european_commission.svg similarity index 100% rename from src/img/european_commission.svg rename to src/branding/villasweb/img/european_commission.svg diff --git a/src/img/jara.svg b/src/branding/villasweb/img/jara.svg similarity index 100% rename from src/img/jara.svg rename to src/branding/villasweb/img/jara.svg diff --git a/src/img/reserve.svg b/src/branding/villasweb/img/reserve.svg similarity index 100% rename from src/img/reserve.svg rename to src/branding/villasweb/img/reserve.svg diff --git a/src/img/uel.png b/src/branding/villasweb/img/uel.png similarity index 100% rename from src/img/uel.png rename to src/branding/villasweb/img/uel.png diff --git a/src/img/uel_efre.jpeg b/src/branding/villasweb/img/uel_efre.jpeg similarity index 100% rename from src/img/uel_efre.jpeg rename to src/branding/villasweb/img/uel_efre.jpeg diff --git a/src/branding/villasweb/img/villas_web.svg b/src/branding/villasweb/img/villas_web.svg new file mode 100644 index 0000000..ccbc714 --- /dev/null +++ b/src/branding/villasweb/img/villas_web.svg @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/src/branding/villasweb/villasweb-home.js b/src/branding/villasweb/villasweb-home.js new file mode 100644 index 0000000..0b119ad --- /dev/null +++ b/src/branding/villasweb/villasweb-home.js @@ -0,0 +1,66 @@ +/** + * This file is part of VILLASweb. + * + * VILLASweb is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * VILLASweb is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with VILLASweb. If not, see . + ******************************************************************************/ +import React from 'react'; +import { NavLink } from 'react-router-dom'; + +export function villasweb_home(title, username, userid, role) { + return ( +
    +

    + Welcome to {title}! +

    +

    + You are logged in as user {username} with ID {userid} and role {role}. +

    +

    Credits

    +

    VILLASweb is an open source project developed by the Institute for Automation of Complex Power Systems at RWTH Aachen University.

    + Logo ACS + +

    Links

    + +

    Funding

    +

    The development of VILLASframework projects has received funding from

    +
      +

      SLEW: Second Life for Energiewende, an Exploratory Teaching Space project funded by RWTH Aachen University

      +

      ERIgrid 2.0: An EU Horizon 2020 research and innovation action project for connecting European Smart Grid Infrastructures (grant agreement No 870620)

      +

      + Logo EU + Logo ERIgrid 2.0 +

      +

      Urban Energy Lab 4.0: A project funded by EFRE.NRW (European Regional Development Fund) for the setup of a novel energy research infrastructure.

      +

      + Logo UEL OP EFRE NRW + Logo UEL +

      +

      RESERVE: An EU Horizon 2020 research and innovation project (grant agreement No 727481)

      +

      + Logo EU + Logo RESERVE +

      +

      JARA-ENERGY: Jülich-Aachen Research Alliance (JARA) is an initiative of RWTH Aachen University and Forschungszentrum Jülich.

      +
    +
    ) +} \ No newline at end of file diff --git a/src/common/home.js b/src/common/home.js index f8aa894..e3b2fe4 100644 --- a/src/common/home.js +++ b/src/common/home.js @@ -18,9 +18,9 @@ import React from 'react'; import { Redirect } from "react-router-dom"; -import { NavLink } from 'react-router-dom'; import Branding from '../branding/branding'; +// Logo is dynamically loaded from img folder, therefore the whole folder is required at this point const images = require.context('../img', true) class Home extends React.Component { @@ -35,69 +35,21 @@ class Home extends React.Component { render() { let currentUser = JSON.parse(localStorage.getItem("currentUser")); - if (currentUser == null){ + if (currentUser == null) { console.log("HOME redirecting to logout/ login") return (); } - const brand = Branding.instance.brand; + const branding = Branding.instance; return (
    - Logo VILLASweb + Logo VILLASweb

    Home

    -

    - Welcome to {Branding.instance.brand.title}! -

    -

    - You are logged in as user {currentUser.username} with ID {currentUser.id} and role {currentUser.role}. -

    - -

    Credits

    -

    VILLASweb is an open source project developed by the Institute for Automation of Complex Power Systems at RWTH Aachen University.

    - Logo ACS - -

    Links

    - -

    Funding

    -

    The development of VILLASframework projects has received funding from

    -
      -

      SLEW: Second Life for Energiewende, an Exploratory Teaching Space project funded by RWTH Aachen University

      -

      ERIgrid 2.0: An EU Horizon 2020 research and innovation action project for connecting European Smart Grid Infrastructures (grant agreement No 870620)

      -

      - Logo EU - Logo ERIgrid 2.0 -

      -

      Urban Energy Lab 4.0: A project funded by EFRE.NRW (European Regional Development Fund) for the setup of a novel energy research infrastructure.

      -

      - Logo UEL OP EFRE NRW - Logo UEL -

      -

      RESERVE: An EU Horizon 2020 research and innovation project (grant agreement No 727481)

      -

      - Logo EU - Logo RESERVE -

      -

      JARA-ENERGY: Jülich-Aachen Research Alliance (JARA) is an initiative of RWTH Aachen University and Forschungszentrum Jülich.

      -
    - - - - { - //Logo JARA + {branding.getHome(currentUser.username, currentUser.id, currentUser.role)} +
    + ); } -
    - ); - } } export default Home; diff --git a/src/config.js b/src/config.js index c7998c0..6ae36be 100644 --- a/src/config.js +++ b/src/config.js @@ -16,12 +16,11 @@ ******************************************************************************/ const config = { - publicPathBase: 'public/', admin: { name: 'Institute for Automation of Complex Power Systems (ACS), RWTH Aachen University, Germany', mail: 'stvogel@eonerc.rwth-aachen.de' }, - branding: 'slew', + branding: 'villasweb', } export default config From ed846ed4c27f6e34de75a7a422dddbf809aed81b Mon Sep 17 00:00:00 2001 From: irismarie Date: Wed, 3 Mar 2021 17:27:30 +0100 Subject: [PATCH 03/45] move all contents to brand homepage --- src/branding/branding.js | 2 +- src/branding/brands.js | 6 --- src/branding/slew/img/slew-logo.png | Bin 0 -> 3939 bytes src/branding/slew/slew_home.js | 16 ++++++- src/branding/villasweb/villasweb-home.js | 52 ++++++++++++----------- src/common/home.js | 7 +-- src/config.js | 2 +- 7 files changed, 44 insertions(+), 41 deletions(-) create mode 100644 src/branding/slew/img/slew-logo.png diff --git a/src/branding/branding.js b/src/branding/branding.js index bbc8a48..94c9a72 100644 --- a/src/branding/branding.js +++ b/src/branding/branding.js @@ -45,7 +45,7 @@ class Branding { homepage = villasweb_home(this.brand.title, username, userid, role); break; case 'slew': - homepage = slew_home(); + homepage = slew_home(this.brand.title); break; default: homepage = villasweb_home(); diff --git a/src/branding/brands.js b/src/branding/brands.js index 45db6c7..de7fac3 100644 --- a/src/branding/brands.js +++ b/src/branding/brands.js @@ -28,12 +28,6 @@ const brands = { account: true, api: true, }, - links: { - "VILLASframework project": "http://fein-aachen.org/projects/villas-framework/", - "VILLASweb Documentation": "https://villas.fein-aachen.org/doc/web.html", - "VILLASweb frontend source": "https://git.rwth-aachen.de/acs/public/villas/web", - "VILLASweb backend source":"https://git.rwth-aachen.de/acs/public/villas/web-backend-go", - } }, slew: { title: 'SLEW', diff --git a/src/branding/slew/img/slew-logo.png b/src/branding/slew/img/slew-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..747bf8339dac5f79adc1e39d6a5c451e7481c3df GIT binary patch literal 3939 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 +
    + Logo VILLASweb +

    Home

    +

    + Welcome to {title}! +

    SLEW is a learning platform for running experiments in a virtual power engineering world. The platform enables to interact with the experiments in real time and perform analyses on the experimental results.

    @@ -35,6 +40,13 @@ export function slew_home() {

    The platform is based on the real-time simulation tool DPsim developed in RWTH, which is available as open-source software project to the power engineering community. Besides, it integrates the interactive computing environment Jupyter for further analysis of experimental results.

    + +

    Contacts

    +
    ) } diff --git a/src/branding/villasweb/villasweb-home.js b/src/branding/villasweb/villasweb-home.js index 0b119ad..60b6f06 100644 --- a/src/branding/villasweb/villasweb-home.js +++ b/src/branding/villasweb/villasweb-home.js @@ -19,7 +19,9 @@ import { NavLink } from 'react-router-dom'; export function villasweb_home(title, username, userid, role) { return ( -
    +
    + Logo VILLASweb +

    Home

    Welcome to {title}!

    @@ -30,37 +32,37 @@ export function villasweb_home(title, username, userid, role) {

    VILLASweb is an open source project developed by the Institute for Automation of Complex Power Systems at RWTH Aachen University.

    Logo ACS

    Links

    Funding

    The development of VILLASframework projects has received funding from

      -

      SLEW: Second Life for Energiewende, an Exploratory Teaching Space project funded by RWTH Aachen University

      -

      ERIgrid 2.0: An EU Horizon 2020 research and innovation action project for connecting European Smart Grid Infrastructures (grant agreement No 870620)

      -

      - Logo EU - Logo ERIgrid 2.0 -

      -

      Urban Energy Lab 4.0: A project funded by EFRE.NRW (European Regional Development Fund) for the setup of a novel energy research infrastructure.

      -

      - Logo UEL OP EFRE NRW - Logo UEL -

      -

      RESERVE: An EU Horizon 2020 research and innovation project (grant agreement No 727481)

      -

      - Logo EU - Logo RESERVE -

      -

      JARA-ENERGY: Jülich-Aachen Research Alliance (JARA) is an initiative of RWTH Aachen University and Forschungszentrum Jülich.

      +

      SLEW: Second Life for Energiewende, an Exploratory Teaching Space project funded by RWTH Aachen University

      +

      ERIgrid 2.0: An EU Horizon 2020 research and innovation action project for connecting European Smart Grid Infrastructures (grant agreement No 870620)

      +

      + Logo EU + Logo ERIgrid 2.0 +

      +

      Urban Energy Lab 4.0: A project funded by EFRE.NRW (European Regional Development Fund) for the setup of a novel energy research infrastructure.

      +

      + Logo UEL OP EFRE NRW + Logo UEL +

      +

      RESERVE: An EU Horizon 2020 research and innovation project (grant agreement No 727481)

      +

      + Logo EU + Logo RESERVE +

      +

      JARA-ENERGY: Jülich-Aachen Research Alliance (JARA) is an initiative of RWTH Aachen University and Forschungszentrum Jülich.

    ) } \ No newline at end of file diff --git a/src/common/home.js b/src/common/home.js index e3b2fe4..6045b33 100644 --- a/src/common/home.js +++ b/src/common/home.js @@ -20,8 +20,6 @@ import React from 'react'; import { Redirect } from "react-router-dom"; import Branding from '../branding/branding'; -// Logo is dynamically loaded from img folder, therefore the whole folder is required at this point -const images = require.context('../img', true) class Home extends React.Component { @@ -33,7 +31,6 @@ class Home extends React.Component { } render() { - let currentUser = JSON.parse(localStorage.getItem("currentUser")); if (currentUser == null) { console.log("HOME redirecting to logout/ login") @@ -43,9 +40,7 @@ class Home extends React.Component { const branding = Branding.instance; return ( -
    - Logo VILLASweb -

    Home

    +
    {branding.getHome(currentUser.username, currentUser.id, currentUser.role)}
    ); diff --git a/src/config.js b/src/config.js index e49e4c5..6835213 100644 --- a/src/config.js +++ b/src/config.js @@ -20,7 +20,7 @@ const config = { name: 'Institute for Automation of Complex Power Systems (ACS), RWTH Aachen University, Germany', mail: 'stvogel@eonerc.rwth-aachen.de' }, - branding: 'villasweb', + branding: 'slew', } export default config \ No newline at end of file From 072099fc35e2a8722ef38df238e9b4fa673ba5b0 Mon Sep 17 00:00:00 2001 From: irismarie Date: Wed, 3 Mar 2021 18:07:35 +0100 Subject: [PATCH 04/45] improve slew homepage --- src/branding/slew/img/eonerc_rwth.svg | 152 ++++++++++ src/branding/slew/img/erigrid2.png | Bin 0 -> 18902 bytes src/branding/slew/img/european_commission.svg | 272 ++++++++++++++++++ src/branding/slew/slew.css | 4 + src/branding/slew/slew_home.js | 8 + src/branding/villasweb/villasweb.css | 0 6 files changed, 436 insertions(+) create mode 100644 src/branding/slew/img/eonerc_rwth.svg create mode 100644 src/branding/slew/img/erigrid2.png create mode 100644 src/branding/slew/img/european_commission.svg create mode 100644 src/branding/slew/slew.css create mode 100644 src/branding/villasweb/villasweb.css diff --git a/src/branding/slew/img/eonerc_rwth.svg b/src/branding/slew/img/eonerc_rwth.svg new file mode 100644 index 0000000..42c4c3f --- /dev/null +++ b/src/branding/slew/img/eonerc_rwth.svg @@ -0,0 +1,152 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/src/branding/slew/img/erigrid2.png b/src/branding/slew/img/erigrid2.png new file mode 100644 index 0000000000000000000000000000000000000000..0c19b4c536db15b9388ccf74796c10fca7a4a165 GIT binary patch literal 18902 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 z*8ML}e~}FU000000000000000000000000000000000000000000000000000001h a|BQdX-1u9=T(gM)0000 + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/branding/slew/slew.css b/src/branding/slew/slew.css new file mode 100644 index 0000000..c8f2ddf --- /dev/null +++ b/src/branding/slew/slew.css @@ -0,0 +1,4 @@ +#images { + margin-left: 2em; + margin-right: 2em +} \ No newline at end of file diff --git a/src/branding/slew/slew_home.js b/src/branding/slew/slew_home.js index c367418..5f65209 100644 --- a/src/branding/slew/slew_home.js +++ b/src/branding/slew/slew_home.js @@ -15,6 +15,7 @@ * along with VILLASweb. If not, see . ******************************************************************************/ import React from 'react'; +import './slew.css' export function slew_home(title) { @@ -47,6 +48,13 @@ export function slew_home(title) {
  • Markus Mirz
  • Steffen Vogel
  • + +

    Credits

    +
    + Logo EONERC + Logo Erigrid + Logo EU +
    ) } diff --git a/src/branding/villasweb/villasweb.css b/src/branding/villasweb/villasweb.css new file mode 100644 index 0000000..e69de29 From 81916e9275d685c318f359d71bf83806fdb95e18 Mon Sep 17 00:00:00 2001 From: irismarie Date: Tue, 9 Mar 2021 14:18:32 +0100 Subject: [PATCH 05/45] change style for brands --- src/app.js | 38 +++++++++++++++ src/branding/branding.js | 36 ++++++++++++-- src/branding/brands.js | 12 +++++ src/branding/villasweb/villasweb.css | 0 src/styles/app.css | 72 ++++++++++++---------------- 5 files changed, 112 insertions(+), 46 deletions(-) delete mode 100644 src/branding/villasweb/villasweb.css diff --git a/src/app.js b/src/app.js index fe71133..4037f9d 100644 --- a/src/app.js +++ b/src/app.js @@ -41,6 +41,10 @@ import User from './user/user'; import APIBrowser from './common/api-browser'; import './styles/app.css'; +//import './branding/slew/slew.css' +import Branding from './branding/branding'; + + class App extends React.Component { @@ -54,6 +58,40 @@ class App extends React.Component { this.state = { showSidebarMenu: false, } + + this.setBrandingStyle(); + //const head = document.querySelector('head'); + /* + document.body.style.backgroundColor = "black"; + + const rootEl = document.querySelector(':root'); + rootEl.style.setProperty('--highlights', 'yellow'); + rootEl.style.setProperty('--bg', 'blue'); + **/ + } + + setBrandingStyle() { + const rootEl = document.querySelector(':root'); + let background = Branding.instance.getBackgroundColor(); + + if (background) { + document.body.style.backgroundColor = background; + } + + let highlight = Branding.instance.getHighlightColor(); + if (highlight) { + rootEl.style.setProperty('--highlights', highlight); + } + + let primary = Branding.instance.getPrimaryTextColor(); + if (primary) { + rootEl.style.setProperty('--primarytext', primary); + } + + let secondary = Branding.instance.getSecondaryTextColor(); + if (secondary) { + rootEl.style.setProperty('--secondary', secondary); + } } componentDidMount() { diff --git a/src/branding/branding.js b/src/branding/branding.js index 94c9a72..fd9fad3 100644 --- a/src/branding/branding.js +++ b/src/branding/branding.js @@ -19,8 +19,8 @@ import brands from './brands' import config from '../config' import _ from 'lodash'; -import {villasweb_home} from './villasweb/villasweb-home'; -import {slew_home} from './slew/slew_home'; +import { villasweb_home } from './villasweb/villasweb-home'; +import { slew_home } from './slew/slew_home'; class Branding { @@ -38,9 +38,9 @@ class Branding { static instance = Branding.instance || new Branding(config.branding); - getHome(username = '' , userid = '', role = '') { + getHome(username = '', userid = '', role = '') { var homepage = ''; - switch(this.name) { + switch (this.name) { case 'villasweb': homepage = villasweb_home(this.brand.title, username, userid, role); break; @@ -53,6 +53,34 @@ class Branding { } return homepage; } + + getBackgroundColor() { + if (this.brand.style && this.brand.style.bgcolor) { + return this.brand.style.bgcolor; + } + return null; + } + + getHighlightColor() { + if (this.brand.style && this.brand.style.highlights) { + return this.brand.style.highlights; + } + return null; + } + + getPrimaryTextColor() { + if (this.brand.style && this.brand.style.primarytext) { + return this.brand.style.primarytext; + } + return null; + } + + getSecondaryTextColor() { + if (this.brand.style && this.brand.style.secondarytext) { + return this.brand.style.secondarytext; + } + return null; + } }; diff --git a/src/branding/brands.js b/src/branding/brands.js index de7fac3..3518e80 100644 --- a/src/branding/brands.js +++ b/src/branding/brands.js @@ -28,6 +28,12 @@ const brands = { account: true, api: true, }, + style: { + bgcolor: '#6EA2B0', + highlights: '#527984', + primarytext: '#4d4d4d', + secondarytext: '#818181', + } }, slew: { title: 'SLEW', @@ -44,6 +50,12 @@ const brands = { links: { "DPsim Simulator": "https://dpsim.fein-aachen.org", "VILLASframework": "https://villas.fein-aachen.org/doc" + }, + style: { + bgcolor: '#900603', + highlights: '#610C04', + primarytext: '#420C09', + secondarytext: '#710C04', } }, test: { diff --git a/src/branding/villasweb/villasweb.css b/src/branding/villasweb/villasweb.css deleted file mode 100644 index e69de29..0000000 diff --git a/src/styles/app.css b/src/styles/app.css index 4d588c2..f4d44d6 100644 --- a/src/styles/app.css +++ b/src/styles/app.css @@ -18,13 +18,21 @@ /** * Application container */ + +:root { + --bg: #6EA2B0; + --highlights: #527984; + --primarytext: #4d4d4d; + --secondarytext: #818181; +} + body { - background-color: #6EA2B0 !important; + background-color: var(--bg); } .app { height: 100vh; - color: #4d4d4d; + color: var(--primarytext); font: 16px 'Helvetica Neue', Helvetica, Arial, sans-serif; hyphens: auto; @@ -39,7 +47,7 @@ body { height: 60px; padding: 10px 0 0 0; - color: #527984; + color: var(--highlights); background-color: #fff; } @@ -56,8 +64,9 @@ body { } } +/* can be deleted when header-menu gets removed */ .app-header .menu-icon { - color: #818181; + color: var(--secondarytext); right: 5px; padding: 6px 0 0 0; @@ -77,7 +86,7 @@ body { } .app-footer a { - color: #4d4d4d; + color: var(--primarytext); text-decoration: underline; } @@ -134,7 +143,7 @@ body { } .menu-sidebar a { - color: #4d4d4d; + color: var(--primarytext); text-decoration:none; } @@ -180,7 +189,7 @@ body { padding: 8px 8px 8px 32px; text-decoration: none; font-size: 25px; - color: #818181; + color: var(--secondarytext); display: block; transition: 0.3s; } @@ -198,7 +207,7 @@ body { margin-left: 50px; text-decoration: none; display: block; - color: #818181; + color: var(--secondarytext); transition: 0.3s; } @@ -226,27 +235,6 @@ body { background-color: white; } -/** - * Login select - */ - .login-select { - position: sticky; - width: 300px; - height: 150px; - top: 50%; - left: 50%; - margin-top: 50px; - margin-bottom: 100px; - transform: translate(-50%); - - - padding: 20px 20px; - - background-color: #a8c7cf; - box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), - 0 9px 18px 0 rgba(0, 0, 0, 0.1); -} - /** * Login form */ @@ -272,7 +260,7 @@ hr { * Tables */ .table th { - background-color: #527984; + background-color: var(--highlights); color: #fff; } @@ -424,23 +412,23 @@ hr { } .section-buttons-group-left .btn{ - background-color: #527984; - border-color: #527984; + background-color: var(--highlights); + border-color: var(--highlights); } .section-buttons-group-left .btn:hover{ - background-color: #31484f; + background-color: #31484f; border-color: #31484f; } .drag-and-drop .btn{ - color: #527984; - border-color: #527984; + color: var(--highlights); + border-color: var(--highlights); } .drag-and-drop .btn:hover{ - color: #527984; - border-color: #527984; + color: var(--highlights); + border-color: var(--highlights); } @@ -449,8 +437,8 @@ hr { } .solid-button .btn{ - background-color: #527984; - border-color: #527984; + background-color: var(--highlights); + border-color: var(--highlights); } .solid-button .btn:hover{ @@ -459,8 +447,8 @@ hr { } .solid-button .btn:disabled{ - background-color: #527984; - border-color: #527984; + background-color: var(--highlights); + border-color: var(--highlights); } .icon-button .btn{ @@ -474,7 +462,7 @@ hr { } .icon-color { - color: #527984; + color: var(--highlights); } .form-horizontal .form-group { From dd713628b60a6d7f23a11ae61b4c382d3c53c616 Mon Sep 17 00:00:00 2001 From: irismarie Date: Tue, 9 Mar 2021 14:19:10 +0100 Subject: [PATCH 06/45] cleanup side menu --- src/common/menu-sidebar.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/common/menu-sidebar.js b/src/common/menu-sidebar.js index 55f1580..41b302f 100644 --- a/src/common/menu-sidebar.js +++ b/src/common/menu-sidebar.js @@ -67,13 +67,10 @@ class SidebarMenu extends React.Component { render() { const brand = Branding.instance.brand; - console.log(brand.links) let links = [] - if (brand.links) { Object.keys(brand.links).forEach(key => { - console.log(`${key}: ${brand.links[key]}`); - links.push(
  • {key}
  • ); + links.push(
  • {key}
  • ); }) } From 71cf864902c53004027a5eeef8608b889382c868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iris=20Marie=20K=C3=B6ster?= Date: Tue, 9 Mar 2021 15:03:28 +0100 Subject: [PATCH 07/45] Upload New File --- public/slew_icon.png | Bin 0 -> 27244 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/slew_icon.png diff --git a/public/slew_icon.png b/public/slew_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f3c9a6483b3e5622be9658397d2c69bcf8545b4c GIT binary patch literal 27244 zcmV*DKy1H>P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&Y5_?^K~#8Ny}bo= zTi4dEtuQk)GeeuC+!T_wX_y*jhPGj5hiu2p%(i4nwgnb5+m@LfXt+tkO#bIwOWKy5 zp7VYG828>Wp0UT$*0xVGAH8#~E!#S*>gsCNtkVu=pF!rjvF5q4=AT9AV!=6N;W^f# z^Q^@e94xuWTI$YP=D}L-!CK+TT6KxF+KaW;o3+k|wcdxd!I!n!AKB{1+UC#N8HoH5 z#M%|Y+7rs!8^PKi$vPOtIvm3~8pk>s%Q_y%IvLM8oyc-aVx3E7oljw1j+KGu=mOS5K zLRIK6p>vu5jAeCAfCdU9!%k#SAFd``eK3F(JYN47YBbDoLkBe)Tp=c0HT?FGhLuhY z>zo=k`4J5PtZjj;?Vur;^?L~GPZtdbh=#+lsNopVaEfT4fdCB<2#-{j7mwx5XZfVF z{4!8Ops1Dx2n1-rK&VL|)Q&)a2?zve;5$vwOo*~rq8x__2n3h_{?!Cz0-z==LCS@X}-!d1g>7mp-MaLmX;2K{POZiP1p&l6M-*H-qKp>`P#R(GW>A#Hvt3f|`}2WhLt{6WE%JEH0RE zYRDk12{ef9Xo9vTszF&uOcd75M2!h&ChGbiN>IiXhYa*_)zPf#)crq!8s@-MIK`TK znl%@qaE3Jx_*lc){~sD45dTF3O#?F?4#l#LkU$)dcZ`QKN!XWMHDDl!24*~9ASAW> zl8O}vCRAiX=n&9AO+Y571`LFaCCql1pnb_Ba4 zvO$6)oy?S44k#a`0jBgCm!`Clq=C`E%m(aB&NR^R02-Jn&GaQk1Cs_u!^aZ>`cgFM zOO6TQG{Gimpn(7ruDhmMChRpPRKx_$1haSg-^;)r<%E%e5upngH?9y3Q1^3qWEM;m z>SzE5R70JP1bn<o5`+;Y5>T%1`X02G@)>sP`T`4X(kvGu!CYYQ7Gf1O>Ipw0B157 zE43geK@8CVrFViF&eiHgGz1Kc1IlvZ05y2kXrK=0Z1^u4=w|64Xo#-SP&1`T8W;_i z_?QOJP%|Nj2Ixz4P=f~AmoN|-M<76h<2J%|^GZwz$*u`aWV0l2Gm(QbAQ039?wy=- zLi^G7iOTrz$zbyFUvT7xYG8`)ifbdH)Qtj319gCd0Xou08o&XwVa3@%n^FX8S0rn1 z6l;Gp>p%@}K7Rh<-TU{|)&C<;-@Y$@`a*W+ zp|!Akt_`Y|jE`o9LxxK}nDxIxG`Q7eA+)2jtVL&8i-B{dd}sJtt;pTBl)?BwCAG!W(Zhfm7DC+_K!BU`<QAHR6@q5A&;g->4Ay03OM z;hG6%?*t7BCpMKq03VDD#suTTRR#lNg#vEShs$h74U1p~P#^*H=n^OGuffR zWs}N8p{@pqLSU`IfbS`hn+Eb`#-soNr}(eu@2g*Y_}_B()m!cDhiO;-jw!q4S9tAA z&gFg9@@>YF16dUp3a*8g-{SstPj&ZE{^RFQ-+!p{wUmrI4{L@5%nVl(BAX)-Nbh1Cs$V=)Hxj2B(QS)Ug794A+OK0SfI}bXV{;%_RqPGBXZPgL8w#XrK-@(f9R8 z8UPvvr-rYBM3So8&puTDj}$$8o>+G4puS{gnz>(uw7z#*J?{*bPX@~uwyosu0dF9j z_i>Ib6TY|6JW)MKlCvqRBINR2+r#IN-+zGbR{7%f2&gP*s2SI_Gf`(w&`jXOcHZ1k zAC6>@yF5BDTxFmS(x#X-n4o9q+EoC>q2XhwfPZ!1ssS8O4VZ(E?ilK9ll}i@#s*YDV6H`ixo_YD-Y&ZX8n&#ixfSI?cx^5oX@N~`CU4kqgP3hFT$aOdjK zP%m6o4{qfg?|##_H#GGUw9VOu0mAIYux-T~I_LhiR(FECYo`e&5Fcm4)dbzqGFvI| z;ZRb0j8hYJ9@fF3fhjs=F%-BTsh^;&pQx*s zOzt7*-5j%jbu|ItJ5DZ{ptzb~lA(eft#eb$ygSQ4l~7y-)S;FJtT^+M$3?v*?)8_t z*I(vQ4+YQ!I0dYL>U*P zx*o?+k7KL{f#8}Pt?9pH0)I?IZ?oypcFt`u0sAP}*MbiU^e7C6^Ieb{B?P*;!m0jm zVo(FT>gfcAiX$HNm$}zp4jSC+!H#IzMLe$bV6F75w~Da(QoS`^_1AheSm)hfolpIB z-ax$#zV$cy*5Bk;f3sixE&lbk2GrjcSbuw9W{JCf4ZJ;X>l^K z!I8K|#}a^sClVW+Oss!8sll1#24_>iL8FW8M(&)(?%c*6{Kj5sjeRm2d8IY+7B=(~ z)`xrP071PVQT-5c!%#`X(9A|*vc}8U-j7Z z>n-=FzudF_3J-<`z)H_Xt1cm{y&T82-VK5EK8@D#D6Pg@PYNonlHZhSVS@db91i>b}rxlKKIO+3?@c%=hPy)zp7W;F5_)DI9e2og065;YFV zY#b_S5+-dDE^i#6XcVbv6eVvIt85gjZUSk5OeAXSIo@c})nn`Ha}4!UX(mucy)+jM zOeO$vw&Q&#W@y*M!lhHunSpJJX;u&p0yEMXALxdG*a8iWS9msD;YrI4G$cpInpD5> zs!L5*d)2VUtLa+rChNQ#uk&fV-lxe%-^Rcuzb2dfn{4)PvNfPFVeHuyc(MQezPb)~ z-hH^BEADb4p~-=$#s{MtABt^!B&NyHxTeSAn;lPR0_RUAG&z;r^bEV{S#}e*WM%@77LEF zN4d(NK2V8EIOrW8Muavi=SXK{d<=*I4NX^iHeTt`aFs{Hl^%^&c{X0ZgT<;B~(@2cxy zxb^T$KS9g=ku45HH3JUCG&>aA^l(h`qp>ZH#kV}3(EMaV)06SdP9?QClhWKRrTJNQ z^Yfe*7dXw_Q$a(cOT0$jpdlShH1!oU_ZKw_5H$@HHw%_D50WQ=KW#-hQGF-#K_;4t3-hsQ~=vw*p03`yssi!IcP(!m-o=sPIHd*c2c(rGfHJ6$J zt1mTQ<3)kew_NMfa*cPZwLY!Z`LtRO__p5Q*K&hz%Z+|5H~F>P?B5*N;@@&>V5@CG z!0LGQ&9@(JzpHlT*4ye+%KY{RqgwBcXuUtO)&8iK2cudXif(y04ji;R8r%9fXozol zBEH3`gqEk1Tb)U1>Beq#mecAyr}YI+tBc&0?z|SB{1#qm&3!VO`v_Y23S0V#S_Ft% z1ZK7j%4`)ZZ51kQ7KVMPA()7eH;a(Bhz69cV%4qUG%ez_&Ej=U5_F9dbxo4=O_I?B zWC8+FA55g0U>94TZ>bNNNVC*W2OnSphju+-7Jxp)+4aTQ4L}3_pn~4wk!D3@&;^VQ zDuaP4p$p=pfg-;SsG$WEeKl0ytNB_l@?!VGq7xj|U+dF)Jz;}y>y1d;&HimR`L){Q z*Lt&m>n#DTwg$A?7SL*YV5{vxTRHk0Z>w*E%7fSP z62FCaT1%gdR=$GP{=%02f>wc|R)OL+A(B?1l4hZjrlHct;j*TY3e*rqG{mTg32n=G zUGqd;GayOdELqPzkQU^hiJRP|-KKs`7Ez=9$N4RmLPS!p0ACg3Q~Yb4Ka1W$p6)@!}n ztV7za_i?b!m!ZviKY&&rN)Ld8c3T1flmW-Bfo--0w%Hy8{F!FC@vgcK>YEQnLpAqA zwB8fZc3)JR1JOY1gGighu>d%LD6~DE(Dp<^+mnfHP9?QHo!s_pO6zm%*5}z&Lo4^x zR-Rm-#U)+~Z+;6OekRKd$30<=ked82eW469AnG=n;rY2l-V;%+qXq;|sl5T5~ zW^I^Z0~7TH)&@dbBSBUZQBGq~cH_*PhKRiZSbie-x}Cq zTTpvoI}p5;ZTRb5bsbX6Z}mPL*M4_ITVPLQyZzDa4n(&*6x;rAT-(F3?T*B?JrdXY zSR6QLcOtRf$wZIh26o;S*m-+Ur|p5Ab_6Yrl3#gSef3=}!g4Nm+ZWYo zPh`hEksbC%cGwry;XrhUgV7xh#dJ6fCSuzkiS2MSzU{HNcE{s8o=og;5>0@Hb`A|G zZO*eH3hmsvZ2%8mn@ha5UTJN-)7pBcwe!hn=PPLMCv4|0Y8NPO7nBJmpf$A#m9`F( zwhEWF3755rkhO`FwT)J^jaFhN;#95UHLYVcZQ`|U6ZLJ94Xu;(t&$Bb*@k8uL$g$4 zi&UZ^)zp+{LHO2YX&4BM1*0J&t7(R<)?T+ZYJEF^;$jjI#dSE5 z(BXJOr;~{tPbRfLmDK)pQin6i?arpOJ(tq=$+QdC%uzT zMhBmaj()<9{=$v{qK<*$4ndjigC*@krR~B{K>Kic`v`gaNLj}yd50)P`)FmmXcahU zhZ@xF5;W}+wLtqMUE5?`%M@*Mj;}OZ zB_KvnLwBruK#y$TdvNdHLwfHF8N4r2ar0rt+iF+B z?N|Eji|VyEvd6y2p8KPE?2qccKdRfo=x&E%x*v+^b~v{Ck+^P0v}xC+llxt zCzF8A!0F^pXHq%>XW1RjaXOsmw7SjtPCFqKVc#OH0r|Otea~woG@>D&5v9-P$_C)*4KZV=F;606tm? zb6N^PMs{-~rU?hQdhuk8W7b~xz0BM|7bBN*trGo*&!gBkk$ z9^C(rkbZxL^!+mgx_|lGYF9YrxBDH4>b)RQaX|N@ z@!gImbUTsI{bWMdlgU6A;B-otGwjZ1*qzRDI-X1Ibe;=zyuj^rk=MzC-^r8T=~7xp zz&pK@cX}6}j4pnH&fox!0m9CKqE12Lj=`B7LnIx;Bpt)09m1s@BV?T-<(;DxogfWS z^0v|Pwz0}~v1%~U9vsBu5$Kq#?U15vm!fOS*0)MAfP)rXL(5b{Yp$sc*9<;d^DPd* z1m6P9sztiBO}e!mm=J&!GaTCptgT=TRs>l~;D4CucrY$wN9`nK8?)!ip!P9*l*AJy+b zG|(3~7}MuaOrOIsy@4aKy?|qJy^qKDK9SJlczpL0iQP{oc0ZNW{Zw+d)9h|%*j>-0 zbaev_?9S&nozJIsMhD!^?w|qb3?{tNzyYM8i*H63Ujdlt;xFtJAnXz(?i45j4V^+H zokFFZ!lYn=(ExPBzNBaut85>u?hvQx01g-pN!kuTvaVe+%xyH$ieqTaF|v`M$L%0N&x$B0}jXaI}+RXNL;^T@qLfR^*I*T=XiXd6A8UfCiFU) z*z;sk&r``gPbc>{lhWf1yT@5h_p_qTxCVxo&Dzw4#6u3qU~ zyfeD`WOVfvIPe#C#ik_c93<`>oY^Hr+8H#2N;`+kI)zI+N65NHq6W-Fw4!~CqC)3EMuzSV8@dO%P$MB(h3H!p6OK%musdi;)q+;-aXa@(Q2OW+XbR>4* zkr?D?>;T|cT>s;7{ZGX8I}zXaL_*(_iG5Bc^*)u{=QPs$OiE9;l%8ifV4}x4PWN-{ z?&mo@E~fTy=XQ7JcJttOyOf4_X8_%O1e9*Rf^PmI(9ktd+yw~A>>48J8Y=A?ChHO= z?HVrY5&_7&MJc)v4V_{X9b=W9;#5eynxS)orc08pbCMoRv`^8sOVM{=8#=O$Ks&af z9mfQKj}BZ*2YLi}mJWPNd!Bi)IOhj_NiT7B8?*v$tR2#A?K864rrX+P*xF=R+hxER zYkPpKK~h_~NVl{H;4U3B4BH(xd=C)LFk&wdF>+rd!zkxs!~q~`C)Zf;rrMQ@hSH&j zVul`!8G0yo*x|ULhhv8xi5qexZtziL(6P9I!0~wGM8d$63H?td^gEf@?^JTXQz`w< zB=l~-|`PAMQxV?aj+@2S?y*zk5Jkxr3ruXp5=}{_dB232e`lmz(k*m zygnYh-X6T39{iq{(t3JlAU*_NhlU>hqHY1AZh>M5L^se7ECCbULeWGwNJF@+8>Asp z0d$R4bct4Uj#hSwQFV@0fr+m18uSs5i*E7SZVB4X(4CTX?a9#Y0GUY9w_{_E0u3O5 z(vg^eMJK*R_v|fG2kDd7U7_Njfsa9H$1}I(nZZYgG;1d(_$)bgO0#r!f*M92fQm;k zg{BK&+@Tm?{NY#t*Kj19(-hm^R5Rqf`YvL4~`?qTxo zaEw3=(3&t4(aNqdDlpMCR^2rYHFPCDz(My!T{j>}2Mr2j03Cr8T}QSKdQ=CFsgsk= zsb)BK=UEId-nmv|TmH39JQLQMXNIf*7#*GkggG2QA0v`L1{Kpe&4wDrL#>h635Oj( z-6tH0n|L&y0_zD!VkaI2;--1>EYIKPysl<&HC}gfIDx1JGZ|F zufHcB=y!?V+Y6u$GJ5+8dix4{`-yvj253rPf<_@IvwN_ldx%3r&u}>aGI~VFzvEj9 z??3(Uq55Mqw;oL3nW+X!*Cc(HWTbPlz7uFb^qts-P8>sLjGC_S)zCeA zH$Z6X1pNxDk96XiJMqAZ3q%H8qaGef!^Fd}pBzCxJsJm0Iu=hCgm`#3=~%*~;|Y^a zAOYD|vR+p+C?CB1@;rOu$%F|fNx+!X$)isvk2-^l zbW0xYmOSii^00F$L(Z`Y+#%;uhn(jk7kR)ScivzRJ}}6GKhTpu@KRd;OKJVQ()xO* z_wf<*@yX~5M_*wdKT$7#G0-DG+yevbsJ6|7q_; zZFe+*Kp?sjx+Ehs8J$z~o!OwF7Q-@Z`seRmYjULYRu`_ZGuPCaYlhIc0!m0YkS;t6 zUO+$%pB;|_K0gsp7r>Mg$Y&?xr@+aR$P~iQmw4uvAFQvd8U9GOOg^3P>FM}SPRD-= zi&Kf8o=*DYO!CAtDZqp?DdQ<_DdWzhj6IVw<}7>kIrf-y>`~|0BhIsjpJxv{&lzzc zb@+wUVU&y9p@2JohzEa&Cx5Vmv_W3!1HIGxd#CsF$>`@R=0FaoIjs;rF((~=s`?? z5|DvDk^z0UWIY_arWm?_3<}%Om16|{D7fxg6a9<#Lo#e#Q%zk{&0X+lgmsrxW9L+3 z7p{pIGQvXuui?T4Ce-lx32+ei#mRWem!}daU!6{*N8pQ7iJzZNJZ~tmysl;t-hKMz z+2qgMlBS$Voa_d`B5CrOk$Kj62I7caA;&9B1r# z&gk%hc=3mLrw#GW804KXz$c@> zPx=5K!2loO0AE2rKS3WqVV?kTpTNvsARtK6I}nc$h@PP`BwXGnT=6~E{QkoSO5s0G zMkVTcMJsy%F{;U2)7=-Z=uA@S}!376HFY$+5;txduX@kLp zPx=ra!60A3K%Wd?kgsrnpRm8bpr606Z-BUOAPNBb21)w_%X){%dVvG%NU~nxvXkaA zc+FF0iL!b}t9nH#dqt~y#;Cx=pN3NA*`>;Y9tm2ip(h*(4jGBMp2-Hr1SSK-u#J@U zS(jZaBYyg(57)vx3v>f3@Y?4%79a)$^nfFI7BxVLDO25&9h^=1t~TGFV;>af7+zH~ zWZZrF-Ff!Z^XzZVr+j^(hOf@EVOlu2!1?R~`?Cw2DHl>FUre2JA@x&)`{_mACl|RB zF7n2^BV#?d<2`vZ!le_v(?(t5jqv1-xWpfEDQ%cn+EBndeXw`NP@jxpJ{e$Qh_7I< zuV9d$V35CXpg))ZM8t%+ZxCwe7cA=&BI_NBCVGd-`-Uq*3$D>BzkK_yf3&Jkl&W{6 z5@hs_QGUty)U;(iJKuNL=Wb^l1PN3DE#WM-xN?I_S#Q_e?SLWE*>eo)kk5M2{MNyvU{Ho^~;H`o+|r+*5zL$OWdu z(cQt4P>J?cHG}fmyV-t%Y3^L;RKO1&-0uNT-gll{C%ma1+;2R%UwiVt^5A|2M^FA2 zp8U@VpLz19c=9KCrfo|#K7aM@?Yj@Iyng%sxIAw(B*Qynq))~O-;CkD)B$Q3N;C}j z7Y_v!0ir>HqJe>;{sH3tL7Dx7C19d|u(V&Ov`>h%Pbdxsn9qM`ikWYI&{){LW}-lo}D4e=^dv52YrA99W?8rOhq7`F(GsgG|M)?Xx`U*z)A>acS{$kKDEI>RY08EGn2Z;v- zWey0E41i;>WI%|tf2g!?h^$|j0=7wzhVk*b2QS~y@BHZ1+fB+sFaa9+MXQflDqg*P zPoJuM_`GkNrVkL0^i4n+U;^7zJa#Gs!T}HgbWOuSQ{r*uzH61X=U(fXtakGcWOHdhus_r`2JOPdew;6VEZhyfc3F&Y0l?r2pcR z{{)eiQvqEKnNh| z?=;ajRNgOC0X}wXika^WR6TsIyng@2(^t%y*Y7?ome~8os`|yL;n)|B@oMw|Ln2<= z3w=1-RDu>d6$3Rv#mv=}xK=6g{tK#yxqw;pO4hrA8lal9eFU?8GUoa^nCB;OWktA5 z@v53Z^!Uv@f59Bzj5)r7*}j5Vei<|UGJZwUXZWT4;+y`nZwBQj-}Grn#*e-k-}|Pc z37_<-J{jNmq<`&`&bD8Me>`yS+3T+Zgj0M4lY9jEcOKG{hO2*1@D+~t6OQ#2f(eMl zXy1&{exgzS!Vv+WK{PxN85$@W5|}wSm=KaV2sDIB28PN&L;p~D|1ibCP{n{SMgMSR z$v@BNcm7vG3a|BxQ32?H5(gU8kO`a4m z1PEs%g4zCpS^k1w{RK1p1T*}FzxWA$_RIJQ@E1<=6a3(p0etT(nCdI|);EJ+aP9S5 zm;@hgKYsa@ui$fEFd?-5b)TNJUcW!lPdLF}INo0{)`4)0zi4!TcqF4CNIX0+b7)ZJ zkYEWRb4Z9}P^ffZm}~$dA4mz8A2F1{_q_l7&C56M>Gx-VlYeSU`bMjPeleQ9F^~pL zzc@hKFJ4QIy1p(BD6~gmO5$~W67{_j^*BNjb;rx@xYlZowF-p<<4`06dnQQr$Z3@b}D!+Em{`X_~U-!>vRZeCbU`S96{bRMngoc

    W*@4)#T0JP%VjG+doCY1HJVDXaR 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 LNkvXXu0mjf&RE}| literal 0 HcmV?d00001 From d82f24dc3f93e6c69847cdfebf405847384c30c8 Mon Sep 17 00:00:00 2001 From: irismarie Date: Tue, 9 Mar 2021 16:23:56 +0100 Subject: [PATCH 08/45] icon & font --- public/index.html | 2 +- src/app.js | 34 ++++++++++++++++++++++++++-------- src/branding/branding.js | 12 +++++++++++- src/branding/brands.js | 2 ++ src/common/home.js | 5 ++--- src/styles/app.css | 3 ++- 6 files changed, 44 insertions(+), 14 deletions(-) diff --git a/public/index.html b/public/index.html index 47e21e6..a223e54 100644 --- a/public/index.html +++ b/public/index.html @@ -3,7 +3,7 @@ - + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/src/branding/branding.js b/src/branding/branding.js index 92bb583..83e038d 100644 --- a/src/branding/branding.js +++ b/src/branding/branding.js @@ -21,6 +21,9 @@ import villasweb_values from './villasweb/villasweb-values'; import { slew_home, slew_welcome } from './slew/slew-functions'; import slew_values from './slew/slew-values'; +import { template_welcome, template_home, template_footer } from './template/template-functions'; +import template_values from './template/template-values'; + class Branding { constructor(chosenbrand) { if (Branding.branding) { @@ -43,6 +46,9 @@ class Branding { case 'slew': this.values = slew_values; break; + case 'template': + this.values = template_values; + break; default: console.error("Branding '" + this.brand + "' not available, will use 'villasweb' branding"); this.brand = 'villasweb'; @@ -60,6 +66,9 @@ class Branding { case 'slew': homepage = slew_home(); break; + case 'template': + homepage = template_home(); + break; default: homepage = villasweb_home(this.getTitle(), username, userid, role); break; @@ -68,7 +77,16 @@ class Branding { } getFooter() { - return villasweb_footer(); + var footer = ''; + switch(this.brand) { + case 'template': + footer = template_footer(); + break; + default: + footer = villasweb_footer(); + break; + } + return footer; } getWelcome() { @@ -77,6 +95,9 @@ class Branding { case 'slew': welcome = slew_welcome(); break; + case 'template': + welcome = template_welcome(); + break; default: welcome = this.defaultWelcome(); break; diff --git a/src/branding/template/img/template_logo.svg b/src/branding/template/img/template_logo.svg new file mode 100644 index 0000000..6d7f29c --- /dev/null +++ b/src/branding/template/img/template_logo.svg @@ -0,0 +1,109 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/src/branding/template/template-functions.js b/src/branding/template/template-functions.js new file mode 100644 index 0000000..d6b8d58 --- /dev/null +++ b/src/branding/template/template-functions.js @@ -0,0 +1,52 @@ +/** + * This file is part of VILLASweb. + * + * VILLASweb is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * VILLASweb is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with VILLASweb. If not, see . + ******************************************************************************/ + import React from 'react'; + + + export function template_home() { + return ( +

    + Template Logo +

    Home

    +

    + Welcome to BRAND! +

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut + labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. + Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

    + +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore + et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. + Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

    +
    ) + } + + export function template_welcome() { + return ( +
    +

    Welcome!

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut + labore et dolore magna aliquyam erat, sed diam voluptua.

    +
    ) + } + + export function template_footer() { + return ( +
    +

    HELLO WORLD, THIS IS MY FOOTER!

    +
    ) + } \ No newline at end of file diff --git a/src/branding/template/template-values.js b/src/branding/template/template-values.js new file mode 100644 index 0000000..6eb7215 --- /dev/null +++ b/src/branding/template/template-values.js @@ -0,0 +1,44 @@ +/** + * This file is part of VILLASweb. + * + * VILLASweb is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * VILLASweb is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with VILLASweb. If not, see . + ******************************************************************************/ + + const template_values = { + title: 'Template', + subtitle: 'change me!', + icon: "template_logo.svg", + pages: { + home: true, + scenarios: true, + infrastructure: true, + users: true, + account: true, + api: true + }, + links: { + "Google": "https://www.google.com/", + "StackOverFlow": "https://stackoverflow.com/" + }, + style: { + background: 'rgba(50,30,90, 0.6)', + highlights: 'rgba(0,230,5, 0.75)', + maincolor: 'rgba(255,0,0, 1)', + secondarytext: 'rgba(0,0,100, 0.8)', + font: "16px Comic Sans, sans-serif", + borderradius: "60px" + } + } + + export default template_values; \ No newline at end of file From c7948f0658640bbf301b0f09f5a8cd2132a4b072 Mon Sep 17 00:00:00 2001 From: irismarie Date: Fri, 19 Mar 2021 18:26:56 +0100 Subject: [PATCH 24/45] remove config.js, get recover pw contact from backend --- src/config.js | 25 ------------------------- src/user/recover-password.js | 25 +++++++++++++++---------- 2 files changed, 15 insertions(+), 35 deletions(-) delete mode 100644 src/config.js diff --git a/src/config.js b/src/config.js deleted file mode 100644 index 72b222d..0000000 --- a/src/config.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * This file is part of VILLASweb. - * - * VILLASweb is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * VILLASweb is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with VILLASweb. If not, see . - ******************************************************************************/ - -const config = { - admin: { - name: 'Institute for Automation of Complex Power Systems (ACS), RWTH Aachen University, Germany', - mail: 'stvogel@eonerc.rwth-aachen.de' - }, -} - -export default config \ No newline at end of file diff --git a/src/user/recover-password.js b/src/user/recover-password.js index 4105f4f..8ac6991 100644 --- a/src/user/recover-password.js +++ b/src/user/recover-password.js @@ -17,15 +17,20 @@ import React from 'react'; import Dialog from '../common/dialogs/dialog'; -import Config from '../config'; +import { Container } from 'flux/utils'; +import LoginStore from './login-store' +import _ from 'lodash'; class RecoverPassword extends React.Component { - constructor(props) { - super(props); - this.state = { - admin: Config.admin + static getStores() { + return [LoginStore] + } + + static calculateState(prevState, props) { + return { + config: LoginStore.getState().config } } @@ -44,14 +49,14 @@ class RecoverPassword extends React.Component { valid={true} >
    -
    Please contact:
    -
    {this.state.admin.name}
    -
    E-Mail:
    - {this.state.admin.mail} +
    Please contact:
    +
    {_.get(this.state.config, ['contact', 'name'])}
    + {_.get(this.state.config, ['contact', 'mail'])}
    ); } } -export default RecoverPassword; +let fluxContainerConverter = require('../common/FluxContainerConverter'); +export default Container.create(fluxContainerConverter.convert(RecoverPassword)); \ No newline at end of file From ac3fa5dced64c08d3eca87fcaa77c389ad5c5979 Mon Sep 17 00:00:00 2001 From: irismarie Date: Fri, 19 Mar 2021 19:23:38 +0100 Subject: [PATCH 25/45] disallow routing --- src/app.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/app.js b/src/app.js index 8fa96f1..c71a367 100644 --- a/src/app.js +++ b/src/app.js @@ -80,6 +80,7 @@ class App extends React.Component { } let currentUser = JSON.parse(currentUserRaw); + let pages = branding.values.pages; return
    @@ -93,14 +94,14 @@ class App extends React.Component {
    - - - - - - - - + { pages.home ? : '' } + { pages.scenarios ? : '' } + { pages.scenarios ? : '' } + { pages.scenarios ? : '' } + { pages.infrastructure ? : '' } + { pages.account ? : '' } + { pages.users ? : '' } + { pages.api ? : '' }
    From a2fc68ee5e4ad2c02871aabcd4b0851180017cb3 Mon Sep 17 00:00:00 2001 From: irismarie Date: Thu, 25 Mar 2021 11:27:55 +0100 Subject: [PATCH 26/45] add logo box, improved slew logos --- public/slew-icon-draft.png | Bin 14847 -> 0 bytes public/slew_blue.png | Bin 0 -> 4097 bytes public/slew_icon.png | Bin 27244 -> 0 bytes public/slew_magenta.png | Bin 0 -> 6426 bytes public/template_logo.png | Bin 0 -> 2114 bytes public/template_logo.svg | 109 --- src/branding/branding.js | 21 +- src/branding/slew/img/slew-logo-draft.png | Bin 23131 -> 0 bytes src/branding/slew/img/slew-logo.png | Bin 3939 -> 0 bytes src/branding/slew/img/slew_blue.svg | 1032 ++++++++++++++++++++ src/branding/slew/img/slew_magenta.svg | 1057 +++++++++++++++++++++ src/branding/slew/slew-functions.js | 3 +- src/branding/slew/slew-values.js | 3 +- src/common/menu.js | 82 +- src/styles/app.css | 7 +- 15 files changed, 2158 insertions(+), 156 deletions(-) delete mode 100644 public/slew-icon-draft.png create mode 100644 public/slew_blue.png delete mode 100644 public/slew_icon.png create mode 100644 public/slew_magenta.png create mode 100644 public/template_logo.png delete mode 100644 public/template_logo.svg delete mode 100644 src/branding/slew/img/slew-logo-draft.png delete mode 100644 src/branding/slew/img/slew-logo.png create mode 100644 src/branding/slew/img/slew_blue.svg create mode 100644 src/branding/slew/img/slew_magenta.svg diff --git a/public/slew-icon-draft.png b/public/slew-icon-draft.png deleted file mode 100644 index e9280c33ee05f6714db1a66970ce4eb80c111362..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14847 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 H?x_C-ID&p6 diff --git a/public/slew_blue.png b/public/slew_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..e552b50bec0aec2c74fbfc5cf214ac37a9afc09c GIT binary patch literal 4097 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 literal 0 HcmV?d00001 diff --git a/public/slew_icon.png b/public/slew_icon.png deleted file mode 100644 index f3c9a6483b3e5622be9658397d2c69bcf8545b4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27244 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

    W*@4)#T0JP%VjG+doCY1HJVDXaR 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 LNkvXXu0mjf&RE}| diff --git a/public/slew_magenta.png b/public/slew_magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..3e2328d9c0bf7bd7e364ea3643ccba097c9030f4 GIT binary patch literal 6426 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 literal 0 HcmV?d00001 diff --git a/public/template_logo.png b/public/template_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..335e34ed68ac65a8b3e8706f884a9c89474fe596 GIT binary patch literal 2114 zcmV-I2)*}-P)OV8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H12fs-~K~!jg-J5M}6vr9If3th%ml%B5V1u!#Yzl<%rj)jk3WijH zPzPh2v?ZyajT$vgKU73jrKX86Vkx0b#h2Ddt)ePQlMpqDq9(*ngDJF4+#sbzh609w zA(&tn&ZaiTKKowQJNXt+FeOrK06`y;UIcAG8XRq-9Ww!_}d2~3r80NSq zuXkz)mY;!;j7>kZ0M)doKG-(+WhwP;!q8s$)-Jdz&%dYiW7A65*ytg zU|xbC+q@imdU2?fO?&b*Oy4RL#Pqfl#!ugzAUzpdi@_adsrHj%dwOxmBIsMGVTmuP zP}^JxPt5{Bc;ITlwpsA)0(*K(bK&hTLU|<4T;hg(6|gp6g|(yH?E z%2XFOcW5()>Gu)n^YvDAGg)c;yYDtjLdtR}w#c>TOn*oQx zt5^oRE~}KgsoSmez?dIReyE8WV-U$lDwRWnH{zyW9)Ol>Amhvd0v2@mlIZ&S6j(RP zhoZ(99GM6;0IO9g>+T$^P;93fG~wkoFfBmB@}k&xUTq6I=>9TTkzjSAyA}Qv3L0S~ zBqrUj5I%6Eglx}@acMn)NaKO7q1e2D6>dDhg$cgoc)B(*5xfQw2Z-8jUZ6>pdVa-{ zacMJiV5&PDhMwz*&CAlj6IntRO|TU3R4i3vpx|9mZCr)uNU$a9(c}gd`kwM7Ts!dr z!GW8Be76oiybA_GP%>tUFMuucp{)bTSsU*6;(eVcZQM!s7FMNF}edbc9pS9MGXLXGs`Jk^(}q9qZ8vE zl9G+a6G)y{Rr9E>v>58{z~^np-*a^|BBZ;s(R1?1onAuTta5T^lqNFGLFM9cv2n)> zW0Mn~5^FSGMDl&LR@@>a`@}}$d-1Xohgu{*2L6*Sn=;5T{P|BL%1r10QDY1eVjXFU z7i5SFxZTy_;hzpADllQNO?=bnLh26yofDP2P3gd7t*F{I;Rb!uXrtJ;{URonq#4K^J8mk0W~a7gfcGK0QdHMnN~Lhh@n%tF^e~0{fSrKaV@qm~ zKs`gO6C0jM`81KuD>KGgBrgKWrf3ei4B|0Sv*Yk&U$nL35IJagC*j_p?$FBQ2?F(4 zxr^;I9#mYLYc%E}d7ALy>P+1p3m|z3^ykFJ?H8R0sk=CNV0Q_j(8$HfbPbKmz&_mW zy~%#wQbqmMS;NryGOK|{fHlB;hmz-j!$|FQTCC>V_UddR - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/src/branding/branding.js b/src/branding/branding.js index 83e038d..a49b424 100644 --- a/src/branding/branding.js +++ b/src/branding/branding.js @@ -26,10 +26,6 @@ import template_values from './template/template-values'; class Branding { constructor(chosenbrand) { - if (Branding.branding) { - return Branding.branding; - } - this.brand = chosenbrand; this.setValues(); this.checkValues(); @@ -175,9 +171,7 @@ class Branding { let background = this.getBackgroundColor(); if (background) { - console.log(background) rootEl.style.setProperty('--bg', background); - //document.body.style.backgroundColor = background; } else { console.log(document.body.style.backgroundColor) } @@ -208,6 +202,18 @@ class Branding { } } + getLogo(style) { + let image = null; + + try { + image = {'Logo + } catch (err) { + console.error("cannot find './" + this.brand + '/img/' + this.values.logo + "'"); + } + + return image; + } + getBackgroundColor() { if (this.values.style && this.values.style.background) { return this.values.style.background; @@ -259,7 +265,6 @@ class Branding { } }; -const branding = new Branding(process.env.REACT_APP_BRAND); -Object.freeze(branding); +var branding = new Branding(process.env.REACT_APP_BRAND); export default branding; \ No newline at end of file diff --git a/src/branding/slew/img/slew-logo-draft.png b/src/branding/slew/img/slew-logo-draft.png deleted file mode 100644 index ef10ecbc60db4337d3a47c9077bc8231837ad4e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23131 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + SLEW + + + + + + diff --git a/src/branding/slew/img/slew_magenta.svg b/src/branding/slew/img/slew_magenta.svg new file mode 100644 index 0000000..b5b5386 --- /dev/null +++ b/src/branding/slew/img/slew_magenta.svg @@ -0,0 +1,1057 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + SLEW + + + + + + diff --git a/src/branding/slew/slew-functions.js b/src/branding/slew/slew-functions.js index 1fecbe7..715d183 100644 --- a/src/branding/slew/slew-functions.js +++ b/src/branding/slew/slew-functions.js @@ -21,12 +21,11 @@ import './slew.css' export function slew_home() { return (

    - Logo VILLASweb

    Home

    Welcome to SLEW!

    -

    SLEW is a learning platform for running experiments in a virtual power engineering world. +

    SLEW is a learng platform for running experiments in a virtual power engineering world. The platform enables to interact with the experiments in real time and perform analyses on the experimental results.

    The motivation behind is the ongoing transformation of the energy system, which is making the system more and more complex. diff --git a/src/branding/slew/slew-values.js b/src/branding/slew/slew-values.js index c1c5441..d49d67f 100644 --- a/src/branding/slew/slew-values.js +++ b/src/branding/slew/slew-values.js @@ -18,7 +18,8 @@ const slew_values = { title: 'SLEW', subtitle: 'Second Life for Energiewende', - icon: "slew-icon-draft.png", + icon: "slew_magenta.png", + logo: "slew_magenta.svg", pages: { home: true, scenarios: true, diff --git a/src/common/menu.js b/src/common/menu.js index ecccabb..15d64dc 100644 --- a/src/common/menu.js +++ b/src/common/menu.js @@ -74,44 +74,56 @@ class SidebarMenu extends React.Component { links.push(

  • {key}
  • ); }) } + var logoStyle = { height: 110, float: 'center' }; + var logo = branding.getLogo(logoStyle); return ( -
    -

    Menu

    - - {this.state.externalAuth ? -
      - - - - {this.props.currentRole === 'Admin' ? -
    • Users
    • : '' - } - - Logout - -
    - :
      - - - - {this.props.currentRole === 'Admin' ? -
    • Users
    • : '' - } - -
    • Logout
    • - -
    } - - { - links.length > 0 ? -
    -

    -

    Links

    -
      {links}
    -
    - : '' +
    + { logo ? +
    + {logo} +
    + : '' } +
    +

    Menu

    + + {this.state.externalAuth ? +
      + + + + {this.props.currentRole === 'Admin' ? +
    • Users
    • : '' + } + + Logout + +
    + :
      + + + + {this.props.currentRole === 'Admin' ? +
    • Users
    • : '' + } + +
    • Logout
    • + +
    } + + { + links.length > 0 ? +
    +

    +

    Links

    +
      {links}
    +
    + : '' + } +
    + +
    ); } diff --git a/src/styles/app.css b/src/styles/app.css index 9ba1fd9..e00822c 100644 --- a/src/styles/app.css +++ b/src/styles/app.css @@ -111,10 +111,15 @@ body { /** * Menus */ +.menucontainer { + float: left; + flex-direction: column; +} + .menu { padding: 20px; + margin-bottom: 20px; width: 160px; - float: left; border-radius: var(--borderradius); From 3e5462af01425f9af6ef4dfc6139c0ca057824d8 Mon Sep 17 00:00:00 2001 From: irismarie Date: Thu, 25 Mar 2021 12:02:33 +0100 Subject: [PATCH 27/45] test building/running slew brand somewhere else --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 63418fe..5b3050f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,7 +28,7 @@ RUN npm install # Install app dependencies COPY . /usr/src/app -RUN npm run build +RUN REACT_APP_BRAND=slew npm run build FROM nginx From 34fd4f73c378a9cfc3b71c4ff9439513f31d00ed Mon Sep 17 00:00:00 2001 From: irismarie Date: Wed, 14 Apr 2021 10:07:09 +0200 Subject: [PATCH 28/45] login waiting gif, branding fixes --- src/branding/slew/img/slew_blue.svg | 46 ++++++++++++---------------- src/branding/slew/slew-values.js | 4 +-- src/common/menu.js | 2 +- src/img/ajax-loader.gif | Bin 0 -> 6820 bytes src/img/dog-waiting-bw.jpg | Bin 51417 -> 0 bytes src/styles/app.css | 2 +- src/user/login-complete.js | 4 +-- 7 files changed, 25 insertions(+), 33 deletions(-) create mode 100644 src/img/ajax-loader.gif delete mode 100644 src/img/dog-waiting-bw.jpg diff --git a/src/branding/slew/img/slew_blue.svg b/src/branding/slew/img/slew_blue.svg index 801509c..3d1c10e 100644 --- a/src/branding/slew/img/slew_blue.svg +++ b/src/branding/slew/img/slew_blue.svg @@ -10,9 +10,9 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="195.85469mm" - height="174.99966mm" - viewBox="0 0 195.85469 174.99966" + width="183.56662mm" + height="174.99965mm" + viewBox="0 0 183.56662 174.99965" version="1.1" id="svg8" sodipodi:docname="slew_blue.svg" @@ -821,11 +821,11 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="1.393869" - inkscape:cx="265.51862" - inkscape:cy="381.36807" + inkscape:zoom="0.96100734" + inkscape:cx="208.38834" + inkscape:cy="340.23582" inkscape:document-units="pt" - inkscape:current-layer="layer1" + inkscape:current-layer="layer2" showgrid="false" inkscape:object-nodes="true" inkscape:object-paths="true" @@ -846,7 +846,7 @@ image/svg+xml - + @@ -855,7 +855,7 @@ id="layer1" inkscape:label="wellen" style="display:inline;stroke-linecap:butt;stroke-linejoin:round" - transform="translate(4.8532962e-6)"> + transform="translate(1.2853296e-5)"> + transform="translate(1.2853296e-5)"> + style="display:inline;stroke-linecap:butt;stroke-linejoin:round"> - SLEW + x="373.39963" + y="57.81057" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-size:27.46127319px;font-family:'Open Sans Condensed';-inkscape-font-specification:'Open Sans Condensed, Bold Condensed';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00549f;fill-opacity:1;stroke-width:0.25744942;stroke-linecap:butt;stroke-linejoin:round">SLEW {key}); }) } - var logoStyle = { height: 110, float: 'center' }; + var logoStyle = { height: 110, margin: 'auto' }; var logo = branding.getLogo(logoStyle); return ( diff --git a/src/img/ajax-loader.gif b/src/img/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..926ee54bf98c6dc390b5c35b33819c86eba7401a GIT binary patch literal 6820 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 literal 0 HcmV?d00001 diff --git a/src/img/dog-waiting-bw.jpg b/src/img/dog-waiting-bw.jpg deleted file mode 100644 index 31c17ff36e74623057d66add3c10a7430671dfe1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51417 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 B^i2Q& diff --git a/src/styles/app.css b/src/styles/app.css index e00822c..0523a78 100644 --- a/src/styles/app.css +++ b/src/styles/app.css @@ -20,7 +20,7 @@ */ :root { - --bg: #6EA2B0; + --bg: #eceded; --highlights: #527984; --secondarytext: #818181; --borderradius: 0px; diff --git a/src/user/login-complete.js b/src/user/login-complete.js index 7df0d00..7a6b3a5 100644 --- a/src/user/login-complete.js +++ b/src/user/login-complete.js @@ -96,8 +96,8 @@ class LoginComplete extends React.Component { } else { return

    Waiting Dog
    ; } From 15a1e2f4af779fba0de32349b70686e228c9db0a Mon Sep 17 00:00:00 2001 From: irismarie Date: Wed, 14 Apr 2021 10:27:05 +0200 Subject: [PATCH 29/45] removed dummy logo --- src/img/slew-logo.png | Bin 3939 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/img/slew-logo.png diff --git a/src/img/slew-logo.png b/src/img/slew-logo.png deleted file mode 100644 index 747bf8339dac5f79adc1e39d6a5c451e7481c3df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3939 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 Date: Wed, 21 Apr 2021 17:28:18 +0200 Subject: [PATCH 30/45] fix buttons on infrastructure page, replace 'ikey' with 'childkey' --- src/common/icon-button.js | 4 ++-- src/common/icon-toggle-button.js | 4 ++-- src/common/table.js | 16 ++++++++-------- src/componentconfig/config-table.js | 4 ++-- src/dashboard/dashboard-button-group.js | 4 ++-- src/dashboard/dashboard-table.js | 4 ++-- src/dashboard/dashboard.js | 2 +- src/ic/ics.js | 8 ++++++-- src/result/result-table.js | 2 +- src/scenario/scenario-users-table.js | 2 +- src/scenario/scenario.js | 4 ++-- src/scenario/scenarios.js | 4 ++-- src/user/users.js | 2 +- 13 files changed, 32 insertions(+), 28 deletions(-) diff --git a/src/common/icon-button.js b/src/common/icon-button.js index 2a65b95..438b206 100644 --- a/src/common/icon-button.js +++ b/src/common/icon-button.js @@ -43,9 +43,9 @@ class IconButton extends React.Component { button = btn; } else { button = {this.props.tooltip}} > + overlay={{this.props.tooltip}} > {btn} } diff --git a/src/common/icon-toggle-button.js b/src/common/icon-toggle-button.js index e9adc8a..031caa3 100644 --- a/src/common/icon-toggle-button.js +++ b/src/common/icon-toggle-button.js @@ -28,9 +28,9 @@ class IconToggleButton extends React.Component { let tooltip = this.props.checked ? this.props.tooltipChecked : this.props.tooltipUnchecked; return {tooltip}} > + overlay={{tooltip}} > child.props.onChangeLock(index)} checked={isLocked} checkedIcon='lock' @@ -188,7 +188,7 @@ class CustomTable extends Component { cell.push( Component Configurations this.addConfig()} icon='plus' @@ -323,7 +323,7 @@ class ConfigTable extends Component { iconStyle={iconStyle} /> this.setState({ importConfigModal: true })} icon='upload' diff --git a/src/dashboard/dashboard-button-group.js b/src/dashboard/dashboard-button-group.js index ddacfa0..7e2ab1f 100644 --- a/src/dashboard/dashboard-button-group.js +++ b/src/dashboard/dashboard-button-group.js @@ -38,7 +38,7 @@ class DashboardButtonGroup extends React.Component { if (locked) { return Dashboards this.setState({newDashboardModal: true})} icon='plus' @@ -162,7 +162,7 @@ class DashboardTable extends Component { iconStyle={iconStyle} /> this.setState({importDashboardModal: true})} icon='upload' diff --git a/src/dashboard/dashboard.js b/src/dashboard/dashboard.js index ee838f3..077de3f 100644 --- a/src/dashboard/dashboard.js +++ b/src/dashboard/dashboard.js @@ -518,7 +518,7 @@ class Dashboard extends Component { {this.state.dashboard.name} this.setState({newModal: true})} icon='plus' + buttonStyle={buttonStyle} + iconStyle={iconStyle} /> this.setState({importModal: true})} icon='upload' + buttonStyle={buttonStyle} + iconStyle={iconStyle} /> : diff --git a/src/result/result-table.js b/src/result/result-table.js index a38d160..96dd765 100644 --- a/src/result/result-table.js +++ b/src/result/result-table.js @@ -169,7 +169,7 @@ class ResultTable extends Component {

    Results this.setState({ newResultModal: true })} icon='plus' diff --git a/src/scenario/scenario-users-table.js b/src/scenario/scenario-users-table.js index 26eb06f..2cefc5b 100644 --- a/src/scenario/scenario-users-table.js +++ b/src/scenario/scenario-users-table.js @@ -134,7 +134,7 @@ class ScenarioUsersTable extends Component { this.addUser()} icon='plus' diff --git a/src/scenario/scenario.js b/src/scenario/scenario.js index ac618d7..d9e9d4c 100644 --- a/src/scenario/scenario.js +++ b/src/scenario/scenario.js @@ -154,7 +154,7 @@ class Scenario extends React.Component { return
    this.onChangeLock()} checked={this.state.scenario.isLocked} checkedIcon='lock' diff --git a/src/scenario/scenarios.js b/src/scenario/scenarios.js index 89b52d9..51f8d3e 100644 --- a/src/scenario/scenarios.js +++ b/src/scenario/scenarios.js @@ -257,7 +257,7 @@ class Scenarios extends Component {

    Scenarios this.setState({ newModal: true })} icon='plus' @@ -265,7 +265,7 @@ class Scenarios extends Component { iconStyle={iconStyle} /> this.setState({ importModal: true })} icon='upload' diff --git a/src/user/users.js b/src/user/users.js index 5d97e68..85bfc7b 100644 --- a/src/user/users.js +++ b/src/user/users.js @@ -119,7 +119,7 @@ class Users extends Component {

    Users this.setState({ newModal: true })} icon='plus' From 052db03e036b950654302ec2d5615efffc4bfb77 Mon Sep 17 00:00:00 2001 From: irismarie Date: Thu, 22 Apr 2021 11:59:53 +0200 Subject: [PATCH 31/45] added welcome page for villasweb brand --- src/branding/branding.js | 5 ++++- src/branding/villasweb/villasweb-functions.js | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/branding/branding.js b/src/branding/branding.js index a49b424..bdc5e87 100644 --- a/src/branding/branding.js +++ b/src/branding/branding.js @@ -15,7 +15,7 @@ * along with VILLASweb. If not, see . ******************************************************************************/ -import { villasweb_footer, villasweb_home } from './villasweb/villasweb-functions'; +import { villasweb_footer, villasweb_home, villasweb_welcome } from './villasweb/villasweb-functions'; import villasweb_values from './villasweb/villasweb-values'; import { slew_home, slew_welcome } from './slew/slew-functions'; @@ -88,6 +88,9 @@ class Branding { getWelcome() { var welcome = ''; switch (this.brand) { + case 'villasweb': + welcome = villasweb_welcome(); + break; case 'slew': welcome = slew_welcome(); break; diff --git a/src/branding/villasweb/villasweb-functions.js b/src/branding/villasweb/villasweb-functions.js index 65189cf..5f78f50 100644 --- a/src/branding/villasweb/villasweb-functions.js +++ b/src/branding/villasweb/villasweb-functions.js @@ -15,8 +15,23 @@ * along with VILLASweb. If not, see . ******************************************************************************/ import React from 'react'; +import { Button } from 'react-bootstrap'; import { NavLink } from 'react-router-dom'; + +export function villasweb_welcome() { + let url = 'https://villas.fein-aachen.org/doc/web.html'; + return ( +
    +

    Welcome!

    +

    VILLASweb is a tool to configure real-time co-simulations and display simulation real-time data. + It enables the management and monitoring of simulators, models and simulations.

    + + + +
    ) +} + export function villasweb_home(title, username, userid, role) { return (
    From 11b6d13653406a855834609914b9edce3888fb47 Mon Sep 17 00:00:00 2001 From: irismarie Date: Thu, 22 Apr 2021 12:07:54 +0200 Subject: [PATCH 32/45] logo positioning, page routing corrections --- src/app.js | 4 ++-- src/branding/slew/slew-values.js | 1 - src/branding/villasweb/villasweb-values.js | 1 - src/common/menu.js | 8 +++++--- src/styles/app.css | 13 +++++++++++++ 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/app.js b/src/app.js index af3460a..45498b2 100644 --- a/src/app.js +++ b/src/app.js @@ -122,9 +122,9 @@ class App extends React.Component { { pages.scenarios ? : '' } { pages.scenarios ? : '' } { pages.infrastructure ? : '' } - { pages.infrastructure ? : '' } + { pages.account ? : '' } - { pages.users ? : '' } + { pages.api ? : '' }

    diff --git a/src/branding/slew/slew-values.js b/src/branding/slew/slew-values.js index 5fc7c56..a62ccf9 100644 --- a/src/branding/slew/slew-values.js +++ b/src/branding/slew/slew-values.js @@ -24,7 +24,6 @@ const slew_values = { home: true, scenarios: true, infrastructure: false, - users: false, account: false, api: false }, diff --git a/src/branding/villasweb/villasweb-values.js b/src/branding/villasweb/villasweb-values.js index c055a32..2b0fdf5 100644 --- a/src/branding/villasweb/villasweb-values.js +++ b/src/branding/villasweb/villasweb-values.js @@ -23,7 +23,6 @@ const villasweb_values = { home: true, scenarios: true, infrastructure: true, - users: true, account: true, api: true, }, diff --git a/src/common/menu.js b/src/common/menu.js index 1c1ac6f..4dad81b 100644 --- a/src/common/menu.js +++ b/src/common/menu.js @@ -70,13 +70,13 @@ class SidebarMenu extends React.Component { links.push(
  • {key}
  • ); }) } - var logoStyle = { height: 110, margin: 'auto' }; + var logoStyle = { width: 110, margin: 'auto' }; var logo = branding.getLogo(logoStyle); return (
    { logo ? -
    +
    {logo}
    : '' @@ -88,7 +88,9 @@ class SidebarMenu extends React.Component {
      - + {this.props.currentRole === 'Admin' || values.pages.infrastructure ? +
    • Infrastructure
    • : '' + } {this.props.currentRole === 'Admin' ?
    • Users
    • : '' } diff --git a/src/styles/app.css b/src/styles/app.css index 0523a78..29cb9b9 100644 --- a/src/styles/app.css +++ b/src/styles/app.css @@ -128,6 +128,19 @@ body { 0 9px 18px 0 rgba(0, 0, 0, 0.1); } +.menulogo { + padding-top: 20px; + padding-bottom: 20px; + text-align: center; + margin-bottom: 20px; + width: 160px; + border-radius: var(--borderradius); + + background-color: #fff; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), + 0 9px 18px 0 rgba(0, 0, 0, 0.1); +} + .menu a { color: var(--secondarytext); text-decoration:none; From be618b94ce37b8ffc84058baa1aa6e1759a9b49f Mon Sep 17 00:00:00 2001 From: irismarie Date: Thu, 22 Apr 2021 12:11:12 +0200 Subject: [PATCH 33/45] users add button style --- src/user/users.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/user/users.js b/src/user/users.js index 85bfc7b..d4cd584 100644 --- a/src/user/users.js +++ b/src/user/users.js @@ -115,6 +115,15 @@ class Users extends Component { } render() { + const buttonStyle = { + marginLeft: '10px', + } + + const iconStyle = { + height: '30px', + width: '30px' + } + return

      Users @@ -123,6 +132,8 @@ class Users extends Component { tooltip='Add User' onClick={() => this.setState({ newModal: true })} icon='plus' + buttonStyle={buttonStyle} + iconStyle={iconStyle} />

      From 78a78584ed40b0b7ba26e50a5bb1e9d87f64907f Mon Sep 17 00:00:00 2001 From: irismarie Date: Thu, 22 Apr 2021 14:36:03 +0200 Subject: [PATCH 34/45] minor text changes --- src/branding/slew/slew-functions.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/branding/slew/slew-functions.js b/src/branding/slew/slew-functions.js index 715d183..0c4cff3 100644 --- a/src/branding/slew/slew-functions.js +++ b/src/branding/slew/slew-functions.js @@ -25,10 +25,10 @@ export function slew_home() {

      Welcome to SLEW!

      -

      SLEW is a learng platform for running experiments in a virtual power engineering world. - The platform enables to interact with the experiments in real time and perform analyses on the experimental results.

      +

      SLEW is a learning platform for running experiments in a virtual power engineering world. + The platform enables interaction with the experiments in real time and performing analysis on the experimental results.

      -

      The motivation behind is the ongoing transformation of the energy system, which is making the system more and more complex. +

      The motivation behind SLEW is the ongoing transformation of the energy system, which is making the system more and more complex. Hence, understanding new phenomena and underlying interactions is getting more challenging, also because real experimental activities for obtaining a better understanding are not possible for obvious reasons of security and safety.

      From 9ed3cf98ee46aafd0ac3034c26ea2666080890ca Mon Sep 17 00:00:00 2001 From: irismarie Date: Thu, 22 Apr 2021 15:30:59 +0200 Subject: [PATCH 35/45] update logo --- src/branding/slew/img/slew_logo.png | Bin 0 -> 44732 bytes src/branding/slew/slew-values.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/branding/slew/img/slew_logo.png diff --git a/src/branding/slew/img/slew_logo.png b/src/branding/slew/img/slew_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed12c68b343399b359d3daaa5f77481ce5c37ed GIT binary patch literal 44732 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Õ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 Date: Tue, 27 Apr 2021 11:45:20 +0200 Subject: [PATCH 36/45] show infrastructure page to admin users (while hidden for others) --- src/app.js | 8 ++++++-- src/common/menu.js | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/app.js b/src/app.js index 45498b2..9efb5cd 100644 --- a/src/app.js +++ b/src/app.js @@ -121,8 +121,12 @@ class App extends React.Component { { pages.scenarios ? : '' } { pages.scenarios ? : '' } { pages.scenarios ? : '' } - { pages.infrastructure ? : '' } - + { currentUser.role === "Admin" || pages.infrastructure ? + + : '' } + { currentUser.role === "Admin" || pages.infrastructure ? + + : '' } { pages.account ? : '' } { pages.api ? : '' } diff --git a/src/common/menu.js b/src/common/menu.js index 4dad81b..a647cc6 100644 --- a/src/common/menu.js +++ b/src/common/menu.js @@ -101,7 +101,9 @@ class SidebarMenu extends React.Component { :
        - + {this.props.currentRole === 'Admin' || values.pages.infrastructure ? +
      • Infrastructure
      • : '' + } {this.props.currentRole === 'Admin' ?
      • Users
      • : '' } From f7a3a88c573dadb2fc9bb75c49c7d71ede2783c3 Mon Sep 17 00:00:00 2001 From: irismarie Date: Wed, 28 Apr 2021 18:25:28 +0200 Subject: [PATCH 37/45] add multiple users at once to scenario (#308) --- src/user/users-to-scenario.js | 71 ++++++++++++++ src/user/users.js | 173 +++++++++++++++++++++++----------- 2 files changed, 191 insertions(+), 53 deletions(-) create mode 100644 src/user/users-to-scenario.js diff --git a/src/user/users-to-scenario.js b/src/user/users-to-scenario.js new file mode 100644 index 0000000..81e4a19 --- /dev/null +++ b/src/user/users-to-scenario.js @@ -0,0 +1,71 @@ +/** + * This file is part of VILLASweb. + * + * VILLASweb is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * VILLASweb is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with VILLASweb. If not, see . + ******************************************************************************/ + +import React from 'react'; +import { Table } from 'react-bootstrap'; + +import Dialog from '../common/dialogs/dialog'; + +class UsersToScenarioDialog extends React.Component { + valid = true; + + onClose() { + if (this.props.onClose != null) { + this.props.onClose(); + } + }; + + renderRow(value, key) { + return ( + {key} + {value} + ); + } + + renderData() { + let arr = []; + this.props.users.forEach((value, key) => { + arr.push(this.renderRow(value,key)) + }) + return arr; + } + + render() { + return this.onClose()} + valid={true} + > + + + + + + + + + { this.renderData() } + +
        IDName
        +
        ; + } +} + +export default UsersToScenarioDialog; diff --git a/src/user/users.js b/src/user/users.js index d4cd584..ef56cfe 100644 --- a/src/user/users.js +++ b/src/user/users.js @@ -20,13 +20,16 @@ import { Container } from 'flux/utils'; import AppDispatcher from '../common/app-dispatcher'; import UsersStore from './users-store'; +import ScenarioStore from '../scenario/scenario-store'; import Icon from '../common/icon'; import IconButton from '../common/icon-button'; +import { Dropdown, DropdownButton } from 'react-bootstrap'; import Table from '../common/table'; import TableColumn from '../common/table-column'; import NewUserDialog from './new-user'; import EditUserDialog from './edit-user'; +import UsersToScenarioDialog from './users-to-scenario'; import DeleteDialog from '../common/dialogs/delete-dialog'; import NotificationsDataManager from "../common/data-managers/notifications-data-manager"; @@ -34,7 +37,7 @@ import NotificationsFactory from "../common/data-managers/notifications-factory" class Users extends Component { static getStores() { - return [ UsersStore ]; + return [UsersStore, ScenarioStore]; } static calculateState(prevState, props) { @@ -48,11 +51,20 @@ class Users extends Component { }); } + if (prevState == null) { + prevState = {}; + } + return { token: token, users: UsersStore.getState(), + scenarios: ScenarioStore.getState(), + usersToAdd: prevState.usersToAdd || new Map(), + selectedScenarioID: prevState.selectedScenarioID || null, + selectedScenario: prevState.selectedScenario || '', newModal: false, + addUsersModal: false, editModal: false, deleteModal: false, modalData: {}, @@ -110,6 +122,35 @@ class Users extends Component { } }; + onUserChecked(user) { + let temp = this.state.usersToAdd; + const found = temp.get(user.id); + if (!found) { + temp.set(user.id, user.username); + } else { + temp.delete(user.id) + } + this.setState({ usersToAdd: temp }); + } + + setScenario(ID) { + let scenario = this.state.scenarios.find(s => s.id == ID); + this.setState({ selectedScenarioID: scenario.id, selectedScenario: scenario.name, addUsersModal: true }) + }; + + closeAddUsersModal() { + this.state.usersToAdd.forEach((value, key) => { + AppDispatcher.dispatch({ + type: 'scenarios/add-user', + data: this.state.selectedScenarioID, + username: value, + token: this.state.token + }); + }) + + this.setState({ addUsersModal: false, selectedScenarioID: null }) + } + modifyActiveColumn(active) { return } @@ -125,65 +166,91 @@ class Users extends Component { } return
        -

        Users +

        Users - this.setState({ newModal: true })} - icon='plus' - buttonStyle={buttonStyle} - iconStyle={iconStyle} - /> - -

        + this.setState({ newModal: true })} + icon='plus' + buttonStyle={buttonStyle} + iconStyle={iconStyle} + /> + +

    - - {this.state.currentUser.role === "Admin" ? - - : <> - } +
    + {this.state.currentUser.role === "Admin" ? + : <> + } + {this.state.currentUser.role === "Admin" ? this.onUserChecked(index, event)} + checkboxKey='checked' + width='30' /> - - this.modifyActiveColumn(active)} - /> - this.setState({ - editModal: true, - modalData: this.state.users[index] - })} - onDelete={index => this.setState({ - deleteModal: true, - modalData: this.state.users[index] - })} - /> -
    + : <> + } + + + + this.modifyActiveColumn(active)} + /> + this.setState({ + editModal: true, + modalData: this.state.users[index] + })} + onDelete={index => this.setState({ + deleteModal: true, + modalData: this.state.users[index] + })} + /> + + + this.setScenario(id)} + > + {this.state.scenarios.map(scenario => ( + {scenario.name} + ))} + + - this.closeNewModal(data)} /> - this.closeEditModal(data)} user={this.state.modalData} /> - this.closeDeleteModal(e)} /> -
    ; + this.closeAddUsersModal()} + /> + this.closeNewModal(data)} /> + this.closeEditModal(data)} user={this.state.modalData} /> + this.closeDeleteModal(e)} /> +
    ; } } From 1984cc65b853790ade630568c17931bbffdd891b Mon Sep 17 00:00:00 2001 From: Sonja Happ Date: Thu, 29 Apr 2021 14:36:03 +0200 Subject: [PATCH 38/45] load scenarios upon mounting users page #308 --- src/user/users.js | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/user/users.js b/src/user/users.js index ef56cfe..1232729 100644 --- a/src/user/users.js +++ b/src/user/users.js @@ -41,22 +41,13 @@ class Users extends Component { } static calculateState(prevState, props) { - let token = localStorage.getItem("token"); - - // If there is a token available and this method was called as a result of loading users - if (!prevState && token) { - AppDispatcher.dispatch({ - type: 'users/start-load', - token: token - }); - } if (prevState == null) { prevState = {}; } return { - token: token, + token: localStorage.getItem("token"), users: UsersStore.getState(), scenarios: ScenarioStore.getState(), usersToAdd: prevState.usersToAdd || new Map(), @@ -72,6 +63,19 @@ class Users extends Component { }; } + componentDidMount() { + AppDispatcher.dispatch({ + type: 'scenarios/start-load', + token: this.state.token + }); + + AppDispatcher.dispatch({ + type: 'users/start-load', + token: this.state.token + }); + + } + closeNewModal(data) { this.setState({ newModal: false }); From e86851b25e20bb3b835ace210f8eba0805635de0 Mon Sep 17 00:00:00 2001 From: Sonja Happ Date: Thu, 29 Apr 2021 15:02:42 +0200 Subject: [PATCH 39/45] remove unused code and fix scenario ID parsing #308 --- src/user/users.js | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/user/users.js b/src/user/users.js index 1232729..3cf7721 100644 --- a/src/user/users.js +++ b/src/user/users.js @@ -118,15 +118,7 @@ class Users extends Component { } } - onModalKeyPress = (event) => { - if (event.key === 'Enter') { - event.preventDefault(); - - this.confirmDeleteModal(); - } - }; - - onUserChecked(user) { + onUserChecked(user) { let temp = this.state.usersToAdd; const found = temp.get(user.id); if (!found) { @@ -138,7 +130,9 @@ class Users extends Component { } setScenario(ID) { - let scenario = this.state.scenarios.find(s => s.id == ID); + + let scenarioID = parseInt(ID, 10) + let scenario = this.state.scenarios.find(s => s.id === scenarioID); this.setState({ selectedScenarioID: scenario.id, selectedScenario: scenario.name, addUsersModal: true }) }; From b0fddfba1488df79294f9d33e527c737885c852f Mon Sep 17 00:00:00 2001 From: irismarie Date: Thu, 29 Apr 2021 16:05:01 +0200 Subject: [PATCH 40/45] standardize 'New Dialog', creating new entity --- .../dialogs/new-dialog.js} | 37 ++++--- src/componentconfig/config-table.js | 99 ++++++++++--------- src/dashboard/dashboard-table.js | 14 ++- src/result/new-result.js | 77 --------------- src/result/result-table.js | 14 ++- 5 files changed, 91 insertions(+), 150 deletions(-) rename src/{dashboard/new-dashboard.js => common/dialogs/new-dialog.js} (68%) delete mode 100644 src/result/new-result.js diff --git a/src/dashboard/new-dashboard.js b/src/common/dialogs/new-dialog.js similarity index 68% rename from src/dashboard/new-dashboard.js rename to src/common/dialogs/new-dialog.js index 5cc8a3e..8c7b44f 100644 --- a/src/dashboard/new-dashboard.js +++ b/src/common/dialogs/new-dialog.js @@ -18,49 +18,47 @@ import React from 'react'; import { Form } from 'react-bootstrap'; -import Dialog from '../common/dialogs/dialog'; - -class NewDashboardDialog extends React.Component { - valid: false; +import Dialog from './dialog'; +class NewDialog extends React.Component { constructor(props) { super(props); this.state = { - name: '' + value: '' } } onClose(canceled) { if (canceled === false) { - if (this.valid) { - this.props.onClose(this.state); - } + this.props.onClose(this.state); } else { this.props.onClose(); } } handleChange(e) { + console.log(e) + this.setState({ [e.target.id]: e.target.value }); } resetState() { - this.setState({ name: '' }); + this.setState({ value: '' }); } validateForm(target) { // check all controls - var name = true; + var inputGiven = true; - if (this.state.name === '') { - name = false; + if (this.state.value === '') { + inputGiven = false; } - this.valid = name; + this.valid = inputGiven; // return state to control - if (target === 'name') return name ? "success" : "error"; + if (target === 'value') return inputGiven ? "success" : "error"; return "success"; } @@ -68,17 +66,18 @@ class NewDashboardDialog extends React.Component { render() { return ( this.onClose(c)} onReset={() => this.resetState()} valid={this.valid} >
    - - Name - this.handleChange(e)} /> + + {this.props.inputLabel} + this.handleChange(e)} /> @@ -87,4 +86,4 @@ class NewDashboardDialog extends React.Component { } } -export default NewDashboardDialog; +export default NewDialog; diff --git a/src/componentconfig/config-table.js b/src/componentconfig/config-table.js index b86332a..abe8b50 100644 --- a/src/componentconfig/config-table.js +++ b/src/componentconfig/config-table.js @@ -15,11 +15,12 @@ * along with VILLASweb. If not, see . ******************************************************************************/ -import React, {Component} from "react"; +import React, { Component } from "react"; import FileSaver from 'file-saver'; import IconButton from "../common/icon-button"; import Table from "../common/table"; import TableColumn from "../common/table-column"; +import NewDialog from "../common/dialogs/new-dialog"; import DeleteDialog from "../common/dialogs/delete-dialog"; import AppDispatcher from "../common/app-dispatcher"; import NotificationsDataManager from "../common/data-managers/notifications-data-manager"; @@ -37,21 +38,21 @@ class ConfigTable extends Component { editConfigModal: false, modalConfigData: {}, modalConfigIndex: 0, + newConfigModal: false, deleteConfigModal: false, importConfigModal: false, - newConfig: false, selectedConfigs: [], ExternalICInUse: false, - editOutputSignalsModal: false, - editInputSignalsModal: false, + editOutputSignalsModal: false, + editInputSignalsModal: false, } } - static getDerivedStateFromProps(props, state){ + static getDerivedStateFromProps(props, state) { let ExternalICInUse = false - for (let config of props.configs){ + for (let config of props.configs) { for (let component of props.ics) { if ((config.icID === component.id) && (component.managedexternally === true)) { ExternalICInUse = true; @@ -65,26 +66,27 @@ class ConfigTable extends Component { }; } - addConfig() { - const config = { - scenarioID: this.props.scenario.id, - name: 'New Component Configuration', - icID: this.props.ics.length > 0 ? this.props.ics[0].id : null, - startParameters: {}, - }; + closeNewConfigModal(data) { + this.setState({ newConfigModal: false }); - AppDispatcher.dispatch({ - type: 'configs/start-add', - data: config, - token: this.props.sessionToken - }); - - this.setState({ newConfig: true }); + if (data) { + const config = { + scenarioID: this.props.scenario.id, + name: data.value, + icID: this.props.ics.length > 0 ? this.props.ics[0].id : null, + startParameters: {}, + }; + AppDispatcher.dispatch({ + type: 'configs/start-add', + data: config, + token: this.props.sessionToken + }); + } } closeEditConfigModal(data) { - this.setState({ editConfigModal: false, newConfig: false }); + this.setState({ editConfigModal: false }); if (data) { AppDispatcher.dispatch({ @@ -312,27 +314,27 @@ class ConfigTable extends Component { {/*Component Configurations table*/}

    Component Configurations - this.addConfig()} - icon='plus' - disabled={this.props.locked} - hidetooltip={this.props.locked} - buttonStyle={buttonStyle} - iconStyle={iconStyle} - /> - this.setState({ importConfigModal: true })} - icon='upload' - disabled={this.props.locked} - hidetooltip={this.props.locked} - buttonStyle={buttonStyle} - iconStyle={iconStyle} - /> - + this.setState({ newConfigModal: true })} + icon='plus' + disabled={this.props.locked} + hidetooltip={this.props.locked} + buttonStyle={buttonStyle} + iconStyle={iconStyle} + /> + this.setState({ importConfigModal: true })} + icon='upload' + disabled={this.props.locked} + hidetooltip={this.props.locked} + buttonStyle={buttonStyle} + iconStyle={iconStyle} + /> +

    this.copyConfig(index)} - token = {this.props.sessionToken} + selectedConfigs={this.state.selectedConfigs} + snapshotConfig={(index) => this.copyConfig(index)} + token={this.props.sessionToken} actions={[ { id: '0', title: 'Start', data: { action: 'start' } }, { id: '1', title: 'Stop', data: { action: 'stop' } }, @@ -432,6 +434,13 @@ class ConfigTable extends Component { onClose={data => this.importConfig(data)} ics={this.props.ics} /> + this.closeNewConfigModal(data)} + />
    - this.closeNewDashboardModal(data)} /> + . - ******************************************************************************/ - -import React from 'react'; -import { Form } from 'react-bootstrap'; - -import Dialog from '../common/dialogs/dialog'; - -class NewResultDialog extends React.Component { - - constructor(props) { - super(props); - - this.state = { - ConfigSnapshots: '', - Description: '', - ResultFileIDs: [], - } - } - - onClose(canceled) { - if (canceled === false) { - this.props.onClose(this.state); - } else { - this.props.onClose(); - } - } - - handleChange(e) { - this.setState({ [e.target.id]: e.target.value }); - } - - resetState() { - this.setState({ - ConfigSnapshots: '', - Description: '', - ResultFileIDs: [], - }); - } - - render() { - return ( - this.onClose(c)} - onReset={() => this.resetState()} - valid={true} - > -
    - - Description - this.handleChange(e)} /> - - -
    -
    - ); - } -} - -export default NewResultDialog; diff --git a/src/result/result-table.js b/src/result/result-table.js index 96dd765..f50707c 100644 --- a/src/result/result-table.js +++ b/src/result/result-table.js @@ -26,7 +26,7 @@ import TableColumn from "../common/table-column"; import DeleteDialog from "../common/dialogs/delete-dialog"; import EditResultDialog from "./edit-result"; import ResultConfigDialog from "./result-configs-dialog"; -import NewResultDialog from "./new-result"; +import NewDialog from "../common/dialogs/new-dialog"; class ResultTable extends Component { @@ -79,10 +79,13 @@ class ResultTable extends Component { closeNewResultModal(data) { this.setState({ newResultModal: false }); if (data) { - data["scenarioID"] = this.props.scenario.id; + let newResult = { ConfigSnapshots: '', ResultFileIDs: [] }; + newResult["scenarioID"] = this.props.scenario.id; + newResult["Description"] = data.value; + AppDispatcher.dispatch({ type: 'results/start-add', - data, + data: newResult, token: this.props.sessionToken, }); } @@ -245,8 +248,11 @@ class ResultTable extends Component { resultNo={this.state.modalResultConfigsIndex} onClose={this.closeResultConfigSnapshots.bind(this)} /> - this.closeNewResultModal(data)} />
    From 07ebff321d1f60a5fef3f58195062e83b95aeea7 Mon Sep 17 00:00:00 2001 From: irismarie Date: Fri, 30 Apr 2021 13:39:46 +0200 Subject: [PATCH 41/45] reset Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 005f421..cd62bcb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,7 +28,7 @@ RUN npm install # Install app dependencies COPY . /usr/src/app -RUN REACT_APP_BRAND=slew npm run build +RUN npm run build FROM nginx From adde4c1b2e4171ccad1588f940b263b1fad56c40 Mon Sep 17 00:00:00 2001 From: Sonja Happ Date: Fri, 30 Apr 2021 15:15:19 +0200 Subject: [PATCH 42/45] CI: two deploy jobs (default image and slew image) --- .gitlab-ci.yml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5fdb2a5..1787a5b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -30,7 +30,7 @@ build: # - build/ # expire_in: 1 week -deploy: +deploy:default: stage: deploy image: name: gcr.io/kaniko-project/executor:debug @@ -40,8 +40,26 @@ deploy: - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"username\":\"${CI_REGISTRY_USER}\",\"password\":\"${CI_REGISTRY_PASSWORD}\"}}}" > /kaniko/.docker/config.json - /kaniko/executor --context ${CI_PROJECT_DIR} + --build-arg REACT_APP_BRAND=villasweb --dockerfile ${CI_PROJECT_DIR}/Dockerfile --destination ${DOCKER_IMAGE}:${DOCKER_TAG} --snapshotMode=redo dependencies: - build + +deploy:slew: + stage: deploy + image: + name: gcr.io/kaniko-project/executor:debug + entrypoint: [ "" ] + script: + - mkdir -p /kaniko/.docker + - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"username\":\"${CI_REGISTRY_USER}\",\"password\":\"${CI_REGISTRY_PASSWORD}\"}}}" > /kaniko/.docker/config.json + - /kaniko/executor + --context ${CI_PROJECT_DIR} + --build-arg REACT_APP_BRAND=slew + --dockerfile ${CI_PROJECT_DIR}/Dockerfile + --destination ${DOCKER_IMAGE}:${DOCKER_TAG}-slew + --snapshotMode=redo + dependencies: + - build From e683a45fdea422eeb7505a89198439ae8671f4e3 Mon Sep 17 00:00:00 2001 From: Sonja Happ Date: Fri, 30 Apr 2021 15:54:40 +0200 Subject: [PATCH 43/45] Docker: add env variable to Dockerfile --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index cd62bcb..7fb328a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,6 +27,7 @@ ADD package.json /usr/src/app RUN npm install # Install app dependencies +ARG REACT_APP_BRAND COPY . /usr/src/app RUN npm run build From 8fc9008de57d4b82f8ae5ef8ab6b63d11eaa10cf Mon Sep 17 00:00:00 2001 From: Sonja Happ Date: Fri, 30 Apr 2021 16:04:04 +0200 Subject: [PATCH 44/45] remove unused dep @rjsf/core --- package-lock.json | 267 +++++++++++++++------------------------------- package.json | 3 +- 2 files changed, 86 insertions(+), 184 deletions(-) diff --git a/package-lock.json b/package-lock.json index c9207a8..6f7bcb3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1111,22 +1111,6 @@ } } }, - "@babel/runtime-corejs2": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.13.17.tgz", - "integrity": "sha512-uvDSI/cLYd3G7S/iFd635tVkIwPji2CjEZzCXznL/lTFDMevIhoIjxSeKQ+AUDaX7D6L4Y1dIGvN4ZtA32m6IA==", - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - } - } - }, "@babel/runtime-corejs3": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.12.13.tgz", @@ -1185,9 +1169,9 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, "@braintree/sanitize-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-5.0.0.tgz", - "integrity": "sha512-WmKrB/575EJCzbeSJR3YQ5sET5FaizeljLRw1382qVUeGqzuWBgIS+AF5a0FO51uQTrDpoRgvuHC2IWVsgwkkA==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-5.0.1.tgz", + "integrity": "sha512-KzIC8q/UsT8g6bwRAQ0NbOCNxRoGbPKtqGBUtDaN8WN80xqsbHFs8z+Eq0fR0W1wcrcTB5oKNACsrbkK4X+FWA==" }, "@cnakazawa/watch": { "version": "1.0.4", @@ -2038,64 +2022,6 @@ } } }, - "@rjsf/core": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-2.5.1.tgz", - "integrity": "sha512-km8NYScXNONaL5BiSLS6wyDj49pOLZtn0iXg7Zxlm921uuf3o2AAX5SuZS5kB4Zj2zlrVMrXESexfX6bxdDYHw==", - "requires": { - "@babel/runtime-corejs2": "^7.8.7", - "@types/json-schema": "^7.0.4", - "ajv": "^6.7.0", - "core-js": "^2.5.7", - "json-schema-merge-allof": "^0.6.0", - "jsonpointer": "^4.0.1", - "lodash": "^4.17.15", - "prop-types": "^15.7.2", - "react-app-polyfill": "^1.0.4", - "react-is": "^16.9.0", - "shortid": "^2.2.14" - }, - "dependencies": { - "promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", - "requires": { - "asap": "~2.0.6" - } - }, - "react-app-polyfill": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz", - "integrity": "sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g==", - "requires": { - "core-js": "^3.5.0", - "object-assign": "^4.1.1", - "promise": "^8.0.3", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.3", - "whatwg-fetch": "^3.0.0" - }, - "dependencies": { - "core-js": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.2.tgz", - "integrity": "sha512-W+2oVYeNghuBr3yTzZFQ5rfmjZtYB/Ubg87R5YOmlGrIb+Uw9f7qjUbhsj+/EkXhcV7eOD3jiM4+sgraX3FZUw==" - } - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - } - } - }, "@rollup/plugin-node-resolve": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", @@ -4048,6 +3974,11 @@ "requires": { "glob": "^7.1.3" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -4480,27 +4411,6 @@ } } }, - "compute-gcd": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", - "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", - "requires": { - "validate.io-array": "^1.0.3", - "validate.io-function": "^1.0.2", - "validate.io-integer-array": "^1.0.0" - } - }, - "compute-lcm": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", - "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", - "requires": { - "compute-gcd": "^1.2.1", - "validate.io-array": "^1.0.3", - "validate.io-function": "^1.0.2", - "validate.io-integer-array": "^1.0.0" - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -5769,9 +5679,9 @@ } }, "dompurify": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.2.7.tgz", - "integrity": "sha512-jdtDffdGNY+C76jvodNTu9jt5yYj59vuTUyx+wXdzcSwAGTYZDAQkQ7Iwx9zcGrA4ixC1syU4H3RZROqRxokxg==" + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.2.8.tgz", + "integrity": "sha512-9H0UL59EkDLgY3dUFjLV6IEUaHm5qp3mxSqWw7Yyx4Zhk2Jn2cmLe+CNPP3xy13zl8Bqg+0NehQzkdMoVhGRww==" }, "domutils": { "version": "1.7.0", @@ -10621,6 +10531,13 @@ "whatwg-url": "^8.0.0", "ws": "^7.2.3", "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } } }, "jsesc": { @@ -10643,24 +10560,6 @@ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, - "json-schema-compare": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", - "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", - "requires": { - "lodash": "^4.17.4" - } - }, - "json-schema-merge-allof": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.6.0.tgz", - "integrity": "sha512-LEw4VMQVRceOPLuGRWcxW5orTTiR9ZAtqTAe4rQUjNADTeR81bezBVFa0MqIwp0YmHIM1KkhSjZM7o+IQhaPbQ==", - "requires": { - "compute-lcm": "^1.1.0", - "json-schema-compare": "^0.2.2", - "lodash": "^4.17.4" - } - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -10698,11 +10597,6 @@ "universalify": "^2.0.0" } }, - "jsonpointer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz", - "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==" - }, "jsonwebtoken": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", @@ -11302,6 +11196,13 @@ "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", "requires": { "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, "minipass-collect": { @@ -11335,6 +11236,13 @@ "requires": { "minipass": "^3.0.0", "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, "mississippi": { @@ -11470,11 +11378,6 @@ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "optional": true }, - "nanoid": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", - "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==" - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -13943,6 +13846,19 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, "immer": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", @@ -15260,6 +15176,14 @@ "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } } } }, @@ -15385,9 +15309,12 @@ } }, "serialize-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", - "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=" + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "requires": { + "type-fest": "^0.20.2" + } }, "serialize-javascript": { "version": "5.0.1", @@ -15537,14 +15464,6 @@ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", "optional": true }, - "shortid": { - "version": "2.2.16", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz", - "integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==", - "requires": { - "nanoid": "^2.1.0" - } - }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -16360,11 +16279,11 @@ } }, "swagger-ui-react": { - "version": "3.47.1", - "resolved": "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-3.47.1.tgz", - "integrity": "sha512-KPfhRE3kJnN9/yKrPIvKNrZYzGxSLQOEc0gVUlYXrMh6iQ5rR/fW8s9xXCV0ivOOvhvr09LQ5H3ZjwAIbvUHoA==", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-3.48.0.tgz", + "integrity": "sha512-39cibLdJYeujP5CAzBg+LiNFyIuHomi4Blru/1hyFyiTkFx9yYGvcFpZrKFKq1Me4GSUCQJ1DzUyUMblo+VFcA==", "requires": { - "@babel/runtime-corejs3": "^7.13.10", + "@babel/runtime-corejs3": "^7.13.17", "@braintree/sanitize-url": "^5.0.0", "@kyleshockey/object-assign-deep": "^0.4.2", "@kyleshockey/xml": "^1.0.2", @@ -16372,7 +16291,7 @@ "classnames": "^2.3.1", "css.escape": "1.5.1", "deep-extend": "0.6.0", - "dompurify": "^2.2.7", + "dompurify": "^2.2.8", "ieee754": "^1.2.1", "immutable": "^3.x.x", "js-file-download": "^0.4.12", @@ -16393,7 +16312,7 @@ "redux-immutable": "3.1.0", "remarkable": "^2.0.1", "reselect": "^4.0.0", - "serialize-error": "^2.1.0", + "serialize-error": "^8.1.0", "sha.js": "^2.4.11", "swagger-client": "^3.13.2", "url-parse": "^1.5.1", @@ -16402,9 +16321,9 @@ }, "dependencies": { "@babel/runtime-corejs3": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.13.10.tgz", - "integrity": "sha512-x/XYVQ1h684pp1mJwOV4CyvqZXqbc8CMsMGUnAbuc82ZCdv1U63w5RSUzgDSXQHG5Rps/kiksH6g2D5BuaKyXg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz", + "integrity": "sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg==", "requires": { "core-js-pure": "^3.0.0", "regenerator-runtime": "^0.13.4" @@ -16499,10 +16418,20 @@ "yallist": "^4.0.0" }, "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -16911,6 +16840,11 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -17288,38 +17222,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "validate.io-array": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", - "integrity": "sha1-W1osr9j4uFq7L4hroVPy2Tond00=" - }, - "validate.io-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", - "integrity": "sha1-NDoZgC7TsZaCaceA5VjpNBHAutc=" - }, - "validate.io-integer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", - "integrity": "sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg=", - "requires": { - "validate.io-number": "^1.0.3" - } - }, - "validate.io-integer-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", - "integrity": "sha1-LKveAzKTpry+Bj/q/pHq9GsToIk=", - "requires": { - "validate.io-array": "^1.0.3", - "validate.io-integer": "^1.0.4" - } - }, - "validate.io-number": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", - "integrity": "sha1-9j/+2iSL8opnqNSODjtGGhZluvg=" - }, "value-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", @@ -17825,7 +17727,8 @@ }, "ssri": { "version": "6.0.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "requires": { "figgy-pudding": "^3.5.1" } diff --git a/package.json b/package.json index 775dc24..c64bb3b 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,6 @@ "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.14", - "@rjsf/core": "^2.5.1", "babel-runtime": "^6.26.0", "bootstrap": "^4.6.0", "classnames": "^2.3.1", @@ -52,7 +51,7 @@ "react-svg-pan-zoom": "^3.10.0", "react-trafficlight": "^5.2.1", "superagent": "^6.1.0", - "swagger-ui-react": "^3.47.1", + "swagger-ui-react": "^3.48.0", "typescript": "^4.2.4" }, "devDependencies": {}, From 392cab76b4f5804b0d8cb40fecb3b41b6a9e7e41 Mon Sep 17 00:00:00 2001 From: Sonja Happ Date: Fri, 30 Apr 2021 16:09:27 +0200 Subject: [PATCH 45/45] update react-dnd --- package-lock.json | 63 +++++++++++++++++++++++++++-------------------- package.json | 4 +-- 2 files changed, 38 insertions(+), 29 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6f7bcb3..7a01329 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5553,9 +5553,9 @@ } }, "dnd-core": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-12.0.1.tgz", - "integrity": "sha512-KzfKXQM9t9uSBO7DFmrILVgXUCShpY3/MbnLPF9/wg1Wcvq2KblbeT72GhjcrplS9cz0DFXilE1NXy43n8plag==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-14.0.0.tgz", + "integrity": "sha512-wTDYKyjSqWuYw3ZG0GJ7k+UIfzxTNoZLjDrut37PbcPGNfwhlKYlPUqjAKUjOOv80izshUiqusaKgJPItXSevA==", "requires": { "@react-dnd/asap": "^4.0.0", "@react-dnd/invariant": "^2.0.0", @@ -13911,25 +13911,21 @@ "integrity": "sha512-zvU6iouW+SWwHTyThwxGICjJYCMZFk/6r/+jmOdC7ntQoPlS/Pqb81MkxaMf2bHTSq9TN3K3zX2/ayMW/jCtyA==" }, "react-dnd": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-13.1.1.tgz", - "integrity": "sha512-oxQW8846omV1l3Pm2zY/atvNxryx+blW1rxnSmoGvFMgmxXpOHulaXrlXgxRH+OLRvLt2cfVTSxZ4ykbzBypaw==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-14.0.2.tgz", + "integrity": "sha512-JoEL78sBCg8SzjOKMlkR70GWaPORudhWuTNqJ56lb2P8Vq0eM2+er3ZrMGiSDhOmzaRPuA9SNBz46nHCrjn11A==", "requires": { "@react-dnd/invariant": "^2.0.0", "@react-dnd/shallowequal": "^2.0.0", - "dnd-core": "12.0.1", + "dnd-core": "14.0.0", + "fast-deep-equal": "^3.1.3", "hoist-non-react-statics": "^3.3.2" }, "dependencies": { - "dnd-core": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-12.0.1.tgz", - "integrity": "sha512-KzfKXQM9t9uSBO7DFmrILVgXUCShpY3/MbnLPF9/wg1Wcvq2KblbeT72GhjcrplS9cz0DFXilE1NXy43n8plag==", - "requires": { - "@react-dnd/asap": "^4.0.0", - "@react-dnd/invariant": "^2.0.0", - "redux": "^4.0.5" - } + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "hoist-non-react-statics": { "version": "3.3.2", @@ -13942,11 +13938,11 @@ } }, "react-dnd-html5-backend": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-12.1.1.tgz", - "integrity": "sha512-cQZgfuSGQEwHdvdoPtfUOvcrS8rye/V0hU046LjY/BLSgcrdjtQVviE2d/81QQaeJpvK00JizctsZqVY7IvHgA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-14.0.0.tgz", + "integrity": "sha512-2wAQqRFC1hbRGmk6+dKhOXsyQQOn3cN8PSZyOUeOun9J8t3tjZ7PS2+aFu7CVu2ujMDwTJR3VTwZh8pj2kCv7g==", "requires": { - "dnd-core": "12.0.1" + "dnd-core": "14.0.0" } }, "react-dom": { @@ -14443,12 +14439,26 @@ } }, "redux": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", - "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz", + "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==", "requires": { - "loose-envify": "^1.4.0", - "symbol-observable": "^1.2.0" + "@babel/runtime": "^7.9.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } } }, "redux-immutable": { @@ -17727,8 +17737,7 @@ }, "ssri": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "resolved": "", "requires": { "figgy-pudding": "^3.5.1" } diff --git a/package.json b/package.json index c64bb3b..c0a5d39 100644 --- a/package.json +++ b/package.json @@ -38,8 +38,8 @@ "react-collapse": "^5.1.0", "react-color": "^2.19.3", "react-contexify": "^5.0.0", - "react-dnd": "^13.1.1", - "react-dnd-html5-backend": "^12.1.1", + "react-dnd": "^14.0.2", + "react-dnd-html5-backend": "^14.0.0", "react-dom": "^17.0.2", "react-fullscreenable": "^2.5.1-0", "react-grid-system": "^7.1.2",