/** * Pre-processes variables for the "bootstrap_panel" theme hook. * * See template for list of available variables. * * @see bootstrap-panel.html.twig * * @ingroup theme_preprocess */ function bootstrap_preprocess_bootstrap_panel(&$variables) { $element = $variables['element']; Element::setAttributes($element, array('id')); Element\RenderElement::setAttributes($element); $variables['attributes'] = $element['#attributes']; $variables['prefix'] = isset($element['#field_prefix']) ? $element['#field_prefix'] : NULL; $variables['suffix'] = isset($element['#field_suffix']) ? $element['#field_suffix'] : NULL; $variables['title_display'] = isset($element['#title_display']) ? $element['#title_display'] : NULL; $variables['children'] = $element['#children']; $variables['required'] = !empty($element['#required']) ? $element['#required'] : NULL; $variables['legend']['title'] = !empty($element['#title']) ? Xss::filterAdmin($element['#title']) : ''; $variables['legend']['attributes'] = new Attribute(); $variables['legend_span']['attributes'] = new Attribute(); if (!empty($element['#description'])) { $description_id = $element['#attributes']['id'] . '--description'; $description_attributes['id'] = $description_id; $variables['description']['attributes'] = new Attribute($description_attributes); $variables['description']['content'] = $element['#description']; // Add the description's id to the fieldset aria attributes. $variables['attributes']['aria-describedby'] = $description_id; } $variables['collapsible'] = FALSE; if (isset($element['#collapsible'])) { $variables['collapsible'] = $element['#collapsible']; $variables['attributes']['class'][] = 'collapsible'; } $variables['collapsed'] = FALSE; if (isset($element['#collapsed'])) { $variables['collapsed'] = $element['#collapsed']; } // Force grouped fieldsets to not be collapsible (for vertical tabs). if (!empty($element['#group'])) { $variables['collapsible'] = FALSE; $variables['collapsed'] = FALSE; } if (!isset($element['#id']) && $variables['collapsible']) { $element['#id'] = \Drupal\Component\Utility\Html::getUniqueId('bootstrap-panel'); } $variables['target'] = NULL; if (isset($element['#id'])) { if (!isset($variables['attributes']['id'])) { $variables['attributes']['id'] = $element['#id']; } $variables['target'] = '#' . $element['#id'] . ' > .collapse'; } // Iterate over optional variables. $keys = array('description', 'prefix', 'suffix', 'title', 'value'); foreach ($keys as $key) { $variables[$key] = !empty($element["#{$key}"]) ? $element["#{$key}"] : FALSE; } }
/** * @covers ::preRenderAjaxForm */ public function testPreRenderAjaxFormWithQueryOptions() { $request = Request::create('/test'); $request->query->set('foo', 'bar'); $this->requestStack->push($request); $prophecy = $this->prophesize('Drupal\\Core\\Routing\\UrlGeneratorInterface'); $url = '/test?foo=bar&other=query&ajax_form=1'; $prophecy->generateFromRoute('<current>', [], ['query' => ['foo' => 'bar', 'other' => 'query', FormBuilderInterface::AJAX_FORM_REQUEST => TRUE]], TRUE)->willReturn((new GeneratedUrl())->setCacheContexts(['route'])->setGeneratedUrl($url)); $url_generator = $prophecy->reveal(); $this->container->set('url_generator', $url_generator); $element = ['#type' => 'select', '#id' => 'test', '#ajax' => ['wrapper' => 'foo', 'callback' => 'test-callback', 'options' => ['query' => ['other' => 'query']]]]; $element = RenderElement::preRenderAjaxForm($element); $this->assertTrue($element['#ajax_processed']); $this->assertEquals($url, $element['#attached']['drupalSettings']['ajax']['test']['url']); }