Commit f964d6a1 authored by Eric Rosenbaum's avatar Eric Rosenbaum

Merge branch 'develop' of https://github.com/LLK/scratch-www into transfer-modal

parents e9045cea d72f5f7c
{
"plugins": [
"transform-object-rest-spread",
"transform-require-context"
"transform-require-context",
"syntax-dynamic-import"
],
"presets": ["es2015", "react"],
}
......@@ -31,7 +31,7 @@ if (args[0] === '--execute') {
const overrides = {
'src/views/teachers/faq/l10n.json': 'teacher-faq-l10njson',
'src/views/teachers/landing/l10n.json': 'educator-landing-l10njson',
'src/views/conference/2020/index/l10n.json': 'conference-index-2020-l10njson',
'src/views/conference/2021/index/l10n.json': 'conference-index-2021-l10njson',
'src/views/conference/2019/index/l10n.json': 'conference-index-2019-l10njson',
'src/views/conference/2017/index/l10n.json': 'conference-index-2017-l10njson'
};
......
This diff is collapsed.
......@@ -26,11 +26,12 @@
"clean": "rm -rf ./build && rm -rf ./intl && mkdir -p build && mkdir -p intl",
"deploy": "npm run deploy:s3 && npm run deploy:fastly",
"deploy:fastly": "node ./bin/configure-fastly.js",
"deploy:s3": "npm run deploy:s3:all && npm run deploy:s3:svg && npm run deploy:s3:js",
"deploy:s3": "npm run deploy:s3:all && npm run deploy:s3:svg && npm run deploy:s3:js && npm run deploy:s3:css",
"deploy:s3cmd": "s3cmd sync -P --delete-removed --add-header=Cache-Control:no-cache,public,max-age=3600 --add-header=x-amz-meta-surrogate-key:static-assets",
"deploy:s3:all": "npm run deploy:s3cmd -- --exclude '.DS_Store' --exclude '*.svg' --exclude '*.js' ./build/ s3://$S3_BUCKET_NAME/",
"deploy:s3:all": "npm run deploy:s3cmd -- --exclude '.DS_Store' --exclude '*.svg' --exclude '*.js' --exclude '*.css' ./build/ s3://$S3_BUCKET_NAME/",
"deploy:s3:svg": "npm run deploy:s3cmd -- --exclude '*' --include '*.svg' --mime-type 'image/svg+xml' ./build/ s3://$S3_BUCKET_NAME/",
"deploy:s3:js": "npm run deploy:s3cmd -- --exclude '*' --include '*.js' --mime-type 'application/javascript' ./build/ s3://$S3_BUCKET_NAME/",
"deploy:s3:css": "npm run deploy:s3cmd -- --exclude '*' --include '*.css' --mime-type 'text/css' ./build/ s3://$S3_BUCKET_NAME/",
"i18n:push": "./bin/tx-push-www --execute",
"translate:urls": "node ./bin/get-localized-urls localized-urls.json",
"translate:files": "node ./bin/build-locales node_modules/scratch-l10n/www intl",
......@@ -55,20 +56,21 @@
"lodash.defaults": "4.0.1",
"lodash.get": "^4.4.2",
"react-helmet": "5.2.0",
"react-router-dom": "^5.2.0",
"scratch-parser": "^5.0.0",
"scratch-storage": "^0.5.1"
"react-router-dom": "5.2.0",
"scratch-parser": "5.0.0",
"scratch-storage": "0.5.1"
},
"devDependencies": {
"@formatjs/intl-locale": "^2.4.13",
"@formatjs/intl-pluralrules": "^4.0.6",
"@formatjs/intl-relativetimeformat": "^8.0.3",
"@formatjs/intl-locale": "2.4.34",
"@formatjs/intl-pluralrules": "4.0.28",
"@formatjs/intl-relativetimeformat": "8.1.8",
"async": "3.1.0",
"autoprefixer": "6.3.6",
"babel-cli": "6.26.0",
"babel-core": "6.23.1",
"babel-eslint": "10.0.3",
"babel-loader": "7.1.0",
"babel-plugin-syntax-dynamic-import": "^6.18.0",
"babel-plugin-transform-object-rest-spread": "6.26.0",
"babel-plugin-transform-require-context": "0.1.1",
"babel-preset-es2015": "6.22.0",
......@@ -77,7 +79,7 @@
"chromedriver": "91.0.1",
"classnames": "2.2.5",
"cookie": "0.4.1",
"copy-webpack-plugin": "^4.5.1",
"copy-webpack-plugin": "4.6.0",
"css-loader": "0.23.1",
"email-validator": "2.0.4",
"enzyme": "3.10.0",
......@@ -86,7 +88,7 @@
"eslint-config-scratch": "7.0.0",
"eslint-plugin-json": "2.0.1",
"eslint-plugin-react": "7.14.2",
"eslint-plugin-react-hooks": "^4.2.0",
"eslint-plugin-react-hooks": "4.2.0",
"fastly": "1.2.1",
"formik": "1.5.4",
"formsy-react": "1.1.4",
......@@ -94,9 +96,9 @@
"git-bundle-sha": "0.0.2",
"glob": "5.0.15",
"google-libphonenumber": "3.2.18",
"html-webpack-plugin": "^3.2.0",
"html-webpack-plugin": "3.2.0",
"iso-3166-2": "0.4.0",
"jest": "^23.6.0",
"jest": "23.6.0",
"jest-junit": "12.0.0",
"keymirror": "0.1.1",
"lodash.bindall": "4.4.0",
......@@ -105,16 +107,17 @@
"lodash.mergewith": "4.6.2",
"lodash.omit": "3.1.0",
"lodash.uniqby": "4.7.0",
"mini-css-extract-plugin": "^1.6.2",
"minilog": "2.0.8",
"node-sass": "4.14.1",
"pako": "0.2.8",
"plotly.js": "1.47.4",
"postcss-loader": "2.0.10",
"prop-types": "15.6.0",
"query-string": "^5.1.1",
"react": "^16.14.0",
"react-dom": "^16.14.0",
"react-intl": "2.8.0",
"query-string": "5.1.1",
"react": "16.14.0",
"react-dom": "16.14.0",
"react-intl": "2.9.0",
"react-modal": "3.11.1",
"react-onclickoutside": "6.7.1",
"react-plotly.js": "2.4.0",
......@@ -124,19 +127,19 @@
"react-string-replace": "0.4.1",
"react-telephone-input": "4.3.4",
"redux": "3.5.2",
"redux-mock-store": "^1.2.3",
"redux-mock-store": "1.5.4",
"redux-thunk": "2.0.1",
"sass-loader": "6.0.6",
"scratch-gui": "0.1.0-prerelease.20210707095345",
"scratch-l10n": "3.13.20210708031448",
"scratch-gui": "0.1.0-prerelease.20210810104439",
"scratch-l10n": "3.14.20210810031545",
"selenium-webdriver": "3.6.0",
"slick-carousel": "1.6.0",
"style-loader": "0.12.3",
"tap": "14.11.0",
"url-loader": "2.3.0",
"webpack": "^4.46.0",
"webpack-bundle-analyzer": "^4.4.0",
"webpack-cli": "^3.1.0",
"webpack": "4.46.0",
"webpack-bundle-analyzer": "4.4.2",
"webpack-cli": "3.3.12",
"webpack-dev-middleware": "2.0.4",
"xhr": "2.2.0"
},
......
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"github>LLK/scratch-renovate-config:conservative"
]
}
......@@ -253,14 +253,6 @@
"view": "search/search",
"title": "Search"
},
{
"name": "sec",
"pattern": "^/sec/?(\\?.*)?$",
"routeAlias": "/sec/?",
"view": "sec/sec",
"title": "Scratch Education Collaborative",
"viewportWidth": "device-width"
},
{
"name": "splash",
"pattern": "^/?$",
......@@ -475,6 +467,12 @@
"routeAlias": "/search",
"redirect": "/search/projects"
},
{
"name": "sec-redirect",
"pattern": "^/sec/?$",
"routeAlias": "/sec",
"redirect": "https://sip.scratch.mit.edu/sec"
},
{
"name": "splash-redirect",
"pattern": "^///?$",
......
......@@ -31,6 +31,8 @@
<!-- Favicon & CSS normalize -->
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="stylesheet" href="/css/lib/normalize.min.css" />
<link rel="stylesheet" href="<%= htmlWebpackPlugin.files.chunks.common.css[0] %>" />
<link rel="stylesheet" href="<%= htmlWebpackPlugin.files.chunks[htmlWebpackPlugin.options.route.name].css[0] %>" />
<!-- Polyfills -->
<script src="/js/polyfill.min.js"></script>
......@@ -59,11 +61,11 @@
<div id="app"></div>
<!-- Vendor & Initialize (Session & Localization)-->
<script src="/<%= htmlWebpackPlugin.files.chunks.common.entry %>"></script>
<script src="<%= htmlWebpackPlugin.files.chunks.common.entry %>"></script>
<!-- Scripts -->
<script src="/js/<%= htmlWebpackPlugin.options.route.name %>.intl.js"></script>
<script src="/<%= htmlWebpackPlugin.files.chunks[htmlWebpackPlugin.options.route.name].entry %>"></script>
<script src="<%= htmlWebpackPlugin.files.chunks[htmlWebpackPlugin.options.route.name].entry %>"></script>
<!-- Translate title element -->
<% if (!htmlWebpackPlugin.options.dynamicMetaTags) { %>
......
......@@ -113,9 +113,6 @@ class Download extends React.Component {
id="installation"
>
<div className="inner">
<p className="callout">
<FormattedHTMLMessage id="download.introMac" />
</p>
<FlexRow className="three-col-row">
<div className="installation-column">
<div className="installation-column-number">
......@@ -123,26 +120,6 @@ class Download extends React.Component {
</div>
<h3><FormattedMessage id="download.airTitle" /></h3>
<p><FormattedHTMLMessage id="download.airBody" /></p>
<ul className="installation-downloads">
<li className="installation-downloads-item">
<FormattedMessage id="download.macOSX" /> -
{' '}<a href="http://get.adobe.com/air/">
<FormattedMessage id="download.download" />
</a>
</li>
<li className="installation-downloads-item">
<FormattedMessage id="download.macOlder" /> -
{' '}<a href="http://airdownload.adobe.com/air/mac/download/2.6/AdobeAIR.zip">
<FormattedMessage id="download.download" />
</a>
</li>
<li className="installation-downloads-item">
<FormattedMessage id="download.windows" /> -
{' '}<a href="http://get.adobe.com/air/">
<FormattedMessage id="download.download" />
</a>
</li>
</ul>
</div>
<div className="installation-column">
<div className="installation-column-number">
......
{
"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 Windows and MacOS.",
"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",
"download.airTitle": "Adobe AIR",
"download.airBody": "If you don't already have it, download and install the latest <a href=\"http://get.adobe.com/air/\">Adobe AIR</a>",
"download.airBody": "If you don't already have it, download and install the latest <a href=\"https://airsdk.harman.com/runtime\">Adobe AIR</a>",
"download.macOSX": "Mac OS X",
"download.macOlder": "Mac OS 10.5 & Older",
"download.windows": "Windows",
......
{
"sec.title": "Scratch Education Collaborative",
"sec.intro": "Join a global network of organizations supporting creative coding",
"sec.applyNow": "Apply now!",
"sec.applyBanner": "Applications are open now through March 1st 2021!",
"sec.projectsTitle": "Overview",
"sec.eligibilityTitle": "Eligibility",
"sec.applyTitle": "How do I apply?",
"sec.applyDeadline": "The deadline for applying to the Scratch Education Collaborative has been extended to March 1st, 2021",
"sec.applyButton": "Click here to apply",
"sec.projectsIntro": "The Scratch Education Collaborative (SEC), with support from Google.org, is building a powerful network of organizations across the world",
"sec.projectsIntroBold": "focused on supporting learners from historically marginalized communities in developing their confidence with creative computing.",
"sec.projectsIntro2": "Up to 10 organizations will be selected in the 2021 pilot year to expand on and support each other's work with historically marginalized communities including Black, Latinx, and Indigenous youth. Participants in the SEC will learn from one another, and collaborate with members of the Scratch Foundation, The MIT Media Lab, and other global leaders in creative computing to develop best practices for implementing culturally sustaining creative computing with Scratch.",
"sec.projectsIntro3": "The SEC is a key initiative of the Scratch Foundation. Originating from MIT Media Lab’s Lifelong Kindergarten Group and with over 200 million users, Scratch is the world’s largest and most diverse coding community for children offered free of charge.",
"sec.expectationsFromSec": "As a member of the SEC network, benefits include:",
"sec.expectationsFromSecPoint1": "Connect with and learn from the Scratch Foundation, the MIT Media Lab, and other leading organizations from around the world with experience implementing creative learning with Scratch",
"sec.expectationsFromSecPoint2": "Grow your organization’s capacity through equity-centered professional development",
"sec.expectationsFromSecPoint3": "Collaborate in developing equity-centered creative coding resources, events, and workshops using Scratch for your local community",
"sec.expectationsFromSecPoint4": "Access to seed funding for Scratch and SEC related activities for your local community",
"sec.expectationsFromOrgs": "Join the SEC Network:",
"sec.expectationsFromOrgsPoint1": "Engage in quarterly virtual meetings and workshops with Scratch Foundation and SEC partner organizations over the course of the year",
"sec.expectationsFromOrgsPoint2": "Host at least one creative computing virtual event, tutorial, or professional development activity for your community in 2021",
"sec.expectationsFromOrgsPoint3": "Develop and promote equity-centered creative coding resources, events, and workshops using Scratch for your local community",
"sec.expectationsFromOrgsPoint4": "Share best-practices and innovative creative computing curricula with the Scratch Foundation and SEC community",
"sec.expectationsFromOrgsPoint5": "Promote your organization’s work and impact through Scratch Foundation social-channels, websites, newsletters, and the Scratch Conference",
"sec.expectationsFromOrgsPoint6": "Facilitate a Scratch Day for your community with support from the Scratch Foundation",
"sec.eligibilityPrefix": "Your organization is:",
"sec.eligibilityPoint1": "Primarily focused on supporting traditionally marginalized youth, including Black, Latinx, and Indigenous youth in the United States and/or globally",
"sec.eligibilityPoint2": "Directly serving youth through creative learning and/or creative coding initiatives",
"sec.eligibilityPoint3": "Designated as a non-profit, or a school district that has demonstrated a commitment to equitable creative learning practices",
"sec.eligibilityPoint4": "Willing to collaborate with Scratch and the SEC community to develop and utilize creative computing resources that can be shared globally",
"sec.eligibilityPoint5": "Able to engage in quarterly virtual meetings",
"sec.faqHeader": "FAQ",
"sec.faqWhatIs": "What is Creative Learning with Scratch?",
"sec.faqWhatIsAnswer": "Scratch embraces creative learning as an educational approach that supports students in developing as creative thinkers and contributors to their communities. The Creative Learning approach focuses on 4P’s: Projects, Passion, Peers, and Play: providing students with opportunities to work on projects, based on their passions, in collaboration with peers, in a playful spirit (Resnick, 2017).",
"sec.faqWhatIsAnswer2": "To learn more about how the Scratch Foundation and the Lifelong Kindergarten group think about creative learning, visit the {lclLink}.",
"sec.faqLCLWebsite": "Learning Creative Learning website",
"sec.faqWhen": "When does the yearlong program begin and end?",
"sec.faqWhenAnswer": "The SEC program begins the first week of May 2021, and ends in May of 2022.",
"sec.faqUsingScratch": "Do I have to be using Scratch at my organization already?",
"sec.faqUsingScratchAnswer": "No, your organization does not need to already be using Scratch.",
"sec.faqUsingScratchAnswer2": "As a participant in the SEC, you will collaborate in developing and implementing programming and events for your community which incorporate Scratch. It is important that your organization and the community you will support through your work with the SEC has a plan for accessing technology.",
"sec.faqBackground": "Do I need to have a background in computer science?",
"sec.faqBackgroundAnswer": "You do not need to have a background in computer science, or be implementing educational programming in computer science in order to participate in the SEC.",
"sec.faqBackgroundAnswer2": "We encourage the use of Scratch as a creative tool and welcome organizations who are interested in using Scratch in a variety of contexts.",
"sec.faqEligible": "What kinds of organizations can apply to be members of the SEC?",
"sec.faqEligibleAnswer": "Non-profit organizations, public schools, school districts, universities, colleges, and other government entities are all welcome to apply.",
"sec.faqEligibleAnswer2": "The SEC encourages organizations from around the world to apply.",
"sec.faqInternational": "Do you accept international applications?",
"sec.faqInternationalAnswer": "Yes, the SEC is an international community. We welcome applications from organizations around the world.",
"sec.faqEnglish": "Does my organization need to be english-speaking?",
"sec.faqEnglishAnswer": "Your organization does not need to be English-speaking in order to apply.",
"sec.faqEnglishAnswer2": "We do ask that one member of your organization is able to participate in SEC events, which will be run in English.",
"sec.faqHowManyMembers": "How many members of my organization will be required to participate? ",
"sec.faqHowManyMembersAnswer": "Being a member organization requires buy-in from, at minimum, one representative and the Executive director/CEO/or equivalent position. ",
"sec.faqHowManyMembersAnswer2": "One member of your team will be responsible for attending SEC events, and communicating with Scratch Team members and other participating SEC member organizations.",
"sec.faqNotified": "When will I be notified of my acceptance?",
"sec.faqNotifiedAnswer": "You will hear back from us by the first week of April, 2021.",
"sec.faqHours": "How many hours per month should I expect to devote to participating in the SEC?",
"sec.faqHoursAnswer": "You should expect to spend 4-10 hours a month participating in SEC related work.",
"sec.faqVirtual": "Will the program be entirely virtual?",
"sec.faqVirtualAnswer": "All workshops and sessions for the 2021-2022 cohort will be hosted virtually.",
"sec.faqWorkshopLanguage": "The SEC is an international community, what is the primary language that workshops and sessions will be offered in?",
"sec.faqWorkshopLanguageAnswer": "SEC workshops and events will be facilitated in English. ",
"sec.faqCost": "What is the cost of participating in the SEC?",
"sec.faqCostAnswer": "Participating in the SEC is free for all participating organizations.",
"sec.faqCulturallySustaining": "What do we mean by culturally sustaining in the context of education?",
"sec.faqCulturallySustainingAnswer": "Culturally sustaining pedagogy empowers students by creating educational experiences which reaffirm, honor, explore, and extend their culture, heritage and communities (Ladson-Billings, 1994). Scratch and the SEC aims to empower educators and students across the globe through engagement in culturally relevant creative learning practices and creative computing experiences that will lead to culturally sustaining frames of reference and perspective (Hammond, 2015) and support relevant personal connections to Scratch’s and the SEC’s mission and values. ",
"sec.faqFuture": "I cannot participate this year, can I apply in the future? ",
"sec.faqFutureAnswer": "Yes! Join our {subscribeLink} to stay connected and receive future updates about the SEC.",
"sec.faqMailingList": "mailing list"
}
\ No newline at end of file
This diff is collapsed.
@import "../../colors";
@import "../../frameless";
$sec-spot: $ui-blue;
#view {
padding: 0;
}
.education-collaborative {
.title-banner {
&.masthead {
background-color: $sec-spot;
padding: 50px 0 0 0;
margin: 0;
.masthead-info {
align-items: center;
justify-content: space-between;
@media #{$intermediate} {
justify-content: end;
}
.long {
padding-bottom: 2rem;
}
h1 {
margin: 0 0 1rem 0;
text-align: left;
color: $ui-white;
}
p {
margin: 0;
text-align: left;
color: $ui-white;
max-width: $cols6;
font-size: 1.65em;
}
.title-banner-button {
background-color: $ui-white;
color: $ui-blue;
font-size: 1rem;
padding: 0.75rem 1rem;
img {
margin-right: 1rem;
height: 1.2rem;
vertical-align: middle;
}
a {
color: $ui-white;
}
span {
vertical-align: middle;
}
}
.title-banner-img {
width: $cols4;
}
.sec-apply-buttons {
margin-top: 2rem;
li {
border: 2px solid $ui-white;
padding: 16px;
font-size: 16px;
font-weight: 500;
}
}
}
}
}
section {
margin-bottom: 3rem;
p, ul {
max-width: $cols8;
}
}
.band {
background: $ui-light-primary;
padding: 0.5rem 0;
h4.applyBanner {
color: $ui-blue;
}
}
.sec-faq {
margin-top: 3rem;
dl {
dt {
margin-bottom: .25rem;
font-size: 1.1rem;
}
dd {
margin-bottom: 1.25rem;
margin-left: 0;
max-width: $cols8;
text-align: left;
}
}
}
}
@media #{$intermediate, $medium, $small} {
#view {
text-align: left;
}
}
......@@ -410,7 +410,7 @@ describe('studio members', () => {
['muted logged in', false]
])('%s: %s', (role, expected) => {
setStateByRole(role);
state.studio.owner = 'the creator';
state.studio = {...state.studio, owner: 'the creator'};
expect(selectCanRemoveManager(state, 'the creator')).toBe(expected);
});
});
......@@ -421,7 +421,7 @@ describe('studio members', () => {
['admin', false],
['curator', false],
['manager', true],
['creator', false],
['creator', true],
['logged in', false],
['unconfirmed', false],
['logged out', false],
......@@ -483,7 +483,7 @@ describe('studio mute errors', () => {
['logged in', false],
['unconfirmed', false],
['logged out', false],
// ['muted creator', true], // This one fails; not sure why
['muted creator', true],
['muted manager', true],
['muted curator', false],
['muted logged in', false]
......@@ -502,7 +502,7 @@ describe('studio mute errors', () => {
['logged in', false],
['unconfirmed', false],
['logged out', false],
// ['muted creator', true], // This one fails; not sure why
['muted creator', true],
['muted manager', false],
['muted curator', false],
['muted logged in', false]
......
......@@ -7,6 +7,7 @@ const webpack = require('webpack');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const CopyWebpackPlugin = require('copy-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
// PostCss
const autoprefixer = require('autoprefixer');
......@@ -72,7 +73,8 @@ module.exports = {
mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',
output: {
path: path.resolve(__dirname, 'build'),
filename: 'js/[name].bundle.js'
filename: 'js/[name].bundle.js',
publicPath: '/'
},
resolve: {
symlinks: false // Fix local development with `npm link` packages
......@@ -92,7 +94,7 @@ module.exports = {
{
test: /\.scss$/,
use: [
'style-loader',
MiniCssExtractPlugin.loader,
'css-loader',
{
loader: 'postcss-loader',
......@@ -108,7 +110,7 @@ module.exports = {
{
test: /\.css$/,
use: [
'style-loader',
MiniCssExtractPlugin.loader,
'css-loader',
{
loader: 'postcss-loader',
......@@ -142,6 +144,7 @@ module.exports = {
}
},
plugins: [
new MiniCssExtractPlugin(),
new VersionPlugin({length: 5})
].concat(pageRoutes
.map(function (route) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment