diff --git a/plugins/cross-tab-copy-paste/package-lock.json b/plugins/cross-tab-copy-paste/package-lock.json index 777debea13..287f7eb4aa 100644 --- a/plugins/cross-tab-copy-paste/package-lock.json +++ b/plugins/cross-tab-copy-paste/package-lock.json @@ -9,13 +9,13 @@ "version": "4.0.3", "license": "Apache-2.0", "devDependencies": { - "blockly": "^10.0.0" + "blockly": "^10.2.0-beta.0" }, "engines": { "node": ">=8.17.0" }, "peerDependencies": { - "blockly": "^10.0.0" + "blockly": "^10.2.0-beta.0" } }, "node_modules/@tootallnate/once": { @@ -52,9 +52,9 @@ "dev": true }, "node_modules/blockly": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/blockly/-/blockly-10.0.0.tgz", - "integrity": "sha512-4A+dn2wkY0y44seSCPDYh2UJ4e1ATgfb/qWPS5fQ3+N7nmy+MW21HG/rf7bPWxUsoyfx/Afu75b/DYPWpg6qnQ==", + "version": "10.2.0-beta.0", + "resolved": "https://registry.npmjs.org/blockly/-/blockly-10.2.0-beta.0.tgz", + "integrity": "sha512-KL1P6J4QbxgE1vENHOemj+FzSCktfJmOpfjML6yj4fO/0zPlRPhl+YQNefXoCxl5Cm+qTPd/7UsVbKitgpNphw==", "dev": true, "dependencies": { "jsdom": "22.1.0" @@ -536,9 +536,9 @@ "dev": true }, "blockly": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/blockly/-/blockly-10.0.0.tgz", - "integrity": "sha512-4A+dn2wkY0y44seSCPDYh2UJ4e1ATgfb/qWPS5fQ3+N7nmy+MW21HG/rf7bPWxUsoyfx/Afu75b/DYPWpg6qnQ==", + "version": "10.2.0-beta.0", + "resolved": "https://registry.npmjs.org/blockly/-/blockly-10.2.0-beta.0.tgz", + "integrity": "sha512-KL1P6J4QbxgE1vENHOemj+FzSCktfJmOpfjML6yj4fO/0zPlRPhl+YQNefXoCxl5Cm+qTPd/7UsVbKitgpNphw==", "dev": true, "requires": { "jsdom": "22.1.0" diff --git a/plugins/cross-tab-copy-paste/package.json b/plugins/cross-tab-copy-paste/package.json index 164fb2cc61..8a9ef97243 100644 --- a/plugins/cross-tab-copy-paste/package.json +++ b/plugins/cross-tab-copy-paste/package.json @@ -42,10 +42,10 @@ "devDependencies": { "@blockly/dev-scripts": "^2.0.1", "@blockly/dev-tools": "^7.0.3", - "blockly": "^10.0.0" + "blockly": "^10.2.0-beta.0" }, "peerDependencies": { - "blockly": "^10.0.0" + "blockly": "^10.2.0-beta.0" }, "publishConfig": { "access": "public", diff --git a/plugins/cross-tab-copy-paste/src/index.js b/plugins/cross-tab-copy-paste/src/index.js index 521f6830c1..6a8f08b7cd 100644 --- a/plugins/cross-tab-copy-paste/src/index.js +++ b/plugins/cross-tab-copy-paste/src/index.js @@ -5,7 +5,6 @@ */ import * as Blockly from 'blockly/core'; -import {convertBlockToSaveInfo} from './utility'; /** @@ -75,9 +74,8 @@ export class CrossTabCopyPaste { }, callback: function( /** @type {!Blockly.ContextMenuRegistry.Scope} */ scope) { - const blockText = JSON.stringify( - convertBlockToSaveInfo(scope.block)); - localStorage.setItem('blocklyStash', blockText); + localStorage.setItem( + 'blocklyStash', JSON.stringify(scope.block.toCopyData())); }, scopeType: Blockly.ContextMenuRegistry.ScopeType.BLOCK, id: 'blockCopyToStorage', @@ -111,10 +109,9 @@ export class CrossTabCopyPaste { }, callback: function( /** @type {!Blockly.ContextMenuRegistry.Scope} */ scope) { - const blockText = localStorage.getItem('blocklyStash'); - const saveInfo = JSON.parse(blockText); + const copyData = JSON.parse(localStorage.getItem('blocklyStash')); try { - scope.workspace.paste(saveInfo['saveInfo']); + Blockly.clipboard.paste(copyData, scope.workspace); } catch (e) { if (e instanceof TypeError && typeErrorCallback) { typeErrorCallback(); @@ -151,10 +148,11 @@ export class CrossTabCopyPaste { // which may beep or otherwise indicate // an error due to the lack of a selection. e.preventDefault(); + const block = Blockly.getSelected(); + if (!block || !Blockly.isCopyable(block)) return false; workspace.hideChaff(); - const blockText = JSON.stringify( - convertBlockToSaveInfo(Blockly.getSelected())); - localStorage.setItem('blocklyStash', blockText); + localStorage.setItem( + 'blocklyStash', JSON.stringify(block.toCopyData())); return true; }, }; @@ -195,11 +193,12 @@ export class CrossTabCopyPaste { // which may beep or otherwise indicate // an error due to the lack of a selection. e.preventDefault(); - const blockText = JSON.stringify( - convertBlockToSaveInfo(Blockly.getSelected())); - localStorage.setItem('blocklyStash', blockText); + const block = /** @type {Blockly.BlockSvg} */ (Blockly.getSelected()); + if (!block || !Blockly.isCopyable(block)) return false; + localStorage.setItem( + 'blocklyStash', JSON.stringify(block.toCopyData())); Blockly.Events.setGroup(true); - Blockly.getSelected().dispose(true); + block.dispose(true); Blockly.Events.setGroup(false); return true; }, @@ -243,10 +242,9 @@ export class CrossTabCopyPaste { // which may beep or otherwise indicate // an error due to the lack of a selection. e.preventDefault(); - const blockText = localStorage.getItem('blocklyStash'); - const saveInfo = JSON.parse(blockText); + const copyData = JSON.parse(localStorage.getItem('blocklyStash')); try { - workspace.paste(saveInfo['saveInfo']); + Blockly.clipboard.paste(copyData, workspace); } catch (e) { if (e instanceof TypeError && typeErrorCallback) { typeErrorCallback(); diff --git a/plugins/cross-tab-copy-paste/src/utility.js b/plugins/cross-tab-copy-paste/src/utility.js deleted file mode 100644 index b7aab067dc..0000000000 --- a/plugins/cross-tab-copy-paste/src/utility.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @license - * Copyright 2022 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ -import * as Blockly from 'blockly/core'; -/** - * Convert block to save info. - * @param {Blockly.Block} block The block you want to convert. - * @returns {{saveInfo:?Blockly.serialization.blocks, - * typeCounts:?Object}} The serialized block and type information. - */ -export function convertBlockToSaveInfo(block) { - return { - saveInfo: Blockly.serialization.blocks.save( - block, {addCoordinates: true, addNextBlocks: false}), - typeCounts: Blockly.common.getBlockTypeCounts(block, true), - }; -}