diff --git a/includes/common.inc b/includes/common.inc index 5f131ae0064..82de30b39b4 100644 --- a/includes/common.inc +++ b/includes/common.inc @@ -2216,7 +2216,7 @@ function drupal_build_js_cache($files, $filename) { foreach ($files as $path => $info) { if ($info['preprocess']) { // Append a ';' after each JS file to prevent them from running together. - $contents .= _drupal_compress_js(file_get_contents($path) .';'); + $contents .= file_get_contents($path) .';'; } } @@ -2227,230 +2227,6 @@ function drupal_build_js_cache($files, $filename) { return $jspath .'/'. $filename; } -/** - * Perform basic code compression for JavaScript. - * - * Helper function for drupal_pack_js(). - */ -function _drupal_compress_js($script) { - $regexps = array( - // Protect strings. - array('/\'[^\'\\n\\r]*\'/', '$0'), - array('/"[^"\\n\\r]*"/', '$0'), - // Remove comments. - array('/\\/\\/[^\\n\\r]*[\\n\\r]/', ''), - array('/\\/\\*[^*]*\\*+((?:[^\\/][^*]*\\*+)*)\\//', ''), - // Protect regular expressions - array('/\\s+(\\/[^\\/\\n\\r\\*][^\\/\\n\\r]*\\/g?i?)/', '$1'), - array('/[^\\w\\x24\\/\'"*)\\?:]\\/[^\\/\\n\\r\\*][^\\/\\n\\r]*\\/g?i?/', '$0'), - // Protect spaces between keywords and variables - array('/(?<=[A-Za-z0-9_$])\\s+(?=[A-Za-z0-9_$])/', ' '), - array('/([+\\-])\\s+([+\\-])/', '$1 $2'), - // Remove all other white-space - array('/\\s+/', ''), - ); - $script = _packer_apply($script, $regexps, TRUE); - - return $script; -} - -/** - * Multi-regexp replacements. - * - * Allows you to perform multiple regular expression replacements at once, - * without overlapping matches. - * - * @param $script - * The text to modify. - * @param $regexps - * An array of replacement instructions, each being a tuple with values: - * - A stand-alone regular expression without modifiers (slash-delimited) - * - A replacement expression, which may include placeholders. - * @param $escape - * Whether to ignore slash-escaped characters for matching. This allows you - * to match e.g. quote-delimited strings with /'[^']+'/ without having to - * worry about \'. Otherwise, you'd have to mess with look-aheads and - * look-behinds to match these. - */ -function _packer_apply($script, $regexps, $escape = FALSE) { - - $_regexps = array(); - // Process all regexps - foreach ($regexps as $regexp) { - list($expression, $replacement) = $regexp; - - // Count the number of matching groups (including the whole). - $length = 1 + preg_match_all('/(? 'backreferences', - 'data' => array( - 'replacement' => $replacement, - 'length' => $length, - ) - ); - } - } - } - // Store the modified expression. - if (!empty($expression)) { - $_regexps[] = array($expression, $replacement, $length); - } - else { - $_regexps[] = array('/^$/', $replacement, $length); - } - } - - // Execute the global replacement - - // Build one mega-regexp out of the smaller ones. - $regexp = '/'; - foreach ($_regexps as $_regexp) { - list($expression) = $_regexp; - $regexp .= '('. substr($expression, 1, -1) .')|'; - } - $regexp = substr($regexp, 0, -1) .'/'; - - // In order to simplify the regexps that look e.g. for quoted strings, we - // remove all escaped characters (such as \' or \") from the data. Then, we - // put them back as they were. - - if ($escape) { - // Remove escaped characters - $script = preg_replace_callback( - '/\\\\(.)/', - '_packer_escape_char', - $script - ); - $escaped = _packer_escape_char(NULL, TRUE); - } - - _packer_replacement(NULL, $_regexps, $escape); - $script = preg_replace_callback( - $regexp, - '_packer_replacement', - $script - ); - - if ($escape) { - // Restore escaped characters - _packer_unescape_char(NULL, $escaped); - $script = preg_replace_callback( - '/\\\\/', - '_packer_unescape_char', - $script - ); - - // We only delete portions of data afterwards to ensure the escaped character - // replacements don't go out of sync. We mark all sections to delete with - // ASCII 01 bytes. - $script = preg_replace('/\\x01[^\\x01]*\\x01/', '', $script); - } - - return $script; -} - -/** - * Helper function for _packer_apply(). - */ -function _packer_escape_char($match, $return = FALSE) { - // Build array of escaped characters that were removed. - static $_escaped = array(); - if ($return) { - $escaped = $_escaped; - $_escaped = array(); - return $escaped; - } - else { - $_escaped[] = $match[1]; - return '\\'; - } -} - -/** - * Helper function for _packer_apply(). - * - * Performs replacements for the multi-regexp. - */ -function _packer_replacement($arguments, $regexps = NULL, $escape = NULL) { - // Cache regexps - static $_regexps, $_escape; - if (isset($regexps)) { - $_regexps = $regexps; - } - if (isset($escape)) { - $_escape = $escape; - } - - if (empty($arguments)) { - return ''; - } - - $i = 1; $j = 0; - // Loop through the regexps - while (isset($_regexps[$j])) { - list($expression, $replacement, $length) = $_regexps[$j++]; - - // Do we have a result? - if (isset($arguments[$i]) && ($arguments[$i] != '')) { - if (is_array($replacement) && isset($replacement['fn'])) { - return call_user_func('_packer_'. $replacement['fn'], $arguments, $i, $replacement['data']); - } - elseif (is_int($replacement)) { - return $arguments[$replacement + $i]; - } - else { - $delete = !$escape || strpos($arguments[$i], '\\') === FALSE - ? '' : "\x01". $arguments[$i] ."\x01"; - return $delete . $replacement; - } - // skip over references to sub-expressions - } - else { - $i += $length; - } - } -} - -/** - * Helper function for _packer_apply(). - */ -function _packer_unescape_char($match, $escaped = NULL) { - // Store array of escaped characters to insert back. - static $_escaped, $i; - if ($escaped) { - $_escaped = $escaped; - $i = 0; - } - else { - return '\\'. array_shift($_escaped); - } -} - -/** - * Helper function for _packer_replacement(). - */ -function _packer_backreferences($match, $offset, $data) { - $replacement = $data['replacement']; - $i = $data['length']; - while ($i) { - $replacement = str_replace('$'.$i--, $match[$offset + $i], $replacement); - } - return $replacement; -} - /** * Delete all cached JS files. */ diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc index efa316a6975..c8a55869607 100644 --- a/modules/system/system.admin.inc +++ b/modules/system/system.admin.inc @@ -1305,7 +1305,7 @@ function system_performance_settings() { $form['bandwidth_optimizations'] = array( '#type' => 'fieldset', '#title' => t('Bandwidth optimizations'), - '#description' => t('
Drupal can automatically aggregate and compress external resources like CSS and JavaScript into a single cached file. This can help reduce both the size and number of requests made to your website, and ultimately, may reduce server load, bandwidth requirements, and page loading times.
These options are disabled if you have not set up your files directory, or if your download method is set to private.
') + '#description' => t('Drupal can automatically optimize external resources like CSS and JavaScript, which can reduce both the size and number of requests made to your website. CSS files can be aggregated and compressed into a single file, while JavaScript files are aggregated (but not compressed). These optional optimizations may reduce server load, bandwidth requirements, and page loading times.
These options are disabled if you have not set up your files directory, or if your download method is set to private.
') ); $directory = file_directory_path();