Guest User

Untitled

a guest
Nov 13th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. class Todo {
  2.  
  3. constructor() {
  4. let self = this;
  5.  
  6. this.list = document.querySelector('.list-items');
  7. this.render();
  8.  
  9. document.querySelector('.btn-add-item').addEventListener('click', this.create.bind(this));
  10. // step to add event listener to update item.
  11. document.querySelector('.btn-update').addEventListener('click', this.update.bind(this));
  12.  
  13. document.addEventListener('click', event => {
  14. if (event.target.classList.contains('btn-delete')) {
  15. self.remove(event);
  16. }
  17.  
  18. if (event.target.classList.contains('btn-edit')) {
  19. self.renderEditForm(event);
  20. }
  21. });
  22. }
  23.  
  24. renderEditForm(event) {
  25. let id = event.target.getAttribute('data-id');
  26.  
  27. document.querySelector('.edit-popup').classList.remove('hide');
  28. document.querySelector('.edit-popup').classList.add('show');
  29. document.querySelector('.btn-update').setAttribute('data-id', id);
  30.  
  31. mockData.forEach(item => {
  32. if (item.id === id) {
  33. document.querySelector('.edit-item').value = item.title;
  34. }
  35. });
  36. }
  37.  
  38. render() {
  39. this.list.innerHTML = '';
  40.  
  41. mockData.forEach(item => {
  42. this.createDomElements(item.id);
  43. this.li.insertAdjacentHTML('afterbegin', item.title);
  44.  
  45. if (item.done) {
  46. this.li.classList.add('done');
  47. }
  48.  
  49. this.list.appendChild(this.li);
  50. });
  51. }
  52.  
  53. createDomElements(id) {
  54. this.li = document.createElement('li');
  55. this.edit = document.createElement('button');
  56. this.delete = document.createElement('button');
  57. this.complete = document.createElement('button');
  58.  
  59. this.edit.classList.add('btn-edit');
  60. this.delete.classList.add('btn-delete');
  61. this.complete.classList.add('btn-complete');
  62.  
  63. this.delete.setAttribute('data-id', id);
  64. this.edit.setAttribute('data-id', id);
  65. this.complete.setAttribute('data-id', id);
  66.  
  67. this.edit.innerHTML = 'Edit';
  68. this.delete.innerHTML = 'Delete';
  69. this.complete.innerHTML = 'Complete';
  70.  
  71. this.li.appendChild(this.delete);
  72. this.li.appendChild(this.edit);
  73. this.li.appendChild(this.complete);
  74. }
  75.  
  76. create() {
  77. let todoItem = document.querySelector('.item').value;
  78.  
  79. let newItem = {
  80. id: Date.now().toString(),
  81. title: todoItem,
  82. done: false,
  83. date: new Date()
  84. };
  85.  
  86. mockData.push(newItem);
  87.  
  88. document.querySelector('.item').value = '';
  89. this.render();
  90. }
  91.  
  92. remove(event) {
  93. let id = event.target.getAttribute('data-id');
  94.  
  95. mockData = mockData.filter(item => {
  96. if (item.id !== id) {
  97. return item;
  98. }
  99. });
  100.  
  101. this.render();
  102. }
  103.  
  104. update(event) {
  105. let id = event.target.getAttribute('data-id');
  106. let itemTobeUpdated = document.querySelector('.edit-item').value;
  107.  
  108. mockData = mockData.map(item => {
  109. if (item.id === id) {
  110. item['title'] = itemTobeUpdated;
  111. }
  112.  
  113. return item;
  114. });
  115.  
  116. document.querySelector('.edit-popup').classList.remove('show');
  117. document.querySelector('.edit-popup').classList.add('hide');
  118.  
  119. this.render();
  120. }
  121. }
  122.  
  123. export default Todo;
Add Comment
Please, Sign In to add comment