class StylusFilter

Loads STYL files.

@link http://learnboost.github.com/stylus/ @author Konstantin Kudryashov <ever.zet@gmail.com>

Hierarchy

Expanded class hierarchy of StylusFilter

File

drupal/core/vendor/kriswallsmith/assetic/src/Assetic/Filter/StylusFilter.php, line 24

Namespace

Assetic\Filter
View source
class StylusFilter extends BaseNodeFilter implements DependencyExtractorInterface {
  private $nodeBin;
  private $compress;

  /**
   * Constructs filter.
   *
   * @param string $nodeBin   The path to the node binary
   * @param array  $nodePaths An array of node paths
   */
  public function __construct($nodeBin = '/usr/bin/node', array $nodePaths = array()) {
    $this->nodeBin = $nodeBin;
    $this
      ->setNodePaths($nodePaths);
  }

  /**
   * Enable output compression.
   *
   * @param boolean $compress
   */
  public function setCompress($compress) {
    $this->compress = $compress;
  }

  /**
   * {@inheritdoc}
   */
  public function filterLoad(AssetInterface $asset) {
    static $format = <<<'EOF'
var stylus = require('stylus');
var sys    = require(process.binding('natives').util ? 'util' : 'sys');

stylus(%s, %s).render(function(e, css){
    if (e) {
        throw e;
    }

    sys.print(css);
    process.exit(0);
});

EOF;
    $root = $asset
      ->getSourceRoot();
    $path = $asset
      ->getSourcePath();

    // parser options
    $parserOptions = array();
    if ($root && $path) {
      $parserOptions['paths'] = array(
        dirname($root . '/' . $path),
      );
      $parserOptions['filename'] = basename($path);
    }
    if (null !== $this->compress) {
      $parserOptions['compress'] = $this->compress;
    }
    $pb = $this
      ->createProcessBuilder();
    $pb
      ->add($this->nodeBin)
      ->add($input = tempnam(sys_get_temp_dir(), 'assetic_stylus'));
    file_put_contents($input, sprintf($format, json_encode($asset
      ->getContent()), json_encode($parserOptions)));
    $proc = $pb
      ->getProcess();
    $code = $proc
      ->run();
    unlink($input);
    if (0 !== $code) {
      throw FilterException::fromProcess($proc)
        ->setInput($asset
        ->getContent());
    }
    $asset
      ->setContent($proc
      ->getOutput());
  }

  /**
   * {@inheritdoc}
   */
  public function filterDump(AssetInterface $asset) {
  }
  public function getChildren(AssetFactory $factory, $content, $loadPath = null) {

    // todo
    return array();
  }

}

Members

Namesort descending Modifiers Type Description Overrides
BaseNodeFilter::$nodePaths private property
BaseNodeFilter::addNodePath public function
BaseNodeFilter::createProcessBuilder protected function Creates a new process builder. Overrides BaseProcessFilter::createProcessBuilder
BaseNodeFilter::getNodePaths public function
BaseNodeFilter::setNodePaths public function
BaseProcessFilter::$timeout private property
BaseProcessFilter::mergeEnv protected function
BaseProcessFilter::setTimeout public function Set the process timeout.
StylusFilter::$compress private property
StylusFilter::$nodeBin private property
StylusFilter::filterDump public function Filters an asset just before it's dumped. Overrides FilterInterface::filterDump
StylusFilter::filterLoad public function Filters an asset after it has been loaded. Overrides FilterInterface::filterLoad
StylusFilter::getChildren public function Returns child assets. Overrides DependencyExtractorInterface::getChildren
StylusFilter::setCompress public function Enable output compression.
StylusFilter::__construct public function Constructs filter.