You are here

function fontawesome_menu_icons_link_alter in Font Awesome Menu Icons 8

Implements hook_link_alter().

File

./fontawesome_menu_icons.module, line 294
Contains fontawesome_menu_icons.module.

Code

function fontawesome_menu_icons_link_alter(&$variables) {
  if (!empty($variables['options']['fa_icon']) && empty($variables['options']['already_processed'])) {
    $class = $variables['options']['fa_icon'];
    $prefix = !empty($variables['options']['fa_icon_prefix']) ? $variables['options']['fa_icon_prefix'] : 'fa';
    $tag = !empty($variables['options']['fa_icon_tag']) ? $variables['options']['fa_icon_tag'] : 'i';
    $appearance = !empty($variables['options']['fa_icon_appearance']) ? $variables['options']['fa_icon_appearance'] : 'before';

    /** @var \Drupal\Core\Url $url */
    $url = $variables['url'];
    $is_link = $url
      ->isRouted() && $url
      ->getRouteName() == '<nolink>' ? FALSE : TRUE;
    switch ($appearance) {
      case "only":
        if ($is_link) {
          $variables['options']['attributes']['aria-label'] = $variables['text'];
          $variables['text'] = new FormattableMarkup('<' . $tag . ' class="' . $prefix . ' ' . $class . '" aria-hidden="true"></' . $tag . '>', []);
        }
        else {
          $variables['text'] = new FormattableMarkup('<' . $tag . ' class="' . $prefix . ' ' . $class . '" aria-hidden="true" title="@title"></' . $tag . '><span class="sr-only">@title</span>', [
            '@title' => $variables['text'],
          ]);
        }
        break;
      case "after":
        $variables['text'] = new FormattableMarkup('@title <' . $tag . ' class="' . $prefix . ' ' . $class . '" aria-hidden="true"></' . $tag . '>', [
          '@title' => $variables['text'],
        ]);
        break;
      case "before":
      default:
        $variables['text'] = new FormattableMarkup('<' . $tag . ' class="' . $prefix . ' ' . $class . '" aria-hidden="true"></' . $tag . '> <span class="link-text">@title</span>', [
          '@title' => $variables['text'],
        ]);
        break;
    }
    $variables['options']['already_processed'] = TRUE;
  }
}