You are here

function ckeditor5_js_alter in Drupal 10

Implements hook_js_alter().

File

core/modules/ckeditor5/ckeditor5.module, line 540

Code

function ckeditor5_js_alter(&$javascript, AttachedAssetsInterface $assets) {

  // This file means CKEditor 5 translations are in use on the page.
  // @see locale_js_alter()
  $placeholder_file = 'core/assets/vendor/ckeditor5/translation.js';

  // This file is used to get a weight that will make it possible to aggregate
  // all translation files in a single aggregate.
  $ckeditor_dll_file = 'core/assets/vendor/ckeditor5/ckeditor5-dll/ckeditor5-dll.js';
  if (isset($javascript[$placeholder_file])) {

    // Use the placeholder file weight to set all the translations files weights
    // so they can be aggregated together as expected.
    $default_weight = $javascript[$placeholder_file]['weight'];
    if (isset($javascript[$ckeditor_dll_file])) {
      $default_weight = $javascript[$ckeditor_dll_file]['weight'];
    }

    // The placeholder file is not a real file, remove it from the list.
    unset($javascript[$placeholder_file]);

    // When the locale module isn't installed there are no translations.
    if (!\Drupal::moduleHandler()
      ->moduleExists('locale')) {
      return;
    }
    $language_interface = \Drupal::languageManager()
      ->getCurrentLanguage()
      ->getId();
    $ckeditor5_language = _ckeditor5_get_langcode_mapping($language_interface);

    // Remove all CKEditor 5 translations files that are not in the current
    // language.
    foreach ($javascript as $index => &$item) {

      // This is not a CKEditor 5 translation file, skip it.
      if (empty($item['ckeditor5_langcode'])) {
        continue;
      }

      // This file is the correct translation for this page.
      if ($item['ckeditor5_langcode'] === $ckeditor5_language) {

        // Set the weight for the translation file to be able to have the
        // translation files aggregated.
        $item['weight'] = $default_weight;
      }
      else {

        // Remove files that don't match the language requested.
        unset($javascript[$index]);
      }
    }
  }
}