diff --git a/src/components/masonrygrid/masonrygrid.jsx b/src/components/masonrygrid/masonrygrid.jsx new file mode 100644 index 00000000000..ef32172e5c1 --- /dev/null +++ b/src/components/masonrygrid/masonrygrid.jsx @@ -0,0 +1,60 @@ +var classNames = require('classnames'); +var React = require('react'); +var MediaQuery = require('react-responsive'); +var frameless = require('../../lib/frameless'); + +require('./masonrygrid.scss'); + +var MasonryGrid = React.createClass({ + type: 'MasonryGrid', + getDefaultProps: function () { + return { + as: 'div' + }; + }, + reorderColumns: function (items, cols) { + var a1 = []; + var a2 = []; + var a3 = []; + var i = 0; + //only implemented for 2 and 3 columns so far - easy to extend if needed + if (cols > 1 && cols < 4) { + for (i=0;i + + {this.props.children} + + + {this.reorderColumns(this.props.children, 2)} + + + {this.reorderColumns(this.props.children, 3)} + + + ); + } +}); + +module.exports = MasonryGrid; diff --git a/src/components/masonrygrid/masonrygrid.scss b/src/components/masonrygrid/masonrygrid.scss new file mode 100644 index 00000000000..07d42f00f6f --- /dev/null +++ b/src/components/masonrygrid/masonrygrid.scss @@ -0,0 +1,38 @@ +@import "../../frameless"; + +.masonry { + column-gap: $gutter; + column-width: $cols4; + padding-bottom: 50px; + -webkit-perspective: 1; +} + +// working around Firefox issue that requires column-count, using explicit -moz-column-count +//4 columns +@media only screen and (max-width: $mobile - 1) { + .masonry { + -moz-column-count: 1; + } +} + +//6 columns +@media only screen and (min-width: $mobile) and (max-width: $tablet - 1) { + .masonry { + -moz-column-count: 1; + } +} + + +//8 columns +@media only screen and (min-width: $tablet) and (max-width: $desktop - 1) { + .masonry { + -moz-column-count: 2; + } +} + +// 12 columns +@media only screen and (min-width: $desktop) { + .masonry { + -moz-column-count: 3; + } +} diff --git a/src/components/ttt-tile/ttt-tile.jsx b/src/components/ttt-tile/ttt-tile.jsx new file mode 100644 index 00000000000..4aac7b568c5 --- /dev/null +++ b/src/components/ttt-tile/ttt-tile.jsx @@ -0,0 +1,56 @@ +var classNames = require('classnames'); +var React = require('react'); +var FormattedMessage = require('react-intl').FormattedMessage; + +require('../forms/button.scss'); +require('./ttt-tile.scss'); + +var TTTTile = React.createClass({ + type: 'TTTTile', + propTypes: { + title: React.PropTypes.string.isRequired, + description: React.PropTypes.string.isRequired, + thumbUrl: React.PropTypes.string.isRequired, + tutorialLoc: React.PropTypes.string.isRequired, + onGuideClick: React.PropTypes.func.isRequired + }, + render: function () { + var classes = classNames( + 'ttt-tile', + this.props.className + ); + return ( +
+ +
+
+ +
+
+ +
+
+
+
+ +
+ +
+

{this.props.title}

+

+ {this.props.description} +

+
+
+ +
+
+ + +
+
+ ); + } +}); + +module.exports = TTTTile; diff --git a/src/components/ttt-tile/ttt-tile.scss b/src/components/ttt-tile/ttt-tile.scss new file mode 100644 index 00000000000..fe9b2b5af80 --- /dev/null +++ b/src/components/ttt-tile/ttt-tile.scss @@ -0,0 +1,118 @@ +@import "../../colors"; +@import "../../frameless"; + +.ttt-tile { + display: inline-block; + // work-around chrome bug with columns support - 1 px of next column ends up + // at the bottom of the previous column. + margin-top: 1px; + margin-bottom: calc(1.25rem - 1px); + + border-radius: 1rem; + box-shadow: 0 0 0 1px $active-gray; + width: $cols4; + text-align: center; +} + +.ttt-tile-tutorial { + display: inline-block; + position: relative; +} + +// nesting is required (not just name-spacing) because we want the image +// and tile box to change style on hover of the parent component. +.ttt-tile-tutorial:hover { + + .ttt-tile-image { + .ttt-tile-image-img { + opacity: .5; + } + + .ttt-tile-image-try { + display: inline-block; + } + } +} + +.ttt-tile-image { + border-radius: 1rem 1rem 0 0; + background: $ui-blue; + width: 100%; +} + +.ttt-tile-image-img { + display: block; + border-radius: 1rem 1rem 0 0; + width: 100%; +} + +// wrapper for try button to get position correct +.ttt-tile-image-try { + display: none; + position: absolute; + top: 4rem; + left: 50%; + transform: translate(-50%, 0); + text-align: center; + color: $ui-white; +} + +.mod-ttt-tile-image-try-button { + border: 1px solid $ui-white; + background-color: transparent; +} + +.ttt-tile-info { + position: relative; + cursor: pointer; + padding: 1rem 0; +} + +.ttt-tile-tag { + display: inline-block; + position: absolute; + top: -1rem; + left: 1rem; + margin: .5em 0; + border: 0; + border-radius: 1rem; + background-color: $ui-blue; + padding: .25rem 1rem; + color: $type-white; + font-size: .8rem; + font-weight: bold; +} + +.ttt-tile-title { + margin: .5rem auto; + width: calc(100% - 3rem); +} + +.ttt-tile-description { + margin: auto; + width: calc(100% - 3rem); + font-size: .875rem; +} + +.ttt-tile-guides { + margin: auto; + border-top: 1px dashed $ui-border; + border-radius: 0 0 1rem 1rem; + cursor: pointer; + padding: 1.25rem 0; + color: $link-blue; + + font-size: .75rem; + font-weight: 500; + + + &:hover { + background-color: lighten($link-blue, 40%); + } +} + +.ttt-tile-see-more { + display: inline-block; + padding: 0 .25rem; + vertical-align: middle; +} diff --git a/src/routes.json b/src/routes.json index 4fed9d38cfb..ea6b0fb72c6 100644 --- a/src/routes.json +++ b/src/routes.json @@ -133,6 +133,13 @@ "view": "cards/cards", "title": "Cards" }, + { + "name": "things-to-try", + "pattern": "^/go/?$", + "routeAlias": "/go/?$", + "view": "thingstotry/thingstotry", + "title": "Things to Try" + }, { "name": "communityblocks-interviews", "pattern": "^/info/communityblocks-interviews/?$", diff --git a/src/views/thingstotry/l10n-static.json b/src/views/thingstotry/l10n-static.json new file mode 100644 index 00000000000..e16bdff848a --- /dev/null +++ b/src/views/thingstotry/l10n-static.json @@ -0,0 +1,24 @@ +{ + "ttt.MakeItFlyActivityLoc": "/pdfs/cards/FlyCards.pdf", + "ttt.MakeItFlyGuideLoc": "/pdfs/guides/FlyGuide.pdf", + "ttt.AnimateYourNameActivityLoc": "/pdfs/cards/AnimateYourNameCards.pdf", + "ttt.AnimateYourNameGuideLoc": "/pdfs/guides/NameGuide.pdf", + "ttt.MakeMusicActivityLoc": "/pdfs/cards/MusicCards.pdf", + "ttt.MakeMusicGuideLoc": "/pdfs/guides/MusicGuide.pdf", + "ttt.RaceActivityLoc": "/pdfs/cards/RaceGameCards.pdf", + "ttt.RaceGuideLoc": "/pdfs/guides/RaceGuide.pdf", + "ttt.DanceActivityLoc": "/pdfs/cards/DanceCards.pdf", + "ttt.DanceGuideLoc": "/pdfs/guides/DanceGuide.pdf", + "ttt.PongActivityLoc": "/pdfs/cards/PongCards.pdf", + "ttt.PongGuideLoc": "/pdfs/guides/PongGuide.pdf", + "ttt.CatchActivityLoc": "/pdfs/cards/CatchCards.pdf", + "ttt.CatchGuideLoc": "/pdfs/guides/CatchGuide.pdf", + "ttt.HideAndSeekActivityLoc": "/pdfs/cards/Hide-and-Seek-Cards.pdf", + "ttt.HideAndSeekGuideLoc": "/pdfs/guides/Hide-and-Seek-Guide.pdf", + "ttt.VirtualPetActivityLoc": "/pdfs/cards/PetCards.pdf", + "ttt.VirtualPetGuideLoc": "/pdfs/guides/PetGuide.pdf", + "ttt.FashionActivityLoc": "/pdfs/cards/DressupCards.pdf", + "ttt.FashionGuideLoc": "/pdfs/guides/DressupGuide.pdf", + "ttt.StoryActivityLoc": "/pdfs/cards/StoryCards.pdf", + "ttt.StoryGuideLoc": "/pdfs/guides/StoryGuide.pdf" +} diff --git a/src/views/thingstotry/l10n.json b/src/views/thingstotry/l10n.json new file mode 100644 index 00000000000..93271362ef1 --- /dev/null +++ b/src/views/thingstotry/l10n.json @@ -0,0 +1,37 @@ +{ + "ttt.placeholder": "Placeholder text", + "ttt.title": "Things to Try", + "ttt.subTitle": "You can get started with Scratch in a variety of ways. Click a picture to try a Tutorial. You can also download a set of Activity Cards and Educator Guide for each theme.", + "tile.tutorial": "Tutorial", + "tile.guides": "See Cards and Guides", + "ttt.tutorialTitle": "Tutorial", + "ttt.tutorialSubtitle": "Find out how to make this project using a step-by-step tutorial in Scratch.", + "ttt.activityTitle": "Activity Cards", + "ttt.activitySubtitle": "Explore new coding ideas using this set of illustrated cards you can print out.", + "ttt.educatorTitle": "Educator Guide", + "ttt.educatorSubtitle": "Use this educator guide to plan and lead a one-hour Scratch workshop.", + "ttt.tryIt": "Try It", + "ttt.download": "Download", + "ttt.MakeItFlyTitle": "Make It Fly", + "ttt.MakeItFlyDescription": "Animate the Scratch Cat, The Powerpuff Girls, or even a taco!", + "ttt.AnimateYourNameTitle": "Animate Your Name", + "ttt.AnimateYourNameDescription": "Animate the letters of your name, initials, or favorite word.", + "ttt.RaceTitle": "Race to the Finish", + "ttt.RaceDescription": "Make a game where two characters race each other.", + "ttt.MakeMusicTitle": "Make Music", + "ttt.MakeMusicDescription": "Choose instruments, add sounds, and press keys to play music.", + "ttt.HideAndSeekTitle": "Hide-and-Seek Game", + "ttt.HideAndSeekDescription": "Make a hide-and-seek game with characters that appear and disappear.", + "ttt.StoryTitle": "Create a Story", + "ttt.StoryDescription": "Choose characters, add conversation, and bring your story to life.", + "ttt.FashionTitle": "Fashion Game", + "ttt.FashionDescription": "Dress up a character with different clothes and styles.", + "ttt.PongTitle": "Pong Game", + "ttt.PongDescription": "Make a bouncing ball game with sounds, points, and other effects.", + "ttt.DanceTitle": "Let's Dance", + "ttt.DanceDescription": "Design an animated dance scene with music and dance moves.", + "ttt.CatchTitle": "Catch Game", + "ttt.CatchDescription": "Make a game where you catch things falling from the sky.", + "ttt.VirtualPetTitle": "Virtual Pet", + "ttt.VirtualPetDescription": "Create an interactive pet that can eat, drink, and play." +} diff --git a/src/views/thingstotry/thingstotry.jsx b/src/views/thingstotry/thingstotry.jsx new file mode 100644 index 00000000000..a815357d33e --- /dev/null +++ b/src/views/thingstotry/thingstotry.jsx @@ -0,0 +1,90 @@ +var React = require('react'); +var injectIntl = require('react-intl').injectIntl; +var FormattedHTMLMessage = require('react-intl').FormattedHTMLMessage; +var FormattedMessage = require('react-intl').FormattedMessage; +var render = require('../../lib/render.jsx'); + +var MasonryGrid = require('../../components/masonrygrid/masonrygrid.jsx'); +var Page = require('../../components/page/www/page.jsx'); +var TitleBanner = require('../../components/title-banner/title-banner.jsx'); +var TTTTile = require('../../components/ttt-tile/ttt-tile.jsx'); +var TTTModal = require('../../components/modal/ttt/modal.jsx'); +var Tiles = require('./ttt.json'); + +require('./thingstotry.scss'); + +var ThingsToTry = injectIntl(React.createClass({ + type: 'ThingsToTry', + getInitialState: function () { + return { + currentTile: Tiles[0], + TTTModalOpen: false + }; + }, + showTTTModal: function (tile) { + // expects translated tile + this.setState({currentTile: tile}); + this.setState({TTTModalOpen: true}); + }, + hideTTTModal: function () { + this.setState({TTTModalOpen: false}); + }, + renderTTTTiles: function () { + var formatMessage = this.props.intl.formatMessage; + var translatedTiles = []; + var translatedTile = {}; + + Tiles.map(function (tile, key) { + translatedTile = { + title: formatMessage({id: tile.title}), + description: formatMessage({id: tile.description}), + tutorialLoc: tile.tutorialLoc, + activityLoc: formatMessage({id: tile.activityLoc}), + guideLoc: formatMessage({id: tile.guideLoc}), + thumbUrl: tile.thumbUrl, + bannerUrl: tile.bannerUrl + }; + translatedTiles.push( + + ); + }, this); // don't forget to pass 'this' into map function + return translatedTiles; + }, + render: function () { + return ( +
+ +
+ +
+

+ +

+

+ +

+
+ +
+
+ + {this.renderTTTTiles()} + + +
+ +
+
+ ); + } +})); + +render(, document.getElementById('app')); diff --git a/src/views/thingstotry/thingstotry.scss b/src/views/thingstotry/thingstotry.scss new file mode 100644 index 00000000000..ce765175cf9 --- /dev/null +++ b/src/views/thingstotry/thingstotry.scss @@ -0,0 +1,91 @@ +@import "../../colors"; +@import "../../frameless"; + +$base-bg: $ui-white; + +#view { + padding: 0; +} + +// .mod-ttt-title, to avoid collision with .title-banner.mod-tt in ttt modal +.title-banner.mod-ttt-title { + background-color: $ui-blue; +} + +.ttt-section { + display: flex; + margin: 0 auto; + text-align: center; + justify-content: center; + flex-wrap: wrap; + align-items: center; +} + +.ttt-banner-image { + max-width: calc(100% - 2rem); +} + +//4 columns +@media only screen and (max-width: $mobile - 1) { + + .title-banner { + &.masthead { + padding-bottom: 1.25rem; + + p { + max-width: $cols4; + } + } + } + + .ttt-section.mod-title-banner { + max-width: $mobile; + } +} + +//6 columns +@media only screen and (min-width: $mobile) and (max-width: $tablet - 1) { + .title-banner { + &.masthead { + + p { + max-width: $cols6; + } + } + } + + .ttt-section.mod-title-banner { + max-width: $mobile; + } +} + + +//8 columns +@media only screen and (min-width: $tablet) and (max-width: $desktop - 1) { + .title-banner { + &.masthead { + padding-bottom: 2rem; + + p { + max-width: $cols8; + } + } + } + + .ttt-section.mod-title-banner { + max-width: $tablet; + } +} + +// 12 columns +@media only screen and (min-width: $desktop) { + .title-banner { + &.masthead { + padding-bottom: 1.25rem; + + p { + max-width: $cols8; + } + } + } +} diff --git a/src/views/thingstotry/ttt.json b/src/views/thingstotry/ttt.json new file mode 100644 index 00000000000..06c6b910fd8 --- /dev/null +++ b/src/views/thingstotry/ttt.json @@ -0,0 +1,83 @@ +[ + { + "title": "ttt.AnimateYourNameTitle", + "description": "ttt.AnimateYourNameDescription", + "thumbUrl": "/images/ttt/animate-your-name.jpg", + "bannerUrl": "/images/ttt/animate-your-name-banner.jpg", + "tutorialLoc": "/projects/editor/?tip_bar=name", + "activityLoc": "ttt.AnimateYourNameActivityLoc", + "guideLoc": "ttt.AnimateYourNameGuideLoc" + }, + { + "title": "ttt.MakeItFlyTitle", + "description": "ttt.MakeItFlyDescription", + "thumbUrl": "/images/ttt/make-it-fly.jpg", + "bannerUrl": "/images/ttt/make-it-fly-banner.jpg", + "tutorialLoc": "/projects/editor/?tip_bar=fly", + "activityLoc": "ttt.MakeItFlyActivityLoc", + "guideLoc": "ttt.MakeItFlyGuideLoc" + }, + { + "title": "ttt.MakeMusicTitle", + "description": "ttt.MakeMusicDescription", + "thumbUrl": "/images/ttt/make-music.jpg", + "bannerUrl": "/images/ttt/make-music-banner.jpg", + "tutorialLoc": "/projects/editor/?tip_bar=music", + "activityLoc": "ttt.MakeMusicActivityLoc", + "guideLoc": "ttt.MakeMusicGuideLoc" + }, + { + "title": "ttt.RaceTitle", + "description": "ttt.RaceDescription", + "thumbUrl": "/images/ttt/race-to-the-finish.jpg", + "bannerUrl": "/images/ttt/race-to-the-finish-banner.jpg", + "tutorialLoc": "/projects/editor/?tip_bar=racegame", + "activityLoc": "ttt.RaceActivityLoc", + "guideLoc": "ttt.RaceGuideLoc" + }, + { + "title": "ttt.HideAndSeekTitle", + "description": "ttt.HideAndSeekDescription", + "thumbUrl": "/images/ttt/hide-and-seek.jpg", + "bannerUrl": "/images/ttt/hide-and-seek-banner.jpg", + "tutorialLoc": "/projects/editor/?tip_bar=hide", + "activityLoc": "ttt.HideAndSeekActivityLoc", + "guideLoc": "ttt.HideAndSeekGuideLoc" + }, + { + "title": "ttt.PongTitle", + "description": "ttt.PongDescription", + "thumbUrl": "/images/ttt/pong-game.jpg", + "bannerUrl": "/images/ttt/pong-game-banner.jpg", + "tutorialLoc": "/projects/editor/?tip_bar=pong", + "activityLoc": "ttt.PongActivityLoc", + "guideLoc": "ttt.PongGuideLoc" + }, + { + "title": "ttt.DanceTitle", + "description": "ttt.DanceDescription", + "thumbUrl": "/images/ttt/lets-dance.jpg", + "bannerUrl": "/images/ttt/lets-dance-banner.jpg", + "tutorialLoc": "/projects/editor/?tip_bar=dance", + "activityLoc": "ttt.DanceActivityLoc", + "guideLoc": "ttt.DanceGuideLoc" + }, + { + "title": "ttt.CatchTitle", + "description": "ttt.CatchDescription", + "thumbUrl": "/images/ttt/catch-game.jpg", + "bannerUrl": "/images/ttt/catch-game-banner.jpg", + "tutorialLoc": "/projects/editor/?tip_bar=catch", + "activityLoc": "ttt.CatchActivityLoc", + "guideLoc": "ttt.CatchGuideLoc" + }, + { + "title": "ttt.VirtualPetTitle", + "description": "ttt.VirtualPetDescription", + "thumbUrl": "/images/ttt/virtual-pet.jpg", + "bannerUrl": "/images/ttt/virtual-pet-banner.jpg", + "tutorialLoc": "/projects/editor/?tip_bar=pet", + "activityLoc": "ttt.VirtualPetActivityLoc", + "guideLoc": "ttt.VirtualPetGuideLoc" + } +] diff --git a/static/images/ttt/animate-your-name-banner.jpg b/static/images/ttt/animate-your-name-banner.jpg new file mode 100644 index 00000000000..0c7f4270749 Binary files /dev/null and b/static/images/ttt/animate-your-name-banner.jpg differ diff --git a/static/images/ttt/animate-your-name.jpg b/static/images/ttt/animate-your-name.jpg new file mode 100644 index 00000000000..580349a7c6b Binary files /dev/null and b/static/images/ttt/animate-your-name.jpg differ diff --git a/static/images/ttt/catch-game-banner.jpg b/static/images/ttt/catch-game-banner.jpg new file mode 100644 index 00000000000..daebd05e666 Binary files /dev/null and b/static/images/ttt/catch-game-banner.jpg differ diff --git a/static/images/ttt/catch-game.jpg b/static/images/ttt/catch-game.jpg new file mode 100644 index 00000000000..eba8a1b4fa3 Binary files /dev/null and b/static/images/ttt/catch-game.jpg differ diff --git a/static/images/ttt/create-a-story-banner.jpg b/static/images/ttt/create-a-story-banner.jpg new file mode 100644 index 00000000000..2d8ebfd4233 Binary files /dev/null and b/static/images/ttt/create-a-story-banner.jpg differ diff --git a/static/images/ttt/create-a-story.jpg b/static/images/ttt/create-a-story.jpg new file mode 100644 index 00000000000..8db7e5c6f37 Binary files /dev/null and b/static/images/ttt/create-a-story.jpg differ diff --git a/static/images/ttt/fashion-game-banner.jpg b/static/images/ttt/fashion-game-banner.jpg new file mode 100644 index 00000000000..9bd5ea7af24 Binary files /dev/null and b/static/images/ttt/fashion-game-banner.jpg differ diff --git a/static/images/ttt/fashion-game.jpg b/static/images/ttt/fashion-game.jpg new file mode 100644 index 00000000000..a4918ce4e06 Binary files /dev/null and b/static/images/ttt/fashion-game.jpg differ diff --git a/static/images/ttt/hide-and-seek-banner.jpg b/static/images/ttt/hide-and-seek-banner.jpg new file mode 100644 index 00000000000..787acf337e7 Binary files /dev/null and b/static/images/ttt/hide-and-seek-banner.jpg differ diff --git a/static/images/ttt/hide-and-seek.jpg b/static/images/ttt/hide-and-seek.jpg new file mode 100644 index 00000000000..8b01966030b Binary files /dev/null and b/static/images/ttt/hide-and-seek.jpg differ diff --git a/static/images/ttt/lets-dance-banner.jpg b/static/images/ttt/lets-dance-banner.jpg new file mode 100644 index 00000000000..67a3d3a5d3e Binary files /dev/null and b/static/images/ttt/lets-dance-banner.jpg differ diff --git a/static/images/ttt/lets-dance.jpg b/static/images/ttt/lets-dance.jpg new file mode 100644 index 00000000000..d8b3699fc96 Binary files /dev/null and b/static/images/ttt/lets-dance.jpg differ diff --git a/static/images/ttt/make-it-fly-banner.jpg b/static/images/ttt/make-it-fly-banner.jpg new file mode 100644 index 00000000000..4cf0397f2d9 Binary files /dev/null and b/static/images/ttt/make-it-fly-banner.jpg differ diff --git a/static/images/ttt/make-it-fly.jpg b/static/images/ttt/make-it-fly.jpg new file mode 100644 index 00000000000..d4d09a57eb9 Binary files /dev/null and b/static/images/ttt/make-it-fly.jpg differ diff --git a/static/images/ttt/make-music-banner.jpg b/static/images/ttt/make-music-banner.jpg new file mode 100644 index 00000000000..42839b89f91 Binary files /dev/null and b/static/images/ttt/make-music-banner.jpg differ diff --git a/static/images/ttt/make-music.jpg b/static/images/ttt/make-music.jpg new file mode 100644 index 00000000000..f696c49370f Binary files /dev/null and b/static/images/ttt/make-music.jpg differ diff --git a/static/images/ttt/pong-game-banner.jpg b/static/images/ttt/pong-game-banner.jpg new file mode 100644 index 00000000000..cdcab769026 Binary files /dev/null and b/static/images/ttt/pong-game-banner.jpg differ diff --git a/static/images/ttt/pong-game.jpg b/static/images/ttt/pong-game.jpg new file mode 100644 index 00000000000..6afd3a4e5dd Binary files /dev/null and b/static/images/ttt/pong-game.jpg differ diff --git a/static/images/ttt/race-to-the-finish-banner.jpg b/static/images/ttt/race-to-the-finish-banner.jpg new file mode 100644 index 00000000000..e9c3297b6ba Binary files /dev/null and b/static/images/ttt/race-to-the-finish-banner.jpg differ diff --git a/static/images/ttt/race-to-the-finish.jpg b/static/images/ttt/race-to-the-finish.jpg new file mode 100644 index 00000000000..a93572e0bf5 Binary files /dev/null and b/static/images/ttt/race-to-the-finish.jpg differ diff --git a/static/images/ttt/virtual-pet-banner.jpg b/static/images/ttt/virtual-pet-banner.jpg new file mode 100644 index 00000000000..1dce9f2930a Binary files /dev/null and b/static/images/ttt/virtual-pet-banner.jpg differ diff --git a/static/images/ttt/virtual-pet.jpg b/static/images/ttt/virtual-pet.jpg new file mode 100644 index 00000000000..8d66a53ebaa Binary files /dev/null and b/static/images/ttt/virtual-pet.jpg differ diff --git a/static/pdfs/guides/AnimateYourNameGuide.pdf b/static/pdfs/guides/AnimateYourNameGuide.pdf new file mode 100644 index 00000000000..a4ac2836784 Binary files /dev/null and b/static/pdfs/guides/AnimateYourNameGuide.pdf differ diff --git a/static/pdfs/guides/DanceGuide.pdf b/static/pdfs/guides/DanceGuide.pdf new file mode 100644 index 00000000000..6a75034bec4 Binary files /dev/null and b/static/pdfs/guides/DanceGuide.pdf differ diff --git a/static/pdfs/guides/FlyGuide.pdf b/static/pdfs/guides/FlyGuide.pdf new file mode 100644 index 00000000000..aaa1c99b8b5 Binary files /dev/null and b/static/pdfs/guides/FlyGuide.pdf differ diff --git a/static/pdfs/guides/Getting-Started-Guide-Scratch2.pdf b/static/pdfs/guides/Getting-Started-Guide-Scratch2.pdf new file mode 100644 index 00000000000..d18c0a228b3 Binary files /dev/null and b/static/pdfs/guides/Getting-Started-Guide-Scratch2.pdf differ diff --git a/static/pdfs/guides/Hide-and-Seek-Guide.pdf b/static/pdfs/guides/Hide-and-Seek-Guide.pdf new file mode 100644 index 00000000000..b5156ec6b39 Binary files /dev/null and b/static/pdfs/guides/Hide-and-Seek-Guide.pdf differ diff --git a/static/pdfs/guides/MusicGuide.pdf b/static/pdfs/guides/MusicGuide.pdf new file mode 100644 index 00000000000..3b1eb53a2d0 Binary files /dev/null and b/static/pdfs/guides/MusicGuide.pdf differ diff --git a/static/pdfs/guides/NameGuide.pdf b/static/pdfs/guides/NameGuide.pdf new file mode 100644 index 00000000000..a1a707b4705 Binary files /dev/null and b/static/pdfs/guides/NameGuide.pdf differ diff --git a/static/pdfs/guides/PongGuide.pdf b/static/pdfs/guides/PongGuide.pdf new file mode 100644 index 00000000000..9cfde378bc7 Binary files /dev/null and b/static/pdfs/guides/PongGuide.pdf differ diff --git a/static/pdfs/guides/RaceGuide.pdf b/static/pdfs/guides/RaceGuide.pdf new file mode 100644 index 00000000000..e95ca18ba5c Binary files /dev/null and b/static/pdfs/guides/RaceGuide.pdf differ diff --git a/static/svgs/ttt/resources.svg b/static/svgs/ttt/resources.svg new file mode 100644 index 00000000000..b518e814058 --- /dev/null +++ b/static/svgs/ttt/resources.svg @@ -0,0 +1,427 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/svgs/ttt/see-more.svg b/static/svgs/ttt/see-more.svg new file mode 100644 index 00000000000..ff650593182 --- /dev/null +++ b/static/svgs/ttt/see-more.svg @@ -0,0 +1,17 @@ + + + + + + + + + + +