From 12602ca2b8e962af4201ffac9ff61a86e7f090f0 Mon Sep 17 00:00:00 2001 From: mark-friedman <mark-friedman@users.noreply.github.com> Date: Fri, 10 Sep 2021 15:43:03 -0700 Subject: [PATCH] Get procedure renaming to work correctly dynamically i.e., while typing in the name field. --- block-lexical-variables/src/field_procedure.js | 6 +++++- block-lexical-variables/src/field_procedurename.js | 2 ++ block-lexical-variables/src/procedures.js | 5 +++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/block-lexical-variables/src/field_procedure.js b/block-lexical-variables/src/field_procedure.js index 95e96aa..d55034f 100644 --- a/block-lexical-variables/src/field_procedure.js +++ b/block-lexical-variables/src/field_procedure.js @@ -142,7 +142,8 @@ Blockly.AIProcedure.removeProcedureValues = function(name, workspace) { */ Blockly.AIProcedure.renameProcedure = function (newName) { // this is bound to field_textinput object - var oldName = this.oldName_ || this.text_; + var oldName = this.oldName_ || this.getValue(); + const originalNewName = newName; // [lyn, 10/27/13] now check legality of identifiers newName = Blockly.LexicalVariable.makeLegalIdentifier(newName); @@ -151,6 +152,9 @@ Blockly.AIProcedure.renameProcedure = function (newName) { var procBlocks = Blockly.AIProcedure.getAllProcedureDeclarationBlocksExcept(this.sourceBlock_); var procNames = procBlocks.map(function (decl) { return decl.getFieldValue('NAME'); }); newName = Blockly.FieldLexicalVariable.nameNotIn(newName, procNames); + if (newName !== originalNewName) { + this.doValueUpdate_(newName); + } // Rename any callers. var blocks = this.sourceBlock_.workspace.getAllBlocks(); for (var x = 0; x < blocks.length; x++) { diff --git a/block-lexical-variables/src/field_procedurename.js b/block-lexical-variables/src/field_procedurename.js index 1d61077..b4fb404 100644 --- a/block-lexical-variables/src/field_procedurename.js +++ b/block-lexical-variables/src/field_procedurename.js @@ -51,6 +51,8 @@ goog.inherits(AI.Blockly.FieldProcedureName, Blockly.FieldTextInput); */ AI.Blockly.FieldProcedureName.prototype.setValue = function(newValue) { var oldValue = this.getValue(); + this.oldName_ = oldValue; + this.doValueUpdate_(newValue); AI.Blockly.FieldProcedureName.superClass_.setValue.call(this, newValue); newValue = this.getValue(); if (typeof newValue === 'string' && this.sourceBlock_) { diff --git a/block-lexical-variables/src/procedures.js b/block-lexical-variables/src/procedures.js index ace85f5..f46bea0 100644 --- a/block-lexical-variables/src/procedures.js +++ b/block-lexical-variables/src/procedures.js @@ -714,6 +714,11 @@ Blockly.Blocks['procedures_callnoreturn'] = { renameProcedure: function(oldName, newName) { if (!oldName || Blockly.Names.equals(oldName, this.getFieldValue('PROCNAME'))) { + const nameField = this.getField('PROCNAME'); + // Force the options menu to get regenerated since we might be getting + // called because our defining procedure got renamed and + // this.setFieldValue() will fail if it's value isn't in the options set + nameField.getOptions(); this.setFieldValue(newName, 'PROCNAME'); } },