diff --git a/core/flyout.js b/core/flyout.js index 0484b53fc..07dfe2ce6 100644 --- a/core/flyout.js +++ b/core/flyout.js @@ -639,16 +639,32 @@ Blockly.Flyout.prototype.show = function(xmlList) { var gaps = []; this.permanentlyDisabled_.length = 0; for (var i = 0, xml; xml = xmlList[i]; i++) { - if (xml.tagName && xml.tagName.toUpperCase() == 'BLOCK') { - var curBlock = Blockly.Xml.domToBlock(xml, this.workspace_); - if (curBlock.disabled) { - // Record blocks that were initially disabled. - // Do not enable these blocks as a result of capacity filtering. - this.permanentlyDisabled_.push(curBlock); + if (xml.tagName) { + if (xml.tagName.toUpperCase() == 'BLOCK') { + var curBlock = Blockly.Xml.domToBlock(xml, this.workspace_); + if (curBlock.disabled) { + // Record blocks that were initially disabled. + // Do not enable these blocks as a result of capacity filtering. + this.permanentlyDisabled_.push(curBlock); + } + blocks.push(curBlock); + var gap = parseInt(xml.getAttribute('gap'), 10); + gaps.push(isNaN(gap) ? this.MARGIN * 3 : gap); + } else if (xml.tagName.toUpperCase() == 'SEP') { + // Change the gap between two blocks. + // + // The default gap is 24, can be set larger or smaller. + // This overwrites the gap attribute on the previous block. + // Note that a deprecated method is to add a gap to a block. + // + var newGap = parseInt(xml.getAttribute('gap'), 10); + // Ignore gaps before the first block. + if (!isNaN(newGap) && gaps.length > 0) { + gaps[gaps.length - 1] = newGap; + } else { + gaps.push(this.MARGIN * 3); + } } - blocks.push(curBlock); - var gap = parseInt(xml.getAttribute('gap'), 10); - gaps.push(isNaN(gap) ? this.MARGIN * 3 : gap); } } diff --git a/core/toolbox.js b/core/toolbox.js index 421a1af8e..db3ba63a2 100644 --- a/core/toolbox.js +++ b/core/toolbox.js @@ -333,10 +333,8 @@ Blockly.Toolbox.prototype.syncTrees_ = function(treeIn, treeOut, pathToMedia) { // Note that a deprecated method is to add a gap to a block. // var newGap = parseFloat(childIn.getAttribute('gap')); - if (!isNaN(newGap)) { - var oldGap = parseFloat(lastElement.getAttribute('gap')); - var gap = isNaN(oldGap) ? newGap : oldGap + newGap; - lastElement.setAttribute('gap', gap); + if (!isNaN(newGap) && lastElement) { + lastElement.setAttribute('gap', newGap); } } }