lokesh341 commited on
Commit
f77e19a
·
verified ·
1 Parent(s): cf2d0ee

Update templates/menu.html

Browse files
Files changed (1) hide show
  1. templates/menu.html +129 -72
templates/menu.html CHANGED
@@ -131,7 +131,7 @@
131
  top: 50%;
132
  transform: translateY(-50%);
133
  display: flex;
134
- align-items: right;
135
  justify-content: center;
136
  }
137
  .avatar-icon {
@@ -147,56 +147,62 @@
147
  font-size: 20px;
148
  font-weight: bold;
149
  position: relative;
 
 
 
 
150
  }
151
  .avatar-icon img {
152
  width: 100%;
153
  height: 100%;
154
  object-fit: cover;
155
  border-radius: 50%;
 
 
 
 
156
  }
157
  .dropdown-menu {
158
  position: absolute;
159
  right: 0;
160
  top: 100%;
161
  background-color: #fff8f0;
162
- border-radius: 5px;
163
- width: 220px;
164
- box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1);
165
  display: none;
166
  border: 1px solid #ffd8b1;
 
 
167
  }
168
  .dropdown-menu .dropdown-item {
169
- padding: 12px 16px;
170
  text-decoration: none;
171
  color: #333;
172
- border-bottom: 1px solid #ffd8b1;
173
- display: block;
174
- font-size: 15px;
175
- transition: background-color 0.2s ease;
176
- }
177
- .dropdown-menu .dropdown-item:first-child {
178
- border-top: none;
179
  }
180
  .dropdown-menu .dropdown-item:hover {
181
  background-color: #ffe4c4;
182
- color: #333;
183
- }
184
- .upload-item:hover,
185
- .delete-item:hover {
186
- background-color: #ffe4c4;
187
- color: #333;
188
  }
189
  .upload-item,
190
- .delete-item {
191
- padding: 12px 16px;
 
192
  text-decoration: none;
193
  color: #333;
194
- border-bottom: 1px solid #ffd8b1;
195
- display: block;
196
- font-size: 15px;
197
  transition: background-color 0.2s ease;
198
  cursor: pointer;
199
  }
 
 
 
 
 
 
200
  .fixed-top-bar {
201
  position: relative;
202
  top: 0;
@@ -355,6 +361,15 @@
355
  max-height: 60vh;
356
  overflow-y: auto;
357
  padding: 15px;
 
 
 
 
 
 
 
 
 
358
  }
359
  .modal-body #modal-img {
360
  max-height: 200px;
@@ -694,11 +709,17 @@
694
  font-size: 20px;
695
  }
696
  .dropdown-menu {
697
- width: 220px;
698
  }
699
  .dropdown-menu .dropdown-item {
700
- padding: 12px 16px;
701
- font-size: 15px;
 
 
 
 
 
 
702
  }
703
  .category-buttons {
704
  gap: 8px;
@@ -721,6 +742,9 @@
721
  max-height: 50vh;
722
  padding: 8px;
723
  }
 
 
 
724
  .modal-body #modal-img {
725
  max-height: 150px;
726
  width: 100%;
@@ -864,6 +888,7 @@
864
  <div class="dropdown-menu" id="avatarDropdown">
865
  {% if user_image %}
866
  <div class="dropdown-item delete-item" id="deleteAvatar">Delete Image</div>
 
867
  {% endif %}
868
  <a href="{{ url_for('orderhistory.order_history') }}" class="dropdown-item">Order History</a>
869
  <div class="dropdown-item upload-item">
@@ -1041,6 +1066,24 @@
1041
  </div>
1042
  </div>
1043
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1044
  <!-- Modal for Soft Drinks Quantity Selection -->
1045
  <div class="modal fade" id="softDrinkModal" tabindex="-1" aria-labelledby="softDrinkModalLabel" aria-hidden="true">
1046
  <div class="modal-dialog modal-dialog-centered">
@@ -1258,11 +1301,13 @@
1258
  const avatarIcon = document.getElementById('avatarIcon');
1259
  const avatarUpload = document.getElementById('avatarUpload');
1260
  const deleteAvatar = document.getElementById('deleteAvatar');
 
1261
 
1262
  // Load avatar from localStorage if available
1263
  function loadAvatar() {
1264
  const savedAvatar = localStorage.getItem('userAvatar');
1265
- if (savedAvatar && !document.querySelector('.avatar-image')) {
 
1266
  const img = document.createElement('img');
1267
  img.src = savedAvatar;
1268
  img.alt = 'User Avatar';
@@ -1270,17 +1315,42 @@
1270
  img.style.cssText = 'width: 100%; height: 100%; object-fit: cover; border-radius: 50%;';
1271
  avatarIcon.innerHTML = '';
1272
  avatarIcon.appendChild(img);
1273
- if (!deleteAvatar) {
1274
- const deleteItem = document.createElement('div');
1275
- deleteItem.className = 'dropdown-item delete-item';
1276
- deleteItem.id = 'deleteAvatar';
1277
- deleteItem.innerText = 'Delete Image';
1278
- dropdownMenu.insertBefore(deleteItem, dropdownMenu.firstChild);
1279
- addDeleteListener(deleteItem);
1280
- }
1281
  }
1282
  }
1283
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1284
  // Save avatar to localStorage
1285
  function saveAvatar(imageUrl) {
1286
  localStorage.setItem('userAvatar', imageUrl);
@@ -1290,7 +1360,7 @@
1290
  function clearAvatar() {
1291
  localStorage.removeItem('userAvatar');
1292
  avatarIcon.innerHTML = `<span>{{ first_letter }}</span>`;
1293
- if (deleteAvatar) deleteAvatar.remove();
1294
  }
1295
 
1296
  // Avatar click handler
@@ -1333,14 +1403,7 @@
1333
  avatarIcon.innerHTML = '';
1334
  avatarIcon.appendChild(img);
1335
  saveAvatar(data.image);
1336
- if (!deleteAvatar) {
1337
- const deleteItem = document.createElement('div');
1338
- deleteItem.className = 'dropdown-item delete-item';
1339
- deleteItem.id = 'deleteAvatar';
1340
- deleteItem.innerText = 'Delete Image';
1341
- dropdownMenu.insertBefore(deleteItem, dropdownMenu.firstChild);
1342
- addDeleteListener(deleteItem);
1343
- }
1344
  dropdownMenu.style.display = 'none';
1345
  } else {
1346
  alert('Failed to upload image: ' + (data.error || 'Unknown error. Using default image.'));
@@ -1352,14 +1415,7 @@
1352
  avatarIcon.innerHTML = '';
1353
  avatarIcon.appendChild(img);
1354
  saveAvatar('/static/default-avatar.jpg');
1355
- if (!deleteAvatar) {
1356
- const deleteItem = document.createElement('div');
1357
- deleteItem.className = 'dropdown-item delete-item';
1358
- deleteItem.id = 'deleteAvatar';
1359
- deleteItem.innerText = 'Delete Image';
1360
- dropdownMenu.insertBefore(deleteItem, dropdownMenu.firstChild);
1361
- addDeleteListener(deleteItem);
1362
- }
1363
  dropdownMenu.style.display = 'none';
1364
  }
1365
  })
@@ -1374,14 +1430,7 @@
1374
  avatarIcon.innerHTML = '';
1375
  avatarIcon.appendChild(img);
1376
  saveAvatar('/static/default-avatar.jpg');
1377
- if (!deleteAvatar) {
1378
- const deleteItem = document.createElement('div');
1379
- deleteItem.className = 'dropdown-item delete-item';
1380
- deleteItem.id = 'deleteAvatar';
1381
- deleteItem.innerText = 'Delete Image';
1382
- dropdownMenu.insertBefore(deleteItem, dropdownMenu.firstChild);
1383
- addDeleteListener(deleteItem);
1384
- }
1385
  dropdownMenu.style.display = 'none';
1386
  });
1387
  };
@@ -1395,14 +1444,7 @@
1395
  avatarIcon.innerHTML = '';
1396
  avatarIcon.appendChild(img);
1397
  saveAvatar('/static/default-avatar.jpg');
1398
- if (!deleteAvatar) {
1399
- const deleteItem = document.createElement('div');
1400
- deleteItem.className = 'dropdown-item delete-item';
1401
- deleteItem.id = 'deleteAvatar';
1402
- deleteItem.innerText = 'Delete Image';
1403
- dropdownMenu.insertBefore(deleteItem, dropdownMenu.firstChild);
1404
- addDeleteListener(deleteItem);
1405
- }
1406
  dropdownMenu.style.display = 'none';
1407
  };
1408
  reader.readAsDataURL(file);
@@ -1437,11 +1479,26 @@
1437
  });
1438
  }
1439
 
1440
- // Add delete listener if delete option exists
1441
- if (deleteAvatar) {
1442
- addDeleteListener(deleteAvatar);
 
 
 
 
 
 
 
 
 
 
 
1443
  }
1444
 
 
 
 
 
1445
  // Load avatar on page load
1446
  loadAvatar();
1447
 
@@ -1891,7 +1948,7 @@
1891
  optionsContainer.appendChild(listItem);
1892
  });
1893
  sectionDiv.appendChild(optionsContainer);
1894
- addonsList.appendChild(sectionDiv);
1895
  });
1896
  })
1897
  .catch(err => {
 
131
  top: 50%;
132
  transform: translateY(-50%);
133
  display: flex;
134
+ align-items: center;
135
  justify-content: center;
136
  }
137
  .avatar-icon {
 
147
  font-size: 20px;
148
  font-weight: bold;
149
  position: relative;
150
+ transition: transform 0.2s ease;
151
+ }
152
+ .avatar-icon:hover {
153
+ transform: scale(1.1);
154
  }
155
  .avatar-icon img {
156
  width: 100%;
157
  height: 100%;
158
  object-fit: cover;
159
  border-radius: 50%;
160
+ transition: transform 0.2s ease;
161
+ }
162
+ .avatar-icon img:hover {
163
+ transform: scale(1.1);
164
  }
165
  .dropdown-menu {
166
  position: absolute;
167
  right: 0;
168
  top: 100%;
169
  background-color: #fff8f0;
170
+ border-radius: 8px;
171
+ width: 200px;
172
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
173
  display: none;
174
  border: 1px solid #ffd8b1;
175
+ padding: 5px 0;
176
+ z-index: 1000;
177
  }
178
  .dropdown-menu .dropdown-item {
179
+ padding: 10px 16px;
180
  text-decoration: none;
181
  color: #333;
182
+ font-size: 14px;
183
+ transition: background-color 0.2s ease, color 0.2s ease;
184
+ cursor: pointer;
 
 
 
 
185
  }
186
  .dropdown-menu .dropdown-item:hover {
187
  background-color: #ffe4c4;
188
+ color: #2c2c2c;
 
 
 
 
 
189
  }
190
  .upload-item,
191
+ .delete-item,
192
+ .view-item {
193
+ padding: 10px 16px;
194
  text-decoration: none;
195
  color: #333;
196
+ font-size: 14px;
 
 
197
  transition: background-color 0.2s ease;
198
  cursor: pointer;
199
  }
200
+ .upload-item:hover,
201
+ .delete-item:hover,
202
+ .view-item:hover {
203
+ background-color: #ffe4c4;
204
+ color: #2c2c2c;
205
+ }
206
  .fixed-top-bar {
207
  position: relative;
208
  top: 0;
 
361
  max-height: 60vh;
362
  overflow-y: auto;
363
  padding: 15px;
364
+ text-align: center;
365
+ }
366
+ .modal-body #avatar-modal-img {
367
+ max-width: 100%;
368
+ max-height: 400px;
369
+ object-fit: contain;
370
+ border-radius: 8px;
371
+ margin: 0 auto;
372
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
373
  }
374
  .modal-body #modal-img {
375
  max-height: 200px;
 
709
  font-size: 20px;
710
  }
711
  .dropdown-menu {
712
+ width: 180px;
713
  }
714
  .dropdown-menu .dropdown-item {
715
+ padding: 8px 12px;
716
+ font-size: 13px;
717
+ }
718
+ .upload-item,
719
+ .delete-item,
720
+ .view-item {
721
+ padding: 8px 12px;
722
+ font-size: 13px;
723
  }
724
  .category-buttons {
725
  gap: 8px;
 
742
  max-height: 50vh;
743
  padding: 8px;
744
  }
745
+ .modal-body #avatar-modal-img {
746
+ max-height: 300px;
747
+ }
748
  .modal-body #modal-img {
749
  max-height: 150px;
750
  width: 100%;
 
888
  <div class="dropdown-menu" id="avatarDropdown">
889
  {% if user_image %}
890
  <div class="dropdown-item delete-item" id="deleteAvatar">Delete Image</div>
891
+ <div class="dropdown-item view-item" id="viewAvatar">View Avatar</div>
892
  {% endif %}
893
  <a href="{{ url_for('orderhistory.order_history') }}" class="dropdown-item">Order History</a>
894
  <div class="dropdown-item upload-item">
 
1066
  </div>
1067
  </div>
1068
 
1069
+ <!-- Modal for Avatar View -->
1070
+ <div class="modal fade" id="avatarModal" tabindex="-1" aria-labelledby="avatarModalLabel" aria-hidden="true">
1071
+ <div class="modal-dialog modal-dialog-centered modal-lg">
1072
+ <div class="modal-content">
1073
+ <div class="modal-header">
1074
+ <h5 class="modal-title" id="avatarModalLabel">View Avatar</h5>
1075
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
1076
+ </div>
1077
+ <div class="modal-body">
1078
+ <img id="avatar-modal-img" class="img-fluid rounded mx-auto d-block" alt="Avatar Image" style="max-height: 400px; object-fit: contain;">
1079
+ </div>
1080
+ <div class="modal-footer">
1081
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
1082
+ </div>
1083
+ </div>
1084
+ </div>
1085
+ </div>
1086
+
1087
  <!-- Modal for Soft Drinks Quantity Selection -->
1088
  <div class="modal fade" id="softDrinkModal" tabindex="-1" aria-labelledby="softDrinkModalLabel" aria-hidden="true">
1089
  <div class="modal-dialog modal-dialog-centered">
 
1301
  const avatarIcon = document.getElementById('avatarIcon');
1302
  const avatarUpload = document.getElementById('avatarUpload');
1303
  const deleteAvatar = document.getElementById('deleteAvatar');
1304
+ const viewAvatar = document.getElementById('viewAvatar');
1305
 
1306
  // Load avatar from localStorage if available
1307
  function loadAvatar() {
1308
  const savedAvatar = localStorage.getItem('userAvatar');
1309
+ const avatarImage = avatarIcon.querySelector('.avatar-image');
1310
+ if (savedAvatar && !avatarImage) {
1311
  const img = document.createElement('img');
1312
  img.src = savedAvatar;
1313
  img.alt = 'User Avatar';
 
1315
  img.style.cssText = 'width: 100%; height: 100%; object-fit: cover; border-radius: 50%;';
1316
  avatarIcon.innerHTML = '';
1317
  avatarIcon.appendChild(img);
1318
+ ensureAvatarOptions();
1319
+ } else if (!savedAvatar && avatarImage) {
1320
+ avatarIcon.innerHTML = `<span>{{ first_letter }}</span>`;
1321
+ removeAvatarOptions();
 
 
 
 
1322
  }
1323
  }
1324
 
1325
+ // Ensure avatar options (Delete and View) are present only once
1326
+ function ensureAvatarOptions() {
1327
+ if (!document.querySelector('#deleteAvatar')) {
1328
+ const deleteItem = document.createElement('div');
1329
+ deleteItem.className = 'dropdown-item delete-item';
1330
+ deleteItem.id = 'deleteAvatar';
1331
+ deleteItem.innerText = 'Delete Image';
1332
+ dropdownMenu.insertBefore(deleteItem, dropdownMenu.firstChild);
1333
+ addDeleteListener(deleteItem);
1334
+ }
1335
+ if (!document.querySelector('#viewAvatar')) {
1336
+ const viewItem = document.createElement('div');
1337
+ viewItem.className = 'dropdown-item view-item';
1338
+ viewItem.id = 'viewAvatar';
1339
+ viewItem.innerText = 'View Avatar';
1340
+ const firstChild = dropdownMenu.firstChild;
1341
+ if (firstChild) dropdownMenu.insertBefore(viewItem, firstChild.nextSibling);
1342
+ addViewListener(viewItem);
1343
+ }
1344
+ }
1345
+
1346
+ // Remove avatar options
1347
+ function removeAvatarOptions() {
1348
+ const deleteItem = document.getElementById('deleteAvatar');
1349
+ const viewItem = document.getElementById('viewAvatar');
1350
+ if (deleteItem) deleteItem.remove();
1351
+ if (viewItem) viewItem.remove();
1352
+ }
1353
+
1354
  // Save avatar to localStorage
1355
  function saveAvatar(imageUrl) {
1356
  localStorage.setItem('userAvatar', imageUrl);
 
1360
  function clearAvatar() {
1361
  localStorage.removeItem('userAvatar');
1362
  avatarIcon.innerHTML = `<span>{{ first_letter }}</span>`;
1363
+ removeAvatarOptions();
1364
  }
1365
 
1366
  // Avatar click handler
 
1403
  avatarIcon.innerHTML = '';
1404
  avatarIcon.appendChild(img);
1405
  saveAvatar(data.image);
1406
+ ensureAvatarOptions();
 
 
 
 
 
 
 
1407
  dropdownMenu.style.display = 'none';
1408
  } else {
1409
  alert('Failed to upload image: ' + (data.error || 'Unknown error. Using default image.'));
 
1415
  avatarIcon.innerHTML = '';
1416
  avatarIcon.appendChild(img);
1417
  saveAvatar('/static/default-avatar.jpg');
1418
+ ensureAvatarOptions();
 
 
 
 
 
 
 
1419
  dropdownMenu.style.display = 'none';
1420
  }
1421
  })
 
1430
  avatarIcon.innerHTML = '';
1431
  avatarIcon.appendChild(img);
1432
  saveAvatar('/static/default-avatar.jpg');
1433
+ ensureAvatarOptions();
 
 
 
 
 
 
 
1434
  dropdownMenu.style.display = 'none';
1435
  });
1436
  };
 
1444
  avatarIcon.innerHTML = '';
1445
  avatarIcon.appendChild(img);
1446
  saveAvatar('/static/default-avatar.jpg');
1447
+ ensureAvatarOptions();
 
 
 
 
 
 
 
1448
  dropdownMenu.style.display = 'none';
1449
  };
1450
  reader.readAsDataURL(file);
 
1479
  });
1480
  }
1481
 
1482
+ // Handle avatar view
1483
+ function addViewListener(viewElement) {
1484
+ viewElement.addEventListener('click', function() {
1485
+ const avatarImage = avatarIcon.querySelector('.avatar-image');
1486
+ if (avatarImage) {
1487
+ const modalImg = document.getElementById('avatar-modal-img');
1488
+ modalImg.src = avatarImage.src;
1489
+ const modal = new bootstrap.Modal(document.getElementById('avatarModal'));
1490
+ modal.show();
1491
+ } else {
1492
+ alert('No avatar image to view.');
1493
+ }
1494
+ dropdownMenu.style.display = 'none';
1495
+ });
1496
  }
1497
 
1498
+ // Add listeners if elements exist
1499
+ if (deleteAvatar) addDeleteListener(deleteAvatar);
1500
+ if (viewAvatar) addViewListener(viewAvatar);
1501
+
1502
  // Load avatar on page load
1503
  loadAvatar();
1504
 
 
1948
  optionsContainer.appendChild(listItem);
1949
  });
1950
  sectionDiv.appendChild(optionsContainer);
1951
+ addonsList.appendChild(sectionDiv);
1952
  });
1953
  })
1954
  .catch(err => {