diff --git a/package.json b/package.json
index 4b7f75eea..3b0afeca2 100644
--- a/package.json
+++ b/package.json
@@ -106,13 +106,13 @@
"redux-throttle": "0.1.1",
"rimraf": "^2.6.1",
"scratch-audio": "0.1.0-prerelease.20190114210212",
- "scratch-blocks": "0.1.0-prerelease.1551865183",
+ "scratch-blocks": "0.1.0-prerelease.1552509492",
"scratch-l10n": "3.1.20190220143732",
"scratch-paint": "0.2.0-prerelease.20190311150519",
"scratch-render": "0.1.0-prerelease.20190312125229",
"scratch-storage": "1.2.2",
"scratch-svg-renderer": "0.2.0-prerelease.20190304180800",
- "scratch-vm": "0.2.0-prerelease.20190312212117",
+ "scratch-vm": "0.2.0-prerelease.20190314020908",
"selenium-webdriver": "3.6.0",
"startaudiocontext": "1.2.1",
"style-loader": "^0.23.0",
diff --git a/src/components/gui/gui.jsx b/src/components/gui/gui.jsx
index 97741a147..dfcc7d8dd 100644
--- a/src/components/gui/gui.jsx
+++ b/src/components/gui/gui.jsx
@@ -97,6 +97,7 @@ const GUIComponent = props => {
onActivateTab,
onClickLogo,
onExtensionButtonClick,
+ onProjectTelemetryEvent,
onRequestCloseBackdropLibrary,
onRequestCloseCostumeLibrary,
onRequestCloseTelemetryModal,
@@ -217,6 +218,7 @@ const GUIComponent = props => {
onCloseAccountNav={onCloseAccountNav}
onLogOut={onLogOut}
onOpenRegistration={onOpenRegistration}
+ onProjectTelemetryEvent={onProjectTelemetryEvent}
onSeeCommunity={onSeeCommunity}
onShare={onShare}
onToggleLoginOpen={onToggleLoginOpen}
diff --git a/src/components/library-item/library-item.css b/src/components/library-item/library-item.css
index 692e1b612..5e726a363 100644
--- a/src/components/library-item/library-item.css
+++ b/src/components/library-item/library-item.css
@@ -178,6 +178,10 @@
font-weight: bold;
}
+.featured-extension-metadata-detail img{
+ margin-right: 0.25rem;
+}
+
.coming-soon-text {
position: absolute;
background-color: $data-primary;
diff --git a/src/components/library-item/library-item.jsx b/src/components/library-item/library-item.jsx
index bd7047fcb..3ae872e8a 100644
--- a/src/components/library-item/library-item.jsx
+++ b/src/components/library-item/library-item.jsx
@@ -75,12 +75,12 @@ class LibraryItemComponent extends React.PureComponent {
-

+ {this.props.bluetoothRequired ? (
+

+ ) : null}
+ {this.props.internetConnectionRequired ? (
+

+ ) : null}
) : null}
diff --git a/src/components/menu-bar/menu-bar.jsx b/src/components/menu-bar/menu-bar.jsx
index f985881c1..972809d2d 100644
--- a/src/components/menu-bar/menu-bar.jsx
+++ b/src/components/menu-bar/menu-bar.jsx
@@ -6,6 +6,8 @@ import bindAll from 'lodash.bindall';
import bowser from 'bowser';
import React from 'react';
+import VM from 'scratch-vm';
+
import Box from '../box/box.jsx';
import Button from '../button/button.jsx';
import CommunityButton from './community-button.jsx';
@@ -55,6 +57,8 @@ import {
loginMenuOpen
} from '../../reducers/menus';
+import collectMetadata from '../../lib/collect-metadata';
+
import styles from './menu-bar.css';
import helpIcon from '../../lib/assets/icon--tutorials.svg';
@@ -146,10 +150,10 @@ class MenuBar extends React.Component {
'handleClickSaveAsCopy',
'handleClickSeeCommunity',
'handleClickShare',
- 'handleCloseFileMenuAndThen',
'handleKeyPress',
'handleLanguageMouseUp',
'handleRestoreOption',
+ 'handleSaveToComputer',
'restoreOptionMessage'
]);
}
@@ -216,12 +220,6 @@ class MenuBar extends React.Component {
this.props.onRequestCloseEdit();
};
}
- handleCloseFileMenuAndThen (fn) {
- return () => {
- this.props.onRequestCloseFile();
- fn();
- };
- }
handleKeyPress (event) {
const modifier = bowser.mac ? event.metaKey : event.ctrlKey;
if (modifier && event.key === 's') {
@@ -229,6 +227,16 @@ class MenuBar extends React.Component {
event.preventDefault();
}
}
+ handleSaveToComputer (downloadProjectCallback) {
+ return () => {
+ this.props.onRequestCloseFile();
+ downloadProjectCallback();
+ if (this.props.onProjectTelemetryEvent) {
+ const metadata = collectMetadata(this.props.vm, this.props.projectTitle, this.props.locale);
+ this.props.onProjectTelemetryEvent('projectDidSave', metadata);
+ }
+ };
+ }
handleLanguageMouseUp (e) {
if (!this.props.languageMenuOpen) {
this.props.onClickLanguage(e);
@@ -402,10 +410,10 @@ class MenuBar extends React.Component {
)}
- {(className, downloadProject) => (
+ {(className, downloadProjectCallback) => (