Update templates/menu.html
Browse files- templates/menu.html +243 -197
templates/menu.html
CHANGED
|
@@ -149,58 +149,67 @@
|
|
| 149 |
right: 10px;
|
| 150 |
top: 50%;
|
| 151 |
transform: translateY(-50%);
|
|
|
|
|
|
|
|
|
|
| 152 |
}
|
| 153 |
.avatar-icon {
|
| 154 |
-
width:
|
| 155 |
-
height:
|
| 156 |
border-radius: 50%;
|
| 157 |
-
background: linear-gradient(
|
|
|
|
| 158 |
display: flex;
|
| 159 |
align-items: center;
|
| 160 |
justify-content: center;
|
| 161 |
color: white;
|
| 162 |
-
font-size:
|
| 163 |
-
font-weight:
|
| 164 |
-
cursor: pointer;
|
| 165 |
-
transition: transform 0.2s ease;
|
| 166 |
-
}
|
| 167 |
-
.avatar-icon:hover {
|
| 168 |
-
transform: scale(1.1);
|
| 169 |
}
|
| 170 |
.dropdown-menu {
|
| 171 |
position: absolute;
|
| 172 |
right: 0;
|
| 173 |
top: 100%;
|
| 174 |
-
background
|
|
|
|
| 175 |
border-radius: 8px;
|
| 176 |
-
|
| 177 |
-
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.15);
|
| 178 |
display: none;
|
| 179 |
-
opacity: 0;
|
| 180 |
-
transform: translateY(-10px);
|
| 181 |
-
transition: opacity 0.3s ease, transform 0.3s ease;
|
| 182 |
-
z-index: 1000;
|
| 183 |
-
}
|
| 184 |
-
.dropdown-menu.show {
|
| 185 |
-
display: block;
|
| 186 |
-
opacity: 1;
|
| 187 |
-
transform: translateY(0);
|
| 188 |
}
|
| 189 |
-
.dropdown-item {
|
| 190 |
-
padding:
|
| 191 |
-
color: #333;
|
| 192 |
text-decoration: none;
|
|
|
|
|
|
|
| 193 |
display: flex;
|
| 194 |
align-items: center;
|
| 195 |
-
font-size:
|
| 196 |
transition: background-color 0.2s ease;
|
| 197 |
}
|
| 198 |
-
.dropdown-item
|
| 199 |
-
|
| 200 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 201 |
}
|
| 202 |
-
.dropdown-item:
|
| 203 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 204 |
}
|
| 205 |
.fixed-top-bar {
|
| 206 |
position: relative;
|
|
@@ -241,7 +250,7 @@
|
|
| 241 |
color: #888;
|
| 242 |
}
|
| 243 |
.search-bar-container input:focus {
|
| 244 |
-
border-bottom: 2px solid #
|
| 245 |
}
|
| 246 |
.search-icon {
|
| 247 |
position: absolute;
|
|
@@ -604,7 +613,7 @@
|
|
| 604 |
gap: 15px;
|
| 605 |
min-height: 200px;
|
| 606 |
}
|
| 607 |
-
#micModal .modal-body i#
|
| 608 |
font-size: 2.5rem;
|
| 609 |
color: #007bff;
|
| 610 |
animation: pulse 2s infinite;
|
|
@@ -940,12 +949,12 @@
|
|
| 940 |
right: 10px;
|
| 941 |
}
|
| 942 |
.avatar-icon {
|
| 943 |
-
width:
|
| 944 |
-
height:
|
| 945 |
-
font-size:
|
| 946 |
}
|
| 947 |
.dropdown-menu {
|
| 948 |
-
width:
|
| 949 |
}
|
| 950 |
.dropdown-menu .dropdown-item {
|
| 951 |
padding: 12px 16px;
|
|
@@ -1209,14 +1218,14 @@
|
|
| 1209 |
<body>
|
| 1210 |
<div class="fixed-top-bar">
|
| 1211 |
<div class="avatar-dropdown-container">
|
| 1212 |
-
<div class="avatar-icon"
|
| 1213 |
<span>{{ first_letter }}</span>
|
| 1214 |
</div>
|
| 1215 |
-
<div class="dropdown-menu"
|
| 1216 |
-
<a href="{{ url_for('user_details.customer_details') }}" class="dropdown-item">
|
| 1217 |
-
<a href="{{ url_for('orderhistory.order_history') }}" class="dropdown-item">
|
| 1218 |
-
<a href="{{ url_for('combined_summary.combined_summary') }}" class="dropdown-item">
|
| 1219 |
-
<a href="{{ url_for('logout') }}" class="dropdown-item">
|
| 1220 |
</div>
|
| 1221 |
</div>
|
| 1222 |
<div class="search-bar-container">
|
|
@@ -1831,24 +1840,23 @@
|
|
| 1831 |
document.getElementById('mic-item-name').textContent = '';
|
| 1832 |
}
|
| 1833 |
document.addEventListener('DOMContentLoaded', function () {
|
| 1834 |
-
|
| 1835 |
-
const
|
| 1836 |
-
|
| 1837 |
-
avatarIcon.addEventListener('click', function (event) {
|
| 1838 |
event.stopPropagation();
|
| 1839 |
-
dropdownMenu.
|
| 1840 |
});
|
| 1841 |
document.addEventListener('click', function (event) {
|
| 1842 |
-
if (!
|
| 1843 |
-
dropdownMenu.
|
| 1844 |
}
|
| 1845 |
});
|
| 1846 |
-
document.querySelectorAll('.dropdown-item')
|
|
|
|
| 1847 |
item.addEventListener('click', function () {
|
| 1848 |
-
dropdownMenu.
|
| 1849 |
});
|
| 1850 |
});
|
| 1851 |
-
|
| 1852 |
const searchBar = document.getElementById('searchBar');
|
| 1853 |
searchBar.addEventListener('click', function () {
|
| 1854 |
window.location.href = '/search';
|
|
@@ -1914,7 +1922,7 @@
|
|
| 1914 |
}
|
| 1915 |
});
|
| 1916 |
card.addEventListener('touchstart', () => {
|
| 1917 |
-
|
| 1918 |
video.classList.add('active');
|
| 1919 |
image.classList.add('hidden');
|
| 1920 |
video.play().catch(err => {
|
|
@@ -1939,155 +1947,193 @@
|
|
| 1939 |
const itemDetails = card.querySelector('.item-details');
|
| 1940 |
if (toggleDetails && itemDetails) {
|
| 1941 |
toggleDetails.addEventListener('click', () => {
|
| 1942 |
-
const
|
| 1943 |
itemDetails.classList.toggle('show');
|
| 1944 |
-
toggleDetails.textContent =
|
| 1945 |
});
|
| 1946 |
}
|
| 1947 |
});
|
| 1948 |
const quantityInput = document.getElementById('quantityInput');
|
| 1949 |
-
const
|
| 1950 |
-
const
|
| 1951 |
-
|
| 1952 |
-
|
| 1953 |
-
|
| 1954 |
-
|
| 1955 |
-
|
| 1956 |
-
|
| 1957 |
-
|
| 1958 |
-
|
| 1959 |
-
|
| 1960 |
-
|
| 1961 |
-
|
| 1962 |
-
|
| 1963 |
-
|
| 1964 |
-
|
| 1965 |
-
|
| 1966 |
-
|
| 1967 |
-
|
| 1968 |
-
|
| 1969 |
-
|
| 1970 |
-
|
| 1971 |
-
|
| 1972 |
-
|
| 1973 |
-
|
| 1974 |
-
|
| 1975 |
-
|
| 1976 |
-
|
| 1977 |
-
|
| 1978 |
-
|
| 1979 |
-
|
| 1980 |
-
|
| 1981 |
-
|
| 1982 |
-
|
| 1983 |
-
|
| 1984 |
-
|
| 1985 |
-
|
| 1986 |
-
|
| 1987 |
-
|
| 1988 |
-
|
| 1989 |
-
|
| 1990 |
-
|
| 1991 |
-
|
| 1992 |
-
|
| 1993 |
-
|
| 1994 |
-
|
| 1995 |
-
|
| 1996 |
-
|
| 1997 |
-
|
| 1998 |
-
|
| 1999 |
-
|
| 2000 |
-
|
| 2001 |
-
|
| 2002 |
-
|
| 2003 |
-
|
| 2004 |
-
|
| 2005 |
-
|
| 2006 |
-
|
| 2007 |
-
|
| 2008 |
-
|
| 2009 |
-
|
| 2010 |
-
|
| 2011 |
-
|
| 2012 |
-
|
|
|
|
|
|
|
|
|
|
| 2013 |
}
|
| 2014 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2015 |
}
|
| 2016 |
-
|
| 2017 |
-
|
| 2018 |
-
|
| 2019 |
-
|
| 2020 |
-
|
| 2021 |
-
|
| 2022 |
-
}
|
| 2023 |
-
|
| 2024 |
-
|
| 2025 |
-
|
| 2026 |
-
|
| 2027 |
-
|
| 2028 |
-
|
| 2029 |
-
|
| 2030 |
-
|
| 2031 |
-
if (recognition && recognition.isStarted) {
|
| 2032 |
-
recognition.start();
|
| 2033 |
-
}
|
| 2034 |
-
};
|
| 2035 |
-
recognition.isStarted = true;
|
| 2036 |
-
recognition.start();
|
| 2037 |
-
} else {
|
| 2038 |
-
alert('Speech recognition is not supported in this browser.');
|
| 2039 |
-
}
|
| 2040 |
-
}
|
| 2041 |
-
updateCartUI(getCartLocalStorage());
|
| 2042 |
-
const descriptionInput = document.getElementById('custom-dish-description');
|
| 2043 |
-
const suggestionsContainer = document.getElementById('descriptionSuggestions');
|
| 2044 |
-
if (descriptionInput && suggestionsContainer) {
|
| 2045 |
-
descriptionInput.addEventListener('input', debounce(function() {
|
| 2046 |
-
const query = descriptionInput.value.trim();
|
| 2047 |
-
if (query.length < 2) {
|
| 2048 |
-
suggestionsContainer.innerHTML = '';
|
| 2049 |
-
suggestionsContainer.style.display = 'none';
|
| 2050 |
-
return;
|
| 2051 |
-
}
|
| 2052 |
-
const filteredIngredients = ingredientsList.filter(ingredient =>
|
| 2053 |
-
ingredient.toLowerCase().includes(query.toLowerCase())
|
| 2054 |
-
);
|
| 2055 |
-
suggestionsContainer.innerHTML = '';
|
| 2056 |
-
if (filteredIngredients.length > 0) {
|
| 2057 |
-
filteredIngredients.slice(0, 5).forEach(ingredient => {
|
| 2058 |
-
const suggestionItem = document.createElement('div');
|
| 2059 |
-
suggestionItem.classList.add('suggestion-item');
|
| 2060 |
-
suggestionItem.textContent = ingredient;
|
| 2061 |
-
suggestionItem.style.padding = '8px';
|
| 2062 |
-
suggestionItem.style.cursor = 'pointer';
|
| 2063 |
-
suggestionItem.style.backgroundColor = '#fff';
|
| 2064 |
-
suggestionItem.style.borderBottom = '1px solid #eee';
|
| 2065 |
-
suggestionItem.addEventListener('click', () => {
|
| 2066 |
-
descriptionInput.value = ingredient;
|
| 2067 |
-
suggestionsContainer.innerHTML = '';
|
| 2068 |
-
suggestionsContainer.style.display = 'none';
|
| 2069 |
-
});
|
| 2070 |
-
suggestionsContainer.appendChild(suggestionItem);
|
| 2071 |
});
|
| 2072 |
-
|
| 2073 |
-
|
| 2074 |
-
|
| 2075 |
-
|
| 2076 |
-
|
| 2077 |
-
|
| 2078 |
-
|
| 2079 |
-
|
| 2080 |
-
|
| 2081 |
-
|
| 2082 |
-
|
| 2083 |
-
|
| 2084 |
-
|
| 2085 |
-
|
| 2086 |
-
|
| 2087 |
-
|
| 2088 |
-
|
| 2089 |
-
|
| 2090 |
-
|
| 2091 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2092 |
</body>
|
| 2093 |
-
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 149 |
right: 10px;
|
| 150 |
top: 50%;
|
| 151 |
transform: translateY(-50%);
|
| 152 |
+
display: flex;
|
| 153 |
+
align-items: center;
|
| 154 |
+
justify-content: center;
|
| 155 |
}
|
| 156 |
.avatar-icon {
|
| 157 |
+
width: 40px;
|
| 158 |
+
height: 40px;
|
| 159 |
border-radius: 50%;
|
| 160 |
+
background: linear-gradient(45deg, #FF8C00, #000000, #0000FF); /* Orange, black, blue gradient */
|
| 161 |
+
cursor: pointer;
|
| 162 |
display: flex;
|
| 163 |
align-items: center;
|
| 164 |
justify-content: center;
|
| 165 |
color: white;
|
| 166 |
+
font-size: 20px;
|
| 167 |
+
font-weight: bold;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 168 |
}
|
| 169 |
.dropdown-menu {
|
| 170 |
position: absolute;
|
| 171 |
right: 0;
|
| 172 |
top: 100%;
|
| 173 |
+
background: linear-gradient(45deg, #FF8C00, #000000, #32CD32); /* Orange, black, green gradient */
|
| 174 |
+
border: 1px solid #FFD700; /* Gold border for premium look */
|
| 175 |
border-radius: 8px;
|
| 176 |
+
box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.2);
|
|
|
|
| 177 |
display: none;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 178 |
}
|
| 179 |
+
.dropdown-menu .dropdown-item {
|
| 180 |
+
padding: 12px 16px;
|
|
|
|
| 181 |
text-decoration: none;
|
| 182 |
+
color: #FFFFFF; /* White text for contrast */
|
| 183 |
+
border-bottom: 1px solid rgba(255, 215, 0, 0.3); /* Subtle gold separator */
|
| 184 |
display: flex;
|
| 185 |
align-items: center;
|
| 186 |
+
font-size: 15px;
|
| 187 |
transition: background-color 0.2s ease;
|
| 188 |
}
|
| 189 |
+
.dropdown-menu .dropdown-item:last-child {
|
| 190 |
+
border-bottom: none;
|
| 191 |
+
}
|
| 192 |
+
.dropdown-menu .dropdown-item:hover {
|
| 193 |
+
background-color: rgba(255, 215, 0, 0.2); /* Gold highlight on hover */
|
| 194 |
+
color: #FFFFFF;
|
| 195 |
+
}
|
| 196 |
+
.dropdown-menu .dropdown-item::before {
|
| 197 |
+
font-family: 'bootstrap-icons';
|
| 198 |
+
margin-right: 10px;
|
| 199 |
+
font-size: 16px;
|
| 200 |
+
color: #FFD700; /* Gold icons */
|
| 201 |
+
}
|
| 202 |
+
.dropdown-menu .dropdown-item:nth-child(1)::before {
|
| 203 |
+
content: '\F4DA'; /* User icon for View Profile */
|
| 204 |
}
|
| 205 |
+
.dropdown-menu .dropdown-item:nth-child(2)::before {
|
| 206 |
+
content: '\F2EA'; /* Clock icon for Order History */
|
| 207 |
+
}
|
| 208 |
+
.dropdown-menu .dropdown-item:nth-child(3)::before {
|
| 209 |
+
content: '\F4E6'; /* Summary icon for MY Summary */
|
| 210 |
+
}
|
| 211 |
+
.dropdown-menu .dropdown-item:nth-child(4)::before {
|
| 212 |
+
content: '\F52B'; /* Logout icon */
|
| 213 |
}
|
| 214 |
.fixed-top-bar {
|
| 215 |
position: relative;
|
|
|
|
| 250 |
color: #888;
|
| 251 |
}
|
| 252 |
.search-bar-container input:focus {
|
| 253 |
+
border-bottom: 2px solid #FFS07A;
|
| 254 |
}
|
| 255 |
.search-icon {
|
| 256 |
position: absolute;
|
|
|
|
| 613 |
gap: 15px;
|
| 614 |
min-height: 200px;
|
| 615 |
}
|
| 616 |
+
#micModal .modal-body i#mic-icon-animation {
|
| 617 |
font-size: 2.5rem;
|
| 618 |
color: #007bff;
|
| 619 |
animation: pulse 2s infinite;
|
|
|
|
| 949 |
right: 10px;
|
| 950 |
}
|
| 951 |
.avatar-icon {
|
| 952 |
+
width: 40px;
|
| 953 |
+
height: 40px;
|
| 954 |
+
font-size: 20px;
|
| 955 |
}
|
| 956 |
.dropdown-menu {
|
| 957 |
+
width: 220px;
|
| 958 |
}
|
| 959 |
.dropdown-menu .dropdown-item {
|
| 960 |
padding: 12px 16px;
|
|
|
|
| 1218 |
<body>
|
| 1219 |
<div class="fixed-top-bar">
|
| 1220 |
<div class="avatar-dropdown-container">
|
| 1221 |
+
<div class="avatar-icon">
|
| 1222 |
<span>{{ first_letter }}</span>
|
| 1223 |
</div>
|
| 1224 |
+
<div class="dropdown-menu">
|
| 1225 |
+
<a href="{{ url_for('user_details.customer_details') }}" class="dropdown-item">View Profile</a>
|
| 1226 |
+
<a href="{{ url_for('orderhistory.order_history') }}" class="dropdown-item">Order History</a>
|
| 1227 |
+
<a href="{{ url_for('combined_summary.combined_summary') }}" class="dropdown-item">MY Summary</a>
|
| 1228 |
+
<a href="{{ url_for('logout') }}" class="dropdown-item">Logout</a>
|
| 1229 |
</div>
|
| 1230 |
</div>
|
| 1231 |
<div class="search-bar-container">
|
|
|
|
| 1840 |
document.getElementById('mic-item-name').textContent = '';
|
| 1841 |
}
|
| 1842 |
document.addEventListener('DOMContentLoaded', function () {
|
| 1843 |
+
const avatarContainer = document.querySelector('.avatar-dropdown-container');
|
| 1844 |
+
const dropdownMenu = document.querySelector('.dropdown-menu');
|
| 1845 |
+
avatarContainer.addEventListener('click', function (event) {
|
|
|
|
| 1846 |
event.stopPropagation();
|
| 1847 |
+
dropdownMenu.style.display = dropdownMenu.style.display === 'block' ? 'none' : 'block';
|
| 1848 |
});
|
| 1849 |
document.addEventListener('click', function (event) {
|
| 1850 |
+
if (!avatarContainer.contains(event.target)) {
|
| 1851 |
+
dropdownMenu.style.display = 'none';
|
| 1852 |
}
|
| 1853 |
});
|
| 1854 |
+
const dropdownItems = document.querySelectorAll('.dropdown-item');
|
| 1855 |
+
dropdownItems.forEach(item => {
|
| 1856 |
item.addEventListener('click', function () {
|
| 1857 |
+
dropdownMenu.style.display = 'none';
|
| 1858 |
});
|
| 1859 |
});
|
|
|
|
| 1860 |
const searchBar = document.getElementById('searchBar');
|
| 1861 |
searchBar.addEventListener('click', function () {
|
| 1862 |
window.location.href = '/search';
|
|
|
|
| 1922 |
}
|
| 1923 |
});
|
| 1924 |
card.addEventListener('touchstart', () => {
|
| 1925 |
+
isTouching = true;
|
| 1926 |
video.classList.add('active');
|
| 1927 |
image.classList.add('hidden');
|
| 1928 |
video.play().catch(err => {
|
|
|
|
| 1947 |
const itemDetails = card.querySelector('.item-details');
|
| 1948 |
if (toggleDetails && itemDetails) {
|
| 1949 |
toggleDetails.addEventListener('click', () => {
|
| 1950 |
+
const isVisible = itemDetails.classList.contains('show');
|
| 1951 |
itemDetails.classList.toggle('show');
|
| 1952 |
+
toggleDetails.textContent = isVisible ? 'Show Details' : 'Hide Details';
|
| 1953 |
});
|
| 1954 |
}
|
| 1955 |
});
|
| 1956 |
const quantityInput = document.getElementById('quantityInput');
|
| 1957 |
+
const decreaseButton = document.getElementById('decreaseQuantity');
|
| 1958 |
+
const increaseButton = document.getElementById('increaseQuantity');
|
| 1959 |
+
decreaseButton.addEventListener('click', () => {
|
| 1960 |
+
let currentValue = parseInt(quantityInput.value) || 1;
|
| 1961 |
+
if (currentValue > 1) {
|
| 1962 |
+
quantityInput.value = currentValue - 1;
|
| 1963 |
+
updateModalPrice();
|
| 1964 |
+
}
|
| 1965 |
+
});
|
| 1966 |
+
increaseButton.addEventListener('click', () => {
|
| 1967 |
+
let currentValue = parseInt(quantityInput.value) || 1;
|
| 1968 |
+
quantityInput.value = currentValue + 1;
|
| 1969 |
+
updateModalPrice();
|
| 1970 |
+
});
|
| 1971 |
+
const micIcon = document.getElementById('micIcon');
|
| 1972 |
+
micIcon.addEventListener('click', () => {
|
| 1973 |
+
if (!('webkitSpeechRecognition' in window) && !('SpeechRecognition' in window)) {
|
| 1974 |
+
alert('Speech recognition is not supported in this browser.');
|
| 1975 |
+
return;
|
| 1976 |
+
}
|
| 1977 |
+
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
|
| 1978 |
+
recognition = new SpeechRecognition();
|
| 1979 |
+
recognition.lang = 'en-US';
|
| 1980 |
+
recognition.interimResults = false;
|
| 1981 |
+
recognition.maxAlternatives = 1;
|
| 1982 |
+
recognition.start();
|
| 1983 |
+
micIcon.classList.add('active');
|
| 1984 |
+
const micModal = new bootstrap.Modal(document.getElementById('micModal'));
|
| 1985 |
+
micModal.show();
|
| 1986 |
+
document.getElementById('mic-status').textContent = 'Listening...';
|
| 1987 |
+
recognition.onresult = function (event) {
|
| 1988 |
+
const transcript = event.results[0][0].transcript.trim();
|
| 1989 |
+
console.log('Recognized speech:', transcript);
|
| 1990 |
+
const matchedItem = menuItems.find(item =>
|
| 1991 |
+
item.name.toLowerCase().includes(transcript.toLowerCase())
|
| 1992 |
+
);
|
| 1993 |
+
if (matchedItem) {
|
| 1994 |
+
document.getElementById('mic-status').style.display = 'none';
|
| 1995 |
+
document.getElementById('mic-item-details').style.display = 'block';
|
| 1996 |
+
document.getElementById('mic-item-name').textContent = matchedItem.name;
|
| 1997 |
+
document.getElementById('mic-item-image').src = matchedItem.image;
|
| 1998 |
+
setTimeout(() => {
|
| 1999 |
+
const menuCards = document.querySelectorAll('.menu-card');
|
| 2000 |
+
let targetCard = null;
|
| 2001 |
+
let buttonContainer = null;
|
| 2002 |
+
menuCards.forEach(card => {
|
| 2003 |
+
const itemName = card.getAttribute('data-item-name');
|
| 2004 |
+
const itemSection = card.getAttribute('data-item-section');
|
| 2005 |
+
if (itemName === matchedItem.name && itemSection === matchedItem.section) {
|
| 2006 |
+
targetCard = card;
|
| 2007 |
+
buttonContainer = card.querySelector('.button-container');
|
| 2008 |
+
}
|
| 2009 |
+
});
|
| 2010 |
+
if (targetCard && buttonContainer) {
|
| 2011 |
+
targetCard.classList.add('highlighted');
|
| 2012 |
+
setTimeout(() => {
|
| 2013 |
+
targetCard.classList.remove('highlighted');
|
| 2014 |
+
}, 3000);
|
| 2015 |
+
const addButton = buttonContainer.querySelector('.btn-primary');
|
| 2016 |
+
if (addButton) {
|
| 2017 |
+
if (matchedItem.section === 'Soft Drinks') {
|
| 2018 |
+
showSoftDrinkModal(addButton);
|
| 2019 |
+
} else {
|
| 2020 |
+
addButton.click();
|
| 2021 |
+
}
|
| 2022 |
+
micModal.hide();
|
| 2023 |
+
}
|
| 2024 |
}
|
| 2025 |
+
}, 1000);
|
| 2026 |
+
} else {
|
| 2027 |
+
document.getElementById('mic-status').textContent = 'Item not found. Try again.';
|
| 2028 |
+
setTimeout(() => {
|
| 2029 |
+
document.getElementById('mic-status').textContent = 'Say the name of a menu item...';
|
| 2030 |
+
}, 2000);
|
| 2031 |
}
|
| 2032 |
+
};
|
| 2033 |
+
recognition.onend = function () {
|
| 2034 |
+
micIcon.classList.remove('active');
|
| 2035 |
+
if (document.getElementById('micModal').classList.contains('show')) {
|
| 2036 |
+
recognition.start();
|
| 2037 |
+
}
|
| 2038 |
+
};
|
| 2039 |
+
recognition.onerror = function (event) {
|
| 2040 |
+
console.error('Speech recognition error:', event.error);
|
| 2041 |
+
document.getElementById('mic-status').textContent = 'Error occurred. Please try again.';
|
| 2042 |
+
micIcon.classList.remove('active');
|
| 2043 |
+
setTimeout(() => {
|
| 2044 |
+
document.getElementById('mic-status').textContent = 'Say the name of a menu item...';
|
| 2045 |
+
}, 2000);
|
| 2046 |
+
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2047 |
});
|
| 2048 |
+
const stopMicBtn = document.getElementById('stopMicBtn');
|
| 2049 |
+
stopMicBtn.addEventListener('click', stopSpeechRecognition);
|
| 2050 |
+
document.getElementById('micModal').addEventListener('hidden.bs.modal', stopSpeechRecognition);
|
| 2051 |
+
const cart = getCartLocalStorage();
|
| 2052 |
+
updateCartUI(cart);
|
| 2053 |
+
const descriptionInput = document.getElementById('custom-dish-description');
|
| 2054 |
+
const suggestionsDiv = document.getElementById('descriptionSuggestions');
|
| 2055 |
+
if (descriptionInput && suggestionsDiv) {
|
| 2056 |
+
const updateSuggestions = debounce(function () {
|
| 2057 |
+
const query = descriptionInput.value.toLowerCase();
|
| 2058 |
+
if (query.length < 2) {
|
| 2059 |
+
suggestionsDiv.innerHTML = '';
|
| 2060 |
+
suggestionsDiv.style.display = 'none';
|
| 2061 |
+
return;
|
| 2062 |
+
}
|
| 2063 |
+
const matchedIngredients = ingredientsList.filter(ingredient =>
|
| 2064 |
+
ingredient.toLowerCase().includes(query)
|
| 2065 |
+
);
|
| 2066 |
+
suggestionsDiv.innerHTML = '';
|
| 2067 |
+
if (matchedIngredients.length === 0) {
|
| 2068 |
+
suggestionsDiv.style.display = 'none';
|
| 2069 |
+
return;
|
| 2070 |
+
}
|
| 2071 |
+
matchedIngredients.forEach(ingredient => {
|
| 2072 |
+
const suggestionItem = document.createElement('div');
|
| 2073 |
+
suggestionItem.classList.add('suggestion-item');
|
| 2074 |
+
suggestionItem.textContent = ingredient;
|
| 2075 |
+
suggestionItem.style.padding = '8px';
|
| 2076 |
+
suggestionItem.style.cursor = 'pointer';
|
| 2077 |
+
suggestionItem.style.borderBottom = '1px solid #eee';
|
| 2078 |
+
suggestionItem.style.backgroundColor = '#fff';
|
| 2079 |
+
suggestionItem.style.transition = 'background-color 0.2s ease';
|
| 2080 |
+
suggestionItem.addEventListener('mouseover', () => {
|
| 2081 |
+
suggestionItem.style.backgroundColor = '#f0f0f0';
|
| 2082 |
+
});
|
| 2083 |
+
suggestionItem.addEventListener('mouseout', () => {
|
| 2084 |
+
suggestionItem.style.backgroundColor = '#fff';
|
| 2085 |
+
});
|
| 2086 |
+
suggestionItem.addEventListener('click', () => {
|
| 2087 |
+
const currentValue = descriptionInput.value;
|
| 2088 |
+
const lastSpaceIndex = currentValue.lastIndexOf(' ');
|
| 2089 |
+
const newValue = lastSpaceIndex === -1
|
| 2090 |
+
? ingredient
|
| 2091 |
+
: currentValue.substring(0, lastSpaceIndex + 1) + ingredient;
|
| 2092 |
+
descriptionInput.value = newValue;
|
| 2093 |
+
suggestionsDiv.innerHTML = '';
|
| 2094 |
+
suggestionsDiv.style.display = 'none';
|
| 2095 |
+
descriptionInput.focus();
|
| 2096 |
+
});
|
| 2097 |
+
suggestionsDiv.appendChild(suggestionItem);
|
| 2098 |
+
});
|
| 2099 |
+
suggestionsDiv.style.display = 'block';
|
| 2100 |
+
suggestionsDiv.style.position = 'absolute';
|
| 2101 |
+
suggestionsDiv.style.zIndex = '1000';
|
| 2102 |
+
suggestionsDiv.style.backgroundColor = '#fff';
|
| 2103 |
+
suggestionsDiv.style.border = '1px solid #ccc';
|
| 2104 |
+
suggestionsDiv.style.borderRadius = '4px';
|
| 2105 |
+
suggestionsDiv.style.maxHeight = '150px';
|
| 2106 |
+
suggestionsDiv.style.overflowY = 'auto';
|
| 2107 |
+
suggestionsDiv.style.width = descriptionInput.offsetWidth + 'px';
|
| 2108 |
+
suggestionsDiv.style.boxShadow = '0 2px 4px rgba(0,0,0,0.1)';
|
| 2109 |
+
}, 300);
|
| 2110 |
+
descriptionInput.addEventListener('input', updateSuggestions);
|
| 2111 |
+
descriptionInput.addEventListener('blur', () => {
|
| 2112 |
+
setTimeout(() => {
|
| 2113 |
+
suggestionsDiv.innerHTML = '';
|
| 2114 |
+
suggestionsDiv.style.display = 'none';
|
| 2115 |
+
}, 200);
|
| 2116 |
+
});
|
| 2117 |
+
descriptionInput.addEventListener('focus', updateSuggestions);
|
| 2118 |
+
document.addEventListener('click', (event) => {
|
| 2119 |
+
if (!descriptionInput.contains(event.target) && !suggestionsDiv.contains(event.target)) {
|
| 2120 |
+
suggestionsDiv.innerHTML = '';
|
| 2121 |
+
suggestionsDiv.style.display = 'none';
|
| 2122 |
+
}
|
| 2123 |
+
});
|
| 2124 |
+
}
|
| 2125 |
+
});
|
| 2126 |
+
</script>
|
| 2127 |
</body>
|
| 2128 |
+
</html>
|
| 2129 |
+
|
| 2130 |
+
|
| 2131 |
+
|
| 2132 |
+
|
| 2133 |
+
|
| 2134 |
+
|
| 2135 |
+
|
| 2136 |
+
|
| 2137 |
+
|
| 2138 |
+
|
| 2139 |
+
|