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, | 
