class LibraryInfo extends PluginBase implements AlterInterface {
public function alter(&$libraries, &$extension = NULL, &$context2 = NULL) {
$livereload = $this->theme->livereloadUrl();
if ($livereload) {
$this->processLibrary($libraries, function(&$info, &$key, $type) {
if ($type === 'css' || $type === 'js') {
$info['preprocess'] = FALSE;
}
});
}
if ($extension === 'bootstrap') {
if ($livereload) {
$libraries['livereload']['js'][$livereload] = $libraries['livereload']['js']['livereload.js'];
unset($libraries['livereload']['js']['livereload.js']);
}
$this->theme->getCdnProvider()->alterFrameworkLibrary($libraries['framework']);
if (((int) substr(\Drupal::VERSION, 0, 1)) < 9) {
$libraries['drupal.vertical-tabs']['dependencies'][] = 'core/matchmedia';
}
}
elseif ($extension === 'core') {
if ($this->theme->getSetting('modal_enabled')) {
if ($this->theme->getSetting('modal_jquery_ui_bridge')) {
$key = array_search('core/jquery.ui.dialog', $libraries['drupal.dialog']['dependencies']);
if ($key !== FALSE) {
unset($libraries['drupal.dialog']['dependencies'][$key]);
}
unset($libraries['drupal.dialog']['js']['misc/dialog/dialog.jquery-ui.js']);
$libraries['drupal.dialog']['dependencies'][] = 'bootstrap/dialog';
$libraries['drupal.dialog']['dependencies'][] = 'bootstrap/modal.jquery.ui.bridge';
}
else {
$libraries['drupal.dialog']['dependencies'][] = 'bootstrap/modal';
$libraries['drupal.dialog']['dependencies'][] = 'bootstrap/dialog';
}
}
}
}
public function processLibrary(array &$libraries, callable $callback) {
foreach ($libraries as &$library) {
foreach ($library as $type => $definition) {
if (is_array($definition)) {
$modified = [];
if ($type === 'css') {
foreach ($definition as $group => $files) {
foreach ($files as $key => $info) {
call_user_func_array($callback, [&$info, &$key, $type]);
$modified[$group][$key] = $info;
}
}
}
else {
foreach ($definition as $key => $info) {
call_user_func_array($callback, [&$info, &$key, $type]);
$modified[$key] = $info;
}
}
$library[$type] = $modified;
}
}
}
}
}