scratch-gui / src /lib /backpack /code-payload.js
soiz1's picture
Upload folder using huggingface_hub
8fd7a1d verified
import blockToImage from './block-to-image';
import createThumbnail from './thumbnail';
import {BLOCKS_DEFAULT_SCALE} from '../layout-constants';
import {Base64} from 'js-base64';
const codePayload = ({blockObjects, topBlockId}) => {
const payload = {
type: 'script', // Needs to match backpack-server type name
name: 'code', // All code currently gets the same name
mime: 'application/json',
// Backpack expects a base64 encoded string to store. Cannot use btoa because
// the code can contain characters outside the 0-255 code-point range supported by btoa
body: Base64.encode(JSON.stringify(blockObjects)) // Base64 encode the json
};
return blockToImage(topBlockId)
.then(createThumbnail)
.then(thumbnail => {
payload.thumbnail = thumbnail;
return payload;
});
};
const findTopBlock = payload => {
const blocks = payload.extensionURLs ? payload.blocks : payload;
return blocks.find(i => i.topLevel);
};
const placeInViewport = (payload, workspaceMetrics, isRtl) => {
const topBlock = findTopBlock(payload);
if (topBlock) {
const {scrollX, scrollY, scale} = workspaceMetrics || {
scrollX: 0,
scrollY: 0,
scale: BLOCKS_DEFAULT_SCALE
};
const posY = -scrollY + 30;
let posX;
if (isRtl) {
posX = scrollX + 30;
} else {
posX = -scrollX + 30;
}
topBlock.x = posX / scale;
topBlock.y = posY / scale;
}
return payload;
};
export {
codePayload as default,
findTopBlock,
placeInViewport
};