From a9984bc2d3687ff80dfa1449fda700038531228b Mon Sep 17 00:00:00 2001 From: "Github Action (authored by pmalacho-mit)" Date: Fri, 17 May 2024 13:25:05 -0700 Subject: [PATCH] Changes --- package.json | 110 +----- .../google-drive-picker.jsx | 92 ++--- src/components/menu-bar/menu-bar.jsx | 341 ++++-------------- .../programmatic-modal/programmatic-modal.css | 4 +- .../record-buttons/record-button.css | 4 +- src/containers/gui.jsx | 26 +- src/lib/libraries/extensions/index.jsx | 2 +- src/svelte/Modal.svelte | 10 +- tsconfig.json | 10 +- 9 files changed, 154 insertions(+), 445 deletions(-) diff --git a/package.json b/package.json index d594e6f5134..1a4251ba89a 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ }, "dependencies": { "@microbit/microbit-universal-hex": "^0.2.2", + "@tsconfig/svelte": "^5.0.4", "arraybuffer-loader": "^1.0.6", "autoprefixer": "^9.0.1", "balance-text": "^3.3.1", @@ -58,11 +59,13 @@ "intl": "^1.2.5", "js-base64": "^2.4.9", "keymirror": "^0.1.1", + "load-script": "^2.0.0", "lodash.bindall": "^4.4.0", "lodash.debounce": "^4.0.8", "lodash.defaultsdeep": "^4.6.1", "lodash.omit": "^4.5.0", "lodash.throttle": "^4.0.1", + "microbit-web-bluetooth": "^0.6.0", "minilog": "^3.1.0", "omggif": "^1.0.9", "papaparse": "^5.3.0", @@ -88,6 +91,7 @@ "react-virtualized": "^9.20.1", "redux": "^3.7.2", "redux-throttle": "^0.1.1", + "regenerator-runtime": "^0.14.1", "scratch-audio": "^1.0.0", "scratch-blocks": "^1.1.6", "scratch-l10n": "^3.18.3", @@ -99,18 +103,14 @@ "scratch-vm": "workspace:*", "startaudiocontext": "^1.2.1", "style-loader": "^0.23.0", + "svelte": "^4.2.7", + "svelte-check": "^3.7.1", + "svelte-loader": "^3.2.0", + "svelte-preprocess": "^5.1.0", "text-encoding": "^0.7.0", "to-style": "^1.3.3", "wav-encoder": "^1.3.0", - "xhr": "^2.5.0", - "babel-polyfill": "^6.26.0", - "canvas": "^2.10.1", - "face-api.js": "^0.22.2", - "load-script": "^2.0.0", - "microbit-web-bluetooth": "^0.6.0", - "svelte-check": "^2.9.2", - "svelte-loader": "^3.1.3", - "svelte-preprocess": "^4.10.7" + "xhr": "^2.5.0" }, "peerDependencies": { "react": "^16.0.0", @@ -120,115 +120,44 @@ "@babel/cli": "7.24.5", "@babel/core": "7.24.5", "@babel/eslint-parser": "7.24.5", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-async-to-generator": "^7.24.1", - "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-proposal-object-rest-spread": "7.20.7", + "@babel/plugin-syntax-dynamic-import": "7.8.3", + "@babel/plugin-transform-async-to-generator": "7.24.1", "@babel/preset-env": "7.24.5", "@babel/preset-react": "7.24.1", "@commitlint/cli": "17.8.1", "@commitlint/config-conventional": "17.8.1", - "arraybuffer-loader": "^1.0.6", - "autoprefixer": "^9.0.1", "babel-core": "7.0.0-bridge.0", - "babel-eslint": "^10.0.1", "babel-loader": "9.1.3", - "base64-loader": "1.0.0", - "bowser": "1.9.4", - "chromedriver": "^87.0.1", - "classnames": "2.2.6", - "computed-style-to-inline-style": "3.0.0", - "copy-webpack-plugin": "^4.5.1", - "core-js": "2.5.7", - "css-loader": "^1.0.0", + "cross-fetch": "^4.0.0", "enzyme": "3.11.0", "enzyme-adapter-react-16": "1.15.8", - "es6-object-assign": "1.1.0", "eslint": "8.57.0", "eslint-config-scratch": "9.0.8", - "eslint-import-resolver-webpack": "^0.11.1", + "eslint-import-resolver-webpack": "0.11.1", "eslint-plugin-import": "2.29.1", "eslint-plugin-jest": "22.21.0", "eslint-plugin-react": "7.34.1", "file-loader": "6.2.0", - "get-float-time-domain-data": "0.1.0", - "get-user-media-promise": "1.1.4", "gh-pages": "3.2.3", "html-webpack-plugin": "5.6.0", "husky": "8.0.3", - "immutable": "3.8.2", - "intl": "1.2.5", "jest": "21.2.1", - "jest-junit": "^7.0.0", - "js-base64": "2.4.9", - "keymirror": "0.1.1", - "lodash.bindall": "4.4.0", - "lodash.debounce": "4.0.8", - "lodash.defaultsdeep": "4.6.0", - "lodash.isequal": "4.5.0", - "lodash.omit": "4.5.0", - "lodash.pick": "4.4.0", - "lodash.throttle": "4.0.1", - "minilog": "3.1.0", - "mkdirp": "^0.5.1", - "omggif": "1.0.9", - "papaparse": "5.1.1", - "postcss-import": "^12.0.0", - "postcss-loader": "^3.0.0", - "postcss-simple-vars": "^5.0.1", - "prop-types": "^15.5.10", - "query-string": "^5.1.1", + "jest-junit": "7.0.0", "raf": "3.4.1", - "raw-loader": "^0.5.1", - "react": "16.2.0", - "react-contextmenu": "2.9.4", - "react-dom": "16.2.0", - "react-draggable": "3.0.5", - "react-ga": "2.5.3", - "react-google-picker": "^0.1.0", - "react-intl": "2.9.0", - "react-modal": "3.9.1", - "react-popover": "0.5.10", - "react-redux": "5.0.7", - "react-responsive": "5.0.0", - "react-style-proptype": "3.2.2", - "react-tabs": "2.3.0", "react-test-renderer": "16.14.0", - "react-tooltip": "3.8.0", - "react-virtualized": "9.20.1", - "redux": "3.7.2", "redux-mock-store": "1.5.4", - "redux-throttle": "0.1.1", "rimraf": "2.7.1", - "scratch-audio": "0.1.0-prerelease.20190925183642", - "scratch-blocks": "0.1.0-prerelease.1578322100", - "scratch-l10n": "3.7.20200108141814", - "scratch-paint": "1.1.16", - "scratch-render": "0.1.0-prerelease.20200109074051", - "scratch-render-fonts": "1.0.0-prerelease.20210401210003", "scratch-semantic-release-config": "1.0.14", - "scratch-storage": "1.3.2", - "scratch-svg-renderer": "latest", - "scratch-vm": "0.2.0-prerelease.20191227164934", + "scratch-webpack-configuration": "1.3.0", "selenium-webdriver": "3.6.0", "semantic-release": "19.0.5", - "startaudiocontext": "1.2.1", "stream-browserify": "3.0.0", - "style-loader": "^0.23.0", - "svelte": "3.52.0", - "svg-to-image": "1.1.3", - "text-encoding": "0.7.0", - "to-style": "1.3.3", - "typescript": "latest", - "uglifyjs-webpack-plugin": "^1.2.5", "url-loader": "4.1.1", - "wav-encoder": "1.3.0", "web-audio-test-api": "0.5.2", "webpack": "5.91.0", "webpack-cli": "5.1.4", "webpack-dev-server": "5.0.4", - "xhr": "2.5.0", "yauzl": "2.10.0" }, "jest": { @@ -244,10 +173,5 @@ "\\.(css|less)$": "/test/__mocks__/styleMock.js", "editor-msgs(\\.js)?$": "/test/__mocks__/editor-msgs-mock.js" } - }, - "overrides": { - "svelte-preprocess": { - "typescript": "latest" - } } -} +} \ No newline at end of file diff --git a/src/components/google-drive-picker/google-drive-picker.jsx b/src/components/google-drive-picker/google-drive-picker.jsx index 8b0ab40ec56..db3b41db580 100644 --- a/src/components/google-drive-picker/google-drive-picker.jsx +++ b/src/components/google-drive-picker/google-drive-picker.jsx @@ -27,7 +27,7 @@ class GoogleChooser extends React.Component { } componentDidMount() { - if(this.isGoogleReady()) { + if (this.isGoogleReady()) { // google api is already exists // init immediately this.onApiLoad(); @@ -42,7 +42,7 @@ class GoogleChooser extends React.Component { onClientLoad() { window.gapi.client.init({ - apiKey: this.props.developerKey, + apiKey: this.props.developerKey, }); } @@ -68,9 +68,9 @@ class GoogleChooser extends React.Component { doAuth(callback) { const client = google.accounts.oauth2.initTokenClient({ - client_id: this.props.clientId, - scope: this.props.scope, - callback: callback, + client_id: this.props.clientId, + scope: this.props.scope, + callback: callback, }); client.requestAccessToken(); @@ -78,16 +78,16 @@ class GoogleChooser extends React.Component { onChoose() { if (!this.isGoogleReady() || !this.isGoogleAuthReady() || !this.isGooglePickerReady() || this.props.disabled) { - console.error("Some api is missing:"); - if (!this.isGoogleReady()) { - console.log("\tGoogle API"); - } - if (!this.isGoogleAuthReady()) { - console.log("\tGoogle Auth"); - } - if (!this.isGoogleReady()) { - console.log("\tGoogle Picker"); - } + console.error("Some api is missing:"); + if (!this.isGoogleReady()) { + console.log("\tGoogle API"); + } + if (!this.isGoogleAuthReady()) { + console.log("\tGoogle Auth"); + } + if (!this.isGoogleReady()) { + console.log("\tGoogle Picker"); + } return null; } @@ -111,7 +111,7 @@ class GoogleChooser extends React.Component { this.props.onAuthenticate(oauthToken); - if(this.props.createPicker){ + if (this.props.createPicker) { return this.props.createPicker(google, oauthToken) } @@ -130,11 +130,11 @@ class GoogleChooser extends React.Component { } const picker = new window.google.picker.PickerBuilder() - .addView(view) - .setOAuthToken(oauthToken) - .setDeveloperKey(this.props.developerKey) - .setCallback(this.props.onChange) - .setAppId(this.props.appId); + .addView(view) + .setOAuthToken(oauthToken) + .setDeveloperKey(this.props.developerKey) + .setCallback(this.props.onChange) + .setAppId(this.props.appId); if (this.props.origin) { picker.setOrigin(this.props.origin); @@ -149,7 +149,7 @@ class GoogleChooser extends React.Component { } picker.build() - .setVisible(true); + .setVisible(true); } render() { @@ -166,33 +166,33 @@ class GoogleChooser extends React.Component { } GoogleChooser.propTypes = { - appId: PropTypes.string.isRequired, - children: PropTypes.node, - clientId: PropTypes.string.isRequired, - developerKey: PropTypes.string, - scope: PropTypes.array, - viewId: PropTypes.string, - authImmediate: PropTypes.bool, - origin: PropTypes.string, - onChange: PropTypes.func, - onAuthenticate: PropTypes.func, - onAuthFailed: PropTypes.func, - createPicker: PropTypes.func, - multiselect: PropTypes.bool, - navHidden: PropTypes.bool, - disabled: PropTypes.bool + appId: PropTypes.string.isRequired, + children: PropTypes.node, + clientId: PropTypes.string.isRequired, + developerKey: PropTypes.string, + scope: PropTypes.string, + viewId: PropTypes.string, + authImmediate: PropTypes.bool, + origin: PropTypes.string, + onChange: PropTypes.func, + onAuthenticate: PropTypes.func, + onAuthFailed: PropTypes.func, + createPicker: PropTypes.func, + multiselect: PropTypes.bool, + navHidden: PropTypes.bool, + disabled: PropTypes.bool }; GoogleChooser.defaultProps = { - onChange: () => {}, - onAuthenticate: () => {}, - onAuthFailed: () => {}, - scope:'https://www.googleapis.com/auth/drive.file', - viewId: 'DOCS', - authImmediate: false, - multiselect: false, - navHidden: false, - disabled: false + onChange: () => { }, + onAuthenticate: () => { }, + onAuthFailed: () => { }, + scope: 'https://www.googleapis.com/auth/drive.file', + viewId: 'DOCS', + authImmediate: false, + multiselect: false, + navHidden: false, + disabled: false }; export default GoogleChooser; \ No newline at end of file diff --git a/src/components/menu-bar/menu-bar.jsx b/src/components/menu-bar/menu-bar.jsx index 13c54aac0c0..9eed8a2f7e2 100644 --- a/src/components/menu-bar/menu-bar.jsx +++ b/src/components/menu-bar/menu-bar.jsx @@ -1,7 +1,7 @@ import classNames from 'classnames'; -import {connect} from 'react-redux'; -import {compose} from 'redux'; -import {defineMessages, FormattedMessage, injectIntl, intlShape} from 'react-intl'; +import { connect } from 'react-redux'; +import { compose } from 'redux'; +import { defineMessages, FormattedMessage, injectIntl, intlShape } from 'react-intl'; import PropTypes from 'prop-types'; import bindAll from 'lodash.bindall'; import bowser from 'bowser'; @@ -13,12 +13,12 @@ import Box from '../box/box.jsx'; import Button from '../button/button.jsx'; import CommunityButton from './community-button.jsx'; import ShareButton from './share-button.jsx'; -import {ComingSoonTooltip} from '../coming-soon/coming-soon.jsx'; +import { ComingSoonTooltip } from '../coming-soon/coming-soon.jsx'; import Divider from '../divider/divider.jsx'; import SaveStatus from './save-status.jsx'; import ProjectWatcher from '../../containers/project-watcher.jsx'; import MenuBarMenu from './menu-bar-menu.jsx'; -import {MenuItem, MenuSection} from '../menu/menu.jsx'; +import { MenuItem, MenuSection } from '../menu/menu.jsx'; import ProjectTitleInput from './project-title-input.jsx'; import AuthorInfo from './author-info.jsx'; import AccountNav from '../../containers/account-nav.jsx'; @@ -27,12 +27,10 @@ import SB3Downloader from '../../containers/sb3-downloader.jsx'; import DeletionRestorer from '../../containers/deletion-restorer.jsx'; import TurboMode from '../../containers/turbo-mode.jsx'; import MenuBarHOC from '../../containers/menu-bar-hoc.jsx'; -import GoogleChooser from '../google-drive-picker/google-drive-picker.jsx'; import SettingsMenu from './settings-menu.jsx'; -import {setProjectTitle} from '../../reducers/project-title'; -import {openTipsLibrary} from '../../reducers/modals'; -import {setPlayer} from '../../reducers/mode'; +import { openTipsLibrary } from '../../reducers/modals'; +import { setPlayer } from '../../reducers/mode'; import { isTimeTravel220022BC, isTimeTravel1920, @@ -87,7 +85,7 @@ import aboutIcon from './icon--about.svg'; import fileIcon from './icon--file.svg'; import editIcon from './icon--edit.svg'; -import scratchLogo from './raise-white.png'; +import scratchLogo from './scratch-logo.svg'; import ninetiesLogo from './nineties_logo.svg'; import catLogo from './cat_logo.svg'; import prehistoricLogo from './prehistoric-logo.svg'; @@ -95,11 +93,6 @@ import oldtimeyLogo from './oldtimey-logo.svg'; import sharedMessages from '../../lib/shared-messages'; -import loadScript from 'load-script'; -const GOOGLE_SDK_URL = 'https://apis.google.com/js/api.js'; -let scriptLoadingStarted = false; - - const ariaMessages = defineMessages({ tutorials: { id: 'gui.menuBar.tutorialsLibrary', @@ -143,7 +136,7 @@ MenuBarItemTooltip.propTypes = { place: PropTypes.oneOf(['top', 'bottom', 'left', 'right']) }; -const MenuItemTooltip = ({id, isRtl, children, className}) => ( +const MenuItemTooltip = ({ id, isRtl, children, className }) => ( ( ); -const APP_ID = '906634949042'; // first part of client ID -const CLIENT_ID = '906634949042-5jbc7q594e69spg2i0bkt9a14iojvtsp.apps.googleusercontent.com'; -const DEVELOPER_KEY = 'AIzaSyDRoOjwaDXOxq4cda1nrCVLaVQvTCh5GYE'; -const DRIVE_SCOPE = 'https://www.googleapis.com/auth/drive.file'; - - MenuItemTooltip.propTypes = { children: PropTypes.node, className: PropTypes.string, @@ -182,7 +169,7 @@ AboutButton.propTypes = { }; class MenuBar extends React.Component { - constructor (props) { + constructor(props) { super(props); bindAll(this, [ 'handleClickNew', @@ -195,34 +182,16 @@ class MenuBar extends React.Component { 'handleKeyPress', 'handleRestoreOption', 'getSaveToComputerHandler', - 'restoreOptionMessage', - 'handleDriveAuthenticate', - 'handleDriveProjectSelect', - 'handleClickLoadProjectLink', - 'handleClickDriveSave', - 'onApiLoad' + 'restoreOptionMessage' ]); - this.state = { - authToken: "", - fileId: "" - }; } - componentDidMount () { + componentDidMount() { document.addEventListener('keydown', this.handleKeyPress); - if(this.isGoogleReady()) { - // google api is already exists - // init immediately - this.onApiLoad(); - } else if (!scriptLoadingStarted) { - // load google api and the init - scriptLoadingStarted = true; - loadScript(GOOGLE_SDK_URL, this.onApiLoad) - } } - componentWillUnmount () { + componentWillUnmount() { document.removeEventListener('keydown', this.handleKeyPress); } - handleClickNew () { + handleClickNew() { // if the project is dirty, and user owns the project, we will autosave. // but if they are not logged in and can't save, user should consider // downloading or logging in first. @@ -234,26 +203,22 @@ class MenuBar extends React.Component { this.props.onRequestCloseFile(); if (readyToReplaceProject) { this.props.onClickNew(this.props.canSave && this.props.canCreateNew); - - this.setState({ - fileId: null - }); } this.props.onRequestCloseFile(); } - handleClickRemix () { + handleClickRemix() { this.props.onClickRemix(); this.props.onRequestCloseFile(); } - handleClickSave () { + handleClickSave() { this.props.onClickSave(); this.props.onRequestCloseFile(); } - handleClickSaveAsCopy () { + handleClickSaveAsCopy() { this.props.onClickSaveAsCopy(); this.props.onRequestCloseFile(); } - handleClickSeeCommunity (waitForUpdate) { + handleClickSeeCommunity(waitForUpdate) { if (this.props.shouldSaveBeforeTransition()) { this.props.autoUpdateProject(); // save before transitioning to project page waitForUpdate(true); // queue the transition to project page @@ -261,7 +226,7 @@ class MenuBar extends React.Component { waitForUpdate(false); // immediately transition to project page } } - handleClickShare (waitForUpdate) { + handleClickShare(waitForUpdate) { if (!this.props.isShared) { if (this.props.canShare) { // save before transitioning to project page this.props.onShare(); @@ -274,7 +239,7 @@ class MenuBar extends React.Component { } } } - handleSetMode (mode) { + handleSetMode(mode) { return () => { // Turn on/off filters for modes. if (mode === '1920') { @@ -304,20 +269,20 @@ class MenuBar extends React.Component { this.props.onSetTimeTravelMode(mode); }; } - handleRestoreOption (restoreFun) { + handleRestoreOption(restoreFun) { return () => { restoreFun(); this.props.onRequestCloseEdit(); }; } - handleKeyPress (event) { + handleKeyPress(event) { const modifier = bowser.mac ? event.metaKey : event.ctrlKey; if (modifier && event.key === 's') { this.props.onClickSave(); event.preventDefault(); } } - getSaveToComputerHandler (downloadProjectCallback) { + getSaveToComputerHandler(downloadProjectCallback) { return () => { this.props.onRequestCloseFile(); downloadProjectCallback(); @@ -327,165 +292,36 @@ class MenuBar extends React.Component { } }; } - restoreOptionMessage (deletedItem) { + restoreOptionMessage(deletedItem) { switch (deletedItem) { - case 'Sprite': - return (); - case 'Sound': - return (); - case 'Costume': - return (); - default: { - return (); - } - } - } - doAuth(callback) { - window.gapi.auth.authorize({ - client_id: CLIENT_ID, - scope: DRIVE_SCOPE, - immediate: false - }, - callback - ); - } - handleClickLoadProjectLink() { - let templateLink = "https://www.dropbox.com/s/o8jegh940y7f7qc/SimpleProject.sb3"; - let url = window.prompt("Enter project url (e.g. from Dropbox or Github)", templateLink); - if (url != null && url != "") { - const readyToReplaceProject = this.props.confirmReadyToReplaceProject( - this.props.intl.formatMessage(sharedMessages.replaceProjectWarning) - ); - if (readyToReplaceProject) { - this.props.vm.downloadProjectFromURLDirect(url); - - this.props.onReceivedProjectTitle(this.getProjectTitleFromFilename(url)); - this.setState({ - fileId: null - }); + case 'Sprite': + return (); + case 'Sound': + return (); + case 'Costume': + return (); + default: { + return (); } } - this.props.onRequestCloseFile(); - } - handleClickDriveSave() { - // make sure user has logged into Google Drive - if (!this.state.authToken) { - this.doAuth(response => { - if (response.access_token) { - this.handleDriveAuthenticate(response.access_token); - this.handleClickDriveSave(); - } - }); - this.props.onRequestCloseFile(); - return; - } - // check if we have already created file - let fileId = this.state.fileId; - if (!fileId) { - if (this.isGoogleDriveReady()) { - let fileName = prompt("Name your project", this.props.projectTitle); - if (fileName != null && fileName != "") { - window.gapi.client.drive.files.create({ - name: fileName + ".sb3", - mimeType: "application/x-zip" - }).then((response) => { - if (response.status == 200) { - this.setState({ - fileId: response.result.id - }); - this.handleClickDriveSave(); - } - }); - } - } - this.props.onRequestCloseFile(); - return; - } - const url = "https://www.googleapis.com/upload/drive/v3/files/" + fileId + "?uploadType=media;" + this.state.authToken; - this.props.vm.uploadProjectToURL(url); - - // show alert that we are saving project - window.alert("Project saved"); - this.props.onRequestCloseFile(); - } - handleDriveAuthenticate(token) { - this.setState({ - authToken: token - }); - } - getProjectTitleFromFilename (fileInputFilename) { - if (!fileInputFilename) return ''; - // only parse title with valid scratch project extensions - // (.sb, .sb2, and .sb3) - //const matches = fileInputFilename.match(/^(.*)\.sb[23]?$/); - const matches = fileInputFilename.match(/\/?(.[^\/]*)\.sb[23]?/); - if (!matches) return ''; - return matches[1].substring(0, 100); // truncate project title to max 100 chars - } - handleDriveProjectSelect(data) { - console.log(data); - if (data.docs) { - const fileId = data.docs[0].id; - const url = "https://www.googleapis.com/drive/v3/files/" + fileId + "/?alt=media;" + this.state.authToken; - - const readyToReplaceProject = this.props.confirmReadyToReplaceProject( - this.props.intl.formatMessage(sharedMessages.replaceProjectWarning) - ); - if (readyToReplaceProject) { - this.props.vm.downloadProjectFromURLDirect(url); - - this.props.onReceivedProjectTitle(this.getProjectTitleFromFilename(data.docs[0].name)); - - // if project does not have a parentId, it's a shared project and you cannot save - if (data.docs[0].parentId !== undefined) { - this.setState({ - fileId: fileId - }); - } else { - this.setState({ - fileId: null - }); - } - } - } - this.props.onRequestCloseFile(); } - isGoogleReady() { - return !!window.gapi; - } - - isGoogleAuthReady() { - return !!window.gapi.auth; - } - isGoogleDriveReady() { - return !!window.gapi.client.drive; - } - - onApiLoad() { - window.gapi.load('auth'); - window.gapi.load('client', () => { - window.gapi.client.load('drive', 'v3'); - }); - } - - - buildAboutMenu (onClickAbout) { + buildAboutMenu(onClickAbout) { if (!onClickAbout) { // hide the button return null; @@ -529,13 +365,13 @@ class MenuBar extends React.Component { ); } - wrapAboutMenuCallback (callback) { + wrapAboutMenuCallback(callback) { return () => { callback(); this.props.onRequestCloseAbout(); }; } - render () { + render() { const saveNowMessage = ( )} - - - - - console.log('on auth failed:', data)} - multiselect={false} - navHidden={false} - authImmediate={false} - viewID={'DOCS'} - query={'.sb3'} - > - - - - - )} @@ -733,16 +536,16 @@ class MenuBar extends React.Component { place={this.props.isRtl ? 'left' : 'right'} onRequestClose={this.props.onRequestCloseEdit} > - {(handleRestore, {restorable, deletedItem}) => ( + {(handleRestore, { restorable, deletedItem }) => ( {this.restoreOptionMessage(deletedItem)} )} - {(toggleTurboMode, {turboMode}) => ( + {(toggleTurboMode, { turboMode }) => ( {turboMode ? ( - + {'✓'} {' '} @@ -796,7 +599,7 @@ class MenuBar extends React.Component { /> - + {'✓'} {' '} @@ -811,24 +614,6 @@ class MenuBar extends React.Component { )} - - {true ? ( -
-
- - -
-
) : - null - } - {this.props.canEditTitle ? (
{ this.handleClickShare(waitForUpdate); }} - /* eslint-enable react/jsx-no-bind */ + /* eslint-enable react/jsx-no-bind */ /> ) } @@ -889,7 +674,7 @@ class MenuBar extends React.Component { onClick={() => { this.handleClickSeeCommunity(waitForUpdate); }} - /* eslint-enable react/jsx-no-bind */ + /* eslint-enable react/jsx-no-bind */ /> ) } @@ -949,7 +734,7 @@ class MenuBar extends React.Component { className={classNames( styles.menuBarItem, styles.hoverable, - {[styles.active]: this.props.accountMenuOpen} + { [styles.active]: this.props.accountMenuOpen } )} isOpen={this.props.accountMenuOpen} isRtl={this.props.isRtl} @@ -1136,14 +921,13 @@ MenuBar.propTypes = { shouldSaveBeforeTransition: PropTypes.func, showComingSoon: PropTypes.bool, username: PropTypes.string, - vm: PropTypes.instanceOf(VM).isRequired, - onReceivedProjectTitle: PropTypes.func, - userOwnsProject: PropTypes.bool + userOwnsProject: PropTypes.bool, + vm: PropTypes.instanceOf(VM).isRequired }; MenuBar.defaultProps = { logo: scratchLogo, - onShare: () => {} + onShare: () => { } }; const mapStateToProps = (state, ownProps) => { @@ -1198,7 +982,6 @@ const mapDispatchToProps = dispatch => ({ onClickSave: () => dispatch(manualUpdateProject()), onClickSaveAsCopy: () => dispatch(saveProjectAsCopy()), onSeeCommunity: () => dispatch(setPlayer(true)), - onReceivedProjectTitle: title => dispatch(setProjectTitle(title)), onSetTimeTravelMode: mode => dispatch(setTimeTravel(mode)) }); diff --git a/src/components/programmatic-modal/programmatic-modal.css b/src/components/programmatic-modal/programmatic-modal.css index 3941e254401..02083e65e18 100644 --- a/src/components/programmatic-modal/programmatic-modal.css +++ b/src/components/programmatic-modal/programmatic-modal.css @@ -18,8 +18,6 @@ --text-primary-transparent: $text-primary-transparent; --motion-primary: $motion-primary; --motion-tertiary: $motion-tertiary; - --motion-transparent: $motion-transparent; - --motion-light-transparent: $motion-light-transparent; --red-primary: $red-primary; --red-tertiary: $red-tertiary; --sound-primary: $sound-primary; @@ -35,5 +33,5 @@ --extensions-tertiary: $extensions-tertiary; --extensions-transparent: $extensions-transparent; --extensions-light: $extensions-light; - --drop-highlight: $motion-transparent + --drop-highlight: $drop-highlight } \ No newline at end of file diff --git a/src/components/record-buttons/record-button.css b/src/components/record-buttons/record-button.css index 2eafbe8cc85..c1fe7c5affe 100644 --- a/src/components/record-buttons/record-button.css +++ b/src/components/record-buttons/record-button.css @@ -10,7 +10,7 @@ } .recording:hover { - background-color: $motion-light-transparent; + background-color: $looks-light-transparent; } .recording { @@ -19,4 +19,4 @@ .recording.is-active { opacity: 1; -} +} \ No newline at end of file diff --git a/src/containers/gui.jsx b/src/containers/gui.jsx index dfb637ab690..d1d3139221e 100644 --- a/src/containers/gui.jsx +++ b/src/containers/gui.jsx @@ -1,10 +1,10 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {compose} from 'redux'; -import {connect} from 'react-redux'; +import { compose } from 'redux'; +import { connect } from 'react-redux'; import ReactModal from 'react-modal'; import VM from 'scratch-vm'; -import {injectIntl, intlShape} from 'react-intl'; +import { injectIntl, intlShape } from 'react-intl'; import ErrorBoundaryHOC from '../lib/error-boundary-hoc.jsx'; import { @@ -39,9 +39,9 @@ import cloudManagerHOC from '../lib/cloud-manager-hoc.jsx'; import systemPreferencesHOC from '../lib/system-preferences-hoc.jsx'; import GUIComponent from '../components/gui/gui.jsx'; -import {setIsScratchDesktop} from '../lib/isScratchDesktop.js'; +import { setIsScratchDesktop } from '../lib/isScratchDesktop.js'; -const {RequestMetadata, setMetadata, unsetMetadata} = storage.scratchFetch; +const { RequestMetadata, setMetadata, unsetMetadata } = storage.scratchFetch; const setProjectIdMetadata = projectId => { // If project ID is '0' or zero, it's not a real project ID. In that case, remove the project ID metadata. @@ -54,13 +54,13 @@ const setProjectIdMetadata = projectId => { }; class GUI extends React.Component { - componentDidMount () { + componentDidMount() { setIsScratchDesktop(this.props.isScratchDesktop); this.props.onStorageInit(storage); this.props.onVmInit(this.props.vm); setProjectIdMetadata(this.props.projectId); } - componentDidUpdate (prevProps) { + componentDidUpdate(prevProps) { if (this.props.projectId !== prevProps.projectId) { if (this.props.projectId !== null) { this.props.onUpdateProjectId(this.props.projectId); @@ -73,7 +73,7 @@ class GUI extends React.Component { this.props.onProjectLoaded(); } } - render () { + render() { if (this.props.isError) { throw new Error( `Error in Scratch GUI [location=${window.location}]: ${this.props.error}`); @@ -130,7 +130,7 @@ GUI.propTypes = { onVmInit: PropTypes.func, projectHost: PropTypes.string, projectId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - telemetryModalVisible: PropTypes.bool, + telemetryModalVisible: PropTypes.bool, textModelModalVisible: PropTypes.bool, classifierModelModalVisible: PropTypes.bool, classifierModelModalVisible: PropTypes.bool, @@ -141,9 +141,9 @@ GUI.defaultProps = { isScratchDesktop: false, isTotallyNormal: false, onStorageInit: storageInstance => storageInstance.addOfficialScratchWebStores(), - onProjectLoaded: () => {}, - onUpdateProjectId: () => {}, - onVmInit: (/* vm */) => {} + onProjectLoaded: () => { }, + onUpdateProjectId: () => { }, + onVmInit: (/* vm */) => { } }; const mapStateToProps = state => { @@ -209,7 +209,7 @@ const WrappedGui = compose( ProjectSaverHOC, vmListenerHOC, vmManagerHOC, - SBFileUploaderHOC, + //SBFileUploaderHOC, cloudManagerHOC, systemPreferencesHOC )(ConnectedGUI); diff --git a/src/lib/libraries/extensions/index.jsx b/src/lib/libraries/extensions/index.jsx index 34038310366..80c8b4de7e4 100644 --- a/src/lib/libraries/extensions/index.jsx +++ b/src/lib/libraries/extensions/index.jsx @@ -1,5 +1,5 @@ /* DO NOT REMOVE */ -import generatedDetails from '../../../generated/details.generated'; +import generatedDetails from '../../../generated/prg/details.generated'; /* DO NOT REMOVE */ import React from 'react'; diff --git a/src/svelte/Modal.svelte b/src/svelte/Modal.svelte index 9f89b8b0c4d..27fdfe89ac5 100644 --- a/src/svelte/Modal.svelte +++ b/src/svelte/Modal.svelte @@ -1,6 +1,6 @@ diff --git a/tsconfig.json b/tsconfig.json index aadc285d9ee..3a4df2a5458 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,11 @@ -{ +{ "extends": "@tsconfig/svelte/tsconfig.json", "compilerOptions": { - "ignoreDeprecations": "5.0" + "ignoreDeprecations": "5.0", + "importsNotUsedAsValues": "remove", }, - "include": ["node_modules/scratch-vm/src/**/*", "../scratch-vm/src/**/*"] + "include": [ + "node_modules/scratch-vm/src/**/*", + "../scratch-vm/src/**/*" + ] } \ No newline at end of file