blazy-8.x-2.x-dev/src/BlazyManagerBaseInterface.php
src/BlazyManagerBaseInterface.php
<?php namespace Drupal\blazy; /** * Defines re-usable media-related methods across Blazy ecosystem to DRY. */ interface BlazyManagerBaseInterface extends BlazyInterface { /** * Warning! Do not override this method, use self::attachments() instead. * * So we can add return type at/ by 3.x without breaking your codes. * Returns array of needed assets suitable for #attached property. * * @param array $attach * The settings which determine what library to attach, empty to defaults. * * @return array * The supported libraries. */ public function attach(array $attach = []): array; /** * Alias for Blazy::containerAttributes(). * * @param array $attributes * The container attributes being modified. * @param array $settings * The given settings. */ public function containerAttributes(array &$attributes, array $settings): void; /** * Returns the supported image effects. * * @return array * The supported image effects. */ public function getImageEffects(): array; /** * Gets the supported lightboxes. * * @return array * The supported lightboxes. */ public function getLightboxes(): array; /** * Provides alterable display styles. * * @return array * The supported display styles. */ public function getStyles(): array; /** * Alias for Thumbnail::view() to forget looking up unknown classes. * * @param array $settings * The given settings. * @param object $item * The optional image item. * @param array $captions * The optional thumbnail captions. * * @return array * The thumbnail image style, or empty. */ public function getThumbnail(array $settings, $item = NULL, array $captions = []): array; /** * Checks for Image styles at container level once, except for multi-styles. * * Specific for lightbox, it can also be Responsive image, but not here. * The output is stored in blazies under each key of the provided styles * defined by the respective key under $settings, e.g.: image_style to * blazies.image.style, etc. Nothing is loaded if no setting is provided. * * @param array $settings * The modified settings. * @param bool $multiple * A flag for various Image styles: Blazy Filter, etc., old GridStack. * While most field formatters can only have one image style per field. * @param array $styles * The image styles, default to BlazyDefault::imageStyles(). * If more to be added, the convention is to not suffix it with _style, * e.g.: image will be auto-suffixed as image_style, etc. * * @see \Drupal\blazy\BlazyDefault::imageStyles() */ public function imageStyles(array &$settings, $multiple = FALSE, array $styles = []): void; /** * Checks for Blazy formatter such as from within a Views style plugin. * * Ensures the settings traverse up to the container where Blazy is clueless. * This allows Blazy Grid, or other Views styles, lacking of UI, to have * additional settings extracted from the first Blazy formatter found. * Such as media switch/ lightbox. This way the container can add relevant * attributes to its container, etc. Also applies to entity references where * Blazy is not the main formatter, instead embedded as part of the parent's. * * This fairly complex logic is intended to reduce similarly complex logic at * individual item. But rather than at individual item, it is executed once * at the container level. If you have 100 images, this method is executed * once, not 100x, as long as you have all image styles cropped, not scaled. * * Since 2.7 [data-blazy] is just identifier for blazy container, can be empty * or used to pass optional JavaScript settings. It used to store aspect * ratios, but hardly used, due to complication with Picture which may have * irregular aka art-direction aspect ratios. * * This still needs improvements and a little more simplified version. * * @param array $settings * The settings being modified. * @param array $data * The first data containing settings or item keys. * * @see \Drupal\blazy\BlazyManager::prepareBuild() * @see \Drupal\blazy\Field\BlazyEntityVanillaBase::buildElements() * @todo change the second param back to array at 3.x when BVEF is dropped. */ public function isBlazy(array &$settings, array $data = []): void; /** * Checks for essential blazy features. * * @param array $build * The build array being modified. * @param object $item * The optional image item. * * @return \Drupal\blazy\BlazySettings * The BlazySettings object. */ public function preBlazy(array &$build, $item = NULL): BlazySettings; /** * Thumbnails are poorly-informed, provide relevant information. * * @param array $build * The build array being modified. * @param array $blazy * The blazy renderable array available after ::getBlazy() called. */ public function postBlazy(array &$build, array $blazy): void; /** * Prepares shared data common between field formatter and views field. * * This is to overcome the limitation of self::postSettings(). * * @param array $build * The build data containing settings, entity, etc. */ public function prepareData(array &$build): void; /** * Prepare base preliminary settings. * * The `fx` sequence: hook_alter > formatters (not implemented yet) > UI. * The `_fx` is a special flag such as to temporarily disable till needed. * Called by field formatters, views [styles|fields via BlazyEntity], * [blazy|splide|slick] filters. * * @param array $settings * The settings being modified. */ public function preSettings(array &$settings): void; /** * Modifies the post settings inherited down to each item. * * @param array $settings * The settings being modified. */ public function postSettings(array &$settings): void; /** * Overrides data massaged by [blazy|slick|splide, etc.]_settings_alter(). * * @param array $settings * The settings being modified. * @param object $entity * The optional entity object. */ public function postSettingsAlter(array &$settings, $entity = NULL): void; /** * Provides the third party formatters where full blown Blazy is not worthy. * * The module doesn't automatically convert the relevant theme to use Blazy, * however two attributes are provided: `data-b-lazy` and `data-b-preview` * which can be used to override a particular theme to use Blazy. * * The `data-b-lazy`is a flag indicating Blazy is enabled. * The `data-b-preview` is a flag indicating Blazy in CKEditor preview mode * via Entity/Media Embed which normally means Blazy should be disabled * due to CKEditor not supporting JS assets. * * @see \Drupal\blazy\Theme\BlazyTheme::blazy() * @see \Drupal\blazy\Theme\BlazyTheme::field() * @see \Drupal\blazy\Theme\BlazyTheme::fileVideo() * @see blazy_preprocess_file_video() */ public function thirdPartyFormatters(): array; /** * Provides relevant attributes to feed into theme_blazy(). * * To replace all sub-modules theme_ITEM() contents with theme_blazy() at 3.x. * * @param array $data * The data being modified containing: #settings, #item, #entity, etc. * What is needed is only to pass BlazyDefault::themeAttributes() to convert * sub-modules' theme_ITEM() contents, e.g.: theme_splide_slide(), * theme_slick_slide(), theme_gridstack_box(), etc. with theme_blazy() to * minimize dups and have improvement at one go. Normally image/ media * related. Repeat, only replace their contents, not their theme_ITEM(). * @param array $captions * The captions being modified. * @param int $delta * The current delta for convenience. */ public function toBlazy(array &$data, array &$captions, $delta): void; /** * Provides attachments and cache common for all blazy-related modules. */ public function setAttachments( array &$element, array $settings, array $attachments = [], ): void; }