/** * Creates a group formatted as vertical tabs. * * @param array $element * An associative array containing the properties and children of the * details element. * @param \Drupal\Core\Form\FormStateInterface $form_state * The current state of the form. * @param array $complete_form * The complete form structure. * * @return array * The processed element. */ public static function processVerticalTabs(&$element, FormStateInterface $form_state, &$complete_form) { // Inject a new details as child, so that form_process_details() processes // this details element like any other details. $element['group'] = array('#type' => 'details', '#theme_wrappers' => array(), '#parents' => $element['#parents']); // Add an invisible label for accessibility. if (!isset($element['#title'])) { $element['#title'] = t('Vertical Tabs'); $element['#title_display'] = 'invisible'; } $element['#attached']['library'][] = 'core/drupal.vertical-tabs'; // The JavaScript stores the currently selected tab in this hidden // field so that the active tab can be restored the next time the // form is rendered, e.g. on preview pages or when form validation // fails. $name = implode('__', $element['#parents']); if ($form_state->hasValue($name . '__active_tab')) { $element['#default_tab'] = $form_state->getValue($name . '__active_tab'); } $element[$name . '__active_tab'] = array('#type' => 'hidden', '#default_value' => $element['#default_tab'], '#attributes' => array('class' => array('vertical-tabs-active-tab'))); // Clean up the active tab value so it's not accidentally stored in // settings forms. $form_state->addCleanValueKey($name . '__active_tab'); return $element; }
/** * {@inheritdoc} */ public function addCleanValueKey($key) { $this->mainFormState->addCleanValueKey($key); return $this; }
/** * {@inheritdoc} */ public function addCleanValueKey($cleanValueKey) { $this->decoratedFormState->addCleanValueKey($cleanValueKey); return $this; }
/** * Helper function to clean a value on an element. */ public static function cleanValue(&$element, FormStateInterface $form_state, &$complete_form) { $form_state->addCleanValueKey('wine'); }
/** * @covers ::addCleanValueKey */ public function testAddCleanValueKey() { $key = 'BAR'; $this->decoratedFormState->addCleanValueKey($key)->shouldBeCalled(); $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->addCleanValueKey($key)); }