get_called_class()]; \Drupal::moduleHandler()->alter('blazy_base_settings', $settings, $context); return $settings; } /** * Returns settings provided by various UI. */ public static function anywhereSettings() { return [ 'lazy' => '', 'style' => '', ]; } /** * Returns basic plugin settings. */ public static function baseSettings() { $settings = [ 'cache' => 0, 'skin' => '', ] + self::anywhereSettings(); blazy_alterable_settings($settings); return $settings; } /** * Returns cherry-picked settings for field formatters and Views fields. */ public static function cherrySettings() { return [ 'box_style' => '', 'image_style' => '', 'media_switch' => '', 'ratio' => '', 'thumbnail_style' => '', ]; } /** * Returns image-related field formatter and Views settings. */ public static function baseImageSettings() { return [ 'background' => FALSE, 'box_caption' => '', 'box_caption_custom' => '', 'box_media_style' => '', 'caption' => [], 'loading' => 'lazy', 'preload' => FALSE, 'responsive_image_style' => '', 'use_theme_field' => FALSE, ] + self::cherrySettings(); } /** * Returns deprecated, or previously wrong room settings. * * @todo remove custom breakpoints anytime before 3.x. */ public static function deprecatedSettings() { return [ 'breakpoints' => [], 'current_view_mode' => '', 'fx' => '', 'icon' => '', 'id' => '', 'sizes' => '', 'grid_header' => '', 'loading' => 'lazy', 'preload' => FALSE, '_item' => '', '_uri' => '', ]; } /** * Returns image-related field formatter and Views settings. */ public static function imageSettings() { return [ 'layout' => '', 'view_mode' => '', ] + self::baseSettings() + self::baseImageSettings(); } /** * Returns Views specific settings. */ public static function viewsSettings() { return [ 'class' => '', 'id' => '', 'image' => '', 'link' => '', 'overlay' => '', 'title' => '', 'vanilla' => FALSE, ]; } /** * Returns fieldable entity formatter and Views settings. */ public static function extendedSettings() { return self::viewsSettings() + self::imageSettings(); } /** * Returns optional grid field formatter and Views settings. */ public static function gridBaseSettings() { return [ 'grid' => '', 'grid_medium' => '', 'grid_small' => '', ]; } /** * Returns optional grid field formatter and Views settings. */ public static function gridSettings() { return self::gridBaseSettings() + self::anywhereSettings(); } /** * Returns sensible default options common for Views lacking of UI. */ public static function lazySettings() { return [ 'blazy' => TRUE, 'lazy' => 'blazy', 'ratio' => 'fluid', ]; } /** * Returns sensible default options common for entities lacking of UI. */ public static function entitySettings() { return [ 'media_switch' => 'media', 'rendered' => FALSE, 'view_mode' => 'default', '_detached' => TRUE, ] + self::lazySettings(); } /** * Returns default options common for rich Media entities: Facebook, etc. * * This basically disables few Blazy features for rendered-entity-like. */ public static function richSettings() { return [ 'background' => FALSE, // 'lightbox' => FALSE, 'media_switch' => '', // 'placeholder' => '', // 'resimage' => FALSE, // 'use_loading' => FALSE, 'type' => 'rich', ] + self::anywhereSettings(); } /** * Returns text settings. */ public static function textSettings() { return self::gridBaseSettings() + ['style' => '']; } /** * Returns shared global form settings which should be consumed at formatters. */ public static function uiSettings() { return [ 'blur_client' => FALSE, 'blur_storage' => FALSE, 'blur_minwidth' => 0, 'fx' => '', 'nojs' => [], 'one_pixel' => TRUE, 'noscript' => FALSE, 'placeholder' => '', 'responsive_image' => FALSE, 'unstyled_extensions' => '', ] + self::anywhereSettings(); } /** * Grouping for sanity till all settings converted into BlazySettings. * * It was a pre-release RC7 @todo, partially implemented since 2.7. * The hustle is sub-modules are not aware, yet. Yet better started before 3. * While some configurable settings are intact, blazies are more for grouping * dynamic, non-configurable settings. But it can also store blazy-specific. * * @todo do not set keys, unless required to allow default/fallback kicks in. */ public static function blazies() { return [ 'bgs' => [], 'box' => [], 'box_media' => [], 'image' => [], 'images' => [], 'initial' => 0, 'is' => [], 'item' => ['delta' => 0], 'lazy' => ['attribute' => 'src', 'class' => 'b-lazy'], 'libs' => [], 'lightbox' => [], 'media' => [], 'resimage' => [], 'ui' => self::uiSettings(), 'use' => [], 'switch' => NULL, 'thumbnail' => [], 'view' => [], ]; } /** * Returns sensible default container settings to shutup notices when lacking. * * @todo remove blazy_data for blazies due to problematic with picture where * we can't have uniform sizes or aspect ratios. * @todo move safe settings into blazies: new or not used by sub-modules. */ public static function htmlSettings() { return [ 'blazies' => Blazy::settings(self::blazies()), 'inited' => TRUE, // @todo deprecated for blazies after sub-module updates: 'bundle' => '', 'id' => '', 'route_name' => '', 'is_preview' => FALSE, ] + self::imageSettings() + self::gridSettings(); } /** * Returns sensible default item settings to shutup notices when lacking. */ public static function itemSettings() { return [ 'classes' => [], 'image_url' => '', 'height' => NULL, 'width' => NULL, ] + self::htmlSettings(); } /** * Returns blazy theme properties, its image and container attributes. * * The reserved attributes is defined before entering Blazy as bonus variable. * Consider other bonuses: title and content attributes at a later stage. */ public static function themeProperties() { return [ 'attributes', 'captions', 'content', 'iframe', 'image', 'icon', 'item', 'item_attributes', 'noscript', 'overlay', 'preface', 'postscript', 'settings', 'url', ]; } /** * Returns additional/ optional blazy theme attributes. * * The attributes mentioned here are only instantiated at theme_blazy() and * might be an empty array, not instanceof \Drupal\Core\Template\Attribute. */ public static function themeAttributes() { return ['caption', 'media', 'url', 'wrapper']; } /** * Returns available components. */ public static function components(): array { return array_merge(self::grids(), [ 'animate', 'background', 'blur', 'compat', 'filter', 'media', 'mfp', 'photobox', 'ratio', ]); } /** * Returns available grid components. */ public static function grids(): array { return [ 'column', 'flex', 'grid', 'nativegrid', 'nativegrid.masonry', ]; } /** * Returns available plugins. */ public static function plugins(): array { return [ 'eventify', 'viewport', 'xlazy', 'css', 'dom', 'animate', 'dataset', 'background', 'observer', ]; } /** * Returns available nojs components related to core Blazy functionality. */ public static function polyfills(): array { return [ 'polyfill', 'classlist', 'promise', 'raf', 'webp', ]; } /** * Returns available nojs components related to core Blazy functionality. */ public static function nojs(): array { return array_merge(['lazy'], self::polyfills()); } /** * Returns optional polyfills, not loaded till enabled and a feature meets. */ public static function ondemandPolyfills(): array { return [ 'fullscreen', ]; } }