From c1d99498ff1a5e0d9948842c3c4cf008c4f5701f Mon Sep 17 00:00:00 2001 From: Jason Shi <2192867941@qq.com> Date: Mon, 17 Mar 2025 22:23:54 +0800 Subject: [PATCH] 111 --- src/components/gui/gui.jsx | 7 ++ src/components/header/header.css | 89 +++++++++++++++++ src/components/header/header.jsx | 82 +++++++++++++++ src/components/header/image/member.svg | 1 + src/components/header/image/member1.svg | 1 + src/components/menu-bar/menu-bar.jsx | 126 ------------------------ static/logo.png | Bin 0 -> 1831 bytes 7 files changed, 180 insertions(+), 126 deletions(-) create mode 100644 src/components/header/header.css create mode 100644 src/components/header/header.jsx create mode 100644 src/components/header/image/member.svg create mode 100644 src/components/header/image/member1.svg create mode 100644 static/logo.png diff --git a/src/components/gui/gui.jsx b/src/components/gui/gui.jsx index f48e5a6ec33..94eca3035b0 100644 --- a/src/components/gui/gui.jsx +++ b/src/components/gui/gui.jsx @@ -31,6 +31,8 @@ import DragLayer from '../../containers/drag-layer.jsx'; import ConnectionModal from '../../containers/connection-modal.jsx'; import TelemetryModal from '../telemetry-modal/telemetry-modal.jsx'; +import Header from '../header/header.jsx'; + import layout, {STAGE_SIZE_MODES} from '../../lib/layout-constants'; import {resolveStageSize} from '../../lib/screen-utils'; import {themeMap} from '../../lib/themes'; @@ -165,6 +167,11 @@ const GUIComponent = props => { dir={isRtl ? 'rtl' : 'ltr'} {...componentProps} > + +
{telemetryModalVisible ? ( { + this.setState(prevState => ({ + timeLeft: prevState.timeLeft > 0 ? prevState.timeLeft - 1 : 0 + })); + }, 1000); + } + + componentWillUnmount() { + clearInterval(this.timer); + } + + formatTime(seconds) { + const h = String(Math.floor(seconds / 3600)).padStart(2, '0'); + const m = String(Math.floor((seconds % 3600) / 60)).padStart(2, '0'); + const s = String(seconds % 60).padStart(2, '0'); + return `${h}:${m}:${s}`; + } + + render() { + const { timeLeft } = this.state; + const { logo, title } = this.props; + + return ( + +
+
+ Scratch +
+
{title}
+
+
+ {timeLeft > 0 ? ( + <> +
您已获得会员体验权限,您的体验时间剩余:
+
{this.formatTime(timeLeft)}
+ + ) : ( + <> +
您的会员体验时间已用尽,成为会员
+
立即解锁所有功能
+ + )} +
+
+ +
+
+ ); + } +} + +Header.propTypes = { + title: PropTypes.string.isRequired, + logo: PropTypes.string.isRequired, +}; + +export default Header; \ No newline at end of file diff --git a/src/components/header/image/member.svg b/src/components/header/image/member.svg new file mode 100644 index 00000000000..93183d53e87 --- /dev/null +++ b/src/components/header/image/member.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/header/image/member1.svg b/src/components/header/image/member1.svg new file mode 100644 index 00000000000..de749a32289 --- /dev/null +++ b/src/components/header/image/member1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/menu-bar/menu-bar.jsx b/src/components/menu-bar/menu-bar.jsx index ab3081775ad..b6525584b2f 100644 --- a/src/components/menu-bar/menu-bar.jsx +++ b/src/components/menu-bar/menu-bar.jsx @@ -424,18 +424,6 @@ class MenuBar extends React.Component { >
-
- Scratch -
{(this.props.canChangeTheme || this.props.canChangeLanguage) && ( )}
- {this.props.canEditTitle ? ( -
- - - -
- ) : ((this.props.authorUsername && this.props.authorUsername !== this.props.username) ? ( - - ) : null)} -
- {this.props.canShare ? ( - (this.props.isShowingProject || this.props.isUpdating) && ( - - { - waitForUpdate => ( - { - this.handleClickShare(waitForUpdate); - }} - /* eslint-enable react/jsx-no-bind */ - /> - ) - } - - ) - ) : ( - this.props.showComingSoon ? ( - - - - ) : [] - )} - {this.props.canRemix ? remixButton : []} -
-
- {this.props.enableCommunity ? ( - (this.props.isShowingProject || this.props.isUpdating) && ( - - { - waitForUpdate => ( - { - this.handleClickSeeCommunity(waitForUpdate); - }} - /* eslint-enable react/jsx-no-bind */ - /> - ) - } - - ) - ) : (this.props.showComingSoon ? ( - - - - ) : [])} -
- {this.props.showComingSoon ? ( - - -
- -
-
- -
- - - {'scratch-cat'} - - -
-
-
- ) : []} )}
diff --git a/static/logo.png b/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3625d35860f6fff9b5b69707c62b48c140f20770 GIT binary patch literal 1831 zcmV+?2iW+DP)>GYoLd8eng7uWQp4145`ruS{ZL{ zn8q$eynQnG*XIG;{2x}`d&rE5q^Ci`m4tJ(u(sNPNY##0cb#bTDYm3=)!SgNbY-8g>47$hhM;)`aXt*GQkB;h?InftqiP| zk=?eR$gKxKB8W%`Byaod9O5>F3cByZ2h7_KR~s5t0?S*>7N=&nK0>7b@d5?>f7jY(z77#4)1R*7t0j8_-D7F>1|6m9yHHH7i z&xlOEgNWdi%#X|t;s5<{bk83Vw-I{23S&oC2~@3waT!pm;guh~4+|25IhF0gQ%ttyBV5jlIBheLi&O)suKL=Kx55@;jJ& z|3a|qY0{lL@NWJRHqw~$v|qgfLuFvHm|LYh5D3=wAYOZzS`u#|2-)UsM7Ms0?0e6F z8X7+RJ-}izvtdp%(IP;pfJ{wzNqNRHHHBhhcM<385Go++Z^bT5;(qWf^0yyg=O)YN zIJunZ&();LEMu?A0UB*DKBSZ3Z+$0rE`dRD{5f>!2pXg@VliS-Cz?xo3u^^d1;aEb ziHTA-JH;F}c@BT(V)463ER3J*jYZqgM`$s1W5xT14tzWqdmFbcPG^^+No4GukV1)*WY0WHaQ9o1E=wE>b&CenTz#KLHGGuMb*{u9CFmoOXe3X7lY z95y=}(kt4w7LKjVGgU>LkRy^#hP#1@ghk$#y;wD%imISZo6&{oTxv3iQx|R?HeK~D zUc+8l0@`NFA}n&#PW;dQmSF58w8nAQ-;RI$Q4m2}wjxeFVA1RUSX<^_(UD@nIJtWl zR1o6<%KTeT!NL@#dpDwjfBd^RGw)$h=zAcvs%9ba+DBOS6sz(jA~Z9L4d(I2-oza~ z3Hj9tuE9`WdJH-HM2K0X@=-~awOADi_TNV#7RPCglj+@uckxiMc)-vhp+?BV7zwR=50tzypT>bm_ujI zL-H&-au_r9W^Jd@N*q(Gi~0pxcDOIVpE^Ns?282P{Ycl{m}oPanZb^{jJ*F8CN;83 zy3xfURFOsnVAIo6w70fEFb`x36AExMvqf+VSK#!c=xMN~4za1Q-mj*5h&1I2#@xX; zkI-voVq$VBu#w>p=QEiOTH888w>g?SRfjJ2>Z9n~5aQ32*+4XvGpkhYn-t2Qk0FiS zWCFkFH&ue1`;v(X#>b}TmvSt~J~y7Y`t`BIsDnBfF=eGmdq)Rd8#ckUnYFc*8oL=8 zO)xn=0hmIdSu98ZB7qp^P{kba?vt%|tC9OvrLO!h=@ZfIn>KBsX`LW9E{AngX}+t} z!jWA6VqFi(S!L*7R{+i!c)!SXMMYEi`urV_O}|`IFX`g1iC)jNA2G;aJl>Dzq>yYf z2hNrx<2=u#DB5c!71VLz{CSMCX)O^!jwo9mUngsVAGZh;dI~wL`44WJ?h(hiAot zu?RA*>JQv`@Y{@*MvU<39_5 V&_ch@Va)&l002ovPDHLkV1h=Hd>H@$ literal 0 HcmV?d00001