From 461af95c312fc7aff85551c014fb93dc7a89cecd Mon Sep 17 00:00:00 2001
From: kimdahey <claire_kim1@brown.edu>
Date: Sun, 10 Nov 2019 16:28:48 -0500
Subject: first commit

---
 src/client/util/SettingsManager.tsx | 58 +++++++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)
 create mode 100644 src/client/util/SettingsManager.tsx

(limited to 'src/client/util/SettingsManager.tsx')

diff --git a/src/client/util/SettingsManager.tsx b/src/client/util/SettingsManager.tsx
new file mode 100644
index 000000000..5bcfd2449
--- /dev/null
+++ b/src/client/util/SettingsManager.tsx
@@ -0,0 +1,58 @@
+import { observable, runInAction, action } from "mobx";
+import * as React from "react";
+import MainViewModal from "../views/MainViewModal";
+import { observer } from "mobx-react";
+import { library } from '@fortawesome/fontawesome-svg-core';
+import * as fa from '@fortawesome/free-solid-svg-icons';
+import { DocumentView } from "../views/nodes/DocumentView";
+import { SelectionManager } from "./SelectionManager";
+
+library.add(fa.faCopy);
+
+@observer
+export default class SettingsManager extends React.Component<{}> {
+    public static Instance: SettingsManager;
+    @observable private isOpen = false;
+    @observable private dialogueBoxOpacity = 1;
+    @observable private overlayOpacity = 0.4;
+
+    public open = action(() => {
+        SelectionManager.DeselectAll();
+        this.isOpen = true;
+        console.log('oppin');
+    });
+
+    // public open = (target: DocumentView) => {
+    //     SelectionManager.DeselectAll();
+    // }
+
+    public close = action(() => {
+        this.isOpen = false;
+    });
+
+    constructor(props: {}) {
+        super(props);
+        SettingsManager.Instance = this;
+    }
+
+    private get settingsInterface() {
+        return (
+            <div className={"settings-interface"}>
+                <p>sdfsldkfhlksdjf</p>
+            </div>
+        );
+    }
+
+    render() {
+        return (
+            <MainViewModal
+                contents={this.settingsInterface}
+                isDisplayed={this.isOpen}
+                interactive={true}
+                dialogueBoxDisplayedOpacity={this.dialogueBoxOpacity}
+                overlayDisplayedOpacity={this.overlayOpacity}
+            />
+        );
+    }
+
+}
\ No newline at end of file
-- 
cgit v1.2.3-70-g09d2


From 272bc257aba8bd2f1ac2e1f3248c482c4da7edcb Mon Sep 17 00:00:00 2001
From: kimdahey <claire_kim1@brown.edu>
Date: Tue, 12 Nov 2019 17:22:42 -0500
Subject: fixed button issue

---
 src/client/util/SettingsManager.scss | 55 ++++++++++++++++++++++++++++++++++++
 src/client/util/SettingsManager.tsx  |  8 ++----
 src/client/views/MainView.scss       | 37 ++++++++++++++++++------
 3 files changed, 86 insertions(+), 14 deletions(-)
 create mode 100644 src/client/util/SettingsManager.scss

(limited to 'src/client/util/SettingsManager.tsx')

diff --git a/src/client/util/SettingsManager.scss b/src/client/util/SettingsManager.scss
new file mode 100644
index 000000000..2b3e455e0
--- /dev/null
+++ b/src/client/util/SettingsManager.scss
@@ -0,0 +1,55 @@
+.settings-interface {
+    display: flex;
+    flex-direction: column;
+
+    .focus-span {
+        text-decoration: underline;
+    }
+
+    p {
+        font-size: 20px;
+        text-align: left;
+        font-style: italic;
+        padding: 0;
+        margin: 0 0 20px 0;
+    }
+
+    .container {
+        display: block;
+        position: relative;
+        margin-top: 10px;
+        margin-bottom: 10px;
+        font-size: 22px;
+        -webkit-user-select: none;
+        -moz-user-select: none;
+        -ms-user-select: none;
+        user-select: none;
+        width: 700px;
+        min-width: 700px;
+        max-width: 700px;
+        text-align: left;
+        font-style: normal;
+        font-size: 15;
+        font-weight: normal;
+        padding: 0;
+
+        .padding {
+            padding: 0 0 0 20px;
+            color: black;
+        }
+
+        .close-button {
+            border-radius: 5px;
+            margin-top: 20px;
+            padding: 10px 0;
+            background: aliceblue;
+            transition: 0.5s ease all;
+            border: 1px solid;
+            border-color: aliceblue;
+        }
+
+        .close-button:hover {
+            border-color: black;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/client/util/SettingsManager.tsx b/src/client/util/SettingsManager.tsx
index 5bcfd2449..4701c5f88 100644
--- a/src/client/util/SettingsManager.tsx
+++ b/src/client/util/SettingsManager.tsx
@@ -4,8 +4,8 @@ import MainViewModal from "../views/MainViewModal";
 import { observer } from "mobx-react";
 import { library } from '@fortawesome/fontawesome-svg-core';
 import * as fa from '@fortawesome/free-solid-svg-icons';
-import { DocumentView } from "../views/nodes/DocumentView";
 import { SelectionManager } from "./SelectionManager";
+import "./SettingsManager.scss";
 
 library.add(fa.faCopy);
 
@@ -19,13 +19,8 @@ export default class SettingsManager extends React.Component<{}> {
     public open = action(() => {
         SelectionManager.DeselectAll();
         this.isOpen = true;
-        console.log('oppin');
     });
 
-    // public open = (target: DocumentView) => {
-    //     SelectionManager.DeselectAll();
-    // }
-
     public close = action(() => {
         this.isOpen = false;
     });
@@ -39,6 +34,7 @@ export default class SettingsManager extends React.Component<{}> {
         return (
             <div className={"settings-interface"}>
                 <p>sdfsldkfhlksdjf</p>
+                <div className={"close-button"} onClick={this.close}>Done</div>
             </div>
         );
     }
diff --git a/src/client/views/MainView.scss b/src/client/views/MainView.scss
index a858a73c7..a940e6889 100644
--- a/src/client/views/MainView.scss
+++ b/src/client/views/MainView.scss
@@ -4,8 +4,9 @@
 
 .mainView-tabButtons {
     position: relative;
-    width:100%;
+    width: 100%;
 }
+
 // add nodes menu. Note that the + button is actually an input label, not an actual button.
 .mainView-docButtons {
     position: absolute;
@@ -22,21 +23,25 @@
     overflow: auto;
     z-index: 1;
 }
+
 .mainView-mainContent {
-    width:100%;
-    height:100%;
-    position:absolute;
+    width: 100%;
+    height: 100%;
+    position: absolute;
 }
-.mainView-flyoutContainer{
-    display:flex;
+
+.mainView-flyoutContainer {
+    display: flex;
     flex-direction: column;
     position: absolute;
-    width:100%;
-    height:100%;
+    width: 100%;
+    height: 100%;
+
     .documentView-node-topmost {
         background: lightgrey;
     }
 }
+
 .mainView-mainDiv {
     width: 100%;
     height: 100%;
@@ -46,6 +51,18 @@
     overflow: hidden;
 }
 
+
+.mainView-settings {
+    position: absolute;
+    left: 0;
+    bottom: 0;
+    font-size: 8px;
+}
+
+.mainView-settings:hover {
+    transform: none !important;
+}
+
 .mainView-logout {
     position: absolute;
     right: 0;
@@ -53,6 +70,10 @@
     font-size: 8px;
 }
 
+.mainView-logout:hover {
+    transform: none !important;
+}
+
 .mainView-libraryFlyout {
     height: 100%;
     position: absolute;
-- 
cgit v1.2.3-70-g09d2


From 79260cec351f1f76505c44c338222082dc4a666e Mon Sep 17 00:00:00 2001
From: kimdahey <claire_kim1@brown.edu>
Date: Tue, 12 Nov 2019 18:54:17 -0500
Subject: css changes

---
 src/client/util/SettingsManager.scss | 35 ++++++++++++++++++++---------------
 src/client/util/SettingsManager.tsx  | 19 ++++++++++++++++---
 2 files changed, 36 insertions(+), 18 deletions(-)

(limited to 'src/client/util/SettingsManager.tsx')

diff --git a/src/client/util/SettingsManager.scss b/src/client/util/SettingsManager.scss
index 2b3e455e0..1e44a6a3c 100644
--- a/src/client/util/SettingsManager.scss
+++ b/src/client/util/SettingsManager.scss
@@ -1,19 +1,35 @@
+@import "../views/globalCssVariables";
+
 .settings-interface {
     display: flex;
-    flex-direction: column;
 
     .focus-span {
         text-decoration: underline;
     }
 
     p {
-        font-size: 20px;
         text-align: left;
-        font-style: italic;
         padding: 0;
         margin: 0 0 20px 0;
     }
 
+    h1 {
+        color: $dark-color;
+        text-transform: uppercase;
+        letter-spacing: 2px;
+        font-size: 75%;
+    }
+
+    .close-button {
+        position: absolute;
+        right: 0;
+        top: 0;
+    }
+
+    .close-button:hover {
+        border-color: black;
+    }
+
     .container {
         display: block;
         position: relative;
@@ -38,18 +54,7 @@
             color: black;
         }
 
-        .close-button {
-            border-radius: 5px;
-            margin-top: 20px;
-            padding: 10px 0;
-            background: aliceblue;
-            transition: 0.5s ease all;
-            border: 1px solid;
-            border-color: aliceblue;
-        }
 
-        .close-button:hover {
-            border-color: black;
-        }
+
     }
 }
\ No newline at end of file
diff --git a/src/client/util/SettingsManager.tsx b/src/client/util/SettingsManager.tsx
index 4701c5f88..ca9124ef6 100644
--- a/src/client/util/SettingsManager.tsx
+++ b/src/client/util/SettingsManager.tsx
@@ -6,8 +6,9 @@ import { library } from '@fortawesome/fontawesome-svg-core';
 import * as fa from '@fortawesome/free-solid-svg-icons';
 import { SelectionManager } from "./SelectionManager";
 import "./SettingsManager.scss";
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
 
-library.add(fa.faCopy);
+library.add(fa.faWindowClose);
 
 @observer
 export default class SettingsManager extends React.Component<{}> {
@@ -33,8 +34,20 @@ export default class SettingsManager extends React.Component<{}> {
     private get settingsInterface() {
         return (
             <div className={"settings-interface"}>
-                <p>sdfsldkfhlksdjf</p>
-                <div className={"close-button"} onClick={this.close}>Done</div>
+                <div className={"close-button"} onClick={this.close}>
+                    <FontAwesomeIcon icon={fa.faWindowClose} />
+                </div>
+                <h1>settings</h1>
+
+                <div>toggle
+                    second toggle
+                </div>
+                <div>hellow
+                    heree
+                    s
+                    a
+                    lot of information hahahahahahahah
+                </div>
             </div>
         );
     }
-- 
cgit v1.2.3-70-g09d2


From b4a23b21bbe0a44df1328419c7d94b97a772e54f Mon Sep 17 00:00:00 2001
From: kimdahey <claire_kim1@brown.edu>
Date: Tue, 19 Nov 2019 19:06:47 -0500
Subject: progress w password

---
 src/client/util/SettingsManager.scss | 37 +++++++++++++++++++++++------------
 src/client/util/SettingsManager.tsx  | 38 ++++++++++++++++++++++++------------
 src/server/index.ts                  | 10 ++++++++++
 3 files changed, 61 insertions(+), 24 deletions(-)

(limited to 'src/client/util/SettingsManager.tsx')

diff --git a/src/client/util/SettingsManager.scss b/src/client/util/SettingsManager.scss
index 1e44a6a3c..cd9d2569a 100644
--- a/src/client/util/SettingsManager.scss
+++ b/src/client/util/SettingsManager.scss
@@ -2,16 +2,33 @@
 
 .settings-interface {
     display: flex;
+    flex-direction: column;
 
-    .focus-span {
-        text-decoration: underline;
+    .settings-body {
+        display: flex;
+        flex-direction: row;
+
+        .settings-type {
+            display: flex;
+            flex-direction: column;
+            flex-basis: 30%;
+        }
+
+        .settings-content {
+            padding-left: 1em;
+            display: flex;
+            justify-content: space-between;
+        }
     }
 
-    p {
-        text-align: left;
-        padding: 0;
-        margin: 0 0 20px 0;
+    .focus-span {
+        text-decoration: underline;
     }
+p {
+    text-align: left;
+    padding: 0;
+    margin: 0 0 20px 0;
+}
 
     h1 {
         color: $dark-color;
@@ -22,12 +39,8 @@
 
     .close-button {
         position: absolute;
-        right: 0;
-        top: 0;
-    }
-
-    .close-button:hover {
-        border-color: black;
+        right: 1em;
+        top: 1em;
     }
 
     .container {
diff --git a/src/client/util/SettingsManager.tsx b/src/client/util/SettingsManager.tsx
index ca9124ef6..c7d4d1786 100644
--- a/src/client/util/SettingsManager.tsx
+++ b/src/client/util/SettingsManager.tsx
@@ -7,6 +7,7 @@ import * as fa from '@fortawesome/free-solid-svg-icons';
 import { SelectionManager } from "./SelectionManager";
 import "./SettingsManager.scss";
 import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import { Identified } from "../Network";
 
 library.add(fa.faWindowClose);
 
@@ -16,6 +17,7 @@ export default class SettingsManager extends React.Component<{}> {
     @observable private isOpen = false;
     @observable private dialogueBoxOpacity = 1;
     @observable private overlayOpacity = 0.4;
+    private curr_password_ref = React.createRef<HTMLInputElement>();
 
     public open = action(() => {
         SelectionManager.DeselectAll();
@@ -31,23 +33,35 @@ export default class SettingsManager extends React.Component<{}> {
         SettingsManager.Instance = this;
     }
 
+    private dispatchRequest = async () => {
+        const curr_pass = this.curr_password_ref.current!.value;
+        const { error: resultError, ...others } = await Identified.PostToServer('/internalResetPassword', { curr_pass });
+        if (resultError) {
+            // we failed
+        }
+        // do stuff with response
+    }
+
     private get settingsInterface() {
         return (
             <div className={"settings-interface"}>
-                <div className={"close-button"} onClick={this.close}>
-                    <FontAwesomeIcon icon={fa.faWindowClose} />
+                <div className="settings-heading">
+                    <h1>settings</h1>
+                    <div className={"close-button"} onClick={this.close}>
+                        <FontAwesomeIcon icon={fa.faWindowClose} size={"lg"} />
+                    </div>
                 </div>
-                <h1>settings</h1>
-
-                <div>toggle
-                    second toggle
-                </div>
-                <div>hellow
-                    heree
-                    s
-                    a
-                    lot of information hahahahahahahah
+                <div className="settings-body">
+                    <div className="settings-type">
+                        <p>changeable settings</p>
+                        <p>static data</p>
+                    </div>
+                    <div className="settings-content">
+                        <input ref={this.curr_password_ref}></input>
+                        this changes with what you select!
+                    </div>
                 </div>
+
             </div>
         );
     }
diff --git a/src/server/index.ts b/src/server/index.ts
index 1595781dc..d5dbe8913 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -668,6 +668,16 @@ addSecureRoute({
     onRejection: (_req, res) => res.send(JSON.stringify({ id: "__guest__", email: "" }))
 });
 
+addSecureRoute({
+    method: Method.POST,
+    subscribers: '/internalResetPassword',
+    onValidation: (user, _req, res) => {
+        // user password auth
+        // new pass same
+        // do extra stuff
+    }
+});
+
 const ServicesApiKeyMap = new Map<string, string | undefined>([
     ["face", process.env.FACE],
     ["vision", process.env.VISION],
-- 
cgit v1.2.3-70-g09d2


From 56b83d89f37a5523ab319977e3385f539ecaf996 Mon Sep 17 00:00:00 2001
From: kimdahey <claire_kim1@brown.edu>
Date: Sat, 23 Nov 2019 16:59:53 -0500
Subject: pushing progress...need to figure out bcrypt.compare"

---
 src/client/util/SettingsManager.scss | 16 ++++++++----
 src/client/util/SettingsManager.tsx  | 22 +++++++++++++----
 src/server/index.ts                  | 48 +++++++++++++++++++++++++++++++++---
 3 files changed, 73 insertions(+), 13 deletions(-)

(limited to 'src/client/util/SettingsManager.tsx')

diff --git a/src/client/util/SettingsManager.scss b/src/client/util/SettingsManager.scss
index cd9d2569a..0d637868b 100644
--- a/src/client/util/SettingsManager.scss
+++ b/src/client/util/SettingsManager.scss
@@ -17,18 +17,24 @@
         .settings-content {
             padding-left: 1em;
             display: flex;
+            flex-direction: column;
             justify-content: space-between;
+
+            input {
+                min-width: 100%;
+            }
         }
     }
 
     .focus-span {
         text-decoration: underline;
     }
-p {
-    text-align: left;
-    padding: 0;
-    margin: 0 0 20px 0;
-}
+
+    p {
+        text-align: left;
+        padding: 0;
+        margin: 0 0 20px 0;
+    }
 
     h1 {
         color: $dark-color;
diff --git a/src/client/util/SettingsManager.tsx b/src/client/util/SettingsManager.tsx
index 76f4bb964..ee2d9ff21 100644
--- a/src/client/util/SettingsManager.tsx
+++ b/src/client/util/SettingsManager.tsx
@@ -18,6 +18,8 @@ export default class SettingsManager extends React.Component<{}> {
     @observable private dialogueBoxOpacity = 1;
     @observable private overlayOpacity = 0.4;
     private curr_password_ref = React.createRef<HTMLInputElement>();
+    private new_password_ref = React.createRef<HTMLInputElement>();
+    private new_confirm_ref = React.createRef<HTMLInputElement>();
 
     public open = action(() => {
         SelectionManager.DeselectAll();
@@ -35,12 +37,19 @@ export default class SettingsManager extends React.Component<{}> {
 
     private dispatchRequest = async () => {
         const curr_pass = this.curr_password_ref.current!.value;
-        const { error: resultError, ...others } = await Identified.PostToServer('/internalResetPassword', { curr_pass });
-        if (resultError) {
+        const new_pass = this.new_password_ref.current!.value;
+        const new_confirm = this.new_confirm_ref.current!.value;
+        console.log('ready!');
+        // const { error, hello } = await Identified.PostToServer('/internalResetPassword', { curr_pass, new_pass, new_confirm });
+        const resp = await Identified.PostToServer('/internalResetPassword', { curr_pass, new_pass, new_confirm });
+        console.log('set!');
+        console.log('response', resp);
+        console.log('hm', resp.hm);
+        if (resp.error) {
             // we failed
-            console.log(resultError);
+            console.log(resp.error);
         }
-        console.log(others);
+        console.log('go!');
         // do stuff with response
     }
 
@@ -59,7 +68,10 @@ export default class SettingsManager extends React.Component<{}> {
                         <p>static data</p>
                     </div>
                     <div className="settings-content">
-                        <input ref={this.curr_password_ref}></input>
+                        <input ref={this.curr_password_ref} />
+                        <input ref={this.new_password_ref} />
+                        <input ref={this.new_confirm_ref} />
+                        <button onClick={this.dispatchRequest}>submit</button>
                         this changes with what you select!
                     </div>
                 </div>
diff --git a/src/server/index.ts b/src/server/index.ts
index d96bd4d9a..df9edac50 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -19,7 +19,7 @@ import { Socket } from 'socket.io';
 import * as webpack from 'webpack';
 import * as wdm from 'webpack-dev-middleware';
 import * as whm from 'webpack-hot-middleware';
-import { Utils } from '../Utils';
+import { Utils, returnEmptyString } from '../Utils';
 import { getForgot, getLogin, getLogout, getReset, getSignup, postForgot, postLogin, postReset, postSignup } from './authentication/controllers/user_controller';
 import { DashUserModel } from './authentication/models/user_model';
 import { Client } from './Client';
@@ -56,6 +56,8 @@ import { reject } from 'bluebird';
 import { ExifData } from 'exif';
 import { Result } from '../client/northstar/model/idea/idea';
 import RouteSubscriber from './RouteSubscriber';
+//@ts-ignore
+import * as bcrypt from "bcrypt-nodejs";
 
 const download = (url: string, dest: fs.PathLike) => request.get(url).pipe(fs.createWriteStream(dest));
 let youtubeApiKey: string;
@@ -671,10 +673,51 @@ addSecureRoute({
 addSecureRoute({
     method: Method.POST,
     subscribers: '/internalResetPassword',
-    onValidation: (user, _req, res) => {
+    onValidation: async (user, req, res) => {
+        const result: any = {};
+        // perhaps should assert whether curr password is entered correctly
+        const validated = await new Promise<Opt<boolean>>(resolve => {
+            bcrypt.compare(req.body.curr_pass, user.password, (err, result_1) => {
+                if (err) {
+                    result.error = "Incorrect current password";
+                    res.send(result);
+                    resolve(undefined);
+                } else {
+                    result.hm = err;
+                    resolve(result_1);
+                }
+            });
+        });
+
+        if (validated === undefined) {
+            return;
+        }
+
+        result.hello = validated;
+        req.assert("new_pass", "Password must be at least 4 characters long").len({ min: 4 });
+        req.assert("new_confirm", "Passwords do not match").equals(req.body.new_pass);
+
+        // was there error in validating new passwords?
+        if (req.validationErrors()) {
+            // was there error?
+            result.error = req.validationErrors();
+            result.pass = user.password;
+        }
+
+        user.password = req.body.password;
+        user.passwordResetToken = undefined;
+        user.passwordResetExpires = undefined;
+
+        user.save(function (err) {
+            result.error = "saving";
+            // was there error?
+        });
+
         // user password auth
         // new pass same
         // do extra stuff
+        //
+        res.send(result);
     }
 });
 
@@ -1173,7 +1216,6 @@ const suffixMap: { [type: string]: (string | [string, string | ((json: any) => a
     "pdf": ["_t", "url"],
     "audio": ["_t", "url"],
     "web": ["_t", "url"],
-    "RichTextField": ["_t", value => value.Text],
     "date": ["_d", value => new Date(value.date).toISOString()],
     "proxy": ["_i", "fieldId"],
     "list": ["_l", list => {
-- 
cgit v1.2.3-70-g09d2


From 88a716d8b7abb0255feea5bc32843ba68910eff5 Mon Sep 17 00:00:00 2001
From: kimdahey <claire_kim1@brown.edu>
Date: Thu, 5 Dec 2019 11:57:15 -0500
Subject: password reset live

---
 package.json                          |  2 +-
 src/client/util/SettingsManager.scss  | 34 +++++++++++++++++++++++-
 src/client/util/SettingsManager.tsx   | 50 +++++++++++++++++++++--------------
 src/server/ApiManagers/UserManager.ts | 49 ++++++++++++++++++++++++++++++++++
 4 files changed, 113 insertions(+), 22 deletions(-)

(limited to 'src/client/util/SettingsManager.tsx')

diff --git a/package.json b/package.json
index 499aefdb5..574c7e7fa 100644
--- a/package.json
+++ b/package.json
@@ -229,4 +229,4 @@
         "xoauth2": "^1.2.0",
         "youtube": "^0.1.0"
     }
-}
\ No newline at end of file
+}
diff --git a/src/client/util/SettingsManager.scss b/src/client/util/SettingsManager.scss
index 0d637868b..228625182 100644
--- a/src/client/util/SettingsManager.scss
+++ b/src/client/util/SettingsManager.scss
@@ -1,17 +1,45 @@
 @import "../views/globalCssVariables";
 
+.dialogue-box {
+    background-color: whitesmoke !important;
+    color: grey;
+
+    button {
+        background: $lighter-alt-accent;
+        outline: none;
+        border-radius: 5px;
+        border: 0px;
+        color: #fcfbf7;
+        text-transform: uppercase;
+        letter-spacing: 2px;
+        font-size: 75%;
+        padding: 10px;
+        transition: transform 0.2s;
+        margin: 2px;
+    }
+}
+
 .settings-interface {
     display: flex;
     flex-direction: column;
 
+    input {
+        border-radius: 5px;
+        border: none;
+        padding: 4px 4px 4px 10px;
+        margin: 2px;
+    }
+
     .settings-body {
         display: flex;
         flex-direction: row;
 
+
         .settings-type {
             display: flex;
             flex-direction: column;
             flex-basis: 30%;
+
         }
 
         .settings-content {
@@ -20,6 +48,10 @@
             flex-direction: column;
             justify-content: space-between;
 
+            button {
+                background: $darker-alt-accent;
+            }
+
             input {
                 min-width: 100%;
             }
@@ -40,7 +72,7 @@
         color: $dark-color;
         text-transform: uppercase;
         letter-spacing: 2px;
-        font-size: 75%;
+        font-size: 120%;
     }
 
     .close-button {
diff --git a/src/client/util/SettingsManager.tsx b/src/client/util/SettingsManager.tsx
index ee2d9ff21..0fcb80a3f 100644
--- a/src/client/util/SettingsManager.tsx
+++ b/src/client/util/SettingsManager.tsx
@@ -7,7 +7,7 @@ import * as fa from '@fortawesome/free-solid-svg-icons';
 import { SelectionManager } from "./SelectionManager";
 import "./SettingsManager.scss";
 import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-import { Identified } from "../Network";
+import { Networking } from "../Network";
 
 library.add(fa.faWindowClose);
 
@@ -36,21 +36,31 @@ export default class SettingsManager extends React.Component<{}> {
     }
 
     private dispatchRequest = async () => {
-        const curr_pass = this.curr_password_ref.current!.value;
-        const new_pass = this.new_password_ref.current!.value;
-        const new_confirm = this.new_confirm_ref.current!.value;
-        console.log('ready!');
-        // const { error, hello } = await Identified.PostToServer('/internalResetPassword', { curr_pass, new_pass, new_confirm });
-        const resp = await Identified.PostToServer('/internalResetPassword', { curr_pass, new_pass, new_confirm });
-        console.log('set!');
-        console.log('response', resp);
-        console.log('hm', resp.hm);
-        if (resp.error) {
-            // we failed
-            console.log(resp.error);
+        const curr_pass = this.curr_password_ref.current?.value;
+        const new_pass = this.new_password_ref.current?.value;
+        const new_confirm = this.new_confirm_ref.current?.value;
+
+        if (!(curr_pass && new_pass && new_confirm)) {
+            alert("Hey we're missing some fields!");
+            return;
+        }
+
+        const passwordBundle = {
+            curr_pass,
+            new_pass,
+            new_confirm
+        };
+        const { error } = await Networking.PostToServer('/internalResetPassword', passwordBundle);
+        if (error) {
+            alert("Uh oh! " + error);
+            return;
         }
-        console.log('go!');
-        // do stuff with response
+
+        alert("Password successfully updated!");
+    }
+
+    onClick = (event: any) => {
+        console.log(event);
     }
 
     private get settingsInterface() {
@@ -64,13 +74,13 @@ export default class SettingsManager extends React.Component<{}> {
                 </div>
                 <div className="settings-body">
                     <div className="settings-type">
-                        <p>changeable settings</p>
-                        <p>static data</p>
+                        <button onClick={this.onClick} value="settings">settings</button>
+                        <button onClick={this.onClick} value="data">data</button>
                     </div>
                     <div className="settings-content">
-                        <input ref={this.curr_password_ref} />
-                        <input ref={this.new_password_ref} />
-                        <input ref={this.new_confirm_ref} />
+                        <input placeholder="current password" ref={this.curr_password_ref} />
+                        <input placeholder="new password" ref={this.new_password_ref} />
+                        <input placeholder="confirm new password" ref={this.new_confirm_ref} />
                         <button onClick={this.dispatchRequest}>submit</button>
                         this changes with what you select!
                     </div>
diff --git a/src/server/ApiManagers/UserManager.ts b/src/server/ApiManagers/UserManager.ts
index 0f7d14320..7e8ceb189 100644
--- a/src/server/ApiManagers/UserManager.ts
+++ b/src/server/ApiManagers/UserManager.ts
@@ -2,6 +2,8 @@ import ApiManager, { Registration } from "./ApiManager";
 import { Method } from "../RouteManager";
 import { Database } from "../database";
 import { msToTime } from "../ActionUtilities";
+import * as bcrypt from "bcrypt-nodejs";
+import { Opt } from "../../new_fields/Doc";
 
 export const timeMap: { [id: string]: number } = {};
 interface ActivityUnit {
@@ -36,6 +38,53 @@ export default class UserManager extends ApiManager {
             onUnauthenticated: ({ res }) => res.send(JSON.stringify({ id: "__guest__", email: "" }))
         });
 
+        register({
+            method: Method.POST,
+            subscription: '/internalResetPassword',
+            onValidation: async ({ user, req, res }) => {
+                const result: any = {};
+                const { curr_pass, new_pass, new_confirm } = req.body;
+                // perhaps should assert whether curr password is entered correctly
+                const validated = await new Promise<Opt<boolean>>(resolve => {
+                    bcrypt.compare(curr_pass, user.password, (err, passwords_match) => {
+                        if (err) {
+                            result.error = "Incorrect current password";
+                            res.send(result);
+                            resolve(undefined);
+                        } else {
+                            resolve(passwords_match);
+                        }
+                    });
+                });
+
+                if (validated === undefined) {
+                    return;
+                }
+
+                req.assert("new_pass", "Password must be at least 4 characters long").len({ min: 4 });
+                req.assert("new_confirm", "Passwords do not match").equals(new_pass);
+
+                // was there error in validating new passwords?
+                if (req.validationErrors()) {
+                    // was there error?
+                    result.error = req.validationErrors();
+                }
+
+                user.password = new_pass;
+                user.passwordResetToken = undefined;
+                user.passwordResetExpires = undefined;
+
+                user.save(err => {
+                    if (err) {
+                        result.error = "saving";
+                    }
+                });
+
+                res.send(result);
+            }
+        });
+
+
         register({
             method: Method.GET,
             subscription: "/activity",
-- 
cgit v1.2.3-70-g09d2


From 130aaa1a8f2525db12479fcfef2204ed85a2b58b Mon Sep 17 00:00:00 2001
From: kimdahey <claire_kim1@brown.edu>
Date: Sat, 7 Dec 2019 17:21:40 -0500
Subject: rolled back to working state, saving new changes

---
 src/client/util/SettingsManager.tsx   | 49 ++++++++++++++++++++++++++---------
 src/server/ApiManagers/UserManager.ts | 13 +++++++---
 2 files changed, 46 insertions(+), 16 deletions(-)

(limited to 'src/client/util/SettingsManager.tsx')

diff --git a/src/client/util/SettingsManager.tsx b/src/client/util/SettingsManager.tsx
index 0fcb80a3f..e475cac1f 100644
--- a/src/client/util/SettingsManager.tsx
+++ b/src/client/util/SettingsManager.tsx
@@ -17,6 +17,9 @@ export default class SettingsManager extends React.Component<{}> {
     @observable private isOpen = false;
     @observable private dialogueBoxOpacity = 1;
     @observable private overlayOpacity = 0.4;
+    @observable private settingsContent = "settings";
+    @observable private errorText = "";
+    @observable private successText = "";
     private curr_password_ref = React.createRef<HTMLInputElement>();
     private new_password_ref = React.createRef<HTMLInputElement>();
     private new_confirm_ref = React.createRef<HTMLInputElement>();
@@ -35,13 +38,15 @@ export default class SettingsManager extends React.Component<{}> {
         SettingsManager.Instance = this;
     }
 
+    @action
     private dispatchRequest = async () => {
         const curr_pass = this.curr_password_ref.current?.value;
         const new_pass = this.new_password_ref.current?.value;
         const new_confirm = this.new_confirm_ref.current?.value;
 
         if (!(curr_pass && new_pass && new_confirm)) {
-            alert("Hey we're missing some fields!");
+            this.changeAlertText("Hey, we're missing some fields!", "");
+            // alert("Hey we're missing some fields!");
             return;
         }
 
@@ -50,17 +55,31 @@ export default class SettingsManager extends React.Component<{}> {
             new_pass,
             new_confirm
         };
-        const { error } = await Networking.PostToServer('/internalResetPassword', passwordBundle);
+
+        const res = await Networking.PostToServer('/internalResetPassword', passwordBundle);
+        const error = res.error;
+        console.log(res, "is res");
         if (error) {
-            alert("Uh oh! " + error);
+            console.log(error, error[0].msg);
+            this.changeAlertText("Uh oh! " + error[0].msg + "...", "");
+            // alert("Uh oh! " + error.msg);
             return;
         }
 
-        alert("Password successfully updated!");
+        this.changeAlertText("", "Password successfully updated!");
+        console.log('success!');
+        // alert("Password successfully updated!");
+    }
+
+    @action
+    private changeAlertText = (errortxt: string, successtxt: string) => {
+        this.errorText = errortxt;
+        this.successText = successtxt;
     }
 
+    @action
     onClick = (event: any) => {
-        console.log(event);
+        this.settingsContent = event.currentTarget.value;
     }
 
     private get settingsInterface() {
@@ -77,13 +96,19 @@ export default class SettingsManager extends React.Component<{}> {
                         <button onClick={this.onClick} value="settings">settings</button>
                         <button onClick={this.onClick} value="data">data</button>
                     </div>
-                    <div className="settings-content">
-                        <input placeholder="current password" ref={this.curr_password_ref} />
-                        <input placeholder="new password" ref={this.new_password_ref} />
-                        <input placeholder="confirm new password" ref={this.new_confirm_ref} />
-                        <button onClick={this.dispatchRequest}>submit</button>
-                        this changes with what you select!
-                    </div>
+                    {this.settingsContent === "settings" ?
+                        <div className="settings-content">
+                            change password here:
+                            <input placeholder="current password" ref={this.curr_password_ref} />
+                            <input placeholder="new password" ref={this.new_password_ref} />
+                            <input placeholder="confirm new password" ref={this.new_confirm_ref} />
+                            {this.errorText ? <div className="error-text">{this.errorText}</div> : undefined}
+                            {this.successText ? <div className="success-text">{this.successText}</div> : undefined}
+                            <button onClick={this.dispatchRequest}>submit</button>
+
+                        </div>
+                        :
+                        <div className="settings-content">hello?</div>}
                 </div>
 
             </div>
diff --git a/src/server/ApiManagers/UserManager.ts b/src/server/ApiManagers/UserManager.ts
index 7e8ceb189..3a7e924ee 100644
--- a/src/server/ApiManagers/UserManager.ts
+++ b/src/server/ApiManagers/UserManager.ts
@@ -47,8 +47,8 @@ export default class UserManager extends ApiManager {
                 // perhaps should assert whether curr password is entered correctly
                 const validated = await new Promise<Opt<boolean>>(resolve => {
                     bcrypt.compare(curr_pass, user.password, (err, passwords_match) => {
-                        if (err) {
-                            result.error = "Incorrect current password";
+                        if (err || !passwords_match) {
+                            result.error = [{ msg: "Incorrect current password" }];
                             res.send(result);
                             resolve(undefined);
                         } else {
@@ -61,9 +61,13 @@ export default class UserManager extends ApiManager {
                     return;
                 }
 
-                req.assert("new_pass", "Password must be at least 4 characters long").len({ min: 4 });
+                // req.assert("new_pass", "Password must be at least 4 characters long").len({ min: 4 });
                 req.assert("new_confirm", "Passwords do not match").equals(new_pass);
 
+                // if (req.assert("new_pass", "Password must be at least 4 characters long").len({ min: 4 })) {
+                //     result.inch = "interesting";
+                // }
+
                 // was there error in validating new passwords?
                 if (req.validationErrors()) {
                     // was there error?
@@ -76,7 +80,7 @@ export default class UserManager extends ApiManager {
 
                 user.save(err => {
                     if (err) {
-                        result.error = "saving";
+                        result.error = [{ msg: "Error while saving new password" }];
                     }
                 });
 
@@ -85,6 +89,7 @@ export default class UserManager extends ApiManager {
         });
 
 
+
         register({
             method: Method.GET,
             subscription: "/activity",
-- 
cgit v1.2.3-70-g09d2


From 4e3037dac61105f01397d55febb38b2d5bfa50f1 Mon Sep 17 00:00:00 2001
From: kimdahey <claire_kim1@brown.edu>
Date: Sat, 7 Dec 2019 18:04:34 -0500
Subject: added forgot password indication

---
 src/client/util/SettingsManager.tsx   | 10 ++--------
 src/server/ApiManagers/UserManager.ts | 23 +++++++++--------------
 views/login.pug                       |  2 +-
 3 files changed, 12 insertions(+), 23 deletions(-)

(limited to 'src/client/util/SettingsManager.tsx')

diff --git a/src/client/util/SettingsManager.tsx b/src/client/util/SettingsManager.tsx
index e475cac1f..4872d7280 100644
--- a/src/client/util/SettingsManager.tsx
+++ b/src/client/util/SettingsManager.tsx
@@ -46,7 +46,6 @@ export default class SettingsManager extends React.Component<{}> {
 
         if (!(curr_pass && new_pass && new_confirm)) {
             this.changeAlertText("Hey, we're missing some fields!", "");
-            // alert("Hey we're missing some fields!");
             return;
         }
 
@@ -56,19 +55,13 @@ export default class SettingsManager extends React.Component<{}> {
             new_confirm
         };
 
-        const res = await Networking.PostToServer('/internalResetPassword', passwordBundle);
-        const error = res.error;
-        console.log(res, "is res");
+        const { error } = await Networking.PostToServer('/internalResetPassword', passwordBundle);
         if (error) {
-            console.log(error, error[0].msg);
             this.changeAlertText("Uh oh! " + error[0].msg + "...", "");
-            // alert("Uh oh! " + error.msg);
             return;
         }
 
         this.changeAlertText("", "Password successfully updated!");
-        console.log('success!');
-        // alert("Password successfully updated!");
     }
 
     @action
@@ -105,6 +98,7 @@ export default class SettingsManager extends React.Component<{}> {
                             {this.errorText ? <div className="error-text">{this.errorText}</div> : undefined}
                             {this.successText ? <div className="success-text">{this.successText}</div> : undefined}
                             <button onClick={this.dispatchRequest}>submit</button>
+                            <a href="/forgotPassword">forgot password?</a>
 
                         </div>
                         :
diff --git a/src/server/ApiManagers/UserManager.ts b/src/server/ApiManagers/UserManager.ts
index 6997cb192..4556e01ea 100644
--- a/src/server/ApiManagers/UserManager.ts
+++ b/src/server/ApiManagers/UserManager.ts
@@ -61,28 +61,23 @@ export default class UserManager extends ApiManager {
                     return;
                 }
 
-                // req.assert("new_pass", "Password must be at least 4 characters long").len({ min: 4 });
+                req.assert("new_pass", "Password must be at least 4 characters long").len({ min: 4 });
                 req.assert("new_confirm", "Passwords do not match").equals(new_pass);
-
-<<<<<<< HEAD
-                // if (req.assert("new_pass", "Password must be at least 4 characters long").len({ min: 4 })) {
-                //     result.inch = "interesting";
-                // }
-=======
-                if (req.assert("new_pass", "Password must be at least 4 characters long").len({ min: 4 })) {
-                    result.inch = "interesting";
+                if (curr_pass === new_pass) {
+                    result.error = [{ msg: "Current and new password are the same" }];
                 }
->>>>>>> a9dab5e6befa36c54afd1e46507f266fda30a42e
-
                 // was there error in validating new passwords?
                 if (req.validationErrors()) {
                     // was there error?
                     result.error = req.validationErrors();
                 }
 
-                user.password = new_pass;
-                user.passwordResetToken = undefined;
-                user.passwordResetExpires = undefined;
+                // will only change password if there are no errors.
+                if (!result.error) {
+                    user.password = new_pass;
+                    user.passwordResetToken = undefined;
+                    user.passwordResetExpires = undefined;
+                }
 
                 user.save(err => {
                     if (err) {
diff --git a/views/login.pug b/views/login.pug
index 26da5e29e..98816e9c8 100644
--- a/views/login.pug
+++ b/views/login.pug
@@ -9,7 +9,7 @@ block content
         .overlay(id='overlay_login')
             a(href="/signup")
                 img(id='new_user', src="https://bit.ly/2EuqPb4", alt="")
-            a(href="/forgot")
+            a(href="/forgotPassword")
                 img(id='forgot', src="https://bit.ly/2XjHpSo", alt="")
             .inner.login
                 h3.auth_header Log In
-- 
cgit v1.2.3-70-g09d2


From 5cde81d8c6b4dcd8d0796f8669b668763957f395 Mon Sep 17 00:00:00 2001
From: kimdahey <claire_kim1@brown.edu>
Date: Sat, 7 Dec 2019 18:30:54 -0500
Subject: pushing commit for today

---
 src/client/util/SettingsManager.tsx | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

(limited to 'src/client/util/SettingsManager.tsx')

diff --git a/src/client/util/SettingsManager.tsx b/src/client/util/SettingsManager.tsx
index 4872d7280..652af438b 100644
--- a/src/client/util/SettingsManager.tsx
+++ b/src/client/util/SettingsManager.tsx
@@ -17,7 +17,7 @@ export default class SettingsManager extends React.Component<{}> {
     @observable private isOpen = false;
     @observable private dialogueBoxOpacity = 1;
     @observable private overlayOpacity = 0.4;
-    @observable private settingsContent = "settings";
+    @observable private settingsContent = "password";
     @observable private errorText = "";
     @observable private successText = "";
     private curr_password_ref = React.createRef<HTMLInputElement>();
@@ -86,10 +86,10 @@ export default class SettingsManager extends React.Component<{}> {
                 </div>
                 <div className="settings-body">
                     <div className="settings-type">
-                        <button onClick={this.onClick} value="settings">settings</button>
-                        <button onClick={this.onClick} value="data">data</button>
+                        <button onClick={this.onClick} value="password">reset password</button>
+                        <button onClick={this.onClick} value="data">reset data</button>
                     </div>
-                    {this.settingsContent === "settings" ?
+                    {this.settingsContent === "password" ?
                         <div className="settings-content">
                             change password here:
                             <input placeholder="current password" ref={this.curr_password_ref} />
@@ -97,12 +97,12 @@ export default class SettingsManager extends React.Component<{}> {
                             <input placeholder="confirm new password" ref={this.new_confirm_ref} />
                             {this.errorText ? <div className="error-text">{this.errorText}</div> : undefined}
                             {this.successText ? <div className="success-text">{this.successText}</div> : undefined}
-                            <button onClick={this.dispatchRequest}>submit</button>
-                            <a href="/forgotPassword">forgot password?</a>
-
+                            <button onClick={this.dispatchRequest}>submit</button> <a href="/forgotPassword">forgot password?</a>
                         </div>
-                        :
-                        <div className="settings-content">hello?</div>}
+                        : undefined}
+                    {this.settingsContent === "data" ?
+                        <div className="settings-content">hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii</div>
+                        : undefined}
                 </div>
 
             </div>
-- 
cgit v1.2.3-70-g09d2


From 42b325a94f66e6da0a9fdb0ca0740c01ac7b52f1 Mon Sep 17 00:00:00 2001
From: kimdahey <claire_kim1@brown.edu>
Date: Thu, 16 Jan 2020 14:59:37 -0500
Subject: additional qol changes

---
 src/client/util/SettingsManager.scss | 38 ++++++++++++++++++++++++------------
 src/client/util/SettingsManager.tsx  |  6 +++++-
 src/client/views/MainView.scss       | 12 +++++++-----
 src/server/Websocket/Websocket.ts    |  7 ++++++-
 4 files changed, 44 insertions(+), 19 deletions(-)

(limited to 'src/client/util/SettingsManager.tsx')

diff --git a/src/client/util/SettingsManager.scss b/src/client/util/SettingsManager.scss
index 5839fa748..9b6a2ccae 100644
--- a/src/client/util/SettingsManager.scss
+++ b/src/client/util/SettingsManager.scss
@@ -3,6 +3,8 @@
 .dialogue-box {
     background-color: whitesmoke !important;
     color: grey;
+    width: 400px;
+    height: 300px;
 
     button {
         background: $lighter-alt-accent;
@@ -14,6 +16,7 @@
         letter-spacing: 2px;
         font-size: 75%;
         padding: 10px;
+        margin: 10px;
         transition: transform 0.2s;
         margin: 2px;
     }
@@ -23,6 +26,23 @@
     display: flex;
     flex-direction: column;
 
+    button {
+        width: 100px;
+        align-self: center;
+        background: $darker-alt-accent;
+    }
+
+    .delete-button {
+        background: rgb(227, 86, 86);
+    }
+
+    .close-button {
+        position: absolute;
+        right: 1em;
+        top: 1em;
+    }
+
+
     input {
         border-radius: 5px;
         border: none;
@@ -32,8 +52,7 @@
 
     .settings-body {
         display: flex;
-        flex-direction: row;
-
+        justify-content: space-between;
 
         .settings-type {
             display: flex;
@@ -44,13 +63,14 @@
 
         .settings-content {
             padding-left: 1em;
+            padding-right: 1em;
             display: flex;
             flex-direction: column;
-            justify-content: space-between;
-            text-align: left;
+            justify-content: space-around;
+            // text-align: left;
 
-            button {
-                background: $darker-alt-accent;
+            ::placeholder {
+                color: $intermediate-color;
             }
 
             input {
@@ -84,12 +104,6 @@
         font-size: 120%;
     }
 
-    .close-button {
-        position: absolute;
-        right: 1em;
-        top: 1em;
-    }
-
     .container {
         display: block;
         position: relative;
diff --git a/src/client/util/SettingsManager.tsx b/src/client/util/SettingsManager.tsx
index 652af438b..6f852a3e6 100644
--- a/src/client/util/SettingsManager.tsx
+++ b/src/client/util/SettingsManager.tsx
@@ -101,7 +101,11 @@ export default class SettingsManager extends React.Component<{}> {
                         </div>
                         : undefined}
                     {this.settingsContent === "data" ?
-                        <div className="settings-content">hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii</div>
+                        <div className="settings-content">
+                            WARNING: <br />
+                            THIS WILL ERASE ALL YOUR CURRENT DOCUMENTS STORED ON DASH. IF YOU WISH TO PROCEED, CLICK THE BUTTON BELOW.
+                            <button className="delete-button">DELETE</button>
+                        </div>
                         : undefined}
                 </div>
 
diff --git a/src/client/views/MainView.scss b/src/client/views/MainView.scss
index ab0a8e49b..0bc07fa43 100644
--- a/src/client/views/MainView.scss
+++ b/src/client/views/MainView.scss
@@ -5,6 +5,7 @@
 .mainView-tabButtons {
     position: relative;
     width: 100%;
+
     .documentView-node-topmost {
         height: 200% !important;
     }
@@ -12,8 +13,8 @@
 
 .mainContent-div {
     position: relative;
-    width:100%;
-    height:100%;
+    width: 100%;
+    height: 100%;
 }
 
 .mainView-contentArea {
@@ -21,6 +22,7 @@
         height: 200% !important;
     }
 }
+
 // add nodes menu. Note that the + button is actually an input label, not an actual button.
 .mainView-docButtons {
     position: absolute;
@@ -79,8 +81,8 @@
 
 .mainView-logout {
     position: absolute;
-    right: 5;
-    bottom: 5;
+    right: 0;
+    bottom: 0;
     font-size: 8px;
 }
 
@@ -90,7 +92,7 @@
 
 .mainView-libraryFlyout {
     height: 100%;
-    width:100%;
+    width: 100%;
     position: absolute;
     display: flex;
     flex-direction: column;
diff --git a/src/server/Websocket/Websocket.ts b/src/server/Websocket/Websocket.ts
index 6dda6956e..9e6ad1c72 100644
--- a/src/server/Websocket/Websocket.ts
+++ b/src/server/Websocket/Websocket.ts
@@ -28,7 +28,7 @@ export namespace WebSocket {
 
     function initialize(isRelease: boolean) {
         const endpoint = io();
-        endpoint.on("connection", function(socket: Socket) {
+        endpoint.on("connection", function (socket: Socket) {
             _socket = socket;
 
             socket.use((_packet, next) => {
@@ -89,6 +89,11 @@ export namespace WebSocket {
         await Database.Instance.deleteAll('newDocuments');
     }
 
+    // export async function deleteUserDocuments() {
+    //     await Database.Instance.deleteAll();
+    //     await Database.Instance.deleteAll('newDocuments');
+    // }
+
     export async function deleteAll() {
         await Database.Instance.deleteAll();
         await Database.Instance.deleteAll('newDocuments');
-- 
cgit v1.2.3-70-g09d2


From b71d2cd765ea8b81fa60bc82ae962feba832baaf Mon Sep 17 00:00:00 2001
From: kimdahey <claire_kim1@brown.edu>
Date: Fri, 17 Jan 2020 13:27:23 -0500
Subject: css updates

---
 package-lock.json                    | 386 +++++++++++++++++------------------
 src/client/util/SettingsManager.scss |  32 +--
 src/client/util/SettingsManager.tsx  |   9 +-
 3 files changed, 215 insertions(+), 212 deletions(-)

(limited to 'src/client/util/SettingsManager.tsx')

diff --git a/package-lock.json b/package-lock.json
index 0ec256f02..2cfdfbbc0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -35,7 +35,7 @@
                     "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
                     "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
                     "requires": {
-                        "color-convert": "1.9.3"
+                        "color-convert": "^1.9.0"
                     }
                 },
                 "chalk": {
@@ -43,9 +43,9 @@
                     "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
                     "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
                     "requires": {
-                        "ansi-styles": "3.2.1",
-                        "escape-string-regexp": "1.0.5",
-                        "supports-color": "5.5.0"
+                        "ansi-styles": "^3.2.1",
+                        "escape-string-regexp": "^1.0.5",
+                        "supports-color": "^5.3.0"
                     }
                 },
                 "supports-color": {
@@ -53,7 +53,7 @@
                     "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
                     "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
                     "requires": {
-                        "has-flag": "3.0.0"
+                        "has-flag": "^3.0.0"
                     }
                 }
             }
@@ -1504,7 +1504,7 @@
                     "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz",
                     "integrity": "sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==",
                     "requires": {
-                        "readable-stream": "3.4.0"
+                        "readable-stream": "^3.0.1"
                     }
                 },
                 "readable-stream": {
@@ -1512,9 +1512,9 @@
                     "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
                     "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
                     "requires": {
-                        "inherits": "2.0.3",
-                        "string_decoder": "1.1.1",
-                        "util-deprecate": "1.0.2"
+                        "inherits": "^2.0.3",
+                        "string_decoder": "^1.1.1",
+                        "util-deprecate": "^1.0.1"
                     }
                 },
                 "tar-stream": {
@@ -1522,11 +1522,11 @@
                     "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz",
                     "integrity": "sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==",
                     "requires": {
-                        "bl": "3.0.0",
-                        "end-of-stream": "1.4.1",
-                        "fs-constants": "1.0.0",
-                        "inherits": "2.0.3",
-                        "readable-stream": "3.4.0"
+                        "bl": "^3.0.0",
+                        "end-of-stream": "^1.4.1",
+                        "fs-constants": "^1.0.0",
+                        "inherits": "^2.0.3",
+                        "readable-stream": "^3.1.1"
                     }
                 }
             }
@@ -5143,7 +5143,7 @@
                     "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
                     "dev": true,
                     "requires": {
-                        "ms": "2.1.2"
+                        "ms": "^2.1.1"
                     }
                 },
                 "ms": {
@@ -5207,7 +5207,7 @@
                     "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
                     "dev": true,
                     "requires": {
-                        "color-convert": "1.9.3"
+                        "color-convert": "^1.9.0"
                     }
                 },
                 "chalk": {
@@ -5216,9 +5216,9 @@
                     "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
                     "dev": true,
                     "requires": {
-                        "ansi-styles": "3.2.1",
-                        "escape-string-regexp": "1.0.5",
-                        "supports-color": "5.5.0"
+                        "ansi-styles": "^3.2.1",
+                        "escape-string-regexp": "^1.0.5",
+                        "supports-color": "^5.3.0"
                     }
                 },
                 "supports-color": {
@@ -5227,7 +5227,7 @@
                     "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
                     "dev": true,
                     "requires": {
-                        "has-flag": "3.0.0"
+                        "has-flag": "^3.0.0"
                     }
                 }
             }
@@ -5358,8 +5358,8 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "delegates": "1.0.0",
-                        "readable-stream": "2.3.6"
+                        "delegates": "^1.0.0",
+                        "readable-stream": "^2.0.6"
                     }
                 },
                 "balanced-match": {
@@ -5372,7 +5372,7 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "balanced-match": "1.0.0",
+                        "balanced-match": "^1.0.0",
                         "concat-map": "0.0.1"
                     }
                 },
@@ -5406,7 +5406,7 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "ms": "2.1.2"
+                        "ms": "^2.1.1"
                     }
                 },
                 "deep-extend": {
@@ -5442,14 +5442,14 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "aproba": "1.2.0",
-                        "console-control-strings": "1.1.0",
-                        "has-unicode": "2.0.1",
-                        "object-assign": "4.1.1",
-                        "signal-exit": "3.0.2",
-                        "string-width": "1.0.2",
-                        "strip-ansi": "3.0.1",
-                        "wide-align": "1.1.3"
+                        "aproba": "^1.0.3",
+                        "console-control-strings": "^1.0.0",
+                        "has-unicode": "^2.0.0",
+                        "object-assign": "^4.1.0",
+                        "signal-exit": "^3.0.0",
+                        "string-width": "^1.0.1",
+                        "strip-ansi": "^3.0.1",
+                        "wide-align": "^1.1.0"
                     }
                 },
                 "glob": {
@@ -5457,12 +5457,12 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "fs.realpath": "1.0.0",
-                        "inflight": "1.0.6",
-                        "inherits": "2.0.4",
-                        "minimatch": "3.0.4",
-                        "once": "1.4.0",
-                        "path-is-absolute": "1.0.1"
+                        "fs.realpath": "^1.0.0",
+                        "inflight": "^1.0.4",
+                        "inherits": "2",
+                        "minimatch": "^3.0.4",
+                        "once": "^1.3.0",
+                        "path-is-absolute": "^1.0.0"
                     }
                 },
                 "has-unicode": {
@@ -5475,7 +5475,7 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "safer-buffer": "2.1.2"
+                        "safer-buffer": ">= 2.1.2 < 3"
                     }
                 },
                 "ignore-walk": {
@@ -5483,7 +5483,7 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "minimatch": "3.0.4"
+                        "minimatch": "^3.0.4"
                     }
                 },
                 "inflight": {
@@ -5491,8 +5491,8 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "once": "1.4.0",
-                        "wrappy": "1.0.2"
+                        "once": "^1.3.0",
+                        "wrappy": "1"
                     }
                 },
                 "inherits": {
@@ -5510,7 +5510,7 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "number-is-nan": "1.0.1"
+                        "number-is-nan": "^1.0.0"
                     }
                 },
                 "isarray": {
@@ -5523,7 +5523,7 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "brace-expansion": "1.1.11"
+                        "brace-expansion": "^1.1.7"
                     }
                 },
                 "minimist": {
@@ -5566,9 +5566,9 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "debug": "3.2.6",
-                        "iconv-lite": "0.4.24",
-                        "sax": "1.2.4"
+                        "debug": "^3.2.6",
+                        "iconv-lite": "^0.4.4",
+                        "sax": "^1.2.4"
                     }
                 },
                 "node-pre-gyp": {
@@ -5593,8 +5593,8 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "abbrev": "1.1.1",
-                        "osenv": "0.1.5"
+                        "abbrev": "1",
+                        "osenv": "^0.1.4"
                     }
                 },
                 "npm-bundled": {
@@ -5602,7 +5602,7 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "npm-normalize-package-bin": "1.0.1"
+                        "npm-normalize-package-bin": "^1.0.1"
                     }
                 },
                 "npm-normalize-package-bin": {
@@ -5615,8 +5615,8 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "ignore-walk": "3.0.3",
-                        "npm-bundled": "1.1.1"
+                        "ignore-walk": "^3.0.1",
+                        "npm-bundled": "^1.0.1"
                     }
                 },
                 "npmlog": {
@@ -5624,10 +5624,10 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "are-we-there-yet": "1.1.5",
-                        "console-control-strings": "1.1.0",
-                        "gauge": "2.7.4",
-                        "set-blocking": "2.0.0"
+                        "are-we-there-yet": "~1.1.2",
+                        "console-control-strings": "~1.1.0",
+                        "gauge": "~2.7.3",
+                        "set-blocking": "~2.0.0"
                     }
                 },
                 "number-is-nan": {
@@ -5645,7 +5645,7 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "wrappy": "1.0.2"
+                        "wrappy": "1"
                     }
                 },
                 "os-homedir": {
@@ -5663,8 +5663,8 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "os-homedir": "1.0.2",
-                        "os-tmpdir": "1.0.2"
+                        "os-homedir": "^1.0.0",
+                        "os-tmpdir": "^1.0.0"
                     }
                 },
                 "path-is-absolute": {
@@ -5682,10 +5682,10 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "deep-extend": "0.6.0",
-                        "ini": "1.3.5",
-                        "minimist": "1.2.0",
-                        "strip-json-comments": "2.0.1"
+                        "deep-extend": "^0.6.0",
+                        "ini": "~1.3.0",
+                        "minimist": "^1.2.0",
+                        "strip-json-comments": "~2.0.1"
                     },
                     "dependencies": {
                         "minimist": {
@@ -5700,13 +5700,13 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "core-util-is": "1.0.2",
-                        "inherits": "2.0.4",
-                        "isarray": "1.0.0",
-                        "process-nextick-args": "2.0.1",
-                        "safe-buffer": "5.1.2",
-                        "string_decoder": "1.1.1",
-                        "util-deprecate": "1.0.2"
+                        "core-util-is": "~1.0.0",
+                        "inherits": "~2.0.3",
+                        "isarray": "~1.0.0",
+                        "process-nextick-args": "~2.0.0",
+                        "safe-buffer": "~5.1.1",
+                        "string_decoder": "~1.1.1",
+                        "util-deprecate": "~1.0.1"
                     }
                 },
                 "rimraf": {
@@ -5714,7 +5714,7 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "glob": "7.1.6"
+                        "glob": "^7.1.3"
                     }
                 },
                 "safe-buffer": {
@@ -5752,9 +5752,9 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "code-point-at": "1.1.0",
-                        "is-fullwidth-code-point": "1.0.0",
-                        "strip-ansi": "3.0.1"
+                        "code-point-at": "^1.0.0",
+                        "is-fullwidth-code-point": "^1.0.0",
+                        "strip-ansi": "^3.0.0"
                     }
                 },
                 "string_decoder": {
@@ -5762,7 +5762,7 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "safe-buffer": "5.1.2"
+                        "safe-buffer": "~5.1.0"
                     }
                 },
                 "strip-ansi": {
@@ -5770,7 +5770,7 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "ansi-regex": "2.1.1"
+                        "ansi-regex": "^2.0.0"
                     }
                 },
                 "strip-json-comments": {
@@ -5802,7 +5802,7 @@
                     "bundled": true,
                     "optional": true,
                     "requires": {
-                        "string-width": "1.0.2"
+                        "string-width": "^1.0.2 || 2"
                     }
                 },
                 "wrappy": {
@@ -7324,9 +7324,9 @@
                     "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
                     "dev": true,
                     "requires": {
-                        "ip-regex": "2.1.0",
-                        "psl": "1.2.0",
-                        "punycode": "2.1.1"
+                        "ip-regex": "^2.1.0",
+                        "psl": "^1.1.28",
+                        "punycode": "^2.1.1"
                     }
                 }
             }
@@ -8704,7 +8704,7 @@
                     "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
                     "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
                     "requires": {
-                        "ms": "2.1.2"
+                        "ms": "^2.1.1"
                     }
                 },
                 "ms": {
@@ -8722,7 +8722,7 @@
                     "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
                     "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
                     "requires": {
-                        "has-flag": "3.0.0"
+                        "has-flag": "^3.0.0"
                     }
                 }
             }
@@ -12535,7 +12535,7 @@
                     "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
                     "dev": true,
                     "requires": {
-                        "color-convert": "1.9.3"
+                        "color-convert": "^1.9.0"
                     }
                 },
                 "chalk": {
@@ -12544,9 +12544,9 @@
                     "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
                     "dev": true,
                     "requires": {
-                        "ansi-styles": "3.2.1",
-                        "escape-string-regexp": "1.0.5",
-                        "supports-color": "5.5.0"
+                        "ansi-styles": "^3.2.1",
+                        "escape-string-regexp": "^1.0.5",
+                        "supports-color": "^5.3.0"
                     },
                     "dependencies": {
                         "supports-color": {
@@ -12555,7 +12555,7 @@
                             "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
                             "dev": true,
                             "requires": {
-                                "has-flag": "3.0.0"
+                                "has-flag": "^3.0.0"
                             }
                         }
                     }
@@ -12572,7 +12572,7 @@
                     "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
                     "dev": true,
                     "requires": {
-                        "has-flag": "3.0.0"
+                        "has-flag": "^3.0.0"
                     }
                 }
             }
@@ -13406,7 +13406,7 @@
                     "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
                     "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
                     "requires": {
-                        "loose-envify": "1.4.0"
+                        "loose-envify": "^1.0.0"
                     }
                 }
             }
@@ -13599,7 +13599,7 @@
                     "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
                     "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
                     "requires": {
-                        "loose-envify": "1.4.0"
+                        "loose-envify": "^1.0.0"
                     }
                 }
             }
@@ -15054,7 +15054,7 @@
                     "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
                     "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
                     "requires": {
-                        "ms": "2.1.2"
+                        "ms": "^2.1.1"
                     }
                 },
                 "ms": {
@@ -15205,7 +15205,7 @@
                     "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
                     "dev": true,
                     "requires": {
-                        "ms": "2.1.2"
+                        "ms": "^2.1.1"
                     }
                 },
                 "faye-websocket": {
@@ -15344,7 +15344,7 @@
                     "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
                     "dev": true,
                     "requires": {
-                        "ms": "2.1.2"
+                        "ms": "^2.1.1"
                     }
                 },
                 "ms": {
@@ -15838,9 +15838,9 @@
                     "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
                     "dev": true,
                     "requires": {
-                        "commondir": "1.0.1",
-                        "make-dir": "2.1.0",
-                        "pkg-dir": "3.0.0"
+                        "commondir": "^1.0.1",
+                        "make-dir": "^2.0.0",
+                        "pkg-dir": "^3.0.0"
                     }
                 },
                 "find-up": {
@@ -15849,7 +15849,7 @@
                     "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
                     "dev": true,
                     "requires": {
-                        "locate-path": "3.0.0"
+                        "locate-path": "^3.0.0"
                     }
                 },
                 "locate-path": {
@@ -15858,8 +15858,8 @@
                     "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
                     "dev": true,
                     "requires": {
-                        "p-locate": "3.0.0",
-                        "path-exists": "3.0.0"
+                        "p-locate": "^3.0.0",
+                        "path-exists": "^3.0.0"
                     }
                 },
                 "lru-cache": {
@@ -15868,7 +15868,7 @@
                     "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
                     "dev": true,
                     "requires": {
-                        "yallist": "3.0.3"
+                        "yallist": "^3.0.2"
                     }
                 },
                 "make-dir": {
@@ -15877,8 +15877,8 @@
                     "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
                     "dev": true,
                     "requires": {
-                        "pify": "4.0.1",
-                        "semver": "5.7.0"
+                        "pify": "^4.0.1",
+                        "semver": "^5.6.0"
                     }
                 },
                 "mississippi": {
@@ -15887,16 +15887,16 @@
                     "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
                     "dev": true,
                     "requires": {
-                        "concat-stream": "1.6.2",
-                        "duplexify": "3.7.1",
-                        "end-of-stream": "1.4.1",
-                        "flush-write-stream": "1.1.1",
-                        "from2": "2.3.0",
-                        "parallel-transform": "1.1.0",
-                        "pump": "3.0.0",
-                        "pumpify": "1.5.1",
-                        "stream-each": "1.2.3",
-                        "through2": "2.0.5"
+                        "concat-stream": "^1.5.0",
+                        "duplexify": "^3.4.2",
+                        "end-of-stream": "^1.1.0",
+                        "flush-write-stream": "^1.0.0",
+                        "from2": "^2.1.0",
+                        "parallel-transform": "^1.1.0",
+                        "pump": "^3.0.0",
+                        "pumpify": "^1.3.3",
+                        "stream-each": "^1.1.0",
+                        "through2": "^2.0.0"
                     }
                 },
                 "p-locate": {
@@ -15905,7 +15905,7 @@
                     "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
                     "dev": true,
                     "requires": {
-                        "p-limit": "2.2.2"
+                        "p-limit": "^2.0.0"
                     }
                 },
                 "pify": {
@@ -15920,7 +15920,7 @@
                     "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
                     "dev": true,
                     "requires": {
-                        "find-up": "3.0.0"
+                        "find-up": "^3.0.0"
                     }
                 },
                 "pump": {
@@ -15929,8 +15929,8 @@
                     "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
                     "dev": true,
                     "requires": {
-                        "end-of-stream": "1.4.1",
-                        "once": "1.4.0"
+                        "end-of-stream": "^1.1.0",
+                        "once": "^1.3.1"
                     }
                 },
                 "rimraf": {
@@ -15971,7 +15971,7 @@
                     "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
                     "dev": true,
                     "requires": {
-                        "figgy-pudding": "3.5.1"
+                        "figgy-pudding": "^3.5.1"
                     }
                 },
                 "y18n": {
@@ -16268,7 +16268,7 @@
                     "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
                     "dev": true,
                     "requires": {
-                        "glob": "7.1.4"
+                        "glob": "^7.1.3"
                     }
                 }
             }
@@ -16326,7 +16326,7 @@
                     "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
                     "dev": true,
                     "requires": {
-                        "color-convert": "1.9.3"
+                        "color-convert": "^1.9.0"
                     }
                 },
                 "chalk": {
@@ -16335,9 +16335,9 @@
                     "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
                     "dev": true,
                     "requires": {
-                        "ansi-styles": "3.2.1",
-                        "escape-string-regexp": "1.0.5",
-                        "supports-color": "5.5.0"
+                        "ansi-styles": "^3.2.1",
+                        "escape-string-regexp": "^1.0.5",
+                        "supports-color": "^5.3.0"
                     }
                 },
                 "diff": {
@@ -16352,7 +16352,7 @@
                     "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
                     "dev": true,
                     "requires": {
-                        "has-flag": "3.0.0"
+                        "has-flag": "^3.0.0"
                     }
                 }
             }
@@ -16989,7 +16989,7 @@
                     "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
                     "dev": true,
                     "requires": {
-                        "color-convert": "1.9.3"
+                        "color-convert": "^1.9.0"
                     }
                 },
                 "camelcase": {
@@ -17004,9 +17004,9 @@
                     "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
                     "dev": true,
                     "requires": {
-                        "ansi-styles": "3.2.1",
-                        "escape-string-regexp": "1.0.5",
-                        "supports-color": "5.5.0"
+                        "ansi-styles": "^3.2.1",
+                        "escape-string-regexp": "^1.0.5",
+                        "supports-color": "^5.3.0"
                     },
                     "dependencies": {
                         "supports-color": {
@@ -17037,13 +17037,13 @@
                     "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
                     "dev": true,
                     "requires": {
-                        "cross-spawn": "6.0.5",
-                        "get-stream": "4.1.0",
-                        "is-stream": "1.1.0",
-                        "npm-run-path": "2.0.2",
-                        "p-finally": "1.0.0",
-                        "signal-exit": "3.0.2",
-                        "strip-eof": "1.0.0"
+                        "cross-spawn": "^6.0.0",
+                        "get-stream": "^4.0.0",
+                        "is-stream": "^1.1.0",
+                        "npm-run-path": "^2.0.0",
+                        "p-finally": "^1.0.0",
+                        "signal-exit": "^3.0.0",
+                        "strip-eof": "^1.0.0"
                     }
                 },
                 "find-up": {
@@ -17052,7 +17052,7 @@
                     "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
                     "dev": true,
                     "requires": {
-                        "locate-path": "3.0.0"
+                        "locate-path": "^3.0.0"
                     }
                 },
                 "get-caller-file": {
@@ -17067,7 +17067,7 @@
                     "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
                     "dev": true,
                     "requires": {
-                        "pump": "3.0.0"
+                        "pump": "^3.0.0"
                     }
                 },
                 "invert-kv": {
@@ -17088,7 +17088,7 @@
                     "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
                     "dev": true,
                     "requires": {
-                        "invert-kv": "2.0.0"
+                        "invert-kv": "^2.0.0"
                     }
                 },
                 "locate-path": {
@@ -17097,8 +17097,8 @@
                     "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
                     "dev": true,
                     "requires": {
-                        "p-locate": "3.0.0",
-                        "path-exists": "3.0.0"
+                        "p-locate": "^3.0.0",
+                        "path-exists": "^3.0.0"
                     }
                 },
                 "os-locale": {
@@ -17107,9 +17107,9 @@
                     "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
                     "dev": true,
                     "requires": {
-                        "execa": "1.0.0",
-                        "lcid": "2.0.0",
-                        "mem": "4.3.0"
+                        "execa": "^1.0.0",
+                        "lcid": "^2.0.0",
+                        "mem": "^4.0.0"
                     }
                 },
                 "p-locate": {
@@ -17118,7 +17118,7 @@
                     "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
                     "dev": true,
                     "requires": {
-                        "p-limit": "2.2.2"
+                        "p-limit": "^2.0.0"
                     }
                 },
                 "pump": {
@@ -17127,8 +17127,8 @@
                     "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
                     "dev": true,
                     "requires": {
-                        "end-of-stream": "1.4.1",
-                        "once": "1.4.0"
+                        "end-of-stream": "^1.1.0",
+                        "once": "^1.3.1"
                     }
                 },
                 "require-main-filename": {
@@ -17245,8 +17245,8 @@
                     "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
                     "dev": true,
                     "requires": {
-                        "ansi-colors": "3.2.4",
-                        "uuid": "3.3.3"
+                        "ansi-colors": "^3.0.0",
+                        "uuid": "^3.3.2"
                     }
                 }
             }
@@ -17310,9 +17310,9 @@
                     "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
                     "dev": true,
                     "requires": {
-                        "string-width": "2.1.1",
-                        "strip-ansi": "4.0.0",
-                        "wrap-ansi": "2.1.0"
+                        "string-width": "^2.1.1",
+                        "strip-ansi": "^4.0.0",
+                        "wrap-ansi": "^2.0.0"
                     },
                     "dependencies": {
                         "strip-ansi": {
@@ -17321,7 +17321,7 @@
                             "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
                             "dev": true,
                             "requires": {
-                                "ansi-regex": "3.0.0"
+                                "ansi-regex": "^3.0.0"
                             }
                         }
                     }
@@ -17332,7 +17332,7 @@
                     "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
                     "dev": true,
                     "requires": {
-                        "ms": "2.1.2"
+                        "ms": "^2.1.1"
                     }
                 },
                 "execa": {
@@ -17341,13 +17341,13 @@
                     "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
                     "dev": true,
                     "requires": {
-                        "cross-spawn": "6.0.5",
-                        "get-stream": "4.1.0",
-                        "is-stream": "1.1.0",
-                        "npm-run-path": "2.0.2",
-                        "p-finally": "1.0.0",
-                        "signal-exit": "3.0.2",
-                        "strip-eof": "1.0.0"
+                        "cross-spawn": "^6.0.0",
+                        "get-stream": "^4.0.0",
+                        "is-stream": "^1.1.0",
+                        "npm-run-path": "^2.0.0",
+                        "p-finally": "^1.0.0",
+                        "signal-exit": "^3.0.0",
+                        "strip-eof": "^1.0.0"
                     }
                 },
                 "find-up": {
@@ -17356,7 +17356,7 @@
                     "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
                     "dev": true,
                     "requires": {
-                        "locate-path": "3.0.0"
+                        "locate-path": "^3.0.0"
                     }
                 },
                 "get-stream": {
@@ -17365,7 +17365,7 @@
                     "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
                     "dev": true,
                     "requires": {
-                        "pump": "3.0.0"
+                        "pump": "^3.0.0"
                     }
                 },
                 "invert-kv": {
@@ -17386,7 +17386,7 @@
                     "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
                     "dev": true,
                     "requires": {
-                        "invert-kv": "2.0.0"
+                        "invert-kv": "^2.0.0"
                     }
                 },
                 "locate-path": {
@@ -17395,8 +17395,8 @@
                     "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
                     "dev": true,
                     "requires": {
-                        "p-locate": "3.0.0",
-                        "path-exists": "3.0.0"
+                        "p-locate": "^3.0.0",
+                        "path-exists": "^3.0.0"
                     }
                 },
                 "loglevel": {
@@ -17417,9 +17417,9 @@
                     "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
                     "dev": true,
                     "requires": {
-                        "execa": "1.0.0",
-                        "lcid": "2.0.0",
-                        "mem": "4.3.0"
+                        "execa": "^1.0.0",
+                        "lcid": "^2.0.0",
+                        "mem": "^4.0.0"
                     }
                 },
                 "p-locate": {
@@ -17428,7 +17428,7 @@
                     "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
                     "dev": true,
                     "requires": {
-                        "p-limit": "2.2.2"
+                        "p-limit": "^2.0.0"
                     }
                 },
                 "pump": {
@@ -17437,8 +17437,8 @@
                     "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
                     "dev": true,
                     "requires": {
-                        "end-of-stream": "1.4.1",
-                        "once": "1.4.0"
+                        "end-of-stream": "^1.1.0",
+                        "once": "^1.3.1"
                     }
                 },
                 "schema-utils": {
@@ -17464,8 +17464,8 @@
                     "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
                     "dev": true,
                     "requires": {
-                        "is-fullwidth-code-point": "2.0.0",
-                        "strip-ansi": "4.0.0"
+                        "is-fullwidth-code-point": "^2.0.0",
+                        "strip-ansi": "^4.0.0"
                     },
                     "dependencies": {
                         "strip-ansi": {
@@ -17474,7 +17474,7 @@
                             "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
                             "dev": true,
                             "requires": {
-                                "ansi-regex": "3.0.0"
+                                "ansi-regex": "^3.0.0"
                             }
                         }
                     }
@@ -17485,7 +17485,7 @@
                     "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
                     "dev": true,
                     "requires": {
-                        "has-flag": "3.0.0"
+                        "has-flag": "^3.0.0"
                     }
                 },
                 "webpack-log": {
@@ -17494,8 +17494,8 @@
                     "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
                     "dev": true,
                     "requires": {
-                        "ansi-colors": "3.2.4",
-                        "uuid": "3.3.3"
+                        "ansi-colors": "^3.0.0",
+                        "uuid": "^3.3.2"
                     }
                 },
                 "which-module": {
@@ -17519,18 +17519,18 @@
                     "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
                     "dev": true,
                     "requires": {
-                        "cliui": "4.1.0",
-                        "decamelize": "1.2.0",
-                        "find-up": "3.0.0",
-                        "get-caller-file": "1.0.3",
-                        "os-locale": "3.1.0",
-                        "require-directory": "2.1.1",
-                        "require-main-filename": "1.0.1",
-                        "set-blocking": "2.0.0",
-                        "string-width": "2.1.1",
-                        "which-module": "2.0.0",
-                        "y18n": "3.2.1",
-                        "yargs-parser": "11.1.1"
+                        "cliui": "^4.0.0",
+                        "decamelize": "^1.2.0",
+                        "find-up": "^3.0.0",
+                        "get-caller-file": "^1.0.1",
+                        "os-locale": "^3.0.0",
+                        "require-directory": "^2.1.1",
+                        "require-main-filename": "^1.0.1",
+                        "set-blocking": "^2.0.0",
+                        "string-width": "^2.0.0",
+                        "which-module": "^2.0.0",
+                        "y18n": "^3.2.1 || ^4.0.0",
+                        "yargs-parser": "^11.1.1"
                     }
                 },
                 "yargs-parser": {
@@ -17539,8 +17539,8 @@
                     "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
                     "dev": true,
                     "requires": {
-                        "camelcase": "5.3.1",
-                        "decamelize": "1.2.0"
+                        "camelcase": "^5.0.0",
+                        "decamelize": "^1.2.0"
                     }
                 }
             }
@@ -18156,9 +18156,9 @@
                     "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
                     "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
                     "requires": {
-                        "inherits": "2.0.3",
-                        "string_decoder": "1.1.1",
-                        "util-deprecate": "1.0.2"
+                        "inherits": "^2.0.3",
+                        "string_decoder": "^1.1.1",
+                        "util-deprecate": "^1.0.1"
                     }
                 }
             }
diff --git a/src/client/util/SettingsManager.scss b/src/client/util/SettingsManager.scss
index 9b6a2ccae..0b5cbe74f 100644
--- a/src/client/util/SettingsManager.scss
+++ b/src/client/util/SettingsManager.scss
@@ -4,7 +4,7 @@
     background-color: whitesmoke !important;
     color: grey;
     width: 400px;
-    height: 300px;
+    height: 250px;
 
     button {
         background: $lighter-alt-accent;
@@ -27,9 +27,10 @@
     flex-direction: column;
 
     button {
-        width: 100px;
+        width: 100%;
         align-self: center;
         background: $darker-alt-accent;
+        margin-top: 4px;
     }
 
     .delete-button {
@@ -42,14 +43,11 @@
         top: 1em;
     }
 
-
-    input {
-        border-radius: 5px;
-        border: none;
-        padding: 4px 4px 4px 10px;
-        margin: 2px;
+    .settings-heading {
+        letter-spacing: .5em;
     }
 
+
     .settings-body {
         display: flex;
         justify-content: space-between;
@@ -66,15 +64,20 @@
             padding-right: 1em;
             display: flex;
             flex-direction: column;
+            flex-basis: 65%;
             justify-content: space-around;
-            // text-align: left;
+            text-align: left;
 
             ::placeholder {
                 color: $intermediate-color;
             }
 
             input {
+                border-radius: 5px;
+                border: none;
+                padding: 4px;
                 min-width: 100%;
+                margin: 2px 0;
             }
 
             .error-text {
@@ -84,6 +87,11 @@
             .success-text {
                 color: #009F6B;
             }
+
+            p {
+                padding: 0 0 .1em .2em;
+            }
+
         }
     }
 
@@ -91,12 +99,6 @@
         text-decoration: underline;
     }
 
-    p {
-        text-align: left;
-        padding: 0;
-        margin: 0 0 20px 0;
-    }
-
     h1 {
         color: $dark-color;
         text-transform: uppercase;
diff --git a/src/client/util/SettingsManager.tsx b/src/client/util/SettingsManager.tsx
index 6f852a3e6..e1fbeb138 100644
--- a/src/client/util/SettingsManager.tsx
+++ b/src/client/util/SettingsManager.tsx
@@ -91,19 +91,20 @@ export default class SettingsManager extends React.Component<{}> {
                     </div>
                     {this.settingsContent === "password" ?
                         <div className="settings-content">
-                            change password here:
                             <input placeholder="current password" ref={this.curr_password_ref} />
                             <input placeholder="new password" ref={this.new_password_ref} />
                             <input placeholder="confirm new password" ref={this.new_confirm_ref} />
+                            <button onClick={this.dispatchRequest}>submit</button>
+                            <a href="/forgotPassword">forgot password?</a>
                             {this.errorText ? <div className="error-text">{this.errorText}</div> : undefined}
                             {this.successText ? <div className="success-text">{this.successText}</div> : undefined}
-                            <button onClick={this.dispatchRequest}>submit</button> <a href="/forgotPassword">forgot password?</a>
+
                         </div>
                         : undefined}
                     {this.settingsContent === "data" ?
                         <div className="settings-content">
-                            WARNING: <br />
-                            THIS WILL ERASE ALL YOUR CURRENT DOCUMENTS STORED ON DASH. IF YOU WISH TO PROCEED, CLICK THE BUTTON BELOW.
+                            <p>WARNING: <br />
+                                THIS WILL ERASE ALL YOUR CURRENT DOCUMENTS STORED ON DASH. IF YOU WISH TO PROCEED, CLICK THE BUTTON BELOW.</p>
                             <button className="delete-button">DELETE</button>
                         </div>
                         : undefined}
-- 
cgit v1.2.3-70-g09d2


From 19f525d244d1619f8456b8a455bc2043cf9dbe21 Mon Sep 17 00:00:00 2001
From: kimdahey <claire_kim1@brown.edu>
Date: Fri, 17 Jan 2020 15:10:31 -0500
Subject: minor visual changes

---
 src/client/util/SettingsManager.scss | 6 +++---
 src/client/util/SettingsManager.tsx  | 6 ++++--
 2 files changed, 7 insertions(+), 5 deletions(-)

(limited to 'src/client/util/SettingsManager.tsx')

diff --git a/src/client/util/SettingsManager.scss b/src/client/util/SettingsManager.scss
index 0b5cbe74f..7a0fb0741 100644
--- a/src/client/util/SettingsManager.scss
+++ b/src/client/util/SettingsManager.scss
@@ -3,8 +3,8 @@
 .dialogue-box {
     background-color: whitesmoke !important;
     color: grey;
-    width: 400px;
-    height: 250px;
+    width: 450px;
+    height: 300px;
 
     button {
         background: $lighter-alt-accent;
@@ -64,7 +64,7 @@
             padding-right: 1em;
             display: flex;
             flex-direction: column;
-            flex-basis: 65%;
+            flex-basis: 70%;
             justify-content: space-around;
             text-align: left;
 
diff --git a/src/client/util/SettingsManager.tsx b/src/client/util/SettingsManager.tsx
index e1fbeb138..ff0b22381 100644
--- a/src/client/util/SettingsManager.tsx
+++ b/src/client/util/SettingsManager.tsx
@@ -73,6 +73,8 @@ export default class SettingsManager extends React.Component<{}> {
     @action
     onClick = (event: any) => {
         this.settingsContent = event.currentTarget.value;
+        this.errorText = "";
+        this.successText = "";
     }
 
     private get settingsInterface() {
@@ -94,10 +96,10 @@ export default class SettingsManager extends React.Component<{}> {
                             <input placeholder="current password" ref={this.curr_password_ref} />
                             <input placeholder="new password" ref={this.new_password_ref} />
                             <input placeholder="confirm new password" ref={this.new_confirm_ref} />
-                            <button onClick={this.dispatchRequest}>submit</button>
-                            <a href="/forgotPassword">forgot password?</a>
                             {this.errorText ? <div className="error-text">{this.errorText}</div> : undefined}
                             {this.successText ? <div className="success-text">{this.successText}</div> : undefined}
+                            <button onClick={this.dispatchRequest}>submit</button>
+                            <a href="/forgotPassword">forgot password?</a>
 
                         </div>
                         : undefined}
-- 
cgit v1.2.3-70-g09d2

