formatter; } /** * {@inheritdoc} */ public static function defaultSettings() { return SlickDefault::extendedSettings(); } /** * {@inheritdoc} */ public function viewElements(FieldItemListInterface $items, $langcode) { $entities = $this->getEntitiesToView($items, $langcode); // Early opt-out if the field is empty. if (empty($entities)) { return []; } // Collects specific settings to this formatter. $settings = $this->getSettings(); // Asks for Blazy to deal with iFrames, and mobile-optimized lazy loading. $settings['blazy'] = TRUE; $settings['plugin_id'] = $this->getPluginId(); // Sets dimensions once to reduce method ::transformDimensions() calls. // @todo: A more flexible way to also support paragraphs at one go. if (!empty($settings['image_style']) && ($entities[0]->getEntityTypeId() == 'media')) { $fields = $entities[0]->getFields(); if (isset($fields['thumbnail'])) { $item = $fields['thumbnail']->get(0); $settings['item'] = $item; $settings['uri'] = $item->entity->getFileUri(); } } $build = ['settings' => $settings]; $this->formatter->buildSettings($build, $items); // Build the elements. $this->buildElements($build, $entities, $langcode); return $this->manager()->build($build); } /** * {@inheritdoc} */ public static function isApplicable(FieldDefinitionInterface $field_definition) { $storage = $field_definition->getFieldStorageDefinition(); return $storage->isMultiple() && $storage->getSetting('target_type') === 'media'; } }