AnimeRecBERT / templates /loading.html
mramazan's picture
Upload 60 files
426ffb5 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Loading - Anime Recommendation System</title>
<style>
body {
font-family: Arial, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
margin: 0;
padding: 0;
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.loading-container {
text-align: center;
padding: 40px;
background: rgba(255, 255, 255, 0.1);
border-radius: 20px;
backdrop-filter: blur(10px);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
}
.spinner {
width: 50px;
height: 50px;
border: 5px solid rgba(255, 255, 255, 0.3);
border-top: 5px solid white;
border-radius: 50%;
animation: spin 1s linear infinite;
margin: 20px auto;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.progress-bar {
width: 300px;
height: 6px;
background: rgba(255, 255, 255, 0.3);
border-radius: 3px;
margin: 20px auto;
overflow: hidden;
}
.progress-fill {
height: 100%;
background: linear-gradient(90deg, #4facfe 0%, #00f2fe 100%);
border-radius: 3px;
animation: progress 3s ease-in-out infinite;
}
@keyframes progress {
0% { width: 0%; }
50% { width: 70%; }
100% { width: 100%; }
}
.status {
margin-top: 20px;
font-size: 14px;
opacity: 0.8;
}
.retry-btn {
background: linear-gradient(45deg, #ff6b6b, #ee5a24);
color: white;
border: none;
padding: 10px 20px;
border-radius: 25px;
cursor: pointer;
font-size: 14px;
margin-top: 20px;
transition: transform 0.3s ease;
}
.retry-btn:hover {
transform: scale(1.05);
}
.hidden {
display: none;
}
</style>
</head>
<body>
<div class="loading-container">
<h1>🎌 Anime Recommendation System</h1>
<div class="spinner"></div>
<div class="progress-bar">
<div class="progress-fill"></div>
</div>
<p id="status" class="status">Loading AI model and anime database...</p>
<p id="substatus" class="status">This may take a few minutes on first load</p>
<button id="retryBtn" class="retry-btn hidden" onclick="location.reload()">Retry</button>
</div>
<script>
let checkCount = 0;
let maxChecks = 120; // 2 dakika (120 * 1000ms)
function checkSystemStatus() {
fetch('/api/system_status')
.then(response => response.json())
.then(data => {
const statusEl = document.getElementById('status');
const substatusEl = document.getElementById('substatus');
const retryBtn = document.getElementById('retryBtn');
if (data.ready) {
statusEl.textContent = 'System ready! Redirecting...';
substatusEl.textContent = '';
setTimeout(() => {
window.location.href = '/';
}, 1000);
} else if (data.error) {
statusEl.textContent = 'System initialization failed';
substatusEl.textContent = data.error || 'Unknown error occurred';
retryBtn.classList.remove('hidden');
} else if (data.loading) {
const dots = '.'.repeat((checkCount % 3) + 1);
statusEl.textContent = `Loading AI model and anime database${dots}`;
if (checkCount < 30) {
substatusEl.textContent = 'Downloading model files...';
} else if (checkCount < 60) {
substatusEl.textContent = 'Initializing neural network...';
} else {
substatusEl.textContent = 'Almost ready...';
}
checkCount++;
if (checkCount < maxChecks) {
setTimeout(checkSystemStatus, 1000);
} else {
statusEl.textContent = 'Loading is taking longer than expected';
substatusEl.textContent = 'Please try refreshing the page';
retryBtn.classList.remove('hidden');
}
}
})
.catch(error => {
console.error('Error checking system status:', error);
checkCount++;
if (checkCount < maxChecks) {
setTimeout(checkSystemStatus, 2000);
} else {
document.getElementById('status').textContent = 'Connection error';
document.getElementById('substatus').textContent = 'Please check your internet connection and try again';
document.getElementById('retryBtn').classList.remove('hidden');
}
});
}
// Sayfa yüklendiğinde kontrol başlat
checkSystemStatus();
</script>
</body>
</html>