Namespace
Drupal\bootstrap\Plugin
- <?php
-
- namespace Drupal\bootstrap\Plugin;
-
- use Drupal\bootstrap\Bootstrap;
- use Drupal\bootstrap\Theme;
- use Drupal\bootstrap\Utility\Element;
- use Drupal\Component\Utility\NestedArray;
- use Drupal\Core\Form\FormStateInterface;
-
- * Manages discovery and instantiation of Bootstrap form process callbacks.
- *
- * @ingroup plugins_process
- */
- class ProcessManager extends PluginManager {
-
-
- * A list of element types that should be rendered as inline.
- *
- * @var array
- *
- * @deprecated in bootstrap:8.x-3.21 and is removed from bootstrap:8.x-4.0.
- * This method will be removed when process managers can be sub-classed.
- *
- * @see https://www.drupal.org/project/bootstrap/issues/2868538
- *
- * @internal
- */
- protected static $inlineElementTypes;
-
-
- * Constructs a new \Drupal\bootstrap\Plugin\ProcessManager object.
- *
- * @param \Drupal\bootstrap\Theme $theme
- * The theme to use for discovery.
- */
- public function __construct(Theme $theme) {
- parent::__construct($theme, 'Plugin/Process', 'Drupal\bootstrap\Plugin\Process\ProcessInterface', 'Drupal\bootstrap\Annotation\BootstrapProcess');
- $this->setCacheBackend(\Drupal::cache('discovery'), 'theme:' . $theme->getName() . ':process', $this->getCacheTags());
- }
-
-
- * Global #process callback for form elements.
- *
- * @param array $element
- * The element render array.
- * @param \Drupal\Core\Form\FormStateInterface $form_state
- * The current state of the form.
- * @param array $complete_form
- * The complete form structure.
- *
- * @return array
- * The altered element array.
- *
- * @see \Drupal\bootstrap\Plugin\Alter\ElementInfo::alter
- */
- public static function process(array $element, FormStateInterface $form_state, array &$complete_form) {
- if (!empty($element['#bootstrap_ignore_process'])) {
- return $element;
- }
-
- static $theme;
- if (!isset($theme)) {
- $theme = Bootstrap::getTheme();
- }
-
- $e = Element::create($element, $form_state);
-
-
- if (($e->getProperty('ajax') && !$e->isButton()) || $e->getProperty('autocomplete_route_name')) {
- static::processAjax($e, $form_state, $complete_form);
- }
-
-
- if ($e->hasClass('container-inline')) {
- $e->replaceClass('container-inline', 'form-inline');
- }
-
-
- if ($e->isType(static::getInlineElementTypes())) {
- $e->addClass('form-inline', 'wrapper_attributes');
- }
-
-
- if ($e->getProperty('input') && ($e->getProperty('input_group') || $e->getProperty('input_group_button'))) {
- static::processInputGroups($e, $form_state, $complete_form);
- }
-
- return $element;
- }
-
-
- * Retrieves the element types that should be rendered as inline.
- *
- * @return array
- * The inline element types.
- *
- * @deprecated in bootstrap:8.x-3.21 and is removed from bootstrap:8.x-4.0.
- * This method will be removed when process managers can be sub-classed.
- *
- * @see https://www.drupal.org/project/bootstrap/issues/2868538
- *
- * @internal
- */
- protected static function getInlineElementTypes() {
- if (!static::$inlineElementTypes) {
- $types = ['color', 'date', 'number', 'range', 'tel', 'weight'];
- \Drupal::theme()->alter('bootstrap_inline_element_types', $types);
- static::$inlineElementTypes = $types;
- }
- return static::$inlineElementTypes;
- }
-
-
- * Processes elements with AJAX properties.
- *
- * @param \Drupal\bootstrap\Utility\Element $element
- * The element object.
- * @param \Drupal\Core\Form\FormStateInterface $form_state
- * The current state of the form.
- * @param array $complete_form
- * The complete form structure.
- */
- public static function processAjax(Element $element, FormStateInterface $form_state, array &$complete_form) {
- $ajax = $element->getProperty('ajax');
-
-
- $ignore_types = ['checkbox', 'checkboxes', 'hidden', 'radio', 'radios'];
- if ((!isset($ajax['progress']['type']) || $ajax['progress']['type'] === 'throbber') && !$element->isType($ignore_types)) {
-
- $icon = Bootstrap::glyphicon('refresh');
- $element->appendProperty('field_suffix', Element::create($icon)->addClass(['ajax-progress', 'ajax-progress-throbber']));
- $element->setProperty('input_group', TRUE);
- }
- }
-
-
- * Processes elements that have input groups.
- *
- * @param \Drupal\bootstrap\Utility\Element $element
- * The element object.
- * @param \Drupal\Core\Form\FormStateInterface $form_state
- * The current state of the form.
- * @param array $complete_form
- * The complete form structure.
- */
- protected static function processInputGroups(Element $element, FormStateInterface $form_state, array &$complete_form) {
-
-
- if ($element->getProperty('input_group_button')) {
-
- $array_parents = $element->getProperty('array_parents', []);
-
-
- array_pop($array_parents);
-
-
- $parent = Element::create(NestedArray::getValue($complete_form, $array_parents), $form_state);
-
-
- if ($button = &$parent->findButton()) {
-
-
- $element->appendProperty('field_suffix', $button->setIcon()->render());
- }
- }
-
- $input_group_attributes = ['class' => ['input-group-' . ($element->getProperty('input_group_button') ? 'btn' : 'addon')]];
- if ($prefix = $element->getProperty('field_prefix')) {
- $element->setProperty('field_prefix', [
- '#type' => 'html_tag',
- '#tag' => 'span',
- '#attributes' => $input_group_attributes,
- '#value' => Element::create($prefix)->renderPlain(),
- '#weight' => -1,
- ]);
- }
- if ($suffix = $element->getProperty('field_suffix')) {
- $element->setProperty('field_suffix', [
- '#type' => 'html_tag',
- '#tag' => 'span',
- '#attributes' => $input_group_attributes,
- '#value' => Element::create($suffix)->renderPlain(),
- '#weight' => 1,
- ]);
- }
- }
-
-
- * Traverses an element to find the closest button.
- *
- * @param \Drupal\bootstrap\Utility\Element $element
- * The element to iterate over.
- *
- * @return \Drupal\bootstrap\Utility\Element|false
- * The first button element or FALSE if no button could be found.
- *
- * @deprecated Will be removed in a future release.
- * Use \Drupal\bootstrap\Utility\Element::findButton() directly.
- */
- protected static function &findButton(Element $element) {
- Bootstrap::deprecated();
- return $element->findButton();
- }
-
- }
Classes
Name |
Description |
ProcessManager |
Manages discovery and instantiation of Bootstrap form process callbacks. |