class BootstrapPanel in Express 8
Pre-processes variables for the "bootstrap_panel" theme hook.
Plugin annotation
@BootstrapPreprocess("bootstrap_panel");
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\bootstrap\Plugin\PluginBase
- class \Drupal\bootstrap\Plugin\Preprocess\PreprocessBase implements PreprocessInterface
- class \Drupal\bootstrap\Plugin\Preprocess\BootstrapPanel implements PreprocessInterface
- class \Drupal\bootstrap\Plugin\Preprocess\PreprocessBase implements PreprocessInterface
- class \Drupal\bootstrap\Plugin\PluginBase
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of BootstrapPanel
File
- themes/
contrib/ bootstrap/ src/ Plugin/ Preprocess/ BootstrapPanel.php, line 22 - Contains \Drupal\bootstrap\Plugin\Preprocess\BootstrapPanel.
Namespace
Drupal\bootstrap\Plugin\PreprocessView source
class BootstrapPanel extends PreprocessBase implements PreprocessInterface {
/**
* {@inheritdoc}
*/
protected function preprocessElement(Element $element, Variables $variables) {
// Assign the ID, if not already set.
$element
->map([
'id',
]);
// Add necessary classes.
$element
->addClass([
'form-item',
'js-form-item',
'form-wrapper',
'js-form-wrapper',
]);
$body = [];
$properties = [
'field_prefix',
'body',
'children',
];
// Only add the #value property if it's a "details" or "fieldset" element
// type. Some form elements may use "CompositeFormElementTrait" which
// will inadvertently and eventually become preprocessed here and #value
// may actually be the element's value instead of a renderable element.
if ($element
->isType([
'details',
'fieldset',
])) {
$properties[] = 'value';
}
// Add the "#field_suffix" property.
$properties[] = 'field_suffix';
// Merge all possible content from the element into a single render array.
foreach ($properties as $property) {
$body[$property] = Element::create($element
->getProperty($property, []))
->getArray();
}
$variables['body'] = array_filter($body);
$map = [
'attributes' => 'attributes',
'body_attributes' => 'body_attributes',
'content_attributes' => 'body_attributes',
'description' => 'description',
'description_attributes' => 'description_attributes',
'description_display' => 'description_display',
'errors' => 'errors',
'footer' => 'footer',
'required' => 'required',
'panel_type' => 'panel_type',
'title' => 'heading',
'title_attributes' => 'heading_attributes',
];
// Handle specific "details" elements.
if ($element
->isType('details')) {
// Details are always collapsible per the HTML5 spec.
// @see https://www.drupal.org/node/1852020
$variables['collapsible'] = TRUE;
// Determine the collapsed state.
$variables['collapsed'] = !$element
->getProperty('open', TRUE);
// Remove the unnecessary details attribute.
$element
->removeAttribute('open');
}
elseif ($element
->isType('fieldset')) {
// Override variables to mimic the default "fieldset" element info.
// They will be mapped below if they exist on the element.
unset($variables['collapsible'], $variables['collapsed']);
$map['collapsed'] = 'collapsed';
$map['collapsible'] = 'collapsible';
}
// Map the element properties to the variables array.
$variables
->map($map);
}
/**
* {@inheritdoc}
*/
protected function preprocessVariables(Variables $variables) {
// Retrieve the ID, generating one if needed.
$id = $variables
->getAttribute('id', Html::getUniqueId($variables
->offsetGet('id', 'bootstrap-panel')));
unset($variables['id']);
// Handle collapsible state.
if ($variables['heading'] && $variables['collapsible']) {
// Retrieve the body ID attribute.
if ($body_id = $variables
->getAttribute('id', "{$id}--content", 'body_attributes')) {
// Ensure the target is set.
if ($variables['target'] = $variables
->offsetGet('target', "#{$body_id}")) {
// Set additional necessary attributes to the heading.
$variables
->setAttributes([
'aria-controls' => preg_replace('/^#/', '', $variables['target']),
'aria-expanded' => !$variables['collapsed'] ? 'true' : 'false',
'aria-pressed' => !$variables['collapsed'] ? 'true' : 'false',
'data-toggle' => 'collapse',
'role' => 'button',
], 'heading_attributes');
}
}
}
// Ensure we render HTML from heading.
$heading = $variables
->offsetGet('heading');
if ($heading && (is_string($heading) || $heading instanceof MarkupInterface)) {
$variables
->offsetSet('heading', [
'#markup' => $heading,
]);
}
// Ensure there is a valid panel state.
if (!$variables
->offsetGet('panel_type')) {
$variables
->offsetSet('panel_type', 'default');
}
// Convert the description variable.
$this
->preprocessDescription();
// Ensure all attributes are proper objects.
$this
->preprocessAttributes();
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
BootstrapPanel:: |
protected | function |
Preprocess the variables array if an element is present. Overrides PreprocessBase:: |
|
BootstrapPanel:: |
protected | function |
Preprocess the variables array. Overrides PreprocessBase:: |
|
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
protected | property | The currently set theme object. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginBase:: |
public | function |
Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase:: |
1 |
PreprocessBase:: |
protected | property | The theme hook invoked. | |
PreprocessBase:: |
protected | property | The theme hook info array from the theme registry. | |
PreprocessBase:: |
protected | property | The Variables object. | |
PreprocessBase:: |
public | function |
Preprocess theme hook variables. Overrides PreprocessInterface:: |
|
PreprocessBase:: |
protected | function | Ensures all attributes have been converted to an Attribute object. | |
PreprocessBase:: |
protected | function | Converts any set description variable into a traversable array. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |