Same name and namespace in other branches
  1. 7.x-2.x advagg_js_compress/advagg_js_compress.advagg.inc \advagg_js_compress_prep() 1 commentaire

Compress a JS string

Paramètres

$contents: Javascript string.

1 call to advagg_js_compress_prep()
advagg_js_compress_advagg_js_alter dans advagg_js_compress/advagg_js_compress.module
Implements hook_advagg_js_alter().

Fichier

advagg_js_compress/advagg_js_compress.module, line 189

Code

function advagg_js_compress_prep(&$contents, $files, $bundle_md5) {
    // Make sure every file in this aggregate is compressible.
    $files_to_test = array();
    $list_bad = array();
    foreach ($files as $filename) {
        $filename_md5 = md5($filename);
        $data = advagg_get_file_data($filename_md5);
        // File needs to be tested.
        if (empty($data['advagg_js_compress']['tested'])) {
            $files_to_test[] = array(
                'md5' => $filename_md5,
                'filename' => $filename,
            );
        }
        elseif ($data['advagg_js_compress']['tested']['jsminplus'] != 1) {
            $list_bad[$filename] = $filename;
        }
    }
    $advagg_js_compress_callback = variable_get('advagg_js_compress_callback', ADVAGG_JS_COMPRESS_CALLBACK);
    if ($advagg_js_compress_callback) {
        // Send test files to worker.
        if (!empty($files_to_test)) {
            $compressible = advagg_js_compress_test_compression($files_to_test);
            // If an array then it is a list of files that can not be compressed.
            if (is_array($compressible)) {
                // Place filename in an array key.
                foreach ($compressible as $filedata) {
                    $filename = $filedata['filename'];
                    $list_bad[$filename] = $filename;
                }
            }
        }
    }
    $contents = '';
    // Do not compress the file that it bombs on.
    // Compress each file individually.
    foreach ($files as $file) {
        if (!empty($list_bad[$file])) {
            $contents .= advagg_build_js_bundle(array(
                $file,
            ));
        }
        else {
            $data = advagg_build_js_bundle(array(
                $file,
            ));
            // If using a cache, try to get the contents of it.
            $cached = FALSE;
            if (variable_get('advagg_js_compress_file_cache', ADVAGG_JS_COMPRESS_FILE_CACHE)) {
                $key = $file;
                $table = 'cache_advagg_js_compress_file';
                $cached_data = cache_get($key, $table);
                if (!empty($cached_data->data)) {
                    $data = $cached_data->data;
                    $cached = TRUE;
                }
            }
            if (!$cached && !empty($data)) {
                $compressor = variable_get('advagg_js_compressor', ADVAGG_JS_COMPRESSOR);
                if ($compressor == 0) {
                    list($before, $after) = advagg_js_compress_jsminplus($data);
                    $ratio = ($before - $after) / $before;
                    // Make sure the returned string is not empty or has a VERY high
                    // compression ratio.
                    if (empty($data) || $ratio > variable_get('advagg_js_max_compress_ratio', ADVAGG_JS_MAX_COMPRESS_RATIO)) {
                        $data = advagg_build_js_bundle(array(
                            $file,
                        ));
                    }
                    elseif (isset($key)) {
                        // If using a cache set it.
                        cache_set($key, $data, $table);
                    }
                }
                elseif ($compressor == 1) {
                    $contents = jsmin($contents);
                }
            }
            $contents .= $data . ";\n";
        }
    }
}