From 97e0f8f0bdfcbd2e62f9ea3e2715b5da331cb156 Mon Sep 17 00:00:00 2001 From: Aditya Bhansali Date: Thu, 2 Oct 2025 19:12:08 +0530 Subject: [PATCH 1/4] Updated with October 2025 Menu --- menu.json | 162 +++++++++++++++++++++++++++--------------------------- 1 file changed, 82 insertions(+), 80 deletions(-) diff --git a/menu.json b/menu.json index a6f1c31..eaf614a 100644 --- a/menu.json +++ b/menu.json @@ -1,27 +1,27 @@ { - "start": "08/18/2025", - "end": "09/18/2025", + "start": "09/28/2025", + "end": "11/01/2025", "menu": { "rotation": { "D1": { - "B": ["Aloo Paratha", "Curd"], + "B": ["Idli", "Sambhar + Chutney"], "L": [ - "Aloo Gobhi Dry", - "Red Malai Kofta Gravy", - "Dal Tadka", + "Aloo Capsicum", + "Veg Kolhapuri", + "Dal Makhni", "Rasam", "Chapati", - "Plain Rice", - "Fryums", - "Red Salad", - "Buttermilk", - "Gulab Jamun" + "Jeera Rice", + "Fried Papad", + "Masala Chopped Salad", + "Punjabi Lassi", + "Fruit Custard" ], - "S": ["Spicy Bhelpuri"], + "S": ["Schezwan Roll"], "D": [ "Tawa Mix Veg Dry", - "Spicy Paneer Lababdar", - "Egg Curry", + "Palak Paneer", + "Egg Bhurji", "Dal Masala", "Jeera Rice", "Chapati", @@ -32,49 +32,50 @@ ] }, "D2": { - "B": ["Mutter Usal Kulcha", "Onion"], + "B": ["Onion Poha", "Lemon + Sev + Curd"], "L": [ - "Mix Veg Dry", - "Punjabi Rajma", - "Dal Kolhapuri", + "Cabbage Dry", + "Dum Aloo Gravy", + "Dal Lasooni", "Sambhar", "Chapati", - "Plain Rice", - "Roasted Papad", - "Chana Onion Tomato Salad", + "Mutter Rice", + "Fryums", + "Moong Onion Salad", "Plain Curd", - "Rasmalai" + "Shahi Tukda" ], - "S": ["Vada Pav"], + "S": ["Kachori"], "D": [ - "Aloo Matar Gravy", - "Masala Puri", - "Dal Chana", - "Plain Rice + Curd Rice", + "Soya Keema Masala", + "Chole Kulche", + "Dal Tadka", + "Plain Rice", "Chapati", "Rasam", - "Onion + Lemon" + "Onion + Lemon", + "Plain Curd" ] }, "D3": { - "B": ["Idli", "Sambhar + Chutney"], + "B": ["Aloo Paratha", "Curd"], "L": [ - "Soya Masala Dry", - "Veg Kolhapuri", - "Dal Makhni", + "Bhindi Masala Dry", + "Kadi Pakode", + "Dal Tadka", "Rasam", "Chapati", - "Jeera Rice", - "Fryums", - "Sprout Moong Salad", - "Punjabi Lassi", - "Fruit Custard" + "Plain Rice", + "Roasted Papad", + "Chana Onion Tomato Salad", + "Plain Curd", + "Cream Jamun" ], "S": ["Dabeli"], "D": [ + "Aloo Beans Dry", "Paneer Biriyani", - "Chicken Biriyani", - "Aloo Capsicum Dry", + "Chicken Biryani", "Dal Fry", "Curd Rice", "Chapati", @@ -85,49 +86,49 @@ ] }, "D4": { - "B": ["Onion Poha", "Lemon + Sev + Curd"], + "B": ["Moong Dal Chilla", "Chutney + Ketchup"], "L": [ - "Aloo Jeera", + "Aloo Methi Dry", "Chhole Amritsari", "Dal Arhar", "Sambhar", "Puri + Chapati", "Plain Rice", - "Fried Papad", + "Fryums", "Mix Salad", "Fresh Lime Water", - "Rice Kheer" + "Sevaiya Kheer" ], - "S": ["Aloo Onion Pakode"], + "S": ["Vada Pav"], "D": [ - "Veg Manchurian", + "Veg Jalfrezi", "Mushroom Masala", - "Dal Lahsuni", - "Veg Schezwan Fried Rice", + "Dal Fry", + "Plain Rice + Curd Rice", "Chapati", "Rasam", - "Toss Salad", - "Cucumber Raita" + "Green Salad", + "Plain Curd" ] }, "D5": { - "B": ["Masala Sandwich", "Ketchup"], + "B": ["Veg Sandwich", "Ketchup"], "L": [ - "Bhindi Fry", - "Sev Tamatar Sabji", + "Black Chana Dry", + "Palak Corn", "Dal Panchratna", "Rasam", "Chapati", "Plain Rice", - "Fryums", - "Dhokla", - "Plain Curd", - "Cream Jamun" + "Roasted Papad", + "Red Salad", + "Buttermilk", + "Moong Dal Halwa" ], - "S": ["Schezwan Roll"], + "S": ["Masala Maggi"], "D": [ - "Mix Veg Dry", - "Paneer Tikka Masala", + "Baigan Bharta", + "Paneer Butter Masala", "Chicken/Egg Curry", "Dal Tadka", "Jeera Rice", @@ -139,36 +140,37 @@ ] }, "D6": { - "B": ["Puri Bhaji", "Pickle"], + "B": ["Misal Pav", "Farsan + Onion"], "L": [ - "Black Chana Dry", - "Dum Aloo Gravy", - "Dal Lasooni", + "Dhudhi Chana Dry", + "Punjabi Rajma", + "Dal Kolhapuri", "Sambhar", "Chapati", - "Mutter Rice", - "Fried Papad", - "Masala Chopped Salad", - "Mint Lemonade", - "Shahi Tukda" + "Plain Rice", + "Fryums", + "Dhokla", + "Plain Curd", + "Gulab Jamun" ], - "S": ["French Fries"], + "S": ["Samosa"], "D": [ - "Moong Dry", - "Veg Kofta", - "Dal Panchratna", - "Soya Masala Biriyani", + "Onion & Tomato Uttapam", + "Methi Malai Mutter", + "Dal Lahsuni", + "Masala Khichdi", "Chapati", "Rasam", - "Veg Raita" + "Toss Salad", + "Cucumber Raita" ] } }, "sunday": { - "B": ["Podi Masala Dosa", "Sambhar + Chutney"], + "B": ["Masala Dosa", "Sambhar + Chutney"], "L": [ "Pyaaz Paratha", - "Tamatar Lasoon Chutney", + "Tamatar Lasoon Chutney + Thecha", "Dal Banjara", "Kokum Rasam", "Chapati", @@ -177,12 +179,12 @@ "Green Salad", "Dahi Vada" ], - "S": ["Sabudana Vada"], + "S": ["French Fries"], "D": [ - "Pindi Chole Masala", - "Bhature", + "Pav Bhaji", + "Veg Kofta", "Sev Dahi Puri", - "Masala Khichdi", + "Vegetable Masala Pulao", "Onion + Lemon", "Chapati", "Choco Bite" From 2b2d903473ed5b3b043d87d8f3a23aba5017ed9f Mon Sep 17 00:00:00 2001 From: Aditya Bhansali Date: Thu, 2 Oct 2025 20:35:29 +0530 Subject: [PATCH 2/4] Updated October 2025 Menu + Fixed Breakfast Header Overflow Issue + Fixed Content Overflow Issue --- main.css | 52 +++++++++++++++++++++++++--------- main.js | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+), 13 deletions(-) diff --git a/main.css b/main.css index bbc7cda..e99d66e 100644 --- a/main.css +++ b/main.css @@ -61,7 +61,7 @@ body { display: flex; align-items: center; justify-content: space-between; - padding: 0.5rem 1rem; + padding: 0.5rem 0.75rem; color: #e2e2e2; } @@ -139,8 +139,8 @@ body { /* Banners */ .banner { - margin-top: 1rem; - padding: 0.5rem 1rem; + margin-top: 0.75rem; + padding: 0.35rem 0.75rem; border-radius: 10px; color: hsl(223deg, 75%, 75%); } @@ -153,7 +153,7 @@ body { .banner__content { position: relative; - padding: 0.5rem; + padding: 0.35rem; text-align: center; } @@ -234,7 +234,7 @@ body { --scrollbar-thumb-color: #363636; width: 100%; flex-direction: row; - align-items: center; + align-items: flex-start; font-size: 1.25em; padding: 0; @@ -263,6 +263,12 @@ body { --accent-hue: var(--hue-lunch); --accent: var(--lunch-accent); } + + +#L .menu-category__header { + flex-shrink: 0; + min-height: 3rem; +} #S, #S + .share_toolbar { --accent-hue: var(--hue-snacks); --accent: var(--snacks-accent); @@ -276,7 +282,7 @@ body { font-size: 1.2em; color: var(--accent); background-color: inherit; - padding-top: 1em; + padding-top: 1em; } @media (min-width: 720px) { @@ -286,7 +292,8 @@ body { width: 50%; flex: 0 0 auto; - padding: 0.5em 0; + padding: 0.5em 0; + align-self: flex-start; } } @@ -301,16 +308,27 @@ body { background-color: inherit; border: 1px solid var(--accent); border-radius: 0.5em; - margin: 0 0.5rem; + margin: 0 0.5rem; } .menu-category-inner > * { - padding: 0.5rem; + padding: 0.35rem; +} + +.menu__items { + overflow-y: visible; } @media (min-width: 720px) { .menu-category-inner { height: 100%; + display: flex; + flex-direction: column; + } + + .menu__items { + flex: 1; + overflow-y: visible; } } @@ -318,17 +336,24 @@ body { text-transform: uppercase; color: var(--accent); - display: grid; - grid-auto-flow: row; - grid-template-rows: auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; text-align: center; border-bottom: 1px solid var(--accent); + padding: 0.5rem 0.25rem 0.35rem 0.25rem; + min-height: 3rem; + gap: 0.25rem; } .meal-name { font-weight: 700; - letter-spacing: 0.3em; + letter-spacing: 0.2em; + font-size: 0.9em; + word-break: break-word; + hyphens: auto; } .meal-timing { @@ -337,6 +362,7 @@ body { display: inline-block; font-weight: 300; font-size: 0.5em; + margin-bottom: 0.15rem; } .menu__item { diff --git a/main.js b/main.js index 41bc949..2dd5eb5 100644 --- a/main.js +++ b/main.js @@ -136,6 +136,15 @@ async function loadMenu() { const hiddenInput = document.querySelector("#input--date"); hiddenInput.showPicker(); }; + + // Add window resize listener for desktop height adjustments + window.addEventListener('resize', () => { + // Debounce resize events + clearTimeout(window.resizeTimeout); + window.resizeTimeout = setTimeout(() => { + adjustMealHeightsForDesktop(); + }, 100); + }); })(); /** @@ -161,6 +170,9 @@ function initializeMenuUI(date) { ...everydayItems.map(everydayItemHTML), ].join(""); } + + // Adjust meal heights for desktop screens + adjustMealHeightsForDesktop(); } function variableItemHTML(item_name) { @@ -272,3 +284,76 @@ function addDays(date, numDays) { const oneDayMs = 1000 * 60 * 60 * 24; return new Date(date.getTime() + oneDayMs * numDays); } + +/** + * Adjust meal heights for desktop screens to ensure all items fit within meal outlines. + * Only applies to screens 720px and wider. + */ +function adjustMealHeightsForDesktop() { + // Only apply on desktop screens (720px and wider) + if (window.innerWidth < 720) { + return; + } + + const mealCategories = ['B', 'L', 'S', 'D']; + const menuContainer = document.querySelector('#actual-menu'); + const dayPicker = document.querySelector('.day-picker'); + + // Calculate available height (total viewport height minus day picker) + const availableHeight = window.innerHeight - dayPicker.offsetHeight; + + // Reset heights to auto to measure natural content height + mealCategories.forEach(mealId => { + const mealElement = document.getElementById(mealId); + const mealInner = mealElement.querySelector('.menu-category-inner'); + mealElement.style.height = 'auto'; + mealInner.style.height = 'auto'; + }); + + // Find the maximum content height needed + let maxContentHeight = 0; + mealCategories.forEach(mealId => { + const mealElement = document.getElementById(mealId); + const contentHeight = mealElement.scrollHeight; + maxContentHeight = Math.max(maxContentHeight, contentHeight); + }); + + // Add a small tolerance buffer to account for padding/margins/spacing + const toleranceBuffer = 20; // 20px tolerance for minor spacing differences + const adjustedAvailableHeight = availableHeight + toleranceBuffer; + + // If content exceeds available height, adjust all meals equally + if (maxContentHeight > adjustedAvailableHeight) { + // Add bottom spacing buffer only when we need to extend meal boxes + const bottomSpacingBuffer = 2; // 2rem buffer for bottom spacing + maxContentHeight += bottomSpacingBuffer; + const adjustedHeight = Math.max(availableHeight, maxContentHeight); + + mealCategories.forEach(mealId => { + const mealElement = document.getElementById(mealId); + const mealInner = mealElement.querySelector('.menu-category-inner'); + + mealElement.style.height = adjustedHeight + 'px'; + mealElement.style.alignSelf = 'flex-start'; // Ensure top alignment + mealInner.style.height = '100%'; + }); + + // Enable main scrollbar when content overflows + document.querySelector('#page').style.overflow = 'auto'; + document.querySelector('#actual-menu').style.overflow = 'auto'; + } else { + // Reset to default behavior if no adjustment needed + mealCategories.forEach(mealId => { + const mealElement = document.getElementById(mealId); + const mealInner = mealElement.querySelector('.menu-category-inner'); + + mealElement.style.height = ''; + mealElement.style.alignSelf = ''; + mealInner.style.height = ''; + }); + + // Disable main scrollbar when content fits + document.querySelector('#page').style.overflow = 'hidden'; + document.querySelector('#actual-menu').style.overflow = 'hidden'; + } +} From b851a72dfe93433dd1d866b4876ec092cbc372cf Mon Sep 17 00:00:00 2001 From: Aditya Bhansali Date: Thu, 2 Oct 2025 22:04:38 +0530 Subject: [PATCH 3/4] Fixed Scrolling on Mobile Devices --- main.js | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/main.js b/main.js index 41bc949..c217b67 100644 --- a/main.js +++ b/main.js @@ -136,6 +136,15 @@ async function loadMenu() { const hiddenInput = document.querySelector("#input--date"); hiddenInput.showPicker(); }; + + // Add window resize listener for desktop height adjustments + window.addEventListener('resize', () => { + // Debounce resize events + clearTimeout(window.resizeTimeout); + window.resizeTimeout = setTimeout(() => { + adjustMealHeightsForDesktop(); + }, 100); + }); })(); /** @@ -161,6 +170,9 @@ function initializeMenuUI(date) { ...everydayItems.map(everydayItemHTML), ].join(""); } + + // Adjust meal heights for desktop screens + adjustMealHeightsForDesktop(); } function variableItemHTML(item_name) { @@ -272,3 +284,79 @@ function addDays(date, numDays) { const oneDayMs = 1000 * 60 * 60 * 24; return new Date(date.getTime() + oneDayMs * numDays); } + +/** + * Adjust meal heights for desktop screens to ensure all items fit within meal outlines. + * Only applies to screens 720px and wider. + */ +function adjustMealHeightsForDesktop() { + // Only apply on desktop screens (720px and wider) + if (window.innerWidth < 720) { + // On mobile screens, ensure scrolling is always enabled + document.querySelector('#page').style.overflow = 'auto'; + document.querySelector('#actual-menu').style.overflow = 'auto'; + return; + } + + const mealCategories = ['B', 'L', 'S', 'D']; + const menuContainer = document.querySelector('#actual-menu'); + const dayPicker = document.querySelector('.day-picker'); + + // Calculate available height (total viewport height minus day picker) + const availableHeight = window.innerHeight - dayPicker.offsetHeight; + + // Reset heights to auto to measure natural content height + mealCategories.forEach(mealId => { + const mealElement = document.getElementById(mealId); + const mealInner = mealElement.querySelector('.menu-category-inner'); + mealElement.style.height = 'auto'; + mealInner.style.height = 'auto'; + }); + + // Find the maximum content height needed + let maxContentHeight = 0; + mealCategories.forEach(mealId => { + const mealElement = document.getElementById(mealId); + const contentHeight = mealElement.scrollHeight; + maxContentHeight = Math.max(maxContentHeight, contentHeight); + }); + + // Add a small tolerance buffer to account for padding/margins/spacing + const toleranceBuffer = 20; // 20px tolerance for minor spacing differences + const adjustedAvailableHeight = availableHeight + toleranceBuffer; + + // If content exceeds available height, adjust all meals equally + if (maxContentHeight > adjustedAvailableHeight) { + // Add bottom spacing buffer only when we need to extend meal boxes + const bottomSpacingBuffer = 2; // 2rem buffer for bottom spacing + maxContentHeight += bottomSpacingBuffer; + const adjustedHeight = Math.max(availableHeight, maxContentHeight); + + mealCategories.forEach(mealId => { + const mealElement = document.getElementById(mealId); + const mealInner = mealElement.querySelector('.menu-category-inner'); + + mealElement.style.height = adjustedHeight + 'px'; + mealElement.style.alignSelf = 'flex-start'; // Ensure top alignment + mealInner.style.height = '100%'; + }); + + // Enable main scrollbar when content overflows + document.querySelector('#page').style.overflow = 'auto'; + document.querySelector('#actual-menu').style.overflow = 'auto'; + } else { + // Reset to default behavior if no adjustment needed + mealCategories.forEach(mealId => { + const mealElement = document.getElementById(mealId); + const mealInner = mealElement.querySelector('.menu-category-inner'); + + mealElement.style.height = ''; + mealElement.style.alignSelf = ''; + mealInner.style.height = ''; + }); + + // On desktop, disable main scrollbar when content fits + document.querySelector('#page').style.overflow = 'hidden'; + document.querySelector('#actual-menu').style.overflow = 'hidden'; + } +} \ No newline at end of file From 2d383bfa3d4bcd77f480d10c239c64c9e3e32f07 Mon Sep 17 00:00:00 2001 From: Aditya Bhansali Date: Thu, 2 Oct 2025 22:09:45 +0530 Subject: [PATCH 4/4] Fixed Scrolling on Mobile Devices --- main.css | 52 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/main.css b/main.css index bbc7cda..e99d66e 100644 --- a/main.css +++ b/main.css @@ -61,7 +61,7 @@ body { display: flex; align-items: center; justify-content: space-between; - padding: 0.5rem 1rem; + padding: 0.5rem 0.75rem; color: #e2e2e2; } @@ -139,8 +139,8 @@ body { /* Banners */ .banner { - margin-top: 1rem; - padding: 0.5rem 1rem; + margin-top: 0.75rem; + padding: 0.35rem 0.75rem; border-radius: 10px; color: hsl(223deg, 75%, 75%); } @@ -153,7 +153,7 @@ body { .banner__content { position: relative; - padding: 0.5rem; + padding: 0.35rem; text-align: center; } @@ -234,7 +234,7 @@ body { --scrollbar-thumb-color: #363636; width: 100%; flex-direction: row; - align-items: center; + align-items: flex-start; font-size: 1.25em; padding: 0; @@ -263,6 +263,12 @@ body { --accent-hue: var(--hue-lunch); --accent: var(--lunch-accent); } + + +#L .menu-category__header { + flex-shrink: 0; + min-height: 3rem; +} #S, #S + .share_toolbar { --accent-hue: var(--hue-snacks); --accent: var(--snacks-accent); @@ -276,7 +282,7 @@ body { font-size: 1.2em; color: var(--accent); background-color: inherit; - padding-top: 1em; + padding-top: 1em; } @media (min-width: 720px) { @@ -286,7 +292,8 @@ body { width: 50%; flex: 0 0 auto; - padding: 0.5em 0; + padding: 0.5em 0; + align-self: flex-start; } } @@ -301,16 +308,27 @@ body { background-color: inherit; border: 1px solid var(--accent); border-radius: 0.5em; - margin: 0 0.5rem; + margin: 0 0.5rem; } .menu-category-inner > * { - padding: 0.5rem; + padding: 0.35rem; +} + +.menu__items { + overflow-y: visible; } @media (min-width: 720px) { .menu-category-inner { height: 100%; + display: flex; + flex-direction: column; + } + + .menu__items { + flex: 1; + overflow-y: visible; } } @@ -318,17 +336,24 @@ body { text-transform: uppercase; color: var(--accent); - display: grid; - grid-auto-flow: row; - grid-template-rows: auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; text-align: center; border-bottom: 1px solid var(--accent); + padding: 0.5rem 0.25rem 0.35rem 0.25rem; + min-height: 3rem; + gap: 0.25rem; } .meal-name { font-weight: 700; - letter-spacing: 0.3em; + letter-spacing: 0.2em; + font-size: 0.9em; + word-break: break-word; + hyphens: auto; } .meal-timing { @@ -337,6 +362,7 @@ body { display: inline-block; font-weight: 300; font-size: 0.5em; + margin-bottom: 0.15rem; } .menu__item {