3 namespace Drupal\blazy;
5 use Drupal\Component\Serialization\Json;
8 * Provides grid utilities.
13 * Returns items as a grid display wrapped by theme_item_list().
16 * The grid items being modified.
17 * @param array $settings
21 * The modified array of grid items.
23 public static function build(array $items = [], array $settings = []) {
24 $blazy = empty($settings['blazy_data']) ? '' : $settings['blazy_data'];
25 $settings['style'] = empty($settings['style']) ? 'grid' : $settings['style'];
28 foreach ($items as $delta => $item) {
29 // @todo: Support non-Blazy which normally uses item_id.
30 $item_settings = isset($item['#build']['settings']) ? $item['#build']['settings'] : $settings;
31 $item_settings['delta'] = $delta;
33 // Supports both single formatter field and complex fields such as Views.
36 '#theme' => 'container',
38 '#attributes' => ['class' => ['grid__content']],
41 self::buildGridItemAttributes($grid, $item_settings);
47 $count = empty($settings['count']) ? count($grids) : $settings['count'];
49 '#theme' => 'item_list',
51 '#context' => ['settings' => $settings],
56 'block-' . $settings['style'],
57 'block-count-' . $count,
59 'data-blazy' => Json::encode($blazy),
61 '#wrapper_attributes' => [
62 'class' => ['item-list--blazy', 'item-list--blazy-' . $settings['style']],
66 if (!empty($settings['media_switch'])) {
67 $switch = str_replace('_', '-', $settings['media_switch']);
68 $element['#attributes']['data-' . $switch . '-gallery'] = TRUE;
71 $settings['grid_large'] = $settings['grid'];
72 foreach (['small', 'medium', 'large'] as $grid) {
73 if (!empty($settings['grid_' . $grid])) {
74 $element['#attributes']['class'][] = $grid . '-block-' . $settings['style'] . '-' . $settings['grid_' . $grid];
82 * Modifies the grid item wrapper attributes.
85 * The grid item being modified.
86 * @param array $settings
89 public static function buildGridItemAttributes(array &$grid = [], array $settings = []) {
90 if (!empty($settings['grid_item_class'])) {
91 $grid['#wrapper_attributes']['class'][] = $settings['grid_item_class'];
94 $grid['#wrapper_attributes']['class'][] = 'grid';
96 if (!empty($settings['type'])) {
97 $grid['#wrapper_attributes']['class'][] = 'grid--' . $settings['type'];
100 if (!empty($settings['media_switch'])) {
101 $grid['#wrapper_attributes']['class'][] = 'grid--' . str_replace('_', '-', $settings['media_switch']);
104 $grid['#wrapper_attributes']['class'][] = 'grid--' . $settings['delta'];