Advanced CSS/JS aggregation js compression php 5.3+ functions.
Fichier
-
advagg_js_compress/
advagg_js_compress.php53.inc
View source
<?php
/**
* @file
* Advanced CSS/JS aggregation js compression php 5.3+ functions.
*/
use JShrink\Minifier;
use Patchwork\JSqueeze;
/**
* Compress a JS string using jshrink.
*
* @param string $contents
* Javascript string.
* @param bool $log_errors
* FALSE to disable logging to watchdog on failure.
*/
function advagg_js_compress_jshrink(&$contents, $log_errors = TRUE) {
$no_errors = TRUE;
$contents_before = $contents;
// Set max nesting level.
if (!class_exists('JShrink\\Minifier')) {
$nesting_level = ini_get('xdebug.max_nesting_level');
if (!empty($nesting_level) && $nesting_level < 200) {
ini_set('xdebug.max_nesting_level', 200);
}
}
// Try libraries for JShrink.
if (is_callable('libraries_load')) {
libraries_load('JShrink');
}
// Only include jshrink.inc if the JShrink\Minifier class doesn't exist.
if (!class_exists('JShrink\\Minifier')) {
include drupal_get_path('module', 'advagg_js_compress') . '/jshrink.inc';
}
ob_start();
try {
// JShrink the contents of the aggregated file.
$contents = Minifier::minify($contents, array(
'flaggedComments' => FALSE,
));
// Capture any output from JShrink.
$error = trim(ob_get_contents());
if (!empty($error)) {
$no_errors = FALSE;
throw new Exception($error);
}
} catch (Exception $e) {
$no_errors = FALSE;
// Log the JShrink exception and rollback to uncompressed content.
if ($log_errors) {
watchdog('advagg_js_compress', '@message <pre> @contents </pre>', array(
'@message' => $e->getMessage(),
'@contents' => $contents_before,
), WATCHDOG_WARNING);
}
$contents = $contents_before;
}
ob_end_clean();
return $no_errors;
}
/**
* Compress a JS string using jsqueeze.
*
* @param string $contents
* Javascript string.
* @param bool $log_errors
* FALSE to disable logging to watchdog on failure.
* @param array $aggregate_settings
* The aggregate_settings array.
*/
function advagg_js_compress_jsqueeze(&$contents, $log_errors = TRUE, array $aggregate_settings = array()) {
$no_errors = TRUE;
$contents_before = $contents;
// Set max nesting level.
if (!class_exists('Patchwork\\JSqueeze')) {
$nesting_level = ini_get('xdebug.max_nesting_level');
if (!empty($nesting_level) && $nesting_level < 200) {
ini_set('xdebug.max_nesting_level', 200);
}
}
// Try libraries for jsqueeze.
if (is_callable('libraries_load')) {
libraries_load('jsqueeze');
}
if (!class_exists('Patchwork\\JSqueeze')) {
// Only include jshrink.inc if the Patchwork\JSqueeze class doesn't exist.
include drupal_get_path('module', 'advagg_js_compress') . '/jsqueeze.inc';
}
ob_start();
try {
$add_license_setting = isset($aggregate_settings['variables']['advagg_js_compress_add_license']) ? $aggregate_settings['variables']['advagg_js_compress_add_license'] : variable_get('advagg_js_compress_add_license', ADVAGG_JS_COMPRESS_ADD_LICENSE);
$keep_important_comments = FALSE;
if ($add_license_setting == 2 || $add_license_setting == 3) {
$keep_important_comments = TRUE;
}
// Minify the contents of the aggregated file.
$jz = new JSqueeze();
$contents = $jz->squeeze($contents, TRUE, $keep_important_comments, FALSE);
// Capture any output from JSqueeze.
$error = trim(ob_get_contents());
if (!empty($error)) {
$no_errors = FALSE;
throw new Exception($error);
}
} catch (Exception $e) {
$no_errors = FALSE;
// Log the JSqueeze exception and rollback to uncompressed content.
if ($log_errors) {
watchdog('advagg_js_compress', '@message <pre> @contents </pre>', array(
'@message' => $e->getMessage(),
'@contents' => $contents_before,
), WATCHDOG_WARNING);
}
$contents = $contents_before;
}
ob_end_clean();
return $no_errors;
}
Functions
Titre | Deprecated | Résumé |
---|---|---|
advagg_js_compress_jshrink | Compress a JS string using jshrink. | |
advagg_js_compress_jsqueeze | Compress a JS string using jsqueeze. |