From 3f9b40ff612bad1f18c391fb9df02b1793992c6f Mon Sep 17 00:00:00 2001 From: Rachel Fenichel Date: Wed, 5 Oct 2016 16:49:19 -0700 Subject: [PATCH] add option to skip exporting block ids in XML, and use it in the workspace factory --- core/xml.js | 21 ++++++++++++------- .../workspacefactory/wfactory_generator.js | 3 +-- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/core/xml.js b/core/xml.js index 2567560cd..0ebd31e0b 100644 --- a/core/xml.js +++ b/core/xml.js @@ -33,13 +33,14 @@ goog.require('goog.dom'); /** * Encode a block tree as XML. * @param {!Blockly.Workspace} workspace The workspace containing blocks. + * @param {boolean} opt_noId True if the encoder should skip the block ids. * @return {!Element} XML document. */ -Blockly.Xml.workspaceToDom = function(workspace) { +Blockly.Xml.workspaceToDom = function(workspace, opt_noId) { var xml = goog.dom.createDom('xml'); var blocks = workspace.getTopBlocks(true); for (var i = 0, block; block = blocks[i]; i++) { - xml.appendChild(Blockly.Xml.blockToDomWithXY(block)); + xml.appendChild(Blockly.Xml.blockToDomWithXY(block, opt_noId)); } return xml; }; @@ -47,14 +48,15 @@ Blockly.Xml.workspaceToDom = function(workspace) { /** * Encode a block subtree as XML with XY coordinates. * @param {!Blockly.Block} block The root block to encode. + * @param {boolean} opt_noId True if the encoder should skip the block id. * @return {!Element} Tree of XML elements. */ -Blockly.Xml.blockToDomWithXY = function(block) { +Blockly.Xml.blockToDomWithXY = function(block, opt_noId) { var width; // Not used in LTR. if (block.workspace.RTL) { width = block.workspace.getWidth(); } - var element = Blockly.Xml.blockToDom(block); + var element = Blockly.Xml.blockToDom(block, opt_noId); var xy = block.getRelativeToSurfaceXY(); element.setAttribute('x', Math.round(block.workspace.RTL ? width - xy.x : xy.x)); @@ -65,12 +67,15 @@ Blockly.Xml.blockToDomWithXY = function(block) { /** * Encode a block subtree as XML. * @param {!Blockly.Block} block The root block to encode. + * @param {boolean} opt_noId True if the encoder should skip the block id. * @return {!Element} Tree of XML elements. */ -Blockly.Xml.blockToDom = function(block) { +Blockly.Xml.blockToDom = function(block, opt_noId) { var element = goog.dom.createDom(block.isShadow() ? 'shadow' : 'block'); element.setAttribute('type', block.type); - element.setAttribute('id', block.id); + if (!opt_noId) { + element.setAttribute('id', block.id); + } if (block.mutationToDom) { // Custom data for an advanced block. var mutation = block.mutationToDom(); @@ -125,7 +130,7 @@ Blockly.Xml.blockToDom = function(block) { container.appendChild(Blockly.Xml.cloneShadow_(shadow)); } if (childBlock) { - container.appendChild(Blockly.Xml.blockToDom(childBlock)); + container.appendChild(Blockly.Xml.blockToDom(childBlock, opt_noId)); empty = false; } } @@ -156,7 +161,7 @@ Blockly.Xml.blockToDom = function(block) { var nextBlock = block.getNextBlock(); if (nextBlock) { var container = goog.dom.createDom('next', null, - Blockly.Xml.blockToDom(nextBlock)); + Blockly.Xml.blockToDom(nextBlock, opt_noId)); element.appendChild(container); } var shadow = block.nextConnection && block.nextConnection.getShadowDom(); diff --git a/demos/blocklyfactory/workspacefactory/wfactory_generator.js b/demos/blocklyfactory/workspacefactory/wfactory_generator.js index c3183ab6d..9f4323e39 100644 --- a/demos/blocklyfactory/workspacefactory/wfactory_generator.js +++ b/demos/blocklyfactory/workspacefactory/wfactory_generator.js @@ -210,8 +210,7 @@ WorkspaceFactoryGenerator.prototype.appendHiddenWorkspaceToDom_ = function(xmlDom) { var blocks = this.hiddenWorkspace.getTopBlocks(); for (var i = 0, block; block = blocks[i]; i++) { - var blockChild = Blockly.Xml.blockToDom(block); - blockChild.removeAttribute('id'); + var blockChild = Blockly.Xml.blockToDom(block, /* opt_noId */ true); xmlDom.appendChild(blockChild); } };