function advagg_mod_find_critical_css_file in Advanced CSS/JS Aggregation 7.2
Try to find the critical css file.
Return value
array The css and dns files to use.
2 calls to advagg_mod_find_critical_css_file()
- advagg_mod_admin_settings_form in advagg_mod/
advagg_mod.admin.inc - Form builder; Configure advagg settings.
- advagg_mod_page_alter in advagg_mod/
advagg_mod.module - Implements hook_page_alter().
File
- advagg_mod/
advagg_mod.module, line 1667 - Advanced aggregation modifier module.
Code
function advagg_mod_find_critical_css_file() {
$filename = FALSE;
// Normalize request uri.
$base_path = base_path();
$request_uri = request_uri();
$pos = strpos($request_uri, $base_path);
if ($pos === 0) {
$request_uri = substr($request_uri, strlen($base_path));
}
$dirs = array(
0 => drupal_get_path('theme', $GLOBALS['theme']) . '/',
1 => 'critical-css/',
// Use authenticated|anonymous or all.
2 => user_is_logged_in() ? 'authenticated/' : 'anonymous/',
3 => 'all/',
// Use urls or object_type.
4 => 'urls/',
5 => 'type/',
// Different variations of the current URL.
6 => current_path(),
7 => advagg_url_to_filename($request_uri, FALSE),
8 => advagg_url_to_filename(request_path(), FALSE),
9 => $request_uri,
10 => request_path(),
);
$front_page = drupal_is_front_page();
if (!$front_page) {
$front_page = drupal_get_path_alias() == variable_get('site_frontpage', 'node');
}
$object = menu_get_object();
$params = array(
$dirs,
$front_page,
$object,
);
$inline_strings = array(
'',
'',
'',
);
// Allow for altering the starting point.
// Call hook_advagg_mod_critical_css_file_pre_alter().
drupal_alter('advagg_mod_critical_css_file_pre', $filename, $params, $inline_strings);
list($dirs, $front_page, $object) = $params;
// Look in themename/critical-css/authenticated|anonymous/urls|object_type.
if ((!empty($dirs[0]) || !empty($dirs[1])) && is_readable("{$dirs[0]}{$dirs[1]}")) {
if (!$filename && $front_page && is_readable("{$dirs[0]}{$dirs[1]}{$dirs[2]}{$dirs[4]}front.css")) {
$filename = "{$dirs[0]}{$dirs[1]}{$dirs[2]}{$dirs[4]}front";
}
if (!$filename && is_readable("{$dirs[0]}{$dirs[1]}{$dirs[2]}{$dirs[4]}{$dirs[6]}.css")) {
$filename = "{$dirs[0]}{$dirs[1]}{$dirs[2]}{$dirs[4]}{$dirs[6]}";
}
if (!$filename && is_readable("{$dirs[0]}{$dirs[1]}{$dirs[2]}{$dirs[4]}{$dirs[7]}.css")) {
$filename = "{$dirs[0]}{$dirs[1]}{$dirs[2]}{$dirs[4]}{$dirs[7]}";
}
if (!$filename && is_readable("{$dirs[0]}{$dirs[1]}{$dirs[2]}{$dirs[4]}{$dirs[8]}.css")) {
$filename = "{$dirs[0]}{$dirs[1]}{$dirs[2]}{$dirs[4]}{$dirs[8]}";
}
if (isset($object->type)) {
$filtered_object_type = advagg_url_to_filename($object->type);
if (!$filename && is_readable("{$dirs[0]}{$dirs[1]}{$dirs[2]}{$dirs[5]}{$object->type}.css")) {
$filename = "{$dirs[0]}{$dirs[1]}{$dirs[2]}{$dirs[5]}{$object->type}";
}
if (!$filename && is_readable("{$dirs[0]}{$dirs[1]}{$dirs[2]}{$dirs[5]}{$filtered_object_type}.css")) {
$filename = "{$dirs[0]}{$dirs[1]}{$dirs[2]}{$dirs[5]}{$filtered_object_type}";
}
}
// Look in themename/critical-css/all/urls|object_type.
if (!$filename && $front_page && is_readable("{$dirs[0]}{$dirs[1]}{$dirs[3]}{$dirs[4]}front.css")) {
$filename = "{$dirs[0]}{$dirs[1]}{$dirs[3]}{$dirs[4]}front";
}
if (!$filename && is_readable("{$dirs[0]}{$dirs[1]}{$dirs[3]}{$dirs[4]}{$dirs[6]}.css")) {
$filename = "{$dirs[0]}{$dirs[1]}{$dirs[3]}{$dirs[4]}{$dirs[6]}";
}
if (!$filename && is_readable("{$dirs[0]}{$dirs[1]}{$dirs[3]}{$dirs[4]}{$dirs[7]}.css")) {
$filename = "{$dirs[0]}{$dirs[1]}{$dirs[3]}{$dirs[4]}{$dirs[7]}";
}
if (!$filename && is_readable("{$dirs[0]}{$dirs[1]}{$dirs[3]}{$dirs[4]}{$dirs[8]}.css")) {
$filename = "{$dirs[0]}{$dirs[1]}{$dirs[3]}{$dirs[4]}{$dirs[8]}";
}
if (isset($object->type)) {
$filtered_object_type = advagg_url_to_filename($object->type);
if (!$filename && is_readable("{$dirs[0]}{$dirs[1]}{$dirs[3]}{$dirs[5]}{$object->type}.css")) {
$filename = "{$dirs[0]}{$dirs[1]}{$dirs[3]}{$dirs[5]}{$object->type}";
}
if (!$filename && is_readable("{$dirs[0]}{$dirs[1]}{$dirs[3]}{$dirs[5]}{$filtered_object_type}.css")) {
$filename = "{$dirs[0]}{$dirs[1]}{$dirs[3]}{$dirs[5]}{$filtered_object_type}";
}
}
}
// Build filenames array.
$filenames = array(
'',
'',
'',
);
if ($filename) {
$filenames = array(
"{$filename}.css",
"{$filename}.dns",
"{$filename}.pre",
);
}
// Get inline css string.
if (empty($inline_strings[0]) && !empty($filenames[0]) && is_readable($filenames[0])) {
module_load_include('inc', 'advagg', 'advagg');
$inline_css = advagg_load_stylesheet($filenames[0], TRUE);
// Allow other modules to modify this files contents.
// Call hook_advagg_get_css_file_contents_alter().
drupal_alter('advagg_get_css_file_contents', $inline_css, $filenames[0]);
$inline_strings[0] = $inline_css;
}
// Remove starting and ending style tags.
if (stripos($inline_strings[0], '<style>') === 0) {
$inline_strings[0] = trim(substr($inline_strings[0], 7));
}
$len = strlen($inline_strings[0]);
if (stripos($inline_strings[0], '</style>') === $len - 8) {
$inline_strings[0] = trim(substr($inline_strings[0], 0, $len - 8));
}
// Add in domain prefetch.
if (empty($inline_strings[1]) && !empty($filenames[1]) && is_readable($filenames[1])) {
$inline_strings[1] = file_get_contents($filenames[1]);
}
// Add in files to preload.
if (empty($inline_strings[2]) && !empty($filenames[2]) && is_readable($filenames[2])) {
$inline_strings[2] = file_get_contents($filenames[2]);
}
// Remove !important from all CSS rules. Strips it even without a space in
// front, unlike the earlier version of this code.
if (variable_get('advagg_mod_inline_critical_css_strip_important', ADVAGG_MOD_INLINE_CRITICAL_CSS_STRIP_IMPORTANT)) {
if (!empty($inline_strings)) {
$inline_strings[0] = str_replace('!important', '', $inline_strings[0]);
}
}
// Allow for altering the ending point.
// Call hook_advagg_mod_critical_css_file_post_alter().
drupal_alter('advagg_mod_critical_css_file_post', $filenames, $params, $inline_strings);
return array(
$filenames,
$params,
$inline_strings,
);
}