bootstrap_italia-8.x-0.x-dev/src/Helper/Libraries.php
src/Helper/Libraries.php
<?php namespace Drupal\bootstrap_italia\Helper; /** * Libraries class for bootstrap_italia theme. * * Why isn't it a service? https://www.drupal.org/project/drupal/issues/2002606. */ class Libraries { /** * Distribution folder name. * * @var string */ private static string $distributionFolder = 'dist'; /** * Returns available theme libraries. * * @return array<int|string, mixed> * Array with theme libraries options. */ public static function getLibraries(): array { $theme = Helper::getTheme(); $assets_css_path = $theme->getPath() . '/' . self::$distributionFolder . '/css'; $assets_js_path = $theme->getPath() . '/' . self::$distributionFolder . '/js'; $static_option = [ 'vanilla' => t('Vanilla libraries'), 'cdn' => t('CDN libraries'), '' => t('Use @theme.libraries.yml', ['@theme' => $theme->getName()]), ]; // Check if directories css and js exists. if (!is_dir($assets_css_path) || !is_dir($assets_js_path)) { return $static_option; } // Config extensions parameters. $extensions = ['css', 'js']; $extensions = array_map('preg_quote', $extensions); $extensions = implode('|', $extensions); // Search css e js file in theme/dist. $css = \Drupal::service('file_system')->scanDirectory($assets_css_path, "/{$extensions}$/"); $js = \Drupal::service('file_system')->scanDirectory($assets_js_path, "/{$extensions}$/"); // Make a libraries return array. $libraries = []; $libraries += $static_option; // Loop for css files. foreach ($css as $fileC) { // Loop for js files. foreach ($js as $fileJ) { // If name css and js match. if ($fileC->name == $fileJ->name) { // Add variant. $libraries[$fileC->name] = 'Webpack: ' . $fileC->name . '.[css/js]'; } } } return $libraries; } /** * Set themes libraries. * * @return array<int|string|empty> * Libraries array. */ public static function setLibraries(): array { // Get libraries_type from Drupal config. /** @var string $libraries_type */ $libraries_type = Helper::getSettings()->get('libraries_type'); if (!empty($libraries_type) && $libraries_type == 'vanilla') { $libraries['libraries-ui'] = self::getLibrariesVanilla(); } elseif (!empty($libraries_type) && $libraries_type == 'cdn') { $libraries['libraries-ui'] = self::getLibrariesCdn(); } elseif (!empty($libraries_type) && $libraries_type != '') { $libraries['libraries-ui'] = [ 'css' => [ 'theme' => [ self::$distributionFolder . '/css/' . $libraries_type . '.css' => ['minified' => TRUE], ], ], 'js' => [ self::$distributionFolder . '/js/' . $libraries_type . '.js' => ['minified' => TRUE], ], 'dependencies' => [ 'core/drupal', ], ]; } else { $libraries = []; } return $libraries; } /** * Returns vanilla libraries. * * @return array<string, mixed> * Array with vanilla libraries */ public static function getLibrariesVanilla(): array { $js = Helper::getSettings()->get('libraries_vanilla_bundle') ? self::$distributionFolder . '/js/bootstrap-italia.bundle.min.js' : self::$distributionFolder . '/js/bootstrap-italia.min.js'; $css = self::$distributionFolder . '/css/bootstrap-italia.min.css'; return [ 'css' => [ 'theme' => [ $css => ['minified' => TRUE], ], ], 'js' => [ $js => ['minified' => TRUE], ], 'dependencies' => [ 'core/drupal', ], ]; } /** * Returns CDN libraries. * * @return array<string, mixed> * Array with CDN libraries */ public static function getLibrariesCdn(): array { $css = Helper::getSettings()->get('libraries_cdn_css'); $js = Helper::getSettings()->get('libraries_cdn_js'); $min = Helper::getSettings()->get('libraries_cdn_minified'); return [ 'css' => [ 'theme' => [ $css => [ 'type' => 'external', 'minified' => $min, ], ], ], 'js' => [ $js => [ 'type' => 'external', 'minified' => $min, ], ], 'dependencies' => [ 'core/drupal', ], ]; } }