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} > - + + See Project Page + + ); 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)}
-
+
-