|
|
<!DOCTYPE html> |
|
|
<html lang="fr"> |
|
|
<head> |
|
|
<meta charset="UTF-8"> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
|
<title>Migration Drupal 7 vers Drupal 11</title> |
|
|
<script src="https://cdn.tailwindcss.com"></script> |
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
|
|
<style> |
|
|
.gradient-bg { |
|
|
background: linear-gradient(135deg, #4f46e5 0%, #8b5cf6 100%); |
|
|
} |
|
|
.card-hover { |
|
|
transition: all 0.3s ease; |
|
|
} |
|
|
.card-hover:hover { |
|
|
transform: translateY(-5px); |
|
|
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); |
|
|
} |
|
|
.progress-bar { |
|
|
height: 10px; |
|
|
border-radius: 5px; |
|
|
background-color: #e2e8f0; |
|
|
} |
|
|
.progress-fill { |
|
|
height: 100%; |
|
|
border-radius: 5px; |
|
|
background: linear-gradient(90deg, #10b981, #34d399); |
|
|
transition: width 0.5s ease; |
|
|
} |
|
|
.step-indicator { |
|
|
width: 40px; |
|
|
height: 40px; |
|
|
border-radius: 50%; |
|
|
display: flex; |
|
|
align-items: center; |
|
|
justify-content: center; |
|
|
font-weight: bold; |
|
|
position: relative; |
|
|
} |
|
|
.step-indicator:not(:first-child)::before { |
|
|
content: ''; |
|
|
position: absolute; |
|
|
width: 40px; |
|
|
height: 2px; |
|
|
background-color: #e2e8f0; |
|
|
left: -40px; |
|
|
top: 50%; |
|
|
transform: translateY(-50%); |
|
|
} |
|
|
.step-active { |
|
|
background-color: #4f46e5; |
|
|
color: white; |
|
|
} |
|
|
.step-completed { |
|
|
background-color: #10b981; |
|
|
color: white; |
|
|
} |
|
|
.step-pending { |
|
|
background-color: #e2e8f0; |
|
|
color: #64748b; |
|
|
} |
|
|
.log-entry { |
|
|
animation: fadeIn 0.3s ease; |
|
|
} |
|
|
@keyframes fadeIn { |
|
|
from { opacity: 0; transform: translateY(5px); } |
|
|
to { opacity: 1; transform: translateY(0); } |
|
|
} |
|
|
.module-status-badge { |
|
|
transition: all 0.2s ease; |
|
|
} |
|
|
.module-status-badge:hover { |
|
|
transform: scale(1.05); |
|
|
} |
|
|
</style> |
|
|
</head> |
|
|
<body class="bg-gray-50 font-sans"> |
|
|
|
|
|
<header class="gradient-bg text-white shadow-lg"> |
|
|
<div class="container mx-auto px-6 py-12"> |
|
|
<div class="flex flex-col md:flex-row justify-between items-center"> |
|
|
<div class="mb-8 md:mb-0"> |
|
|
<h1 class="text-4xl font-bold mb-2">Migration Drupal</h1> |
|
|
<p class="text-xl opacity-90">De Drupal 7 vers Drupal 11 en toute sécurité</p> |
|
|
</div> |
|
|
<div class="bg-white rounded-lg p-6 shadow-lg transform hover:scale-105 transition"> |
|
|
<div class="flex items-center"> |
|
|
<div class="mr-4 text-center"> |
|
|
<div class="text-sm text-gray-500">Version source</div> |
|
|
<div class="text-2xl font-bold text-gray-800 flex items-center"> |
|
|
<i class="fas fa-database mr-2 text-purple-500"></i> D7 |
|
|
</div> |
|
|
</div> |
|
|
<div class="text-3xl text-purple-500 mx-4 animate-pulse"> |
|
|
<i class="fas fa-arrow-right"></i> |
|
|
</div> |
|
|
<div class="text-center"> |
|
|
<div class="text-sm text-gray-500">Version cible</div> |
|
|
<div class="text-2xl font-bold text-gray-800 flex items-center"> |
|
|
<i class="fas fa-cloud mr-2 text-green-500"></i> D11 |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</header> |
|
|
|
|
|
|
|
|
<main class="container mx-auto px-6 py-8"> |
|
|
|
|
|
<div class="max-w-4xl mx-auto mb-12"> |
|
|
<div class="flex justify-between relative mb-8"> |
|
|
<div class="step-indicator step-completed"> |
|
|
<i class="fas fa-check"></i> |
|
|
<div class="absolute -bottom-8 left-1/2 transform -translate-x-1/2 text-sm font-medium text-gray-700">Analyse</div> |
|
|
</div> |
|
|
<div class="step-indicator step-completed"> |
|
|
<i class="fas fa-check"></i> |
|
|
<div class="absolute -bottom-8 left-1/2 transform -translate-x-1/2 text-sm font-medium text-gray-700">Préparation</div> |
|
|
</div> |
|
|
<div class="step-indicator step-active"> |
|
|
3 |
|
|
<div class="absolute -bottom-8 left-1/2 transform -translate-x-1/2 text-sm font-bold text-purple-600">Migration</div> |
|
|
</div> |
|
|
<div class="step-indicator step-pending"> |
|
|
4 |
|
|
<div class="absolute -bottom-8 left-1/2 transform -translate-x-1/2 text-sm font-medium text-gray-500">Vérification</div> |
|
|
</div> |
|
|
<div class="step-indicator step-pending"> |
|
|
5 |
|
|
<div class="absolute -bottom-8 left-1/2 transform -translate-x-1/2 text-sm font-medium text-gray-500">Finalisation</div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="progress-bar"> |
|
|
<div class="progress-fill" style="width: 45%"></div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-8"> |
|
|
|
|
|
<div class="bg-white rounded-xl shadow-md overflow-hidden card-hover border-l-4 border-blue-500"> |
|
|
<div class="p-6"> |
|
|
<div class="flex items-center mb-4"> |
|
|
<div class="bg-blue-100 p-3 rounded-full mr-4"> |
|
|
<i class="fas fa-server text-blue-600 text-xl"></i> |
|
|
</div> |
|
|
<h3 class="text-xl font-semibold text-gray-800">Environnement</h3> |
|
|
</div> |
|
|
<div class="space-y-3"> |
|
|
<div class="flex justify-between items-center"> |
|
|
<span class="text-gray-600 flex items-center"> |
|
|
<i class="fas fa-microchip mr-2 text-blue-400"></i> CPU |
|
|
</span> |
|
|
<div class="w-24 bg-gray-200 rounded-full h-2.5"> |
|
|
<div class="bg-blue-500 h-2.5 rounded-full" style="width: 32%"></div> |
|
|
</div> |
|
|
<span class="font-medium text-sm w-12 text-right">32%</span> |
|
|
</div> |
|
|
<div class="flex justify-between items-center"> |
|
|
<span class="text-gray-600 flex items-center"> |
|
|
<i class="fas fa-memory mr-2 text-purple-400"></i> Mémoire |
|
|
</span> |
|
|
<div class="w-24 bg-gray-200 rounded-full h-2.5"> |
|
|
<div class="bg-purple-500 h-2.5 rounded-full" style="width: 45%"></div> |
|
|
</div> |
|
|
<span class="font-medium text-sm w-12 text-right">45%</span> |
|
|
</div> |
|
|
<div class="flex justify-between items-center"> |
|
|
<span class="text-gray-600 flex items-center"> |
|
|
<i class="fas fa-hdd mr-2 text-green-400"></i> Stockage |
|
|
</span> |
|
|
<div class="w-24 bg-gray-200 rounded-full h-2.5"> |
|
|
<div class="bg-green-500 h-2.5 rounded-full" style="width: 24%"></div> |
|
|
</div> |
|
|
<span class="font-medium text-sm w-12 text-right">120GB</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="bg-white rounded-xl shadow-md overflow-hidden card-hover border-l-4 border-green-500"> |
|
|
<div class="p-6"> |
|
|
<div class="flex items-center mb-4"> |
|
|
<div class="bg-green-100 p-3 rounded-full mr-4"> |
|
|
<i class="fas fa-sync-alt text-green-600 text-xl"></i> |
|
|
</div> |
|
|
<h3 class="text-xl font-semibold text-gray-800">Progression</h3> |
|
|
</div> |
|
|
<div class="mb-4"> |
|
|
<div class="flex justify-between text-sm text-gray-600 mb-1"> |
|
|
<span>Migration en cours</span> |
|
|
<span>45% complété</span> |
|
|
</div> |
|
|
<div class="h-3 bg-gray-200 rounded-full overflow-hidden"> |
|
|
<div class="h-full bg-gradient-to-r from-green-400 to-blue-500" style="width: 45%"></div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="space-y-2"> |
|
|
<div class="flex justify-between text-sm"> |
|
|
<span class="text-gray-600 flex items-center"> |
|
|
<i class="fas fa-file-alt mr-2 text-blue-400"></i> Éléments |
|
|
</span> |
|
|
<span class="font-medium">1,245/2,780</span> |
|
|
</div> |
|
|
<div class="flex justify-between text-sm"> |
|
|
<span class="text-gray-600 flex items-center"> |
|
|
<i class="fas fa-clock mr-2 text-purple-400"></i> Temps restant |
|
|
</span> |
|
|
<span class="font-medium">~25 min</span> |
|
|
</div> |
|
|
<div class="flex justify-between text-sm"> |
|
|
<span class="text-gray-600 flex items-center"> |
|
|
<i class="fas fa-bolt mr-2 text-yellow-400"></i> Vitesse |
|
|
</span> |
|
|
<span class="font-medium">42 items/min</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="bg-white rounded-xl shadow-md overflow-hidden card-hover border-l-4 border-purple-500"> |
|
|
<div class="p-6"> |
|
|
<div class="flex items-center mb-4"> |
|
|
<div class="bg-purple-100 p-3 rounded-full mr-4"> |
|
|
<i class="fas fa-clipboard-list text-purple-600 text-xl"></i> |
|
|
</div> |
|
|
<div> |
|
|
<h3 class="text-xl font-semibold text-gray-800">Résumé</h3> |
|
|
<p class="text-sm text-gray-500">Statut global de la migration</p> |
|
|
</div> |
|
|
</div> |
|
|
<div class="grid grid-cols-2 gap-3"> |
|
|
<div class="bg-green-50 p-3 rounded-lg"> |
|
|
<div class="text-green-800 font-medium flex items-center"> |
|
|
<i class="fas fa-check-circle mr-2"></i> |
|
|
<span>28</span> |
|
|
</div> |
|
|
<div class="text-xs text-green-600">Modules OK</div> |
|
|
</div> |
|
|
<div class="bg-blue-50 p-3 rounded-lg"> |
|
|
<div class="text-blue-800 font-medium flex items-center"> |
|
|
<i class="fas fa-sync-alt mr-2"></i> |
|
|
<span>3</span> |
|
|
</div> |
|
|
<div class="text-xs text-blue-600">En cours</div> |
|
|
</div> |
|
|
<div class="bg-yellow-50 p-3 rounded-lg"> |
|
|
<div class="text-yellow-800 font-medium flex items-center"> |
|
|
<i class="fas fa-exclamation-triangle mr-2"></i> |
|
|
<span>1</span> |
|
|
</div> |
|
|
<div class="text-xs text-yellow-600">Avertissements</div> |
|
|
</div> |
|
|
<div class="bg-red-50 p-3 rounded-lg"> |
|
|
<div class="text-red-800 font-medium flex items-center"> |
|
|
<i class="fas fa-times-circle mr-2"></i> |
|
|
<span>0</span> |
|
|
</div> |
|
|
<div class="text-xs text-red-600">Échecs</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="bg-white rounded-xl shadow-md overflow-hidden mb-8"> |
|
|
<div class="border-b border-gray-200 px-6 py-4 flex justify-between items-center"> |
|
|
<h2 class="text-2xl font-semibold text-gray-800">Détails de la migration</h2> |
|
|
<div class="flex space-x-2"> |
|
|
<button class="px-3 py-1 bg-gray-100 text-gray-700 rounded-lg text-sm hover:bg-gray-200 transition flex items-center"> |
|
|
<i class="fas fa-filter mr-1"></i> Filtrer |
|
|
</button> |
|
|
<button class="px-3 py-1 bg-gray-100 text-gray-700 rounded-lg text-sm hover:bg-gray-200 transition flex items-center"> |
|
|
<i class="fas fa-search mr-1"></i> Rechercher |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
<div class="divide-y divide-gray-200"> |
|
|
|
|
|
<div class="p-6"> |
|
|
<div class="flex items-center justify-between mb-4"> |
|
|
<h3 class="text-lg font-medium text-gray-800 flex items-center"> |
|
|
<i class="fas fa-file-alt text-blue-500 mr-2"></i> |
|
|
Types de contenu |
|
|
</h3> |
|
|
<span class="px-3 py-1 bg-green-100 text-green-800 text-sm rounded-full module-status-badge"> |
|
|
<i class="fas fa-check mr-1"></i> Complété |
|
|
</span> |
|
|
</div> |
|
|
<div class="grid grid-cols-1 md:grid-cols-3 gap-4"> |
|
|
<div class="border border-gray-200 rounded-lg p-4 hover:border-blue-300 transition"> |
|
|
<div class="flex items-center mb-2"> |
|
|
<div class="w-3 h-3 bg-green-500 rounded-full mr-2"></div> |
|
|
<span class="font-medium">Article</span> |
|
|
</div> |
|
|
<div class="text-sm text-gray-600 flex justify-between"> |
|
|
<span>1,245 éléments</span> |
|
|
<span class="text-green-500 font-medium">100%</span> |
|
|
</div> |
|
|
</div> |
|
|
<div class="border border-gray-200 rounded-lg p-4 hover:border-blue-300 transition"> |
|
|
<div class="flex items-center mb-2"> |
|
|
<div class="w-3 h-3 bg-green-500 rounded-full mr-2"></div> |
|
|
<span class="font-medium">Page</span> |
|
|
</div> |
|
|
<div class="text-sm text-gray-600 flex justify-between"> |
|
|
<span>876 éléments</span> |
|
|
<span class="text-green-500 font-medium">100%</span> |
|
|
</div> |
|
|
</div> |
|
|
<div class="border border-gray-200 rounded-lg p-4 hover:border-blue-300 transition"> |
|
|
<div class="flex items-center mb-2"> |
|
|
<div class="w-3 h-3 bg-blue-500 rounded-full mr-2"></div> |
|
|
<span class="font-medium">Événement</span> |
|
|
</div> |
|
|
<div class="text-sm text-gray-600 flex justify-between"> |
|
|
<span>659 éléments</span> |
|
|
<span class="text-blue-500 font-medium">45%</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="p-6"> |
|
|
<div class="flex items-center justify-between mb-4"> |
|
|
<h3 class="text-lg font-medium text-gray-800 flex items-center"> |
|
|
<i class="fas fa-puzzle-piece text-purple-500 mr-2"></i> |
|
|
Modules |
|
|
</h3> |
|
|
<span class="px-3 py-1 bg-blue-100 text-blue-800 text-sm rounded-full module-status-badge"> |
|
|
<i class="fas fa-sync-alt mr-1"></i> En cours |
|
|
</span> |
|
|
</div> |
|
|
<div class="overflow-x-auto"> |
|
|
<table class="min-w-full divide-y divide-gray-200"> |
|
|
<thead class="bg-gray-50"> |
|
|
<tr> |
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Module</th> |
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Statut</th> |
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">D7 Version</th> |
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">D11 Version</th> |
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Actions</th> |
|
|
</tr> |
|
|
</thead> |
|
|
<tbody class="bg-white divide-y divide-gray-200"> |
|
|
<tr class="hover:bg-gray-50 transition"> |
|
|
<td class="px-6 py-4 whitespace-nowrap"> |
|
|
<div class="flex items-center"> |
|
|
<div class="flex-shrink-0 h-10 w-10 bg-green-100 rounded-full flex items-center justify-center"> |
|
|
<i class="fas fa-check text-green-600"></i> |
|
|
</div> |
|
|
<div class="ml-4"> |
|
|
<div class="text-sm font-medium text-gray-900">Views</div> |
|
|
<div class="text-xs text-gray-500">Gestion des affichages</div> |
|
|
</div> |
|
|
</div> |
|
|
</td> |
|
|
<td class="px-6 py-4 whitespace-nowrap"> |
|
|
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800"> |
|
|
Complété |
|
|
</span> |
|
|
</td> |
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">7.x-3.18</td> |
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">11.x-1.0</td> |
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium"> |
|
|
<button class="text-blue-600 hover:text-blue-900 mr-3"> |
|
|
<i class="fas fa-info-circle"></i> |
|
|
</button> |
|
|
<button class="text-green-600 hover:text-green-900"> |
|
|
<i class="fas fa-redo"></i> |
|
|
</button> |
|
|
</td> |
|
|
</tr> |
|
|
<tr class="hover:bg-gray-50 transition"> |
|
|
<td class="px-6 py-4 whitespace-nowrap"> |
|
|
<div class="flex items-center"> |
|
|
<div class="flex-shrink-0 h-10 w-10 bg-blue-100 rounded-full flex items-center justify-center"> |
|
|
<i class="fas fa-sync-alt text-blue-600"></i> |
|
|
</div> |
|
|
<div class="ml-4"> |
|
|
<div class="text-sm font-medium text-gray-900">Pathauto</div> |
|
|
<div class="text-xs text-gray-500">Alias automatiques</div> |
|
|
</div> |
|
|
</div> |
|
|
</td> |
|
|
<td class="px-6 py-4 whitespace-nowrap"> |
|
|
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-blue-100 text-blue-800"> |
|
|
En cours |
|
|
</span> |
|
|
</td> |
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">7.x-1.3</td> |
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">11.x-1.0</td> |
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium"> |
|
|
<button class="text-blue-600 hover:text-blue-900 mr-3"> |
|
|
<i class="fas fa-info-circle"></i> |
|
|
</button> |
|
|
<button class="text-yellow-600 hover:text-yellow-900"> |
|
|
<i class="fas fa-pause"></i> |
|
|
</button> |
|
|
</td> |
|
|
</tr> |
|
|
<tr class="hover:bg-gray-50 transition"> |
|
|
<td class="px-6 py-4 whitespace-nowrap"> |
|
|
<div class="flex items-center"> |
|
|
<div class="flex-shrink-0 h-10 w-10 bg-yellow-100 rounded-full flex items-center justify-center"> |
|
|
<i class="fas fa-exclamation-triangle text-yellow-600"></i> |
|
|
</div> |
|
|
<div class="ml-4"> |
|
|
<div class="text-sm font-medium text-gray-900">Webform</div> |
|
|
<div class="text-xs text-gray-500">Formulaires avancés</div> |
|
|
</div> |
|
|
</div> |
|
|
</td> |
|
|
<td class="px-6 py-4 whitespace-nowrap"> |
|
|
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-yellow-100 text-yellow-800"> |
|
|
Attention |
|
|
</span> |
|
|
</td> |
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">7.x-4.16</td> |
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">11.x-6.0</td> |
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium"> |
|
|
<button class="text-blue-600 hover:text-blue-900 mr-3"> |
|
|
<i class="fas fa-info-circle"></i> |
|
|
</button> |
|
|
<button class="text-red-600 hover:text-red-900"> |
|
|
<i class="fas fa-exclamation-circle"></i> |
|
|
</button> |
|
|
</td> |
|
|
</tr> |
|
|
</tbody> |
|
|
</table> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="p-6"> |
|
|
<div class="flex items-center justify-between mb-4"> |
|
|
<h3 class="text-lg font-medium text-gray-800 flex items-center"> |
|
|
<i class="fas fa-images text-green-500 mr-2"></i> |
|
|
Médias |
|
|
</h3> |
|
|
<span class="px-3 py-1 bg-yellow-100 text-yellow-800 text-sm rounded-full module-status-badge"> |
|
|
<i class="fas fa-clock mr-1"></i> En attente |
|
|
</span> |
|
|
</div> |
|
|
<div class="flex items-center"> |
|
|
<div class="mr-4"> |
|
|
<div class="w-16 h-16 bg-gray-100 rounded-lg flex items-center justify-center border-2 border-dashed border-gray-300"> |
|
|
<i class="fas fa-image text-gray-400 text-2xl"></i> |
|
|
</div> |
|
|
</div> |
|
|
<div class="flex-1"> |
|
|
<div class="flex justify-between text-sm text-gray-600 mb-1"> |
|
|
<span>3,456 fichiers médias</span> |
|
|
<span class="font-medium">15% migrés</span> |
|
|
</div> |
|
|
<div class="w-full bg-gray-200 rounded-full h-2.5"> |
|
|
<div class="bg-gray-400 h-2.5 rounded-full" style="width: 15%"></div> |
|
|
</div> |
|
|
<div class="flex justify-between mt-2"> |
|
|
<span class="text-xs text-gray-500">Prochain lot: images</span> |
|
|
<span class="text-xs text-gray-500">Taille: 2.4GB</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="flex flex-col md:flex-row justify-between items-center bg-white rounded-xl shadow-md p-6 mb-8"> |
|
|
<div class="mb-4 md:mb-0"> |
|
|
<h3 class="text-lg font-medium text-gray-800">Contrôle de migration</h3> |
|
|
<p class="text-sm text-gray-600">Gérer le processus de migration</p> |
|
|
</div> |
|
|
<div class="flex flex-wrap gap-3"> |
|
|
<button class="px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 transition flex items-center"> |
|
|
<i class="fas fa-file-export mr-2"></i> Exporter le rapport |
|
|
</button> |
|
|
<button class="px-4 py-2 bg-yellow-100 text-yellow-700 rounded-lg hover:bg-yellow-200 transition flex items-center"> |
|
|
<i class="fas fa-pause mr-2"></i> Pause |
|
|
</button> |
|
|
<button class="px-4 py-2 bg-red-100 text-red-700 rounded-lg hover:bg-red-200 transition flex items-center"> |
|
|
<i class="fas fa-stop mr-2"></i> Arrêter |
|
|
</button> |
|
|
<button class="px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700 transition flex items-center"> |
|
|
<i class="fas fa-play mr-2"></i> Continuer |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
</main> |
|
|
|
|
|
|
|
|
<div class="fixed bottom-0 left-0 right-0 bg-gray-900 text-white shadow-lg border-t border-gray-700" style="max-height: 250px; overflow-y: auto;"> |
|
|
<div class="container mx-auto px-6 py-3"> |
|
|
<div class="flex justify-between items-center mb-2 sticky top-0 bg-gray-900 py-2 z-10"> |
|
|
<h3 class="font-medium flex items-center"> |
|
|
<i class="fas fa-terminal mr-2 text-blue-400"></i> Journal de migration |
|
|
<span class="ml-2 px-2 py-0.5 bg-gray-700 text-xs rounded-full">Live</span> |
|
|
</h3> |
|
|
<div class="flex space-x-2"> |
|
|
<button class="text-gray-400 hover:text-white p-1 rounded"> |
|
|
<i class="fas fa-search"></i> |
|
|
</button> |
|
|
<button class="text-gray-400 hover:text-white p-1 rounded"> |
|
|
<i class="fas fa-filter"></i> |
|
|
</button> |
|
|
<button class="text-gray-400 hover:text-white p-1 rounded" id="clear-logs"> |
|
|
<i class="fas fa-trash"></i> |
|
|
</button> |
|
|
<button class="text-gray-400 hover:text-white p-1 rounded" id="close-logs"> |
|
|
<i class="fas fa-times"></i> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
<div class="font-mono text-sm space-y-1" id="log-container"> |
|
|
<div class="log-entry text-green-400 flex"> |
|
|
<span class="text-gray-500 mr-3">[12:45:32]</span> |
|
|
<span>INFO: Migration des articles terminée (1245 éléments)</span> |
|
|
</div> |
|
|
<div class="log-entry text-blue-400 flex"> |
|
|
<span class="text-gray-500 mr-3">[12:46:18]</span> |
|
|
<span>INFO: Début de la migration des pages</span> |
|
|
</div> |
|
|
<div class="log-entry text-yellow-400 flex"> |
|
|
<span class="text-gray-500 mr-3">[12:47:05]</span> |
|
|
<span>WARNING: Module Webform nécessite une attention particulière</span> |
|
|
</div> |
|
|
<div class="log-entry text-gray-400 flex"> |
|
|
<span class="text-gray-500 mr-3">[12:48:22]</span> |
|
|
<span>INFO: Progression globale: 45%</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<script> |
|
|
|
|
|
document.addEventListener('DOMContentLoaded', function() { |
|
|
const progressFill = document.querySelector('.progress-fill'); |
|
|
let width = 45; |
|
|
|
|
|
|
|
|
const progressInterval = setInterval(() => { |
|
|
width += Math.random() * 2; |
|
|
if (width >= 100) { |
|
|
width = 100; |
|
|
clearInterval(progressInterval); |
|
|
addLogEntry("Migration terminée avec succès!", "green"); |
|
|
} |
|
|
progressFill.style.width = width + '%'; |
|
|
}, 3000); |
|
|
|
|
|
|
|
|
const logContainer = document.getElementById('log-container'); |
|
|
const clearLogsBtn = document.getElementById('clear-logs'); |
|
|
const closeLogsBtn = document.getElementById('close-logs'); |
|
|
|
|
|
function addLogEntry(message, color = "gray") { |
|
|
const now = new Date(); |
|
|
const timeString = `[${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}]`; |
|
|
|
|
|
const logEntry = document.createElement('div'); |
|
|
logEntry.className = `log-entry text-${color}-400 flex`; |
|
|
logEntry.innerHTML = ` |
|
|
<span class="text-gray-500 mr-3">${timeString}</span> |
|
|
<span>${message}</span> |
|
|
`; |
|
|
|
|
|
logContainer.appendChild(logEntry); |
|
|
logContainer.scrollTop = logContainer.scrollHeight; |
|
|
} |
|
|
|
|
|
|
|
|
const logMessages = [ |
|
|
{ msg: "Vérification des dépendances des modules", color: "blue" }, |
|
|
{ msg: "Migration des utilisateurs en cours", color: "blue" }, |
|
|
{ msg: "Erreur de connexion à la base de données", color: "red" }, |
|
|
{ msg: "Tentative de reconnexion...", color: "yellow" }, |
|
|
{ msg: "Connexion rétablie", color: "green" }, |
|
|
{ msg: "Export des configurations terminé", color: "green" }, |
|
|
{ msg: "Nettoyage du cache", color: "gray" } |
|
|
]; |
|
|
|
|
|
let logInterval = setInterval(() => { |
|
|
const randomMsg = logMessages[Math.floor(Math.random() * logMessages.length)]; |
|
|
addLogEntry(randomMsg.msg, randomMsg.color); |
|
|
}, 5000); |
|
|
|
|
|
clearLogsBtn.addEventListener('click', function() { |
|
|
logContainer.innerHTML = ''; |
|
|
}); |
|
|
|
|
|
closeLogsBtn.addEventListener('click', function() { |
|
|
document.querySelector('.fixed.bottom-0').style.display = 'none'; |
|
|
clearInterval(logInterval); |
|
|
}); |
|
|
|
|
|
|
|
|
const moduleStatuses = document.querySelectorAll('.module-status-badge'); |
|
|
setInterval(() => { |
|
|
moduleStatuses.forEach(badge => { |
|
|
if (Math.random() > 0.8) { |
|
|
badge.classList.toggle('animate-pulse'); |
|
|
} |
|
|
}); |
|
|
}, 2000); |
|
|
}); |
|
|
</script> |
|
|
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=bleblond/bap" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> |
|
|
</html> |