Advertisement
kstoyanov

01. Task Manager Exam may 2020

Sep 23rd, 2020
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function taskManager() {
  2.   const makeEl = (type, text, clazz) => {
  3.     const el = document.createElement(type);
  4.     if (text !== null) {
  5.       el.textContent = text;
  6.     }
  7.     if (clazz !== null) {
  8.       el.setAttribute('class', clazz);
  9.     }
  10.     return el;
  11.   };
  12.  
  13.   const addToSection = (section, art) => {
  14.     sectionMap[section].children[1].appendChild(art);
  15.     return art;
  16.   };
  17.  
  18.   const deleteArticle = (e) => {
  19.     const art = e.target.parentNode.parentNode;
  20.     art.remove();
  21.     return art;
  22.   };
  23.  
  24.   const removeButtons = (art) => {
  25.     const btnDiv = art.children[3];
  26.     art.removeChild(btnDiv);
  27.     return art;
  28.   };
  29.  
  30.   const btn = this.document.getElementById('add');
  31.   const sections = document.getElementsByTagName('section');
  32.  
  33.   let sectionMap = {
  34.     open: sections[1],
  35.     inProgress: sections[2],
  36.     complete: sections[3],
  37.   };
  38.  
  39.   btn.addEventListener('click', (e) => {
  40.     e.preventDefault();
  41.  
  42.     const title = document.getElementById('task').value;
  43.     const description = document.getElementById('description').value;
  44.     const date = document.getElementById('date').value;
  45.     const dateRegex = new RegExp('^\\d{4}\\.\\d{2}\\.\\d{2}$');
  46.  
  47.     if (title === '' || description === '' || !dateRegex.test(date)) {
  48.       console.log('Error');
  49.       return;
  50.     }
  51.  
  52.     const art = document.createElement('article');
  53.  
  54.     art.appendChild(makeEl('h3', title, null));
  55.     art.appendChild(makeEl('p', `Description: ${description}`, null));
  56.     art.appendChild(makeEl('p', `Due Date: ${date}`, null));
  57.  
  58.     const btnDiv = makeEl('div', null, 'flex');
  59.     const startBtn = makeEl('button', 'Start', 'green');
  60.  
  61.     startBtn.addEventListener('click', (e) => {
  62.       const artRemove = removeButtons(deleteArticle(e));
  63.       const btnDiv = makeEl('div', null, 'flex');
  64.       const delBtn = makeEl('button', 'Delete', 'red');
  65.  
  66.       delBtn.addEventListener('click', (e) => {
  67.         deleteArticle(e);
  68.       });
  69.  
  70.       btnDiv.appendChild(delBtn);
  71.  
  72.       const finishBtn = makeEl('button', 'Finish', 'orange');
  73.       finishBtn.addEventListener('click', (e) => {
  74.         addToSection('complete', removeButtons(deleteArticle(e)));
  75.       });
  76.  
  77.       btnDiv.appendChild(finishBtn);
  78.       artRemove.appendChild(btnDiv);
  79.       addToSection('inProgress', artRemove);
  80.     });
  81.  
  82.     btnDiv.appendChild(startBtn);
  83.  
  84.     const delBtn = makeEl('button', 'Delete', 'red');
  85.     delBtn.addEventListener('click', (e) => {
  86.       deleteArticle(e);
  87.     });
  88.  
  89.     btnDiv.appendChild(delBtn);
  90.     art.appendChild(btnDiv);
  91.     addToSection('open', art);
  92.   });
  93. }
  94.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement