X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fmodules%2Fcontrib%2Fblazy%2Fsrc%2FBlazyGrid.php;fp=web%2Fmodules%2Fcontrib%2Fblazy%2Fsrc%2FBlazyGrid.php;h=8aa41f5bc2ae938c78011f1431fd520a994585c1;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/modules/contrib/blazy/src/BlazyGrid.php b/web/modules/contrib/blazy/src/BlazyGrid.php new file mode 100644 index 000000000..8aa41f5bc --- /dev/null +++ b/web/modules/contrib/blazy/src/BlazyGrid.php @@ -0,0 +1,107 @@ + $item) { + // @todo: Support non-Blazy which normally uses item_id. + $item_settings = isset($item['#build']['settings']) ? $item['#build']['settings'] : $settings; + $item_settings['delta'] = $delta; + + // Supports both single formatter field and complex fields such as Views. + $grid = []; + $grid['content'] = [ + '#theme' => 'container', + '#children' => $item, + '#attributes' => ['class' => ['grid__content']], + ]; + + self::buildGridItemAttributes($grid, $item_settings); + + $grids[] = $grid; + unset($grid); + } + + $count = empty($settings['count']) ? count($grids) : $settings['count']; + $element = [ + '#theme' => 'item_list', + '#items' => $grids, + '#context' => ['settings' => $settings], + '#attributes' => [ + 'class' => [ + 'blazy', + 'blazy--grid', + 'block-' . $settings['style'], + 'block-count-' . $count, + ], + 'data-blazy' => Json::encode($blazy), + ], + '#wrapper_attributes' => [ + 'class' => ['item-list--blazy', 'item-list--blazy-' . $settings['style']], + ], + ]; + + if (!empty($settings['media_switch'])) { + $switch = str_replace('_', '-', $settings['media_switch']); + $element['#attributes']['data-' . $switch . '-gallery'] = TRUE; + } + + $settings['grid_large'] = $settings['grid']; + foreach (['small', 'medium', 'large'] as $grid) { + if (!empty($settings['grid_' . $grid])) { + $element['#attributes']['class'][] = $grid . '-block-' . $settings['style'] . '-' . $settings['grid_' . $grid]; + } + } + + return $element; + } + + /** + * Modifies the grid item wrapper attributes. + * + * @param array $grid + * The grid item being modified. + * @param array $settings + * The given settings. + */ + public static function buildGridItemAttributes(array &$grid = [], array $settings = []) { + if (!empty($settings['grid_item_class'])) { + $grid['#wrapper_attributes']['class'][] = $settings['grid_item_class']; + } + + $grid['#wrapper_attributes']['class'][] = 'grid'; + + if (!empty($settings['type'])) { + $grid['#wrapper_attributes']['class'][] = 'grid--' . $settings['type']; + } + + if (!empty($settings['media_switch'])) { + $grid['#wrapper_attributes']['class'][] = 'grid--' . str_replace('_', '-', $settings['media_switch']); + } + + $grid['#wrapper_attributes']['class'][] = 'grid--' . $settings['delta']; + } + +}