Spaces:
Sleeping
Sleeping
File size: 6,353 Bytes
225b521 bbc537c 225b521 bbc537c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
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()
|