diff --git a/web/app/assets/javascripts/edit_configuration_file_form.js b/web/app/assets/javascripts/edit_configuration_file_form.js index 3f90d3a..60ef2b7 100644 --- a/web/app/assets/javascripts/edit_configuration_file_form.js +++ b/web/app/assets/javascripts/edit_configuration_file_form.js @@ -1,3 +1,75 @@ +var syntaxErrors = function(code) { + // trivial check of bracket curlyCount + // should be file specific in the future + // and understand the syntax of config file + + var normalCount = 0; + var squareCount = 0; + var curlyCount = 0; + + for (var i = 0, len = code.length; i < len; i++) { + if (code[i] === '(') { + normalCount++; + } + if (code[i] === ')') { + normalCount--; + } + + if (code[i] === '[') { + squareCount++; + } + if (code[i] === ']') { + squareCount--; + } + + if (code[i] === '{') { + curlyCount++; + } + if (code[i] === '}') { + curlyCount--; + } + } + var result = []; + if (curlyCount > 0) { + result.push("Missing a closing curly bracket }"); + } + if (squareCount > 0) { + result.push("Missing a closing square bracket ]"); + } + if (normalCount > 0) { + result.push("Missing a closing bracket )"); + } + + if (curlyCount < 0) { + result.push("You have more closing curly brackets than needed }"); + } + if (squareCount < 0) { + result.push("You have more closing square brackets than needed ]"); + } + if (normalCount < 0) { + result.push("You have more closing brackets than needed )"); + } + return result; +} + +var unfilledVariables = function(code) { + var result = []; + var lines = code.split("\n"); + for (var i = 0, len = lines.length; i < len; i++) { + var lineNumber = '' + (i + 1); + var line = lines[i]; + var matches = line.match(/::.*::/gi) + if(!matches) { continue; }; + for (var j=0, lenMatches = matches.length; j < lenMatches ; j++) { + var match = matches[j]; + result.push("Line " + lineNumber + " - " + match); + } + } + return result; +} + + + $(document).ready(function() { var editor = ace.edit("editor"); //editor.setTheme("ace/theme/monokai"); @@ -5,6 +77,33 @@ $(document).ready(function() { editor.setOptions({ maxLines: 40 }); + + var onEditorChange = function(e) { + value = editor.getValue(); + var errors = syntaxErrors(value); + var message = errors.map(function(error) { + return '