You are here

class FileLink in Express 8

Pre-processes variables for the "file_link" theme hook.

Plugin annotation


@BootstrapPreprocess("file_link",
  replace = "template_preprocess_file_link"
)

Hierarchy

Expanded class hierarchy of FileLink

File

themes/contrib/bootstrap/src/Plugin/Preprocess/FileLink.php, line 26
Contains \Drupal\bootstrap\Plugin\Preprocess\FileLink.

Namespace

Drupal\bootstrap\Plugin\Preprocess
View source
class FileLink extends PreprocessBase {

  /**
   * {@inheritdoc}
   */
  public function preprocessVariables(Variables $variables) {
    $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',
      // Add a specific class for each and every mime type.
      'file--mime-' . strtr($mime_type, [
        '/' => '-',
        '.' => '-',
      ]),
      // Add a more general class for groups of well known mime types.
      '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'],
    ]);
    $options['attributes']['target'] = '_blank';
    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();
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
FileLink::preprocessVariables public function Preprocess the variables array. Overrides PreprocessBase::preprocessVariables
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::$theme protected property The currently set theme object.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
PluginBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase::__construct 1
PreprocessBase::$hook protected property The theme hook invoked.
PreprocessBase::$info protected property The theme hook info array from the theme registry.
PreprocessBase::$variables protected property The Variables object.
PreprocessBase::preprocess public function Preprocess theme hook variables. Overrides PreprocessInterface::preprocess
PreprocessBase::preprocessAttributes protected function Ensures all attributes have been converted to an Attribute object.
PreprocessBase::preprocessDescription protected function Converts any set description variable into a traversable array.
PreprocessBase::preprocessElement protected function Preprocess the variables array if an element is present. 8
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.