gin_lp-1.0.x-dev/src/TwigExtension/GinLpExtension.php

src/TwigExtension/GinLpExtension.php
<?php

namespace Drupal\gin_lp\TwigExtension;

use Drupal\Core\Template\Attribute;
use Drupal\Core\Template\TwigExtension;
use Twig\TwigFunction;

/**
 * A class providing Gin Twig function.
 *
 * @package Drupal\gin_lp\TwigExtension
 */
class GinLpExtension extends TwigExtension {

  private static $ginLpClasses = NULL;
  /**
   * {@inheritdoc}
   */
  public function getFunctions() {
    return [
      new TwigFunction('glp_classes', [$this, 'ginClasses']),
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function getName() {
    return 'gin_lp';
  }

  /**
   * Returns a list of all glp- prefixed classes.
   * The classes are generated by an postcss plugin.
   *
   * @return []
   *   The classes
   */
  private static function getGinLpClasses() {
    if (GinLpExtension::$ginLpClasses === NULL) {
      GinLpExtension::$ginLpClasses = json_decode(file_get_contents(__DIR__ . '/../classes.json'));
    }
    return GinLpExtension::$ginLpClasses;
  }

  /**
   * Replaces all theme classes with gin classes.
   *
   * @param \Drupal\Core\Template\Attribute $attribute
   *   Twig attributes.
   *
   * @return \Drupal\Core\Template\Attribute
   *   The replaced attributes.
   */
  public static function ginClasses(Attribute $attribute) {

    $gin_lp_classes = self::getGinLpClasses();
    if ($attribute->getClass() === NULL) {
      return $attribute;
    }
    $renamed_classes = [];

    // These classes need to be kept for script purposes.
    // If this class has been styled, then we'll keep both classes: the original
    // and the custom glp one.
    $script_classes = [
      'form-autocomplete',
    ];

    foreach ($attribute->getClass() as $class_string) {
      // $attribute->getClass returns multiple classes as one class.
      // To prefix this classes - explode it.
      $classes = explode(' ', $class_string);
      foreach ($classes as $class) {
        if (in_array('glp-' . $class, $gin_lp_classes)) {
          $renamed_classes[] = 'glp-' . $class;
          if (in_array($class, $script_classes)) {
            $renamed_classes[] = $class;
          }
        } else {
          $renamed_classes[] = $class;
        }
      }
    }
    $attribute->setAttribute('class', $renamed_classes);
    return $attribute;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc