Merge pull request #7541 from corihudson/ce-319-cookie-page

CE-319: Add cookie policy page
This commit is contained in:
cori hudson 2023-05-11 10:15:08 -04:00 committed by GitHub
commit 915a9a749c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 457 additions and 11 deletions

View file

@ -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" />

View file

@ -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",

View file

@ -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/?$",

View file

@ -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'));

View file

@ -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 todays 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 todays society. When people learn to code in Scratch, they learn important strategies for solving problems, designing projects, and communicating ideas.",
"about.schools": "Scratch in Schools",
"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",

View 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'));

View 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;
}
}

View 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 users current search preference.",
"cookies.functional.scratchLanguage": "Used to save information about the users 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 Websites 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 Googles 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 users 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:"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB