Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| # Global variables for cart and menu data | |
| cart = [] | |
| menu_data = [ | |
| {"name": "Veg Burger", "category": "VEGAN", | |
| "image": "https://huggingface.co/spaces/Rammohan0504/dynamic_menu/resolve/main/images/veg_burger.jpg", | |
| "description": "A delicious vegan burger with plant-based patty, lettuce, and tomato.", | |
| "price": "$8.99"}, | |
| {"name": "Chicken Biryani", "category": "HALAL", | |
| "image": "https://huggingface.co/spaces/Rammohan0504/dynamic_menu/resolve/main/images/chicken_biryani.jpg", | |
| "description": "Spicy chicken biryani with aromatic basmati rice and tender chicken pieces.", | |
| "price": "$12.99"}, | |
| {"name": "Paneer Butter Masala", "category": "VEGAN", | |
| "image": "https://huggingface.co/spaces/Rammohan0504/dynamic_menu/resolve/main/images/paneer_butter_masala.jpg", | |
| "description": "Paneer cooked in a rich and creamy tomato-based gravy.", | |
| "price": "$10.99"} | |
| ] | |
| # Function to add an item to the cart | |
| def add_to_cart(item_name): | |
| cart.append({"item_name": item_name}) | |
| return {"data": f"{item_name} added to cart!"} | |
| # Function to display the current cart | |
| def display_cart(): | |
| if not cart: | |
| return "Your cart is empty." | |
| cart_content = "<h3>Your Cart:</h3><ul>" | |
| for item in cart: | |
| cart_content += f"<li>{item['item_name']}</li>" | |
| cart_content += "</ul>" | |
| return cart_content | |
| # Function to generate dish cards | |
| def display_dishes(category): | |
| html_content = "<div style='display: flex; flex-wrap: wrap; gap: 20px; justify-content: center;'>" | |
| for dish in menu_data: | |
| if category == "ALL" or dish["category"] == category: | |
| html_content += f""" | |
| <div style='flex: 1 1 calc(30% - 20px); display: flex; flex-direction: column; align-items: center; | |
| justify-content: space-between; padding: 20px; border: 1px solid #ddd; border-radius: 10px; | |
| background-color: #f9f9f9; box-shadow: 0 4px 8px rgba(0,0,0,0.1);'> | |
| <img src='{dish['image']}' alt='{dish['name']}' style='width: 100%; height: 150px; object-fit: cover; border-radius: 10px;'> | |
| <h3 style='margin: 10px 0; font-size: 18px;'>{dish['name']}</h3> | |
| <p style='margin: 5px 0; font-size: 14px; color: #555;'>{dish['description']}</p> | |
| <p style='margin: 10px 0; font-size: 16px; font-weight: bold;'>Price: {dish['price']}</p> | |
| <button style='padding: 10px 20px; background-color: #28a745; color: white; border: none; | |
| border-radius: 5px; cursor: pointer;' | |
| onclick="showPopup('{dish['name']}', '{dish['description']}', '{dish['price']}', '{dish['image']}')"> | |
| Add to Cart | |
| </button> | |
| </div> | |
| """ | |
| html_content += "</div>" | |
| return html_content | |
| # Popup JavaScript for handling the modal | |
| popup_js = """ | |
| <script> | |
| function showPopup(name, description, price, image) { | |
| const popup = document.getElementById("custom-popup"); | |
| const overlay = document.getElementById("overlay"); | |
| popup.innerHTML = ` | |
| <button onclick="closePopup()" style="position: absolute; top: 10px; right: 10px; background: none; border: none; font-size: 20px; cursor: pointer;">×</button> | |
| <img src="${image}" alt="${name}" style="width: 100%; height: 200px; object-fit: cover; border-radius: 10px; margin-bottom: 10px;"> | |
| <h3>${name}</h3> | |
| <p>${description}</p> | |
| <p style="font-weight: bold;">Price: ${price}</p> | |
| <button id="add-to-cart-button" style="padding: 10px 20px; background-color: #28a745; color: white; border: none; border-radius: 5px; cursor: pointer;"> | |
| Add to Cart | |
| </button> | |
| `; | |
| popup.style.display = "block"; | |
| overlay.style.display = "block"; | |
| document.getElementById("add-to-cart-button").onclick = async function() { | |
| const response = await fetch("/run/add_to_cart", { | |
| method: "POST", | |
| body: JSON.stringify({ name }), | |
| headers: { "Content-Type": "application/json" } | |
| }); | |
| const result = await response.json(); | |
| alert(result.data); // Show success message | |
| closePopup(); // Automatically close popup | |
| }; | |
| } | |
| function closePopup() { | |
| document.getElementById("custom-popup").style.display = "none"; | |
| document.getElementById("overlay").style.display = "none"; | |
| } | |
| </script> | |
| """ | |
| # Popup HTML structure | |
| popup_html = """ | |
| <div id="overlay" style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); display: none; z-index: 999;"></div> | |
| <div id="custom-popup" | |
| style="position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 400px; max-width: 90%; background: white; padding: 20px; border-radius: 10px; box-shadow: 0px 4px 6px rgba(0,0,0,0.1); display: none; z-index: 1000; position: relative;"> | |
| </div> | |
| """ | |
| # Main Gradio App | |
| with gr.Blocks() as demo: | |
| gr.HTML(popup_html) # Add popup container | |
| gr.HTML(popup_js) # Add popup JavaScript | |
| gr.HTML("<h1 style='text-align: center;'>π Welcome to the Biryani Hub π</h1>") | |
| with gr.Tabs(): | |
| # Menu Tab | |
| with gr.Tab("Menu"): | |
| with gr.Row(): | |
| btn_all = gr.Button("ALL") | |
| btn_vegan = gr.Button("VEGAN") | |
| btn_halal = gr.Button("HALAL") | |
| dish_display = gr.HTML(value=display_dishes("ALL")) | |
| btn_all.click( | |
| lambda: display_dishes("ALL"), | |
| outputs=dish_display | |
| ) | |
| btn_vegan.click( | |
| lambda: display_dishes("VEGAN"), | |
| outputs=dish_display | |
| ) | |
| btn_halal.click( | |
| lambda: display_dishes("HALAL"), | |
| outputs=dish_display | |
| ) | |
| # Cart Tab | |
| with gr.Tab("Cart"): | |
| cart_display = gr.HTML(value=display_cart()) | |
| refresh_cart_btn = gr.Button("Refresh Cart") | |
| refresh_cart_btn.click( | |
| lambda: display_cart(), | |
| outputs=cart_display | |
| ) | |
| # Register the add_to_cart function | |
| demo.add_to_cart = add_to_cart | |
| demo.launch() | |