diff --git a/README.md b/README.md index 3d183d3e..3a8f078a 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,8 @@ The Engaging Computing Group develops new technologies to enable learners—yout ## Status [![CircleCI](https://circleci.com/gh/engaging-computing/MYR.svg?style=shield)](https://circleci.com/gh/engaging-computing/MYR) -## Change Log - 3.0.0 -> 3.1.0 -- Updated sorting for user projects to be case insensitive. -- Added ability to change code font size for an account. -- Added transparency to helper grid -- Additional Documentation for development. -- Misc. Dependency updates - +## Change Log - 3.1.1 -> 3.1.2 +- Fixed a bug where an old scene without a name can crash the client view ## Acknowledgments diff --git a/package-lock.json b/package-lock.json index e129f954..d0e2187b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,21 +1,22 @@ { "name": "myr", - "version": "3.1.0", + "version": "3.1.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "myr", - "version": "3.1.0", + "version": "3.1.2", "dependencies": { "@engaging-computing/aframe-physics-system": "^4.0.0", "@material-ui/core": "^4.12.3", - "aframe": "^1.0.4", + "@material-ui/lab": "^4.0.0-alpha.61", + "aframe": "^1.3.0", "aframe-animation-component": "^5.0.0", "aframe-environment-component": "^1.3.1", "aframe-extras": "^4.1.2", "aframe-react": "^4.4.0", - "bootstrap": "^4.6.0", + "bootstrap": "^5.1.3", "browserslist": "^4.6.2", "cannon": "^0.6.2", "create-react-app": "^4.0.1", @@ -25,7 +26,7 @@ "jquery": "^3.3.1", "qrcode": "^1.2.0", "qrcode.react": "^1.0.1", - "react": "^16.8.4", + "react": "^16.14.0", "react-ace": "^6.0.0", "react-color": "^2.19.3", "react-dom": "^16.2.0", @@ -35,13 +36,13 @@ "react-router-dom": "^4.2.2", "react-select": "^3.0.4", "reactour": "^1.18.6", - "redux": "^3.7.2", + "redux": "^4.2.0", "redux-thunk": "^2.3.0", "socket.io-client": "^4.4.1", "source-map-explorer": "^2.0.0", "styled-components": "^5.3.3", "three": "^0.126.1", - "ua-parser-js": "^0.7.24" + "ua-parser-js": "^1.0.2" }, "devDependencies": { "@babel/core": "^7.9.0", @@ -3254,12 +3255,22 @@ } } }, - "node_modules/@material-ui/core/node_modules/@material-ui/utils": { - "version": "4.11.2", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.2.tgz", - "integrity": "sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA==", + "node_modules/@material-ui/core/node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/@material-ui/lab": { + "version": "4.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@material-ui/lab/-/lab-4.0.0-alpha.61.tgz", + "integrity": "sha512-rSzm+XKiNUjKegj8bzt5+pygZeckNLOr+IjykH8sYdVk7dE9y2ZuUSofiMV2bJk3qU+JHwexmw+q0RyNZB9ugg==", "dependencies": { "@babel/runtime": "^7.4.4", + "@material-ui/utils": "^4.11.3", + "clsx": "^1.0.4", "prop-types": "^15.7.2", "react-is": "^16.8.0 || ^17.0.0" }, @@ -3267,16 +3278,15 @@ "node": ">=8.0.0" }, "peerDependencies": { + "@material-ui/core": "^4.12.1", + "@types/react": "^16.8.6 || ^17.0.0", "react": "^16.8.0 || ^17.0.0", "react-dom": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/@material-ui/core/node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/@material-ui/types": { @@ -3292,6 +3302,23 @@ } } }, + "node_modules/@material-ui/utils": { + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.3.tgz", + "integrity": "sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg==", + "dependencies": { + "@babel/runtime": "^7.4.4", + "prop-types": "^15.7.2", + "react-is": "^16.8.0 || ^17.0.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3432,6 +3459,16 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/@popperjs/core": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.0.tgz", + "integrity": "sha512-zrsUxjLOKAzdewIDRWy9nsV1GQsKBCWaGwsZQlCgr6/q+vjyZhFgqedLfFBuI9anTPEUT4APq9Mu0SZBTzIcGQ==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@rollup/plugin-node-resolve": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", @@ -4608,9 +4645,9 @@ } }, "node_modules/aframe": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/aframe/-/aframe-1.0.4.tgz", - "integrity": "sha512-iG/4VyRt22zUPxDsFjP4SHUXNPGIStM2hHX/iPblht6dtN8m09e7LAaFq4iQdXoT0EkZBWEVmXVBF1J7Tca3QQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/aframe/-/aframe-1.3.0.tgz", + "integrity": "sha512-f6OQaDf49SzdSxVskJPvPWldOwHpYMsGttmQHhU6FRiASsnyULKG1nqZom9pDuS3fFYEzQVqRMakQ2AhXeLkFg==", "dependencies": { "custom-event-polyfill": "^1.0.6", "debug": "github:ngokevin/debug#noTimestamp", @@ -4621,13 +4658,13 @@ "present": "0.0.6", "promise-polyfill": "^3.1.0", "super-animejs": "^3.1.0", - "super-three": "^0.111.6", - "three-bmfont-text": "github:dmarcos/three-bmfont-text#1babdf8507c731a18f8af3b807292e2b9740955e", - "webvr-polyfill": "^0.10.10" + "super-three": "^0.137.0", + "three-bmfont-text": "github:dmarcos/three-bmfont-text#21d017046216e318362c48abd1a48bddfb6e0733", + "webvr-polyfill": "^0.10.12" }, "engines": { "node": ">= 4.6.0", - "npm": "^2.15.9" + "npm": ">= 2.15.9" } }, "node_modules/aframe-animation-component": { @@ -6274,9 +6311,16 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "node_modules/bootstrap": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz", - "integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw==" + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", + "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + }, + "peerDependencies": { + "@popperjs/core": "^2.10.2" + } }, "node_modules/brace": { "version": "0.11.1", @@ -8239,7 +8283,7 @@ } }, "node_modules/debug": { - "resolved": "git+ssh://git@github.com/ngokevin/debug.git#ef5f8e66d49ce8bc64c6f282c15f8b7164409e3a" + "resolved": "https://github.com/ngokevin/debug.git#ef5f8e66d49ce8bc64c6f282c15f8b7164409e3a" }, "node_modules/decamelize": { "version": "1.2.0", @@ -8733,7 +8777,7 @@ } }, "node_modules/document-register-element": { - "resolved": "git+ssh://git@github.com/dmarcos/document-register-element.git#8ccc532b7f3744be954574caf3072a5fd260ca90" + "resolved": "https://github.com/dmarcos/document-register-element.git#8ccc532b7f3744be954574caf3072a5fd260ca90" }, "node_modules/dom-converter": { "version": "0.2.0", @@ -21147,9 +21191,9 @@ } }, "node_modules/react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -22027,14 +22071,11 @@ } }, "node_modules/redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", + "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", "dependencies": { - "lodash": "^4.2.1", - "lodash-es": "^4.2.1", - "loose-envify": "^1.1.0", - "symbol-observable": "^1.0.3" + "@babel/runtime": "^7.9.2" } }, "node_modules/redux-devtools": { @@ -23539,7 +23580,21 @@ "node_modules/simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/simple-get": { "version": "2.8.2", @@ -24961,9 +25016,9 @@ "integrity": "sha512-6MFAFJDRuvwkovxQZPruuyHinTa4rgj4hNLOndjcYYhZLckoXtVRY9rJPuq8p6c/tgZJrFYEAYAfJ2/hhNtUCA==" }, "node_modules/super-three": { - "version": "0.111.6", - "resolved": "https://registry.npmjs.org/super-three/-/super-three-0.111.6.tgz", - "integrity": "sha512-/OJTOBpmm7MRx8R0G5Zr9sX8EqsELy7SwATb5n0FP145QsrP134pY2W489sfkJYqZmGkpHmG1ulQ0M94icThBw==" + "version": "0.137.0", + "resolved": "https://registry.npmjs.org/super-three/-/super-three-0.137.0.tgz", + "integrity": "sha512-8jM8DiYiXQoalUoeFRxKWbW6KFQo3GFwgw+3vE2y6SJU/einw+JvuvgK+WhbIYRfz4LQV68nyOQ2eEZqAuouGw==" }, "node_modules/supports-color": { "version": "5.5.0", @@ -25081,6 +25136,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -25557,7 +25613,10 @@ "integrity": "sha512-eOEXnZeE1FDV0XgL1u08auIP13jxdN9LQBAEmlErYzMxtIIfuGIAZbijOyookALUhqVzVOx0Tywj6n192VM+nQ==" }, "node_modules/three-bmfont-text": { - "resolved": "git+ssh://git@github.com/dmarcos/three-bmfont-text.git#1babdf8507c731a18f8af3b807292e2b9740955e", + "version": "2.4.0", + "resolved": "git+ssh://git@github.com/dmarcos/three-bmfont-text.git#21d017046216e318362c48abd1a48bddfb6e0733", + "integrity": "sha512-lIMa1n+QKNU1f/LZgtS1oUGpoop3MuVXrUr5ybZOUR3+Jk//zjqScnQpHml6MWyvZzL8A5/1Hd8Tsqd3M1kudA==", + "license": "MIT", "dependencies": { "array-shuffle": "^1.0.1", "inherits": "^2.0.1", @@ -25565,11 +25624,14 @@ "nice-color-palettes": "^1.0.1", "object-assign": "^4.0.1", "quad-indices": "^2.0.1", - "three-buffer-vertex-data": "github:dmarcos/three-buffer-vertex-data#69378fc58daf27d3b1d930df9f233473e4a4818c" + "three-buffer-vertex-data": "dmarcos/three-buffer-vertex-data#69378fc58daf27d3b1d930df9f233473e4a4818c" } }, "node_modules/three-buffer-vertex-data": { + "version": "1.1.0", "resolved": "git+ssh://git@github.com/dmarcos/three-buffer-vertex-data.git#69378fc58daf27d3b1d930df9f233473e4a4818c", + "integrity": "sha512-ZPCCbGfueRzd2/YwH136UnVN+N11Mvxu7uPaEzIdtuk0m5HPs1LGXOM5hOkpxamjvqSC6MDJ3nd11grGi7sMKw==", + "license": "MIT", "dependencies": { "flatten-vertex-data": "^1.0.0" } @@ -25968,9 +26030,19 @@ } }, "node_modules/ua-parser-js": { - "version": "0.7.24", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.24.tgz", - "integrity": "sha512-yo+miGzQx5gakzVK3QFfN0/L9uVhosXBBO7qmnk7c2iw1IhL212wfA3zbnI54B0obGwC/5NWub/iT9sReMx+Fw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.2.tgz", + "integrity": "sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], "engines": { "node": "*" } @@ -30621,16 +30693,6 @@ "prop-types": "^15.7.2" } }, - "@material-ui/utils": { - "version": "4.11.2", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.2.tgz", - "integrity": "sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA==", - "requires": { - "@babel/runtime": "^7.4.4", - "prop-types": "^15.7.2", - "react-is": "^16.8.0 || ^17.0.0" - } - }, "hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -30641,12 +30703,34 @@ } } }, + "@material-ui/lab": { + "version": "4.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@material-ui/lab/-/lab-4.0.0-alpha.61.tgz", + "integrity": "sha512-rSzm+XKiNUjKegj8bzt5+pygZeckNLOr+IjykH8sYdVk7dE9y2ZuUSofiMV2bJk3qU+JHwexmw+q0RyNZB9ugg==", + "requires": { + "@babel/runtime": "^7.4.4", + "@material-ui/utils": "^4.11.3", + "clsx": "^1.0.4", + "prop-types": "^15.7.2", + "react-is": "^16.8.0 || ^17.0.0" + } + }, "@material-ui/types": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz", "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==", "requires": {} }, + "@material-ui/utils": { + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.3.tgz", + "integrity": "sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg==", + "requires": { + "@babel/runtime": "^7.4.4", + "prop-types": "^15.7.2", + "react-is": "^16.8.0 || ^17.0.0" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -30727,6 +30811,12 @@ } } }, + "@popperjs/core": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.0.tgz", + "integrity": "sha512-zrsUxjLOKAzdewIDRWy9nsV1GQsKBCWaGwsZQlCgr6/q+vjyZhFgqedLfFBuI9anTPEUT4APq9Mu0SZBTzIcGQ==", + "peer": true + }, "@rollup/plugin-node-resolve": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", @@ -31648,9 +31738,9 @@ } }, "aframe": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/aframe/-/aframe-1.0.4.tgz", - "integrity": "sha512-iG/4VyRt22zUPxDsFjP4SHUXNPGIStM2hHX/iPblht6dtN8m09e7LAaFq4iQdXoT0EkZBWEVmXVBF1J7Tca3QQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/aframe/-/aframe-1.3.0.tgz", + "integrity": "sha512-f6OQaDf49SzdSxVskJPvPWldOwHpYMsGttmQHhU6FRiASsnyULKG1nqZom9pDuS3fFYEzQVqRMakQ2AhXeLkFg==", "requires": { "custom-event-polyfill": "^1.0.6", "debug": "github:ngokevin/debug#noTimestamp", @@ -31661,9 +31751,9 @@ "present": "0.0.6", "promise-polyfill": "^3.1.0", "super-animejs": "^3.1.0", - "super-three": "^0.111.6", - "three-bmfont-text": "github:dmarcos/three-bmfont-text#1babdf8507c731a18f8af3b807292e2b9740955e", - "webvr-polyfill": "^0.10.10" + "super-three": "^0.137.0", + "three-bmfont-text": "github:dmarcos/three-bmfont-text#21d017046216e318362c48abd1a48bddfb6e0733", + "webvr-polyfill": "^0.10.12" } }, "aframe-animation-component": { @@ -33019,9 +33109,10 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "bootstrap": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz", - "integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw==" + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", + "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", + "requires": {} }, "brace": { "version": "0.11.1", @@ -34628,7 +34719,7 @@ } }, "debug": { - "version": "git+ssh://git@github.com/ngokevin/debug.git#ef5f8e66d49ce8bc64c6f282c15f8b7164409e3a", + "version": "https://github.com/ngokevin/debug.git#ef5f8e66d49ce8bc64c6f282c15f8b7164409e3a", "from": "debug@github:ngokevin/debug#noTimestamp" }, "decamelize": { @@ -35033,7 +35124,7 @@ } }, "document-register-element": { - "version": "git+ssh://git@github.com/dmarcos/document-register-element.git#8ccc532b7f3744be954574caf3072a5fd260ca90", + "version": "https://github.com/dmarcos/document-register-element.git#8ccc532b7f3744be954574caf3072a5fd260ca90", "from": "document-register-element@github:dmarcos/document-register-element#8ccc532b7f3744be954574caf3072a5fd260ca90" }, "dom-converter": { @@ -44992,9 +45083,9 @@ } }, "react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -45696,14 +45787,11 @@ } }, "redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", + "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", "requires": { - "lodash": "^4.2.1", - "lodash-es": "^4.2.1", - "loose-envify": "^1.1.0", - "symbol-observable": "^1.0.3" + "@babel/runtime": "^7.9.2" } }, "redux-devtools": { @@ -48074,9 +48162,9 @@ "integrity": "sha512-6MFAFJDRuvwkovxQZPruuyHinTa4rgj4hNLOndjcYYhZLckoXtVRY9rJPuq8p6c/tgZJrFYEAYAfJ2/hhNtUCA==" }, "super-three": { - "version": "0.111.6", - "resolved": "https://registry.npmjs.org/super-three/-/super-three-0.111.6.tgz", - "integrity": "sha512-/OJTOBpmm7MRx8R0G5Zr9sX8EqsELy7SwATb5n0FP145QsrP134pY2W489sfkJYqZmGkpHmG1ulQ0M94icThBw==" + "version": "0.137.0", + "resolved": "https://registry.npmjs.org/super-three/-/super-three-0.137.0.tgz", + "integrity": "sha512-8jM8DiYiXQoalUoeFRxKWbW6KFQo3GFwgw+3vE2y6SJU/einw+JvuvgK+WhbIYRfz4LQV68nyOQ2eEZqAuouGw==" }, "supports-color": { "version": "5.5.0", @@ -48173,7 +48261,8 @@ "symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "dev": true }, "symbol-tree": { "version": "3.2.4", @@ -48549,8 +48638,9 @@ "integrity": "sha512-eOEXnZeE1FDV0XgL1u08auIP13jxdN9LQBAEmlErYzMxtIIfuGIAZbijOyookALUhqVzVOx0Tywj6n192VM+nQ==" }, "three-bmfont-text": { - "version": "git+ssh://git@github.com/dmarcos/three-bmfont-text.git#1babdf8507c731a18f8af3b807292e2b9740955e", - "from": "three-bmfont-text@github:dmarcos/three-bmfont-text#1babdf8507c731a18f8af3b807292e2b9740955e", + "version": "git+ssh://git@github.com/dmarcos/three-bmfont-text.git#21d017046216e318362c48abd1a48bddfb6e0733", + "integrity": "sha512-lIMa1n+QKNU1f/LZgtS1oUGpoop3MuVXrUr5ybZOUR3+Jk//zjqScnQpHml6MWyvZzL8A5/1Hd8Tsqd3M1kudA==", + "from": "three-bmfont-text@github:dmarcos/three-bmfont-text#21d017046216e318362c48abd1a48bddfb6e0733", "requires": { "array-shuffle": "^1.0.1", "inherits": "^2.0.1", @@ -48558,12 +48648,13 @@ "nice-color-palettes": "^1.0.1", "object-assign": "^4.0.1", "quad-indices": "^2.0.1", - "three-buffer-vertex-data": "github:dmarcos/three-buffer-vertex-data#69378fc58daf27d3b1d930df9f233473e4a4818c" + "three-buffer-vertex-data": "dmarcos/three-buffer-vertex-data#69378fc58daf27d3b1d930df9f233473e4a4818c" } }, "three-buffer-vertex-data": { "version": "git+ssh://git@github.com/dmarcos/three-buffer-vertex-data.git#69378fc58daf27d3b1d930df9f233473e4a4818c", - "from": "three-buffer-vertex-data@github:dmarcos/three-buffer-vertex-data#69378fc58daf27d3b1d930df9f233473e4a4818c", + "integrity": "sha512-ZPCCbGfueRzd2/YwH136UnVN+N11Mvxu7uPaEzIdtuk0m5HPs1LGXOM5hOkpxamjvqSC6MDJ3nd11grGi7sMKw==", + "from": "three-buffer-vertex-data@dmarcos/three-buffer-vertex-data#69378fc58daf27d3b1d930df9f233473e4a4818c", "requires": { "flatten-vertex-data": "^1.0.0" } @@ -48883,9 +48974,9 @@ "peer": true }, "ua-parser-js": { - "version": "0.7.24", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.24.tgz", - "integrity": "sha512-yo+miGzQx5gakzVK3QFfN0/L9uVhosXBBO7qmnk7c2iw1IhL212wfA3zbnI54B0obGwC/5NWub/iT9sReMx+Fw==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.2.tgz", + "integrity": "sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==" }, "uid-number": { "version": "0.0.6", diff --git a/package.json b/package.json index 2a59cd79..9d6bf530 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "myr", - "version": "3.1.0", + "version": "3.1.2", "private": false, "engines": { "node": "^12.18.2" @@ -18,12 +18,13 @@ "dependencies": { "@engaging-computing/aframe-physics-system": "^4.0.0", "@material-ui/core": "^4.12.3", - "aframe": "^1.0.4", + "@material-ui/lab": "^4.0.0-alpha.61", + "aframe": "^1.3.0", "aframe-animation-component": "^5.0.0", "aframe-environment-component": "^1.3.1", "aframe-extras": "^4.1.2", "aframe-react": "^4.4.0", - "bootstrap": "^4.6.0", + "bootstrap": "^5.1.3", "browserslist": "^4.6.2", "cannon": "^0.6.2", "create-react-app": "^4.0.1", @@ -33,7 +34,7 @@ "jquery": "^3.3.1", "qrcode": "^1.2.0", "qrcode.react": "^1.0.1", - "react": "^16.8.4", + "react": "^16.14.0", "react-ace": "^6.0.0", "react-color": "^2.19.3", "react-dom": "^16.2.0", @@ -43,13 +44,13 @@ "react-router-dom": "^4.2.2", "react-select": "^3.0.4", "reactour": "^1.18.6", - "redux": "^3.7.2", + "redux": "^4.2.0", "redux-thunk": "^2.3.0", "socket.io-client": "^4.4.1", "source-map-explorer": "^2.0.0", "styled-components": "^5.3.3", "three": "^0.126.1", - "ua-parser-js": "^0.7.24" + "ua-parser-js": "^1.0.2" }, "scripts": { "start": "react-scripts start", diff --git a/src/actions/collectionActions.js b/src/actions/collectionActions.js index 11d1e83c..071202c9 100644 --- a/src/actions/collectionActions.js +++ b/src/actions/collectionActions.js @@ -15,6 +15,9 @@ export function asyncCollections(uid) { if (uid) { let userCollections = []; fetch(collectRef, {headers: {"x-access-token": uid}}).then((data) => { + if(data.status === 204){ + return; + } data.json().then((data) => { data.forEach((doc) => { userCollections.push(doc); diff --git a/src/components/editor/Editor.js b/src/components/editor/Editor.js index 638c2f5d..268965b6 100644 --- a/src/components/editor/Editor.js +++ b/src/components/editor/Editor.js @@ -95,7 +95,7 @@ class Editor extends Component { editorProps={{ $blockScrolling: Infinity, }} - height="90vh" + height="88vh" mode="javascript" name="ace-editor" // eslint-disable-next-line diff --git a/src/components/editor/FontSize.js b/src/components/editor/FontSize.js index 98bb51a5..80ee922b 100644 --- a/src/components/editor/FontSize.js +++ b/src/components/editor/FontSize.js @@ -20,6 +20,7 @@ class FontSize extends React.Component {
} >Chrome on Android may have unexpected behavior. We recommend you switch to Firefox for the full experience. : null} + + ) +} + +export default AndroidNotification; \ No newline at end of file diff --git a/src/components/structural/WelcomeScreen.js b/src/components/structural/WelcomeScreen.js index 1dca3fad..95739f83 100644 --- a/src/components/structural/WelcomeScreen.js +++ b/src/components/structural/WelcomeScreen.js @@ -14,6 +14,7 @@ import CourseSelect from "../courses/CourseSelect.js"; import { withStyles } from "@material-ui/core/styles"; import "../../css/WelcomeScreen.css"; +import CookieHandler from "../../utils/CookieHandler"; /** * @returns {object} Center the Welcome Screen @@ -89,71 +90,29 @@ class Welcome extends React.Component { * So if user hasn't visisted the MYR, toggle the state to true. */ componentDidMount() { - if (!this.getCookie("hasVisited")) { + if (!CookieHandler.getCookie("hasVisited")) { this.props.handleWelcomeToggle(); } } - /** - * Get value of cookie - * @param {string} cookieName name of cookie - * @returns {string} value of cookie if it exist, return empty string otherwise - */ - getCookie = (cookieName) => { - let name = cookieName + "="; - let decodedCookie = decodeURIComponent(document.cookie); - let ca = decodedCookie.split(";"); - for (let i = 0; i < ca.length; i++) { - let c = ca[i]; - while (c.charAt(0) === " ") { - c = c.substring(1); - } - if (c.indexOf(name) === 0) { - return c.substring(name.length, c.length); - } - } - return ""; - } - - /** - * If the user is first visiting the MYR, set "hasVisisted" to true - * and set the expiration date to current date + 24 hrs - * So it will re-appear after 24 hrs - */ - setCookie = () => { - if (!this.getCookie("hasVisited")) { - let date = new Date(); - date.setTime(date.getTime() + (1000 * 60 * 60 * 24)); - let expiration = "; expires=" + date.toGMTString(); - let cookie = "hasVisited=true" + expiration; - document.cookie = cookie; - } - } - /** * Handler for when the welcome screen is close either by close button or clicking outside of modal */ handleClose = () => { - this.setCookie(); + CookieHandler.setCookie("hasVisited"); this.props.handleWelcomeToggle(); }; - /** - * Handler for when user click "never again" button - * It sets a long expiration date so it will "never" expireds - */ - neverAgainCookie = () => { - document.cookie = "hasVisited=true; expires=Thu, 31 Dec 2099 12:00:00 UTC;"; - this.handleClose(); - } - /** * @returns {*} Button with don't show again option */ neverAgain = () => { return ( @@ -164,7 +123,7 @@ class Welcome extends React.Component { * Handler for when user click on example project button */ handleProjectToggle = () => { - this.setCookie(); + CookieHandler.setCookie("hasVisited"); this.setState({ projectsOpen: !this.state.projectsOpen }); this.setState({ projectTab: "b" }); }; @@ -173,7 +132,7 @@ class Welcome extends React.Component { * Handler for when user click on courses button */ handleCoursesToggle = () => { - this.setCookie(); + CookieHandler.setCookie("hasVisited"); this.setState({ coursesOpen: !this.state.coursesOpen }); }; @@ -181,7 +140,7 @@ class Welcome extends React.Component { * Handler for when user click on tour button */ handleTourToggle = () => { - this.setCookie(); + CookieHandler.setCookie("hasVisited"); this.setState({ tourOpen: !this.state.tourOpen }); }; @@ -216,7 +175,7 @@ class Welcome extends React.Component { href="/reference" target="_blank" rel="noopener noreferrer" - onClick={this.setCookie} + onClick={()=>{CookieHandler.setCookie("hasVisited");}} className="welcome-btn"> help Open the Reference @@ -252,7 +211,7 @@ class Welcome extends React.Component { href="https://github.com/engaging-computing/MYR" target="_blank" rel="noopener noreferrer" - onClick={this.setCookie} + onClick={()=>{CookieHandler.setCookie("hasVisited");}} className="welcome-btn"> code Visit our GitHub @@ -322,7 +281,7 @@ class Welcome extends React.Component {
-
+

MYR is an educational tool that strikes a balance with the ease of use and challenge. We drew inspiration from Logo Turtle and Processing to provide a beginner friendly experience for teaching and learning with MYR. If you want to learn more about MYR itself, visit our about page.

Within the editor you can create 3D scenes using JavaScript and the MYR API. You can then view your scene in the viewer using a computer, tablet, smartphone, or a VR headset.

diff --git a/src/components/structural/header/ProjectView.js b/src/components/structural/header/ProjectView.js index 5ffb0e5a..0294c522 100644 --- a/src/components/structural/header/ProjectView.js +++ b/src/components/structural/header/ProjectView.js @@ -373,13 +373,15 @@ class Project extends React.Component { * @returns 1 if project a should come before project b, -1 if b should come before a */ projectSort = (a,b)=>{ - if(a.name.toUpperCase() < b.name.toUpperCase()) - { - return -1; - } - else if(a.name.toUpperCase() > b.name.toUpperCase()) - { - return 1; + if(a.name && b.name) { + if(a.name.toUpperCase() < b.name.toUpperCase()) + { + return -1; + } + else if(a.name.toUpperCase() > b.name.toUpperCase()) + { + return 1; + } } else if(a.updateTime > b.updateTime) { diff --git a/src/containers/ReferenceExample.js b/src/containers/ReferenceExample.js index fbf279ac..8ae32261 100644 --- a/src/containers/ReferenceExample.js +++ b/src/containers/ReferenceExample.js @@ -21,6 +21,7 @@ ReferenceExample.propTypes = { const mapStateToProps = state => ({ editor: state.editor, user: state.user.user, + userSettings: state.user.settings, scene: state.scene, projects: state.project, courses: state.courses, diff --git a/src/css/KeyboardShortcut.css b/src/css/KeyboardShortcut.css index 805a8e0b..65b0437f 100644 --- a/src/css/KeyboardShortcut.css +++ b/src/css/KeyboardShortcut.css @@ -3,11 +3,16 @@ } .title { - font-size:large + font-size:large; } .shortcut { - font-size:xx-small + font-size:xx-small; +} + +.shortcut-button { + height: 34px; + width: 80px; } .right { @@ -21,17 +26,18 @@ } .font-button { - height:33px; - width:70px; + height:34px; + width:80px; } .font { display: inline-block; - margin-left:2px; + margin-left: 4px; } .whole-keyboard { display: inline-block; + margin-left: 1px; } .select { diff --git a/src/myr/tour.js b/src/myr/tour.js index 45f80d05..8bea0c14 100644 --- a/src/myr/tour.js +++ b/src/myr/tour.js @@ -58,4 +58,12 @@ export const TourSteps = [ selector: "#user", content: "You can log in with a Google account in order to save your scenes.", }, + { + selector: "#keyboard-shortcut", + content: "View all of the keyboard shortcuts available to you." + }, + { + selector: "#font-size", + content: "Change the font size within the editor." + } ]; \ No newline at end of file diff --git a/src/utils/CookieHandler.js b/src/utils/CookieHandler.js new file mode 100644 index 00000000..b4b05505 --- /dev/null +++ b/src/utils/CookieHandler.js @@ -0,0 +1,45 @@ +/** + * @param {*} cookieName name of the cookie being fetched + * @returns {string} value of the cookie, empty string if it doesn't exist + */ +const getCookie = (cookieName) => { + let name = cookieName + "="; + let decodedCookie = decodeURIComponent(document.cookie); + let ca = decodedCookie.split(";"); + for (let i = 0; i < ca.length; i++) { + let c = ca[i]; + while (c.charAt(0) === " ") { + c = c.substring(1); + } + if (c.indexOf(name) === 0) { + return c.substring(name.length, c.length); + } + } + return ""; +}; + +/** + * @param {*} cookieName name of cookie being set + */ +const setCookie = (cookieName) => { + if (!getCookie(cookieName)) { + let date = new Date(); + date.setTime(date.getTime() + (1000 * 60 * 60 * 24)); + let expiration = "; expires=" + date.toGMTString(); + let cookie = cookieName + "=true" + expiration; + document.cookie = cookie; + } +}; + +/** + * @param {*} cookieName name of cookie being set to never again + */ +const neverAgainCookie = (cookieName) => { + document.cookie = cookieName + "=true; expires=Thu, 31 Dec 2099 12:00:00 UTC;"; +}; + +export default { + getCookie, + setCookie, + neverAgainCookie +}; \ No newline at end of file