View source
<?php
namespace Drupal\bootstrap\Plugin\Preprocess;
use Drupal\bootstrap\Annotation\BootstrapPreprocess;
use Drupal\bootstrap\Bootstrap;
use Drupal\bootstrap\Utility\Element;
use Drupal\bootstrap\Utility\Variables;
use Drupal\Core\Link;
use Drupal\Core\Url;
use Drupal\file\Entity\File;
class FileLink extends PreprocessBase {
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();
$options['attributes']['type'] = "{$mime_type}; length={$file_size}";
if (empty($variables['description'])) {
$link_text = $file
->getFilename();
}
else {
$link_text = $variables['description'];
$options['attributes']['title'] = $file
->getFilename();
}
$generic_mime_type = file_icon_class($mime_type);
$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',
],
];
$mime = isset($mime_map[$generic_mime_type]) ? $mime_map[$generic_mime_type] : [
'label' => t('file'),
'icon' => 'file',
'state' => 'primary',
];
$variables
->addClass([
'file',
'file--mime-' . strtr($mime_type, [
'/' => '-',
'.' => '-',
]),
'file--' . $generic_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));
$variables->file_size = format_size($file_size);
$this
->preprocessAttributes();
}
}