View source
<?php
namespace Drupal\blazy;
class BlazyFormatter extends BlazyManager {
protected $firstItem = NULL;
private $isImageDimensionSet;
public function buildSettings(array &$build, $items, $entity) {
$settings =& $build['settings'];
$count = count($items);
$entity_type_id = $settings['entity_type_id'];
$entity_id = $settings['entity_id'];
$bundle = $settings['bundle'];
$field_name = $settings['field_name'];
$field_clean = str_replace('field_', '', $field_name);
$view_mode = empty($settings['current_view_mode']) ? '_custom' : $settings['current_view_mode'];
$namespace = $settings['namespace'] = empty($settings['namespace']) ? 'blazy' : $settings['namespace'];
$id = isset($settings['id']) ? $settings['id'] : '';
$gallery_id = "{$namespace}-{$entity_type_id}-{$bundle}-{$field_clean}-{$view_mode}";
$id = Blazy::getHtmlId("{$gallery_id}-{$entity_id}", $id);
$switch = empty($settings['media_switch']) ? '' : $settings['media_switch'];
$internal_path = entity_uri($entity_type_id, $entity);
$langcode = $settings['langcode'];
$settings += $this
->getCommonSettings();
$settings['cache_metadata'] = [
'keys' => [
$id,
$count,
$langcode,
],
];
$settings['content_url'] = isset($internal_path['path']) ? $internal_path['path'] : '';
$settings['count'] = $count;
$settings['gallery_id'] = str_replace('_', '-', $gallery_id . '-' . $switch);
$settings['id'] = $id;
$settings['lightbox'] = $switch && in_array($switch, $this
->getLightboxes()) ? $switch : FALSE;
$settings['entity'] = empty($settings['lightbox']) ? NULL : $entity;
$settings['resimage'] = function_exists('picture_mapping_load') && $this
->config('responsive_image', FALSE, 'blazy.settings') && !empty($settings['responsive_image_style']);
if (!empty($settings['vanilla'])) {
$settings = array_filter($settings);
return;
}
$settings['breakpoints'] = isset($settings['breakpoints']) && empty($settings['responsive_image_style']) ? $settings['breakpoints'] : [];
$settings['caption'] = empty($settings['caption']) ? [] : array_filter($settings['caption']);
$settings['background'] = empty($settings['responsive_image_style']) && !empty($settings['background']);
$settings['placeholder'] = $this
->config('placeholder', '', 'blazy.settings');
$this
->cleanUpBreakpoints($settings);
$settings['blazy'] = !empty($settings['blazy']) || $settings['background'] || !empty($settings['resimage']) || !empty($settings['breakpoints']);
if ($settings['blazy']) {
$settings['lazy'] = 'blazy';
}
if ($switch) {
$settings[$switch] = empty($settings[$switch]) ? $switch : $settings[$switch];
}
$ratio = FALSE;
if (!empty($settings['ratio'])) {
$ratio = empty($settings['responsive_image_style']);
if ($settings['ratio'] == 'enforced' || $settings['background']) {
$ratio = TRUE;
}
}
$settings['ratio'] = $ratio ? $settings['ratio'] : FALSE;
}
public function preBuildElements(array &$build, $items, $entity, array $entities = []) {
$this
->buildSettings($build, $items, $entity);
$settings =& $build['settings'];
if (isset($items[0]) && ($item = $items[0])) {
$this
->extractFirstItem($settings, $item, reset($entities));
}
if ((!empty($settings['_uri']) || !empty($settings['first_uri'])) && !$settings['resimage']) {
$this
->setImageDimensions($settings);
}
if (function_exists('views_get_current_view') && ($view = views_get_current_view())) {
$settings['view_name'] = $view->name;
$settings['current_view_mode'] = $view->current_display;
$settings['view_plugin_id'] = $view->style_plugin->plugin_name;
}
drupal_alter('blazy_settings', $build, $items);
}
public function postBuildElements(array &$build, $items, $entity, array $entities = []) {
$build['settings']['first_item'] = $this->firstItem;
}
public function extractFirstItem(array &$settings, $item, $entity = NULL) {
if ($settings['field_type'] == 'image') {
$this->firstItem = (object) $item;
}
elseif ($settings['field_type'] == 'file' && ($image = BlazyMedia::imageItem($item))) {
$this->firstItem = $image;
}
$item = $this->firstItem;
Blazy::imageDimensions($settings, $item, TRUE);
$settings['_uri'] = $settings['first_uri'] = $item && isset($item->uri) ? $item->uri : '';
}
protected function setImageDimensions(array &$settings = []) {
if (!isset($this->isImageDimensionSet[md5($settings['id'])])) {
if (!empty($settings['image_style']) && $this
->isCrop($settings['image_style'])) {
$settings = array_merge($settings, Blazy::transformDimensions($settings['image_style'], $this->firstItem));
}
if (!empty($settings['breakpoints'])) {
$this
->buildDataBlazy($settings, $this->firstItem);
}
$this->isImageDimensionSet[md5($settings['id'])] = TRUE;
}
}
}