The Code for Super Dog

                        
                            // Global variable
                            const events = [{
                                    event: "ComicCon",
                                    city: "New York",
                                    state: "New York",
                                    attendance: 240000,
                                    date: "06/01/2017",
                                },
                                {
                                    event: "ComicCon",
                                    city: "New York",
                                    state: "New York",
                                    attendance: 250000,
                                    date: "06/01/2018",
                                },
                                {
                                    event: "ComicCon",
                                    city: "New York",
                                    state: "New York",
                                    attendance: 257000,
                                    date: "06/01/2019",
                                },
                                {
                                    event: "ComicCon",
                                    city: "San Diego",
                                    state: "California",
                                    attendance: 130000,
                                    date: "06/01/2017",
                                },
                                {
                                    event: "ComicCon",
                                    city: "San Diego",
                                    state: "California",
                                    attendance: 140000,
                                    date: "06/01/2018",
                                },
                                {
                                    event: "ComicCon",
                                    city: "San Diego",
                                    state: "California",
                                    attendance: 150000,
                                    date: "06/01/2019",
                                },
                                {
                                    event: "HeroesCon",
                                    city: "Charlotte",
                                    state: "North Carolina",
                                    attendance: 40000,
                                    date: "06/01/2017",
                                },
                                {
                                    event: "HeroesCon",
                                    city: "Charlotte",
                                    state: "North Carolina",
                                    attendance: 45000,
                                    date: "06/01/2018",
                                },
                                {
                                    event: "HeroesCon",
                                    city: "Charlotte",
                                    state: "North Carolina",
                                    attendance: 50000,
                                    date: "06/01/2019",
                                },
                            ];
                            // Builds the dropdown with a list of unique cities - Fires on load
                            function buildDropDown() {
                            
                                // First step is to get a handle on the dropdown
                                let eventDD = document.getElementById("eventDropDownList");
                                // Reset the list
                                eventDD.innerHTML = "";
                            
                                //
  • // Get the template let ddTemplate = document.getElementById("dropDown-template"); // Grab the template node let ddItem = document.importNode(ddTemplate.content, true); // Add the all item to the dropdown let ddLink = ddItem.querySelector("a"); ddLink.setAttribute("data-city", "All"); ddLink.textContent = "All"; eventDD.appendChild(ddItem); // Add links for the unique cities let curEvents = getEvents(); // Get the data // Get unique array of city names let distinctCities = [...new Set(curEvents.map((event) => event.city))]; // Filter that data to unique set of cities for (let index = 0; index < distinctCities.length; index++) { let ddItem = document.importNode(ddTemplate.content, true); // Add each city to the dropdown let ddLink = ddItem.querySelector("a"); ddLink.setAttribute("data-city", distinctCities[index]); ddLink.textContent = distinctCities[index]; eventDD.appendChild(ddItem); } let statsHeader = document.getElementById("statsHeader") statsHeader.innerHTML = `Stats for All events`; displayStats(curEvents); // Show data for all events displayEventData(curEvents); } // Called everytime a city is clicked in the dropdown function getEventData(element) { let city = element.getAttribute("data-city"); // Create the stats for the clicked city let curEvents = getEvents(); let filteredEvents = curEvents; if (city != 'All') { filteredEvents = curEvents.filter(function (event) { if (event.city == city) { return event; } }); } // Set the header let statsHeader = document.getElementById("statsHeader") statsHeader.innerHTML = `Stats for ${city} events`; // Call function ti display the stats displayStats(filteredEvents); } // Pulling the events from local storage or default array events function getEvents() { let curEvents = JSON.parse(localStorage.getItem("eventData")); if (curEvents === null) { curEvents = events; localStorage.setItem("eventData", JSON.stringify(curEvents)); } return curEvents; } // This function displays stats for the selected city function displayStats(filteredEvents) { let total = 0; let average = 0; let most = 0; let least = -1; let currentAttendance = 0; for (let index = 0; index < filteredEvents.length; index++) { currentAttendance = filteredEvents[index].attendance; total += currentAttendance; if (most < currentAttendance) { most = currentAttendance; } if (least > currentAttendance || least < 0) { least = currentAttendance; } } average = total / filteredEvents.length; // Write my values to the page document.getElementById("total").innerHTML = total.toLocaleString(); document.getElementById("most").innerHTML = most.toLocaleString(); document.getElementById("least").innerHTML = least.toLocaleString(); document.getElementById("average").innerHTML = average.toLocaleString( undefined, { minimumFractionDigits: 0, maximumFractionDigits: 0 } ); } // This function displays all event data in a grid on bottom of page function displayEventData(curEvents) { let template = document.getElementById("eventData-template"); let eventBody = document.getElementById("eventBody"); // Clear the table of any prior data eventBody.innerHTML = ""; // Loop over eventdata and write a row for each event - to the eventBody for (let index = 0; index < curEvents.length; index++) { let eventRow = document.importNode(template.content, true); // Grab only the columns from the template - creates an array of columns in template let eventCols = eventRow.querySelectorAll("td"); eventCols[0].textContent = curEvents[index].event; eventCols[1].textContent = curEvents[index].city; eventCols[2].textContent = curEvents[index].state; eventCols[3].textContent = curEvents[index].attendance; eventCols[4].textContent = new Date(curEvents[index].date).toLocaleDateString(); eventBody.appendChild(eventRow); } } // This function adds/saves new events and adds them to the dropdown function saveEventData() { // Get all of the course data from local storage let curEvents = getEvents(); let eventObj = { event: "name", city: "city", state: "state", attendance: 0, date: "01/01/2000" } // Get the values from the form eventObj.event = document.getElementById("newEventName").value; eventObj.city = document.getElementById("newEventCity").value; // Get values from the dropdown let stateSel = document.getElementById("newEventState"); eventObj.state = stateSel.options[stateSel.selectedIndex].text; // Turn the input into a number let attendanceNbr = parseInt(document.getElementById("newEventAttendance").value,10); eventObj.attendance = attendanceNbr; // Format the date let eventDate = document.getElementById("newEventDate").value; let eventDateFormatted = `${eventDate} 00:00`; eventObj.date = new Date(eventDateFormatted).toLocaleDateString(); // Save curEvents.push(eventObj); localStorage.setItem("eventData", JSON.stringify(curEvents)); buildDropDown(); }

    The code structure:

    buildDropDown

    Builds the dropdown list.

    getEventData

    Gets data for each event.

    displayStats

    Displays stats for the selected city.