mirror of
https://github.com/google/blockly.git
synced 2026-01-07 17:10:11 +01:00
81 lines
2.0 KiB
JavaScript
81 lines
2.0 KiB
JavaScript
/**
|
|
* @license
|
|
* Copyright 2021 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/**
|
|
* @fileoverview Blockly's internal clipboard for managing copy-paste.
|
|
*/
|
|
'use strict';
|
|
|
|
/**
|
|
* Blockly's internal clipboard for managing copy-paste.
|
|
* @namespace Blockly.clipboard
|
|
*/
|
|
goog.module('Blockly.clipboard');
|
|
|
|
const eventUtils = goog.require('Blockly.Events.utils');
|
|
/* eslint-disable-next-line no-unused-vars */
|
|
const {ICopyable} = goog.requireType('Blockly.ICopyable');
|
|
|
|
|
|
/**
|
|
* Metadata about the object that is currently on the clipboard.
|
|
* @type {?ICopyable.CopyData}
|
|
*/
|
|
let copyData = null;
|
|
|
|
/**
|
|
* Copy a block or workspace comment onto the local clipboard.
|
|
* @param {!ICopyable} toCopy Block or Workspace Comment to be copied.
|
|
* @alias Blockly.clipboard.copy
|
|
* @package
|
|
*/
|
|
const copy = function(toCopy) {
|
|
copyData = toCopy.toCopyData();
|
|
};
|
|
exports.copy = copy;
|
|
|
|
/**
|
|
* Paste a block or workspace comment on to the main workspace.
|
|
* @return {boolean} True if the paste was successful, false otherwise.
|
|
* @alias Blockly.clipboard.paste
|
|
* @package
|
|
*/
|
|
const paste = function() {
|
|
if (!copyData) {
|
|
return false;
|
|
}
|
|
// Pasting always pastes to the main workspace, even if the copy
|
|
// started in a flyout workspace.
|
|
let workspace = copyData.source;
|
|
if (workspace.isFlyout) {
|
|
workspace = workspace.targetWorkspace;
|
|
}
|
|
if (copyData.typeCounts &&
|
|
workspace.isCapacityAvailable(copyData.typeCounts)) {
|
|
eventUtils.setGroup(true);
|
|
workspace.paste(copyData.saveInfo);
|
|
eventUtils.setGroup(false);
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
exports.paste = paste;
|
|
|
|
/**
|
|
* Duplicate this block and its children, or a workspace comment.
|
|
* @param {!ICopyable} toDuplicate Block or Workspace Comment to be
|
|
* duplicated.
|
|
* @alias Blockly.clipboard.duplicate
|
|
* @package
|
|
*/
|
|
const duplicate = function(toDuplicate) {
|
|
const oldCopyData = copyData;
|
|
copy(toDuplicate);
|
|
toDuplicate.workspace.paste(copyData.saveInfo);
|
|
copyData = oldCopyData;
|
|
};
|
|
exports.duplicate = duplicate;
|