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 dans advagg_mod/advagg_mod.admin.inc
Form builder; Configure advagg settings.
advagg_mod_page_alter dans advagg_mod/advagg_mod.module
Implements hook_page_alter().

Fichier

advagg_mod/advagg_mod.module, line 1667

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,
    );
}