Ejemplo n.º 1
0
 public function filterLoad(AssetInterface $asset)
 {
     $lc = new \scssc();
     if ($this->compass) {
         new \scss_compass($lc);
     }
     if ($dir = $asset->getSourceDirectory()) {
         $lc->addImportPath($dir);
     }
     foreach ($this->importPaths as $path) {
         $lc->addImportPath($path);
     }
     $asset->setContent($lc->compile($asset->getContent()));
 }
 public function filterLoad(AssetInterface $asset)
 {
     $root = $asset->getSourceRoot();
     $path = $asset->getSourcePath();
     $lc = new \scssc();
     if ($this->compass) {
         new \scss_compass($lc);
     }
     if ($root && $path) {
         $lc->addImportPath(dirname($root . '/' . $path));
     }
     foreach ($this->importPaths as $path) {
         $lc->addImportPath($path);
     }
     $asset->setContent($lc->compile($asset->getContent()));
 }
Ejemplo n.º 3
0
 public function filterLoad(AssetInterface $asset)
 {
     $sc = new \scssc();
     if ($this->compass) {
         new \scss_compass($sc);
     }
     if ($dir = $asset->getSourceDirectory()) {
         $sc->addImportPath($dir);
     }
     foreach ($this->importPaths as $path) {
         $sc->addImportPath($path);
     }
     foreach ($this->customFunctions as $name => $callable) {
         $sc->registerFunction($name, $callable);
     }
     $asset->setContent($sc->compile($asset->getContent()));
 }
Ejemplo n.º 4
0
 public function getChildren(AssetFactory $factory, $content, $loadPath = null)
 {
     $sc = new \scssc();
     $sc->addImportPath($loadPath);
     foreach ($this->importPaths as $path) {
         $sc->addImportPath($path);
     }
     $children = array();
     foreach (CssUtils::extractImports($content) as $match) {
         $file = $sc->findImport($match);
         if ($file) {
             $children[] = $child = $factory->createAsset($file, array(), array('root' => $loadPath));
             $child->load();
             $children = array_merge($children, $this->getChildren($factory, $child->getContent(), $loadPath));
         }
     }
     return $children;
 }
Ejemplo n.º 5
0
 /**
  * Runs `scssc` against any files that match the configured extension.
  *
  * @param string $filename The name of the input file.
  * @param string $input The content of the file.
  * @throws Exception
  * @return string
  */
 public function input($filename, $input)
 {
     if (substr($filename, strlen($this->_settings['ext']) * -1) !== $this->_settings['ext']) {
         return $input;
     }
     App::import('Vendor', 'scssc', array('file' => $this->_settings['path']));
     if (!class_exists('scssc')) {
         throw new Exception(sprintf('Cannot not load filter class "%s".', 'scssc'));
     }
     $sc = new scssc();
     $sc->addImportPath(dirname($filename));
     return $sc->compile($input);
 }
Ejemplo n.º 6
0
 public function compile()
 {
     // go on even if user "stops" the script by closing the browser, closing the terminal etc.
     ignore_user_abort(true);
     // set script running time to unlimited
     set_time_limit(0);
     $root_dir = $this->root_dir;
     $scss_compiler = new scssc();
     $scss_compiler->setNumberPrecision(10);
     $scss_compiler->stripComments = $this->strip_comments;
     $scss_compiler->addImportPath(function ($path) use($root_dir) {
         $path = $root_dir . $path . '.scss';
         $path_parts = pathinfo($path);
         $underscore_file = $path_parts['dirname'] . '/_' . $path_parts['basename'];
         if (file_exists($underscore_file)) {
             $path = $underscore_file;
         }
         if (!file_exists($path)) {
             return null;
         }
         return $path;
     });
     // set the path to your to-be-imported mixins. please note: custom paths are coming up on future releases!
     //$scss_compiler->setImportPaths($scss_folder);
     // set css formatting (normal, nested or minimized), @see http://leafo.net/scssphp/docs/#output_formatting
     $scss_compiler->setFormatter($this->formatter);
     // get .scss's content, put it into $string_sass
     $string_sass = '';
     if (is_array($this->scss_file)) {
         foreach ($this->scss_file as $scss_file) {
             $string_sass .= file_get_contents($scss_file);
         }
     } else {
         $string_sass = file_get_contents($this->scss_file);
     }
     // try/catch block to prevent script stopping when scss compiler throws an error
     try {
         // compile this SASS code to CSS
         $string_css = $scss_compiler->compile($string_sass) . "\n";
         // $string_css = csscrush_string($string_css, $options = array('minify' => true));
         // write CSS into file with the same filename, but .css extension
         file_put_contents($this->css_file, $string_css);
     } catch (Exception $e) {
         // here we could put the exception message, but who cares ...
         echo $e->getMessage();
         exit;
     }
 }
Ejemplo n.º 7
0
 /**
  * Compiles raw SCSS into CSS for a particular menu location.
  *
  * @since 1.3
  * @return mixed
  * @param array $settings
  * @param string $location
  */
 public function generate_css_for_location($location, $theme, $menu_id)
 {
     $scssc = new scssc();
     $scssc->setFormatter('scss_formatter');
     $import_paths = apply_filters('megamenu_scss_import_paths', array(trailingslashit(get_stylesheet_directory()) . trailingslashit("megamenu"), trailingslashit(get_stylesheet_directory()), trailingslashit(get_template_directory()) . trailingslashit("megamenu"), trailingslashit(get_template_directory()), trailingslashit(WP_PLUGIN_DIR)));
     foreach ($import_paths as $path) {
         $scssc->addImportPath($path);
     }
     try {
         return $scssc->compile($this->get_complete_scss_for_location($location, $theme, $menu_id));
     } catch (Exception $e) {
         $message = __("Warning: CSS compilation failed. Please check your changes or revert the theme.", "megamenu");
         return new WP_Error('scss_compile_fail', $message . "<br /><br />" . $e->getMessage());
     }
 }
Ejemplo n.º 8
0
    $CSS = $root . '/assets/css/default.css';
    $CSSKirbyPath = 'assets/css/default.css';
}
// Get file modification times. Used for checking if update is required and as version number for caching.
$SCSSFileTime = filemtime($SCSS);
$CSSFileTime = filemtime($CSS);
// Update CSS when needed.
if (!file_exists($CSS) or $SCSSFileTime > $CSSFileTime) {
    // Activate library.
    require_once $root . '/site/plugins/scssphp/scss.inc.php';
    $parser = new scssc();
    // Setting compression provided by library.
    $parser->setFormatter('scss_formatter_compressed');
    // Setting relative @import paths.
    $importPath = $root . '/assets/scss';
    $parser->addImportPath($importPath);
    // Place SCSS file in buffer.
    $buffer = file_get_contents($SCSS);
    // Compile content in buffer.
    $buffer = $parser->compile($buffer);
    // Minify the CSS even further.
    require_once $root . '/site/plugins/scssphp/minify.php';
    $buffer = minifyCSS($buffer);
    // Update CSS file.
    file_put_contents($CSS, $buffer);
}
?>
<link rel="stylesheet" property="stylesheet" href="<?php 
echo url($CSSKirbyPath);
?>
?version=<?php 
 protected static function compileCSS($sourceFileWithPath, $cssFileWithPath, $sourceFileType, $vars)
 {
     global $REX;
     if (!file_exists($sourceFileWithPath)) {
         return;
     }
     // get content of source file
     $sourceFileContent = file_get_contents($sourceFileWithPath);
     // strip comments out
     $sourceFileContent = self::stripCSSComments($sourceFileContent);
     // get file path
     $path = pathinfo($sourceFileWithPath);
     // compile source file to css
     try {
         if ($sourceFileType == 'scss') {
             // EP for scss string compilation
             $compiledCSS = rex_register_extension_point('SEO42_COMPILE_SCSS', $sourceFileContent, array('vars' => $vars));
             if ($sourceFileContent == $compiledCSS) {
                 // include compiler
                 if (!class_exists('scssc')) {
                     require_once $REX['INCLUDE_PATH'] . '/addons/seo42/classes/scssphp/scss.inc.php';
                 }
                 $formatter = new scss_formatter();
                 $formatter->indentChar = "\t";
                 $formatter->close = "}" . PHP_EOL;
                 $formatter->assignSeparator = ": ";
                 $scss = new scssc();
                 $scss->addImportPath($path['dirname']);
                 $scss->setFormatter($formatter);
                 $compiledCSS = $scss->compile($sourceFileContent);
             }
         } else {
             // EP for less string compilation
             $compiledCSS = rex_register_extension_point('SEO42_COMPILE_LESS', $sourceFileContent, array('vars' => $vars, 'path' => $path['dirname']));
             if ($sourceFileContent == $compiledCSS) {
                 // include compiler
                 if (!class_exists('Less_Parser')) {
                     require_once $REX['INCLUDE_PATH'] . '/addons/seo42/classes/lessphp/Less.php';
                 }
                 $parser = new Less_Parser(array());
                 $parser->SetImportDirs(array(realpath($path['dirname']) => ''));
                 $parser->parse($sourceFileContent);
                 $parser->ModifyVars($vars);
                 $compiledCSS = $parser->getCss();
             }
         }
     } catch (Exception $e) {
         echo '" />';
         // close tag as we are probably in an open link tag in head section of website
         echo '<p style="margin: 5px;"><code>';
         echo '<strong>' . strtoupper($sourceFileType) . ' Compile Error:</strong><br/>';
         echo $e->getMessage();
         echo '</code></p>';
         exit;
     }
     // write css
     $fileHandle = fopen($cssFileWithPath, 'w');
     fwrite($fileHandle, $compiledCSS);
     fclose($fileHandle);
 }
Ejemplo n.º 10
0
 public function compile_stack($post_id, $css_format)
 {
     // create return value
     $css = '';
     // reset fontstack array
     $this->fontstack = array();
     // setup sass compiler
     if (!class_exists('scssc')) {
         require OXY_THEME_DIR . 'vendor/leafo/scssphp/scss.inc.php';
     }
     $scss = new scssc();
     $scss->addImportPath(OXY_THEME_DIR . 'assets/scss');
     $scss->setNumberPrecision(8);
     $scss->setFormatter($css_format);
     // create sass code
     $scss_code = $this->variables($post_id);
     $scss_code .= apply_filters('oxy_stack_scss', '');
     // compile sass and store in metadata
     try {
         $css = $scss->compile($scss_code);
     } catch (Exception $e) {
         print_r($e);
     }
     // create extra font js / links
     $this->build_before_css_code($post_id);
     return $css;
 }