Merge pull request #992 from LLK/release/2.2.14

[Master] Release 2.2.14
This commit is contained in:
Ray Schamp 2016-10-31 16:25:04 -04:00 committed by GitHub
commit dacc51d1ae
44 changed files with 418 additions and 239 deletions

View file

@ -1,11 +1,17 @@
{
"en": {
"cards.starterLink": "//scratch.mit.edu/scratchr2/static/pdfs/help/Scratch2Cards.pdf",
"cards.nameLink": "//scratch.mit.edu/scratchr2/static/pdfs/help/AnimateYourNameCards.pdf",
"cards.pongLink": "//scratch.mit.edu/scratchr2/static/pdfs/help/PongCards.pdf",
"cards.storyLink": "//scratch.mit.edu/scratchr2/static/pdfs/help/StoryCards.pdf",
"cards.danceLink": "//scratch.mit.edu/scratchr2/static/pdfs/help/DanceCards.pdf",
"cards.hideLink": "//scratch.mit.edu/scratchr2/static/pdfs/help/Hide-and-Seek-Cards.pdf"
"cards.starterLink": "/pdfs/cards/Scratch2Cards.pdf",
"cards.nameLink": "/pdfs/cards/AnimateYourNameCards.pdf",
"cards.flyLink": "/pdfs/cards/FlyCards.pdf",
"cards.raceLink": "/pdfs/cards/RaceGameCards.pdf",
"cards.musicLink": "/pdfs/cards/MusicCards.pdf",
"cards.hideLink": "/pdfs/cards/Hide-and-Seek-Cards.pdf",
"cards.storyLink": "/pdfs/cards/StoryCards.pdf",
"cards.dressupLink": "/pdfs/cards/DressupCards.pdf",
"cards.pongLink": "/pdfs/cards/PongCards.pdf",
"cards.danceLink": "/pdfs/cards/DanceCards.pdf",
"cards.catchLink": "/pdfs/cards/CatchCards.pdf",
"cards.petLink": "/pdfs/cards/PetCards.pdf"
},
"ar": {
"cards.starterLink": "//cdn.scratch.mit.edu/scratchr2/static/pdfs/help/ar/Scratch2Cards.pdf"

View file

@ -34,7 +34,6 @@
"it": "Italiano",
"kn": "ಭಾಷೆ-ಹೆಸರು",
"rw": "Kinyarwanda",
"km": "សំលៀកបំពាក",
"ht": "Kreyòl",
"ku": "Kurdî",
"la": "Latina",

View file

@ -10,6 +10,12 @@ var Types = keyMirror({
SET_STATUS: null
});
var banWhitelistPaths = [
'/accounts/banned-response/',
'/community_guidelines/',
'/community_guidelines'
];
module.exports.Status = keyMirror({
FETCHED: null,
NOT_FETCHED: null,
@ -71,7 +77,7 @@ module.exports.refreshSession = function () {
if (
body.user &&
body.user.banned &&
window.location.pathname !== '/accounts/banned-response/') {
banWhitelistPaths.indexOf(window.location.pathname) === -1) {
return window.location = '/accounts/banned-response/';
} else if (
body.flags &&

View file

@ -21,40 +21,60 @@ var Cards = injectIntl(React.createClass({
var locale = this.props.intl.locale || 'en';
var formatMessage = this.props.intl.formatMessage;
var englishLinks = {
'cards.starterLink': '//scratch.mit.edu/scratchr2/static/pdfs/help/Scratch2Cards.pdf',
'cards.nameLink': '//scratch.mit.edu/scratchr2/static/pdfs/help/AnimateYourNameCards.pdf',
'cards.pongLink': '//scratch.mit.edu/scratchr2/static/pdfs/help/PongCards.pdf',
'cards.storyLink': '//scratch.mit.edu/scratchr2/static/pdfs/help/StoryCards.pdf',
'cards.danceLink': '//scratch.mit.edu/scratchr2/static/pdfs/help/DanceCards.pdf',
'cards.hideLink': '//scratch.mit.edu/scratchr2/static/pdfs/help/Hide-and-Seek-Cards.pdf'
'cards.starterLink': '/pdfs/cards/Scratch2Cards.pdf',
'cards.nameLink': '/pdfs/cards/AnimateYourNameCards.pdf',
'cards.flyLink': '/pdfs/cards/FlyCards.pdf',
'cards.raceLink': '/pdfs/cards/RaceGameCards.pdf',
'cards.musicLink': '/pdfs/cards/MusicCards.pdf',
'cards.hideLink': '/pdfs/cards/Hide-and-Seek-Cards.pdf',
'cards.storyLink': '/pdfs/cards/StoryCards.pdf',
'cards.dressupLink': '/pdfs/cards/DressupCards.pdf',
'cards.pongLink': '/pdfs/cards/PongCards.pdf',
'cards.danceLink': '/pdfs/cards/DanceCards.pdf',
'cards.catchLink': '/pdfs/cards/CatchCards.pdf',
'cards.petLink': '/pdfs/cards/PetCards.pdf'
};
var formattedLinks = {
'cards.starterLink': formatMessage({id: 'cards.starterLink'}),
'cards.nameLink': formatMessage({id: 'cards.nameLink'}),
'cards.pongLink': formatMessage({id: 'cards.pongLink'}),
'cards.flyLink': formatMessage({id: 'cards.flyLink'}),
'cards.raceLink': formatMessage({id: 'cards.raceLink'}),
'cards.musicLink': formatMessage({id: 'cards.musicLink'}),
'cards.hideLink': formatMessage({id: 'cards.hideLink'}),
'cards.storyLink': formatMessage({id: 'cards.storyLink'}),
'cards.dressupLink': formatMessage({id: 'cards.dressupLink'}),
'cards.pongLink': formatMessage({id: 'cards.pongLink'}),
'cards.danceLink': formatMessage({id: 'cards.danceLink'}),
'cards.hideLink': formatMessage({id: 'cards.hideLink'})
'cards.catchLink': formatMessage({id: 'cards.catchLink'}),
'cards.petLink': formatMessage({id: 'cards.petLink'})
};
return (
<div className="inner cards">
<div className="intro cards-intro">
<div className="intro-content">
<h1><FormattedMessage id='cards.introHeader' /></h1>
<p><FormattedMessage id='cards.introContent' /></p>
<div className="cards-intro">
<div className="cards-intro-content">
<h1 className="cards-intro-content-header">
<FormattedMessage id='cards.introHeader' />
</h1>
<p className="cards-intro-content-body">
<FormattedMessage id='cards.introContent' />
</p>
</div>
<img src='/images/cards/card-use-overview.png' alt="Card Use Explanation" />
<img src='/images/cards/card-use-overview.png'
alt="Card Use Explanation"
className="cards-intro-img" />
</div>
<div className='cards-container'>
<div className="cards-container">
<Box title={''}>
<FlexRow>
<div>
<h4><FormattedMessage id='cards.starter' /></h4>
<a href={formattedLinks['cards.starterLink']}>
<img src="/images/cards/cards-starter.png" alt="" />
<div className="flex-row-card">
<h4 className="flex-row-card-header">
<FormattedMessage id='cards.starter' />
</h4>
<a className="flex-row-card-link" href={formattedLinks['cards.starterLink']}>
<img src="/images/cards/cards-starter.jpg" alt="" />
</a>
<a href={formattedLinks['cards.starterLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className='pdf-icon' />
<a className="flex-row-card-link" href={formattedLinks['cards.starterLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className="flex-row-card-link-icon" />
<FormattedMessage id='cards.viewCard' />
{(
this.pdfLocaleMismatch(
@ -67,13 +87,15 @@ var Cards = injectIntl(React.createClass({
] : []}
</a>
</div>
<div>
<h4><FormattedMessage id='cards.name' /></h4>
<a href={formattedLinks['cards.nameLink']}>
<img src="/images/cards/cards-name.png" alt="" />
<div className="flex-row-card">
<h4 className="flex-row-card-header">
<FormattedMessage id='cards.name' />
</h4>
<a className="flex-row-card-link" href={formattedLinks['cards.nameLink']}>
<img src="/images/cards/cards-name.jpg" alt="" />
</a>
<a href={formattedLinks['cards.nameLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className='pdf-icon' />
<a className="flex-row-card-link" href={formattedLinks['cards.nameLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className="flex-row-card-link-icon" />
<FormattedMessage id='cards.viewCard' />
{(
this.pdfLocaleMismatch(
@ -86,34 +108,99 @@ var Cards = injectIntl(React.createClass({
] : []}
</a>
</div>
<div>
<h4><FormattedMessage id='cards.pong' /></h4>
<a href={formattedLinks['cards.pongLink']}>
<img src="/images/cards/cards-pong.png" alt="" />
<div className="flex-row-card">
<h4 className="flex-row-card-header">
<FormattedMessage id='cards.fly' />
</h4>
<a className="flex-row-card-link" href={formattedLinks['cards.flyLink']}>
<img src="/images/cards/cards-fly.jpg" alt="" />
</a>
<a href={formattedLinks['cards.pongLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className='pdf-icon' />
<a className="flex-row-card-link" href={formattedLinks['cards.flyLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className="flex-row-card-link-icon" />
<FormattedMessage id='cards.viewCard' />
{(
this.pdfLocaleMismatch(
locale,
formattedLinks['cards.pongLink'],
englishLinks['cards.pongLink']
formattedLinks['cards.flyLink'],
englishLinks['cards.flyLink']
)
) ? [
<span> (<FormattedMessage id='cards.english' />)</span>
] : []}
</a>
</div>
</FlexRow>
<FlexRow>
<div>
<h4><FormattedMessage id='cards.story' /></h4>
<a href={formattedLinks['cards.storyLink']}>
<img src="/images/cards/cards-story.png" alt="" />
<div className="flex-row-card">
<h4 className="flex-row-card-header">
<FormattedMessage id='cards.race' />
</h4>
<a className="flex-row-card-link" href={formattedLinks['cards.raceLink']}>
<img src="/images/cards/cards-race.jpg" alt="" />
</a>
<a href={formattedLinks['cards.storyLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className='pdf-icon' />
<a className="flex-row-card-link" href={formattedLinks['cards.raceLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className="flex-row-card-link-icon" />
<FormattedMessage id='cards.viewCard' />
{(
this.pdfLocaleMismatch(
locale,
formattedLinks['cards.raceLink'],
englishLinks['cards.raceLink']
)
) ? [
<span> (<FormattedMessage id='cards.english' />)</span>
] : []}
</a>
</div>
<div className="flex-row-card">
<h4 className="flex-row-card-header">
<FormattedMessage id='cards.music' />
</h4>
<a className="flex-row-card-link" href={formattedLinks['cards.musicLink']}>
<img src="/images/cards/cards-music.jpg" alt="" />
</a>
<a className="flex-row-card-link" href={formattedLinks['cards.musicLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className="flex-row-card-link-icon" />
<FormattedMessage id='cards.viewCard' />
{(
this.pdfLocaleMismatch(
locale,
formattedLinks['cards.musicLink'],
englishLinks['cards.musicLink']
)
) ? [
<span> (<FormattedMessage id='cards.english' />)</span>
] : []}
</a>
</div>
<div className="flex-row-card">
<h4 className="flex-row-card-header">
<FormattedMessage id='cards.hide' />
</h4>
<a className="flex-row-card-link" href={formattedLinks['cards.hideLink']}>
<img src="/images/cards/cards-hide.jpg" alt="" />
</a>
<a className="flex-row-card-link" href={formattedLinks['cards.hideLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className="flex-row-card-link-icon" />
<FormattedMessage id='cards.viewCard' />
{(
this.pdfLocaleMismatch(
locale,
formattedLinks['cards.hideLink'],
englishLinks['cards.hideLink']
)
) ? [
<span> (<FormattedMessage id='cards.english' />)</span>
] : []}
</a>
</div>
<div className="flex-row-card">
<h4 className="flex-row-card-header">
<FormattedMessage id='cards.story' />
</h4>
<a className="flex-row-card-link" href={formattedLinks['cards.storyLink']}>
<img src="/images/cards/cards-story.jpg" alt="" />
</a>
<a className="flex-row-card-link" href={formattedLinks['cards.storyLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className="flex-row-card-link-icon" />
<FormattedMessage id='cards.viewCard' />
{(
this.pdfLocaleMismatch(
@ -126,13 +213,57 @@ var Cards = injectIntl(React.createClass({
] : []}
</a>
</div>
<div>
<h4><FormattedMessage id='cards.dance' /></h4>
<a href={formattedLinks['cards.danceLink']}>
<img src="/images/cards/cards-dance.png" alt="" />
<div className="flex-row-card">
<h4 className="flex-row-card-header">
<FormattedMessage id='cards.dressup' />
</h4>
<a className="flex-row-card-link" href={formattedLinks['cards.dressupLink']}>
<img src="/images/cards/cards-dressup.jpg" alt="" />
</a>
<a href={formattedLinks['cards.danceLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className='pdf-icon' />
<a className="flex-row-card-link" href={formattedLinks['cards.dressupLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className="flex-row-card-link-icon" />
<FormattedMessage id='cards.viewCard' />
{(
this.pdfLocaleMismatch(
locale,
formattedLinks['cards.dressupLink'],
englishLinks['cards.dressupLink']
)
) ? [
<span> (<FormattedMessage id='cards.english' />)</span>
] : []}
</a>
</div>
<div className="flex-row-card">
<h4 className="flex-row-card-header">
<FormattedMessage id='cards.pong' />
</h4>
<a className="flex-row-card-link" href={formattedLinks['cards.pongLink']}>
<img src="/images/cards/cards-pong.jpg" alt="" />
</a>
<a className="flex-row-card-link" href={formattedLinks['cards.pongLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className="flex-row-card-link-icon" />
<FormattedMessage id='cards.viewCard' />
{(
this.pdfLocaleMismatch(
locale,
formattedLinks['cards.pongLink'],
englishLinks['cards.pongLink']
)
) ? [
<span> (<FormattedMessage id='cards.english' />)</span>
] : []}
</a>
</div>
<div className="flex-row-card">
<h4 className="flex-row-card-header">
<FormattedMessage id='cards.dance' />
</h4>
<a className="flex-row-card-link" href={formattedLinks['cards.danceLink']}>
<img src="/images/cards/cards-dance.jpg" alt="" />
</a>
<a className="flex-row-card-link" href={formattedLinks['cards.danceLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className="flex-row-card-link-icon" />
<FormattedMessage id='cards.viewCard' />
{(
this.pdfLocaleMismatch(
@ -145,19 +276,42 @@ var Cards = injectIntl(React.createClass({
] : []}
</a>
</div>
<div>
<h4><FormattedMessage id='cards.hide' /></h4>
<a href={formattedLinks['cards.hideLink']}>
<img src="/images/cards/cards-hide.png" alt="" />
<div className="flex-row-card">
<h4 className="flex-row-card-header">
<FormattedMessage id='cards.catch' />
</h4>
<a className="flex-row-card-link" href={formattedLinks['cards.catchLink']}>
<img src="/images/cards/cards-catch.jpg" alt="" />
</a>
<a href={formattedLinks['cards.hideLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className='pdf-icon' />
<a className="flex-row-card-link" href={formattedLinks['cards.catchLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className="flex-row-card-link-icon" />
<FormattedMessage id='cards.viewCard' />
{(
this.pdfLocaleMismatch(
locale,
formattedLinks['cards.hideLink'],
englishLinks['cards.hideLink']
formattedLinks['cards.catchLink'],
englishLinks['cards.catchLink']
)
) ? [
<span> (<FormattedMessage id='cards.english' />)</span>
] : []}
</a>
</div>
<div className="flex-row-card">
<h4 className="flex-row-card-header">
<FormattedMessage id='cards.pet' />
</h4>
<a className="flex-row-card-link" href={formattedLinks['cards.petLink']}>
<img src="/images/cards/cards-pet.jpg" alt="" />
</a>
<a className="flex-row-card-link" href={formattedLinks['cards.petLink']}>
<img src="/svgs/pdf-icon-ui-blue.svg" alt="" className="flex-row-card-link-icon" />
<FormattedMessage id='cards.viewCard' />
{(
this.pdfLocaleMismatch(
locale,
formattedLinks['cards.petLink'],
englishLinks['cards.petLink']
)
) ? [
<span> (<FormattedMessage id='cards.english' />)</span>

View file

@ -1,57 +1,47 @@
@import "../../colors";
@import "../../frameless";
.cards {
// type-specific margins
h4 {
margin: 1.5em 0 .3em;
}
h1 {
margin: .75em 0 .3em;
}
p {
margin: .25em 0 1em;
}
.cards-intro {
display: flex;
margin: 1em 0;
align-items: center;
justify-content: center;
.intro-content {
float: left;
width: 45%;
}
img {
width: 45%;
}
}
.cards-container {
text-align: center;
.flex-row {
div {
padding: .5em;
a {
display: block;
.pdf-icon {
margin-right: .2em;
width: 1em;
}
}
}
@media only screen and (max-width: $desktop - 1) {
flex-direction: column;
justify-content: center;
}
}
// Page header
.cards-intro {
display: flex;
margin: 1rem 0;
align-items: center;
justify-content: space-between;
}
.cards-intro-content {
float: left;
width: 45%;
}
.cards-intro-content-header {
margin: .75rem 0 .5rem;
}
.cards-intro-content-body {
margin: .25rem 0 1rem;
}
.cards-intro-img {
width: 45%;
}
// Cards and Card Container
.cards-container {
text-align: center;
}
.flex-row-card {
margin: 1.5rem 0;
padding: .5rem;
}
.flex-row-card-link {
display: block;
margin-top: .5rem;
}
.flex-row-card-link-icon {
margin-right: .2rem;
width: 1rem;
}

View file

@ -1,8 +1,14 @@
{
"cards.starterLink": "//scratch.mit.edu/scratchr2/static/pdfs/help/Scratch2Cards.pdf",
"cards.nameLink": "//scratch.mit.edu/scratchr2/static/pdfs/help/AnimateYourNameCards.pdf",
"cards.pongLink": "//scratch.mit.edu/scratchr2/static/pdfs/help/PongCards.pdf",
"cards.storyLink": "//scratch.mit.edu/scratchr2/static/pdfs/help/StoryCards.pdf",
"cards.danceLink": "//scratch.mit.edu/scratchr2/static/pdfs/help/DanceCards.pdf",
"cards.hideLink": "//scratch.mit.edu/scratchr2/static/pdfs/help/Hide-and-Seek-Cards.pdf"
"cards.starterLink": "/pdfs/cards/Scratch2Cards.pdf",
"cards.nameLink": "/pdfs/cards/AnimateYourNameCards.pdf",
"cards.flyLink": "/pdfs/cards/FlyCards.pdf",
"cards.raceLink": "/pdfs/cards/RaceGameCards.pdf",
"cards.musicLink": "/pdfs/cards/MusicCards.pdf",
"cards.hideLink": "/pdfs/cards/Hide-and-Seek-Cards.pdf",
"cards.storyLink": "/scratch.mit.edu/pdfs/cards/StoryCards.pdf",
"cards.dressupLink": "/pdfs/cards/DressupCards.pdf",
"cards.pongLink": "/pdfs/cards/PongCards.pdf",
"cards.danceLink": "/pdfs/cards/DanceCards.pdf",
"cards.catchLink": "/pdfs/cards/CatchCards.pdf",
"cards.petLink": "/pdfs/cards/PetCards.pdf"
}

View file

@ -6,8 +6,14 @@
"cards.viewCard": "View Cards",
"cards.starter": "Starter Cards",
"cards.name": "Animate Your Name",
"cards.fly": "Make It Fly",
"cards.race": "Race to the Finish",
"cards.music": "Make Music",
"cards.hide": "Hide and Seek",
"cards.story": "Create a Story",
"cards.dressup": "Dress-Up Game",
"cards.pong": "Create a Pong Game",
"cards.story": "Animate a Story",
"cards.dance": "Dance, Dance, Dance",
"cards.hide": "Hide and Seek"
"cards.dance": "Let's Dance",
"cards.catch": "Catch Game",
"cards.pet": "Virtual Pet"
}

View file

@ -273,7 +273,8 @@ var Credits = React.createClass({
<a href="https://saucelabs.com/"> SauceLabs</a>,
<a href="https://screenhero.com/"> Screenhero</a>,
<a href="https://getsentry.com/welcome/"> Sentry</a>,
and <a href="http://www.git-tower.com/"> Tower</a>.
<a href="http://www.git-tower.com/"> Tower</a>,
and <a href="https://travis-ci.org/"> Travis-CI</a>.
</p>
<p>

View file

@ -1,6 +1,9 @@
var React = require('react');
var render = require('../../lib/render.jsx');
var FormattedHTMLMessage = require('react-intl').FormattedHTMLMessage;
var FormattedMessage = require('react-intl').FormattedMessage;
var Page = require('../../components/page/www/page.jsx');
var FlexRow = require('../../components/flex-row/flex-row.jsx');
var SubNavigation = require('../../components/subnavigation/subnavigation.jsx');
@ -15,38 +18,36 @@ var Developers = React.createClass({
<div className="developers">
<TitleBanner className="masthead">
<div className="inner">
<h1>Scratch for Developers</h1>
<h1><FormattedMessage id='developers.title' /></h1>
<p className="intro">
On this page, youll find information about open source projects created and maintained{' '}
by the <a href="https://scratch.mit.edu/info/credits">Scratch Team at MIT</a>, as well{' '}
as our thoughts on best practices for designing learning experiences for children.
<FormattedHTMLMessage id='developers.intro' />
</p>
</div>
<div className="band">
<SubNavigation className="inner">
<a href="#projects">
<li>
Projects
<FormattedMessage id='developers.projectsTitle' />
</li>
</a>
<a href="#principles">
<li>
Principles
<FormattedMessage id='developers.principlesTitle' />
</li>
</a>
<a href="#donate">
<li>
Donate
<FormattedMessage id='developers.donateTitle' />
</li>
</a>
<a href="#partners">
<li>
Partners
<FormattedMessage id='developers.partnersTitle' />
</li>
</a>
<a href="#faq">
<li>
FAQ
<FormattedMessage id='developers.faqTitle' />
</li>
</a>
</SubNavigation>
@ -58,81 +59,72 @@ var Developers = React.createClass({
<span className="nav-spacer"></span>
<h2>Projects</h2>
<p className="intro">
The following projects are open source and available for any purpose.
<FormattedMessage id='developers.projectsIntro' />
</p>
<FlexRow className="sidebar-row">
<div className="body-copy column">
<h3>Scratch Blocks</h3>
<h3><FormattedMessage id='developers.scratchBlocksTitle' /></h3>
<p>
Scratch Blocks is a new development project for the next generation of{' '}
graphical programming blocks, based on a collaboration between Google and MITs{' '}
Scratch Team building on Googles{' '}
<a href="https://developers.google.com/blockly/">Blockly technology</a>{' '}
and informed by the Scratch Teams expertise in developing creative{' '}
learning tools for young people. Scratch Blocks will provide a framework{' '}
for building programming blocks in both vertical (text-based) and horizontal{' '}
(icon-based) formats. You can access the code (currently as a{' '}
developer-preview) and documentation{' '}
<a href="https://github.com/llk/scratch-blocks">here</a>.
<FormattedHTMLMessage id='developers.scratchBlocksIntro' />
</p>
<p>
This first release includes code for Scratchs Horizontal Grammar. Looking{' '}
ahead, we plan to release additional code including but not limited to the{' '}
Vertical Grammar (currently used by Scratch), a new Rendering Engine to support{' '}
sprites and graphic effects, and a new Audio Engine to support creation with{' '}
sound and music.
<FormattedMessage id='developers.scratchBlocksBody' />
</p>
</div>
<img className="sidebar column" src="/images/developers/block-sketch.png" alt="blocks" />
</FlexRow>
<FlexRow className="sidebar-row">
<div className="body-copy column">
<h3>Scratch WWW</h3>
<h3><FormattedMessage id='developers.wwwTitle' /></h3>
<p>
Scratch-www is a standalone web client for the Scratch Community, built{' '}
using React and Redux. Access the code and documentation{' '}
<a href="https://github.com/LLK/scratch-www">here</a>.
<FormattedHTMLMessage id='developers.wwwIntro' />
</p>
</div>
<img className="sidebar column" src="/images/developers/www-sketch.png" alt="www" />
</FlexRow>
<FlexRow className="sidebar-row">
<div className="body-copy column">
<h3>ScratchJr</h3>
<p>
ScratchJr is an introductory programming language{' '}
that enables young children (ages 5-7) to create{' '}
their own interactive stories and games. For more{' '}
information, visit the{' '}
<a href="https://www.scratchjr.org/">ScratchJr website</a>{' '}
or access the code and documentation{' '}
<a href="https://github.com/LLK/scratchjr">here</a>.
</p>
</div>
</FlexRow>
</section>
<section id="principles">
<span className="nav-spacer"></span>
<h2>Principles</h2>
<h2><FormattedMessage id='developers.principlesTitle' /></h2>
<p className="intro">
We created Scratch to empower young people to think creatively, reason systematically,{' '}
and work collaboratively. We are guided by a set of <b>Learning Principles</b> and{' '}
<b>Design Principles</b> that we hope you will follow as you develop new tools and{' '}
technologies with Scratch Blocks.
<FormattedHTMLMessage id='developers.principlesIntro' />
</p>
<FlexRow className="sidebar-row">
<div className="body-copy column">
<h3>Learning Principles</h3>
<h3><FormattedMessage id='developers.learningPrinciplesTitle' /></h3>
<dl>
<dt>Projects</dt>
<dt><FormattedMessage id='developers.learningPrinciplesProjectsTitle' /></dt>
<dd>
People learn best when they are actively working on projects generating{' '}
new ideas, designing prototypes, making improvements and creating final{' '}
products.
<FormattedMessage id='developers.learningPrinciplesProjectsBody' />
</dd>
<dt>Passion</dt>
<dt><FormattedMessage id='developers.learningPrinciplesPassionTitle' /></dt>
<dd>
When people focus on things they care about, they work longer and harder,{' '}
persist in the face of challenges, and learn more in the process.
<FormattedMessage id='developers.learningPrinciplesPassionBody' />
</dd>
<dt>Peers</dt>
<dt><FormattedMessage id='developers.learningPrinciplesPeersTitle' /></dt>
<dd>
Learning flourishes as a social activity, with people sharing ideas,{' '}
collaborating on projects, and building on one another's work.
<FormattedMessage id='developers.learningPrinciplesPeersBody' />
</dd>
<dt>Play</dt>
<dt><FormattedMessage id='developers.learningPrinciplesPlayTitle' /></dt>
<dd>
Learning involves playful experimentation trying new things, tinkering{' '}
with materials, testing boundaries, taking risks, iterating again and again.
<FormattedMessage id='developers.learningPrinciplesPlayBody' />
</dd>
</dl>
</div>
@ -140,33 +132,23 @@ var Developers = React.createClass({
<FlexRow className="sidebar-row">
<div className="body-copy column">
<h3>Design Principles</h3>
<h3><FormattedMessage id='developers.designPrinciplesTitle' /></h3>
<dl>
<dt>Low Floor & Wide Walls</dt>
<dt><FormattedMessage id='developers.designPrinciplesRoomTitle' /></dt>
<dd>
In order to encourage a varied and diverse set of interactions, we{' '}
explicitly include elements and features that are easy for kids to{' '}
understand (low floor), but general enough to support diverse uses (wide walls).
<FormattedMessage id='developers.designPrinciplesRoomBody' />
</dd>
<dt>Make it as Simple as Possible And Maybe Even Simpler</dt>
<dt><FormattedMessage id='developers.designPrinciplesSimpleTitle' /></dt>
<dd>
Despite the common drive to add more features to software products, we{' '}
have found that reducing the number of features often improves the user{' '}
experience. What initially seems like a constraint or limitation can foster{' '}
new forms of creativity.
<FormattedMessage id='developers.designPrinciplesSimpleBody' />
</dd>
<dt>Many Paths, Many Styles</dt>
<dt><FormattedMessage id='developers.designPrinciplesGlobalTitle' /></dt>
<dd>
Many math and science activities have traditionally been biased towards{' '}
specific populations. By paying special attention to creating accessible{' '}
and appealing technologies, we are working to close the gap.
<FormattedMessage id='developers.designPrinciplesGlobalBody' />
</dd>
<dt>Design for Tinkerability</dt>
<dt><FormattedMessage id='developers.designPrinciplesTinkerTitle' /></dt>
<dd>
We believe that the learning process is inherently iterative. Tinkerers{' '}
start by exploring and experimenting, then revising and refining their{' '}
goals and creations. To support this style of interaction, we design{' '}
our interfaces to encourage quick experimentation and rapid cycles of iteration.
<FormattedMessage id='developers.designPrinciplesTinkerBody' />
</dd>
</dl>
</div>
@ -175,27 +157,23 @@ var Developers = React.createClass({
<section id="donate">
<span className="nav-spacer"></span>
<h2>Donate</h2>
<h2><FormattedMessage id='developers.donateTitle' /></h2>
<p>
We are pleased to provide Scratch free of charge. If you enjoy using Scratch, please{' '}
consider <a href="https://secure.donationpay.org/scratchfoundation/">making a donation{' '}
to support Scratch</a>. Donations of any size are appreciated.
<FormattedHTMLMessage id='developers.donateIntro' />
</p>
<p>
Your donation to the Scratch Foundation will be used to support future development of{' '}
Scratch software and the Scratch website.
<FormattedMessage id='developers.donateBody' />
</p>
<p>
Thanks for supporting Scratch!
<FormattedMessage id='developers.donateThanks' />
</p>
</section>
<section id="partners">
<span className="nav-spacer"></span>
<h3>Partners</h3>
<h3><FormattedMessage id='developers.partnersTitle' /></h3>
<p>
The creation and maintenance of this open source code would not be possible without{' '}
generous technical and financial support from our partners:
<FormattedMessage id='developers.partnersIntro' />
</p>
<FlexRow className="logos">
@ -211,61 +189,44 @@ var Developers = React.createClass({
<div className="inner">
<section id="faq">
<span className="nav-spacer"></span>
<h3>FAQ</h3>
<h3><FormattedMessage id='developers.faqTitle' /></h3>
<FlexRow className="three-col-row">
<div className="faq column">
<h4>Where can I learn more about Scratch?</h4>
<h4><FormattedMessage id='developers.faqAboutTitle' /></h4>
<p>
Scratch is a free programming language and online community where young{' '}
people can create their own interactive stories, games, and animations.{' '}
Scratch is a project of the{' '}
<a href="https://llk.media.mit.edu/">Lifelong Kindergarten</a>{' '}
Group at the <a href="http://media.mit.edu/">MIT Media Lab</a>.{' '}
You can learn more about Scratch{' '}
<a href="https://scratch.mit.edu/about">here</a>.
<FormattedHTMLMessage id='developers.faqAboutBody' />
</p>
</div>
<div className="faq column">
<h4>Are there rules to using this code in my application?</h4>
<h4><FormattedMessage id='developers.faqRulesTitle' /></h4>
<p>
You may use this code in accordance with the license which governs{' '}
each project. We also strongly encourage you to consider the learning{' '}
and design principles (above, on this page) when building creative{' '}
learning experiences for kids of all ages.
<FormattedMessage id='developers.faqRulesBody' />
</p>
</div>
<div className="faq column">
<h4>
Am I allowed to use the name "Scratch Blocks" in the description of my{' '}
app and other public messaging?
<FormattedMessage id='developers.faqNameTitle' />
</h4>
<p>
If you wish, you can publicly state that your application is powered by{' '}
Scratch Blocks. If you do so, we would also encourage you to link back to{' '}
the code repository.
<FormattedMessage id='developers.faqNameBody' />
</p>
</div>
<div className="faq column">
<h4>Are you releasing more code and when?</h4>
<h4><FormattedMessage id='developers.faqReleasesTitle' /></h4>
<p>
We plan to open source additional code relating to the Scratch programming{' '}
language over the next few months. Keep an eye on this page!
<FormattedMessage id='developers.faqReleasesBody' />
</p>
</div>
<div className="faq column">
<h4>Whats the difference between Blockly and Scratch Blocks?</h4>
<h4><FormattedMessage id='developers.faqDifferencesTitle' /></h4>
<p>
Scratch Blocks builds upon the Blockly code base, and is specifically{' '}
designed with our principles in mind to support creative learning experiences.
<FormattedMessage id='developers.faqDifferencesBody' />
</p>
</div>
<div className="faq column">
<h4>Id like to collaborate. How do I get in touch?</h4>
<h4><FormattedMessage id='developers.faqCollabTitle' /></h4>
<p>
You can reach us over on <a href="https://github.com/LLK/">github</a> or{' '}
you can send an email to{' '}
<a href="mailto:help@scratch.mit.edu">help@scratch.mit.edu.</a>{' '}
We look forward to hearing from you!
<FormattedHTMLMessage id='developers.faqCollabBody' />
</p>
</div>
</FlexRow>

View file

@ -1 +1,50 @@
{}
{
"developers.title": "Scratch for Developers",
"developers.intro": "On this page, youll find information about open source projects created and maintained by the <a href=\"/info/credits\">Scratch Team at MIT</a>, as well as our thoughts on best practices for designing learning experiences for children.",
"developers.projectsTitle": "Projects",
"developers.principlesTitle": "Principles",
"developers.donateTitle": "Donate",
"developers.partnersTitle": "Partners",
"developers.faqTitle": "FAQ",
"developers.projectsIntro": "The following projects are open source and available for any purpose.",
"developers.scratchBlocksTitle": "Scratch Blocks",
"developers.scratchBlocksIntro": "Scratch Blocks is a new development project for the next generation of graphical programming blocks, based on a collaboration between Google and MITs Scratch Team — building on Googles <a href=\"https://developers.google.com/blockly/\">Blockly technology</a> and informed by the Scratch Teams expertise in developing creative learning tools for young people. Scratch Blocks will provide a framework for building programming blocks in both vertical (text-based) and horizontal (icon-based) formats. You can access the code (currently as a developer-preview) and documentation <a href=\"https://github.com/llk/scratch-blocks\">here</a>.",
"developers.scratchBlocksBody": "This first release includes code for Scratchs Horizontal Grammar. Looking ahead, we plan to release additional code including but not limited to the Vertical Grammar (currently used by Scratch), a new Rendering Engine to support sprites and graphic effects, and a new Audio Engine to support creation with sound and music.",
"developers.wwwTitle": "Scratch WWW",
"developers.wwwIntro": "Scratch-www is a standalone web client for the Scratch Community, built using React and Redux. Access the code and documentation <a href=\"https://github.com/LLK/scratch-www\">here</a>.",
"developers.principlesIntro": "We created Scratch to empower young people to think creatively, reason systematically, and work collaboratively. We are guided by a set of <b>Learning Principles</b> and <b>Design Principles</b> that we hope you will follow as you develop new tools and technologies with Scratch Blocks.",
"developers.learningPrinciplesTitle": "Learning Principles",
"developers.learningPrinciplesProjectsTitle": "Projects",
"developers.learningPrinciplesProjectsBody": "People learn best when they are actively working on projects — generating new ideas, designing prototypes, making improvements and creating final products.",
"developers.learningPrinciplesPassionTitle": "Passion",
"developers.learningPrinciplesPassionBody": "When people focus on things they care about, they work longer and harder, persist in the face of challenges, and learn more in the process.",
"developers.learningPrinciplesPeersTitle": "Peers",
"developers.learningPrinciplesPeersBody": "Learning flourishes as a social activity, with people sharing ideas, collaborating on projects, and building on one another's work.",
"developers.learningPrinciplesPlayTitle": "Play",
"developers.learningPrinciplesPlayBody": "Learning involves playful experimentation — trying new things, tinkering with materials, testing boundaries, taking risks, iterating again and again.",
"developers.designPrinciplesTitle": "Design Principles",
"developers.designPrinciplesRoomTitle": "Low Floor & Wide Walls",
"developers.designPrinciplesRoomBody": "In order to encourage a varied and diverse set of interactions, we explicitly include elements and features that are easy for kids to understand (low floor), but general enough to support diverse uses (wide walls).",
"developers.designPrinciplesSimpleTitle": "Make it as Simple as Possible — And Maybe Even Simpler",
"developers.designPrinciplesSimpleBody": "Despite the common drive to add more features to software products, we have found that reducing the number of features often improves the user experience. What initially seems like a constraint or limitation can foster new forms of creativity.",
"developers.designPrinciplesGlobalTitle": "Many Paths, Many Styles",
"developers.designPrinciplesGlobalBody": "Many math and science activities have traditionally been biased towards specific populations. By paying special attention to creating accessible and appealing technologies, we are working to close the gap.",
"developers.designPrinciplesTinkerTitle": "Design for Tinkerability",
"developers.designPrinciplesTinkerBody": "We believe that the learning process is inherently iterative. Tinkerers start by exploring and experimenting, then revising and refining their goals and creations. To support this style of interaction, we design our interfaces to encourage quick experimentation and rapid cycles of iteration.",
"developers.donateIntro": "We are pleased to provide Scratch free of charge. If you enjoy using Scratch, please consider <a href=\"https://secure.donationpay.org/scratchfoundation/\">making a donation to support Scratch</a>. Donations of any size are appreciated.",
"developers.donateBody": "Your donation to the Scratch Foundation will be used to support future development of Scratch software and the Scratch website.",
"developers.donateThanks": "Thanks for supporting Scratch!",
"developers.partnersIntro": "The creation and maintenance of this open source code would not be possible without generous technical and financial support from our partners:",
"developers.faqAboutTitle": "Where can I learn more about Scratch?",
"developers.faqAboutBody": "Scratch is a free programming language and online community where young people can create their own interactive stories, games, and animations. Scratch is a project of the <a href=\"https://llk.media.mit.edu/\">Lifelong Kindergarten</a> Group at the <a href=\"http://media.mit.edu/\">MIT Media Lab</a>. You can learn more about Scratch <a href=\"/about\">here</a>.",
"developers.faqRulesTitle": "Are there rules to using this code in my application?",
"developers.faqRulesBody": "You may use this code in accordance with the license which governs each project. We also strongly encourage you to consider the learning and design principles (above, on this page) when building creative learning experiences for kids of all ages.",
"developers.faqNameTitle": "Am I allowed to use the name \"Scratch Blocks\" in the description of my app and other public messaging?",
"developers.faqNameBody": "If you wish, you can publicly state that your application is powered by Scratch Blocks. If you do so, we would also encourage you to link back to the code repository.",
"developers.faqReleasesTitle": "Are you releasing more code and when?",
"developers.faqReleasesBody": "We plan to open source additional code relating to the Scratch programming language over the next few months. Keep an eye on this page!",
"developers.faqDifferencesTitle": "Whats the difference between Blockly and Scratch Blocks?",
"developers.faqDifferencesBody": "Scratch Blocks builds upon the Blockly code base, and is specifically designed with our principles in mind to support creative learning experiences.",
"developers.faqCollabTitle": "Id like to collaborate. How do I get in touch?",
"developers.faqCollabBody": "You can reach us over on <a href=\"https://github.com/LLK/\">github</a> or you can send an email to <a href=\"mailto:help@scratch.mit.edu\">help@scratch.mit.edu.</a> We look forward to hearing from you!"
}

View file

@ -114,7 +114,7 @@ var Privacypolicy = React.createClass({
<li>
Parents and guardians who register their under-13 year olds for
Scratch may also receive additional updates from the{' '}
<a href="http://www.codetolearn.org/">Scratch Foundation</a>,
<a href="http://www.scratchfoundation.org/">Scratch Foundation</a>,
a non-profit that supports Scratch educational initiatives.
The Scratch Foundation will never sell or share your email
address without your permission. You can unsubscribe from these
@ -203,6 +203,7 @@ var Privacypolicy = React.createClass({
Policy on a regular basis.
</p>
</section>
<p>The Scratch Privacy Policy was last updated: October 2016</p>
</div>
<nav>
<ol>

View file

@ -110,7 +110,7 @@ var Search = injectIntl(React.createClass({
<Input type="text"
aria-label={formatMessage({id: 'general.search'})}
placeholder={formatMessage({id: 'general.search'})}
defaultValue={decodeURI(this.props.searchTerm)}
value={decodeURI(this.props.searchTerm)}
name="q" />
</Form>
</div>

View file

@ -215,7 +215,7 @@ var Splash = injectIntl(React.createClass({
<Box
key="curator_top_projects"
title={
formatMessage({id: 'splash.projectsCuratedBy'}) +
formatMessage({id: 'splash.projectsCuratedBy'}) + ' ' +
this.state.featuredGlobal.curator_top_projects[0].curator_name}
moreTitle={formatMessage({id: 'general.learnMore'})}
moreHref="/studios/386359/">

View file

@ -1,6 +1,6 @@
{
"wedo2.intro": "The LEGO® Education WeDo 2.0 is an introductory invention kit you can use to build your own interactive machines. You can snap together Scratch programming blocks to interact with your LEGO WeDo creations and add animations on the screen.",
"wedo2.requirement": "The LEGO WeDo 2.0 extension is available for Mac OSX and Windows 10+",
"wedo2.requirement": "The LEGO WeDo 2.0 extension is currently only available for Mac OSX. We plan to release a Windows version later in 2016.",
"wedo2.getStarted": "Getting Started with LEGO WeDo 2.0",
"wedo2.installTitle": "1. Install Device Manager",
"wedo2.installText": "The Device Manager lets you connect WeDo 2.0 to Scratch using Bluetooth <a href=\"https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=1084869222&mt=12\">Download Here</a>",

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.