8000 fix: Fix compilation errors under Closure's strict mode by gonfunko · Pull Request #6073 · google/blockly · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

fix: Fix compilation errors under Closure's strict mode #6073

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 9 commits into from
Apr 19, 2022
47 changes: 30 additions & 17 deletions core/block_animations.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,16 @@ const dom = goog.require('Blockly.utils.dom');
const {BlockSvg} = goog.requireType('Blockly.BlockSvg');
const {Svg} = goog.require('Blockly.utils.Svg');

/**
* A bounding box for a cloned block.
* @typedef {{
* x: number,
* y: number,
* width: number,
* height: number
* }}
*/
let CloneRect; // eslint-disable-line no-unused-vars

/**
* PID of disconnect UI animation. There can only be one at a time.
Expand Down Expand Up @@ -47,13 +57,13 @@ const disposeUiEffect = function(block) {
const xy = workspace.getSvgXY(svgGroup);
// Deeply clone the current block.
const clone = svgGroup.cloneNode(true);
clone.translateX_ = xy.x;
clone.translateY_ = xy.y;
clone.setAttribute('transform', 'translate(' + xy.x + ',' + xy.y + ')');
workspace.getParentSvg().appendChild(clone);
clone.bBox_ = clone.getBBox();
const bBox = clone.getBBox();
const cloneRect =
{'x': xy.x, 'y': xy.y, 'width': bBox.width, 'height': bBox.height};
// Start the animation.
disposeUiStep(clone, workspace.RTL, new Date, workspace.scale);
disposeUiStep(clone, cloneRect, workspace.RTL, new Date, workspace.scale);
};
exports.disposeUiEffect = disposeUiEffect;

Expand All @@ -62,25 +72,26 @@ exports.disposeUiEffect = disposeUiEffect;
* This is a class method, not an instance method since the original block has
* been destroyed and is no longer accessible.
* @param {!Element} clone SVG element to animate and dispose of.
* @param {!CloneRect} rect Starting rect of the clone.
* @param {boolean} rtl True if RTL, false if LTR.
* @param {!Date} start Date of animation's start.
* @param {number} workspaceScale Scale of workspace.
*/
const disposeUiStep = function(clone, rtl, start, workspaceScale) {
const ms = new Date - start;
const disposeUiStep = function(clone, rect, rtl, start, workspaceScale) {
const ms = (new Date).getTime() - start.getTime();
const percent = ms / 150;
if (percent > 1) {
dom.removeNode(clone);
} else {
const x = clone.translateX_ +
(rtl ? -1 : 1) * clone.bBox_.width * workspaceScale / 2 * percent;
const y = clone.translateY_ + clone.bBox_.height * workspaceScale * percent;
const x =
rect.x + (rtl ? -1 : 1) * rect.width * workspaceScale / 2 * percent;
const y = rect.y + rect.height * workspaceScale * percent;
const scale = (1 - percent) * workspaceScale;
clone.setAttribute(
'transform',
'translate(' + x + ',' + y + ')' +
' scale(' + scale + ')');
setTimeout(disposeUiStep, 10, clone, rtl, start, workspaceScale);
setTimeout(disposeUiStep, 10, clone, rect, rtl, start, workspaceScale);
}
};

Expand Down Expand Up @@ -129,7 +140,7 @@ exports.connectionUiEffect = connectionUiEffect;
* @param {number} scale Scale of workspace.
*/
const connectionUiStep = function(ripple, start, scale) {
const ms = new Date - start;
const ms = (new Date).getTime() - start.getTime();
const percent = ms / 150;
if (percent > 1) {
dom.removeNode(ripple);
Expand Down Expand Up @@ -174,19 +185,21 @@ const disconnectUiStep = function(group, magnitude, start) {
const DURATION = 200; // Milliseconds.
const WIGGLES = 3; // Half oscillations.

const ms = new Date - start;
const ms = (new Date).getTime() - start.getTime();
const percent = ms / DURATION;

if (percent > 1) {
group.skew_ = '';
(/** @type {?} */ (group)).skew_ = '';
} else {
const skew = Math.round(
Math.sin(percent * Math.PI * WIGGLES) * (1 - percent) * magnitude);
group.skew_ = 'skewX(' + skew + ')';
(/** @type {?} */ (group)).skew_ = 'skewX(' + skew + ')';
disconnectGroup = group;
disconnectPid = setTimeout(disconnectUiStep, 10, group, magnitude, start);
}
group.setAttribute('transform', group.translate_ + group.skew_);
group.setAttribute(
'transform',
(/** @type {?} */ (group)).translate_ + (/** @type {?} */ (group)).skew_);
};

/**
Expand All @@ -198,8 +211,8 @@ const disconnectUiStop = function() {
if (disconnectGroup) {
clearTimeout(disconnectPid);
const group = disconnectGroup;
group.skew_ = '';
group.setAttribute('transform', group.translate_);
(/** @type {?} */ (group)).skew_ = '';
group.setAttribute('transform', (/** @type {?} */ (group)).translate_);
disconnectGroup = null;
}
};
Expand Down
17 changes: 15 additions & 2 deletions core/block_dragger.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ const {Coordinate} = goog.require('Blockly.utils.Coordinate');
const {IBlockDragger} = goog.require('Blockly.IBlockDragger');
/* eslint-disable-next-line no-unused-vars */
const {IDragTarget} = goog.requireType('Blockly.IDragTarget');
/* eslint-disable-next-line no-unused-vars */
const {Icon} = goog.requireType('Blockly.Icon');
const {InsertionMarkerManager} = goog.require('Blockly.InsertionMarkerManager');
/* eslint-disable-next-line no-unused-vars */
const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
Expand Down Expand Up @@ -99,7 +101,7 @@ const BlockDragger = class {
* A list of all of the icons (comment, warning, and mutator) that are
* on this block and its descendants. Moving an icon moves the bubble that
* extends from it if that bubble is open.
* @type {Array<!Object>}
* @type {Array<!IconPositionData>}
* @protected
*/
this.dragIconData_ = initIconData(block);
Expand Down Expand Up @@ -450,12 +452,23 @@ const BlockDragger = class {
}
};

/**
* Data about the position of a given icon.
* @typedef {{
* location:!Coordinate,
* icon:!Icon,
* }}
*/
let IconPositionData;
exports.IconPositionData = IconPositionData;

/**
* Make a list of all of the icons (comment, warning, and mutator) that are
* on this block and its descendants. Moving an icon moves the bubble that
* extends from it if that bubble is open.
* @param {!BlockSvg} block The root block that is being dragged.
* @return {!Array<!Object>} The list of all icons and their locations.
* @return {!Array<!IconPositionData>} The list of all icons and their
* locations.
*/
const initIconData = function(block) {
// Build a list of icons that need to be moved and where they started.
Expand Down
31 changes: 15 additions & 16 deletions core/block_svg.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ const dom = goog.require('Blockly.utils.dom');
const eventUtils = goog.require('Blockly.Events.utils');
const internalConstants = goog.require('Blockly.internalConstants');
const svgMath = goog.require('Blockly.utils.svgMath');
const userAgent = goog.require('Blockly.utils.userAgent');
const {ASTNode} = goog.require('Blockly.ASTNode');
const {Block} = goog.require('Blockly.Block');
/* eslint-disable-next-line no-unused-vars */
Expand Down Expand Up @@ -131,7 +130,8 @@ class BlockSvg extends Block {

/**
* An optional method for defining custom block context menu items.
* @type {undefined|?function(!Array<!Object>)}
* @type {undefined|?function(!Array<!ContextMenuRegistry.ContextMenuOption|
* !ContextMenuRegistry.LegacyContextMenuOption>)}
*/
this.customContextMenu = this.customContextMenu;

Expand Down Expand Up @@ -196,7 +196,7 @@ class BlockSvg extends Block {
* @private
*/
this.svgGroup_ = dom.createSvgElement(Svg.G, {}, null);
this.svgGroup_.translate_ = '';
(/** @type {?} */ (this.svgGroup_)).translate_ = '';

/**
* A block style object.
Expand Down Expand Up @@ -252,13 +252,7 @@ class BlockSvg extends Block {
Tooltip.bindMouseEvents(svgPath);

// Expose this block's ID on its top-level SVG group.
if (this.svgGroup_.dataset) {
this.svgGroup_.dataset['id'] = this.id;
} else if (userAgent.IE) {
// SVGElement.dataset is not available on IE11, but data-* properties
// can be set with setAttribute().
this.svgGroup_.setAttribute('data-id', this.id);
}
this.svgGroup_.setAttribute('data-id', this.id);

this.doInit_();
}
Expand Down Expand Up @@ -552,10 +546,13 @@ class BlockSvg extends Block {
if (this.useDragSurface_) {
this.workspace.getBlockDragSurface().translateSurface(newLoc.x, newLoc.y);
} else {
this.svgGroup_.translate_ =
(/** @type {?} */ (this.svgGroup_)).translate_ =
'translate(' + newLoc.x + ',' + newLoc.y + ')';
this.svgGroup_.setAttribute(
'transform', this.svgGroup_.translate_ + this.svgGroup_.skew_);
(/** @type {?} */ (this.svgGroup_))
.setAttribute(
'transform',
(/** @type {?} */ (this.svgGroup_)).translate_ +
(/** @type {?} */ (this.svgGroup_)).skew_);
}
}

Expand Down Expand Up @@ -744,7 +741,9 @@ class BlockSvg extends Block {

/**
* Generate the context menu for this block.
* @return {?Array<!Object>} Context menu options or null if no menu.
* @return {?Array<!ContextMenuRegistry.ContextMenuOption|
* !ContextMenuRegistry.LegacyContextMenuOption>}
* Context menu options or null if no menu.
* @protected
*/
generateContextMenu() {
Expand Down Expand Up @@ -815,8 +814,8 @@ class BlockSvg extends Block {
setDragging(adding) {
if (adding) {
const group = this.getSvgRoot();
group.translate_ = '';
group.skew_ = '';
(/** @type {?} */ (group)).translate_ = '';
(/** @type {?} */ (group)).skew_ = '';
common.draggingConnections.push(...this.getConnections_(true));
dom.addClass(
/** @type {!Element} */ (this.svgGroup_), 'blocklyDragging');
Expand Down
26 changes: 18 additions & 8 deletions core/browser_events.js
Original file line number Diff line number Diff line change
Expand Up @@ -211,12 +211,22 @@ exports.unbind = unbind;
* @alias Blockly.browserEvents.isTargetInput
*/
const isTargetInput = function(e) {
return e.target.type === 'textarea' || e.target.type === 'text' ||
e.target.type === 'number' || e.target.type === 'email' ||
e.target.type === 'password' || e.target.type === 'search' ||
e.target.type === 'tel' || e.target.type === 'url' ||
e.target.isContentEditable ||
(e.target.dataset && e.target.dataset.isTextInput === 'true');
if (e.target instanceof HTMLElement) {
if (e.target.isContentEditable ||
e.target.getAttribute('data-is-text-input') === 'true') {
return true;
}

if (e.target instanceof HTMLInputElement) {
const target = e.target;
return target.type === 'textarea' || target.type === 'text' ||
target.type === 'number' || target.type === 'email' ||
target.type === 'password' || target.type === 'search' ||
target.type === 'tel' || target.type === 'url';
}
}

return false;
};
exports.isTargetInput = isTargetInput;

Expand All @@ -240,7 +250,7 @@ exports.isRightButton = isRightButton;
* Returns the converted coordinates of the given mouse event.
* The origin (0,0) is the top-left corner of the Blockly SVG.
* @param {!Event} e Mouse event.
* @param {!Element} svg SVG element.
* @param {!SVGSVGElement} svg SVG element.
* @param {?SVGMatrix} matrix Inverted screen CTM to use.
* @return {!SVGPoint} Object with .x and .y properties.
* @alias Blockly.browserEvents.mouseToSvg
Expand All @@ -259,7 +269,7 @@ exports.mouseToSvg = mouseToSvg;

/**
* Returns the scroll delta of a mouse event in pixel units.
* @param {!Event} e Mouse event.
* @param {!WheelEvent} e Mouse event.
* @return {{x: number, y: number}} Scroll delta object with .x and .y
* properties.
* @alias Blockly.browserEvents.getScrollDeltaPixels
Expand Down
12 changes: 5 additions & 7 deletions core/bubble.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ const Bubble = class {
/**
* @param {!WorkspaceSvg} workspace The workspace on which to draw the
* bubble.
* @param {!Element} content SVG content for the bubble.
* @param {!Element} shape SVG element to avoid eclipsing.
* @param {!SVGElement} content SVG content for the bubble.
* @param {!SVGElement} shape SVG element to avoid eclipsing.
* @param {!Coordinate} anchorXY Absolute position of bubble's
* anchor point.
* @param {?number} bubbleWidth Width of bubble, or null if not resizable.
Expand Down Expand Up @@ -227,7 +227,7 @@ const Bubble = class {
'filter': 'url(#' +
this.workspace_.getRenderer().getConstants().embossFilterId + ')',
};
if (userAgent.JAVA_FX) {
if (userAgent.JavaFx) {
// Multiple reports that JavaFX can't handle filters.
// https://github.com/google/blockly/issues/99
filter = {};
Expand Down Expand Up @@ -302,9 +302,7 @@ const Bubble = class {
* @param {string} id ID of block.
*/
setSvgId(id) {
if (this.bubbleGroup_.dataset) {
this.bubbleGroup_.dataset['blockId'] = id;
}
this.bubbleGroup_.setAttribute('data-block-id', id);
}

/**
Expand Down Expand Up @@ -443,7 +441,7 @@ const Bubble = class {

const optimalLeft = this.getOptimalRelativeLeft_(viewMetrics);
const optimalTop = this.getOptimalRelativeTop_(viewMetrics);
const bbox = this.shape_.getBBox();
const bbox = (/** @type {!SVGGraphicsElement} */ (this.shape_)).getBBox();

const topPosition = {
x: optimalLeft,
Expand Down
10 changes: 3 additions & 7 deletions core/bubble_dragger.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,7 @@ const {IBubble} = goog.requireType('Blockly.IBubble');
const {IDeleteArea} = goog.requireType('Blockly.IDeleteArea');
/* eslint-disable-next-line no-unused-vars */
const {IDragTarget} = goog.requireType('Blockly.IDragTarget');
/* eslint-disable-next-line no-unused-vars */
const {WorkspaceCommentSvg} = goog.requireType('Blockly.WorkspaceCommentSvg');
const {WorkspaceCommentSvg} = goog.require('Blockly.WorkspaceCommentSvg');
/* eslint-disable-next-line no-unused-vars */
const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
/** @suppress {extraRequire} */
Expand Down Expand Up @@ -243,12 +242,9 @@ const BubbleDragger = class {
* @private
*/
fireMoveEvent_() {
if (this.draggingBubble_.isComment) {
// TODO (adodson): Resolve build errors when requiring
// WorkspaceCommentSvg.
if (this.draggingBubble_ instanceof WorkspaceCommentSvg) {
const event = /** @type {!CommentMove} */
(new (eventUtils.get(eventUtils.COMMENT_MOVE))(
/** @type {!WorkspaceCommentSvg} */ (this.draggingBubble_)));
(new (eventUtils.get(eventUtils.COMMENT_MOVE))(this.draggingBubble_));
event.setOldCoordinate(this.startXY_);
event.recordNew();
eventUtils.fire(event);
Expand Down
2 changes: 1 addition & 1 deletion core/clipboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ exports.paste = paste;
const duplicate = function(toDuplicate) {
const oldCopyData = copyData;
copy(toDuplicate);
const pastedThing = toDuplicate.workspace.paste(copyData.saveInfo);
const pastedThing = toDuplicate.toCopyData().source.paste(copyData.saveInfo);
copyData = oldCopyData;
return pastedThing;
};
Expand Down
5 changes: 3 additions & 2 deletions core/comment.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ class Comment extends Icon {

/**
* The editable text area, or null if not created.
* @type {?Element}
* @type {?HTMLTextAreaElement}
* @private
*/
this.textarea_ = null;
Expand Down Expand Up @@ -181,7 +181,8 @@ class Comment extends Icon {
body.setAttribute('xmlns', dom.HTML_NS);
body.className = 'blocklyMinimalBody';

this.textarea_ = document.createElementNS(dom.HTML_NS, 'textarea');
this.textarea_ = /** @type {!HTMLTextAreaElement} */ (
document.createElementNS(dom.HTML_NS, 'textarea'));
const textarea = this.textarea_;
textarea.className = 'blocklyCommentTextarea';
textarea.setAttribute('dir', this.block_.RTL ? 'RTL' : 'LTR');
Expand Down
Loading
0