mirror of
https://github.com/scratchfoundation/scratch-blocks.git
synced 2025-08-14 15:09:18 -04:00
Merge branch 'develop' of https://github.com/google/blockly into merge_sept_01
This commit is contained in:
commit
a979a422e4
26 changed files with 1052 additions and 1257 deletions
core
|
@ -92,24 +92,6 @@ Blockly.Variables.allVariables = function(root) {
|
|||
return root.variableList;
|
||||
};
|
||||
|
||||
/**
|
||||
* Find all instances of the specified variable and rename them.
|
||||
* @param {string} oldName Variable to rename.
|
||||
* @param {string} newName New variable name.
|
||||
* @param {!Blockly.Workspace} workspace Workspace rename variables in.
|
||||
*/
|
||||
Blockly.Variables.renameVariable = function(oldName, newName, workspace) {
|
||||
Blockly.Events.setGroup(true);
|
||||
var blocks = workspace.getAllBlocks();
|
||||
// Iterate through every block.
|
||||
for (var i = 0; i < blocks.length; i++) {
|
||||
blocks[i].renameVar(oldName, newName);
|
||||
}
|
||||
Blockly.Events.setGroup(false);
|
||||
|
||||
workspace.renameVariable(oldName, newName);
|
||||
};
|
||||
|
||||
/**
|
||||
* Construct the blocks required by the flyout for the variable category.
|
||||
* @param {!Blockly.Workspace} workspace The workspace contianing variables.
|
||||
|
@ -121,7 +103,7 @@ Blockly.Variables.flyoutCategory = function(workspace) {
|
|||
|
||||
var xmlList = [];
|
||||
var button = goog.dom.createDom('button');
|
||||
button.setAttribute('text', 'Create variable');
|
||||
button.setAttribute('text', Blockly.Msg.NEW_VARIABLE);
|
||||
xmlList.push(button);
|
||||
|
||||
|
||||
|
@ -318,74 +300,6 @@ Blockly.Variables.generateUniqueName = function(workspace) {
|
|||
return newName;
|
||||
};
|
||||
|
||||
/**
|
||||
* Find all the uses of a named variable.
|
||||
* @param {string} name Name of variable.
|
||||
* @param {!Blockly.Workspace} workspace The workspace to find uses in.
|
||||
* @return {!Array.<!Blockly.Block>} Array of block usages.
|
||||
*/
|
||||
Blockly.Variables.getUses = function(name, workspace) {
|
||||
var uses = [];
|
||||
var blocks = workspace.getAllBlocks();
|
||||
// Iterate through every block and check the name.
|
||||
for (var i = 0; i < blocks.length; i++) {
|
||||
var blockVariables = blocks[i].getVars();
|
||||
if (blockVariables) {
|
||||
for (var j = 0; j < blockVariables.length; j++) {
|
||||
var varName = blockVariables[j];
|
||||
// Variable name may be null if the block is only half-built.
|
||||
if (varName && Blockly.Names.equals(varName, name)) {
|
||||
uses.push(blocks[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return uses;
|
||||
};
|
||||
|
||||
/**
|
||||
* When a variable is deleted, find and dispose of all uses of it.
|
||||
* @param {!Array.<!Blockly.Block>} uses An array of blocks using the variable.
|
||||
* @private
|
||||
*/
|
||||
Blockly.Variables.disposeUses_ = function(uses) {
|
||||
Blockly.Events.setGroup(true);
|
||||
for (var i = 0; i < uses.length; i++) {
|
||||
uses[i].dispose(true, false);
|
||||
}
|
||||
Blockly.Events.setGroup(false);
|
||||
};
|
||||
|
||||
/**
|
||||
* Delete a variables and all of its uses from the given workspace.
|
||||
* @param {string} name Name of variable to delete.
|
||||
* @param {!Blockly.Workspace} workspace The workspace to delete uses from.
|
||||
*/
|
||||
Blockly.Variables.delete = function(name, workspace) {
|
||||
var variableIndex = workspace.variableList.indexOf(name);
|
||||
if (variableIndex != -1) {
|
||||
var uses = Blockly.Variables.getUses(name, workspace);
|
||||
if (uses.length > 1) {
|
||||
for (var i = 0, block; block = uses[i]; i++) {
|
||||
if (block.type == 'procedures_defnoreturn' ||
|
||||
block.type == 'procedures_defreturn') {
|
||||
var procedureName = block.getFieldValue('NAME');
|
||||
window.alert(
|
||||
Blockly.Msg.CANNOT_DELETE_VARIABLE_PROCEDURE.replace('%1', name).
|
||||
replace('%2', procedureName));
|
||||
return;
|
||||
}
|
||||
}
|
||||
window.confirm(
|
||||
Blockly.Msg.DELETE_VARIABLE_CONFIRMATION.replace('%1', uses.length).
|
||||
replace('%2', name));
|
||||
}
|
||||
Blockly.Variables.disposeUses_(uses);
|
||||
workspace.variableList.splice(variableIndex, 1);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Create a new variable on the given workspace.
|
||||
* @param {!Blockly.Workspace} workspace The workspace on which to create the
|
||||
|
@ -395,14 +309,22 @@ Blockly.Variables.delete = function(name, workspace) {
|
|||
* variable was chosen.
|
||||
*/
|
||||
Blockly.Variables.createVariable = function(workspace) {
|
||||
var text = Blockly.Variables.promptName(Blockly.Msg.NEW_VARIABLE_TITLE, '');
|
||||
// Since variables are case-insensitive, ensure that if the new variable
|
||||
// matches with an existing variable, the new case prevails throughout.
|
||||
if (text) {
|
||||
workspace.createVariable(text);
|
||||
return text;
|
||||
while (true) {
|
||||
var text = Blockly.Variables.promptName(Blockly.Msg.NEW_VARIABLE_TITLE, '');
|
||||
if (text) {
|
||||
if (workspace.variableIndexOf(text) != -1) {
|
||||
window.alert(Blockly.Msg.VARIABLE_ALREADY_EXISTS.replace('%1',
|
||||
text.toLowerCase()));
|
||||
} else {
|
||||
workspace.createVariable(text);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
text = null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return text;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue