MDL-49518 libraries: Update lessphp to 1.7.0.3

This commit is contained in:
Dave Cooper
2015-03-24 11:01:13 +08:00
parent a149d6a177
commit 657b12788d
61 changed files with 512 additions and 290 deletions
Regular → Executable
+121 -29
View File
@@ -11,7 +11,17 @@ require_once( dirname(__FILE__).'/Version.php');
*/
class Less_Cache{
public static $cache_dir = false; // directory less.php can use for storing data
// directory less.php can use for storing data
public static $cache_dir = false;
// prefix for the storing data
public static $prefix = 'lessphp_';
// prefix for the storing vars
public static $prefix_vars = 'lessphpvars_';
// specifies the number of seconds after which data created by less.php will be seen as 'garbage' and potentially cleaned up
public static $gc_lifetime = 604800;
/**
@@ -21,10 +31,10 @@ class Less_Cache{
*
* @param array $less_files Array of .less files to compile
* @param array $parser_options Array of compiler options
* @param boolean $use_cache Set to false to regenerate the css file
* @param array $modify_vars Array of variables
* @return string Name of the css file
*/
public static function Get( $less_files, $parser_options = array(), $use_cache = true ){
public static function Get( $less_files, $parser_options = array(), $modify_vars = array() ){
//check $cache_dir
@@ -36,39 +46,62 @@ class Less_Cache{
throw new Exception('cache_dir not set');
}
if( isset($parser_options['prefix']) ){
Less_Cache::$prefix = $parser_options['prefix'];
}
if( empty(Less_Cache::$prefix) ){
throw new Exception('prefix not set');
}
if( isset($parser_options['prefix_vars']) ){
Less_Cache::$prefix_vars = $parser_options['prefix_vars'];
}
if( empty(Less_Cache::$prefix_vars) ){
throw new Exception('prefix_vars not set');
}
self::CheckCacheDir();
$less_files = (array)$less_files;
//create a file for variables
if( !empty($modify_vars) ){
$lessvars = Less_Parser::serializeVars($modify_vars);
$vars_file = Less_Cache::$cache_dir . Less_Cache::$prefix_vars . sha1($lessvars) . '.less';
if( !file_exists($vars_file) ){
file_put_contents($vars_file, $lessvars);
}
$less_files += array($vars_file => '/');
}
// generate name for compiled css file
$less_files = (array)$less_files;
$hash = md5(json_encode($less_files));
$list_file = Less_Cache::$cache_dir.'lessphp_'.$hash.'.list';
$list_file = Less_Cache::$cache_dir . Less_Cache::$prefix . $hash . '.list';
// check cached content
if( $use_cache === true && file_exists($list_file) ){
if( !isset($parser_options['use_cache']) || $parser_options['use_cache'] === true ){
if( file_exists($list_file) ){
$list = explode("\n",file_get_contents($list_file));
self::ListFiles($list_file, $list, $cached_name);
$compiled_name = self::CompiledName($list);
//pop the cached name that should match $compiled_name
$cached_name = array_pop($list);
if( !preg_match('/^lessphp_[a-f0-9]+\.css$/',$cached_name) ){
$list[] = $cached_name;
$cached_name = false;
}
$compiled_name = self::CompiledName($list);
// if $cached_name != $compiled_name, we know we need to recompile
if( !$cached_name || $cached_name === $compiled_name ){
// if $cached_name != $compiled_name, we know we need to recompile
if( !$cached_name || $cached_name === $compiled_name ){
$output_file = self::OutputFile($compiled_name, $parser_options );
$output_file = self::OutputFile($compiled_name, $parser_options );
if( $output_file && file_exists($output_file) ){
@touch($list_file);
@touch($output_file);
return basename($output_file); // for backwards compatibility, we just return the name of the file
if( $output_file && file_exists($output_file) ){
@touch($list_file);
return basename($output_file); // for backwards compatibility, we just return the name of the file
}
}
}
}
$compiled = self::Cache( $less_files, $parser_options );
@@ -102,10 +135,12 @@ class Less_Cache{
*
* @param array $less_files Array of .less files to compile
* @param array $parser_options Array of compiler options
* @param array $modify_vars Array of variables
* @return string Name of the css file
*/
public static function Regen( $less_files, $parser_options = array() ){
return self::Get( $less_files, $parser_options, false );
public static function Regen( $less_files, $parser_options = array(), $modify_vars = array() ){
$parser_options['use_cache'] = false;
return self::Get( $less_files, $parser_options, $modify_vars );
}
public static function Cache( &$less_files, $parser_options = array() ){
@@ -167,7 +202,7 @@ class Less_Cache{
$temp[] = filemtime($file)."\t".filesize($file)."\t".$file;
}
return 'lessphp_'.sha1(json_encode($temp)).'.css';
return Less_Cache::$prefix.sha1(json_encode($temp)).'.css';
}
@@ -196,6 +231,10 @@ class Less_Cache{
}
/**
* Delete unused less.php files
*
*/
public static function CleanCache(){
static $clean = false;
@@ -205,15 +244,49 @@ class Less_Cache{
$files = scandir(Less_Cache::$cache_dir);
if( $files ){
$check_time = time() - 604800;
$check_time = time() - self::$gc_lifetime;
foreach($files as $file){
if( strpos($file,'lessphp_') !== 0 ){
// don't delete if the file wasn't created with less.php
if( strpos($file,Less_Cache::$prefix) !== 0 ){
continue;
}
$full_path = Less_Cache::$cache_dir.'/'.$file;
if( filemtime($full_path) > $check_time ){
// make sure the file still exists
// css files may have already been deleted
if( !file_exists($full_path) ){
continue;
}
$mtime = filemtime($full_path);
// don't delete if it's a relatively new file
if( $mtime > $check_time ){
continue;
}
$parts = explode('.',$file);
$type = array_pop($parts);
// delete css files based on the list files
if( $type === 'css' ){
continue;
}
// delete the list file and associated css file
if( $type === 'list' ){
self::ListFiles($full_path, $list, $css_file_name);
if( $css_file_name ){
$css_file = Less_Cache::$cache_dir.'/'.$css_file_name;
if( file_exists($css_file) ){
unlink($css_file);
}
}
}
unlink($full_path);
}
}
@@ -221,4 +294,23 @@ class Less_Cache{
$clean = true;
}
/**
* Get the list of less files and generated css file from a list file
*
*/
static function ListFiles($list_file, &$list, &$css_file_name ){
$list = explode("\n",file_get_contents($list_file));
//pop the cached name that should match $compiled_name
$css_file_name = array_pop($list);
if( !preg_match('/^' . Less_Cache::$prefix . '[a-f0-9]+\.css$/',$css_file_name) ){
$list[] = $css_file_name;
$css_file_name = false;
}
}
}