Remove JS if not in use on current page.

Paramètres

array $js: JS array.

1 call to advagg_mod_remove_js_if_not_used()
advagg_mod_js_post_alter dans advagg_mod/advagg_mod.module
Alter the js array.

Fichier

advagg_mod/advagg_mod.module, line 3570

Code

function advagg_mod_remove_js_if_not_used(array &$js) {
    $files_skiplist = array(
        'drupal.js',
        'jquery.js',
        'jquery.min.js',
        'jquery.once.js',
    );
    $inline_skiplist = array();
    if (module_exists('jquery_update')) {
        $inline_skiplist[] = 'document.write("<script src=\'' . $GLOBALS['base_path'] . drupal_get_path('module', 'jquery_update') . '/replace/jquery/' . variable_get('jquery_update_jquery_version', '1.10') . '/jquery' . (variable_get('jquery_update_compression_type', 'min') === 'none' ? '' : '.min') . ".js'>";
    }
    if (module_exists('labjs')) {
        $inline_skiplist[] = 'var $L = $LAB.setGlobalDefaults';
    }
    $include_jquery = FALSE;
    $include_drupal = FALSE;
    module_load_include('inc', 'advagg', 'advagg');
    // Look at each JavaScript entry and get the info on it.
    $files_info_filenames = array();
    foreach ($js as &$values) {
        if ($values['type'] !== 'file' || !is_string($values['data'])) {
            continue;
        }
        foreach ($files_skiplist as $skip_name) {
            if (strlen($skip_name) < strlen($values['data']) && substr_compare($values['data'], $skip_name, -strlen($skip_name), strlen($skip_name)) === 0) {
                continue 2;
            }
        }
        $files_info_filenames[] = $values['data'];
    }
    unset($values);
    $files_info = advagg_get_info_on_files($files_info_filenames);
    // Look at each JavaScript entry and see if it uses jquery or drupal.
    foreach ($js as $name => &$values) {
        if ($values['type'] === 'file' || $values['type'] === 'external') {
            foreach ($files_skiplist as $skip_name) {
                if (substr_compare($values['data'], $skip_name, -strlen($skip_name), strlen($skip_name)) === 0) {
                    continue 2;
                }
            }
        }
        if ($values['type'] === 'inline' && !empty($inline_skiplist)) {
            foreach ($inline_skiplist as $skip_string) {
                if (stripos($values['data'], $skip_string) !== FALSE) {
                    continue 2;
                }
            }
        }
        // Get advagg_mod info if not set; skip external files.
        if (!isset($files_info[$name]['advagg_mod']) && $values['type'] !== 'external') {
            $files_info[$name]['advagg_mod'] = advagg_mod_js_contains_jquery_drupal($values['data'], $values['type']);
        }
        // See what needs to be included.
        if (!empty($files_info[$name]['advagg_mod']['contents']['drupal'])) {
            $include_jquery = TRUE;
            $include_drupal = TRUE;
            break;
        }
        elseif (!empty($files_info[$name]['advagg_mod']['contents']['jquery'])) {
            $include_jquery = TRUE;
        }
        elseif (isset($values['requires_jquery']) && !empty($values['requires_jquery'])) {
            $include_jquery = TRUE;
        }
    }
    unset($values);
    // Kill only drupal JavaScript.
    if (!$include_drupal) {
        unset($js['settings']);
        foreach ($js as $name => &$values) {
            $drupal = 'drupal.js';
            if (substr_compare($name, $drupal, -strlen($drupal), strlen($drupal)) === 0) {
                unset($js[$name]);
            }
        }
        unset($values);
        // Kill all default JavaScript.
        if (!$include_jquery) {
            foreach ($js as $name => &$values) {
                if ($values['type'] === 'file' || $values['type'] === 'external') {
                    foreach ($files_skiplist as $skip_name) {
                        if (substr_compare($name, $skip_name, -strlen($skip_name), strlen($skip_name)) === 0) {
                            unset($js[$name]);
                        }
                    }
                }
                elseif ($values['type'] === 'inline') {
                    foreach ($inline_skiplist as $skip_string) {
                        if (stripos($values['data'], $skip_string) !== FALSE) {
                            unset($js[$name]);
                        }
                    }
                }
            }
            unset($values);
        }
    }
}