├── img
├── pic1.png
└── CRUD with Pagination.png
├── README.md
├── style.css
├── index.html
└── app.js
/img/pic1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mohammed-Faysal/JavaScript-CURD-Operations/HEAD/img/pic1.png
--------------------------------------------------------------------------------
/img/CRUD with Pagination.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mohammed-Faysal/JavaScript-CURD-Operations/HEAD/img/CRUD with Pagination.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Creative JS Coder
2 |
3 |
4 | ## Complete CRUD (Create, Read, Update, Delete) Operations including Pagination, Filter Data, Show entries, Control the Table Size Using HTML, CSS and JavaScript Local Storage.
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/style.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Nunito:wght@300&family=Poppins:wght@100;200;300;400&display=swap');
2 |
3 |
4 | :root{
5 | --dark1: #0000004d;
6 | --dark2: #181c20;
7 | --dark3: #212529;
8 | --dark4: #2d3135;
9 | --dark5: #424549;
10 | --dark6: #404346;
11 | --dark7: #9c9c9c;
12 | --dark8: #dae0e7;
13 | --dark9: #262a2e;
14 | --red1: #902e31;
15 | }
16 |
17 | *{
18 | margin: 0;
19 | padding: 0;
20 | box-sizing: border-box;
21 | font-family: 'Poppins', sans-serif;
22 | }
23 |
24 | body{
25 | display: flex;
26 | justify-content: center;
27 | align-items: flex-start;
28 | min-height: 100vh;
29 | background: linear-gradient(var(--red1) 50%, var(--dark2) 50%);
30 | }
31 |
32 |
33 | .container{
34 | padding: 20px;
35 | box-shadow: 3px 3px 20px var(--dark1);
36 | background: var(--dark3);
37 | border-radius: 10px;
38 | margin: 10px;
39 | margin-top: 50px;
40 | }
41 |
42 | .container header .filterEntries{
43 | display: flex;
44 | justify-content: space-between;
45 | align-items: center;
46 | margin-bottom: 20px;
47 | }
48 |
49 | .filterEntries .entries{
50 | color: var(--dark8);
51 | }
52 |
53 | .filterEntries .entries select, .filterEntries .filter input{
54 | padding: 7px 10px;
55 | border: 1px solid var(--dark6);
56 | color: var(--dark8);
57 | background: var(--dark4);
58 | border-radius: 5px;
59 | outline: none;
60 | transition: 0.3s;
61 | cursor: pointer;
62 | }
63 |
64 |
65 | .filterEntries .entries select{
66 | padding: 5px 10px;
67 | }
68 |
69 | .filterEntries .filter{
70 | display: flex;
71 | align-items: center;
72 | }
73 |
74 | .filter label{
75 | color: var(--dark8);
76 | margin-right: 5px;
77 | }
78 |
79 |
80 | .filter input:focus{
81 | border-color: var(--dark7);
82 | }
83 |
84 | .container header .addMemberBtn {
85 | margin-bottom: 15px;
86 | }
87 |
88 | header .addMemberBtn button, .popup header .closeBtn, .popup footer .submitBtn{
89 | padding: 9px 14px;
90 | color: var(--dark8);
91 | background: transparent;
92 | font-size: 16px;
93 | cursor: pointer;
94 | pointer-events: auto;
95 | outline: none;
96 | border: 1px solid var(--dark6);
97 | background: var(--dark4);
98 | border-radius: 5px;
99 | }
100 |
101 | .addMemberBtn button:hover{
102 | background: var(--dark5);
103 | }
104 |
105 |
106 | .container table{
107 | border-collapse: collapse;
108 | text-align: left;
109 | }
110 |
111 | table .heading{
112 | background: var(--dark5);
113 | background: transparent;
114 | color: var(--dark8);
115 | }
116 |
117 | table .heading th:hover{
118 | background: var(--dark4);
119 | transition: 0.3s;
120 | }
121 |
122 | table tr th, table tr td{
123 | padding:3px 15px;
124 | color: var(--dark8);
125 | vertical-align: middle;
126 | }
127 |
128 | table tr th{
129 | padding: 12px 15px;
130 | }
131 |
132 | table tr td:nth-child(1), table tr td:nth-child(2){
133 | text-align: center;
134 | }
135 |
136 | table tr td img{
137 | vertical-align: middle;
138 | }
139 | table tr:hover{
140 | cursor: pointer;
141 | background: var(--dark9);
142 | }
143 |
144 | table tr td{
145 | border-bottom: 1px solid var(--dark6);
146 | }
147 |
148 | table tbody tr:first-child td{
149 | border-top: 1px solid var(--dark6);
150 | }
151 |
152 | table tbody tr:nth-child(odd){
153 | background: var(--dark9);
154 | }
155 |
156 | table tbody tr:nth-child(odd) > td:nth-child(3){
157 | background: var(--dark4);
158 | }
159 |
160 | table tr td{
161 | font-size: 15px;
162 | }
163 |
164 | table td button{
165 | margin: 0 3px;
166 | padding: 5px;
167 | width: 35px;
168 | background: var(--dark5);
169 | color: var(--dark8);
170 | font-size: 16px;
171 | cursor: pointer;
172 | pointer-events: auto;
173 | outline: none;
174 | border: 1px solid var(--dark7);
175 | }
176 |
177 | .container footer{
178 | margin-top: 25px;
179 | font-size: 16px;
180 | display: flex;
181 | justify-content: space-between;
182 | align-items: center;
183 | }
184 |
185 | .container footer span{
186 | color: var(--dark8);
187 | }
188 |
189 | footer .pagination{
190 | display: flex;
191 | }
192 |
193 |
194 | footer .pagination button{
195 | width: 40px;
196 | padding: 5px 0;
197 | color: var(--dark8);
198 | background: transparent;
199 | font-size: 16px;
200 | cursor: pointer;
201 | pointer-events: auto;
202 | outline: none;
203 | border: 1px solid var(--dark6);
204 | border-left: none;
205 | margin: 0;
206 | }
207 |
208 | .pagination button:first-child{
209 | width: 85px;
210 | border-top-left-radius: 5px;
211 | border-bottom-left-radius: 5px;
212 | border-left: 1px solid var(--dark6);
213 | opacity: 0.6;
214 | pointer-events: none;
215 | }
216 |
217 | .pagination button:last-child{
218 | width: 85px;
219 | border-top-right-radius: 5px;
220 | border-bottom-right-radius: 5px;
221 | opacity: 0.6;
222 | pointer-events: none;
223 | }
224 |
225 | .pagination button.active, .pagination button:hover{
226 | background: var(--red1);
227 | }
228 |
229 |
230 | .pagination button.act:first-child{
231 | opacity: 1;
232 | pointer-events: auto;
233 | }
234 |
235 | .pagination button.act:last-child{
236 | opacity: 1;
237 | pointer-events: auto;
238 | }
239 |
240 |
241 | table tr .empty{
242 | padding: 6px;
243 | background: var(--dark9);
244 | }
245 |
246 |
247 |
248 | /* Popup Form */
249 |
250 | .dark_bg{
251 | position: fixed;
252 | top: 0;
253 | left: 0;
254 | width: 100%;
255 | height: 100%;
256 | background: rgba(0,0,0,0.6);
257 | display: flex;
258 | justify-content: center;
259 | align-items: center;
260 | opacity: 0;
261 | visibility: hidden;
262 | }
263 |
264 |
265 | .popup{
266 | border-radius: 5px;
267 | box-shadow: 3px 3px 20px rgba(0,0,0,0.3);
268 | background: var(--dark6);
269 | transition: 0.4s;
270 | user-select: none;
271 | transform: scale(0.7);
272 | opacity: 0;
273 | visibility: hidden;
274 | }
275 |
276 | .popup header{
277 | display: flex;
278 | justify-content: space-between;
279 | align-items: center;
280 | border-bottom: 1px solid var(--dark7);
281 | padding: 10px 20px;
282 | }
283 |
284 | .popup header .closeBtn{
285 | font-size: 30px;
286 | font-weight: 300;
287 | padding: 0 15px;
288 | }
289 |
290 | .popup header .closeBtn:hover, .popup footer .submitBtn:hover{
291 | border-color: var(--dark7);
292 | transition: 0.3s;
293 | }
294 |
295 | .popup footer{
296 | border-top: 1px solid var(--dark7);
297 | padding: 12px 20px;
298 | text-align: right;
299 | }
300 |
301 | .popup form{
302 | padding: 10px 20px;
303 | display: flex;
304 | align-items: flex-start;
305 | }
306 |
307 | .popup .imgholder{
308 | width: 150px;
309 | height: 150px;
310 | box-shadow: 0 0 5px rgba(0,0,0,0.5);
311 | border-radius: 8px;
312 | overflow: hidden;
313 | position: relative;
314 | margin-right: 50px;
315 | margin-top: 15px;
316 | }
317 |
318 | .popup .imgholder .upload{
319 | position: absolute;
320 | bottom: 0;
321 | left: 0;
322 | width: 100%;
323 | height: 80px;
324 | background: rgba(0,0,0,0.3);
325 | justify-content: center;
326 | align-items: center;
327 | z-index: 1;
328 | cursor: pointer;
329 | display: none;
330 | }
331 |
332 | .imgholder:hover .upload{
333 | display: flex;
334 | }
335 |
336 | .imgholder .upload input{
337 | display: none;
338 | }
339 |
340 | .imgholder .upload i{
341 | color: #fff;
342 | font-size: 35px;
343 | font-weight: 300;
344 | }
345 |
346 | .imgholder .img{
347 | width: 100%;
348 | height: 100%;
349 | }
350 |
351 | form .inputFieldContainer .nameField,
352 | form .inputFieldContainer .ageCityField,
353 | form .inputFieldContainer .postSalary{
354 | display: flex;
355 | justify-content: space-between;
356 | gap: 15px;
357 | }
358 |
359 | form .inputFieldContainer .nameField input,
360 | form .inputFieldContainer .ageCityField input,
361 | form .inputFieldContainer .postSalary input{
362 | width: 200px;
363 | }
364 |
365 | .inputFieldContainer .form_control{
366 | margin: 10px 0;
367 | }
368 |
369 | .inputFieldContainer .form_control label{
370 | display: block;
371 | color: var(--dark8);
372 | margin-bottom: 5px;
373 | }
374 |
375 | .form_control input{
376 | padding: 10px;
377 | border: 1px solid var(--dark6);
378 | color: var(--dark8);
379 | background: var(--dark4);
380 | border-radius: 5px;
381 | outline: none;
382 | transition: 0.3s;
383 | width: 100%;
384 | }
385 |
386 | .form_control input:focus,
387 | .form_control input:valid{
388 | border-color: var(--dark7);
389 | }
390 |
391 | input::-webkit-inner-spin-button,
392 | input::-webkit-outer-spin-button{
393 | display: none;
394 | }
395 |
396 |
397 | .active{
398 | transform: scale(1);
399 | opacity: 1;
400 | visibility: visible;
401 | }
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
| SL No | 47 |Picture | 48 |Full Name | 49 |Age | 50 |City | 51 |Position | 52 |Salary | 53 |Start Date | 54 |Phone | 56 |Action | 57 |
|---|