public function CssImportFilter::filterLoad

Filters an asset after it has been loaded.

Parameters

AssetInterface $asset An asset:

Overrides FilterInterface::filterLoad

File

drupal/core/vendor/kriswallsmith/assetic/src/Assetic/Filter/CssImportFilter.php, line 38

Class

CssImportFilter
Inlines imported stylesheets.

Namespace

Assetic\Filter

Code

public function filterLoad(AssetInterface $asset) {
  $importFilter = $this->importFilter;
  $sourceRoot = $asset
    ->getSourceRoot();
  $sourcePath = $asset
    ->getSourcePath();
  $callback = function ($matches) use ($importFilter, $sourceRoot, $sourcePath) {
    if (!$matches['url'] || null === $sourceRoot) {
      return $matches[0];
    }
    $importRoot = $sourceRoot;
    if (false !== strpos($matches['url'], '://')) {

      // absolute
      list($importScheme, $tmp) = explode('://', $matches['url'], 2);
      list($importHost, $importPath) = explode('/', $tmp, 2);
      $importRoot = $importScheme . '://' . $importHost;
    }
    elseif (0 === strpos($matches['url'], '//')) {

      // protocol-relative
      list($importHost, $importPath) = explode('/', substr($matches['url'], 2), 2);
      $importHost = '//' . $importHost;
    }
    elseif ('/' == $matches['url'][0]) {

      // root-relative
      $importPath = substr($matches['url'], 1);
    }
    elseif (null !== $sourcePath) {

      // document-relative
      $importPath = $matches['url'];
      if ('.' != ($sourceDir = dirname($sourcePath))) {
        $importPath = $sourceDir . '/' . $importPath;
      }
    }
    else {
      return $matches[0];
    }

    // ignore other imports
    if ('css' != pathinfo($importPath, PATHINFO_EXTENSION)) {
      return $matches[0];
    }
    $importSource = $importRoot . '/' . $importPath;
    if (false !== strpos($importSource, '://') || 0 === strpos($importSource, '//')) {
      $import = new HttpAsset($importSource, array(
        $importFilter,
      ), true);
    }
    elseif (!file_exists($importSource)) {

      // ignore not found imports
      return $matches[0];
    }
    else {
      $import = new FileAsset($importSource, array(
        $importFilter,
      ), $importRoot, $importPath);
    }
    $import
      ->setTargetPath($sourcePath);
    return $import
      ->dump();
  };
  $content = $asset
    ->getContent();
  $lastHash = md5($content);
  do {
    $content = $this
      ->filterImports($content, $callback);
    $hash = md5($content);
  } while ($lastHash != $hash && ($lastHash = $hash));
  $asset
    ->setContent($content);
}