Files
blockly/core/delete_area.ts
Christopher Allen b0475b0c68 chore: Fix whitespace (#6243)
* fix: Remove spurious blank lines

  Remove extraneous blank lines introduced by deletion of
  'use strict'; pragmas.

  Also fix the location of the goog.declareModuleId call in
  core/utils/array.ts.

* fix: Add missing double-blank-line before body of modules

  Our convention is to have two blank lines between the imports (or
  module ID, if there are no imports) and the beginning of the body
  of the module.  Enforce this.

* fix: one addition format error for PR #6243
2022-06-24 19:33:39 +01:00

85 lines
2.5 KiB
TypeScript

/**
* @license
* Copyright 2021 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview The abstract class for a component that can delete a block or
* bubble that is dropped on top of it.
*/
/**
* The abstract class for a component that can delete a block or
* bubble that is dropped on top of it.
* @class
*/
import * as goog from '../closure/goog/goog.js';
goog.declareModuleId('Blockly.DeleteArea');
import {BlockSvg} from './block_svg.js';
import {DragTarget} from './drag_target.js';
/* eslint-disable-next-line no-unused-vars */
import {IDeleteArea} from './interfaces/i_delete_area.js';
/* eslint-disable-next-line no-unused-vars */
import {IDraggable} from './interfaces/i_draggable.js';
/**
* Abstract class for a component that can delete a block or bubble that is
* dropped on top of it.
* @alias Blockly.DeleteArea
*/
export class DeleteArea extends DragTarget implements IDeleteArea {
/**
* Whether the last block or bubble dragged over this delete area would be
* deleted if dropped on this component.
* This property is not updated after the block or bubble is deleted.
*/
protected wouldDelete_ = false;
/**
* The unique id for this component that is used to register with the
* ComponentManager.
*/
// TODO(b/109816955): remove '!', see go/strict-prop-init-fix.
override id!: string;
/**
* Constructor for DeleteArea. Should not be called directly, only by a
* subclass.
*/
constructor() {
super();
}
/**
* Returns whether the provided block or bubble would be deleted if dropped on
* this area.
* This method should check if the element is deletable and is always called
* before onDragEnter/onDragOver/onDragExit.
* @param element The block or bubble currently being dragged.
* @param couldConnect Whether the element could could connect to another.
* @return Whether the element provided would be deleted if dropped on this
* area.
*/
wouldDelete(element: IDraggable, couldConnect: boolean): boolean {
if (element instanceof BlockSvg) {
const block = (element);
const couldDeleteBlock = !block.getParent() && block.isDeletable();
this.updateWouldDelete_(couldDeleteBlock && !couldConnect);
} else {
this.updateWouldDelete_(element.isDeletable());
}
return this.wouldDelete_;
}
/**
* Updates the internal wouldDelete_ state.
* @param wouldDelete The new value for the wouldDelete state.
*/
protected updateWouldDelete_(wouldDelete: boolean) {
this.wouldDelete_ = wouldDelete;
}
}