function auto_less_compile($inputFile, $outputFile) { // load the cache $cacheFile = $inputFile . ".cache"; if (file_exists($cacheFile)) { $cache = unserialize(file_get_contents($cacheFile)); } else { $cache = $inputFile; } // custom formatter $formatter = new lessc_formatter_classic(); $formatter->indentChar = "\t"; $less = new lessc(); $less->setFormatter($formatter); try { // create a new cache object, and compile $newCache = $less->cachedCompile($cache); // the next time we run, write only if it has updated if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) { file_put_contents($cacheFile, serialize($newCache)); file_put_contents($outputFile, $newCache['compiled']); } } catch (Exception $ex) { echo "lessphp fatal error: " . $ex->getMessage(); } }
/** * Parse a Less file to CSS */ public function parse($src, $dst, $options) { $this->auto = isset($options['auto']) ? $options['auto'] : $this->auto; try { if ($this->auto) { /* @var FileCache $cacheMgr */ $cacheMgr = Yii::createObject('yii\\caching\\FileCache'); $cacheMgr->init(); $cacheId = 'less#' . $dst; $cache = $cacheMgr->get($cacheId); if ($cache === false || @filemtime($dst) < @filemtime($src)) { $cache = $src; } $less = new \lessc(); $newCache = $less->cachedCompile($cache); if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) { $cacheMgr->set($cacheId, $newCache); file_put_contents($dst, $newCache['compiled']); } } else { $less = new \lessc(); $less->compileFile($src, $dst); } } catch (Exception $e) { throw new Exception(__CLASS__ . ': Failed to compile less file : ' . $e->getMessage() . '.'); } }
/** * @param string $src * @return string */ public function lessCompile($src) { $path = $this->lessCompiledPath . DIRECTORY_SEPARATOR . basename($src, '.less') . '.css'; $lessCompile = false; if (!$this->lessForceCompile && $this->lessCompile) { $lessFiles = $this->_cacheGet('EAssetManager-less-updated-' . $src); if ($lessFiles && is_array($lessFiles)) { foreach ($lessFiles as $_file => $_time) { if (filemtime($_file) != $_time) { $lessCompile = true; break; } } } else { $lessCompile = true; } unset($lessFiles); } if (!file_exists($path) || $lessCompile || $this->lessForceCompile) { if (!$this->_lessc) { $this->_lessc = new lessc(); } $this->_lessc->setFormatter($this->lessFormatter); $lessCache = $this->_lessc->cachedCompile($src); file_put_contents($path, $lessCache['compiled'], LOCK_EX); $this->_cacheSet('EAssetManager-less-updated-' . $src, $lessCache['files']); } return $path; }
protected function doProcess($inputPath, $outputPath) { $this->ensureInitialized(); if ($this->jsToolOptions === false) { $less = new \lessc(); if ($this->pieCrust->isCachingEnabled()) { $cacheUri = 'less/' . sha1($inputPath); $cacheData = $this->readCacheData($cacheUri); if ($cacheData) { $lastUpdated = $cacheData['updated']; } else { $lastUpdated = false; $cacheData = $inputPath; } $cacheData = $less->cachedCompile($cacheData); $this->writeCacheData($cacheUri, $cacheData); if (!$lastUpdated || $cacheData['updated'] > $lastUpdated) { file_put_contents($outputPath, $cacheData['compiled']); } } else { $less->compileFile($inputPath, $outputPath); } } else { $exe = $this->jsToolOptions['bin']; $options = $this->jsToolOptions['options']; $cmd = "{$exe} {$options} \"{$inputPath}\" \"{$outputPath}\""; $this->logger->debug('$> ' . $cmd); shell_exec($cmd); } }
public function compileLess($inputFile, $outputFile) { if (!class_exists('lessc')) { require_once KPATH_FRAMEWORK . '/external/lessc/lessc.php'; } // Load the cache. $cacheDir = JPATH_CACHE . '/kunena'; if (!is_dir($cacheDir)) { KunenaFolder::create($cacheDir); } $cacheFile = "{$cacheDir}/kunena.bootstrap.{$inputFile}.cache"; if (is_file($cacheFile)) { $cache = unserialize(file_get_contents($cacheFile)); } else { $cache = KPATH_MEDIA . '/less/bootstrap/' . $inputFile; } $outputFile = KPATH_MEDIA . '/css/joomla25/' . $outputFile; $less = new lessc(); //$less->setVariables($this->style_variables); $newCache = $less->cachedCompile($cache); if (!is_array($cache) || $newCache['updated'] > $cache['updated'] || !is_file($outputFile)) { $cache = serialize($newCache); KunenaFile::write($cacheFile, $cache); KunenaFile::write($outputFile, $newCache['compiled']); } }
function autoCompilerLess($params) { global $modx; $inputFile = MODX_BASE_PATH . $params["input_less"]; $outputFile = MODX_BASE_PATH . $params["output_css"]; define("PHPLESS_CSS_PATH", dirname($outputFile) . "/"); define("PHPLESS_IMAGESIZE", 32); if (!is_file(MODX_BASE_PATH . $params["input_less"])) { return; } if (!class_exists('lessc')) { include $params['less_path'] . 'lessc.inc.php'; } if (!class_exists('DataUriLess')) { include $params['less_path'] . 'class.datauriless.php'; } $cacheFile = $inputFile . ".cache"; if (is_file($cacheFile)) { $cache = unserialize(file_get_contents($cacheFile)); } else { $cache = $inputFile; } switch ($params['output_formating']) { case 'lessjs': case 'compressed': $formatter = 'lessjs'; break; case 'classic': $formatter = $params['output_formating']; break; case 'tabing': $formatter = new lessc_formatter_classic(); $formatter->indentChar = "\t"; break; default: $formatter = 'lessjs'; break; } $less = new lessc(); $less->setFormatter($formatter); try { $newCache = $less->cachedCompile($cache); } catch (Exception $ex) { $modx->logEvent(0, 3, $ex->getMessage(), $e->activePlugin); } if (!is_array($cache) || $newCache["updated"] > $cache["updated"] || !is_file($outputFile)) { file_put_contents($cacheFile, serialize($newCache)); $datauri = new DataUriLess($newCache['compiled']); $output_compile = $datauri->run(); if (@file_put_contents($outputFile, $output_compile)) { //if($params["compiler_log"]==="true"){ $e =& $modx->Event; $modx->logEvent($modx->toDateFormat(time() + $modx->config['server_offset_time']), 1, "less файл скомпилирован " . $modx->nicesize(filesize($outputFile)), $e->activePlugin); //} } else { $modx->logEvent(0, 3, "Невозможно сохранить CSS файл", $e->activePlugin); } } }
/** * Compiles a less css file. The the compiler will create a css file output. * * @param array $config Array of less compile configuration */ public function compile($config = array()) { $config = new KConfig($config); $config->append(array('parse_urls' => true, 'compress' => true, 'import' => array(), 'force' => false, 'output' => null, 'input' => null)); $less = new lessc(); $less->setPreserveComments(!$config->compress); if ($config->compress) { $less->setFormatter('compressed'); } $config['import'] = $config['import']; $less->setImportDir($config['import']); $cache_file = JPATH_CACHE . '/less-' . md5($config->input); if (file_exists($cache_file)) { $cache = unserialize(file_get_contents($cache_file)); } else { $cache = $config->input; } $force = $config->force; //if output doesn't exsit then force compile if (!is_readable($config->output)) { $force = true; } //check if any of the import folder have changed or //if yes then re-compile if (is_array($cache)) { foreach ($config['import'] as $path) { if (is_readable($path) && filemtime($path) > $cache['updated']) { $force = true; break; } } } try { $new_cache = $less->cachedCompile($cache, $force); } catch (Exception $e) { print $e->getMessage(); return; } if (!is_array($cache) || $new_cache['updated'] > $cache['updated']) { if ($config->parse_urls) { $new_cache['compiled'] = $this->_parseUrls($new_cache['compiled'], $config->import); } //store the cache file_put_contents($cache_file, serialize($new_cache)); //store the compiled file //create a directory if if (!file_exists(dirname($config->output))) { mkdir(dirname($config->output), 0755); } file_put_contents($config->output, $new_cache['compiled']); } }
/** * Parse a Less file to CSS */ public function parse($src, $dst, $options) { $this->auto = isset($options['auto']) ? $options['auto'] : $this->auto; $variables = $this->variables; $assetManager = Yii::$app->assetManager; // Final url of the file being compiled $assetUrl = substr($dst, strpos($assetManager->basePath, $assetManager->baseUrl)); $variables['published-url'] = '"' . $assetUrl . '"'; // Root for the published folder $variables['published-base-url'] = '"/' . implode('/', array_slice(explode('/', ltrim($assetUrl, '/')), 0, 2)) . '"'; $less = new \lessc(); $less->setVariables($variables); // Compressed setting if ($this->compressed) { $less->setFormatter('compressed'); } \Less_Parser::$default_options['compress'] = $this->compressed; \Less_Parser::$default_options['relativeUrls'] = $this->relativeUrls; // Send out pre-compile event $event = new \yii\base\Event(); $this->runtime = ['sourceFile' => $src, 'destinationFile' => $dst, 'compiler' => $less]; $event->sender = $this; Event::trigger($this, self::EVENT_BEFORE_COMPILE, $event); try { if ($this->auto) { /* @var FileCache $cacheMgr */ $cacheMgr = Yii::createObject('yii\\caching\\FileCache'); $cacheMgr->init(); $cacheId = 'less#' . $dst; $cache = $cacheMgr->get($cacheId); if ($cache === false || @filemtime($dst) < @filemtime($src)) { $cache = $src; } $newCache = $less->cachedCompile($cache); if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) { $cacheMgr->set($cacheId, $newCache); file_put_contents($dst, $newCache['compiled']); } } else { $less->compileFile($src, $dst); } // If needed, respect the users configuration if ($assetManager->fileMode !== null) { @chmod($dst, $assetManager->fileMode); } unset($this->less); } catch (\Exception $e) { throw new \Exception(__CLASS__ . ': Failed to compile less file : ' . $e->getMessage() . '.'); } }
function less_css($handle) { include DUDE_THEME_DIR . "/less/variables.php"; // output css file name $css_path = DUDE_THEME_DIR . '/css/' . "{$handle}.css"; // automatically regenerate files if source's modified time has changed or vars have changed try { // initialise the parser $less = new lessc(); // load the cache $cache_path = DUDE_THEME_DIR . "/cache/{$handle}.css.cache"; if (file_exists($cache_path)) { $cache = unserialize(file_get_contents($cache_path)); } // If the cache or root path in it are invalid then regenerate if (empty($cache) || empty($cache['less']['root']) || !file_exists($cache['less']['root'])) { $cache = array('vars' => $vars, 'less' => DUDE_THEME_DIR . "/less/{$handle}.less"); } // less config $less->setFormatter("compressed"); $less->setVariables($vars); $less_cache = $less->cachedCompile($cache['less'], false); if (!file_exists($css_path) || empty($cache) || empty($cache['less']['updated']) || $less_cache['updated'] > $cache['less']['updated']) { file_put_contents($cache_path, serialize(array('vars' => $vars, 'less' => $less_cache))); file_put_contents($css_path, $less_cache['compiled']); } elseif ($vars !== $cache['vars']) { $less_cache = $less->cachedCompile($cache['less'], true); file_put_contents($cache_path, serialize(array('vars' => $vars, 'less' => $less_cache))); file_put_contents($css_path, $less_cache['compiled']); } } catch (exception $ex) { qa_fatal_error($ex->getMessage()); } // return the compiled stylesheet with the query string it had if any $url = DUDE_THEME_URL . "/css/{$handle}.css"; echo '<link href="' . $url . '" type="text/css" rel="stylesheet">'; }
function autoCompileLess($inputFile, $outputFile) { // load the cache $cacheFile = $inputFile . ".cache"; if (file_exists($cacheFile)) { $cache = unserialize(file_get_contents($cacheFile)); } else { $cache = $inputFile; } $less = new lessc(); $newCache = $less->cachedCompile($cache); if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) { file_put_contents($cacheFile, serialize($newCache)); file_put_contents($outputFile, $newCache['compiled']); } }
function sh_theme_color_scheme($color = '') { $dir = SH_TH_ROOT; include_once $dir . '/includes/thirdparty/lessc.inc.php'; if (!$color) { $color = _WSH()->option('custom_color_scheme'); } if (!$color) { return; } $less = new lessc(); $less->setVariables(array("color" => $color)); // create a new cache object, and compile $cache = $less->cachedCompile(_WSH()->includes("/css/color.less")); return $cache['compiled']; file_put_contents(_WSH()->includes('/css/colors.css'), $cache["compiled"]); }
function loadcssfile($file, $cacheFile) { // load the cache if (file_exists($cacheFile)) { $cache = unserialize(file_get_contents($cacheFile)); } else { $cache = $file; } $less = new lessc(); $less->setFormatter("compressed"); $less->setImportDir(array(__ROOT__ . DS . ".." . DS . "style" . DS . "less")); $newCache = $less->cachedCompile($cache); if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) { @file_put_contents($cacheFile, serialize($newCache)); } return $newCache['compiled']; }
function autoCompileLess($inputFile, $outputFile) { // load the cache if ($_SERVER['PHP_SELF'] != "sobic" && $_SERVER['PHP_SELF'] != "./sobic") { $cacheFile = $inputFile . ".cache"; if (file_exists($cacheFile)) { $cache = unserialize(file_get_contents($cacheFile)); } else { $cache = $inputFile; } $less = new lessc(); $less->setFormatter("compressed"); $newCache = $less->cachedCompile($cache); if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) { file_put_contents($cacheFile, serialize($newCache)); file_put_contents($outputFile, $newCache['compiled']); } } }
public function boot(Application $app) { // Validate this params. $this->validate($app); // Define default formatter if not already set. $formatter = isset($app['less.formatter']) ? $app['less.formatter'] : self::FORMATTER_CLASSIC; $sourcesDir = $app['less.source_dir']; $cacheDir = $app['less.cache_dir']; $targetDir = $app['less.target_dir']; $cacheContents = array(); foreach ($sourcesDir as $sourceDir) { $files = scandir($sourceDir); foreach ($files as $file) { // if less file if (substr($file, -5) === '.less') { $cache = $cacheDir . $this->before('.less', $file) . '.css.cache'; // if file cached if (file_exists($cache)) { array_push($cacheContents, ['dir' => $sourceDir, 'name' => $file, 'file' => unserialize(file_get_contents($cache))]); } else { array_push($cacheContents, ['dir' => $sourceDir, 'name' => $file, 'file' => $sourceDir . $file]); } } } } $handle = new \lessc(); $handle->setFormatter($formatter); foreach ($cacheContents as $cacheContent) { $newCache = $handle->cachedCompile($cacheContent['file']); if (!is_array($cacheContent['file']) || $newCache["updated"] > $cacheContent['file']["updated"]) { $target = $targetDir . $this->before('.less', $cacheContent['name']) . '.css'; $cache = $cacheDir . $this->before('.less', $cacheContent['name']) . '.css.cache'; // Write cache file file_put_contents($cache, serialize($newCache)); // Write CSS file file_put_contents($target, $newCache['compiled']); // Change CSS permisions if (isset($app['less.target_mode'])) { chmod($target, $app['less.target_mode']); } } } }
function autoCompileLess() { // include lessc.inc require_once get_template_directory() . '/style/less/lessc.inc.php'; // input and output location $inputFile = get_template_directory() . '/style/less/style.less'; $outputFile = get_template_directory() . '/style/css/style.css'; // load the cache $cacheFile = $inputFile . ".cache"; if (file_exists($cacheFile)) { $cache = unserialize(file_get_contents($cacheFile)); } else { $cache = $inputFile; } $less = new lessc(); // create a new cache object, and compile $newCache = $less->cachedCompile($cache); // output a LESS file, and cache file only if it has been modified since last compile if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) { file_put_contents($cacheFile, serialize($newCache)); file_put_contents($outputFile, $newCache['compiled']); } //Second iteration for home theme. // input and output location $inputFile = get_template_directory() . '/style/less/templates/page-home.less'; $outputFile = get_template_directory() . '/style/css/templates/page-home.css'; // load the cache $cacheFile = $inputFile . ".cache"; if (file_exists($cacheFile)) { $cache = unserialize(file_get_contents($cacheFile)); } else { $cache = $inputFile; } $less = new lessc(); // create a new cache object, and compile $newCache = $less->cachedCompile($cache); // output a LESS file, and cache file only if it has been modified since last compile if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) { file_put_contents($cacheFile, serialize($newCache)); file_put_contents($outputFile, $newCache['compiled']); } }
/** * Build the Less file * * @param string $dest The destination CSS file * @param bool $force If set to true, will build whereas the cache status * @param array $variables Less variables to set before compiling the Less file */ public function build($dest, $force = false, $variables = array()) { if (!is_dir(dirname($dest))) { mkdir(dirname($dest), 0755, true); } $compiler = new \lessc(); $lastCompilationFile = App::cache()->getCacheFilePath($this->getLastCompilationInfoFilename()); if (!$force && is_file($lastCompilationFile)) { $cache = (include $lastCompilationFile); } else { $cache = $this->source; } $compiler->setFormatter('compressed'); $compiler->setPreserveComments(false); $compilation = $compiler->cachedCompile($cache, $force); if (!is_array($cache) || $compilation['updated'] > $cache['updated']) { file_put_contents($dest, '/*** ' . date('Y-m-d H:i:s') . ' ***/' . PHP_EOL . $compilation['compiled']); $event = new Event('built-less', array('source' => $this->source, 'dest' => $dest)); $event->trigger(); // Save the compilation information unset($compilation['compiled']); $this->saveLastCompilationInfo($compilation); } }
function ro_theme_autoCompileLess($inputFile, $outputFile) { require_once ABS_PATH_FR . '/inc/lessc.inc.php'; global $tb_options; $less = new lessc(); $less->setFormatter("classic"); $less->setPreserveComments(true); /*Styling Options*/ $tb_primary_color = $tb_options['tb_primary_color']; $tb_secondary_color = $tb_options['tb_secondary_color']; $variables = array("tb_primary_color" => $tb_primary_color, "tb_secondary_color" => $tb_secondary_color); $less->setVariables($variables); $cacheFile = $inputFile . ".cache"; if (file_exists($cacheFile)) { $cache = unserialize(file_get_contents($cacheFile)); } else { $cache = $inputFile; } $newCache = $less->cachedCompile($inputFile); if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) { file_put_contents($cacheFile, serialize($newCache)); file_put_contents($outputFile, $newCache['compiled']); } }
/** * Compile less to css. Creates a cache-file of the last compiled less-file. * * This code is originally from the manual of lessphp. * * @param string $inputFile the filename of the less-file. * @param string $outputFile the filename of the css-file to be created. * @param array $config with configuration details. * * @return void */ function autoCompileLess($inputFile, $outputFile, $config) { $cacheFile = $inputFile . ".cache"; if (file_exists($cacheFile)) { $cache = unserialize(file_get_contents($cacheFile)); } else { $cache = $inputFile; } $less = new lessc(); // Add custom less functions if (isset($config['functions'])) { foreach ($config['functions'] as $key => $val) { $less->registerFunction($key, $val); } } // Add import dirs if (isset($config['imports'])) { foreach ($config['imports'] as $val) { $less->addImportDir($val); } } // Set output formatter if (isset($config['formatter'])) { $less->setFormatter($config['formatter']); } // Preserve comments if (isset($config['comments'])) { $less->setPreserveComments($config['comments']); } // Compile a new cache $newCache = $less->cachedCompile($cache); if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) { file_put_contents($cacheFile, serialize($newCache)); file_put_contents($outputFile, $newCache['compiled']); } }
/** * Lessify the stylesheet and return the href of the compiled file * * @param string $src Source URL of the file to be parsed * @param string $handle An identifier for the file used to create the file name in the cache * @return string URL of the compiled stylesheet */ public function parse_stylesheet($src, $handle) { // we only want to handle .less files if (!preg_match('/\\.less(\\.php)?$/', preg_replace('/\\?.*$/', '', $src))) { return $src; } // get file path from $src if (!strstr($src, '?')) { $src .= '?'; } // prevent non-existent index warning when using list() & explode() // Match the URL schemes between WP_CONTENT_URL and $src, // so the str_replace further down will work $src_scheme = parse_url($src, PHP_URL_SCHEME); $wp_content_url_scheme = parse_url(WP_CONTENT_URL, PHP_URL_SCHEME); if ($src_scheme != $wp_content_url_scheme) { $src = set_url_scheme($src, $wp_content_url_scheme); } list($less_path, $query_string) = explode('?', str_replace(WP_CONTENT_URL, WP_CONTENT_DIR, $src)); // output css file name $css_path = trailingslashit($this->get_cache_dir()) . "{$handle}.css"; // automatically regenerate files if source's modified time has changed or vars have changed try { // initialise the parser $less = new lessc(); // load the cache $cache_path = "{$css_path}.cache"; if (file_exists($cache_path)) { $cache = unserialize(file_get_contents($cache_path)); } // vars to pass into the compiler - default @themeurl var for image urls etc... $this->vars['themeurl'] = '~"' . get_stylesheet_directory_uri() . '"'; $this->vars['lessurl'] = '~"' . dirname($src) . '"'; $this->vars = apply_filters('less_vars', $this->vars, $handle); // If the cache or root path in it are invalid then regenerate if (empty($cache) || empty($cache['less']['root']) || !file_exists($cache['less']['root'])) { $cache = array('vars' => $this->vars, 'less' => $less_path); } // less config $less->setFormatter(apply_filters('less_compression', $this->compression)); $less->setPreserveComments(apply_filters('less_preserve_comments', $this->preserve_comments)); $less->setVariables($this->vars); // add directories to scan for imports $import_dirs = apply_filters('less_import_dirs', $this->import_dirs); if (!empty($import_dirs)) { foreach ((array) $import_dirs as $dir) { $less->addImportDir($dir); } } // register and unregister functions foreach ($this->registered_functions as $name => $callable) { $less->registerFunction($name, $callable); } foreach ($this->unregistered_functions as $name) { $less->unregisterFunction($name); } // allow devs to mess around with the less object configuration do_action_ref_array('lessc', array(&$less)); // $less->cachedCompile only checks for changed file modification times // if using the theme customiser (changed variables not files) then force a compile if ($this->vars !== $cache['vars']) { $force = true; } else { $force = false; } $less_cache = $less->cachedCompile($cache['less'], apply_filters('less_force_compile', $force)); if (empty($cache) || empty($cache['less']['updated']) || $less_cache['updated'] > $cache['less']['updated'] || $this->vars !== $cache['vars']) { file_put_contents($cache_path, serialize(array('vars' => $this->vars, 'less' => $less_cache))); file_put_contents($css_path, $less_cache['compiled']); } } catch (exception $ex) { wp_die($ex->getMessage()); } // restore query string it had if any $url = trailingslashit($this->get_cache_dir(false)) . "{$handle}.css" . (!empty($query_string) ? "?{$query_string}" : ''); // restore original url scheme $url = set_url_scheme($url, $src_scheme); return add_query_arg('ver', $less_cache['updated'], $url); }
require_once locate_template('/lib/3rdparty/lessc.inc.php'); if (class_exists('lessc') && ya_options()->getCpanelValue('developer_mode')) { define('LESS_PATH', get_template_directory() . '/assets/less'); define('CSS__PATH', get_template_directory() . '/assets/css'); $scheme = ya_options()->getCpanelValue('scheme'); $scheme_vars = get_template_directory() . '/templates/presets/default.php'; $output_cssf = CSS__PATH . '/app-default.css'; if ($scheme && file_exists(get_template_directory() . '/templates/presets/' . $scheme . '.php')) { $scheme_vars = get_template_directory() . '/templates/presets/' . $scheme . '.php'; $output_cssf = CSS__PATH . "/app-{$scheme}.css"; } if (file_exists($scheme_vars)) { include $scheme_vars; try { // less variables by theme_mod // $less_variables['sidebar-width'] = ya_options()->sidebar_collapse_width.'px'; $less = new lessc(); $less->setImportDir(array(LESS_PATH . '/app/', LESS_PATH . '/bootstrap/')); $less->setVariables($less_variables); $cache = $less->cachedCompile(LESS_PATH . '/app.less'); file_put_contents($output_cssf, $cache["compiled"]); if (ya_options()->getCpanelValue('responsive_support')) { $responsive_cache = $less->cachedCompile(LESS_PATH . '/app-responsive.less'); file_put_contents(CSS__PATH . '/app-responsive.css', $responsive_cache["compiled"]); } } catch (Exception $e) { var_dump($e); exit; } } }
/** * Lessify the stylesheet and return the href of the compiled file * * @param string $src Source URL of the file to be parsed * @param string $handle An identifier for the file used to create the file name in the cache * @return string URL of the compiled stylesheet */ public function parse_stylesheet($src, $handle) { // we only want to handle .less files if (!preg_match('/\\.less(\\.php)?$/', preg_replace('/\\?.*$/', '', $src))) { return $src; } // get file path from $src if (!strstr($src, '?')) { $src .= '?'; } // prevent non-existent index warning when using list() & explode() // Match the URL schemes between WP_CONTENT_URL and $src, // so the str_replace further down will work $src_scheme = parse_url($src, PHP_URL_SCHEME); $wp_content_url_scheme = parse_url(WP_CONTENT_URL, PHP_URL_SCHEME); if ($src_scheme != $wp_content_url_scheme) { $src = set_url_scheme($src, $wp_content_url_scheme); } list($less_path, $query_string) = explode('?', str_replace(WP_CONTENT_URL, WP_CONTENT_DIR, $src)); $cache = $this->get_cached_file_data($handle); // vars to pass into the compiler - default @themeurl var for image urls etc... $this->vars['themeurl'] = '~"' . get_stylesheet_directory_uri() . '"'; $this->vars['lessurl'] = '~"' . dirname($src) . '"'; $this->vars = apply_filters('less_vars', $this->vars, $handle); // The overall "version" of the LESS file is all it's vars, src etc. $less_version = md5(serialize(array($this->vars, $src))); /** * Give the ability to disable always compiling the LESS with lessc() * and instead just use the $vars and $version of the LESS file to * dictate whether the LESS should be (re)generated. * * This means we don't need to run everything through the lessc() compiler * on every page load. The tradeoff is making a change in a LESS file will not * necessarily cause a (re)generation, one would need to bump the $ver param * on wp_enqueue_script() to cause that. */ if (!get_option('wp_less_always_compile_less', true)) { if (!empty($cache['version']) && $cache['version'] === $less_version) { // restore query string it had if any $url = $cache['url'] . (!empty($query_string) ? "?{$query_string}" : ''); $url = set_url_scheme($url, $src_scheme); return add_query_arg('ver', $less_version, $url); } } // automatically regenerate files if source's modified time has changed or vars have changed try { // initialise the parser if (!class_exists('lessc')) { return $url; //wp_die( 'the lessphp library is missing, aborting, run composer update' ); } // If the cache or root path in it are invalid then regenerate if (empty($cache) || empty($cache['less']['root']) || !file_exists($cache['less']['root'])) { $cache = array('vars' => $this->vars, 'less' => $less_path); } if (empty($cache['url'])) { $cache['url'] = trailingslashit($this->get_cache_dir(false)) . "{$handle}.css"; } // less config $less = new lessc(); $less->setFormatter(apply_filters('less_compression', $this->compression)); $less->setPreserveComments(apply_filters('less_preserve_comments', $this->preserve_comments)); $less->setVariables($this->vars); // add directories to scan for imports $import_dirs = apply_filters('less_import_dirs', $this->import_dirs); if (!empty($import_dirs)) { foreach ((array) $import_dirs as $dir) { $less->addImportDir($dir); } } // register and unregister functions foreach ($this->registered_functions as $name => $callable) { $less->registerFunction($name, $callable); } foreach ($this->unregistered_functions as $name) { $less->unregisterFunction($name); } // allow devs to mess around with the less object configuration do_action_ref_array('lessc', array(&$less)); // $less->cachedCompile only checks for changed file modification times // if using the theme customiser (changed variables not files) then force a compile if ($this->vars !== $cache['vars']) { $force = true; } else { $force = false; } $force = apply_filters('less_force_compile', $force); $less_cache = $less->cachedCompile($cache['less'], $force); // if they have the same values but differing order, they wont match //sort( $cache['less'] ); //sort( $less_cache ); if (empty($cache) || empty($cache['less']['updated']) || md5($less_cache['compiled']) !== md5($cache['less']['compiled']) || $this->vars !== $cache['vars']) { // output css file name $css_path = trailingslashit($this->get_cache_dir()) . "{$handle}.css"; $cache = array('vars' => $this->vars, 'url' => trailingslashit($this->get_cache_dir(false)) . "{$handle}.css", 'version' => $less_version, 'less' => null); /** * If the option to not have LESS always compiled is set, * then we dont store the whole less_cache in the options table as it's * not needed because we only do a comparison based off $vars and $src * (which includes the $ver param). * * This saves space on the options table for high performance environments. */ if (get_option('wp_less_always_compile_less', true)) { $cache['less'] = $less_cache; } $payload = '<strong>Rebuilt stylesheet with handle: "' . $handle . '"</strong><br>'; if ($this->vars != $cache['vars']) { $payload .= '<em>Variables changed</em>'; $difference = array_merge(array_diff_assoc($cache['vars'], $this->vars), array_diff_assoc($this->vars, $cache['vars'])); $payload .= '<pre>' . print_r($difference, true) . '</pre>'; } else { if (empty($cache) || empty($cache['less']['updated'])) { $payload .= '<em>Empty cache or empty last update time</em>'; } else { if ($less_cache['updated'] > $cache['less']['updated']) { $payload .= '<em>Update times different</em>'; } else { $payload .= '<em><strong>Unknown! Contact the developers poste haste!!!!!!!</em><strong></em>'; } } } $payload .= '<br>src: <code>"' . $src . '"</code> css path: <code>"' . $css_path . '"</code> and cache path: <code>"' . $cache_path . '"</code> and scheme <code>"' . $src_scheme . '"</code>'; $this->add_message(array('time' => time(), 'payload' => $payload)); $this->save_parsed_css($css_path, $less_cache['compiled']); $this->update_cached_file_data($handle, $cache); } } catch (exception $ex) { $this->add_message(array('time' => time(), 'payload' => '<strong>Lessphp failure</strong> ' . $ex->GetMessage())); wp_die(wp_strip_all_tags($ex->getMessage())); } // restore query string it had if any $url = $cache['url'] . (!empty($query_string) ? "?{$query_string}" : ''); // restore original url scheme $url = set_url_scheme($url, $src_scheme); if (get_option('wp_less_always_compile_less', true)) { return add_query_arg('ver', $less_cache['updated'], $url); } return add_query_arg('ver', $less_version, $url); }
function compileLess($inputFile, $outputFile) { if (!class_exists('lessc')) { require_once KPATH_FRAMEWORK . '/external/lessc/lessc.php'; } // Load the cache. $cacheDir = JPATH_CACHE . '/kunena'; if (!is_dir($cacheDir)) { KunenaFolder::create($cacheDir); } $cacheFile = "{$cacheDir}/kunena.{$this->name}.{$inputFile}.cache"; if (is_file($cacheFile)) { $cache = unserialize(file_get_contents($cacheFile)); } else { $cache = JPATH_SITE . '/' . $this->getFile($inputFile, false, 'less'); } $outputDir = KPATH_MEDIA . "/cache/{$this->name}/css"; if (!is_dir($outputDir)) { KunenaFolder::create($outputDir); } $outputFile = "{$outputDir}/{$outputFile}"; $less = new lessc(); $class = $this; $less->registerFunction('url', function ($arg) use($class) { list($type, $q, $values) = $arg; $value = reset($values); return "url({$q}{$class->getFile($value, true, 'media', 'media/kunena')}{$q})"; }); $less->setVariables($this->style_variables); $newCache = $less->cachedCompile($cache); if (!is_array($cache) || $newCache['updated'] > $cache['updated'] || !is_file($outputFile)) { $cache = serialize($newCache); KunenaFile::write($cacheFile, $cache); KunenaFile::write($outputFile, $newCache['compiled']); } }
if ($this->params->get('ResponsiveVideo')) { $doc->addScript($dcTemplatePath . '/js/jquery.fitvids.js', 'text/javascript'); } } // font style sheet $doc->addStyleSheet('templates/' . $this->template . '/fonts/fonts.css'); /* * responsive menu * @since 3.3 */ $doc->addScript($dcTemplatePath . '/js/menu.js', 'text/javascript'); // Custom JavaScript File $doc->addScript($dcTemplatePath . '/js/scripts.js', 'text/javascript'); // if development mode is off script will generate css file instead less if ($this->params->get('developmentMode') != 1) { // less compiler require "lessc.inc.php"; $inputFile = JPATH_ROOT . "/templates/" . $this->template . "/themes/style" . $this->params->get('style') . "/style.less"; $outputFile = JPATH_ROOT . "/templates/" . $this->template . "/themes/style" . $this->params->get('style') . "/style.css"; $less = new lessc(); $less->setFormatter("compressed"); $cache = $less->cachedCompile($inputFile); file_put_contents($outputFile, $cache["compiled"]); $last_updated = $cache["updated"]; $cache = $less->cachedCompile($cache); if ($cache["updated"] > $last_updated) { file_put_contents($outputFile, $cache["compiled"]); } // compiled css file $doc->addStyleSheet($dcTemplatePath . '/themes/style' . $this->params->get('style') . '/style.css'); }
/** * Checks if .less file has been updated and stores it in cache for quick comparison. * * This function is taken and modified from documentation of lessphp * * @param String $inputFile * @param String $outputFile */ function autoCompileLess($inputFile, $outputFile) { // load config file $config = JFactory::getConfig(); //path to temp folder $tmpPath = $config->get('tmp_path'); //load chached file $cacheFile = $tmpPath . DIRECTORY_SEPARATOR . $this->app->getTemplate() . "_" . basename($inputFile) . ".cache"; if (file_exists($cacheFile)) { $tmpCache = unserialize(file_get_contents($cacheFile)); if ($tmpCache['root'] === $inputFile) { $cache = $tmpCache; } else { $cache = $inputFile; unlink($cacheFile); } } else { $cache = $inputFile; } //instantiate less compiler $less = new lessc(); //set less options //option: force recompilation regardless of change $force = (bool) $this->params->get('less_force', 0); //option: preserve comments if ($this->params->get('less_comments', 0)) { $less->setPreserveComments(true); } //option: compression if ($this->params->get('less_compress', 0)) { $less->setFormatter("compressed"); } else { $less->setFormatter("classic"); } //compile cache file $newCache = $less->cachedCompile($cache, $force); if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) { file_put_contents($cacheFile, serialize($newCache)); file_put_contents($outputFile, $newCache['compiled']); } }
function compileLess($inputFile, $outputFile) { if (!class_exists('lessc')) { require_once KPATH_FRAMEWORK . '/external/lessc/lessc.php'; } // Load the cache. $cacheDir = JPATH_CACHE . '/kunena'; if (!is_dir($cacheDir)) { JFolder::create($cacheDir); } $cacheFile = "{$cacheDir}/kunena.{$this->name}.{$inputFile}.cache"; if (file_exists($cacheFile)) { $cache = unserialize(file_get_contents($cacheFile)); } else { $cache = JPATH_SITE . '/' . $this->getFile($inputFile, false, 'less'); } $outputDir = KPATH_MEDIA . "/cache/{$this->name}/css"; if (!is_dir($outputDir)) { JFolder::create($outputDir); } $outputFile = "{$outputDir}/{$outputFile}"; $less = new lessc(); $less->setVariables($this->style_variables); $newCache = $less->cachedCompile($cache); if (!is_array($cache) || $newCache['updated'] > $cache['updated'] || !is_file($outputFile)) { $cache = serialize($newCache); JFile::write($cacheFile, $cache); JFile::write($outputFile, $newCache['compiled']); } }
function sh_theme_color_scheme() { $dir = get_template_directory(); include_once $dir . '/includes/thirdparty/lessc.inc.php'; $styles = _WSH()->option(); $colors = sh_set($styles, 'color_selection', 'default'); $custom = sh_set($styles, 'custom_color_scheme'); $default = sh_set($styles, 'default_color_scheme', 'yellow'); //echo $colors.'<br>'.$custom.'<br>'. $default;exit; if ($colors === 'default') { $url = file_exists(get_stylesheet_directory_uri() . '/css/' . $default . '.css') ? get_stylesheet_directory_uri() . '/css/' . $default . '.css' : get_template_directory_uri() . '/css/' . $default . '.css'; echo '<link rel="stylesheet" type="text/css" href="' . $url . '" />'; return; } $transient = get_transient('_sh_color_scheme'); $update = $custom != $transient ? true : false; $url = file_exists(get_stylesheet_directory() . '/css/color.css') ? get_stylesheet_directory_uri() . '/css/color.css' : get_template_directory_uri() . '/css/color.css'; echo '<link rel="stylesheet" type="text/css" href="' . $url . '" />'; //if( !$update ) return; set_transient('_sh_color_scheme', $custom, DAY_IN_SECONDS); $less = new lessc(); $less->setVariables(array("sh_color" => $custom)); $lessss = file_exists(get_stylesheet_directory() . '/css/color.less') ? get_stylesheet_directory() . '/css/color.less' : get_template_directory() . '/css/color.less'; // create a new cache object, and compile $cache = $less->cachedCompile($lessss); $url = file_exists(get_stylesheet_directory() . '/css/color.css') ? get_stylesheet_directory() . '/css/color.css' : get_template_directory() . '/css/color.css'; file_put_contents($url, $cache["compiled"]); }
/** * @internal Compiles a LESS file to CSS and delivers that to the browser * @attribute[RequestParam('file','string')] */ function CompileLess($file) { $less = resFile(basename($file), true); $css = sys_get_temp_dir() . '/' . md5($file) . '.css'; $cacheFile = sys_get_temp_dir() . '/' . md5($file) . '.cache'; header('Content-Type: text/css'); if (file_exists($css) && file_exists($cacheFile)) { $cache = unserialize(file_get_contents($cacheFile)); } else { $cache = $less; } require_once __DIR__ . '/lessphp/lessc.inc.php'; $compiler = new \lessc(); $newCache = $compiler->cachedCompile($cache); if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) { file_put_contents($cacheFile, serialize($newCache)); file_put_contents($css, $newCache['compiled']); } WdfResource::ValidatedCacheResponse($less); readfile($css); die; }
protected function autoCompileLess($inputFile) { global $okt; $outputFile = OKT_PUBLIC_PATH . '/cache/' . md5($inputFile) . '.css'; $cacheFile = $outputFile . '.cache'; if (file_exists($cacheFile)) { $cache = unserialize(file_get_contents($cacheFile)); } else { $cache = $inputFile; } try { $less = new lessc(); $less->setPreserveComments(true); $less->setImportDir(array(isset($okt->theme->path) ? $okt->theme->path . '/css/' : null, OKT_PUBLIC_PATH . '/css/less/')); $less->setVariables($okt->theme->getLessVariables()); $newCache = $less->cachedCompile($cache); } catch (Exception $ex) { $okt->error->set('lessphp fatal error: ' . $ex->getMessage()); } if (!is_array($cache) || $newCache['updated'] > $cache['updated']) { file_put_contents($cacheFile, serialize($newCache)); file_put_contents($outputFile, $newCache['compiled']); } return str_replace(OKT_PUBLIC_PATH, $okt->config->app_path . OKT_PUBLIC_DIR, $outputFile); }
passthru(sprintf("php %s/genposts.php", __DIR__), $out); // compile less => css $lessInput = __DIR__ . '/public/css/main.less'; $cssOutput = __DIR__ . '/public/css/compiled.css'; $lessCacheFile = __DIR__ . '/less.cache'; if (!file_exists($cssOutput)) { @unlink($lessCacheFile); } if (file_exists($lessCacheFile)) { $cache = unserialize(file_get_contents($lessCacheFile)); } else { $cache = __DIR__ . '/public/css/main.less'; } $less = new lessc(); $less->setFormatter("compressed"); $newCache = $less->cachedCompile($cache); if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) { if (file_put_contents($cssOutput, $newCache['compiled']) !== false) { gzip($cssOutput); file_put_contents($lessCacheFile, serialize($newCache)); } } // minify js $jsDir = __DIR__ . '/public/js/'; $jsOutput = 'compiled.js'; $js = ''; // for this site, the order of including doesn't matter if (file_exists($jsDir)) { foreach (scandir($jsDir) as $file) { if (substr($file, -3) === '.js' && $file !== $jsOutput) { $js .= \JShrink\Minifier::minify(file_get_contents($jsDir . $file));
/** * Compile LESS file to CSS and store in cache if necessary * * @param string $file LESS file to compile * @return integer Timestamp of the last compilation */ private function _compileLess($file) { $cacheFile = CACHE_DIR . DS . 'assets' . DS . md5($file) . ".less.cache"; $cache = is_file($cacheFile) ? unserialize(file_get_contents($cacheFile)) : $file; require_once FW_DIR . DS . "lib" . DS . 'vendor' . DS . "lessphp" . DS . "lessc.inc.php"; $less = new lessc(); $less->addImportDir(WWW_DIR); $less->addImportDir(dirname($file)); $compiled = $less->cachedCompile($cache); if (!is_array($cache) || $compiled["updated"] > $cache["updated"]) { file_put_contents($cacheFile, serialize($compiled)); return $compiled['updated']; } return $cache['updated']; }