diff --git a/core/block.js b/core/block.js index 4f467e0e2..2bcd6ba90 100644 --- a/core/block.js +++ b/core/block.js @@ -25,6 +25,7 @@ const eventUtils = goog.require('Blockly.Events.utils'); const fieldRegistry = goog.require('Blockly.fieldRegistry'); const idGenerator = goog.require('Blockly.utils.idGenerator'); const object = goog.require('Blockly.utils.object'); +const parsing = goog.require('Blockly.utils.parsing'); const utils = goog.require('Blockly.utils'); const {ASTNode} = goog.require('Blockly.ASTNode'); const {Blocks} = goog.require('Blockly.blocks'); @@ -1015,7 +1016,7 @@ Block.prototype.getHue = function() { * or a message reference string pointing to one of those two values. */ Block.prototype.setColour = function(colour) { - const parsed = utils.parseBlockColour(colour); + const parsed = parsing.parseBlockColour(colour); this.hue_ = parsed.hue; this.colour_ = parsed.hex; }; @@ -1582,7 +1583,7 @@ Block.prototype.jsonInit = function(json) { } if (json['tooltip'] !== undefined) { const rawValue = json['tooltip']; - const localizedText = utils.replaceMessageReferences(rawValue); + const localizedText = parsing.replaceMessageReferences(rawValue); this.setTooltip(localizedText); } if (json['enableContextMenu'] !== undefined) { @@ -1593,7 +1594,7 @@ Block.prototype.jsonInit = function(json) { } if (json['helpUrl'] !== undefined) { const rawValue = json['helpUrl']; - const localizedValue = utils.replaceMessageReferences(rawValue); + const localizedValue = parsing.replaceMessageReferences(rawValue); this.setHelpUrl(localizedValue); } if (typeof json['extensions'] === 'string') { @@ -1693,7 +1694,7 @@ Block.prototype.mixin = function(mixinObj, opt_disableCheck) { */ Block.prototype.interpolate_ = function( message, args, lastDummyAlign, warningPrefix) { - const tokens = utils.tokenizeInterpolation(message); + const tokens = parsing.tokenizeInterpolation(message); this.validateTokens_(tokens, args.length); const elements = this.interpolateArguments_(tokens, args, lastDummyAlign); diff --git a/core/block_drag_surface.js b/core/block_drag_surface.js index 79c70acfe..2ff685cde 100644 --- a/core/block_drag_surface.js +++ b/core/block_drag_surface.js @@ -27,7 +27,7 @@ goog.module('Blockly.BlockDragSurfaceSvg'); const dom = goog.require('Blockly.utils.dom'); -const utils = goog.require('Blockly.utils'); +const svgMath = goog.require('Blockly.utils.svgMath'); const {Coordinate} = goog.require('Blockly.utils.Coordinate'); const {Svg} = goog.require('Blockly.utils.Svg'); @@ -200,7 +200,7 @@ BlockDragSurfaceSvg.prototype.translateSurface = function(x, y) { * @return {!Coordinate} Current translation of the surface. */ BlockDragSurfaceSvg.prototype.getSurfaceTranslation = function() { - const xy = utils.getRelativeXY(/** @type {!SVGElement} */ (this.SVG_)); + const xy = svgMath.getRelativeXY(/** @type {!SVGElement} */ (this.SVG_)); return new Coordinate(xy.x / this.scale_, xy.y / this.scale_); }; diff --git a/core/block_svg.js b/core/block_svg.js index 88f507d44..dfbb1cbf0 100644 --- a/core/block_svg.js +++ b/core/block_svg.js @@ -27,6 +27,7 @@ const dom = goog.require('Blockly.utils.dom'); const eventUtils = goog.require('Blockly.Events.utils'); const internalConstants = goog.require('Blockly.internalConstants'); const object = goog.require('Blockly.utils.object'); +const svgMath = goog.require('Blockly.utils.svgMath'); const userAgent = goog.require('Blockly.utils.userAgent'); const utils = goog.require('Blockly.utils'); const {ASTNode} = goog.require('Blockly.ASTNode'); @@ -145,7 +146,7 @@ const BlockSvg = function(workspace, prototypeName, opt_id) { * @private */ this.useDragSurface_ = - utils.is3dSupported() && !!workspace.getBlockDragSurface(); + svgMath.is3dSupported() && !!workspace.getBlockDragSurface(); const svgPath = this.pathObject.svgPath; svgPath.tooltip = this; @@ -428,7 +429,7 @@ BlockSvg.prototype.getRelativeToSurfaceXY = function() { if (element) { do { // Loop through this block and every parent. - const xy = utils.getRelativeXY(element); + const xy = svgMath.getRelativeXY(element); x += xy.x; y += xy.y; // If this element is the current element on the drag surface, include diff --git a/core/bubble_dragger.js b/core/bubble_dragger.js index 742341095..e312ecdc2 100644 --- a/core/bubble_dragger.js +++ b/core/bubble_dragger.js @@ -16,7 +16,7 @@ goog.module('Blockly.BubbleDragger'); const eventUtils = goog.require('Blockly.Events.utils'); -const utils = goog.require('Blockly.utils'); +const svgMath = goog.require('Blockly.utils.svgMath'); /* eslint-disable-next-line no-unused-vars */ const {BlockDragSurfaceSvg} = goog.requireType('Blockly.BlockDragSurfaceSvg'); const {ComponentManager} = goog.require('Blockly.ComponentManager'); @@ -92,7 +92,7 @@ const BubbleDragger = function(bubble, workspace) { * @private */ this.dragSurface_ = - utils.is3dSupported() && !!workspace.getBlockDragSurface() ? + svgMath.is3dSupported() && !!workspace.getBlockDragSurface() ? workspace.getBlockDragSurface() : null; }; diff --git a/core/contextmenu.js b/core/contextmenu.js index e5b77672e..b3fedda1f 100644 --- a/core/contextmenu.js +++ b/core/contextmenu.js @@ -26,7 +26,7 @@ const dom = goog.require('Blockly.utils.dom'); const eventUtils = goog.require('Blockly.Events.utils'); const internalConstants = goog.require('Blockly.internalConstants'); const userAgent = goog.require('Blockly.utils.userAgent'); -const utils = goog.require('Blockly.utils'); +const svgMath = goog.require('Blockly.utils.svgMath'); /* eslint-disable-next-line no-unused-vars */ const {Block} = goog.requireType('Blockly.Block'); const {Coordinate} = goog.require('Blockly.utils.Coordinate'); @@ -169,7 +169,7 @@ const populate_ = function(options, rtl) { */ const position_ = function(menu, e, rtl) { // Record windowSize and scrollOffset before adding menu. - const viewportBBox = utils.getViewportBBox(); + const viewportBBox = svgMath.getViewportBBox(); // This one is just a point, but we'll pretend that it's a rect so we can use // some helper functions. const anchorBBox = new Rect( diff --git a/core/extensions.js b/core/extensions.js index fa5dd10a8..cab864e88 100644 --- a/core/extensions.js +++ b/core/extensions.js @@ -21,6 +21,7 @@ */ goog.module('Blockly.Extensions'); +const parsing = goog.require('Blockly.utils.parsing'); const utils = goog.require('Blockly.utils'); /* eslint-disable-next-line no-unused-vars */ const {Block} = goog.requireType('Blockly.Block'); @@ -376,7 +377,7 @@ const buildTooltipForDropdown = function(dropdownName, lookupTable) { utils.runAfterPageLoad(function() { for (const key in lookupTable) { // Will print warnings if reference is missing. - utils.checkMessageReferences(lookupTable[key]); + parsing.checkMessageReferences(lookupTable[key]); } }); } @@ -405,7 +406,7 @@ const buildTooltipForDropdown = function(dropdownName, lookupTable) { console.warn(warning + '.'); } } else { - tooltip = utils.replaceMessageReferences(tooltip); + tooltip = parsing.replaceMessageReferences(tooltip); } return tooltip; }.bind(this)); @@ -455,7 +456,7 @@ const buildTooltipWithFieldText = function(msgTemplate, fieldName) { if (typeof document === 'object') { // Relies on document.readyState utils.runAfterPageLoad(function() { // Will print warnings if reference is missing. - utils.checkMessageReferences(msgTemplate); + parsing.checkMessageReferences(msgTemplate); }); } @@ -466,7 +467,7 @@ const buildTooltipWithFieldText = function(msgTemplate, fieldName) { const extensionFn = function() { this.setTooltip(function() { const field = this.getField(fieldName); - return utils.replaceMessageReferences(msgTemplate) + return parsing.replaceMessageReferences(msgTemplate) .replace('%1', field ? field.getText() : ''); }.bind(this)); }; diff --git a/core/field.js b/core/field.js index a1cc796f6..f1fd06b2f 100644 --- a/core/field.js +++ b/core/field.js @@ -25,9 +25,9 @@ const Xml = goog.require('Blockly.Xml'); const browserEvents = goog.require('Blockly.browserEvents'); const dom = goog.require('Blockly.utils.dom'); const eventUtils = goog.require('Blockly.Events.utils'); +const parsing = goog.require('Blockly.utils.parsing'); const style = goog.require('Blockly.utils.style'); const userAgent = goog.require('Blockly.utils.userAgent'); -const utils = goog.require('Blockly.utils'); const utilsXml = goog.require('Blockly.utils.xml'); /* eslint-disable-next-line no-unused-vars */ const {BlockSvg} = goog.requireType('Blockly.BlockSvg'); @@ -287,7 +287,7 @@ Field.prototype.SERIALIZABLE = false; Field.prototype.configure_ = function(config) { let tooltip = config['tooltip']; if (typeof tooltip === 'string') { - tooltip = utils.replaceMessageReferences(config['tooltip']); + tooltip = parsing.replaceMessageReferences(config['tooltip']); } tooltip && this.setTooltip(tooltip); diff --git a/core/field_dropdown.js b/core/field_dropdown.js index c200c0faa..618ecd7b6 100644 --- a/core/field_dropdown.js +++ b/core/field_dropdown.js @@ -23,8 +23,8 @@ const aria = goog.require('Blockly.utils.aria'); const dom = goog.require('Blockly.utils.dom'); const fieldRegistry = goog.require('Blockly.fieldRegistry'); const object = goog.require('Blockly.utils.object'); +const parsing = goog.require('Blockly.utils.parsing'); const userAgent = goog.require('Blockly.utils.userAgent'); -const utils = goog.require('Blockly.utils'); const utilsString = goog.require('Blockly.utils.string'); const {Coordinate} = goog.require('Blockly.utils.Coordinate'); const {DropDownDiv} = goog.require('Blockly.DropDownDiv'); @@ -429,10 +429,10 @@ FieldDropdown.prototype.trimOptions_ = function() { for (let i = 0; i < options.length; i++) { const label = options[i][0]; if (typeof label === 'string') { - options[i][0] = utils.replaceMessageReferences(label); + options[i][0] = parsing.replaceMessageReferences(label); } else { if (label.alt !== null) { - options[i][0].alt = utils.replaceMessageReferences(label.alt); + options[i][0].alt = parsing.replaceMessageReferences(label.alt); } hasImages = true; } diff --git a/core/field_image.js b/core/field_image.js index 6c4f6de60..25cf1c5d1 100644 --- a/core/field_image.js +++ b/core/field_image.js @@ -18,7 +18,7 @@ goog.module('Blockly.FieldImage'); const dom = goog.require('Blockly.utils.dom'); const fieldRegistry = goog.require('Blockly.fieldRegistry'); const object = goog.require('Blockly.utils.object'); -const utils = goog.require('Blockly.utils'); +const parsing = goog.require('Blockly.utils.parsing'); const {Field} = goog.require('Blockly.Field'); const {Size} = goog.require('Blockly.utils.Size'); const {Svg} = goog.require('Blockly.utils.Svg'); @@ -48,9 +48,9 @@ const FieldImage = function( if (!src) { throw Error('Src value of an image field is required'); } - src = utils.replaceMessageReferences(src); - const imageHeight = Number(utils.replaceMessageReferences(height)); - const imageWidth = Number(utils.replaceMessageReferences(width)); + src = parsing.replaceMessageReferences(src); + const imageHeight = Number(parsing.replaceMessageReferences(height)); + const imageWidth = Number(parsing.replaceMessageReferences(width)); if (isNaN(imageHeight) || isNaN(imageWidth)) { throw Error( 'Height and width values of an image field must cast to' + @@ -81,7 +81,7 @@ const FieldImage = function( if (!opt_config) { // If the config wasn't passed, do old configuration. this.flipRtl_ = !!opt_flipRtl; - this.altText_ = utils.replaceMessageReferences(opt_alt) || ''; + this.altText_ = parsing.replaceMessageReferences(opt_alt) || ''; } // Initialize other properties. @@ -177,7 +177,7 @@ FieldImage.prototype.isDirty_ = false; FieldImage.prototype.configure_ = function(config) { FieldImage.superClass_.configure_.call(this, config); this.flipRtl_ = !!config['flipRtl']; - this.altText_ = utils.replaceMessageReferences(config['alt']) || ''; + this.altText_ = parsing.replaceMessageReferences(config['alt']) || ''; }; /** diff --git a/core/field_label.js b/core/field_label.js index 5deff4406..b9195d803 100644 --- a/core/field_label.js +++ b/core/field_label.js @@ -20,7 +20,7 @@ goog.module('Blockly.FieldLabel'); const dom = goog.require('Blockly.utils.dom'); const fieldRegistry = goog.require('Blockly.fieldRegistry'); const object = goog.require('Blockly.utils.object'); -const utils = goog.require('Blockly.utils'); +const parsing = goog.require('Blockly.utils.parsing'); const {Field} = goog.require('Blockly.Field'); @@ -69,7 +69,7 @@ FieldLabel.prototype.DEFAULT_VALUE = ''; * @nocollapse */ FieldLabel.fromJson = function(options) { - const text = utils.replaceMessageReferences(options['text']); + const text = parsing.replaceMessageReferences(options['text']); // `this` might be a subclass of FieldLabel if that class doesn't override // the static fromJson method. return new this(text, undefined, options); diff --git a/core/field_label_serializable.js b/core/field_label_serializable.js index e02338b93..4c4990f03 100644 --- a/core/field_label_serializable.js +++ b/core/field_label_serializable.js @@ -21,7 +21,7 @@ goog.module('Blockly.FieldLabelSerializable'); const fieldRegistry = goog.require('Blockly.fieldRegistry'); const object = goog.require('Blockly.utils.object'); -const utils = goog.require('Blockly.utils'); +const parsing = goog.require('Blockly.utils.parsing'); const {FieldLabel} = goog.require('Blockly.FieldLabel'); @@ -54,7 +54,7 @@ object.inherits(FieldLabelSerializable, FieldLabel); * @nocollapse */ FieldLabelSerializable.fromJson = function(options) { - const text = utils.replaceMessageReferences(options['text']); + const text = parsing.replaceMessageReferences(options['text']); // `this` might be a subclass of FieldLabelSerializable if that class doesn't // override the static fromJson method. return new this(text, undefined, options); diff --git a/core/field_multilineinput.js b/core/field_multilineinput.js index 2e5bf8a17..5496bdef8 100644 --- a/core/field_multilineinput.js +++ b/core/field_multilineinput.js @@ -21,8 +21,8 @@ const aria = goog.require('Blockly.utils.aria'); const dom = goog.require('Blockly.utils.dom'); const fieldRegistry = goog.require('Blockly.fieldRegistry'); const object = goog.require('Blockly.utils.object'); +const parsing = goog.require('Blockly.utils.parsing'); const userAgent = goog.require('Blockly.utils.userAgent'); -const utils = goog.require('Blockly.utils'); const {FieldTextInput} = goog.require('Blockly.FieldTextInput'); const {Field} = goog.require('Blockly.Field'); const {KeyCodes} = goog.require('Blockly.utils.KeyCodes'); @@ -90,7 +90,7 @@ FieldMultilineInput.prototype.configure_ = function(config) { * @nocollapse */ FieldMultilineInput.fromJson = function(options) { - const text = utils.replaceMessageReferences(options['text']); + const text = parsing.replaceMessageReferences(options['text']); // `this` might be a subclass of FieldMultilineInput if that class doesn't // override the static fromJson method. return new this(text, undefined, options); diff --git a/core/field_textinput.js b/core/field_textinput.js index 294c9bbd0..13187ab3f 100644 --- a/core/field_textinput.js +++ b/core/field_textinput.js @@ -24,8 +24,8 @@ const dom = goog.require('Blockly.utils.dom'); const eventUtils = goog.require('Blockly.Events.utils'); const fieldRegistry = goog.require('Blockly.fieldRegistry'); const object = goog.require('Blockly.utils.object'); +const parsing = goog.require('Blockly.utils.parsing'); const userAgent = goog.require('Blockly.utils.userAgent'); -const utils = goog.require('Blockly.utils'); /* eslint-disable-next-line no-unused-vars */ const {BlockSvg} = goog.requireType('Blockly.BlockSvg'); const {Coordinate} = goog.require('Blockly.utils.Coordinate'); @@ -116,7 +116,7 @@ FieldTextInput.prototype.DEFAULT_VALUE = ''; * @nocollapse */ FieldTextInput.fromJson = function(options) { - const text = utils.replaceMessageReferences(options['text']); + const text = parsing.replaceMessageReferences(options['text']); // `this` might be a subclass of FieldTextInput if that class doesn't override // the static fromJson method. return new this(text, undefined, options); diff --git a/core/field_variable.js b/core/field_variable.js index b59553309..25c5cd2f4 100644 --- a/core/field_variable.js +++ b/core/field_variable.js @@ -21,7 +21,7 @@ const Xml = goog.require('Blockly.Xml'); const fieldRegistry = goog.require('Blockly.fieldRegistry'); const internalConstants = goog.require('Blockly.internalConstants'); const object = goog.require('Blockly.utils.object'); -const utils = goog.require('Blockly.utils'); +const parsing = goog.require('Blockly.utils.parsing'); /* eslint-disable-next-line no-unused-vars */ const {Block} = goog.requireType('Blockly.Block'); const {FieldDropdown} = goog.require('Blockly.FieldDropdown'); @@ -104,7 +104,7 @@ object.inherits(FieldVariable, FieldDropdown); * @nocollapse */ FieldVariable.fromJson = function(options) { - const varName = utils.replaceMessageReferences(options['variable']); + const varName = parsing.replaceMessageReferences(options['variable']); // `this` might be a subclass of FieldVariable if that class doesn't override // the static fromJson method. return new this(varName, undefined, undefined, undefined, options); diff --git a/core/flyout_button.js b/core/flyout_button.js index 32624f7d2..6ade89e2d 100644 --- a/core/flyout_button.js +++ b/core/flyout_button.js @@ -21,7 +21,7 @@ const dom = goog.require('Blockly.utils.dom'); const style = goog.require('Blockly.utils.style'); /* eslint-disable-next-line no-unused-vars */ const toolbox = goog.requireType('Blockly.utils.toolbox'); -const utils = goog.require('Blockly.utils'); +const parsing = goog.require('Blockly.utils.parsing'); const {Coordinate} = goog.require('Blockly.utils.Coordinate'); const {Svg} = goog.require('Blockly.utils.Svg'); /* eslint-disable-next-line no-unused-vars */ @@ -170,7 +170,7 @@ FlyoutButton.prototype.createDom = function() { 'text-anchor': 'middle', }, this.svgGroup_); - let text = utils.replaceMessageReferences(this.text_); + let text = parsing.replaceMessageReferences(this.text_); if (this.workspace_.RTL) { // Force text to be RTL by adding an RLM. text += '\u200F'; diff --git a/core/icon.js b/core/icon.js index 55f650d9e..aa7195749 100644 --- a/core/icon.js +++ b/core/icon.js @@ -17,7 +17,7 @@ goog.module('Blockly.Icon'); const browserEvents = goog.require('Blockly.browserEvents'); const dom = goog.require('Blockly.utils.dom'); -const utils = goog.require('Blockly.utils'); +const svgMath = goog.require('Blockly.utils.svgMath'); /* eslint-disable-next-line no-unused-vars */ const {BlockSvg} = goog.requireType('Blockly.BlockSvg'); /* eslint-disable-next-line no-unused-vars */ @@ -170,7 +170,7 @@ Icon.prototype.setIconLocation = function(xy) { Icon.prototype.computeIconLocation = function() { // Find coordinates for the centre of the icon and update the arrow. const blockXY = this.block_.getRelativeToSurfaceXY(); - const iconXY = utils.getRelativeXY( + const iconXY = svgMath.getRelativeXY( /** @type {!SVGElement} */ (this.iconGroup_)); const newXY = new Coordinate( blockXY.x + iconXY.x + this.SIZE / 2, diff --git a/core/rendered_connection.js b/core/rendered_connection.js index 87d9f4f97..ca326a230 100644 --- a/core/rendered_connection.js +++ b/core/rendered_connection.js @@ -22,7 +22,7 @@ const eventUtils = goog.require('Blockly.Events.utils'); const internalConstants = goog.require('Blockly.internalConstants'); const object = goog.require('Blockly.utils.object'); const svgPaths = goog.require('Blockly.utils.svgPaths'); -const utils = goog.require('Blockly.utils'); +const svgMath = goog.require('Blockly.utils.svgMath'); /* eslint-disable-next-line no-unused-vars */ const {BlockSvg} = goog.requireType('Blockly.BlockSvg'); /* eslint-disable-next-line no-unused-vars */ @@ -270,7 +270,7 @@ RenderedConnection.prototype.tighten = function() { throw Error('block is not rendered.'); } // Workspace coordinates. - const xy = utils.getRelativeXY(svgRoot); + const xy = svgMath.getRelativeXY(svgRoot); block.getSvgRoot().setAttribute( 'transform', 'translate(' + (xy.x - dx) + ',' + (xy.y - dy) + ')'); block.moveConnections(-dx, -dy); diff --git a/core/renderers/common/constants.js b/core/renderers/common/constants.js index fc7d2c41d..81401c6c6 100644 --- a/core/renderers/common/constants.js +++ b/core/renderers/common/constants.js @@ -20,7 +20,7 @@ const dom = goog.require('Blockly.utils.dom'); const object = goog.require('Blockly.utils.object'); const svgPaths = goog.require('Blockly.utils.svgPaths'); const userAgent = goog.require('Blockly.utils.userAgent'); -const utils = goog.require('Blockly.utils'); +const parsing = goog.require('Blockly.utils.parsing'); const {ConnectionType} = goog.require('Blockly.ConnectionType'); /* eslint-disable-next-line no-unused-vars */ const {RenderedConnection} = goog.requireType('Blockly.RenderedConnection'); @@ -722,13 +722,14 @@ ConstantProvider.prototype.validatedBlockStyle_ = function(blockStyle) { object.mixin(valid, blockStyle); } // Validate required properties. - const parsedColour = utils.parseBlockColour(valid['colourPrimary'] || '#000'); + const parsedColour = + parsing.parseBlockColour(valid['colourPrimary'] || '#000'); valid.colourPrimary = parsedColour.hex; valid.colourSecondary = valid['colourSecondary'] ? - utils.parseBlockColour(valid['colourSecondary']).hex : + parsing.parseBlockColour(valid['colourSecondary']).hex : this.generateSecondaryColour_(valid.colourPrimary); valid.colourTertiary = valid['colourTertiary'] ? - utils.parseBlockColour(valid['colourTertiary']).hex : + parsing.parseBlockColour(valid['colourTertiary']).hex : this.generateTertiaryColour_(valid.colourPrimary); valid.hat = valid['hat'] || ''; diff --git a/core/scrollbar.js b/core/scrollbar.js index 901486967..42b7d9953 100644 --- a/core/scrollbar.js +++ b/core/scrollbar.js @@ -18,7 +18,7 @@ goog.module('Blockly.Scrollbar'); const Touch = goog.require('Blockly.Touch'); const browserEvents = goog.require('Blockly.browserEvents'); const dom = goog.require('Blockly.utils.dom'); -const utils = goog.require('Blockly.utils'); +const svgMath = goog.require('Blockly.utils.svgMath'); const {Coordinate} = goog.require('Blockly.utils.Coordinate'); /* eslint-disable-next-line no-unused-vars */ const {Metrics} = goog.requireType('Blockly.utils.Metrics'); @@ -691,7 +691,7 @@ Scrollbar.prototype.onMouseDownBar_ = function(e) { e, this.workspace_.getParentSvg(), this.workspace_.getInverseScreenCTM()); const mouseLocation = this.horizontal_ ? mouseXY.x : mouseXY.y; - const handleXY = utils.getInjectionDivXY_(this.svgHandle_); + const handleXY = svgMath.getInjectionDivXY(this.svgHandle_); const handleStart = this.horizontal_ ? handleXY.x : handleXY.y; let handlePosition = this.handlePosition_; diff --git a/core/toolbox/category.js b/core/toolbox/category.js index 389dfe36e..04430653d 100644 --- a/core/toolbox/category.js +++ b/core/toolbox/category.js @@ -20,9 +20,9 @@ const aria = goog.require('Blockly.utils.aria'); const colourUtils = goog.require('Blockly.utils.colour'); const dom = goog.require('Blockly.utils.dom'); const object = goog.require('Blockly.utils.object'); +const parsing = goog.require('Blockly.utils.parsing'); const registry = goog.require('Blockly.registry'); const toolbox = goog.require('Blockly.utils.toolbox'); -const utils = goog.require('Blockly.utils'); /* eslint-disable-next-line no-unused-vars */ const {ICollapsibleToolboxItem} = goog.requireType('Blockly.ICollapsibleToolboxItem'); /* eslint-disable-next-line no-unused-vars */ @@ -53,7 +53,7 @@ const ToolboxCategory = function(categoryDef, toolbox, opt_parent) { * @type {string} * @protected */ - this.name_ = utils.replaceMessageReferences(categoryDef['name']); + this.name_ = parsing.replaceMessageReferences(categoryDef['name']); /** * The colour of the category. @@ -423,7 +423,7 @@ ToolboxCategory.prototype.getClickTarget = function() { ToolboxCategory.prototype.parseColour_ = function(colourValue) { // Decode the colour for any potential message references // (eg. `%{BKY_MATH_HUE}`). - const colour = utils.replaceMessageReferences(colourValue); + const colour = parsing.replaceMessageReferences(colourValue); if (colour === null || colour === '') { // No attribute. No colour. return ''; diff --git a/core/utils.js b/core/utils.js index f0a9752d4..c34322703 100644 --- a/core/utils.js +++ b/core/utils.js @@ -6,20 +6,15 @@ /** * @fileoverview Utility methods. - * These methods are not specific to Blockly, and could be factored out into - * a JavaScript framework such as Closure. */ 'use strict'; /** * Utility methods. - * These methods are not specific to Blockly, and could be factored out into - * a JavaScript framework such as Closure. * @namespace Blockly.utils */ goog.module('Blockly.utils'); -const Msg = goog.require('Blockly.Msg'); const aria = goog.require('Blockly.utils.aria'); const browserEvents = goog.require('Blockly.browserEvents'); const colourUtils = goog.require('Blockly.utils.colour'); @@ -27,11 +22,12 @@ const deprecation = goog.require('Blockly.utils.deprecation'); const dom = goog.require('Blockly.utils.dom'); const global = goog.require('Blockly.utils.global'); const idGenerator = goog.require('Blockly.utils.idGenerator'); -const internalConstants = goog.require('Blockly.internalConstants'); const math = goog.require('Blockly.utils.math'); const object = goog.require('Blockly.utils.object'); +const parsing = goog.require('Blockly.utils.parsing'); const stringUtils = goog.require('Blockly.utils.string'); const style = goog.require('Blockly.utils.style'); +const svgMath = goog.require('Blockly.utils.svgMath'); const svgPaths = goog.require('Blockly.utils.svgPaths'); const toolbox = goog.require('Blockly.utils.toolbox'); const userAgent = goog.require('Blockly.utils.userAgent'); @@ -59,12 +55,14 @@ exports.KeyCodes = KeyCodes; exports.math = math; exports.Metrics = Metrics; exports.object = object; +exports.parsing = parsing; exports.Rect = Rect; exports.Size = Size; exports.string = stringUtils; exports.style = style; exports.Svg = Svg; exports.svgPaths = svgPaths; +exports.svgMath = svgMath; exports.toolbox = toolbox; exports.userAgent = userAgent; exports.xml = xmlUtils; @@ -103,41 +101,14 @@ exports.isTargetInput = isTargetInput; * its parent. Only for SVG elements and children (e.g. rect, g, path). * @param {!Element} element SVG element to find the coordinates of. * @return {!Coordinate} Object with .x and .y properties. + * @deprecated * @alias Blockly.utils.getRelativeXY */ const getRelativeXY = function(element) { - const xy = new Coordinate(0, 0); - // First, check for x and y attributes. - const x = element.getAttribute('x'); - if (x) { - xy.x = parseInt(x, 10); - } - const y = element.getAttribute('y'); - if (y) { - xy.y = parseInt(y, 10); - } - // Second, check for transform="translate(...)" attribute. - const transform = element.getAttribute('transform'); - const r = transform && transform.match(getRelativeXY.XY_REGEX_); - if (r) { - xy.x += Number(r[1]); - if (r[3]) { - xy.y += Number(r[3]); - } - } - - // Then check for style = transform: translate(...) or translate3d(...) - const style = element.getAttribute('style'); - if (style && style.indexOf('translate') > -1) { - const styleComponents = style.match(getRelativeXY.XY_STYLE_REGEX_); - if (styleComponents) { - xy.x += Number(styleComponents[1]); - if (styleComponents[3]) { - xy.y += Number(styleComponents[3]); - } - } - } - return xy; + deprecation.warn( + 'Blockly.utils.getRelativeXY', 'December 2021', 'December 2022', + 'Blockly.svgMath.getRelativeXY'); + return svgMath.getRelativeXY(element); }; exports.getRelativeXY = getRelativeXY; @@ -148,46 +119,17 @@ exports.getRelativeXY = getRelativeXY; * not a child of the div Blockly was injected into, the behaviour is * undefined. * @return {!Coordinate} Object with .x and .y properties. + * @deprecated * @alias Blockly.utils.getInjectionDivXY_ */ const getInjectionDivXY = function(element) { - let x = 0; - let y = 0; - while (element) { - const xy = getRelativeXY(element); - x = x + xy.x; - y = y + xy.y; - const classes = element.getAttribute('class') || ''; - if ((' ' + classes + ' ').indexOf(' injectionDiv ') !== -1) { - break; - } - element = /** @type {!Element} */ (element.parentNode); - } - return new Coordinate(x, y); + deprecation.warn( + 'Blockly.utils.getInjectionDivXY_', 'December 2021', 'December 2022', + 'Blockly.svgMath.getInjectionDivXY'); + return svgMath.getInjectionDivXY(element); }; exports.getInjectionDivXY_ = getInjectionDivXY; -/** - * Static regex to pull the x,y values out of an SVG translate() directive. - * Note that Firefox and IE (9,10) return 'translate(12)' instead of - * 'translate(12, 0)'. - * Note that IE (9,10) returns 'translate(16 8)' instead of 'translate(16, 8)'. - * Note that IE has been reported to return scientific notation (0.123456e-42). - * @type {!RegExp} - * @private - */ -getRelativeXY.XY_REGEX_ = /translate\(\s*([-+\d.e]+)([ ,]\s*([-+\d.e]+)\s*)?/; - -/** - * Static regex to pull the x,y values out of a translate() or translate3d() - * style property. - * Accounts for same exceptions as XY_REGEX_. - * @type {!RegExp} - * @private - */ -getRelativeXY.XY_STYLE_REGEX_ = - /transform:\s*translate(?:3d)?\(\s*([-+\d.e]+)\s*px([ ,]\s*([-+\d.e]+)\s*px)?/; - /** * Returns true this event is a right-click. * @param {!Event} e Mouse event. @@ -246,10 +188,14 @@ exports.getScrollDeltaPixels = getScrollDeltaPixels; * @param {string} message Text which might contain string table references and * interpolation tokens. * @return {!Array} Array of strings and numbers. + * @deprecated * @alias Blockly.utils.tokenizeInterpolation */ const tokenizeInterpolation = function(message) { - return tokenizeInterpolation_(message, true); + deprecation.warn( + 'Blockly.utils.tokenizeInterpolation', 'December 2021', 'December 2022', + 'Blockly.parsing.tokenizeInterpolation'); + return parsing.tokenizeInterpolation(message); }; exports.tokenizeInterpolation = tokenizeInterpolation; @@ -260,16 +206,14 @@ exports.tokenizeInterpolation = tokenizeInterpolation; * @param {string|?} message Message, which may be a string that contains * string table references. * @return {string} String with message references replaced. + * @deprecated * @alias Blockly.utils.replaceMessageReferences */ const replaceMessageReferences = function(message) { - if (typeof message !== 'string') { - return message; - } - const interpolatedResult = tokenizeInterpolation_(message, false); - // When parseInterpolationTokens === false, interpolatedResult should be at - // most length 1. - return interpolatedResult.length ? String(interpolatedResult[0]) : ''; + deprecation.warn( + 'Blockly.utils.replaceMessageReferences', 'December 2021', + 'December 2022', 'Blockly.parsing.replaceMessageReferences'); + return parsing.replaceMessageReferences(message); }; exports.replaceMessageReferences = replaceMessageReferences; @@ -279,166 +223,17 @@ exports.replaceMessageReferences = replaceMessageReferences; * @param {string} message Text which might contain string table references. * @return {boolean} True if all message references have matching values. * Otherwise, false. + * @deprecated * @alias Blockly.utils.checkMessageReferences */ const checkMessageReferences = function(message) { - let validSoFar = true; - - const msgTable = Msg; - - // TODO (#1169): Implement support for other string tables, - // prefixes other than BKY_. - const m = message.match(/%{BKY_[A-Z]\w*}/ig); - for (let i = 0; i < m.length; i++) { - const msgKey = m[i].toUpperCase(); - if (msgTable[msgKey.slice(6, -1)] === undefined) { - console.warn('No message string for ' + m[i] + ' in ' + message); - validSoFar = false; // Continue to report other errors. - } - } - - return validSoFar; + deprecation.warn( + 'Blockly.utils.checkMessageReferences', 'December 2021', 'December 2022', + 'Blockly.parsing.checkMessageReferences'); + return parsing.checkMessageReferences(message); }; exports.checkMessageReferences = checkMessageReferences; -/** - * Internal implementation of the message reference and interpolation token - * parsing used by tokenizeInterpolation() and replaceMessageReferences(). - * @param {string} message Text which might contain string table references and - * interpolation tokens. - * @param {boolean} parseInterpolationTokens Option to parse numeric - * interpolation tokens (%1, %2, ...) when true. - * @return {!Array} Array of strings and numbers. - */ -const tokenizeInterpolation_ = function(message, parseInterpolationTokens) { - const tokens = []; - const chars = message.split(''); - chars.push(''); // End marker. - // Parse the message with a finite state machine. - // 0 - Base case. - // 1 - % found. - // 2 - Digit found. - // 3 - Message ref found. - let state = 0; - const buffer = []; - let number = null; - for (let i = 0; i < chars.length; i++) { - const c = chars[i]; - if (state === 0) { - if (c === '%') { - const text = buffer.join(''); - if (text) { - tokens.push(text); - } - buffer.length = 0; - state = 1; // Start escape. - } else { - buffer.push(c); // Regular char. - } - } else if (state === 1) { - if (c === '%') { - buffer.push(c); // Escaped %: %% - state = 0; - } else if (parseInterpolationTokens && '0' <= c && c <= '9') { - state = 2; - number = c; - const text = buffer.join(''); - if (text) { - tokens.push(text); - } - buffer.length = 0; - } else if (c === '{') { - state = 3; - } else { - buffer.push('%', c); // Not recognized. Return as literal. - state = 0; - } - } else if (state === 2) { - if ('0' <= c && c <= '9') { - number += c; // Multi-digit number. - } else { - tokens.push(parseInt(number, 10)); - i--; // Parse this char again. - state = 0; - } - } else if (state === 3) { // String table reference - if (c === '') { - // Premature end before closing '}' - buffer.splice(0, 0, '%{'); // Re-insert leading delimiter - i--; // Parse this char again. - state = 0; // and parse as string literal. - } else if (c !== '}') { - buffer.push(c); - } else { - const rawKey = buffer.join(''); - if (/[A-Z]\w*/i.test(rawKey)) { // Strict matching - // Found a valid string key. Attempt case insensitive match. - const keyUpper = rawKey.toUpperCase(); - - // BKY_ is the prefix used to namespace the strings used in Blockly - // core files and the predefined blocks in ../blocks/. - // These strings are defined in ../msgs/ files. - const bklyKey = stringUtils.startsWith(keyUpper, 'BKY_') ? - keyUpper.substring(4) : - null; - if (bklyKey && bklyKey in Msg) { - const rawValue = Msg[bklyKey]; - if (typeof rawValue === 'string') { - // Attempt to dereference substrings, too, appending to the end. - Array.prototype.push.apply( - tokens, - tokenizeInterpolation_(rawValue, parseInterpolationTokens)); - } else if (parseInterpolationTokens) { - // When parsing interpolation tokens, numbers are special - // placeholders (%1, %2, etc). Make sure all other values are - // strings. - tokens.push(String(rawValue)); - } else { - tokens.push(rawValue); - } - } else { - // No entry found in the string table. Pass reference as string. - tokens.push('%{' + rawKey + '}'); - } - buffer.length = 0; // Clear the array - state = 0; - } else { - tokens.push('%{' + rawKey + '}'); - buffer.length = 0; - state = 0; // and parse as string literal. - } - } - } - } - let text = buffer.join(''); - if (text) { - tokens.push(text); - } - - // Merge adjacent text tokens into a single string. - const mergedTokens = []; - buffer.length = 0; - for (let i = 0; i < tokens.length; i++) { - if (typeof tokens[i] === 'string') { - buffer.push(tokens[i]); - } else { - text = buffer.join(''); - if (text) { - mergedTokens.push(text); - } - buffer.length = 0; - mergedTokens.push(tokens[i]); - } - } - text = buffer.join(''); - if (text) { - mergedTokens.push(text); - } - buffer.length = 0; - - return mergedTokens; -}; - /** * Generate a unique ID. * @return {string} A globally unique ID string. @@ -457,51 +252,14 @@ exports.genUid = genUid; * Check if 3D transforms are supported by adding an element * and attempting to set the property. * @return {boolean} True if 3D transforms are supported. + * @deprecated * @alias Blockly.utils.is3dSupported */ const is3dSupported = function() { - if (is3dSupported.cached_ !== undefined) { - return is3dSupported.cached_; - } - // CC-BY-SA Lorenzo Polidori - // stackoverflow.com/questions/5661671/detecting-transform-translate3d-support - if (!global.globalThis['getComputedStyle']) { - return false; - } - - const el = document.createElement('p'); - let has3d = 'none'; - const transforms = { - 'webkitTransform': '-webkit-transform', - 'OTransform': '-o-transform', - 'msTransform': '-ms-transform', - 'MozTransform': '-moz-transform', - 'transform': 'transform', - }; - - // Add it to the body to get the computed style. - document.body.insertBefore(el, null); - - for (const t in transforms) { - if (el.style[t] !== undefined) { - el.style[t] = 'translate3d(1px,1px,1px)'; - const computedStyle = global.globalThis['getComputedStyle'](el); - if (!computedStyle) { - // getComputedStyle in Firefox returns null when Blockly is loaded - // inside an iframe with display: none. Returning false and not - // caching is3dSupported means we try again later. This is most likely - // when users are interacting with blocks which should mean Blockly is - // visible again. - // See https://bugzilla.mozilla.org/show_bug.cgi?id=548397 - document.body.removeChild(el); - return false; - } - has3d = computedStyle.getPropertyValue(transforms[t]); - } - } - document.body.removeChild(el); - is3dSupported.cached_ = has3d !== 'none'; - return is3dSupported.cached_; + deprecation.warn( + 'Blockly.utils.is3dSupported', 'December 2021', 'December 2022', + 'Blockly.svgMath.is3dSupported'); + return svgMath.is3dSupported(); }; exports.is3dSupported = is3dSupported; @@ -535,14 +293,14 @@ exports.runAfterPageLoad = runAfterPageLoad; * @return {!Rect} An object containing window width, height, and * scroll position in window coordinates. * @alias Blockly.utils.getViewportBBox + * @deprecated * @package */ const getViewportBBox = function() { - // Pixels, in window coordinates. - const scrollOffset = style.getViewportPageOffset(); - return new Rect( - scrollOffset.y, document.documentElement.clientHeight + scrollOffset.y, - scrollOffset.x, document.documentElement.clientWidth + scrollOffset.x); + deprecation.warn( + 'Blockly.utils.getViewportBBox', 'December 2021', 'December 2022', + 'Blockly.svgMath.getViewportBBox'); + return svgMath.getViewportBBox(); }; exports.getViewportBBox = getViewportBBox; @@ -568,19 +326,14 @@ exports.arrayRemove = arrayRemove; * Gets the document scroll distance as a coordinate object. * Copied from Closure's goog.dom.getDocumentScroll. * @return {!Coordinate} Object with values 'x' and 'y'. + * @deprecated * @alias Blockly.utils.getDocumentScroll */ const getDocumentScroll = function() { - const el = document.documentElement; - const win = window; - if (userAgent.IE && win.pageYOffset !== el.scrollTop) { - // The keyboard on IE10 touch devices shifts the page using the pageYOffset - // without modifying scrollTop. For this case, we want the body scroll - // offsets. - return new Coordinate(el.scrollLeft, el.scrollTop); - } - return new Coordinate( - win.pageXOffset || el.scrollLeft, win.pageYOffset || el.scrollTop); + deprecation.warn( + 'Blockly.utils.getDocumentScroll', 'December 2021', 'December 2022', + 'Blockly.svgMath.getDocumentScroll'); + return svgMath.getDocumentScroll(); }; exports.getDocumentScroll = getDocumentScroll; @@ -620,36 +373,14 @@ exports.getBlockTypeCounts = getBlockTypeCounts; * @param {!WorkspaceSvg} ws The workspace to find the coordinates on. * @param {!Coordinate} screenCoordinates The screen coordinates to * be converted to workspace coordinates + * @deprecated * @return {!Coordinate} The workspace coordinates. - * @alias Blockly.utils.screenToWsCoordinates - * @package */ const screenToWsCoordinates = function(ws, screenCoordinates) { - const screenX = screenCoordinates.x; - const screenY = screenCoordinates.y; - - const injectionDiv = ws.getInjectionDiv(); - // Bounding rect coordinates are in client coordinates, meaning that they - // are in pixels relative to the upper left corner of the visible browser - // window. These coordinates change when you scroll the browser window. - const boundingRect = injectionDiv.getBoundingClientRect(); - - // The client coordinates offset by the injection div's upper left corner. - const clientOffsetPixels = - new Coordinate(screenX - boundingRect.left, screenY - boundingRect.top); - - // The offset in pixels between the main workspace's origin and the upper - // left corner of the injection div. - const mainOffsetPixels = ws.getOriginOffsetInPixels(); - - // The position of the new comment in pixels relative to the origin of the - // main workspace. - const finalOffsetPixels = - Coordinate.difference(clientOffsetPixels, mainOffsetPixels); - - // The position in main workspace coordinates. - const finalOffsetMainWs = finalOffsetPixels.scale(1 / ws.scale); - return finalOffsetMainWs; + deprecation.warn( + 'Blockly.utils.screenToWsCoordinates', 'December 2021', 'December 2022', + 'Blockly.svgMath.screenToWsCoordinates'); + return svgMath.screenToWsCoordinates(ws, screenCoordinates); }; exports.screenToWsCoordinates = screenToWsCoordinates; @@ -661,32 +392,13 @@ exports.screenToWsCoordinates = screenToWsCoordinates; * @return {{hue: ?number, hex: string}} An object containing the colour as * a #RRGGBB string, and the hue if the input was an HSV hue value. * @throws {Error} If the colour cannot be parsed. + * @deprecated * @alias Blockly.utils.parseBlockColour */ const parseBlockColour = function(colour) { - const dereferenced = - (typeof colour === 'string') ? replaceMessageReferences(colour) : colour; - - const hue = Number(dereferenced); - if (!isNaN(hue) && 0 <= hue && hue <= 360) { - return { - hue: hue, - hex: colourUtils.hsvToHex( - hue, internalConstants.HSV_SATURATION, - internalConstants.HSV_VALUE * 255), - }; - } else { - const hex = colourUtils.parse(dereferenced); - if (hex) { - // Only store hue if colour is set as a hue. - return {hue: null, hex: hex}; - } else { - let errorMsg = 'Invalid colour: "' + dereferenced + '"'; - if (colour !== dereferenced) { - errorMsg += ' (from "' + colour + '")'; - } - throw Error(errorMsg); - } - } + deprecation.warn( + 'Blockly.utils.parseBlockColour', 'December 2021', 'December 2022', + 'Blockly.parsing.parseBlockColour'); + return parsing.parseBlockColour(colour); }; exports.parseBlockColour = parseBlockColour; diff --git a/core/utils/parsing.js b/core/utils/parsing.js new file mode 100644 index 000000000..aba0d2d78 --- /dev/null +++ b/core/utils/parsing.js @@ -0,0 +1,263 @@ +/** + * @license + * Copyright 2021 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @fileoverview Utility methods related to block and message parsing. + */ +'use strict'; + +/** + * @namespace Blockly.utils.parsing + */ +goog.module('Blockly.utils.parsing'); + +const Msg = goog.require('Blockly.Msg'); +const colourUtils = goog.require('Blockly.utils.colour'); +const internalConstants = goog.require('Blockly.internalConstants'); +const stringUtils = goog.require('Blockly.utils.string'); + + +/** + * Internal implementation of the message reference and interpolation token + * parsing used by tokenizeInterpolation() and replaceMessageReferences(). + * @param {string} message Text which might contain string table references and + * interpolation tokens. + * @param {boolean} parseInterpolationTokens Option to parse numeric + * interpolation tokens (%1, %2, ...) when true. + * @return {!Array} Array of strings and numbers. + */ +const tokenizeInterpolationInternal = function( + message, parseInterpolationTokens) { + const tokens = []; + const chars = message.split(''); + chars.push(''); // End marker. + // Parse the message with a finite state machine. + // 0 - Base case. + // 1 - % found. + // 2 - Digit found. + // 3 - Message ref found. + let state = 0; + const buffer = []; + let number = null; + for (let i = 0; i < chars.length; i++) { + const c = chars[i]; + if (state === 0) { + if (c === '%') { + const text = buffer.join(''); + if (text) { + tokens.push(text); + } + buffer.length = 0; + state = 1; // Start escape. + } else { + buffer.push(c); // Regular char. + } + } else if (state === 1) { + if (c === '%') { + buffer.push(c); // Escaped %: %% + state = 0; + } else if (parseInterpolationTokens && '0' <= c && c <= '9') { + state = 2; + number = c; + const text = buffer.join(''); + if (text) { + tokens.push(text); + } + buffer.length = 0; + } else if (c === '{') { + state = 3; + } else { + buffer.push('%', c); // Not recognized. Return as literal. + state = 0; + } + } else if (state === 2) { + if ('0' <= c && c <= '9') { + number += c; // Multi-digit number. + } else { + tokens.push(parseInt(number, 10)); + i--; // Parse this char again. + state = 0; + } + } else if (state === 3) { // String table reference + if (c === '') { + // Premature end before closing '}' + buffer.splice(0, 0, '%{'); // Re-insert leading delimiter + i--; // Parse this char again. + state = 0; // and parse as string literal. + } else if (c !== '}') { + buffer.push(c); + } else { + const rawKey = buffer.join(''); + if (/[A-Z]\w*/i.test(rawKey)) { // Strict matching + // Found a valid string key. Attempt case insensitive match. + const keyUpper = rawKey.toUpperCase(); + + // BKY_ is the prefix used to namespace the strings used in Blockly + // core files and the predefined blocks in ../blocks/. + // These strings are defined in ../msgs/ files. + const bklyKey = stringUtils.startsWith(keyUpper, 'BKY_') ? + keyUpper.substring(4) : + null; + if (bklyKey && bklyKey in Msg) { + const rawValue = Msg[bklyKey]; + if (typeof rawValue === 'string') { + // Attempt to dereference substrings, too, appending to the end. + Array.prototype.push.apply( + tokens, + tokenizeInterpolationInternal( + rawValue, parseInterpolationTokens)); + } else if (parseInterpolationTokens) { + // When parsing interpolation tokens, numbers are special + // placeholders (%1, %2, etc). Make sure all other values are + // strings. + tokens.push(String(rawValue)); + } else { + tokens.push(rawValue); + } + } else { + // No entry found in the string table. Pass reference as string. + tokens.push('%{' + rawKey + '}'); + } + buffer.length = 0; // Clear the array + state = 0; + } else { + tokens.push('%{' + rawKey + '}'); + buffer.length = 0; + state = 0; // and parse as string literal. + } + } + } + } + let text = buffer.join(''); + if (text) { + tokens.push(text); + } + + // Merge adjacent text tokens into a single string. + const mergedTokens = []; + buffer.length = 0; + for (let i = 0; i < tokens.length; i++) { + if (typeof tokens[i] === 'string') { + buffer.push(tokens[i]); + } else { + text = buffer.join(''); + if (text) { + mergedTokens.push(text); + } + buffer.length = 0; + mergedTokens.push(tokens[i]); + } + } + text = buffer.join(''); + if (text) { + mergedTokens.push(text); + } + buffer.length = 0; + + return mergedTokens; +}; + +/** + * Parse a string with any number of interpolation tokens (%1, %2, ...). + * It will also replace string table references (e.g., %{bky_my_msg} and + * %{BKY_MY_MSG} will both be replaced with the value in + * Msg['MY_MSG']). Percentage sign characters '%' may be self-escaped + * (e.g., '%%'). + * @param {string} message Text which might contain string table references and + * interpolation tokens. + * @return {!Array} Array of strings and numbers. + * @alias Blockly.parsing.tokenizeInterpolation + */ +const tokenizeInterpolation = function(message) { + return tokenizeInterpolationInternal(message, true); +}; +exports.tokenizeInterpolation = tokenizeInterpolation; + +/** + * Replaces string table references in a message, if the message is a string. + * For example, "%{bky_my_msg}" and "%{BKY_MY_MSG}" will both be replaced with + * the value in Msg['MY_MSG']. + * @param {string|?} message Message, which may be a string that contains + * string table references. + * @return {string} String with message references replaced. + * @alias Blockly.parsing.replaceMessageReferences + */ +const replaceMessageReferences = function(message) { + if (typeof message !== 'string') { + return message; + } + const interpolatedResult = tokenizeInterpolationInternal(message, false); + // When parseInterpolationTokens === false, interpolatedResult should be at + // most length 1. + return interpolatedResult.length ? String(interpolatedResult[0]) : ''; +}; +exports.replaceMessageReferences = replaceMessageReferences; + +/** + * Validates that any %{MSG_KEY} references in the message refer to keys of + * the Msg string table. + * @param {string} message Text which might contain string table references. + * @return {boolean} True if all message references have matching values. + * Otherwise, false. + * @alias Blockly.parsing.checkMessageReferences + */ +const checkMessageReferences = function(message) { + let validSoFar = true; + + const msgTable = Msg; + + // TODO (#1169): Implement support for other string tables, + // prefixes other than BKY_. + const m = message.match(/%{BKY_[A-Z]\w*}/ig); + for (let i = 0; i < m.length; i++) { + const msgKey = m[i].toUpperCase(); + if (msgTable[msgKey.slice(6, -1)] === undefined) { + console.warn('No message string for ' + m[i] + ' in ' + message); + validSoFar = false; // Continue to report other errors. + } + } + + return validSoFar; +}; +exports.checkMessageReferences = checkMessageReferences; + +/** + * Parse a block colour from a number or string, as provided in a block + * definition. + * @param {number|string} colour HSV hue value (0 to 360), #RRGGBB string, + * or a message reference string pointing to one of those two values. + * @return {{hue: ?number, hex: string}} An object containing the colour as + * a #RRGGBB string, and the hue if the input was an HSV hue value. + * @throws {Error} If the colour cannot be parsed. + * @alias Blockly.parsing.parseBlockColour + */ +const parseBlockColour = function(colour) { + const dereferenced = + (typeof colour === 'string') ? replaceMessageReferences(colour) : colour; + + const hue = Number(dereferenced); + if (!isNaN(hue) && 0 <= hue && hue <= 360) { + return { + hue: hue, + hex: colourUtils.hsvToHex( + hue, internalConstants.HSV_SATURATION, + internalConstants.HSV_VALUE * 255), + }; + } else { + const hex = colourUtils.parse(dereferenced); + if (hex) { + // Only store hue if colour is set as a hue. + return {hue: null, hex: hex}; + } else { + let errorMsg = 'Invalid colour: "' + dereferenced + '"'; + if (colour !== dereferenced) { + errorMsg += ' (from "' + colour + '")'; + } + throw Error(errorMsg); + } + } +}; +exports.parseBlockColour = parseBlockColour; diff --git a/core/utils/svg_math.js b/core/utils/svg_math.js new file mode 100644 index 000000000..6a733e9d7 --- /dev/null +++ b/core/utils/svg_math.js @@ -0,0 +1,245 @@ +/** + * @license + * Copyright 2021 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @fileoverview Utility methods for SVG math. + */ +'use strict'; + +/** + * Utility methods realted to figuring out positions of SVG elements. + * @namespace Blockly.utils.svgMath + */ +goog.module('Blockly.utils.svgMath'); + +const global = goog.require('Blockly.utils.global'); +const style = goog.require('Blockly.utils.style'); +const userAgent = goog.require('Blockly.utils.userAgent'); +const {Coordinate} = goog.require('Blockly.utils.Coordinate'); +const {Rect} = goog.require('Blockly.utils.Rect'); +/* eslint-disable-next-line no-unused-vars */ +const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg'); + + +/** + * Static regex to pull the x,y values out of an SVG translate() directive. + * Note that Firefox and IE (9,10) return 'translate(12)' instead of + * 'translate(12, 0)'. + * Note that IE (9,10) returns 'translate(16 8)' instead of 'translate(16, 8)'. + * Note that IE has been reported to return scientific notation (0.123456e-42). + * @type {!RegExp} + */ +const XY_REGEX = /translate\(\s*([-+\d.e]+)([ ,]\s*([-+\d.e]+)\s*)?/; + +/** + * Static regex to pull the x,y values out of a translate() or translate3d() + * style property. + * Accounts for same exceptions as XY_REGEX. + * @type {!RegExp} + */ +const XY_STYLE_REGEX = + /transform:\s*translate(?:3d)?\(\s*([-+\d.e]+)\s*px([ ,]\s*([-+\d.e]+)\s*px)?/; + + +/** + * Return the coordinates of the top-left corner of this element relative to + * its parent. Only for SVG elements and children (e.g. rect, g, path). + * @param {!Element} element SVG element to find the coordinates of. + * @return {!Coordinate} Object with .x and .y properties. + * @alias Blockly.svgMath.getRelativeXY + */ +const getRelativeXY = function(element) { + const xy = new Coordinate(0, 0); + // First, check for x and y attributes. + const x = element.getAttribute('x'); + if (x) { + xy.x = parseInt(x, 10); + } + const y = element.getAttribute('y'); + if (y) { + xy.y = parseInt(y, 10); + } + // Second, check for transform="translate(...)" attribute. + const transform = element.getAttribute('transform'); + const r = transform && transform.match(XY_REGEX); + if (r) { + xy.x += Number(r[1]); + if (r[3]) { + xy.y += Number(r[3]); + } + } + + // Then check for style = transform: translate(...) or translate3d(...) + const style = element.getAttribute('style'); + if (style && style.indexOf('translate') > -1) { + const styleComponents = style.match(XY_STYLE_REGEX); + if (styleComponents) { + xy.x += Number(styleComponents[1]); + if (styleComponents[3]) { + xy.y += Number(styleComponents[3]); + } + } + } + return xy; +}; +exports.getRelativeXY = getRelativeXY; + +/** + * Return the coordinates of the top-left corner of this element relative to + * the div Blockly was injected into. + * @param {!Element} element SVG element to find the coordinates of. If this is + * not a child of the div Blockly was injected into, the behaviour is + * undefined. + * @return {!Coordinate} Object with .x and .y properties. + * @alias Blockly.svgMath.getInjectionDivXY + */ +const getInjectionDivXY = function(element) { + let x = 0; + let y = 0; + while (element) { + const xy = getRelativeXY(element); + x = x + xy.x; + y = y + xy.y; + const classes = element.getAttribute('class') || ''; + if ((' ' + classes + ' ').indexOf(' injectionDiv ') !== -1) { + break; + } + element = /** @type {!Element} */ (element.parentNode); + } + return new Coordinate(x, y); +}; +exports.getInjectionDivXY = getInjectionDivXY; + +/** + * Check if 3D transforms are supported by adding an element + * and attempting to set the property. + * @return {boolean} True if 3D transforms are supported. + * @alias Blockly.svgMath.is3dSupported + */ +const is3dSupported = function() { + if (is3dSupported.cached_ !== undefined) { + return is3dSupported.cached_; + } + // CC-BY-SA Lorenzo Polidori + // stackoverflow.com/questions/5661671/detecting-transform-translate3d-support + if (!global.globalThis['getComputedStyle']) { + return false; + } + + const el = document.createElement('p'); + let has3d = 'none'; + const transforms = { + 'webkitTransform': '-webkit-transform', + 'OTransform': '-o-transform', + 'msTransform': '-ms-transform', + 'MozTransform': '-moz-transform', + 'transform': 'transform', + }; + + // Add it to the body to get the computed style. + document.body.insertBefore(el, null); + + for (const t in transforms) { + if (el.style[t] !== undefined) { + el.style[t] = 'translate3d(1px,1px,1px)'; + const computedStyle = global.globalThis['getComputedStyle'](el); + if (!computedStyle) { + // getComputedStyle in Firefox returns null when Blockly is loaded + // inside an iframe with display: none. Returning false and not + // caching is3dSupported means we try again later. This is most likely + // when users are interacting with blocks which should mean Blockly is + // visible again. + // See https://bugzilla.mozilla.org/show_bug.cgi?id=548397 + document.body.removeChild(el); + return false; + } + has3d = computedStyle.getPropertyValue(transforms[t]); + } + } + document.body.removeChild(el); + is3dSupported.cached_ = has3d !== 'none'; + return is3dSupported.cached_; +}; +exports.is3dSupported = is3dSupported; + +/** + * Get the position of the current viewport in window coordinates. This takes + * scroll into account. + * @return {!Rect} An object containing window width, height, and + * scroll position in window coordinates. + * @alias Blockly.svgMath.getViewportBBox + * @package + */ +const getViewportBBox = function() { + // Pixels, in window coordinates. + const scrollOffset = style.getViewportPageOffset(); + return new Rect( + scrollOffset.y, document.documentElement.clientHeight + scrollOffset.y, + scrollOffset.x, document.documentElement.clientWidth + scrollOffset.x); +}; +exports.getViewportBBox = getViewportBBox; + +/** + * Gets the document scroll distance as a coordinate object. + * Copied from Closure's goog.dom.getDocumentScroll. + * @return {!Coordinate} Object with values 'x' and 'y'. + * @alias Blockly.svgMath.getDocumentScroll + */ +const getDocumentScroll = function() { + const el = document.documentElement; + const win = window; + if (userAgent.IE && win.pageYOffset !== el.scrollTop) { + // The keyboard on IE10 touch devices shifts the page using the pageYOffset + // without modifying scrollTop. For this case, we want the body scroll + // offsets. + return new Coordinate(el.scrollLeft, el.scrollTop); + } + return new Coordinate( + win.pageXOffset || el.scrollLeft, win.pageYOffset || el.scrollTop); +}; +exports.getDocumentScroll = getDocumentScroll; + +/** + * Converts screen coordinates to workspace coordinates. + * @param {!WorkspaceSvg} ws The workspace to find the coordinates on. + * @param {!Coordinate} screenCoordinates The screen coordinates to + * be converted to workspace coordinates + * @return {!Coordinate} The workspace coordinates. + * @alias Blockly.svgMath.screenToWsCoordinates + */ +const screenToWsCoordinates = function(ws, screenCoordinates) { + const screenX = screenCoordinates.x; + const screenY = screenCoordinates.y; + + const injectionDiv = ws.getInjectionDiv(); + // Bounding rect coordinates are in client coordinates, meaning that they + // are in pixels relative to the upper left corner of the visible browser + // window. These coordinates change when you scroll the browser window. + const boundingRect = injectionDiv.getBoundingClientRect(); + + // The client coordinates offset by the injection div's upper left corner. + const clientOffsetPixels = + new Coordinate(screenX - boundingRect.left, screenY - boundingRect.top); + + // The offset in pixels between the main workspace's origin and the upper + // left corner of the injection div. + const mainOffsetPixels = ws.getOriginOffsetInPixels(); + + // The position of the new comment in pixels relative to the origin of the + // main workspace. + const finalOffsetPixels = + Coordinate.difference(clientOffsetPixels, mainOffsetPixels); + + // The position in main workspace coordinates. + const finalOffsetMainWs = finalOffsetPixels.scale(1 / ws.scale); + return finalOffsetMainWs; +}; +exports.screenToWsCoordinates = screenToWsCoordinates; + +exports.TEST_ONLY = { + XY_REGEX, + XY_STYLE_REGEX, +}; diff --git a/core/workspace_comment_svg.js b/core/workspace_comment_svg.js index e83ab99c5..1223f596e 100644 --- a/core/workspace_comment_svg.js +++ b/core/workspace_comment_svg.js @@ -23,7 +23,7 @@ const common = goog.require('Blockly.common'); const dom = goog.require('Blockly.utils.dom'); const eventUtils = goog.require('Blockly.Events.utils'); const object = goog.require('Blockly.utils.object'); -const utils = goog.require('Blockly.utils'); +const svgMath = goog.require('Blockly.utils.svgMath'); /* eslint-disable-next-line no-unused-vars */ const {BlockDragSurfaceSvg} = goog.requireType('Blockly.BlockDragSurfaceSvg'); const {Coordinate} = goog.require('Blockly.utils.Coordinate'); @@ -137,7 +137,7 @@ const WorkspaceCommentSvg = function( * @private */ this.useDragSurface_ = - utils.is3dSupported() && !!workspace.getBlockDragSurface(); + svgMath.is3dSupported() && !!workspace.getBlockDragSurface(); WorkspaceCommentSvg.superClass_.constructor.call( this, workspace, content, height, width, opt_id); @@ -355,7 +355,7 @@ WorkspaceCommentSvg.prototype.getRelativeToSurfaceXY = function() { if (element) { do { // Loop through this comment and every parent. - const xy = utils.getRelativeXY(/** @type {!Element} */ (element)); + const xy = svgMath.getRelativeXY(/** @type {!Element} */ (element)); x += xy.x; y += xy.y; // If this element is the current element on the drag surface, include diff --git a/core/workspace_drag_surface_svg.js b/core/workspace_drag_surface_svg.js index 716fed972..586e9676f 100644 --- a/core/workspace_drag_surface_svg.js +++ b/core/workspace_drag_surface_svg.js @@ -23,7 +23,7 @@ goog.module('Blockly.WorkspaceDragSurfaceSvg'); const dom = goog.require('Blockly.utils.dom'); -const utils = goog.require('Blockly.utils'); +const svgMath = goog.require('Blockly.utils.svgMath'); /* eslint-disable-next-line no-unused-vars */ const {Coordinate} = goog.requireType('Blockly.utils.Coordinate'); const {Svg} = goog.require('Blockly.utils.Svg'); @@ -111,7 +111,7 @@ WorkspaceDragSurfaceSvg.prototype.translateSurface = function(x, y) { * @package */ WorkspaceDragSurfaceSvg.prototype.getSurfaceTranslation = function() { - return utils.getRelativeXY(/** @type {!SVGElement} */ (this.SVG_)); + return svgMath.getRelativeXY(/** @type {!SVGElement} */ (this.SVG_)); }; /** diff --git a/core/workspace_svg.js b/core/workspace_svg.js index cd1a1e0b6..47cf0b689 100644 --- a/core/workspace_svg.js +++ b/core/workspace_svg.js @@ -34,6 +34,7 @@ const eventUtils = goog.require('Blockly.Events.utils'); const internalConstants = goog.require('Blockly.internalConstants'); const object = goog.require('Blockly.utils.object'); const registry = goog.require('Blockly.registry'); +const svgMath = goog.require('Blockly.utils.svgMath'); const toolbox = goog.require('Blockly.utils.toolbox'); const userAgent = goog.require('Blockly.utils.userAgent'); const utils = goog.require('Blockly.utils'); @@ -170,7 +171,7 @@ const WorkspaceSvg = function( } this.useWorkspaceDragSurface_ = - !!this.workspaceDragSurface_ && utils.is3dSupported(); + !!this.workspaceDragSurface_ && svgMath.is3dSupported(); /** * List of currently highlighted blocks. Block highlighting is often used to @@ -793,7 +794,7 @@ WorkspaceSvg.prototype.getSvgXY = function(element) { } do { // Loop through this block and every parent. - const xy = utils.getRelativeXY(element); + const xy = svgMath.getRelativeXY(element); if (element === this.getCanvas() || element === this.getBubbleCanvas()) { // After the SVG canvas, don't scale the coordinates. scale = 1; @@ -825,7 +826,7 @@ WorkspaceSvg.prototype.getCachedParentSvgSize = function() { * @package */ WorkspaceSvg.prototype.getOriginOffsetInPixels = function() { - return utils.getInjectionDivXY_(this.getCanvas()); + return svgMath.getInjectionDivXY(this.getCanvas()); }; /** @@ -1214,7 +1215,7 @@ WorkspaceSvg.prototype.resize = function() { */ WorkspaceSvg.prototype.updateScreenCalculationsIfScrolled = function() { /* eslint-disable indent */ - const currScroll = utils.getDocumentScroll(); + const currScroll = svgMath.getDocumentScroll(); if (!Coordinate.equals(this.lastRecordedPageScroll_, currScroll)) { this.lastRecordedPageScroll_ = currScroll; this.updateScreenCalculations_(); @@ -1385,7 +1386,7 @@ WorkspaceSvg.prototype.setupDragSurface = function() { /** @type {Element} */ (this.svgBlockCanvas_.previousSibling); const width = parseInt(this.getParentSvg().getAttribute('width'), 10); const height = parseInt(this.getParentSvg().getAttribute('height'), 10); - const coord = utils.getRelativeXY(this.getCanvas()); + const coord = svgMath.getRelativeXY(this.getCanvas()); this.workspaceDragSurface_.setContentsAndShow( this.getCanvas(), this.getBubbleCanvas(), previousElement, width, height, this.scale); diff --git a/scripts/migration/renamings.js b/scripts/migration/renamings.js index e59a541fb..9159561c8 100644 --- a/scripts/migration/renamings.js +++ b/scripts/migration/renamings.js @@ -21,7 +21,8 @@ */ const renamings = { // Example entry: - '0.0.0': { // These renaming were made after version 0.0.0 was published. + '0.0.0': { + // These renaming were made after version 0.0.0 was published. // Each entry is keyed by the original module name. 'module.name.Old': { // If the module has been renamed, its new name will be listed. @@ -51,7 +52,8 @@ const renamings = { // the exports subsection, which is a map from old export name // to object with info about the new export name. exports: { - oldExportName: { // No need to quote this. + oldExportName: { + // No need to quote this. // If the export has been moved to a different module, that // module is listed. @@ -153,7 +155,7 @@ const renamings = { }, 'Blockly.Blocks': { module: 'Blockly.blocks', - export: 'Blocks', // Previous default export now named. + export: 'Blocks', // Previous default export now named. path: 'Blockly.Blocks', // But still on tree with original name. }, 'Blockly.ContextMenu': { @@ -179,7 +181,7 @@ const renamings = { }, 'Blockly.connectionTypes': { module: 'Blockly.ConnectionType', - export: 'ConnectionType', // Previous default export now named. + export: 'ConnectionType', // Previous default export now named. path: 'Blockly.ConnectionType', // Type reexported directly. }, 'Blockly.utils': { @@ -192,7 +194,7 @@ const renamings = { }, }, 'Blockly.utils.global': { - export: 'globalThis', // Previous default export now named. + export: 'globalThis', // Previous default export now named. path: 'Blockly.utils.global', // But still exported under original name. }, 'Blockly.utils.IdGenerator': { @@ -216,7 +218,22 @@ const renamings = { 'Blockly.Blocks.texts': {module: 'Blockly.blocks.texts'}, 'Blockly.Blocks.variables': {module: 'Blockly.blocks.variables'}, // Blockly.Blocks.variablesDynamic not previously provided. - }, + 'Blockly.utils': { + exports: { + screenToWsCoordinates: {module: 'Blockly.utils.svgMath'}, + getDocumentScroll: {module: 'Blockly.utils.svgMath'}, + getViewportBBox: {module: 'Blockly.utils.svgMath'}, + is3dSupported: {module: 'Blockly.utils.svgMath'}, + getRelativeXY: {module: 'Blockly.utils.svgMath'}, + getInjectionDivXY_: + {module: 'Blockly.utils.svgMath', export: 'getInjectionDivXY'}, + parseBlockColour: {module: 'Blockly.utils.parsing'}, + checkMessageReferences: {module: 'Blockly.utils.parsing'}, + replaceMessageReferences: {module: 'Blockly.utils.parsing'}, + tokenizeInterpolation: {module: 'Blockly.utils.parsing'} + } + } + } }; exports.renamings = renamings; diff --git a/tests/deps.js b/tests/deps.js index 8623e9fd9..d69b7acca 100644 --- a/tests/deps.js +++ b/tests/deps.js @@ -7,17 +7,17 @@ goog.addDependency('../../blocks/procedures.js', ['Blockly.blocks.procedures'], goog.addDependency('../../blocks/text.js', ['Blockly.Constants.Text', 'Blockly.blocks.texts'], ['Blockly', 'Blockly.FieldDropdown', 'Blockly.FieldImage', 'Blockly.FieldMultilineInput', 'Blockly.FieldTextInput', 'Blockly.FieldVariable', 'Blockly.Mutator'], {'lang': 'es6'}); goog.addDependency('../../blocks/variables.js', ['Blockly.Constants.Variables', 'Blockly.blocks.variables'], ['Blockly', 'Blockly.FieldLabel', 'Blockly.FieldVariable'], {'lang': 'es6'}); goog.addDependency('../../blocks/variables_dynamic.js', ['Blockly.Constants.VariablesDynamic', 'Blockly.blocks.variablesDynamic'], ['Blockly', 'Blockly.FieldLabel', 'Blockly.FieldVariable'], {'lang': 'es6'}); -goog.addDependency('../../core/block.js', ['Blockly.Block'], ['Blockly.ASTNode', 'Blockly.Connection', 'Blockly.ConnectionType', 'Blockly.Events.BlockChange', 'Blockly.Events.BlockCreate', 'Blockly.Events.BlockDelete', 'Blockly.Events.BlockMove', 'Blockly.Events.utils', 'Blockly.Extensions', 'Blockly.IASTNodeLocation', 'Blockly.IDeletable', 'Blockly.Input', 'Blockly.Tooltip', 'Blockly.blocks', 'Blockly.common', 'Blockly.constants', 'Blockly.fieldRegistry', 'Blockly.inputTypes', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Size', 'Blockly.utils.idGenerator', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/block.js', ['Blockly.Block'], ['Blockly.ASTNode', 'Blockly.Connection', 'Blockly.ConnectionType', 'Blockly.Events.BlockChange', 'Blockly.Events.BlockCreate', 'Blockly.Events.BlockDelete', 'Blockly.Events.BlockMove', 'Blockly.Events.utils', 'Blockly.Extensions', 'Blockly.IASTNodeLocation', 'Blockly.IDeletable', 'Blockly.Input', 'Blockly.Tooltip', 'Blockly.blocks', 'Blockly.common', 'Blockly.constants', 'Blockly.fieldRegistry', 'Blockly.inputTypes', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Size', 'Blockly.utils.idGenerator', 'Blockly.utils.object', 'Blockly.utils.parsing'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/block_animations.js', ['Blockly.blockAnimations'], ['Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/block_drag_surface.js', ['Blockly.BlockDragSurfaceSvg'], ['Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/block_drag_surface.js', ['Blockly.BlockDragSurfaceSvg'], ['Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.svgMath'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/block_dragger.js', ['Blockly.BlockDragger'], ['Blockly.Events.BlockDrag', 'Blockly.Events.BlockMove', 'Blockly.Events.utils', 'Blockly.IBlockDragger', 'Blockly.InsertionMarkerManager', 'Blockly.blockAnimations', 'Blockly.bumpObjects', 'Blockly.common', 'Blockly.registry', 'Blockly.utils.Coordinate', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/block_svg.js', ['Blockly.BlockSvg'], ['Blockly.ASTNode', 'Blockly.Block', 'Blockly.ConnectionType', 'Blockly.ContextMenu', 'Blockly.ContextMenuRegistry', 'Blockly.Events.BlockMove', 'Blockly.Events.Selected', 'Blockly.Events.utils', 'Blockly.FieldLabel', 'Blockly.IASTNodeLocationSvg', 'Blockly.IBoundedElement', 'Blockly.ICopyable', 'Blockly.IDraggable', 'Blockly.MarkerManager', 'Blockly.Msg', 'Blockly.RenderedConnection', 'Blockly.TabNavigateCursor', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.blockAnimations', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.constants', 'Blockly.internalConstants', 'Blockly.serialization.blocks', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/block_svg.js', ['Blockly.BlockSvg'], ['Blockly.ASTNode', 'Blockly.Block', 'Blockly.ConnectionType', 'Blockly.ContextMenu', 'Blockly.ContextMenuRegistry', 'Blockly.Events.BlockMove', 'Blockly.Events.Selected', 'Blockly.Events.utils', 'Blockly.FieldLabel', 'Blockly.IASTNodeLocationSvg', 'Blockly.IBoundedElement', 'Blockly.ICopyable', 'Blockly.IDraggable', 'Blockly.MarkerManager', 'Blockly.Msg', 'Blockly.RenderedConnection', 'Blockly.TabNavigateCursor', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.blockAnimations', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.constants', 'Blockly.internalConstants', 'Blockly.serialization.blocks', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.svgMath', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/blockly.js', ['Blockly'], ['Blockly.ASTNode', 'Blockly.BasicCursor', 'Blockly.Block', 'Blockly.BlockDragSurfaceSvg', 'Blockly.BlockDragger', 'Blockly.BlockSvg', 'Blockly.BlocklyOptions', 'Blockly.Bubble', 'Blockly.BubbleDragger', 'Blockly.CollapsibleToolboxCategory', 'Blockly.Comment', 'Blockly.ComponentManager', 'Blockly.Connection', 'Blockly.ConnectionChecker', 'Blockly.ConnectionDB', 'Blockly.ConnectionType', 'Blockly.ContextMenu', 'Blockly.ContextMenuItems', 'Blockly.ContextMenuRegistry', 'Blockly.Css', 'Blockly.Cursor', 'Blockly.DeleteArea', 'Blockly.DragTarget', 'Blockly.DropDownDiv', 'Blockly.Events', 'Blockly.Events.BlockCreate', 'Blockly.Events.FinishedLoading', 'Blockly.Events.Ui', 'Blockly.Events.UiBase', 'Blockly.Events.VarCreate', 'Blockly.Extensions', 'Blockly.Field', 'Blockly.FieldAngle', 'Blockly.FieldCheckbox', 'Blockly.FieldColour', 'Blockly.FieldDropdown', 'Blockly.FieldImage', 'Blockly.FieldLabel', 'Blockly.FieldLabelSerializable', 'Blockly.FieldMultilineInput', 'Blockly.FieldNumber', 'Blockly.FieldTextInput', 'Blockly.FieldVariable', 'Blockly.Flyout', 'Blockly.FlyoutButton', 'Blockly.FlyoutMetricsManager', 'Blockly.Generator', 'Blockly.Gesture', 'Blockly.Grid', 'Blockly.HorizontalFlyout', 'Blockly.IASTNodeLocation', 'Blockly.IASTNodeLocationSvg', 'Blockly.IASTNodeLocationWithBlock', 'Blockly.IAutoHideable', 'Blockly.IBlockDragger', 'Blockly.IBoundedElement', 'Blockly.IBubble', 'Blockly.ICollapsibleToolboxItem', 'Blockly.IComponent', 'Blockly.IConnectionChecker', 'Blockly.IContextMenu', 'Blockly.ICopyable', 'Blockly.IDeletable', 'Blockly.IDeleteArea', 'Blockly.IDragTarget', 'Blockly.IDraggable', 'Blockly.IFlyout', 'Blockly.IKeyboardAccessible', 'Blockly.IMetricsManager', 'Blockly.IMovable', 'Blockly.IPositionable', 'Blockly.IRegistrable', 'Blockly.IRegistrableField', 'Blockly.ISelectable', 'Blockly.ISelectableToolboxItem', 'Blockly.IStyleable', 'Blockly.IToolbox', 'Blockly.IToolboxItem', 'Blockly.Icon', 'Blockly.Input', 'Blockly.InsertionMarkerManager', 'Blockly.Marker', 'Blockly.MarkerManager', 'Blockly.Menu', 'Blockly.MenuItem', 'Blockly.MetricsManager', 'Blockly.Mutator', 'Blockly.Names', 'Blockly.Options', 'Blockly.Procedures', 'Blockly.RenderedConnection', 'Blockly.Scrollbar', 'Blockly.ScrollbarPair', 'Blockly.ShortcutItems', 'Blockly.ShortcutRegistry', 'Blockly.TabNavigateCursor', 'Blockly.Theme', 'Blockly.ThemeManager', 'Blockly.Themes', 'Blockly.Toolbox', 'Blockly.ToolboxCategory', 'Blockly.ToolboxItem', 'Blockly.ToolboxSeparator', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.TouchGesture', 'Blockly.Trashcan', 'Blockly.VariableMap', 'Blockly.VariableModel', 'Blockly.Variables', 'Blockly.VariablesDynamic', 'Blockly.VerticalFlyout', 'Blockly.Warning', 'Blockly.WidgetDiv', 'Blockly.Workspace', 'Blockly.WorkspaceAudio', 'Blockly.WorkspaceComment', 'Blockly.WorkspaceCommentSvg', 'Blockly.WorkspaceDragSurfaceSvg', 'Blockly.WorkspaceDragger', 'Blockly.WorkspaceSvg', 'Blockly.Xml', 'Blockly.ZoomControls', 'Blockly.blockAnimations', 'Blockly.blockRendering', 'Blockly.blocks', 'Blockly.browserEvents', 'Blockly.bumpObjects', 'Blockly.clipboard', 'Blockly.common', 'Blockly.constants', 'Blockly.dialog', 'Blockly.fieldRegistry', 'Blockly.geras', 'Blockly.inject', 'Blockly.inputTypes', 'Blockly.internalConstants', 'Blockly.minimalist', 'Blockly.registry', 'Blockly.thrasos', 'Blockly.uiPosition', 'Blockly.utils', 'Blockly.utils.Size', 'Blockly.utils.colour', 'Blockly.utils.deprecation', 'Blockly.utils.global', 'Blockly.utils.toolbox', 'Blockly.zelos'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/blockly_options.js', ['Blockly.BlocklyOptions'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/blocks.js', ['Blockly.blocks'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/browser_events.js', ['Blockly.browserEvents'], ['Blockly.Touch', 'Blockly.internalConstants', 'Blockly.utils.global', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/bubble.js', ['Blockly.Bubble'], ['Blockly.IBubble', 'Blockly.Scrollbar', 'Blockly.Touch', 'Blockly.Workspace', 'Blockly.browserEvents', 'Blockly.utils.Coordinate', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.math', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/bubble_dragger.js', ['Blockly.BubbleDragger'], ['Blockly.Bubble', 'Blockly.ComponentManager', 'Blockly.Events.CommentMove', 'Blockly.Events.utils', 'Blockly.constants', 'Blockly.utils', 'Blockly.utils.Coordinate'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/bubble_dragger.js', ['Blockly.BubbleDragger'], ['Blockly.Bubble', 'Blockly.ComponentManager', 'Blockly.Events.CommentMove', 'Blockly.Events.utils', 'Blockly.constants', 'Blockly.utils.Coordinate', 'Blockly.utils.svgMath'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/bump_objects.js', ['Blockly.bumpObjects'], ['Blockly.Events.utils', 'Blockly.utils.math'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/clipboard.js', ['Blockly.clipboard'], ['Blockly.Events.utils'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/comment.js', ['Blockly.Comment'], ['Blockly.Bubble', 'Blockly.Css', 'Blockly.Events.BlockChange', 'Blockly.Events.BubbleOpen', 'Blockly.Events.utils', 'Blockly.Icon', 'Blockly.Warning', 'Blockly.browserEvents', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); @@ -28,7 +28,7 @@ goog.addDependency('../../core/connection_checker.js', ['Blockly.ConnectionCheck goog.addDependency('../../core/connection_db.js', ['Blockly.ConnectionDB'], ['Blockly.ConnectionType', 'Blockly.constants'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/connection_type.js', ['Blockly.ConnectionType'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/constants.js', ['Blockly.constants'], [], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/contextmenu.js', ['Blockly.ContextMenu'], ['Blockly.Events.BlockCreate', 'Blockly.Events.utils', 'Blockly.Menu', 'Blockly.MenuItem', 'Blockly.Msg', 'Blockly.WidgetDiv', 'Blockly.Xml', 'Blockly.browserEvents', 'Blockly.clipboard', 'Blockly.internalConstants', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.aria', 'Blockly.utils.deprecation', 'Blockly.utils.dom', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/contextmenu.js', ['Blockly.ContextMenu'], ['Blockly.Events.BlockCreate', 'Blockly.Events.utils', 'Blockly.Menu', 'Blockly.MenuItem', 'Blockly.Msg', 'Blockly.WidgetDiv', 'Blockly.Xml', 'Blockly.browserEvents', 'Blockly.clipboard', 'Blockly.internalConstants', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.aria', 'Blockly.utils.deprecation', 'Blockly.utils.dom', 'Blockly.utils.svgMath', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/contextmenu_items.js', ['Blockly.ContextMenuItems'], ['Blockly.ContextMenuRegistry', 'Blockly.Events', 'Blockly.Events.utils', 'Blockly.Msg', 'Blockly.clipboard', 'Blockly.dialog', 'Blockly.inputTypes', 'Blockly.utils.idGenerator', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/contextmenu_registry.js', ['Blockly.ContextMenuRegistry'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/css.js', ['Blockly.Css'], ['Blockly.utils.deprecation'], {'lang': 'es6', 'module': 'goog'}); @@ -65,29 +65,29 @@ goog.addDependency('../../core/events/events_var_rename.js', ['Blockly.Events.Va goog.addDependency('../../core/events/events_viewport.js', ['Blockly.Events.ViewportChange'], ['Blockly.Events.UiBase', 'Blockly.Events.utils', 'Blockly.registry', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/events/utils.js', ['Blockly.Events.utils'], ['Blockly.registry', 'Blockly.utils.idGenerator'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/events/workspace_events.js', ['Blockly.Events.FinishedLoading'], ['Blockly.Events.Abstract', 'Blockly.Events.utils', 'Blockly.registry', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/extensions.js', ['Blockly.Extensions'], ['Blockly.utils'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field.js', ['Blockly.Field'], ['Blockly.DropDownDiv', 'Blockly.Events.BlockChange', 'Blockly.Events.utils', 'Blockly.Gesture', 'Blockly.IASTNodeLocationSvg', 'Blockly.IASTNodeLocationWithBlock', 'Blockly.IKeyboardAccessible', 'Blockly.IRegistrable', 'Blockly.MarkerManager', 'Blockly.Tooltip', 'Blockly.WidgetDiv', 'Blockly.Xml', 'Blockly.browserEvents', 'Blockly.utils', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.style', 'Blockly.utils.userAgent', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/extensions.js', ['Blockly.Extensions'], ['Blockly.utils', 'Blockly.utils.parsing'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field.js', ['Blockly.Field'], ['Blockly.DropDownDiv', 'Blockly.Events.BlockChange', 'Blockly.Events.utils', 'Blockly.Gesture', 'Blockly.IASTNodeLocationSvg', 'Blockly.IASTNodeLocationWithBlock', 'Blockly.IKeyboardAccessible', 'Blockly.IRegistrable', 'Blockly.MarkerManager', 'Blockly.Tooltip', 'Blockly.WidgetDiv', 'Blockly.Xml', 'Blockly.browserEvents', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.parsing', 'Blockly.utils.style', 'Blockly.utils.userAgent', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/field_angle.js', ['Blockly.FieldAngle'], ['Blockly.Css', 'Blockly.DropDownDiv', 'Blockly.FieldTextInput', 'Blockly.WidgetDiv', 'Blockly.browserEvents', 'Blockly.fieldRegistry', 'Blockly.utils.KeyCodes', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.math', 'Blockly.utils.object', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/field_checkbox.js', ['Blockly.FieldCheckbox'], ['Blockly.Events.BlockChange', 'Blockly.Field', 'Blockly.fieldRegistry', 'Blockly.utils.dom', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/field_colour.js', ['Blockly.FieldColour'], ['Blockly.Css', 'Blockly.DropDownDiv', 'Blockly.Events.BlockChange', 'Blockly.Field', 'Blockly.browserEvents', 'Blockly.fieldRegistry', 'Blockly.utils.KeyCodes', 'Blockly.utils.Size', 'Blockly.utils.aria', 'Blockly.utils.colour', 'Blockly.utils.dom', 'Blockly.utils.idGenerator', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field_dropdown.js', ['Blockly.FieldDropdown'], ['Blockly.DropDownDiv', 'Blockly.Field', 'Blockly.Menu', 'Blockly.MenuItem', 'Blockly.fieldRegistry', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.string', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field_image.js', ['Blockly.FieldImage'], ['Blockly.Field', 'Blockly.fieldRegistry', 'Blockly.utils', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field_label.js', ['Blockly.FieldLabel'], ['Blockly.Field', 'Blockly.fieldRegistry', 'Blockly.utils', 'Blockly.utils.dom', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field_label_serializable.js', ['Blockly.FieldLabelSerializable'], ['Blockly.FieldLabel', 'Blockly.fieldRegistry', 'Blockly.utils', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field_multilineinput.js', ['Blockly.FieldMultilineInput'], ['Blockly.Css', 'Blockly.Field', 'Blockly.FieldTextInput', 'Blockly.WidgetDiv', 'Blockly.fieldRegistry', 'Blockly.utils', 'Blockly.utils.KeyCodes', 'Blockly.utils.Svg', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field_dropdown.js', ['Blockly.FieldDropdown'], ['Blockly.DropDownDiv', 'Blockly.Field', 'Blockly.Menu', 'Blockly.MenuItem', 'Blockly.fieldRegistry', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.parsing', 'Blockly.utils.string', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field_image.js', ['Blockly.FieldImage'], ['Blockly.Field', 'Blockly.fieldRegistry', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.parsing'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field_label.js', ['Blockly.FieldLabel'], ['Blockly.Field', 'Blockly.fieldRegistry', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.parsing'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field_label_serializable.js', ['Blockly.FieldLabelSerializable'], ['Blockly.FieldLabel', 'Blockly.fieldRegistry', 'Blockly.utils.object', 'Blockly.utils.parsing'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field_multilineinput.js', ['Blockly.FieldMultilineInput'], ['Blockly.Css', 'Blockly.Field', 'Blockly.FieldTextInput', 'Blockly.WidgetDiv', 'Blockly.fieldRegistry', 'Blockly.utils.KeyCodes', 'Blockly.utils.Svg', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.parsing', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/field_number.js', ['Blockly.FieldNumber'], ['Blockly.FieldTextInput', 'Blockly.fieldRegistry', 'Blockly.utils.aria', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/field_registry.js', ['Blockly.fieldRegistry'], ['Blockly.registry'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field_textinput.js', ['Blockly.FieldTextInput'], ['Blockly.DropDownDiv', 'Blockly.Events.BlockChange', 'Blockly.Events.utils', 'Blockly.Field', 'Blockly.Msg', 'Blockly.WidgetDiv', 'Blockly.browserEvents', 'Blockly.dialog', 'Blockly.fieldRegistry', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.KeyCodes', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field_variable.js', ['Blockly.FieldVariable'], ['Blockly.Events.BlockChange', 'Blockly.FieldDropdown', 'Blockly.Msg', 'Blockly.VariableModel', 'Blockly.Variables', 'Blockly.Xml', 'Blockly.fieldRegistry', 'Blockly.internalConstants', 'Blockly.utils', 'Blockly.utils.Size', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field_textinput.js', ['Blockly.FieldTextInput'], ['Blockly.DropDownDiv', 'Blockly.Events.BlockChange', 'Blockly.Events.utils', 'Blockly.Field', 'Blockly.Msg', 'Blockly.WidgetDiv', 'Blockly.browserEvents', 'Blockly.dialog', 'Blockly.fieldRegistry', 'Blockly.utils.Coordinate', 'Blockly.utils.KeyCodes', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.parsing', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field_variable.js', ['Blockly.FieldVariable'], ['Blockly.Events.BlockChange', 'Blockly.FieldDropdown', 'Blockly.Msg', 'Blockly.VariableModel', 'Blockly.Variables', 'Blockly.Xml', 'Blockly.fieldRegistry', 'Blockly.internalConstants', 'Blockly.utils.Size', 'Blockly.utils.object', 'Blockly.utils.parsing'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/flyout_base.js', ['Blockly.Flyout'], ['Blockly.ComponentManager', 'Blockly.DeleteArea', 'Blockly.Events.BlockCreate', 'Blockly.Events.VarCreate', 'Blockly.Events.utils', 'Blockly.FlyoutMetricsManager', 'Blockly.Gesture', 'Blockly.IFlyout', 'Blockly.ScrollbarPair', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.Variables', 'Blockly.WorkspaceSvg', 'Blockly.Xml', 'Blockly.blockRendering', 'Blockly.browserEvents', 'Blockly.serialization.blocks', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.idGenerator', 'Blockly.utils.object', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/flyout_button.js', ['Blockly.FlyoutButton'], ['Blockly.Css', 'Blockly.browserEvents', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.style'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/flyout_button.js', ['Blockly.FlyoutButton'], ['Blockly.Css', 'Blockly.browserEvents', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.parsing', 'Blockly.utils.style'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/flyout_horizontal.js', ['Blockly.HorizontalFlyout'], ['Blockly.DropDownDiv', 'Blockly.Flyout', 'Blockly.Scrollbar', 'Blockly.WidgetDiv', 'Blockly.browserEvents', 'Blockly.registry', 'Blockly.utils.Rect', 'Blockly.utils.object', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/flyout_metrics_manager.js', ['Blockly.FlyoutMetricsManager'], ['Blockly.MetricsManager', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/flyout_vertical.js', ['Blockly.VerticalFlyout'], ['Blockly.Block', 'Blockly.DropDownDiv', 'Blockly.Flyout', 'Blockly.Scrollbar', 'Blockly.WidgetDiv', 'Blockly.browserEvents', 'Blockly.constants', 'Blockly.registry', 'Blockly.utils.Rect', 'Blockly.utils.object', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/generator.js', ['Blockly.Generator'], ['Blockly.common', 'Blockly.internalConstants', 'Blockly.utils.deprecation'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/gesture.js', ['Blockly.Gesture'], ['Blockly.BlockDragger', 'Blockly.BubbleDragger', 'Blockly.Events.Click', 'Blockly.Events.utils', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.Workspace', 'Blockly.WorkspaceDragger', 'Blockly.blockAnimations', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.internalConstants', 'Blockly.registry', 'Blockly.utils.Coordinate'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/grid.js', ['Blockly.Grid'], ['Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/icon.js', ['Blockly.Icon'], ['Blockly.browserEvents', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/icon.js', ['Blockly.Icon'], ['Blockly.browserEvents', 'Blockly.utils.Coordinate', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.svgMath'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/inject.js', ['Blockly.inject'], ['Blockly.BlockDragSurfaceSvg', 'Blockly.Css', 'Blockly.DropDownDiv', 'Blockly.Grid', 'Blockly.Msg', 'Blockly.Options', 'Blockly.ScrollbarPair', 'Blockly.ShortcutRegistry', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.WidgetDiv', 'Blockly.Workspace', 'Blockly.WorkspaceDragSurfaceSvg', 'Blockly.WorkspaceSvg', 'Blockly.browserEvents', 'Blockly.bumpObjects', 'Blockly.common', 'Blockly.utils.Svg', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/input.js', ['Blockly.Input'], ['Blockly.FieldLabel', 'Blockly.constants', 'Blockly.fieldRegistry', 'Blockly.inputTypes'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/input_types.js', ['Blockly.inputTypes'], ['Blockly.ConnectionType'], {'lang': 'es6', 'module': 'goog'}); @@ -138,9 +138,9 @@ goog.addDependency('../../core/options.js', ['Blockly.Options'], ['Blockly.Theme goog.addDependency('../../core/positionable_helpers.js', ['Blockly.uiPosition'], ['Blockly.Scrollbar', 'Blockly.utils.Rect', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/procedures.js', ['Blockly.Procedures'], ['Blockly.Events.BlockChange', 'Blockly.Events.utils', 'Blockly.Msg', 'Blockly.Names', 'Blockly.Variables', 'Blockly.Workspace', 'Blockly.Xml', 'Blockly.blocks', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/registry.js', ['Blockly.registry'], [], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/rendered_connection.js', ['Blockly.RenderedConnection'], ['Blockly.Connection', 'Blockly.ConnectionType', 'Blockly.Events.utils', 'Blockly.common', 'Blockly.internalConstants', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.deprecation', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.svgPaths'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/rendered_connection.js', ['Blockly.RenderedConnection'], ['Blockly.Connection', 'Blockly.ConnectionType', 'Blockly.Events.utils', 'Blockly.common', 'Blockly.internalConstants', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.deprecation', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.svgMath', 'Blockly.utils.svgPaths'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/renderers/common/block_rendering.js', ['Blockly.blockRendering'], ['Blockly.blockRendering.BottomRow', 'Blockly.blockRendering.Connection', 'Blockly.blockRendering.ConstantProvider', 'Blockly.blockRendering.Debug', 'Blockly.blockRendering.Drawer', 'Blockly.blockRendering.ExternalValueInput', 'Blockly.blockRendering.Field', 'Blockly.blockRendering.Hat', 'Blockly.blockRendering.IPathObject', 'Blockly.blockRendering.Icon', 'Blockly.blockRendering.InRowSpacer', 'Blockly.blockRendering.InlineInput', 'Blockly.blockRendering.InputConnection', 'Blockly.blockRendering.InputRow', 'Blockly.blockRendering.JaggedEdge', 'Blockly.blockRendering.MarkerSvg', 'Blockly.blockRendering.Measurable', 'Blockly.blockRendering.NextConnection', 'Blockly.blockRendering.OutputConnection', 'Blockly.blockRendering.PathObject', 'Blockly.blockRendering.PreviousConnection', 'Blockly.blockRendering.RenderInfo', 'Blockly.blockRendering.Renderer', 'Blockly.blockRendering.RoundCorner', 'Blockly.blockRendering.Row', 'Blockly.blockRendering.SpacerRow', 'Blockly.blockRendering.SquareCorner', 'Blockly.blockRendering.StatementInput', 'Blockly.blockRendering.TopRow', 'Blockly.blockRendering.Types', 'Blockly.blockRendering.debug', 'Blockly.registry', 'Blockly.utils.deprecation'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/renderers/common/constants.js', ['Blockly.blockRendering.ConstantProvider'], ['Blockly.ConnectionType', 'Blockly.utils', 'Blockly.utils.Svg', 'Blockly.utils.colour', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.svgPaths', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/renderers/common/constants.js', ['Blockly.blockRendering.ConstantProvider'], ['Blockly.ConnectionType', 'Blockly.utils.Svg', 'Blockly.utils.colour', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.parsing', 'Blockly.utils.svgPaths', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/renderers/common/debug.js', ['Blockly.blockRendering.debug'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/renderers/common/debugger.js', ['Blockly.blockRendering.Debug'], ['Blockly.ConnectionType', 'Blockly.FieldLabel', 'Blockly.blockRendering.Types', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/renderers/common/drawer.js', ['Blockly.blockRendering.Drawer'], ['Blockly.blockRendering.Types', 'Blockly.blockRendering.debug', 'Blockly.utils.svgPaths'], {'lang': 'es6', 'module': 'goog'}); @@ -201,7 +201,7 @@ goog.addDependency('../../core/renderers/zelos/path_object.js', ['Blockly.zelos. goog.addDependency('../../core/renderers/zelos/renderer.js', ['Blockly.zelos.Renderer'], ['Blockly.ConnectionType', 'Blockly.InsertionMarkerManager', 'Blockly.blockRendering', 'Blockly.blockRendering.Renderer', 'Blockly.utils.object', 'Blockly.zelos.ConstantProvider', 'Blockly.zelos.Drawer', 'Blockly.zelos.MarkerSvg', 'Blockly.zelos.PathObject', 'Blockly.zelos.RenderInfo'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/renderers/zelos/zelos.js', ['Blockly.zelos'], ['Blockly.zelos.BottomRow', 'Blockly.zelos.ConstantProvider', 'Blockly.zelos.Drawer', 'Blockly.zelos.MarkerSvg', 'Blockly.zelos.PathObject', 'Blockly.zelos.RenderInfo', 'Blockly.zelos.Renderer', 'Blockly.zelos.RightConnectionShape', 'Blockly.zelos.StatementInput', 'Blockly.zelos.TopRow'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/requires.js', ['Blockly.requires'], ['Blockly', 'Blockly.Comment', 'Blockly.ContextMenuItems', 'Blockly.FieldAngle', 'Blockly.FieldCheckbox', 'Blockly.FieldColour', 'Blockly.FieldDropdown', 'Blockly.FieldImage', 'Blockly.FieldLabelSerializable', 'Blockly.FieldMultilineInput', 'Blockly.FieldNumber', 'Blockly.FieldTextInput', 'Blockly.FieldVariable', 'Blockly.FlyoutButton', 'Blockly.Generator', 'Blockly.HorizontalFlyout', 'Blockly.Mutator', 'Blockly.ShortcutItems', 'Blockly.Themes.Classic', 'Blockly.Toolbox', 'Blockly.Trashcan', 'Blockly.VariablesDynamic', 'Blockly.VerticalFlyout', 'Blockly.Warning', 'Blockly.ZoomControls', 'Blockly.geras.Renderer', 'Blockly.serialization.blocks', 'Blockly.serialization.registry', 'Blockly.serialization.variables', 'Blockly.serialization.workspaces', 'Blockly.thrasos.Renderer', 'Blockly.zelos.Renderer']); -goog.addDependency('../../core/scrollbar.js', ['Blockly.Scrollbar'], ['Blockly.Touch', 'Blockly.browserEvents', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/scrollbar.js', ['Blockly.Scrollbar'], ['Blockly.Touch', 'Blockly.browserEvents', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.svgMath'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/scrollbar_pair.js', ['Blockly.ScrollbarPair'], ['Blockly.Events.utils', 'Blockly.Scrollbar', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/serialization/blocks.js', ['Blockly.serialization.blocks'], ['Blockly.Events.utils', 'Blockly.Xml', 'Blockly.inputTypes', 'Blockly.serialization.ISerializer', 'Blockly.serialization.exceptions', 'Blockly.serialization.priorities', 'Blockly.serialization.registry', 'Blockly.utils.Size'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/serialization/exceptions.js', ['Blockly.serialization.exceptions'], [], {'lang': 'es6', 'module': 'goog'}); @@ -216,7 +216,7 @@ goog.addDependency('../../core/theme/classic.js', ['Blockly.Themes.Classic'], [' goog.addDependency('../../core/theme/themes.js', ['Blockly.Themes'], ['Blockly.Themes.Classic', 'Blockly.Themes.Zelos'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/theme/zelos.js', ['Blockly.Themes.Zelos'], ['Blockly.Theme'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/theme_manager.js', ['Blockly.ThemeManager'], ['Blockly.utils', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/toolbox/category.js', ['Blockly.ToolboxCategory'], ['Blockly.Css', 'Blockly.ISelectableToolboxItem', 'Blockly.ToolboxItem', 'Blockly.registry', 'Blockly.utils', 'Blockly.utils.aria', 'Blockly.utils.colour', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/toolbox/category.js', ['Blockly.ToolboxCategory'], ['Blockly.Css', 'Blockly.ISelectableToolboxItem', 'Blockly.ToolboxItem', 'Blockly.registry', 'Blockly.utils.aria', 'Blockly.utils.colour', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.parsing', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/toolbox/collapsible_category.js', ['Blockly.CollapsibleToolboxCategory'], ['Blockly.ICollapsibleToolboxItem', 'Blockly.ToolboxCategory', 'Blockly.ToolboxSeparator', 'Blockly.registry', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/toolbox/separator.js', ['Blockly.ToolboxSeparator'], ['Blockly.Css', 'Blockly.ToolboxItem', 'Blockly.registry', 'Blockly.utils.dom', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/toolbox/toolbox.js', ['Blockly.Toolbox'], ['Blockly.BlockSvg', 'Blockly.CollapsibleToolboxCategory', 'Blockly.ComponentManager', 'Blockly.Css', 'Blockly.DeleteArea', 'Blockly.Events.ToolboxItemSelect', 'Blockly.Events.utils', 'Blockly.IAutoHideable', 'Blockly.IKeyboardAccessible', 'Blockly.IStyleable', 'Blockly.IToolbox', 'Blockly.Options', 'Blockly.Touch', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.registry', 'Blockly.utils.KeyCodes', 'Blockly.utils.Rect', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); @@ -225,7 +225,7 @@ goog.addDependency('../../core/tooltip.js', ['Blockly.Tooltip'], ['Blockly.brows goog.addDependency('../../core/touch.js', ['Blockly.Touch'], ['Blockly.internalConstants', 'Blockly.utils.global', 'Blockly.utils.string'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/touch_gesture.js', ['Blockly.TouchGesture'], ['Blockly.Gesture', 'Blockly.Touch', 'Blockly.browserEvents', 'Blockly.utils.Coordinate', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/trashcan.js', ['Blockly.Trashcan'], ['Blockly.ComponentManager', 'Blockly.DeleteArea', 'Blockly.Events.TrashcanOpen', 'Blockly.Events.utils', 'Blockly.IAutoHideable', 'Blockly.IPositionable', 'Blockly.Options', 'Blockly.browserEvents', 'Blockly.internalConstants', 'Blockly.registry', 'Blockly.uiPosition', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/utils.js', ['Blockly.utils'], ['Blockly.Msg', 'Blockly.browserEvents', 'Blockly.internalConstants', 'Blockly.utils.Coordinate', 'Blockly.utils.KeyCodes', 'Blockly.utils.Metrics', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.aria', 'Blockly.utils.colour', 'Blockly.utils.deprecation', 'Blockly.utils.dom', 'Blockly.utils.global', 'Blockly.utils.idGenerator', 'Blockly.utils.math', 'Blockly.utils.object', 'Blockly.utils.string', 'Blockly.utils.style', 'Blockly.utils.svgPaths', 'Blockly.utils.toolbox', 'Blockly.utils.userAgent', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/utils.js', ['Blockly.utils'], ['Blockly.browserEvents', 'Blockly.utils.Coordinate', 'Blockly.utils.KeyCodes', 'Blockly.utils.Metrics', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.aria', 'Blockly.utils.colour', 'Blockly.utils.deprecation', 'Blockly.utils.dom', 'Blockly.utils.global', 'Blockly.utils.idGenerator', 'Blockly.utils.math', 'Blockly.utils.object', 'Blockly.utils.parsing', 'Blockly.utils.string', 'Blockly.utils.style', 'Blockly.utils.svgMath', 'Blockly.utils.svgPaths', 'Blockly.utils.toolbox', 'Blockly.utils.userAgent', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/aria.js', ['Blockly.utils.aria'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/colour.js', ['Blockly.utils.colour'], ['Blockly.internalConstants'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/coordinate.js', ['Blockly.utils.Coordinate'], [], {'lang': 'es6', 'module': 'goog'}); @@ -237,11 +237,13 @@ goog.addDependency('../../core/utils/keycodes.js', ['Blockly.utils.KeyCodes'], [ goog.addDependency('../../core/utils/math.js', ['Blockly.utils.math'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/metrics.js', ['Blockly.utils.Metrics'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/object.js', ['Blockly.utils.object'], [], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/utils/parsing.js', ['Blockly.utils.parsing'], ['Blockly.Msg', 'Blockly.internalConstants', 'Blockly.utils.colour', 'Blockly.utils.string'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/rect.js', ['Blockly.utils.Rect'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/size.js', ['Blockly.utils.Size'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/string.js', ['Blockly.utils.string'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/style.js', ['Blockly.utils.style'], ['Blockly.utils.Coordinate', 'Blockly.utils.Size'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/svg.js', ['Blockly.utils.Svg'], [], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/utils/svg_math.js', ['Blockly.utils.svgMath'], ['Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.global', 'Blockly.utils.style', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/svg_paths.js', ['Blockly.utils.svgPaths'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/toolbox.js', ['Blockly.utils.toolbox'], ['Blockly.Xml', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/useragent.js', ['Blockly.utils.userAgent'], ['Blockly.utils.global'], {'lang': 'es6', 'module': 'goog'}); @@ -255,10 +257,10 @@ goog.addDependency('../../core/widgetdiv.js', ['Blockly.WidgetDiv'], ['Blockly.c goog.addDependency('../../core/workspace.js', ['Blockly.Workspace'], ['Blockly.ConnectionChecker', 'Blockly.Events.utils', 'Blockly.IASTNodeLocation', 'Blockly.Options', 'Blockly.VariableMap', 'Blockly.registry', 'Blockly.utils', 'Blockly.utils.idGenerator', 'Blockly.utils.math'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/workspace_audio.js', ['Blockly.WorkspaceAudio'], ['Blockly.internalConstants', 'Blockly.utils.global', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/workspace_comment.js', ['Blockly.WorkspaceComment'], ['Blockly.Events.CommentChange', 'Blockly.Events.CommentCreate', 'Blockly.Events.CommentDelete', 'Blockly.Events.CommentMove', 'Blockly.Events.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.idGenerator', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/workspace_comment_svg.js', ['Blockly.WorkspaceCommentSvg'], ['Blockly.ContextMenu', 'Blockly.Css', 'Blockly.Events.CommentCreate', 'Blockly.Events.CommentDelete', 'Blockly.Events.CommentMove', 'Blockly.Events.Selected', 'Blockly.Events.utils', 'Blockly.IBoundedElement', 'Blockly.IBubble', 'Blockly.ICopyable', 'Blockly.Touch', 'Blockly.WorkspaceComment', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/workspace_drag_surface_svg.js', ['Blockly.WorkspaceDragSurfaceSvg'], ['Blockly.utils', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/workspace_comment_svg.js', ['Blockly.WorkspaceCommentSvg'], ['Blockly.ContextMenu', 'Blockly.Css', 'Blockly.Events.CommentCreate', 'Blockly.Events.CommentDelete', 'Blockly.Events.CommentMove', 'Blockly.Events.Selected', 'Blockly.Events.utils', 'Blockly.IBoundedElement', 'Blockly.IBubble', 'Blockly.ICopyable', 'Blockly.Touch', 'Blockly.WorkspaceComment', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.svgMath'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/workspace_drag_surface_svg.js', ['Blockly.WorkspaceDragSurfaceSvg'], ['Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.svgMath'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/workspace_dragger.js', ['Blockly.WorkspaceDragger'], ['Blockly.common', 'Blockly.utils.Coordinate'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/workspace_svg.js', ['Blockly.WorkspaceSvg'], ['Blockly.BlockSvg', 'Blockly.ComponentManager', 'Blockly.ConnectionDB', 'Blockly.ContextMenu', 'Blockly.ContextMenuRegistry', 'Blockly.DropDownDiv', 'Blockly.Events.BlockCreate', 'Blockly.Events.ThemeChange', 'Blockly.Events.ViewportChange', 'Blockly.Events.utils', 'Blockly.Gesture', 'Blockly.Grid', 'Blockly.IASTNodeLocationSvg', 'Blockly.MarkerManager', 'Blockly.MetricsManager', 'Blockly.Msg', 'Blockly.Options', 'Blockly.ThemeManager', 'Blockly.Themes.Classic', 'Blockly.Tooltip', 'Blockly.TouchGesture', 'Blockly.WidgetDiv', 'Blockly.Workspace', 'Blockly.WorkspaceAudio', 'Blockly.Xml', 'Blockly.blockRendering', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.internalConstants', 'Blockly.registry', 'Blockly.serialization.blocks', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.toolbox', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/workspace_svg.js', ['Blockly.WorkspaceSvg'], ['Blockly.BlockSvg', 'Blockly.ComponentManager', 'Blockly.ConnectionDB', 'Blockly.ContextMenu', 'Blockly.ContextMenuRegistry', 'Blockly.DropDownDiv', 'Blockly.Events.BlockCreate', 'Blockly.Events.ThemeChange', 'Blockly.Events.ViewportChange', 'Blockly.Events.utils', 'Blockly.Gesture', 'Blockly.Grid', 'Blockly.IASTNodeLocationSvg', 'Blockly.MarkerManager', 'Blockly.MetricsManager', 'Blockly.Msg', 'Blockly.Options', 'Blockly.ThemeManager', 'Blockly.Themes.Classic', 'Blockly.Tooltip', 'Blockly.TouchGesture', 'Blockly.WidgetDiv', 'Blockly.Workspace', 'Blockly.WorkspaceAudio', 'Blockly.Xml', 'Blockly.blockRendering', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.internalConstants', 'Blockly.registry', 'Blockly.serialization.blocks', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.svgMath', 'Blockly.utils.toolbox', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/xml.js', ['Blockly.Xml'], ['Blockly.Events.utils', 'Blockly.inputTypes', 'Blockly.utils.Size', 'Blockly.utils.dom', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/zoom_controls.js', ['Blockly.ZoomControls'], ['Blockly.ComponentManager', 'Blockly.Css', 'Blockly.Events.Click', 'Blockly.Events.utils', 'Blockly.IPositionable', 'Blockly.Touch', 'Blockly.browserEvents', 'Blockly.internalConstants', 'Blockly.uiPosition', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('base.js', [], []); diff --git a/tests/deps.mocha.js b/tests/deps.mocha.js index 0f67a26b7..ca6c6037a 100644 --- a/tests/deps.mocha.js +++ b/tests/deps.mocha.js @@ -7,17 +7,17 @@ goog.addDependency('../../blocks/procedures.js', ['Blockly.blocks.procedures'], goog.addDependency('../../blocks/text.js', ['Blockly.Constants.Text', 'Blockly.blocks.texts'], ['Blockly', 'Blockly.FieldDropdown', 'Blockly.FieldImage', 'Blockly.FieldMultilineInput', 'Blockly.FieldTextInput', 'Blockly.FieldVariable', 'Blockly.Mutator'], {'lang': 'es6'}); goog.addDependency('../../blocks/variables.js', ['Blockly.Constants.Variables', 'Blockly.blocks.variables'], ['Blockly', 'Blockly.FieldLabel', 'Blockly.FieldVariable'], {'lang': 'es6'}); goog.addDependency('../../blocks/variables_dynamic.js', ['Blockly.Constants.VariablesDynamic', 'Blockly.blocks.variablesDynamic'], ['Blockly', 'Blockly.FieldLabel', 'Blockly.FieldVariable'], {'lang': 'es6'}); -goog.addDependency('../../core/block.js', ['Blockly.Block'], ['Blockly.ASTNode', 'Blockly.Connection', 'Blockly.ConnectionType', 'Blockly.Events.BlockChange', 'Blockly.Events.BlockCreate', 'Blockly.Events.BlockDelete', 'Blockly.Events.BlockMove', 'Blockly.Events.utils', 'Blockly.Extensions', 'Blockly.IASTNodeLocation', 'Blockly.IDeletable', 'Blockly.Input', 'Blockly.Tooltip', 'Blockly.blocks', 'Blockly.common', 'Blockly.constants', 'Blockly.fieldRegistry', 'Blockly.inputTypes', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Size', 'Blockly.utils.idGenerator', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/block.js', ['Blockly.Block'], ['Blockly.ASTNode', 'Blockly.Connection', 'Blockly.ConnectionType', 'Blockly.Events.BlockChange', 'Blockly.Events.BlockCreate', 'Blockly.Events.BlockDelete', 'Blockly.Events.BlockMove', 'Blockly.Events.utils', 'Blockly.Extensions', 'Blockly.IASTNodeLocation', 'Blockly.IDeletable', 'Blockly.Input', 'Blockly.Tooltip', 'Blockly.blocks', 'Blockly.common', 'Blockly.constants', 'Blockly.fieldRegistry', 'Blockly.inputTypes', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Size', 'Blockly.utils.idGenerator', 'Blockly.utils.object', 'Blockly.utils.parsing'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/block_animations.js', ['Blockly.blockAnimations'], ['Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/block_drag_surface.js', ['Blockly.BlockDragSurfaceSvg'], ['Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/block_drag_surface.js', ['Blockly.BlockDragSurfaceSvg'], ['Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.svgMath'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/block_dragger.js', ['Blockly.BlockDragger'], ['Blockly.Events.BlockDrag', 'Blockly.Events.BlockMove', 'Blockly.Events.utils', 'Blockly.IBlockDragger', 'Blockly.InsertionMarkerManager', 'Blockly.blockAnimations', 'Blockly.bumpObjects', 'Blockly.common', 'Blockly.registry', 'Blockly.utils.Coordinate', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/block_svg.js', ['Blockly.BlockSvg'], ['Blockly.ASTNode', 'Blockly.Block', 'Blockly.ConnectionType', 'Blockly.ContextMenu', 'Blockly.ContextMenuRegistry', 'Blockly.Events.BlockMove', 'Blockly.Events.Selected', 'Blockly.Events.utils', 'Blockly.FieldLabel', 'Blockly.IASTNodeLocationSvg', 'Blockly.IBoundedElement', 'Blockly.ICopyable', 'Blockly.IDraggable', 'Blockly.MarkerManager', 'Blockly.Msg', 'Blockly.RenderedConnection', 'Blockly.TabNavigateCursor', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.blockAnimations', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.constants', 'Blockly.internalConstants', 'Blockly.serialization.blocks', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/block_svg.js', ['Blockly.BlockSvg'], ['Blockly.ASTNode', 'Blockly.Block', 'Blockly.ConnectionType', 'Blockly.ContextMenu', 'Blockly.ContextMenuRegistry', 'Blockly.Events.BlockMove', 'Blockly.Events.Selected', 'Blockly.Events.utils', 'Blockly.FieldLabel', 'Blockly.IASTNodeLocationSvg', 'Blockly.IBoundedElement', 'Blockly.ICopyable', 'Blockly.IDraggable', 'Blockly.MarkerManager', 'Blockly.Msg', 'Blockly.RenderedConnection', 'Blockly.TabNavigateCursor', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.blockAnimations', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.constants', 'Blockly.internalConstants', 'Blockly.serialization.blocks', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.svgMath', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/blockly.js', ['Blockly'], ['Blockly.ASTNode', 'Blockly.BasicCursor', 'Blockly.Block', 'Blockly.BlockDragSurfaceSvg', 'Blockly.BlockDragger', 'Blockly.BlockSvg', 'Blockly.BlocklyOptions', 'Blockly.Bubble', 'Blockly.BubbleDragger', 'Blockly.CollapsibleToolboxCategory', 'Blockly.Comment', 'Blockly.ComponentManager', 'Blockly.Connection', 'Blockly.ConnectionChecker', 'Blockly.ConnectionDB', 'Blockly.ConnectionType', 'Blockly.ContextMenu', 'Blockly.ContextMenuItems', 'Blockly.ContextMenuRegistry', 'Blockly.Css', 'Blockly.Cursor', 'Blockly.DeleteArea', 'Blockly.DragTarget', 'Blockly.DropDownDiv', 'Blockly.Events', 'Blockly.Events.BlockCreate', 'Blockly.Events.FinishedLoading', 'Blockly.Events.Ui', 'Blockly.Events.UiBase', 'Blockly.Events.VarCreate', 'Blockly.Extensions', 'Blockly.Field', 'Blockly.FieldAngle', 'Blockly.FieldCheckbox', 'Blockly.FieldColour', 'Blockly.FieldDropdown', 'Blockly.FieldImage', 'Blockly.FieldLabel', 'Blockly.FieldLabelSerializable', 'Blockly.FieldMultilineInput', 'Blockly.FieldNumber', 'Blockly.FieldTextInput', 'Blockly.FieldVariable', 'Blockly.Flyout', 'Blockly.FlyoutButton', 'Blockly.FlyoutMetricsManager', 'Blockly.Generator', 'Blockly.Gesture', 'Blockly.Grid', 'Blockly.HorizontalFlyout', 'Blockly.IASTNodeLocation', 'Blockly.IASTNodeLocationSvg', 'Blockly.IASTNodeLocationWithBlock', 'Blockly.IAutoHideable', 'Blockly.IBlockDragger', 'Blockly.IBoundedElement', 'Blockly.IBubble', 'Blockly.ICollapsibleToolboxItem', 'Blockly.IComponent', 'Blockly.IConnectionChecker', 'Blockly.IContextMenu', 'Blockly.ICopyable', 'Blockly.IDeletable', 'Blockly.IDeleteArea', 'Blockly.IDragTarget', 'Blockly.IDraggable', 'Blockly.IFlyout', 'Blockly.IKeyboardAccessible', 'Blockly.IMetricsManager', 'Blockly.IMovable', 'Blockly.IPositionable', 'Blockly.IRegistrable', 'Blockly.IRegistrableField', 'Blockly.ISelectable', 'Blockly.ISelectableToolboxItem', 'Blockly.IStyleable', 'Blockly.IToolbox', 'Blockly.IToolboxItem', 'Blockly.Icon', 'Blockly.Input', 'Blockly.InsertionMarkerManager', 'Blockly.Marker', 'Blockly.MarkerManager', 'Blockly.Menu', 'Blockly.MenuItem', 'Blockly.MetricsManager', 'Blockly.Mutator', 'Blockly.Names', 'Blockly.Options', 'Blockly.Procedures', 'Blockly.RenderedConnection', 'Blockly.Scrollbar', 'Blockly.ScrollbarPair', 'Blockly.ShortcutItems', 'Blockly.ShortcutRegistry', 'Blockly.TabNavigateCursor', 'Blockly.Theme', 'Blockly.ThemeManager', 'Blockly.Themes', 'Blockly.Toolbox', 'Blockly.ToolboxCategory', 'Blockly.ToolboxItem', 'Blockly.ToolboxSeparator', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.TouchGesture', 'Blockly.Trashcan', 'Blockly.VariableMap', 'Blockly.VariableModel', 'Blockly.Variables', 'Blockly.VariablesDynamic', 'Blockly.VerticalFlyout', 'Blockly.Warning', 'Blockly.WidgetDiv', 'Blockly.Workspace', 'Blockly.WorkspaceAudio', 'Blockly.WorkspaceComment', 'Blockly.WorkspaceCommentSvg', 'Blockly.WorkspaceDragSurfaceSvg', 'Blockly.WorkspaceDragger', 'Blockly.WorkspaceSvg', 'Blockly.Xml', 'Blockly.ZoomControls', 'Blockly.blockAnimations', 'Blockly.blockRendering', 'Blockly.blocks', 'Blockly.browserEvents', 'Blockly.bumpObjects', 'Blockly.clipboard', 'Blockly.common', 'Blockly.constants', 'Blockly.dialog', 'Blockly.fieldRegistry', 'Blockly.geras', 'Blockly.inject', 'Blockly.inputTypes', 'Blockly.internalConstants', 'Blockly.minimalist', 'Blockly.registry', 'Blockly.thrasos', 'Blockly.uiPosition', 'Blockly.utils', 'Blockly.utils.Size', 'Blockly.utils.colour', 'Blockly.utils.deprecation', 'Blockly.utils.global', 'Blockly.utils.toolbox', 'Blockly.zelos'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/blockly_options.js', ['Blockly.BlocklyOptions'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/blocks.js', ['Blockly.blocks'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/browser_events.js', ['Blockly.browserEvents'], ['Blockly.Touch', 'Blockly.internalConstants', 'Blockly.utils.global', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/bubble.js', ['Blockly.Bubble'], ['Blockly.IBubble', 'Blockly.Scrollbar', 'Blockly.Touch', 'Blockly.Workspace', 'Blockly.browserEvents', 'Blockly.utils.Coordinate', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.math', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/bubble_dragger.js', ['Blockly.BubbleDragger'], ['Blockly.Bubble', 'Blockly.ComponentManager', 'Blockly.Events.CommentMove', 'Blockly.Events.utils', 'Blockly.constants', 'Blockly.utils', 'Blockly.utils.Coordinate'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/bubble_dragger.js', ['Blockly.BubbleDragger'], ['Blockly.Bubble', 'Blockly.ComponentManager', 'Blockly.Events.CommentMove', 'Blockly.Events.utils', 'Blockly.constants', 'Blockly.utils.Coordinate', 'Blockly.utils.svgMath'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/bump_objects.js', ['Blockly.bumpObjects'], ['Blockly.Events.utils', 'Blockly.utils.math'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/clipboard.js', ['Blockly.clipboard'], ['Blockly.Events.utils'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/comment.js', ['Blockly.Comment'], ['Blockly.Bubble', 'Blockly.Css', 'Blockly.Events.BlockChange', 'Blockly.Events.BubbleOpen', 'Blockly.Events.utils', 'Blockly.Icon', 'Blockly.Warning', 'Blockly.browserEvents', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); @@ -28,7 +28,7 @@ goog.addDependency('../../core/connection_checker.js', ['Blockly.ConnectionCheck goog.addDependency('../../core/connection_db.js', ['Blockly.ConnectionDB'], ['Blockly.ConnectionType', 'Blockly.constants'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/connection_type.js', ['Blockly.ConnectionType'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/constants.js', ['Blockly.constants'], [], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/contextmenu.js', ['Blockly.ContextMenu'], ['Blockly.Events.BlockCreate', 'Blockly.Events.utils', 'Blockly.Menu', 'Blockly.MenuItem', 'Blockly.Msg', 'Blockly.WidgetDiv', 'Blockly.Xml', 'Blockly.browserEvents', 'Blockly.clipboard', 'Blockly.internalConstants', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.aria', 'Blockly.utils.deprecation', 'Blockly.utils.dom', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/contextmenu.js', ['Blockly.ContextMenu'], ['Blockly.Events.BlockCreate', 'Blockly.Events.utils', 'Blockly.Menu', 'Blockly.MenuItem', 'Blockly.Msg', 'Blockly.WidgetDiv', 'Blockly.Xml', 'Blockly.browserEvents', 'Blockly.clipboard', 'Blockly.internalConstants', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.aria', 'Blockly.utils.deprecation', 'Blockly.utils.dom', 'Blockly.utils.svgMath', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/contextmenu_items.js', ['Blockly.ContextMenuItems'], ['Blockly.ContextMenuRegistry', 'Blockly.Events', 'Blockly.Events.utils', 'Blockly.Msg', 'Blockly.clipboard', 'Blockly.dialog', 'Blockly.inputTypes', 'Blockly.utils.idGenerator', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/contextmenu_registry.js', ['Blockly.ContextMenuRegistry'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/css.js', ['Blockly.Css'], ['Blockly.utils.deprecation'], {'lang': 'es6', 'module': 'goog'}); @@ -65,29 +65,29 @@ goog.addDependency('../../core/events/events_var_rename.js', ['Blockly.Events.Va goog.addDependency('../../core/events/events_viewport.js', ['Blockly.Events.ViewportChange'], ['Blockly.Events.UiBase', 'Blockly.Events.utils', 'Blockly.registry', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/events/utils.js', ['Blockly.Events.utils'], ['Blockly.registry', 'Blockly.utils.idGenerator'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/events/workspace_events.js', ['Blockly.Events.FinishedLoading'], ['Blockly.Events.Abstract', 'Blockly.Events.utils', 'Blockly.registry', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/extensions.js', ['Blockly.Extensions'], ['Blockly.utils'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field.js', ['Blockly.Field'], ['Blockly.DropDownDiv', 'Blockly.Events.BlockChange', 'Blockly.Events.utils', 'Blockly.Gesture', 'Blockly.IASTNodeLocationSvg', 'Blockly.IASTNodeLocationWithBlock', 'Blockly.IKeyboardAccessible', 'Blockly.IRegistrable', 'Blockly.MarkerManager', 'Blockly.Tooltip', 'Blockly.WidgetDiv', 'Blockly.Xml', 'Blockly.browserEvents', 'Blockly.utils', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.style', 'Blockly.utils.userAgent', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/extensions.js', ['Blockly.Extensions'], ['Blockly.utils', 'Blockly.utils.parsing'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field.js', ['Blockly.Field'], ['Blockly.DropDownDiv', 'Blockly.Events.BlockChange', 'Blockly.Events.utils', 'Blockly.Gesture', 'Blockly.IASTNodeLocationSvg', 'Blockly.IASTNodeLocationWithBlock', 'Blockly.IKeyboardAccessible', 'Blockly.IRegistrable', 'Blockly.MarkerManager', 'Blockly.Tooltip', 'Blockly.WidgetDiv', 'Blockly.Xml', 'Blockly.browserEvents', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.parsing', 'Blockly.utils.style', 'Blockly.utils.userAgent', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/field_angle.js', ['Blockly.FieldAngle'], ['Blockly.Css', 'Blockly.DropDownDiv', 'Blockly.FieldTextInput', 'Blockly.WidgetDiv', 'Blockly.browserEvents', 'Blockly.fieldRegistry', 'Blockly.utils.KeyCodes', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.math', 'Blockly.utils.object', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/field_checkbox.js', ['Blockly.FieldCheckbox'], ['Blockly.Events.BlockChange', 'Blockly.Field', 'Blockly.fieldRegistry', 'Blockly.utils.dom', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/field_colour.js', ['Blockly.FieldColour'], ['Blockly.Css', 'Blockly.DropDownDiv', 'Blockly.Events.BlockChange', 'Blockly.Field', 'Blockly.browserEvents', 'Blockly.fieldRegistry', 'Blockly.utils.KeyCodes', 'Blockly.utils.Size', 'Blockly.utils.aria', 'Blockly.utils.colour', 'Blockly.utils.dom', 'Blockly.utils.idGenerator', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field_dropdown.js', ['Blockly.FieldDropdown'], ['Blockly.DropDownDiv', 'Blockly.Field', 'Blockly.Menu', 'Blockly.MenuItem', 'Blockly.fieldRegistry', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.string', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field_image.js', ['Blockly.FieldImage'], ['Blockly.Field', 'Blockly.fieldRegistry', 'Blockly.utils', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field_label.js', ['Blockly.FieldLabel'], ['Blockly.Field', 'Blockly.fieldRegistry', 'Blockly.utils', 'Blockly.utils.dom', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field_label_serializable.js', ['Blockly.FieldLabelSerializable'], ['Blockly.FieldLabel', 'Blockly.fieldRegistry', 'Blockly.utils', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field_multilineinput.js', ['Blockly.FieldMultilineInput'], ['Blockly.Css', 'Blockly.Field', 'Blockly.FieldTextInput', 'Blockly.WidgetDiv', 'Blockly.fieldRegistry', 'Blockly.utils', 'Blockly.utils.KeyCodes', 'Blockly.utils.Svg', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field_dropdown.js', ['Blockly.FieldDropdown'], ['Blockly.DropDownDiv', 'Blockly.Field', 'Blockly.Menu', 'Blockly.MenuItem', 'Blockly.fieldRegistry', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.parsing', 'Blockly.utils.string', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field_image.js', ['Blockly.FieldImage'], ['Blockly.Field', 'Blockly.fieldRegistry', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.parsing'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field_label.js', ['Blockly.FieldLabel'], ['Blockly.Field', 'Blockly.fieldRegistry', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.parsing'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field_label_serializable.js', ['Blockly.FieldLabelSerializable'], ['Blockly.FieldLabel', 'Blockly.fieldRegistry', 'Blockly.utils.object', 'Blockly.utils.parsing'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field_multilineinput.js', ['Blockly.FieldMultilineInput'], ['Blockly.Css', 'Blockly.Field', 'Blockly.FieldTextInput', 'Blockly.WidgetDiv', 'Blockly.fieldRegistry', 'Blockly.utils.KeyCodes', 'Blockly.utils.Svg', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.parsing', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/field_number.js', ['Blockly.FieldNumber'], ['Blockly.FieldTextInput', 'Blockly.fieldRegistry', 'Blockly.utils.aria', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/field_registry.js', ['Blockly.fieldRegistry'], ['Blockly.registry'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field_textinput.js', ['Blockly.FieldTextInput'], ['Blockly.DropDownDiv', 'Blockly.Events.BlockChange', 'Blockly.Events.utils', 'Blockly.Field', 'Blockly.Msg', 'Blockly.WidgetDiv', 'Blockly.browserEvents', 'Blockly.dialog', 'Blockly.fieldRegistry', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.KeyCodes', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/field_variable.js', ['Blockly.FieldVariable'], ['Blockly.Events.BlockChange', 'Blockly.FieldDropdown', 'Blockly.Msg', 'Blockly.VariableModel', 'Blockly.Variables', 'Blockly.Xml', 'Blockly.fieldRegistry', 'Blockly.internalConstants', 'Blockly.utils', 'Blockly.utils.Size', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field_textinput.js', ['Blockly.FieldTextInput'], ['Blockly.DropDownDiv', 'Blockly.Events.BlockChange', 'Blockly.Events.utils', 'Blockly.Field', 'Blockly.Msg', 'Blockly.WidgetDiv', 'Blockly.browserEvents', 'Blockly.dialog', 'Blockly.fieldRegistry', 'Blockly.utils.Coordinate', 'Blockly.utils.KeyCodes', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.parsing', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/field_variable.js', ['Blockly.FieldVariable'], ['Blockly.Events.BlockChange', 'Blockly.FieldDropdown', 'Blockly.Msg', 'Blockly.VariableModel', 'Blockly.Variables', 'Blockly.Xml', 'Blockly.fieldRegistry', 'Blockly.internalConstants', 'Blockly.utils.Size', 'Blockly.utils.object', 'Blockly.utils.parsing'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/flyout_base.js', ['Blockly.Flyout'], ['Blockly.ComponentManager', 'Blockly.DeleteArea', 'Blockly.Events.BlockCreate', 'Blockly.Events.VarCreate', 'Blockly.Events.utils', 'Blockly.FlyoutMetricsManager', 'Blockly.Gesture', 'Blockly.IFlyout', 'Blockly.ScrollbarPair', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.Variables', 'Blockly.WorkspaceSvg', 'Blockly.Xml', 'Blockly.blockRendering', 'Blockly.browserEvents', 'Blockly.serialization.blocks', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.idGenerator', 'Blockly.utils.object', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/flyout_button.js', ['Blockly.FlyoutButton'], ['Blockly.Css', 'Blockly.browserEvents', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.style'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/flyout_button.js', ['Blockly.FlyoutButton'], ['Blockly.Css', 'Blockly.browserEvents', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.parsing', 'Blockly.utils.style'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/flyout_horizontal.js', ['Blockly.HorizontalFlyout'], ['Blockly.DropDownDiv', 'Blockly.Flyout', 'Blockly.Scrollbar', 'Blockly.WidgetDiv', 'Blockly.browserEvents', 'Blockly.registry', 'Blockly.utils.Rect', 'Blockly.utils.object', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/flyout_metrics_manager.js', ['Blockly.FlyoutMetricsManager'], ['Blockly.MetricsManager', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/flyout_vertical.js', ['Blockly.VerticalFlyout'], ['Blockly.Block', 'Blockly.DropDownDiv', 'Blockly.Flyout', 'Blockly.Scrollbar', 'Blockly.WidgetDiv', 'Blockly.browserEvents', 'Blockly.constants', 'Blockly.registry', 'Blockly.utils.Rect', 'Blockly.utils.object', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/generator.js', ['Blockly.Generator'], ['Blockly.common', 'Blockly.internalConstants', 'Blockly.utils.deprecation'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/gesture.js', ['Blockly.Gesture'], ['Blockly.BlockDragger', 'Blockly.BubbleDragger', 'Blockly.Events.Click', 'Blockly.Events.utils', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.Workspace', 'Blockly.WorkspaceDragger', 'Blockly.blockAnimations', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.internalConstants', 'Blockly.registry', 'Blockly.utils.Coordinate'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/grid.js', ['Blockly.Grid'], ['Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/icon.js', ['Blockly.Icon'], ['Blockly.browserEvents', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/icon.js', ['Blockly.Icon'], ['Blockly.browserEvents', 'Blockly.utils.Coordinate', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.svgMath'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/inject.js', ['Blockly.inject'], ['Blockly.BlockDragSurfaceSvg', 'Blockly.Css', 'Blockly.DropDownDiv', 'Blockly.Grid', 'Blockly.Msg', 'Blockly.Options', 'Blockly.ScrollbarPair', 'Blockly.ShortcutRegistry', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.WidgetDiv', 'Blockly.Workspace', 'Blockly.WorkspaceDragSurfaceSvg', 'Blockly.WorkspaceSvg', 'Blockly.browserEvents', 'Blockly.bumpObjects', 'Blockly.common', 'Blockly.utils.Svg', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/input.js', ['Blockly.Input'], ['Blockly.FieldLabel', 'Blockly.constants', 'Blockly.fieldRegistry', 'Blockly.inputTypes'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/input_types.js', ['Blockly.inputTypes'], ['Blockly.ConnectionType'], {'lang': 'es6', 'module': 'goog'}); @@ -138,9 +138,9 @@ goog.addDependency('../../core/options.js', ['Blockly.Options'], ['Blockly.Theme goog.addDependency('../../core/positionable_helpers.js', ['Blockly.uiPosition'], ['Blockly.Scrollbar', 'Blockly.utils.Rect', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/procedures.js', ['Blockly.Procedures'], ['Blockly.Events.BlockChange', 'Blockly.Events.utils', 'Blockly.Msg', 'Blockly.Names', 'Blockly.Variables', 'Blockly.Workspace', 'Blockly.Xml', 'Blockly.blocks', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/registry.js', ['Blockly.registry'], [], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/rendered_connection.js', ['Blockly.RenderedConnection'], ['Blockly.Connection', 'Blockly.ConnectionType', 'Blockly.Events.utils', 'Blockly.common', 'Blockly.internalConstants', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.deprecation', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.svgPaths'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/rendered_connection.js', ['Blockly.RenderedConnection'], ['Blockly.Connection', 'Blockly.ConnectionType', 'Blockly.Events.utils', 'Blockly.common', 'Blockly.internalConstants', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.deprecation', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.svgMath', 'Blockly.utils.svgPaths'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/renderers/common/block_rendering.js', ['Blockly.blockRendering'], ['Blockly.blockRendering.BottomRow', 'Blockly.blockRendering.Connection', 'Blockly.blockRendering.ConstantProvider', 'Blockly.blockRendering.Debug', 'Blockly.blockRendering.Drawer', 'Blockly.blockRendering.ExternalValueInput', 'Blockly.blockRendering.Field', 'Blockly.blockRendering.Hat', 'Blockly.blockRendering.IPathObject', 'Blockly.blockRendering.Icon', 'Blockly.blockRendering.InRowSpacer', 'Blockly.blockRendering.InlineInput', 'Blockly.blockRendering.InputConnection', 'Blockly.blockRendering.InputRow', 'Blockly.blockRendering.JaggedEdge', 'Blockly.blockRendering.MarkerSvg', 'Blockly.blockRendering.Measurable', 'Blockly.blockRendering.NextConnection', 'Blockly.blockRendering.OutputConnection', 'Blockly.blockRendering.PathObject', 'Blockly.blockRendering.PreviousConnection', 'Blockly.blockRendering.RenderInfo', 'Blockly.blockRendering.Renderer', 'Blockly.blockRendering.RoundCorner', 'Blockly.blockRendering.Row', 'Blockly.blockRendering.SpacerRow', 'Blockly.blockRendering.SquareCorner', 'Blockly.blockRendering.StatementInput', 'Blockly.blockRendering.TopRow', 'Blockly.blockRendering.Types', 'Blockly.blockRendering.debug', 'Blockly.registry', 'Blockly.utils.deprecation'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/renderers/common/constants.js', ['Blockly.blockRendering.ConstantProvider'], ['Blockly.ConnectionType', 'Blockly.utils', 'Blockly.utils.Svg', 'Blockly.utils.colour', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.svgPaths', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/renderers/common/constants.js', ['Blockly.blockRendering.ConstantProvider'], ['Blockly.ConnectionType', 'Blockly.utils.Svg', 'Blockly.utils.colour', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.parsing', 'Blockly.utils.svgPaths', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/renderers/common/debug.js', ['Blockly.blockRendering.debug'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/renderers/common/debugger.js', ['Blockly.blockRendering.Debug'], ['Blockly.ConnectionType', 'Blockly.FieldLabel', 'Blockly.blockRendering.Types', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/renderers/common/drawer.js', ['Blockly.blockRendering.Drawer'], ['Blockly.blockRendering.Types', 'Blockly.blockRendering.debug', 'Blockly.utils.svgPaths'], {'lang': 'es6', 'module': 'goog'}); @@ -201,7 +201,7 @@ goog.addDependency('../../core/renderers/zelos/path_object.js', ['Blockly.zelos. goog.addDependency('../../core/renderers/zelos/renderer.js', ['Blockly.zelos.Renderer'], ['Blockly.ConnectionType', 'Blockly.InsertionMarkerManager', 'Blockly.blockRendering', 'Blockly.blockRendering.Renderer', 'Blockly.utils.object', 'Blockly.zelos.ConstantProvider', 'Blockly.zelos.Drawer', 'Blockly.zelos.MarkerSvg', 'Blockly.zelos.PathObject', 'Blockly.zelos.RenderInfo'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/renderers/zelos/zelos.js', ['Blockly.zelos'], ['Blockly.zelos.BottomRow', 'Blockly.zelos.ConstantProvider', 'Blockly.zelos.Drawer', 'Blockly.zelos.MarkerSvg', 'Blockly.zelos.PathObject', 'Blockly.zelos.RenderInfo', 'Blockly.zelos.Renderer', 'Blockly.zelos.RightConnectionShape', 'Blockly.zelos.StatementInput', 'Blockly.zelos.TopRow'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/requires.js', ['Blockly.requires'], ['Blockly', 'Blockly.Comment', 'Blockly.ContextMenuItems', 'Blockly.FieldAngle', 'Blockly.FieldCheckbox', 'Blockly.FieldColour', 'Blockly.FieldDropdown', 'Blockly.FieldImage', 'Blockly.FieldLabelSerializable', 'Blockly.FieldMultilineInput', 'Blockly.FieldNumber', 'Blockly.FieldTextInput', 'Blockly.FieldVariable', 'Blockly.FlyoutButton', 'Blockly.Generator', 'Blockly.HorizontalFlyout', 'Blockly.Mutator', 'Blockly.ShortcutItems', 'Blockly.Themes.Classic', 'Blockly.Toolbox', 'Blockly.Trashcan', 'Blockly.VariablesDynamic', 'Blockly.VerticalFlyout', 'Blockly.Warning', 'Blockly.ZoomControls', 'Blockly.geras.Renderer', 'Blockly.serialization.blocks', 'Blockly.serialization.registry', 'Blockly.serialization.variables', 'Blockly.serialization.workspaces', 'Blockly.thrasos.Renderer', 'Blockly.zelos.Renderer']); -goog.addDependency('../../core/scrollbar.js', ['Blockly.Scrollbar'], ['Blockly.Touch', 'Blockly.browserEvents', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/scrollbar.js', ['Blockly.Scrollbar'], ['Blockly.Touch', 'Blockly.browserEvents', 'Blockly.utils.Coordinate', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.svgMath'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/scrollbar_pair.js', ['Blockly.ScrollbarPair'], ['Blockly.Events.utils', 'Blockly.Scrollbar', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/serialization/blocks.js', ['Blockly.serialization.blocks'], ['Blockly.Events.utils', 'Blockly.Xml', 'Blockly.inputTypes', 'Blockly.serialization.ISerializer', 'Blockly.serialization.exceptions', 'Blockly.serialization.priorities', 'Blockly.serialization.registry', 'Blockly.utils.Size'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/serialization/exceptions.js', ['Blockly.serialization.exceptions'], [], {'lang': 'es6', 'module': 'goog'}); @@ -216,7 +216,7 @@ goog.addDependency('../../core/theme/classic.js', ['Blockly.Themes.Classic'], [' goog.addDependency('../../core/theme/themes.js', ['Blockly.Themes'], ['Blockly.Themes.Classic', 'Blockly.Themes.Zelos'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/theme/zelos.js', ['Blockly.Themes.Zelos'], ['Blockly.Theme'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/theme_manager.js', ['Blockly.ThemeManager'], ['Blockly.utils', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/toolbox/category.js', ['Blockly.ToolboxCategory'], ['Blockly.Css', 'Blockly.ISelectableToolboxItem', 'Blockly.ToolboxItem', 'Blockly.registry', 'Blockly.utils', 'Blockly.utils.aria', 'Blockly.utils.colour', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/toolbox/category.js', ['Blockly.ToolboxCategory'], ['Blockly.Css', 'Blockly.ISelectableToolboxItem', 'Blockly.ToolboxItem', 'Blockly.registry', 'Blockly.utils.aria', 'Blockly.utils.colour', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.parsing', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/toolbox/collapsible_category.js', ['Blockly.CollapsibleToolboxCategory'], ['Blockly.ICollapsibleToolboxItem', 'Blockly.ToolboxCategory', 'Blockly.ToolboxSeparator', 'Blockly.registry', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/toolbox/separator.js', ['Blockly.ToolboxSeparator'], ['Blockly.Css', 'Blockly.ToolboxItem', 'Blockly.registry', 'Blockly.utils.dom', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/toolbox/toolbox.js', ['Blockly.Toolbox'], ['Blockly.BlockSvg', 'Blockly.CollapsibleToolboxCategory', 'Blockly.ComponentManager', 'Blockly.Css', 'Blockly.DeleteArea', 'Blockly.Events.ToolboxItemSelect', 'Blockly.Events.utils', 'Blockly.IAutoHideable', 'Blockly.IKeyboardAccessible', 'Blockly.IStyleable', 'Blockly.IToolbox', 'Blockly.Options', 'Blockly.Touch', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.registry', 'Blockly.utils.KeyCodes', 'Blockly.utils.Rect', 'Blockly.utils.aria', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); @@ -225,7 +225,7 @@ goog.addDependency('../../core/tooltip.js', ['Blockly.Tooltip'], ['Blockly.brows goog.addDependency('../../core/touch.js', ['Blockly.Touch'], ['Blockly.internalConstants', 'Blockly.utils.global', 'Blockly.utils.string'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/touch_gesture.js', ['Blockly.TouchGesture'], ['Blockly.Gesture', 'Blockly.Touch', 'Blockly.browserEvents', 'Blockly.utils.Coordinate', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/trashcan.js', ['Blockly.Trashcan'], ['Blockly.ComponentManager', 'Blockly.DeleteArea', 'Blockly.Events.TrashcanOpen', 'Blockly.Events.utils', 'Blockly.IAutoHideable', 'Blockly.IPositionable', 'Blockly.Options', 'Blockly.browserEvents', 'Blockly.internalConstants', 'Blockly.registry', 'Blockly.uiPosition', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/utils.js', ['Blockly.utils'], ['Blockly.Msg', 'Blockly.browserEvents', 'Blockly.internalConstants', 'Blockly.utils.Coordinate', 'Blockly.utils.KeyCodes', 'Blockly.utils.Metrics', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.aria', 'Blockly.utils.colour', 'Blockly.utils.deprecation', 'Blockly.utils.dom', 'Blockly.utils.global', 'Blockly.utils.idGenerator', 'Blockly.utils.math', 'Blockly.utils.object', 'Blockly.utils.string', 'Blockly.utils.style', 'Blockly.utils.svgPaths', 'Blockly.utils.toolbox', 'Blockly.utils.userAgent', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/utils.js', ['Blockly.utils'], ['Blockly.browserEvents', 'Blockly.utils.Coordinate', 'Blockly.utils.KeyCodes', 'Blockly.utils.Metrics', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.aria', 'Blockly.utils.colour', 'Blockly.utils.deprecation', 'Blockly.utils.dom', 'Blockly.utils.global', 'Blockly.utils.idGenerator', 'Blockly.utils.math', 'Blockly.utils.object', 'Blockly.utils.parsing', 'Blockly.utils.string', 'Blockly.utils.style', 'Blockly.utils.svgMath', 'Blockly.utils.svgPaths', 'Blockly.utils.toolbox', 'Blockly.utils.userAgent', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/aria.js', ['Blockly.utils.aria'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/colour.js', ['Blockly.utils.colour'], ['Blockly.internalConstants'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/coordinate.js', ['Blockly.utils.Coordinate'], [], {'lang': 'es6', 'module': 'goog'}); @@ -237,11 +237,13 @@ goog.addDependency('../../core/utils/keycodes.js', ['Blockly.utils.KeyCodes'], [ goog.addDependency('../../core/utils/math.js', ['Blockly.utils.math'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/metrics.js', ['Blockly.utils.Metrics'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/object.js', ['Blockly.utils.object'], [], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/utils/parsing.js', ['Blockly.utils.parsing'], ['Blockly.Msg', 'Blockly.internalConstants', 'Blockly.utils.colour', 'Blockly.utils.string'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/rect.js', ['Blockly.utils.Rect'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/size.js', ['Blockly.utils.Size'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/string.js', ['Blockly.utils.string'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/style.js', ['Blockly.utils.style'], ['Blockly.utils.Coordinate', 'Blockly.utils.Size'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/svg.js', ['Blockly.utils.Svg'], [], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/utils/svg_math.js', ['Blockly.utils.svgMath'], ['Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.global', 'Blockly.utils.style', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/svg_paths.js', ['Blockly.utils.svgPaths'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/toolbox.js', ['Blockly.utils.toolbox'], ['Blockly.Xml', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/utils/useragent.js', ['Blockly.utils.userAgent'], ['Blockly.utils.global'], {'lang': 'es6', 'module': 'goog'}); @@ -255,10 +257,10 @@ goog.addDependency('../../core/widgetdiv.js', ['Blockly.WidgetDiv'], ['Blockly.c goog.addDependency('../../core/workspace.js', ['Blockly.Workspace'], ['Blockly.ConnectionChecker', 'Blockly.Events.utils', 'Blockly.IASTNodeLocation', 'Blockly.Options', 'Blockly.VariableMap', 'Blockly.registry', 'Blockly.utils', 'Blockly.utils.idGenerator', 'Blockly.utils.math'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/workspace_audio.js', ['Blockly.WorkspaceAudio'], ['Blockly.internalConstants', 'Blockly.utils.global', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/workspace_comment.js', ['Blockly.WorkspaceComment'], ['Blockly.Events.CommentChange', 'Blockly.Events.CommentCreate', 'Blockly.Events.CommentDelete', 'Blockly.Events.CommentMove', 'Blockly.Events.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.idGenerator', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/workspace_comment_svg.js', ['Blockly.WorkspaceCommentSvg'], ['Blockly.ContextMenu', 'Blockly.Css', 'Blockly.Events.CommentCreate', 'Blockly.Events.CommentDelete', 'Blockly.Events.CommentMove', 'Blockly.Events.Selected', 'Blockly.Events.utils', 'Blockly.IBoundedElement', 'Blockly.IBubble', 'Blockly.ICopyable', 'Blockly.Touch', 'Blockly.WorkspaceComment', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/workspace_drag_surface_svg.js', ['Blockly.WorkspaceDragSurfaceSvg'], ['Blockly.utils', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/workspace_comment_svg.js', ['Blockly.WorkspaceCommentSvg'], ['Blockly.ContextMenu', 'Blockly.Css', 'Blockly.Events.CommentCreate', 'Blockly.Events.CommentDelete', 'Blockly.Events.CommentMove', 'Blockly.Events.Selected', 'Blockly.Events.utils', 'Blockly.IBoundedElement', 'Blockly.IBubble', 'Blockly.ICopyable', 'Blockly.Touch', 'Blockly.WorkspaceComment', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.svgMath'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/workspace_drag_surface_svg.js', ['Blockly.WorkspaceDragSurfaceSvg'], ['Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.svgMath'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/workspace_dragger.js', ['Blockly.WorkspaceDragger'], ['Blockly.common', 'Blockly.utils.Coordinate'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../core/workspace_svg.js', ['Blockly.WorkspaceSvg'], ['Blockly.BlockSvg', 'Blockly.ComponentManager', 'Blockly.ConnectionDB', 'Blockly.ContextMenu', 'Blockly.ContextMenuRegistry', 'Blockly.DropDownDiv', 'Blockly.Events.BlockCreate', 'Blockly.Events.ThemeChange', 'Blockly.Events.ViewportChange', 'Blockly.Events.utils', 'Blockly.Gesture', 'Blockly.Grid', 'Blockly.IASTNodeLocationSvg', 'Blockly.MarkerManager', 'Blockly.MetricsManager', 'Blockly.Msg', 'Blockly.Options', 'Blockly.ThemeManager', 'Blockly.Themes.Classic', 'Blockly.Tooltip', 'Blockly.TouchGesture', 'Blockly.WidgetDiv', 'Blockly.Workspace', 'Blockly.WorkspaceAudio', 'Blockly.Xml', 'Blockly.blockRendering', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.internalConstants', 'Blockly.registry', 'Blockly.serialization.blocks', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.toolbox', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../core/workspace_svg.js', ['Blockly.WorkspaceSvg'], ['Blockly.BlockSvg', 'Blockly.ComponentManager', 'Blockly.ConnectionDB', 'Blockly.ContextMenu', 'Blockly.ContextMenuRegistry', 'Blockly.DropDownDiv', 'Blockly.Events.BlockCreate', 'Blockly.Events.ThemeChange', 'Blockly.Events.ViewportChange', 'Blockly.Events.utils', 'Blockly.Gesture', 'Blockly.Grid', 'Blockly.IASTNodeLocationSvg', 'Blockly.MarkerManager', 'Blockly.MetricsManager', 'Blockly.Msg', 'Blockly.Options', 'Blockly.ThemeManager', 'Blockly.Themes.Classic', 'Blockly.Tooltip', 'Blockly.TouchGesture', 'Blockly.WidgetDiv', 'Blockly.Workspace', 'Blockly.WorkspaceAudio', 'Blockly.Xml', 'Blockly.blockRendering', 'Blockly.browserEvents', 'Blockly.common', 'Blockly.internalConstants', 'Blockly.registry', 'Blockly.serialization.blocks', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.svgMath', 'Blockly.utils.toolbox', 'Blockly.utils.userAgent'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/xml.js', ['Blockly.Xml'], ['Blockly.Events.utils', 'Blockly.inputTypes', 'Blockly.utils.Size', 'Blockly.utils.dom', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/zoom_controls.js', ['Blockly.ZoomControls'], ['Blockly.ComponentManager', 'Blockly.Css', 'Blockly.Events.Click', 'Blockly.Events.utils', 'Blockly.IPositionable', 'Blockly.Touch', 'Blockly.browserEvents', 'Blockly.internalConstants', 'Blockly.uiPosition', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../generators/dart.js', ['Blockly.Dart'], ['Blockly.Generator', 'Blockly.inputTypes', 'Blockly.utils.string'], {'lang': 'es6'}); diff --git a/tests/mocha/utils_test.js b/tests/mocha/utils_test.js index e8ecfb41f..36ade70a7 100644 --- a/tests/mocha/utils_test.js +++ b/tests/mocha/utils_test.js @@ -30,23 +30,23 @@ suite('Utils', function() { suite('tokenizeInterpolation', function() { suite('Basic', function() { test('Empty string', function() { - chai.assert.deepEqual(Blockly.utils.tokenizeInterpolation(''), []); + chai.assert.deepEqual(Blockly.utils.parsing.tokenizeInterpolation(''), []); }); test('No interpolation', function() { chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('Hello'), ['Hello']); + Blockly.utils.parsing.tokenizeInterpolation('Hello'), ['Hello']); }); test('Unescaped %', function() { chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('Hello%World'), + Blockly.utils.parsing.tokenizeInterpolation('Hello%World'), ['Hello%World']); }); test('Escaped %', function() { chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('Hello%%World'), + Blockly.utils.parsing.tokenizeInterpolation('Hello%%World'), ['Hello%World']); }); }); @@ -54,19 +54,19 @@ suite('Utils', function() { suite('Number interpolation', function() { test('Single-digit number interpolation', function() { chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('Hello%1World'), + Blockly.utils.parsing.tokenizeInterpolation('Hello%1World'), ['Hello', 1, 'World']); }); test('Multi-digit number interpolation', function() { chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('%123Hello%456World%789'), + Blockly.utils.parsing.tokenizeInterpolation('%123Hello%456World%789'), [123, 'Hello', 456, 'World', 789]); }); test('Escaped number', function() { chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('Hello %%1 World'), + Blockly.utils.parsing.tokenizeInterpolation('Hello %%1 World'), ['Hello %1 World']); }); @@ -74,7 +74,7 @@ suite('Utils', function() { // No idea what this is supposed to tell you if it breaks. But might // as well keep it. chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('%%%x%%0%00%01%'), + Blockly.utils.parsing.tokenizeInterpolation('%%%x%%0%00%01%'), ['%%x%0', 0, 1, '%']); }); }); @@ -87,21 +87,21 @@ suite('Utils', function() { test('Simple interpolation', function() { Blockly.Msg.STRING_REF = 'test string'; chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('%{bky_string_ref}'), + Blockly.utils.parsing.tokenizeInterpolation('%{bky_string_ref}'), ['test string']); }); test('Case', function() { Blockly.Msg.STRING_REF = 'test string'; chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('%{BkY_StRiNg_ReF}'), + Blockly.utils.parsing.tokenizeInterpolation('%{BkY_StRiNg_ReF}'), ['test string']); }); test('Surrounding text', function() { Blockly.Msg.STRING_REF = 'test string'; chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation( + Blockly.utils.parsing.tokenizeInterpolation( 'before %{bky_string_ref} after'), ['before test string after']); }); @@ -109,7 +109,7 @@ suite('Utils', function() { test('With param', function() { Blockly.Msg.WITH_PARAM = 'before %1 after'; chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('%{bky_with_param}'), + Blockly.utils.parsing.tokenizeInterpolation('%{bky_with_param}'), ['before ', 1, ' after']); }); @@ -117,68 +117,68 @@ suite('Utils', function() { Blockly.Msg.STRING_REF = 'test string'; Blockly.Msg.RECURSE = 'before %{bky_string_ref} after'; chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('%{bky_recurse}'), + Blockly.utils.parsing.tokenizeInterpolation('%{bky_recurse}'), ['before test string after']); }); test('Number reference', function() { Blockly.Msg['1'] = 'test string'; chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('%{bky_1}'), ['test string']); + Blockly.utils.parsing.tokenizeInterpolation('%{bky_1}'), ['test string']); }); test('Undefined reference', function() { chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('%{bky_undefined}'), + Blockly.utils.parsing.tokenizeInterpolation('%{bky_undefined}'), ['%{bky_undefined}']); }); test('Not prefixed', function() { Blockly.Msg.STRING_REF = 'test string'; chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('%{string_ref}'), + Blockly.utils.parsing.tokenizeInterpolation('%{string_ref}'), ['%{string_ref}']); }); test('Not prefixed, number', function() { Blockly.Msg['1'] = 'test string'; chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('%{1}'), + Blockly.utils.parsing.tokenizeInterpolation('%{1}'), ['%{1}']); }); test('Space in ref', function() { Blockly.Msg['string ref'] = 'test string'; chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('%{bky_string ref}'), + Blockly.utils.parsing.tokenizeInterpolation('%{bky_string ref}'), ['%{bky_string ref}']); }); test('Dash in ref', function() { Blockly.Msg['string-ref'] = 'test string'; chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('%{bky_string-ref}'), + Blockly.utils.parsing.tokenizeInterpolation('%{bky_string-ref}'), ['%{bky_string-ref}']); }); test('Period in ref', function() { Blockly.Msg['string.ref'] = 'test string'; chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('%{bky_string.ref}'), + Blockly.utils.parsing.tokenizeInterpolation('%{bky_string.ref}'), ['%{bky_string.ref}']); }); test('Ampersand in ref', function() { Blockly.Msg['string&ref'] = 'test string'; chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('%{bky_string&ref}'), + Blockly.utils.parsing.tokenizeInterpolation('%{bky_string&ref}'), ['%{bky_string&ref}']); }); test('Unclosed reference', function() { Blockly.Msg.UNCLOSED = 'test string'; chai.assert.deepEqual( - Blockly.utils.tokenizeInterpolation('%{bky_unclosed'), + Blockly.utils.parsing.tokenizeInterpolation('%{bky_unclosed'), ['%{bky_unclosed']); }); }); @@ -191,40 +191,48 @@ suite('Utils', function() { Blockly.Msg.STRING_REF_WITH_ARG = 'test %1 string'; Blockly.Msg.STRING_REF_WITH_SUBREF = 'test %{bky_subref} string'; - let resultString = Blockly.utils.replaceMessageReferences(''); + let resultString = Blockly.utils.parsing.replaceMessageReferences(''); chai.assert.equal(resultString, '', 'Empty string produces empty string'); - resultString = Blockly.utils.replaceMessageReferences('%%'); + resultString = Blockly.utils.parsing.replaceMessageReferences('%%'); chai.assert.equal(resultString, '%', 'Escaped %'); - resultString = Blockly.utils.replaceMessageReferences('%%{bky_string_ref}'); + resultString = + Blockly.utils.parsing.replaceMessageReferences('%%{bky_string_ref}'); chai.assert.equal(resultString, '%{bky_string_ref}', 'Escaped %'); - resultString = Blockly.utils.replaceMessageReferences('%a'); + resultString = Blockly.utils.parsing.replaceMessageReferences('%a'); chai.assert.equal(resultString, '%a', 'Unrecognized % escape code treated as literal'); - resultString = Blockly.utils.replaceMessageReferences('%1'); + resultString = Blockly.utils.parsing.replaceMessageReferences('%1'); chai.assert.equal(resultString, '%1', 'Interpolation tokens ignored.'); - resultString = Blockly.utils.replaceMessageReferences('%1 %2'); + resultString = Blockly.utils.parsing.replaceMessageReferences('%1 %2'); chai.assert.equal(resultString, '%1 %2', 'Interpolation tokens ignored.'); - resultString = Blockly.utils.replaceMessageReferences('before %1 after'); + resultString = + Blockly.utils.parsing.replaceMessageReferences('before %1 after'); chai.assert.equal(resultString, 'before %1 after', 'Interpolation tokens ignored.'); // Blockly.Msg.STRING_REF cases: - resultString = Blockly.utils.replaceMessageReferences('%{bky_string_ref}'); + resultString = + Blockly.utils.parsing.replaceMessageReferences('%{bky_string_ref}'); chai.assert.equal(resultString, 'test string', 'Message ref dereferenced.'); - resultString = Blockly.utils.replaceMessageReferences('before %{bky_string_ref} after'); + resultString = Blockly.utils.parsing.replaceMessageReferences( + 'before %{bky_string_ref} after'); chai.assert.equal(resultString, 'before test string after', 'Message ref dereferenced.'); // Blockly.Msg.STRING_REF_WITH_ARG cases: - resultString = Blockly.utils.replaceMessageReferences('%{bky_string_ref_with_arg}'); + resultString = Blockly.utils.parsing.replaceMessageReferences( + '%{bky_string_ref_with_arg}'); chai.assert.equal(resultString, 'test %1 string', 'Message ref dereferenced with argument preserved.'); - resultString = Blockly.utils.replaceMessageReferences('before %{bky_string_ref_with_arg} after'); + resultString = Blockly.utils.parsing.replaceMessageReferences( + 'before %{bky_string_ref_with_arg} after'); chai.assert.equal(resultString, 'before test %1 string after', 'Message ref dereferenced with argument preserved.'); // Blockly.Msg.STRING_REF_WITH_SUBREF cases: - resultString = Blockly.utils.replaceMessageReferences('%{bky_string_ref_with_subref}'); + resultString = Blockly.utils.parsing.replaceMessageReferences( + '%{bky_string_ref_with_subref}'); chai.assert.equal(resultString, 'test subref string', 'Message ref and subref dereferenced.'); - resultString = Blockly.utils.replaceMessageReferences('before %{bky_string_ref_with_subref} after'); + resultString = Blockly.utils.parsing.replaceMessageReferences( + 'before %{bky_string_ref_with_subref} after'); chai.assert.equal(resultString, 'before test subref string after', 'Message ref and subref dereferenced.'); }); @@ -239,7 +247,7 @@ suite('Utils', function() { }); test('XY_REGEX_', function() { - const regex = Blockly.utils.getRelativeXY.XY_REGEX_; + const regex = Blockly.utils.svgMath.TEST_ONLY.XY_REGEX; let m; m = 'INVALID'.match(regex); chai.assert.isNull(m); @@ -266,7 +274,7 @@ suite('Utils', function() { }); test('XY_STYLE_REGEX_', function() { - const regex = Blockly.utils.getRelativeXY.XY_STYLE_REGEX_; + const regex = Blockly.utils.svgMath.TEST_ONLY.XY_STYLE_REGEX; let m; m = 'INVALID'.match(regex); chai.assert.isNull(m);