{{-- ! ========================================================================== ! PAGE DE DETAIL D'UNE CONFESSION - Interface moderne Alpine.js ! ========================================================================== ! ! * Cette page affiche le détail complet d'une confession avec : ! ? - Affichage de la confession (titre, description, catégorie) ! ? - Système de commentaires hiérarchique (commentaires + réponses) ! ? - Système de signalement pour confession et commentaires ! ? - Gestion des likes/soutiens avec Alpine.js ! ? - Interface responsive et moderne ! ! TODO: Ajouter système de partage social ! TODO: Implémenter notifications temps réel ! ! @@param Confession $confession - L'objet confession à afficher ! @@uses Alpine.js - Pour l'interactivité frontend ! @@uses Tailwind CSS - Pour le styling ! ========================================================================== --}} @extends("layouts.base") @php use Illuminate\Support\Str; @endphp {{-- * ======================================================================= * CONFIGURATION DE LA PAGE * ======================================================================= --}} {{-- ! Titre dynamique basé sur le titre de la confession --}} @section("title", $confession->title) @section( "meta_description", Str::limit( preg_replace("/\s+/", " ", strip_tags($confession->description)), 155, ) ) @push("styles") {{-- * Métadonnées OG/Twitter pour le partage social des confessions --}} {{-- Open Graph Meta Tags --}} {{-- Twitter Card Meta Tags --}} @endpush {{-- * ======================================================================= * CONTENU PRINCIPAL DE LA PAGE * ======================================================================= --}} @section("content") {{-- ! =================================================================== ! CONTAINER PRINCIPAL AVEC ALPINE.JS ! =================================================================== ! ! * Configuration Alpine.js pour toute l'interactivité : ! ? - x-data="confessionData(id)" : Initialise le state Alpine.js ! ? - x-init="initializeData()" : Lance le chargement initial des données ! ? - @scroll.window="handleScroll()" : Gère le scroll infini pour commentaires ! ! * Classes Tailwind pour layout responsive : ! ? - max-w-4xl : Largeur maximale du container ! ? - mx-auto : Centrage horizontal ! ? - px-4 sm:px-6 lg:px-8 : Padding responsive ! =================================================================== --}}
{{-- ! =============================================================== ! CARTE PRINCIPALE DE LA CONFESSION ! =============================================================== ! ! * Design moderne avec : ! ? - Coins arrondis (rounded-2xl) ! ? - Ombre élégante (shadow-xl) ! ? - Bordure subtile (border-gray-100) ! ? - Espacement en bas pour séparer des commentaires (mb-8) ! =============================================================== --}}
{{-- ! =========================================================== ! INTRO CONFESSION - Badge de catégorie léger ! =========================================================== ! ! * Affichage discret de la catégorie : ! ? - Badge arrondi inspiré du design Quora mobile ! ? - Couleurs dynamiques via getTailwindCategoryClass() ! ? - Fallback si pas de catégorie : "category-default" ! =========================================================== --}} {{-- ! =========================================================== ! CORPS PRINCIPAL DE LA CONFESSION ! =========================================================== ! ! * Structure du contenu : ! ? - Titre de la confession (H1 responsive) ! ? - Description complète avec mise en forme prose ! ! * Responsive design : ! ? - text-2xl md:text-3xl : Taille titre adaptive ! ? - prose prose-lg : Mise en forme typographique élégante ! =========================================================== --}}
@if ($confession->category)
{{ $confession->category->translatedName ?? __("confession.no_category") }}
@endif {{-- ! Titre principal de la confession - Responsive --}}

{{ $confession->title }}

{{-- ! Description avec mise en forme prose Tailwind --}}

{{ $confession->description }}

{{-- ! =========================================================== ! FOOTER AVEC METADONNEES TEMPORELLES ! =========================================================== ! ! * Affiche les méta : ! ? - Catégorie (si disponible) ! ? - Dates de création / mise à jour ! ! * Style : ! ? - Texte compact en gris, séparé par des puces ! ? - Fond gris clair pour isoler de la description ! ! * Format des dates : d/m/Y H:i (ex: 15/03/2025 14:30) ! =========================================================== --}}
@if ($confession->category) {{ $confession->category->translatedName ?? __("confession.no_category") }} @endif {{ __("confession.created_at") }} {{ $confession->created_at->format("d/m/Y H:i") }} @if ($confession->created_at != $confession->updated_at) {{ __("confession.updated_at") }} {{ $confession->updated_at->format("d/m/Y H:i") }} @endif
{{-- ! =============================================================== ! SECTION DE SOUTIEN ET SIGNALEMENT ! =============================================================== ! ! * Boutons d'interaction utilisateur : ! ? - Bouton "Soutenir" (toggle like/unlike) ! ? - Bouton "Signaler" pour modération ! ! * Fonctionnalités Alpine.js : ! ? - toggleSupport() : Gère le like/unlike ! ? - openConfessionReportModal() : Ouvre modal signalement ! ? - Variables reactives : isSupported, supportLoading ! ! * Authentification requise (@auth) ! =============================================================== --}}
@auth {{-- ! ======================================================= ! BOUTON SOUTENIR - Like/Unlike dynamique ! ======================================================= ! ! * Comportement Alpine.js : ! ? - @click="toggleSupport()" : Toggle état soutien ! ? - :disabled="supportLoading" : Désactivé pendant requête ! ? - :class binding dynamique selon état isSupported ! ! * États visuels : ! ? - Soutenu : fond vert, texte blanc ! ? - Non soutenu : fond blanc, bordure verte ! ? - Loading : spinner + désactivé ! ! * Animations : ! ? - Transitions douces sur les couleurs ! ======================================================= --}} @else
{{ __("confession.support") }}
@endauth @php $shareUrl = route('confession.show', $confession); $shareTitle = $confession->title; $shareDescription = Str::limit(strip_tags($confession->description), 120); $encodedShareUrl = urlencode($shareUrl); $encodedShareText = urlencode($shareTitle . ' - ' . $shareDescription); @endphp
@auth @endauth {{-- ! =============================================================== ! SECTION DES COMMENTAIRES - Système hiérarchique complet ! =============================================================== ! ! * Fonctionnalités principales : ! ? - Affichage commentaires avec pagination infinie ! ? - Système de réponses (1 niveau de hiérarchie) ! ? - Votes up/down pour chaque commentaire ! ? - Signalement de commentaires ! ? - Ajout de nouveaux commentaires ! ! * Structure : ! ? - Header avec titre et compteur dynamique ! ? - Zone d'alerte pour messages utilisateur ! ? - Formulaire d'ajout commentaire (si connecté) ! ? - Liste des commentaires avec Alpine.js ! ? - Chargement infini au scroll ! ! * Variables Alpine.js utilisées : ! ? - displayedComments : Liste des commentaires affichés ! ? - totalComments : Nombre total (affiché dans header) ! ? - loading : État de chargement ! ? - alertMessage : Messages d'erreur/succès ! =============================================================== --}}
{{-- ! ======================================================= ! HEADER DE LA SECTION COMMENTAIRES ! ======================================================= ! ! * Design avec gradient bleu ! * Titre avec emoji et compteur dynamique ! * Compteur mis à jour en temps réel via Alpine.js ! ======================================================= --}}

{{-- ! Emoji et titre --}} 💬 {{ __("confession.comments") }} {{-- ! Badge compteur dynamique Alpine.js --}}

{{-- ! ======================================================= ! ZONE D'ALERTE DYNAMIQUE ! ======================================================= ! ! * Affichage conditionnel des messages : ! ? - Messages d'erreur (rouge) ! ? - Messages de succès (vert) ! ? - Messages d'info (bleu) ! ! * Contrôlée par Alpine.js : ! ? - x-show="alertMessage" : Affichage conditionnel ! ? - x-text="alertMessage" : Contenu du message ! ? - :class binding pour couleurs selon type ! ======================================================= --}}
{{-- * Formulaire add comment --}} @auth

{{ __("confession.add_comment") }}

{{ __("confession.min_characters_required") }}
@else {{-- * Message pour les non connectés --}}
{{ __("confession.login_to_comment") }}
@endauth {{-- * Liste des commentaires --}}

{{ __("confession.loading_comments") }}

{{ __("confession.no_comments") }}

{{ __('confession.loading_more_comments') }}

{{ __('confession.all_comments_loaded') }}

{{-- Modal de signalement de commentaire - INSIDE x-data context --}} @auth @endauth
{{-- Fermeture de la div x-data --}} {{-- ! =================================================================== ! SCRIPT ALPINE.JS - Logique interactive principale ! =================================================================== ! ! * Cette section contient toute la logique Alpine.js pour : ! ? - Gestion des commentaires (chargement, affichage, ajout) ! ? - Système de votes (up/down pour commentaires) ! ? - Système de soutien (like confession) ! ? - Modales de signalement (confession et commentaires) ! ? - Pagination infinie et scroll ! ? - Gestion des réponses aux commentaires ! ! * Variables globales PHP injectées : ! ? - $confession : Objet confession complet ! ? - $reportReasons : Raisons de signalement traduites ! ? - auth()->id() : ID utilisateur connecté ! =================================================================== --}} @php($reportReasons = \App\Models\Report::getReasons()) @endsection