91 lines
4.2 KiB
Plaintext
91 lines
4.2 KiB
Plaintext
<nav class="navbar navbar-expand-lg navbar-dark bg-primary sticky-top">
|
|
<div class="container">
|
|
<a class="navbar-brand d-flex align-items-center" href="/@ViewBag.Language">
|
|
<!-- Usando seu logo existente -->
|
|
<img src="~/img/logo-white.png" alt="Convert-it" height="32" class="me-2">
|
|
<strong>Convert-it</strong>
|
|
</a>
|
|
|
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
|
|
<div class="collapse navbar-collapse" id="navbarNav">
|
|
<ul class="navbar-nav me-auto">
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/@ViewBag.Language">
|
|
<i class="fas fa-home me-1"></i>
|
|
@(ViewBag.Language == "pt" ? "Início" : ViewBag.Language == "es" ? "Inicio" : "Home")
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
|
|
<!-- Status dos Módulos -->
|
|
<div class="navbar-nav me-3">
|
|
<span class="navbar-text d-flex align-items-center">
|
|
<span class="status-indicator me-2" id="modules-status"></span>
|
|
<small id="modules-count">Carregando...</small>
|
|
</span>
|
|
</div>
|
|
|
|
<!-- Language Switcher -->
|
|
<div class="dropdown">
|
|
<button class="btn btn-outline-light dropdown-toggle btn-sm" type="button" data-bs-toggle="dropdown">
|
|
<i class="fas fa-globe me-1"></i>
|
|
@ViewBag.Language?.ToUpper()
|
|
</button>
|
|
<ul class="dropdown-menu dropdown-menu-end">
|
|
<li>
|
|
<a class="dropdown-item" href="/pt@(ViewContext.RouteData.Values["converter"] != null ? "/" + ViewContext.RouteData.Values["converter"] : "")">
|
|
<i class="flag-icon flag-icon-br me-2"></i>Português
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a class="dropdown-item" href="/en@(ViewContext.RouteData.Values["converter"] != null ? "/" + ViewContext.RouteData.Values["converter"] : "")">
|
|
<i class="flag-icon flag-icon-us me-2"></i>English
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a class="dropdown-item" href="/es@(ViewContext.RouteData.Values["converter"] != null ? "/" + ViewContext.RouteData.Values["converter"] : "")">
|
|
<i class="flag-icon flag-icon-es me-2"></i>Español
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<script>
|
|
// Atualizar status dos módulos no header
|
|
async function updateModulesStatus() {
|
|
try {
|
|
const response = await fetch('/api/menu/converters?language=@ViewBag.Language');
|
|
const data = await response.json();
|
|
|
|
const statusIndicator = document.getElementById('modules-status');
|
|
const countElement = document.getElementById('modules-count');
|
|
|
|
if (data.success && data.menu) {
|
|
const totalModules = data.menu.reduce((total, category) => total + category.items.length, 0);
|
|
const activeModules = data.menu.reduce((total, category) =>
|
|
total + category.items.filter(item => item.isHealthy !== false).length, 0);
|
|
|
|
statusIndicator.className = `status-indicator me-2 ${activeModules === totalModules ? 'bg-success' : 'bg-warning'}`;
|
|
statusIndicator.style.width = '8px';
|
|
statusIndicator.style.height = '8px';
|
|
statusIndicator.style.borderRadius = '50%';
|
|
statusIndicator.style.display = 'inline-block';
|
|
|
|
countElement.textContent = `${activeModules}/${totalModules} módulos`;
|
|
} else {
|
|
statusIndicator.className = 'status-indicator me-2 bg-danger';
|
|
countElement.textContent = 'Erro ao carregar';
|
|
}
|
|
} catch (error) {
|
|
console.error('Erro ao atualizar status:', error);
|
|
}
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', updateModulesStatus);
|
|
</script> |