/** * @see sfTask */ protected function execute($arguments = array(), $options = array()) { // Inits sfLESS instance for compilation help $less = new sfLESS(new sfLESSConfig(false, isset($options['compress']) && $options['compress'])); // Remove old CSS files if --clean option specified if (isset($options['clean']) && $options['clean']) { foreach ($less->findCssFiles() as $cssFile) { if (!isset($arguments['file']) || false !== strpos($cssFile, $arguments['file'] . '.css')) { unlink($cssFile); $this->logSection('removed', str_replace(sfLESS::getConfig()->getCssPaths(), '', $cssFile)); } } } // Outputs debug info if (isset($options['debug']) && $options['debug']) { foreach (sfLESS::getConfig()->getDebugInfo() as $key => $value) { $this->logSection('debug', sprintf("%s:\t%s", $key, $value), null, 'INFO'); } } // Compiles LESS files foreach ($less->findLessFiles() as $lessFile) { if (!isset($arguments['file']) || false !== strpos($lessFile, $arguments['file'] . '.less')) { if ($less->compile($lessFile)) { if (isset($options['debug']) && $options['debug']) { $this->logSection('compiled', sprintf("%s => %s", sfLESSUtils::getProjectRelativePath($lessFile), sfLESSUtils::getProjectRelativePath($less->getCssPathOfLess($lessFile))), null, 'COMMAND'); } else { $this->logSection('compiled', str_replace(sfLESS::getConfig()->getLessPaths(), '', $lessFile), null, 'COMMAND'); } } } } }
/** * Returns configuration information for LESS compiler * * @return string */ protected function getConfigurationContent() { $debugInfo = '<dl id="less_debug" style="display: none;">'; $this->config = sfLESS::getConfig(); foreach ($this->config->getDebugInfo() as $name => $value) { $debugInfo .= sprintf('<dt style="float:left; width: 100px"><strong>%s:</strong></dt> <dd>%s</dd>', $name, $value); } $debugInfo .= '</dl>'; return sprintf(<<<EOF <h2>configuration %s</h2> %s<br/> EOF , $this->getToggler('less_debug', 'Toggle debug info'), $debugInfo); }
/** * Listens to the less_js.compile event. * Update the response by fixing less stylesheet path and adding the less js engine when required * * @param sfEvent $event An sfEvent instance */ public static function findAndFixContentLinks(sfEvent $event) { $response = $event->getSubject(); $hasLess = false; foreach ($response->getStylesheets() as $file => $options) { if ('.less' === substr($file, -5) && (!isset($options['type']) || 'text/less' !== $options['type'])) { $response->removeStylesheet($file); if (sfLESS::getConfig()->isClientSideCompilation()) { $response->addStylesheet('/less/' . $file, '', array_merge($options, array('type' => 'text/less'))); $hasLess = true; } else { $response->addStylesheet('/css/' . substr($file, 0, -5) . '.css', '', $options); } } } if ($hasLess) { if (sfConfig::get('symfony.asset.javascripts_included', false)) { throw new LogicException("The stylesheets must be included before the javascript in your layout"); } else { $response->addJavascript(sfLESS::getConfig()->getLessJsPath()); } } }