-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathloading.text
More file actions
95 lines (83 loc) · 3.1 KB
/
loading.text
File metadata and controls
95 lines (83 loc) · 3.1 KB
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
// DITARUH SETELAH <BODY>
<div id="initial-loader" class="flex flex-col items-center justify-center">
<span class="loader"></span>
<p class="mt-4 font-bold animate-pulse">Memuat Bendera...</p>
<p id="loader-progress" class="text-[var(--primary-color)] text-sm font-mono mt-2">0%</p>
</div>
/* style.css */
#initial-loader {
position: fixed;
inset: 0;
z-index: 9999;
display: flex;
flex-direction: column;
items-center: center;
justify-content: center;
/* Gunakan background yang SAMA dengan body */
background-image:
radial-gradient(at 15% 15%, hsla(258, 88%, 60%, 0.15) 0px, transparent 50%),
radial-gradient(at 80% 20%, hsla(320, 78%, 55%, 0.1) 0px, transparent 50%),
radial-gradient(at 50% 80%, hsla(258, 88%, 60%, 0.1) 0px, transparent 50%),
radial-gradient(at 90% 90%, hsla(320, 78%, 55%, 0.15) 0px, transparent 50%),
linear-gradient(135deg, var(--bg-color-dark), var(--bg-color-light));
background-attachment: fixed;
/* Warna teks mengikuti tema */
color: var(--text-color);
/* Transisi untuk fade out */
transition: opacity 0.8s ease, visibility 0.8s ease;
}
#initial-loader.fade-out {
opacity: 0;
visibility: hidden;
}
// DITARUH SETELAH GLOBAL STATE & ELEMENTS
async function preloadFlags() {
// Gabungkan semua data
const allFlags = [
...officialCountries,
...subdivisions,
...territories,
...unofficial,
...historicalFlags,
...worldOrganizations,
// PERBAIKAN: Gunakan Object.values().flat() untuk mengambil semua isi dari continentFlags
...Object.values(continentFlags).flat()
];
const total = allFlags.length;
let loaded = 0;
const progressEl = document.getElementById('loader-progress');
const loader = document.getElementById('initial-loader');
// Fungsi untuk memuat satu gambar
const loadImage = (url) => {
return new Promise((resolve) => {
if (!url) return resolve(); // Jaga-jaga jika ada data tanpa URL
const img = new Image();
img.src = url;
img.onload = img.onerror = () => {
loaded++;
const percent = Math.round((loaded / total) * 100);
if (progressEl) progressEl.textContent = `${percent}%`;
resolve();
};
});
};
// PERBAIKAN: Gunakan properti .flag sesuai struktur data kamu
await Promise.all(allFlags.map(flag => loadImage(flag.flag)));
// Selesai, hilangkan loader
if (loader) {
loader.classList.add('fade-out');
setTimeout(() => {
loader.style.display = 'none'; // Sembunyikan agar tidak bisa diklik
// loader.remove(); // Atau hapus permanen
}, 500);
}
}
// PENYESUAIAN INITAPP JIKA ADA LOADING AWAL
function initApp() {
try {
loadTheme();
preloadFlags();
loadSettings();
loadTotalScore();
renderQuizModes();
renderLibraryCategories();