You are here

class Media in GridStack 8.2

Provides the media styles for front-end.

Plugin annotation


@GridStackStylizer(
  id = "media",
  label = @Translation("Media")
)

Hierarchy

Expanded class hierarchy of Media

File

src/Plugin/gridstack/stylizer/Media.php, line 18

Namespace

Drupal\gridstack\Plugin\gridstack\stylizer
View source
class Media extends Background {

  /**
   * The field name to store media.
   *
   * @var string
   */
  protected $fieldName;

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
    if (!empty($configuration['field_name'])) {
      $instance
        ->setFieldName($configuration['field_name']);
    }
    return $instance;
  }

  /**
   * Returns the selected field name.
   */
  public function getFieldName() {
    return $this->fieldName;
  }

  /**
   * Sets the field name.
   */
  public function setFieldName($name) {
    $this->fieldName = $name;
    return $this;
  }

  /**
   * Returns the formatted media as Blazy CSS background.
   */
  public function buildMedia(array &$attributes, array &$settings) {
    $data = $this
      ->prepareMedia($settings);
    $config = $data['settings'];
    if (isset($config['media_id']) && ($mid = $config['media_id'])) {
      $media = MediaEntity::load($mid);

      // @todo remove post blazy:2.1+.
      if (isset($config['responsive_image_style']) && ($resimage = $config['responsive_image_style'])) {
        $data['settings']['resimage'] = $this->blazyEntity
          ->blazyManager()
          ->entityLoad($resimage, 'responsive_image_style');
      }

      // Pass results to \Drupal\blazy\BlazyEntity.
      $settings['has_media'] = TRUE;
      $attributes['class'][] = 'is-gs-media';
      return $this->blazyEntity
        ->build($data, $media, $media
        ->label());
    }
    return [];
  }

  /**
   * Returns the formatted media as Blazy output.
   */
  protected function prepareMedia(array $settings) {
    $build = [];
    $data = $this
      ->mediaSettings($settings);
    if (!empty($data['media_id'])) {

      // Unlike Bootstrap, Foundation wants large-12, etc., not cell-12.
      // Specific for this, Foundation is less efficient than Bootstrap.
      $build['wrapper_attributes']['class'][] = 'box__bg';
      $build['attributes']['class'][] = 'b-noratio b-gs';
      $build['attributes']['class'][] = $this
        ->getStyle('background', $settings) ? 'b-gs--bg' : 'b-gs--media';
      if ($animations = $this
        ->getAnimation($settings, 'all')) {
        foreach ($animations as $key => $value) {
          $key = str_replace('_', '-', $key);
          $key = $key == 'animation' ? $key : 'animation-' . $key;

          // @todo pos blazy 2.1:
          if ($key == 'animation') {
            $data['fx'] = $value;
          }
          else {
            $build['attributes']['data-' . $key] = $value;
          }
        }

        // @todo $build['media_attributes']['class'][] = 'box__animated';
      }

      // Overlay is only applicable to image, not video, of course.
      if ($data['media_source'] == 'image') {
        $this
          ->prepareOverlay($data, $settings);
      }

      // Image opacity.
      if (!empty($data['opacity']) && $data['opacity'] < 1) {
        $build['attributes']['style'] = 'opacity: ' . $data['opacity'] . ';';
      }

      // Disable any effect, we'll toggle by JS till required instead.
      // @todo figure out to make multiple animations work.
      // @todo if (!empty($settings['_ipe'])) {
      // @todo  $data['_fx'] = '';
      // @todo }
    }
    $build['settings'] = $data;
    return $build;
  }

  /**
   * Returns the media overlay.
   */
  protected function prepareOverlay(array &$data, array $settings) {
    $bg = $this
      ->getBackgroundColor($settings, FALSE);
    $use_overlay = $this
      ->getStyle('overlay', $settings);

    // Always output for admin for live preview to work.
    // @todo use ::pseudo selector for front-end.
    $overlay = [
      '#theme' => 'container',
      '#attributes' => [
        'class' => [
          'media__overlay',
        ],
      ],
    ];

    // Only inline CSS at admin pages, front-end should be cleaner.
    if ($use_overlay && $bg && !empty($settings['_ipe'])) {
      $overlay['#attributes']['style'] = $bg;
    }

    // @todo post blazy 2.1
    // @todo $build['overlay']['gridstack'] = $overlay;
    // @todo $build['overlay']['gridstack']['#weight'] = 100;
    $data['icon']['gridstack_overlay'] = $overlay;
    $data['icon']['gridstack_overlay']['#weight'] = 100;

    // Remove from front-end if not configured so.
    if (empty($settings['_ipe'])) {
      if ($use_overlay && empty($bg)) {
        unset($data['icon']['gridstack_overlay']);
      }
    }
  }

  /**
   * Returns the data understood by Blazy for CSS background.
   */
  protected function mediaSettings(array $settings) {
    $styles = empty($settings['styles']) ? [] : $settings['styles'];
    $data = empty($styles['metadata']) ? [] : Json::decode($styles['metadata']);

    // Hard-code settings for now to limit too many possibilities.
    if ($data) {
      $data['background'] = $this
        ->getStyle('background', $settings);
      $data['media_switch'] = 'media';
      $data['ratio'] = '';
      $data['_detached'] = FALSE;
      $data = array_merge($styles, $data);
      return array_merge(GridStackDefault::entitySettings(), $data);
    }
    return [];
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Animation::animationElement protected function Provides animation form elements.
Animation::animations public static function Returns utilities settings.
Background::getBackgroundColor protected function Returns the background colors grouped by the given key, w/o text colors.
Color::colorElement protected function Provides extras form elements.
Color::getTextColor protected function Returns the text colors grouped by the given key.
Color::paletteElement protected function Return the color palette element.
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
GridStackPluginBase::$breakpoints protected property The layout breakpoints.
GridStackPluginBase::$cellHeight protected property The optionset cell height.
GridStackPluginBase::$columns protected property The breakpoint columns.
GridStackPluginBase::$currentUser protected property The current user.
GridStackPluginBase::$manager protected property The gridstack manager service.
GridStackPluginBase::$minWidth protected property The optionset min-width.
GridStackPluginBase::$optionset protected property The gridstack optionset.
GridStackPluginBase::$verticalMargin protected property The optionset vertical margin.
GridStackPluginBase::config protected function Returns gridstack config shortcut.
GridStackPluginBase::defaultConfiguration public function Gets default configuration for this plugin. Overrides ConfigurableInterface::defaultConfiguration 1
GridStackPluginBase::get public function
GridStackPluginBase::getConfiguration public function Gets this plugin's configuration. Overrides ConfigurableInterface::getConfiguration
GridStackPluginBase::getOptionset public function
GridStackPluginBase::getSetting public function
GridStackPluginBase::label public function Returns the plugin label. Overrides GridStackPluginInterface::label
GridStackPluginBase::setConfiguration public function Sets the configuration for this plugin instance. Overrides ConfigurableInterface::setConfiguration
GridStackPluginBase::setOptionset public function Sets the optionset.
GridStackPluginBase::setSetting public function
GridStackStylizerPluginBase::$blazyEntity protected property The blazy entity service to support Media Library at Layout Builder pages.
GridStackStylizerPluginBase::attach public function Provides gridstack skins and libraries. 1
GridStackStylizerPluginBase::getVariantUniqueId protected function Returns unique variant ID.
GridStackStylizerPluginBase::validateConfigurationForm public function 1
Media::$fieldName protected property The field name to store media.
Media::buildMedia public function Returns the formatted media as Blazy CSS background.
Media::create public static function Creates an instance of the plugin. Overrides GridStackStylizerPluginBase::create
Media::getFieldName public function Returns the selected field name.
Media::mediaSettings protected function Returns the data understood by Blazy for CSS background.
Media::prepareMedia protected function Returns the formatted media as Blazy output.
Media::prepareOverlay protected function Returns the media overlay.
Media::setFieldName public function Sets the field name.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
PluginBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. 92
Range::rangeElement protected function Returns the range element.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
StyleBase::attributes public function Provides both CSS grid and js-driven attributes configurable via UI.
StyleBase::cssRule protected function Returns the CSS rule with a selector and sub selector if available.
StyleBase::extraAttributes protected function Modifies any attributes relevant to use backgrounds.
StyleBase::getAnimation public function Returns an animation.
StyleBase::getColor protected function Checks for valid color excluding black (#000000) by design.
StyleBase::getColors protected function Returns available colors.
StyleBase::getSelector public function Returns selectors and sub-selectors with context related to box levels.
StyleBase::getStyle public function Returns a style.
StyleBase::getVariantClass public function Returns the variant class.
StyleBase::hasColors protected function Checks if it has colors.
StyleBase::inlineStyle public function Modifies inline style to not nullify others.
StyleBase::parseAttributes protected function Parses the string attribute: role|navigation,data-something|some value.
StyleBase::parseClasses protected function Parses the given string classes.
StyleBase::parseStyles public function Builds inline styles if so required with multiple instances on a page.
StyleBase::styleElement protected function Return the style element.