diff --git a/package-lock.json b/package-lock.json index f13b42be4..36779bc0b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index 8dd1bbcce..8a62eef8e 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/components/footer/conference/2021/footer.jsx b/src/components/footer/conference/2021/footer.jsx index 3e10e4a15..d1431c9f2 100644 --- a/src/components/footer/conference/2021/footer.jsx +++ b/src/components/footer/conference/2021/footer.jsx @@ -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 => ( -
- +
+
); ConferenceFooter.propTypes = { - intl: intlShape + intl: intlShape, + organizedByMsgId: PropTypes.string }; module.exports = injectIntl(ConferenceFooter); diff --git a/src/components/footer/conference/footer.scss b/src/components/footer/conference/footer.scss index 01d8c1b52..b246fe3ef 100644 --- a/src/components/footer/conference/footer.scss +++ b/src/components/footer/conference/footer.scss @@ -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; + } } diff --git a/src/components/page/conference/2021/page.jsx b/src/components/page/conference/2021/page.jsx index faa039eb1..fd3083601 100644 --- a/src/components/page/conference/2021/page.jsx +++ b/src/components/page/conference/2021/page.jsx @@ -15,13 +15,16 @@ const Page = props => ( {props.children}
); Page.propTypes = { - children: PropTypes.node + children: PropTypes.node, + footerOrganizedByMsgId: PropTypes.string }; module.exports = Page; diff --git a/src/redux/session.js b/src/redux/session.js index 67863dd57..2740ab6af 100644 --- a/src/redux/session.js +++ b/src/redux/session.js @@ -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(); diff --git a/src/routes.json b/src/routes.json index 51b67f68c..a29daadfe 100644 --- a/src/routes.json +++ b/src/routes.json @@ -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/?$", diff --git a/src/views/conference/2021/index/index.jsx b/src/views/conference/2021/index/index.jsx index 8f46f79a9..ab0a0fcf4 100644 --- a/src/views/conference/2021/index/index.jsx +++ b/src/views/conference/2021/index/index.jsx @@ -93,4 +93,7 @@ const ConferenceSplash = () => ( ); -render(, document.getElementById('app')); +render( + , document.getElementById('app')); diff --git a/src/views/conference/2021/index/index.scss b/src/views/conference/2021/index/index.scss index 9d7980309..31d448ed3 100644 --- a/src/views/conference/2021/index/index.scss +++ b/src/views/conference/2021/index/index.scss @@ -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 { diff --git a/src/views/conference/2022/index/index.jsx b/src/views/conference/2022/index/index.jsx new file mode 100644 index 000000000..76b8dcc0c --- /dev/null +++ b/src/views/conference/2022/index/index.jsx @@ -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 = () => ( +
+ +
+

+
+ +
+

+

+ +

+ +
+
+

+ {' '} + +
+
+ +

+ + + + + + + + + + + + + +
+ Calendar Icon + + +
+ Map Icon +
+
+ +
+ +
+
+

+ + conference@scratch.mit.edu + + }} + /> +
+
+ +

+
+
+
+); + +render( + , document.getElementById('app')); diff --git a/src/views/conference/2022/index/index.scss b/src/views/conference/2022/index/index.scss new file mode 100644 index 000000000..202d63bac --- /dev/null +++ b/src/views/conference/2022/index/index.scss @@ -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; + } +} diff --git a/src/views/conference/2022/index/l10n.json b/src/views/conference/2022/index/l10n.json new file mode 100644 index 000000000..32717db3c --- /dev/null +++ b/src/views/conference/2022/index/l10n.json @@ -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." +} diff --git a/src/views/preview/presentation.jsx b/src/views/preview/presentation.jsx index ac63fc9bb..e6cf7978b 100644 --- a/src/views/preview/presentation.jsx +++ b/src/views/preview/presentation.jsx @@ -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, diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index cdcdc89e4..a68485d98 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -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, diff --git a/src/views/search/search.jsx b/src/views/search/search.jsx index a65f696ee..036f78105 100644 --- a/src/views/search/search.jsx +++ b/src/views/search/search.jsx @@ -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); diff --git a/static/images/conference/index/2021/title-banner.jpg b/static/images/conference/index/shared/title-banner.jpg similarity index 100% rename from static/images/conference/index/2021/title-banner.jpg rename to static/images/conference/index/shared/title-banner.jpg diff --git a/test/integration/footer-links.test.js b/test/integration/footer-links.test.js index 57a5d513e..3e7e4044a 100644 --- a/test/integration/footer-links.test.js +++ b/test/integration/footer-links.test.js @@ -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\/?$/); }); });