-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.js
120 lines (91 loc) · 2.68 KB
/
app.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
// Book Constructor
// It'll handle the actual Book Object
function Book(title, author, isbn) {
this.title = title;
this.author = author;
this.isbn = isbn;
}
// UI Constructor
// It's a set of Prototype methods to do things like add book to the list, delete the book, show the alert, do things that has to do with the UI that'll most of the work
function UI() {
}
// Add Book to List
UI.prototype.addBookToList = function(book) {
const list = document.getElementById('book-list');
// Create tr element
const row = document.createElement('tr');
// Insert cols
row.innerHTML = `
<td>${book.title}</td>
<td>${book.author}</td>
<td>${book.isbn}</td>
<td><a href="#" class="delete">X</a></td>
`;
list.appendChild(row);
}
// Show Alert
UI.prototype.showAlert = function(message, className) {
// Create a div
const div = document.createElement('div');
// Add classes
div.className = `alert ${className}`;
// Add Text
div.appendChild(document.createTextNode(message));
// Get Parent
const container = document.querySelector('.container');
// Put it before form
// Get Form
const form = document.querySelector('#book-form');
// Insert Alert
container.insertBefore(div, form);
// Timeout after 3 sec
setTimeout(function(){
document.querySelector('.alert').remove();
}, 3000);
}
// Delete Book
UI.prototype.deleteBook = function(target) {
if(target.className === 'delete'){
target.parentElement.parentElement.remove();
}
}
// Clear Fields
UI.prototype.clearFields = function() {
document.getElementById('title').value = "";
document.getElementById('author').value = "";
document.getElementById('isbn').value = "";
}
// Event Listeners
document.getElementById('book-form').addEventListener('submit', function(e) {
// Get form values
const title = document.getElementById('title').value,
author = document.getElementById('author').value,
isbn = document.getElementById('isbn').value
// Instantiate book
const book = new Book(title, author, isbn);
// Instantiate UI
const ui = new UI();
// Validation
if(title === "" || author === "" || isbn === ""){
// Error alert
ui.showAlert('Please fill in all fields', 'error');
} else {
// Add Book to List
ui.addBookToList(book);
// Show success
ui.showAlert('Book Added', 'success');
// Clear Fields
ui.clearFields();
}
e.preventDefault();
});
// Event Listener for delete
document.getElementById('book-list').addEventListener('click', function(e){
// Instanitate UI
const ui = new UI();
// Delete Book
ui.deleteBook(e.target);
// Show Alert
ui.showAlert('Book Removed!', 'success');
e.preventDefault();
});