@@ -192,6 +192,11 @@ var textfield = document.querySelector('#expression');
192192var result = document . querySelector ( '#result num' ) ;
193193var icons = document . querySelectorAll ( '#result icon > *' ) ;
194194var button = document . querySelector ( '#calc button' ) ;
195+ var errors = {
196+ char : 'Only numbers or +-*/(). characters are allowed.' ,
197+ par : 'Some parentheses are missing.'
198+ }
199+
195200
196201function openEditor ( ) {
197202 editor . style . display = 'grid' ;
@@ -230,14 +235,14 @@ editor.addEventListener('keyup', function (event) {
230235textfield . addEventListener ( 'input' , checkErrors ) ;
231236
232237function checkErrors ( event ) {
233- var inp = event . target . value . toString ( ) ;
234-
235- // check allowed characters => 0123456789.+-*/()
236- var test = inp . match ( / [ 0 - 9 | \+ | \- | \* | \/ | ( | ) | \. ] + / ) ;
237- if ( ! test ) test = [ "" ] ;
238-
239- // if length of input = characters matched expression is valid
240- if ( inp . length === test [ 0 ] . length ) {
238+ var inp = event . target . value . toString ( ) . split ( '' ) ;
239+ // check if every character is allowed => 0123456789.+-*/()
240+ var charTest = inp . every ( char => char . match ( / [ 0 - 9 | \+ | \- | \* | \/ | ( | ) | \. ] / ) ) ;
241+ // check if parentheses match
242+ var parTest = inp . filter ( char => char == '(' ) . length == inp . filter ( char => char == ')' ) . length ;
243+
244+ // update icon and button
245+ if ( charTest && parTest ) {
241246 button . disabled = false ;
242247 showIcon ( 0 ) ;
243248 } else {
@@ -250,7 +255,11 @@ function checkErrors(event) {
250255 icons [ index ] . classList . remove ( 'invisible' ) ;
251256 }
252257
253- // check if parentheses match
254-
258+ // update warning tooltip
259+ var tooltip = [ ] ;
260+ if ( ! charTest ) tooltip . push ( errors . char ) ;
261+ if ( ! parTest ) tooltip . push ( errors . par ) ;
262+ console . log ( tooltip )
263+ icons [ 1 ] . querySelector ( 'span' ) . innerText = tooltip . join ( '\n' ) ;
255264}
256265
0 commit comments