public function MasonryService::applyMasonryDisplay in Masonry API 8
Apply Masonry to a container.
Parameters
array $form: The form to which the JS will be attached.
string $container: The CSS selector of the container element to apply Masonry to.
string $item_selector: The CSS selector of the items within the container.
array $options: An associative array of Masonry options. Contains:
- masonry_column_width: The width of each column (in pixels or as a percentage).
- masonry_column_width_units: The units to use for the column width
('px' or '%').
- masonry_gutter_width: The spacing between each column (in pixels).
- masonry_resizable: Automatically rearrange items when the container is resized.
- masonry_animated: Animate item rearrangements.
- masonry_animation_duration: The duration of animations in milliseconds.
- masonry_fit_width: Sets the width of the container to the nearest column.
Ideal for centering Masonry layouts.
- masonry_rtl: Display items from right-to-left.
- masonry_images_first: Load all images first before triggering Masonry.
string[] $masonry_ids:
File
- src/
Services/ MasonryService.php, line 163 - Masonry service file.
Class
- MasonryService
- Wrapper methods for Masonry API methods.
Namespace
Drupal\masonry\ServicesCode
public function applyMasonryDisplay(&$form, $container, $item_selector, $options = [], $masonry_ids = [
'masonry_default',
]) {
if (!empty($container)) {
// For any options not specified, use default options.
$options += $this
->getMasonryDefaultOptions();
if (!isset($item_selector)) {
$item_selector = '';
}
// Setup Masonry script.
$masonry = [
'masonry' => [
$container => [
'masonry_ids' => $masonry_ids,
'item_selector' => $item_selector,
'column_width' => $options['layoutColumnWidth'],
'column_width_units' => $options['layoutColumnWidthUnit'],
'gutter_width' => (int) $options['gutterWidth'],
'resizable' => (bool) $options['isLayoutResizable'],
'animated' => (bool) $options['isLayoutAnimated'],
'animation_duration' => (int) $options['layoutAnimationDuration'],
'fit_width' => (bool) $options['isLayoutFitsWidth'],
'rtl' => (bool) $options['isLayoutRtlMode'],
'images_first' => (bool) $options['isLayoutImagesLoadedFirst'],
'images_lazyload' => (bool) $options['isLayoutImagesLazyLoaded'],
'lazyload_selector' => $options['imageLazyloadSelector'],
'lazyloaded_selector' => $options['imageLazyloadedSelector'],
'stamp' => $options['stampSelector'],
'percent_position' => (bool) $options['isItemsPositionInPercent'],
'extra_options' => $options['extraOptions'],
],
],
];
// Allow other modules and themes to alter the settings.
$context = [
'container' => $container,
'item_selector' => $item_selector,
'options' => $options,
];
$this->moduleHandler
->alter('masonry_script', $masonry, $context);
$this->themeManager
->alter('masonry_script', $masonry, $context);
$form['#attached']['library'][] = 'masonry/masonry.layout';
if (isset($form['#attached']['drupalSettings'])) {
$form['#attached']['drupalSettings'] += $masonry;
}
else {
$form['#attached']['drupalSettings'] = $masonry;
}
}
}