View source
<?php
namespace Drupal\blazy\Plugin\Field\FieldFormatter;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\blazy\Dejavu\BlazyVideoBase;
use Drupal\blazy\Dejavu\BlazyVideoTrait;
use Drupal\blazy\BlazyFormatterManager;
use Symfony\Component\DependencyInjection\ContainerInterface;
class BlazyVideoFormatter extends BlazyVideoBase implements ContainerFactoryPluginInterface {
use BlazyFormatterBaseTrait;
use BlazyVideoTrait;
public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, BlazyFormatterManager $blazy_manager) {
parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings);
$this->blazyManager = $blazy_manager;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($plugin_id, $plugin_definition, $configuration['field_definition'], $configuration['settings'], $configuration['label'], $configuration['view_mode'], $configuration['third_party_settings'], $container
->get('blazy.formatter.manager'));
}
public function viewElements(FieldItemListInterface $items, $langcode) {
$build = [];
if ($items
->isEmpty()) {
return $build;
}
$settings = $this
->buildSettings();
$settings['blazy'] = TRUE;
$settings['namespace'] = $settings['item_id'] = $settings['lazy'] = 'blazy';
$build = [
'settings' => $settings,
];
$this->blazyManager
->buildSettings($build, $items);
$this
->buildVideo($build['settings'], $items[0]->value);
$this
->buildElements($build, $items);
$settings = $build['settings'];
unset($build['settings']);
if (!empty($settings['uri'])) {
$this->blazyManager
->isBlazy($settings, $build[0]['#build']);
}
$build['#blazy'] = $settings;
$build['#attached'] = $this->blazyManager
->attach($settings);
return $build;
}
public function buildElements(array &$build, $items) {
$settings = $build['settings'];
foreach ($items as $delta => $item) {
$settings['input_url'] = trim(strip_tags($item->value));
$settings['delta'] = $delta;
if (empty($settings['input_url'])) {
continue;
}
$this
->buildVideo($settings);
$box = [
'item' => $item,
'settings' => $settings,
];
$build[$delta] = $this->blazyManager
->getImage($box);
unset($box);
}
}
public function getScopedFormElements() {
return [
'fieldable_form' => TRUE,
'multimedia' => TRUE,
'view_mode' => $this->viewMode,
] + parent::getScopedFormElements();
}
public static function isApplicable(FieldDefinitionInterface $field_definition) {
return $field_definition
->getFieldStorageDefinition()
->getType() === 'video_embed_field';
}
}