function _less_build in Less CSS Preprocessor 6.2
Same name and namespace in other branches
- 6.3 less.module \_less_build()
- 6 less.module \_less_build()
Builds the less cache
2 calls to _less_build()
- less_preprocess_maintenance_page in ./
less.module - Implements MODULE_preprocess_maintenance_page().
- less_preprocess_page in ./
less.module - Implements MODULE_preprocess_page().
File
- ./
less.module, line 42 - Handles compiling of .less files.
Code
function _less_build(&$vars, $hook) {
$css = $vars['css'];
$less_devel = variable_get('less_devel', FALSE);
$less_dir = variable_get('less_dir', '');
// Flush compiled LESS files if developer mode is enabled
if (!$less_dir || $less_devel) {
$less_dir = _less_new_dir();
if ($less_devel && user_access(LESS_PERMISSION) && flood_is_allowed('less_devel_warning', 1)) {
flood_register_event('less_devel_warning');
drupal_set_message(t('LESS files are being regenerated on every request. Remember to <a href="!url">turn off</a> this feature on production websites.', array(
"!url" => url('admin/settings/less'),
)), 'status');
}
}
$less_path = file_directory_path() . '/less/' . $less_dir;
foreach ($css as $media => $types) {
foreach ($types as $type => $files) {
$files_keys = array_keys($files);
foreach ($files_keys as $key => $input_file) {
if (drupal_substr($input_file, -5) == '.less') {
$css_path = $less_path . '/' . dirname($input_file);
if (!is_dir($css_path) && !@mkdir($css_path, 0775, TRUE)) {
// There is a problem with the directory.
$param = array(
'%dir' => $css_path,
);
if (user_access(LESS_PERMISSION)) {
drupal_set_message(t('LESS could not create a directory in %dir', $param), 'error');
}
watchdog('LESS', t('LESS could not create a directory in %dir', $param), array(), WATCHDOG_ERROR);
return;
}
$output_file = $css_path . '/' . basename($input_file, '.less');
// correct file names of files not following the .css.less naming convention
if (drupal_substr($output_file, -4) != '.css') {
$output_file .= '.css';
}
if (!file_exists($output_file)) {
if (_less_inc()) {
$less = new lessc();
$contents = drupal_load_stylesheet($input_file, FALSE);
$base = base_path() . dirname($input_file) . '/';
_drupal_build_css_path(NULL, $base);
// Prefix all paths within this CSS file, ignoring external and absolute paths.
$data = preg_replace_callback('/url\\([\'"]?(?![a-z]+:|\\/+)([^\'")]+)[\'"]?\\)/i', '_drupal_build_css_path', $contents);
try {
$output_data = $less
->parse($data);
file_save_data($output_data, $output_file, FILE_EXISTS_REPLACE);
} catch (Exception $e) {
$message = 'LESS error: @message, %input_file';
$message_vars = array(
'@message' => $e
->getMessage(),
'%input_file' => $input_file,
);
watchdog('LESS', $message, $message_vars, WATCHDOG_ERROR);
if (user_access(LESS_PERMISSION)) {
drupal_set_message(t($message, $message_vars), 'error');
}
}
}
}
if (file_exists($output_file)) {
array_splice($files_keys, $key, 1, $output_file);
}
}
}
if (!empty($files)) {
$css[$media][$type] = array_combine($files_keys, $files);
}
}
}
if ($vars['show_messages']) {
$vars['messages'] .= theme('status_messages');
}
$vars['css'] = $css;
$vars['styles'] = drupal_get_css($vars['css']);
}