class TwigFormulaLoader

Loads asset formulae from Twig templates.

@author Kris Wallsmith <kris.wallsmith@gmail.com>

Hierarchy

Expanded class hierarchy of TwigFormulaLoader

File

drupal/core/vendor/kriswallsmith/assetic/src/Assetic/Extension/Twig/TwigFormulaLoader.php, line 22

Namespace

Assetic\Extension\Twig
View source
class TwigFormulaLoader implements FormulaLoaderInterface {
  private $twig;
  public function __construct(\Twig_Environment $twig) {
    $this->twig = $twig;
  }
  public function load(ResourceInterface $resource) {
    try {
      $tokens = $this->twig
        ->tokenize($resource
        ->getContent(), (string) $resource);
      $nodes = $this->twig
        ->parse($tokens);
    } catch (\Exception $e) {
      return array();
    }
    return $this
      ->loadNode($nodes);
  }

  /**
   * Loads assets from the supplied node.
   *
   * @param \Twig_Node $node
   *
   * @return array An array of asset formulae indexed by name
   */
  private function loadNode(\Twig_Node $node) {
    $formulae = array();
    if ($node instanceof AsseticNode) {
      $formulae[$node
        ->getAttribute('name')] = array(
        $node
          ->getAttribute('inputs'),
        $node
          ->getAttribute('filters'),
        array(
          'output' => $node
            ->getAttribute('asset')
            ->getTargetPath(),
          'name' => $node
            ->getAttribute('name'),
          'debug' => $node
            ->getAttribute('debug'),
          'combine' => $node
            ->getAttribute('combine'),
          'vars' => $node
            ->getAttribute('vars'),
        ),
      );
    }
    elseif ($node instanceof \Twig_Node_Expression_Function) {
      $name = version_compare(\Twig_Environment::VERSION, '1.2.0-DEV', '<') ? $node
        ->getNode('name')
        ->getAttribute('name') : $node
        ->getAttribute('name');
      if ($this->twig
        ->getFunction($name) instanceof AsseticFilterFunction) {
        $arguments = array();
        foreach ($node
          ->getNode('arguments') as $argument) {
          $arguments[] = eval('return ' . $this->twig
            ->compile($argument) . ';');
        }
        $invoker = $this->twig
          ->getExtension('assetic')
          ->getFilterInvoker($name);
        $inputs = isset($arguments[0]) ? (array) $arguments[0] : array();
        $filters = $invoker
          ->getFilters();
        $options = array_replace($invoker
          ->getOptions(), isset($arguments[1]) ? $arguments[1] : array());
        if (!isset($options['name'])) {
          $options['name'] = $invoker
            ->getFactory()
            ->generateAssetName($inputs, $filters, $options);
        }
        $formulae[$options['name']] = array(
          $inputs,
          $filters,
          $options,
        );
      }
    }
    foreach ($node as $child) {
      if ($child instanceof \Twig_Node) {
        $formulae += $this
          ->loadNode($child);
      }
    }
    return $formulae;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
TwigFormulaLoader::$twig private property
TwigFormulaLoader::load public function Loads formulae from a resource. Overrides FormulaLoaderInterface::load
TwigFormulaLoader::loadNode private function Loads assets from the supplied node.
TwigFormulaLoader::__construct public function