Advertisement
Guest User

kue

a guest
Jul 26th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* globals module, document, HTMLElement, console */
  2.  
  3. function solve() {
  4.     return function (selector, isCaseSensitive) {
  5.         var root = document.querySelector(selector),
  6.  
  7.             // Add div
  8.             addingDiv = document.createElement('div'),
  9.             addingInput = document.createElement('input'),
  10.             addingLabel = document.createElement('label'),
  11.             addingButton = document.createElement('button'),
  12.             searchElementDiv = document.createElement('div'),
  13.             searchLabel = document.createElement('label'),
  14.             searchInput = document.createElement('input'),
  15.             resultDiv = document.createElement('div'),
  16.             resultUl = document.createElement('ul');
  17.  
  18.  
  19.         addingDiv.className = 'add-controls';
  20.         isCaseSensitive = !!isCaseSensitive;
  21.  
  22.         addingDiv.appendChild(addingLabel);
  23.         addingLabel.innerHTML = 'Enter text:';
  24.         addingDiv.appendChild(addingInput);
  25.  
  26.         addingDiv.appendChild(addingButton);
  27.         addingButton.className = 'button';
  28.         addingButton.innerHTML = 'Add';
  29.         root.appendChild(addingDiv);
  30.  
  31.         addingButton.addEventListener('click', function () {
  32.             var li = document.createElement('li'),
  33.                 xButton = document.createElement('button');
  34.  
  35.             li.className = 'list-item';
  36.             li.innerHTML = addingInput.value;
  37.  
  38.             xButton.className = 'button';
  39.             xButton.innerHTML = 'X';
  40.  
  41.             li.appendChild(xButton);
  42.             resultUl.appendChild(li);
  43.         });
  44.  
  45.         // Search div
  46.  
  47.         searchElementDiv.className = 'search-controls';
  48.         searchElementDiv.appendChild(searchLabel);
  49.         searchLabel.innerHTML = 'Search';
  50.         searchElementDiv.appendChild(searchInput);
  51.  
  52.         root.appendChild(searchElementDiv);
  53.  
  54.         searchInput.addEventListener('input', function () {
  55.             var child = resultUl.getElementsByTagName('li'),
  56.                 len = child.length,
  57.                 search = searchInput.value, i;
  58.  
  59.             search = search.replace(/\s\s+/g, ' ');
  60.             if (!isCaseSensitive) {
  61.                 search = search.toLowerCase();
  62.  
  63.                 // TODO: Regex for Test A
  64.  
  65.                 for (i = 0; i < len; i += 1) {
  66.                     if (child[i].innerHTML.toLowerCase().includes(search)) {
  67.                         child[i].style.display = '';
  68.                     }
  69.                     else {
  70.                         child[i].style.display = 'none';
  71.                     }
  72.                 }
  73.             }
  74.             else {
  75.                 for (i = 0; i < len; i += 1) {
  76.                     if (child[i].innerHTML.includes(search)) {
  77.                         child[i].style.display = '';
  78.                     }
  79.                     else {
  80.                         child[i].style.display = 'none';
  81.                     }
  82.                 }
  83.             }
  84.  
  85.         }, false);
  86.  
  87.         // Result div
  88.         resultDiv.className = 'result-controls';
  89.         resultDiv.appendChild(resultUl);
  90.         resultUl.className = 'items-list';
  91.  
  92.         root.appendChild(resultDiv);
  93.  
  94.         resultUl.addEventListener('click', function (ev) {
  95.             var buttonClicked = ev.target,
  96.                 li = buttonClicked.parentElement;
  97.  
  98.             li.parentElement.removeChild(li);
  99.         });
  100.     };
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement