-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
129 lines (115 loc) · 3.82 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
const addBox = document.querySelector('.add-box');
const popupBox = document.querySelector('.popup-box');
const popupTitle = document.querySelector('header p');
const closeIcon = popupBox.querySelector('.Xicon');
const titleTag = popupBox.querySelector('input');
const descTag = popupBox.querySelector('textarea');
const addBtn = popupBox.querySelector('button');
const months = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December',
];
//Get local storage notes and parse them to js object if they exist
//else pass an empty array
const notes = JSON.parse(localStorage.getItem('notes') || '[]');
let isUpdate = false;
let updateID;
addBox.addEventListener('click', () => {
popupBox.classList.add('show');
titleTag.focus();
});
closeIcon.addEventListener('click', () => {
isUpdate = false;
popupBox.classList.remove('show');
titleTag.value = '';
descTag.value = '';
addBtn.innerHTML = 'Add Note';
popupTitle.innerHTML = 'Add a new Note';
});
function showNotes() {
document.querySelectorAll('.note').forEach((note) => note.remove());
notes.forEach((note, index) => {
let liTag = ` <li class="note">
<div class="details">
<p>${note.title}</p>
<span>${note.description}</span>
</div>
<div class="bottom-content">
<span>${note.date}</span>
<div class="settings">
<i onclick="showMenu(this)" class="uil uil-elipsis-double-v-alt"></i>
<ul class="menu">
<li onclick="updateNote(${index}, '${note.title}', '${note.description}')"><i class="uil uil-pen"></i>Edit</li>
<li onclick="deleteNote(${index})"><i class="uil uil-trash"></i> Delete</li>
</ul>
</div>
</div>
</li>`;
addBox.insertAdjacentHTML('afterend', liTag);
});
}
showNotes();
function showMenu(elem) {
elem.parentElement.classList.add('show');
document.addEventListener('click', (e) => {
// removes show class from the settings menu on document click
if (e.target.tagName != 'I' || e.target != elem) {
elem.parentElement.classList.remove('show');
}
});
}
function deleteNote(noteId) {
let confrimDel = confirm('Are you sure you want to delete this note?');
if (!confrimDel) return;
notes.splice(noteId, 1); //removes selected note from notes array
// saves updated notes aray to local storage
localStorage.setItem('notes', JSON.stringify(notes));
showNotes();
}
function updateNote(noteId, title, description) {
isUpdate = true;
updateID = noteId;
addBox.click();
addBtn.innerHTML = 'Update Note';
popupTitle.innerHTML = 'Update A Note';
titleTag.value = title;
descTag.value = description;
console.log(noteId, title, description);
}
addBtn.addEventListener('click', (e) => {
e.preventDefault();
let noteTitle = titleTag.value;
let noteDesc = descTag.value;
if (noteTitle || noteDesc) {
//get current month, day, year from the current date.
let dateObj = new Date();
let month = months[dateObj.getMonth()];
let day = dateObj.getDate();
let year = dateObj.getFullYear();
let noteInfo = {
title: noteTitle,
description: noteDesc,
date: `${month} ${day} ${year}`,
};
if (!isUpdate) {
notes.push(noteInfo); //adding new note to notes list
} else {
isUpdate = false;
notes[updateID] = noteInfo; //updating specified note
}
// saving notes to local storage
localStorage.setItem('notes', JSON.stringify(notes));
closeIcon.click();
showNotes();
}
});