diff --git a/src/packager/P4.svelte b/src/packager/P4.svelte index 845425c..8359cee 100644 --- a/src/packager/P4.svelte +++ b/src/packager/P4.svelte @@ -2,13 +2,137 @@ import ProjectPackager from './packager'; import downloadFile from './download-file'; + let projectId = '1'; + let turbo = false; + let interpolation = false; + let framerate = 30; + let highQualityPen = false; + let width = 480; + let height = 360; + let autoplay = false; + let runtimeOptions = { + maxClones: 300, + fencing: true, + miscLimits: true + }; + let compilerOptions = { + enabled: true, + warpTimer: false + }; + let backgroundColor = '#000000'; + let textColor = '#ffffff'; + let addons = false; + const pack = async () => { const packager = new ProjectPackager(); - await packager.loadProjectById('1'); + await packager.loadProjectById(projectId); await packager.loadResources(); const result = await packager.package(); - downloadFile(result, 'test.html'); + downloadFile(result, 'project.html'); }; - + + +
+

TurboWarp Packager

+ +

We're currently rewriting the packager to make it faster, more customizable, and more maintainable. Noteworthy changes:

+ + +

Project Options

+ + +

Runtime Options

+ + + + + + + + + + +

Compiler Options

+ + + +

Appearance

+ + + +

Addons

+ + + +
+ diff --git a/src/packager/packager.js b/src/packager/packager.js index c0a28ab..e020307 100644 --- a/src/packager/packager.js +++ b/src/packager/packager.js @@ -1,5 +1,12 @@ import downloadProject from './downloader'; +const readAsDataURL = (buffer) => new Promise((resolve, reject) => { + const fr = new FileReader(); + fr.onload = () => resolve(fr.result); + fr.onerror = () => reject(new Error('Cannot read as URL')); + fr.readAsDataURL(buffer); +}); + export class Packager { constructor () { this.projectSource = null; @@ -7,8 +14,8 @@ export class Packager { async loadProjectById (id) { const project = await downloadProject(id); - const buffer = await project.asArrayBuffer(); - this.projectSource = buffer; + const blob = await project.asBlob(); + this.projectSource = blob; } async loadResources () { @@ -131,18 +138,9 @@ export class Packager { const scaffolding = new Scaffolding.Scaffolding(); scaffolding.setup(); scaffolding.appendTo(appElement); - ScaffoldingAddons.run(scaffolding); const {storage, vm} = scaffolding; - storage.addWebStore( - [storage.AssetType.Project], - (asset) => "https://projects.scratch.mit.edu/" + asset.assetId - ); - storage.addWebStore( - [storage.AssetType.ImageVector, storage.AssetType.ImageBitmap, storage.AssetType.Sound], - (asset) => "https://assets.scratch.mit.edu/internalapi/asset/" + asset.assetId + "." + asset.dataFormat + "/get/" - ); const setProgress = (progress) => { loadingInner.style.width = progress * 100 + "%"; } @@ -152,9 +150,8 @@ export class Packager { setProgress(0.1); const getProjectJSON = async () => { - const PROJECT_ID = '413072152'; - const asset = await storage.load(Scaffolding.Storage.AssetType.Project, PROJECT_ID); - return asset.data; + const res = await fetch(${JSON.stringify(await readAsDataURL(this.projectSource))}); + return res.arrayBuffer(); }; const run = async () => {