X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fmodules%2Fcontrib%2Fblazy%2Fsrc%2FPlugin%2FField%2FFieldFormatter%2FBlazyVideoFormatter.php;fp=web%2Fmodules%2Fcontrib%2Fblazy%2Fsrc%2FPlugin%2FField%2FFieldFormatter%2FBlazyVideoFormatter.php;h=9df8592c8647a0c312ee0b2423d3e239416f5e92;hb=eba34333e3c89f208d2f72fa91351ad019a71583;hp=0000000000000000000000000000000000000000;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/web/modules/contrib/blazy/src/Plugin/Field/FieldFormatter/BlazyVideoFormatter.php b/web/modules/contrib/blazy/src/Plugin/Field/FieldFormatter/BlazyVideoFormatter.php new file mode 100644 index 000000000..9df8592c8 --- /dev/null +++ b/web/modules/contrib/blazy/src/Plugin/Field/FieldFormatter/BlazyVideoFormatter.php @@ -0,0 +1,129 @@ +blazyManager = $blazy_manager; + } + + /** + * {@inheritdoc} + */ + 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') + ); + } + + /** + * {@inheritdoc} + */ + public function viewElements(FieldItemListInterface $items, $langcode) { + $build = []; + + // Early opt-out if the field is empty. + if ($items->isEmpty()) { + return $build; + } + + // Collects specific settings to this formatter. + $settings = $this->buildSettings(); + $settings['blazy'] = TRUE; + $settings['namespace'] = $settings['item_id'] = $settings['lazy'] = 'blazy'; + + // Build the settings. + $build = ['settings' => $settings]; + + // Modifies settings. + $this->blazyManager->buildSettings($build, $items); + + // Fecthes URI from the first item to build dimensions once. + $this->buildVideo($build['settings'], $items[0]->value); + + // Build the elements. + $this->buildElements($build, $items); + + // Updates settings. + $settings = $build['settings']; + unset($build['settings']); + + // Supports Blazy multi-breakpoint images if provided. + if (!empty($settings['uri'])) { + $this->blazyManager->isBlazy($settings, $build[0]['#build']); + } + + $build['#blazy'] = $settings; + $build['#attached'] = $this->blazyManager->attach($settings); + return $build; + } + + /** + * Build the blazy elements. + */ + public function buildElements(array &$build, $items) { + $settings = $build['settings']; + + foreach ($items as $delta => $item) { + $media_url = strip_tags($item->value); + + $settings['delta'] = $delta; + if (empty($media_url)) { + continue; + } + + $this->buildVideo($settings, $media_url); + + $box = ['item' => $item, 'settings' => $settings]; + + // Image with responsive image, lazyLoad, and lightbox supports. + $build[$delta] = $this->blazyManager->getImage($box); + unset($box); + } + } + + /** + * {@inheritdoc} + */ + public function getScopedFormElements() { + return [ + 'fieldable_form' => TRUE, + 'multimedia' => TRUE, + 'view_mode' => $this->viewMode, + ] + parent::getScopedFormElements(); + } + + /** + * {@inheritdoc} + */ + public static function isApplicable(FieldDefinitionInterface $field_definition) { + return $field_definition->getFieldStorageDefinition()->getType() === 'video_embed_field'; + } + +}