diff --git a/resources/views/components/img.blade.php b/resources/views/components/img.blade.php index b648020..7f9f9bb 100644 --- a/resources/views/components/img.blade.php +++ b/resources/views/components/img.blade.php @@ -1,7 +1,23 @@ @props([ 'conversion' => null, 'responsive' => true, + 'loading' => 'lazy', 'media', ]) - + +{{ $media->getName($conversion) }} diff --git a/src/Models/Media.php b/src/Models/Media.php index f6eabc4..80aa11d 100644 --- a/src/Models/Media.php +++ b/src/Models/Media.php @@ -64,7 +64,8 @@ class Media extends Model public static function booted() { static::deleted(function (Media $media) { - $media->generated_conversions + $media + ->generated_conversions ->each(fn (GeneratedConversion $generatedConversion) => $generatedConversion->delete()); $media->deleteDirectory(); }); @@ -154,6 +155,51 @@ public function getUrl(?string $conversion = null): ?string return null; } + public function getWidth(?string $conversion = null): ?int + { + if ($conversion) { + return $this->getGeneratedConversion($conversion)?->width; + } + + return $this->width; + } + + public function getHeight(?string $conversion = null): ?int + { + if ($conversion) { + return $this->getGeneratedConversion($conversion)?->height; + } + + return $this->height; + } + + public function getName(?string $conversion = null): ?string + { + if ($conversion) { + return $this->getGeneratedConversion($conversion)?->name; + } + + return $this->name; + } + + public function getSize(?string $conversion = null): ?int + { + if ($conversion) { + return $this->getGeneratedConversion($conversion)?->size; + } + + return $this->size; + } + + public function getAspectRatio(?string $conversion = null): ?float + { + if ($conversion) { + return $this->getGeneratedConversion($conversion)?->aspect_ratio; + } + + return $this->aspect_ratio; + } + /** * Retreive the temporary url of a conversion or nested conversion * Ex: $media->getUrl('poster.480p') @@ -391,20 +437,25 @@ public function deleteGeneratedConversions(): static return $this; } - public function getResponsiveImages(): Collection + public function getResponsiveImages(?string $conversion = null): Collection { return collect(ResponsiveImagesConversionsPreset::$widths) - ->map(fn (int $width) => $this->getGeneratedConversion($width)) + ->when($conversion, + fn (Collection $collection) => $collection->map(fn (int $width) => $this->getGeneratedConversion("{$conversion}.{$width}")), + fn (Collection $collection) => $collection->map(fn (int $width) => $this->getGeneratedConversion($width)), + ) ->filter(); } /** * Exemple: elva-fairy-480w.jpg 480w, elva-fairy-800w.jpg 800w */ - public function getSrcset(): Collection + public function getSrcset(?string $conversion = null): Collection { - return $this->getResponsiveImages() - ->map(fn (GeneratedConversion $generatedConversion) => $generatedConversion->getUrl().' '.$generatedConversion->width.'w'); + return $this + ->getResponsiveImages($conversion) + ->filter(fn (GeneratedConversion $generatedConversion) => $generatedConversion->getUrl()) + ->map(fn (GeneratedConversion $generatedConversion) => "{$generatedConversion->getUrl()} {$generatedConversion->width}w"); } /**