diff options
author | Florian Dold <florian.dold@gmail.com> | 2018-09-20 02:56:13 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2018-09-20 02:56:13 +0200 |
commit | bbff7403fbf46f9ad92240ac213df8d30ef31b64 (patch) | |
tree | c58400ec5124da1c7d56b01aea83309f80a56c3b /node_modules/clean-css/lib/optimizer/level-2 | |
parent | 003fb34971cf63466184351b4db5f7c67df4f444 (diff) |
update packages
Diffstat (limited to 'node_modules/clean-css/lib/optimizer/level-2')
6 files changed, 242 insertions, 27 deletions
diff --git a/node_modules/clean-css/lib/optimizer/level-2/break-up.js b/node_modules/clean-css/lib/optimizer/level-2/break-up.js index b48ccf23d..5301cb898 100644 --- a/node_modules/clean-css/lib/optimizer/level-2/break-up.js +++ b/node_modules/clean-css/lib/optimizer/level-2/break-up.js @@ -105,7 +105,7 @@ function animation(property, compactable, validator) { } else if (validator.isTime(value[1]) && !delaySet) { delay.value = [value]; delaySet = true; - } else if ((validator.isGlobal(value[1]) || validator.isAnimationTimingFunction(value[1])) && !timingSet) { + } else if ((validator.isGlobal(value[1]) || validator.isTimingFunction(value[1])) && !timingSet) { timing.value = [value]; timingSet = true; } else if ((validator.isAnimationIterationCountKeyword(value[1]) || validator.isPositiveNumber(value[1])) && !iterationSet) { @@ -299,6 +299,10 @@ function font(property, compactable, validator) { return components; } + if (values.length < 2 || !_anyIsFontSize(values, validator) || !_anyIsFontFamily(values, validator)) { + throw new InvalidPropertyError('Invalid font values at ' + formatPosition(property.all[property.position][1][2][0]) + '. Ignoring.'); + } + if (values.length > 1 && _anyIsInherit(values)) { throw new InvalidPropertyError('Invalid font values at ' + formatPosition(values[0][2][0]) + '. Ignoring.'); } @@ -377,6 +381,36 @@ function font(property, compactable, validator) { return components; } +function _anyIsFontSize(values, validator) { + var value; + var i, l; + + for (i = 0, l = values.length; i < l; i++) { + value = values[i]; + + if (validator.isFontSizeKeyword(value[1]) || validator.isUnit(value[1]) && !validator.isDynamicUnit(value[1]) || validator.isFunction(value[1])) { + return true; + } + } + + return false; +} + +function _anyIsFontFamily(values, validator) { + var value; + var i, l; + + for (i = 0, l = values.length; i < l; i++) { + value = values[i]; + + if (validator.isIdentifier(value[1])) { + return true; + } + } + + return false; +} + function fourValues(property, compactable) { var componentNames = compactable[property.name].components; var components = []; @@ -489,6 +523,53 @@ function listStyle(property, compactable, validator) { return components; } +function transition(property, compactable, validator) { + var prop = _wrapDefault(property.name + '-property', property, compactable); + var duration = _wrapDefault(property.name + '-duration', property, compactable); + var timing = _wrapDefault(property.name + '-timing-function', property, compactable); + var delay = _wrapDefault(property.name + '-delay', property, compactable); + var components = [prop, duration, timing, delay]; + var values = property.value; + var value; + var durationSet = false; + var delaySet = false; + var propSet = false; + var timingSet = false; + var i; + var l; + + if (property.value.length == 1 && property.value[0][1] == 'inherit') { + prop.value = duration.value = timing.value = delay.value = property.value; + return components; + } + + if (values.length > 1 && _anyIsInherit(values)) { + throw new InvalidPropertyError('Invalid animation values at ' + formatPosition(values[0][2][0]) + '. Ignoring.'); + } + + for (i = 0, l = values.length; i < l; i++) { + value = values[i]; + + if (validator.isTime(value[1]) && !durationSet) { + duration.value = [value]; + durationSet = true; + } else if (validator.isTime(value[1]) && !delaySet) { + delay.value = [value]; + delaySet = true; + } else if ((validator.isGlobal(value[1]) || validator.isTimingFunction(value[1])) && !timingSet) { + timing.value = [value]; + timingSet = true; + } else if (validator.isIdentifier(value[1]) && !propSet) { + prop.value = [value]; + propSet = true; + } else { + throw new InvalidPropertyError('Invalid animation value at ' + formatPosition(value[2][0]) + '. Ignoring.'); + } + } + + return components; +} + function widthStyleColor(property, compactable, validator) { var descriptor = compactable[property.name]; var components = [ @@ -558,5 +639,6 @@ module.exports = { fourValues: fourValues, listStyle: listStyle, multiplex: multiplex, - outline: widthStyleColor + outline: widthStyleColor, + transition: transition }; diff --git a/node_modules/clean-css/lib/optimizer/level-2/can-override.js b/node_modules/clean-css/lib/optimizer/level-2/can-override.js index 10d3bba17..3dae08f0e 100644 --- a/node_modules/clean-css/lib/optimizer/level-2/can-override.js +++ b/node_modules/clean-css/lib/optimizer/level-2/can-override.js @@ -20,16 +20,6 @@ function animationName(validator, value1, value2) { return validator.isAnimationNameKeyword(value2) || validator.isIdentifier(value2); } -function animationTimingFunction(validator, value1, value2) { - if (!understandable(validator, value1, value2, 0, true) && !(validator.isAnimationTimingFunction(value2) || validator.isGlobal(value2))) { - return false; - } else if (validator.isVariable(value1) && validator.isVariable(value2)) { - return true; - } - - return validator.isAnimationTimingFunction(value2) || validator.isGlobal(value2); -} - function areSameFunction(validator, value1, value2) { if (!validator.isFunction(value1) || !validator.isFunction(value2)) { return false; @@ -129,14 +119,22 @@ function keywordWithGlobal(propertyName) { }; } +function propertyName(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !validator.isIdentifier(value2)) { + return false; + } else if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + + return validator.isIdentifier(value2); +} + function sameFunctionOrValue(validator, value1, value2) { return areSameFunction(validator, value1, value2) ? true : value1 === value2; } - - function textShadow(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !(validator.isUnit(value2) || validator.isColor(value2) || validator.isGlobal(value2))) { return false; @@ -165,6 +163,16 @@ function time(validator, value1, value2) { return sameFunctionOrValue(validator, value1, value2); } +function timingFunction(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !(validator.isTimingFunction(value2) || validator.isGlobal(value2))) { + return false; + } else if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } + + return validator.isTimingFunction(value2) || validator.isGlobal(value2); +} + function unit(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !validator.isUnit(value2)) { return false; @@ -191,6 +199,24 @@ function unitOrKeywordWithGlobal(propertyName) { }; } +function unitOrNumber(validator, value1, value2) { + if (!understandable(validator, value1, value2, 0, true) && !(validator.isUnit(value2) || validator.isNumber(value2))) { + return false; + } else if (validator.isVariable(value1) && validator.isVariable(value2)) { + return true; + } else if ((validator.isUnit(value1) || validator.isNumber(value1)) && !(validator.isUnit(value2) || validator.isNumber(value2))) { + return false; + } else if (validator.isUnit(value2) || validator.isNumber(value2)) { + return true; + } else if (validator.isUnit(value1) || validator.isNumber(value1)) { + return false; + } else if (validator.isFunction(value1) && !validator.isPrefixed(value1) && validator.isFunction(value2) && !validator.isPrefixed(value2)) { + return true; + } + + return sameFunctionOrValue(validator, value1, value2); +} + function zIndex(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !validator.isZIndex(value2)) { return false; @@ -206,8 +232,11 @@ module.exports = { color: color, components: components, image: image, + propertyName: propertyName, time: time, - unit: unit + timingFunction: timingFunction, + unit: unit, + unitOrNumber: unitOrNumber }, property: { animationDirection: keywordWithGlobal('animation-direction'), @@ -215,7 +244,6 @@ module.exports = { animationIterationCount: animationIterationCount, animationName: animationName, animationPlayState: keywordWithGlobal('animation-play-state'), - animationTimingFunction: animationTimingFunction, backgroundAttachment: keyword('background-attachment'), backgroundClip: keywordWithGlobal('background-clip'), backgroundOrigin: keyword('background-origin'), diff --git a/node_modules/clean-css/lib/optimizer/level-2/compactable.js b/node_modules/clean-css/lib/optimizer/level-2/compactable.js index 97e7e2aca..73f42a10e 100644 --- a/node_modules/clean-css/lib/optimizer/level-2/compactable.js +++ b/node_modules/clean-css/lib/optimizer/level-2/compactable.js @@ -38,7 +38,7 @@ var compactable = { 'animation': { canOverride: canOverride.generic.components([ canOverride.generic.time, - canOverride.property.animationTimingFunction, + canOverride.generic.timingFunction, canOverride.generic.time, canOverride.property.animationIterationCount, canOverride.property.animationDirection, @@ -99,6 +99,7 @@ var compactable = { ], defaultValue: '0s', intoMultiplexMode: 'real', + keepUnlessDefault: 'animation-delay', vendorPrefixes: [ '-moz-', '-o-', @@ -158,7 +159,7 @@ var compactable = { ] }, 'animation-timing-function': { - canOverride: canOverride.property.animationTimingFunction, + canOverride: canOverride.generic.timingFunction, componentOf: [ 'animation' ], @@ -680,7 +681,7 @@ var compactable = { defaultValue: 'auto' }, 'line-height': { - canOverride: canOverride.generic.unit, + canOverride: canOverride.generic.unitOrNumber, defaultValue: 'normal', shortestValue: '0' }, @@ -917,6 +918,82 @@ var compactable = { '-webkit-' ] }, + 'transition': { + breakUp: breakUp.multiplex(breakUp.transition), + canOverride: canOverride.generic.components([ + canOverride.property.transitionProperty, + canOverride.generic.time, + canOverride.generic.timingFunction, + canOverride.generic.time + ]), + components: [ + 'transition-property', + 'transition-duration', + 'transition-timing-function', + 'transition-delay' + ], + defaultValue: 'none', + restore: restore.multiplex(restore.withoutDefaults), + shorthand: true, + vendorPrefixes: [ + '-moz-', + '-o-', + '-webkit-' + ] + }, + 'transition-delay': { + canOverride: canOverride.generic.time, + componentOf: [ + 'transition' + ], + defaultValue: '0s', + intoMultiplexMode: 'real', + vendorPrefixes: [ + '-moz-', + '-o-', + '-webkit-' + ] + }, + 'transition-duration': { + canOverride: canOverride.generic.time, + componentOf: [ + 'transition' + ], + defaultValue: '0s', + intoMultiplexMode: 'real', + vendorPrefixes: [ + '-moz-', + '-o-', + '-webkit-' + ] + }, + 'transition-property': { + canOverride: canOverride.generic.propertyName, + componentOf: [ + 'transition' + ], + defaultValue: 'all', + intoMultiplexMode: 'placeholder', + placeholderValue: '_', // it's a short value that won't match any property and still be a valid `transition-property` + vendorPrefixes: [ + '-moz-', + '-o-', + '-webkit-' + ] + }, + 'transition-timing-function': { + canOverride: canOverride.generic.timingFunction, + componentOf: [ + 'transition' + ], + defaultValue: 'ease', + intoMultiplexMode: 'real', + vendorPrefixes: [ + '-moz-', + '-o-', + '-webkit-' + ] + }, 'vertical-align': { canOverride: canOverride.property.verticalAlign, defaultValue: 'baseline' @@ -955,6 +1032,10 @@ function cloneDescriptor(propertyName, prefix) { }); } + if ('keepUnlessDefault' in clonedDescriptor) { + clonedDescriptor.keepUnlessDefault = prefix + clonedDescriptor.keepUnlessDefault; + } + return clonedDescriptor; } diff --git a/node_modules/clean-css/lib/optimizer/level-2/properties/override-properties.js b/node_modules/clean-css/lib/optimizer/level-2/properties/override-properties.js index 3749720c9..0f7b97a9f 100644 --- a/node_modules/clean-css/lib/optimizer/level-2/properties/override-properties.js +++ b/node_modules/clean-css/lib/optimizer/level-2/properties/override-properties.js @@ -8,7 +8,6 @@ var sameVendorPrefixesIn = require('./vendor-prefixes').same; var compactable = require('../compactable'); var deepClone = require('../clone').deep; -var deepClone = require('../clone').deep; var restoreWithComponents = require('../restore-with-components'); var shallowClone = require('../clone').shallow; @@ -95,10 +94,11 @@ function turnShorthandValueIntoMultiplex(property, size) { } function turnLonghandValueIntoMultiplex(property, size) { - var withRealValue = compactable[property.name].intoMultiplexMode == 'real'; - var withValue = withRealValue ? + var descriptor = compactable[property.name]; + var withRealValue = descriptor.intoMultiplexMode == 'real'; + var withValue = descriptor.intoMultiplexMode == 'real' ? property.value.slice(0) : - compactable[property.name].defaultValue; + (descriptor.intoMultiplexMode == 'placeholder' ? descriptor.placeholderValue : descriptor.defaultValue); var i = multiplexSize(property); var j; var m = withValue.length; diff --git a/node_modules/clean-css/lib/optimizer/level-2/remove-unused-at-rules.js b/node_modules/clean-css/lib/optimizer/level-2/remove-unused-at-rules.js index 7285991a4..798d3939f 100644 --- a/node_modules/clean-css/lib/optimizer/level-2/remove-unused-at-rules.js +++ b/node_modules/clean-css/lib/optimizer/level-2/remove-unused-at-rules.js @@ -8,6 +8,14 @@ var Token = require('../../tokenizer/token'); var animationNameRegex = /^(\-moz\-|\-o\-|\-webkit\-)?animation-name$/; var animationRegex = /^(\-moz\-|\-o\-|\-webkit\-)?animation$/; var keyframeRegex = /^@(\-moz\-|\-o\-|\-webkit\-)?keyframes /; +var importantRegex = /\s{0,31}!important$/; +var optionalMatchingQuotesRegex = /^(['"]?)(.*)\1$/; + +function normalize(value) { + return value + .replace(optionalMatchingQuotesRegex, '$2') + .replace(importantRegex, ''); +} function removeUnusedAtRules(tokens, context) { removeUnusedAtRule(tokens, matchCounterStyle, markCounterStylesAsUsed, context); @@ -107,7 +115,7 @@ function matchFontFace(token, atRules) { property = token[2][i]; if (property[1][1] == 'font-family') { - match = property[2][1].toLowerCase(); + match = normalize(property[2][1].toLowerCase()); atRules[match] = atRules[match] || []; atRules[match].push(token); break; @@ -134,7 +142,7 @@ function markFontFacesAsUsed(atRules) { component = wrappedProperty.components[6]; for (j = 0, m = component.value.length; j < m; j++) { - normalizedMatch = component.value[j][1].toLowerCase(); + normalizedMatch = normalize(component.value[j][1].toLowerCase()); if (normalizedMatch in atRules) { delete atRules[normalizedMatch]; @@ -146,7 +154,7 @@ function markFontFacesAsUsed(atRules) { if (property[1][1] == 'font-family') { for (j = 2, m = property.length; j < m; j++) { - normalizedMatch = property[j][1].toLowerCase(); + normalizedMatch = normalize(property[j][1].toLowerCase()); if (normalizedMatch in atRules) { delete atRules[normalizedMatch]; diff --git a/node_modules/clean-css/lib/optimizer/level-2/restore.js b/node_modules/clean-css/lib/optimizer/level-2/restore.js index 13f12e496..f9c2f0d33 100644 --- a/node_modules/clean-css/lib/optimizer/level-2/restore.js +++ b/node_modules/clean-css/lib/optimizer/level-2/restore.js @@ -264,8 +264,9 @@ function withoutDefaults(property, compactable) { var component = components[i]; var descriptor = compactable[component.name]; - if (component.value[0][1] != descriptor.defaultValue) + if (component.value[0][1] != descriptor.defaultValue || ('keepUnlessDefault' in descriptor) && !isDefault(components, compactable, descriptor.keepUnlessDefault)) { restored.unshift(component.value[0]); + } } if (restored.length === 0) @@ -277,6 +278,21 @@ function withoutDefaults(property, compactable) { return restored; } +function isDefault(components, compactable, propertyName) { + var component; + var i, l; + + for (i = 0, l = components.length; i < l; i++) { + component = components[i]; + + if (component.name == propertyName && component.value[0][1] == compactable[propertyName].defaultValue) { + return true; + } + } + + return false; +} + module.exports = { background: background, borderRadius: borderRadius, |