Advertisement
Daniel_007

01. SoftUni Administration

Oct 24th, 2020 (edited)
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve() {
  2.   //Add бутон
  3.   document.querySelector("button").addEventListener("click", add);
  4.  
  5.   function add(element) {
  6.     element.preventDefault();
  7.     //Име на лекцията
  8.     let nameLecture = document.querySelector('[name="lecture-name"]');
  9.     //Дата и час - неформатирано
  10.     let dateLecture = document.querySelector('[name="lecture-date"]');
  11.     //Модул на лекцията
  12.     let moduleLecture = document.querySelector('[name="lecture-module"]');
  13.     //Дата и час - форматиране
  14.     let dateAndTime = dateLecture.value.split("T");
  15.     let dateArray = dateAndTime[0].split("-");
  16.     //Форматирана дата
  17.     let date = dateArray.join("/");
  18.     //Форматирано време
  19.     let time = dateAndTime[1];
  20.  
  21.     //Ако input-ите са валидни
  22.     if (
  23.       nameLecture.value != "" &&
  24.       dateLecture.value != "" &&
  25.       moduleLecture.value != "Select module"
  26.     ) {
  27.       //Взимаме div елемента, който държи всички модули
  28.       let modulesElement = document.querySelector(".modules");
  29.       //Взимаме всички имена на модулите
  30.       let allModules = Array.from(modulesElement.querySelectorAll("h3"));
  31.  
  32.       let foundOne;
  33.       //Проверяваме дали имаме такъв модул вече
  34.       allModules.forEach((element) => {
  35.         if (
  36.           element.innerHTML == `${moduleLecture.value.toUpperCase()}-MODULE`
  37.         ) {
  38.           //Ако имаме, я запазваме
  39.           foundOne = element;
  40.         }
  41.       });
  42.       //Ако сме намерили модула:
  43.       if (foundOne) {
  44.         //Взимаме div елемента на този модул
  45.         let parentDiv = foundOne.parentNode;
  46.         //И неговият unordered list
  47.         let ul = parentDiv.querySelector("ul");
  48.         //Създаваме нов li елемент
  49.         let liElement = document.createElement("li");
  50.         //Със правилния клас flex
  51.         liElement.className = "flex";
  52.         //Слагаме вътре във правилния формат Името на лекцията, датата и времето (заедно с Del бутона);
  53.         liElement.innerHTML += `<h4>${nameLecture.value.toUpperCase()} - ${date} - ${time}</h4>
  54.         <button class ='red'>Del</button>`;
  55.         //Намираме новосъздадения del бутон и му слагаме event listener
  56.         liElement.querySelector("button").addEventListener("click", deleteFun);
  57.         //Взимаме всички li елементи в текущия модул
  58.         let arrayOfLists = Array.from(ul.querySelectorAll("li"));
  59.         //Слагаме default стойност (дължината на масива), в случай че не открием по-ранна дата
  60.         let indexChild = arrayOfLists.length;
  61.         //Брояч
  62.         let counter = 0;
  63.         //Като Breaker на foreach-a
  64.         let tr = false;
  65.         //Сравняваме всички дати в този модул
  66.         arrayOfLists.forEach((liElement) => {
  67.           let string = liElement.querySelector("h4");
  68.           let arrayDate = string.innerHTML.split(" - ");
  69.           //Датата от текущия елемент в листа
  70.           let dateCurrent = Date.parse(arrayDate[1]);
  71.           //Датата на новия елемент
  72.           let newDate = Date.parse(date);
  73.           //Ако датата на новия елемент е по-ранна от текущата:
  74.           if (newDate < dateCurrent) {
  75.             //Запази index-а и блокирай брояча
  76.             indexChild = counter;
  77.             tr = true;
  78.           }
  79.           //Тук контролираме брояча
  80.           if (!tr) {
  81.             counter++;
  82.           }
  83.         });
  84.  
  85.         //Ако indexChild е останал със Default стойността си:
  86.         if (indexChild == arrayOfLists.length) {
  87.           //Добавяме накрая нашия нов елемент
  88.           ul.appendChild(liElement);
  89.         } else {
  90.           //В противен случай, използваме (запазения индекс + 1) и го добавяме преди този елемент
  91.           ul.insertBefore(liElement, ul.childNodes[indexChild + 1]);
  92.         }
  93.  
  94.         //Ако не намерим такъв модул
  95.       } else {
  96.         //Създаваме нов div елемент
  97.         let newDivElement = document.createElement("div");
  98.         //С правилния клас
  99.         newDivElement.className = "module";
  100.         //В който слагаме името на нашия нов модул + лекцията (със съответните ѝ данни)
  101.         newDivElement.innerHTML = `<h3>${moduleLecture.value.toUpperCase()}-MODULE</h3>
  102.           <ul>
  103.               <li class='flex'>
  104.                   <h4>${nameLecture.value} - ${date} - ${time}</h4>
  105.                   <button class ='red'>Del</button>
  106.               </li>
  107.           </ul>`;
  108.         //Намираме новосъдадения бутон Del и му слагаме Event Listener
  109.         newDivElement
  110.           .querySelector("button")
  111.           .addEventListener("click", deleteFun);
  112.         //Намираме div-a, който държи всички модули
  113.         let parentDiv = document.querySelector(".modules");
  114.         //И го закачаме там
  115.         parentDiv.appendChild(newDivElement);
  116.       }
  117.  
  118.       //Изчистваме Input полетата след операциите
  119.       nameLecture.value = "";
  120.       dateLecture.value = "";
  121.       moduleLecture.value = "Select module";
  122.     }
  123.   }
  124.   //Функция за премахване на елементи
  125.   function deleteFun(element) {
  126.     let liParent = element.target.parentNode;
  127.     let ulParent = liParent.parentNode;
  128.     liParent.remove();
  129.     //В случай че няма повече лекции от дадения модул
  130.     if (!ulParent.querySelector("li")) {
  131.       let module = ulParent.parentNode;
  132.       //Изтриваме и модула
  133.       module.remove();
  134.     }
  135.   }
  136. }
  137.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement