@if ($documentId !== null && $viewMode === 'read') @php($readDocument = \App\Models\Document::with(['category', 'authors', 'projects', 'elements'])->find($documentId)) @if ($readDocument)

{{ $readDocument->title }}

@if ($canEdit) Modifier @endif
{{ $readDocument->is_public ? 'Public' : 'Privé' }} @if ($readDocument->category) @if ($readDocument->category->color) @endif {{ $readDocument->category->label }} @endif
@if ($readDocument->description)

{{ $readDocument->description }}

@endif @if ($readDocument->type === 'file') {{ $readDocument->original_filename ?? 'Ouvrir le fichier' }} @if ($readDocument->humanFileSize()) ({{ $readDocument->humanFileSize() }}) @endif @elseif ($readDocument->type === 'url') {{-- `safeUrl()` et non `url` : voir son docblock — une URL enregistrée avant le durcissement de la validation peut porter un schéma `javascript:`, qui s'exécuterait au clic. --}} @if ($readDocument->safeUrl() !== null) {{ $readDocument->url }} @else

Adresse non ouvrable : {{ $readDocument->url }}

@endif @else
{!! \Illuminate\Support\Str::markdown((string) $readDocument->body, ['html_input' => 'strip', 'allow_unsafe_links' => false]) !!}
@endif @if ($readDocument->projects->isNotEmpty() || $readDocument->elements->isNotEmpty())
@foreach ($readDocument->projects as $project) {{ $project->code }} @endforeach @foreach ($readDocument->elements as $relatedElement) {{ $relatedElement->code }} @endforeach
@endif
Par {{ $readDocument->authors->pluck('full_name')->implode(', ') }} · Créé le {{ $readDocument->created_at->translatedFormat('d/m/Y à H:i') }} @if ($readDocument->wasEdited()) · Modifié {{ $readDocument->updated_at->diffForHumans() }} @endif
@if ($canDelete)
Supprimer
@endif @endif @else @if (! $canEdit)
Lecture seule — seuls les auteurs peuvent modifier ce document.
@endif @if ($documentId === null)
@foreach (['file' => 'Fichier', 'url' => 'Lien', 'markdown' => 'Markdown'] as $key => $label) @endforeach
@endif
@error('docTitle')

{{ $message }}

@enderror
@if ($documentId) @livewire('toggle-favorite', [ 'favoritableType' => \App\Models\Document::class, 'favoritableId' => $documentId, ], key('fav-document-'.$documentId)) @endif
{{-- Catégorie --}} @php($selectedCategory = $categoryId ? $this->categories()->firstWhere('id', $categoryId) : null) Sans catégorie @foreach ($this->categories() as $category) {{ $category->label }} @endforeach
{{-- Contenu — dépend du type, figé après création --}}

@if ($docType === 'file') Fichier @elseif ($docType === 'url') Lien @else Contenu (Markdown) @endif

@if ($docType === 'file') @if ($documentId !== null) @php($editingDocument = \App\Models\Document::find($documentId)) @if ($editingDocument?->original_filename)

Fichier actuel : {{ $editingDocument->original_filename }} @if ($editingDocument->humanFileSize()) ({{ $editingDocument->humanFileSize() }}) @endif

@endif @endif @if ($canEdit)
Envoi en cours…
@error('newFile')

{{ $message }}

@enderror @if ($documentId !== null)

Choisir un fichier le remplace.

@endif @endif @elseif ($docType === 'url') @error('docUrl')

{{ $message }}

@enderror @else
@if ($bodyViewMode === 'edit') @else
{!! $this->renderedBodyPreview() !!}
@endif @endif
{{-- Rattachements — plusieurs projets et/ou éléments par document --}}

Rattachements

@foreach ($attachProjectIds as $projectId) @php($project = \App\Models\Project::find($projectId)) @if ($project) {{ $project->code }} @if ($canEdit) @endif @endif @endforeach @foreach ($attachElementIds as $elementId) @php($element = \App\Models\ProjectElement::find($elementId)) @if ($element) {{ $element->code }} @if ($canEdit) @endif @endif @endforeach @if ($canEdit) {{-- `wire:key` n'est pas décoratif ici : le composant dropdown de Filament ne pose `wire:ignore.self` sur son panneau que si une clé est fournie. Sans ça, chaque `wire:click` interne (bascule Projet/Élément) déclenche un re-render dont le morphing DOM écrase le `display: block` inline posé par `x-float` — et le menu se referme tout seul. --}}
{{-- Les `wire:key` de ce bloc ne sont pas cosmétiques : sans eux, le morphing Livewire détruit/recrée ces nœuds à chaque bascule. L'événement `click` remonte alors depuis un élément qui n'est plus dans le DOM, `x-float` conclut à un clic hors du panneau et referme le menu. --}}
@if ($attachSearchType === 'project') @forelse ($this->searchAttachableProjects() as $project) @empty

Aucun résultat.

@endforelse @else @forelse ($this->searchAttachableElements() as $element) @empty

Aucun résultat.

@endforelse @endif
@elseif ($attachProjectIds === [] && $attachElementIds === []) Non rattaché @endif
{{-- Auteurs — seul un auteur actuel peut en ajouter/retirer un autre --}}

Auteurs

@foreach ($authorIds as $personId) @php($person = \App\Models\Person::find($personId)) @if ($person) {{ $person->full_name }} @if ($canEdit && count($authorIds) > 1) @endif @endif @endforeach @if ($canEdit) {{-- Même raison que le dropdown « + Rattacher » ci-dessus : la recherche `wire:model.live` re-render à chaque frappe. --}}
@forelse ($this->searchAddableAuthors() as $person) @empty

Aucun résultat — rattache un projet ou un élément pour trouver des personnes.

@endforelse
@endif
@error('authorIds')

{{ $message }}

@enderror
@if ($documentId !== null) @php($editingDocumentMeta = \App\Models\Document::find($documentId)) @if ($editingDocumentMeta)
Créé le {{ $editingDocumentMeta->created_at->translatedFormat('d/m/Y à H:i') }} @if ($editingDocumentMeta->wasEdited()) Modifié {{ $editingDocumentMeta->updated_at->diffForHumans() }} @endif
@endif @endif @if ($canEdit || $canDelete)
@if ($canDelete && $documentId !== null) Supprimer @else @endif @if ($canEdit) Enregistrer @endif
@endif @endif