Merge pull request #6659 from LLK/develop

Update release branch to include develop
This commit is contained in:
Sarah Otts 2022-03-16 12:59:01 -04:00 committed by GitHub
commit bb61a7413f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 445 additions and 82 deletions

154
package-lock.json generated
View file

@ -222,24 +222,24 @@
}
},
"@babel/compat-data": {
"version": "7.17.0",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz",
"integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==",
"version": "7.17.7",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz",
"integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==",
"dev": true
},
"@babel/core": {
"version": "7.17.5",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz",
"integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==",
"version": "7.17.7",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.7.tgz",
"integrity": "sha512-djHlEfFHnSnTAcPb7dATbiM5HxGOP98+3JLBZtjRb5I7RXrw7kFRoG2dXM8cm3H+o11A8IFH/uprmJpwFynRNQ==",
"dev": true,
"requires": {
"@ampproject/remapping": "^2.1.0",
"@babel/code-frame": "^7.16.7",
"@babel/generator": "^7.17.3",
"@babel/helper-compilation-targets": "^7.16.7",
"@babel/helper-module-transforms": "^7.16.7",
"@babel/helpers": "^7.17.2",
"@babel/parser": "^7.17.3",
"@babel/generator": "^7.17.7",
"@babel/helper-compilation-targets": "^7.17.7",
"@babel/helper-module-transforms": "^7.17.7",
"@babel/helpers": "^7.17.7",
"@babel/parser": "^7.17.7",
"@babel/template": "^7.16.7",
"@babel/traverse": "^7.17.3",
"@babel/types": "^7.17.0",
@ -250,6 +250,23 @@
"semver": "^6.3.0"
},
"dependencies": {
"@babel/generator": {
"version": "7.17.7",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz",
"integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==",
"dev": true,
"requires": {
"@babel/types": "^7.17.0",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
}
},
"@babel/parser": {
"version": "7.17.7",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.7.tgz",
"integrity": "sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA==",
"dev": true
},
"debug": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
@ -259,6 +276,12 @@
"ms": "2.1.2"
}
},
"jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true
},
"json5": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
@ -279,6 +302,12 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
}
}
},
@ -308,12 +337,12 @@
}
},
"@babel/helper-compilation-targets": {
"version": "7.16.7",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz",
"integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==",
"version": "7.17.7",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz",
"integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==",
"dev": true,
"requires": {
"@babel/compat-data": "^7.16.4",
"@babel/compat-data": "^7.17.7",
"@babel/helper-validator-option": "^7.16.7",
"browserslist": "^4.17.5",
"semver": "^6.3.0"
@ -375,14 +404,14 @@
}
},
"@babel/helper-module-transforms": {
"version": "7.17.6",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz",
"integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==",
"version": "7.17.7",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz",
"integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==",
"dev": true,
"requires": {
"@babel/helper-environment-visitor": "^7.16.7",
"@babel/helper-module-imports": "^7.16.7",
"@babel/helper-simple-access": "^7.16.7",
"@babel/helper-simple-access": "^7.17.7",
"@babel/helper-split-export-declaration": "^7.16.7",
"@babel/helper-validator-identifier": "^7.16.7",
"@babel/template": "^7.16.7",
@ -397,12 +426,12 @@
"dev": true
},
"@babel/helper-simple-access": {
"version": "7.16.7",
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz",
"integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==",
"version": "7.17.7",
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz",
"integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==",
"dev": true,
"requires": {
"@babel/types": "^7.16.7"
"@babel/types": "^7.17.0"
}
},
"@babel/helper-split-export-declaration": {
@ -427,13 +456,13 @@
"dev": true
},
"@babel/helpers": {
"version": "7.17.2",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz",
"integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==",
"version": "7.17.7",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.7.tgz",
"integrity": "sha512-TKsj9NkjJfTBxM7Phfy7kv6yYc4ZcOo+AaWGqQOKTPDOmcGkIFb5xNA746eKisQkm4yavUYh4InYM9S+VnO01w==",
"dev": true,
"requires": {
"@babel/template": "^7.16.7",
"@babel/traverse": "^7.17.0",
"@babel/traverse": "^7.17.3",
"@babel/types": "^7.17.0"
}
},
@ -19363,21 +19392,21 @@
}
},
"scratch-blocks": {
"version": "0.1.0-prerelease.20220308054435",
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20220308054435.tgz",
"integrity": "sha512-g6x/j+GV9B3zhQIvsbg2P6sPVLYfaSv6ZjQBcB8FcZ2+Wz1iHXcw9ZB4IdwbKfUa6Dqr/YG2HMW5GVB41tlpkg==",
"version": "0.1.0-prerelease.20220315091134",
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20220315091134.tgz",
"integrity": "sha512-DoKku/tbqumnlJwFmx79xyq1fuIMeGafw3bFHZU3hEknqRNy7gRZpP94V8WHymOwHgY/Ma1FXI7ESxw609sp9w==",
"dev": true,
"requires": {
"exports-loader": "0.6.3",
"google-closure-library": "20190301.0.0",
"imports-loader": "0.6.5",
"scratch-l10n": "3.14.20220308031538"
"scratch-l10n": "3.14.20220315031541"
},
"dependencies": {
"scratch-l10n": {
"version": "3.14.20220308031538",
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220308031538.tgz",
"integrity": "sha512-ld5JXIqowC4tzsMiDq24YjP+FqsrAdDGzJzQOPGpjL2l6z6Bruzu6QA/nLmsh2ByABrKVI5uYGOhRnqq8EwNzQ==",
"version": "3.14.20220315031541",
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220315031541.tgz",
"integrity": "sha512-1FB9vUkAlSOrkUEZEJMekTz7AvMsqwr0RkRT8gLKXkLTw7T3Q16X4cTHxSC5EOUeR+NaCjkGZJzSgUVIy6Tm9w==",
"dev": true,
"requires": {
"@babel/cli": "^7.1.2",
@ -19389,9 +19418,9 @@
}
},
"scratch-gui": {
"version": "0.1.0-prerelease.20220309063427",
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20220309063427.tgz",
"integrity": "sha512-tyeUH/48CZs0kClxtW3OTXdd4gyoyvp83MDlqd0p7/AKCWxMyMnhEOi7CcA25KzknJtOYAhvRTK6a/vZkZL0FA==",
"version": "0.1.0-prerelease.20220315192901",
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20220315192901.tgz",
"integrity": "sha512-lN7nQfxfMS845fXCtfB4zm3j3ZSPpxPMi3LBxeSwYPTduAuF7+UImUkLRf8aVMepKCSFuU/qqVDLI5KPlsgfWA==",
"dev": true,
"requires": {
"arraybuffer-loader": "^1.0.6",
@ -19442,14 +19471,14 @@
"redux": "3.7.2",
"redux-throttle": "0.1.1",
"scratch-audio": "0.1.0-prerelease.20200528195344",
"scratch-blocks": "0.1.0-prerelease.20220308054435",
"scratch-l10n": "3.14.20220309031549",
"scratch-paint": "0.2.0-prerelease.20211027080909",
"scratch-blocks": "0.1.0-prerelease.20220315091134",
"scratch-l10n": "3.14.20220315031541",
"scratch-paint": "0.2.0-prerelease.20220315113214",
"scratch-render": "0.1.0-prerelease.20211028200436",
"scratch-render-fonts": "1.0.0-prerelease.20210401210003",
"scratch-storage": "1.3.5",
"scratch-svg-renderer": "0.2.0-prerelease.20210727023023",
"scratch-vm": "0.2.0-prerelease.20220308092939",
"scratch-vm": "0.2.0-prerelease.20220315115545",
"startaudiocontext": "1.2.1",
"style-loader": "^0.23.0",
"text-encoding": "0.7.0",
@ -19686,6 +19715,18 @@
"symbol-observable": "^1.0.3"
}
},
"scratch-l10n": {
"version": "3.14.20220315031541",
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220315031541.tgz",
"integrity": "sha512-1FB9vUkAlSOrkUEZEJMekTz7AvMsqwr0RkRT8gLKXkLTw7T3Q16X4cTHxSC5EOUeR+NaCjkGZJzSgUVIy6Tm9w==",
"dev": true,
"requires": {
"@babel/cli": "^7.1.2",
"@babel/core": "^7.1.2",
"babel-plugin-react-intl": "^3.0.1",
"transifex": "1.6.6"
}
},
"scratch-storage": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-1.3.5.tgz",
@ -19746,9 +19787,9 @@
}
},
"scratch-l10n": {
"version": "3.14.20220309031549",
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220309031549.tgz",
"integrity": "sha512-HIPpXcZiJe3Ap9IDAReBMBlpTR2aMHKrPujN7CzJJ7u8Ka3iwh6C7SX2j9TmuwvfmatD6vUaDgQ2bc2FC7P0oQ==",
"version": "3.14.20220316031548",
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220316031548.tgz",
"integrity": "sha512-9v8Qfhym+bKh/9CL4S+XuRZ2Bl7ehUjztoAjKONDxBM/y8A1K11efKfhPLsSOd0Ww6PYOIvqsR36D47z7TRFIg==",
"dev": true,
"requires": {
"@babel/cli": "^7.1.2",
@ -19758,9 +19799,9 @@
}
},
"scratch-paint": {
"version": "0.2.0-prerelease.20211027080909",
"resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20211027080909.tgz",
"integrity": "sha512-Kgzr9hEE0AYCnMPvs5rhKx3S+h78+HMe0IDoTuEQWG/EyilEeQkITwymkK59ndnsxf0gfQd4pkUi2UjdHQqpBQ==",
"version": "0.2.0-prerelease.20220315113214",
"resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20220315113214.tgz",
"integrity": "sha512-Z9kI6SzcYwTMWj5icHQ4XdDOhd3PUUv+s7Gw1WVwdigrivW7oNz574W0cC3KsWH41HKD21pBsixIRuqaJOKCzg==",
"dev": true,
"requires": {
"@scratch/paper": "0.11.20200728195508",
@ -19770,7 +19811,7 @@
"lodash.omit": "4.5.0",
"minilog": "3.1.0",
"parse-color": "1.0.0",
"prop-types": "^15.5.10"
"prop-types": "^15.8.1"
},
"dependencies": {
"lodash.omit": {
@ -19793,6 +19834,17 @@
"requires": {
"microee": "0.0.6"
}
},
"prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
"dev": true,
"requires": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
"react-is": "^16.13.1"
}
}
}
},
@ -19977,9 +20029,9 @@
"dev": true
},
"scratch-vm": {
"version": "0.2.0-prerelease.20220308092939",
"resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-0.2.0-prerelease.20220308092939.tgz",
"integrity": "sha512-QhnOZwg1fX57fPykm9XDwIoNUTbAlMHEkilyXgWRfU0PpRyb7qWh/TIwJOxMyp4kCyiYImcKoPtep9z7B8O/qw==",
"version": "0.2.0-prerelease.20220315115545",
"resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-0.2.0-prerelease.20220315115545.tgz",
"integrity": "sha512-PJWSFbCo4PFh6PTFVpj0Fqjsv2ciRSqirAOvvezGLZZjn8pVK6IRcAgt8T/6wRWkRqHLNpu3RW7YGWP/0PWtug==",
"dev": true,
"requires": {
"@vernier/godirect": "1.5.0",

View file

@ -134,8 +134,8 @@
"regenerator-runtime": "0.13.9",
"sass": "1.49.7",
"sass-loader": "10.2.1",
"scratch-gui": "0.1.0-prerelease.20220309063427",
"scratch-l10n": "3.14.20220309031549",
"scratch-gui": "0.1.0-prerelease.20220315192901",
"scratch-l10n": "3.14.20220316031548",
"selenium-webdriver": "4.1.0",
"slick-carousel": "1.6.0",
"style-loader": "0.12.3",

View file

@ -2,6 +2,8 @@ const FormattedMessage = require('react-intl').FormattedMessage;
const injectIntl = require('react-intl').injectIntl;
const intlShape = require('react-intl').intlShape;
const React = require('react');
const PropTypes = require('prop-types');
const FlexRow = require('../../../flex-row/flex-row.jsx');
const FooterBox = require('../../container/footer.jsx');
@ -145,14 +147,15 @@ const ConferenceFooter = props => (
</div>
</FlexRow>
<LanguageChooser locale={props.intl.locale} />
<div className="conf2021-organized">
<FormattedMessage id="conference-2021.organizedBy" />
<div className="organized-by-message">
<FormattedMessage id={props.organizedByMsgId} />
</div>
</FooterBox>
);
ConferenceFooter.propTypes = {
intl: intlShape
intl: intlShape,
organizedByMsgId: PropTypes.string
};
module.exports = injectIntl(ConferenceFooter);

View file

@ -168,4 +168,12 @@
.language-chooser {
text-align: center;
}
.organized-by-message {
font-size: .875rem;
margin: 0 auto;
text-align: center;
padding: 1rem 0 2.5rem;
line-height: 1.5em;
}
}

View file

@ -15,13 +15,16 @@ const Page = props => (
{props.children}
</div>
<div id="footer">
<Footer />
<Footer
organizedByMsgId={props.footerOrganizedByMsgId}
/>
</div>
</div>
);
Page.propTypes = {
children: PropTypes.node
children: PropTypes.node,
footerOrganizedByMsgId: PropTypes.string
};
module.exports = Page;

View file

@ -144,6 +144,8 @@ module.exports.selectProjectCommentsGloballyEnabled = state =>
get(state, ['session', 'session', 'flags', 'project_comments_enabled'], false);
module.exports.selectStudioCommentsGloballyEnabled = state =>
get(state, ['session', 'session', 'flags', 'gallery_comments_enabled'], false);
module.exports.selectIsTotallyNormal = state =>
get(state, ['session', 'session', 'flags', 'everything_is_totally_normal'], false);
module.exports.selectMuteStatus = state => get(state, ['session', 'session', 'permissions', 'mute_status'],
{muteExpiresAt: 0, offenses: [], showWarning: false});
module.exports.selectIsMuted = state => (module.exports.selectMuteStatus(state).muteExpiresAt || 0) * 1000 > Date.now();

View file

@ -40,13 +40,13 @@
{
"name": "conference-index",
"pattern": "^/conference/?(\\?.*)?$",
"routeAlias": "/conference(?!/201[4-9])",
"redirect": "/conference/2021"
"routeAlias": "/conference(?!/20[1-2][0-9])",
"redirect": "/conference/2022"
},
{
"name": "conference-index-2017",
"pattern": "^/conference/2017/?$",
"routeAlias": "/conference(?!/201[4-9])",
"routeAlias": "/conference(?!/20[1-2][0-9])",
"view": "conference/2017/index/index",
"title": "Scratch Conference",
"viewportWidth": "device-width"
@ -54,21 +54,21 @@
{
"name": "conference-details-2018",
"pattern": "^/conference/2018/:id/details/?$",
"routeAlias": "/conference(?!/201[4-9])",
"routeAlias": "/conference(?!/20[1-2][0-9])",
"view": "conference/2018/details/details",
"title": "Event Details"
},
{
"name": "conference-expectations-2018",
"pattern": "^/conference/2018/expect/?$",
"routeAlias": "/conference(?!/201[4-9])",
"routeAlias": "/conference(?!/20[1-2][0-9])",
"view": "conference/2018/expect/expect",
"title": "What to Expect"
},
{
"name": "conference-index-2018",
"pattern": "^/conference/2018/?$",
"routeAlias": "/conference(?!/201[4-9])",
"routeAlias": "/conference(?!/20[1-2][0-9])",
"view": "conference/2018/index/index",
"title": "Scratch Conference",
"viewportWidth": "device-width"
@ -76,21 +76,21 @@
{
"name": "conference-plan-2018",
"pattern": "^/conference/2018/plan/?$",
"routeAlias": "/conference(?!/201[4-9])",
"routeAlias": "/conference(?!/20[1-2][0-9])",
"view": "conference/2018/plan/plan",
"title": "Plan Your Visit"
},
{
"name": "conference-schedule-2018",
"pattern": "^/conference/2018/schedule/?$",
"routeAlias": "/conference(?!/201[4-9])",
"routeAlias": "/conference(?!/20[1-2][0-9])",
"view": "conference/2018/schedule/schedule",
"title": "Conference Schedule"
},
{
"name": "conference-index-2019",
"pattern": "^/conference/2019/?$",
"routeAlias": "/conference(?!/201[4-9])",
"routeAlias": "/conference(?!/20[1-2][0-9])",
"view": "conference/2019/index/index",
"title": "Scratch Conferences",
"viewportWidth": "device-width"
@ -98,17 +98,25 @@
{
"name": "conference-index-2020",
"pattern": "^/conference/2020/?$",
"routeAlias": "/conference(?!/201[4-9])",
"routeAlias": "/conference(?!/20[1-2][0-9])",
"redirect": "/conference/2021"
},
{
"name": "conference-index-2021",
"pattern": "^/conference/2021/?$",
"routeAlias": "/conference(?!/201[4-9])",
"routeAlias": "/conference(?!/20[1-2][0-9])",
"view": "conference/2021/index/index",
"title": "Scratch Conferences",
"viewportWidth": "device-width"
},
{
"name": "conference-index-2022",
"pattern": "^/conference/2022/?$",
"routeAlias": "/conference(?!/20[1-2][0-9])",
"view": "conference/2022/index/index",
"title": "Scratch Conferences",
"viewportWidth": "device-width"
},
{
"name": "connect",
"pattern": "^/connect/?$",

View file

@ -93,4 +93,7 @@ const ConferenceSplash = () => (
</div>
);
render(<Page><ConferenceSplash /></Page>, document.getElementById('app'));
render(
<Page
footerOrganizedByMsgId="conference-2021.organizedBy"
><ConferenceSplash /></Page>, document.getElementById('app'));

View file

@ -8,7 +8,7 @@
.title-banner-image.mod-2021 {
opacity: .75;
margin-bottom: 1.75rem;
background-image: url("/images/conference/index/2021/title-banner.jpg");
background-image: url("/images/conference/index/shared/title-banner.jpg");
background-position: center;
background-size: cover;
width: 100%;
@ -76,13 +76,6 @@ td {
text-align: center;
color: $type-white;
}
.conf2021-organized {
font-size: .875rem;
margin: 0 auto;
text-align: center;
padding: 1rem 0 2.5rem;
line-height: 1.5em;
}
@media only screen and (max-width: $mobile - 1) {
.index.mod-2021 {

View file

@ -0,0 +1,95 @@
const FormattedDate = require('react-intl').FormattedDate;
const FormattedMessage = require('react-intl').FormattedMessage;
const React = require('react');
const render = require('../../../../lib/render.jsx');
// Using the 2021 page on purpose here since the layout of the page is the same
const Page = require('../../../../components/page/conference/2021/page.jsx');
const TitleBanner = require('../../../../components/title-banner/title-banner.jsx');
require('../../../../components/forms/button.scss');
require('./index.scss');
const ConferenceSplash = () => (
<div className="index mod-2022">
<TitleBanner className="mod-conference mod-2022">
<div className="title-banner-image mod-2022" />
<h1 className="title-banner-h1 mod-2022">
<center>
<FormattedMessage id="conference-2022.title" />
</center>
</h1>
<h3 className="title-banner-h3 mod-2022">
<FormattedMessage id="conference-2022.dateDesc" />
</h3>
</TitleBanner>
<div className="inner">
<section className="conf2022-panel mod-desc">
<p className="conf2022-panel-desc">
<FormattedMessage id="conference-2022.desc1" />{' '}
<strong><FormattedMessage id="conference-2022.desc1a" /></strong>
<br />
<br />
<FormattedMessage id="conference-2022.desc3" />
</p>
<table className="conf2022-panel-details">
<tbody>
<tr className="conf2022-panel-row">
<td className="conf2022-panel-row-icon">
<img
alt="Calendar Icon"
className="conf2022-panel-row-icon-image"
src="/svgs/conference/index/calendar-icon-solid.svg"
/>
</td>
<td><FormattedMessage id="conference-2022.date" /></td>
<td>
<FormattedDate
day="2-digit"
month="long"
value={new Date(2022, 6, 22)}
year="numeric"
/>
</td>
</tr>
<tr className="conf2022-panel-row">
<td className="conf2022-panel-row-icon">
<img
alt="Map Icon"
className="conf2022-panel-row-icon-image"
src="/svgs/conference/index/map-icon-solid.svg"
/>
</td>
<td><FormattedMessage id="conference-2022.location" /></td>
<td><FormattedMessage id="conference-2022.locationDetails" /></td>
</tr>
</tbody>
</table>
<center>
<FormattedMessage id="conference-2022.register" />
</center>
</section>
<section className="conf2022-panel mod-stay">
<p className="conf2022-panel-desc">
<FormattedMessage
id="conference-2022.stayDesc2"
values={{
emailLink: <a href="mailto:conference@scratch.mit.edu">
conference@scratch.mit.edu
</a>
}}
/>
<br />
<br />
<FormattedMessage id="conference-2022.organizedBy" />
</p>
</section>
</div>
</div>
);
render(
<Page
footerOrganizedByMsgId="conference-2022.organizedBy"
><ConferenceSplash /></Page>, document.getElementById('app'));

View file

@ -0,0 +1,170 @@
@import "../../../../colors";
@import "../../../../frameless";
.title-banner.mod-conference.mod-2022 {
padding-top: 0;
}
.title-banner-image.mod-2022 {
opacity: .75;
margin-bottom: 1.75rem;
background-image: url("/images/conference/index/shared/title-banner.jpg");
background-position: center;
background-size: cover;
width: 100%;
height: 20rem;
}
.title-banner-h1.mod-2022 {
line-height: 1.25em;
}
.conf2022-panel,
.title-banner-h3.mod-2022 {
width: 48.75rem;
margin: auto;
}
.title-banner-h3.mod-2022 {
margin: 2rem auto 0;
}
.title-banner-h3.mod-2022 {
text-align: center;
color: $type-white;
}
.conf2022-panel {
border-bottom: 1px solid $ui-border;
}
.conf2022-panel.mod-last {
border-bottom: 0;
}
.flex-row.conf2022-panel-title {
justify-content: flex-start;
align-items: center;
}
.conf2022-panel-desc {
margin: 2rem 0;
}
section {
padding-top: 3rem;
}
td {
padding: .75rem 1.25rem;
vertical-align: middle;
}
.conf2022-panel-row-icon-image {
width: 1.5rem;
height: 1.5rem;
}
.mod-registration .conf2022-panel-desc {
margin-bottom: 0;
}
.button.mod-2022-panel {
display: block;
margin: 2rem auto 0;
background-color: $ui-orange;
padding: 1rem 0;
width: 13.75rem;
text-align: center;
color: $type-white;
}
@media only screen and (max-width: $mobile - 1) {
.index.mod-2022 {
text-align: left;
}
.title-banner-image.mod-2022 {
height: 10rem;
}
.conf2022-panel,
.title-banner-h3.mod-2022 {
width: initial;
}
.conf2022-panel {
margin: auto .5rem;
}
.title-banner-h3.mod-2022 {
margin: 1rem .5rem .5rem;
font-size: 1.1rem;
}
.flex-row.conf2022-panel-title {
flex-direction: row;
}
.conf2022-panel-title-text {
max-width: 14rem;
}
.conf2022-panel-row > td {
padding: .75rem .375rem .75rem 0;
}
}
@media only screen and (min-width: $mobile) and (max-width: $tabletPortrait - 1) {
.index.mod-2022 {
text-align: left;
}
.title-banner-image.mod-2022 {
height: 10rem;
}
.conf2022-panel,
.title-banner-h3.mod-2022 {
margin: auto .5rem ;
width: initial;
}
.title-banner-h3.mod-2022 {
font-size: 1.1rem;
}
.flex-row.conf2022-panel-title {
flex-direction: row;
}
.conf2022-panel-title-text {
max-width: 18.75rem;
}
.button.mod-2022-panel {
width: 5.75rem;
}
}
@media only screen and (min-width: $tabletPortrait) and (max-width: $desktop - 1) {
.index.mod-2022 {
text-align: left;
}
.title-banner-image.mod-2022 {
height: 15rem;
}
.conf2022-panel,
.title-banner-h3.mod-2022 {
margin: auto;
width: 38.75rem;
}
.title-banner-h3.mod-2022 {
font-size: 1.1rem;
}
.button.mod-2022-panel {
width: 8.75rem;
}
}

View file

@ -0,0 +1,18 @@
{
"conference-2022.title": "Scratch Conference 2022",
"conference-2022.subtitle": "An Online Conference",
"conference-2022.dateDesc": "July 21, 2022",
"conference-2022.locationDetails": "Online",
"conference-2022.date": "When:",
"conference-2022.location": "Where:",
"conference-2022.desc1": "Join us for Scratch Conference 2022, an online gathering for educators interested in creative learning with Scratch! This year's theme will be \"What will you create?\"",
"conference-2022.desc1a": "Although we are not able to meet in person this year, we are excited to find ways to connect and share with others in the global Scratch educator community.",
"conference-2022.desc3": "The conference will be free of charge.",
"conference-2022.register": "Stay tuned for registration information!",
"conference-2022.stayDesc2": "For additional questions, contact the Scratch Conference Team at {emailLink}",
"conference-2022.organizedBy": "The Scratch Conference is organized by the Scratch Foundation."
}

View file

@ -722,6 +722,7 @@ PreviewPresentation.propTypes = {
favoriteCount: PropTypes.number,
intl: intlShape,
isAdmin: PropTypes.bool,
isTotallyNormal: PropTypes.bool, // eslint-disable-line react/no-unused-prop-types
isFullScreen: PropTypes.bool,
isLoggedIn: PropTypes.bool,
isNewScratcher: PropTypes.bool,

View file

@ -27,7 +27,7 @@ const NotAvailable = require('../../components/not-available/not-available.jsx')
const Meta = require('./meta.jsx');
const sessionActions = require('../../redux/session.js');
import {selectProjectCommentsGloballyEnabled} from '../../redux/session';
import {selectProjectCommentsGloballyEnabled, selectIsTotallyNormal} from '../../redux/session';
const navigationActions = require('../../redux/navigation.js');
const previewActions = require('../../redux/preview.js');
const projectCommentActions = require('../../redux/project-comment-actions.js');
@ -930,6 +930,7 @@ Preview.propTypes = {
handleUpdateProjectThumbnail: PropTypes.func,
isAdmin: PropTypes.bool,
isEditable: PropTypes.bool,
isTotallyNormal: PropTypes.bool, // eslint-disable-line react/no-unused-prop-types
isLoggedIn: PropTypes.bool,
isProjectCommentsGloballyEnabled: PropTypes.bool,
isNewScratcher: PropTypes.bool,
@ -1019,7 +1020,8 @@ const mapStateToProps = state => {
const showEmailConfirmationBanner = state.session.session.flags &&
state.session.session.flags.has_outstanding_email_confirmation &&
state.session.session.flags.confirm_email_banner;
const isTotallyNormal = state.session.session.flags && selectIsTotallyNormal(state);
// if we don't have projectInfo, assume it's shared until we know otherwise
const isShared = !projectInfoPresent || state.preview.projectInfo.is_published;
@ -1046,6 +1048,7 @@ const mapStateToProps = state => {
// project is editable iff logged in user is the author of the project, or
// logged in user is an admin.
isEditable: isEditable,
isTotallyNormal: isTotallyNormal,
isLoggedIn: isLoggedIn,
isAdmin: isAdmin,
isNewScratcher: isLoggedIn && state.permissions.new_scratcher,

View file

@ -15,6 +15,8 @@ const Select = require('../../components/forms/select.jsx');
const TitleBanner = require('../../components/title-banner/title-banner.jsx');
const Tabs = require('../../components/tabs/tabs.jsx');
import {selectIsTotallyNormal} from '../../redux/session';
const Page = require('../../components/page/www/page.jsx');
const render = require('../../lib/render.jsx');
@ -258,11 +260,13 @@ class Search extends React.Component {
Search.propTypes = {
dispatch: PropTypes.func,
intl: intlShape,
isTotallyNormal: PropTypes.bool, // eslint-disable-line react/no-unused-prop-types
searchTerm: PropTypes.string
};
const mapStateToProps = state => ({
searchTerm: state.navigation.searchTerm
searchTerm: state.navigation.searchTerm,
isTotallyNormal: selectIsTotallyNormal(state)
});
const WrappedSearch = injectIntl(Search);

View file

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

View file

@ -136,7 +136,7 @@ describe('www-integration footer links', () => {
await clickText('Scratch Conference');
let url = await driver.getCurrentUrl();
let pathname = (new URL(url)).pathname;
expect(pathname).toMatch(/^\/conference\/2021\/?$/);
expect(pathname).toMatch(/^\/conference\/2022\/?$/);
});
});