The Code for ODDS & EVENS

                        
                            // CONTROLLER FUNCTION(S)
                            // Get the values from the UI
                            function getValues() {
                                // get values from the page
                                let startValue = document.getElementById("startValue").value;
                                let endValue = document.getElementById("endValue").value;
                            
                                // convert to Numbers
                                startValue = Number(startValue);
                                endValue = Number(endValue);
                            
                                // if valid input, generate and display numbers
                                if (validateInput(startValue,endValue)) {
                                    // call generateNumbers
                                    let numbers = generateNumbers(startValue, endValue);
                                    // call displayNumbers
                                    displayNumbers(numbers);
                                }
                            }
                            
                            
                            // LOGIC FUNCTION(S)
                            // Generate numbers from the startValue to the endValue
                            function generateNumbers(sValue, eValue) {
                                let numbers = [];
                            
                                // get all numbers from start to end
                                for (let index = sValue; index <= eValue; index++) {
                                    numbers.push(index);
                                }
                            
                                return numbers;
                            }
                            // Validate input
                            function validateInput(sValue, eValue) {
                                let output = true;
                            
                                // check numbers are integer
                                if (!Number.isInteger(sValue) || !Number.isInteger(eValue)) {
                                    alert("You must enter integers!")
                                    output = false;
                                }
                            
                                // check endValue is greater or equal to startValue
                                if (sValue > eValue) {
                                    alert("End Value must be greater or equal to Start Value!")
                                    output = false;
                                }
                            
                                if (eValue - sValue > 1000) {
                                    alert("The difference between values must be no greater than 1000!")
                                    output = false;
                                }
                            
                                return output;
                            }
                            
                            
                            // VIEW FUNCTION(S)
                            // Display the numbers and mark even numbers BOLD
                            function displayNumbers(numbers) {
                                let templateRows ="";
                            
                                for (let index = 0; index < numbers.length; index++) {
                                    let className = "even";
                                    let num = numbers[index];
                            
                                    // if / by 2 with no remainder, then num is even
                                    if (num % 2 == 0) {
                                        className = "even";
                                    }
                                    else {
                                        className = "odd";
                                    }
                                    // This does not display correctly in Prism, please view source code.
                                    templateRows += `${num}`;
                                }
                            
                                document.getElementById("results").innerHTML = templateRows;
                            }
                        
                    

The Code is structured in four functions.

getValues

getValues accepts(gets) the user input from the page. It utilises getElementById to pull values from the page, and then converts them to a 'Number' value. The input values are validated with the validateInput function. If valid, the values are passed to the generateNumbers function. The function generateNumbers returns an array of values and passes that array to the displayNumbers function.

generateNumbers

generateNumbers takes in two parameters: startValue and endValue. An array variable named 'numbers' is created. A for loop is used to generate all of the numbers between startValue and endValue.

validateInput

validateInput takes in two parameters: startValue and endValue, and returns a boolean value, dependent on three validation checks. The validations are undertaken using separate 'if' statements and check the following:

  • The input values are integers.
  • endValue is greater or equal to startValue.
  • The difference between the values is no greater than 1000.
If any inputs are not valid, then the function return a value of false, and a corresponding alert. If false, the 'if' statement in getValues, which evaluates the output of validateInput, will not run the generateNumbers and displayNumbers functions.

displayNumbers

displayNumbers takes in one parameter: numbers. The variable numbers is an array that holds values between startValue and endValue. We create a variable 'className' that holds the name of a CSS class that we use to bold the numbers. We create a variable templateRows that will hold the HTML we will write to the page.

A for loop is used to check all of the numbers to see if they are odd or even. The remainder operator (%) is used to see if the number is divisible by two. If it returns zero then the number is even, if not (else), the number is odd. The correct className is injected into the HTML row for display. Each iteration of the loop adds to the templateRows variable. At the end of the loop the resulting HTML rows are written to the page.