Liliana797979

1_js advanced exam

Oct 12th, 2021
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve() {
  2.  
  3.     let addBtn = document.querySelector('.form-control button');
  4.     let lectureNameEl = document.querySelector('input[name="lecture-name"]');
  5.     let dateEl = document.querySelector('input[name="lecture-date"]');
  6.     let selectEl = document.querySelector('.form-control > select');
  7.  
  8.     let training = document.querySelector('.modules');
  9.  
  10.  
  11.     addBtn.addEventListener('click', function (e) {
  12.         e.preventDefault();
  13.         let modules = [...document.querySelectorAll('.modules h3')];
  14.  
  15.      
  16.  
  17.         if (lectureNameEl.value === '' || dateEl.value === '' || selectEl.value === 'Select module') { return; }
  18.  
  19.         let lectureName = lectureNameEl.value;
  20.         let date = dateEl.value;
  21.         let currentModuleName = selectEl.value;
  22.  
  23.         date = date.replace('-', '/');
  24.         date = date.replace('-', '/');
  25.         date = date.replace('T', ' - ');
  26.  
  27.  
  28.         let module = modules.find(mod => mod.textContent.includes(currentModuleName.toUpperCase()));
  29.  
  30.         if (module === undefined) {
  31.             module = el('div', [
  32.                 el('h3', `${currentModuleName.toUpperCase()}-MODULE`)
  33.             ], { className: 'module' }) // end div;
  34.  
  35.             let delBtn = el('button', 'Del', { className: 'red' });
  36.             delBtn.addEventListener('click', deleteElement);
  37.  
  38.             let ul = el('ul');
  39.             let li = el('li', [
  40.                 el('h4', `${lectureName} - ${date}`),
  41.                 delBtn
  42.             ], { className: 'flex' });
  43.  
  44.             ul.appendChild(li);
  45.             module.appendChild(ul);
  46.             training.appendChild(module);
  47.         } else {
  48.             let div = module.parentElement;
  49.             let delBtn = el('button', 'Del', { className: 'red' });
  50.             delBtn.addEventListener('click', deleteElement);
  51.  
  52.             let ul = div.querySelector('ul');
  53.  
  54.             let li = el('li', [
  55.                 el('h4', `${ lectureName } - ${ date }`),
  56.                 delBtn
  57.             ], { className: 'flex' });
  58.             ul.appendChild(li);
  59.             div.appendChild(ul);
  60.         }
  61.  
  62.         [...document.querySelectorAll('.modules ul')]
  63.         .forEach(u => {
  64.             let li = [...u.querySelectorAll('li')].sort((a, b) => {
  65.  
  66.                 let startIndexA = a.textContent.indexOf(' ');
  67.                 let startIndexB = b.textContent.indexOf(' ');
  68.                 let tempA = a.textContent.substr(startIndexA);
  69.                 let tempB = b.textContent.substr(startIndexB);
  70.  
  71.                 return tempA.localeCompare(tempB); })
  72.                 .forEach(l => u.appendChild(l));
  73.         })
  74.        
  75.        
  76.  
  77.         function deleteElement(e) {
  78.             let li = e.target.parentElement;
  79.             let ul = li.parentElement;
  80.             li.remove();
  81.             let ulArr = [...ul.querySelectorAll('li')];
  82.             if (ulArr.length === 0) { ul.parentElement.remove() }
  83.         } // end deleteElement;
  84.  
  85.     }) // end addBtn;
  86.  
  87.     function el(type, node, attributes) {
  88.         let element = document.createElement(type);
  89.         if (node == undefined) { return element; }
  90.  
  91.         if (attributes !== undefined) {
  92.             Object.assign(element, attributes);
  93.         }
  94.  
  95.         if (Array.isArray(node)) {
  96.             node.forEach(e => appendEl(e));
  97.         } else {
  98.             appendEl(node);
  99.         }
  100.  
  101.         function appendEl(currentNode) {
  102.             if (typeof currentNode == 'string' || typeof currentNode == 'number') {
  103.                 element.innerText = currentNode;
  104.                 return;
  105.             }
  106.             element.appendChild(currentNode);
  107.         } // end appendEl;
  108.         return element;
  109.     } // end el;
  110.  
  111. };
Advertisement
Add Comment
Please, Sign In to add comment