Skip to content

fix: convert the Workspace class to an ES6 class #5977

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Mar 16, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion core/blockly.js
Original file line number Diff line number Diff line change
@@ -307,7 +307,8 @@ exports.svgResize = common.svgResize;
* @alias Blockly.hideChaff
*/
const hideChaff = function(opt_onlyClosePopups) {
common.getMainWorkspace().hideChaff(opt_onlyClosePopups);
/** @type {!WorkspaceSvg} */ (common.getMainWorkspace())
.hideChaff(opt_onlyClosePopups);
};
exports.hideChaff = hideChaff;

6 changes: 5 additions & 1 deletion core/events/utils.js
Original file line number Diff line number Diff line change
@@ -37,6 +37,8 @@ const {CommentMove} = goog.requireType('Blockly.Events.CommentMove');
const {ViewportChange} = goog.requireType('Blockly.Events.ViewportChange');
/* eslint-disable-next-line no-unused-vars */
const {Workspace} = goog.requireType('Blockly.Workspace');
/* eslint-disable-next-line no-unused-vars */
const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');


/**
@@ -561,7 +563,9 @@ const disableOrphans = function(event) {
return;
}
const {Workspace} = goog.module.get('Blockly.Workspace');
const eventWorkspace = Workspace.getById(blockEvent.workspaceId);
const eventWorkspace =
/** @type {!WorkspaceSvg} */ (
Workspace.getById(blockEvent.workspaceId));
let block = eventWorkspace.getBlockById(blockEvent.blockId);
if (block) {
// Changing blocks as part of this event shouldn't be undoable.
11 changes: 8 additions & 3 deletions core/field.js
Original file line number Diff line number Diff line change
@@ -309,7 +309,9 @@ class Field {
if (!this.constants_ && this.sourceBlock_ && this.sourceBlock_.workspace &&
this.sourceBlock_.workspace.rendered) {
this.constants_ =
this.sourceBlock_.workspace.getRenderer().getConstants();
/** @type {!WorkspaceSvg} */ (this.sourceBlock_.workspace)
.getRenderer()
.getConstants();
}
return this.constants_;
}
@@ -834,7 +836,8 @@ class Field {
// - Webkit / Blink: fill-box / object bounding box
// - Gecko / Triden / EdgeHTML: stroke-box
const bBox = this.sourceBlock_.getHeightWidth();
const scale = this.sourceBlock_.workspace.scale;
const scale =
/** @type {!WorkspaceSvg} */ (this.sourceBlock_.workspace).scale;
xy = this.getAbsoluteXY_();
scaledWidth = bBox.width * scale;
scaledHeight = bBox.height * scale;
@@ -1072,7 +1075,9 @@ class Field {
if (!this.sourceBlock_ || !this.sourceBlock_.workspace) {
return;
}
const gesture = this.sourceBlock_.workspace.getGesture(e);
const gesture =
/** @type {!WorkspaceSvg} */ (this.sourceBlock_.workspace)
.getGesture(e);
if (gesture) {
gesture.setStartField(this);
}
5 changes: 4 additions & 1 deletion core/gesture.js
Original file line number Diff line number Diff line change
@@ -1012,7 +1012,10 @@ class Gesture {
static inProgress() {
const workspaces = Workspace.getAll();
for (let i = 0, workspace; (workspace = workspaces[i]); i++) {
if (workspace.currentGesture_) {
// Not actually necessarily a WorkspaceSvg, but it doesn't matter b/c
// we're just checking if the property exists. Theoretically we would
// want to use instanceof, but that causes a circular dependency.
if (/** @type {!WorkspaceSvg} */ (workspace).currentGesture_) {
return true;
}
}
5 changes: 3 additions & 2 deletions core/inject.js
Original file line number Diff line number Diff line change
@@ -274,7 +274,8 @@ const init = function(mainWorkspace) {
// TODO (https://github.com/google/blockly/issues/1998) handle cases where there
// are multiple workspaces and non-main workspaces are able to accept input.
const onKeyDown = function(e) {
const mainWorkspace = common.getMainWorkspace();
const mainWorkspace =
/** @type {!WorkspaceSvg} */ (common.getMainWorkspace());
if (!mainWorkspace) {
return;
}
@@ -337,7 +338,7 @@ const bindDocumentEvents = function() {
/**
* Load sounds for the given workspace.
* @param {string} pathToMedia The path to the media directory.
* @param {!Workspace} workspace The workspace to load sounds for.
* @param {!WorkspaceSvg} workspace The workspace to load sounds for.
*/
const loadSounds = function(pathToMedia, workspace) {
const audioMgr = workspace.getAudioManager();
6 changes: 2 additions & 4 deletions core/mutator.js
Original file line number Diff line number Diff line change
@@ -40,8 +40,6 @@ const {Icon} = goog.require('Blockly.Icon');
const {Options} = goog.require('Blockly.Options');
const {Svg} = goog.require('Blockly.utils.Svg');
const {WorkspaceSvg} = goog.require('Blockly.WorkspaceSvg');
/* eslint-disable-next-line no-unused-vars */
const {Workspace} = goog.requireType('Blockly.Workspace');
/** @suppress {extraRequire} */
goog.require('Blockly.Events.BubbleOpen');

@@ -550,8 +548,8 @@ class Mutator extends Icon {
/**
* Get the parent workspace of a workspace that is inside a mutator, taking
* into account whether it is a flyout.
* @param {Workspace} workspace The workspace that is inside a mutator.
* @return {?Workspace} The mutator's parent workspace or null.
* @param {WorkspaceSvg} workspace The workspace that is inside a mutator.
* @return {?WorkspaceSvg} The mutator's parent workspace or null.
* @public
*/
static findParentWs(workspace) {
4 changes: 2 additions & 2 deletions core/procedures.js
Original file line number Diff line number Diff line change
@@ -210,7 +210,7 @@ exports.rename = rename;

/**
* Construct the blocks required by the flyout for the procedure category.
* @param {!Workspace} workspace The workspace containing procedures.
* @param {!WorkspaceSvg} workspace The workspace containing procedures.
* @return {!Array<!Element>} Array of XML block elements.
* @alias Blockly.Procedures.flyoutCategory
*/
@@ -297,7 +297,7 @@ exports.flyoutCategory = flyoutCategory;
/**
* Updates the procedure mutator's flyout so that the arg block is not a
* duplicate of another arg.
* @param {!Workspace} workspace The procedure mutator's workspace. This
* @param {!WorkspaceSvg} workspace The procedure mutator's workspace. This
* workspace's flyout is what is being updated.
*/
const updateMutatorFlyout = function(workspace) {
5 changes: 3 additions & 2 deletions core/serialization/workspaces.js
Original file line number Diff line number Diff line change
@@ -22,6 +22,7 @@ const eventUtils = goog.require('Blockly.Events.utils');
const registry = goog.require('Blockly.registry');
// eslint-disable-next-line no-unused-vars
const {Workspace} = goog.require('Blockly.Workspace');
const {WorkspaceSvg} = goog.require('Blockly.WorkspaceSvg');


/**
@@ -70,7 +71,7 @@ const load = function(state, workspace, {recordUndo = false} = {}) {
}

dom.startTextWidthCache();
if (workspace.setResizesEnabled) {
if (workspace instanceof WorkspaceSvg) {
workspace.setResizesEnabled(false);
}

@@ -89,7 +90,7 @@ const load = function(state, workspace, {recordUndo = false} = {}) {
}
}

if (workspace.setResizesEnabled) {
if (workspace instanceof WorkspaceSvg) {
workspace.setResizesEnabled(true);
}
dom.stopTextWidthCache();
4 changes: 2 additions & 2 deletions core/theme_manager.js
Original file line number Diff line number Diff line change
@@ -97,7 +97,7 @@ class ThemeManager {
// Refresh all subscribed workspaces.
for (let i = 0, workspace; (workspace = this.subscribedWorkspaces_[i]);
i++) {
workspace.refreshTheme();
/** @type {!WorkspaceSvg} */ (workspace).refreshTheme();
}

// Refresh all registered Blockly UI components.
@@ -112,7 +112,7 @@ class ThemeManager {
}

for (const workspace of this.subscribedWorkspaces_) {
workspace.hideChaff();
/** @type {!WorkspaceSvg} */ (workspace).hideChaff();
}
}

4 changes: 2 additions & 2 deletions core/toolbox/toolbox.js
Original file line number Diff line number Diff line change
@@ -318,7 +318,7 @@ class Toolbox extends DeleteArea {
onClick_(e) {
if (browserEvents.isRightButton(e) || e.target === this.HtmlDiv) {
// Close flyout.
common.getMainWorkspace().hideChaff(false);
/** @type {!WorkspaceSvg} */ (common.getMainWorkspace()).hideChaff(false);
} else {
const targetElement = e.target;
const itemId = targetElement.getAttribute('id');
@@ -330,7 +330,7 @@ class Toolbox extends DeleteArea {
}
}
// Just close popups.
common.getMainWorkspace().hideChaff(true);
/** @type {!WorkspaceSvg} */ (common.getMainWorkspace()).hideChaff(true);
}
Touch.clearTouchIdentifier(); // Don't block future drags.
}
11 changes: 9 additions & 2 deletions core/variables.js
Original file line number Diff line number Diff line change
@@ -23,6 +23,8 @@ const {Msg} = goog.require('Blockly.Msg');
const {VariableModel} = goog.require('Blockly.VariableModel');
/* eslint-disable-next-line no-unused-vars */
const {Workspace} = goog.requireType('Blockly.Workspace');
/* eslint-disable-next-line no-unused-vars */
const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');

/**
* String for use in the "custom" attribute of a category in toolbox XML.
@@ -118,7 +120,7 @@ exports.allDeveloperVariables = allDeveloperVariables;
/**
* Construct the elements (blocks and button) required by the flyout for the
* variable category.
* @param {!Workspace} workspace The workspace containing variables.
* @param {!WorkspaceSvg} workspace The workspace containing variables.
* @return {!Array<!Element>} Array of XML elements.
* @alias Blockly.Variables.flyoutCategory
*/
@@ -526,7 +528,12 @@ const createVariable = function(workspace, id, opt_name, opt_type) {
const potentialVariableMap = workspace.getPotentialVariableMap();
// Variables without names get uniquely named for this workspace.
if (!opt_name) {
const ws = workspace.isFlyout ? workspace.targetWorkspace : workspace;
const ws =
/** @type {!Workspace} */ (
workspace.isFlyout ?
/** @type {!WorkspaceSvg} */ (workspace).targetWorkspace :
workspace);
// Must call version on exports to allow for mocking in tests. See #5321
opt_name = exports.generateUniqueName(ws);
}

4 changes: 3 additions & 1 deletion core/variables_dynamic.js
Original file line number Diff line number Diff line change
@@ -24,6 +24,8 @@ const {Msg} = goog.require('Blockly.Msg');
const {VariableModel} = goog.require('Blockly.VariableModel');
/* eslint-disable-next-line no-unused-vars */
const {Workspace} = goog.requireType('Blockly.Workspace');
/* eslint-disable-next-line no-unused-vars */
const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');


/**
@@ -59,7 +61,7 @@ exports.onCreateVariableButtonClick_Colour = colourButtonClickHandler;
/**
* Construct the elements (blocks and button) required by the flyout for the
* variable category.
* @param {!Workspace} workspace The workspace containing variables.
* @param {!WorkspaceSvg} workspace The workspace containing variables.
* @return {!Array<!Element>} Array of XML elements.
* @alias Blockly.VariablesDynamic.flyoutCategory
*/
Loading