View source
<?php
namespace Drupal\blazy;
class BlazyGrid {
public static function build(array $items = [], array $settings = []) {
$settings += BlazyDefault::gridSettings() + BlazyDefault::htmlSettings();
$is_grid = isset($settings['_grid']) ? $settings['_grid'] : !empty($settings['style']) && !empty($settings['grid']);
$class_item = $is_grid ? 'grid' : 'blazy__item';
$contents = [];
foreach ($items as $delta => $item) {
$attributes = [];
if (is_array($item)) {
$attributes = isset($item['attributes']) ? $item['attributes'] : [];
$item_settings = isset($item['settings']) ? $item['settings'] : $settings;
$item_settings = isset($item['#build']) && isset($item['#build']['settings']) ? $item['#build']['settings'] : $item_settings;
if (isset($item['#build']) && isset($item['#build']['settings'])) {
$item['#build']['settings'] += $settings;
$item['#build']['settings']['delta'] = $delta;
}
unset($item['settings'], $item['attributes'], $item['item']);
}
if (!empty($item_settings['grid_item_class'])) {
$attributes['class'][] = $item_settings['grid_item_class'];
}
$content_classes = empty($item_settings['grid_content_class']) ? [] : (array) $item_settings['grid_content_class'];
$content = is_string($item) ? [
'#markup' => $item,
] : [
'content' => $item,
];
$content = $is_grid ? Blazy::container($content, [
'class' => array_merge([
'grid__content',
], $content_classes),
]) : $content;
$classes = isset($attributes['class']) ? $attributes['class'] : [];
$classes = array_merge([
$class_item,
], $classes);
$contents[$delta] = [
'data' => drupal_render($content),
'class' => $classes,
];
}
$settings['count'] = empty($settings['count']) ? count($contents) : $settings['count'];
$element = [
'#theme' => 'item_list',
'#items' => $contents,
'#context' => [
'settings' => $settings,
],
'#attributes' => [],
];
self::attributes($element['#attributes'], $settings);
return $element;
}
public static function attributes(array &$attributes, array $settings = []) {
$style = empty($settings['style']) ? '' : $settings['style'];
$is_gallery = !empty($settings['lightbox']) && !empty($settings['gallery_id']);
$is_grid = isset($settings['_grid']) ? $settings['_grid'] : !empty($settings['style']) && !empty($settings['grid']);
Blazy::containerAttributes($attributes, $settings);
if (!empty($settings['id'])) {
$attributes['id'] = $is_gallery ? $settings['gallery_id'] : $settings['id'];
}
if ($is_grid) {
$attributes['class'][] = 'blazy--grid block-' . $style . ' block-count-' . $settings['count'];
if ($settings['grid_large'] = $settings['grid']) {
foreach ([
'small',
'medium',
'large',
] as $grid) {
if (!empty($settings['grid_' . $grid])) {
$attributes['class'][] = $grid . '-block-' . $style . '-' . $settings['grid_' . $grid];
}
}
}
}
}
}