MagicMirror² v2.7.0 is available! For more information about this release, check out this topic.

MMM-MealViewer


  • Project Sponsor Module Developer

    @kazanjig said in MMM-MealViewer:

    cafeteriaLineList

    Probably not stripped out just buried like many of the other things were LOL If you don’t get it we can look at it later if you want.



  • @cowboysdude you did convert the XML to json, right?


  • Project Sponsor Module Developer

    @sdetweil Yes I did … it’s all coming back as json but it has a TON of data…



  • MAJOR EDIT, MAJOR DUMMIE: helps if you append the rows to the table… Success! Now for some CSS.

    @cowboysdude I edited my earlier post… minor detail about it being the weekend and not being able to pull lunch data for a day with no school. Now just having getting the data to show up in the table…

    It will display the “loading” message, but then it’s blank when this.loaded = true. I outputted the innerHTML values to console and they’re all there. Not sure why they won’t show up in the DOM.

      getDom: function() {
        // Set up the local wrapper
        var wrapper = null;
    
        // If we have some data to display then build the results table
        if (this.loaded) {
          wrapper = document.createElement("table");
    
          // Iterate through the schools
          for (var i = 0; i < this.results.length; i++) {
    
            // Set up header row with the school name
            schoolRow = document.createElement("tr");
    
            schoolName = document.createElement("td");
            schoolName.innerHTML = this.results[i].physicalLocation.name;
    
            schoolRow.appendChild(schoolName);
    
            // Iterate through the cafeteria lines for the school
            for (var j = 0; j < this.results[i].menuSchedules[0].menuBlocks[0].cafeteriaLineList.data.length; j++) {
    
              // Set up header row with the cafeteria line name
              cafeteriaLineRow = document.createElement("tr");
    
              cafeteriaLineName = document.createElement("td");
              cafeteriaLineName.innerHTML = this.results[i].menuSchedules[0].menuBlocks[0].cafeteriaLineList.data[j].name;
    
              cafeteriaLineRow.appendChild(cafeteriaLineName);
    
              // Iterate through the menu items for the cafeteria line
              for (var k = 0; k < this.results[i].menuSchedules[0].menuBlocks[0].cafeteriaLineList.data[j].foodItemList.data.length; k++) {
    
                foodItemRow = document.createElement("tr");
    
                foodItemType = document.createElement("td");
                foodItemType.innerHTML = this.results[i].menuSchedules[0].menuBlocks[0].cafeteriaLineList.data[j].foodItemList.data[k].item_Type;
    
                foodItemName = document.createElement("td");
                foodItemName.innerHTML = this.results[i].menuSchedules[0].menuBlocks[0].cafeteriaLineList.data[j].foodItemList.data[k].item_Name;
    
                foodItemRow.appendChild(foodItemType);
                foodItemRow.appendChild(foodItemName);
              }
            }
          }
        }
    
        else {
          // Otherwise lets just use a simple div
          wrapper = document.createElement('div');
          wrapper.innerHTML = 'Loading menu data...';
        }
    
        return wrapper;
      },
    


  • So I now get the following table:

    Elementary Lunch
    Entree “Bold” Cheese Pizza
    Entree “Bold” Pepperoni Pizza
    Vegetable Parmesan Butternut Gratin
    Vegetable Seasoned Green Beans
    Elementary Alternative
    Entree Chef Salad
    Entree Bologna & Cheese Sandwich

    The foodItemType in the first column and the foodItemName in the second column are siblings in the data array.

    I’d like turn the first occurrence of foodItemType into a category so the table looks like this (ignore the spacing hyphens):

    Elementary Lunch
    Entree “Bold” Cheese Pizza
    --------------“Bold” Pepperoni Pizza
    Vegetable Parmesan Butternut Gratin
    -------------------Seasoned Green Beans
    Elementary Alternative
    Entree Chef Salad
    -------------Bologna & Cheese Sandwich

    Here’s the current loop that creates the table. Any help would be appreciated.

            // Iterate through the cafeteria lines for the school
            for (var j = 0; j < this.results[i].menuSchedules[0].menuBlocks[0].cafeteriaLineList.data.length; j++) {
    
              if (this.results[i].menuSchedules[0].menuBlocks[0].cafeteriaLineList.data[j].name !== 'Elmwood Vegetarian Hot Entree') {
    
                // Set up header row with the cafeteria line name
                cafeteriaLineRow = document.createElement("tr");
    
                cafeteriaLineName = document.createElement("td");
                cafeteriaLineName.innerHTML = this.results[i].menuSchedules[0].menuBlocks[0].cafeteriaLineList.data[j].name.replace("Elmwood Elementary", "Elementary Lunch").replace("Elmwood Alternative", "Elementary Alternative");
                cafeteriaLineRow.appendChild(cafeteriaLineName);
                wrapper.appendChild(cafeteriaLineRow);
    
                // Iterate through the menu items for the cafeteria line
                for (var k = 0; k < this.results[i].menuSchedules[0].menuBlocks[0].cafeteriaLineList.data[j].foodItemList.data.length; k++) {
    
                  if (this.results[i].menuSchedules[0].menuBlocks[0].cafeteriaLineList.data[j].foodItemList.data[k].item_Name !== 'Choice Of:') {
    
                    foodItemTypeRow = documen t.createElement("tr");
    
                    foodItemType = document.createElement("td");
                    foodItemType.innerHTML = this.results[i].menuSchedules[0].menuBlocks[0].cafeteriaLineList.data[j].foodItemList.data[k].item_Type;
    
                    foodItemName = document.createElement("td");
                    foodItemName.innerHTML = this.results[i].menuSchedules[0].menuBlocks[0].cafeteriaLineList.data[j].foodItemList.data[k].item_Name;
    
                    foodItemTypeRow.appendChild(foodItemType);
                    wrapper.appendChild(foodItemTypeRow);
                    foodItemTypeRow.appendChild(foodItemName);
                    wrapper.appendChild(foodItemTypeRow);
                  }
                }
              }
            }