311 lines
8.2 KiB
Markdown
311 lines
8.2 KiB
Markdown
# 📚 Documentation - Page des Classes Modernisée
|
|
|
|
> **Version**: 2.0
|
|
> **Date de mise à jour**: 7 août 2025
|
|
> **Auteur**: Équipe UI/UX Design
|
|
|
|
## 🎯 **Vue d'Ensemble**
|
|
|
|
La page des classes a été **entièrement modernisée** pour adopter le design system cohérent de Notytex. Elle transforme une interface basique en une expérience moderne, engageante et parfaitement harmonisée avec le reste de l'application.
|
|
|
|
### 📋 **Fichiers Concernés**
|
|
|
|
- `templates/classes.html` - Page principale modernisée
|
|
- `templates/components/class/class_card.html` - Nouveau composant de carte de classe
|
|
- `templates/components/common/macros.html` - Macros réutilisées
|
|
|
|
---
|
|
|
|
## 🎨 **Architecture Visuelle**
|
|
|
|
### **Structure de Page**
|
|
|
|
```
|
|
┌─── Hero Section (Gradient coloré) ────┐
|
|
│ "Mes Classes 🏫" │
|
|
│ Meta-info + Bouton action │
|
|
└────────────────────────────────────────┘
|
|
|
|
┌─── Grille de Cartes Responsives ──────┐
|
|
│ ┌─ Carte 1 ─┐ ┌─ Carte 2 ─┐ │
|
|
│ │ 6ème A │ │ 5ème A │ ... │
|
|
│ │ (Bleu) │ │ (Vert) │ │
|
|
│ └───────────┘ └───────────┘ │
|
|
└────────────────────────────────────────┘
|
|
|
|
📱 État vide moderne (si aucune classe)
|
|
```
|
|
|
|
### **Design Tokens**
|
|
|
|
```scss
|
|
// Gradients par niveau
|
|
6ème: from-blue-500 to-blue-600
|
|
5ème: from-green-500 to-green-600
|
|
4ème: from-purple-500 to-purple-600
|
|
3ème: from-orange-500 to-orange-600
|
|
2nde: from-red-500 to-red-600
|
|
1ère: from-pink-500 to-pink-600
|
|
Term: from-indigo-500 to-indigo-600
|
|
???: from-gray-500 to-gray-600 // Non reconnu
|
|
|
|
// Hero Section
|
|
Gradient: from-blue-600 to-green-600
|
|
```
|
|
|
|
---
|
|
|
|
## 🧩 **Composants Utilisés**
|
|
|
|
### **1. Hero Section**
|
|
|
|
```jinja2
|
|
{{ hero_section(
|
|
title="Mes Classes 🏫",
|
|
subtitle="Gérez et organisez toutes vos classes",
|
|
meta_info=[
|
|
{'icon': '...', 'text': classes|length ~ ' classes actives'},
|
|
{'icon': '...', 'text': 'Année scolaire 2024-2025'}
|
|
],
|
|
primary_action={
|
|
'url': '#',
|
|
'text': 'Nouvelle classe',
|
|
'icon': '...'
|
|
},
|
|
gradient_class="from-blue-600 to-green-600"
|
|
) }}
|
|
```
|
|
|
|
**✨ Caractéristiques:**
|
|
|
|
- Gradient thématique éducatif (bleu vers vert)
|
|
- Meta-informations dynamiques (nombre de classes, année)
|
|
- Bouton d'action principal intégré
|
|
- Responsive design automatique
|
|
|
|
### **2. Composant class_card**
|
|
|
|
**Fichier**: `templates/components/class/class_card.html`
|
|
|
|
```jinja2
|
|
{{ class_card(class) }}
|
|
```
|
|
|
|
**🎯 Fonctionnalités:**
|
|
|
|
- **Couleurs adaptatives** selon le niveau de classe
|
|
- **Header gradient** avec nom de classe proéminent
|
|
- **Indicateur d'élèves** en temps réel
|
|
- **Actions intégrées** : Voir élèves, Évaluations, Modifier
|
|
- **Métadonnées** : Niveau, nombre d'élèves, statut
|
|
|
|
---
|
|
|
|
## 🔍 **Logique d'Affichage**
|
|
|
|
### **Extraction du Niveau de Classe**
|
|
|
|
```jinja2
|
|
{# Extraire le niveau de classe du nom (ex: "6ème A" -> 6, "Terminale S" -> "T") #}
|
|
{% set class_level = class.name[0] | int if class.name[0].isdigit() else ('T' if class.name.startswith('T') or class.name.startswith('t') else 'unknown') %}
|
|
```
|
|
|
|
**⚙️ Algorithme:**
|
|
|
|
1. Prendre le premier caractère du nom de classe
|
|
2. Si c'est un chiffre → niveau de classe
|
|
3. Si commence par T/t → Terminale ("T")
|
|
4. Sinon → "unknown" (Non reconnu, gris)
|
|
|
|
### **Attribution des Couleurs**
|
|
|
|
```jinja2
|
|
{% set year_colors = {
|
|
6: {'bg': 'from-blue-500 to-blue-600', 'accent': 'blue'},
|
|
5: {'bg': 'from-green-500 to-green-600', 'accent': 'green'},
|
|
// ... autres niveaux
|
|
} %}
|
|
{% set year_config = year_colors.get(class_level, year_colors[6]) %}
|
|
```
|
|
|
|
**🎨 Système de Couleurs:**
|
|
|
|
- Chaque niveau a sa **couleur signature**
|
|
- Fallback automatique vers "unknown" (gris) si niveau indéterminable
|
|
- **Indication visuelle claire** pour les classes non reconnues
|
|
- Cohérence visuelle avec l'ensemble du site
|
|
|
|
---
|
|
|
|
## 📱 **Responsive Design**
|
|
|
|
### **Breakpoints**
|
|
|
|
```css
|
|
/* Mobile-first approach */
|
|
grid-cols-1 /* Mobile: 1 colonne */
|
|
md:grid-cols-2 /* Tablette: 2 colonnes */
|
|
lg:grid-cols-3 /* Desktop: 3 colonnes */
|
|
```
|
|
|
|
### **Adaptations par Écran**
|
|
|
|
| Écran | Layout | Détails |
|
|
| ------------ | ------ | --------------------------------------- |
|
|
| **Mobile** | 1 col | Cartes pleine largeur, actions empilées |
|
|
| **Tablette** | 2 cols | Équilibre lecture/espace |
|
|
| **Desktop** | 3 cols | Optimisation espace écran |
|
|
|
|
---
|
|
|
|
## 🔄 **États d'Interface**
|
|
|
|
### **État avec Classes**
|
|
|
|
- **Grille de cartes** responsive
|
|
- **Tri automatique** par année et nom
|
|
- **Actions rapides** sur chaque carte
|
|
- **Indicateurs visuels** (badges, compteurs)
|
|
|
|
### **État Vide**
|
|
|
|
```jinja2
|
|
<div class="bg-white rounded-xl shadow-lg p-12 text-center">
|
|
<div class="w-24 h-24 bg-gradient-to-br from-blue-100 to-green-100 rounded-full flex items-center justify-center mx-auto mb-6">
|
|
<svg class="w-12 h-12 text-blue-600">...</svg>
|
|
</div>
|
|
|
|
<h3 class="text-xl font-bold text-gray-900 mb-2">Aucune classe créée</h3>
|
|
<p class="text-gray-600 mb-6 max-w-md mx-auto">
|
|
Commencez votre gestion scolaire en créant votre première classe...
|
|
</p>
|
|
|
|
<button class="bg-gradient-to-r from-blue-500 to-green-500...">
|
|
Créer ma première classe
|
|
</button>
|
|
</div>
|
|
```
|
|
|
|
**🎯 Caractéristiques État Vide:**
|
|
|
|
- **Illustration SVG** moderne et cohérente
|
|
- **Message encourageant** et guidant
|
|
- **CTA proéminent** avec gradient thématique
|
|
- **Conseils contextuels** pour débuter
|
|
|
|
---
|
|
|
|
## ⚡ **Performances & Optimisations**
|
|
|
|
### **Chargement des Assets**
|
|
|
|
- **Composants modulaires** pour réutilisabilité
|
|
- **CSS inline minimal** pour performance
|
|
- **SVG optimisés** pour icônes
|
|
- **Lazy loading** des images (si applicable)
|
|
|
|
### **Accessibilité**
|
|
|
|
```html
|
|
<!-- Contraste respecté -->
|
|
<!-- Navigation clavier -->
|
|
<!-- ARIA labels appropriés -->
|
|
<!-- Focus indicators -->
|
|
```
|
|
|
|
---
|
|
|
|
## 🧪 **Tests & Validation**
|
|
|
|
### **Tests Effectués**
|
|
|
|
✅ **Syntaxe Jinja2** - Templates valides
|
|
✅ **Extraction niveau** - Algorithme robuste
|
|
✅ **Responsive design** - Tous breakpoints
|
|
✅ **État vide** - Affichage correct
|
|
✅ **Données réelles** - Test avec 5 classes
|
|
|
|
### **Commande de Test**
|
|
|
|
```bash
|
|
uv run python -c "
|
|
from app import create_app
|
|
app = create_app()
|
|
with app.app_context():
|
|
env = app.jinja_env
|
|
template = env.get_template('classes.html')
|
|
print('✅ Template classes.html valide')
|
|
"
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 **Intégration & Déploiement**
|
|
|
|
### **Compatibilité**
|
|
|
|
- **Flask/Jinja2** : 100% compatible
|
|
- **TailwindCSS** : Classes utilitaires standard
|
|
- **Navigateurs** : Tous navigateurs modernes
|
|
- **Mobile** : Responsive natif
|
|
|
|
### **Dépendances**
|
|
|
|
- `templates/components/common/macros.html` - Macros partagées
|
|
- **Modèles** : `ClassGroup` avec relations `students`
|
|
- **Routes** : Route `/classes` existante
|
|
|
|
---
|
|
|
|
## 📖 **Guide d'Utilisation**
|
|
|
|
### **Pour les Développeurs**
|
|
|
|
1. **Réutiliser le composant** :
|
|
|
|
```jinja2
|
|
{% from 'components/class/class_card.html' import class_card %}
|
|
{{ class_card(ma_classe) }}
|
|
```
|
|
|
|
2. **Personnaliser les couleurs** :
|
|
|
|
```jinja2
|
|
{# Modifier year_colors dans class_card.html #}
|
|
```
|
|
|
|
3. **Ajouter des actions** :
|
|
```jinja2
|
|
{# Modifier section "Actions principales" #}
|
|
```
|
|
|
|
### **Pour les Designers**
|
|
|
|
- **Couleurs** : Palette définie dans `year_colors`
|
|
- **Espacement** : Classes TailwindCSS standard
|
|
- **Typography** : Hiérarchie respectée (text-xl, text-2xl...)
|
|
- **Animations** : `hover:scale-105`, transitions fluides
|
|
|
|
---
|
|
|
|
## 🎓 **Bonnes Pratiques Appliquées**
|
|
|
|
### **Design System**
|
|
|
|
✅ **Cohérence visuelle** avec pages existantes
|
|
✅ **Composants réutilisables** et modulaires
|
|
✅ **Tokens de design** centralisés
|
|
✅ **Responsive-first** approach
|
|
|
|
### **Code Quality**
|
|
|
|
✅ **Templates lisibles** et bien commentés
|
|
✅ **Séparation logique/présentation**
|
|
✅ **Gestion d'erreur** robuste
|
|
✅ **Performance optimisée**
|
|
|
|
---
|
|
|
|
**📝 Cette documentation est maintenue à jour avec chaque évolution de la page des classes.**
|
|
|