Merge pull request from mewtaylor/issue/gh-856

Implement GH-856: Add new cards and card thumbs to www
This commit is contained in:
Matthew Taylor 2016-10-20 11:23:57 -04:00 committed by GitHub
commit f2b7d4fcf7
35 changed files with 285 additions and 123 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

@ -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"
}

Binary file not shown.

After

(image error) Size: 15 KiB

Binary file not shown.

After

(image error) Size: 15 KiB

Binary file not shown.

Before

(image error) Size: 26 KiB

Binary file not shown.

After

(image error) Size: 16 KiB

Binary file not shown.

After

(image error) Size: 6.8 KiB

Binary file not shown.

After

(image error) Size: 17 KiB

Binary file not shown.

Before

(image error) Size: 40 KiB

Binary file not shown.

After

(image error) Size: 15 KiB

Binary file not shown.

After

(image error) Size: 15 KiB

Binary file not shown.

Before

(image error) Size: 23 KiB

Binary file not shown.

After

(image error) Size: 15 KiB

Binary file not shown.

After

(image error) Size: 16 KiB

Binary file not shown.

Before

(image error) Size: 27 KiB

Binary file not shown.

After

(image error) Size: 15 KiB

Binary file not shown.

After

(image error) Size: 15 KiB

Binary file not shown.

Before

(image error) Size: 28 KiB

Binary file not shown.

After

(image error) Size: 15 KiB

Binary file not shown.

Before

(image error) 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.