geethareddy commited on
Commit
89dc310
·
verified ·
1 Parent(s): 1ca9618

Update templates/menu.html

Browse files
Files changed (1) hide show
  1. templates/menu.html +115 -101
templates/menu.html CHANGED
@@ -470,119 +470,133 @@ form.text-center.mb-4 {
470
  </a>
471
  </div>
472
 
473
- <!-- Modal for Item Details -->
474
- <div class="modal fade" id="itemModal" tabindex="-1" aria-labelledby="itemModalLabel" aria-hidden="true">
475
- <div class="modal-dialog modal-dialog-centered">
476
- <div class="modal-content">
477
- <div class="modal-header">
478
- <h5 class="modal-title" id="itemModalLabel">Item Details</h5>
479
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
480
  </div>
481
- <div class="modal-body">
482
- <!-- Item Image -->
483
- <img id="modal-img" class="img-fluid rounded mb-3 d-block mx-auto" alt="Item Image" style="max-height: 200px; object-fit: cover;">
484
- <!-- Item Name -->
485
- <h5 id="modal-name" class="fw-bold text-center"></h5>
486
- <!-- Item Price -->
487
- <p id="modal-price" class="text-muted text-center"></p>
488
- <!-- Item Description -->
489
- <p id="modal-description" class="text-secondary"></p>
490
- <!-- Add-ons -->
491
- <div id="modal-addons" class="modal-addons mt-4">
492
- <h6>Customization Options</h6>
493
- <div id="addons-list" class="addons-container">Loading customization options...</div>
494
- </div>
495
-
496
-
497
- <div class="mt-4">
498
- <h6>Custom Request</h6>
499
- <textarea id="modal-instructions" class="form-control" placeholder="Enter any special instructions here..."></textarea>
500
- </div>
501
- <span id="modal-section" data-section="" data-category="" style="display: none;"></span>
502
-
503
  </div>
504
- <!-- Quantity Controls and Add to Cart Button -->
505
- <div class="modal-footer d-flex align-items-center justify-content-between">
506
- <!-- Quantity Controls -->
507
- <div class="d-flex align-items-center gap-2">
508
- <button type="button" class="btn btn-outline-secondary" id="decreaseQuantity">-</button>
509
- <input type="text" class="form-control text-center" id="quantityInput" value="1" readonly style="width: 50px;"/>
510
- <button type="button" class="btn btn-outline-secondary" id="increaseQuantity">+</button>
511
- </div>
512
-
513
- <!-- Add to Cart Button -->
514
- <button type="button" class="btn btn-primary" onclick="addToCartFromModal()">Add to Cart</button>
515
- </div>
516
-
517
-
518
  </div>
 
 
519
  </div>
520
  </div>
521
  </div>
 
522
 
523
- <!-- JavaScript -->
524
- <script>
525
- function showItemDetails(name, price, image, description, section, selectedCategory) {
526
- document.getElementById('modal-name').innerText = name;
527
- document.getElementById('modal-price').innerText = `$${price}`;
528
- document.getElementById('modal-img').src = image || '/static/placeholder.jpg';
529
- document.getElementById('modal-description').innerText = description || 'No description available.';
530
- document.getElementById('addons-list').innerHTML = 'Loading customization options...';
531
- document.getElementById('modal-instructions').value = '';
532
-
533
- // Set section and category for reference
534
- const modalSectionEl = document.getElementById('modal-section');
535
- modalSectionEl.setAttribute('data-section', section);
536
- modalSectionEl.setAttribute('data-category', selectedCategory);
537
-
538
- // Set the default quantity to 1
539
- document.getElementById('quantityInput').value = 1;
540
-
541
- // Fetch customization options based on the section
542
- fetch(`/api/addons?item_name=${encodeURIComponent(name)}&item_section=${encodeURIComponent(section)}`)
543
- .then(response => response.json())
544
- .then(data => {
545
- const addonsList = document.getElementById('addons-list');
546
- addonsList.innerHTML = ''; // Clear previous content
547
 
548
- if (!data.success || !data.addons || data.addons.length === 0) {
549
- addonsList.innerHTML = '<p>No customization options available.</p>';
550
- return;
551
- }
552
- // Display customization options inside styled divs
553
- data.addons.forEach(addon => {
554
- const sectionDiv = document.createElement('div');
555
- sectionDiv.classList.add('addon-section'); // Add styling class
556
-
557
- // Add section title
558
- const title = document.createElement('h6');
559
- title.innerText = addon.name;
560
- sectionDiv.appendChild(title);
561
- // Create options list
562
- const optionsContainer = document.createElement('div');
563
- addon.options.forEach((option, index) => {
564
- const optionId = `addon-${addon.name.replace(/\s+/g, '')}-${index}`;
565
- const listItem = document.createElement('div');
566
- listItem.classList.add('form-check');
567
- listItem.innerHTML = `
568
- <input type="checkbox" class="form-check-input addon-option" id="${optionId}" value="${option}"
569
- data-name="${option}" data-price="${addon.extra_charge ? addon.extra_charge_amount : 0}">
570
- <label class="form-check-label" for="${optionId}">
571
- ${option} ${addon.extra_charge ? `($${addon.extra_charge_amount})` : ''}
572
- </label>
573
- `;
574
- optionsContainer.appendChild(listItem);
575
- });
576
- sectionDiv.appendChild(optionsContainer);
577
- addonsList.appendChild(sectionDiv);
 
 
 
 
 
 
578
  });
579
- })
580
- .catch(err => {
581
- console.error('Error fetching add-ons:', err);
582
- document.getElementById('addons-list').innerHTML = '<p>Error loading customization options.</p>';
583
  });
 
 
 
 
 
 
 
 
 
 
 
584
  }
 
585
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
586
  function filterMenu() {
587
  let input = document.getElementById('searchBar').value.toLowerCase(); // Get the value from search bar
588
  let sections = document.querySelectorAll('h3'); // Select section headers
 
470
  </a>
471
  </div>
472
 
473
+ <!-- Modal for Item Details -->
474
+ <div class="modal fade" id="itemModal" tabindex="-1" aria-labelledby="itemModalLabel" aria-hidden="true">
475
+ <div class="modal-dialog modal-dialog-centered">
476
+ <div class="modal-content">
477
+ <div class="modal-header">
478
+ <h5 class="modal-title" id="itemModalLabel">Item Details</h5>
479
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
480
+ </div>
481
+ <div class="modal-body">
482
+ <!-- Item Image -->
483
+ <img id="modal-img" class="img-fluid rounded mb-3 d-block mx-auto" alt="Item Image" style="max-height: 200px; object-fit: cover;">
484
+ <!-- Item Name -->
485
+ <h5 id="modal-name" class="fw-bold text-center"></h5>
486
+ <!-- Item Price -->
487
+ <p id="modal-price" class="text-muted text-center"></p>
488
+ <!-- Item Description -->
489
+ <p id="modal-description" class="text-secondary"></p>
490
+ <!-- Add-ons -->
491
+ <div id="modal-addons" class="modal-addons mt-4">
492
+ <h6>Customization Options</h6>
493
+ <div id="addons-list" class="addons-container">Loading customization options...</div>
494
  </div>
495
+ <div class="mt-4">
496
+ <h6>Custom Request</h6>
497
+ <textarea id="modal-instructions" class="form-control" placeholder="Enter any special instructions here..."></textarea>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
498
  </div>
499
+ <span id="modal-section" data-section="" data-category="" style="display: none;"></span>
500
+ </div>
501
+ <!-- Quantity Controls and Add to Cart Button -->
502
+ <div class="modal-footer d-flex align-items-center justify-content-between">
503
+ <!-- Quantity Controls -->
504
+ <div class="d-flex align-items-center gap-2">
505
+ <button type="button" class="btn btn-outline-secondary" id="decreaseQuantity">-</button>
506
+ <input type="text" class="form-control text-center" id="quantityInput" value="1" readonly style="width: 50px;"/>
507
+ <button type="button" class="btn btn-outline-secondary" id="increaseQuantity">+</button>
 
 
 
 
 
508
  </div>
509
+ <!-- Add to Cart Button -->
510
+ <button type="button" class="btn btn-primary" onclick="addToCartFromModal()">Add to Cart</button>
511
  </div>
512
  </div>
513
  </div>
514
+ </div>
515
 
516
+ <!-- JavaScript -->
517
+ <script>
518
+ // Show item details and fetch customization options
519
+ function showItemDetails(name, price, image, description, section, selectedCategory) {
520
+ document.getElementById('modal-name').innerText = name;
521
+ document.getElementById('modal-price').innerText = `$${price}`;
522
+ document.getElementById('modal-img').src = image || '/static/placeholder.jpg';
523
+ document.getElementById('modal-description').innerText = description || 'No description available.';
524
+ document.getElementById('addons-list').innerHTML = 'Loading customization options...';
525
+ document.getElementById('modal-instructions').value = '';
526
+
527
+ const modalSectionEl = document.getElementById('modal-section');
528
+ modalSectionEl.setAttribute('data-section', section);
529
+ modalSectionEl.setAttribute('data-category', selectedCategory);
 
 
 
 
 
 
 
 
 
 
530
 
531
+ // Fetch customization options based on the section
532
+ fetch(`/api/addons?item_name=${encodeURIComponent(name)}&item_section=${encodeURIComponent(section)}`)
533
+ .then(response => response.json())
534
+ .then(data => {
535
+ const addonsList = document.getElementById('addons-list');
536
+ addonsList.innerHTML = ''; // Clear previous content
537
+
538
+ if (!data.success || !data.addons || data.addons.length === 0) {
539
+ addonsList.innerHTML = '<p>No customization options available.</p>';
540
+ return;
541
+ }
542
+
543
+ // Display customization options inside styled divs
544
+ data.addons.forEach(addon => {
545
+ const sectionDiv = document.createElement('div');
546
+ sectionDiv.classList.add('addon-section'); // Add styling class
547
+
548
+ // Add section title
549
+ const title = document.createElement('h6');
550
+ title.innerText = addon.name;
551
+ sectionDiv.appendChild(title);
552
+
553
+ // Create options list
554
+ const optionsContainer = document.createElement('div');
555
+ addon.options.forEach((option, index) => {
556
+ const optionId = `addon-${addon.name.replace(/\s+/g, '')}-${index}`;
557
+ const listItem = document.createElement('div');
558
+ listItem.classList.add('form-check');
559
+ listItem.innerHTML = `
560
+ <input type="checkbox" class="form-check-input addon-option" id="${optionId}" value="${option}"
561
+ data-name="${option}" data-group="${addon.name}" data-price="${addon.extra_charge ? addon.extra_charge_amount : 0}">
562
+ <label class="form-check-label" for="${optionId}">
563
+ ${option} ${addon.extra_charge ? `($${addon.extra_charge_amount})` : ''}
564
+ </label>
565
+ `;
566
+ optionsContainer.appendChild(listItem);
567
  });
568
+ sectionDiv.appendChild(optionsContainer);
569
+ addonsList.appendChild(sectionDiv);
 
 
570
  });
571
+ })
572
+ .catch(err => {
573
+ console.error('Error fetching add-ons:', err);
574
+ document.getElementById('addons-list').innerHTML = '<p>Error loading customization options.</p>';
575
+ });
576
+ }
577
+
578
+ // Handle single-select/deselect logic for checkbox groups in all modals
579
+ document.addEventListener('click', function(event) {
580
+ if (event.target.classList.contains('addon-option')) {
581
+ handleAddonClick(event.target);
582
  }
583
+ });
584
 
585
+ // Handle checkbox selection logic
586
+ function handleAddonClick(checkbox) {
587
+ const groupName = checkbox.getAttribute('data-group');
588
+ const isMultiSelectGroup = ["Extra Toppings", "Choose Raita/Sides","Select Dip/Sauce","Extra Add-ons","Make it a Combo"].includes(groupName);
589
+
590
+ // If it's not multi-select, uncheck all other checkboxes in the same group
591
+ if (!isMultiSelectGroup) {
592
+ const checkboxes = document.querySelectorAll(`.addon-option[data-group="${groupName}"]`);
593
+ checkboxes.forEach(otherCheckbox => {
594
+ if (otherCheckbox !== checkbox) {
595
+ otherCheckbox.checked = false;
596
+ }
597
+ });
598
+ }
599
+ }
600
  function filterMenu() {
601
  let input = document.getElementById('searchBar').value.toLowerCase(); // Get the value from search bar
602
  let sections = document.querySelectorAll('h3'); // Select section headers