- Patch #769226 by Owen Barton, alanburke, sun: fixed JS/CSS preprocess should default to FALSE.

merge-requests/26/head
Dries Buytaert 2010-07-30 02:47:28 +00:00
parent 4f2d69698c
commit 37c3c7ec7a
26 changed files with 98 additions and 67 deletions

View File

@ -2642,27 +2642,26 @@ function drupal_add_html_head_link($attributes, $header = FALSE) {
* Calling drupal_static_reset('drupal_add_css') will clear all cascading
* stylesheets added so far.
*
* If preprocessing is turned on, the cascading style sheets added using this
* function will be preprocessed before they are added to the HTML header of the
* page. Preprocessing merges all the CSS files into one file, which is then
* compressed by removing all extraneous white space. Note that preprocessed
* inline stylesheets will not be aggregated into this single file; instead,
* they will just be compressed when being output on the page. External
* stylesheets will also not be aggregated.
* If CSS aggregation/compression is enabled, all cascading style sheets added
* with $options['preprocess'] set to TRUE will be merged into one aggregate
* file and compressed by removing all extraneous white space.
* Preprocessed inline stylesheets will not be aggregated into this single file;
* instead, they are just compressed upon output on the page. Externally hosted
* stylesheets are never aggregated or compressed.
*
* The reason for merging the CSS files is outlined quite thoroughly here:
* The reason for aggregating the files is outlined quite thoroughly here:
* http://www.die.net/musings/page_load_time/ "Load fewer external objects. Due
* to request overhead, one bigger file just loads faster than two smaller ones
* half its size."
*
* However, you should *not* preprocess every file as this can lead to redundant
* caches. You should set $options['preprocess'] to FALSE when your styles are
* only used on a few pages of the site. This could be a special admin page, the
* homepage, or a handful of pages that does not represent the majority of the
* pages on your site.
* $options['preprocess'] should be only set to TRUE when a file is required for
* all typical visitors and most pages of a site. It is critical that all
* preprocessed files are added unconditionally on every page, even if the
* files do not happen to be needed on a page. This is normally done by calling
* drupal_add_css() in a hook_init() implementation.
*
* Typical candidates for preprocessing are for example styles for nodes across
* the site, or styles used in the theme.
* Non-preprocessed files should only be added to the page when they are
* actually needed.
*
* @param $data
* (optional) The stylesheet data to be added, depending on what is passed
@ -2710,9 +2709,8 @@ function drupal_add_html_head_link($attributes, $header = FALSE) {
* always come last.
* - 'media': The media type for the stylesheet, e.g., all, print, screen.
* Defaults to 'all'.
* - 'preprocess': If TRUE, Allows the CSS to be aggregated and compressed if
* the Optimize CSS feature has been turned on under the performance
* section. Defaults to TRUE.
* - 'preprocess': If TRUE and CSS aggregation/compression is enabled, the
* styles will be aggregated and compressed. Defaults to FALSE.
* - 'browsers': An array containing information specifying which browsers
* should load the CSS item. See drupal_pre_render_conditional_comments()
* for details.
@ -2740,7 +2738,7 @@ function drupal_add_css($data = NULL, $options = NULL) {
'type' => 'file',
'weight' => CSS_DEFAULT,
'media' => 'all',
'preprocess' => TRUE,
'preprocess' => FALSE,
'data' => $data,
'browsers' => array(),
);
@ -3576,6 +3574,25 @@ function drupal_region_class($region) {
* Calling drupal_static_reset('drupal_add_js') will clear all JavaScript added
* so far.
*
* If JavaScript aggregation is enabled, all JavaScript files added with
* $options['preprocess'] set to TRUE will be merged into one aggregate file.
* Preprocessed inline JavaScript will not be aggregated into this single file.
* Externally hosted JavaScripts are never aggregated.
*
* The reason for aggregating the files is outlined quite thoroughly here:
* http://www.die.net/musings/page_load_time/ "Load fewer external objects. Due
* to request overhead, one bigger file just loads faster than two smaller ones
* half its size."
*
* $options['preprocess'] should be only set to TRUE when a file is required for
* all typical visitors and most pages of a site. It is critical that all
* preprocessed files are added unconditionally on every page, even if the
* files are not needed on a page. This is normally done by calling
* drupal_add_css() in a hook_init() implementation.
*
* Non-preprocessed files should only be added to the page when they are
* actually needed.
*
* @param $data
* (optional) If given, the value depends on the $options parameter:
* - 'file': Path to the file relative to base_path().
@ -3617,9 +3634,8 @@ function drupal_region_class($region) {
* - cache: If set to FALSE, the JavaScript file is loaded anew on every page
* call; in other words, it is not cached. Used only when 'type' references
* a JavaScript file. Defaults to TRUE.
* - preprocess: Aggregate the JavaScript if the JavaScript optimization
* setting has been toggled in admin/config/development/performance. Note
* that JavaScript of type 'external' is not aggregated. Defaults to TRUE.
* - preprocess: If TRUE and JavaScript aggregation is enabled, the script
* file will be aggregated. Defaults to FALSE.
*
* @return
* The current array of JavaScript files, settings, and in-line code,
@ -3712,7 +3728,7 @@ function drupal_js_defaults($data = NULL) {
'scope' => 'header',
'cache' => TRUE,
'defer' => FALSE,
'preprocess' => TRUE,
'preprocess' => FALSE,
'version' => NULL,
'data' => $data,
);

View File

@ -1775,7 +1775,7 @@ function _locale_rebuild_js($langcode = NULL) {
*/
function _locale_translate_language_list($translation, $limit_language) {
// Add CSS.
drupal_add_css(drupal_get_path('module', 'locale') . '/locale.css', array('preprocess' => FALSE));
drupal_add_css(drupal_get_path('module', 'locale') . '/locale.css');
$languages = language_list();
unset($languages['en']);

View File

@ -164,7 +164,7 @@ function _drupal_theme_initialize($theme, $base_theme = array(), $registry_callb
// And now add the stylesheets properly
foreach ($final_stylesheets as $media => $stylesheets) {
foreach ($stylesheets as $stylesheet) {
drupal_add_css($stylesheet, array('weight' => CSS_THEME, 'media' => $media));
drupal_add_css($stylesheet, array('weight' => CSS_THEME, 'media' => $media, 'preprocess' => TRUE));
}
}
@ -189,7 +189,7 @@ function _drupal_theme_initialize($theme, $base_theme = array(), $registry_callb
// Add scripts used by this theme.
foreach ($final_scripts as $script) {
drupal_add_js($script, array('weight' => JS_THEME));
drupal_add_js($script, array('weight' => JS_THEME, 'preprocess' => TRUE));
}
$theme_engine = NULL;

View File

@ -286,7 +286,7 @@ function _aggregator_category_title($category) {
* Implements hook_init().
*/
function aggregator_init() {
drupal_add_css(drupal_get_path('module', 'aggregator') . '/aggregator.css');
drupal_add_css(drupal_get_path('module', 'aggregator') . '/aggregator.css', array('preprocess' => TRUE));
}
/**

View File

@ -10,7 +10,7 @@
* Menu callback for admin/structure/block/demo.
*/
function block_admin_demo($theme = NULL) {
drupal_add_css(drupal_get_path('module', 'block') . '/block.css', array('preprocess' => FALSE));
drupal_add_css(drupal_get_path('module', 'block') . '/block.css');
return '';
}
@ -53,7 +53,7 @@ function block_admin_display($theme = NULL) {
*/
function block_admin_display_form($form, &$form_state, $blocks, $theme) {
drupal_add_css(drupal_get_path('module', 'block') . '/block.css', array('preprocess' => FALSE));
drupal_add_css(drupal_get_path('module', 'block') . '/block.css');
$block_regions = system_region_list($theme, REGIONS_VISIBLE) + array(BLOCK_REGION_NONE => '<' . t('none') . '>');

View File

@ -222,7 +222,7 @@ function book_admin_paths() {
* Implements hook_init().
*/
function book_init() {
drupal_add_css(drupal_get_path('module', 'book') . '/book.css');
drupal_add_css(drupal_get_path('module', 'book') . '/book.css', array('preprocess' => TRUE));
}
/**

View File

@ -189,7 +189,7 @@ function color_scheme_form($complete_form, &$form_state, $theme) {
),
// Add custom CSS.
'css' => array(
$base . '/color.css' => array('preprocess' => FALSE),
$base . '/color.css' => array(),
),
// Add custom JavaScript.
'js' => array(

View File

@ -289,6 +289,13 @@ function comment_menu() {
return $items;
}
/**
* Implements hook_init().
*/
function comment_init() {
drupal_add_css(drupal_get_path('module', 'comment') . '/comment.css', array('preprocess' => TRUE));
}
/**
* Implements hook_menu_alter().
*/
@ -716,7 +723,6 @@ function comment_node_page_additions($node) {
$comments = comment_load_multiple($cids);
comment_prepare_thread($comments);
$build = comment_view_multiple($comments, $node);
$build['#attached']['css'][] = drupal_get_path('module', 'comment') . '/comment.css';
$build['pager']['#theme'] = 'pager';
$additions['comments'] = $build;
}

View File

@ -91,7 +91,7 @@ function dblog_menu() {
function dblog_init() {
if (arg(0) == 'admin' && arg(1) == 'reports') {
// Add the CSS for this module
drupal_add_css(drupal_get_path('module', 'dblog') . '/dblog.css', array('preprocess' => FALSE));
drupal_add_css(drupal_get_path('module', 'dblog') . '/dblog.css');
}
}

View File

@ -542,7 +542,6 @@ function field_attach_form($entity_type, $entity, &$form, &$form_state, $langcod
// Add custom weight handling.
list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
$form['#attached']['css'][] = drupal_get_path('module', 'field') . '/theme/field.css';
$form['#pre_render'][] = '_field_extra_fields_pre_render';
$form['#entity_type'] = $entity_type;
$form['#bundle'] = $bundle;
@ -1129,9 +1128,6 @@ function field_attach_view($entity_type, $entity, $view_mode, $langcode = NULL)
$output['#entity_type'] = $entity_type;
$output['#bundle'] = $bundle;
// Include CSS styles.
$output['#attached']['css'][] = drupal_get_path('module', 'field') . '/theme/field.css';
// Let other modules alter the renderable array.
$context = array(
'entity_type' => $entity_type,

View File

@ -165,6 +165,13 @@ function field_theme() {
);
}
/**
* Implements hook_init().
*/
function field_init() {
drupal_add_css(drupal_get_path('module', 'field') . '/theme/field.css', array('preprocess' => TRUE));
}
/**
* Implements hook_cron().
*
@ -811,7 +818,6 @@ function field_view_field($entity_type, $entity, $field_name, $display = array()
if (isset($result[$field_name])) {
$output = $result[$field_name];
$output['#attached']['css'][] = drupal_get_path('module', 'field') . '/theme/field.css';
}
}

View File

@ -221,7 +221,7 @@ function forum_menu_local_tasks_alter(&$data, $router_item, $root_path) {
* Implements hook_init().
*/
function forum_init() {
drupal_add_css(drupal_get_path('module', 'forum') . '/forum.css');
drupal_add_css(drupal_get_path('module', 'forum') . '/forum.css', array('preprocess' => TRUE));
}
/**

View File

@ -11,7 +11,7 @@
*/
function help_main() {
// Add CSS
drupal_add_css(drupal_get_path('module', 'help') . '/help.css', array('preprocess' => FALSE));
drupal_add_css(drupal_get_path('module', 'help') . '/help.css');
$output = '<h2>' . t('Help topics') . '</h2><p>' . t('Help is available on the following items:') . '</p>' . help_links_as_list();
return $output;
}

View File

@ -16,7 +16,7 @@ function image_style_list() {
$page['image_style_list'] = array(
'#markup' => theme('image_style_list', array('styles' => $styles)),
'#attached' => array(
'css' => array(drupal_get_path('module', 'image') . '/image.admin.css' => array('preprocess' => FALSE)),
'css' => array(drupal_get_path('module', 'image') . '/image.admin.css' => array()),
),
);
@ -48,7 +48,7 @@ function image_style_form($form, &$form_state, $style) {
$form_state['image_style'] = $style;
$form['#tree'] = TRUE;
$form['#attached']['css'][drupal_get_path('module', 'image') . '/image.admin.css'] = array('preprocess' => FALSE);
$form['#attached']['css'][drupal_get_path('module', 'image') . '/image.admin.css'] = array();
// Show the thumbnail preview.
$form['preview'] = array(
@ -383,7 +383,7 @@ function image_effect_form($form, &$form_state, $style, $effect) {
}
$form['#tree'] = TRUE;
$form['#attached']['css'][drupal_get_path('module', 'image') . '/image.admin.css'] = array('preprocess' => FALSE);
$form['#attached']['css'][drupal_get_path('module', 'image') . '/image.admin.css'] = array();
if (function_exists($effect['form callback'])) {
$form['data'] = call_user_func($effect['form callback'], $effect['data']);
}

View File

@ -784,7 +784,7 @@ function locale_translate_overview_screen() {
*/
function locale_translate_seek_screen() {
// Add CSS.
drupal_add_css(drupal_get_path('module', 'locale') . '/locale.css', array('preprocess' => FALSE));
drupal_add_css(drupal_get_path('module', 'locale') . '/locale.css');
$elements = drupal_get_form('locale_translation_filter_form');
$output = drupal_render($elements);

View File

@ -1998,7 +1998,7 @@ function _node_custom_theme() {
* Implements hook_init().
*/
function node_init() {
drupal_add_css(drupal_get_path('module', 'node') . '/node.css');
drupal_add_css(drupal_get_path('module', 'node') . '/node.css', array('preprocess' => TRUE));
}
function node_last_changed($nid) {

View File

@ -31,7 +31,7 @@ function poll_help($path, $arg) {
* Implements hook_init().
*/
function poll_init() {
drupal_add_css(drupal_get_path('module', 'poll') . '/poll.css');
drupal_add_css(drupal_get_path('module', 'poll') . '/poll.css', array('preprocess' => TRUE));
}
/**

View File

@ -97,6 +97,13 @@ function search_help($path, $arg) {
}
}
/**
* Implements hook_init().
*/
function search_init() {
drupal_add_css(drupal_get_path('module', 'search') . '/search.css', array('preprocess' => TRUE));
}
/**
* Implements hook_theme().
*/
@ -875,9 +882,6 @@ function search_get_keys() {
* An HTML string containing the search form.
*/
function search_form($form, &$form_state, $action = '', $keys = '', $type = NULL, $prompt = NULL) {
// Add CSS
drupal_add_css(drupal_get_path('module', 'search') . '/search.css', array('preprocess' => FALSE));
if (!$action) {
$action = 'search/' . $type;
}

View File

@ -53,7 +53,7 @@ class AJAXFrameworkTestCase extends AJAXTestCase {
* Test behavior of ajax_render_error().
*/
function testAJAXRenderError() {
$result = $this->drupalGetAJAX('ajax-test/render-error');
$result = $this->discardSettings($this->drupalGetAJAX('ajax-test/render-error'));
// Verify default error message.
$this->assertEqual($result[0]['command'], 'alert', t('ajax_render_error() invokes alert command.'));
$this->assertEqual($result[0]['text'], t('An error occurred while handling the request: The server received invalid input.'), t('Default error message is output.'));
@ -61,7 +61,7 @@ class AJAXFrameworkTestCase extends AJAXTestCase {
$edit = array(
'message' => 'Custom error message.',
);
$result = $this->drupalGetAJAX('ajax-test/render-error', array('query' => $edit));
$result = $this->discardSettings($this->drupalGetAJAX('ajax-test/render-error', array('query' => $edit)));
$this->assertEqual($result[0]['text'], $edit['message'], t('Custom error message is output.'));
}
}

View File

@ -621,7 +621,7 @@ class CascadingStylesheetsTestCase extends DrupalWebTestCase {
function testRenderInlinePreprocess() {
$css = 'body { padding: 0px; }';
$css_preprocessed = '<style type="text/css" media="all">' . drupal_load_stylesheet_content($css, TRUE) . '</style>';
drupal_add_css($css, 'inline');
drupal_add_css($css, array('type' => 'inline', 'preprocess' => TRUE));
$styles = drupal_get_css();
$this->assertEqual(trim($styles), $css_preprocessed, t('Rendering preprocessed inline CSS adds it to the page.'));
}
@ -631,7 +631,7 @@ class CascadingStylesheetsTestCase extends DrupalWebTestCase {
*/
function testRenderInlineNoPreprocess() {
$css = 'body { padding: 0px; }';
drupal_add_css($css, array('type' => 'inline', 'preprocess' => FALSE));
drupal_add_css($css, array('type' => 'inline'));
$styles = drupal_get_css();
$this->assertTrue(strpos($styles, $css) > 0, t('Rendering non-preprocessed inline CSS adds it to the page.'));
}
@ -641,7 +641,7 @@ class CascadingStylesheetsTestCase extends DrupalWebTestCase {
*/
function testRenderInlineFullPage() {
$css = 'body { font-size: 254px; }';
$expected = 'font-size:254px;';
$expected = $css;
// Create a node, using the PHP filter that tests drupal_add_css().
$php_format_id = db_query_range('SELECT format FROM {filter_format} WHERE name = :name', 0, 1, array(':name' => 'PHP code'))->fetchField();

View File

@ -1066,6 +1066,7 @@ function system_library() {
'js' => array(
'misc/jquery.js' => array('weight' => JS_LIBRARY - 20),
),
'preprocess' => TRUE,
);
// jQuery Once.
@ -1076,6 +1077,7 @@ function system_library() {
'js' => array(
'misc/jquery.once.js' => array('weight' => JS_LIBRARY - 19),
),
'preprocess' => TRUE,
);
// jQuery Form Plugin.
@ -1120,7 +1122,7 @@ function system_library() {
'misc/farbtastic/farbtastic.js' => array(),
),
'css' => array(
'misc/farbtastic/farbtastic.css' => array('preprocess' => FALSE),
'misc/farbtastic/farbtastic.css' => array(),
),
);
@ -1816,14 +1818,15 @@ function _system_filetransfer_backend_form_common() {
* Implements hook_init().
*/
function system_init() {
$path = drupal_get_path('module', 'system');
// Add the CSS for this module.
if (arg(0) == 'admin' || (variable_get('node_admin_theme', '0') && arg(0) == 'node' && (arg(1) == 'add' || arg(2) == 'edit' || arg(2) == 'delete'))) {
drupal_add_css(drupal_get_path('module', 'system') . '/admin.css', array('weight' => CSS_SYSTEM));
drupal_add_css($path . '/admin.css', array('weight' => CSS_SYSTEM));
}
drupal_add_css(drupal_get_path('module', 'system') . '/system.css', array('weight' => CSS_SYSTEM));
drupal_add_css(drupal_get_path('module', 'system') . '/system-behavior.css', array('weight' => CSS_SYSTEM));
drupal_add_css(drupal_get_path('module', 'system') . '/system-menus.css', array('weight' => CSS_SYSTEM));
drupal_add_css(drupal_get_path('module', 'system') . '/system-messages.css', array('weight' => CSS_SYSTEM));
drupal_add_css($path . '/system.css', array('weight' => CSS_SYSTEM, 'preprocess' => TRUE));
drupal_add_css($path . '/system-behavior.css', array('weight' => CSS_SYSTEM, 'preprocess' => TRUE));
drupal_add_css($path . '/system-menus.css', array('weight' => CSS_SYSTEM, 'preprocess' => TRUE));
drupal_add_css($path . '/system-messages.css', array('weight' => CSS_SYSTEM, 'preprocess' => TRUE));
// Ignore slave database servers for this request.

View File

@ -113,7 +113,7 @@ function tracker_page($account = NULL, $set_title = FALSE) {
'#theme' => 'table',
'#empty' => t('No content available.'),
'#attached' => array(
'css' => array(drupal_get_path('module', 'tracker') . '/tracker.css' => array('preprocess' => FALSE)),
'css' => array(drupal_get_path('module', 'tracker') . '/tracker.css' => array()),
),
);
$page['pager'] = array(

View File

@ -1784,7 +1784,7 @@ function user_menu_site_status_alter(&$menu_site_status, $path) {
* Implements hook_init().
*/
function user_init() {
drupal_add_css(drupal_get_path('module', 'user') . '/user.css');
drupal_add_css(drupal_get_path('module', 'user') . '/user.css', array('preprocess' => TRUE));
}
/**

View File

@ -23,8 +23,8 @@ function bartik_preprocess_html(&$variables) {
}
// Add conditional stylesheets for IE
drupal_add_css(path_to_theme() . '/css/ie.css', array('weight' => CSS_THEME, 'browsers' => array('IE' => 'lte IE 7', '!IE' => FALSE), 'preprocess' => FALSE));
drupal_add_css(path_to_theme() . '/css/ie6.css', array('weight' => CSS_THEME, 'browsers' => array('IE' => 'IE 6', '!IE' => FALSE), 'preprocess' => FALSE));
drupal_add_css(path_to_theme() . '/css/ie.css', array('weight' => CSS_THEME, 'browsers' => array('IE' => 'lte IE 7', '!IE' => FALSE)));
drupal_add_css(path_to_theme() . '/css/ie6.css', array('weight' => CSS_THEME, 'browsers' => array('IE' => 'IE 6', '!IE' => FALSE)));
}
/**

View File

@ -42,7 +42,7 @@ function garland_preprocess_html(&$vars) {
$vars['classes_array'][] = 'fluid-width';
}
// Add conditional CSS for IE6.
drupal_add_css(path_to_theme() . '/fix-ie.css', array('weight' => CSS_THEME, 'browsers' => array('IE' => 'lt IE 7', '!IE' => FALSE), 'preprocess' => FALSE));
drupal_add_css(path_to_theme() . '/fix-ie.css', array('weight' => CSS_THEME, 'browsers' => array('IE' => 'lt IE 7', '!IE' => FALSE)));
}
/**

View File

@ -18,9 +18,9 @@ function seven_preprocess_maintenance_page(&$vars) {
*/
function seven_preprocess_html(&$vars) {
// Add conditional CSS for IE8 and below.
drupal_add_css(path_to_theme() . '/ie.css', array('weight' => CSS_THEME, 'browsers' => array('IE' => 'lte IE 8', '!IE' => FALSE), 'preprocess' => FALSE));
drupal_add_css(path_to_theme() . '/ie.css', array('weight' => CSS_THEME, 'browsers' => array('IE' => 'lte IE 8', '!IE' => FALSE)));
// Add conditional CSS for IE6.
drupal_add_css(path_to_theme() . '/ie6.css', array('weight' => CSS_THEME, 'browsers' => array('IE' => 'lt IE 7', '!IE' => FALSE), 'preprocess' => FALSE));
drupal_add_css(path_to_theme() . '/ie6.css', array('weight' => CSS_THEME, 'browsers' => array('IE' => 'lt IE 7', '!IE' => FALSE)));
}
/**