mirror of
https://github.com/scratchfoundation/scratchjr.git
synced 2025-02-17 17:01:12 -05:00
Merge pull request #544 from yueyuzhao/issue/privacy-policy
add privacy policy
This commit is contained in:
commit
c8e5cdd0a5
13 changed files with 305 additions and 17 deletions
8
editions/free/src/assets/lobby/privacyOff.svg
Normal file
8
editions/free/src/assets/lobby/privacyOff.svg
Normal file
|
@ -0,0 +1,8 @@
|
|||
<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M18.0596 24.1584H45.9407V43.3267C45.9407 51.0258 39.6993 57.2672 32.0001 57.2672C24.301 57.2672 18.0596 51.0258 18.0596 43.3267V24.1584Z" fill="#7CD5FB"/>
|
||||
<path d="M24.0913 54.8081C26.3384 56.359 29.0633 57.2672 32.0003 57.2672C39.6996 57.2672 45.9409 51.0258 45.9409 43.3267V24.1584H42.4557V41.5841C42.4557 49.2833 36.2144 55.5247 28.5152 55.5247C26.9689 55.5247 25.4812 55.2729 24.0913 54.8081Z" fill="black" fill-opacity="0.05"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M32 6.73273C27.188 6.73273 23.2871 10.6336 23.2871 15.4456V24.1584L26.7721 24.1584V15.4456C26.7721 12.5584 29.1127 10.2179 31.9998 10.2179C34.887 10.2179 37.2275 12.5584 37.2275 15.4456V24.1584L40.7128 24.1584V15.4456C40.7128 10.6336 36.8119 6.73273 32 6.73273Z" fill="#CAD3D0"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M31.1288 6.77575C31.4154 6.7473 31.7061 6.73273 32.0001 6.73273C36.8121 6.73273 40.713 10.6336 40.713 15.4456V24.1584H38.9703V15.4456C38.9703 10.9277 35.5317 7.21292 31.1288 6.77575ZM31.1288 10.2902C30.8454 10.2426 30.5543 10.2179 30.2575 10.2179C27.3703 10.2179 25.0298 12.5584 25.0298 15.4456V24.1584H26.7723V15.4456C26.7723 12.8553 28.6563 10.7049 31.1288 10.2902Z" fill="#C4C4C4" fill-opacity="0.6"/>
|
||||
<circle cx="32.0003" cy="34.6138" r="3.48514" fill="#575E75"/>
|
||||
<path d="M30.2577 36.3564H33.7428L35.4854 46.8118H28.5151L30.2577 36.3564Z" fill="#575E75"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
8
editions/free/src/assets/lobby/privacyOn.svg
Normal file
8
editions/free/src/assets/lobby/privacyOn.svg
Normal file
|
@ -0,0 +1,8 @@
|
|||
<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M18.0596 24.1584H45.9407V43.3267C45.9407 51.0259 39.6993 57.2673 32.0001 57.2673C24.301 57.2673 18.0596 51.0259 18.0596 43.3267V24.1584Z" fill="#FF8C1A"/>
|
||||
<path d="M24.0913 54.8082C26.3384 56.3591 29.0633 57.2673 32.0003 57.2673C39.6996 57.2673 45.9409 51.0259 45.9409 43.3267V24.1584H42.4557V41.5841C42.4557 49.2833 36.2144 55.5247 28.5152 55.5247C26.9689 55.5247 25.4812 55.2729 24.0913 54.8082Z" fill="black" fill-opacity="0.05"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M32 6.73274C27.188 6.73274 23.2871 10.6336 23.2871 15.4456V24.1584L26.7721 24.1584V15.4456C26.7721 12.5584 29.1127 10.2179 31.9998 10.2179C34.887 10.2179 37.2275 12.5584 37.2275 15.4456V24.1584L40.7128 24.1584V15.4456C40.7128 10.6336 36.8119 6.73274 32 6.73274Z" fill="#CAD3D0"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M31.1288 6.77577C31.4154 6.74731 31.7061 6.73274 32.0001 6.73274C36.8121 6.73274 40.713 10.6336 40.713 15.4456V24.1584H38.9703V15.4456C38.9703 10.9277 35.5317 7.21294 31.1288 6.77577ZM31.1288 10.2902C30.8454 10.2426 30.5543 10.2179 30.2575 10.2179C27.3703 10.2179 25.0298 12.5584 25.0298 15.4456V24.1584H26.7723V15.4456C26.7723 12.8553 28.6563 10.705 31.1288 10.2902Z" fill="#C4C4C4" fill-opacity="0.6"/>
|
||||
<circle cx="32.0003" cy="34.6138" r="3.48514" fill="#575E75"/>
|
||||
<path d="M30.2577 36.3564H33.7428L35.4854 46.8118H28.5151L30.2577 36.3564Z" fill="#575E75"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
|
@ -369,7 +369,7 @@ div.localizationselect.selected:after {
|
|||
|
||||
#footer ul.footer-nav .tab,.tab2 {
|
||||
position: absolute;
|
||||
width: ${css_vw(25)};
|
||||
width: ${css_vw(20)};
|
||||
height: ${css_vh(10.15)};
|
||||
}
|
||||
|
||||
|
@ -377,10 +377,11 @@ div.localizationselect.selected:after {
|
|||
border-right: 1px solid #ADACA6;
|
||||
}
|
||||
|
||||
#abouttab { left: ${css_vw( 0)}; }
|
||||
#interfacetab { left: ${css_vw(25)}; }
|
||||
#painttab { left: ${css_vw(50)}; }
|
||||
#blockstab { left: ${css_vw(75)}; }
|
||||
#abouttab { left: ${css_vw(0)} }
|
||||
#interfacetab { left: ${css_vw(20)} }
|
||||
#painttab { left: ${css_vw(40)} }
|
||||
#blockstab { left: ${css_vw(60)} }
|
||||
#privacytab { left: ${css_vw(80)} }
|
||||
|
||||
#footer ul.footer-nav .tab.off, ul.footer-nav .tab2.off {background-image: none; top:0px;}
|
||||
|
||||
|
@ -399,13 +400,12 @@ div.localizationselect.selected:after {
|
|||
|
||||
#footer ul.footer-nav .tab>span , ul.footer-nav .tab2>span{
|
||||
position: relative;
|
||||
top: ${css_vh(-6)};
|
||||
left: ${css_vw(5)};
|
||||
top: ${css_vh(-7)};
|
||||
left: ${css_vw(4)};
|
||||
padding: 0px;
|
||||
height: ${css_vh(2.86)};
|
||||
line-height: ${css_vh(2.86)};
|
||||
cursor: pointer;
|
||||
width: ${css_vw(17.58)};
|
||||
width: ${css_vw(11.58)};
|
||||
overflow: visible;
|
||||
font-size: ${css_vh(2.34)};
|
||||
margin: auto;
|
||||
|
@ -417,13 +417,15 @@ div.localizationselect.selected:after {
|
|||
|
||||
#footer ul.footer-nav .tab .about-icon {background: url('../assets/lobby/aboutOff.svg'); background-size: 100.5%;}
|
||||
#footer ul.footer-nav .tab .interface-icon { background: url('../assets/lobby/interfaceOff.svg'); background-size: 100.5%;}
|
||||
#footer ul.footer-nav .tab2 .blocks-icon {background: url('../assets/lobby/blocksOff.svg'); background-size: 100.5%;}
|
||||
#footer ul.footer-nav .tab .blocks-icon {background: url('../assets/lobby/blocksOff.svg'); background-size: 100.5%;}
|
||||
#footer ul.footer-nav .tab .paint-icon {background: url('../assets/lobby/paintOff.svg'); background-size: 100.5%;}
|
||||
#footer ul.footer-nav .tab2 .privacy-icon {background: url('../assets/lobby/privacyOff.svg'); background-size: 100.5%;}
|
||||
|
||||
#footer ul.footer-nav .tab.on .about-icon {background: url('../assets/lobby/aboutOn.svg'); background-size: 100.5%;}
|
||||
#footer ul.footer-nav .tab.on .interface-icon { background: url('../assets/lobby/interfaceOn.svg'); background-size: 100.5%;}
|
||||
#footer ul.footer-nav .tab2.on .blocks-icon {background: url('../assets/lobby/blocksOn.svg'); background-size: 100.5%;}
|
||||
#footer ul.footer-nav .tab.on .blocks-icon {background: url('../assets/lobby/blocksOn.svg'); background-size: 100.5%;}
|
||||
#footer ul.footer-nav .tab.on .paint-icon {background: url('../assets/lobby/paintOn.svg'); background-size: 100.5%;}
|
||||
#footer ul.footer-nav .tab2.on .privacy-icon {background: url('../assets/lobby/privacyOn.svg'); background-size: 100.5%;}
|
||||
|
||||
|
||||
*.contentwrap {
|
||||
|
|
|
@ -68,10 +68,14 @@
|
|||
<div class="paint-icon"></div>
|
||||
<span id="painttab-text"></span>
|
||||
</li>
|
||||
<li class="tab2" id="blockstab">
|
||||
<li class="tab" id="blockstab">
|
||||
<div class="blocks-icon"></div>
|
||||
<span id="blockstab-text"></span>
|
||||
</li>
|
||||
<li class="tab2" id="privacytab">
|
||||
<div class="privacy-icon"></div>
|
||||
<span id="privacytab-text"></span>
|
||||
</li>
|
||||
<div></div>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
107
editions/free/src/inapp/privacy.html
Normal file
107
editions/free/src/inapp/privacy.html
Normal file
|
@ -0,0 +1,107 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<script>
|
||||
window.scratchJrPage = 'inappPrivacyPolicy';
|
||||
</script>
|
||||
<script type="text/javascript" src="../app.bundle.js"></script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="privacy-section-wrapper">
|
||||
<h1 data-i18n="PRIVACY_TITLE"></h1>
|
||||
<div class="description" data-i18n="PRIVACY_LAST_UPDATED"></div>
|
||||
</div>
|
||||
|
||||
<div class="privacy-section-wrapper">
|
||||
<div class="highlight" data-i18n="PRIVACY_HIGHLIGHT"></div>
|
||||
<div class="description" data-i18n="PRIVACY_DESCRIPTION"></div>
|
||||
</div>
|
||||
|
||||
<div class="privacy-section-wrapper">
|
||||
<h2 class="title" data-i18n="PRIVACY_INFORMATION_COLLECTED"></h2>
|
||||
<div class="highlight" data-i18n="PRIVACY_INFORMATION_COLLECTED_HIGHLIGHT"></div>
|
||||
<div class="description" data-i18n="PRIVACY_INFORMATION_COLLECTED_DESCRIPTION"></div>
|
||||
|
||||
<h3 class="title" data-i18n="PRIVACY_INFO_FROM_YOU"></h3>
|
||||
<div class="description" data-i18n="PRIVACY_INFO_FROM_PROJECT"></div>
|
||||
<div class="description" data-i18n="PRIVACY_INFO_FROM_PREFS"></div>
|
||||
|
||||
<h3 class="title" data-i18n="PRIVACY_INFO_FROM_AUTO"></h3>
|
||||
<div class="description" data-i18n="PRIVACY_INFO_FROM_USAGE"></div>
|
||||
</div>
|
||||
|
||||
<div class="privacy-section-wrapper">
|
||||
<h2 class="title" data-i18n="PRIVACY_USAGE"></h2>
|
||||
<div class="highlight" data-i18n="PRIVACY_USAGE_HIGHLIGHT"></div>
|
||||
<div class="description" data-i18n="PRIVACY_USAGE_DESCRIPTION"></div>
|
||||
<div class="description" data-i18n="PRIVACY_USAGE_FOR_SERVICE"></div>
|
||||
<div class="description" data-i18n="PRIVACY_USAGE_FOR_ANALYTICS"></div>
|
||||
<div class="description" data-i18n="PRIVACY_USAGE_FOR_DATA"></div>
|
||||
<div class="description" data-i18n="PRIVACY_USAGE_FOR_LEGAL"></div>
|
||||
</div>
|
||||
|
||||
<div class="privacy-section-wrapper">
|
||||
<h2 class="title" data-i18n="PRIVACY_USAGE_IN_EEA"></h2>
|
||||
<div class="highlight" data-i18n="PRIVACY_USAGE_IN_EEA_HIGHLIGHT"></div>
|
||||
<div class="description" data-i18n="PRIVACY_USAGE_IN_EEA_DESCRIPTION"></div>
|
||||
<div class="description" data-i18n="PRIVACY_USAGE_IN_EEA_CONTRACTUAL_NECESSITY"></div>
|
||||
<div class="description" data-i18n="PRIVACY_USAGE_IN_EEA_LEGITIMATE_INTEREST"></div>
|
||||
<div class="description" data-i18n="PRIVACY_USAGE_IN_EEA_LEGAL_OBLIGATION"></div>
|
||||
<div class="description" data-i18n="PRIVACY_USAGE_IN_EEA_CONSENT"></div>
|
||||
</div>
|
||||
|
||||
<div class="privacy-section-wrapper">
|
||||
<h2 class="title" data-i18n="PRIVACY_SHARING"></h2>
|
||||
<div class="highlight" data-i18n="PRIVACY_SHARING_HIGHLIGHT"></div>
|
||||
<div class="description" data-i18n="PRIVACY_SHARING_DESCRIPTION"></div>
|
||||
<div class="description" data-i18n="PRIVACY_SHARING_WITH_SERVICE_PROVIDER"></div>
|
||||
<div class="description" data-i18n="PRIVACY_SHARING_WITH_EDUCATION"></div>
|
||||
<div class="description" data-i18n="PRIVACY_SHARING_WITH_CHANGE_OF_OWNERSHIP"></div>
|
||||
<div class="description" data-i18n="PRIVACY_SHARING_WITH_SCRATCH_GROUP"></div>
|
||||
<div class="description" data-i18n="PRIVACY_SHARING_WITH_LEGAL"></div>
|
||||
<div class="description" data-i18n="PRIVACY_SHARING_WITH_CONSENT"></div>
|
||||
</div>
|
||||
|
||||
<div class="privacy-section-wrapper">
|
||||
<h2 class="title" data-i18n="PRIVACY_YOUR_RIGHTS"></h2>
|
||||
<div class="highlight" data-i18n="PRIVACY_YOUR_RIGHTS_HIGHLIGHT"></div>
|
||||
<div class="description" data-i18n="PRIVACY_YOUR_RIGHTS_DESCRIPTION"></div>
|
||||
<div class="description" data-i18n="PRIVACY_YOUR_RIGHTS_DELETING"></div>
|
||||
<h3 class="title" data-i18n="PRIVACY_YOUR_RIGHTS_IN_EU"></h3>
|
||||
<div class="highlight" data-i18n="PRIVACY_YOUR_RIGHTS_IN_EU_HIGHLIGHT"></div>
|
||||
<div class="description" data-i18n="PRIVACY_YOUR_RIGHTS_IN_EU_DESCRIPTION"></div>
|
||||
</div>
|
||||
|
||||
<div class="privacy-section-wrapper">
|
||||
<h2 class="title" data-i18n="PRIVACY_DATA_RETENSION"></h2>
|
||||
<div class="highlight" data-i18n="PRIVACY_DATA_RETENSION_HIGHLIGHT"></div>
|
||||
<div class="description" data-i18n="PRIVACY_DATA_RETENSION_DESCRIPTION"></div>
|
||||
</div>
|
||||
|
||||
<div class="privacy-section-wrapper">
|
||||
<h2 class="title" data-i18n="PRIVACY_INFO_PROTECTION"></h2>
|
||||
<div class="highlight" data-i18n="PRIVACY_INFO_PROTECTION_HIGHLIGHT"></div>
|
||||
<div class="description" data-i18n="PRIVACY_INFO_PROTECTION_DESCRIPTION"></div>
|
||||
</div>
|
||||
|
||||
<div class="privacy-section-wrapper">
|
||||
<h2 class="title" data-i18n="PRIVACY_NOTIFICATIONS_OF_CHANGE"></h2>
|
||||
<div class="highlight" data-i18n="PRIVACY_NOTIFICATIONS_OF_CHANGE_HIGHLIGHT"></div>
|
||||
<div class="description" data-i18n="PRIVACY_NOTIFICATIONS_OF_CHANGE_DESCRIPTION"></div>
|
||||
</div>
|
||||
|
||||
<div class="privacy-section-wrapper">
|
||||
<h2 class="title" data-i18n="PRIVACY_INTERNATIONAL_DATA_TRANSFER"></h2>
|
||||
<div class="highlight" data-i18n="PRIVACY_INTERNATIONAL_DATA_TRANSFER_HIGHLIGHT"></div>
|
||||
<div class="description" data-i18n="PRIVACY_INTERNATIONAL_DATA_TRANSFER_DESCRIPTION"></div>
|
||||
</div>
|
||||
|
||||
<div class="privacy-section-wrapper">
|
||||
<h2 class="title" data-i18n="PRIVACY_CONTACT"></h2>
|
||||
<div class="highlight" data-i18n="PRIVACY_CONTACT_HIGHLIGHT"></div>
|
||||
<div class="description" data-i18n="PRIVACY_CONTACT_DESCRIPTION"></div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
70
editions/free/src/inapp/style/privacy.css
Normal file
70
editions/free/src/inapp/style/privacy.css
Normal file
|
@ -0,0 +1,70 @@
|
|||
@import url('../../css/font.css');
|
||||
|
||||
/*
|
||||
0.65vh => 12px
|
||||
0.867vh => 16px
|
||||
0.975vh => 18px
|
||||
1.3vh => 24px
|
||||
1.95vh => 36px
|
||||
2.6vh => 48px
|
||||
*/
|
||||
html {
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
|
||||
body {
|
||||
color: #595959;
|
||||
font-family: Roboto;
|
||||
padding: ${css_vh(2)} 6.05vw ${css_vh(2)};
|
||||
margin: ${css_vh(2.6)} auto;
|
||||
width: ${css_vw(87.89)};
|
||||
height: auto;
|
||||
margin-bottom: ${css_vh(10.4)};
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: ${css_vh(5.3)};
|
||||
margin-bottom: ${css_vh(0.65)};
|
||||
color: #f5a322;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: ${css_vh(3.78)};
|
||||
margin-bottom: ${css_vh(1.3)};
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: ${css_vh(2.96)};
|
||||
margin-top: ${css_vh(1.95)}; // 24px
|
||||
margin-bottom: ${css_vh(0.65)}; // 12px
|
||||
}
|
||||
|
||||
.privacy-section-wrapper {
|
||||
display: block;
|
||||
margin-bottom: ${css_vh(2.6)};
|
||||
}
|
||||
|
||||
.highlight {
|
||||
display: block;
|
||||
margin-bottom: ${css_vh(0.875)};
|
||||
padding: ${css_vh(2.85)};
|
||||
font-size: ${css_vh(3.8)};
|
||||
line-height: ${css_vh(5.7)};
|
||||
background-color: rgba(76, 151, 255, 0.15);
|
||||
}
|
||||
|
||||
ul {
|
||||
margin: ${css_vh(2.85)} 0;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-weight: bold;
|
||||
margin-bottom: ${css_vh(1.3)};
|
||||
color: #2898cd;
|
||||
}
|
||||
|
||||
.description {
|
||||
font-size: ${css_vh(2.85)};
|
||||
line-height: ${css_vh(4.275)};
|
||||
margin-bottom: ${css_vh(1.3)};
|
||||
}
|
|
@ -6,6 +6,7 @@
|
|||
"INTERFACE_GUIDE": "Interface Guide",
|
||||
"PAINT_EDITOR_GUIDE": "Paint Editor Guide",
|
||||
"BLOCKS_GUIDE": "Blocks Guide",
|
||||
"PRIVACY_POLICY": "Privacy Policy",
|
||||
"ABOUT_WHAT_IS": "What is ScratchJr?",
|
||||
"ABOUT_DESCRIPTION": "ScratchJr is an introductory programming language that enables young children (ages 5-7) to create their own interactive stories and games. Children snap together graphical programming blocks to make characters move, jump, dance, and sing. Children can modify characters in the paint editor, add their own voices and sounds, even insert photos of themselves -- then use the programming blocks to make their characters come to life.",
|
||||
"ABOUT_INSPIRED_BY": "ScratchJr was inspired by the popular Scratch programming language (http://scratch.mit.edu), used by millions of young people (ages 8 and up) around the world. In creating ScratchJr, we redesigned the interface and programming language to make them developmentally appropriate for younger children, carefully designing features to match young children's cognitive, personal, social, and emotional development.<br/><br/>For more information about ScratchJr, see http://scratchjr.org",
|
||||
|
@ -136,6 +137,63 @@
|
|||
"PAINT_GUIDE_CAMERA_DESCRIPTION": "After selecting the Camera tool, you can tap any section of a character or shape, and then tap the camera button to fill the section with a new photo taken with the camera.",
|
||||
"PAINT_GUIDE_COLOR_DESCRIPTION": "Select a new color to use for drawing and filling in shapes.",
|
||||
"PAINT_GUIDE_LINE_WIDTH_DESCRIPTION": "Change the width of the lines in the shapes you are drawing.",
|
||||
"PRIVACY_TITLE": "ScratchJr Privacy Policy",
|
||||
"PRIVACY_LAST_UPDATED": "The ScratchJr Privacy Policy was last updated: November 3rd, 2021",
|
||||
"PRIVACY_HIGHLIGHT": "Scratch cares about your privacy. This document, called a \"privacy policy\", explains what information we collect from you, how we collect it, why we collect it, and how we keep it safe. It also tells you about the choices and options you have about your information.",
|
||||
"PRIVACY_DESCRIPTION": "The Scratch Foundation, and associated entities (collectively, \"<b>Scratch</b>\", \"<b>we</b>\", \"<b>our</b>\" or \"<b>us</b>\") understand how important privacy is to our community, especially kids and parents (\"<b>you</b>\" or \"<b>user</b>\"). We wrote this privacy policy (\"<b>Privacy Policy</b>\") to explain what information we collect through the ScratchJr mobile application (the \"<b>App</b>\"), how we use, process, and share it, and what we are doing to keep it safe. It also tells you about your rights and choices with respect to your Personal Information, and how you can contact us if you have any questions or concerns.<br>Please read this Privacy Policy carefully so that you understand your rights in relation to your Personal Information, and how we will collect, use and process your Personal Information. If you do not agree with this Privacy Policy or any part thereof, you should not access or use any part of the App. If you change your mind in the future, you must stop using the App and you may exercise your rights in relation to your Personal Information as set out in this Privacy Policy.",
|
||||
"PRIVACY_INFORMATION_COLLECTED": "What personal information does the ScratchJr Team collect about me?",
|
||||
"PRIVACY_INFORMATION_COLLECTED_HIGHLIGHT": "Scratch collects and stores information you provide to us, for example whether you want to use the App at home or for school and in what language. The App automatically collects some information about the tablet or phone on which you use the App and about how you play on the App. ",
|
||||
"PRIVACY_INFORMATION_COLLECTED_DESCRIPTION": "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.<br>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 App if that information is necessary to provide you with the App or if we are legally required to collect the information.",
|
||||
"PRIVACY_INFO_FROM_YOU": "Information provided by you",
|
||||
"PRIVACY_INFO_FROM_PROJECT": "<b>Projects.</b> The App collects the projects that you may create on the App, including pictures or sound recordings features in projects. However, this information is only stored locally on your device and is not transmitted to or accessible by Scratch. When you first download the App, we ask permission to access the camera (to enable you to take pictures to use as characters in your projects) and the microphone (to record sounds to use in your projects) of your device. You can disable these features at any time in the App settings provided by your device. ",
|
||||
"PRIVACY_INFO_FROM_PREFS": "<b>Use preferences.</b> We ask you whether you will use the App for school, at home, or for another reason and what language you would like us to display the App in. ",
|
||||
"PRIVACY_INFO_FROM_AUTO": "Information collected via automated means",
|
||||
"PRIVACY_INFO_FROM_USAGE": "<b>Device and usage information.</b> When you use our App, we and third parties may automatically collect your IP address at country level and information about your device including model, version and operating system.",
|
||||
"PRIVACY_USAGE": "How does the ScratchJr Team use my Personal Information?",
|
||||
"PRIVACY_USAGE_HIGHLIGHT": "We collect your information to make all the features of the App available to you and support your learning, to help us, educators and universities learn about how children play and learn through the App, to help us improve the App and to defend our rights. ",
|
||||
"PRIVACY_USAGE_DESCRIPTION": "We may use the Personal Information for one or more of the following purposes:",
|
||||
"PRIVACY_USAGE_FOR_SERVICE": "<b>Providing you with the services on the App.</b> We use Personal Information for internal and App-related purposes, including to operate, provide, and maintain the App. In particular we will use your Personal Information to perform our contractual obligation towards you to allow you to use the App, to contact you in case of any issue with the App and make the App available to you in the language that you select in the App settings. The Personal Information we process when doing so includes any content you create on the App and your language preference.",
|
||||
"PRIVACY_USAGE_FOR_ANALYTICS": "<b>Analytics and improving the App.</b> We and our service providers use Personal Information that we collect on the App, such as your location, which characters you use the most, how much time you spend in the App and other activities on the App to monitor and analyze usage of the App and to improve and enhance the App. It is in our legitimate interest to improve our App for our users, which includes conducting troubleshooting, testing and research and to keep the App secure. When doing so we may use Personal Information that we automatically collect about you, such as information on use.",
|
||||
"PRIVACY_USAGE_FOR_DATA": "<b>Aggregating Data.</b> We may de-identify and aggregate information collected through the App for statistical analysis and other lawful purposes, including in research studies intended to improve our understanding of how people learn with ScratchJr. Aggregated data may be derived from your Personal Information but is not Personal Information as this data will not directly or indirectly reveal your identity.",
|
||||
"PRIVACY_USAGE_FOR_LEGAL": "<b>Legal.</b> We may use your Personal Information to enforce our End User License Agreement (EULA), to defend our legal rights, and to comply with our legal obligations and internal policies. ",
|
||||
"PRIVACY_USAGE_IN_EEA": "Our use of European Personal Information",
|
||||
"PRIVACY_USAGE_IN_EEA_HIGHLIGHT": "If you are in the EEA, the UK or Switzerland, we only use your information when we have a ground that allows us to do so.",
|
||||
"PRIVACY_USAGE_IN_EEA_DESCRIPTION": "If you are located in the European Economic Area (“<b>EEA</b>”), the UK or Switzerland we only process your Personal Information when we have a valid legal basis:",
|
||||
"PRIVACY_USAGE_IN_EEA_CONTRACTUAL_NECESSITY": "<b>Contractual necessity.</b> We may use your Personal Information to perform our contractual obligations towards you. For example, we need your Personal Information to provide our services on the App.",
|
||||
"PRIVACY_USAGE_IN_EEA_LEGITIMATE_INTEREST": "<b>Legitimate interest.</b> We may use your Personal Information when we or a third party have a legitimate interest in doing so. In particular, we have a legitimate interest in using your Personal Information to provide the App in your preferred language, improve the safety, security, and performance of our App, and understand how the App is used, including through research studies that help us understand how people learn with ScratchJr. 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. ",
|
||||
"PRIVACY_USAGE_IN_EEA_LEGAL_OBLIGATION": "<b>Legal obligation.</b> We may use your Personal Information when we are legally required to. For example, to comply with tax and accounting obligations, or to comply with a court order.",
|
||||
"PRIVACY_USAGE_IN_EEA_CONSENT": "<b>Consent.</b> We may use your Personal Information when you have consented to do so.",
|
||||
"PRIVACY_SHARING": "How Does the ScratchJr Team Share my Personal Information?",
|
||||
"PRIVACY_SHARING_HIGHLIGHT": "We only share your information with other organizations when we need to. We share information with vendors that help us provide the App. We also share the results of the research we do with schools and researchers, but we first take steps to put that information in a format that does not allow them to identify you. We may also share your information with courts and governments for legal reasons. ",
|
||||
"PRIVACY_SHARING_DESCRIPTION": "We disclose your Personal Information to third parties in the following circumstances:",
|
||||
"PRIVACY_SHARING_WITH_SERVICE_PROVIDER": "<b>Service providers.</b> We rely on service providers for the provision of the services on our App, such as: Google Firebase, an analytics provider, to help us to understand our user base and how our App is used. ",
|
||||
"PRIVACY_SHARING_WITH_EDUCATION": "<b>Education and research institutions.</b> We may share the results of our research on children’s education through ScratchJr, in a de-identified and aggregate form, with educators and research institutions, such as Tufts University and MIT, through conferences, journals, and other publications.",
|
||||
"PRIVACY_SHARING_WITH_CHANGE_OF_OWNERSHIP": "<b>Change of corporate ownership.</b> We may disclose your Personal Information 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. ",
|
||||
"PRIVACY_SHARING_WITH_SCRATCH_GROUP": "<b>Scratch group.</b> We share Personal Information about you with our affiliates and subsidiaries.",
|
||||
"PRIVACY_SHARING_WITH_LEGAL": "<b>Legal.</b> We may disclose your Personal Information 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 processes; (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.",
|
||||
"PRIVACY_SHARING_WITH_CONSENT": "<b>Consent.</b> We may also disclose your Personal Information with your permission. We may seek your permission in various ways.",
|
||||
"PRIVACY_YOUR_RIGHTS": "Your Rights and Choices",
|
||||
"PRIVACY_YOUR_RIGHTS_HIGHLIGHT": "If you’re interested in how we get and use your information, you can contact us in any of the ways explained below under “Contact Us” or speak to your parents, who will be able to help you and answer any questions that you have. If you have any questions about how we process your Personal Information, please contact us. ",
|
||||
"PRIVACY_YOUR_RIGHTS_DESCRIPTION": "We strive to provide you with choices regarding the Personal Information you provide to us. We have created mechanisms to provide you with the following control over your Personal Information:",
|
||||
"PRIVACY_YOUR_RIGHTS_DELETING": "<b>Deleting your information.</b> You can delete your projects by deleting the App from your device.",
|
||||
"PRIVACY_YOUR_RIGHTS_IN_EU": "Your European Data Protection Rights",
|
||||
"PRIVACY_YOUR_RIGHTS_IN_EU_HIGHLIGHT": "If you are in the EEA, the UK or Switzerland, you and your parents have the right to: <ul><li>Be told how we use your information. </li><li>Ask to see the information we have about you. </li><li>Ask us to change information you think is wrong.</li><li>Ask us to remove information when it’s not needed anymore.</li><li>Ask us to only use your information in certain ways.</li><li>Tell us you don’t want your information to be processed.</li><li>If the information we are collecting is information that you can choose not to give, you can tell us to stop collecting it at any time.</li></ul>If you’re interested in how we get and use your information, you can contact us in any of the ways explained below under “Contact Us” or speak to your parents, who will be able to help you and answer any questions that you have. If you are in the EEA, the UK or Switzerland, you may also submit a complaint with the relevant authority.",
|
||||
"PRIVACY_YOUR_RIGHTS_IN_EU_DESCRIPTION": "If you are in the EEA, the UK or Switzerland, 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 the Information Commissioner’s Office in the UK or the data protection supervisory authority in the EU country in which you live or work, or where you believe we have infringed data protection laws.<br><br>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.<br><br>Please note that we may have valid legal reasons to refuse your request and will inform you if that is the case. For more information on your rights, or to submit a request to exercise your rights under applicable law, please contact us as indicated in the ‘Contact Us’ section below.",
|
||||
"PRIVACY_DATA_RETENSION": "Data Retention",
|
||||
"PRIVACY_DATA_RETENSION_HIGHLIGHT": "We don't keep your information forever. We only keep it for as long as we need it to help us do the activities explained in this policy.",
|
||||
"PRIVACY_DATA_RETENSION_DESCRIPTION": "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-enrollment 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.",
|
||||
"PRIVACY_INFO_PROTECTION": "How does the ScratchJr Team protect my Personal Information?",
|
||||
"PRIVACY_INFO_PROTECTION_HIGHLIGHT": "We take steps to keep your information safe and secure.",
|
||||
"PRIVACY_INFO_PROTECTION_DESCRIPTION": "We have in place administrative, physical, and technical procedures that are intended to protect the information we collect on the App 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. 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.",
|
||||
"PRIVACY_NOTIFICATIONS_OF_CHANGE": "Notifications of Changes to the Privacy Policy",
|
||||
"PRIVACY_NOTIFICATIONS_OF_CHANGE_HIGHLIGHT": "If we make any changes to how we use your information, we will update this Privacy Policy through the App and may let you know that we have made changes. ",
|
||||
"PRIVACY_NOTIFICATIONS_OF_CHANGE_DESCRIPTION": "We review Privacy Policy on a periodic basis, and we may modify our policies as appropriate. If we make material changes, we will notify you thereof. 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 App following these changes means that you accept the revised Privacy Policy.",
|
||||
"PRIVACY_INTERNATIONAL_DATA_TRANSFER": "International Cross-Border Data Transfer",
|
||||
"PRIVACY_INTERNATIONAL_DATA_TRANSFER_HIGHLIGHT": "Your information will be stored and used by Scratch in the United States, where the laws and protections of your information may be different than in your country. We take steps to keep your information safe and secure.",
|
||||
"PRIVACY_INTERNATIONAL_DATA_TRANSFER_DESCRIPTION": "We may transfer the Personal Information that we collect about you to recipients in countries other than the country in which the Personal Information originally was collected. Those countries may not have the same data protection laws as the country in which you initially provided the Personal Information.<br>Scratch is based in the United States. If you provide us with your Personal Information when using the Services from the EEA, Switzerland or the UK, please note that you are transferring your Personal Information outside of those regions to the United States for storage and processing.",
|
||||
"PRIVACY_CONTACT": "Contact Us",
|
||||
"PRIVACY_CONTACT_HIGHLIGHT": "Please write to us or email us using the contact details set out below. ",
|
||||
"PRIVACY_CONTACT_DESCRIPTION": "The Code-to-Learn Foundation d/b/a The Scratch Foundation is the entity responsible for the processing of your Personal Information and for the purpose of the EU and UK General Data Protection Regulation (GDPR), is the data controller in respect of 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:<br><br><b>Scratch Foundation<b><br><b>ATTN: Privacy Policy</b><br><b>7315 Wisconsin Ave.</b><br><b>4th Floor West</b><br><b>Bethesda, MD 20814</b>",
|
||||
"SAMPLE_Under the sea": "Under the sea",
|
||||
"SAMPLE_Farm": "Farm",
|
||||
"SAMPLE_Seasons": "Seasons",
|
||||
|
|
|
@ -953,7 +953,7 @@ export default class UI {
|
|||
var tf = newHTML('div', 'pagetext off', p);
|
||||
tf.setAttribute('id', 'textbox');
|
||||
// If the textbox background is clicked or touched, the input loses focus,
|
||||
// which causes the text input to close unexpectedly
|
||||
// which causes the text input to close unexpectedly
|
||||
var eatEvent = function (e) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
|
|
|
@ -9,7 +9,13 @@ import {indexMain} from './index';
|
|||
import {homeMain} from './home';
|
||||
import {editorMain} from './editor';
|
||||
import {gettingStartedMain} from './gettingstarted';
|
||||
import {inappInterfaceGuide, inappAbout, inappBlocksGuide, inappPaintEditorGuide} from './inapp';
|
||||
import {
|
||||
inappInterfaceGuide,
|
||||
inappAbout,
|
||||
inappBlocksGuide,
|
||||
inappPaintEditorGuide,
|
||||
inappPrivacyPolicy
|
||||
} from './inapp';
|
||||
|
||||
function loadSettings (settingsRoot, whenDone) {
|
||||
IO.requestFromServer(settingsRoot + 'settings.json', (result) => {
|
||||
|
@ -100,6 +106,13 @@ window.onload = () => {
|
|||
entryFunction = () => inappBlocksGuide();
|
||||
root = '../';
|
||||
break;
|
||||
case 'inappPrivacyPolicy':
|
||||
// Blocks guide in-app help frame
|
||||
preprocessAndLoadCss('style', 'style/style.css');
|
||||
preprocessAndLoadCss('style', 'style/privacy.css');
|
||||
entryFunction = () => inappPrivacyPolicy();
|
||||
root = '../';
|
||||
break;
|
||||
}
|
||||
|
||||
// Start up sequence
|
||||
|
|
|
@ -23,4 +23,5 @@ function homeStrings () {
|
|||
gn('interfacetab-text').textContent = Localization.localize('INTERFACE_GUIDE');
|
||||
gn('painttab-text').textContent = Localization.localize('PAINT_EDITOR_GUIDE');
|
||||
gn('blockstab-text').textContent = Localization.localize('BLOCKS_GUIDE');
|
||||
gn('privacytab-text').textContent = Localization.localize('PRIVACY_POLICY');
|
||||
}
|
||||
|
|
|
@ -200,3 +200,11 @@ export function inappBlocksGuide () {
|
|||
gn(blockDescriptionKeys[i]).textContent = Localization.localize(blockDescriptionKeys[i]);
|
||||
}
|
||||
}
|
||||
|
||||
export function inappPrivacyPolicy () {
|
||||
const elements = document.querySelectorAll('[data-i18n]');
|
||||
elements.forEach(function (item) {
|
||||
const key = item.getAttribute('data-i18n');
|
||||
item.innerHTML = Localization.localize(key);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -81,10 +81,15 @@ export default class Lobby {
|
|||
}
|
||||
};
|
||||
gn('blockstab').onclick = function () {
|
||||
if (gn('booktab').className != 'tab2 on') {
|
||||
if (gn('blockstab').className != 'tab on') {
|
||||
Lobby.setSubMenu('blocks');
|
||||
}
|
||||
};
|
||||
gn('privacytab').onclick = function () {
|
||||
if (gn('privacytab').className != 'tab2 on') {
|
||||
Lobby.setSubMenu('privacy');
|
||||
}
|
||||
};
|
||||
if (isAndroid) {
|
||||
AndroidInterface.notifyDoneLoading();
|
||||
}
|
||||
|
@ -258,6 +263,10 @@ export default class Lobby {
|
|||
url = host + 'blocks.html';
|
||||
Lobby.loadLink(div, url, 'contentwrap scroll', 'htmlcontents scrolled');
|
||||
break;
|
||||
case 'privacy':
|
||||
url = host + 'privacy.html';
|
||||
Lobby.loadLink(div, url, 'contentwrap scroll', 'htmlcontents scrolled');
|
||||
break;
|
||||
default:
|
||||
Lobby.missing(page, div);
|
||||
break;
|
||||
|
@ -266,7 +275,7 @@ export default class Lobby {
|
|||
}
|
||||
|
||||
static selectSubButton (str) {
|
||||
var list = ['about', 'interface', 'paint', 'blocks'];
|
||||
var list = ['about', 'interface', 'paint', 'blocks', 'privacy'];
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
var kid = gn(list[i] + 'tab');
|
||||
var cls = kid.className.split(' ')[0];
|
||||
|
|
|
@ -45,7 +45,7 @@ export default class MediaLib {
|
|||
path = parsedResult.path;
|
||||
samples = parsedResult.samples;
|
||||
sprites = parsedResult.sprites;
|
||||
legacySprites = parsedResult.legacySprites;
|
||||
legacySprites = parsedResult.legacySprites || [];
|
||||
backgrounds = parsedResult.backgrounds;
|
||||
sounds = parsedResult.sounds;
|
||||
|
||||
|
|
Loading…
Reference in a new issue