Skip to content
Snippets Groups Projects
Verified Commit d587699e authored by Alex Pott's avatar Alex Pott
Browse files

Issue #2695871 by catch, borisson_, alexpott: Aggregation creates two extra...

Issue #2695871 by catch, borisson_, alexpott: Aggregation creates two extra aggregates when it encounters {media: screen} in a library declaration
parent 7362bc50
No related branches found
No related tags found
38 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!4868Issue #1428520: Improve menu parent link selection,!4289Issue #1344552 by marcingy, Niklas Fiekas, Ravi.J, aleevas, Eduardo Morales...,!4114Issue #2707291: Disable body-level scrolling when a dialog is open as a modal,!4100Issue #3249600: Add support for PHP 8.1 Enums as allowed values for list_* data types,!3630Issue #2815301 by Chi, DanielVeza, kostyashupenko, smustgrave: Allow to create...,!3600Issue #3344629: Passing null to parameter #1 ($haystack) of type string is deprecated,!3291Issue #3336463: Rewrite rules for gzipped CSS and JavaScript aggregates never match,!3102Issue #3164428 by DonAtt, longwave, sahil.goyal, Anchal_gupta, alexpott: Use...,!2853#3274419 Makes BaseFieldOverride inherit the internal property from the base field.,!2661Issue #3295972 by Munavijayalakshmi, nitin_lama, arunkumark, cilefen,...,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2334Issue #3228209: Add hasRole() method to AccountInterface,!2074Issue #2707689: NodeForm::actions() checks for delete access on new entities,!2062Issue #3246454: Add weekly granularity to views date sort,!1591Issue #3199697: Add JSON:API Translation experimental module,!1484Exposed filters get values from URL when Ajax is on,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1254Issue #3238915: Refactor (if feasible) uses of the jQuery ready function to use VanillaJS,!1162Issue #3100350: Unable to save '/' root path alias,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!957Added throwing of InvalidPluginDefinitionException from getDefinition().,!925Issue #2339235: Remove taxonomy hard dependency on node module,!877Issue #2708101: Default value for link text is not saved,!873Issue #2875228: Site install not using batch API service,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links,!844Resolve #3036010 "Updaters",!712Issue #2909128: Autocomplete intermittent on Chrome Android,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.,!30Issue #3182188: Updates composer usage to point at ./vendor/bin/composer
......@@ -10,10 +10,13 @@ class CssCollectionGrouper implements AssetCollectionGrouperInterface {
/**
* {@inheritdoc}
*
* Puts multiple items into the same group if they are groupable and if they
* are for the same 'media'. Items of the 'file' type are groupable if their
* 'preprocess' flag is TRUE, and items of the 'external' type are never
* groupable.
* Puts multiple items into the same group if they are groupable. Items of the
* 'file' type are groupable if their 'preprocess' flag is TRUE, and items of
* the 'external' type are never groupable. Items with a media type of 'print'
* will be put into their own group so that they are not loaded on regular
* page requests. Items with a media type of 'all' or 'screen' will be grouped
* together (with media queries where necessary), to minimize the number of
* separate aggregates.
*
* Also ensures that the process of grouping items does not change their
* relative order. This requirement may result in multiple groups for the same
......@@ -46,8 +49,10 @@ public function group(array $css_assets) {
case 'file':
// Group file items if their 'preprocess' flag is TRUE.
// Help ensure maximum reuse of aggregate files by only grouping
// together items that share the same 'group' value.
$group_keys = $item['preprocess'] ? [$item['type'], $item['group'], $item['media']] : FALSE;
// together items that share the same 'group' value. The CSS optimizer
// adds inline 'media' statements for everything except 'print', so
// only vary groups based on that.
$group_keys = $item['preprocess'] ? [$item['type'], $item['group'], $item['media'] === 'print'] : FALSE;
break;
case 'external':
......@@ -65,6 +70,9 @@ public function group(array $css_assets) {
// properties are unique to the item and should not be carried over to
// the group.
$groups[$i] = $item;
if ($item['media'] !== 'print') {
$groups[$i]['media'] = 'all';
}
unset($groups[$i]['data'], $groups[$i]['weight'], $groups[$i]['basename']);
$groups[$i]['items'] = [];
$current_group_keys = $group_keys ? $group_keys : NULL;
......
......@@ -80,7 +80,9 @@ public function clean($contents) {
*/
protected function processFile($css_asset) {
$contents = $this->loadFile($css_asset['data'], TRUE);
if ($css_asset['media'] !== 'print' && $css_asset['media'] !== 'all') {
$contents = '@media ' . $css_asset['media'] . '{' . $contents . '}' . "\n";
}
$contents = $this->clean($contents);
// Get the parent directory of this file, relative to the Drupal root.
......
......@@ -52,7 +52,7 @@ public function testGrouper() {
'group' => -100,
'type' => 'file',
'weight' => 0.004,
'media' => 'all',
'media' => 'screen',
'preprocess' => TRUE,
'data' => 'core/misc/ui/themes/base/jquery.ui.core.css',
'basename' => 'jquery.ui.core.css',
......
......@@ -67,6 +67,19 @@ public function providerTestOptimize() {
],
file_get_contents($absolute_path . 'css_input_without_import.css.optimized.css'),
],
[
[
'group' => -100,
'type' => 'file',
'weight' => 0.012,
'media' => 'screen',
'preprocess' => TRUE,
'data' => $path . 'css_input_simple.css',
'browsers' => ['IE' => TRUE, '!IE' => TRUE],
'basename' => 'css_input_simple.css',
],
file_get_contents($absolute_path . 'css_input_simple_with_media.css.optimized.css'),
],
// File. Tests:
// - Proper URLs in imported files. (https://www.drupal.org/node/265719)
// - A background image with relative paths, which must be rewritten.
......
body{margin:0;padding:0;background:#edf5fa;font:76%/170% Verdana,sans-serif;color:#494949;}
@media screen{body{margin:0;padding:0;background:#edf5fa;font:76%/170% Verdana,sans-serif;color:#494949;}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment