mirror of
https://github.com/google/blockly.git
synced 2026-01-04 15:40:08 +01:00
Swap order of arguments on domToWorkspace.
This commit is contained in:
@@ -60,7 +60,7 @@ BlocklyStorage.restoreBlocks = function(opt_workspace) {
|
|||||||
if ('localStorage' in window && window.localStorage[url]) {
|
if ('localStorage' in window && window.localStorage[url]) {
|
||||||
var workspace = opt_workspace || Blockly.getMainWorkspace();
|
var workspace = opt_workspace || Blockly.getMainWorkspace();
|
||||||
var xml = Blockly.Xml.textToDom(window.localStorage[url]);
|
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.
|
// Clear the workspace to avoid merge.
|
||||||
workspace.clear();
|
workspace.clear();
|
||||||
Blockly.Xml.domToWorkspace(workspace, xml);
|
Blockly.Xml.domToWorkspace(xml, workspace);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -535,7 +535,7 @@ Blockly.Connection.prototype.disconnect = function() {
|
|||||||
var shadow = parentConnection.getShadowDom();
|
var shadow = parentConnection.getShadowDom();
|
||||||
if (parentBlock.workspace && shadow && Blockly.Events.recordUndo) {
|
if (parentBlock.workspace && shadow && Blockly.Events.recordUndo) {
|
||||||
var blockShadow =
|
var blockShadow =
|
||||||
Blockly.Xml.domToBlock(parentBlock.workspace, shadow);
|
Blockly.Xml.domToBlock(shadow, parentBlock.workspace);
|
||||||
if (blockShadow.outputConnection) {
|
if (blockShadow.outputConnection) {
|
||||||
parentConnection.connect(blockShadow.outputConnection);
|
parentConnection.connect(blockShadow.outputConnection);
|
||||||
} else if (blockShadow.previousConnection) {
|
} else if (blockShadow.previousConnection) {
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ Blockly.ContextMenu.hide = function() {
|
|||||||
Blockly.ContextMenu.callbackFactory = function(block, xml) {
|
Blockly.ContextMenu.callbackFactory = function(block, xml) {
|
||||||
return function() {
|
return function() {
|
||||||
Blockly.Events.disable();
|
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.
|
// Move the new block next to the old block.
|
||||||
var xy = block.getRelativeToSurfaceXY();
|
var xy = block.getRelativeToSurfaceXY();
|
||||||
if (block.RTL) {
|
if (block.RTL) {
|
||||||
|
|||||||
@@ -324,7 +324,7 @@ Blockly.Events.Create.prototype.run = function(forward) {
|
|||||||
var workspace = Blockly.Workspace.getById(this.workspaceId);
|
var workspace = Blockly.Workspace.getById(this.workspaceId);
|
||||||
var xml = goog.dom.createDom('xml');
|
var xml = goog.dom.createDom('xml');
|
||||||
xml.appendChild(this.xml);
|
xml.appendChild(this.xml);
|
||||||
Blockly.Xml.domToWorkspace(workspace, xml);
|
Blockly.Xml.domToWorkspace(xml, workspace);
|
||||||
} else {
|
} else {
|
||||||
for (var i = 0, id; id = this.ids[i]; i++) {
|
for (var i = 0, id; id = this.ids[i]; i++) {
|
||||||
var block = Blockly.Block.getById(id);
|
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 workspace = Blockly.Workspace.getById(this.workspaceId);
|
||||||
var xml = goog.dom.createDom('xml');
|
var xml = goog.dom.createDom('xml');
|
||||||
xml.appendChild(this.oldXml);
|
xml.appendChild(this.oldXml);
|
||||||
Blockly.Xml.domToWorkspace(workspace, xml);
|
Blockly.Xml.domToWorkspace(xml, workspace);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -393,7 +393,7 @@ Blockly.Flyout.prototype.show = function(xmlList) {
|
|||||||
this.permanentlyDisabled_.length = 0;
|
this.permanentlyDisabled_.length = 0;
|
||||||
for (var i = 0, xml; xml = xmlList[i]; i++) {
|
for (var i = 0, xml; xml = xmlList[i]; i++) {
|
||||||
if (xml.tagName && xml.tagName.toUpperCase() == 'BLOCK') {
|
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) {
|
if (block.disabled) {
|
||||||
// Record blocks that were initially disabled.
|
// Record blocks that were initially disabled.
|
||||||
// Do not enable these blocks as a result of capacity filtering.
|
// Do not enable these blocks as a result of capacity filtering.
|
||||||
@@ -636,7 +636,7 @@ Blockly.Flyout.prototype.createBlockFunc_ = function(originBlock) {
|
|||||||
Blockly.Events.disable();
|
Blockly.Events.disable();
|
||||||
// Create the new block by cloning the block in the flyout (via XML).
|
// Create the new block by cloning the block in the flyout (via XML).
|
||||||
var xml = Blockly.Xml.blockToDom(originBlock);
|
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.
|
// Place it in the same spot as the flyout copy.
|
||||||
var svgRootOld = originBlock.getSvgRoot();
|
var svgRootOld = originBlock.getSvgRoot();
|
||||||
if (!svgRootOld) {
|
if (!svgRootOld) {
|
||||||
|
|||||||
@@ -468,7 +468,7 @@ Blockly.WorkspaceSvg.prototype.paste = function(xmlBlock) {
|
|||||||
}
|
}
|
||||||
Blockly.terminateDrag_(); // Dragging while pasting? No.
|
Blockly.terminateDrag_(); // Dragging while pasting? No.
|
||||||
Blockly.Events.disable();
|
Blockly.Events.disable();
|
||||||
var block = Blockly.Xml.domToBlock(this, xmlBlock);
|
var block = Blockly.Xml.domToBlock(xmlBlock, this);
|
||||||
// Move the duplicate to original position.
|
// Move the duplicate to original position.
|
||||||
var blockX = parseInt(xmlBlock.getAttribute('x'), 10);
|
var blockX = parseInt(xmlBlock.getAttribute('x'), 10);
|
||||||
var blockY = parseInt(xmlBlock.getAttribute('y'), 10);
|
var blockY = parseInt(xmlBlock.getAttribute('y'), 10);
|
||||||
|
|||||||
38
core/xml.js
38
core/xml.js
@@ -268,10 +268,17 @@ Blockly.Xml.textToDom = function(text) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Decode an XML DOM and create blocks on the workspace.
|
* Decode an XML DOM and create blocks on the workspace.
|
||||||
* @param {!Blockly.Workspace} workspace The workspace.
|
|
||||||
* @param {!Element} xml XML DOM.
|
* @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.
|
var width; // Not used in LTR.
|
||||||
if (workspace.RTL) {
|
if (workspace.RTL) {
|
||||||
width = workspace.getWidth();
|
width = workspace.getWidth();
|
||||||
@@ -289,7 +296,7 @@ Blockly.Xml.domToWorkspace = function(workspace, xml) {
|
|||||||
var xmlChild = xml.childNodes[i];
|
var xmlChild = xml.childNodes[i];
|
||||||
var name = xmlChild.nodeName.toLowerCase();
|
var name = xmlChild.nodeName.toLowerCase();
|
||||||
if (name == 'block' || name == 'shadow') {
|
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 blockX = parseInt(xmlChild.getAttribute('x'), 10);
|
||||||
var blockY = parseInt(xmlChild.getAttribute('y'), 10);
|
var blockY = parseInt(xmlChild.getAttribute('y'), 10);
|
||||||
if (!isNaN(blockX) && !isNaN(blockY)) {
|
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
|
* Decode an XML block tag and create a block (and possibly sub blocks) on the
|
||||||
* workspace.
|
* workspace.
|
||||||
* @param {!Blockly.Workspace} workspace The workspace.
|
|
||||||
* @param {!Element} xmlBlock XML block element.
|
* @param {!Element} xmlBlock XML block element.
|
||||||
|
* @param {!Blockly.Workspace} workspace The workspace.
|
||||||
* @return {!Blockly.Block} The root block created.
|
* @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.
|
// Create top-level block.
|
||||||
Blockly.Events.disable();
|
Blockly.Events.disable();
|
||||||
var topBlock = Blockly.Xml.domToBlockHeadless_(workspace, xmlBlock);
|
var topBlock = Blockly.Xml.domToBlockHeadless_(xmlBlock, workspace);
|
||||||
if (workspace.rendered) {
|
if (workspace.rendered) {
|
||||||
// Hide connections to speed up assembly.
|
// Hide connections to speed up assembly.
|
||||||
topBlock.setConnectionsHidden(true);
|
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
|
* Decode an XML block tag and create a block (and possibly sub blocks) on the
|
||||||
* workspace.
|
* workspace.
|
||||||
* @param {!Blockly.Workspace} workspace The workspace.
|
|
||||||
* @param {!Element} xmlBlock XML block element.
|
* @param {!Element} xmlBlock XML block element.
|
||||||
|
* @param {!Blockly.Workspace} workspace The workspace.
|
||||||
* @return {!Blockly.Block} The root block created.
|
* @return {!Blockly.Block} The root block created.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
Blockly.Xml.domToBlockHeadless_ = function(workspace, xmlBlock) {
|
Blockly.Xml.domToBlockHeadless_ = function(xmlBlock, workspace) {
|
||||||
var block = null;
|
var block = null;
|
||||||
var prototypeName = xmlBlock.getAttribute('type');
|
var prototypeName = xmlBlock.getAttribute('type');
|
||||||
if (!prototypeName) {
|
if (!prototypeName) {
|
||||||
@@ -447,8 +461,8 @@ Blockly.Xml.domToBlockHeadless_ = function(workspace, xmlBlock) {
|
|||||||
input.connection.setShadowDom(childShadowNode);
|
input.connection.setShadowDom(childShadowNode);
|
||||||
}
|
}
|
||||||
if (childBlockNode) {
|
if (childBlockNode) {
|
||||||
blockChild = Blockly.Xml.domToBlockHeadless_(workspace,
|
blockChild = Blockly.Xml.domToBlockHeadless_(childBlockNode,
|
||||||
childBlockNode);
|
workspace);
|
||||||
if (blockChild.outputConnection) {
|
if (blockChild.outputConnection) {
|
||||||
input.connection.connect(blockChild.outputConnection);
|
input.connection.connect(blockChild.outputConnection);
|
||||||
} else if (blockChild.previousConnection) {
|
} 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.
|
// This could happen if there is more than one XML 'next' tag.
|
||||||
throw 'Next statement is already connected.';
|
throw 'Next statement is already connected.';
|
||||||
}
|
}
|
||||||
blockChild = Blockly.Xml.domToBlockHeadless_(workspace,
|
blockChild = Blockly.Xml.domToBlockHeadless_(childBlockNode,
|
||||||
childBlockNode);
|
workspace);
|
||||||
if (!blockChild.previousConnection) {
|
if (!blockChild.previousConnection) {
|
||||||
throw 'Next block does not have previous statement.';
|
throw 'Next block does not have previous statement.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -786,7 +786,7 @@ function init() {
|
|||||||
mainWorkspace);
|
mainWorkspace);
|
||||||
} else {
|
} else {
|
||||||
var xml = '<xml><block type="factory_base" deletable="false" movable="false"></block></xml>';
|
var xml = '<xml><block type="factory_base" deletable="false" movable="false"></block></xml>';
|
||||||
Blockly.Xml.domToWorkspace(mainWorkspace, Blockly.Xml.textToDom(xml));
|
Blockly.Xml.domToWorkspace(Blockly.Xml.textToDom(xml), mainWorkspace);
|
||||||
}
|
}
|
||||||
mainWorkspace.clearUndo();
|
mainWorkspace.clearUndo();
|
||||||
|
|
||||||
|
|||||||
@@ -139,11 +139,11 @@ Code.loadBlocks = function(defaultXml) {
|
|||||||
// Language switching stores the blocks during the reload.
|
// Language switching stores the blocks during the reload.
|
||||||
delete window.sessionStorage.loadOnceBlocks;
|
delete window.sessionStorage.loadOnceBlocks;
|
||||||
var xml = Blockly.Xml.textToDom(loadOnce);
|
var xml = Blockly.Xml.textToDom(loadOnce);
|
||||||
Blockly.Xml.domToWorkspace(Code.workspace, xml);
|
Blockly.Xml.domToWorkspace(xml, Code.workspace);
|
||||||
} else if (defaultXml) {
|
} else if (defaultXml) {
|
||||||
// Load the editor with default starting blocks.
|
// Load the editor with default starting blocks.
|
||||||
var xml = Blockly.Xml.textToDom(defaultXml);
|
var xml = Blockly.Xml.textToDom(defaultXml);
|
||||||
Blockly.Xml.domToWorkspace(Code.workspace, xml);
|
Blockly.Xml.domToWorkspace(xml, Code.workspace);
|
||||||
} else if ('BlocklyStorage' in window) {
|
} else if ('BlocklyStorage' in window) {
|
||||||
// Restore saved blocks in a separate thread so that subsequent
|
// Restore saved blocks in a separate thread so that subsequent
|
||||||
// initialization is not affected from a failed load.
|
// initialization is not affected from a failed load.
|
||||||
@@ -270,7 +270,7 @@ Code.tabClick = function(clickedName) {
|
|||||||
}
|
}
|
||||||
if (xmlDom) {
|
if (xmlDom) {
|
||||||
Code.workspace.clear();
|
Code.workspace.clear();
|
||||||
Blockly.Xml.domToWorkspace(Code.workspace, xmlDom);
|
Blockly.Xml.domToWorkspace(xmlDom, Code.workspace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -116,8 +116,8 @@
|
|||||||
var workspace = Blockly.inject('blocklyDiv',
|
var workspace = Blockly.inject('blocklyDiv',
|
||||||
{media: '../../media/',
|
{media: '../../media/',
|
||||||
toolbox: document.getElementById('toolbox')});
|
toolbox: document.getElementById('toolbox')});
|
||||||
Blockly.Xml.domToWorkspace(workspace,
|
Blockly.Xml.domToWorkspace(document.getElementById('startBlocks'),
|
||||||
document.getElementById('startBlocks'));
|
workspace);
|
||||||
|
|
||||||
function showCode() {
|
function showCode() {
|
||||||
// Generate JavaScript code and display it.
|
// Generate JavaScript code and display it.
|
||||||
|
|||||||
@@ -338,8 +338,8 @@ Graph.init = function() {
|
|||||||
{collapse: false,
|
{collapse: false,
|
||||||
media: '../../media/',
|
media: '../../media/',
|
||||||
toolbox: document.getElementById('toolbox')});
|
toolbox: document.getElementById('toolbox')});
|
||||||
Blockly.Xml.domToWorkspace(Graph.workspace,
|
Blockly.Xml.domToWorkspace(document.getElementById('startBlocks'),
|
||||||
document.getElementById('startBlocks'));
|
Graph.workspace);
|
||||||
Graph.workspace.clearUndo();
|
Graph.workspace.clearUndo();
|
||||||
|
|
||||||
// When Blockly changes, update the graph.
|
// When Blockly changes, update the graph.
|
||||||
|
|||||||
@@ -110,7 +110,7 @@
|
|||||||
}
|
}
|
||||||
// Create a headless workspace.
|
// Create a headless workspace.
|
||||||
var workspace = new Blockly.Workspace();
|
var workspace = new Blockly.Workspace();
|
||||||
Blockly.Xml.domToWorkspace(workspace, xml);
|
Blockly.Xml.domToWorkspace(xml, workspace);
|
||||||
var code = Blockly.Python.workspaceToCode(workspace);
|
var code = Blockly.Python.workspaceToCode(workspace);
|
||||||
document.getElementById('code_output').value = code;
|
document.getElementById('code_output').value = code;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,8 +124,8 @@
|
|||||||
var workspace = Blockly.inject('blocklyDiv',
|
var workspace = Blockly.inject('blocklyDiv',
|
||||||
{media: '../../media/',
|
{media: '../../media/',
|
||||||
toolbox: document.getElementById('toolbox')});
|
toolbox: document.getElementById('toolbox')});
|
||||||
Blockly.Xml.domToWorkspace(workspace,
|
Blockly.Xml.domToWorkspace(document.getElementById('startBlocks'),
|
||||||
document.getElementById('startBlocks'));
|
workspace);
|
||||||
|
|
||||||
var myInterpreter = null;
|
var myInterpreter = null;
|
||||||
|
|
||||||
|
|||||||
@@ -143,11 +143,11 @@ Plane.loadBlocks = function(defaultXml) {
|
|||||||
// Language switching stores the blocks during the reload.
|
// Language switching stores the blocks during the reload.
|
||||||
delete window.sessionStorage.loadOnceBlocks;
|
delete window.sessionStorage.loadOnceBlocks;
|
||||||
var xml = Blockly.Xml.textToDom(loadOnce);
|
var xml = Blockly.Xml.textToDom(loadOnce);
|
||||||
Blockly.Xml.domToWorkspace(Plane.workspace, xml);
|
Blockly.Xml.domToWorkspace(xml, Plane.workspace);
|
||||||
} else if (defaultXml) {
|
} else if (defaultXml) {
|
||||||
// Load the editor with default starting blocks.
|
// Load the editor with default starting blocks.
|
||||||
var xml = Blockly.Xml.textToDom(defaultXml);
|
var xml = Blockly.Xml.textToDom(defaultXml);
|
||||||
Blockly.Xml.domToWorkspace(Plane.workspace, xml);
|
Blockly.Xml.domToWorkspace(xml, Plane.workspace);
|
||||||
}
|
}
|
||||||
Plane.workspace.clearUndo();
|
Plane.workspace.clearUndo();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -27,8 +27,8 @@
|
|||||||
{media: '../../media/',
|
{media: '../../media/',
|
||||||
rtl: true,
|
rtl: true,
|
||||||
toolbox: document.getElementById('toolbox')});
|
toolbox: document.getElementById('toolbox')});
|
||||||
Blockly.Xml.domToWorkspace(workspace,
|
Blockly.Xml.domToWorkspace(document.getElementById('startBlocks'),
|
||||||
document.getElementById('startBlocks'));
|
workspace);
|
||||||
//window.onbeforeunload = function() {
|
//window.onbeforeunload = function() {
|
||||||
// return 'Leaving this page will result in the loss of your work.';
|
// return 'Leaving this page will result in the loss of your work.';
|
||||||
//};
|
//};
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ function fromXml(xmlText) {
|
|||||||
alert('Error parsing XML:\n' + e);
|
alert('Error parsing XML:\n' + e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Blockly.Xml.domToWorkspace(workspace, xmlDoc);
|
Blockly.Xml.domToWorkspace(xmlDoc, workspace);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setOutput(text) {
|
function setOutput(text) {
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ function toXml() {
|
|||||||
function fromXml() {
|
function fromXml() {
|
||||||
var input = document.getElementById('importExport');
|
var input = document.getElementById('importExport');
|
||||||
var xml = Blockly.Xml.textToDom(input.value);
|
var xml = Blockly.Xml.textToDom(input.value);
|
||||||
Blockly.Xml.domToWorkspace(workspace, xml);
|
Blockly.Xml.domToWorkspace(xml, workspace);
|
||||||
taChange();
|
taChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,7 +188,7 @@ function spaghetti(n) {
|
|||||||
xml = '<xml xmlns="http://www.w3.org/1999/xhtml">' + xml + '</xml>';
|
xml = '<xml xmlns="http://www.w3.org/1999/xhtml">' + xml + '</xml>';
|
||||||
var dom = Blockly.Xml.textToDom(xml);
|
var dom = Blockly.Xml.textToDom(xml);
|
||||||
console.time('Spaghetti domToWorkspace');
|
console.time('Spaghetti domToWorkspace');
|
||||||
Blockly.Xml.domToWorkspace(workspace, dom);
|
Blockly.Xml.domToWorkspace(dom, workspace);
|
||||||
console.timeEnd('Spaghetti domToWorkspace');
|
console.timeEnd('Spaghetti domToWorkspace');
|
||||||
}
|
}
|
||||||
var spaghettiXml = [
|
var spaghettiXml = [
|
||||||
|
|||||||
Reference in New Issue
Block a user