This requires you to have Node.js installed.
In your own Node.js environment/application:
npm install https://github.com/LLK/scratch-storage.git
If you want to edit/play yourself (requires Git):
git clone https://github.com/LLK/scratch-storage.git
cd scratch-storage
npm install
<script src="scratch-storage/dist/web/scratch-storage.js"></script>
<script>
var storage = new Scratch.Storage();
// continue to "Storage API Quick Start" section below
</script>
var storage = require('scratch-storage');
// continue to "Storage API Quick Start" section below
Once you have an instance of scratch-storage
, add some web sources. For each source you'll need to provide a function
to generate a URL for a supported type of asset:
/**
* @param {Asset} asset - calculate a URL for this asset.
* @returns {string} a URL to download a project asset (PNG, WAV, etc.)
*/
var getAssetUrl = function (asset) {
var assetUrlParts = [
'https://assets.example.com/path/to/assets/',
asset.assetId,
'.',
asset.dataFormat,
'/get/'
];
return assetUrlParts.join('');
};
Then, let the storage module know about your source:
storage.addWebSource(
[AssetType.ImageVector, AssetType.ImageBitmap, AssetType.Sound],
getAssetUrl);
If you're using ES6 you may be able to simplify all of the above quite a bit:
storage.addWebSource(
[AssetType.ImageVector, AssetType.ImageBitmap, AssetType.Sound],
asset => `https://assets.example.com/path/to/assets/${asset.assetId}.${asset.dataFormat}/get/`);
Once the storage module is aware of the sources you need, you can start loading assets:
storage.load(AssetType.Sound, soundId).then(function (soundAsset) {
// `soundAsset` is an `Asset` object. File contents are stored in `soundAsset.data`.
});
If you'd like to use scratch-storage
with scratch-vm
you must "attach" the storage module to the VM:
vm.attachStorage(storage);
To run all tests:
npm test
To show test coverage:
npm run coverage
We provide Scratch free of charge, and want to keep it that way! Please consider making a donation to support our continued engineering, design, community, and resource development efforts. Donations of any size are appreciated. Thank you!