Kita sudah sampai di penghujung materi dari kelas ini. Selamat bagi Anda
yang sudah menguasai dasar dari tiga pilar pembentuk website. Pada
materi kali ini kita akan berkenalan mengenai salah satu web API yang
menarik untuk diterapkan pada proyek kalkulator, yakni Web Storage.
3. } else {
5. }
Seharusnya browser yang ada pada saat ini sudah mendukung kedua
fitur tersebut. Google Chrome dan Mozilla Firefox tentu memilikinya.
Data yang disimpan pada Web Storage dapat kita lihat menggunakan
DevTools pada tab Application (Google Chrome)
atau tab Storage (Mozilla Firefox).
Data Local Storage pada Google Chrome
Data Local Storage pada Mozilla Firefox
Session Storage
Tipe storage yang pertama adalah Session Storage yang mana digunakan
untuk menyimpan data sementara pada browser. Data akan hilang ketika
browser atau tab browser ditutup.
Local Storage
Tipe storage yang kedua adalah Local Storage yang serupa dengan
session storage, namun data yang disimpan tidak akan hilang bila
browser atau tabs browser ditutup. Kita bisa menghapus data pada local
storage dengan method removeItem().
Kita akan memisahkan berkas JavaScript yang akan kita buat kali ini
dengan yang sudah kita buat sebelumnya. Jadi untuk langkah awal
silakan buka kembali proyek kalkulator yang sudah kita buat, buat berkas
JavaSript baru di dalam folder assets kemudian beri nama “storage.js”.
1. .......
3.
4. </div>
5.
6. <script src="assets/kalkulator.js"></script>
7. </body>
2. <h2>Riwayat Perhitungan</h2>
3. <table>
4. <thead>
5. <tr>
6. <th>Angka Pertama</th>
7. <th>Operator</th>
8. <th>Angka Kedua</th>
9. <th>Hasil</th>
10. </tr>
11. </thead>
12. <tbody id="historyList"></tbody>
13. </table>
14. </div>
1. <!DOCTYPE html>
2. <html>
3.
4. <head>
5. <title>Web Calculator</title>
0">
8. </head>
9.
10. <body>
14. </div>
20. </div>
26. </div>
1. .history {
2. width: 80%;
5. }
1. table {
2. border-collapse: collapse;
3. border-spacing: 0;
4. width: 100%;
5. border: 1px solid #ddd;
6. }
Lanjut kita tambahkan rule berikut untuk mengatur padding pada table
head (<th>) dan table data (<td>) agar ukuran tampak lebih proporsional.
1. th,
2. td {
3. text-align: center;
4. padding: 16px;
5. }
1. th {
2. background-color: orange;
3. color: white;
4. }
5.
6. tr:nth-child(even) {
7. background-color: #d2d2d2;
8. }
2. .button {
3. padding: 10px;
4. }
5. .history {
6. width: 100%;
7. }
8. }
Sekarang struktur kode pada berkas styles.css akan tampak seperti ini:
1. * {
2. box-sizing: border-box;
3. }
4.
5. body {
6. font-family: sans-serif;
7. }
8.
9. .flex-container-column {
10. display: flex;
11. /* properti pendukung */
12. flex-direction: column;
13. max-width: 800px;
14. margin: 0 auto;
15. text-align: right;
16. }
17.
18. .flex-container-row {
19. display: flex;
20. }
21.
22. .button {
23. flex-basis: 25%;
24. /* properti pendukung */
25. font-size: 1.5em;
26. text-align: center;
27. padding: 40px;
28. border: 1px solid black;
29. background: -webkit-linear-gradient(top, #d2d2d2, #ddd);
30. cursor: pointer;
31. }
32.
33. .double {
34. flex-basis: 50%;
35. }
36.
37. .display {
38. color: white;
39. width: 100%;
40. padding: 10px 20px;
41. background-color: #333333;
42. border: 1px solid black;
43. font-size: 2em;
44. }
45.
46. .operator,
47. .negative,
48. .equals {
49. background: orange;
50. }
51.
52. .card {
53. box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
54. border-radius: 5px;
55. padding: 30px;
56. margin-top: 20px;
57. }
58.
59. .button:hover {
60. font-weight: bold;
61. }
62.
63. .history {
64. width: 80%;
65. margin: 30px auto 0 auto;
66. overflow: scroll;
67. }
68.
69. table {
70. border-collapse: collapse;
71. border-spacing: 0;
72. width: 100%;
73. border: 1px solid #ddd;
74. }
75.
76. th,
77. td {
78. text-align: center;
79. padding: 16px;
80. }
81.
82. th {
83. background-color: orange;
84. color: white;
85. }
86.
87. tr:nth-child(even) {
88. background-color: #d2d2d2;
89. }
90.
91. @media screen and (max-width: 513px) {
92. .button {
93. padding: 10px;
94. }
95. .history {
96. width: 100%;
97. }
98. }
1. ....
2. <script src="assets/storage.js"></script>
3. <script src="assets/kalkulator.js"></script>
4. </body>
1. function checkForStorage() {
2. return typeof(Storage) !== "undefined"
3. }
Lalu kita buat juga fungsi untuk menyimpan data riwayat kalkulasi
pada localStorage. Fungsi tersebut memiliki satu argumen yang
merupakan data dari hasil kalkulasi yang nantinya akan dimasukkan ke
dalam localStorage.
1. function putHistory(data) {
2. if (checkForStorage()) {
5. historyData = [];
6. } else {
7. historyData = JSON.parse(localStorage.getItem(CACHE_KEY));
8. }
9.
10. historyData.unshift(data);
11.
13. historyData.pop();
14. }
15.
17. }
18. }
Banyak istilah kode yang asing pada kode di atas. Mari kita lihat satu per
satu.
Lalu di sana juga ada fungsi unshift(), fungsi ini digunakan untuk
menambahkan nilai baru pada array yang ditempatkan pada awal index.
Fungsi ini juga mengembalikan nilai panjang array setelah ditambahkan
dengan nilai baru.
1. [
2. {
3. "firstNumber": "23",
4. "secondNumber": "15",
5. "operator": "-",
6. "result": 8
7. },
8. {
9. "firstNumber": "23",
12. "result": 17
13. }
14. ]
1. function showHistory() {
2. if (checkForStorage()) {
4. } else {
5. return [];
6. }
7. }
Fungsi ini mengembalikan nilai array dari localStorage jika sudah memiliki
nilai sebelumnya melalui JSON.parse(). Namun jika localStorage masih
kosong, fungsi ini akan mengembalikan nilai array kosong.
Lalu yang terakhir, kita tambahkan fungsi untuk merender data riwayat
kalkulasi pada tabel HTML. Fungsi ini diberi nama dengan renderHistory().
1. function renderHistory() {
4.
5.
6. // selalu hapus konten HTML pada elemen historyList agar tidak mena
7. historyList.innerHTML = "";
8.
9.
16.
17.
18. historyList.appendChild(row);
19. }
20. }
Sampai saat ini, struktur kode pada storage.js akan tampak seperti
berikut:
2.
3. function checkForStorage() {
5. }
6.
7. function putHistory(data) {
8. if (checkForStorage()) {
12. } else {
14. }
15.
16. historyData.unshift(data);
17.
19. historyData.pop();
20. }
21.
24. }
25.
27. if (checkForStorage) {
29. } else {
31. }
32. }
33.
38.
45.
46. historyList.appendChild(row);
47. }
48. }
49.
50. renderHistory();
Terakhir kita gunakan fungsi putHistory() yang sudah kita buat ketika
kalkulator melakukan proses kalkulasi, tepatnya pada
fungsi performCalculation() berkas kalkulator.js.
1. const history = {
2. firstNumber: calculator.firstNumber,
3. secondNumber: calculator.displayNumber,
4. operator: calculator.operator,
5. result: result
6. }
1. function performCalculation() {
{
3. alert("Anda belum menetapkan operator");
4. return;
5. }
6.
7. let result = 0;
.displayNumber);
10. } else {
r.displayNumber)
12. }
13.
20. }
21. putHistory(history);
23. renderHistory();
24. }
Pada tahap ini seharusnya kalkulator kita sudah dapat menampilkan
riwayat kalkulasi yang dilakukan pengguna.