lokesh341 commited on
Commit
407d93f
·
verified ·
1 Parent(s): b7be7cd

Update templates/menu.html

Browse files
Files changed (1) hide show
  1. templates/menu.html +72 -12
templates/menu.html CHANGED
@@ -896,7 +896,7 @@
896
  </div>
897
  </div>
898
 
899
- <!-- Avatar View Modal -->
900
  <div class="modal fade avatar-modal" id="avatarViewModal" tabindex="-1" aria-labelledby="avatarViewModalLabel" aria-hidden="true">
901
  <div class="modal-dialog modal-dialog-centered">
902
  <div class="modal-content">
@@ -1324,25 +1324,25 @@
1324
  if (deleteAvatar) deleteAvatar.remove();
1325
  }
1326
 
1327
- // Avatar click handler (show modal or dropdown)
1328
  avatarIcon.addEventListener('click', function(event) {
1329
  event.stopPropagation();
1330
  const avatarImg = this.querySelector('.avatar-image');
1331
  if (avatarImg) {
1332
- avatarModalImage.src = avatarImg.src;
1333
  new bootstrap.Modal(document.getElementById('avatarViewModal')).show();
1334
  } else {
1335
  dropdownMenu.style.display = dropdownMenu.style.display === 'block' ? 'none' : 'block';
1336
  }
1337
  });
1338
 
1339
- // Handle image upload with 5MB limit
1340
  avatarUpload.addEventListener('change', function(event) {
1341
  const file = event.target.files[0];
1342
  if (file) {
1343
- const maxSize = 5 * 1024 * 1024; // 5MB in bytes
1344
  if (file.size > maxSize) {
1345
- alert('Image size must not exceed 5MB.');
1346
  this.value = '';
1347
  return;
1348
  }
@@ -1356,11 +1356,14 @@
1356
  },
1357
  body: JSON.stringify({ image: base64Image })
1358
  })
1359
- .then(response => response.json())
 
 
 
1360
  .then(data => {
1361
  if (data.success) {
1362
  const img = document.createElement('img');
1363
- img.src = data.image;
1364
  img.alt = 'User Avatar';
1365
  img.className = 'avatar-image';
1366
  img.style.cssText = 'width: 100%; height: 100%; object-fit: cover; border-radius: 50%;';
@@ -1377,14 +1380,68 @@
1377
  }
1378
  dropdownMenu.style.display = 'none';
1379
  } else {
1380
- alert('Failed to upload image: ' + (data.error || 'Unknown error'));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1381
  }
1382
  })
1383
  .catch(error => {
1384
  console.error('Upload error:', error);
1385
- alert('Error uploading image');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1386
  });
1387
  };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1388
  reader.readAsDataURL(file);
1389
  }
1390
  });
@@ -1398,7 +1455,10 @@
1398
  'Content-Type': 'application/json'
1399
  }
1400
  })
1401
- .then(response => response.json())
 
 
 
1402
  .then(data => {
1403
  if (data.success) {
1404
  clearAvatar();
@@ -1409,7 +1469,7 @@
1409
  })
1410
  .catch(error => {
1411
  console.error('Delete error:', error);
1412
- alert('Error deleting image');
1413
  });
1414
  });
1415
  }
 
896
  </div>
897
  </div>
898
 
899
+ <!-- Avatar View Modal (Triggered Directly from Avatar Icon) -->
900
  <div class="modal fade avatar-modal" id="avatarViewModal" tabindex="-1" aria-labelledby="avatarViewModalLabel" aria-hidden="true">
901
  <div class="modal-dialog modal-dialog-centered">
902
  <div class="modal-content">
 
1324
  if (deleteAvatar) deleteAvatar.remove();
1325
  }
1326
 
1327
+ // Avatar click handler (show modal directly from avatar icon)
1328
  avatarIcon.addEventListener('click', function(event) {
1329
  event.stopPropagation();
1330
  const avatarImg = this.querySelector('.avatar-image');
1331
  if (avatarImg) {
1332
+ avatarModalImage.src = avatarImg.src || '/static/default-avatar.jpg'; // Fallback image
1333
  new bootstrap.Modal(document.getElementById('avatarViewModal')).show();
1334
  } else {
1335
  dropdownMenu.style.display = dropdownMenu.style.display === 'block' ? 'none' : 'block';
1336
  }
1337
  });
1338
 
1339
+ // Handle image upload with 15MB limit and error handling
1340
  avatarUpload.addEventListener('change', function(event) {
1341
  const file = event.target.files[0];
1342
  if (file) {
1343
+ const maxSize = 15 * 1024 * 1024; // 15MB in bytes
1344
  if (file.size > maxSize) {
1345
+ alert('Image size must not exceed 15MB.');
1346
  this.value = '';
1347
  return;
1348
  }
 
1356
  },
1357
  body: JSON.stringify({ image: base64Image })
1358
  })
1359
+ .then(response => {
1360
+ if (!response.ok) throw new Error('Upload failed');
1361
+ return response.json();
1362
+ })
1363
  .then(data => {
1364
  if (data.success) {
1365
  const img = document.createElement('img');
1366
+ img.src = data.image || '/static/default-avatar.jpg'; // Fallback image
1367
  img.alt = 'User Avatar';
1368
  img.className = 'avatar-image';
1369
  img.style.cssText = 'width: 100%; height: 100%; object-fit: cover; border-radius: 50%;';
 
1380
  }
1381
  dropdownMenu.style.display = 'none';
1382
  } else {
1383
+ alert('Failed to upload image: ' + (data.error || 'Unknown error. Using default image.'));
1384
+ const img = document.createElement('img');
1385
+ img.src = '/static/default-avatar.jpg'; // Fallback image
1386
+ img.alt = 'User Avatar';
1387
+ img.className = 'avatar-image';
1388
+ img.style.cssText = 'width: 100%; height: 100%; object-fit: cover; border-radius: 50%;';
1389
+ avatarIcon.innerHTML = '';
1390
+ avatarIcon.appendChild(img);
1391
+ saveAvatar('/static/default-avatar.jpg');
1392
+ if (!deleteAvatar) {
1393
+ const deleteItem = document.createElement('div');
1394
+ deleteItem.className = 'dropdown-item delete-item';
1395
+ deleteItem.id = 'deleteAvatar';
1396
+ deleteItem.innerText = 'Delete Image';
1397
+ dropdownMenu.insertBefore(deleteItem, dropdownMenu.querySelector('.dropdown-item:last-child'));
1398
+ addDeleteListener(deleteItem);
1399
+ }
1400
+ dropdownMenu.style.display = 'none';
1401
  }
1402
  })
1403
  .catch(error => {
1404
  console.error('Upload error:', error);
1405
+ alert('Error uploading image. Using default image as fallback.');
1406
+ const img = document.createElement('img');
1407
+ img.src = '/static/default-avatar.jpg'; // Fallback image
1408
+ img.alt = 'User Avatar';
1409
+ img.className = 'avatar-image';
1410
+ img.style.cssText = 'width: 100%; height: 100%; object-fit: cover; border-radius: 50%;';
1411
+ avatarIcon.innerHTML = '';
1412
+ avatarIcon.appendChild(img);
1413
+ saveAvatar('/static/default-avatar.jpg');
1414
+ if (!deleteAvatar) {
1415
+ const deleteItem = document.createElement('div');
1416
+ deleteItem.className = 'dropdown-item delete-item';
1417
+ deleteItem.id = 'deleteAvatar';
1418
+ deleteItem.innerText = 'Delete Image';
1419
+ dropdownMenu.insertBefore(deleteItem, dropdownMenu.querySelector('.dropdown-item:last-child'));
1420
+ addDeleteListener(deleteItem);
1421
+ }
1422
+ dropdownMenu.style.display = 'none';
1423
  });
1424
  };
1425
+ reader.onerror = function() {
1426
+ alert('Error reading the image file. Using default image as fallback.');
1427
+ const img = document.createElement('img');
1428
+ img.src = '/static/default-avatar.jpg'; // Fallback image
1429
+ img.alt = 'User Avatar';
1430
+ img.className = 'avatar-image';
1431
+ img.style.cssText = 'width: 100%; height: 100%; object-fit: cover; border-radius: 50%;';
1432
+ avatarIcon.innerHTML = '';
1433
+ avatarIcon.appendChild(img);
1434
+ saveAvatar('/static/default-avatar.jpg');
1435
+ if (!deleteAvatar) {
1436
+ const deleteItem = document.createElement('div');
1437
+ deleteItem.className = 'dropdown-item delete-item';
1438
+ deleteItem.id = 'deleteAvatar';
1439
+ deleteItem.innerText = 'Delete Image';
1440
+ dropdownMenu.insertBefore(deleteItem, dropdownMenu.querySelector('.dropdown-item:last-child'));
1441
+ addDeleteListener(deleteItem);
1442
+ }
1443
+ dropdownMenu.style.display = 'none';
1444
+ };
1445
  reader.readAsDataURL(file);
1446
  }
1447
  });
 
1455
  'Content-Type': 'application/json'
1456
  }
1457
  })
1458
+ .then(response => {
1459
+ if (!response.ok) throw new Error('Delete failed');
1460
+ return response.json();
1461
+ })
1462
  .then(data => {
1463
  if (data.success) {
1464
  clearAvatar();
 
1469
  })
1470
  .catch(error => {
1471
  console.error('Delete error:', error);
1472
+ alert('Error deleting image. Please try again.');
1473
  });
1474
  });
1475
  }