Sindbad~EG File Manager
</main>
<!-- Footer -->
<footer class="glass-effect mt-12">
<div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8">
<div class="flex flex-col md:flex-row justify-between items-center">
<div class="text-cop-dark">
<p>© <?= date('Y') ?> <?= htmlspecialchars(get_site_title()) ?>. All rights reserved.</p>
</div>
<div class="mt-4 md:mt-0">
<p class="text-sm text-cop-dark">Powered by COP News Portal v<?= APP_VERSION ?></p>
</div>
</div>
</div>
</footer>
</div>
<!-- Vue.js App -->
<script>
const { createApp } = Vue;
createApp({
data() {
return {
mobileMenuOpen: false,
loading: false,
notifications: []
}
},
methods: {
showNotification(message, type = 'info') {
const notification = {
id: Date.now(),
message,
type,
show: true
};
this.notifications.push(notification);
setTimeout(() => {
this.hideNotification(notification.id);
}, 5000);
},
hideNotification(id) {
const index = this.notifications.findIndex(n => n.id === id);
if (index > -1) {
this.notifications.splice(index, 1);
}
},
async makeRequest(url, options = {}) {
this.loading = true;
try {
const response = await fetch(url, options);
const data = await response.json();
return data;
} catch (error) {
this.showNotification('An error occurred', 'error');
console.error('Request error:', error);
} finally {
this.loading = false;
}
}
},
mounted() {
// Close mobile menu when clicking outside
document.addEventListener('click', (e) => {
if (!e.target.closest('.md\\:hidden') && this.mobileMenuOpen) {
this.mobileMenuOpen = false;
}
});
}
}).mount('#app');
</script>
<style>
.nav-link {
@apply text-cop-dark hover:text-cop-blue px-3 py-2 rounded-md text-sm font-medium transition-colors duration-200;
}
.mobile-nav-link {
@apply text-cop-dark hover:text-cop-blue block px-3 py-2 rounded-md text-base font-medium transition-colors duration-200;
}
.btn {
@apply inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm transition-all duration-200;
}
.btn-primary {
@apply bg-cop-blue text-white hover:bg-blue-700 focus:ring-2 focus:ring-offset-2 focus:ring-cop-blue;
}
.btn-secondary {
@apply bg-gray-600 text-white hover:bg-gray-700 focus:ring-2 focus:ring-offset-2 focus:ring-gray-500;
}
.btn-success {
@apply bg-green-600 text-white hover:bg-green-700 focus:ring-2 focus:ring-offset-2 focus:ring-green-500;
}
.btn-danger {
@apply bg-red-600 text-white hover:bg-red-700 focus:ring-2 focus:ring-offset-2 focus:ring-red-500;
}
.btn-outline {
@apply bg-transparent border-cop-blue text-cop-blue hover:bg-cop-blue hover:text-white;
}
.card {
@apply glass-effect rounded-lg shadow-lg card-hover;
}
.card-header {
@apply px-6 py-4 border-b border-gray-200;
}
.card-body {
@apply px-6 py-4;
}
.form-control {
@apply block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-cop-blue focus:border-cop-blue;
}
.table {
@apply min-w-full divide-y divide-gray-200;
}
.table th {
@apply px-6 py-3 bg-gray-50 text-left text-xs font-medium text-gray-500 uppercase tracking-wider;
}
.table td {
@apply px-6 py-4 whitespace-nowrap text-sm text-gray-900;
}
.alert {
@apply p-4 rounded-md mb-4;
}
.alert-success {
@apply bg-green-50 text-green-800 border border-green-200;
}
.alert-error {
@apply bg-red-50 text-red-800 border border-red-200;
}
.alert-warning {
@apply bg-yellow-50 text-yellow-800 border border-yellow-200;
}
.alert-info {
@apply bg-blue-50 text-blue-800 border border-blue-200;
}
</style>
</body>
</html>
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists