mirror of
https://github.com/scratchfoundation/scratch-www.git
synced 2024-11-23 15:47:53 -05:00
Merge remote-tracking branch 'origin/develop' into release/2023-05-23
This commit is contained in:
commit
25c82c64a0
17 changed files with 1047 additions and 441 deletions
118
package-lock.json
generated
118
package-lock.json
generated
|
@ -101,8 +101,8 @@
|
|||
"regenerator-runtime": "0.13.9",
|
||||
"sass": "1.49.7",
|
||||
"sass-loader": "10.2.1",
|
||||
"scratch-gui": "1.8.53",
|
||||
"scratch-l10n": "3.15.20230507032520",
|
||||
"scratch-gui": "1.8.91",
|
||||
"scratch-l10n": "3.15.20230523032203",
|
||||
"selenium-webdriver": "4.1.0",
|
||||
"slick-carousel": "1.6.0",
|
||||
"style-loader": "0.12.3",
|
||||
|
@ -23463,21 +23463,39 @@
|
|||
}
|
||||
},
|
||||
"node_modules/scratch-blocks": {
|
||||
"version": "0.1.0-prerelease.20230507065123",
|
||||
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20230507065123.tgz",
|
||||
"integrity": "sha512-ESFkBv3EyyjXQbfgnbOXMCkLtlTzR1K+mPUANobSWim/evedSowx3l6uuqGVumEbo/9K2ullKyXQo7LDZDrvOw==",
|
||||
"version": "0.1.0-prerelease.20230521064828",
|
||||
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20230521064828.tgz",
|
||||
"integrity": "sha512-9XOGQ51l0M0HLHy5flvxIXP3nPwaq/RexdDqm1sq3CIuHubWn243prerm7gzyzISMIfN5H8Jz+atk5NJ+fhDIw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"exports-loader": "0.7.0",
|
||||
"google-closure-library": "20190301.0.0",
|
||||
"imports-loader": "0.8.0",
|
||||
"scratch-l10n": "3.15.20230507032520"
|
||||
"scratch-l10n": "3.15.20230521032145"
|
||||
}
|
||||
},
|
||||
"node_modules/scratch-blocks/node_modules/scratch-l10n": {
|
||||
"version": "3.15.20230521032145",
|
||||
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.15.20230521032145.tgz",
|
||||
"integrity": "sha512-OoE7eME85ZNHZvOPU7wV8lx284YZD1eYTkfc11A5CTRHq27tbXqYCq2tqmZ/vmNtsEmBrIKK3Ogf/rPbwp9pEQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/cli": "^7.1.2",
|
||||
"@babel/core": "^7.1.2",
|
||||
"@transifex/api": "4.2.5",
|
||||
"babel-plugin-react-intl": "^3.0.1",
|
||||
"download": "^8.0.0",
|
||||
"transifex": "1.6.6"
|
||||
},
|
||||
"bin": {
|
||||
"build-i18n-src": "scripts/build-i18n-src.js",
|
||||
"tx-push-src": "scripts/tx-push-src.js"
|
||||
}
|
||||
},
|
||||
"node_modules/scratch-gui": {
|
||||
"version": "1.8.53",
|
||||
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-1.8.53.tgz",
|
||||
"integrity": "sha512-zqrSRAUhuODR0Qe2cFnQiXpDkIfFF9iEofRIswHSaP/MHj/oiEMINrpEDP+66ep+HivWRpwUumdUt8dOyUIw0A==",
|
||||
"version": "1.8.91",
|
||||
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-1.8.91.tgz",
|
||||
"integrity": "sha512-hDd0DQy//LAanhMKlaiWwWoxmcduIKNEKmy2APcqIqmrbxQiTiNmpk5IiXGwGS/vd6Ib4bQsYfY3rMnr0I0+tw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"arraybuffer-loader": "^1.0.6",
|
||||
|
@ -23529,14 +23547,14 @@
|
|||
"redux": "3.7.2",
|
||||
"redux-throttle": "0.1.1",
|
||||
"scratch-audio": "0.1.0-prerelease.20221123180128",
|
||||
"scratch-blocks": "0.1.0-prerelease.20230507065123",
|
||||
"scratch-l10n": "3.15.20230507032520",
|
||||
"scratch-paint": "1.1.54",
|
||||
"scratch-blocks": "0.1.0-prerelease.20230521064828",
|
||||
"scratch-l10n": "3.15.20230523032203",
|
||||
"scratch-paint": "1.1.64",
|
||||
"scratch-render": "0.1.0-prerelease.20230318150639",
|
||||
"scratch-render-fonts": "1.0.0-prerelease.20221102164332",
|
||||
"scratch-storage": "2.2.1",
|
||||
"scratch-svg-renderer": "0.2.0-prerelease.20230224194137",
|
||||
"scratch-vm": "1.5.48",
|
||||
"scratch-vm": "1.5.68",
|
||||
"startaudiocontext": "1.2.1",
|
||||
"style-loader": "^0.23.0",
|
||||
"text-encoding": "0.7.0",
|
||||
|
@ -23863,9 +23881,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/scratch-gui/node_modules/scratch-paint": {
|
||||
"version": "1.1.54",
|
||||
"resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-1.1.54.tgz",
|
||||
"integrity": "sha512-23fylk1yn74TEpthDX1wGpnVGLRDNuQALhTD+Hrq5b0yfWDW1U+Ane6MuA6zOR2noFRcby357rvCdKNXU9p6zQ==",
|
||||
"version": "1.1.64",
|
||||
"resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-1.1.64.tgz",
|
||||
"integrity": "sha512-vh7ZKXq4GJBNUS1WZP8X2sFjcC+r2uyQbY3i1G//tSKoLu+t7ADsYqk31X3o/9YJ+Drf72UmWVgAA+7PO/CLmQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@scratch/paper": "0.11.20200728195508",
|
||||
|
@ -23944,9 +23962,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/scratch-l10n": {
|
||||
"version": "3.15.20230507032520",
|
||||
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.15.20230507032520.tgz",
|
||||
"integrity": "sha512-WpAXxJ6hZIXIvHiLCbReXq9FCGXojX+2uMBs+yWvUNDfTmg2jpuWkbRw0+Ovnzll6lZYc5D2ErUtyD90BI38JA==",
|
||||
"version": "3.15.20230523032203",
|
||||
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.15.20230523032203.tgz",
|
||||
"integrity": "sha512-UhnDzBzo5u4sxQ0Ax6Z5MP5lsKzPWq5B+VafSWOFpfH6fJIoJPBt4iAH9S/Dg9xHZzUfouwmf4QsKYz3I/3cNQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/cli": "^7.1.2",
|
||||
|
@ -24146,9 +24164,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/scratch-vm": {
|
||||
"version": "1.5.48",
|
||||
"resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-1.5.48.tgz",
|
||||
"integrity": "sha512-xvIxNRruVTdDbgow1tjkM51+DYEfsE39oGrwG0hfKdLTTcF517gz30U3G3EK6vURivzlu+XvaO0RCHwxskSeeg==",
|
||||
"version": "1.5.68",
|
||||
"resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-1.5.68.tgz",
|
||||
"integrity": "sha512-KND5BhWXVtaLgnbUo+LODsl5EXOrAhJhCPLCkdoNRJcyQII9kXyjOiJv12pO9x5469zDEd6eiMjuUVCvi/IWcw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@vernier/godirect": "1.5.0",
|
||||
|
@ -51927,21 +51945,37 @@
|
|||
}
|
||||
},
|
||||
"scratch-blocks": {
|
||||
"version": "0.1.0-prerelease.20230507065123",
|
||||
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20230507065123.tgz",
|
||||
"integrity": "sha512-ESFkBv3EyyjXQbfgnbOXMCkLtlTzR1K+mPUANobSWim/evedSowx3l6uuqGVumEbo/9K2ullKyXQo7LDZDrvOw==",
|
||||
"version": "0.1.0-prerelease.20230521064828",
|
||||
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20230521064828.tgz",
|
||||
"integrity": "sha512-9XOGQ51l0M0HLHy5flvxIXP3nPwaq/RexdDqm1sq3CIuHubWn243prerm7gzyzISMIfN5H8Jz+atk5NJ+fhDIw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"exports-loader": "0.7.0",
|
||||
"google-closure-library": "20190301.0.0",
|
||||
"imports-loader": "0.8.0",
|
||||
"scratch-l10n": "3.15.20230507032520"
|
||||
"scratch-l10n": "3.15.20230521032145"
|
||||
},
|
||||
"dependencies": {
|
||||
"scratch-l10n": {
|
||||
"version": "3.15.20230521032145",
|
||||
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.15.20230521032145.tgz",
|
||||
"integrity": "sha512-OoE7eME85ZNHZvOPU7wV8lx284YZD1eYTkfc11A5CTRHq27tbXqYCq2tqmZ/vmNtsEmBrIKK3Ogf/rPbwp9pEQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/cli": "^7.1.2",
|
||||
"@babel/core": "^7.1.2",
|
||||
"@transifex/api": "4.2.5",
|
||||
"babel-plugin-react-intl": "^3.0.1",
|
||||
"download": "^8.0.0",
|
||||
"transifex": "1.6.6"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"scratch-gui": {
|
||||
"version": "1.8.53",
|
||||
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-1.8.53.tgz",
|
||||
"integrity": "sha512-zqrSRAUhuODR0Qe2cFnQiXpDkIfFF9iEofRIswHSaP/MHj/oiEMINrpEDP+66ep+HivWRpwUumdUt8dOyUIw0A==",
|
||||
"version": "1.8.91",
|
||||
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-1.8.91.tgz",
|
||||
"integrity": "sha512-hDd0DQy//LAanhMKlaiWwWoxmcduIKNEKmy2APcqIqmrbxQiTiNmpk5IiXGwGS/vd6Ib4bQsYfY3rMnr0I0+tw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"arraybuffer-loader": "^1.0.6",
|
||||
|
@ -51993,14 +52027,14 @@
|
|||
"redux": "3.7.2",
|
||||
"redux-throttle": "0.1.1",
|
||||
"scratch-audio": "0.1.0-prerelease.20221123180128",
|
||||
"scratch-blocks": "0.1.0-prerelease.20230507065123",
|
||||
"scratch-l10n": "3.15.20230507032520",
|
||||
"scratch-paint": "1.1.54",
|
||||
"scratch-blocks": "0.1.0-prerelease.20230521064828",
|
||||
"scratch-l10n": "3.15.20230523032203",
|
||||
"scratch-paint": "1.1.64",
|
||||
"scratch-render": "0.1.0-prerelease.20230318150639",
|
||||
"scratch-render-fonts": "1.0.0-prerelease.20221102164332",
|
||||
"scratch-storage": "2.2.1",
|
||||
"scratch-svg-renderer": "0.2.0-prerelease.20230224194137",
|
||||
"scratch-vm": "1.5.48",
|
||||
"scratch-vm": "1.5.68",
|
||||
"startaudiocontext": "1.2.1",
|
||||
"style-loader": "^0.23.0",
|
||||
"text-encoding": "0.7.0",
|
||||
|
@ -52265,9 +52299,9 @@
|
|||
}
|
||||
},
|
||||
"scratch-paint": {
|
||||
"version": "1.1.54",
|
||||
"resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-1.1.54.tgz",
|
||||
"integrity": "sha512-23fylk1yn74TEpthDX1wGpnVGLRDNuQALhTD+Hrq5b0yfWDW1U+Ane6MuA6zOR2noFRcby357rvCdKNXU9p6zQ==",
|
||||
"version": "1.1.64",
|
||||
"resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-1.1.64.tgz",
|
||||
"integrity": "sha512-vh7ZKXq4GJBNUS1WZP8X2sFjcC+r2uyQbY3i1G//tSKoLu+t7ADsYqk31X3o/9YJ+Drf72UmWVgAA+7PO/CLmQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@scratch/paper": "0.11.20200728195508",
|
||||
|
@ -52328,9 +52362,9 @@
|
|||
}
|
||||
},
|
||||
"scratch-l10n": {
|
||||
"version": "3.15.20230507032520",
|
||||
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.15.20230507032520.tgz",
|
||||
"integrity": "sha512-WpAXxJ6hZIXIvHiLCbReXq9FCGXojX+2uMBs+yWvUNDfTmg2jpuWkbRw0+Ovnzll6lZYc5D2ErUtyD90BI38JA==",
|
||||
"version": "3.15.20230523032203",
|
||||
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.15.20230523032203.tgz",
|
||||
"integrity": "sha512-UhnDzBzo5u4sxQ0Ax6Z5MP5lsKzPWq5B+VafSWOFpfH6fJIoJPBt4iAH9S/Dg9xHZzUfouwmf4QsKYz3I/3cNQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/cli": "^7.1.2",
|
||||
|
@ -52527,9 +52561,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"scratch-vm": {
|
||||
"version": "1.5.48",
|
||||
"resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-1.5.48.tgz",
|
||||
"integrity": "sha512-xvIxNRruVTdDbgow1tjkM51+DYEfsE39oGrwG0hfKdLTTcF517gz30U3G3EK6vURivzlu+XvaO0RCHwxskSeeg==",
|
||||
"version": "1.5.68",
|
||||
"resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-1.5.68.tgz",
|
||||
"integrity": "sha512-KND5BhWXVtaLgnbUo+LODsl5EXOrAhJhCPLCkdoNRJcyQII9kXyjOiJv12pO9x5469zDEd6eiMjuUVCvi/IWcw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@vernier/godirect": "1.5.0",
|
||||
|
|
10
package.json
10
package.json
|
@ -35,14 +35,14 @@
|
|||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+ssh://git@github.com/llk/scratch-www.git"
|
||||
"url": "git+ssh://git@github.com/scratchfoundation/scratch-www.git"
|
||||
},
|
||||
"author": "Massachusetts Institute of Technology",
|
||||
"license": "BSD-3-Clause",
|
||||
"bugs": {
|
||||
"url": "https://github.com/llk/scratch-www/issues"
|
||||
"url": "https://github.com/scratchfoundation/scratch-www/issues"
|
||||
},
|
||||
"homepage": "https://github.com/llk/scratch-www#readme",
|
||||
"homepage": "https://github.com/scratchfoundation/scratch-www#readme",
|
||||
"dependencies": {
|
||||
"bunyan": "1.8.15",
|
||||
"clipboard-copy": "2.0.1",
|
||||
|
@ -136,8 +136,8 @@
|
|||
"regenerator-runtime": "0.13.9",
|
||||
"sass": "1.49.7",
|
||||
"sass-loader": "10.2.1",
|
||||
"scratch-gui": "1.8.53",
|
||||
"scratch-l10n": "3.15.20230507032520",
|
||||
"scratch-gui": "1.8.91",
|
||||
"scratch-l10n": "3.15.20230523032203",
|
||||
"selenium-webdriver": "4.1.0",
|
||||
"slick-carousel": "1.6.0",
|
||||
"style-loader": "0.12.3",
|
||||
|
|
|
@ -169,6 +169,11 @@ const Footer = props => (
|
|||
<FormattedMessage id="general.privacyPolicy" />
|
||||
</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="/cookies">
|
||||
<FormattedMessage id="general.cookies" />
|
||||
</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="/DMCA">
|
||||
<FormattedMessage id="general.dmca" />
|
||||
|
|
|
@ -6,6 +6,7 @@ const Navigation = require('../../navigation/www/navigation.jsx');
|
|||
const Footer = require('../../footer/www/footer.jsx');
|
||||
const DonorRecognition = require('./donor-recognition.jsx');
|
||||
const ErrorBoundary = require('../../errorboundary/errorboundary.jsx');
|
||||
const PrivacyBanner = require('../../privacy-banner/privacy-banner.jsx');
|
||||
|
||||
const today = new Date();
|
||||
const semi = today.getDate() === 1 && today.getMonth() === 3;
|
||||
|
@ -25,6 +26,7 @@ const Page = ({
|
|||
>
|
||||
<Navigation />
|
||||
</nav>
|
||||
<PrivacyBanner />
|
||||
<main id="view">
|
||||
{children}
|
||||
</main>
|
||||
|
|
107
src/components/privacy-banner/privacy-banner.jsx
Normal file
107
src/components/privacy-banner/privacy-banner.jsx
Normal file
|
@ -0,0 +1,107 @@
|
|||
const bindAll = require('lodash.bindall');
|
||||
const FormattedMessage = require('react-intl').FormattedMessage;
|
||||
const injectIntl = require('react-intl').injectIntl;
|
||||
const connect = require('react-redux').connect;
|
||||
const PropTypes = require('prop-types');
|
||||
const React = require('react');
|
||||
|
||||
const TitleBanner = require('../title-banner/title-banner.jsx');
|
||||
const Button = require('../forms/button.jsx');
|
||||
const jar = require('../../lib/jar.js');
|
||||
|
||||
require('./privacy-banner.scss');
|
||||
|
||||
const PRIVACY_UPDATE_START_TIME = 1684987200000; // May 25 2023 0000 ET
|
||||
const PRIVACY_UPDATE_END_TIME = 1686887999000; // Jun 15 2023 1159 ET
|
||||
|
||||
class PrivacyBanner extends React.Component {
|
||||
constructor (props) {
|
||||
super(props);
|
||||
bindAll(this, [
|
||||
'shouldShowBanner',
|
||||
'handleCloseBanner'
|
||||
]);
|
||||
}
|
||||
|
||||
shouldShowBanner () {
|
||||
const seen = jar.get('scratchpolicyseen');
|
||||
return (
|
||||
Date.now() >= PRIVACY_UPDATE_START_TIME &&
|
||||
Date.now() < PRIVACY_UPDATE_END_TIME &&
|
||||
typeof seen === 'undefined' &&
|
||||
typeof this.props.user !== 'undefined'
|
||||
);
|
||||
}
|
||||
|
||||
handleCloseBanner () {
|
||||
const opts = {
|
||||
expires: new Date(new Date().setDate(new Date().getDate + 21)) // expires after 3 weeks
|
||||
};
|
||||
this.setState({dismissedPrivacyBanner: true});
|
||||
jar.set('scratchpolicyseen', true, opts);
|
||||
}
|
||||
render () {
|
||||
const showBanner = this.shouldShowBanner();
|
||||
const privacyPolicyLink = chunks => <a href="/privacy_policy">{chunks}</a>;
|
||||
if (showBanner) {
|
||||
return (
|
||||
<aside>
|
||||
<TitleBanner className="privacy-banner">
|
||||
<div className="privacy-banner-container">
|
||||
<img
|
||||
aria-hidden="true"
|
||||
alt=""
|
||||
className="lightbulb-icon"
|
||||
src="/images/ideas/bulb-icon.svg"
|
||||
/>
|
||||
<div className="privacy-banner-centered">
|
||||
<p className="privacy-banner-text">
|
||||
<FormattedMessage
|
||||
id="privacyBanner.update"
|
||||
values={{
|
||||
a: privacyPolicyLink
|
||||
}}
|
||||
/>
|
||||
</p>
|
||||
</div>
|
||||
<Button
|
||||
isCloseType
|
||||
className="privacy-close-button"
|
||||
key="closeButton"
|
||||
name="closeButton"
|
||||
type="button"
|
||||
onClick={this.handleCloseBanner}
|
||||
>
|
||||
<div className="action-button-text">
|
||||
<FormattedMessage id="general.close" />
|
||||
</div>
|
||||
</Button>
|
||||
</div>
|
||||
</TitleBanner>
|
||||
</aside>
|
||||
);
|
||||
}
|
||||
|
||||
// if we're not showing the banner, return null to not render anything
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
const mapStateToProps = state => ({
|
||||
user: state.session && state.session.session && state.session.session.user
|
||||
});
|
||||
|
||||
PrivacyBanner.propTypes = {
|
||||
// onRequestClose: PropTypes.func
|
||||
user: PropTypes.shape({
|
||||
classroomId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
||||
thumbnailUrl: PropTypes.string,
|
||||
username: PropTypes.string
|
||||
})
|
||||
};
|
||||
|
||||
const ConnectedPrivacyBanner = connect(
|
||||
mapStateToProps
|
||||
)(PrivacyBanner);
|
||||
|
||||
module.exports = injectIntl(ConnectedPrivacyBanner);
|
72
src/components/privacy-banner/privacy-banner.scss
Normal file
72
src/components/privacy-banner/privacy-banner.scss
Normal file
|
@ -0,0 +1,72 @@
|
|||
@import "../../colors";
|
||||
@import "../../frameless";
|
||||
|
||||
|
||||
.privacy-banner {
|
||||
display: flex;
|
||||
z-index: 8;
|
||||
background-color: $ui-blue-dark;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-bottom: -50px;
|
||||
margin-top: 50px;
|
||||
|
||||
.privacy-banner-container {
|
||||
display: flex;
|
||||
margin: 0.375rem auto;
|
||||
align-items: center;
|
||||
|
||||
.lightbulb-icon {
|
||||
margin: 0.6875rem;
|
||||
width: 1.75rem;
|
||||
height: 1.75rem;
|
||||
}
|
||||
|
||||
.privacy-banner-centered {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.privacy-banner-text {
|
||||
text-align: left;
|
||||
color: $ui-white;
|
||||
font-size: 1rem;
|
||||
font-weight: bold;
|
||||
margin-right: 1rem;
|
||||
max-width: 70vw;
|
||||
}
|
||||
}
|
||||
|
||||
.privacy-close-button {
|
||||
right: 1rem;
|
||||
top: auto;
|
||||
}
|
||||
|
||||
a {
|
||||
color: $ui-white;
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: $mobileIntermediate) {
|
||||
.privacy-banner .privacy-banner-container .privacy-banner-centered {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.privacy-banner .privacy-banner-container .lightbulb-icon {
|
||||
padding-bottom: 2rem;
|
||||
}
|
||||
|
||||
.privacy-banner .privacy-banner-container {
|
||||
margin-left: 0;
|
||||
margin-bottom: 1rem
|
||||
}
|
||||
|
||||
.privacy-banner .donate-close-button {
|
||||
top: 1rem;
|
||||
}
|
||||
}
|
|
@ -17,6 +17,7 @@
|
|||
"general.contactUs": "Contact Us",
|
||||
"general.getHelp": "Get Help",
|
||||
"general.contact": "Contact",
|
||||
"general.cookies": "Cookies",
|
||||
"general.done": "Done",
|
||||
"general.downloadPDF": "Download PDF",
|
||||
"general.emailUs": "Email Us",
|
||||
|
@ -451,5 +452,6 @@
|
|||
"extensions.otherComputerConnectedText": "Only one computer can be connected to a {deviceName} at a time. If you have another computer connected to your {deviceName}, disconnect the {deviceName} or close Scratch on that computer and try again.",
|
||||
|
||||
"bluetooth.enableLocationServicesTitle": "Make sure you have location services enabled on Chromebooks or Android tablets",
|
||||
"bluetooth.enableLocationServicesText": "Bluetooth can be used to provide location data to the app. In addition to granting the Scratch App permission to access location, location must be enabled in your general device settings. Search for 'Location' in your settings, and make sure it is on. On Chromebooks search for 'Location' in the Google Play Store Android preferences."
|
||||
"bluetooth.enableLocationServicesText": "Bluetooth can be used to provide location data to the app. In addition to granting the Scratch App permission to access location, location must be enabled in your general device settings. Search for 'Location' in your settings, and make sure it is on. On Chromebooks search for 'Location' in the Google Play Store Android preferences.",
|
||||
"privacyBanner.update": "The Scratch privacy policy has been updated, effective May 25, 2023. You can see the new policy <a>here</a>."
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ const Types = keyMirror({
|
|||
});
|
||||
|
||||
const banGoodListPaths = [
|
||||
'/ip_ban_appeal',
|
||||
'/vpn_required',
|
||||
'/accounts/banned-response',
|
||||
'/community_guidelines',
|
||||
|
@ -72,6 +73,13 @@ const handleSessionResponse = (dispatch, body) => {
|
|||
) {
|
||||
window.location = '/vpn_required/';
|
||||
return;
|
||||
} else if (
|
||||
body.banned &&
|
||||
body.redirectURL &&
|
||||
banGoodListPaths.every(goodPath => window.location.pathname.indexOf(goodPath) === -1)
|
||||
) {
|
||||
window.location = body.redirectURL;
|
||||
return;
|
||||
} else if (
|
||||
body.user &&
|
||||
body.user.banned &&
|
||||
|
|
|
@ -138,6 +138,13 @@
|
|||
"title": "Contact Us",
|
||||
"viewportWidth": "device-width"
|
||||
},
|
||||
{
|
||||
"name": "cookies",
|
||||
"pattern": "^/cookies/?$",
|
||||
"routeAlias": "/cookies/?",
|
||||
"view": "cookies/cookies",
|
||||
"title": "Cookie Policy"
|
||||
},
|
||||
{
|
||||
"name": "credits",
|
||||
"pattern": "^/credits/?$",
|
||||
|
|
|
@ -5,10 +5,12 @@ const render = require('../../lib/render.jsx');
|
|||
const Button = require('../../components/forms/button.jsx');
|
||||
const Page = require('../../components/page/www/page.jsx');
|
||||
const Video = require('../../components/video/video.jsx');
|
||||
const injectIntl = require('react-intl').injectIntl;
|
||||
|
||||
require('./about.scss');
|
||||
|
||||
const About = () => (
|
||||
const tedLink = chunks => <a href="https://www.ted.com/talks/mitch_resnick_let_s_teach_kids_to_code">{chunks}</a>;
|
||||
const About = injectIntl(({intl}) => (
|
||||
<div className="inner about">
|
||||
<h1><FormattedMessage id="general.aboutScratch" /></h1>
|
||||
|
||||
|
@ -56,14 +58,22 @@ const About = () => (
|
|||
|
||||
<li>
|
||||
<h2><FormattedMessage id="about.literacy" /></h2>
|
||||
<iframe
|
||||
allowFullScreen
|
||||
mozallowfullscreen={'true'}
|
||||
scrolling="no"
|
||||
src="https://embed-ssl.ted.com/talks/mitch_resnick_let_s_teach_kids_to_code.html"
|
||||
webkitallowfullscreen={'true'}
|
||||
/>
|
||||
<p><FormattedMessage id="about.literacyDescription" /></p>
|
||||
<a href="https://www.ted.com/talks/mitch_resnick_let_s_teach_kids_to_code">
|
||||
<img
|
||||
alt={intl.formatMessage(
|
||||
{id: 'about.literacyImageDescription'}
|
||||
)}
|
||||
src="/images/about/ted-thumbnail.jpg"
|
||||
/>
|
||||
</a>
|
||||
<p>
|
||||
<FormattedMessage
|
||||
id="about.literacyDescription"
|
||||
values={{
|
||||
a: tedLink
|
||||
}}
|
||||
/>
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
|
@ -241,6 +251,6 @@ const About = () => (
|
|||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
));
|
||||
|
||||
render(<Page><About /></Page>, document.getElementById('app'));
|
||||
|
|
|
@ -19,7 +19,8 @@
|
|||
"about.learnMoreEducators": "Information for Educators",
|
||||
"about.learnMoreAnnualReport": "Annual Report",
|
||||
"about.literacy": "Learn to Code, Code to Learn",
|
||||
"about.literacyDescription": "The ability to code computer programs is an important part of literacy in today’s society. When people learn to code in Scratch, they learn important strategies for solving problems, designing projects, and communicating ideas.",
|
||||
"about.literacyImageDescription": "An image of Mitch Resnick giving a TED talk titled \"Let's Teach Kids to Code.\" A play button is in the center of the image.",
|
||||
"about.literacyDescription": "In this <a>TED talk</a>, Scratch founder Mitch Resnick describes why the ability to code computer programs is an important part of literacy in today’s 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",
|
||||
"about.schoolsDescription": "Students are learning with Scratch at all levels (from elementary school to college) and across disciplines (such as math, computer science, language arts, social studies). Educator resources are available on the {scratchForEducatorsLink} page.",
|
||||
"about.scratchForEducatorsLinkText": "Scratch For Educators",
|
||||
|
|
344
src/views/cookies/cookies.jsx
Normal file
344
src/views/cookies/cookies.jsx
Normal file
|
@ -0,0 +1,344 @@
|
|||
const React = require('react');
|
||||
const injectIntl = require('react-intl').injectIntl;
|
||||
const FormattedMessage = require('react-intl').FormattedMessage;
|
||||
|
||||
const Page = require('../../components/page/www/page.jsx');
|
||||
const render = require('../../lib/render.jsx');
|
||||
|
||||
const InformationPage = require('../../components/informationpage/informationpage.jsx');
|
||||
|
||||
const bold = chunks => <b>{chunks}</b>;
|
||||
const privacyPolicyLink = chunks => <a href="/privacy_policy">{chunks}</a>;
|
||||
const manageLink = chunks => <a href="http://www.allaboutcookies.org/manage-cookies">{chunks}</a>;
|
||||
const googlePoliciesLink = chunks => <a href="https://www.google.com/policies/privacy/partners">{chunks}</a>;
|
||||
const optOutLink = chunks => <a href="https://tools.google.com/dlpage/gaoptout">{chunks}</a>;
|
||||
|
||||
require('./cookies.scss');
|
||||
|
||||
const Cookies = injectIntl(() => (
|
||||
<InformationPage
|
||||
title={
|
||||
<FormattedMessage id="cookies.title" />
|
||||
}
|
||||
>
|
||||
<div className="inner info-inner">
|
||||
<section>
|
||||
<p className="lastupdate">
|
||||
<i>
|
||||
<FormattedMessage id="cookies.lastUpdated" />
|
||||
</i>
|
||||
</p>
|
||||
<p className="intro">
|
||||
<FormattedMessage
|
||||
id="cookies.intro1"
|
||||
values={{
|
||||
b: bold,
|
||||
privacy: privacyPolicyLink
|
||||
}}
|
||||
/>
|
||||
</p>
|
||||
<p className="intro">
|
||||
<FormattedMessage
|
||||
id="cookies.intro2"
|
||||
values={{
|
||||
b: bold
|
||||
}}
|
||||
/>
|
||||
</p>
|
||||
</section>
|
||||
<section id="types">
|
||||
<dl>
|
||||
<span className="nav-spacer" />
|
||||
<h2><FormattedMessage id="cookies.types.title" /></h2>
|
||||
<dt><FormattedMessage id="cookies.types.essentialTitle" /></dt>
|
||||
<dd><FormattedMessage id="cookies.types.essentialIntro" /></dd>
|
||||
<dd>
|
||||
<table className="cookies-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><FormattedMessage id="cookies.table.name" /></th>
|
||||
<th><FormattedMessage id="cookies.table.provider" /></th>
|
||||
<th><FormattedMessage id="cookies.table.purpose" /></th>
|
||||
<th><FormattedMessage id="cookies.table.expiration" /></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>scratchcsrftoken</td>
|
||||
<td><a href="/privacy_policy">Scratch</a></td>
|
||||
<td><FormattedMessage id="cookies.essential.csrf" /></td>
|
||||
<td><FormattedMessage id="cookies.table.years.1" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>scratchsessionid</td>
|
||||
<td><a href="/privacy_policy">Scratch</a></td>
|
||||
<td><FormattedMessage id="cookies.essential.sessionID" /></td>
|
||||
<td><FormattedMessage id="cookies.table.session" /></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd>
|
||||
<dt><FormattedMessage id="cookies.types.functionalTitle" /></dt>
|
||||
<dd><FormattedMessage id="cookies.types.functionalIntro" /></dd>
|
||||
<dd>
|
||||
<table className="cookies-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><FormattedMessage id="cookies.table.name" /></th>
|
||||
<th><FormattedMessage id="cookies.table.provider" /></th>
|
||||
<th><FormattedMessage id="cookies.table.purpose" /></th>
|
||||
<th><FormattedMessage id="cookies.table.expiration" /></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>permissions</td>
|
||||
<td><a href="/privacy_policy">Scratch</a></td>
|
||||
<td><FormattedMessage id="cookies.functional.permissions" /></td>
|
||||
<td><FormattedMessage id="cookies.table.years.1" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>explore_by</td>
|
||||
<td><a href="/privacy_policy">Scratch</a></td>
|
||||
<td><FormattedMessage id="cookies.functional.exploreBy" /></td>
|
||||
<td><FormattedMessage id="cookies.table.session" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>minilogSettings</td>
|
||||
<td><a href="/privacy_policy">Scratch</a></td>
|
||||
<td><FormattedMessage id="cookies.functional.minilogSettings" /></td>
|
||||
<td><FormattedMessage id="cookies.table.persistent" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>scratchlanguage</td>
|
||||
<td><a href="/privacy_policy">Scratch</a></td>
|
||||
<td><FormattedMessage id="cookies.functional.scratchLanguage" /></td>
|
||||
<td><FormattedMessage id="cookies.table.years.1" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>scratchpolicyseen</td>
|
||||
<td><a href="/privacy_policy">Scratch</a></td>
|
||||
<td><FormattedMessage id="cookies.functional.scratchPolicySeen" /></td>
|
||||
<td><FormattedMessage id="cookies.table.weeks.3" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>wistia-video-progress-#</td>
|
||||
<td><a href="https://wistia.com/privacy">Wistia</a></td>
|
||||
<td><FormattedMessage id="cookies.functional.wistia" /></td>
|
||||
<td><FormattedMessage id="cookies.table.persistent" /></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd>
|
||||
<dt><FormattedMessage id="cookies.types.analyticsTitle" /></dt>
|
||||
<dd>
|
||||
<FormattedMessage
|
||||
id="cookies.types.analyticsIntro"
|
||||
values={{
|
||||
policies: googlePoliciesLink,
|
||||
optout: optOutLink
|
||||
}}
|
||||
/>
|
||||
</dd>
|
||||
<dd>
|
||||
<table className="cookies-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><FormattedMessage id="cookies.table.name" /></th>
|
||||
<th><FormattedMessage id="cookies.table.provider" /></th>
|
||||
<th><FormattedMessage id="cookies.table.purpose" /></th>
|
||||
<th><FormattedMessage id="cookies.table.expiration" /></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>_ga</td>
|
||||
<td><a href="https://policies.google.com/privacy">Google Analytics</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.ga" /></td>
|
||||
<td><FormattedMessage id="cookies.table.years.2" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>_gat</td>
|
||||
<td><a href="https://policies.google.com/privacy">Google Analytics</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.gat" /></td>
|
||||
<td><FormattedMessage id="cookies.table.days.1" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>_gid</td>
|
||||
<td><a href="https://policies.google.com/privacy">Google Analytics</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.gid" /></td>
|
||||
<td><FormattedMessage id="cookies.table.days.1" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>__utma</td>
|
||||
<td><a href="https://policies.google.com/privacy">Google Analytics</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.utma" /></td>
|
||||
<td><FormattedMessage id="cookies.table.years.2" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>__utmb</td>
|
||||
<td><a href="https://policies.google.com/privacy">Google Analytics</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.utmb" /></td>
|
||||
<td><FormattedMessage id="cookies.table.days.1" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>__utmc</td>
|
||||
<td><a href="https://policies.google.com/privacy">Google Analytics</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.utmc" /></td>
|
||||
<td><FormattedMessage id="cookies.table.session" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>__utmt</td>
|
||||
<td><a href="https://policies.google.com/privacy">Google Analytics</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.utmt" /></td>
|
||||
<td><FormattedMessage id="cookies.table.days.1" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>__utmz</td>
|
||||
<td><a href="https://policies.google.com/privacy">Google Analytics</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.utmz" /></td>
|
||||
<td><FormattedMessage id="cookies.table.months.6" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>loglevel</td>
|
||||
<td><a href="https://wistia.com/privacy">Wistia</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.loglevel" /></td>
|
||||
<td><FormattedMessage id="cookies.table.persistent" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>DEVICE_INFO</td>
|
||||
<td><a href="https://policies.google.com/privacy">YouTube</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.deviceInfo" /></td>
|
||||
<td><FormattedMessage id="cookies.table.days.180" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>LogsDatabaseV2:[unique ID number]</td>
|
||||
<td><a href="https://policies.google.com/privacy">YouTube</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.youtubeLogsDatabase" /></td>
|
||||
<td><FormattedMessage id="cookies.table.session" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>VISITOR_INFO1_LIVE</td>
|
||||
<td><a href="https://policies.google.com/privacy">YouTube</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.visitorInfo" /></td>
|
||||
<td><FormattedMessage id="cookies.table.days.180" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>remote_sid</td>
|
||||
<td><a href="https://policies.google.com/privacy">YouTube</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.remoteSid" /></td>
|
||||
<td><FormattedMessage id="cookies.table.session" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>YSC</td>
|
||||
<td><a href="https://policies.google.com/privacy">YouTube</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.ysc" /></td>
|
||||
<td><FormattedMessage id="cookies.table.session" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ytidb::LAST_RESULT_ENTRY_KEY</td>
|
||||
<td><a href="https://policies.google.com/privacy">YouTube</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.lastResultEntryKey" /></td>
|
||||
<td><FormattedMessage id="cookies.table.persistent" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>YtIdbMeta#databases</td>
|
||||
<td><a href="https://policies.google.com/privacy">YouTube</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.ytidbMetaDatabases" /></td>
|
||||
<td><FormattedMessage id="cookies.table.persistent" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>yt-remote-cast-available</td>
|
||||
<td><a href="https://policies.google.com/privacy">YouTube</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.remoteCastAvailable" /></td>
|
||||
<td><FormattedMessage id="cookies.table.session" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>yt-remote-cast-installed</td>
|
||||
<td><a href="https://policies.google.com/privacy">YouTube</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.remoteCastInstalled" /></td>
|
||||
<td><FormattedMessage id="cookies.table.session" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>yt-remote-connected-devices</td>
|
||||
<td><a href="https://policies.google.com/privacy">YouTube</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.remoteConnectedDevices" /></td>
|
||||
<td><FormattedMessage id="cookies.table.persistent" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>yt-remote-device-id</td>
|
||||
<td><a href="https://policies.google.com/privacy">YouTube</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.remoteDeviceId" /></td>
|
||||
<td><FormattedMessage id="cookies.table.persistent" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>yt-remote-fast-check-period</td>
|
||||
<td><a href="https://policies.google.com/privacy">YouTube</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.remoteFastCheckPeriod" /></td>
|
||||
<td><FormattedMessage id="cookies.table.session" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>yt-remote-session-app</td>
|
||||
<td><a href="https://policies.google.com/privacy">YouTube</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.remoteSessionApp" /></td>
|
||||
<td><FormattedMessage id="cookies.table.session" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>yt-remote-session-name</td>
|
||||
<td><a href="https://policies.google.com/privacy">YouTube</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.remoteSessionName" /></td>
|
||||
<td><FormattedMessage id="cookies.table.session" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>undefined</td>
|
||||
<td><a href="https://wistia.com/privacy">Wistia</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.wistiaUndefinedCookie" /></td>
|
||||
<td><FormattedMessage id="cookies.table.persistent" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>wistia</td>
|
||||
<td><a href="https://wistia.com/privacy">Wistia</a></td>
|
||||
<td><FormattedMessage id="cookies.analytics.wistiaCookie" /></td>
|
||||
<td><FormattedMessage id="cookies.table.persistent" /></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd>
|
||||
</dl>
|
||||
</section>
|
||||
<section id="manage">
|
||||
<span className="nav-spacer" />
|
||||
<h2><FormattedMessage id="cookies.manageTitle" /></h2>
|
||||
<p>
|
||||
<FormattedMessage
|
||||
id="cookies.manageBody"
|
||||
values={{
|
||||
a: manageLink
|
||||
}}
|
||||
/>
|
||||
</p>
|
||||
</section>
|
||||
<section id="contact">
|
||||
<span className="nav-spacer" />
|
||||
<h2><FormattedMessage id="cookies.contactTitle" /></h2>
|
||||
<p><FormattedMessage id="cookies.contactIntro" /></p>
|
||||
<p>
|
||||
Scratch Foundation<br />
|
||||
ATTN: Cookie Policy<br />
|
||||
201 South Street<br />
|
||||
Suite 102<br />
|
||||
Boston, MA 02111<br />
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<nav>
|
||||
<ol>
|
||||
<li><a href="#types"><FormattedMessage id="cookies.nav.types" /></a></li>
|
||||
<li><a href="#manage"><FormattedMessage id="cookies.nav.manage" /></a></li>
|
||||
<li><a href="#contact"><FormattedMessage id="cookies.nav.contact" /></a></li>
|
||||
</ol>
|
||||
</nav>
|
||||
</InformationPage>
|
||||
));
|
||||
|
||||
render(<Page><Cookies /></Page>, document.getElementById('app'));
|
12
src/views/cookies/cookies.scss
Normal file
12
src/views/cookies/cookies.scss
Normal file
|
@ -0,0 +1,12 @@
|
|||
@import "../../colors";
|
||||
|
||||
.cookies-table {
|
||||
border: 1px solid $ui-border;
|
||||
border-collapse: collapse;
|
||||
|
||||
td, th {
|
||||
padding: .75rem;
|
||||
border: 1px solid $ui-border;
|
||||
text-align: left;
|
||||
}
|
||||
}
|
66
src/views/cookies/l10n.json
Normal file
66
src/views/cookies/l10n.json
Normal file
|
@ -0,0 +1,66 @@
|
|||
{
|
||||
"cookies.title": "Cookie Policy",
|
||||
"cookies.nav.types": "Types of Cookies",
|
||||
"cookies.nav.manage": "Manage Cookies",
|
||||
"cookies.nav.contact": "Contact Us",
|
||||
"cookies.lastUpdated": "The Scratch Cookie Policy was last updated May 25, 2023",
|
||||
"cookies.intro1": "This Cookie Policy (the <b>“Cookie Policy”</b>) is provided by Scratch Foundation (<b>“Scratch”</b>, <b>“we”</b> or <b>“us”</b>). It supplements the information and disclosures included in our <privacy>Privacy Policy</privacy>, and explains how Scratch uses Cookies on its website scratch.mit.edu (the <b>“Scratch Website”</b>) to its visitors (<b>“you”</b>, <b>“user”</b>). For the purpose of this Cookie Policy, <b>“Personal Information”</b> means any information relating to an identified or identifiable individual.",
|
||||
"cookies.intro2": "When you use the Scratch Website, we use cookies, beacons, invisible tags, unique IDs and similar technologies (collectively <b>“Cookies”</b>) to automatically record certain Personal Information from your browser or device.",
|
||||
"cookies.table.name": "Name",
|
||||
"cookies.table.provider": "Provider",
|
||||
"cookies.table.purpose": "Purpose",
|
||||
"cookies.table.expiration": "Expiration",
|
||||
"cookies.table.session": "Session",
|
||||
"cookies.table.persistent": "Persistent",
|
||||
"cookies.table.days.1": "1 day",
|
||||
"cookies.table.days.180": "180 days",
|
||||
"cookies.table.weeks.2": "2 weeks",
|
||||
"cookies.table.weeks.3": "3 weeks",
|
||||
"cookies.table.months.6": "6 months",
|
||||
"cookies.table.years.1": "1 year",
|
||||
"cookies.table.years.2": "2 years",
|
||||
"cookies.types.title": "What types of Cookies are used on the Scratch Website?",
|
||||
"cookies.types.essentialTitle": "Essential Cookies",
|
||||
"cookies.types.essentialIntro": "These are Cookies that are necessary to make the Scratch Website available to the user or ensure security. We use this Personal Information, for example, to ensure that the Scratch Website functions properly, or to prevent fraud. We use the following essential Cookies:",
|
||||
"cookies.essential.csrf": "Used as a security measure to prevent cross site request forgery.",
|
||||
"cookies.essential.sessionID": "Used for authenticating you on the Scratch Website so we can provide you the services you requested.",
|
||||
"cookies.types.functionalTitle": "Functional Cookies",
|
||||
"cookies.types.functionalIntro": "We use these cookies to recognize the user when they return to the Scratch Website, and for beneficial, but non-essential functionality. For example, Cookies to remember users’ settings (e.g., retaining language settings) and content preferences when they return to the Scratch Website, or that allow videos to play. Disabling functional Cookies will typically result in limited functionality of the site and a less personalized experience, but the user will still be able to use the site as such. We use the following functional Cookies:",
|
||||
"cookies.functional.permissions": "Used to track which features of the service a logged in user is able to access.",
|
||||
"cookies.functional.exploreBy": "Used to save the user’s current search preference.",
|
||||
"cookies.functional.scratchLanguage": "Used to save information about the user’s preferred language.",
|
||||
"cookies.functional.scratchPolicySeen": "Used to track if the user has seen a privacy policy update notification",
|
||||
"cookies.functional.wistia": "Contains a timestamp for the Scratch Website’s video-content. This allows the user to resume watching without having to start over, if the user leaves the video or Scratch Website.",
|
||||
"cookies.functional.minilogSettings": "Unclassified",
|
||||
"cookies.types.analyticsTitle": "Analytical or Performance Cookies",
|
||||
"cookies.types.analyticsIntro": "We use Cookies to generally help us better understand how the Scratch Website is being used (e.g., determining which pages are popular based on how many users have visited certain pages). We also work with analytics providers, such as Google Analytics, which use Cookies to collect and analyze information about use of the Scratch Website and report on activities and trends. You can learn more about Google’s practices by going to <policies>https://www.google.com/policies/privacy/partners</policies> and opt out of them by downloading the Google Analytics opt-out browser add-on, available at <optout>https://tools.google.com/dlpage/gaoptout</optout>. We use the following analytical and performance Cookies:",
|
||||
"cookies.analytics.ga": "Used to send data to Google Analytics about the user's device and behavior. Tracks the user across devices and marketing channels.",
|
||||
"cookies.analytics.gat": "Used by Google Analytics to throttle request rate.",
|
||||
"cookies.analytics.gid": "Registers a unique ID that is used to generate statistical data on how the user uses the Scratch Website.",
|
||||
"cookies.analytics.utma": "Used by Google Analytics to categorize new vs returning users.",
|
||||
"cookies.analytics.utmb": "Used by Google Analytics to calculate the duration of the Scratch Website visit.",
|
||||
"cookies.analytics.utmc": "Used by Google Analytics to calculate the duration of the Scratch Website visit.",
|
||||
"cookies.analytics.utmt": "Used by Google Analytics to throttle request rate.",
|
||||
"cookies.analytics.utmz": "Used by Google Analytics to understand how a user navigates the Scratch Website.",
|
||||
"cookies.analytics.loglevel": "Maintains settings and outputs when using the Developer Tools Console on the current session.",
|
||||
"cookies.analytics.deviceInfo": "Used to track a user’s interaction with embedded content.",
|
||||
"cookies.analytics.youtubeLogsDatabase": "Unclassified",
|
||||
"cookies.analytics.visitorInfo": "Tries to estimate user bandwidth on pages with integrated YouTube videos.",
|
||||
"cookies.analytics.remoteSid": "Necessary for the implementation and functionality of YouTube video content.",
|
||||
"cookies.analytics.ysc": "Registers a unique ID to keep statistics of what videos from YouTube the user has seen.",
|
||||
"cookies.analytics.lastResultEntryKey": "Stores the user's video player preferences using embedded YouTube video.",
|
||||
"cookies.analytics.ytidbMetaDatabases": "Stores the user's video player preferences using embedded YouTube video.",
|
||||
"cookies.analytics.remoteCastAvailable": "Stores the user's video player preferences using embedded YouTube video.",
|
||||
"cookies.analytics.remoteCastInstalled": "Stores the user's video player preferences using embedded YouTube video.",
|
||||
"cookies.analytics.remoteConnectedDevices": "Stores the user's video player preferences using embedded YouTube video.",
|
||||
"cookies.analytics.remoteDeviceId": "Stores the user's video player preferences using embedded YouTube video.",
|
||||
"cookies.analytics.remoteFastCheckPeriod": "Stores the user's video player preferences using embedded YouTube video.",
|
||||
"cookies.analytics.remoteSessionApp": "Stores the user's video player preferences using embedded YouTube video.",
|
||||
"cookies.analytics.remoteSessionName": "Stores the user's video player preferences using embedded YouTube video.",
|
||||
"cookies.analytics.wistiaUndefinedCookie": "Collects data on user interaction with the Scratch Website's video-content. This data is used to make the website's video-content more relevant towards the user.",
|
||||
"cookies.analytics.wistiaCookie": "Used by the Scratch Website to track the user's use of video-content - the cookie roots from Wistia, which provides video-software to websites.",
|
||||
"cookies.manageTitle": "How can you manage Cookies?",
|
||||
"cookies.manageBody": "If you do not want your Personal Information to be collected through the use of Cookies, most browsers allow you to manage your Cookie preferences. You can set your browser to automatically decline Cookies or to request you to accept or decline Cookies for each site. You can find more information about Cookies at <a>http://www.allaboutcookies.org/manage-cookies</a>.",
|
||||
"cookies.contactTitle": "Contact Us",
|
||||
"cookies.contactIntro": "If you have any questions about this Cookie Policy please contact us at privacy@scratch.mit.edu or via mail at:"
|
||||
}
|
100
src/views/privacypolicy/l10n.json
Normal file
100
src/views/privacypolicy/l10n.json
Normal file
|
@ -0,0 +1,100 @@
|
|||
{
|
||||
"privacyPolicy.nav.collection": "Collection",
|
||||
"privacyPolicy.nav.usage": "Usage",
|
||||
"privacyPolicy.nav.share": "Sharing",
|
||||
"privacyPolicy.nav.thirdParties": "Third Party Services",
|
||||
"privacyPolicy.nav.childPrivacy": "Children and Student Privacy",
|
||||
"privacyPolicy.nav.rights": "Rights and Choices",
|
||||
"privacyPolicy.nav.retention": "Data Retention",
|
||||
"privacyPolicy.nav.protection": "Protection",
|
||||
"privacyPolicy.nav.changes": "Notifications of Changes",
|
||||
"privacyPolicy.nav.transfer": "Data Transfer",
|
||||
"privacyPolicy.nav.help": "How to Help",
|
||||
"privacyPolicy.nav.contact": "Contact Us",
|
||||
"privacyPolicy.title": "Privacy Policy",
|
||||
"privacyPolicy.lastUpdated": "The Scratch Privacy Policy was last updated: May 25, 2023",
|
||||
"privacyPolicy.intro": "The Scratch Foundation (“<b>Scratch</b>”, “<b>we</b>” or “<b>us</b>”) understands how important privacy is to our community, especially kids and parents (“<b>you</b>”, “<b>user</b>”). We wrote this privacy policy (“<b>Privacy Policy</b>”) to explain what Personal Information we collect through our website (scratch.mit.edu, the “<b>Scratch Website</b>”), how we use, process, and share it, and what we're doing to keep it safe. It also tells you about your rights and choices with respect to your Personal Information, and how you can <a>contact us</a> if you have any questions or concerns.",
|
||||
"privacyPolicy.offlineEditor": "If you would like to build projects with Scratch without submitting any Personal Information to us, you can download and use the <a>Scratch app</a> offline. Projects created in the <a>Scratch app</a> are not accessible by Scratch, and the app will only send anonymized information back to us if you choose to do so. If you upload your projects to the Scratch online community on the Scratch Website, we will collect your Personal Information as explained in this Privacy Policy.",
|
||||
"privacyPolicy.collectionTitle": "What Personal Information Does Scratch Collect About Me?",
|
||||
"privacyPolicy.collection1": "For the purpose of this Privacy Policy, “<b>Personal Information</b>” means any information relating to an identified or identifiable individual. You may provide us with Personal Information directly, such as when you create an account, or we may collect your Personal Information automatically, such as when you switch languages or view a project.",
|
||||
"privacyPolicy.collection2": "Where applicable, we explain whether and why you must provide us with your Personal Information, as well as the consequences if you choose not to do so. For example, you may not be able to benefit from the Scratch Website if that Personal Information is necessary to provide you with the service or if we are legally required to collect that Personal Information.",
|
||||
"privacyPolicy.youProvide": "Personal Information That You Provide Us",
|
||||
"privacyPolicy.accountInformationTitle": "Account Information",
|
||||
"privacyPolicy.accountInformationIntro": "In order to use the services and features that we offer on the Scratch Website, such as to share projects, create studios, or post comments, you need to create an account (your own account, a teacher account or a student account).",
|
||||
"privacyPolicy.yourAccount": "When you create an <b>account for yourself</b>, we ask you for a username and password, your country, gender, and your email address. We ask that you select a username that does not disclose your real name or other information that could identify you. Other users can see your username and country, but not your gender or email address.",
|
||||
"privacyPolicy.teacherAccount": "When you create a <b>teacher account</b>, we ask for a username and password, your phone number, birthdate, gender, country of residence, name, and details about your employer.",
|
||||
"privacyPolicy.studentAccount": "When you create <b>student accounts through your teacher account</b>, we ask for a username, password, birthdate, gender, and country of residence. You do not need to provide students’ email addresses to create bulk student accounts.",
|
||||
"privacyPolicy.userGeneratedContentTitle": "User-generated Content",
|
||||
"privacyPolicy.userGeneratedContentBody": "We process any Personal Information that you choose to provide to us in content when you create or interact with the Scratch Website (typically referred to as user-generated content). For example, in Scratch projects (including unshared projects), studios, text fields, or comments.",
|
||||
"privacyPolicy.communicationsTitle": "Communications",
|
||||
"privacyPolicy.communicationsBody": "If you contact us directly, we collect the Personal Information that you provide in your message. For example, when you contact our Customer Support Team, we may receive your name, email address, phone number, the contents of a message or attachments that you may send to us, and other information you choose to provide.",
|
||||
"privacyPolicy.automaticallyCollect": "Personal Information We Collect Automatically From Your Use of the Scratch Website",
|
||||
"privacyPolicy.locationInformationTitle": "Location Information",
|
||||
"privacyPolicy.locationInformationBody": "When you use the Scratch Website, we infer your general location information, for example, by using your internet protocol (IP) address.",
|
||||
"privacyPolicy.cookiesTitle": "Cookies",
|
||||
"privacyPolicy.cookiesBody": "When you use the Scratch Website, we use cookies, beacons, invisible tags, unique IDs and similar technologies (collectively “Cookies”) to automatically record certain Personal Information from your browser or device. For example, your IP address, network location, web server logs, what browser you are using, device IDs and characteristics, operating system version, browser language settings, referring URLs, and Personal Information about the usage of the Scratch Website. For more information about our use of Cookies, please refer to the <a>Scratch Cookie Policy.</a>",
|
||||
"privacyPolicy.otherSources": "Information Collected From Other Sources",
|
||||
"privacyPolicy.thirdPartyInformationTitle": "Information from Third Parties",
|
||||
"privacyPolicy.thirdPartyInformationBody": "We may obtain Personal Information about you from third parties, such as from your teacher if you are using Scratch within a school. This information may include your school name and address.",
|
||||
"privacyPolicy.publicSourceInformationTitle": "Information from Public Sources",
|
||||
"privacyPolicy.publicSourceInformationBody": "We may obtain Personal Information about you from public sources, such as from census records. This information may include demographic information about your school or geographic region.",
|
||||
"privacyPolicy.usageTitle": "How Does Scratch Use My Personal Information?",
|
||||
"privacyPolicy.usageBody": "The main purpose is to provide you with the services that we offer through the Scratch Website and to improve your learning experience. An overview of the uses:",
|
||||
"privacyPolicy.usage.internalAndServiceTitle": "Internal and Service-Related Usage",
|
||||
"privacyPolicy.usage.internalAndServiceBody": "We use Personal Information for internal purposes, including to operate, provide and maintain the Scratch Website. For example, to direct users to the requested content, to create and recover accounts and to enable users to create and share projects.",
|
||||
"privacyPolicy.usage.analyticsTitle": "Analytics and Improving the Scratch Website",
|
||||
"privacyPolicy.usage.analyticsBody": "We use Personal Information that we collect on the Scratch Website, such as your location and your activities, to monitor and analyze usage of the Scratch Website and to enhance your learning experience.",
|
||||
"privacyPolicy.usage.communicationsBody": "We may send emails to an email address you provide to us for customer-service or technical-support purposes. We may also send a newsletter to the email address you provide to us when you subscribe to receive additional communications from us.",
|
||||
"privacyPolicy.usage.researchTitle": "Academic and Scientific Research",
|
||||
"privacyPolicy.usage.researchBody": "We de-identify and aggregate Personal Information collected through the Scratch Website for statistical analysis in the context of scientific and academic research. For example, to help us understand how people learn through the Scratch Website and how we can enhance learning tools for young people. The results of such research are shared with educators and researchers through conferences, journals, and other academic or scientific publications. You can find out more on our <a>Research page.</a>",
|
||||
"privacyPolicy.usage.legalTitle": "Legal",
|
||||
"privacyPolicy.usage.legalBody": "We may use your Personal Information to enforce our <terms>Terms of Use</terms>, to defend our legal rights, and to comply with our legal obligations and internal policies. We moderate content posted to the Scratch Website, including shared and unshared projects, comments, and forum posts to ensure that our <guidelines>Community Guidelines</guidelines> are respected. We also use your Personal Information to detect and prevent fraud, spam, and abuse. We and our service providers may do this by reading information held in cookies set in your browser, analyzing your usage of the Scratch Website, and through other means.",
|
||||
"privacyPolicy.legalGrounds.title": "What Are The Legal Grounds For Processing Your Personal Information?",
|
||||
"privacyPolicy.legalGrounds.intro": "If you are located in the European Economic Area, the United Kingdom or Switzerland, we only process your Personal Information based on a valid legal ground. A “legal ground” is a reason that justifies our use of your Personal Information. We may use different legal grounds, such as:",
|
||||
"privacyPolicy.legalGrounds.communications": "You have consented to the use of your Personal Information, for example, to receive electronic marketing communications;",
|
||||
"privacyPolicy.legalGrounds.services": "We need your Personal Information to provide our services, including for account registration, to respond to your inquiries, or for customer support;",
|
||||
"privacyPolicy.legalGrounds.obligation": "We have a legal obligation to use your Personal Information; or",
|
||||
"privacyPolicy.legalGrounds.thirdParty": "We or a third party have a legitimate interest in using your Personal Information. In particular, we have a legitimate interest in using your Personal Information to analyze and share your aggregated or de-identified information for research purposes, to analyze and enhance your learning experience on the Scratch Website and otherwise ensure and improve the safety, security, and performance of the Scratch Website. We only rely on our or a third party’s legitimate interests to process your Personal Information when these interests are not overridden by your rights and interests.",
|
||||
"privacyPolicy.share.title": "How Does Scratch Share My Personal Information?",
|
||||
"privacyPolicy.share.intro": "We disclose Personal Information that we collect through the Scratch Website to third parties, if you consent to us doing so, as well as in the following circumstances:",
|
||||
"privacyPolicy.share.serviceProvidersTitle": "Service Providers",
|
||||
"privacyPolicy.share.serviceProvidersBody": "To third parties who provide services such as website hosting, data analysis, information technology and related infrastructure provisions, customer service, email delivery, and other services.",
|
||||
"privacyPolicy.share.researchTitle": "Academic and Scientific Research",
|
||||
"privacyPolicy.share.researchBody": "To research institutions, such as the Massachusetts Institute of Technology (MIT), to learn about how our users learn through the Scratch Website and develop new learning tools.",
|
||||
"privacyPolicy.share.mergerTitle": "Merger",
|
||||
"privacyPolicy.share.mergerBody": "To a potential or actual acquirer, successor, or assignee as part of any reorganization, merger, sale, joint venture, assignment, transfer, or other disposition of all or any portion of our organization or assets. You will have the opportunity to opt out of any such transfer if the new entity’s planned processing of your Personal Information differs materially from that set forth in this Privacy Policy.",
|
||||
"privacyPolicy.share.legalTitle": "Legal",
|
||||
"privacyPolicy.share.legalBody": "If required to do so by law or in the good faith belief that such action is appropriate: (a) under applicable law, including laws outside your country of residence; (b) to comply with legal process; (c) to respond to requests from public and government authorities, such as school, school districts, and law enforcement, including public and government authorities outside your country of residence; (d) to enforce our terms and conditions; (e) to protect our operations or those of any of our affiliates; (f) to protect our rights, privacy, safety, or property, and/or that of our affiliates, you, or others; and (g) to allow us to pursue available remedies or limit the damages that we may sustain.",
|
||||
"privacyPolicy.thirdPartyServices.title": "Third Party Services",
|
||||
"privacyPolicy.thirdPartyServices.body": "This Privacy Policy applies only to the processing of your Personal Information by Scratch. It does not address, and we are not responsible for, the privacy, information, or other practices of any third parties, including any third party operating any site or service to which the Scratch Website links. The inclusion of a link on the Scratch Website does not imply endorsement of the linked site or service by us or by our affiliates.",
|
||||
"privacyPolicy.childPrivacy.title": "Children and Student Privacy",
|
||||
"privacyPolicy.childPrivacy.body1": "The Scratch Foundation is a 501(c)(3) nonprofit organization. As such, the Children’s Online Privacy Protection Act (COPPA) does not apply to the Scratch Website. Nevertheless, Scratch takes children’s privacy seriously. Scratch collects only minimal information from its users, and only uses and discloses information to provide the services and for limited other purposes, such as research, as described in this Privacy Policy.",
|
||||
"privacyPolicy.childPrivacy.body2": "Scratch does not collect information from a student’s education record, as defined by the Family Educational Rights and Privacy Act (FERPA). Scratch does not disclose personal information of students to any third parties except as described in this Privacy Policy: to service providers and research institutions.",
|
||||
"privacyPolicy.rights.title": "Your Rights and Choices",
|
||||
"privacyPolicy.rights.updatingTitle": "Updating Your Information",
|
||||
"privacyPolicy.rights.updatingBody1": "You can update your password, email address, and country through the <settings>Account Settings</settings> page. You can also reset your password through the <reset>Account Reset</reset> page. You cannot change your username, but you can make a new account and manually copy your projects to the new account.",
|
||||
"privacyPolicy.rights.updatingBody2": "If you want to delete your account, login to Scratch, and then click your username in the top right-hand corner. Select \"Account Settings,\" then click the \"I want to delete my account\" link at the bottom of the page. Deleting your account hides all Personal Information from public view, but does not remove all of your Personal Information from our servers. If you want to have all of your Personal Information removed from our servers, please contact help@scratch.mit.edu for assistance.",
|
||||
"privacyPolicy.rights.marketingTitle": "Marketing Communications",
|
||||
"privacyPolicy.rights.marketingBody": "If you decide at any time that you no longer wish to receive marketing communications from us, please follow the unsubscribe instructions provided in any of the communications. You may also opt out from receiving email from us by sending your request to us by email at help@scratch.mit.edu. Please be aware that, even after you opt out from receiving marketing communications from us, you may continue to receive administrative messages from us regarding your account.",
|
||||
"privacyPolicy.rights.data.title": "Your Data Protection Rights (EEA, UK and Switzerland)",
|
||||
"privacyPolicy.rights.data.intro": "If you are located in the European Economic Area, the United Kingdom or Switzerland, you have certain rights in relation to your Personal Information:",
|
||||
"privacyPolicy.rights.data.access": "<b>Access, Correction and Data Portability:</b> You may ask for an overview of the Personal Information we process about you and to receive a copy of your Personal Information. You also have the right to request to correct incomplete, inaccurate or outdated Personal Information. To the extent required by applicable law, you may request us to provide your Personal Information to another company.",
|
||||
"privacyPolicy.rights.data.objection": "<b>Objection:</b> You may object to (this means “ask us to stop”) any use of your Personal Information that is not (i) processed to comply with a legal obligation, (ii) necessary to do what is provided in a contract between Scratch and you, or (iii) if we have a compelling reason to do so (such as, to ensure safety and security in our online community). If you do object, we will work with you to find a reasonable solution.",
|
||||
"privacyPolicy.rights.data.deletion": "<b>Deletion:</b> You may also request the deletion of your Personal Information, as permitted under applicable law. This applies, for instance, where your Personal Information is outdated or the processing is not necessary or is unlawful; where you withdraw your consent to our processing based on such consent; or where you have objected to our processing. In some situations, we may need to retain your Personal Information due to legal obligations or for litigation purposes.",
|
||||
"privacyPolicy.rights.data.restriction": "<b>Restriction of Processing:</b> You may request that we restrict processing of your Personal Information while we are processing a request relating to (i) the accuracy of your Personal Information, (ii) the lawfulness of the processing of your Personal Information, or (iii) our legitimate interests to process this Personal Information. You may also request that we restrict processing of your Personal Information if you wish to use the Personal Information for litigation purposes.",
|
||||
"privacyPolicy.rights.data.consent": "<b>Withdrawal of Consent:</b> If we rely on consent for the processing of your Personal Information, you have the right to withdraw it at any time and free of charge. When you do so, we will apply your preferences going forward and this will not affect the lawfulness of the processing before your consent withdrawal.",
|
||||
"privacyPolicy.rights.data.exceptions": "However, there are exceptions and limitations to each of these rights. We may, for example, refuse to act on a request if the request is manifestly unfounded or excessive, or if the request is likely to adversely affect the rights and freedoms of others, prejudice the execution or enforcement of the law, interfere with pending or future litigation, or infringe applicable law. To submit a request to exercise your rights, please contact help@scratch.mit.edu for assistance. In addition to the above-mentioned rights, you also have the right to lodge a complaint with a competent supervisory authority including in your country of residence, place of work or where an incident took place subject to applicable law.",
|
||||
"privacyPolicy.retentionTitle": "Data Retention",
|
||||
"privacyPolicy.retentionBody": "We take measures to delete your Personal Information or keep it in a form that does not allow you to be identified when this Information is no longer necessary for the purposes for which we process it, unless we are required by law to keep this Personal Information for a longer period. When determining the retention period, we take into account various criteria, such as the type of services requested by or provided to you, the nature and length of our relationship with you, possible re-enrolment with our services, the impact on the services we provide to you if we delete some Personal Information from or about you, mandatory retention periods provided by law and the statute of limitations.",
|
||||
"privacyPolicy.protectionTitle": "How Does Scratch Protect My Personal Information?",
|
||||
"privacyPolicy.protectionBody": "Scratch has in place administrative, physical, and technical procedures that are intended to protect the Personal Information we collect on the Scratch Website against accidental or unlawful destruction, accidental loss, unauthorized alteration, unauthorized disclosure or access, misuse, and any other unlawful form of processing of the Personal Information. For example, we use SSL/TLS for all data transfers and strictly limit access to the Scratch servers and the data we store on them. However, as effective as these measures are, no security system is impenetrable. We cannot completely guarantee the security of our databases, nor can we guarantee that the Personal Information you supply will not be intercepted while being transmitted to us over the Internet.",
|
||||
"privacyPolicy.transferTitle": "International Cross-Border Data Transfer",
|
||||
"privacyPolicy.transferBody1": "We may transfer your Personal Information to countries other than the country where you are located, including to the U.S. (where Scratch servers are located) or any other country in which we or our service providers maintain facilities. If you are located in the European Economic Area, the United Kingdom or Switzerland, or other regions with laws governing data collection and use that may differ from U.S. law, please note that we may transfer your Personal Information to a country and jurisdiction that does not have the same data protection laws as your jurisdiction.",
|
||||
"privacyPolicy.transferBody2": "We apply administrative, physical, and technical procedures to ensure the confidentiality and security of the Personal Information processed and transferred on our behalf. This includes procedures to ensure that your Personal Information is only processed for the purposes for which it has been collected. To obtain additional information on the transfers, please contact us using the contact information below.",
|
||||
"privacyPolicy.helpTitle": "What Can I Do To Help Protect Privacy On The Scratch Website?",
|
||||
"privacyPolicy.helpBody": "Please do not share personal contact information (such as your name, physical address, email address, or phone number) in projects, comments, profiles, studios, or forum posts. Please let us know if you see this kind of information by using the “Report” link which appears on the page. It is also important that you maintain the security and control of your account credentials, and not share your password with anyone.",
|
||||
"privacyPolicy.changesTitle": "Notifications Of Changes To The Privacy Policy",
|
||||
"privacyPolicy.changesBody": "We review our security measures and Privacy Policy on a periodic basis, and we may modify our policies as appropriate. If we make material changes to the Policy, we will notify you through the Site or by sending you an email or other communication. We encourage you to review our Privacy Policy on a regular basis. The “Last Updated” date at the top of this page indicates when this Privacy Policy was last revised. Your continued use of the Scratch Website following these changes means that you accept the revised Privacy Policy.",
|
||||
"privacyPolicy.contactTitle": "Contact Us",
|
||||
"privacyPolicy.contactBody": "The Scratch Foundation is the entity responsible for the processing of your Personal Information. If you have any questions about this Privacy Policy, or if you would like to exercise your rights to your Personal Information, you may contact us at help@scratch.mit.edu or via mail at:"
|
||||
}
|
|
@ -1,475 +1,311 @@
|
|||
const React = require('react');
|
||||
const FormattedMessage = require('react-intl').FormattedMessage;
|
||||
const injectIntl = require('react-intl').injectIntl;
|
||||
|
||||
const Page = require('../../components/page/www/page.jsx');
|
||||
const render = require('../../lib/render.jsx');
|
||||
|
||||
const InformationPage = require('../../components/informationpage/informationpage.jsx');
|
||||
|
||||
const Privacypolicy = () => (
|
||||
<InformationPage title={'Privacy Policy'}>
|
||||
const bold = chunks => <b>{chunks}</b>;
|
||||
const contactUsLink = chunks => <a href="/contact-us">{chunks}</a>;
|
||||
const downloadLink = chunks => <a href="/download">{chunks}</a>;
|
||||
const cookiesLink = chunks => <a href="/cookies">{chunks}</a>;
|
||||
const researchLink = chunks => <a href="/research">{chunks}</a>;
|
||||
const termsOfUseLink = chunks => <a href="/terms_of_use">{chunks}</a>;
|
||||
const guidelinesLink = chunks => <a href="/community_guidelines">{chunks}</a>;
|
||||
const settingsLink = chunks => <a href="/accounts/settings">{chunks}</a>;
|
||||
const resetPasswordLink = chunks => <a href="/accounts/password_change">{chunks}</a>;
|
||||
const Privacypolicy = injectIntl(props => (
|
||||
<InformationPage
|
||||
title={props.intl.formatMessage({id: 'privacyPolicy.title'})}
|
||||
>
|
||||
<div className="inner info-inner">
|
||||
<section>
|
||||
<p className="lastupdate">
|
||||
<i>
|
||||
The Scratch Privacy Policy was last updated: February 14, 2019
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.lastUpdated"
|
||||
/>
|
||||
</i>
|
||||
</p>
|
||||
<p className="intro">
|
||||
Scratch understands how important privacy is to our
|
||||
community, especially kids and parents. We wrote this
|
||||
Privacy Policy to explain what information we collect
|
||||
through our website (scratch.mit.edu) (the "Site"),
|
||||
how we use, process, and share it, and what we're doing
|
||||
to keep it safe. It also tells you about your rights and
|
||||
choices with respect to your information, and how you can{' '}
|
||||
<a href="/contact-us">contact us</a> if you have any
|
||||
questions or concerns.
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.intro"
|
||||
values={{
|
||||
b: bold,
|
||||
a: contactUsLink
|
||||
}}
|
||||
/>
|
||||
</p>
|
||||
<p className="callout">
|
||||
If you would like to build projects with Scratch without
|
||||
submitting any Personal Information to us, you can download
|
||||
the <a href="/download">Scratch Offline Editor</a>. Projects
|
||||
created in the <a href="/download">Scratch Offline Editor</a>
|
||||
{' '}are not accessible by the Scratch Team, and using the
|
||||
offline editor does not disclose any personally identifying
|
||||
information to Scratch unless you upload these projects to
|
||||
the Scratch online community.
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.offlineEditor"
|
||||
values={{
|
||||
a: downloadLink
|
||||
}}
|
||||
/>
|
||||
</p>
|
||||
</section>
|
||||
<section id="collection">
|
||||
<dl>
|
||||
<span className="nav-spacer" />
|
||||
<h3>What personal information does the Scratch Team collect about me?</h3>
|
||||
<h2><FormattedMessage id="privacyPolicy.collectionTitle" /></h2>
|
||||
<p>
|
||||
For the purpose of this Privacy Policy, “Personal
|
||||
Information” means any information relating to an
|
||||
identified or identifiable individual. We obtain
|
||||
Personal Information relating to you from various
|
||||
sources described below.
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.collection1"
|
||||
values={{
|
||||
b: bold
|
||||
}}
|
||||
/>
|
||||
</p>
|
||||
<p>
|
||||
Where applicable, we indicate whether and why you must
|
||||
provide us with your Personal Information, as well as
|
||||
the consequences of failing to do so. If you do not
|
||||
provide Personal Information when requested, you may not
|
||||
be able to benefit from our Site if that information is
|
||||
necessary to provide you with the service or if we are
|
||||
legally required to collect the information.
|
||||
<FormattedMessage id="privacyPolicy.collection2" />
|
||||
</p>
|
||||
<dt>Account Information</dt>
|
||||
<h3><FormattedMessage id="privacyPolicy.youProvide" /></h3>
|
||||
<dt><FormattedMessage id="privacyPolicy.accountInformationTitle" /></dt>
|
||||
<dd>
|
||||
In order to share projects, create studios, or post
|
||||
comments, you need to make an account. During account
|
||||
creation, we ask you for a username, your country, birth
|
||||
month and year, gender, and your email address (or your
|
||||
parent or guardian's email address if you are under
|
||||
16 years old). We ask that you select a username that does
|
||||
not disclose your real name or other information that
|
||||
could identify you. Other users can see your username
|
||||
and country, but not your age, gender, or email address.
|
||||
<FormattedMessage id="privacyPolicy.accountInformationIntro" />
|
||||
<ul>
|
||||
<li>
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.yourAccount"
|
||||
values={{
|
||||
b: bold
|
||||
}}
|
||||
/>
|
||||
</li>
|
||||
<li>
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.teacherAccount"
|
||||
values={{
|
||||
b: bold
|
||||
}}
|
||||
/>
|
||||
</li>
|
||||
<li>
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.studentAccount"
|
||||
values={{
|
||||
b: bold
|
||||
}}
|
||||
/>
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt>User-generated Content</dt>
|
||||
<dt><FormattedMessage id="privacyPolicy.userGeneratedContentTitle" /></dt>
|
||||
<dd><FormattedMessage id="privacyPolicy.userGeneratedContentBody" /></dd>
|
||||
<dt><FormattedMessage id="privacyPolicy.communicationsTitle" /></dt>
|
||||
<dd><FormattedMessage id="privacyPolicy.communicationsBody" /></dd>
|
||||
<h3><FormattedMessage id="privacyPolicy.automaticallyCollect" /></h3>
|
||||
<dt><FormattedMessage id="privacyPolicy.locationInformationTitle" /></dt>
|
||||
<dd><FormattedMessage id="privacyPolicy.locationInformationBody" /></dd>
|
||||
<dt><FormattedMessage id="privacyPolicy.cookiesTitle" /></dt>
|
||||
<dd>
|
||||
We collect any information that you provide to us when
|
||||
you create Scratch projects (including unshared
|
||||
projects), write comments, or post on our forums.
|
||||
</dd>
|
||||
<dt>Communications</dt>
|
||||
<dd>
|
||||
If you contact us directly, we may receive additional
|
||||
information about you. For example, when you contact our
|
||||
Customer Support Team, we may receive your name, email
|
||||
address, phone number, the contents of a message or
|
||||
attachments that you may send to us, and other
|
||||
information you choose to provide.
|
||||
</dd>
|
||||
<dt>
|
||||
Personal Information We Collect Automatically From Your
|
||||
Use of the Site
|
||||
</dt>
|
||||
<dd>
|
||||
When you use Scratch, we and our third-party service
|
||||
providers collect information about you and your device
|
||||
through automated means, such as cookies and web server
|
||||
logs. By using Scratch, you consent to the placement of
|
||||
cookies and similar technologies in your browser in
|
||||
accordance with this Privacy Policy. The information
|
||||
collected in this manner includes your IP address,
|
||||
network location, what browser you are using, device IDs
|
||||
and characteristics, operating system version, language
|
||||
preferences, referring URLs, and information about the
|
||||
usage of our site.
|
||||
</dd>
|
||||
<dd>
|
||||
We use this information, for example, to ensure that the
|
||||
site functions properly, to determine how many users
|
||||
have visited certain pages, or to prevent fraud. We use
|
||||
IP address information to derive your approximate
|
||||
location. We also work with analytics providers, such
|
||||
as Google Analytics, which use cookies and similar
|
||||
technologies to collect and analyze information about
|
||||
use of the site and report on activities and trends.
|
||||
These services may also collect information about the
|
||||
use of other websites, apps, and online resources. You
|
||||
can learn more about Google’s practices by going to{' '}
|
||||
<a href="https://www.google.com/policies/privacy/partners/">
|
||||
https://www.google.com/policies/privacy/partners/</a>.
|
||||
</dd>
|
||||
<dd>
|
||||
If you do not want information collected through the use
|
||||
of cookies, most browsers allow you to automatically
|
||||
decline cookies or be given the choice of declining or
|
||||
accepting the transfer to your computer of a particular
|
||||
cookie (or cookies) from a particular site. You may also
|
||||
wish to refer to{' '}
|
||||
<a href="http://www.allaboutcookies.org/manage-cookies/index.html">
|
||||
http://www.allaboutcookies.org/manage-cookies/index.html</a>.
|
||||
If, however, you do not accept cookies, you may
|
||||
experience some inconvenience in your use of Scratch.
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.cookiesBody"
|
||||
values={{
|
||||
a: cookiesLink
|
||||
}}
|
||||
/>
|
||||
</dd>
|
||||
<h3><FormattedMessage id="privacyPolicy.otherSources" /></h3>
|
||||
<dt><FormattedMessage id="privacyPolicy.thirdPartyInformationTitle" /></dt>
|
||||
<dd><FormattedMessage id="privacyPolicy.thirdPartyInformationBody" /></dd>
|
||||
<dt><FormattedMessage id="privacyPolicy.publicSourceInformationTitle" /></dt>
|
||||
<dd><FormattedMessage id="privacyPolicy.publicSourceInformationBody" /></dd>
|
||||
</dl>
|
||||
</section>
|
||||
<section id="usage">
|
||||
<dl>
|
||||
<span className="nav-spacer" />
|
||||
<h3>How does the Scratch Team use my personal information?</h3>
|
||||
<p />
|
||||
<dt>Internal and Service-Related Usage</dt>
|
||||
<h2><FormattedMessage id="privacyPolicy.usageTitle" /></h2>
|
||||
<p><FormattedMessage id="privacyPolicy.usageBody" /></p>
|
||||
<dt><FormattedMessage id="privacyPolicy.usage.internalAndServiceTitle" /></dt>
|
||||
<dd><FormattedMessage id="privacyPolicy.usage.internalAndServiceBody" /></dd>
|
||||
<dt><FormattedMessage id="privacyPolicy.usage.analyticsTitle" /></dt>
|
||||
<dd><FormattedMessage id="privacyPolicy.usage.analyticsBody" /></dd>
|
||||
<dt><FormattedMessage id="privacyPolicy.communicationsTitle" /></dt>
|
||||
<dd><FormattedMessage id="privacyPolicy.usage.communicationsBody" /></dd>
|
||||
<dt><FormattedMessage id="privacyPolicy.usage.researchTitle" /></dt>
|
||||
<dd>
|
||||
We use Personal Information for internal and Site-related
|
||||
purposes, including to operate, provide, and maintain the
|
||||
Site.
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.usage.researchBody"
|
||||
values={{
|
||||
a: researchLink
|
||||
}}
|
||||
/>
|
||||
</dd>
|
||||
<dt>Analytics and Improving the Site</dt>
|
||||
<dt><FormattedMessage id="privacyPolicy.usage.legalTitle" /></dt>
|
||||
<dd>
|
||||
We and our service providers use Personal Information
|
||||
that we collect on the Site, such as your location and
|
||||
your activities on the Site, to monitor and analyze
|
||||
usage of the Site and to improve and enhance the Site.
|
||||
</dd>
|
||||
<dt>Communications</dt>
|
||||
<dd>
|
||||
We may send emails to an email address you provide to us
|
||||
for customer-service or technical-support purposes, to
|
||||
send you information about topics or content that we
|
||||
think may interest you, or updates about the latest
|
||||
developments or features on the Site. We may also send a
|
||||
newsletter to the email address you provide to us if you
|
||||
subscribe to receive the newsletter. Parents and
|
||||
guardians who register their under-16 year olds for
|
||||
Scratch may also receive additional updates from the
|
||||
Scratch Foundation, a non-profit that supports Scratch
|
||||
educational initiatives.
|
||||
</dd>
|
||||
<dt>Aggregate Data</dt>
|
||||
<dd>
|
||||
We may de-identify and aggregate information collected
|
||||
through the Site for statistical analysis and other
|
||||
lawful purpose, including in research studies intended
|
||||
to improve our understanding of how people learn with
|
||||
Scratch. The results of this research are shared with
|
||||
educators and researchers through conferences, journals,
|
||||
and other publications. You can find out more on our{' '}
|
||||
<a href="/research">Research page</a>.
|
||||
</dd>
|
||||
<dt>Legal</dt>
|
||||
<dd>
|
||||
We may use your Personal Information to enforce our{' '}
|
||||
<a href="/terms_of_use">Terms of Use</a>, to defend our
|
||||
legal rights, and to comply with our legal obligations
|
||||
and internal policies. We moderate all content posted to
|
||||
Scratch, including unshared projects, comments, and
|
||||
forum posts.
|
||||
</dd>
|
||||
<dd>
|
||||
If you are located in the European Economic Area, we
|
||||
only process your Personal Information based on a valid
|
||||
legal ground, including when:
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.usage.legalBody"
|
||||
values={{
|
||||
terms: termsOfUseLink,
|
||||
guidelines: guidelinesLink
|
||||
}}
|
||||
/>
|
||||
</dd>
|
||||
<h2><FormattedMessage id="privacyPolicy.legalGrounds.title" /></h2>
|
||||
<p><FormattedMessage id="privacyPolicy.legalGrounds.intro" /></p>
|
||||
<ul>
|
||||
<li>
|
||||
You have consented to the use of your Personal
|
||||
Information, for example, to receive electronic
|
||||
marketing communications;
|
||||
<FormattedMessage id="privacyPolicy.legalGrounds.communications" />
|
||||
</li>
|
||||
<li>
|
||||
We need your Personal Information to provide our
|
||||
services, including for account registration, to
|
||||
respond to your inquiries, or for customer support;
|
||||
<FormattedMessage id="privacyPolicy.legalGrounds.services" />
|
||||
</li>
|
||||
<li>
|
||||
We have a legal obligation to use your Personal
|
||||
Information; or
|
||||
<FormattedMessage id="privacyPolicy.legalGrounds.obligation" />
|
||||
</li>
|
||||
<li>
|
||||
We or a third party have a legitimate interest in
|
||||
using your Personal Information. In particular, we
|
||||
have a legitimate interest in using your Personal
|
||||
Information to personalize our services and provide
|
||||
you with tailored content, conduct business
|
||||
analytics, and otherwise improve the safety,
|
||||
security, and performance of our Site. We only rely
|
||||
on our or a third party’s legitimate interests to
|
||||
process your Personal Information when these
|
||||
interests are not overridden by your rights and
|
||||
interests.
|
||||
<FormattedMessage id="privacyPolicy.legalGrounds.thirdParty" />
|
||||
</li>
|
||||
</ul>
|
||||
</dl>
|
||||
</section>
|
||||
<section id="share">
|
||||
<span className="nav-spacer" />
|
||||
<h3>How Does Scratch Share my Personal Information?</h3>
|
||||
<p>
|
||||
We disclose information that we collect through the Site to
|
||||
third parties in the following circumstances:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
To third-party service providers who provide services
|
||||
such as website hosting, data analysis, information
|
||||
technology and related infrastructure provisions,
|
||||
customer service, email delivery, and other services.
|
||||
</li>
|
||||
<li>
|
||||
We may also disclose your Personal Information with your
|
||||
permission. We may seek your permission in various ways.
|
||||
For example, we may present you with an “opt-in” prompt
|
||||
when you register to use the Site or access certain
|
||||
content.
|
||||
</li>
|
||||
<li>
|
||||
To a potential or actual acquirer, successor, or
|
||||
assignee as part of any reorganization, merger, sale,
|
||||
joint venture, assignment, transfer, or other
|
||||
disposition of all or any portion of our organization or
|
||||
assets. You will have the opportunity to opt out of any
|
||||
such transfer if the new entity’s planned processing of
|
||||
your information differs materially from that set forth
|
||||
in this Privacy Policy.
|
||||
</li>
|
||||
<li>
|
||||
If required to do so by law or in the good faith belief
|
||||
that such action is appropriate: (a) under applicable
|
||||
law, including laws outside your country of residence;
|
||||
(b) to comply with legal process; (c) to respond to
|
||||
requests from public and government authorities, such
|
||||
as school, school districts, and law enforcement,
|
||||
including public and government authorities outside your
|
||||
country of residence; (d) to enforce our terms and
|
||||
conditions; (e) to protect our operations or those of
|
||||
any of our affiliates; (f) to protect our rights,
|
||||
privacy, safety, or property, and/or that of our
|
||||
affiliates, you, or others; and (g) to allow us to
|
||||
pursue available remedies or limit the damages that we
|
||||
may sustain.
|
||||
</li>
|
||||
</ul>
|
||||
<dl>
|
||||
<span className="nav-spacer" />
|
||||
<h2><FormattedMessage id="privacyPolicy.share.title" /></h2>
|
||||
<p>
|
||||
<FormattedMessage id="privacyPolicy.share.intro" />
|
||||
</p>
|
||||
<dt><FormattedMessage id="privacyPolicy.share.serviceProvidersTitle" /></dt>
|
||||
<dd><FormattedMessage id="privacyPolicy.share.serviceProvidersBody" /></dd>
|
||||
<dt><FormattedMessage id="privacyPolicy.share.researchTitle" /></dt>
|
||||
<dd><FormattedMessage id="privacyPolicy.share.researchBody" /></dd>
|
||||
<dt><FormattedMessage id="privacyPolicy.share.mergerTitle" /></dt>
|
||||
<dd><FormattedMessage id="privacyPolicy.share.mergerBody" /></dd>
|
||||
<dt><FormattedMessage id="privacyPolicy.share.legalTitle" /></dt>
|
||||
<dd><FormattedMessage id="privacyPolicy.share.legalBody" /></dd>
|
||||
</dl>
|
||||
</section>
|
||||
<section id="thirdparties">
|
||||
<span className="nav-spacer" />
|
||||
<h3>Third Party Services</h3>
|
||||
<p>
|
||||
This Privacy Policy applies only to the processing of your
|
||||
Personal Information by Scratch. It does not address, and we
|
||||
are not responsible for, the privacy, information, or other
|
||||
practices of any third parties, including any third party
|
||||
operating any site or service to which the Site links. The
|
||||
inclusion of a link on the Site does not imply endorsement
|
||||
of the linked site or service by us or by our affiliates.
|
||||
</p>
|
||||
<h2><FormattedMessage id="privacyPolicy.thirdPartyServices.title" /></h2>
|
||||
<p><FormattedMessage id="privacyPolicy.thirdPartyServices.body" /></p>
|
||||
</section>
|
||||
<section id="childprivacy">
|
||||
<span className="nav-spacer" />
|
||||
<h2><FormattedMessage id="privacyPolicy.childPrivacy.title" /></h2>
|
||||
<p><FormattedMessage id="privacyPolicy.childPrivacy.body1" /></p>
|
||||
<p><FormattedMessage id="privacyPolicy.childPrivacy.body2" /></p>
|
||||
</section>
|
||||
<section id="rights">
|
||||
<span className="nav-spacer" />
|
||||
<h3>Your Rights and Choices</h3>
|
||||
<p />
|
||||
<h2><FormattedMessage id="privacyPolicy.rights.title" /></h2>
|
||||
<dl>
|
||||
<dt>Updating Your Information</dt>
|
||||
<dt><FormattedMessage id="privacyPolicy.rights.updatingTitle" /></dt>
|
||||
<dd>
|
||||
You can update your password, email address, and country
|
||||
through the <a href="/accounts/settings">Account
|
||||
Settings</a> page. You can also reset your password
|
||||
through the <a href="/accounts/password_change">Account
|
||||
Reset</a> page. You cannot change your username, but you
|
||||
can make a new account and manually copy your projects
|
||||
to the new account.
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.rights.updatingBody1"
|
||||
values={{
|
||||
settings: settingsLink,
|
||||
reset: resetPasswordLink
|
||||
}}
|
||||
/>
|
||||
</dd>
|
||||
<dd>
|
||||
If you want to delete your account, login to Scratch,
|
||||
and then click your username in the top right-hand
|
||||
corner. Select "Account Settings," then click
|
||||
the "I want to delete my account" link at the
|
||||
bottom of the page. Deleting your account hides all
|
||||
information from public view, but does not remove all of
|
||||
your information from our servers. If you want to have
|
||||
all of your information removed from our servers, please
|
||||
contact help@scratch.mit.edu for assistance.
|
||||
<FormattedMessage id="privacyPolicy.rights.updatingBody2" />
|
||||
</dd>
|
||||
<dt>Marketing Communications</dt>
|
||||
<dt><FormattedMessage id="privacyPolicy.rights.marketingTitle" /></dt>
|
||||
<dd><FormattedMessage id="privacyPolicy.rights.marketingBody" /></dd>
|
||||
<dt><FormattedMessage id="privacyPolicy.rights.data.title" /></dt>
|
||||
<dd>
|
||||
If you decide at any time that you no longer wish to
|
||||
receive marketing communications from us, please follow
|
||||
the unsubscribe instructions provided in any of the
|
||||
communications. You may also opt out from receiving
|
||||
email from us by sending your request to us by email at
|
||||
help@scratch.mit.edu. Please be aware that, even after
|
||||
you opt out from receiving marketing communications from
|
||||
us, you may continue to receive administrative messages
|
||||
from us regarding the Site.
|
||||
</dd>
|
||||
<dt>Your Data Protection Rights (EEA)</dt>
|
||||
<dd>
|
||||
In certain jurisdictions, you have the right to request
|
||||
access and receive information about the Personal
|
||||
Information we maintain about you, to update and correct
|
||||
inaccuracies in your Personal Information, to restrict
|
||||
or object to the processing of your Personal
|
||||
Information, to have the information blocked,
|
||||
anonymized, or deleted, as appropriate, or to exercise
|
||||
your right to data portability to easily transfer your
|
||||
Personal Information to another company. Those rights
|
||||
may be limited in some circumstances by local law
|
||||
requirements. In addition to the above-mentioned rights,
|
||||
you also have the right to lodge a complaint with a
|
||||
competent supervisory authority subject to applicable
|
||||
law.
|
||||
</dd>
|
||||
<dd>
|
||||
Where required by law, we obtain your consent for the
|
||||
processing of certain Personal Information collected by
|
||||
cookies or similar technologies, or used to send you
|
||||
direct marketing communications, or when we carry out
|
||||
other processing activities for which consent may be
|
||||
required. If we rely on consent for the processing of
|
||||
your Personal Information, you have the right to
|
||||
withdraw it at any time and free of charge. When you do
|
||||
so, this will not affect the lawfulness of the
|
||||
processing before your consent withdrawal.
|
||||
</dd>
|
||||
<dd>
|
||||
To update your preferences, ask us to remove your
|
||||
information from our mailing lists, or submit a request
|
||||
to exercise your rights under applicable law, please
|
||||
contact us as specified in the “How to Contact Us”
|
||||
section below.
|
||||
<p><FormattedMessage id="privacyPolicy.rights.data.intro" /></p>
|
||||
<ul>
|
||||
<li>
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.rights.data.access"
|
||||
values={{b: bold}}
|
||||
/>
|
||||
</li>
|
||||
<li>
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.rights.data.objection"
|
||||
values={{b: bold}}
|
||||
/>
|
||||
</li>
|
||||
<li>
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.rights.data.deletion"
|
||||
values={{b: bold}}
|
||||
/>
|
||||
</li>
|
||||
<li>
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.rights.data.restriction"
|
||||
values={{b: bold}}
|
||||
/>
|
||||
</li>
|
||||
<li>
|
||||
<FormattedMessage
|
||||
id="privacyPolicy.rights.data.consent"
|
||||
values={{b: bold}}
|
||||
/>
|
||||
</li>
|
||||
</ul>
|
||||
<p><FormattedMessage id="privacyPolicy.rights.data.exceptions" /></p>
|
||||
</dd>
|
||||
</dl>
|
||||
</section>
|
||||
<section id="retention">
|
||||
<span className="nav-spacer" />
|
||||
<h3>Data Retention</h3>
|
||||
<p>
|
||||
We take measures to delete your Personal Information or keep
|
||||
it in a form that does not allow you to be identified when
|
||||
this information is no longer necessary for the purposes for
|
||||
which we process it, unless we are required by law to keep
|
||||
this information for a longer period. When determining the
|
||||
retention period, we take into account various criteria,
|
||||
such as the type of services requested by or provided to
|
||||
you, the nature and length of our relationship with you,
|
||||
possible re-enrolment with our services, the impact on the
|
||||
services we provide to you if we delete some information
|
||||
from or about you, mandatory retention periods provided by
|
||||
law and the statute of limitations.
|
||||
</p>
|
||||
<h2><FormattedMessage id="privacyPolicy.retentionTitle" /></h2>
|
||||
<p><FormattedMessage id="privacyPolicy.retentionBody" /></p>
|
||||
</section>
|
||||
<section id="protection">
|
||||
<span className="nav-spacer" />
|
||||
<h3>How does the Scratch Team protect my personal information?</h3>
|
||||
<p>
|
||||
The Scratch Team has in place administrative, physical, and
|
||||
technical procedures that are intended to protect the
|
||||
information we collect on the Scratch website against
|
||||
accidental or unlawful destruction, accidental loss,
|
||||
unauthorized alteration, unauthorized disclosure or access,
|
||||
misuse, and any other unlawful form of processing of the
|
||||
Personal Information in our possession. For example, we
|
||||
use SSL/TLS for all data transfer and strictly limit access
|
||||
to the Scratch servers and the data we store on them. However,
|
||||
as effective as these measures are, no security system is
|
||||
impenetrable. We cannot completely guarantee the security of
|
||||
our databases, nor can we guarantee that the information you
|
||||
supply will not be intercepted while being transmitted to us
|
||||
over the Internet.
|
||||
</p>
|
||||
</section>
|
||||
<section id="changes">
|
||||
<span className="nav-spacer" />
|
||||
<h3>Notifications of changes to the Privacy Policy</h3>
|
||||
<p>
|
||||
We review our security measures and Privacy Policy on a
|
||||
periodic basis, and we may modify our policies as
|
||||
appropriate. If we make material changes, we will notify you
|
||||
through the Site or by sending you an email or other
|
||||
communication. We encourage you to review our Privacy Policy
|
||||
on a regular basis. The “Last Updated” date at the top of
|
||||
this page indicates when this Privacy Policy was last
|
||||
revised. Your continued use of the Site following these
|
||||
changes means that you accept the revised Privacy Policy.
|
||||
</p>
|
||||
<h2><FormattedMessage id="privacyPolicy.protectionTitle" /></h2>
|
||||
<p><FormattedMessage id="privacyPolicy.protectionBody" /></p>
|
||||
</section>
|
||||
<section id="transfer">
|
||||
<span className="nav-spacer" />
|
||||
<h3>International Cross-Border Data Transfer</h3>
|
||||
<p>
|
||||
Scratch is based in the United States. Personal Information
|
||||
that we collect may be transferred to, and stored at, any of
|
||||
our affiliates, partners, or service providers which may be
|
||||
inside or outside the European Economic Area, including the
|
||||
United States. By submitting your personal data, you agree
|
||||
to such transfers.
|
||||
</p>
|
||||
<h2><FormattedMessage id="privacyPolicy.transferTitle" /></h2>
|
||||
<p><FormattedMessage id="privacyPolicy.transferBody1" /></p>
|
||||
<p><FormattedMessage id="privacyPolicy.transferBody2" /></p>
|
||||
</section>
|
||||
<section id="help">
|
||||
<span className="nav-spacer" />
|
||||
<h3>What can I do to help protect privacy on Scratch?</h3>
|
||||
<p>
|
||||
Please do not share personal contact information (such as
|
||||
your name, physical address, email address, or phone number)
|
||||
in projects, comments, profiles, studios, or forum posts.
|
||||
Please let us know if you see this kind of information by
|
||||
using the “Report” link which appears on the page. It is
|
||||
also important that you maintain the security and control
|
||||
of your account credentials, and not share your password
|
||||
with anyone.
|
||||
</p>
|
||||
<h2><FormattedMessage id="privacyPolicy.helpTitle" /></h2>
|
||||
<p><FormattedMessage id="privacyPolicy.helpBody" /></p>
|
||||
</section>
|
||||
<section id="changes">
|
||||
<span className="nav-spacer" />
|
||||
<h2><FormattedMessage id="privacyPolicy.changesTitle" /></h2>
|
||||
<p><FormattedMessage id="privacyPolicy.changesBody" /></p>
|
||||
</section>
|
||||
<section id="contact">
|
||||
<span className="nav-spacer" />
|
||||
<h3>Contact Us</h3>
|
||||
<p>
|
||||
The Code-to-Learn Foundation d/b/a The Scratch Foundation is
|
||||
the entity responsible for the processing of your Personal
|
||||
Information. If you have any questions about this Privacy
|
||||
Policy, or if you would like to exercise your rights to your
|
||||
Personal Information, you may contact us at
|
||||
help@scratch.mit.edu or via mail at:
|
||||
</p>
|
||||
<h2><FormattedMessage id="privacyPolicy.contactTitle" /></h2>
|
||||
<p><FormattedMessage id="privacyPolicy.contactBody" /></p>
|
||||
<p>
|
||||
Scratch Foundation<br />
|
||||
ATTN: Privacy Policy<br />
|
||||
7315 Wisconsin Ave.<br />
|
||||
4th Floor West<br />
|
||||
Bethesda, MD 20814
|
||||
201 South Street<br />
|
||||
Unit 102<br />
|
||||
Boston, MA 02111
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<nav>
|
||||
<ol>
|
||||
<li><a href="#collection">Collection</a></li>
|
||||
<li><a href="#usage">Usage</a></li>
|
||||
<li><a href="#share">Sharing</a></li>
|
||||
<li><a href="#thirdparties">Third Party Services</a></li>
|
||||
<li><a href="#rights">Rights and Choices</a></li>
|
||||
<li><a href="#retention">Data Retention</a></li>
|
||||
<li><a href="#protection">Protection</a></li>
|
||||
<li><a href="#changes">Notifications of Changes</a></li>
|
||||
<li><a href="#transfer">Data Transfer</a></li>
|
||||
<li><a href="#help">How to Help</a></li>
|
||||
<li><a href="#contact">Contact Us</a></li>
|
||||
<li><a href="#collection"><FormattedMessage id="privacyPolicy.nav.collection" /></a></li>
|
||||
<li><a href="#usage"><FormattedMessage id="privacyPolicy.nav.usage" /></a></li>
|
||||
<li><a href="#share"><FormattedMessage id="privacyPolicy.nav.share" /></a></li>
|
||||
<li><a href="#thirdparties"><FormattedMessage id="privacyPolicy.nav.thirdParties" /></a></li>
|
||||
<li><a href="#childprivacy"><FormattedMessage id="privacyPolicy.nav.childPrivacy" /></a></li>
|
||||
<li><a href="#rights"><FormattedMessage id="privacyPolicy.nav.rights" /></a></li>
|
||||
<li><a href="#retention"><FormattedMessage id="privacyPolicy.nav.retention" /></a></li>
|
||||
<li><a href="#protection"><FormattedMessage id="privacyPolicy.nav.protection" /></a></li>
|
||||
<li><a href="#transfer"><FormattedMessage id="privacyPolicy.nav.transfer" /></a></li>
|
||||
<li><a href="#help"><FormattedMessage id="privacyPolicy.nav.help" /></a></li>
|
||||
<li><a href="#changes"><FormattedMessage id="privacyPolicy.nav.changes" /></a></li>
|
||||
<li><a href="#contact"><FormattedMessage id="privacyPolicy.nav.contact" /></a></li>
|
||||
</ol>
|
||||
</nav>
|
||||
</InformationPage>
|
||||
);
|
||||
));
|
||||
|
||||
render(<Page><Privacypolicy /></Page>, document.getElementById('app'));
|
||||
|
|
BIN
static/images/about/ted-thumbnail.jpg
Normal file
BIN
static/images/about/ted-thumbnail.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 57 KiB |
Loading…
Reference in a new issue