Sichanov

02.Sprint Planning

Apr 8th, 2023
742
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. window.addEventListener('load', solve);
  2.  
  3. function solve() {
  4.     const title = document.getElementById('title');
  5.     const description = document.getElementById('description');
  6.     const label = document.getElementById('label');
  7.     const points = document.getElementById('points');
  8.     const assignee = document.getElementById('assignee');
  9.     const createTaskBtn = document.getElementById('create-task-btn');
  10.     const deleteTaskBtn = document.getElementById('delete-task-btn');
  11.     const tasksSection = document.getElementById('tasks-section');
  12.     const taskId = document.getElementById('task-id');
  13.     const form = document.getElementById('create-task-form');
  14.     const totalPointsValue = document.getElementById('total-sprint-points')
  15.     let totalPoints = 0;
  16.     let pointsToRemove = 0
  17.     let additionalDivClass = null;
  18.     let tasks = 0;
  19.     let icons = {
  20.         'Feature': '⊡',
  21.         'Low Priority Bug': '☉',
  22.         'High Priority Bug': '⚠',
  23.     };
  24.     // title.value = 'Limonada';
  25.     // description.value = 'Deiba';
  26.     // label.value = 'Low Priority Bug';
  27.     // points.value = '23';
  28.     // assignee.value = 'Pesho';
  29.  
  30.     deleteTaskBtn.disabled = true;
  31.     createTaskBtn.addEventListener('click', createHandler);
  32.  
  33.     function createHandler() {
  34.         if ((title.value !== '') &&
  35.             (description.value !== '') &&
  36.             (label.value !== '') &&
  37.             (points.value !== '') &&
  38.             (assignee.value !== '')) {
  39.             tasks += 1;
  40.             totalPoints += Number(points.value)
  41.             const article = createElement('article', '', tasksSection, `task-${tasks}`, ['task-card']);
  42.             if (label.value === 'Feature') {
  43.                 additionalDivClass = 'feature';
  44.             } else if (label.value === 'Low Priority Bug') {
  45.                 additionalDivClass = 'low-priority';
  46.             } else {
  47.                 additionalDivClass = 'high-priority';
  48.             }
  49.             const divFeature = createElement('div', `${label.value} ${icons[label.value]}`, article, '', ['task-card-label', additionalDivClass], '', 1);
  50.             const h3 = createElement('h3', title.value, article, '', ['task-card-title']);
  51.             const pDesc = createElement('p', description.value, article, '', ['task-card-description']);
  52.             const divPoints = createElement('div', `Estimated at ${points.value} pts`, article, '', ['task-card-points']);
  53.             const divAssignee = createElement('div', `Assigned to: ${assignee.value}`, article, '', ['task-card-assignee']);
  54.             const divActions = createElement('div', '', article, '', ['task-card-actions']);
  55.             const delBtn = createElement('button', 'Delete', divActions);
  56.             title.value = '';
  57.             description.value = '';
  58.             label.value = '';
  59.             points.value = '';
  60.             assignee.value = '';
  61.             totalPointsValue.textContent = `Total Points ${totalPoints}pts`
  62.             delBtn.addEventListener('click', loadDeleteHandler);
  63.         }
  64.     }
  65.  
  66.     function loadDeleteHandler(e) {
  67.         deleteTaskBtn.disabled = false;
  68.         createTaskBtn.disabled = true;
  69.         const element = e.currentTarget.parentNode.parentNode;
  70.         const id = element.id;
  71.         const labelElement = element.children[0].classList[1];
  72.         title.value = element.children[1].textContent;
  73.         description.value = element.children[2].textContent;
  74.         if (labelElement === 'feature') {
  75.             label.value = 'Feature';
  76.         } else if (labelElement === 'low-priority') {
  77.             label.value = 'Low Priority Bug';
  78.         } else {
  79.             label.value = 'High Priority Bug';
  80.         }
  81.         points.value = element.children[3].textContent.split(' ')[2];
  82.         assignee.value = element.children[4].textContent.split('Assigned to: ')[1];
  83.         title.disabled = true;
  84.         description.disabled = true;
  85.         points.disabled = true;
  86.         label.disabled = true;
  87.         assignee.disabled = true;
  88.         taskId.value = id;
  89.  
  90.         pointsToRemove = points.value
  91.         deleteTaskBtn.addEventListener('click', delHandler);
  92.     }
  93.  
  94.     function delHandler(e) {
  95.         // Reset form
  96.         form.reset();
  97.         // Reset label field
  98.         e.currentTarget.parentNode.parentNode.children[3].children[1].value = '';
  99.         // Remove DOM element
  100.         document.getElementById(taskId.value).remove();
  101.         taskId.removeAttribute('value')
  102.         title.disabled = false;
  103.         description.disabled = false;
  104.         points.disabled = false;
  105.         label.disabled = false;
  106.         assignee.disabled = false;
  107.  
  108.         createTaskBtn.disabled = false;
  109.         deleteTaskBtn.disabled = true;
  110.         totalPoints -= pointsToRemove
  111.         totalPointsValue.textContent = `Total Points ${totalPoints}pts`
  112.  
  113.  
  114.  
  115.     }
  116.  
  117.     function createElement(type, content, parentNode, id, classes, attributes, useInnerHtml) {
  118.         const htmlElement = document.createElement(type);
  119.  
  120.  
  121.         if (content && useInnerHtml) {
  122.             htmlElement.innerHTML = content;
  123.         } else {
  124.             if (content && type !== 'input') {
  125.                 htmlElement.textContent = content;
  126.             }
  127.             if (content && type === 'input') {
  128.                 htmlElement.value = content;
  129.             }
  130.         }
  131.  
  132.         if (id) {
  133.             htmlElement.id = id;
  134.         }
  135.  
  136.         if (classes) {
  137.             htmlElement.classList.add(...classes);
  138.         }
  139.  
  140.         if (parentNode) {
  141.             parentNode.appendChild(htmlElement);
  142.         }
  143.  
  144.         if (attributes) {
  145.             for (const key in attributes) {
  146.                 htmlElement.setAttribute(key, attributes[key]);
  147.             }
  148.         }
  149.         return htmlElement;
  150.     }
  151. }
Advertisement
Add Comment
Please, Sign In to add comment