Advertisement
Todorov_Stanimir

07. Bug Tracker Exercise: Object Composition

Nov 3rd, 2019
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function bugTracker() {
  2.  
  3.     let obj = (() => {
  4.         let id = 0;
  5.         let bugs = [];
  6.         let selector = undefined;
  7.         let report = function (author, description, reproducible, severity) {
  8.             id++;
  9.             let newBug = {
  10.                 ID: id,
  11.                 author: String(author),
  12.                 description: String(description),
  13.                 reproducible: reproducible,
  14.                 severity: Number(severity),
  15.                 status: 'Open'
  16.             }
  17.             bugs.push(newBug);
  18.             this.sort('ID');
  19.             if (selector) {
  20.                 draw();
  21.             }
  22.         }
  23.  
  24.         let setStatus = function (id, newStatus) {
  25.  
  26.             bugs.forEach(bug => { if (bug.ID === id) { bug.status = newStatus } });
  27.  
  28.             if (selector) {
  29.                 draw();
  30.             }
  31.         };
  32.  
  33.         let remove = function (id) {
  34.  
  35.             let index = bugs.findIndex(el => el.ID === Number(id));
  36.  
  37.             if (index !== -1) {
  38.                 bugs.splice(index, 1);
  39.                 this.sort('ID')
  40.             }
  41.  
  42.             if (selector) {
  43.                 draw();
  44.             }
  45.         };
  46.         let sort = function (method) {
  47.             if (method === 'ID' || method === 'severity') {
  48.                 bugs.sort((a, b) => a[`${method}`] - b[`${method}`]);
  49.             } else {
  50.                 bugs.sort((a, b) => a[`${method}`].localeCompare(b[`${method}`]));
  51.             }
  52.  
  53.             console.log(bugs)
  54.  
  55.             if (selector) {
  56.                 draw();
  57.             }
  58.         };
  59.  
  60.         let output = function (select) {
  61.             selector = select;
  62.         };
  63.  
  64.         let draw = function () {
  65.             let parentElem = document.querySelector(`${selector}`);
  66.             parentElem.innerHTML = '';
  67.             bugs.forEach(bug => {
  68.                 let divElReport = document.createElement('div');
  69.                 let divElBody = document.createElement('div');
  70.                 let pElDescription = document.createElement('p');
  71.                 let divElTitle = document.createElement('div');
  72.                 let spanElAuthor = document.createElement('span');
  73.                 let spanElStatus = document.createElement('span');
  74.  
  75.                 divElReport.setAttribute("id", `report_${bug.ID}`);
  76.                 divElReport.setAttribute("class", "report");
  77.                 divElBody.setAttribute("class", "body");
  78.                 pElDescription.textContent = `${bug.description}`;
  79.                 divElTitle.setAttribute("class", "title");
  80.                 spanElAuthor.setAttribute("class", "author");
  81.                 spanElAuthor.textContent = `Submitted by: ${bug.author}`;
  82.                 spanElStatus.setAttribute("class", "status");
  83.                 spanElStatus.textContent = `${bug.status} | ${bug.severity}`;
  84.  
  85.                 divElBody.appendChild(pElDescription);
  86.                 divElReport.appendChild(divElBody);
  87.                 divElTitle.appendChild(spanElAuthor);
  88.                 divElTitle.appendChild(spanElStatus);
  89.                 divElReport.appendChild(divElTitle);
  90.  
  91.                 parentElem.appendChild(divElReport);
  92.             })
  93.         };
  94.  
  95.         return { report, setStatus, remove, sort, output }
  96.     })();
  97.     return obj
  98. }
  99.  
  100. //HTML
  101.  
  102. <!DOCTYPE html>
  103. <html lang="en">
  104.  
  105. <head>
  106.     <meta charset="UTF-8">
  107.     <title>Bug Tracker</title>
  108.     <link rel="stylesheet" href="./styles.css">
  109. </head>
  110.  
  111. <body>
  112.     <div id="wrapper">
  113.         <div id="titlebar">Bug tracker</div>
  114.         <div id="content">
  115.             <div class="report">
  116.                 <div class="body">
  117.                     <p>Description</p>
  118.                 </div>
  119.                 <div class="title">
  120.                     <span class="author">Submitted by: Author</span>
  121.                     <span class="status">Open | 5</span>
  122.                 </div>
  123.             </div>
  124.             <div class="report">
  125.                 <div class="body">
  126.                     <p>Description</p>
  127.                 </div>
  128.                 <div class="title">
  129.                     <span class="author">Submitted by: Author</span>
  130.                     <span class="status">Open | 5</span>
  131.                 </div>
  132.             </div>
  133.             <div class="report">
  134.                 <div class="body">
  135.                     <p>Description</p>
  136.                 </div>
  137.                 <div class="title">
  138.                     <span class="author">Submitted by: Author</span>
  139.                     <span class="status">Open | 5</span>
  140.                 </div>
  141.             </div>
  142.         </div>
  143.     </div>
  144.     <script src="./app.js"></script>
  145.     <script>
  146.         let tracker = bugTracker();
  147.         tracker.output('#content');
  148.         tracker.report('second guy', 'report content 2', true, 3);
  149.         tracker.report('kiwi', 'judge rip', true, 5);
  150.         tracker.report('abv', 'report content three', true, 4);
  151.         tracker.report('abv2', 'report content three2', true, 5);
  152.         tracker.remove(1);
  153.         tracker.sort('author')
  154.     </script>
  155. </body>
  156.  
  157. </html>
  158.  
  159. //Error in judge: Unexpected error: Report body wasn't filled.: expected '' to include 'judge rip'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement