diff --git a/core/blockly_options.js b/core/blockly_options.js new file mode 100644 index 00000000000..c9c7b62f997 --- /dev/null +++ b/core/blockly_options.js @@ -0,0 +1,25 @@ +/** + * @license + * Copyright 2016 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @fileoverview Object that defines user-specified options for the workspace. + * @author fenichel@google.com (Rachel Fenichel) + */ +'use strict'; + +goog.module('Blockly.BlocklyOptions'); +goog.module.declareLegacyNamespace(); + + +/** + * Blockly options. + * This interface is further described in + * `typings/parts/blockly-interfaces.d.ts`. + * @interface + */ +const BlocklyOptions = function() {}; + +exports = BlocklyOptions; diff --git a/core/inject.js b/core/inject.js index 6bb3e607784..745e3448384 100644 --- a/core/inject.js +++ b/core/inject.js @@ -34,6 +34,7 @@ goog.require('Blockly.WorkspaceDragSurfaceSvg'); goog.require('Blockly.WorkspaceSvg'); goog.require('Blockly.WidgetDiv'); +goog.requireType('Blockly.BlocklyOptions'); goog.requireType('Blockly.BlockSvg'); diff --git a/core/mutator.js b/core/mutator.js index 8f9bab11853..5f7189fcd62 100644 --- a/core/mutator.js +++ b/core/mutator.js @@ -19,9 +19,9 @@ const Abstract = goog.requireType('Blockly.Events.Abstract'); /* eslint-disable-next-line no-unused-vars */ const Block = goog.requireType('Blockly.Block'); /* eslint-disable-next-line no-unused-vars */ -const BlockSvg = goog.requireType('Blockly.BlockSvg'); +const BlocklyOptions = goog.requireType('Blockly.BlocklyOptions'); /* eslint-disable-next-line no-unused-vars */ -const Blockly = goog.requireType('Blockly'); +const BlockSvg = goog.requireType('Blockly.BlockSvg'); const Bubble = goog.require('Blockly.Bubble'); /* eslint-disable-next-line no-unused-vars */ const Connection = goog.requireType('Blockly.Connection'); @@ -170,7 +170,7 @@ Mutator.prototype.createEditor_ = function() { quarkXml = null; } const workspaceOptions = new Options( - /** @type {!Blockly.BlocklyOptions} */ + /** @type {!BlocklyOptions} */ ({ // If you want to enable disabling, also remove the // event filter from workspaceChanged_ . diff --git a/core/options.js b/core/options.js index 58c4e378a2c..0ed544bae47 100644 --- a/core/options.js +++ b/core/options.js @@ -10,104 +10,111 @@ */ 'use strict'; -goog.provide('Blockly.Options'); +goog.module('Blockly.Options'); +goog.module.declareLegacyNamespace(); -goog.require('Blockly.registry'); -goog.require('Blockly.Theme'); -goog.require('Blockly.Themes.Classic'); -goog.require('Blockly.utils.IdGenerator'); -goog.require('Blockly.utils.Metrics'); -goog.require('Blockly.utils.toolbox'); - -goog.requireType('Blockly.WorkspaceSvg'); +/* eslint-disable-next-line no-unused-vars */ +const BlocklyOptions = goog.requireType('Blockly.BlocklyOptions'); +const Classic = goog.require('Blockly.Themes.Classic'); +const IdGenerator = goog.require('Blockly.utils.IdGenerator'); +/* eslint-disable-next-line no-unused-vars */ +const Metrics = goog.requireType('Blockly.utils.Metrics'); +const Theme = goog.require('Blockly.Theme'); +/* eslint-disable-next-line no-unused-vars */ +const WorkspaceSvg = goog.requireType('Blockly.WorkspaceSvg'); +const deprecation = goog.require('Blockly.utils.deprecation'); +const registry = goog.require('Blockly.registry'); +const toolbox = goog.require('Blockly.utils.toolbox'); /** * Parse the user-specified options, using reasonable defaults where behaviour * is unspecified. - * @param {!Blockly.BlocklyOptions} options Dictionary of options. - * Specification: https://developers.google.com/blockly/guides/get-started/web#configuration + * @param {!BlocklyOptions} options Dictionary of options. + * Specification: + * https://developers.google.com/blockly/guides/get-started/web#configuration * @constructor */ -Blockly.Options = function(options) { - var readOnly = !!options['readOnly']; - if (readOnly) { - var toolboxJsonDef = null; - var hasCategories = false; - var hasTrashcan = false; - var hasCollapse = false; - var hasComments = false; - var hasDisable = false; - var hasSounds = false; - } else { - var toolboxJsonDef = Blockly.utils.toolbox.convertToolboxDefToJson(options['toolbox']); - var hasCategories = Blockly.utils.toolbox.hasCategories(toolboxJsonDef); - var hasTrashcan = options['trashcan']; +const Options = function(options) { + let toolboxJsonDef = null; + let hasCategories = false; + let hasTrashcan = false; + let hasCollapse = false; + let hasComments = false; + let hasDisable = false; + let hasSounds = false; + const readOnly = !!options['readOnly']; + if (!readOnly) { + toolboxJsonDef = toolbox.convertToolboxDefToJson(options['toolbox']); + hasCategories = toolbox.hasCategories(toolboxJsonDef); + hasTrashcan = options['trashcan']; if (hasTrashcan === undefined) { hasTrashcan = hasCategories; } - var maxTrashcanContents = options['maxTrashcanContents']; - if (hasTrashcan) { - if (maxTrashcanContents === undefined) { - maxTrashcanContents = 32; - } - } else { - maxTrashcanContents = 0; - } - var hasCollapse = options['collapse']; + hasCollapse = options['collapse']; if (hasCollapse === undefined) { hasCollapse = hasCategories; } - var hasComments = options['comments']; + hasComments = options['comments']; if (hasComments === undefined) { hasComments = hasCategories; } - var hasDisable = options['disable']; + hasDisable = options['disable']; if (hasDisable === undefined) { hasDisable = hasCategories; } - var hasSounds = options['sounds']; + hasSounds = options['sounds']; if (hasSounds === undefined) { hasSounds = true; } } - var rtl = !!options['rtl']; - var horizontalLayout = options['horizontalLayout']; + + let maxTrashcanContents = options['maxTrashcanContents']; + if (hasTrashcan) { + if (maxTrashcanContents === undefined) { + maxTrashcanContents = 32; + } + } else { + maxTrashcanContents = 0; + } + const rtl = !!options['rtl']; + let horizontalLayout = options['horizontalLayout']; if (horizontalLayout === undefined) { horizontalLayout = false; } - var toolboxAtStart = options['toolboxPosition']; + let toolboxAtStart = options['toolboxPosition']; toolboxAtStart = toolboxAtStart !== 'end'; - /** @type {!Blockly.utils.toolbox.Position} */ - var toolboxPosition; + /** @type {!toolbox.Position} */ + let toolboxPosition; if (horizontalLayout) { - toolboxPosition = toolboxAtStart ? - Blockly.utils.toolbox.Position.TOP : Blockly.utils.toolbox.Position.BOTTOM; + toolboxPosition = + toolboxAtStart ? toolbox.Position.TOP : toolbox.Position.BOTTOM; } else { - toolboxPosition = (toolboxAtStart == rtl) ? - Blockly.utils.toolbox.Position.RIGHT : Blockly.utils.toolbox.Position.LEFT; + toolboxPosition = (toolboxAtStart == rtl) ? toolbox.Position.RIGHT : + toolbox.Position.LEFT; } - var hasCss = options['css']; + let hasCss = options['css']; if (hasCss === undefined) { hasCss = true; } - var pathToMedia = 'https://blockly-demo.appspot.com/static/media/'; + let pathToMedia = 'https://blockly-demo.appspot.com/static/media/'; if (options['media']) { pathToMedia = options['media']; } else if (options['path']) { // 'path' is a deprecated option which has been replaced by 'media'. pathToMedia = options['path'] + 'media/'; } + let oneBasedIndex; if (options['oneBasedIndex'] === undefined) { - var oneBasedIndex = true; + oneBasedIndex = true; } else { - var oneBasedIndex = !!options['oneBasedIndex']; + oneBasedIndex = !!options['oneBasedIndex']; } - var renderer = options['renderer'] || 'geras'; + const renderer = options['renderer'] || 'geras'; - var plugins = options['plugins'] || {}; + const plugins = options['plugins'] || {}; /** @type {boolean} */ this.RTL = rtl; @@ -129,8 +136,8 @@ Blockly.Options = function(options) { this.pathToMedia = pathToMedia; /** @type {boolean} */ this.hasCategories = hasCategories; - /** @type {!Blockly.Options.MoveOptions} */ - this.moveOptions = Blockly.Options.parseMoveOptions_(options, hasCategories); + /** @type {!Options.MoveOptions} */ + this.moveOptions = Options.parseMoveOptions_(options, hasCategories); /** @deprecated January 2019 */ this.hasScrollbars = !!this.moveOptions.scrollbars; /** @type {boolean} */ @@ -143,16 +150,16 @@ Blockly.Options = function(options) { this.hasCss = hasCss; /** @type {boolean} */ this.horizontalLayout = horizontalLayout; - /** @type {?Blockly.utils.toolbox.ToolboxInfo} */ + /** @type {?toolbox.ToolboxInfo} */ this.languageTree = toolboxJsonDef; - /** @type {!Blockly.Options.GridOptions} */ - this.gridOptions = Blockly.Options.parseGridOptions_(options); - /** @type {!Blockly.Options.ZoomOptions} */ - this.zoomOptions = Blockly.Options.parseZoomOptions_(options); - /** @type {!Blockly.utils.toolbox.Position} */ + /** @type {!Options.GridOptions} */ + this.gridOptions = Options.parseGridOptions_(options); + /** @type {!Options.ZoomOptions} */ + this.zoomOptions = Options.parseZoomOptions_(options); + /** @type {!toolbox.Position} */ this.toolboxPosition = toolboxPosition; - /** @type {!Blockly.Theme} */ - this.theme = Blockly.Options.parseThemeOptions_(options); + /** @type {!Theme} */ + this.theme = Options.parseThemeOptions_(options); /** @type {string} */ this.renderer = renderer; /** @type {?Object} */ @@ -169,7 +176,7 @@ Blockly.Options = function(options) { * The parent of the current workspace, or null if there is no parent * workspace. We can assert that this is of type WorkspaceSvg as opposed to * Workspace as this is only used in a rendered workspace. - * @type {Blockly.WorkspaceSvg} + * @type {WorkspaceSvg} */ this.parentWorkspace = options['parentWorkspace']; @@ -180,14 +187,6 @@ Blockly.Options = function(options) { this.plugins = plugins; }; -/** - * Blockly options. - * This interface is further described in - * `typings/parts/blockly-interfaces.d.ts`. - * @interface - */ -Blockly.BlocklyOptions = function() {}; - /** * Grid Options. * @typedef {{ @@ -197,17 +196,17 @@ Blockly.BlocklyOptions = function() {}; * spacing: number * }} */ -Blockly.Options.GridOptions; +Options.GridOptions; /** * Move Options. * @typedef {{ * drag: boolean, - * scrollbars: (boolean | !Blockly.Options.ScrollbarOptions), + * scrollbars: (boolean | !Options.ScrollbarOptions), * wheel: boolean * }} */ -Blockly.Options.MoveOptions; +Options.MoveOptions; /** * Scrollbar Options. @@ -216,7 +215,7 @@ Blockly.Options.MoveOptions; * vertical: boolean * }} */ -Blockly.Options.ScrollbarOptions; +Options.ScrollbarOptions; /** * Zoom Options. @@ -230,7 +229,7 @@ Blockly.Options.ScrollbarOptions; * wheel: boolean * }} */ -Blockly.Options.ZoomOptions; +Options.ZoomOptions; /** * If set, sets the translation of the workspace to match the scrollbars. @@ -238,25 +237,25 @@ Blockly.Options.ZoomOptions; * is a float between 0 and 1 specifying the degree of scrolling. * @return {void} */ -Blockly.Options.prototype.setMetrics; +Options.prototype.setMetrics; /** * Return an object with the metrics required to size the workspace. - * @return {!Blockly.utils.Metrics} Contains size and position metrics. + * @return {!Metrics} Contains size and position metrics. */ -Blockly.Options.prototype.getMetrics; +Options.prototype.getMetrics; /** * Parse the user-specified move options, using reasonable defaults where * behaviour is unspecified. * @param {!Object} options Dictionary of options. * @param {boolean} hasCategories Whether the workspace has categories or not. - * @return {!Blockly.Options.MoveOptions} Normalized move options. + * @return {!Options.MoveOptions} Normalized move options. * @private */ -Blockly.Options.parseMoveOptions_ = function(options, hasCategories) { - var move = options['move'] || {}; - var moveOptions = {}; +Options.parseMoveOptions_ = function(options, hasCategories) { + const move = options['move'] || {}; + const moveOptions = {}; if (move['scrollbars'] === undefined && options['scrollbars'] === undefined) { moveOptions.scrollbars = hasCategories; } else if (typeof move['scrollbars'] == 'object') { @@ -268,7 +267,8 @@ Blockly.Options.parseMoveOptions_ = function(options, hasCategories) { // !!moveOptions.scrollbars. if (moveOptions.scrollbars.horizontal && moveOptions.scrollbars.vertical) { moveOptions.scrollbars = true; - } else if (!moveOptions.scrollbars.horizontal && + } else if ( + !moveOptions.scrollbars.horizontal && !moveOptions.scrollbars.vertical) { moveOptions.scrollbars = false; } @@ -298,12 +298,12 @@ Blockly.Options.parseMoveOptions_ = function(options, hasCategories) { * behaviour is unspecified. See zoom documentation: * https://developers.google.com/blockly/guides/configure/web/zoom * @param {!Object} options Dictionary of options. - * @return {!Blockly.Options.ZoomOptions} Normalized zoom options. + * @return {!Options.ZoomOptions} Normalized zoom options. * @private */ -Blockly.Options.parseZoomOptions_ = function(options) { - var zoom = options['zoom'] || {}; - var zoomOptions = {}; +Options.parseZoomOptions_ = function(options) { + const zoom = options['zoom'] || {}; + const zoomOptions = {}; if (zoom['controls'] === undefined) { zoomOptions.controls = false; } else { @@ -347,12 +347,12 @@ Blockly.Options.parseZoomOptions_ = function(options) { * behaviour is unspecified. See grid documentation: * https://developers.google.com/blockly/guides/configure/web/grid * @param {!Object} options Dictionary of options. - * @return {!Blockly.Options.GridOptions} Normalized grid options. + * @return {!Options.GridOptions} Normalized grid options. * @private */ -Blockly.Options.parseGridOptions_ = function(options) { - var grid = options['grid'] || {}; - var gridOptions = {}; +Options.parseGridOptions_ = function(options) { + const grid = options['grid'] || {}; + const gridOptions = {}; gridOptions.spacing = Number(grid['spacing']) || 0; gridOptions.colour = grid['colour'] || '#888'; gridOptions.length = @@ -365,19 +365,19 @@ Blockly.Options.parseGridOptions_ = function(options) { * Parse the user-specified theme options, using the classic theme as a default. * https://developers.google.com/blockly/guides/configure/web/themes * @param {!Object} options Dictionary of options. - * @return {!Blockly.Theme} A Blockly Theme. + * @return {!Theme} A Blockly Theme. * @private */ -Blockly.Options.parseThemeOptions_ = function(options) { - var theme = options['theme'] || Blockly.Themes.Classic; +Options.parseThemeOptions_ = function(options) { + const theme = options['theme'] || Classic; if (typeof theme == 'string') { - return /** @type {!Blockly.Theme} */ ( - Blockly.registry.getObject(Blockly.registry.Type.THEME, theme)); - } else if (theme instanceof Blockly.Theme) { - return /** @type {!Blockly.Theme} */ (theme); + return /** @type {!Theme} */ ( + registry.getObject(registry.Type.THEME, theme)); + } else if (theme instanceof Theme) { + return /** @type {!Theme} */ (theme); } - return Blockly.Theme.defineTheme(theme.name || - ('builtin' + Blockly.utils.IdGenerator.getNextUniqueId()), theme); + return Theme.defineTheme( + theme.name || ('builtin' + IdGenerator.getNextUniqueId()), theme); }; /** @@ -385,13 +385,13 @@ Blockly.Options.parseThemeOptions_ = function(options) { * @param {?Node|?string} toolboxDef DOM tree of blocks, or text representation * of same. * @return {?Node} DOM tree of blocks, or null. - * @deprecated Use Blockly.utils.toolbox.parseToolboxTree. (2020 September 28) + * @deprecated Use toolbox.parseToolboxTree. (2020 September 28) */ -Blockly.Options.parseToolboxTree = function(toolboxDef) { - Blockly.utils.deprecation.warn( - 'Blockly.Options.parseToolboxTree', - 'September 2020', - 'September 2021', - 'Blockly.utils.toolbox.parseToolboxTree'); - return Blockly.utils.toolbox.parseToolboxTree(toolboxDef); +Options.parseToolboxTree = function(toolboxDef) { + deprecation.warn( + 'Options.parseToolboxTree', 'September 2020', 'September 2021', + 'toolbox.parseToolboxTree'); + return toolbox.parseToolboxTree(toolboxDef); }; + +exports = Options; diff --git a/core/toolbox/toolbox.js b/core/toolbox/toolbox.js index a2e76ef70ea..826482eaf01 100644 --- a/core/toolbox/toolbox.js +++ b/core/toolbox/toolbox.js @@ -36,6 +36,7 @@ goog.require('Blockly.utils.dom'); goog.require('Blockly.utils.Rect'); goog.require('Blockly.utils.toolbox'); +goog.requireType('Blockly.BlocklyOptions'); goog.requireType('Blockly.ICollapsibleToolboxItem'); goog.requireType('Blockly.IDraggable'); goog.requireType('Blockly.IFlyout'); diff --git a/core/trashcan.js b/core/trashcan.js index fb60ca3a1ef..7e60d841dad 100644 --- a/core/trashcan.js +++ b/core/trashcan.js @@ -16,7 +16,7 @@ goog.module.declareLegacyNamespace(); /* eslint-disable-next-line no-unused-vars */ const Abstract = goog.requireType('Blockly.Events.Abstract'); /* eslint-disable-next-line no-unused-vars */ -const Blockly = goog.requireType('Blockly'); +const BlocklyOptions = goog.requireType('Blockly.BlocklyOptions'); const ComponentManager = goog.require('Blockly.ComponentManager'); const DeleteArea = goog.require('Blockly.DeleteArea'); const Events = goog.require('Blockly.Events'); @@ -90,7 +90,7 @@ const Trashcan = function(workspace) { } // Create flyout options. const flyoutWorkspaceOptions = new Options( - /** @type {!Blockly.BlocklyOptions} */ + /** @type {!BlocklyOptions} */ ({ 'scrollbars': true, 'parentWorkspace': this.workspace_, diff --git a/core/workspace.js b/core/workspace.js index 9a1dd8cbb0e..4c35f5b833e 100644 --- a/core/workspace.js +++ b/core/workspace.js @@ -23,6 +23,7 @@ goog.require('Blockly.utils.math'); goog.require('Blockly.VariableMap'); goog.requireType('Blockly.Block'); +goog.requireType('Blockly.BlocklyOptions'); goog.requireType('Blockly.ConnectionDB'); goog.requireType('Blockly.Events.Abstract'); goog.requireType('Blockly.IConnectionChecker'); diff --git a/core/workspace_svg.js b/core/workspace_svg.js index 81536d5e65b..e4aa50229fb 100644 --- a/core/workspace_svg.js +++ b/core/workspace_svg.js @@ -57,6 +57,7 @@ goog.require('Blockly.Xml'); goog.requireType('Blockly.Block'); goog.requireType('Blockly.BlockDragSurfaceSvg'); +goog.requireType('Blockly.BlocklyOptions'); goog.requireType('Blockly.blockRendering.Renderer'); goog.requireType('Blockly.Cursor'); goog.requireType('Blockly.FlyoutButton'); diff --git a/tests/deps.js b/tests/deps.js index 0b2e55f2cd5..58225243c97 100644 --- a/tests/deps.js +++ b/tests/deps.js @@ -13,6 +13,7 @@ goog.addDependency('../../core/block_drag_surface.js', ['Blockly.BlockDragSurfac goog.addDependency('../../core/block_dragger.js', ['Blockly.BlockDragger'], ['Blockly.Events', 'Blockly.Events.BlockDrag', 'Blockly.Events.BlockMove', 'Blockly.IBlockDragger', 'Blockly.InsertionMarkerManager', 'Blockly.blockAnimations', '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.ContextMenu', 'Blockly.ContextMenuRegistry', 'Blockly.Events', 'Blockly.Events.BlockMove', 'Blockly.Events.Selected', 'Blockly.IASTNodeLocationSvg', 'Blockly.IBoundedElement', 'Blockly.ICopyable', 'Blockly.IDraggable', 'Blockly.Msg', 'Blockly.RenderedConnection', 'Blockly.TabNavigateCursor', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.Xml', 'Blockly.blockAnimations', 'Blockly.blockRendering.IPathObject', 'Blockly.browserEvents', 'Blockly.connectionTypes', 'Blockly.constants', 'Blockly.internalConstants', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Rect', 'Blockly.utils.Svg', 'Blockly.utils.deprecation', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.userAgent']); goog.addDependency('../../core/blockly.js', ['Blockly'], ['Blockly.ComponentManager', 'Blockly.DropDownDiv', 'Blockly.Events', 'Blockly.Events.BlockCreate', 'Blockly.Events.FinishedLoading', 'Blockly.Events.Ui', 'Blockly.Events.UiBase', 'Blockly.Events.VarCreate', 'Blockly.Procedures', 'Blockly.ShortcutRegistry', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.Variables', 'Blockly.WidgetDiv', 'Blockly.WorkspaceSvg', 'Blockly.Xml', 'Blockly.browserEvents', 'Blockly.clipboard', 'Blockly.common', 'Blockly.connectionTypes', 'Blockly.constants', 'Blockly.inject', 'Blockly.inputTypes', 'Blockly.internalConstants', 'Blockly.utils', 'Blockly.utils.Size', 'Blockly.utils.colour', 'Blockly.utils.deprecation', 'Blockly.utils.toolbox']); +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.utils.global'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/bubble.js', ['Blockly.Bubble'], ['Blockly.IBubble', 'Blockly.Scrollbar', 'Blockly.Touch', 'Blockly.Workspace', 'Blockly.browserEvents', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.math', 'Blockly.utils.userAgent']); @@ -116,7 +117,7 @@ goog.addDependency('../../core/metrics_manager.js', ['Blockly.FlyoutMetricsManag goog.addDependency('../../core/msg.js', ['Blockly.Msg'], ['Blockly.utils.global']); goog.addDependency('../../core/mutator.js', ['Blockly.Mutator'], ['Blockly.Bubble', 'Blockly.Events', 'Blockly.Events.BlockChange', 'Blockly.Events.BubbleOpen', 'Blockly.Icon', 'Blockly.Options', 'Blockly.WorkspaceSvg', 'Blockly.Xml', 'Blockly.internalConstants', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.toolbox', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../core/names.js', ['Blockly.Names'], ['Blockly.Msg', 'Blockly.internalConstants']); -goog.addDependency('../../core/options.js', ['Blockly.Options'], ['Blockly.Theme', 'Blockly.Themes.Classic', 'Blockly.registry', 'Blockly.utils.IdGenerator', 'Blockly.utils.Metrics', 'Blockly.utils.toolbox']); +goog.addDependency('../../core/options.js', ['Blockly.Options'], ['Blockly.Theme', 'Blockly.Themes.Classic', 'Blockly.registry', 'Blockly.utils.IdGenerator', 'Blockly.utils.deprecation', 'Blockly.utils.toolbox'], {'lang': 'es6', 'module': 'goog'}); 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.Blocks', 'Blockly.Events', 'Blockly.Events.BlockChange', 'Blockly.Field', 'Blockly.Msg', 'Blockly.Names', 'Blockly.Workspace', 'Blockly.Xml', 'Blockly.internalConstants', 'Blockly.utils.xml']); goog.addDependency('../../core/registry.js', ['Blockly.registry'], [], {'lang': 'es6', 'module': 'goog'});