diff --git a/bin/build-locales b/bin/build-locales index 66d8ca9f2..96d2c2783 100755 --- a/bin/build-locales +++ b/bin/build-locales @@ -189,48 +189,39 @@ async.forEachLimit(views, 5, function (view, cb) { var viewLocales = {}; viewLocales['en'] = merge({}, generalLocales['en'], defaultLocales[view]); - if ( defaultLocales.hasOwnProperty(view) ) { - // merge view specific english strings, first then other languages - process.stdout.write('Merging translations for ' + view + '\n'); - async.forEach(allLangs, function (isoCode, cb) { - var translationsFile = path.resolve( - __dirname, - '../', - localesDir, - 'scratch-website.' + view + '-l10njson', - isoCode + '.json' - ); - fs.readFile(translationsFile, 'utf8', function (err, data) { - if (err) { - if (err.code === 'ENOENT') { - if (isoCode !== 'en') { + // merge view specific english strings, first then other languages + process.stdout.write('Merging translations for ' + view + '\n'); + async.forEach(allLangs, function (isoCode, cb) { + var translationsFile = path.resolve( + __dirname, + '../', + localesDir, + 'scratch-website.' + view + '-l10njson', + isoCode + '.json' + ); + fs.readFile(translationsFile, 'utf8', function (err, data) { + if (err) { + if (err.code === 'ENOENT') { + if (isoCode !== 'en') { + if (defaultLocales.hasOwnProperty(view)) { process.stdout.write('No translations for ' + view + isoCode + ', using english\n'); - viewLocales[isoCode] = merge({}, generalLocales[isoCode], defaultLocales[view]); } - return cb(); - } else { - return cb(err); + viewLocales[isoCode] = merge({}, generalLocales[isoCode], defaultLocales[view]); } - } - try { - viewLocales[isoCode] = merge({}, generalLocales[isoCode], JSON.parse(data)); - } catch (e) { - return cb(e); - } - cb(); - }); - }, function (err) { - if (err) process.stdout.write('Error merging translations for view: ' + view + '\n' + err + '\n'); - var viewTranslations = merge({}, viewLocales, localizedAssetUrls[view]); - writeIntlFile(outputDir, view, viewTranslations, function (err) { - if (err) { - process.stdout.write('Failed to save: ' + view + '\n'); + return cb(); + } else { return cb(err); } - }); + } + try { + viewLocales[isoCode] = merge({}, generalLocales[isoCode], JSON.parse(data)); + } catch (e) { + return cb(e); + } + cb(); }); - - } else { + }, function (err) { + if (err) process.stdout.write('Error merging translations for view: ' + view + '\n' + err + '\n'); var viewTranslations = merge({}, viewLocales, localizedAssetUrls[view]); writeIntlFile(outputDir, view, viewTranslations, function (err) { if (err) { @@ -238,11 +229,12 @@ async.forEachLimit(views, 5, function (view, cb) { return cb(err); } }); - } + }); cb(); }, function (err) { if (err) { - process.stdout.write('Writing intl files completed with errors\n'); + process.stdout.write('Writing intl files no haz successes\n'); + process.exit(1); } return; }); diff --git a/custom-locales.json b/custom-locales.json index 83c4a0b11..02a4500d9 100644 --- a/custom-locales.json +++ b/custom-locales.json @@ -23,6 +23,10 @@ "locale": "la", "parentLocale": "it" }, + "sc": { + "locale": "sc", + "parentLocale": "it" + }, "yum": { "locale": "yum", "parentLocale": "en" diff --git a/src/components/footer/www/footer.jsx b/src/components/footer/www/footer.jsx index e243a5a35..2e930cef9 100644 --- a/src/components/footer/www/footer.jsx +++ b/src/components/footer/www/footer.jsx @@ -20,12 +20,12 @@ var Footer = React.createClass({ <div className="lists"> <dl> <dd> - <a href="/about/"> + <a href="/about"> <FormattedMessage id='general.aboutScratch' /> </a> </dd> <dd> - <a href="/jobs/"> + <a href="/jobs"> <FormattedMessage id='general.jobs' /> </a> </dd> @@ -37,17 +37,17 @@ var Footer = React.createClass({ </dl> <dl> <dd> - <a href="/terms_of_use/"> + <a href="/terms_of_use"> <FormattedMessage id='general.termsOfUse' /> </a> </dd> <dd> - <a href="/privacy_policy/"> + <a href="/privacy_policy"> <FormattedMessage id='general.privacyPolicy' /> </a> </dd> <dd> - <a href="/community_guidelines/"> + <a href="/community_guidelines"> <FormattedMessage id='general.guidelines' /> </a> </dd> @@ -61,7 +61,7 @@ var Footer = React.createClass({ <FormattedMessage id='general.about' /> </dt> <dd> - <a href="/about/"> + <a href="/about"> <FormattedMessage id='general.aboutScratch' /> </a> </dd> @@ -71,7 +71,7 @@ var Footer = React.createClass({ </a> </dd> <dd> - <a href="/educators/"> + <a href="/educators"> <FormattedMessage id='general.forEducators' /> </a> </dd> @@ -81,12 +81,12 @@ var Footer = React.createClass({ </a> </dd> <dd> - <a href="/info/credits/"> + <a href="/info/credits"> <FormattedMessage id='general.credits' /> </a> </dd> <dd> - <a href="/jobs/"> + <a href="/jobs"> <FormattedMessage id='general.jobs' /> </a> </dd> @@ -101,7 +101,7 @@ var Footer = React.createClass({ <FormattedMessage id='general.community' /> </dt> <dd> - <a href="/community_guidelines/"> + <a href="/community_guidelines"> <FormattedMessage id='general.guidelines' /> </a> </dd> @@ -132,7 +132,7 @@ var Footer = React.createClass({ </a> </dd> <dd> - <a href="/info/faq/"> + <a href="/info/faq"> <FormattedMessage id='general.faq' /> </a> </dd> @@ -158,17 +158,17 @@ var Footer = React.createClass({ <FormattedMessage id='general.legal'/> </dt> <dd> - <a href="/terms_of_use/"> + <a href="/terms_of_use"> <FormattedMessage id='general.termsOfUse' /> </a> </dd> <dd> - <a href="/privacy_policy/"> + <a href="/privacy_policy"> <FormattedMessage id='general.privacyPolicy' /> </a> </dd> <dd> - <a href="/DMCA/"> + <a href="/DMCA"> <FormattedMessage id='general.dmca' /> </a> </dd> @@ -190,11 +190,11 @@ var Footer = React.createClass({ </dd> <dd> <a href="http://day.scratch.mit.edu/"> - <FormattedMessage id='general.scratchday' /> + Scratch Day </a> </dd> <dd> - <a href="/conference/"> + <a href="/conference"> <FormattedMessage id='general.scratchConference' /> </a> </dd> diff --git a/src/components/footer/www/footer.scss b/src/components/footer/www/footer.scss index 43d195030..f3a56732e 100644 --- a/src/components/footer/www/footer.scss +++ b/src/components/footer/www/footer.scss @@ -7,7 +7,7 @@ text-align: center; flex-direction: row; flex-wrap: nowrap; - justify-content: space-around; + justify-content: space-between; dl { display: inline-block; diff --git a/src/components/registration/steps.jsx b/src/components/registration/steps.jsx index 9e48545b4..cd17ae99d 100644 --- a/src/components/registration/steps.jsx +++ b/src/components/registration/steps.jsx @@ -877,23 +877,35 @@ module.exports = { </p> <Card> <Form onValidSubmit={this.onValidSubmit}> - <Input label={formatMessage({id: 'general.emailAddress'})} - type="text" - name="user.email" - validations="isEmail" - validationError={formatMessage({id: 'general.validationEmail'})} - required /> - <Input label={formatMessage({id: 'general.confirmEmail'})} - type="text" - name="confirmEmail" - validations="equalsField:user.email" - validationErrors={{ - equalsField: formatMessage({id: 'general.validationEmailMatch'}) - }} - required /> + <Input + label={formatMessage({id: 'general.emailAddress'})} + type="text" + name="user.email" + validations="isEmail" + validationError={formatMessage({id: 'general.validationEmail'})} + required + /> + <Input + label={formatMessage({id: 'general.confirmEmail'})} + type="text" + name="confirmEmail" + validations="equalsField:user.email" + validationErrors={{ + equalsField: formatMessage({id: 'general.validationEmailMatch'}) + }} + required + /> + <Checkbox + label={formatMessage({id: 'registration.optIn'})} + value={true} + help={null} + name="subscribe" + /> <GeneralError name="all" /> - <NextStepButton waiting={this.props.waiting} - text={<intl.FormattedMessage id="registration.nextStep" />} /> + <NextStepButton + waiting={this.props.waiting} + text={<intl.FormattedMessage id="registration.nextStep" />} + /> </Form> </Card> <StepNavigation steps={this.props.totalSteps - 1} active={this.props.activeStep} /> diff --git a/src/l10n.json b/src/l10n.json index 3d516f840..9c11a92df 100644 --- a/src/l10n.json +++ b/src/l10n.json @@ -59,7 +59,6 @@ "general.profile": "Profile", "general.resourcesTitle": "Educator Resources", "general.scratchConference": "Scratch Conference", - "general.scratchday": "Scratch Day", "general.scratchEd": "ScratchEd", "general.scratchFoundation": "Scratch Foundation", "general.scratchJr": "ScratchJr", @@ -126,6 +125,7 @@ "registration.newPassword": "New Password", "registration.nextStep": "Next Step", "registration.notYou": "Not you? Log in as another user", + "registration.optIn": "Send me updates on using Scratch in educational settings", "registration.personalStepTitle": "Personal Information", "registration.personalStepDescription": "Your individual responses will not be displayed publicly, and will be kept confidential and secure", "registration.selectCountry": "select country", @@ -149,7 +149,7 @@ "registration.validationUsernameVulgar": "Hmm, that looks inappropriate", "registration.validationUsernameInvalid": "Invalid username", "registration.waitForApproval": "Wait for Approval", - "registration.waitForApprovalDescription": "You can log into your Scratch Account now, but the features specific to Teachers are not yet available. Your information is being reviewed. Please be patient, the approval process can take up to 24 hours. You will receive an email indicating your account has been upgraded once your account has been approved.", + "registration.waitForApprovalDescription": "You can log into your Scratch Account now, but the features specific to Teachers are not yet available. Your information is being reviewed. Please be patient, the approval process can take up to one day. You will receive an email indicating your account has been upgraded once your account has been approved.", "registration.welcomeStepDescription": "You have successfully set up a Scratch account! You are now a member of the class:", "registration.welcomeStepPrompt": "To get started, click on the button below.", "registration.welcomeStepTitle": "Hurray! Welcome to Scratch!", diff --git a/src/routes.json b/src/routes.json index dfe53b432..08c0d2d85 100644 --- a/src/routes.json +++ b/src/routes.json @@ -180,6 +180,13 @@ "view": "jobs/jobs", "title": "Jobs" }, + { + "name": "jobs-moderator", + "pattern": "^/jobs/moderator/?$", + "routeAlias": "/jobs/?$", + "view": "jobs/moderator/moderator", + "title": "Community Moderator" + }, { "name": "privacypolicy", "pattern": "^/privacy_policy/?$", diff --git a/src/views/conference/2017/index/index.jsx b/src/views/conference/2017/index/index.jsx index 99bc73d17..e93e8627b 100644 --- a/src/views/conference/2017/index/index.jsx +++ b/src/views/conference/2017/index/index.jsx @@ -218,14 +218,14 @@ var ConferenceSplash = React.createClass({ <td><FormattedMessage id='conference-2017.date' /></td> <td> <FormattedDate - value={new Date(2017, 10, 13)} + value={new Date(2017, 10, 10)} year='numeric' month='long' day='2-digit' /> {' - '} <FormattedDate - value={new Date(2017, 10, 15)} + value={new Date(2017, 10, 12)} year='numeric' month='long' day='2-digit' @@ -458,7 +458,19 @@ var ConferenceSplash = React.createClass({ </td> <td><FormattedMessage id='conference-2017.date' /></td> <td> - {'Middle of May, 2017'} + <FormattedDate + value={new Date(2017, 4, 20)} + year='numeric' + month='long' + day='2-digit' + /> + {' - '} + <FormattedDate + value={new Date(2017, 4, 21)} + year='numeric' + month='long' + day='2-digit' + /> </td> </tr> <tr className='conf2017-panel-row'> @@ -496,8 +508,8 @@ var ConferenceSplash = React.createClass({ </tr> </tbody> </table> - <a className='button mod-2017-panel' href='mailto:jovi.tong@uniamber.com'> - <FormattedMessage id='conference-2017.contact' /> + <a className='button mod-2017-panel' href='http://scratchconference2017.sxl.cn/'> + <FormattedMessage id='conference-2017.website' /> </a> </section> </div> diff --git a/src/views/conference/2017/index/l10n.json b/src/views/conference/2017/index/l10n.json index b9e4f0ca2..1cf860137 100644 --- a/src/views/conference/2017/index/l10n.json +++ b/src/views/conference/2017/index/l10n.json @@ -13,7 +13,7 @@ "conference-2017.franceTitle": "Scratch2017BDX", "conference-2017.franceSubTitle": "Opening, Inspiring, Connecting", "conference-2017.franceDesc": "Scratch2017BDX is an opportunity to meet people and share ideas, and to be inspired and inspiring. It's a global fest to celebrate creativity and enjoy discoveries and understanding about Scratch and beyond.", - "conference-2017.franceAudience": "Global Scratch Family", + "conference-2017.franceAudience": "Global Scratch family", "conference-2017.brasilTitle": "Conferência Scratch Brasil 2017", "conference-2017.brasilDesc": "The Scratch Brazil Conference 2017 will be a meeting point for Brazilian educators, researchers, developers and makers who are interested in creating, sharing and learning with Scratch. The conference will foster discussions about the use of Scratch in and out of the classroom, creative computing, Scratch extensions, and other important themes related to Scratch's adoption in Brazil. We are planning something very participatory, with lots of hands-on workshops, poster sessions and opportunities for collaboration.", @@ -36,4 +36,4 @@ "conference-2017.costaricaSubTitle": "People, Projects, and Places", "conference-2017.costaricaDesc": "Scratch Conference Costa Rica is a global event taking place at a community level that unites teachers, students, businesses, and leaders, so that coding and design is part of every child's education, starting with Scratch.", "conference-2017.costaricaAudience": "Scratch users, teachers, college professors, potential Scratchers, university students (future teachers and software developers) in Costa Rica and Spanish-speaking Latin America" -} \ No newline at end of file +} diff --git a/src/views/credits/credits.jsx b/src/views/credits/credits.jsx index 0830303cc..496aeca42 100644 --- a/src/views/credits/credits.jsx +++ b/src/views/credits/credits.jsx @@ -17,26 +17,71 @@ var Credits = React.createClass({ <p><FormattedMessage id='credits.developers' /></p> <ul> + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/2755634_170x170.png" alt="Christan Avatar" /> + <span className="name">Christan Balch</span> + </li> + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/3581881_170x170.png" alt="Carl Avatar" /> + <span className="name">Carl Bowman</span> + </li> + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/4598206_170x170.png" alt="Kasia Avatar" /> + <span className="name">Kasia Chmielinski</span> + </li> + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/1494_170x170.png" alt="Chris Avatar" /> + <span className="name">Chris Garrity</span> + </li> + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/10866958_170x170.png" alt="Colby Avatar" /> + <span className="name">Colby Gutierrez-Kraybill</span> + </li> + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/21986973_170x170.png" alt="Paul Avatar" /> + <span className="name">Paul Kaplan</span> + </li> + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/2752403_170x170.png" alt="Saskia Avatar" /> + <span className="name">Saskia Leggett</span> + </li> + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/3714374_170x170.png" alt="Shruti Avatar" /> + <span className="name">Shruti Mohnot</span> + </li> + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/246290_170x170.png" alt="Sarah Avatar" /> + <span className="name">Sarah Otts</span> + </li> + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/2286560_170x170.png" alt="Carmelo Avatar" /> + <span className="name">Carmelo Presicce</span> + </li> + <li> <img src="//cdn.scratch.mit.edu/get_image/user/167_170x170.png" alt="Mitchel Avatar" /> <span className="name">Mitchel Resnick</span> </li> - + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/159_170x170.png" alt="ericr Avatar" /> + <span className="name">Eric Rosenbaum</span> + </li> + <li> <img src="//cdn.scratch.mit.edu/get_image/user/169_170x170.png" alt="Natalie Avatar" /> <span className="name">Natalie Rusk</span> </li> - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/573207_170x170.png" alt="Sayamindu Avatar" /> - <span className="name">Sayamindu Dasgupta</span> - </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/13682_170x170.png" alt="Ricarose Avatar" /> - <span className="name">Ricarose Roque</span> - </li> - <li> <img src="//cdn.scratch.mit.edu/get_image/user/2584924_170x170.png" alt="Ray Avatar" /> <span className="name">Ray Schamp</span> @@ -48,83 +93,52 @@ var Credits = React.createClass({ </li> <li> - <img src="//cdn.scratch.mit.edu/get_image/user/3532363_170x170.png" alt="Chris Avatar" /> - <span className="name">Chris Willis-Ford</span> + <img src="//cdn.scratch.mit.edu/get_image/user/1709047_170x170.png" alt="Andrew Avatar" /> + <span className="name">Andrew Sliwinski</span> </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/3581881_170x170.png" alt="Carl Avatar" /> - <span className="name">Carl Bowman</span> - </li> - + <li> <img src="//cdn.scratch.mit.edu/get_image/user/4373707_170x170.png" alt="Matthew Avatar" /> <span className="name">Matthew Taylor</span> </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/4598206_170x170.png" alt="Kasia Avatar" /> - <span className="name">Kasia Chmielinski</span> - </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/703844_170x170.png" alt="Tim Avatar" /> - <span className="name">Tim Mickel</span> - </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/2752403_170x170.png" alt="Saskia Avatar" /> - <span className="name">Saskia Leggett</span> - </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/2755634_170x170.png" alt="Christan Avatar" /> - <span className="name">Christan Balch</span> - </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/10866958_170x170.png" alt="Colby Avatar" /> - <span className="name">Colby Gutierrez-Kraybill</span> - </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/1709047_170x170.png" alt="Andrew Avatar" /> - <span className="name">Andrew Sliwinski</span> - </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/2286560_170x170.png" alt="Carmelo Avatar" /> - <span className="name">Carmelo Presicce</span> - </li> - + <li> <img src="//cdn.scratch.mit.edu/get_image/user/2678986_170x170.png" alt="Moran Avatar" /> <span className="name">Moran Tsur</span> </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/3661900_170x170.png" alt="Juanita Avatar" /> - <span className="name">Juanita Buitrago</span> - </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/3714374_170x170.png" alt="Shruti Avatar" /> - <span className="name">Shruti Mohnot</span> - </li> <li> - <img src="//cdn.scratch.mit.edu/get_image/user/1494_170x170.png" alt="Chris Avatar" /> - <span className="name">Chris Garrity</span> + <img src="//cdn.scratch.mit.edu/get_image/user/3532363_170x170.png" alt="Chris Avatar" /> + <span className="name">Chris Willis-Ford</span> </li> <li> <img src="//cdn.scratch.mit.edu/get_image/user/2796185_170x170.png" alt="Julia Avatar" /> <span className="name">Julia Zimmerman</span> </li> + </ul> + + <p><FormattedMessage id='credits.moderators' /></p> + + <ul> + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/2496866_170x170.png" alt="Jolie Avatar" /> + <span className="name">Jolie Castellucci</span> + </li> <li> - <img src="//cdn.scratch.mit.edu/get_image/user/246290_170x170.png" alt="Sarah Avatar" /> - <span className="name">Sarah Otts</span> + <img src="//cdn.scratch.mit.edu/get_image/user/1048810_170x170.png" alt="Linda Avatar" /> + <span className="name">Linda Fernsel</span> + </li> + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/49156_170x170.png" alt="Mark Avatar" /> + <span className="name">Mark Goff</span> + </li> + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/4836354_170x170.png" alt="Christina Avatar" /> + <span className="name">Christina Huang</span> </li> <li> @@ -132,50 +146,6 @@ var Credits = React.createClass({ <span className="name">Connor Hudson</span> </li> - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/17618638_170x170.png" alt="Hanako Avatar" /> - <span className="name">Hanako Tjia</span> - </li> - </ul> - - <p><FormattedMessage id='credits.moderators' /></p> - - <ul> - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/49156_170x170.png" alt="Mark Avatar" /> - <span className="name">Mark Goff</span> - </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/159139_170x170.png" alt="Franchette Avatar" /> - <span className="name">Franchette Viloria</span> - </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/2496866_170x170.png" alt="Jolie Avatar" /> - <span className="name">Jolie Castellucci</span> - </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/373646_170x170.png" alt="Dalton Avatar" /> - <span className="name">Dalton Miner</span> - </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/4836354_170x170.png" alt="Christina Avatar" /> - <span className="name">Christina Huang</span> - </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/4747093_170x170.png" alt="Annie Avatar" /> - <span className="name">Annie Whitehouse</span> - </li> - - <li> - <img src="//cdn.scratch.mit.edu/get_image/user/1048810_170x170.png" alt="Linda Avatar" /> - <span className="name">Linda Fernsel</span> - </li> - <li> <img src="//cdn.scratch.mit.edu/get_image/user/14110644_170x170.png" alt="Lily Avatar" /> <span className="name">Lily Kim</span> @@ -185,6 +155,26 @@ var Credits = React.createClass({ <img src="//cdn.scratch.mit.edu/get_image/user/13639421_170x170.png" alt="Tauntaun Avatar" /> <span className="name">Tauntaun Kim</span> </li> + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/373646_170x170.png" alt="Dalton Avatar" /> + <span className="name">Dalton Miner</span> + </li> + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/17618638_170x170.png" alt="Hanako Avatar" /> + <span className="name">Hanako Tjia</span> + </li> + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/159139_170x170.png" alt="Franchette Avatar" /> + <span className="name">Franchette Viloria</span> + </li> + + <li> + <img src="//cdn.scratch.mit.edu/get_image/user/4747093_170x170.png" alt="Annie Avatar" /> + <span className="name">Annie Whitehouse</span> + </li> </ul> <h2><FormattedMessage id='credits.previousTitle' /></h2> diff --git a/src/views/credits/l10n.json b/src/views/credits/l10n.json index b34bddb18..01c3d92b8 100644 --- a/src/views/credits/l10n.json +++ b/src/views/credits/l10n.json @@ -3,7 +3,7 @@ "credits.developers": "Scratch is designed and developed by the Lifelong Kindergarten Group at MIT Media Lab:", "credits.moderators": "The team of Scratch moderators manages, supports, and improves the Scratch online community:", "credits.previousTitle": "Previous MIT Scratch Team Members", - "credits.previousBody": "Many important contributions have been made by previous Scratch Team members, including John Maloney (who led software development for the first decade of Scratch), Andrés Monroy-Hernández (who led the development of the first Scratch community website), Amos Blanton, Champika Fernando, Shane Clements, Abdulrahman idlbi, Evelyn Eastmond, Amon Millner, Eric Rosenbaum, Jay Silver, Karen Brennan, Leo Burd, Oren Zuckerman, Gaia Carini, Michelle Chung, Margarita Dekoli, Dave Feinberg, Megan Haddadi, Chris Graves, Tony Hwang, Di Liu, Tammy Stern, Lis Sylvan, Claudia Urrea, Ben Berg, Hannah Cole, Andrea Saxman, and Randy Jou.", + "credits.previousBody": "Many important contributions have been made by previous Scratch Team members, including John Maloney (who led software development for the first decade of Scratch), Andrés Monroy-Hernández (who led the development of the first Scratch community website), Ben Berg, Amos Blanton, Karen Brennan, Juanita Buitrago, Leo Burd, Gaia Carini, Michelle Chung, Shane Clements, Hannah Cole, Sayamindu Dasgupta, Margarita Dekoli, Evelyn Eastmond, Dave Feinberg, Champika Fernando, Chris Graves, Megan Haddadi, Tony Hwang, Abdulrahman Idlbi, Randy Jou, Di Liu, Tim Mickel, Amon Millner, Ricarose Roque, Andrea Saxman, Jay Silver, Tammy Stern, Lis Sylvan, Claudia Urrea, and Oren Zuckerman.", "credits.partnersTitle": "Design and Development Partners", "credits.partnersBody": "Paula Bontá and Brian Silverman, Playful Invention Company (who started contributing to the design of Scratch even before it was called Scratch).", "credits.researchersTitle": "Scratch Researchers", diff --git a/src/views/jobs/jobs.jsx b/src/views/jobs/jobs.jsx index 92c040dde..9926622ec 100644 --- a/src/views/jobs/jobs.jsx +++ b/src/views/jobs/jobs.jsx @@ -31,16 +31,16 @@ var Jobs = React.createClass({ <h3><FormattedMessage id='jobs.openings' /></h3> <ul> <li> - <a href="http://bit.ly/2f5hABE"> - Trust & Safety Manager + <a href="/jobs/moderator"> + Community Moderator </a> <span> - (MIT Media Lab, Cambridge, MA) + MIT Media Lab, Cambridge, MA (or Remote) </span> </li> <li> - <a href="http://media.mit.edu/about/opportunities/senior-backend-engineer-scratch"> - Senior Back-end Engineer + <a href="http://bit.ly/2f5hABE"> + Trust & Safety Manager </a> <span> (MIT Media Lab, Cambridge, MA) diff --git a/src/views/jobs/moderator/moderator.jsx b/src/views/jobs/moderator/moderator.jsx new file mode 100644 index 000000000..b719c57fa --- /dev/null +++ b/src/views/jobs/moderator/moderator.jsx @@ -0,0 +1,94 @@ +var React = require('react'); +var render = require('../../../lib/render.jsx'); + +var Page = require('../../../components/page/www/page.jsx'); +var InformationPage = require('../../../components/informationpage/informationpage.jsx'); + +var Moderator = React.createClass({ + type: 'Moderator', + render: function () { + return ( + <InformationPage title={'Community Moderator'}> + <div className="inner info-inner"> + <p> + Interested in kids, creativity, and online communities? + We're seeking community moderators to work with the Scratch + Team. Moderators will support creative activities and + positive interactions on Scratch — a free online community + where young people program and share interactive stories, + games, and animations. Scratch has grown to more than 20 + million registered members (ages 8 and up), creating and + sharing thousands of projects each day. Moderators will + gain valuable experience working online with youth in a + creative, interest driven setting. + </p> + <h3>Responsibilities:</h3> + <ul> + <li> + Participate actively in the Scratch online community as + a mentor and resource for youth + </li> + <li> + Help moderate projects, studios, and comments on the + website + </li> + <li> + Support youth volunteer programs in the online community + </li> + <li> + Promote the values and core ideas of the Scratch project + (such as remixing, creative collaboration, and + constructive feedback) + </li> + </ul> + <br/> + <h3>Qualifications:</h3> + <ul> + <li> + Active participation in online communities, forums, or + other webbased media + </li> + <li> + Excellent writing and communication skills + </li> + <li> + Good at considering issues from multiple perspectives + </li> + <li> + Able to work independently and as part of a team + </li> + <li> + Interest in visual arts, programming, or teaching + </li> + <li> + Not required, but would be cool: Ability to speak another + language + </li> + </ul> + <br/> + <p> + This position is part-time (10-12 hours per week) under contract. + All candidates must be at least 18 years old and have + authorization to work in the United States. + </p> + <p><b>(MIT Media Lab, Cambridge, MA or Remote)</b></p> + <p> + Send a copy of your resume, links to one or more of your online + presences, and cover letter to{' '} + <a href="mailto:jobs+moderator@scratch.mit.edu"> + jobs+moderator@scratch.mit.edu</a>. + </p> + <p> + <i> + Really want the gig? <a href="/create">Create</a> an + awesome Scratch project to introduce yourself, share + it on the Scratch website, and send us a link. + </i> + </p> + </div> + </InformationPage> + ); + } +}); + +render(<Page><Moderator /></Page>, document.getElementById('app')); diff --git a/src/views/teacherregistration/teacherregistration.jsx b/src/views/teacherregistration/teacherregistration.jsx index 46cc34c7c..d468085ae 100644 --- a/src/views/teacherregistration/teacherregistration.jsx +++ b/src/views/teacherregistration/teacherregistration.jsx @@ -50,6 +50,7 @@ var TeacherRegistration = intl.injectIntl(React.createClass({ this.state.formData.user.gender ), country: this.state.formData.user.country, + subscribe: formData.subscribe, is_robot: this.state.formData.user.isRobot, first_name: this.state.formData.user.name.first, last_name: this.state.formData.user.name.last,