Guest User

Untitled

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