diff --git a/core/comments/rendered_workspace_comment.ts b/core/comments/rendered_workspace_comment.ts index dc7111a6f5b..5a143666287 100644 --- a/core/comments/rendered_workspace_comment.ts +++ b/core/comments/rendered_workspace_comment.ts @@ -18,10 +18,16 @@ import {CommentDragStrategy} from '../dragging/comment_drag_strategy.js'; import * as browserEvents from '../browser_events.js'; import * as common from '../common.js'; import {ISelectable} from '../interfaces/i_selectable.js'; +import {IDeletable} from '../interfaces/i_deletable.js'; export class RenderedWorkspaceComment extends WorkspaceComment - implements IBoundedElement, IRenderedElement, IDraggable, ISelectable + implements + IBoundedElement, + IRenderedElement, + IDraggable, + ISelectable, + IDeletable { /** The class encompassing the svg elements making up the workspace comment. */ private view: CommentView; @@ -165,6 +171,20 @@ export class RenderedWorkspaceComment } } + /** Returns whether this comment is deletable or not. */ + isDeletable(): boolean { + return !this.workspace.options.readOnly; + } + + /** Visually indicates that this comment would be deleted if dropped. */ + setDeleteStyle(wouldDelete: boolean): void { + if (wouldDelete) { + dom.addClass(this.getSvgRoot(), 'blocklyDraggingDelete'); + } else { + dom.removeClass(this.getSvgRoot(), 'blocklyDraggingDelete'); + } + } + /** Returns whether this comment is movable or not. */ isMovable(): boolean { return this.dragStrategy.isMovable(); diff --git a/core/shortcut_items.ts b/core/shortcut_items.ts index 78f624cd37e..48a7f771979 100644 --- a/core/shortcut_items.ts +++ b/core/shortcut_items.ts @@ -16,6 +16,7 @@ import {KeyboardShortcut, ShortcutRegistry} from './shortcut_registry.js'; import {KeyCodes} from './utils/keycodes.js'; import type {WorkspaceSvg} from './workspace_svg.js'; import {isDraggable} from './interfaces/i_draggable.js'; +import * as eventUtils from './events/utils.js'; /** * Object holding the names of the default shortcut items. @@ -75,7 +76,14 @@ export function registerDelete() { if (Gesture.inProgress()) { return false; } - (common.getSelected() as BlockSvg).checkAndDelete(); + const selected = common.getSelected(); + if (selected instanceof BlockSvg) { + selected.checkAndDelete(); + } else if (isDeletable(selected) && selected.isDeletable()) { + eventUtils.setGroup(true); + selected.dispose(); + eventUtils.setGroup(false); + } return true; }, keyCodes: [KeyCodes.DELETE, KeyCodes.BACKSPACE],