Compare commits

..
Author SHA1 Message Date
dependabot-preview[bot] e34a453f8f Merge pull request #5833 from LLK/dependabot/npm_and_yarn/scratch-paint-0.2.0-prerelease.20200529184518 2020-05-29 19:07:15 +00:00
dependabot-preview[bot] 17e6e59d89 Bump scratch-paint
Bumps [scratch-paint](https://github.com/LLK/scratch-paint) from 0.2.0-prerelease.20200519194740 to 0.2.0-prerelease.20200529184518.
- [Release notes](https://github.com/LLK/scratch-paint/releases)
- [Commits](https://github.com/LLK/scratch-paint/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-29 18:50:14 +00:00
dependabot-preview[bot] 568d642e48 Merge pull request #5829 from LLK/dependabot/npm_and_yarn/scratch-blocks-0.1.0-prerelease.20200528193139 2020-05-28 20:39:22 +00:00
dependabot-preview[bot] 9532c3dab2 Bump scratch-blocks
Bumps [scratch-blocks](https://github.com/LLK/scratch-blocks) from 0.1.0-prerelease.20200526135421 to 0.1.0-prerelease.20200528193139.
- [Release notes](https://github.com/LLK/scratch-blocks/releases)
- [Commits](https://github.com/LLK/scratch-blocks/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-28 20:23:15 +00:00
dependabot-preview[bot] 7d88656ec5 Merge pull request #5830 from LLK/dependabot/npm_and_yarn/scratch-audio-0.1.0-prerelease.20200528195344 2020-05-28 20:20:26 +00:00
dependabot-preview[bot] a0abf3ca19 Bump scratch-audio
Bumps [scratch-audio](https://github.com/LLK/scratch-audio) from 0.1.0-prerelease.20190925183642 to 0.1.0-prerelease.20200528195344.
- [Release notes](https://github.com/LLK/scratch-audio/releases)
- [Commits](https://github.com/LLK/scratch-audio/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-28 20:10:53 +00:00
dependabot-preview[bot] d86db2c66a Merge pull request #5827 from LLK/dependabot/npm_and_yarn/scratch-l10n-3.9.20200528181319 2020-05-28 19:04:36 +00:00
dependabot-preview[bot] c342463415 Bump scratch-l10n from 3.9.20200528120215 to 3.9.20200528181319
Bumps [scratch-l10n](https://github.com/LLK/scratch-l10n) from 3.9.20200528120215 to 3.9.20200528181319.
- [Release notes](https://github.com/LLK/scratch-l10n/releases)
- [Commits](https://github.com/LLK/scratch-l10n/compare/3.9.20200528120215...3.9.20200528181319)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-28 18:47:23 +00:00
dependabot-preview[bot] 6129c6dd46 Merge pull request #5818 from LLK/dependabot/npm_and_yarn/babel/cli-7.10.1 2020-05-28 15:16:50 +00:00
dependabot-preview[bot] 37beb338da Bump @babel/cli from 7.10.0 to 7.10.1
Bumps [@babel/cli](https://github.com/babel/babel/tree/HEAD/packages/babel-cli) from 7.10.0 to 7.10.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.10.1/packages/babel-cli)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-28 14:59:33 +00:00
dependabot-preview[bot] 7ba07c805e Merge pull request #5825 from LLK/dependabot/npm_and_yarn/scratch-l10n-3.9.20200528120215 2020-05-28 14:56:37 +00:00
dependabot-preview[bot] 6c03b8e034 Bump scratch-l10n from 3.9.20200527202656 to 3.9.20200528120215
Bumps [scratch-l10n](https://github.com/LLK/scratch-l10n) from 3.9.20200527202656 to 3.9.20200528120215.
- [Release notes](https://github.com/LLK/scratch-l10n/releases)
- [Commits](https://github.com/LLK/scratch-l10n/compare/3.9.20200527202656...3.9.20200528120215)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-28 14:38:53 +00:00
dependabot-preview[bot] 6e6288a2ab Merge pull request #5820 from LLK/dependabot/npm_and_yarn/babel/preset-react-7.10.1 2020-05-27 23:44:03 +00:00
dependabot-preview[bot] a9a4b1b79b Merge pull request #5819 from LLK/dependabot/npm_and_yarn/babel/plugin-proposal-object-rest-spread-7.10.1 2020-05-27 23:41:45 +00:00
dependabot-preview[bot] 54d7ce2b9b Bump @babel/preset-react from 7.6.3 to 7.10.1
Bumps [@babel/preset-react](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-react) from 7.6.3 to 7.10.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.10.1/packages/babel-preset-react)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-27 23:26:20 +00:00
dependabot-preview[bot] c17edd0e05 Bump @babel/plugin-proposal-object-rest-spread from 7.10.0 to 7.10.1
Bumps [@babel/plugin-proposal-object-rest-spread](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-proposal-object-rest-spread) from 7.10.0 to 7.10.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.10.1/packages/babel-plugin-proposal-object-rest-spread)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-27 23:24:32 +00:00
dependabot-preview[bot] 4d22bf270b Merge pull request #5817 from LLK/dependabot/npm_and_yarn/scratch-l10n-3.9.20200527202656 2020-05-27 20:59:17 +00:00
dependabot-preview[bot] 7206495177 Bump scratch-l10n from 3.9.20200527185330 to 3.9.20200527202656
Bumps [scratch-l10n](https://github.com/LLK/scratch-l10n) from 3.9.20200527185330 to 3.9.20200527202656.
- [Release notes](https://github.com/LLK/scratch-l10n/releases)
- [Commits](https://github.com/LLK/scratch-l10n/commits/3.9.20200527202656)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-27 20:41:39 +00:00
10 changed files with 343 additions and 340 deletions

No files matched your search

+2 -5
View File
@@ -5,11 +5,8 @@
/node_modules
npm-*
# TO REVERT: the scratch-desktop branch wants to build scratch-gui from source.
# To support that we need to un-ignore the /src directory.
# Once we merge the scratch-desktop branch into develop we should re-ignore /src here.
# We can also do that by omitting or reverting this commit during the merge.
# /src
# Double copies of all the static assets and tutorial gifs
/src
# Testing
/.nyc_output
+290 -73
View File
@@ -5,9 +5,9 @@
"requires": true,
"dependencies": {
"@babel/cli": {
"version": "7.10.0",
"resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.10.0.tgz",
"integrity": "sha512-AziyYI4DpD4NmAcBD2xnH8CcIgdRrCGlW7wVL9Ysk736PCSNn2ZZedAUMu5rx/SfMT7Yv+3UReHcWKeQ3wNd/Q==",
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.10.1.tgz",
"integrity": "sha512-cVB+dXeGhMOqViIaZs3A9OUAe4pKw4SBNdMw6yHJMYR7s4TB+Cei7ThquV/84O19PdIFWuwe03vxxES0BHUm5g==",
"dev": true,
"requires": {
"chokidar": "^2.1.8",
@@ -133,13 +133,89 @@
}
},
"@babel/helper-builder-react-jsx": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz",
"integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==",
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.1.tgz",
"integrity": "sha512-KXzzpyWhXgzjXIlJU1ZjIXzUPdej1suE6vzqgImZ/cpAsR/CC8gUcX4EWRmDfWz/cs6HOCPMBIJ3nKoXt3BFuw==",
"dev": true,
"requires": {
"@babel/types": "^7.3.0",
"esutils": "^2.0.0"
"@babel/helper-annotate-as-pure": "^7.10.1",
"@babel/types": "^7.10.1"
},
"dependencies": {
"@babel/helper-annotate-as-pure": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz",
"integrity": "sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==",
"dev": true,
"requires": {
"@babel/types": "^7.10.1"
}
},
"@babel/helper-validator-identifier": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
"integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==",
"dev": true
},
"@babel/types": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
"integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.1",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/helper-builder-react-jsx-experimental": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.1.tgz",
"integrity": "sha512-irQJ8kpQUV3JasXPSFQ+LCCtJSc5ceZrPFVj6TElR6XCHssi3jV8ch3odIrNtjJFRZZVbrOEfJMI79TPU/h1pQ==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.10.1",
"@babel/helper-module-imports": "^7.10.1",
"@babel/types": "^7.10.1"
},
"dependencies": {
"@babel/helper-annotate-as-pure": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz",
"integrity": "sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==",
"dev": true,
"requires": {
"@babel/types": "^7.10.1"
}
},
"@babel/helper-module-imports": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz",
"integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==",
"dev": true,
"requires": {
"@babel/types": "^7.10.1"
}
},
"@babel/helper-validator-identifier": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
"integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==",
"dev": true
},
"@babel/types": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
"integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.1",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/helper-compilation-targets": {
@@ -1231,21 +1307,57 @@
}
},
"@babel/plugin-proposal-object-rest-spread": {
"version": "7.10.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.0.tgz",
"integrity": "sha512-DOD+4TqMcRKJdAfN08+v9cciK5d0HW5hwTndOoKZEfEzU/mRrKboheD5mnWU4Q96VOnDdAj86kKjZhoQyG6s+A==",
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz",
"integrity": "sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.3",
"@babel/helper-plugin-utils": "^7.10.1",
"@babel/plugin-syntax-object-rest-spread": "^7.8.0",
"@babel/plugin-transform-parameters": "^7.9.5"
"@babel/plugin-transform-parameters": "^7.10.1"
},
"dependencies": {
"@babel/helper-get-function-arity": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz",
"integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==",
"dev": true,
"requires": {
"@babel/types": "^7.10.1"
}
},
"@babel/helper-plugin-utils": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
"integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==",
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
"integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==",
"dev": true
},
"@babel/helper-validator-identifier": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
"integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==",
"dev": true
},
"@babel/plugin-transform-parameters": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz",
"integrity": "sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg==",
"dev": true,
"requires": {
"@babel/helper-get-function-arity": "^7.10.1",
"@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/types": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
"integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.1",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
}
}
},
@@ -1382,12 +1494,20 @@
}
},
"@babel/plugin-syntax-jsx": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz",
"integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==",
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.1.tgz",
"integrity": "sha512-+OxyOArpVFXQeXKLO9o+r2I4dIoVoy6+Uu0vKELrlweDM3QJADZj+Z+5ERansZqIZBcLj42vHnDI8Rz9BnRIuQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0"
"@babel/helper-plugin-utils": "^7.10.1"
},
"dependencies": {
"@babel/helper-plugin-utils": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
"integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==",
"dev": true
}
}
},
"@babel/plugin-syntax-nullish-coalescing-operator": {
@@ -2066,43 +2186,139 @@
}
},
"@babel/plugin-transform-react-display-name": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz",
"integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==",
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.1.tgz",
"integrity": "sha512-rBjKcVwjk26H3VX8pavMxGf33LNlbocMHdSeldIEswtQ/hrjyTG8fKKILW1cSkODyRovckN/uZlGb2+sAV9JUQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0"
"@babel/helper-plugin-utils": "^7.10.1"
},
"dependencies": {
"@babel/helper-plugin-utils": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
"integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==",
"dev": true
}
}
},
"@babel/plugin-transform-react-jsx": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz",
"integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==",
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.1.tgz",
"integrity": "sha512-MBVworWiSRBap3Vs39eHt+6pJuLUAaK4oxGc8g+wY+vuSJvLiEQjW1LSTqKb8OUPtDvHCkdPhk7d6sjC19xyFw==",
"dev": true,
"requires": {
"@babel/helper-builder-react-jsx": "^7.3.0",
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/plugin-syntax-jsx": "^7.2.0"
"@babel/helper-builder-react-jsx": "^7.10.1",
"@babel/helper-builder-react-jsx-experimental": "^7.10.1",
"@babel/helper-plugin-utils": "^7.10.1",
"@babel/plugin-syntax-jsx": "^7.10.1"
},
"dependencies": {
"@babel/helper-plugin-utils": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
"integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==",
"dev": true
}
}
},
"@babel/plugin-transform-react-jsx-development": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.1.tgz",
"integrity": "sha512-XwDy/FFoCfw9wGFtdn5Z+dHh6HXKHkC6DwKNWpN74VWinUagZfDcEJc3Y8Dn5B3WMVnAllX8Kviaw7MtC5Epwg==",
"dev": true,
"requires": {
"@babel/helper-builder-react-jsx-experimental": "^7.10.1",
"@babel/helper-plugin-utils": "^7.10.1",
"@babel/plugin-syntax-jsx": "^7.10.1"
},
"dependencies": {
"@babel/helper-plugin-utils": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
"integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==",
"dev": true
}
}
},
"@babel/plugin-transform-react-jsx-self": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz",
"integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==",
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.1.tgz",
"integrity": "sha512-4p+RBw9d1qV4S749J42ZooeQaBomFPrSxa9JONLHJ1TxCBo3TzJ79vtmG2S2erUT8PDDrPdw4ZbXGr2/1+dILA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/plugin-syntax-jsx": "^7.2.0"
"@babel/helper-plugin-utils": "^7.10.1",
"@babel/plugin-syntax-jsx": "^7.10.1"
},
"dependencies": {
"@babel/helper-plugin-utils": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
"integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==",
"dev": true
}
}
},
"@babel/plugin-transform-react-jsx-source": {
"version": "7.5.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz",
"integrity": "sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==",
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.1.tgz",
"integrity": "sha512-neAbaKkoiL+LXYbGDvh6PjPG+YeA67OsZlE78u50xbWh2L1/C81uHiNP5d1fw+uqUIoiNdCC8ZB+G4Zh3hShJA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/plugin-syntax-jsx": "^7.2.0"
"@babel/helper-plugin-utils": "^7.10.1",
"@babel/plugin-syntax-jsx": "^7.10.1"
},
"dependencies": {
"@babel/helper-plugin-utils": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
"integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==",
"dev": true
}
}
},
"@babel/plugin-transform-react-pure-annotations": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.1.tgz",
"integrity": "sha512-mfhoiai083AkeewsBHUpaS/FM1dmUENHBMpS/tugSJ7VXqXO5dCN1Gkint2YvM1Cdv1uhmAKt1ZOuAjceKmlLA==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.10.1",
"@babel/helper-plugin-utils": "^7.10.1"
},
"dependencies": {
"@babel/helper-annotate-as-pure": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz",
"integrity": "sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==",
"dev": true,
"requires": {
"@babel/types": "^7.10.1"
}
},
"@babel/helper-plugin-utils": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
"integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==",
"dev": true
},
"@babel/helper-validator-identifier": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
"integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==",
"dev": true
},
"@babel/types": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
"integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.1",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/plugin-transform-regenerator": {
@@ -2551,16 +2767,26 @@
}
},
"@babel/preset-react": {
"version": "7.6.3",
"resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.6.3.tgz",
"integrity": "sha512-07yQhmkZmRAfwREYIQgW0HEwMY9GBJVuPY4Q12UC72AbfaawuupVWa8zQs2tlL+yun45Nv/1KreII/0PLfEsgA==",
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.10.1.tgz",
"integrity": "sha512-Rw0SxQ7VKhObmFjD/cUcKhPTtzpeviEFX1E6PgP+cYOhQ98icNqtINNFANlsdbQHrmeWnqdxA4Tmnl1jy5tp3Q==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/plugin-transform-react-display-name": "^7.0.0",
"@babel/plugin-transform-react-jsx": "^7.0.0",
"@babel/plugin-transform-react-jsx-self": "^7.0.0",
"@babel/plugin-transform-react-jsx-source": "^7.0.0"
"@babel/helper-plugin-utils": "^7.10.1",
"@babel/plugin-transform-react-display-name": "^7.10.1",
"@babel/plugin-transform-react-jsx": "^7.10.1",
"@babel/plugin-transform-react-jsx-development": "^7.10.1",
"@babel/plugin-transform-react-jsx-self": "^7.10.1",
"@babel/plugin-transform-react-jsx-source": "^7.10.1",
"@babel/plugin-transform-react-pure-annotations": "^7.10.1"
},
"dependencies": {
"@babel/helper-plugin-utils": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
"integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==",
"dev": true
}
}
},
"@babel/runtime": {
@@ -2666,9 +2892,9 @@
}
},
"@scratch/paper": {
"version": "0.11.20200506204754",
"resolved": "https://registry.npmjs.org/@scratch/paper/-/paper-0.11.20200506204754.tgz",
"integrity": "sha512-lvTClAzY8EXsoQLQjVVp09g2v3wBPnZ28ktiK1wSnhlDlvte8krqsSrEYjnuvHX+a8AgWuHLiF4FsaWSH/Lyjg==",
"version": "0.11.20200529164227",
"resolved": "https://registry.npmjs.org/@scratch/paper/-/paper-0.11.20200529164227.tgz",
"integrity": "sha512-wZJTmfTSQbqfD7zKRZ207R1qN5eFX9wnaP3Sy9sQvt0GmA2/6jcqIKIfQ9jAnZNpHTZhkw6sH/sdRtCMrl1ROg==",
"dev": true
},
"@testim/chrome-version": {
@@ -13018,15 +13244,6 @@
"react-lifecycles-compat": "^3.0.4"
}
},
"react-visibility-sensor": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/react-visibility-sensor/-/react-visibility-sensor-5.0.2.tgz",
"integrity": "sha512-7+1lr7oQOO2vKr5u/uxoDGFWAAy7lsDy2aJU3Zy1/OymI+TRqOBk8m2L8YE1B0UyfCDWxVAWO+aifVGqNOvqeQ==",
"dev": true,
"requires": {
"prop-types": "^15.6.2"
}
},
"read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -13704,9 +13921,9 @@
}
},
"scratch-audio": {
"version": "0.1.0-prerelease.20190925183642",
"resolved": "https://registry.npmjs.org/scratch-audio/-/scratch-audio-0.1.0-prerelease.20190925183642.tgz",
"integrity": "sha512-cvnNawIThkIKyMZdo+cRmYO+ndCG9dcQeaG8rTgok2iSMvG510OUs3DBnFz/GUncu+OryT1VKdeusEfwKf/+ow==",
"version": "0.1.0-prerelease.20200528195344",
"resolved": "https://registry.npmjs.org/scratch-audio/-/scratch-audio-0.1.0-prerelease.20200528195344.tgz",
"integrity": "sha512-BY1IiMMBj0WDs7jdYnOzBHE88AX3ltjs2XfINJ1VrIE4xn2vZvPgJAyw6ZCc2FDPRwTWLpCdhnlA1TBdaKKdiQ==",
"dev": true,
"requires": {
"audio-context": "1.0.1",
@@ -13715,9 +13932,9 @@
}
},
"scratch-blocks": {
"version": "0.1.0-prerelease.20200526135421",
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20200526135421.tgz",
"integrity": "sha512-B1n5sxsHpIwAyjvzmLnUUHfUp+P7rjktzWt0JeqklV0myxqm+KdxF+vLBsRtV2B2k+98/e4JmF5G5QvT8pMNUw==",
"version": "0.1.0-prerelease.20200528193139",
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20200528193139.tgz",
"integrity": "sha512-tv7zDTEL81I6sQeIDj2q7p5lLTvwYf+VwVfhgZ3R4YL4acLjRl1+OsjNG42cg+CbujefRzPcMQjwkW1a58K/wg==",
"dev": true,
"requires": {
"exports-loader": "0.6.3",
@@ -13725,9 +13942,9 @@
}
},
"scratch-l10n": {
"version": "3.9.20200527185330",
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.9.20200527185330.tgz",
"integrity": "sha512-FQdaGkYZg4mSwT/0LMySD25tGv29Pc1PFJCy3pFd8p6+6BggAwjiNfNbtkvi9lYbLEMjKahEOdSxA0xK/nz0mA==",
"version": "3.9.20200528181319",
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.9.20200528181319.tgz",
"integrity": "sha512-1K8rn9qMn1M/v9RKwmBgxOKG9cUYyXgOgEoWOonX4DNfGzk7GsykPuThqTZ3BHg6GtiW96lKpmjC2QqqkFeYoQ==",
"dev": true,
"requires": {
"@babel/cli": "^7.1.2",
@@ -13737,12 +13954,12 @@
}
},
"scratch-paint": {
"version": "0.2.0-prerelease.20200519194740",
"resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20200519194740.tgz",
"integrity": "sha512-4k2N0SDw8c4HV66L0uIK9gpKkFFa2nTFtQJHkkCDTteEgNECvDTJh4D/0djC/If7YzRvX2kqiHbZ0/NqtHvVhA==",
"version": "0.2.0-prerelease.20200529184518",
"resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20200529184518.tgz",
"integrity": "sha512-FEgV1yPeE/nk7DRUZ4TsR1YSltZ8OME1UCAVYMn05pAAMDgJh4cMDOP77R1HsjUdp8v0ldlGrnRAxkOwy3xevw==",
"dev": true,
"requires": {
"@scratch/paper": "0.11.20200506204754",
"@scratch/paper": "0.11.20200529164227",
"classnames": "2.2.5",
"keymirror": "0.1.1",
"lodash.bindall": "4.4.0",
+4 -5
View File
@@ -103,15 +103,14 @@
"react-test-renderer": "16.2.0",
"react-tooltip": "3.8.0",
"react-virtualized": "9.20.1",
"react-visibility-sensor": "5.0.2",
"redux": "3.7.2",
"redux-mock-store": "^1.2.3",
"redux-throttle": "0.1.1",
"rimraf": "^2.6.1",
"scratch-audio": "0.1.0-prerelease.20190925183642",
"scratch-blocks": "0.1.0-prerelease.20200526135421",
"scratch-l10n": "3.9.20200527185330",
"scratch-paint": "0.2.0-prerelease.20200519194740",
"scratch-audio": "0.1.0-prerelease.20200528195344",
"scratch-blocks": "0.1.0-prerelease.20200528193139",
"scratch-l10n": "3.9.20200528181319",
"scratch-paint": "0.2.0-prerelease.20200529184518",
"scratch-render": "0.1.0-prerelease.20200512203149",
"scratch-storage": "1.3.3",
"scratch-svg-renderer": "0.2.0-prerelease.20200507183648",
+7 -10
View File
@@ -4,7 +4,6 @@ import React from 'react';
import Box from '../box/box.jsx';
import PlayButton from '../../containers/play-button.jsx';
import ScratchImage from '../scratch-image/scratch-image.jsx';
import styles from './library-item.css';
import classNames from 'classnames';
@@ -37,12 +36,10 @@ class LibraryItemComponent extends React.PureComponent {
/>
</div>
) : null}
{this.props.iconSource ? (
<ScratchImage
className={styles.featuredImage}
imageSource={this.props.iconSource}
/>
) : null}
<img
className={styles.featuredImage}
src={this.props.iconURL}
/>
</div>
{this.props.insetIconURL ? (
<div className={styles.libraryItemInsetImageContainer}>
@@ -130,9 +127,9 @@ class LibraryItemComponent extends React.PureComponent {
onMouseEnter={this.props.showPlayButton ? this.props.onMouseEnter : null}
onMouseLeave={this.props.showPlayButton ? this.props.onMouseLeave : null}
>
<ScratchImage
<img
className={styles.libraryItemImage}
imageSource={this.props.iconSource}
src={this.props.iconURL}
/>
</Box>
</Box>
@@ -162,7 +159,7 @@ LibraryItemComponent.propTypes = {
extensionId: PropTypes.string,
featured: PropTypes.bool,
hidden: PropTypes.bool,
iconSource: ScratchImage.ImageSourcePropType,
iconURL: PropTypes.string,
insetIconURL: PropTypes.string,
internetConnectionRequired: PropTypes.bool,
isPlaying: PropTypes.bool,
+7 -62
View File
@@ -10,7 +10,6 @@ import Divider from '../divider/divider.jsx';
import Filter from '../filter/filter.jsx';
import TagButton from '../../containers/tag-button.jsx';
import Spinner from '../spinner/spinner.jsx';
import storage from '../../lib/storage';
import styles from './library.css';
@@ -30,61 +29,6 @@ const messages = defineMessages({
const ALL_TAG = {tag: 'all', intlLabel: messages.allTag};
const tagListPrefix = [ALL_TAG];
/**
* Find the AssetType which corresponds to a particular file extension. For example, 'png' => AssetType.ImageBitmap.
* @param {string} fileExtension - the file extension to look up.
* @returns {AssetType} - the AssetType corresponding to the extension, if any.
*/
const getAssetTypeForFileExtension = function (fileExtension) {
const compareOptions = {
sensitivity: 'accent',
usage: 'search'
};
for (const assetTypeId in storage.AssetType) {
const assetType = storage.AssetType[assetTypeId];
if (fileExtension.localeCompare(assetType.runtimeFormat, compareOptions) === 0) {
return assetType;
}
}
};
/**
* Figure out one or more icon(s) for a library item.
* If it's an animated thumbnail, this will return an array of `imageSource`.
* Otherwise it'll return just one `imageSource`.
* @param {object} item - either a library item or one of a library item's costumes.
* The latter is used internally as part of processing an animated thumbnail.
* @returns {LibraryItem.PropTypes.icons} - an `imageSource` or array of them, ready for `LibraryItem` & `ScratchImage`
*/
const getItemIcons = function (item) {
const costumes = (item.json && item.json.costumes) || item.costumes;
if (costumes) {
return costumes.map(getItemIcons);
}
if (item.rawURL) {
return {
uri: item.rawURL
};
}
if (item.assetId && item.dataFormat) {
return {
assetId: item.assetId,
assetType: getAssetTypeForFileExtension(item.dataFormat)
};
}
const md5ext = item.md5ext || item.md5 || item.baseLayerMD5;
if (md5ext) {
const [assetId, fileExtension] = md5ext.split('.');
return {
assetId: assetId,
assetType: getAssetTypeForFileExtension(fileExtension)
};
}
};
class LibraryComponent extends React.Component {
constructor (props) {
super(props);
@@ -264,9 +208,8 @@ class LibraryComponent extends React.Component {
})}
ref={this.setFilteredDataRef}
>
{this.state.loaded ? this.getFilteredData().map((dataItem, index) => {
const icons = getItemIcons(dataItem);
return (<LibraryItem
{this.state.loaded ? this.getFilteredData().map((dataItem, index) => (
<LibraryItem
bluetoothRequired={dataItem.bluetoothRequired}
collaborator={dataItem.collaborator}
description={dataItem.description}
@@ -274,7 +217,9 @@ class LibraryComponent extends React.Component {
extensionId={dataItem.extensionId}
featured={dataItem.featured}
hidden={dataItem.hidden}
icons={icons}
iconMd5={dataItem.md5}
iconRawURL={dataItem.rawURL}
icons={dataItem.json && dataItem.json.costumes}
id={index}
insetIconURL={dataItem.insetIconURL}
internetConnectionRequired={dataItem.internetConnectionRequired}
@@ -285,8 +230,8 @@ class LibraryComponent extends React.Component {
onMouseEnter={this.handleMouseEnter}
onMouseLeave={this.handleMouseLeave}
onSelect={this.handleSelect}
/>);
}) : (
/>
)) : (
<div className={styles.spinnerWrapper}>
<Spinner
large
@@ -1,138 +0,0 @@
import PropTypes from 'prop-types';
import React from 'react';
import VisibilitySensor from 'react-visibility-sensor';
import storage from '../../lib/storage';
class ScratchImage extends React.PureComponent {
static init () {
this._maxParallelism = 6;
this._currentJobs = 0;
this._pendingImages = new Set();
}
static loadPendingImages () {
if (this._currentJobs >= this._maxParallelism) {
// already busy
return;
}
// Find the first visible image. If there aren't any, find the first non-visible image.
let nextImage;
for (const image of this._pendingImages) {
if (image.isVisible) {
nextImage = image;
break;
} else {
nextImage = nextImage || image;
}
}
// If we found an image to load:
// 1) Remove it from the queue
// 2) Load the image
// 3) Pump the queue again
if (nextImage) {
this._pendingImages.delete(nextImage);
const imageSource = nextImage.props.imageSource;
++this._currentJobs;
storage
.load(imageSource.assetType, imageSource.assetId)
.then(asset => {
if (!nextImage.wasUnmounted) {
const dataURI = asset.encodeDataURI();
nextImage.setState({
imageURI: dataURI
});
}
--this._currentJobs;
this.loadPendingImages();
});
}
}
constructor (props) {
super(props);
this.state = {};
Object.assign(this.state, this._loadImageSource(props.imageSource));
}
componentWillReceiveProps (nextProps) {
const newState = this._loadImageSource(nextProps.imageSource);
this.setState(newState);
}
componentWillUnmount () {
this.wasUnmounted = true;
ScratchImage._pendingImages.delete(this);
}
/**
* Calculate the state changes necessary to load the image specified in the provided source info. If the component
* is mounted, call setState() with the return value of this function. If the component has not yet mounted, use
* the return value of this function as initial state for the component.
*
* @param {object} imageSource - the new source for the image, including either assetId or URI
* @returns {object} - the new state values, if any.
*/
_loadImageSource (imageSource) {
if (imageSource) {
if (imageSource.uri) {
ScratchImage._pendingImages.delete(this);
return {
imageURI: imageSource.uri,
lastRequestedAsset: null
};
}
if (this.state.lastRequestedAsset !== imageSource.assetId) {
ScratchImage._pendingImages.add(this);
return {
lastRequestedAsset: imageSource.assetId
};
}
}
// Nothing to do - don't change any state.
return {};
}
render () {
const {
imageSource: _imageSource,
...imgProps
} = this.props;
return (
<VisibilitySensor
intervalCheck
scrollCheck
>
{
({isVisible}) => {
this.isVisible = isVisible;
ScratchImage.loadPendingImages();
return (
<img
{...imgProps} // do this first in case it contains `src`
src={this.state.imageURI} // overrides imgProps.src if present
/>
);
}
}
</VisibilitySensor>
);
}
}
ScratchImage.ImageSourcePropType = PropTypes.oneOfType([
PropTypes.shape({
assetId: PropTypes.string.isRequired,
assetType: PropTypes.oneOf(Object.values(storage.AssetType)).isRequired
}),
PropTypes.shape({
uri: PropTypes.string.isRequired
})
]);
ScratchImage.propTypes = {
imageSource: ScratchImage.ImageSourcePropType.isRequired
};
ScratchImage.init();
export default ScratchImage;
+26 -21
View File
@@ -21,7 +21,6 @@ class LibraryItem extends React.PureComponent {
'startRotatingIcons',
'stopRotatingIcons'
]);
this.hasIconsArray = Array.isArray(props.icons);
this.state = {
iconIndex: 0,
isRotatingIcon: false
@@ -54,7 +53,7 @@ class LibraryItem extends React.PureComponent {
// only show hover effects on the item if not showing a play button
if (!this.props.showPlayButton) {
this.props.onMouseEnter(this.props.id);
if (this.hasIconsArray) {
if (this.props.icons && this.props.icons.length) {
this.stopRotatingIcons();
this.setState({
isRotatingIcon: true
@@ -66,7 +65,7 @@ class LibraryItem extends React.PureComponent {
// only show hover effects on the item if not showing a play button
if (!this.props.showPlayButton) {
this.props.onMouseLeave(this.props.id);
if (this.hasIconsArray) {
if (this.props.icons && this.props.icons.length) {
this.setState({
isRotatingIcon: false
}, this.stopRotatingIcons);
@@ -92,22 +91,23 @@ class LibraryItem extends React.PureComponent {
const nextIconIndex = (this.state.iconIndex + 1) % this.props.icons.length;
this.setState({iconIndex: nextIconIndex});
}
curIconSource () {
if (this.hasIconsArray) {
if (this.state.isRotatingIcon &&
this.state.iconIndex < this.props.icons.length &&
this.props.icons[this.state.iconIndex]) {
// multiple icons, currently animating: show current frame
return this.props.icons[this.state.iconIndex];
}
// multiple icons, not currently animating: show first frame
return this.props.icons[0];
curIconMd5 () {
const iconMd5Prop = this.props.iconMd5;
if (this.props.icons &&
this.state.isRotatingIcon &&
this.state.iconIndex < this.props.icons.length) {
const icon = this.props.icons[this.state.iconIndex] || {};
return icon.md5ext || // 3.0 library format
icon.baseLayerMD5 || // 2.0 library format, TODO GH-5084
iconMd5Prop;
}
// single icon
return this.props.icons;
return iconMd5Prop;
}
render () {
const iconSource = this.curIconSource();
const iconMd5 = this.curIconMd5();
const iconURL = iconMd5 ?
`https://cdn.assets.scratch.mit.edu/internalapi/asset/${iconMd5}/get/` :
this.props.iconRawURL;
return (
<LibraryItemComponent
bluetoothRequired={this.props.bluetoothRequired}
@@ -117,7 +117,8 @@ class LibraryItem extends React.PureComponent {
extensionId={this.props.extensionId}
featured={this.props.featured}
hidden={this.props.hidden}
iconSource={iconSource}
iconURL={iconURL}
icons={this.props.icons}
id={this.props.id}
insetIconURL={this.props.insetIconURL}
internetConnectionRequired={this.props.internetConnectionRequired}
@@ -148,10 +149,14 @@ LibraryItem.propTypes = {
extensionId: PropTypes.string,
featured: PropTypes.bool,
hidden: PropTypes.bool,
icons: PropTypes.oneOfType([
LibraryItemComponent.propTypes.iconSource, // single icon
PropTypes.arrayOf(LibraryItemComponent.propTypes.iconSource) // rotating icons
]),
iconMd5: PropTypes.string,
iconRawURL: PropTypes.string,
icons: PropTypes.arrayOf(
PropTypes.shape({
baseLayerMD5: PropTypes.string, // 2.0 library format, TODO GH-5084
md5ext: PropTypes.string // 3.0 library format
})
),
id: PropTypes.number.isRequired,
insetIconURL: PropTypes.string,
internetConnectionRequired: PropTypes.bool,
-2
View File
@@ -1,6 +1,5 @@
import GUI from './containers/gui.jsx';
import AppStateHOC from './lib/app-state-hoc.jsx';
import TitledHOC from './lib/titled-hoc.jsx';
import GuiReducer, {guiInitialState, guiMiddleware, initEmbedded, initFullScreen, initPlayer} from './reducers/gui';
import LocalesReducer, {localesInitialState, initLocale} from './reducers/locales';
import {ScratchPaintReducer} from 'scratch-paint';
@@ -17,7 +16,6 @@ const guiReducers = {
export {
GUI as default,
AppStateHOC,
TitledHOC,
setAppElement,
guiReducers,
guiInitialState,
+6 -19
View File
@@ -1,23 +1,10 @@
import GoogleAnalytics from 'react-ga';
import log from './log';
const GA_ID = (process.env.GA_ID || window.GA_ID);
if (GA_ID) {
GoogleAnalytics.initialize(GA_ID, {
debug: (process.env.NODE_ENV !== 'production'),
titleCase: true,
sampleRate: (process.env.NODE_ENV === 'production') ? 100 : 0,
forceSSL: true
});
} else {
log.info('Disabling GA because GA_ID is not set.');
window.ga = () => {
// The `react-ga` module calls this function to implement all Google Analytics calls. Providing an empty
// function effectively disables `react-ga`. This is similar to the `testModeAPI` feature of `react-ga` except
// that `testModeAPI` logs the arguments of every call into an array. That's nice for testing purposes but
// would look like a memory leak in a live program.
};
}
GoogleAnalytics.initialize(process.env.GA_ID || window.GA_ID, {
debug: (process.env.NODE_ENV !== 'production'),
titleCase: true,
sampleRate: (process.env.NODE_ENV === 'production') ? 100 : 0,
forceSSL: true
});
export default GoogleAnalytics;
+1 -5
View File
@@ -193,11 +193,7 @@ describe('Working with costumes', () => {
.mouseMove(abbyElement)
.perform();
// wait for one of Abby's alternate costumes to appear
const src1 = await abbyElement.findElement({css: 'img'}).getAttribute('src');
await driver.sleep(300);
const src2 = await abbyElement.findElement({css: 'img'}).getAttribute('src');
const sourcesMatch = (src1 === src2);
await expect(sourcesMatch).toBeFalsy(); // 'src' attribute should have changed by now
await findByXpath('//img[@src="https://cdn.assets.scratch.mit.edu/internalapi/asset/45de34b47a2ce22f6f5d28bb35a44ff5.svg/get/"]');
const logs = await getLogs();
await expect(logs).toEqual([]);
});