mirror of
https://github.com/google/blockly.git
synced 2026-01-08 09:30:06 +01:00
* chore: add and configure prettier * chore: remove clang-format * chore: remove clang-format config * chore: lint additional ts files * chore: fix lint errors in blocks * chore: add prettier-ignore where needed * chore: ignore js blocks when formatting * chore: fix playground html syntax * chore: fix yaml spacing from merge * chore: convert text blocks to use arrow functions * chore: format everything with prettier * chore: fix lint unused imports in blocks
91 lines
2.2 KiB
TypeScript
91 lines
2.2 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2023 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import type {Block} from '../block.js';
|
|
import type {BlockSvg} from '../block_svg.js';
|
|
import * as browserEvents from '../browser_events.js';
|
|
import type {IIcon} from '../interfaces/i_icon.js';
|
|
import {Coordinate} from '../utils/coordinate.js';
|
|
import * as dom from '../utils/dom.js';
|
|
import {Size} from '../utils/size.js';
|
|
import {Svg} from '../utils/svg.js';
|
|
|
|
export abstract class Icon implements IIcon {
|
|
/**
|
|
* The position of this icon relative to its blocks top-start,
|
|
* in workspace units.
|
|
*/
|
|
protected offsetInBlock: Coordinate = new Coordinate(0, 0);
|
|
|
|
/** The position of this icon in workspace coordinates. */
|
|
protected workspaceLocation: Coordinate = new Coordinate(0, 0);
|
|
|
|
/** The root svg element visually representing this icon. */
|
|
protected svgRoot: SVGGElement | null = null;
|
|
|
|
constructor(protected sourceBlock: Block) {}
|
|
|
|
getType(): string {
|
|
return 'abstract type';
|
|
}
|
|
|
|
initView(pointerdownListener: (e: PointerEvent) => void): void {
|
|
if (this.svgRoot) return; // The icon has already been initialized.
|
|
|
|
const svgBlock = this.sourceBlock as BlockSvg;
|
|
this.svgRoot = dom.createSvgElement(Svg.G, {'class': 'blocklyIconGroup'});
|
|
svgBlock.getSvgRoot().appendChild(this.svgRoot);
|
|
browserEvents.conditionalBind(
|
|
this.svgRoot,
|
|
'pointerdown',
|
|
this,
|
|
pointerdownListener
|
|
);
|
|
}
|
|
|
|
dispose(): void {}
|
|
|
|
getWeight(): number {
|
|
return -1;
|
|
}
|
|
|
|
getSize(): Size {
|
|
return new Size(0, 0);
|
|
}
|
|
|
|
applyColour(): void {}
|
|
|
|
updateEditable(): void {}
|
|
|
|
updateCollapsed(): void {
|
|
if (!this.svgRoot) {
|
|
throw new Error(
|
|
'Attempt to update the collapsed-ness of an icon before its ' +
|
|
'view has been initialized.'
|
|
);
|
|
}
|
|
if (this.sourceBlock.isCollapsed()) {
|
|
this.svgRoot.style.display = 'none';
|
|
} else {
|
|
this.svgRoot.style.display = 'block';
|
|
}
|
|
}
|
|
|
|
isShownWhenCollapsed(): boolean {
|
|
return false;
|
|
}
|
|
|
|
setOffsetInBlock(offset: Coordinate): void {
|
|
this.offsetInBlock = offset;
|
|
}
|
|
|
|
onLocationChange(blockOrigin: Coordinate): void {
|
|
this.workspaceLocation = Coordinate.sum(blockOrigin, this.offsetInBlock);
|
|
}
|
|
|
|
onClick(): void {}
|
|
}
|