InlineParagraphsBrowserWidgetTrait.php in Paragraphs Browser 8
Paragraphs Previewer widget trait implementation for paragraphs.
File
src/Plugin/Field/FieldWidget/InlineParagraphsBrowserWidgetTrait.phpView source
<?php
/**
* @file
* Paragraphs Previewer widget trait implementation for paragraphs.
*/
namespace Drupal\paragraphs_browser\Plugin\Field\FieldWidget;
use Drupal\Core\Url;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Field\FieldItemListInterface;
/**
* Trait of Plugin implementation of the 'entity_reference paragraphs' widget.
*
* @var Trait
* @see \Drupal\paragraphs_browser\Plugin\Field\FieldWidget\ParagraphsBrowserWidget
* @see \Drupal\paragraphs_browser\Plugin\Field\FieldWidget\InlineParagraphsBrowserWidget
*/
trait InlineParagraphsBrowserWidgetTrait {
/**
* {@inheritdoc}
*/
public static function defaultSettings() {
$settings = parent::defaultSettings();
$settings['paragraphs_browser'] = '_na';
$settings['modal_width'] = '80%';
$settings['modal_height'] = 'auto';
return $settings;
}
public function settingsForm(array $form, FormStateInterface $form_state) {
$elements = parent::settingsForm($form, $form_state);
$elements['add_mode'] = array(
'#type' => 'hidden',
'#value' => 'paragraphs_browser',
);
$paragraph_storage = \Drupal::entityTypeManager()
->getStorage('paragraphs_browser_type');
$paragraph_browsers = $paragraph_storage
->loadMultiple();
$options = array(
'_na' => 'No Groups',
);
foreach ($paragraph_browsers as $type) {
$options[$type->id] = $type->label;
}
$elements['paragraphs_browser'] = array(
'#type' => 'select',
'#title' => $this
->t('Paragraphs Browser'),
'#description' => $this
->t('Select which browser to use.'),
'#options' => $options,
'#default_value' => $this
->getSetting('paragraphs_browser'),
'#required' => TRUE,
);
$elements['modal_width'] = array(
'#type' => 'textfield',
'#title' => $this
->t('Paragraphs Browser Modal Width'),
'#description' => 'The width of the modal in px or percentage.',
'#default_value' => $this
->getSetting('modal_width'),
'#required' => FALSE,
);
$elements['modal_height'] = array(
'#type' => 'textfield',
'#title' => $this
->t('Paragraphs Browser Modal Height'),
'#description' => 'The height of the modal in px or "auto".',
'#default_value' => $this
->getSetting('modal_height'),
'#required' => FALSE,
);
return $elements;
}
/**
* {@inheritdoc}
*
*/
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
// Call parent function
$element = parent::formElement($items, $delta, $element, $form, $form_state);
// Add styles
$form['#attached']['library'][] = 'paragraphs_browser/modal';
$type = $element['#paragraph_type'];
$current_title = $element['top']['paragraph_type_title']['info']['#markup'];
// Get Paragraph group info
$paragraph_types = \Drupal::entityTypeManager()
->getStorage('paragraphs_browser_type')
->loadMultiple();
foreach ($paragraph_types as $paragraph_type) {
$groups = $paragraph_type
->groupManager();
$group_name = $paragraph_type
->getGroupMap($type);
$group = $groups
->getGroup($group_name);
if ($group) {
$element['top']['paragraph_type_title']['info'] = array(
'#markup' => $current_title,
);
}
}
return $element;
}
public function formMultipleElements(FieldItemListInterface $items, array &$form, FormStateInterface $form_state) {
$elements = parent::formMultipleElements($items, $form, $form_state);
// If the Paragraph browser hasn't been set, return un-modified form.
if ($this
->getSetting('paragraphs_browser') == '_na') {
return $elements;
}
// $elements['add_more'] = array(
// '#type' => 'container',
// '#theme_wrappers' => array('paragraphs_dropbutton_wrapper'),
// );
if (empty($this->uuid)) {
$this->uuid = \Drupal::service('uuid')
->generate();
}
$elements['add_more']['add_more_select']['#attributes']['data-uuid'] = $this->uuid;
$elements['add_more']['add_more_select']['#attributes']['class'][] = 'js-hide';
$elements['add_more']['add_more_select']['#title_display'] = 'hidden';
$elements['add_more']['add_more_button']['#attributes']['data-uuid'] = $this->uuid;
$elements['add_more']['add_more_button']['#attributes']['class'][] = 'js-hide';
unset($elements['add_more']['add_more_button']['#suffix']);
unset($elements['add_more']['add_more_button']['#prefix']);
$elements['#attached']['library'][] = 'paragraphs_browser/modal';
$storage = $form_state
->getStorage();
if (!$this->fieldDefinition
->isTranslatable() && isset($storage['content_translation'])) {
unset($elements['add_more']);
}
else {
$elements['add_more']['browse'] = array(
'#type' => 'submit',
'#value' => $this
->t('Add :title', [
':title' => $this
->getSetting('title'),
]),
'#attributes' => [
'class' => [
'js-show',
],
],
'#ajax' => [
'url' => Url::fromRoute('paragraphs_browser.paragraphs_browser_controller', [
'field_config' => implode('.', array(
$items
->getEntity()
->getEntityTypeId(),
$items
->getEntity()
->bundle(),
$this->fieldDefinition
->getName(),
)),
'paragraphs_browser_type' => $this
->getSetting('paragraphs_browser'),
'uuid' => $this->uuid,
]),
],
);
}
if (isset($elements['#cardinality']) && $elements['#cardinality'] != -1) {
$keyCount = count(array_filter(array_keys($elements), 'is_numeric'));
if ($elements['#cardinality'] <= $keyCount) {
unset($elements['add_more']);
}
}
return $elements;
}
}
Traits
Name | Description |
---|---|
InlineParagraphsBrowserWidgetTrait | Trait of Plugin implementation of the 'entity_reference paragraphs' widget. |