diff --git a/core/workspace_svg.js b/core/workspace_svg.js index e6c62b10a..e4f640948 100644 --- a/core/workspace_svg.js +++ b/core/workspace_svg.js @@ -677,19 +677,28 @@ Blockly.WorkspaceSvg.prototype.showContextMenu_ = function(e) { } } - // Option to collapse top blocks. - var collapseOption = {enabled: hasExpandedBlocks}; - collapseOption.text = Blockly.Msg.COLLAPSE_ALL; - collapseOption.callback = function() { + /* + * Option to collapse or expand top blocks + * @param {bool} shouldCollapse whether a block should collapse + * @private + */ + function toggleOption(shouldCollapse) { var ms = 0; for (var i = 0; i < topBlocks.length; i++) { var block = topBlocks[i]; while (block) { - setTimeout(block.setCollapsed.bind(block, true), ms); + setTimeout(block.setCollapsed.bind(block, shouldCollapse), ms); block = block.getNextBlock(); ms += COLLAPSE_DELAY; } } + } + + // Option to collapse top blocks. + var collapseOption = {enabled: hasExpandedBlocks}; + collapseOption.text = Blockly.Msg.COLLAPSE_ALL; + collapseOption.callback = function() { + toggleOption(true); }; menuOptions.push(collapseOption); @@ -697,15 +706,7 @@ Blockly.WorkspaceSvg.prototype.showContextMenu_ = function(e) { var expandOption = {enabled: hasCollapsedBlocks}; expandOption.text = Blockly.Msg.EXPAND_ALL; expandOption.callback = function() { - var ms = 0; - for (var i = 0; i < topBlocks.length; i++) { - var block = topBlocks[i]; - while (block) { - setTimeout(block.setCollapsed.bind(block, false), ms); - block = block.getNextBlock(); - ms += COLLAPSE_DELAY; - } - } + toggleOption(false); }; menuOptions.push(expandOption); }