Advertisement
Btwonu

Mom's spaghetti

Oct 26th, 2020
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve() {
  2.   // get sections
  3.   const userSect = document.querySelector('.user-view');
  4.   const adminSect = document.querySelector('.admin-view');
  5.  
  6.   // get training-modules div
  7.   const trainingModulesDiv = userSect.querySelector('.modules');
  8.  
  9.   // get form
  10.   const adminForm = adminSect.querySelector('form');
  11.   // get addBtn
  12.   const addBtn = adminForm.querySelector('button');
  13.  
  14.   // get form inputs
  15.   const inputs = Array.from(adminForm.querySelectorAll('input'));
  16.   // get select
  17.   const select = adminForm.querySelector('select');
  18.  
  19.   // listen for clicks on addBtn
  20.   addBtn.addEventListener('click', addModule);
  21.  
  22.   // Helper functions
  23.   function createEle(type, text, cl) {
  24.     const ele = document.createElement(type);
  25.  
  26.     if (text) {
  27.       ele.textContent = text;
  28.     }
  29.  
  30.     if (cl) {
  31.       ele.classList.add(cl);
  32.     }
  33.  
  34.     return ele;
  35.   }
  36.  
  37.   // Declarations
  38.   function addModule(e) {
  39.     // when addBtn is clicked
  40.     e.preventDefault();
  41.  
  42.     // map values
  43.     const lecture = {
  44.       name: inputs[0].value,
  45.       date: inputs[1].value,
  46.       module: select.value,
  47.     };
  48.  
  49.     // validate inputs: empty or default values
  50.     const notValid = () =>
  51.       lecture.name == '' ||
  52.       lecture.date == '' ||
  53.       lecture.module === 'Select module';
  54.  
  55.     if (notValid()) {
  56.       return;
  57.     }
  58.  
  59.     // extract date
  60.     let [eDate, eTime] = lecture.date.split('T');
  61.     eDate = eDate.split('-').join('/');
  62.  
  63.     // create elements
  64.     const moduleDiv = createEle('div', '', 'module');
  65.     const moduleTitle = createEle(
  66.       'h3',
  67.       `${lecture.module.toUpperCase()}-MODULE`
  68.     );
  69.  
  70.     const ul = createEle('ul');
  71.     const flexLi = createEle('li', '', 'flex');
  72.     const lectureTitle = createEle(
  73.       'h4',
  74.       `${lecture.name} - ${eDate} - ${eTime}`
  75.     );
  76.     const deleteBtn = createEle('button', 'Del', 'red');
  77.  
  78.     // structure elements
  79.     flexLi.appendChild(lectureTitle);
  80.     flexLi.appendChild(deleteBtn);
  81.     ul.appendChild(flexLi);
  82.  
  83.     let currentModule = moduleTitle.textContent.split('-')[0];
  84.     moduleDiv.setAttribute('data-module', currentModule);
  85.  
  86.     // iterate over all existing modules
  87.     let existingModule = false;
  88.     let allModules = Array.from(trainingModulesDiv.children);
  89.  
  90.     allModules.forEach((module) => {
  91.       let moduleName = module.attributes['data-module'].value;
  92.  
  93.       if (moduleName == currentModule) {
  94.         let currentUl = module.querySelector('ul');
  95.         currentUl.appendChild(flexLi);
  96.  
  97.         let sortedLis = sortListItems(currentUl);
  98.         const ul = document.createElement('ul');
  99.  
  100.         sortedLis.forEach((li) => {
  101.           ul.appendChild(li);
  102.         });
  103.  
  104.         currentUl.parentNode.replaceChild(ul, currentUl);
  105.         existingModule = true;
  106.       }
  107.     });
  108.  
  109.     if (!existingModule) {
  110.       moduleDiv.appendChild(moduleTitle);
  111.       moduleDiv.appendChild(ul);
  112.       trainingModulesDiv.appendChild(moduleDiv);
  113.     }
  114.  
  115.     // append elements
  116.  
  117.     // click on delete
  118.     deleteBtn.addEventListener('click', (e) => {
  119.       let btn = e.currentTarget;
  120.       let listItem = btn.parentElement;
  121.       let ulEl = listItem.parentElement;
  122.       let moduleDiv = ulEl.parentElement;
  123.  
  124.       listItem.remove();
  125.       let listItemsArr = Array.from(ulEl.querySelectorAll('li'));
  126.  
  127.       if (listItemsArr.length == 0) {
  128.         moduleDiv.remove();
  129.       }
  130.     });
  131.   }
  132.  
  133.   function sortListItems(ulElement) {
  134.     const listItemsArr = Array.from(ulElement.querySelectorAll('li'));
  135.  
  136.     listItemsArr.sort((a, b) => {
  137.       let [fuseless, fDate, fTime] = a.firstChild.innerText.split(' - ');
  138.       let [suseless, sDate, sTime] = b.firstChild.innerText.split(' - ');
  139.  
  140.       let firstDateString = `${fDate.split('/').join('-')}T${fTime}`;
  141.       let secondDateString = `${sDate.split('/').join('-')}T${sTime}`;
  142.  
  143.       return new Date(firstDateString) - new Date(secondDateString);
  144.     });
  145.  
  146.     return listItemsArr;
  147.   }
  148. }
  149.  
  150. // function test() {
  151. //   let elements = {
  152. //     form: document.getElementsByTagName('form')[0],
  153. //     name: document.querySelector('input[name="lecture-name"]'),
  154. //     date: document.querySelector('input[name="lecture-date"]'),
  155. //     module: document.querySelector('select[name="lecture-module"]'),
  156. //     addBtn: document.querySelector('form button'),
  157. //     modulesDiv: document.querySelector('.modules'),
  158. //     moduleList: () => Array.from(document.querySelectorAll('.module')),
  159. //     listItems: () => Array.from(document.querySelectorAll('.flex')),
  160. //   };
  161.  
  162. //   console.log(Array.from(document.querySelectorAll('.module')));
  163. //   debugger;
  164.  
  165. //   elements.name.value = 'DOM';
  166. //   elements.date.value = '2020-09-28T18:00';
  167. //   elements.module.value = 'Advanced';
  168. //   console.log(Array.from(document.querySelectorAll('.module')));
  169.  
  170. //   elements.addBtn.click();
  171. //   console.log(Array.from(document.querySelectorAll('.module')));
  172.  
  173. //   // assert.equal(elements.moduleList()[0].children[0].textContent, 'ADVANCED-MODULE', 'Module name incorrect');
  174.  
  175. //   elements.name.value = 'Arrays';
  176. //   elements.date.value = '2020-09-17T18:00';
  177. //   elements.module.value = 'Advanced';
  178.  
  179. //   debugger;
  180. //   elements.addBtn.click();
  181. //   console.log(Array.from(document.querySelectorAll('.module')));
  182. //   console.log('should be 1: ', elements.moduleList().length);
  183. // }
  184. // test();
  185.  
  186. // assert.equal(elements.moduleList().length, 1, 'Incorrect amount of modules');
  187. // assert.equal(elements.listItems()[0].children[0].textContent, 'Arrays - 2020/09/17 - 18:00', 'Incorrect lecture appended');
  188.  
  189. elements.name.value = 'Arrays';
  190. elements.date.value = '2020-09-30T18:30';
  191. elements.module.value = 'Fundamentals';
  192.  
  193. elements.addBtn.click();
  194.  
  195. // assert.equal(elements.listItems()[0].children[1].className, 'red', 'Incorrect className');
  196.  
  197. // function solve() {
  198. //   const lectureNameInput = document.querySelector('input[name="lecture-name"]');
  199. //   const lectureDateInput = document.querySelector('input[name="lecture-date"]');
  200. //   const lectureModuleSelect = document.querySelector(
  201. //     'select[name="lecture-module"]'
  202. //   );
  203. //   const addBtn = document.querySelector('form').querySelector('button');
  204. //   const modulesDiv = document.querySelector('.modules');
  205. //   const dateDefaultValue = lectureDateInput.value;
  206. //   const addedModules = [];
  207.  
  208. //   function addListItemElement() {
  209. //     const liEl = document.createElement('li');
  210. //     liEl.classList.add('flex');
  211.  
  212. //     let [date, time] = lectureDateInput.value.split('T');
  213. //     date = date.split('-').join('/');
  214.  
  215. //     const lectureDate = document.createElement('h4');
  216. //     lectureDate.innerText = `${lectureNameInput.value} - ${date} - ${time}`;
  217.  
  218. //     const deleteButton = document.createElement('button');
  219. //     deleteButton.classList.add('red');
  220. //     deleteButton.innerText = 'Del';
  221.  
  222. //     liEl.appendChild(lectureDate);
  223. //     liEl.appendChild(deleteButton);
  224.  
  225. //     deleteButton.addEventListener('click', (e) => {
  226. //       let btn = e.currentTarget;
  227. //       let listItem = btn.parentElement;
  228. //       let ulEl = listItem.parentElement;
  229. //       let moduleDiv = ulEl.parentElement;
  230.  
  231. //       listItem.remove();
  232. //       let listItemsArr = Array.from(ulEl.querySelectorAll('li'));
  233.  
  234. //       if (listItemsArr.length == 0) {
  235. //         moduleDiv.remove();
  236. //       }
  237. //     });
  238.  
  239. //     return liEl;
  240. //   }
  241.  
  242. //   function sortListItems(ulElement) {
  243. //     const listItemsArr = Array.from(ulElement.querySelectorAll('li'));
  244.  
  245. //     listItemsArr.sort((a, b) => {
  246. //       let [fuseless, fDate, fTime] = a.firstChild.innerText.split(' - ');
  247. //       let [suseless, sDate, sTime] = b.firstChild.innerText.split(' - ');
  248.  
  249. //       let firstDateString = `${fDate.split('/').join('-')}T${fTime}`;
  250. //       let secondDateString = `${sDate.split('/').join('-')}T${sTime}`;
  251.  
  252. //       return new Date(firstDateString) - new Date(secondDateString);
  253. //     });
  254.  
  255. //     ulElement.innerHTML = '';
  256. //     listItemsArr.forEach((item) => ulElement.appendChild(item));
  257. //   }
  258.  
  259. //   addBtn.addEventListener('click', (e) => {
  260. //     e.preventDefault();
  261.  
  262. //     debugger;
  263. //     let lectureNameCheck = lectureNameInput.value != '';
  264. //     let lectureDateCheck = lectureDateInput.value != dateDefaultValue;
  265. //     let lectureModuleCheck = lectureModuleSelect.value != 'Select module...';
  266.  
  267. //     if (lectureNameCheck && lectureDateCheck && lectureModuleCheck) {
  268. //       if (addedModules.includes(lectureModuleSelect.value)) {
  269. //         let moduleDivEl;
  270. //         const modulesArr = Array.from(modulesDiv.querySelectorAll('div'));
  271.  
  272. //         for (let module of modulesArr) {
  273. //           if (
  274. //             module.firstChild.innerText ==
  275. //             `${lectureModuleSelect.value.toUpperCase()}-MODULE`
  276. //           ) {
  277. //             moduleDivEl = module;
  278. //             break;
  279. //           }
  280. //         }
  281.  
  282. //         const liEl = addListItemElement();
  283. //         const ulEl = moduleDivEl.querySelector('ul');
  284. //         ulEl.appendChild(liEl);
  285. //         sortListItems(ulEl);
  286. //       } else {
  287. //         const moduleEl = document.createElement('div');
  288. //         moduleEl.classList.add('module');
  289.  
  290. //         const heading = document.createElement('h3');
  291. //         heading.innerText = `${lectureModuleSelect.value.toUpperCase()}-MODULE`;
  292. //         addedModules.push(lectureModuleSelect.value);
  293.  
  294. //         const ulEl = document.createElement('ul');
  295. //         const liEl = addListItemElement();
  296.  
  297. //         ulEl.appendChild(liEl);
  298. //         moduleEl.appendChild(heading);
  299. //         moduleEl.appendChild(ulEl);
  300. //         modulesDiv.appendChild(moduleEl);
  301. //       }
  302. //     }
  303. //   });
  304. // }
  305.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement