Merge pull request #1490 from LLK/release/2.2.24

[Master] Release 2.2.24
This commit is contained in:
Matthew Taylor 2017-08-31 13:41:01 -04:00 committed by GitHub
commit 8ea23e1725
19 changed files with 630 additions and 286 deletions

View file

@ -157,7 +157,7 @@ for (var v in routes) {
localizedAssetUrls[routes[v].name] = {};
var viewUrls = require(l10nStatic);
localizedAssetUrls[routes[v].name]['en'] = viewUrls;
localizedAssetUrls[routes[v].name]['en'] = viewUrls;
var defaultUrls = localizedUrls['en'];
for (var lang in languages) {
localizedAssetUrls[routes[v].name][lang] = {};
@ -192,7 +192,6 @@ async.forEachLimit(views, 5, function (view, cb) {
viewLocales['en'] = merge({}, generalLocales['en'], defaultLocales[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,
@ -204,8 +203,9 @@ async.forEachLimit(views, 5, function (view, cb) {
fs.readFile(translationsFile, 'utf8', function (err, data) {
if (err) {
if (err.code === 'ENOENT') {
// ignore missing files for english, Meow, and Edible Scratch
if (isoCode !== 'en') {
if (defaultLocales.hasOwnProperty(view)) {
if (isoCode !== 'cat' && isoCode !== 'yum' && defaultLocales.hasOwnProperty(view)) {
process.stdout.write('No translations for ' + view + ' ' + isoCode + ', using english\n');
}
viewLocales[isoCode] = merge({}, generalLocales[isoCode], defaultLocales[view]);
@ -224,8 +224,8 @@ async.forEachLimit(views, 5, function (view, cb) {
}
cb();
});
}, function (err) {
if (err) process.stdout.write('Error merging translations for view: ' + view + '\n' + err + '\n');
}, function (err) { // eslint-disable-line no-unused-vars
// ignore translation file errors, just keep going.
var viewTranslations = merge({}, viewLocales, localizedAssetUrls[view]);
writeIntlFile(outputDir, view, viewTranslations, function (err) {
if (err) {

View file

@ -1,16 +1,4 @@
[
{
"name": "splash",
"pattern": "^/?$",
"routeAlias": "/?$",
"view": "splash/splash",
"title": "Imagine, Program, Share"
},
{
"name": "splash-redirect",
"pattern": "^///?$",
"redirect": "/"
},
{
"name": "about",
"pattern": "^/about/?$",
@ -19,25 +7,39 @@
"title": "About"
},
{
"name": "guidelines",
"pattern": "^/community_guidelines/?$",
"routeAlias": "/community_guidelines/?$",
"view": "guidelines/guidelines",
"title": "Scratch Community Guidelines"
"name": "camp",
"pattern": "^/camp/?$",
"routeAlias": "/camp/?$",
"view": "camp/camp",
"title": "Down Deep"
},
{
"name": "student-complete-registration",
"pattern": "^/classes/complete_registration",
"routeAlias": "/classes/(complete_registration|.+/register/.+)",
"view": "studentcompleteregistration/studentcompleteregistration",
"title": "Complete your Registration"
"name": "cards",
"pattern": "^/info/cards/?$",
"routeAlias": "/info/(cards|communityblocks-interviews|credits|faq)/?$",
"view": "cards/cards",
"title": "Cards"
},
{
"name": "student-registration",
"pattern": "^/classes/:id/register/:token",
"routeAlias": "/classes/(complete_registration|.+/register/.+)",
"view": "studentregistration/studentregistration",
"title": "Class Registration"
"name": "communityblocks-interviews",
"pattern": "^/info/communityblocks-interviews/?$",
"routeAlias": "/info/(cards|communityblocks-interviews|credits|faq|donate)/?$",
"view": "communityblocks-interviews/communityblocks-interviews",
"title": "Community Blocks Beta Tester Interviews"
},
{
"name": "conference-details-2016",
"pattern": "^/conference/2016/:id/details/?$",
"routeAlias": "/conference(?!/201[4-5])",
"view": "conference/2016/details/details",
"title": "Event Details"
},
{
"name": "conference-expectations-2016",
"pattern": "^/conference/2016/expect/?$",
"routeAlias": "/conference(?!/201[4-5])",
"view": "conference/2016/expect/expect",
"title": "What to Expect"
},
{
"name": "conference-index",
@ -62,13 +64,6 @@
"view": "conference/2016/plan/plan",
"title": "Plan Your Visit"
},
{
"name": "conference-expectations-2016",
"pattern": "^/conference/2016/expect/?$",
"routeAlias": "/conference(?!/201[4-5])",
"view": "conference/2016/expect/expect",
"title": "What to Expect"
},
{
"name": "conference-schedule-2016",
"pattern": "^/conference/2016/schedule/?$",
@ -77,11 +72,11 @@
"title": "Conference Schedule"
},
{
"name": "conference-details-2016",
"pattern": "^/conference/2016/:id/details/?$",
"routeAlias": "/conference(?!/201[4-5])",
"view": "conference/2016/details/details",
"title": "Event Details"
"name": "credits",
"pattern": "^/info/credits/?$",
"routeAlias": "/info/(cards|communityblocks-interviews|credits|faq|donate)/?$",
"view": "credits/credits",
"title": "Credits"
},
{
"name": "developers",
@ -98,11 +93,11 @@
"title": "DMCA"
},
{
"name": "camp",
"pattern": "^/camp/?$",
"routeAlias": "/camp/?$",
"view": "camp/camp",
"title": "Down Deep"
"name": "download",
"pattern": "^/download/?$",
"routeAlias": "/download",
"view": "download/download",
"title": "Scratch Offline Editor"
},
{
"name": "educator-landing",
@ -111,6 +106,111 @@
"view": "teachers/landing/landing",
"title": "Educators"
},
{
"name": "explore",
"pattern": "^/explore/:projects(projects|studios)/:all/?$",
"routeAlias": "/explore(?!/ajax)",
"view": "explore/explore",
"title": "Explore"
},
{
"name": "faq",
"pattern": "^/info/faq/?$",
"routeAlias": "/info/(cards|communityblocks-interviews|credits|faq)/?$",
"view": "faq/faq",
"title": "FAQ"
},
{
"name": "guidelines",
"pattern": "^/community_guidelines/?$",
"routeAlias": "/community_guidelines/?$",
"view": "guidelines/guidelines",
"title": "Scratch Community Guidelines"
},
{
"name": "jobs",
"pattern": "^/jobs/?$",
"routeAlias": "/jobs(/moderator)?/?$",
"view": "jobs/jobs",
"title": "Jobs"
},
{
"name": "jobs-moderator",
"pattern": "^/jobs/moderator/?$",
"routeAlias": "/jobs(/moderator)?/?$",
"view": "jobs/moderator/moderator",
"title": "Community Moderator"
},
{
"name": "microworld-art",
"pattern": "^/microworlds/art",
"routeAlias": "/microworlds",
"view": "microworld/art/art",
"title": "Art"
},
{
"name": "microworld-fashion",
"pattern": "^/microworlds/fashion",
"routeAlias": "/microworlds",
"view": "microworld/fashion/fashion",
"title": "Fashion"
},
{
"name": "microworld-hiphop",
"pattern": "^/microworlds/hiphop",
"routeAlias": "/microworlds",
"view": "microworld/hiphop/hiphop",
"title": "Hip Hop Dance"
},
{
"name": "microworld-soccer",
"pattern": "^/microworlds/soccer",
"routeAlias": "/microworlds",
"view": "microworld/soccer/soccer",
"title": "Soccer"
},
{
"name": "microworlds-homepage",
"pattern": "^/microworlds/go/?(\\?.*)?$",
"routeAlias": "/microworlds",
"view": "microworldshomepage/microworldshomepage",
"title": "Microworlds"
},
{
"name": "privacypolicy",
"pattern": "^/privacy_policy/?$",
"routeAlias": "/privacy_policy/?$",
"view": "privacypolicy/privacypolicy",
"title": "Privacy Policy"
},
{
"name": "search",
"pattern": "^/search/:projects/?$",
"routeAlias": "/search",
"view": "search/search",
"title": "Search"
},
{
"name": "splash",
"pattern": "^/?$",
"routeAlias": "/?$",
"view": "splash/splash",
"title": "Imagine, Program, Share"
},
{
"name": "student-complete-registration",
"pattern": "^/classes/complete_registration",
"routeAlias": "/classes/(complete_registration|.+/register/.+)",
"view": "studentcompleteregistration/studentcompleteregistration",
"title": "Complete your Registration"
},
{
"name": "student-registration",
"pattern": "^/classes/:id/register/:token",
"routeAlias": "/classes/(complete_registration|.+/register/.+)",
"view": "studentregistration/studentregistration",
"title": "Class Registration"
},
{
"name": "teacher-faq",
"pattern": "^/educators/faq/?$",
@ -133,42 +233,11 @@
"title": "Thank you for requesting a Scratch Teacher Account"
},
{
"name": "explore",
"pattern": "^/explore/:projects(projects|studios)/:all/?$",
"routeAlias": "/explore(?!/ajax)",
"view": "explore/explore",
"title": "Explore"
},
{
"name": "hoc",
"pattern": "^/hoc/?(\\?.*)?$",
"routeAlias": "/hoc/?\\??",
"redirect": "/tips"
},
{
"name": "cards",
"pattern": "^/info/cards/?$",
"routeAlias": "/info/(cards|communityblocks-interviews|credits|faq)/?$",
"view": "cards/cards",
"title": "Cards"
},
{
"name": "things-to-try",
"pattern": "^/go/?(\\?.*)?$",
"routeAlias": "/go/?\\??",
"redirect": "/tips"
},
{
"name": "help",
"pattern": "^/help/?(\\?.*)?$",
"routeAlias": "/help/?(\\?.*)?$",
"redirect": "/tips"
},
{
"name": "info-redirect",
"pattern": "^/info/?(\\?.*)?$",
"routeAlias": "/info/?(\\?.*)?$",
"redirect": "/tips"
"name": "terms",
"pattern": "^/terms_of_use/?$",
"routeAlias": "/terms_of_use/?$",
"view": "terms/terms",
"title": "Scratch Terms of Use"
},
{
"name": "tips",
@ -177,75 +246,6 @@
"view": "tips/tips",
"title": "Tips"
},
{
"name": "communityblocks-interviews",
"pattern": "^/info/communityblocks-interviews/?$",
"routeAlias": "/info/(cards|communityblocks-interviews|credits|faq|donate)/?$",
"view": "communityblocks-interviews/communityblocks-interviews",
"title": "Community Blocks Beta Tester Interviews"
},
{
"name": "credits",
"pattern": "^/info/credits/?$",
"routeAlias": "/info/(cards|communityblocks-interviews|credits|faq|donate)/?$",
"view": "credits/credits",
"title": "Credits"
},
{
"name": "download",
"pattern": "^/download/?$",
"routeAlias": "/download",
"view": "download/download",
"title": "Scratch Offline Editor"
},
{
"name": "faq",
"pattern": "^/info/faq/?$",
"routeAlias": "/info/(cards|communityblocks-interviews|credits|faq)/?$",
"view": "faq/faq",
"title": "FAQ"
},
{
"name": "jobs",
"pattern": "^/jobs/?$",
"routeAlias": "/jobs(/moderator)?/?$",
"view": "jobs/jobs",
"title": "Jobs"
},
{
"name": "jobs-moderator",
"pattern": "^/jobs/moderator/?$",
"routeAlias": "/jobs(/moderator)?/?$",
"view": "jobs/moderator/moderator",
"title": "Community Moderator"
},
{
"name": "privacypolicy",
"pattern": "^/privacy_policy/?$",
"routeAlias": "/privacy_policy/?$",
"view": "privacypolicy/privacypolicy",
"title": "Privacy Policy"
},
{
"name": "search",
"pattern": "^/search/:projects/?$",
"routeAlias": "/search",
"view": "search/search",
"title": "Search"
},
{
"name": "search-redirect",
"pattern": "^/search/?$",
"routeAlias": "/search",
"redirect": "/search/projects"
},
{
"name": "terms",
"pattern": "^/terms_of_use/?$",
"routeAlias": "/terms_of_use/?$",
"view": "terms/terms",
"title": "Scratch Terms of Use"
},
{
"name": "wedo2",
"pattern": "^/wedo/?$",
@ -254,22 +254,16 @@
"title": "LEGO WeDo 2.0"
},
{
"name": "donate",
"name": "donate-redirect",
"pattern": "^/info/donate/?",
"routeAlias": "/info/(cards|communityblocks-interviews|credits|faq|donate)/?$",
"redirect": "https://secure.donationpay.org/scratchfoundation/"
},
{
"name": "store",
"pattern": "^/store/?$",
"routeAlias": "/store",
"redirect": "https://scratch-foundation.myshopify.com"
},
{
"name": "explore-redirect",
"pattern": "^/explore/?$",
"routeAlias": "/explore(?!/ajax)",
"redirect": "/explore/projects/all"
"name": "download-redirect",
"pattern": "^/scratch2download/?$",
"routeAlias": "/scratch2download",
"redirect": "/download"
},
{
"name": "explore-projects-redirect",
@ -277,6 +271,12 @@
"routeAlias": "/explore(?!/ajax)",
"redirect": "/explore/projects/all"
},
{
"name": "explore-redirect",
"pattern": "^/explore/?$",
"routeAlias": "/explore(?!/ajax)",
"redirect": "/explore/projects/all"
},
{
"name": "explore-studios-redirect",
"pattern": "^/explore/studios/?$",
@ -284,44 +284,44 @@
"redirect": "/explore/studios/all"
},
{
"name": "download-redirect",
"pattern": "^/scratch2download/?$",
"routeAlias": "/scratch2download",
"redirect": "/download"
"name": "help-redirect",
"pattern": "^/help/?(\\?.*)?$",
"routeAlias": "/help/?(\\?.*)?$",
"redirect": "/tips"
},
{
"name": "microworld-art",
"pattern": "^/microworlds/art",
"routeAlias": "/microworlds",
"view": "microworld/art/art",
"title": "Art"
"name": "hoc-redirect",
"pattern": "^/hoc/?(\\?.*)?$",
"routeAlias": "/hoc/?\\??",
"redirect": "/tips"
},
{
"name": "microworld-hiphop",
"pattern": "^/microworlds/hiphop",
"routeAlias": "/microworlds",
"view": "microworld/hiphop/hiphop",
"title": "Hip Hop Dance"
"name": "info-redirect",
"pattern": "^/info/?(\\?.*)?$",
"routeAlias": "/info/?(\\?.*)?$",
"redirect": "/tips"
},
{
"name": "microworld-fashion",
"pattern": "^/microworlds/fashion",
"routeAlias": "/microworlds",
"view": "microworld/fashion/fashion",
"title": "Fashion"
"name": "search-redirect",
"pattern": "^/search/?$",
"routeAlias": "/search",
"redirect": "/search/projects"
},
{
"name": "microworld-soccer",
"pattern": "^/microworlds/soccer",
"routeAlias": "/microworlds",
"view": "microworld/soccer/soccer",
"title": "Soccer"
"name": "splash-redirect",
"pattern": "^///?$",
"redirect": "/"
},
{
"name": "microworlds-homepage",
"pattern": "^/microworlds/go/?(\\?.*)?$",
"routeAlias": "/microworlds",
"view": "microworldshomepage/microworldshomepage",
"title": "Microworlds"
"name": "store",
"pattern": "^/store/?$",
"routeAlias": "/store",
"redirect": "https://scratch-foundation.myshopify.com"
},
{
"name": "things-to-try-redirect",
"pattern": "^/go/?(\\?.*)?$",
"routeAlias": "/go/?\\??",
"redirect": "/tips"
}
]

View file

@ -11,10 +11,10 @@
"about.quotes": "Quotes",
"about.quotesDescription": "The Scratch Team has received many emails from youth, parents, and educators expressing thanks for Scratch. Want to see what people are saying? You can read a collection of the <a href=\"/info/quotes\">quotes</a> we&#39;ve received.",
"about.learnMore": "Learn More About Scratch",
"about.learnMoreHelp": "Scratch Help Page",
"about.learnMoreHelp": "Tips Page",
"about.learnMoreFaq": "Frequently Asked Questions",
"about.learnMoreParents": "Information for Parents",
"about.learnMoreCredits": "Scratch Credits",
"about.learnMoreCredits": "Credits",
"about.literacy": "Learn to Code, Code to Learn",
"about.literacyDescription": "The ability to code computer programs is an important part of literacy in todays society. When people learn to code in Scratch, they learn important strategies for solving problems, designing projects, and communicating ideas.",
"about.schools": "Scratch in Schools",

View file

@ -28,8 +28,8 @@ var Credits = React.createClass({
</li>
<li>
<img src="//cdn.scratch.mit.edu/get_image/user/4598206_170x170.png" alt="Kasia Avatar" />
<span className="name">Kasia Chmielinski</span>
<img src="//cdn.scratch.mit.edu/get_image/user/900283_170x170.png" alt="Champika Avatar" />
<span className="name">Champika Fernando</span>
</li>
<li>
@ -51,11 +51,6 @@ var Credits = React.createClass({
<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/527836_170x170.png" alt="DD Avatar" />
@ -136,6 +131,11 @@ var Credits = React.createClass({
<span className="name">Jolie Castellucci</span>
</li>
<li>
<img src="//cdn.scratch.mit.edu/get_image/user/24164779_170x170.png" alt="Ellen Avatar" />
<span className="name">Ellen Daoust</span>
</li>
<li>
<img src="//cdn.scratch.mit.edu/get_image/user/1048810_170x170.png" alt="Linda Avatar" />
<span className="name">Linda Fernsel</span>
@ -195,7 +195,6 @@ var Credits = React.createClass({
<p><FormattedHTMLMessage id='credits.acknowledgementsContributors' /></p>
<p><FormattedMessage id='credits.acknowledgementsCommunity' /></p>
<p><FormattedMessage id='credits.acknowledgementsInfluencers' /></p>
<h2><FormattedMessage id='credits.supportersTitle' /></h2>
<p><FormattedMessage id='credits.supportersFinancialHeader' /></p>
<p>
@ -239,7 +238,7 @@ var Credits = React.createClass({
<a href="https://www.docker.com/"> Docker</a>,
<a href="https://www.elastic.co/"> Elasticsearch</a>,
<a href="http://ganglia.sourceforge.net/"> Ganglia</a>,
<a href="gunicorn.org"> Gunicorn</a>,
<a href="http://gunicorn.org"> Gunicorn</a>,
<a href="https://jenkins-ci.org/"> Jenkins</a>,
<a href="http://www.linux.org/"> Linux</a>,
<a href="http://memcached.org/"> Memcached</a>,

View file

@ -3,13 +3,13 @@
"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), 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, Christina Huang, 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.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, Kasia Chmielinski, Michelle Chung, Shane Clements, Hannah Cole, Sayamindu Dasgupta, Margarita Dekoli, Evelyn Eastmond, Dave Feinberg, Chris Graves, Megan Haddadi, Christina Huang, Tony Hwang, Abdulrahman Idlbi, Randy Jou, Saskia Leggett, 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",
"credits.researchersBody": "<a href=\"https://scratch.mit.edu/info/research/\">Research on Scratch</a> is being conducted by members of the MIT Scratch Team and researchers at other universities, including Yasmin Kafai (who collaborated on the <a href=\"http://www.nsf.gov/awardsearch/showAward?AWD_ID=0325828\">initial NSF Scratch grant</a>) at the University of Pennsylvania Graduate School of Education, Karen Brennan (who leads the <a href=\"http://scratched.gse.harvard.edu/\">ScratchEd project</a>) at the Harvard Graduate School of Education, Benjamin Mako Hill at the University of Washington, Andrés Monroy Hernández at Microsoft Research, Mimi Ito and Crystle Martin at the University of California, Irvine, Quinn Burke at College of Charleston, Deborah Fields at Utah State University, and Kylie Peppler at Indiana University.",
"credits.acknowledgementsTitle": "Acknowledgements",
"credits.acknowledgementsContributors": "The following people have also contributed to the development and support of Scratch over the years: Susan Abend, Robbie Berg, Lauren Bessen, Keith Braadfladt, Susan Carillo, Will Denton, Nathan Dinsmore, Catherine Feldman, Jodi Finch, Ioana Fineberg, Rachel Garber, Chris Garrity, Cassy Gibbs, Brian Harvey, Roland Hebert, Tracy Ho, Benjamin Howe, Kapaya Katongo, Evan Karatzas, Christine Kim, Joren Lauwers, Mike Lee, Jeff Lieberman, Mark Loughridge, Kelly Liu, Anthony Lu, Danny Lutz, David Malan, Wayne Marshall, John McIntosh, Paul Medlock-Walton, Dongfang (Tian) Mi, Ximena Miranda, Jens Moenig, Evan Moore, Geetha Narayanan, Kate Nazemi, Liddy Nevile, Wing Ngan, Derek O'Connell, Tim Radvan, Karen Randall, Ian Reynolds, Miriam Ruiz, Chinua Shaw, Ed Shems, Cynthia Solomon, Daniel Strimpel, Kilmer Sweazy, John Henry Thompson, Ubong Ukoh, Vladimir Vuksan, Han Xu, and the many volunteer <a href=\"http://wiki.scratch.mit.edu/wiki/Translators\">Scratch Translators</a> from around the world.",
"credits.acknowledgementsContributors": "The following people have also contributed to the development and support of Scratch over the years: Susan Abend, Robbie Berg, Lauren Bessen, Keith Braadfladt, Susan Carillo, Will Denton, Nathan Dinsmore, Catherine Feldman, Jodi Finch, Ioana Fineberg, JT Galla, Rachel Garber, Chris Garrity, Cassy Gibbs, Brian Harvey, Roland Hebert, Tracy Ho, Benjamin Howe, Kapaya Katongo, Evan Karatzas, Christine Kim, Joren Lauwers, Mike Lee, Jeff Lieberman, Mark Loughridge, Kelly Liu, Anthony Lu, Danny Lutz, David Malan, Wayne Marshall, John McIntosh, Paul Medlock-Walton, Dongfang (Tian) Mi, Ximena Miranda, Jens Moenig, Evan Moore, Geetha Narayanan, Kate Nazemi, Liddy Nevile, Wing Ngan, Derek O'Connell, Tim Radvan, Karen Randall, Ian Reynolds, Miriam Ruiz, Chinua Shaw, Ed Shems, Cynthia Solomon, Daniel Strimpel, Kilmer Sweazy, John Henry Thompson, Ubong Ukoh, Vladimir Vuksan, Han Xu, and the many volunteer <a href=\"http://wiki.scratch.mit.edu/wiki/Translators\">Scratch Translators</a> from around the world.",
"credits.acknowledgementsCommunity": "We greatly appreciate all of the contributions by members of the worldwide Scratch community, who have shaped the direction of Scratch by sharing their projects, comments, and ideas.",
"credits.acknowledgementsInfluencers": "The ideas of Seymour Papert and Alan Kay have deeply inspired and influenced our work on Scratch.",
"credits.supportersTitle": "Supporting Organizations",

View file

@ -1,5 +1,5 @@
{
"download.title": "Scratch 2 Offline Editor",
"download.title": "Scratch 2.0 Offline Editor",
"download.intro": "You can install the Scratch 2.0 editor to work on projects without an internet connection. This version will work on Mac, Windows, and some versions of Linux (32 bit).",
"download.introMac": "<b>Note for Mac Users:</b> the latest version of Scratch 2.0 Offline requires Adobe Air 20. To upgrade to Adobe Air 20 manually, go <a href=\"https://get.adobe.com/air/\">here</a>.",
"download.installation": "Installation",

View file

@ -13,11 +13,11 @@
"faq.makeGameTitle":"How do I make a game or animation with Scratch?",
"faq.makeGameBody":"Check out the <a href=\"/tips\">tips page</a> to see lots of ways to get started with Scratch. Or just <a href=\"/projects/editor/?tip_bar=getStarted\">dive in</a> to the project editor.",
"faq.requirementsTitle":"What are the system requirements for Scratch?",
"faq.requirementsBody":"To run Scratch 2, you need to be using (1) a Windows, ChromeOS, Mac, or Linux computer; (2) a version of <a href=\"https://get.adobe.com/flashplayer/\">Adobe Flash Player</a> released on or after June 15, 2016; (3) a relatively recent web browser: one of the latest two versions of <a href=\"http://google.com/chrome/\">Chrome</a> (Windows, ChromeOS, Mac or Linux), <a href=\"http://www.mozilla.org/firefox/new/\">Firefox</a> (Windows or Mac only), <a href=\"https://support.apple.com/downloads/safari\">Safari</a> (Mac only), <a href=\"https://www.microsoft.com/windows/microsoft-edge\">Edge</a> (Windows only), or <a href=\"https://www.microsoft.com/download/internet-explorer.aspx\">Internet Explorer 11</a> (Windows only). If your computer doesnt meet these requirements, you can try downloading and installing <a href=\"/scratch_1.4\">Scratch 1.4</a>, which you can still use to share projects to the Scratch 2 website.",
"faq.requirementsBody":"To run Scratch 2.0, you need to be using (1) a Windows, ChromeOS, Mac, or Linux computer; (2) a version of <a href=\"https://get.adobe.com/flashplayer/\">Adobe Flash Player</a> released on or after June 15, 2016; (3) a relatively recent web browser: one of the latest two versions of <a href=\"http://google.com/chrome/\">Chrome</a> (Windows, ChromeOS, Mac or Linux), <a href=\"http://www.mozilla.org/firefox/new/\">Firefox</a> (Windows or Mac only), <a href=\"https://support.apple.com/downloads/safari\">Safari</a> (Mac only), <a href=\"https://www.microsoft.com/windows/microsoft-edge\">Edge</a> (Windows only), or <a href=\"https://www.microsoft.com/download/internet-explorer.aspx\">Internet Explorer 11</a> (Windows only). If your computer doesnt meet these requirements, you can try downloading and installing <a href=\"/scratch_1.4\">Scratch 1.4</a>, which you can still use to share projects to the Scratch 2.0 website.",
"faq.offlineTitle":"Do you have a downloadable version so I can create and view projects offline?",
"faq.offlineBody":"The Scratch 2 offline editor allows you to create Scratch projects without an internet connection. You can download Scratch 2 from the <a href=\"/scratch2download/\">website</a>. You can also still use <a href=\"/scratch_1.4\">Scratch 1.4</a>. Note: You can have both Scratch 1.4 and 2 on your computer.",
"faq.offlineBody":"The Scratch 2.0 offline editor allows you to create Scratch projects without an internet connection. You can <a href=\"/scratch2download/\">download Scratch 2.0</a> from the website. You can also still use <a href=\"/scratch_1.4\">Scratch 1.4</a>. Note: You can have both Scratch 1.4 and 2.0 on your computer.",
"faq.uploadOldTitle":"Can I still upload projects created with older versions of Scratch to the website?",
"faq.uploadOldBody":"Yes - you can share or upload projects made with earlier versions of Scratch, and they will be visible and playable. (However, you cant download projects made with or edited in later versions of Scratch and open them in earlier versions. For example, you cant open a Scratch 2 project in <a href=\"/scratch_1.4\">Scratch 1.4</a>, because <a href=\"/scratch_1.4\">Scratch 1.4</a> doesnt know how to read the .sb2 project file format.)",
"faq.uploadOldBody":"Yes - you can share or upload projects made with earlier versions of Scratch, and they will be visible and playable. (However, you cant download projects made with or edited in later versions of Scratch and open them in earlier versions. For example, you cant open a Scratch 2.0 project in <a href=\"/scratch_1.4\">Scratch 1.4</a>, because <a href=\"/scratch_1.4\">Scratch 1.4</a> doesnt know how to read the .sb2 project file format.)",
"faq.recordVideoTitle":"Can I record a video of my Scratch project?",
"faq.recordVideoBody":"Yes, you can record a video of your Scratch project up to 60 seconds. In the Scratch editor, from the File menu, select \"Record Project Video.\" (You need to be signed in to see this option.) You can choose additional recording options (such as recording sound and mouse clicks) through the \"More Options\" menu. Then, run your project however you'd like. Once the recording is done, follow the instructions to download the file to your computer. Depending on what kind of computer you have, you may need to download another program like the <a href=\"http://www.videolan.org/vlc/index.html\">VLC Media Player</a> to play the file. This file will run on YouTube, Vimeo, and Facebook, but may need to be converted for other websites like Twitter or Tumblr.",
"faq.scratchCostTitle":"How much does Scratch cost? Do I need a license?",
@ -38,7 +38,7 @@
"faq.rentInfoTitle":"Does the Scratch Team sell or rent information about users of Scratch to anyone?",
"faq.rentInfoBody":"No.",
"faq.viewUnsharedTitle":"Can the Scratch Team view unshared projects on my 'My Stuff' page?",
"faq.viewUnsharedBody":"Since the Scratch Team is responsible for moderation, we have access to all content stored on the Scratch website - including unshared projects. If you prefer to work on projects in complete privacy, you can use either the <a href=\"/scratch2download\">Scratch 2 offline editor</a> or <a href=\"/scratch_1.4\">Scratch 1.4</a>.",
"faq.viewUnsharedBody":"Since the Scratch Team is responsible for moderation, we have access to all content stored on the Scratch website - including unshared projects. If you prefer to work on projects in complete privacy, you can use either the <a href=\"/scratch2download\">Scratch 2.0 offline editor</a> or <a href=\"/scratch_1.4\">Scratch 1.4</a>.",
"faq.remixDefinitionTitle":"What is a remix?",
"faq.remixDefinitionBody":"When a Scratcher makes a copy of someone elses project and modifies it to add their own ideas (for example, by changing scripts or costumes), the resulting project is called a \"remix.\" Every project shared to the Scratch website can be remixed. We consider even a minor change to be a valid remix, as long as credit is given to the original project creator and others who made significant contributions to the remix.",
"faq.remixableTitle":"Why does the Scratch Team require that all projects be “remixable”?",
@ -138,5 +138,5 @@
"faq.dataBody":"When a student first signs up on Scratch, we ask for basic demographic data including gender, age (birth month and year), country, and an email address for verification. This data is used (in aggregated form) in research studies intended to improve our understanding of how people learn with Scratch. When an educator uses a Scratch Teacher Account to create student accounts in bulk, students are not required to provide an email address for account setup.",
"faq.lawComplianceTitle":"Is Scratch 2.0 (online version) compliant with United States local and federal data privacy laws?",
"faq.lawComplianceBody":"Scratch cares deeply about the privacy of students and of all individuals who use our platform. We have in place physical and electronic procedures to protect the information we collect on the Scratch website. Although we are not in a position to offer contractual guarantees with each entity that uses our free educational product, we are in compliance with all United States federal laws that are applicable to MIT, a 501(c)(3) organization and the entity that created and maintains Scratch. We encourage you to read the Scratch Privacy Policy for more information.",
"faq.schoolsMoreInfo":"For more more questions about Teacher Accounts, see the <a href=\"/educators/faq\">Teacher Account FAQ</a>"
"faq.schoolsMoreInfo":"For more questions about Teacher Accounts, see the <a href=\"/educators/faq\">Teacher Account FAQ</a>"
}

View file

@ -13,5 +13,5 @@
"guidelines.honestybody": "Dont try to impersonate other Scratchers, spread rumors, or otherwise try to trick the community.",
"guidelines.friendlyheader": "Help keep the site friendly.",
"guidelines.friendlybody": "If you think a project or comment is mean, insulting, too violent, or otherwise inappropriate, click “Report” to let us know about it.",
"guidelines.footer": "Scratch welcomes people of all ages, races, ethnicities, religions, sexual orientations, and gender identities."
"guidelines.footer": "Scratch welcomes people of all ages, races, ethnicities, religions, abilities, sexual orientations, and gender identities."
}

View file

@ -30,6 +30,14 @@ var Jobs = React.createClass({
<div className="inner">
<h3><FormattedMessage id='jobs.openings' /></h3>
<ul>
<li>
<a href="/jobs/moderator">
Community Moderator (Remote)
</a>
<span>
MIT Media Lab, Cambridge, MA (or Remote)
</span>
</li>
<li>
<a href="https://www.media.mit.edu/about/job-opportunities/junior-web-designer-scratch/">
Junior Designer

View file

@ -12,7 +12,7 @@
"teacherlanding.meetupTitle": "In-Person Gatherings",
"teacherlanding.meetupDescription": "<a href=\"http://www.meetup.com/pro/scratched/\">Scratch Educator Meetups</a> are gatherings of Scratch Educators who want to learn with and from each other, sharing their ideas and strategies for supporting computational creativity in all its forms.",
"teacherlanding.guidesTitle": "Guides & Tutorials",
"teacherlanding.tttPage": "The <a href=\"/go\">Things to Try page</a> offers a variety of tutorials, activity cards, and educator guides.",
"teacherlanding.tttPage": "The <a href=\"/tips\">Tips page</a> offers a variety of tutorials, activity cards, and educator guides.",
"teacherlanding.tipsWindow" : "The <a href=\"/projects/editor/?tip_bar=home\">Tips Window</a> provides help for creating projects in Scratch.",
"teacherlanding.creativeComputing": "The <a href=\"http://scratched.gse.harvard.edu/guide/\">Creative Computing Curriculum Guide</a> provides plans, activities, and strategies for introducing creative computing.",
"teacherlanding.accountsTitle": "Teacher Accounts in Scratch",

View file

@ -84,8 +84,8 @@ var Landing = injectIntl(React.createClass({
<h3 id="guides-header"><FormattedMessage id="teacherlanding.guidesTitle" /></h3>
<FlexRow className="guides-and-tutorials">
<div>
<a href="/go">
<img src="/svgs/teachers/resources.svg" alt="resources icon" />
<a href="/tips">
<img src="/svgs/teachers/v2-cards.svg" alt="cards icon" />
</a>
<p>
<FormattedHTMLMessage id="teacherlanding.tttPage" />

View file

@ -10,8 +10,8 @@
"wedo2.setupText": "Connect your WeDo 2.0 by following the steps in the <a href=\"/projects/editor/?tip_bar=ext2\">Tips Window</a>",
"wedo2.createTitle": "3. Create",
"wedo2.createText": "Use the WeDo extension blocks to turn on lights, control motors, and make your project interactive",
"wedo2.wedo2SetupInstructions": "Wedo 2.0 Setup Instructions",
"wedo2.wedo1SetupInstructions": "Wedo 1.0 Setup Instructions",
"wedo2.wedo2SetupInstructions": "WeDo 2.0 Setup Instructions",
"wedo2.wedo1SetupInstructions": "WeDo 1.0 Setup Instructions",
"wedo2.starterProjects": "WeDo 2.0 Starter Projects",
"wedo2.starterMotor": "Motor",
"wedo2.starterDistance": "Distance Sensor",

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="140" height="116" viewBox="0 0 140 116"><title>resources</title><g style="isolation:isolate"><g id="Layer_1" data-name="Layer 1"><g opacity="0.4" style="mix-blend-mode:multiply"><path d="M97,44.18L91.25,62.24V81.16a2.45,2.45,0,0,1-2.44,2.45H84.43l-0.95,3a2.44,2.44,0,0,1-3.07,1.58L66.18,83.61h-15a2.45,2.45,0,0,1-2.44-2.45V78l-4.17-1.33A2.44,2.44,0,0,1,43,73.66l5.75-18v-19a2.44,2.44,0,0,1,2.44-2.44H73.85l17.4,5.55,4.17,1.33A2.45,2.45,0,0,1,97,44.18Z" fill="#bcbec0" stroke="#bcbec0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/><path d="M91.25,36.66v3.11l-17.4-5.55h15A2.44,2.44,0,0,1,91.25,36.66Z" fill="#bcbec0" stroke="#bcbec0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/></g><rect x="48.74" y="32.47" width="42.52" height="49.4" rx="2.12" ry="2.12" transform="translate(20.68 -18.57) rotate(17.69)" fill="#caa9ff" stroke="#824dcb" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/><rect x="48.74" y="32.47" width="42.52" height="49.4" rx="2.12" ry="2.12" fill="#caa9ff" stroke="#824dcb" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/><path d="M54.57,45.78H85.43a0,0,0,0,1,0,0V71.35a3,3,0,0,1-3,3H57.57a3,3,0,0,1-3-3V45.78A0,0,0,0,1,54.57,45.78Z" fill="#fff" stroke="#824dcb" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/><path d="M57.34,40H82.66a2.77,2.77,0,0,1,2.77,2.77v3a0,0,0,0,1,0,0H54.57a0,0,0,0,1,0,0v-3A2.77,2.77,0,0,1,57.34,40Z" fill="#824dcb" stroke="#824dcb" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/><polygon points="74.76 61.95 70 66.7 65.24 61.95 67.36 61.95 67.36 57.45 72.64 57.45 72.64 61.95 74.76 61.95" fill="#fff" stroke="#824dcb" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/><line x1="67.93" y1="54.53" x2="72.07" y2="54.53" fill="#fff" stroke="#824dcb" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/><line x1="68.88" y1="51.81" x2="71.12" y2="51.81" fill="#fff" stroke="#824dcb" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

View file

@ -0,0 +1,153 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="140px" height="116px" viewBox="0 0 140 116" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 43.2 (39069) - http://www.bohemiancoding.com/sketch -->
<title>Artboard</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Artboard">
<g id="cards-2" transform="translate(0.000000, 19.000000)">
<g id="card" transform="translate(113.188647, 46.859709) rotate(15.000000) translate(-113.188647, -46.859709) translate(93.118717, 20.915653)">
<g id="Rectangle-11">
<g id="path-1-link" fill="#59C059">
<rect id="path-1" x="0" y="0" width="39.4372686" height="51.7185135" rx="4"></rect>
</g>
<rect id="Rectangle-path" stroke-opacity="0.2" stroke="#000000" x="0.48951049" y="0.48951049" width="38.4582476" height="50.7394926" rx="4"></rect>
</g>
<ellipse id="Oval" fill-opacity="0.1" fill="#000000" fill-rule="nonzero" cx="19.8411103" cy="47.8152295" rx="1.2247599" ry="1.21977627"></ellipse>
<path d="M4.57562642,7.56838877 C4.57562642,6.48733668 5.45643268,5.61097081 6.53192026,5.61097081 L33.1503003,5.61097081 C34.2307316,5.61097081 35.1065941,6.48998762 35.1065941,7.56838877 L35.1065941,12.4417179 L4.57562642,12.4417179 L4.57562642,7.56838877 Z" id="Rectangle-12" fill-opacity="0.1" fill="#000000" fill-rule="nonzero"></path>
<path d="M4.57562642,12.4417179 L35.1065941,12.4417179 L35.1065941,42.9311893 C35.1065941,44.011777 34.225788,44.8877665 33.1503003,44.8877665 L6.53192026,44.8877665 C5.45148901,44.8877665 4.57562642,44.019913 4.57562642,42.9311893 L4.57562642,12.4417179 Z" id="Rectangle-12-Copy" fill-opacity="0.5" fill="#FFFFFF" fill-rule="nonzero"></path>
<rect id="Rectangle-13" fill="#FFFFFF" fill-rule="nonzero" opacity="0.25" x="4.6540876" y="47.327319" width="7.83846333" height="1" rx="0.5"></rect>
<rect id="Rectangle-13-Copy" fill="#FFFFFF" fill-rule="nonzero" opacity="0.25" x="14.9420707" y="8.05052334" width="9.79807916" height="1.95164202" rx="0.97582101"></rect>
</g>
<g id="card" transform="translate(27.034801, 45.880688) rotate(-15.000000) translate(-27.034801, -45.880688) translate(6.964871, 19.936632)">
<g id="Rectangle-11">
<g id="path-2-link" fill="#9966FF">
<rect id="path-2" x="0" y="0" width="39.4372686" height="51.7185135" rx="4"></rect>
</g>
<rect id="Rectangle-path" stroke-opacity="0.2" stroke="#000000" x="0.48951049" y="0.48951049" width="38.4582476" height="50.7394926" rx="4"></rect>
</g>
<ellipse id="Oval" fill-opacity="0.1" fill="#000000" fill-rule="nonzero" cx="19.8411103" cy="47.8152295" rx="1.2247599" ry="1.21977627"></ellipse>
<path d="M4.57562642,7.56838877 C4.57562642,6.48733668 5.45643268,5.61097081 6.53192026,5.61097081 L33.1503003,5.61097081 C34.2307316,5.61097081 35.1065941,6.48998762 35.1065941,7.56838877 L35.1065941,12.4417179 L4.57562642,12.4417179 L4.57562642,7.56838877 Z" id="Rectangle-12" fill-opacity="0.1" fill="#000000" fill-rule="nonzero"></path>
<path d="M4.57562642,12.4417179 L35.1065941,12.4417179 L35.1065941,42.9311893 C35.1065941,44.011777 34.225788,44.8877665 33.1503003,44.8877665 L6.53192026,44.8877665 C5.45148901,44.8877665 4.57562642,44.019913 4.57562642,42.9311893 L4.57562642,12.4417179 Z" id="Rectangle-12-Copy" fill-opacity="0.5" fill="#FFFFFF" fill-rule="nonzero"></path>
<rect id="Rectangle-13" fill="#FFFFFF" fill-rule="nonzero" opacity="0.25" x="4.6540876" y="47.327319" width="7.83846333" height="1" rx="0.5"></rect>
<rect id="Rectangle-13-Copy" fill="#FFFFFF" fill-rule="nonzero" opacity="0.25" x="14.9420707" y="8.05052334" width="9.79807916" height="1.95164202" rx="0.97582101"></rect>
</g>
<g id="card" transform="translate(104.039984, 42.603668) rotate(10.000000) translate(-104.039984, -42.603668) translate(81.522501, 12.743528)">
<g id="Rectangle-11">
<g id="path-3-link" fill="#9966FF">
<rect id="path-3" x="0" y="0" width="44.8598931" height="59.1068727" rx="4"></rect>
</g>
<rect id="Rectangle-path" stroke-opacity="0.2" stroke="#000000" x="0.48951049" y="0.48951049" width="43.8808721" height="58.1278517" rx="4"></rect>
</g>
<ellipse id="Oval" fill-opacity="0.1" fill="#000000" fill-rule="nonzero" cx="22.5692629" cy="54.6459766" rx="1.39316438" ry="1.39403002"></ellipse>
<path d="M5.20477506,8.36232735 C5.20477506,7.28548846 6.08061826,6.41253807 7.17146093,6.41253807 L37.967065,6.41253807 C39.0532357,6.41253807 39.9337509,7.29287572 39.9337509,8.36232735 L39.9337509,14.2191062 L5.20477506,14.2191062 L5.20477506,8.36232735 Z" id="Rectangle-12" fill-opacity="0.1" fill="#000000" fill-rule="nonzero"></path>
<path d="M5.20477506,14.2191062 L39.9337509,14.2191062 L39.9337509,49.3328392 C39.9337509,50.4194403 39.0579076,51.3003046 37.967065,51.3003046 L7.17146093,51.3003046 C6.08529031,51.3003046 5.20477506,50.4202596 5.20477506,49.3328392 L5.20477506,14.2191062 Z" id="Rectangle-12-Copy" fill-opacity="0.5" fill="#FFFFFF" fill-rule="nonzero"></path>
<rect id="Rectangle-13" fill="#FFFFFF" fill-rule="nonzero" opacity="0.25" x="5.29402464" y="54.0883646" width="8.91625204" height="1.11522401" rx="0.557612006"></rect>
<rect id="Rectangle-13-Copy" fill="#FFFFFF" fill-rule="nonzero" opacity="0.25" x="16.9966054" y="9.2005981" width="11.145315" height="2.23044803" rx="1.11522401"></rect>
</g>
<g id="card" transform="translate(37.466557, 42.603668) rotate(-10.000000) translate(-37.466557, -42.603668) translate(14.949075, 12.743528)">
<g id="Rectangle-11">
<g id="path-4-link" fill="#FF8C1A">
<rect id="path-4" x="-1.42108547e-13" y="0" width="44.8598931" height="59.1068727" rx="4"></rect>
</g>
<rect id="Rectangle-path" stroke-opacity="0.2" stroke="#000000" x="0.48951049" y="0.48951049" width="43.8808721" height="58.1278517" rx="4"></rect>
</g>
<ellipse id="Oval" fill-opacity="0.1" fill="#000000" fill-rule="nonzero" cx="22.5692629" cy="54.6459766" rx="1.39316438" ry="1.39403002"></ellipse>
<path d="M5.20477506,8.36232735 C5.20477506,7.28548846 6.08061826,6.41253807 7.17146093,6.41253807 L37.967065,6.41253807 C39.0532357,6.41253807 39.9337509,7.29287572 39.9337509,8.36232735 L39.9337509,14.2191062 L5.20477506,14.2191062 L5.20477506,8.36232735 Z" id="Rectangle-12" fill-opacity="0.1" fill="#000000" fill-rule="nonzero"></path>
<path d="M5.20477506,14.2191062 L39.9337509,14.2191062 L39.9337509,49.3328392 C39.9337509,50.4194403 39.0579076,51.3003046 37.967065,51.3003046 L7.17146093,51.3003046 C6.08529031,51.3003046 5.20477506,50.4202596 5.20477506,49.3328392 L5.20477506,14.2191062 Z" id="Rectangle-12-Copy" fill-opacity="0.5" fill="#FFFFFF" fill-rule="nonzero"></path>
<rect id="Rectangle-13" fill="#FFFFFF" fill-rule="nonzero" opacity="0.25" x="5.29402464" y="54.0883646" width="8.91625204" height="1.11522401" rx="0.557612006"></rect>
<rect id="Rectangle-13-Copy" fill="#FFFFFF" fill-rule="nonzero" opacity="0.25" x="16.9966054" y="9.2005981" width="11.145315" height="2.23044803" rx="1.11522401"></rect>
</g>
<g id="card" transform="translate(51.509393, 37.467872) rotate(-5.000000) translate(-51.509393, -37.467872) translate(25.565337, 4.181159)">
<g id="Rectangle-11">
<g id="path-5-link" fill="#FFBF00">
<rect id="path-5" x="0.453724433" y="0.0396628431" width="50.7754833" height="66.4952317" rx="4"></rect>
</g>
<rect id="Rectangle-path" stroke-opacity="0.2" stroke="#000000" x="0.943234922" y="0.529173332" width="49.7964623" height="65.5162107" rx="4"></rect>
</g>
<path d="M5.89111902,9.16320211 C5.89111902,8.08674568 6.76724904,7.21410533 7.84043964,7.21410533 L43.2504194,7.21410533 C44.3269994,7.21410533 45.19974,8.0883022 45.19974,9.16320211 L45.19974,15.9964944 L5.89111902,15.9964944 L5.89111902,9.16320211 Z" id="Rectangle-12" fill-opacity="0.1" fill="#000000" fill-rule="nonzero"></path>
<path d="M5.89111902,15.9964944 L45.19974,15.9964944 L45.19974,55.7567292 C45.19974,56.8370608 44.32361,57.7128426 43.2504194,57.7128426 L7.84043964,57.7128426 C6.76385959,57.7128426 5.89111902,56.8415374 5.89111902,55.7567292 L5.89111902,15.9964944 Z" id="Rectangle-12-Copy" fill-opacity="0.5" fill="#FFFFFF" fill-rule="nonzero"></path>
<rect id="Rectangle-13" fill="#FFFFFF" fill-rule="nonzero" opacity="0.25" x="5.99213779" y="60.8494102" width="10.0920215" height="1.25462702" rx="0.627313508"></rect>
<rect id="Rectangle-13-Copy" fill="#FFFFFF" fill-rule="nonzero" opacity="0.25" x="19.237916" y="10.3506729" width="12.6150269" height="2.50925403" rx="1.25462702"></rect>
</g>
<g id="card" transform="translate(89.203564, 37.425208) rotate(5.000000) translate(-89.203564, -37.425208) translate(63.749019, 4.138495)">
<g id="Rectangle-11">
<g id="path-6-link" fill="#CF63CF">
<rect id="path-6" x="0" y="4.8316906e-13" width="50.7744132" height="66.4952317" rx="4"></rect>
</g>
<rect id="Rectangle-path" stroke-opacity="0.2" stroke="#000000" x="0.48951049" y="0.48951049" width="49.7953922" height="65.5162107" rx="4"></rect>
</g>
<ellipse id="Oval" fill-opacity="0.1" fill="#000000" fill-rule="nonzero" cx="25.5448911" cy="61.4767236" rx="1.57684513" ry="1.56828377"></ellipse>
<path d="M5.89099486,9.16320211 C5.89099486,8.08674568 6.76710642,7.21410533 7.8402744,7.21410533 L43.2495078,7.21410533 C44.3260652,7.21410533 45.1987874,8.0883022 45.1987874,9.16320211 L45.1987874,15.9964944 L5.89099486,15.9964944 L5.89099486,9.16320211 Z" id="Rectangle-12" fill-opacity="0.1" fill="#000000" fill-rule="nonzero"></path>
<path d="M5.89099486,15.9964944 L45.1987874,15.9964944 L45.1987874,55.7567292 C45.1987874,56.8370608 44.3226758,57.7128426 43.2495078,57.7128426 L7.8402744,57.7128426 C6.76371704,57.7128426 5.89099486,56.8415374 5.89099486,55.7567292 L5.89099486,15.9964944 Z" id="Rectangle-12-Copy" fill-opacity="0.5" fill="#FFFFFF" fill-rule="nonzero"></path>
<rect id="Rectangle-13" fill="#FFFFFF" fill-rule="nonzero" opacity="0.25" x="5.99201149" y="60.8494102" width="10.0918089" height="1.25462702" rx="0.627313508"></rect>
<rect id="Rectangle-13-Copy" fill="#FFFFFF" fill-rule="nonzero" opacity="0.25" x="19.2375106" y="10.3506729" width="12.6147611" height="2.50925403" rx="1.25462702"></rect>
</g>
<g id="card" transform="translate(41.720116, 0.243743)">
<g id="Rectangle-11">
<g id="path-7-link" fill="#4C97FF">
<rect id="path-7" x="0" y="0" width="56.1981077" height="73.8835908" rx="4"></rect>
</g>
<rect id="Rectangle-path" stroke-opacity="0.2" stroke="#000000" x="0.48951049" y="0.48951049" width="55.2190868" height="72.9045698" rx="4"></rect>
</g>
<path d="M6.52026765,9.96693894 C6.52026765,8.88928427 7.38932905,8.01567259 8.47417729,8.01567259 L48.0729871,8.01567259 C49.1521016,8.01567259 50.0268967,8.89885935 50.0268967,9.96693894 L50.0268967,17.7738827 L6.52026765,17.7738827 L6.52026765,9.96693894 Z" id="Rectangle-12" fill-opacity="0.1" fill="#000000" fill-rule="nonzero"></path>
<path d="M6.52026765,17.7738827 L50.0268967,17.7738827 L50.0268967,62.1633204 C50.0268967,63.2469364 49.1578353,64.1253807 48.0729871,64.1253807 L8.47417729,64.1253807 C7.39506279,64.1253807 6.52026765,63.2408374 6.52026765,62.1633204 L6.52026765,17.7738827 Z" id="Rectangle-12-Copy" fill-opacity="0.5" fill="#FFFFFF" fill-rule="nonzero"></path>
<rect id="Rectangle-13" fill="#FFFFFF" fill-rule="nonzero" opacity="0.25" x="6.83186379" y="67.8069331" width="11.1698102" height="1.39403002" rx="0.697015009"></rect>
<rect id="Rectangle-13-Copy" fill="#FFFFFF" fill-rule="nonzero" opacity="0.25" x="12.7528124" y="11.5007476" width="30.9711158" height="2.78806003" rx="1.39403001"></rect>
</g>
<g id="s" transform="translate(61.452571, 24.391236)">
<g id="S-glow" opacity="0.5" transform="translate(2.937063, 16.643357)">
<g id="ID0.2794777057133615">
<g id="ID0.2817511581815779">
<g id="ID0.1519448710605502">
<g id="path-10-link" transform="translate(1.414141, 1.468531)" fill="#FFAB19">
<path d="M9.05147063,10.5510422 C8.50784377,12.1399476 7.03012136,13.1057181 4.66037971,13.4217238 C4.55266418,13.4359264 4.44663171,13.4448029 4.34059924,13.4483535 C4.20258871,13.6613912 4.02250181,13.8460238 3.81043686,13.9898241 C3.25502866,14.3644152 2.73496462,14.5472725 2.2216328,14.5472725 C1.16635722,14.5472725 0.0302949927,13.7164259 0.0302949927,11.8914038 C0.0302949927,11.7671318 0.0353441582,11.6055783 0.0471255442,11.3818888 C0.0521747096,11.2860219 0.0572238751,11.2114588 0.0589069302,11.156424 C0.0302949927,11.0179496 0.0151474964,10.8776998 0.0151474964,10.7356748 L0.0151474964,9.87642314 C0.0151474964,9.73617339 0.0286119375,9.59592364 0.0555408199,9.45567389 C0.0572238751,9.33672791 0.0622730406,9.20357939 0.0706883163,9.05800372 C0.0302949927,8.90177613 0,8.72069416 0,8.51830842 C0,8.42599213 0.0067322206,8.33367583 0.0185136066,8.24313485 C0.0824697024,7.76735092 0.282753265,7.2897916 0.621047351,6.90809924 C0.504916545,6.56546377 0.44432656,6.20329985 0.44432656,5.83225936 L0.44432656,4.92684956 C0.44432656,4.5593597 0.513331821,4.10132886 0.851625904,2.9615777 C0.993002535,2.47159122 1.03844503,2.31891427 1.10071807,2.17688921 C1.43227993,1.39220071 1.93214731,0.999856472 2.29568723,0.806347316 C2.88980569,0.493892169 3.52768359,0.334113969 4.19080732,0.334113969 C4.49712336,0.334113969 4.78997496,0.367844923 5.06936212,0.431756202 C5.19390819,0.342990536 5.32686955,0.268427376 5.46824618,0.20629141 C5.64833308,0.124626996 5.84020137,0.0678169693 6.05226632,0.0323107027 C6.5824287,-0.0635562173 7.14288605,0.055389776 7.63097208,0.367844923 C8.14430386,0.698053202 8.73337316,1.38332415 8.66100179,2.79292293 C8.64922043,3.0414668 8.62902374,3.3734504 8.5987288,3.80662685 C8.56843379,4.15281295 8.52972351,4.62149567 8.47754876,5.24108002 C8.49101322,5.48074732 8.4859641,5.74881963 8.4657674,6.06482541 C8.45735213,6.18554671 8.43883855,6.30626802 8.40854354,6.4234387 C8.4018113,6.4500684 8.39507907,6.47492279 8.38834684,6.49800186 C8.61555934,6.80513107 8.7704004,7.11226027 8.87643287,7.37855728 C8.9757331,7.58981956 9.0598859,7.83303752 9.13394031,8.12951479 C9.16255221,8.24135954 9.18106587,8.3549796 9.18948114,8.47037497 C9.2652186,9.46632574 9.22650831,10.0539545 9.05147063,10.5510422 Z" id="path-10"></path>
</g>
<path d="M0.0625835,10.6545845 C0.0654159828,10.6696466 0.0785363515,12.8757351 0.0903779051,12.9330452 C0.0903779051,12.9330452 0.030294996,13.2789122 0.030294996,13.3599352 C0.030294996,15.8132466 1.62502821,17.4843354 3.63577421,17.4843354 C4.44288813,17.4843354 5.22301858,17.2104753 5.99482154,16.6899383 C6.15773916,16.5794668 6.30998153,16.455367 6.45017499,16.3191057 C9.19467033,15.9070801 11.068577,14.6436019 11.798145,12.51123 C12.0522058,11.7899056 12.1037469,11.01169 12.013375,9.82329607 C11.998754,9.62270415 11.9657231,9.41998997 11.9148173,9.22099794 C11.825314,8.86257456 11.7161806,8.54056849 11.5808771,8.2449038 C11.4973039,8.03970202 11.4008799,7.83757577 11.2903376,7.63969918 C11.3122096,7.29785652 11.3187701,7.00746843 11.3087717,6.73870494 C11.324222,6.55494325 11.3428743,6.33242258 11.369275,6.01749833 C11.3923465,5.74288329 11.407737,5.56200271 11.4212081,5.40806565 C11.453722,4.94649331 11.474924,4.60053319 11.4875744,4.33365512 C11.5771362,2.58946381 10.9105266,1.30888213 9.78979442,0.587954637 C9.0100693,0.0887985294 8.10049814,-0.104446246 7.22381595,0.0540803161 C6.91389167,0.105854223 6.60778434,0.196906919 6.31646846,0.329010591 C6.28667995,0.342088568 6.2568573,0.355703558 6.22704162,0.369841177 C6.02238678,0.346063898 5.8149172,0.334113972 5.60494874,0.334113972 C4.72038947,0.334113972 3.86359761,0.547893194 3.0709185,0.964774142 C2.29785619,1.37624891 1.6404515,2.06004915 1.21989812,3.05534878 C1.13150613,3.25660625 1.08988151,3.38907786 0.911127286,4.0086085 C0.569056056,5.16093076 0.444326563,5.79551903 0.444326563,6.39538103 L0.444326563,7.30079083 C0.444326563,7.56122038 0.464950549,7.81981729 0.50573209,8.07450374 C0.260515557,8.5166593 0.0997479354,9.00534203 0.0320935152,9.50863868 C0.0108144131,9.67206509 0,9.82948469 0,9.98683989 C0,10.2168577 0.0219524737,10.4385245 0.0625835,10.6545845 Z" id="Shape" stroke="#FFFFFF" stroke-width="2.88"></path>
</g>
</g>
</g>
<g id="ID0.20706806425005198" transform="translate(3.265502, 3.243845)" fill-rule="nonzero" fill="#FFFFFF">
<path d="M5.49281879,6.85199934 C5.54213231,7.49768081 5.53203397,7.91381424 5.46319702,8.10128734 C5.17674103,8.95503551 4.21437009,9.49100257 2.57642083,9.70972124 C2.0235372,9.78268655 1.4709902,9.50680287 0.918106587,8.88207013 C0.918106587,8.97580671 0.937798329,9.25683877 0.977518429,9.72552147 C1.0071402,10.0690446 1.00209104,10.3500767 0.962707546,10.5686178 C0.715803356,10.7351422 0.518549292,10.8185819 0.370440438,10.8185819 C0.143227993,10.8185819 0.0299583817,10.5844181 0.0299583817,10.1157354 C0.0299583817,10.0324732 0.0348392416,9.8998573 0.044769267,9.71771013 C0.0545309869,9.5357405 0.0595801523,9.40809545 0.0595801523,9.33513007 C0.0595801523,9.15813135 0.044769267,9.03332681 0.0151474964,8.96036143 L0.0151474964,8.10146488 C0.0151474964,8.08069368 0.0200283563,8.05725959 0.0299583817,8.03116246 C0.0397201016,8.00524288 0.0496501269,7.98180872 0.0595801523,7.96086004 C0.0496501269,7.81528437 0.0545309869,7.59141732 0.0743910378,7.28943654 C0.094082783,7.10196346 0.094082783,6.98248487 0.0743910378,6.93029066 C0.0249092163,6.82643483 0.000504916545,6.7639438 0.000504916545,6.7429951 C0.0397201016,6.45148865 0.242359942,6.30573542 0.607414604,6.30573542 C0.844220463,6.30573542 0.987280148,6.39432356 1.03676197,6.57114477 C1.03676197,6.73766916 1.05645372,6.98248487 1.09600551,7.3050593 C1.15541736,7.67982791 1.3427414,8.0547741 1.65865085,8.42936527 C2.00401377,8.85632809 2.3345658,9.05409801 2.65064356,9.02285251 C3.0059365,8.98148765 3.36122944,8.89289952 3.71652238,8.75744313 C4.20999415,8.56997003 4.50604356,8.35142898 4.60483889,8.10164243 C4.67367584,7.91416933 4.70834678,7.71657695 4.70834678,7.50815511 C4.70834678,6.8733031 4.48635181,6.39947197 4.04219356,6.08719436 C3.84460288,5.95191548 3.47954822,5.84255618 2.94652465,5.75911645 C2.64054523,5.71775165 2.45288457,5.69662542 2.38404762,5.69662542 C1.91026759,5.70709977 1.46846562,5.54572379 1.0589783,5.21249747 C0.649322677,4.87944869 0.444663171,4.49402817 0.444663171,4.05676849 L0.444663171,3.15118116 C0.444663171,2.95358879 0.553220228,2.49023201 0.770502649,1.76146589 C0.868961376,1.41776522 0.923324055,1.23579561 0.933422389,1.21484692 C1.0221194,0.996305842 1.13555731,0.850552617 1.27373614,0.777587236 C1.60916903,0.600766031 1.96446197,0.512177896 2.33961496,0.512177896 C3.06989259,0.512177896 3.60779702,0.824455514 3.95332824,1.44901074 C3.98295001,1.48025625 4.03226353,1.52712453 4.10143709,1.58961556 C4.11119881,1.44403987 4.13105887,1.22017285 4.16068064,0.918192053 C4.15075061,0.782913181 4.14082059,0.652782713 4.13105887,0.527800654 C4.13105887,0.382224961 4.19989582,0.283340008 4.33824296,0.231145796 C4.37762645,0.21037463 4.43198913,0.194751873 4.5011627,0.184277524 C4.59978973,0.163506358 4.7059905,0.189603464 4.81959673,0.26221378 C4.93286634,0.335179157 4.97982358,0.55389776 4.96013183,0.918014523 C4.95020181,1.14702994 4.93051007,1.46978191 4.90088829,1.88609288 C4.87126652,2.22979355 4.82700217,2.75546382 4.76759033,3.46345878 C4.78728207,3.62998317 4.78728207,3.85917612 4.76759033,4.15050504 C4.7181085,4.34827494 4.56999965,4.4471599 4.32343207,4.4471599 C4.19501496,4.4471599 4.07181533,4.41076597 3.95332824,4.33797813 C3.8940847,4.14038575 3.86463124,4.05676849 3.86463124,4.08801401 C3.88415468,3.80698191 3.8299603,3.43221327 3.7017115,2.96370807 C3.59298613,2.72439584 3.44268931,2.38353568 3.2501478,1.94095007 C3.05760629,1.49854198 2.80346496,1.26153766 2.48772382,1.23029214 C2.09287908,1.19904663 1.83638148,1.33965144 1.71789439,1.65192906 C1.6785109,1.78738546 1.62397991,1.9853329 1.55514296,2.24541631 C1.43665587,2.63065929 1.36260145,3.00027953 1.33297968,3.35409948 C1.32304965,3.46878472 1.31311963,3.51565299 1.30335791,3.49470429 C1.33297968,3.70312608 1.36748231,3.9111928 1.40703411,4.11943705 C1.45634762,4.37969799 1.57735929,4.57764543 1.76973249,4.71274677 C1.962274,4.84820318 2.32968494,4.93128785 2.87263853,4.96253336 C4.20494499,5.04615061 5.02896879,5.53542697 5.34487824,6.43053995 C5.39402345,6.51397968 5.44333697,6.65440696 5.49281879,6.85199934 Z" id="ID0.570444684009999"></path>
</g>
</g>
<g id="S-glow" opacity="0.5" transform="translate(0.979021, 7.832168)">
<g id="ID0.2794777057133615">
<g id="ID0.2817511581815779">
<g id="ID0.1519448710605502">
<g id="path-10-link" transform="translate(1.740482, 1.794872)" fill="#FFAB19">
<path d="M11.1402715,12.8957182 C10.4711923,14.8377138 8.65245706,16.0180999 5.73585195,16.4043291 C5.60327899,16.4216878 5.47277749,16.4325369 5.34227598,16.4368765 C5.17241688,16.6972559 4.95077145,16.9229179 4.68976845,17.0986739 C4.00618912,17.5565075 3.3661103,17.7799997 2.73431729,17.7799997 C1.43551657,17.7799997 0.0372861449,16.7645205 0.0372861449,14.5339379 C0.0372861449,14.38205 0.0435005024,14.1845957 0.0580006698,13.9111975 C0.0642150273,13.7940268 0.0704293848,13.7028941 0.0725008372,13.6356294 C0.0372861449,13.4663828 0.0186430724,13.2949665 0.0186430724,13.1213803 L0.0186430724,12.0711838 C0.0186430724,11.8997675 0.0352146923,11.7283511 0.0683579322,11.5569348 C0.0704293848,11.4115563 0.0766437423,11.2488193 0.0870010047,11.0708934 C0.0372861449,10.8799486 0,10.6586262 0,10.4112658 C0,10.2984348 0.00828580997,10.1856038 0.0227859774,10.0749426 C0.101501172,9.4934289 0.348004019,8.90974529 0.76436597,8.4432324 C0.621435748,8.02445572 0.546863458,7.58181092 0.546863458,7.128317 L0.546863458,6.02170502 C0.546863458,5.57255075 0.63179301,5.01273528 1.04815496,3.61970608 C1.22215697,3.02083371 1.27808619,2.83422856 1.35472993,2.66064237 C1.76280607,1.70157865 2.37802746,1.2220468 2.8254612,0.985535609 C3.55668393,0.603645984 4.34176442,0.408361518 5.15791671,0.408361518 C5.53492106,0.408361518 5.8953538,0.449588239 6.23921491,0.527702025 C6.39250239,0.419210655 6.55614714,0.328077903 6.73014915,0.252133945 C6.95179456,0.152321884 7.18794015,0.0828874069 7.44894317,0.0394908588 C8.1014507,-0.0776798212 8.79124437,0.0676986151 9.39196564,0.449588239 C10.0237586,0.853176136 10.748767,1.69072952 10.6596945,3.41357247 C10.6451944,3.71734831 10.6203369,4.12310604 10.5830508,4.65254392 C10.5457647,5.07566027 10.4981212,5.64849471 10.4339062,6.40576447 C10.4504778,6.69869117 10.4442635,7.0263351 10.419406,7.41256438 C10.4090488,7.56011265 10.3862628,7.70766092 10.3489767,7.85086952 C10.3406908,7.88341693 10.332405,7.91379452 10.3241192,7.94200228 C10.6037653,8.31738242 10.794339,8.69276255 10.9248405,9.01823668 C11.0470561,9.27644613 11.1506288,9.57371253 11.2417727,9.93607363 C11.2769873,10.0727728 11.2997734,10.2116417 11.3101306,10.3526805 C11.403346,11.5699537 11.3557025,12.2881666 11.1402715,12.8957182 Z" id="path-10"></path>
</g>
<path d="M0.0770258462,13.02227 C0.0805119789,13.0406792 0.0966601249,15.7370095 0.111234345,15.8070552 C0.111234345,15.8070552 0.0372861489,16.2297815 0.0372861489,16.3288097 C0.0372861489,19.3273014 2.00003472,21.3697433 4.47479903,21.3697433 C5.46817,21.3697433 6.42833056,21.0350253 7.3782419,20.3988134 C7.57875588,20.2637928 7.76613112,20.1121152 7.93867692,19.9455736 C11.3165173,19.4419868 13.622864,17.8977356 14.5207938,15.2915033 C14.8334841,14.4098846 14.8969192,13.4587323 14.7856923,12.0062508 C14.7676973,11.7610828 14.7270439,11.5133211 14.6643905,11.2701086 C14.5542326,10.8320356 14.4199145,10.4384726 14.2533872,10.0771046 C14.1505278,9.82630246 14.0318522,9.57925927 13.8958001,9.33741011 C13.9227196,8.91960242 13.9307939,8.56468363 13.9184882,8.23619493 C13.937504,8.01159731 13.9604607,7.7396276 13.9929538,7.35472018 C14.0213495,7.01907958 14.0402917,6.79800332 14.0568715,6.60985802 C14.0968886,6.04571404 14.1229834,5.6228739 14.1385531,5.29668959 C14.248783,3.16490022 13.4283404,1.59974482 12.0489778,0.718611223 C11.0893161,0.108531536 9.96984387,-0.127656523 8.8908504,0.0660981641 C8.50940513,0.129377383 8.13265765,0.240664012 7.77411503,0.402124055 C7.73745224,0.41810825 7.70074744,0.434748794 7.66405122,0.452028105 C7.41216835,0.422966986 7.15682116,0.408361522 6.89839845,0.408361522 C5.80971012,0.408361522 4.75519706,0.669647237 3.779592,1.1791684 C2.8281307,1.682082 2.01901723,2.51783785 1.50141307,3.73431517 C1.39262294,3.98029653 1.34139263,4.14220628 1.12138743,4.89941038 C0.700376684,6.30780426 0.546863462,7.08341215 0.546863462,7.81657682 L0.546863462,8.92318879 C0.546863462,9.24149157 0.57224683,9.55755447 0.622439495,9.86883791 C0.320634531,10.4092502 0.12276669,11.0065292 0.039499711,11.6216695 C0.0133100469,11.8214129 0,12.0138146 0,12.2061376 C0,12.4872705 0.0270184292,12.7581966 0.0770258462,13.02227 Z" id="Shape" stroke="#FFFFFF" stroke-width="3.6"></path>
</g>
</g>
</g>
<g id="ID0.20706806425005198" transform="translate(4.019080, 3.964699)" fill-rule="nonzero" fill="#FFFFFF">
<path d="M6.76039235,8.37466586 C6.82108592,9.1638321 6.8086572,9.67243963 6.72393479,9.90157341 C6.37137358,10.9450434 5.18691704,11.6001143 3.17097948,11.8674371 C2.49050733,11.9566169 1.81044948,11.6194257 1.12997734,10.8558635 C1.12997734,10.9704304 1.15421333,11.3139141 1.20309961,11.8867485 C1.23955717,12.3066101 1.23334282,12.6500938 1.18487083,12.9171995 C0.880988745,13.1207294 0.638214513,13.2227112 0.455926693,13.2227112 C0.176280607,13.2227112 0.0368718543,12.936511 0.0368718543,12.3636766 C0.0368718543,12.2619117 0.0428790666,12.0998256 0.0551006363,11.8772013 C0.0671150607,11.6547939 0.0733294183,11.4987833 0.0733294183,11.4096034 C0.0733294183,11.1932717 0.0551006363,11.0407328 0.0186430724,10.9515529 L0.0186430724,9.90179041 C0.0186430724,9.87640338 0.0246502847,9.84776172 0.0368718543,9.81586523 C0.0488862788,9.78418574 0.0611078485,9.75554399 0.0733294183,9.72994005 C0.0611078485,9.55201423 0.0671150607,9.27839895 0.0915582003,8.90931133 C0.115794194,8.68017756 0.115794194,8.53414817 0.0915582003,8.47035525 C0.0306574969,8.34342035 0.000621435748,8.26704242 0.000621435748,8.24143846 C0.0488862788,7.88515279 0.298289159,7.70700996 0.747587205,7.70700996 C1.03904057,7.70700996 1.21511403,7.81528436 1.27601474,8.03139916 C1.27601474,8.23492897 1.30025073,8.53414817 1.34892986,8.92840581 C1.42205214,9.38645633 1.6526048,9.8447239 2.04141643,10.3025576 C2.46647848,10.824401 2.87331175,11.0661198 3.26233053,11.0279308 C3.69961415,10.9773738 4.13689777,10.8690994 4.57418139,10.7035416 C5.18153127,10.4744078 5.54589976,10.2073021 5.66749402,9.90200741 C5.75221642,9.67287363 5.79488835,9.43137183 5.79488835,9.17663403 C5.79488835,8.40070379 5.52166376,7.82157685 4.97500745,7.43990421 C4.73181893,7.27456336 4.28252089,7.14090199 3.62649188,7.03892011 C3.24990182,6.98836313 3.01893486,6.96254218 2.93421245,6.96254218 C2.35109858,6.97534416 1.8073423,6.77810686 1.30335791,6.37083024 C0.799166372,5.96377062 0.547277749,5.4927011 0.547277749,4.9582726 L0.547277749,3.85144364 C0.547277749,3.60994186 0.680886434,3.0436169 0.948310953,2.15290275 C1.06949092,1.73282416 1.13639884,1.51041686 1.14882756,1.4848129 C1.2579931,1.21770714 1.397609,1.03956431 1.56767524,0.9503844 C1.98051573,0.734269594 2.41779935,0.625995207 2.87952611,0.625995207 C3.77832935,0.625995207 4.44036557,1.00766785 4.86563476,1.77101313 C4.90209232,1.80920209 4.96278589,1.86648554 5.04792258,1.94286346 C5.059937,1.76493761 5.08438014,1.49132238 5.12083771,1.12223473 C5.10861613,0.956893888 5.09639457,0.797845538 5.08438014,0.645089688 C5.08438014,0.467163841 5.16910255,0.346304454 5.33937595,0.282511528 C5.38784794,0.257124547 5.45475585,0.238030067 5.53989255,0.225228084 C5.66127966,0.199841104 5.79198831,0.231737567 5.93181136,0.320483508 C6.07122011,0.409663414 6.12901364,0.676986151 6.10477764,1.12201775 C6.09255607,1.40192548 6.06832008,1.79640011 6.03186251,2.30522464 C5.99540495,2.72530322 5.94092575,3.36778912 5.86780348,4.23311629 C5.89203947,4.4366461 5.89203947,4.71677082 5.86780348,5.07283949 C5.80690277,5.31455826 5.62461495,5.43541765 5.32114716,5.43541765 C5.16309534,5.43541765 5.01146502,5.39093619 4.86563476,5.30197327 C4.79271963,5.06047147 4.75646922,4.9582726 4.75646922,4.99646157 C4.78049806,4.65297789 4.71379729,4.19492732 4.55595261,3.62230987 C4.42213678,3.32981714 4.23715607,2.91321027 4.00018191,2.37227231 C3.76320775,1.83155131 3.45041842,1.54187936 3.06181393,1.50369039 C2.57585117,1.46550143 2.26016182,1.63735176 2.11433156,2.0190244 C2.06585957,2.18458223 1.99874451,2.42651799 1.9140221,2.74439771 C1.76819185,3.21525025 1.67704793,3.66700832 1.64059038,4.09945492 C1.6283688,4.23962577 1.61614723,4.29690921 1.60413281,4.27130525 C1.64059038,4.52604298 1.68305515,4.78034676 1.73173429,5.03486751 C1.79242785,5.35296421 1.94136528,5.59489997 2.1781323,5.76002383 C2.41510647,5.92558167 2.86730454,6.02712959 3.53555512,6.06531855 C5.17531691,6.16751742 6.18950005,6.76552185 6.57831168,7.85954883 C6.63879809,7.96153072 6.69949165,8.13316407 6.76039235,8.37466586 Z" id="ID0.570444684009999"></path>
</g>
</g>
<g id="S-glow" transform="translate(0.246483, 0.468026)">
<g id="ID0.2794777057133615">
<g id="ID0.2817511581815779">
<g id="ID0.1519448710605502">
<g id="path-10-link" transform="translate(1.958042, 1.958042)" fill="#FFAB19">
<path d="M12.5328055,14.0680563 C11.7800914,16.1865969 9.73401419,17.4742908 6.45283345,17.8956318 C6.30368886,17.9145685 6.15687467,17.9264039 6.01006048,17.931138 C5.81896899,18.2151882 5.56961789,18.461365 5.2759895,18.6530988 C4.50696276,19.1525536 3.78687409,19.3963633 3.07610695,19.3963633 C1.61495615,19.3963633 0.041946913,18.2885678 0.041946913,15.855205 C0.041946913,15.6895091 0.0489380652,15.4741044 0.0652507536,15.1758518 C0.0722419057,15.0480292 0.0792330579,14.9486117 0.0815634419,14.875232 C0.041946913,14.6905994 0.0209734565,14.5035998 0.0209734565,14.314233 L0.0209734565,13.1685642 C0.0209734565,12.9815645 0.0396165289,12.7945649 0.0769026738,12.6075652 C0.0792330579,12.4489705 0.0862242101,12.2714392 0.0978761303,12.0773383 C0.041946913,11.8690348 0,11.6275922 0,11.3577446 C0,11.2346562 0.00932153622,11.1115678 0.0256342246,10.9908465 C0.114188819,10.3564679 0.391504521,9.71972214 0.859911716,9.21079899 C0.699115217,8.75395169 0.61522139,8.27106646 0.61522139,7.77634582 L0.61522139,6.56913275 C0.61522139,6.07914627 0.710767137,5.46843849 1.17917433,3.94877026 C1.37492659,3.29545496 1.43784696,3.0918857 1.52407117,2.90251895 C1.98315683,1.85626762 2.67528089,1.33314196 3.17864385,1.07512976 C4.00126942,0.658522892 4.88448497,0.445485293 5.8026563,0.445485293 C6.2267862,0.445485293 6.63227302,0.490459897 7.01911677,0.575674937 C7.19156519,0.457320714 7.37566553,0.357903167 7.57141779,0.275055213 C7.82076889,0.166169328 8.08643267,0.0904226257 8.38006106,0.0430809369 C9.11413204,-0.0847416231 9.89014992,0.0738530347 10.5659613,0.490459897 C11.2767284,0.930737603 12.0923628,1.8444322 11.9921563,3.72389724 C11.9758437,4.05528907 11.947879,4.49793386 11.9059322,5.07550246 C11.8639852,5.53708393 11.8103864,6.16199423 11.7381444,6.9881067 C11.7567875,7.30766309 11.7497964,7.66509284 11.7218318,8.08643387 C11.7101799,8.24739561 11.6845457,8.40835736 11.6425987,8.56458493 C11.6332772,8.6000912 11.6239556,8.63323039 11.6146341,8.66400248 C11.929236,9.07350809 12.1436313,9.48301369 12.2904455,9.83807638 C12.4279381,10.1197594 12.5444574,10.44405 12.6469943,10.839353 C12.6866108,10.9884794 12.712245,11.1399728 12.723897,11.2938333 C12.8287642,12.6217677 12.7751654,13.4052727 12.5328055,14.0680563 Z" id="path-10"></path>
</g>
<path d="M0.0866540769,14.2061127 C0.0905759762,14.2261955 0.108742641,17.1676468 0.125138638,17.2440602 C0.125138638,17.2440602 0.0419469175,17.7052162 0.0419469175,17.813247 C0.0419469175,21.0843289 2.25003906,23.3124473 5.03414891,23.3124473 C6.15169125,23.3124473 7.23187188,22.9473003 8.30052214,22.253251 C8.52610037,22.1059557 8.73689751,21.9404894 8.93101153,21.7588075 C12.731082,21.2094402 15.325722,19.5248025 16.335893,16.68164 C16.6876696,15.7198742 16.7590341,14.6822534 16.6339038,13.0977281 C16.6136594,12.8302722 16.5679243,12.5599866 16.4974393,12.2946639 C16.3735116,11.8167661 16.2224039,11.3874246 16.0350606,10.9932051 C15.9193438,10.7196027 15.7858337,10.450101 15.6327752,10.1862656 C15.6630595,9.73047536 15.6721432,9.34329124 15.6582992,8.98493992 C15.679692,8.73992434 15.7055183,8.44323011 15.7420731,8.02333111 C15.7740182,7.65717772 15.7953282,7.41600362 15.8139805,7.2107542 C15.8589997,6.59532441 15.8883563,6.13404425 15.9058723,5.77820682 C16.0298809,3.45261842 15.106883,1.74517617 13.5551,0.783939516 C12.4754806,0.118398039 11.2160743,-0.139261662 10.0022067,0.0721070881 C9.57308077,0.141138964 9.14923986,0.262542558 8.74587941,0.438680787 C8.70463377,0.456118091 8.66334087,0.474271411 8.62205762,0.493121569 C8.33868939,0.46141853 8.05142381,0.445485297 7.76069825,0.445485297 C6.53592389,0.445485297 5.3495967,0.730524259 4.252041,1.28636552 C3.18164704,1.83499855 2.27139438,2.74673219 1.6890897,4.07379837 C1.5667008,4.34214167 1.50906671,4.51877048 1.26156086,5.34481133 C0.787923769,6.88124102 0.615221394,7.72735871 0.615221394,8.52717471 L0.615221394,9.73438778 C0.615221394,10.0816272 0.643777684,10.4264231 0.700244432,10.766005 C0.360713848,11.3555457 0.138112526,12.0071227 0.0444371748,12.6781849 C0.0149738028,12.8960868 0,13.1059796 0,13.3157865 C0,13.6224769 0.0303957329,13.9180326 0.0866540769,14.2061127 Z" id="Shape" stroke="#FFFFFF" stroke-width="4"></path>
</g>
</g>
</g>
<g id="ID0.20706806425005198" transform="translate(4.521464, 4.325127)" fill-rule="nonzero" fill="#FFFFFF">
<path d="M7.6054414,9.13599912 C7.67372166,9.99690775 7.65973935,10.5517523 7.56442664,10.8017164 C7.16779528,11.9400473 5.83528167,12.6546701 3.56735191,12.946295 C2.80182074,13.0435821 2.03675567,12.6757372 1.2712245,11.8427602 C1.2712245,11.9677423 1.29848999,12.3424517 1.35348706,12.967362 C1.39450182,13.4253928 1.38751067,13.8001023 1.33297968,14.0914904 C0.991112338,14.313523 0.717991328,14.4247759 0.51291753,14.4247759 C0.198315683,14.4247759 0.0414808361,14.1125575 0.0414808361,13.4876472 C0.0414808361,13.3766309 0.0482389499,13.1998097 0.0619882159,12.9569468 C0.0755044433,12.7143207 0.0824955955,12.5441273 0.0824955955,12.4468401 C0.0824955955,12.2108418 0.0619882159,12.0444357 0.0209734565,11.9471486 L0.0209734565,10.8019532 C0.0209734565,10.7742582 0.0277315703,10.7430128 0.0414808361,10.7082166 C0.0549970637,10.6736572 0.0687463296,10.6424116 0.0824955955,10.6144801 C0.0687463296,10.4203792 0.0755044433,10.1218898 0.103002975,9.71924872 C0.130268469,9.46928461 0.130268469,9.30997982 0.103002975,9.24038755 C0.034489684,9.1019131 0.000699115217,9.01859173 0.000699115217,8.99066014 C0.0549970637,8.60198486 0.335575304,8.40764723 0.841035605,8.40764723 C1.16892064,8.40764723 1.36700328,8.52576475 1.43551658,8.76152636 C1.43551658,8.98355888 1.46278207,9.30997982 1.5175461,9.74007907 C1.59980866,10.2397705 1.8591804,10.7396988 2.29659348,11.2391537 C2.77478829,11.8084375 3.23247572,12.0721307 3.67012185,12.03047 C4.16206592,11.9753169 4.65400999,11.8571994 5.14595407,11.6765908 C5.82922268,11.4266267 6.23913723,11.1352386 6.37593077,10.8021899 C6.47124348,10.5522258 6.51924939,10.2887693 6.51924939,10.0108735 C6.51924939,9.16440413 6.21187173,8.53262929 5.59688338,8.11625914 C5.3232963,7.9358873 4.817836,7.7900749 4.07980336,7.67882194 C3.65613954,7.62366887 3.39630172,7.59550056 3.30098901,7.59550056 C2.6449859,7.60946636 2.03326009,7.39429839 1.46627764,6.94999663 C0.899062168,6.50593159 0.615687467,5.99203757 0.615687467,5.40902466 L0.615687467,4.20157488 C0.615687467,3.93811839 0.765997238,3.32030934 1.06684982,2.34862118 C1.20317729,1.89035363 1.27844869,1.64772748 1.292431,1.61979589 C1.41524224,1.32840779 1.57231012,1.13407016 1.76363465,1.03678298 C2.22808019,0.801021375 2.72002427,0.682903862 3.23946687,0.682903862 C4.25062051,0.682903862 4.99541126,1.09927402 5.47383911,1.93201432 C5.51485386,1.973675 5.58313412,2.03616604 5.6789129,2.11948741 C5.69242913,1.92538649 5.71992766,1.62689714 5.76094242,1.22425607 C5.74719315,1.04388424 5.73344389,0.87037695 5.71992766,0.703734205 C5.71992766,0.509633281 5.81524037,0.377786677 6.00679794,0.308194394 C6.06132893,0.280499506 6.13660033,0.259669164 6.23237912,0.245703365 C6.36893962,0.218008477 6.51598685,0.252804618 6.67328778,0.349618373 C6.83012263,0.446905543 6.89514034,0.738530347 6.86787484,1.22401936 C6.85412558,1.52937326 6.82686009,1.95970921 6.78584533,2.51479051 C6.74483057,2.97305806 6.68354146,3.67395176 6.60127891,4.61794504 C6.6285444,4.83997757 6.6285444,5.14556817 6.60127891,5.53400672 C6.53276562,5.79769992 6.32769182,5.92954653 5.98629056,5.92954653 C5.80848225,5.92954653 5.63789815,5.8810213 5.47383911,5.78397084 C5.39180958,5.52051433 5.35102787,5.40902466 5.35102787,5.45068535 C5.37806032,5.07597588 5.30302196,4.57628435 5.12544669,3.95161077 C4.97490388,3.63252779 4.76680058,3.17804757 4.50020464,2.58793342 C4.23360871,1.99805597 3.88172072,1.68205021 3.44454067,1.64038952 C2.89783257,1.59872883 2.54268205,1.78620192 2.37862301,2.20257208 C2.32409202,2.38318061 2.24858757,2.64711053 2.15327487,2.99388841 C1.98921583,3.50754573 1.88667893,4.00037271 1.84566417,4.47213264 C1.8319149,4.6250463 1.81816564,4.68753732 1.80464941,4.65960573 C1.84566417,4.93750144 1.89343705,5.21492373 1.94820107,5.49258274 C2.01648133,5.83959732 2.18403594,6.10352724 2.45039883,6.28366236 C2.71699477,6.46427091 3.22571761,6.57505046 3.97749951,6.61671114 C5.82223153,6.72820082 6.96318756,7.38056929 7.40060064,8.57405327 C7.46864786,8.68530624 7.53692811,8.87254262 7.6054414,9.13599912 Z" id="ID0.570444684009999"></path>
</g>
</g>
</g>
<g id="cursor" stroke-linecap="round" stroke-linejoin="round" transform="translate(74.255862, 42.603668)" stroke="#575E75" fill-rule="nonzero" stroke-width="3" fill="#575E75">
<path d="M2.08643948,4.7142881 L3.33798059,7.47306201" id="Shape"></path>
<polygon id="Shape" points="5.06305269 4.57956469 1.99108814 4.57956469 0 7.06246122 0 0"></polygon>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 40 KiB

View file

@ -0,0 +1,63 @@
const webdriver = require('selenium-webdriver');
const driver = new webdriver.Builder()
.forBrowser('chrome')
.build();
const {By, until} = webdriver;
const findByXpath = (xpath) => {
return driver.wait(until.elementLocated(By.xpath(xpath), 5 * 1000));
};
const clickXpath = (xpath) => {
return findByXpath(xpath).then(el => el.click());
};
const clickText = (text) => {
return clickXpath(`//*[contains(text(), '${text}')]`);
};
const clickButton = (text) => {
return clickXpath(`//button[contains(text(), '${text}')]`);
};
const findByCss = (css) => {
return driver.wait(until.elementLocated(By.css(css), 1000 * 5));
};
const getLogs = (whitelist) => {
return driver.manage()
.logs()
.get('browser')
.then((entries) => {
return entries.filter((entry) => {
const message = entry.message;
for (let i = 0; i < whitelist.length; i++) {
if (message.indexOf(whitelist[i]) !== -1) {
// eslint-disable-next-line no-console
// console.warn('Ignoring whitelisted error: ' + whitelist[i]);
return false;
} else if (entry.level !== 'SEVERE') {
// eslint-disable-next-line no-console
// console.warn('Ignoring non-SEVERE entry: ' + message);
return false;
}
return true;
}
});
});
};
module.exports = {
webdriver,
By,
until,
driver,
clickXpath,
findByXpath,
clickText,
clickButton,
findByCss,
getLogs
};

View file

@ -5,39 +5,27 @@
*
*/
const {
clickText,
findByXpath,
clickXpath,
clickButton,
driver,
until,
By
} = require('../../helpers/selenium-helpers.js');
var username = process.env.SMOKE_USERNAME;
var password = process.env.SMOKE_PASSWORD;
var tap = require('tap');
const test = tap.test;
const webdriver = require('selenium-webdriver');
const By = webdriver.By;
const until = webdriver.until;
const driver = new webdriver.Builder()
.forBrowser('chrome')
.build();
const findByXpath = (xpath) => {
return driver.wait(until.elementLocated(By.xpath(xpath), 5 * 1000));
};
const clickXpath = (xpath) => {
return findByXpath(xpath).then(el => el.click());
};
const clickText = (text) => {
return clickXpath(`//*[contains(text(), '${text}')]`);
};
const clickButton = (text) => {
return clickXpath(`//button[contains(text(), '${text}')]`);
};
var rootUrl = process.env.ROOT_URL || 'https://scratch.ly';
var url = rootUrl + '/users/anyuser';
tap.plan(5);
tap.plan(12);
tap.tearDown(function () {
driver.quit();
@ -47,6 +35,100 @@ tap.beforeEach(function () {
return driver.get(url);
});
/*
* This test fails sometimes because blank username eventually
* triggers the captcha page, which is a bug:
* https://github.com/LLK/scratchr2/issues/4762
*/
test('Trying to sign in with no username and no password using scratchr2 navbar', t => {
clickText('Sign in')
.then(() => clickButton('Sign in'))
.then(() => driver.wait(until
.elementLocated(By.xpath('//form[@id="login"]/button[@type="submit"]'))))
.then(() => driver.wait(until
.elementLocated(By.xpath('//form[@id="login"]/div[@class="error"]'))))
.then(() => findByXpath('//form/div[@class="error"]'))
.then((element) => element.getText())
.then((text) => t.match(text, 'This field is required.',
'"This field is required" error should be displayed'))
.then(() => t.end());
});
/*
* This test fails sometimes because blank username eventually
* triggers the captcha page, which is a bug:
* https://github.com/LLK/scratchr2/issues/4762
*/
test('Trying to sign in with no username using scratchr2 navbar', t => {
clickText('Sign in')
.then(() => findByXpath('//input[@name="password"]'))
.then((element) => element.sendKeys(password))
.then(() => clickButton('Sign in'))
.then(() => driver.wait(until
.elementLocated(By.xpath('//form[@id="login"]/button[@type="submit"]'))))
.then(() => driver.wait(until
.elementLocated(By.xpath('//form[@id="login"]/div[@class="error"]'))))
.then(() => findByXpath('//form/div[@class="error"]'))
.then((element) => element.getText())
.then((text) => t.match(text, 'This field is required.',
'"This field is required" error should be displayed'))
.then(() => t.end());
});
test('Trying to sign in with no password using scratchr2 navbar', t => {
var nonsenseusername = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5);
clickText('Sign in')
.then(() => findByXpath('//input[@id="login_dropdown_username"]'))
.then((element) => element.sendKeys(nonsenseusername))
.then(() => clickButton('Sign in'))
.then(() => driver.wait(until
.elementLocated(By.xpath('//form[@id="login"]/button[@type="submit"]'))))
.then(() => driver.wait(until
.elementLocated(By.xpath('//form[@id="login"]/div[@class="error"]'))))
.then(() => findByXpath('//form/div[@class="error"]'))
.then((element) => element.getText())
.then((text) => t.match(text, 'This field is required.',
'"This field is required" error should be displayed'))
.then(() => t.end());
});
test('Trying to sign in with the wrong username using scratchr2 navbar', t => {
var nonsenseusername = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5);
clickText('Sign in')
.then(() => findByXpath('//input[@id="login_dropdown_username"]'))
.then((element) => element.sendKeys(nonsenseusername))
.then(() => findByXpath('//input[@name="password"]'))
.then((element) => element.sendKeys(password))
.then(() => clickButton('Sign in'))
.then(() => driver.wait(until
.elementLocated(By.xpath('//form[@id="login"]/button[@type="submit"]'))))
.then(() => driver.wait(until
.elementLocated(By.xpath('//form[@id="login"]/div[@class="error"]'))))
.then(() => findByXpath('//form/div[@class="error"]'))
.then((element) => element.getText())
.then((text) => t.match(text, 'Incorrect username or password.',
'"Incorrect username or password" error should be displayed'))
.then(() => t.end());
});
test('Trying to sign in with the wrong password using scratchr2 navbar', t => {
clickText('Sign in')
.then(() => findByXpath('//input[@id="login_dropdown_username"]'))
.then((element) => element.sendKeys(username))
.then(() => findByXpath('//input[@name="password"]'))
.then((element) => element.sendKeys('nonsensepassword'))
.then(() => clickButton('Sign in'))
.then(() => driver.wait(until
.elementLocated(By.xpath('//form[@id="login"]/button[@type="submit"]'))))
.then(() => driver.wait(until
.elementLocated(By.xpath('//form[@id="login"]/div[@class="error"]'))))
.then(() => findByXpath('//form/div[@class="error"]'))
.then((element) => element.getText())
.then((text) => t.match(text, 'Incorrect username or password.',
'"Incorrect username or password" error should be displayed'))
.then(() => t.end());
});
test('Sign in to Scratch using scratchr2 navbar', t => {
clickText('Sign in')
.then(() => findByXpath('//input[@id="login_dropdown_username"]'))
@ -124,3 +206,30 @@ test('Add To button should bring up a list of studios', t => {
})
.then(() => t.end());
});
test('+ New Studio button should take you to the studio page', t => {
clickXpath('//a[@class="mystuff-icon"]')
.then(() => clickXpath('//form[@id="new_studio"]/button[@type="submit"]'))
.then(() => findByXpath('//div[@id="show-add-project"]'))
.then((element) => element.getText('span'))
.then((text) => t.equal(text, 'Add projects', 'there should be an "Add projects" button'))
.then(() => driver.getCurrentUrl())
.then( function (url) {
var expectedUrlRegExp = new RegExp('/studios/.*[0-9].*/?');
t.match(url, expectedUrlRegExp,
'after clicking the + New Studio, the URL should end in studios/STUDIO_ID');
})
.then(() => t.end());
});
test('+ New Project button should open the editor', t => {
clickXpath('//a[@class="mystuff-icon"]')
.then(() => clickText('+ New Project'))
.then(() => driver.getCurrentUrl())
.then( function (url) {
var expectedUrlRegExp = new RegExp('/projects/editor');
t.match(url, expectedUrlRegExp,
'after clicking, the URL should end in projects/editor');
})
.then(() => t.end());
});

View file

@ -1,27 +1,22 @@
/*
* Tests signing in according to smoke-tests at:
*
* https://github.com/LLK/scratchr2/wiki/Smoke-Testing-Test-Cases
*
*/
const {
clickText,
findByXpath,
clickXpath,
driver
} = require('../../helpers/selenium-helpers.js');
var username = process.env.SMOKE_USERNAME;
var password = process.env.SMOKE_PASSWORD;
var tap = require('tap');
const test = tap.test;
const webdriver = require('selenium-webdriver');
const By = webdriver.By;
const until = webdriver.until;
const driver = new webdriver.Builder()
.forBrowser('chrome')
.build();
const findByXpath = (xpath) => {
return driver.wait(until.elementLocated(By.xpath(xpath), 5 * 1000));
};
const clickXpath = (xpath) => {
return findByXpath(xpath).then(el => el.click());
};
const clickText = (text) => {
return clickXpath(`//*[contains(text(), '${text}')]`);
};
var rootUrl = process.env.ROOT_URL || 'https://scratch.ly';

View file

@ -1,28 +1,19 @@
/*
* Tests stats page according to smoke-tests at:
*
* https://github.com/LLK/scratchr2/wiki/Smoke-Testing-Test-Cases
*
*/
const {
clickText,
findByXpath,
findByCss,
driver
} = require('../../helpers/selenium-helpers.js');
var tap = require('tap');
const test = tap.test;
const webdriver = require('selenium-webdriver');
const By = webdriver.By;
const until = webdriver.until;
const driver = new webdriver.Builder()
.forBrowser('chrome')
.build();
const findByXpath = (xpath) => {
return driver.wait(until.elementLocated(By.xpath(xpath), 1000 * 5));
};
const findByCss = (css) => {
return driver.wait(until.elementLocated(By.css(css), 1000 * 5));
};
const clickXpath = (xpath) => {
return findByXpath(xpath).then(el => el.click());
};
const clickText = (text) => {
return clickXpath(`//*[contains(text(), '${text}')]`);
};
tap.plan(2);

View file

@ -0,0 +1,27 @@
var fs = require('fs');
var glob = require('glob');
var tap = require('tap');
var TRANSLATIONS_PATTERN = './node_modules/scratchr2_translations/www/**/*.json';
var files = glob.sync(TRANSLATIONS_PATTERN);
function checkJson (data, name) {
try {
JSON.parse(data);
} catch (e) {
tap.fail(name + ' has invalid Json.\n');
}
tap.pass();
}
files.forEach(function (f) {
tap.test('check valid json', function (t) {
fs.readFile(f, function (err, data) {
if (err) {
throw err;
}
checkJson(data, f);
});
t.end();
});
});