Todorov_Stanimir

01. SoftDo JS Advanced Exam - 07 July 2019

Oct 20th, 2019
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function mySolution() {
  2.     const sendButton = document.getElementsByTagName('button')[0];
  3.     sendButton.addEventListener('click', sendQuestion);
  4.     //test 1 and 2
  5.     function sendQuestion() {
  6.         let inputElement = document.querySelectorAll('#inputSection textarea')[0];
  7.         let userElement = document.querySelectorAll('input[type=username]')[0];
  8.         let question = inputElement.value;
  9.         let userName = userElement.value ? userElement.value : 'Anonymous'
  10.         let divPendingQuestionsElement = document.getElementById('pendingQuestions');
  11.         let newDivElement = document.createElement('div');
  12.         newDivElement.setAttribute('class', 'pendingQuestion');
  13.         let newImgElement = document.createElement('img');
  14.         setAttributes(newImgElement, [['src', './images/user.png'], ['width', '32'], ['height', '32']])
  15.         let newSpanElement = document.createElement('span');
  16.         newSpanElement.textContent = userName;
  17.         let newPElement = document.createElement('p');
  18.         newPElement.textContent = question;
  19.         let newDiv2Element = document.createElement('div');
  20.         newDiv2Element.setAttribute('class', 'actions')
  21.         let buttonElement1 = document.createElement('button');
  22.         buttonElement1.setAttribute('class', 'archive');
  23.         buttonElement1.textContent = 'Archive';
  24.         buttonElement1.addEventListener('click', archiveQuestion)
  25.         let buttonElement2 = document.createElement('button');
  26.         buttonElement2.setAttribute('class', 'open');
  27.         buttonElement2.textContent = 'Open';
  28.         buttonElement2.addEventListener('click', moveQuestionToOpenQuestions)
  29.         appendChilds(newDiv2Element, [buttonElement1, buttonElement2])
  30.         appendChilds(newDivElement, [newImgElement, newSpanElement, newPElement, newDiv2Element])
  31.         divPendingQuestionsElement.appendChild(newDivElement)
  32.         inputElement.value = '';
  33.         userElement.value = '';
  34.     }
  35.     //test 4
  36.     function moveQuestionToOpenQuestions(even) {
  37.         let oldDivElem = even.target.previousElementSibling.parentElement.parentElement
  38.         let newDivElem = oldDivElem.cloneNode(true);
  39.         newDivElem.removeAttribute('class', 'pendingQuestion');
  40.         newDivElem.setAttribute('class', 'openQuestion')
  41.         let button1 = newDivElem.getElementsByTagName('button')[0];
  42.         let button2 = newDivElem.getElementsByTagName('button')[1]
  43.         button1.remove();
  44.         button2.remove()
  45.         let newDiv2Elem = newDivElem.getElementsByTagName('div')[0];
  46.         let newButton = document.createElement('button');
  47.         newButton.setAttribute('class', 'reply');
  48.         newButton.textContent = 'Reply';
  49.         newButton.addEventListener('click', showAndHideDivElem);
  50.         newDiv2Elem.appendChild(newButton);
  51.         let newDiv3Elem = document.createElement('div');
  52.         newDiv3Elem.setAttribute('class', 'replySection');
  53.         newDiv3Elem.style.display = 'none';
  54.         let newInputElem = document.createElement('input');
  55.         setAttributes(newInputElem, [['class', 'replyInput'], ['type', 'text'], ['placeholder', 'Reply to this question here...']])
  56.         newDiv3Elem.appendChild(newInputElem);
  57.         let newButton3Elem = document.createElement('button');
  58.         newButton3Elem.setAttribute('class', 'replyButton');
  59.         newButton3Elem.textContent = 'Send';
  60.         newButton3Elem.addEventListener('click', reply);
  61.         newDiv3Elem.appendChild(newButton3Elem);
  62.         let newOlElem = document.createElement('ol');
  63.         setAttributes(newOlElem, [['class', 'reply'], ['type', '1']])
  64.         newDiv3Elem.appendChild(newOlElem);
  65.         newDivElem.appendChild(newDiv3Elem);
  66.         let openQuestionsElement = document.getElementById('openQuestions');
  67.         openQuestionsElement.appendChild(newDivElem);
  68.         oldDivElem.remove()
  69.     }
  70.     //test 3 and 8
  71.     function archiveQuestion(even) {
  72.         let oldDivElem = even.target.parentElement.parentElement;
  73.         oldDivElem.remove();
  74.     }
  75.     //test 5
  76.     function showAndHideDivElem(even) {
  77.         if (even.target.parentElement.parentElement.getElementsByTagName('div')[1].style.display === 'none') {
  78.             even.target.parentElement.parentElement.getElementsByTagName('div')[1].style.display = 'block';
  79.             even.target.textContent = 'Back';
  80.         } else {
  81.             even.target.parentElement.parentElement.getElementsByTagName('div')[1].style.display = 'none';
  82.             even.target.textContent = 'Reply';
  83.         }
  84.     }
  85.     //test 6, 7 and 9
  86.     function reply(even) {
  87.         let inputElem = even.target.previousElementSibling;
  88.  
  89.         if (inputElem.value !== '') {
  90.             let reply = inputElem.value;
  91.             let olElement = even.target.parentElement.getElementsByTagName('ol')[0];
  92.             let newLiElement = document.createElement('li');
  93.             newLiElement.textContent = reply;
  94.             olElement.appendChild(newLiElement);
  95.             inputElem.value = ''
  96.         }
  97.     }
  98.  
  99.     function appendChilds(parElem, arrChilds) {
  100.         arrChilds.map(el => parElem.appendChild(el));
  101.     }
  102.  
  103.     function setAttributes(htmlElem, arrAtributes) {
  104.         arrAtributes.map(attribute => htmlElem.setAttribute(`${attribute[0]}`, `${attribute[1]}`))
  105.     }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment