@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)
{{ $label }}
@endforeach
@endif
@error('docTitle')
{{ $message }}
@enderror
@if ($documentId)
@livewire('toggle-favorite', [
'favoritableType' => \App\Models\Document::class,
'favoritableId' => $documentId,
], key('fav-document-'.$documentId))
@endif
{{ $docIsPublic ? 'Public' : 'Privé' }}
{{-- Catégorie --}}
@php($selectedCategory = $categoryId ? $this->categories()->firstWhere('id', $categoryId) : null)
@if ($selectedCategory?->color)
@endif
{{ $selectedCategory ? $selectedCategory->label : 'Sans catégorie' }}
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.
--}}
+ Rattacher
{{--
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.
--}}
Projet
Élément
@if ($attachSearchType === 'project')
@forelse ($this->searchAttachableProjects() as $project)
{{ $project->code }}
— {{ $project->name }}
@empty
Aucun résultat.
@endforelse
@else
@forelse ($this->searchAttachableElements() as $element)
{{ $element->code }}
— {{ $element->title }}
@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. --}}
+ Ajouter
@forelse ($this->searchAddableAuthors() as $person)
{{ $person->full_name }}
@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