From 4844a1038c9e2262a1abe9e516eaca3815349f50 Mon Sep 17 00:00:00 2001 From: Monica Kozbial Date: Wed, 3 Mar 2021 12:29:10 -0800 Subject: [PATCH] Adding single-direction scroll options to inject options (#4651) * Adding single directions scroll config to inject options --- core/inject.js | 7 ++++++- core/options.js | 27 +++++++++++++++++++++++++-- core/workspace_svg.js | 2 +- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/core/inject.js b/core/inject.js index e469e0651..2ea9fe64a 100644 --- a/core/inject.js +++ b/core/inject.js @@ -379,9 +379,14 @@ Blockly.init_ = function(mainWorkspace) { } if (options.moveOptions && options.moveOptions.scrollbars) { + var horizontalScroll = options.moveOptions.scrollbars === true || + !!options.moveOptions.scrollbars.horizontal; + var verticalScroll = options.moveOptions.scrollbars === true || + !!options.moveOptions.scrollbars.vertical; mainWorkspace.scrollbar = new Blockly.ScrollbarPair( - mainWorkspace, true, true, 'blocklyMainWorkspaceScrollbar'); + mainWorkspace, horizontalScroll, verticalScroll, + 'blocklyMainWorkspaceScrollbar'); mainWorkspace.scrollbar.resize(); } else { mainWorkspace.setMetrics({x: 0.5, y: 0.5}); diff --git a/core/options.js b/core/options.js index c44a87de9..29f218518 100644 --- a/core/options.js +++ b/core/options.js @@ -134,7 +134,7 @@ Blockly.Options = function(options) { /** @type {!Blockly.Options.MoveOptions} */ this.moveOptions = Blockly.Options.parseMoveOptions_(options, hasCategories); /** @deprecated January 2019 */ - this.hasScrollbars = this.moveOptions.scrollbars; + this.hasScrollbars = !!this.moveOptions.scrollbars; /** @type {boolean} */ this.hasTrashcan = hasTrashcan; /** @type {number} */ @@ -205,12 +205,21 @@ Blockly.Options.GridOptions; * Move Options. * @typedef {{ * drag: boolean, - * scrollbars: boolean, + * scrollbars: (boolean | !Blockly.Options.ScrollbarOptions), * wheel: boolean * }} */ Blockly.Options.MoveOptions; +/** + * Scrollbar Options. + * @typedef {{ + * horizontal: boolean, + * vertical: boolean + * }} + */ +Blockly.Options.ScrollbarOptions; + /** * Zoom Options. * @typedef {{ @@ -252,9 +261,23 @@ Blockly.Options.parseMoveOptions_ = function(options, hasCategories) { var moveOptions = {}; if (move['scrollbars'] === undefined && options['scrollbars'] === undefined) { moveOptions.scrollbars = hasCategories; + } else if (typeof move['scrollbars'] == 'object') { + moveOptions.scrollbars = {}; + moveOptions.scrollbars.horizontal = !!move['scrollbars']['horizontal']; + moveOptions.scrollbars.vertical = !!move['scrollbars']['vertical']; + // Convert scrollbars object to boolean if they have the same value. + // This allows us to easily check for whether any scrollbars exist using + // !!moveOptions.scrollbars. + if (moveOptions.scrollbars.horizontal && moveOptions.scrollbars.vertical) { + moveOptions.scrollbars = true; + } else if (!moveOptions.scrollbars.horizontal && + !moveOptions.scrollbars.vertical) { + moveOptions.scrollbars = false; + } } else { moveOptions.scrollbars = !!move['scrollbars'] || !!options['scrollbars']; } + if (!moveOptions.scrollbars || move['wheel'] === undefined) { // Defaults to false so that developers' settings don't appear to change. moveOptions.wheel = false; diff --git a/core/workspace_svg.js b/core/workspace_svg.js index 2c5373da6..94bd09fe4 100644 --- a/core/workspace_svg.js +++ b/core/workspace_svg.js @@ -1659,7 +1659,7 @@ Blockly.WorkspaceSvg.prototype.isDraggable = function() { * @return {boolean} True if the workspace is movable, false otherwise. */ Blockly.WorkspaceSvg.prototype.isMovable = function() { - return (this.options.moveOptions && this.options.moveOptions.scrollbars) || + return (this.options.moveOptions && !!this.options.moveOptions.scrollbars) || (this.options.moveOptions && this.options.moveOptions.wheel) || (this.options.moveOptions && this.options.moveOptions.drag) || (this.options.zoomOptions && this.options.zoomOptions.wheel) ||