Merge remote-tracking branch 'origin/develop' into release/2022-10-26

This commit is contained in:
cwillisf 2022-10-26 14:18:30 +00:00
commit 057f27c701
15 changed files with 1729 additions and 126 deletions

1687
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -134,8 +134,8 @@
"regenerator-runtime": "0.13.9", "regenerator-runtime": "0.13.9",
"sass": "1.49.7", "sass": "1.49.7",
"sass-loader": "10.2.1", "sass-loader": "10.2.1",
"scratch-gui": "0.1.0-prerelease.20220928050448", "scratch-gui": "1.0.48",
"scratch-l10n": "3.15.20220927031631", "scratch-l10n": "3.15.20221026032051",
"selenium-webdriver": "4.1.0", "selenium-webdriver": "4.1.0",
"slick-carousel": "1.6.0", "slick-carousel": "1.6.0",
"style-loader": "0.12.3", "style-loader": "0.12.3",

View file

@ -96,7 +96,7 @@ const Footer = props => (
</a> </a>
</dd> </dd>
<dd> <dd>
<a href="https://secure.donationpay.org/scratchfoundation/"> <a href="https://www.scratchfoundation.org/donate">
<FormattedMessage id="general.donate" /> <FormattedMessage id="general.donate" />
</a> </a>
</dd> </dd>

View file

@ -446,13 +446,13 @@
"name": "donate-redirect", "name": "donate-redirect",
"pattern": "^/info/donate/?", "pattern": "^/info/donate/?",
"routeAlias": "/info/(cards|credits|faq|donate)/?$", "routeAlias": "/info/(cards|credits|faq|donate)/?$",
"redirect": "https://secure.donationpay.org/scratchfoundation/" "redirect": "https://www.scratchfoundation.org/donate"
}, },
{ {
"name": "donate-redirect2", "name": "donate-redirect2",
"pattern": "^/donate/?$", "pattern": "^/donate/?$",
"routeAlias": "/donate/?$", "routeAlias": "/donate/?$",
"redirect": "https://secure.donationpay.org/scratchfoundation/" "redirect": "https://www.scratchfoundation.org/donate"
}, },
{ {
"name": "download-redirect", "name": "download-redirect",

View file

@ -219,7 +219,7 @@ const About = () => (
), ),
donateLink: ( donateLink: (
<a <a
href="//secure.donationpay.org/scratchfoundation/" href="https://www.scratchfoundation.org/donate"
rel="noreferrer noopener" rel="noreferrer noopener"
target="_blank" target="_blank"
> >
@ -229,7 +229,7 @@ const About = () => (
}} }}
/></p> /></p>
<a <a
href="//secure.donationpay.org/scratchfoundation/" href="https://www.scratchfoundation.org/donate"
rel="noreferrer noopener" rel="noreferrer noopener"
target="_blank" target="_blank"
> >

View file

@ -2220,7 +2220,7 @@ class AnnualReport extends React.Component {
<FormattedMessage id="annualReport.donateMessage" /> <FormattedMessage id="annualReport.donateMessage" />
</p> </p>
<a <a
href="https://secure.donationpay.org/scratchfoundation/" href="https://www.scratchfoundation.org/donate"
rel="noreferrer noopener" rel="noreferrer noopener"
target="_blank" target="_blank"
> >

View file

@ -2529,7 +2529,7 @@ class AnnualReport extends React.Component {
<FormattedMessage id="annualReport.2020.donateMessage" /> <FormattedMessage id="annualReport.2020.donateMessage" />
</p> </p>
<a <a
href="https://secure.donationpay.org/scratchfoundation/" href="https://www.scratchfoundation.org/donate"
rel="noreferrer noopener" rel="noreferrer noopener"
target="_blank" target="_blank"
> >

View file

@ -2318,7 +2318,7 @@ class AnnualReport extends React.Component {
<FormattedMessage id="annualReport.2021.donateMessage2" /> <FormattedMessage id="annualReport.2021.donateMessage2" />
</p> </p>
<a <a
href="https://secure.donationpay.org/scratchfoundation/" href="https://www.scratchfoundation.org/donate"
rel="noreferrer noopener" rel="noreferrer noopener"
target="_blank" target="_blank"
> >

View file

@ -250,7 +250,7 @@ const Developers = () => (
id="developers.donateIntro" id="developers.donateIntro"
values={{ values={{
donateLink: ( donateLink: (
<a href="https://secure.donationpay.org/scratchfoundation/"> <a href="https://www.scratchfoundation.org/donate">
<FormattedMessage id="developers.donateIntroLinkText" /> <FormattedMessage id="developers.donateIntroLinkText" />
</a> </a>
) )

View file

@ -87,7 +87,7 @@ const Faq = injectIntl(props => (
<dd><FormattedMessage <dd><FormattedMessage
id="faq.scratchCostBody" id="faq.scratchCostBody"
values={{donateLink: ( values={{donateLink: (
<a href="https://secure.donationpay.org/scratchfoundation/"> <a href="https://www.scratchfoundation.org/donate">
<FormattedMessage id="faq.donateLinkText" /> <FormattedMessage id="faq.donateLinkText" />
</a> </a>
)}} )}}

View file

@ -8,7 +8,7 @@ const Button = require('../../../components/forms/button.jsx');
require('./donate-banner.scss'); require('./donate-banner.scss');
const donateURL = 'https://secure.donationpay.org/scratchfoundation'; const donateURL = 'https://www.scratchfoundation.org/donate';
const navigateToDonatePage = () => { const navigateToDonatePage = () => {
window.location = donateURL; window.location = donateURL;

View file

@ -0,0 +1,37 @@
import React from 'react';
import Helmet from 'react-helmet';
// tag comments:
// * robots: important to set to "noindex", instructing crawlers to NOT include
// these secret pages in their indexes
// * description/og:description: other content values for these tags have
// already been provided elsewhere, so the page ends up with two of each; one
// very generic to Scratch, and then this more specific version.
// We anticipate that some renderers and browsers may use one, some the other.
// * link: consider all these signup pages to be one, in the hopes of further
// discouraging search engines from listing multiple secret links
const StudentRegistrationMeta = () => (
<Helmet>
<title>Class Registration</title>
<meta
name="robots"
content="noindex"
/>
<meta
content="Scratch registration page for a particular class"
name="description"
/>
<meta
content="Scratch registration page for a particular class"
name="og:description"
/>
<link
rel="canonical"
href="https://scratch.mit.edu/signup"
/>
</Helmet>
);
StudentRegistrationMeta.propTypes = {};
export default StudentRegistrationMeta;

View file

@ -11,6 +11,7 @@ const route = require('../../lib/route');
const Deck = require('../../components/deck/deck.jsx'); const Deck = require('../../components/deck/deck.jsx');
const Progression = require('../../components/progression/progression.jsx'); const Progression = require('../../components/progression/progression.jsx');
const Steps = require('../../components/registration/steps.jsx'); const Steps = require('../../components/registration/steps.jsx');
import StudentRegistrationMeta from './student-registration-meta.jsx';
const render = require('../../lib/render.jsx'); const render = require('../../lib/render.jsx');
@ -106,6 +107,8 @@ class StudentRegistration extends React.Component {
const usernameDescription = this.props.intl.formatMessage({id: 'registration.studentUsernameStepDescription'}); const usernameDescription = this.props.intl.formatMessage({id: 'registration.studentUsernameStepDescription'});
const usernameHelp = this.props.intl.formatMessage({id: 'registration.studentUsernameStepHelpText'}); const usernameHelp = this.props.intl.formatMessage({id: 'registration.studentUsernameStepHelpText'});
return ( return (
<div className="student-registration-shell">
<StudentRegistrationMeta />
<Deck className="student-registration"> <Deck className="student-registration">
{this.state.registrationError ? {this.state.registrationError ?
<Steps.RegistrationError> <Steps.RegistrationError>
@ -133,7 +136,8 @@ class StudentRegistration extends React.Component {
/> />
<Steps.DemographicsStep <Steps.DemographicsStep
countryName={this.state.classroom && this.state.classroom.educator && countryName={this.state.classroom && this.state.classroom.educator &&
this.state.classroom.educator.profile && this.state.classroom.educator.profile.country} this.state.classroom.educator.profile &&
this.state.classroom.educator.profile.country}
description={this.props.intl.formatMessage({ description={this.props.intl.formatMessage({
id: 'registration.studentPersonalStepDescription' id: 'registration.studentPersonalStepDescription'
})} })}
@ -148,6 +152,7 @@ class StudentRegistration extends React.Component {
</Progression> </Progression>
} }
</Deck> </Deck>
</div>
); );
} }
} }

View file

@ -62,9 +62,14 @@ const TeacherFaq = props => (
scratchEdLink: ( scratchEdLink: (
<a href="http://scratched.gse.harvard.edu/">ScratchEd</a> <a href="http://scratched.gse.harvard.edu/">ScratchEd</a>
), ),
forumsLink: ( facebookGroupLink: (
<a href="http://scratched.gse.harvard.edu/discussions.html"> <a href="https://www.facebook.com/groups/TeachingwithScratch">
<FormattedMessage id="teacherfaq.forums" /> <FormattedMessage id="teacherfaq.facebookGroup" />
</a>
),
creativeComputingLabLink: (
<a href="https://creativecomputing.gse.harvard.edu">
<FormattedMessage id="teacherfaq.creativeComputingLab" />
</a> </a>
) )
}} }}

View file

@ -43,8 +43,9 @@
"teacherfaq.studentMultipleTitle": "Can a student be in multiple classes? ", "teacherfaq.studentMultipleTitle": "Can a student be in multiple classes? ",
"teacherfaq.studentMultipleBody": "A student can only be a part of one class.", "teacherfaq.studentMultipleBody": "A student can only be a part of one class.",
"teacherfaq.studentDiscussTitle": "Is there a space to discuss Teacher Accounts with other teachers?", "teacherfaq.studentDiscussTitle": "Is there a space to discuss Teacher Accounts with other teachers?",
"teacherfaq.studentDiscussionBody": "Yes, you can engage in discussions with other teachers at {scratchEdLink}, an online community for Scratch educators. Check out their {forumsLink} to join conversations about a number of topics, including but not limited to Teacher Accounts. ScratchEd is developed and supported by the Harvard Graduate School of Education.", "teacherfaq.studentDiscussionBody": "You can engage in discussions with other teachers by joining the {facebookGroupLink}, where you will find conversations about a number of topics, including Teacher Accounts. This group was established by the {creativeComputingLabLink} at the Harvard Graduate School of Education. You can also browse {scratchEdLink}, which is now an archived site, but includes extensive forums and resources related to Scratch in educational settings.",
"teacherfaq.forums": "forums", "teacherfaq.creativeComputingLab": "Creative Computing Lab",
"teacherfaq.facebookGroup": "Teaching with Scratch Facebook group",
"teacherfaq.privacyPolicy": "Scratch Privacy Policy", "teacherfaq.privacyPolicy": "Scratch Privacy Policy",
"teacherfaq.studentDataTitle": "What data does Scratch collect about students?", "teacherfaq.studentDataTitle": "What data does Scratch collect about students?",
"teacherfaq.studentDataBody": "When a student first signs up on Scratch, we ask for basic demographic data including gender, age (birth month and year), country, and an email address for verification. This data is used (in aggregated form) in research studies intended to improve our understanding of how people learn with Scratch.", "teacherfaq.studentDataBody": "When a student first signs up on Scratch, we ask for basic demographic data including gender, age (birth month and year), country, and an email address for verification. This data is used (in aggregated form) in research studies intended to improve our understanding of how people learn with Scratch.",