diff --git a/src/components/menu-bar/community-button.css b/src/components/menu-bar/community-button.css
index 9facb4bc458..9f72924fb8f 100644
--- a/src/components/menu-bar/community-button.css
+++ b/src/components/menu-bar/community-button.css
@@ -2,6 +2,7 @@
.community-button {
box-shadow: 0 0 0 1px $ui-black-transparent;
+ color: $text-menubar;
}
.community-button-icon {
diff --git a/src/components/menu-bar/community-button.jsx b/src/components/menu-bar/community-button.jsx
index 62bf22e40b7..af070490afc 100644
--- a/src/components/menu-bar/community-button.jsx
+++ b/src/components/menu-bar/community-button.jsx
@@ -16,15 +16,21 @@ const CommunityButton = ({
className,
styles.communityButton
)}
- iconClassName={styles.communityButtonIcon}
- iconSrc={communityIcon}
onClick={onClick}
>
-
+
+
+
+
);
diff --git a/src/components/menu-bar/icon--high-contrast.svg b/src/components/menu-bar/icon--high-contrast.svg
new file mode 100644
index 00000000000..3898770b3f3
--- /dev/null
+++ b/src/components/menu-bar/icon--high-contrast.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/components/menu-bar/menu-bar.css b/src/components/menu-bar/menu-bar.css
index 843ed74bfd3..080bfdc8c99 100644
--- a/src/components/menu-bar/menu-bar.css
+++ b/src/components/menu-bar/menu-bar.css
@@ -28,7 +28,7 @@
font-size: $menu-bar-standard-font-size;
font-weight: bold;
background-color: $motion-primary;
- color: $ui-white;
+ color: $text-menubar;
}
[theme="dark"] .menu-bar {
background-color: $motion-primary-dark;
@@ -54,6 +54,7 @@
.language-icon {
height: 1.5rem;
+ color: $text-menubar;
vertical-align: middle;
}
@@ -71,7 +72,7 @@
display: flex;
padding: 0 0.25rem;
text-decoration: none;
- color: $ui-white;
+ color: $text-menubar;
user-select: none;
align-self: center;
position: relative;
@@ -116,6 +117,7 @@
.menu-bar-menu {
margin-top: $menu-bar-height;
z-index: $z-index-menu-bar;
+ color: $text-menubar;
}
.feedback-link {
@@ -143,6 +145,7 @@
.menu-bar-button {
height: $menu-bar-button-size;
+ color: $text-menubar;
}
.remix-button {
diff --git a/src/components/menu-bar/menu-bar.jsx b/src/components/menu-bar/menu-bar.jsx
index 7c8d216a1c0..1985ad0d687 100644
--- a/src/components/menu-bar/menu-bar.jsx
+++ b/src/components/menu-bar/menu-bar.jsx
@@ -63,7 +63,10 @@ import {
languageMenuOpen,
openLoginMenu,
closeLoginMenu,
- loginMenuOpen
+ loginMenuOpen,
+ openAppearanceMenu,
+ closeAppearanceMenu,
+ appearanceMenuOpen
} from '../../reducers/menus';
import { setFileHandle } from '../../reducers/tw.js';
@@ -72,6 +75,7 @@ import collectMetadata from '../../lib/collect-metadata';
import styles from './menu-bar.css';
import remixIcon from './icon--remix.svg';
+import highContrastIcon from './icon--high-contrast.svg';
import dropdownCaret from './dropdown-caret.svg';
import languageIcon from '../language-selector/language-icon.svg';
import aboutIcon from './icon--about.svg';
@@ -197,6 +201,10 @@ MenuItemLink.propTypes = {
class MenuBar extends React.Component {
constructor(props) {
super(props);
+ this.state = {
+ highContrast: false,
+ darkMode: false
+ };
bindAll(this, [
'handleClickSeeInside',
'handleClickNew',
@@ -213,9 +221,47 @@ class MenuBar extends React.Component {
'handleLanguageMouseUp',
'handleRestoreOption',
'getSaveToComputerHandler',
- 'restoreOptionMessage'
+ 'restoreOptionMessage',
+ 'handleToggleDarkModeNew',
+ 'handleToggleHighContrast',
+ 'handleClickTheme'
]);
}
+
+ handleToggleHighContrast() {
+ this.setState(prevState => {
+ // wcag high contrast mode
+ const isHighContrast = !prevState.highContrast;
+
+ if (isHighContrast) {
+ document.documentElement.setAttribute('data-theme', 'high-contrast');
+ document.body.style.setProperty('--text-menubar', '#000000');
+ window.isHighContrast = true;
+ } else {
+ document.documentElement.removeAttribute('data-theme');
+ document.body.style.setProperty('--text-menubar', '#FFFFFF');
+ window.isHighContrast = false;
+ }
+
+ return { highContrast: isHighContrast };
+ });
+}
+
+ handleToggleDarkModeNew() {
+ this.setState(prevState => {
+ // testing stub
+ const isDarkMode = !prevState.darkMode;
+
+ if (isDarkMode) {
+ document.documentElement.setAttribute('data-theme', 'dark')
+ } else {
+ document.documentElement.removeAttribute('data-theme');
+ }
+
+ return { darkMode: isDarkMode };
+ });
+}
+
componentDidMount() {
document.addEventListener('keydown', this.handleKeyPress);
}
@@ -340,6 +386,12 @@ class MenuBar extends React.Component {
}
}
+ handleClickTheme () {
+ this.setState(state => ({
+ dark: !state.dark
+ }));
+ }
+
restoreOptionMessage(deletedItem) {
switch (deletedItem) {
case 'Sprite':
@@ -492,19 +544,22 @@ class MenuBar extends React.Component {
) : null}
{(this.props.canChangeLanguage) && (
-
+
@@ -514,12 +569,14 @@ class MenuBar extends React.Component {
)}
@@ -576,6 +633,52 @@ class MenuBar extends React.Component {
}
+
+
+
+
+
+ {/*
+
+ */}
+
+
+
+
{(this.props.canManageFiles) && (
) : null} */}
{this.props.canEditTitle ? (
-
+
@@ -944,14 +1049,18 @@ class MenuBar extends React.Component {
/>)
: (null)}
-
+
-