mirror of
https://github.com/google/blockly.git
synced 2026-01-07 17:10:11 +01:00
* feat: implement basic IPaster interface * feat: add pasters for blocks and workspace comments
32 lines
923 B
TypeScript
32 lines
923 B
TypeScript
/**
|
|
* @license
|
|
* Copyright 2023 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import {BlockSvg} from '../block_svg.js';
|
|
import {CopyData} from '../interfaces/i_copyable';
|
|
import {IPaster} from '../interfaces/i_paster.js';
|
|
import {State, append} from '../serialization/blocks';
|
|
import {Coordinate} from '../utils/coordinate.js';
|
|
import {WorkspaceSvg} from '../workspace_svg.js';
|
|
|
|
export class BlockPaster implements IPaster<BlockCopyData, BlockSvg> {
|
|
paste(
|
|
copyData: BlockCopyData,
|
|
workspace: WorkspaceSvg,
|
|
coordinate?: Coordinate,
|
|
): BlockSvg | null {
|
|
if (!workspace.isCapacityAvailable(copyData.typeCounts!)) return null;
|
|
|
|
const state = copyData.saveInfo as State;
|
|
if (coordinate) {
|
|
state['x'] = coordinate.x;
|
|
state['y'] = coordinate.y;
|
|
}
|
|
return append(state, workspace, {recordUndo: true}) as BlockSvg;
|
|
}
|
|
}
|
|
|
|
export interface BlockCopyData extends CopyData {}
|