drowl_paragraphs-8.x-3.9/drowl_paragraphs.module
drowl_paragraphs.module
<?php
/**
* @file
* DROWL paragraphs enhancements.
*/
use Drupal\Core\Template\Attribute;
/**
* Prepares variables for modal form add widget template.
*
* Default template: paragraphs-add-dialog.html.twig
*
* @param array $variables
* An associative array containing:
* - buttons: An array of buttons to display in the modal form.
*/
function drowl_paragraphs_preprocess_paragraphs_add_dialog(&$variables) {
// Add backend library form to EXPERIMENTAL WIDGET:
$variables['add']['#attached']['library'][] = 'drowl_paragraphs/drowl-paragraphs-backend';
}
/**
* Prepared variables for paragraph output:
*/
function drowl_paragraphs_preprocess_paragraph(&$variables) {
// Add frontend library for paragraphs display:
$variables['#attached']['library'][] = 'drowl_paragraphs/drowl-paragraphs-frontend';
// Create classes from paragraph_settings field
if (!empty($variables['paragraph'])) {
$paragraph = $variables['paragraph'];
$variables['layout_attributes'] = new \Drupal\Core\Template\Attribute(isset($variables['layout_attributes']) ? $variables['layout_attributes'] : array());
$variables['layout_wrapper_attributes'] = new \Drupal\Core\Template\Attribute(isset($variables['layout_wrapper_attributes']) ? $variables['layout_wrapper_attributes'] : array());
$variables['attributes'] = new \Drupal\Core\Template\Attribute(isset($variables['attributes']) ? $variables['attributes'] : array());
if ($paragraph->hasField('field_paragraph_settings')) {
if ($paragraph->get('field_paragraph_settings')
->getFieldDefinition()
->getType() == 'drowl_paragraphs_settings') {
$paragraphSettingsArray = $paragraph->get('field_paragraph_settings')
->getValue();
if (!empty($paragraphSettingsArray[0])) {
$ps = $paragraphSettingsArray[0];
if (!empty($ps['layout_sm_columns'])) {
$variables['layout_attributes']->addClass('columns');
if ($ps['layout_sm_columns'] >= 1) {
$variables['layout_attributes']->addClass('small-' . $ps['layout_sm_columns']);
}
}
if (!empty($ps['layout_sm_indent'])) {
$variables['layout_attributes']->addClass('small-offset-' . $ps['layout_sm_indent']);
}
if (!empty($ps['layout_sm_reverse_indent'])) {
$variables['layout_attributes']->addClass('small-rev-offset-' . $ps['layout_sm_reverse_indent']);
}
if (!empty($ps['layout_sm_collapse'])) {
$variables['layout_attributes']->addClass('small-collapse');
}
if (!empty($ps['layout_sm_uncollapse'])) {
$variables['layout_attributes']->addClass('small-uncollapse');
}
if (!empty($ps['layout_md_columns'])) {
$variables['layout_attributes']->addClass('columns');
if ($ps['layout_md_columns'] >= 1) {
$variables['layout_attributes']->addClass('medium-' . $ps['layout_md_columns']);
}
}
if (!empty($ps['layout_md_indent'])) {
$variables['layout_attributes']->addClass('medium-offset-' . $ps['layout_md_indent']);
}
if (!empty($ps['layout_md_reverse_indent'])) {
$variables['layout_attributes']->addClass('medium-rev-offset-' . $ps['layout_md_reverse_indent']);
}
if (!empty($ps['layout_md_collapse'])) {
$variables['layout_attributes']->addClass('medium-collapse');
}
if (!empty($ps['layout_md_uncollapse'])) {
$variables['layout_attributes']->addClass('medium-uncollapse');
}
if (!empty($ps['layout_lg_columns'])) {
$variables['layout_attributes']->addClass('columns');
if ($ps['layout_lg_columns'] >= 1) {
$variables['layout_attributes']->addClass('large-' . $ps['layout_lg_columns']);
}
}
if (!empty($ps['layout_lg_indent'])) {
$variables['layout_attributes']->addClass('large-offset-' . $ps['layout_lg_indent']);
}
if (!empty($ps['layout_lg_reverse_indent'])) {
$variables['layout_attributes']->addClass('large-rev-offset-' . $ps['layout_lg_reverse_indent']);
}
if (!empty($ps['layout_lg_collapse'])) {
$variables['layout_attributes']->addClass('large-collapse');
}
if (!empty($ps['layout_lg_uncollapse'])) {
$variables['layout_attributes']->addClass('large-uncollapse');
}
if (!empty($ps['layout_margin_top'])) {
$variables['attributes']->addClass('mt-' . $ps['layout_margin_top']);
}
if (!empty($ps['layout_margin_right'])) {
$variables['attributes']->addClass('mr-' . $ps['layout_margin_right']);
}
if (!empty($ps['layout_margin_bottom'])) {
$variables['attributes']->addClass('mb-' . $ps['layout_margin_bottom']);
}
if (!empty($ps['layout_margin_left'])) {
$variables['attributes']->addClass('ml-' . $ps['layout_margin_left']);
}
if (!empty($ps['layout_padding_top'])) {
$variables['attributes']->addClass('pt-' . $ps['layout_padding_top']);
}
if (!empty($ps['layout_padding_right'])) {
$variables['attributes']->addClass('pr-' . $ps['layout_padding_right']);
}
if (!empty($ps['layout_padding_bottom'])) {
$variables['attributes']->addClass('pb-' . $ps['layout_padding_bottom']);
}
if (!empty($ps['layout_padding_left'])) {
$variables['attributes']->addClass('pl-' . $ps['layout_padding_left']);
}
$animations = [];
$animations_allowed_count = 4;
for ($i = 1; $i <= $animations_allowed_count; $i++) {
if (!empty($ps['style_animation_' . $i . '_events'] && !empty($ps['style_animation_' . $i . '_animation']))) {
$animations[] = array(
'event' => $ps['style_animation_' . $i . '_events'],
'animation' => $ps['style_animation_' . $i . '_animation'],
'offset' => $ps['style_animation_' . $i . '_offset'],
'delay' => $ps['style_animation_' . $i . '_delay'],
'transition_duration' => $ps['style_animation_' . $i . '_transition_duration'],
);
}
}
if (!empty($animations)) {
$variables['attributes']->addClass('has-animation');
$variables['attributes']->setAttribute('data-animations', \Drupal\Component\Serialization\Json::encode($animations));
}
if (!empty($ps['layout_min_height'])) {
$variables['attributes']->addClass('min-height-' . $ps['layout_min_height']);
}
if (!empty($ps['layout_section_width'])) {
$variables['layout_attributes']->addClass($ps['layout_section_width']);
}
if (!empty($ps['layout_reverse_order'])) {
$variables['layout_wrapper_attributes']->addClass('flex-dir-row-reverse');
}
if (!empty($ps['layout_align_children_vertical'])) {
$variables['layout_wrapper_attributes']->addClass('align-' . $ps['layout_align_children_vertical']);
}
if (!empty($ps['layout_align_children_horizontal'])) {
$variables['layout_wrapper_attributes']->addClass('align-' . $ps['layout_align_children_horizontal']);
}
if ($ps['layout_sm_columns'] == '-1' || $ps['layout_md_columns'] == '-1' || $ps['layout_lg_columns'] == '-1') {
// At least one has "automatic" set
$variables['layout_attributes']->addClass('flex-child-auto');
}
else {
// None is automatic:
if (empty($ps['layout_sm_columns']) && (!empty($ps['layout_md_columns']) || !empty($ps['layout_lg_columns']))) {
// add small-12 (full width on small devices)
$variables['layout_attributes']->addClass('small-12');
}
}
if (!empty($ps['style_boxstyle'])) {
$variables['attributes']->addClass('box-style box-style--' . $ps['style_boxstyle']);
}
if (!empty($ps['style_cutline'])) {
$variables['attributes']->addClass('cutline cutline--' . $ps['style_cutline']);
}
// #webksde-TF: content_attributes not used inside regular paragraph templates?
// $variables['content_attributes'] = new \Drupal\Core\Template\Attribute(isset($variables['content_attributes']) ? $variables['content_attributes'] : array());
if (!empty($ps['style_textalign'])) {
$variables['attributes']->addClass($ps['style_textalign']);
}
if (!empty($ps['style_textstyle'])) {
$variables['attributes']->addClass($ps['style_textstyle']);
}
if (!empty($ps['style_textcolumns'])) {
$variables['attributes']->addClass($ps['style_textcolumns']);
}
if (!empty($ps['classes_additional'])) {
$variables['attributes']->addClass($ps['classes_additional']);
}
}
}
else {
trigger_error('Field field_paragraph_settings exists but is not of type "drowl_paragraphs_settings". Ignoring.', E_USER_NOTICE);
}
}
if ($paragraph->hasField('field_paragraphs_paragraphs')) {
// has subparagraphs field
$subParagraphsER = $paragraph->get('field_paragraphs_paragraphs');
if ($subParagraphsER->getFieldDefinition()
->getTargetEntityTypeId() == 'paragraph') {
if (!empty($subParagraphsER)) {
$subParagraphs = $subParagraphsER->referencedEntities();
foreach ($subParagraphs as $subParagraph) {
if ($subParagraph->hasField('field_paragraph_settings')) {
$subParagraphSettingsArray = $subParagraph->get('field_paragraph_settings')
->getValue();
if (!empty($subParagraphSettingsArray[0]['layout_sm_columns']) || !empty($subParagraphSettingsArray[0]['layout_md_columns']) || !empty($subParagraphSettingsArray[0]['layout_lg_columns'])) {
$variables['is_row'] = TRUE;
$variables['attributes']->addClass('has-layout');
$variables['layout_wrapper_attributes']->addClass('row');
}
if ($subParagraphSettingsArray[0]['layout_sm_columns'] == '-1' || $subParagraphSettingsArray[0]['layout_md_columns'] == '-1' || $subParagraphSettingsArray[0]['layout_lg_columns'] == '-1') {
// At least one has "automatic" set
$variables['layout_wrapper_attributes']->addClass('large-unstack');
}
// Add grid collapse classes to the row
if (!empty($subParagraphSettingsArray[0]['layout_sm_collapse'])) {
$variables['layout_wrapper_attributes']->addClass('small-collapse');
}
if (!empty($subParagraphSettingsArray[0]['layout_md_collapse'])) {
$variables['layout_wrapper_attributes']->addClass('medium-collapse');
}
if (!empty($subParagraphSettingsArray[0]['layout_lg_collapse'])) {
$variables['layout_wrapper_attributes']->addClass('large-collapse');
}
// Add grid UNcollapse classes to the row
if (!empty($subParagraphSettingsArray[0]['layout_sm_uncollapse'])) {
$variables['layout_wrapper_attributes']->addClass('small-uncollapse');
}
if (!empty($subParagraphSettingsArray[0]['layout_md_uncollapse'])) {
$variables['layout_wrapper_attributes']->addClass('medium-uncollapse');
}
if (!empty($subParagraphSettingsArray[0]['layout_lg_uncollapse'])) {
$variables['layout_wrapper_attributes']->addClass('large-uncollapse');
}
}
}
}
}
else {
trigger_error('Field field_paragraphs_paragraphs exists but its elements are not of type "paragraph". Ignoring.', E_USER_NOTICE);
}
}
// Indicate subparagraph and type of parent paragraph for twig:
$parentEntity = $paragraph->getParentEntity();
if($parentEntity instanceof \Drupal\paragraphs\Entity\Paragraph){
$bundle = $parentEntity->bundle();
$variables['attributes']->addClass('is-subparagraph');
// $variables['attributes']->addClass('parent-bundle-' . $bundle);
$variables['is_subparagraph'] = TRUE;
$variables['parent_entity_bundle'] = $bundle;
}
}
}
