From 097bae6d80577652a682799eed3f0665ce437834 Mon Sep 17 00:00:00 2001 From: Ray Schamp <ray@scratch.mit.edu> Date: Tue, 27 Mar 2018 19:31:59 -0400 Subject: [PATCH] WIP: Most of menubar --- src/components/button/button.css | 11 ++ src/components/button/button.jsx | 17 ++- .../language-selector/dropdown-caret.svg | Bin 0 -> 904 bytes .../language-selector/language-icon.svg | Bin 1898 -> 1881 bytes .../language-selector/language-selector.css | 7 +- .../language-selector/language-selector.jsx | 33 +++-- src/components/menu-bar/icon--mystuff.png | Bin 0 -> 1464 bytes src/components/menu-bar/icon--profile.png | Bin 0 -> 5213 bytes .../menu-bar/icon--see-community.svg | Bin 0 -> 2190 bytes src/components/menu-bar/menu-bar.css | 67 +++++---- src/components/menu-bar/menu-bar.jsx | 127 +++++++++++++++--- src/css/colors.css | 4 + 12 files changed, 205 insertions(+), 61 deletions(-) create mode 100644 src/components/language-selector/dropdown-caret.svg create mode 100644 src/components/menu-bar/icon--mystuff.png create mode 100644 src/components/menu-bar/icon--profile.png create mode 100644 src/components/menu-bar/icon--see-community.svg diff --git a/src/components/button/button.css b/src/components/button/button.css index 44243650f..1062748fe 100644 --- a/src/components/button/button.css +++ b/src/components/button/button.css @@ -1,3 +1,14 @@ .button { cursor: pointer; + border-radius: 4px; + padding: .75rem; + font-weight: bold; + border: 1px solid rgba(0,0,0,.1); +} + +.icon { + margin-right: .5rem; + width: 1.5rem; + height: 1.5rem; + vertical-align: middle; } diff --git a/src/components/button/button.jsx b/src/components/button/button.jsx index 59b39668f..a85e8e6ab 100644 --- a/src/components/button/button.jsx +++ b/src/components/button/button.jsx @@ -6,14 +6,26 @@ import styles from './button.css'; const ButtonComponent = ({ className, + disabled, + iconClassName, + iconSrc, onClick, children, ...props }) => { - if (props.disabled === true) { + + if (disabled) { onClick = function () {}; } + const icon = iconSrc && ( + <img + className={classNames(iconClassName, styles.icon)} + draggable={false} + src={iconSrc} + /> + ); + return ( <span className={classNames( @@ -24,6 +36,7 @@ const ButtonComponent = ({ onClick={onClick} {...props} > + {icon} {children} </span> ); @@ -33,6 +46,8 @@ ButtonComponent.propTypes = { children: PropTypes.node, className: PropTypes.string, disabled: PropTypes.bool, + iconClassName: PropTypes.string, + iconSrc: PropTypes.string, onClick: PropTypes.func.isRequired }; diff --git a/src/components/language-selector/dropdown-caret.svg b/src/components/language-selector/dropdown-caret.svg new file mode 100644 index 0000000000000000000000000000000000000000..9ed9f8a5499f221d2ec0a7999fc3b4f6305d5243 GIT binary patch literal 904 zcmZuw+m4$s5PjdTaNU<y3dZ+K1gz9Z+n23WsqF{Q-~|){5x60r-{F#$RP_s<Gc#vq zj)&y=c5cws_e0&aDQ1LX<lAFc)NPsKAKzahi=VTnWVn`Stcy^k*j{cJRlY8(kYY6% z*V>Ptx?74VqR1iz$X`N+5tL|$6jvc!_HjIpBN+wh`ZDH}(io`Mko~Qx+tdF7nR70l zy*PV9aFTaXgg*P$_j&00J^FU?;aDMQ2}d8K5!`%45!zJz*;W2r=j&+X*q!5H$%&$s zGSs2*S<!cwq8r=jnD;&;@q#Wz3qKsQL+|t83y>pJYh9AWv+Ex9He?e5p9LvVU8MMH zUit{+7((Bje2Uwy^>-^;#Rd0U-86USbdUO94Mh8^Z@Z#c=btrLXdfHC=f8iM&nA3M zx#Z9^^zudS6gmiExZ>1M3zi^KF)b+7J4vk5PEk3bTrzH)5rArdm0%3LQX-htOen*5 zj999*=G>q|L<ytP8pa$0hj4;xWd(Y`DU_93a>@nT5>0nX;q?SV2M7|}S}uj%&Dlao z2c-?+8t9GE|G?TRVYL*y2O9gQAHWS4QVL@@+Q6GG4NSO_Y=(N3#3<*4W@f9wK@ugM mvM}COFiE)4ltSmADX5HL6(-e}RhS<kF4w)7F3I!*WWNDLK<V)S literal 0 HcmV?d00001 diff --git a/src/components/language-selector/language-icon.svg b/src/components/language-selector/language-icon.svg index 42bd409ab18e8ed0e737e6547c7ecc89ea57df0d..e3a712ffb3d7cf6cab15c7ea03751733a6852082 100644 GIT binary patch delta 57 zcmaFGcav{|%0!b5To!sp3K}Nn#zy87-@TgroY9)i4Gbo0Fsboorr0XwB<7`;CZ?w< KZT4l7Wd#5=RT60c delta 73 zcmcb~_lj?V3co^eNn&0~VorWus;yF9{zT=CT;_U)3K}M+CPqdR@4e#9FGx(zEUC0r aGSD+JoqUYZmdyYRCUY{WZMJ2SVFdu0a2AaK diff --git a/src/components/language-selector/language-selector.css b/src/components/language-selector/language-selector.css index 0ae9e0a10..bae30cdd3 100644 --- a/src/components/language-selector/language-selector.css +++ b/src/components/language-selector/language-selector.css @@ -9,8 +9,11 @@ } .language-icon { - height: 2rem; - display: none; + height: 1.5rem; +} + +.disabled { + opacity: .5; } .language-select { diff --git a/src/components/language-selector/language-selector.jsx b/src/components/language-selector/language-selector.jsx index db846fef5..e4779d8c6 100644 --- a/src/components/language-selector/language-selector.jsx +++ b/src/components/language-selector/language-selector.jsx @@ -1,27 +1,22 @@ +import classNames from 'classnames'; import PropTypes from 'prop-types'; import React from 'react'; import Box from '../box/box.jsx'; -import {ComingSoonTooltip} from '../coming-soon/coming-soon.jsx'; import locales from 'scratch-l10n'; import languageIcon from './language-icon.svg'; +import dropdownCaret from './dropdown-caret.svg'; import styles from './language-selector.css'; const LanguageSelector = ({ currentLocale, onChange, + open, ...props }) => ( <Box {...props}> - <ComingSoonTooltip - place="bottom" - tooltipId="language-selector" - > - <div className={styles.group}> - <img - className={styles.languageIcon} - src={languageIcon} - /> + <div className={styles.group}> + {open ? ( <select disabled aria-label="language selector" @@ -38,15 +33,27 @@ const LanguageSelector = ({ </option> ))} </select> - </div> - </ComingSoonTooltip> + ) : ( + <React.Fragment> + <img + className={classNames(styles.languageIcon, styles.disabled)} + src={languageIcon} + /> + <img + className={classNames(styles.dropdownCaret, styles.disabled)} + src={dropdownCaret} + /> + </React.Fragment> + )} + </div> </Box> ); LanguageSelector.propTypes = { currentLocale: PropTypes.string, - onChange: PropTypes.func + onChange: PropTypes.func, + open: PropTypes.boolean }; export default LanguageSelector; diff --git a/src/components/menu-bar/icon--mystuff.png b/src/components/menu-bar/icon--mystuff.png new file mode 100644 index 0000000000000000000000000000000000000000..79bbcb7f9da39c0a73db5a142082b9c39c2825bc GIT binary patch literal 1464 zcmaJ>eM}Q~7%s)4@-diT0t?$NN2VpAch{D3^wNUZQfX$fmJ01Qm7_iA3B5b62W^2l zU^4~?aT_=%DPlIaj3qK8Q~6NA1qN&bbQ76GB4$g-2!e5cNd$J~%l$ES$=&<=y?LMK z{d#gW#>@j@!LJ1i1cESqhStPegnz|5g7|OeX>T!aVz_h*mqq7uZk#0qX?8k~0Q640 zfG`ob-CI0Ns04yQF=@7N7Q;czMmr(g9|L)u438EFRH+^Yw-pi`kVh1dlp0*<=>-AO zt_E`y2E@Q<2nU%_#u8a&nPyvAp-pKAQ&Rwy2jdBx1cw72XA$MXJZf;27vs-<Hw*%+ zAzYyvTr0|AFajEyB>)AKB(Wh$D1a&<sRBh4(F8z-NEI+5hvkSwCdU#HEKvrmKOmot zwdZ3dt!_ORe^Y}Fj$<$wcDvn>TMp4|0W4K2l`tZMWikmLA#r&r4);hXSKJ1JmT=iv zlHo|20{o149$mtzLB7(p7M#o`E#+Dt6F)H6gEO!cLi{al1R4zgAL?{&M!Pr@@v`3k zBzBp-3;~-67hS^I_{HVN`BO2Nh9z*0X3aERv@u1agXU<LgJuAYW_4<S*nrze%I}O{ zMHvj3o^o+GWh3-jHOTWoBx%Qzm5HbfQOFcZR3Vk7^G1W}bTUmMDo>UrBl|b7TH03P zBq(kJYk!HAZ;AB_!pZQNwFFC+5_TO+JAu{4F>>o#kS+PvvG%QNk#32F`C?%IdjGZV z4HvH=|8Y~i{AE-A1jTEf<;5K}m3~Gb5bn`y)6Aa9x%0=xn!~Y!XRLMg8Ox20XB(dZ z;kD;(ik~;^JyaOp2);GYQ{XkKh9WPhzWpk`N#zBu?AoQjf8x)oPpwHuAGJ)qJ8@-X z`8_OWCa2}<(&*I9-h~GX?)muzB>k`@D6vZOw9QVt`<fq@bbMWT>|}c|v(1;_uB*;w zZigoQ9RA0tT*=t<aBW|0*{#&wNLY7RclP#Z^qqa(QL~~HOg9r!^+v=n!``@Pohc8H zOfRA$b2Zey<EN5kbXvIG>g#=duDI0|`oj8SOyIfP5LHFY-6P)zCR93V$L$G&XY(?p zqj|YI8_Ago$RrYyw>p~!O*x^^ZrhXCd!$fYU;10@!5`+lZ4*!gYUxjDH$Gh&x)cV@ zeDiy0U(Dw#pSioNd!vVn<Hu(^KKi@dQF>oVOk8|?ectCahG%wJu9HB&a!MHV-QB@~ zMaRIHabzihn>ZR&-#6Odp2LWQzFyynefXZF5P8@6W0i_iE85E+wgbhc=2xn((Q$ez z;$&_lBkB;sZx(e#H62;$tjRA%8uVcgLwwKhu3&wDsWJ)>WvrPO@_<9WF^IWQaa^nu zQpqzP_X&f##?s0zJ+#+MMULpKUzF>n{whclx+`(y_Vf4eWw+ur7v63i{<Y=W<)(z$ z$mo&o2aB49>Fkv|a{;fWSA4lt_ldcu@oH|cad2{HQS~oLPws3RFKf<v^ugq5L7>3x VEC~l0V8H(`)u(4_+xF*H{{v_a7~TK? literal 0 HcmV?d00001 diff --git a/src/components/menu-bar/icon--profile.png b/src/components/menu-bar/icon--profile.png new file mode 100644 index 0000000000000000000000000000000000000000..41e62b6140efe34784c1c5fa697f1bf73c236b85 GIT binary patch literal 5213 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 X?GceYo~S%s00000NkvXXu0mjfu(-5L literal 0 HcmV?d00001 diff --git a/src/components/menu-bar/icon--see-community.svg b/src/components/menu-bar/icon--see-community.svg new file mode 100644 index 0000000000000000000000000000000000000000..1f5b6ee6e58a29ba0ddf03372fff213c0e2948b5 GIT binary patch literal 2190 zcmZuz%WhjY5Z&i1*xOA4NEBx{<O~DL0V*KfI6#54o9tZcMiOF6fuz{(-}ek9KLX^! zu*t*WJkC7miw}=?x8Z)=A2z$~e4v<yFm7*l%guH*AO89K<J5)^mv1f(_p9)*SsvH( zfz$WLA*{#EYJGg#-EYQ+KX#AvA%zs!e}>meX$Ua0J<Nyo@%a7yZ1(W*5Fc{f?N>8S zDb1k%Eb{*GcC-EVD?w_l&HCwZ`6l4I_-#53e~#O6e|_BT--plN#^cR8h(!)>MKkNW zFb%IP{<~X`cbn^Tc=2X;H#?l}Os8j+$IbC}y!<?lVX?cr`?1{||GSu-z?048c(}P- z?8oclxCA4|_1SE^nDwJ4sjr7iNATx_tionFAO5;tjZ?63IPQ1f#`&<_ZO5nG^vo}g zziw`CpALOJ-T%0S^mspRcgy8D{7%71E&QE6`}=hL_mBO1CEag)zlP6n<r7gPZN;ok zO03OluGYeWQcPKd#Nm>1tN0ZxT1zb#187>aC9MF7C^ai(Qe%NCPMpJ4i<H>JXri%L z;R>m+Xi-eKB^JO<r6#c)T4c&exJ)e8T&l1Z=&hBLroyk$D~Xj%EjM}%FC?-yW#Rl9 z7Hps|=hRB@O`_UZEL_PX$7V^Sl7xlt;Fd_j4i?~StyzImX_8HIC@~dECanQ2xruVB z;R-}F91Gb*Vzy#R0);hJO{qz9&5B#BW&uo8t0^bfoJ-~^)DUQK$y`tN60v2dXt5@4 z@PsEE8|7x)C?GMKwbd++A~cX}0a;WdC@WCRsx3<`$YPFWNLPm&arZM2GK!38X`XU) zh)8p=slqbyQjuFN9tPEzOhwhXBZX^V(q+{+GYIk|5h?`)0p-@nX|t$Gsn+g;L?<n^ z3fQbyiUyJ>2|@MTvXa82gUC(78lp__D?7zM!>C1VfIT?P1eX+bXGL?-DuLK5tW^`Q zQRKREF3!&{s{Bj%1eZ7of!ztr<V1x*2Don(F@Z>jrIqaE?^+UU3p)xfz`28FXbX}F zJdz}+g#xD&tSc3Q2Dn6$ig53%LPgOo4x<gg6Wl{m4LqW@pe|RzHCLRGX-4v1z$>tf zwnLM`+_UJyGlI5Lbmj|6)i)L8n-fZ;?@&b9*}L*Bl1uKRli9Zg13(LVD%~_@0%S~* zqM;FSLvkug0icv-lF{Z)L;`~bPEbvRp^<%lpuW-O<s{AIJ%l*HL<ZLtaiT-e{e@tS zkTMJyq`jMK=<m)H1PN6;Aw?Bd)QI_{Ku3UY$O460R5v<^35z6MgEBtFu&J0#=&&T+ zoEI{q%8*aoXC$PjoGWU!0Zo1h3OHtz9tL4pU_=lX=1v`0Oo#%KOx4(GM>7TyJBW6- zjN#>+GeU0#9u&+Ei~)=`hlxOaW{i^3Qew1C&z5q-3`7Qzb<DvIq6gGzz<l`$1|tS@ z2#u?qnZ%It&R6yM0(+Ti4-Fk?r4Q|2l=zpSKSc+;8F&FtZ`=@$`|IuD>u!HHANukZ z58PXS3;H+lLOm_th5hd6hwTM<xiNi~n}nD3yD;E2^q1%K8uo{1wmLtJzPRvz0WSXs DlX~(T literal 0 HcmV?d00001 diff --git a/src/components/menu-bar/menu-bar.css b/src/components/menu-bar/menu-bar.css index d1f4c3185..937908b64 100644 --- a/src/components/menu-bar/menu-bar.css +++ b/src/components/menu-bar/menu-bar.css @@ -6,24 +6,26 @@ flex-direction: row; justify-content: space-between; flex-wrap: nowrap; - - /* - For most things, we shouldn't explicitly set height, and let the - content push the element to whatever fits. Using a fixed height - instead, will help us subtract the value we assign from the body, - adding up to a perfect 100%. This means we don't need to set - overflow: hidden, which makes it hard to debug. border-box - simplifies by all of this by removing padding from the equation. + + /* + For most things, we shouldn't explicitly set height, and let the + content push the element to whatever fits. Using a fixed height + instead, will help us subtract the value we assign from the body, + adding up to a perfect 100%. This means we don't need to set + overflow: hidden, which makes it hard to debug. border-box + simplifies by all of this by removing padding from the equation. */ box-sizing: border-box; - height: $menu-bar-height; + height: $menu-bar-height; - /* - @todo: This adds ~20px in Chrome, when scrolling to the right, + /* + @todo: This adds ~20px in Chrome, when scrolling to the right, but fixes [FFx + Safari] [resize window down + scroll to the right] bug. - width: 100%; + width: 100%; */ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: .85rem; + font-weight: bold; background-color: $motion-primary; color: white; } @@ -33,18 +35,20 @@ flex-direction: row; justify-content: flex-start; flex-wrap: nowrap; + align-items: center; } -/* - Using a wrapper so when logo is hovered, it transforms via its center point - @todo: not sure if this is needed +/* + Using a wrapper so when logo is hovered, it transforms via its center point + @todo: not sure if this is needed */ .logo-wrapper { } .scratch-logo { - height: $menu-bar-height; + height: $menu-bar-height; padding: 0.8rem 0; + vertical-align: middle; } .scratch-logo:hover { @@ -61,10 +65,10 @@ .menu-item { display: block; padding: 0 1.5rem; - line-height: $menu-bar-height; + line-height: $menu-bar-height; cursor: pointer; text-decoration: none; - color: $motion-tertiary; + color: #fff; user-select: none; } @@ -75,21 +79,28 @@ } .feedback-button { - border-radius: 5px; - padding: .75rem; background-color: #FFF; - cursor: pointer; - font-size: .75rem; - font-weight: bold; color: $motion-primary; } -.feedback-button-icon { - vertical-align: middle; +.divider { + border-right: 1px dashed $menubar-gray; + margin: 0 1rem; + height: 1.5rem; } -.feedback-button-icon { - margin-right: .5rem; - width: 1.5rem; +.title-field { + border: 1px dashed $menubar-gray; + border-radius: 4px; + width: 190px; height: 1.5rem; + padding: .75rem; +} + +.share-button { + background: #FFAB19; +} + +.coming-soon >:not(.coming-soon-tooltip) { + opacity: 0.5; } diff --git a/src/components/menu-bar/menu-bar.jsx b/src/components/menu-bar/menu-bar.jsx index 580729454..6a760672f 100644 --- a/src/components/menu-bar/menu-bar.jsx +++ b/src/components/menu-bar/menu-bar.jsx @@ -6,15 +6,18 @@ import React from 'react'; import Box from '../box/box.jsx'; import Button from '../button/button.jsx'; -import LoadButton from '../../containers/load-button.jsx'; -import SaveButton from '../../containers/save-button.jsx'; +import {ComingSoonTooltip} from '../coming-soon/coming-soon.jsx'; import LanguageSelector from '../../containers/language-selector.jsx'; import {openFeedbackForm} from '../../reducers/modals'; import styles from './menu-bar.css'; +import mystuffIcon from './icon--mystuff.png'; +import profileIcon from './icon--profile.png'; import feedbackIcon from './icon--feedback.svg'; +import communityIcon from './icon--see-community.svg'; +import dropdownCaret from '../language-selector/dropdown-caret.svg'; import scratchLogo from './scratch-logo.svg'; const MenuBar = props => ( @@ -32,29 +35,119 @@ const MenuBar = props => ( src={scratchLogo} /> </div> - <SaveButton className={styles.menuItem} /> - <LoadButton className={styles.menuItem} /> - <LanguageSelector className={styles.menuItem} /> + <div className={classNames(styles.menuItem)}> + <ComingSoonTooltip + className={styles.comingSoon} + place="bottom" + tooltipClassName={styles.comingSoonTooltip} + tooltipId="menubar-selector" + > + <LanguageSelector /> + </ComingSoonTooltip> + </div> + <div className={classNames(styles.menuItem)}> + <ComingSoonTooltip + className={styles.comingSoon} + place="bottom" + tooltipClassName={styles.comingSoonTooltip} + tooltipId="file-menu" + > + <div className={classNames(styles.fileMenu)}>File</div> + </ComingSoonTooltip> + </div> + <div className={classNames(styles.menuItem)}> + <ComingSoonTooltip + className={styles.comingSoon} + place="bottom" + tooltipClassName={styles.comingSoonTooltip} + tooltipId="edit-menu" + > + <div className={classNames(styles.editMenu)}>Edit</div> + </ComingSoonTooltip> + </div> + <div className={classNames(styles.divider)} /> + <div className={classNames(styles.menuItem)}> + <ComingSoonTooltip + className={styles.comingSoon} + place="bottom" + tooltipClassName={styles.comingSoonTooltip} + tooltipId="title-field" + > + <div className={classNames(styles.titleField)} /> + </ComingSoonTooltip> + </div> + <div className={classNames(styles.menuItem)}> + <ComingSoonTooltip + className={styles.comingSoon} + place="bottom" + tooltipClassName={styles.comingSoonTooltip} + tooltipId="share-button" + > + <Button className={classNames(styles.shareButton)}> + <FormattedMessage + defaultMessage="Share" + description="Label for project share button" + id="gui.menuBar.share" + /> + </Button> + </ComingSoonTooltip> + </div> + <div className={classNames(styles.menuItem, styles.communityButtonWrapper)}> + <ComingSoonTooltip + className={styles.comingSoon} + place="bottom" + tooltipClassName={styles.comingSoonTooltip} + tooltipId="community-button" + > + <Button + className={classNames(styles.communityButton)} + iconSrc={communityIcon} + > + <FormattedMessage + defaultMessage="See Community" + description="Label for see community button" + id="gui.menuBar.seeCommunity" + /> + </Button> + </ComingSoonTooltip> + </div> </div> - <div className={styles.feedbackButtonWrapper}> + <div className={classNames(styles.menuItem, styles.feedbackButtonWrapper)}> <Button className={styles.feedbackButton} + iconSrc={feedbackIcon} onClick={props.onGiveFeedback} > - <img - className={styles.feedbackButtonIcon} - draggable={false} - src={feedbackIcon} + <FormattedMessage + defaultMessage="Give Feedback" + description="Label for feedback form modal button" + id="gui.menuBar.giveFeedback" /> - <span className={styles.feedbackText}> - <FormattedMessage - defaultMessage="Give Feedback" - description="Label for feedback form modal button" - id="gui.menuBar.giveFeedback" - /> - </span> </Button> </div> + <div className={styles.accountInfoWrapper}> + <ComingSoonTooltip + className={styles.comingSoon} + place="bottom" + tooltipId="mystuff" + > + <div className={classNames(styles.menuItem, styles.mystuffButton)}> + <img src={mystuffIcon} /> + </div> + </ComingSoonTooltip> + <ComingSoonTooltip + className={styles.comingSoon} + place="bottom" + tooltipId="account-nav" + > + + <div className={classNames(styles.menuItem, styles.accountNavMenu)}> + <img src={profileIcon} /> + <span>scratch-cat</span> + <img src={dropdownCaret} /> + </div> + </ComingSoonTooltip> + </div> </Box> ); diff --git a/src/css/colors.css b/src/css/colors.css index be8a9a0db..b46bc50bf 100644 --- a/src/css/colors.css +++ b/src/css/colors.css @@ -4,6 +4,8 @@ $ui-background-blue: #e8edf1; $text-primary: #575e75; +$menubar-gray: rgba(0,0,0,0.25); + $motion-primary: #4C97FF; $motion-tertiary: #3373CC; $motion-transparent: hsla(215, 100%, 65%, 0.20); @@ -11,6 +13,8 @@ $motion-transparent: hsla(215, 100%, 65%, 0.20); $red-primary: #FF661A; $red-tertiary: #E64D00; +$share-orange: #FFAB19; + $sound-primary: #CF63CF; $sound-tertiary: #A63FA6; -- GitLab