/** * {@inheritdoc} */ public function preprocessElement(Element $element, Variables $variables) { $variables->addClass(['image-widget', 'js-form-managed-file', 'form-managed-file', 'clearfix']); $data =& $variables->offsetGet('data', []); foreach ($element->children() as $key => $child) { // Modify the label to be a placeholder instead. if ($key === 'alt') { $child->setProperty('form_group', FALSE); $placeholder = (string) $child->getAttribute('placeholder'); if (!$placeholder) { $label = ['#theme' => 'form_element_label']; $label += array_intersect_key($child->getArray(), array_flip(['#id', '#required', '#title', '#title_display'])); $child->setProperty('title_display', 'invisible'); $placeholder = trim(strip_tags(Element::create($label)->render())); if ($child->getProperty('required')) { $child->setProperty('description', t('@description (Required)', ['@description' => $child->getProperty('description')])); } } if ($placeholder) { $child->setAttribute('placeholder', $placeholder); } } $data[$key] = $child->getArray(); } }
/** * {@inheritdoc} */ public function preprocessVariables(Variables $variables) { $region = $variables['elements']['#region']; $variables['region'] = $region; $variables['content'] = $variables['elements']['#children']; // Help region. if ($region === 'help' && !empty($variables['content'])) { $variables['content'] = ['icon' => Bootstrap::glyphicon('question-sign'), 'content' => ['#markup' => $variables['content']]]; $variables->addClass(['alert', 'alert-info', 'messages', 'info']); } // Support for "well" classes in regions. static $region_wells; if (!isset($region_wells)) { $region_wells = $this->theme->getSetting('region_wells'); } if (!empty($region_wells[$region])) { $variables->addClass($region_wells[$region]); } }
/** * {@inheritdoc} */ public function preprocessElement(Variables $variables, $hook, array $info) { $variables->addClass(['image-widget', 'js-form-managed-file', 'form-managed-file', 'clearfix']); /** @var \Drupal\file\Entity\File $file */ foreach ($variables->element->getProperty('files') as $file) { $variables->element->{'file_' . $file->id()}->filename->setProperty('suffix', ' <span class="file-size badge">' . format_size($file->getSize()) . '</span>'); } $data =& $variables->offsetGet('data', []); foreach ($variables->element->children() as $key => $child) { $data[$key] = $child->getArray(); } }
/** * {@inheritdoc} */ public function preprocessVariables(Variables $variables, $hook, array $info) { if ($variables->theme_hook_original === 'links' && $variables->hasClass('operations')) { $variables->addClass('list-inline'); foreach ($variables->links as &$data) { $link = Element::create($data['link']); $link->addClass(['btn', 'btn-sm']); $link->colorize(); $link->setIcon(); if ($this->theme->getSetting('tooltip_enabled')) { $link->setAttribute('data-toggle', 'tooltip'); $link->setAttribute('data-placement', 'bottom'); } } } $this->preprocessAttributes($variables, $hook, $info); }
/** * {@inheritdoc} */ public function preprocessVariables(Variables $variables, $hook, array $info) { $options = []; $file = $variables['file'] instanceof File ? $variables['file'] : File::load($variables['file']->fid); $url = file_create_url($file->getFileUri()); $file_size = $file->getSize(); $mime_type = $file->getMimeType(); // Set options as per anchor format described at // http://microformats.org/wiki/file-format-examples $options['attributes']['type'] = "{$mime_type}; length={$file_size}"; // Use the description as the link text if available. if (empty($variables['description'])) { $link_text = $file->getFilename(); } else { $link_text = $variables['description']; $options['attributes']['title'] = $file->getFilename(); } // Retrieve the generic mime type from core (mislabeled as "icon_class"). $generic_mime_type = file_icon_class($mime_type); // Map the generic mime types to an icon and state. $mime_map = ['application-x-executable' => ['label' => t('binary file'), 'icon' => 'console'], 'audio' => ['label' => t('audio file'), 'icon' => 'headphones'], 'image' => ['label' => t('image'), 'icon' => 'picture'], 'package-x-generic' => ['label' => t('archive'), 'icon' => 'compressed'], 'text' => ['label' => t('document'), 'icon' => 'file'], 'video' => ['label' => t('video'), 'icon' => 'film']]; // Retrieve the mime map array. $mime = isset($mime_map[$generic_mime_type]) ? $mime_map[$generic_mime_type] : ['label' => t('file'), 'icon' => 'file', 'state' => 'primary']; // Classes to add to the file field for icons. $variables->addClass(['file', 'file--mime-' . strtr($mime_type, ['/' => '-', '.' => '-']), 'file--' . $generic_mime_type]); // Set the icon for the mime type. $icon = Bootstrap::glyphicon($mime['icon']); $variables->icon = Element::create($icon)->addClass('text-primary')->getArray(); $options['attributes']['title'] = t('Open @mime in new window', ['@mime' => $mime['label']]); if ($this->theme->getSetting('tooltip_enabled')) { $options['attributes']['data-toggle'] = 'tooltip'; $options['attributes']['data-placement'] = 'bottom'; } $variables['link'] = Link::fromTextAndUrl($link_text, Url::fromUri($url, $options)); // Add the file size as a variable. $variables->file_size = format_size($file_size); // Preprocess attributes. $this->preprocessAttributes($variables, $hook, $info); }
/** * {@inheritdoc} */ public function preprocessVariables(Variables $variables, $hook, array $info) { if ($variables->theme_hook_original === 'links' && $variables->hasClass('operations')) { $variables->addClass('list-inline'); foreach ($variables->links as &$data) { $link = Element::create($data['link']); $link->addClass(['btn', 'btn-sm']); $link->colorize(); $link->setIcon(); if ($icon = $link->getProperty('icon')) { $link->addClass('icon-before'); $title = ['icon' => $icon, 'title' => ['#markup' => $link->getProperty('title')]]; $link->setProperty('title', Element::create($title)); } if (($options =& $link->getProperty('options', [])) && isset($options['attributes']['title'])) { $link->setAttribute('data-toggle', 'tooltip'); $link->setAttribute('data-placement', 'bottom'); } } } $this->preprocessAttributes($variables, $hook, $info); }