diff --git a/appengine/storage.js b/appengine/storage.js index 87d9cae76..8141806d5 100644 --- a/appengine/storage.js +++ b/appengine/storage.js @@ -60,7 +60,7 @@ BlocklyStorage.restoreBlocks = function(opt_workspace) { if ('localStorage' in window && window.localStorage[url]) { var workspace = opt_workspace || Blockly.getMainWorkspace(); var xml = Blockly.Xml.textToDom(window.localStorage[url]); - Blockly.Xml.domToWorkspace(workspace, xml); + Blockly.Xml.domToWorkspace(xml, workspace); } }; @@ -181,7 +181,7 @@ BlocklyStorage.loadXml_ = function(xml, workspace) { } // Clear the workspace to avoid merge. workspace.clear(); - Blockly.Xml.domToWorkspace(workspace, xml); + Blockly.Xml.domToWorkspace(xml, workspace); }; /** diff --git a/core/connection.js b/core/connection.js index 434061be0..89b4aef27 100644 --- a/core/connection.js +++ b/core/connection.js @@ -535,7 +535,7 @@ Blockly.Connection.prototype.disconnect = function() { var shadow = parentConnection.getShadowDom(); if (parentBlock.workspace && shadow && Blockly.Events.recordUndo) { var blockShadow = - Blockly.Xml.domToBlock(parentBlock.workspace, shadow); + Blockly.Xml.domToBlock(shadow, parentBlock.workspace); if (blockShadow.outputConnection) { parentConnection.connect(blockShadow.outputConnection); } else if (blockShadow.previousConnection) { diff --git a/core/contextmenu.js b/core/contextmenu.js index 6bfac35c2..3a1fc6e95 100644 --- a/core/contextmenu.js +++ b/core/contextmenu.js @@ -124,7 +124,7 @@ Blockly.ContextMenu.hide = function() { Blockly.ContextMenu.callbackFactory = function(block, xml) { return function() { Blockly.Events.disable(); - var newBlock = Blockly.Xml.domToBlock(block.workspace, xml); + var newBlock = Blockly.Xml.domToBlock(xml, block.workspace); // Move the new block next to the old block. var xy = block.getRelativeToSurfaceXY(); if (block.RTL) { diff --git a/core/events.js b/core/events.js index 7570fb8e9..b3c8c4f66 100644 --- a/core/events.js +++ b/core/events.js @@ -324,7 +324,7 @@ Blockly.Events.Create.prototype.run = function(forward) { var workspace = Blockly.Workspace.getById(this.workspaceId); var xml = goog.dom.createDom('xml'); xml.appendChild(this.xml); - Blockly.Xml.domToWorkspace(workspace, xml); + Blockly.Xml.domToWorkspace(xml, workspace); } else { for (var i = 0, id; id = this.ids[i]; i++) { var block = Blockly.Block.getById(id); @@ -389,7 +389,7 @@ Blockly.Events.Delete.prototype.run = function(forward) { var workspace = Blockly.Workspace.getById(this.workspaceId); var xml = goog.dom.createDom('xml'); xml.appendChild(this.oldXml); - Blockly.Xml.domToWorkspace(workspace, xml); + Blockly.Xml.domToWorkspace(xml, workspace); } }; diff --git a/core/flyout.js b/core/flyout.js index 39d579e86..84bcbb810 100644 --- a/core/flyout.js +++ b/core/flyout.js @@ -393,7 +393,7 @@ Blockly.Flyout.prototype.show = function(xmlList) { this.permanentlyDisabled_.length = 0; for (var i = 0, xml; xml = xmlList[i]; i++) { if (xml.tagName && xml.tagName.toUpperCase() == 'BLOCK') { - var block = Blockly.Xml.domToBlock(this.workspace_, xml); + var block = Blockly.Xml.domToBlock(xml, this.workspace_); if (block.disabled) { // Record blocks that were initially disabled. // Do not enable these blocks as a result of capacity filtering. @@ -636,7 +636,7 @@ Blockly.Flyout.prototype.createBlockFunc_ = function(originBlock) { Blockly.Events.disable(); // Create the new block by cloning the block in the flyout (via XML). var xml = Blockly.Xml.blockToDom(originBlock); - var block = Blockly.Xml.domToBlock(workspace, xml); + var block = Blockly.Xml.domToBlock(xml, workspace); // Place it in the same spot as the flyout copy. var svgRootOld = originBlock.getSvgRoot(); if (!svgRootOld) { diff --git a/core/workspace_svg.js b/core/workspace_svg.js index aa4261185..13818fd9a 100644 --- a/core/workspace_svg.js +++ b/core/workspace_svg.js @@ -468,7 +468,7 @@ Blockly.WorkspaceSvg.prototype.paste = function(xmlBlock) { } Blockly.terminateDrag_(); // Dragging while pasting? No. Blockly.Events.disable(); - var block = Blockly.Xml.domToBlock(this, xmlBlock); + var block = Blockly.Xml.domToBlock(xmlBlock, this); // Move the duplicate to original position. var blockX = parseInt(xmlBlock.getAttribute('x'), 10); var blockY = parseInt(xmlBlock.getAttribute('y'), 10); diff --git a/core/xml.js b/core/xml.js index 3cfe3663c..e6e3a1c5a 100644 --- a/core/xml.js +++ b/core/xml.js @@ -268,10 +268,17 @@ Blockly.Xml.textToDom = function(text) { /** * Decode an XML DOM and create blocks on the workspace. - * @param {!Blockly.Workspace} workspace The workspace. * @param {!Element} xml XML DOM. + * @param {!Blockly.Workspace} workspace The workspace. */ -Blockly.Xml.domToWorkspace = function(workspace, xml) { +Blockly.Xml.domToWorkspace = function(xml, workspace) { + if (xml instanceof Blockly.Workspace) { + var swap = xml; + xml = workspace; + workspace = swap; + console.warn('Deprecated call to Blockly.Xml.domToWorkspace, ' + + 'swap the arguments.'); + } var width; // Not used in LTR. if (workspace.RTL) { width = workspace.getWidth(); @@ -289,7 +296,7 @@ Blockly.Xml.domToWorkspace = function(workspace, xml) { var xmlChild = xml.childNodes[i]; var name = xmlChild.nodeName.toLowerCase(); if (name == 'block' || name == 'shadow') { - var block = Blockly.Xml.domToBlock(workspace, xmlChild); + var block = Blockly.Xml.domToBlock(xmlChild, workspace); var blockX = parseInt(xmlChild.getAttribute('x'), 10); var blockY = parseInt(xmlChild.getAttribute('y'), 10); if (!isNaN(blockX) && !isNaN(blockY)) { @@ -306,14 +313,21 @@ Blockly.Xml.domToWorkspace = function(workspace, xml) { /** * Decode an XML block tag and create a block (and possibly sub blocks) on the * workspace. - * @param {!Blockly.Workspace} workspace The workspace. * @param {!Element} xmlBlock XML block element. + * @param {!Blockly.Workspace} workspace The workspace. * @return {!Blockly.Block} The root block created. */ -Blockly.Xml.domToBlock = function(workspace, xmlBlock) { +Blockly.Xml.domToBlock = function(xmlBlock, workspace) { + if (xmlBlock instanceof Blockly.Workspace) { + var swap = xmlBlock; + xmlBlock = workspace; + workspace = swap; + console.warn('Deprecated call to Blockly.Xml.domToBlock, ' + + 'swap the arguments.'); + } // Create top-level block. Blockly.Events.disable(); - var topBlock = Blockly.Xml.domToBlockHeadless_(workspace, xmlBlock); + var topBlock = Blockly.Xml.domToBlockHeadless_(xmlBlock, workspace); if (workspace.rendered) { // Hide connections to speed up assembly. topBlock.setConnectionsHidden(true); @@ -347,12 +361,12 @@ Blockly.Xml.domToBlock = function(workspace, xmlBlock) { /** * Decode an XML block tag and create a block (and possibly sub blocks) on the * workspace. - * @param {!Blockly.Workspace} workspace The workspace. * @param {!Element} xmlBlock XML block element. + * @param {!Blockly.Workspace} workspace The workspace. * @return {!Blockly.Block} The root block created. * @private */ -Blockly.Xml.domToBlockHeadless_ = function(workspace, xmlBlock) { +Blockly.Xml.domToBlockHeadless_ = function(xmlBlock, workspace) { var block = null; var prototypeName = xmlBlock.getAttribute('type'); if (!prototypeName) { @@ -447,8 +461,8 @@ Blockly.Xml.domToBlockHeadless_ = function(workspace, xmlBlock) { input.connection.setShadowDom(childShadowNode); } if (childBlockNode) { - blockChild = Blockly.Xml.domToBlockHeadless_(workspace, - childBlockNode); + blockChild = Blockly.Xml.domToBlockHeadless_(childBlockNode, + workspace); if (blockChild.outputConnection) { input.connection.connect(blockChild.outputConnection); } else if (blockChild.previousConnection) { @@ -469,8 +483,8 @@ Blockly.Xml.domToBlockHeadless_ = function(workspace, xmlBlock) { // This could happen if there is more than one XML 'next' tag. throw 'Next statement is already connected.'; } - blockChild = Blockly.Xml.domToBlockHeadless_(workspace, - childBlockNode); + blockChild = Blockly.Xml.domToBlockHeadless_(childBlockNode, + workspace); if (!blockChild.previousConnection) { throw 'Next block does not have previous statement.'; } diff --git a/demos/blockfactory/factory.js b/demos/blockfactory/factory.js index 246b2b555..375ad1386 100644 --- a/demos/blockfactory/factory.js +++ b/demos/blockfactory/factory.js @@ -786,7 +786,7 @@ function init() { mainWorkspace); } else { var xml = ''; - Blockly.Xml.domToWorkspace(mainWorkspace, Blockly.Xml.textToDom(xml)); + Blockly.Xml.domToWorkspace(Blockly.Xml.textToDom(xml), mainWorkspace); } mainWorkspace.clearUndo(); diff --git a/demos/code/code.js b/demos/code/code.js index 5380cdf9b..5668dfe31 100644 --- a/demos/code/code.js +++ b/demos/code/code.js @@ -139,11 +139,11 @@ Code.loadBlocks = function(defaultXml) { // Language switching stores the blocks during the reload. delete window.sessionStorage.loadOnceBlocks; var xml = Blockly.Xml.textToDom(loadOnce); - Blockly.Xml.domToWorkspace(Code.workspace, xml); + Blockly.Xml.domToWorkspace(xml, Code.workspace); } else if (defaultXml) { // Load the editor with default starting blocks. var xml = Blockly.Xml.textToDom(defaultXml); - Blockly.Xml.domToWorkspace(Code.workspace, xml); + Blockly.Xml.domToWorkspace(xml, Code.workspace); } else if ('BlocklyStorage' in window) { // Restore saved blocks in a separate thread so that subsequent // initialization is not affected from a failed load. @@ -270,7 +270,7 @@ Code.tabClick = function(clickedName) { } if (xmlDom) { Code.workspace.clear(); - Blockly.Xml.domToWorkspace(Code.workspace, xmlDom); + Blockly.Xml.domToWorkspace(xmlDom, Code.workspace); } } diff --git a/demos/generator/index.html b/demos/generator/index.html index 31890a665..0687e963e 100644 --- a/demos/generator/index.html +++ b/demos/generator/index.html @@ -116,8 +116,8 @@ var workspace = Blockly.inject('blocklyDiv', {media: '../../media/', toolbox: document.getElementById('toolbox')}); - Blockly.Xml.domToWorkspace(workspace, - document.getElementById('startBlocks')); + Blockly.Xml.domToWorkspace(document.getElementById('startBlocks'), + workspace); function showCode() { // Generate JavaScript code and display it. diff --git a/demos/graph/index.html b/demos/graph/index.html index 709fd502c..7e9daf2dd 100644 --- a/demos/graph/index.html +++ b/demos/graph/index.html @@ -338,8 +338,8 @@ Graph.init = function() { {collapse: false, media: '../../media/', toolbox: document.getElementById('toolbox')}); - Blockly.Xml.domToWorkspace(Graph.workspace, - document.getElementById('startBlocks')); + Blockly.Xml.domToWorkspace(document.getElementById('startBlocks'), + Graph.workspace); Graph.workspace.clearUndo(); // When Blockly changes, update the graph. diff --git a/demos/headless/index.html b/demos/headless/index.html index 9df0dc806..62d49fdfa 100644 --- a/demos/headless/index.html +++ b/demos/headless/index.html @@ -110,7 +110,7 @@ } // Create a headless workspace. var workspace = new Blockly.Workspace(); - Blockly.Xml.domToWorkspace(workspace, xml); + Blockly.Xml.domToWorkspace(xml, workspace); var code = Blockly.Python.workspaceToCode(workspace); document.getElementById('code_output').value = code; } diff --git a/demos/interpreter/index.html b/demos/interpreter/index.html index a4fadc9d0..ba481f1af 100644 --- a/demos/interpreter/index.html +++ b/demos/interpreter/index.html @@ -124,8 +124,8 @@ var workspace = Blockly.inject('blocklyDiv', {media: '../../media/', toolbox: document.getElementById('toolbox')}); - Blockly.Xml.domToWorkspace(workspace, - document.getElementById('startBlocks')); + Blockly.Xml.domToWorkspace(document.getElementById('startBlocks'), + workspace); var myInterpreter = null; diff --git a/demos/plane/plane.js b/demos/plane/plane.js index e19f8a46f..3b05eee01 100644 --- a/demos/plane/plane.js +++ b/demos/plane/plane.js @@ -143,11 +143,11 @@ Plane.loadBlocks = function(defaultXml) { // Language switching stores the blocks during the reload. delete window.sessionStorage.loadOnceBlocks; var xml = Blockly.Xml.textToDom(loadOnce); - Blockly.Xml.domToWorkspace(Plane.workspace, xml); + Blockly.Xml.domToWorkspace(xml, Plane.workspace); } else if (defaultXml) { // Load the editor with default starting blocks. var xml = Blockly.Xml.textToDom(defaultXml); - Blockly.Xml.domToWorkspace(Plane.workspace, xml); + Blockly.Xml.domToWorkspace(xml, Plane.workspace); } Plane.workspace.clearUndo(); }; diff --git a/demos/rtl/index.html b/demos/rtl/index.html index a88026132..f2ae162f4 100644 --- a/demos/rtl/index.html +++ b/demos/rtl/index.html @@ -27,8 +27,8 @@ {media: '../../media/', rtl: true, toolbox: document.getElementById('toolbox')}); - Blockly.Xml.domToWorkspace(workspace, - document.getElementById('startBlocks')); + Blockly.Xml.domToWorkspace(document.getElementById('startBlocks'), + workspace); //window.onbeforeunload = function() { // return 'Leaving this page will result in the loss of your work.'; //}; diff --git a/tests/generators/index.html b/tests/generators/index.html index 4e2ef54d6..e168a326a 100644 --- a/tests/generators/index.html +++ b/tests/generators/index.html @@ -128,7 +128,7 @@ function fromXml(xmlText) { alert('Error parsing XML:\n' + e); return; } - Blockly.Xml.domToWorkspace(workspace, xmlDoc); + Blockly.Xml.domToWorkspace(xmlDoc, workspace); } function setOutput(text) { diff --git a/tests/playground.html b/tests/playground.html index 0d7b053cb..c41c12db2 100644 --- a/tests/playground.html +++ b/tests/playground.html @@ -118,7 +118,7 @@ function toXml() { function fromXml() { var input = document.getElementById('importExport'); var xml = Blockly.Xml.textToDom(input.value); - Blockly.Xml.domToWorkspace(workspace, xml); + Blockly.Xml.domToWorkspace(xml, workspace); taChange(); } @@ -188,7 +188,7 @@ function spaghetti(n) { xml = '' + xml + ''; var dom = Blockly.Xml.textToDom(xml); console.time('Spaghetti domToWorkspace'); - Blockly.Xml.domToWorkspace(workspace, dom); + Blockly.Xml.domToWorkspace(dom, workspace); console.timeEnd('Spaghetti domToWorkspace'); } var spaghettiXml = [