mirror of
https://github.com/google/blockly.git
synced 2026-01-08 17:40:09 +01:00
Merge pull request #675 from rachel-fenichel/bugfix/xml_id
add option to skip exporting block ids in XML, and use it in the workspace factory
This commit is contained in:
21
core/xml.js
21
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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user