From 21514b4ea996241f861322834789d0390e07d50a Mon Sep 17 00:00:00 2001 From: Isaac J Date: Tue, 14 May 2024 16:11:00 -0700 Subject: [PATCH 1/2] fix duplicate name error warning logic --- editor/static/js/question/edit.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/editor/static/js/question/edit.js b/editor/static/js/question/edit.js index a39343cc..55fa9efd 100644 --- a/editor/static/js/question/edit.js +++ b/editor/static/js/question/edit.js @@ -773,7 +773,7 @@ $(document).ready(function() { names.sort(Numbas.util.sortBy('name')); function handle_group(group) { group.forEach(function(n) { - n.v.duplicateNameError(group.length > 1 ? n.name : null); + //n.v.duplicateNameError(group.length > 1 ? n.name : null); }); } @@ -1963,11 +1963,15 @@ $(document).ready(function() { var nameError = ko.pureComputed(function() { var duplicateNameError = v.duplicateNameError(); + var nameErrDuplicates = {} // tracks duplicate names using an object var name_errors = names().map(function(nd) { - var name = nd.name; - if(name.toLowerCase() == duplicateNameError) { + var name = nd.name.toLowerCase(); + if(nameErrDuplicates[name] && name!=='') { return 'There\'s another variable or constant with the name '+name+'.'; + } else { + nameErrDuplicates[name] = true } + console.log("NameErr Map: ",nameErrDuplicates) if(name=='') { return ''; } From c0b562c36c9abe4a88d1aefcdeabae2c2d73ed7c Mon Sep 17 00:00:00 2001 From: Isaac J Date: Thu, 16 May 2024 22:07:06 -0700 Subject: [PATCH 2/2] update handle_group function for duplicates --- editor/static/js/question/edit.js | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/editor/static/js/question/edit.js b/editor/static/js/question/edit.js index 55fa9efd..2460b8ae 100644 --- a/editor/static/js/question/edit.js +++ b/editor/static/js/question/edit.js @@ -771,20 +771,29 @@ $(document).ready(function() { // Finally, mark duplicate names names.sort(Numbas.util.sortBy('name')); + var groupArray = []; function handle_group(group) { - group.forEach(function(n) { - //n.v.duplicateNameError(group.length > 1 ? n.name : null); + group.forEach(function (n) { + n.v.duplicateNameError(null); }); + groupArray.push(group); } var start = 0; - names.forEach(function(n,i) { - if(n.name!=names[start].name) { - handle_group(names.slice(start,i)); + names.forEach(function (n, i) { + if (n.name != names[start].name) { + handle_group(names.slice(start, i)); start = i; } }); handle_group(names.slice(start)); + // Triggers duplicateNameError observable for groups with duplicates + groupArray.forEach(function (group) { + var groupVariable = group[0]; + if (group.length > 1 && groupVariable.name != "") { + groupVariable.v.duplicateNameError(groupVariable.name); + } + }) },this).extend({rateLimit: 2000}); /** Create an instance of this question as a Numbas.Question object. @@ -1963,15 +1972,11 @@ $(document).ready(function() { var nameError = ko.pureComputed(function() { var duplicateNameError = v.duplicateNameError(); - var nameErrDuplicates = {} // tracks duplicate names using an object - var name_errors = names().map(function(nd) { - var name = nd.name.toLowerCase(); - if(nameErrDuplicates[name] && name!=='') { - return 'There\'s another variable or constant with the name '+name+'.'; - } else { - nameErrDuplicates[name] = true + var name_errors = names().map(function (nd) { + var name = nd.name; + if (name.toLowerCase() == duplicateNameError) { + return 'There\'s another variable or constant with the name ' + name + '.'; } - console.log("NameErr Map: ",nameErrDuplicates) if(name=='') { return ''; }