function csscrush_filter(CssCrush_Rule $rule) { if ($rule->propertyCount('-ms-filter') < 1) { return; } $filter_prefix = 'progid:DXImageTransform.Microsoft.'; $new_set = array(); foreach ($rule as $declaration) { if ($declaration->skip or $declaration->property !== '-ms-filter') { $new_set[] = $declaration; continue; } $list = array_map('trim', explode(',', $declaration->value)); foreach ($list as &$item) { if (strpos($item, $filter_prefix) !== 0 and strpos($item, 'alpha') !== 0) { $item = $filter_prefix . ucfirst($item); } } $declaration->value = implode(',', $list); if (!$rule->propertyCount('zoom')) { // Filters need hasLayout $new_set[] = $rule->createDeclaration('zoom', 1); } // Quoted version for -ms-filter IE >= 8 $new_set[] = $rule->createDeclaration('-ms-filter', "\"{$declaration->value}\""); // Star escaped property for IE < 8 $new_set[] = $rule->createDeclaration('*filter', $declaration->value); } $rule->declarations = $new_set; }
function csscrush_opacity(CssCrush_Rule $rule) { if ($rule->propertyCount('opacity') < 1) { return; } $new_set = array(); foreach ($rule as $declaration) { $new_set[] = $declaration; if ($declaration->skip or $declaration->property != 'opacity') { continue; } $opacity = (double) $declaration->value; $opacity = round($opacity * 100); if (!$rule->propertyCount('zoom')) { // Filters need hasLayout $new_set[] = $rule->createDeclaration('zoom', 1); } $value = "alpha(opacity={$opacity})"; $new_set[] = $rule->createDeclaration('-ms-filter', "\"{$value}\""); $new_set[] = $rule->createDeclaration('*filter', $value); } $rule->declarations = $new_set; }
function csscrush_minheight(CssCrush_Rule $rule) { if ($rule->propertyCount('min-height') < 1) { return; } $new_set = array(); foreach ($rule as $declaration) { $new_set[] = $declaration; if ($declaration->skip or $declaration->property !== 'min-height') { continue; } $new_set[] = $rule->createDeclaration('_height', $declaration->value); } $rule->declarations = $new_set; }
function csscrush_clip(CssCrush_Rule $rule) { // Assume it's been dealt with if the property occurs more than once if ($rule->propertyCount('clip') !== 1) { return; } $new_set = array(); foreach ($rule as $declaration) { $new_set[] = $declaration; if ($declaration->skip or $declaration->property !== 'clip') { continue; } $new_set[] = $rule->createDeclaration('*clip', str_replace(',', ' ', $rule->getDeclarationValue($declaration))); } $rule->declarations = $new_set; }
function csscrush_display_inlineblock(CssCrush_Rule $rule) { if ($rule->propertyCount('display') < 1) { return; } $new_set = array(); foreach ($rule as $declaration) { $new_set[] = $declaration; $is_display = $declaration->property === 'display'; if ($declaration->skip or !$is_display or $is_display and $declaration->value !== 'inline-block') { continue; } $new_set[] = $rule->createDeclaration('*display', 'inline'); $new_set[] = $rule->createDeclaration('*zoom', 1); } $rule->declarations = $new_set; }