Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
This paste will be private.
/** * Returns a themed representation of all stylesheets that should be attached to the page. * It loads the CSS in order, with 'core' CSS first, then 'module' CSS, then 'theme' CSS files. * This ensures proper cascading of styles for easy overriding in modules and themes. * * @param $css * (optional) An array of CSS files. If no array is provided, the default stylesheets array is used instead. * @return * A string of XHTML CSS tags. */ function drupal_get_css($css = NULL) { $output = ''; if (!isset($css)) { $css = drupal_add_css(); } $no_module_preprocess = ''; $no_theme_preprocess = ''; $preprocess_css = variable_get('preprocess_css', FALSE); $directory = file_directory_path(); $is_writable = is_dir($directory) && is_writable($directory) && (variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC) == FILE_DOWNLOADS_PUBLIC); global $theme_info; // Read from theme's .info file. if (isset($theme_info->info['styleoverrides'])) { $style_overrides = $theme_info->info['styleoverrides']; } foreach ($css as $media => $types) { // If CSS preprocessing is off, we still need to output the styles. // Additionally, go through any remaining styles if CSS preprocessing is on and output the non-cached ones. foreach ($types as $type => $files) { foreach ($types[$type] as $file => $preprocess) { // Allow themes to provide module overrides. if ($type == 'module' && isset($style_overrides)) { // Module styles will be rebuilt to maintain original order. unset($types[$type][$file]); // Get the sub-path and style sheet for the module after "modules/" since it can be installed in multiple locations. $sub_path_style = substr(strstr($file, 'modules/'), 8); // Get the style sheet name. $style = substr($sub_path_style, strpos($sub_path_style, '/') + 1); // Check both strings for the override. foreach (array($sub_path_style, $style) as $override) { if (isset($style_overrides[$override]) && file_exists($override_file = path_to_theme() .'/'. $style_overrides[$override])) { $file = $override_file; break; } } // This rebuilds the styles for modules. $types[$type][$file] = $preprocess; } if (!$preprocess || !($is_writable && $preprocess_css)) { // If a CSS file is not to be preprocessed and it's a module CSS file, it needs to *always* appear at the *top*, // regardless of whether preprocessing is on or off. if (!$preprocess && $type == 'module') { $no_module_preprocess .= '<link type="text/css" rel="stylesheet" media="'. $media .'" href="'. base_path() . $file .'" />'."\n"; } // If a CSS file is not to be preprocessed and it's a theme CSS file, it needs to *always* appear at the *bottom*, // regardless of whether preprocessing is on or off. else if (!$preprocess && $type == 'theme') { $no_theme_preprocess .= '<link type="text/css" rel="stylesheet" media="'. $media .'" href="'. base_path() . $file .'" />'."\n"; } else { $output .= '<link type="text/css" rel="stylesheet" media="'. $media .'" href="'. base_path() . $file . '" />'."\n"; } } } } if ($is_writable && $preprocess_css) { $filename = md5(serialize($types)) .'.css'; $preprocess_file = drupal_build_css_cache($types, $filename); $output .= '<link type="text/css" rel="stylesheet" media="'. $media .'" href="'. base_path() . $preprocess_file .'" />'."\n"; } } return $no_module_preprocess . $output . $no_theme_preprocess; }
From the Design Piracy series on my blog: