why_where_what

SoftUni Administration Exam Prep 12.02.2021

Feb 19th, 2021 (edited)
371
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve() {
  2.     let addButton = document.querySelector('.admin-view.section-view .action > form > div > button');
  3.     addButton.addEventListener('click', addLecture);
  4.  
  5.     let lectureDateDefaultValue = document.querySelector('.admin-view.section-view .action input[name="lecture-date"]').value;
  6.  
  7.     function addLecture(event) {
  8.         event.preventDefault();
  9.  
  10.         let lectureName = document.querySelector('.admin-view.section-view .action input[name="lecture-name"]');
  11.         let lectureDate = document.querySelector('.admin-view.section-view .action input[name="lecture-date"]');
  12.         let module = document.querySelector('.admin-view.section-view .action select[name="lecture-module"]');
  13.  
  14.         if (lectureName.value === '' ||
  15.             lectureDate.value === '' ||
  16.             module.value.toLowerCase() === 'select module'.toLowerCase()) {
  17.             return;
  18.         }
  19.  
  20.         let formattedDateTime = getFormattedDate(lectureDate.value);
  21.  
  22.         let h4 = document.createElement('h4');
  23.         h4.textContent = lectureName.value + ' - ' + formattedDateTime;
  24.  
  25.         let delButton = document.createElement('button');
  26.         delButton.classList.add('red');
  27.         delButton.textContent = 'Del';
  28.         delButton.addEventListener('click', deleteLecture);
  29.  
  30.         let li = document.createElement('li');
  31.         li.classList.add('flex');
  32.         li.appendChild(h4);
  33.         li.appendChild(delButton);
  34.  
  35.         let ul = document.createElement('ul');
  36.         ul.appendChild(li);
  37.  
  38.         let allModules = Array.from(document.querySelectorAll('div.module'));
  39.         let currentModule = allModules.find(x => x.querySelector('h3').textContent.toUpperCase() === module.value.toUpperCase() + '-MODULE');
  40.  
  41.         // If current module exists - add the new lecture to it, then sort all lectures
  42.         // and replace the UL with the sorted lectures
  43.         if (currentModule !== null &&
  44.             currentModule !== undefined) {
  45.             let currentUl = currentModule.querySelector('ul');
  46.             currentUl.appendChild(li);
  47.  
  48.             let listItemsArray = Array.from(currentModule.querySelectorAll('li'));
  49.  
  50.             listItemsArray.sort(function (a, b) {
  51.                 let aH4 = a.querySelector('h4').textContent;
  52.                 let tokensA = aH4.split(' - ');
  53.                 let dateA = tokensA[1];
  54.                 let timeA = tokensA[2];
  55.  
  56.                 let bH4 = b.querySelector('h4').textContent;
  57.                 let tokensB = bH4.split(' - ');
  58.                 let dateB = tokensB[1];
  59.                 let timeB = tokensB[2];
  60.  
  61.                 return convertDate(dateA, timeA) - convertDate(dateB, timeB);
  62.             });
  63.  
  64.             currentUl.innerHTML = '';
  65.  
  66.             for (const listItemsArrayElement of listItemsArray) {
  67.                 currentUl.appendChild(listItemsArrayElement);
  68.             }
  69.  
  70.         } else { // Otherwise create a new module with the lecture in it
  71.             let newModule = document.createElement('div');
  72.             newModule.classList.add('module');
  73.  
  74.             let h3 = document.createElement('h3');
  75.             h3.textContent = module.options[module.selectedIndex].value.toUpperCase() + '-MODULE';
  76.  
  77.             newModule.appendChild(h3);
  78.             newModule.appendChild(ul);
  79.  
  80.             let modules = document.querySelector('div.modules');
  81.             modules.appendChild(newModule);
  82.         }
  83.  
  84.         lectureName.value = '';
  85.         lectureDate.value = lectureDateDefaultValue;
  86.         module = module.options[0].selected = 'selected';
  87.     }
  88.  
  89.     function deleteLecture(event) {
  90.         event.preventDefault();
  91.  
  92.         let listItemCount = event.target.parentNode.parentNode.querySelectorAll('li').length;
  93.  
  94.         // If there's only 1 lecture in the list - delete the whole Module
  95.         // or else - only the current lecture
  96.         if (listItemCount === 1) {
  97.             event.target.parentNode.parentNode.parentNode.remove();
  98.         } else {
  99.             event.target.parentNode.remove();
  100.         }
  101.     }
  102.  
  103.     function getFormattedDate(inputDate) {
  104.         // Put leading zeros where number is a single digit
  105.         let dateTime = new Date(inputDate);
  106.         let month = (dateTime.getMonth() + 1).toString().length === 1 ? `0${dateTime.getMonth() + 1}` : dateTime.getMonth() + 1;
  107.         let date = dateTime.getDate().toString().length === 1 ? `0${dateTime.getDate()}` : dateTime.getDate();
  108.         let hours = dateTime.getHours().toString().length === 1 ? `0${dateTime.getHours()}` : dateTime.getHours();
  109.         let minutes = dateTime.getMinutes().toString().length === 1 ? `0${dateTime.getMinutes()}` : dateTime.getMinutes();
  110.  
  111.         return `${dateTime.getFullYear()}/${month}/${date} - ${hours}:${minutes}`;
  112.     }
  113.  
  114.     function convertDate(d, t) {
  115.         let date = d.split('/');
  116.         let time = t.split(':');
  117.  
  118.         // Concatenate all strings and convert them to a single number(same as Number(x))
  119.         return +(date[0] + date[1] + date[2] + time[0] + time[1]);
  120.     }
  121. }
  122.  
Add Comment
Please, Sign In to add comment