mirror of
https://github.com/S2-/minifyfromhtml.git
synced 2025-08-03 12:20:04 +02:00
update node modules
This commit is contained in:
644
node_modules/clean-css/lib/optimizer/level-2/break-up.js
generated
vendored
644
node_modules/clean-css/lib/optimizer/level-2/break-up.js
generated
vendored
@@ -1,644 +0,0 @@
|
||||
var InvalidPropertyError = require('./invalid-property-error');
|
||||
|
||||
var wrapSingle = require('../wrap-for-optimizing').single;
|
||||
|
||||
var Token = require('../../tokenizer/token');
|
||||
var Marker = require('../../tokenizer/marker');
|
||||
|
||||
var formatPosition = require('../../utils/format-position');
|
||||
|
||||
function _anyIsInherit(values) {
|
||||
var i, l;
|
||||
|
||||
for (i = 0, l = values.length; i < l; i++) {
|
||||
if (values[i][1] == 'inherit') {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function _colorFilter(validator) {
|
||||
return function (value) {
|
||||
return value[1] == 'invert' || validator.isColor(value[1]) || validator.isPrefixed(value[1]);
|
||||
};
|
||||
}
|
||||
|
||||
function _styleFilter(validator) {
|
||||
return function (value) {
|
||||
return value[1] != 'inherit' && validator.isStyleKeyword(value[1]) && !validator.isColorFunction(value[1]);
|
||||
};
|
||||
}
|
||||
|
||||
function _wrapDefault(name, property, compactable) {
|
||||
var descriptor = compactable[name];
|
||||
if (descriptor.doubleValues && descriptor.defaultValue.length == 2) {
|
||||
return wrapSingle([
|
||||
Token.PROPERTY,
|
||||
[Token.PROPERTY_NAME, name],
|
||||
[Token.PROPERTY_VALUE, descriptor.defaultValue[0]],
|
||||
[Token.PROPERTY_VALUE, descriptor.defaultValue[1]]
|
||||
]);
|
||||
} else if (descriptor.doubleValues && descriptor.defaultValue.length == 1) {
|
||||
return wrapSingle([
|
||||
Token.PROPERTY,
|
||||
[Token.PROPERTY_NAME, name],
|
||||
[Token.PROPERTY_VALUE, descriptor.defaultValue[0]]
|
||||
]);
|
||||
} else {
|
||||
return wrapSingle([
|
||||
Token.PROPERTY,
|
||||
[Token.PROPERTY_NAME, name],
|
||||
[Token.PROPERTY_VALUE, descriptor.defaultValue]
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
function _widthFilter(validator) {
|
||||
return function (value) {
|
||||
return value[1] != 'inherit' &&
|
||||
(validator.isWidth(value[1]) || validator.isUnit(value[1]) && !validator.isDynamicUnit(value[1])) &&
|
||||
!validator.isStyleKeyword(value[1]) &&
|
||||
!validator.isColorFunction(value[1]);
|
||||
};
|
||||
}
|
||||
|
||||
function animation(property, compactable, validator) {
|
||||
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 iteration = _wrapDefault(property.name + '-iteration-count', property, compactable);
|
||||
var direction = _wrapDefault(property.name + '-direction', property, compactable);
|
||||
var fill = _wrapDefault(property.name + '-fill-mode', property, compactable);
|
||||
var play = _wrapDefault(property.name + '-play-state', property, compactable);
|
||||
var name = _wrapDefault(property.name + '-name', property, compactable);
|
||||
var components = [duration, timing, delay, iteration, direction, fill, play, name];
|
||||
var values = property.value;
|
||||
var value;
|
||||
var durationSet = false;
|
||||
var timingSet = false;
|
||||
var delaySet = false;
|
||||
var iterationSet = false;
|
||||
var directionSet = false;
|
||||
var fillSet = false;
|
||||
var playSet = false;
|
||||
var nameSet = false;
|
||||
var i;
|
||||
var l;
|
||||
|
||||
if (property.value.length == 1 && property.value[0][1] == 'inherit') {
|
||||
duration.value = timing.value = delay.value = iteration.value = direction.value = fill.value = play.value = name.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.isAnimationIterationCountKeyword(value[1]) || validator.isPositiveNumber(value[1])) && !iterationSet) {
|
||||
iteration.value = [value];
|
||||
iterationSet = true;
|
||||
} else if (validator.isAnimationDirectionKeyword(value[1]) && !directionSet) {
|
||||
direction.value = [value];
|
||||
directionSet = true;
|
||||
} else if (validator.isAnimationFillModeKeyword(value[1]) && !fillSet) {
|
||||
fill.value = [value];
|
||||
fillSet = true;
|
||||
} else if (validator.isAnimationPlayStateKeyword(value[1]) && !playSet) {
|
||||
play.value = [value];
|
||||
playSet = true;
|
||||
} else if ((validator.isAnimationNameKeyword(value[1]) || validator.isIdentifier(value[1])) && !nameSet) {
|
||||
name.value = [value];
|
||||
nameSet = true;
|
||||
} else {
|
||||
throw new InvalidPropertyError('Invalid animation value at ' + formatPosition(value[2][0]) + '. Ignoring.');
|
||||
}
|
||||
}
|
||||
|
||||
return components;
|
||||
}
|
||||
|
||||
function background(property, compactable, validator) {
|
||||
var image = _wrapDefault('background-image', property, compactable);
|
||||
var position = _wrapDefault('background-position', property, compactable);
|
||||
var size = _wrapDefault('background-size', property, compactable);
|
||||
var repeat = _wrapDefault('background-repeat', property, compactable);
|
||||
var attachment = _wrapDefault('background-attachment', property, compactable);
|
||||
var origin = _wrapDefault('background-origin', property, compactable);
|
||||
var clip = _wrapDefault('background-clip', property, compactable);
|
||||
var color = _wrapDefault('background-color', property, compactable);
|
||||
var components = [image, position, size, repeat, attachment, origin, clip, color];
|
||||
var values = property.value;
|
||||
|
||||
var positionSet = false;
|
||||
var clipSet = false;
|
||||
var originSet = false;
|
||||
var repeatSet = false;
|
||||
|
||||
var anyValueSet = false;
|
||||
|
||||
if (property.value.length == 1 && property.value[0][1] == 'inherit') {
|
||||
// NOTE: 'inherit' is not a valid value for background-attachment
|
||||
color.value = image.value = repeat.value = position.value = size.value = origin.value = clip.value = property.value;
|
||||
return components;
|
||||
}
|
||||
|
||||
if (property.value.length == 1 && property.value[0][1] == '0 0') {
|
||||
return components;
|
||||
}
|
||||
|
||||
for (var i = values.length - 1; i >= 0; i--) {
|
||||
var value = values[i];
|
||||
|
||||
if (validator.isBackgroundAttachmentKeyword(value[1])) {
|
||||
attachment.value = [value];
|
||||
anyValueSet = true;
|
||||
} else if (validator.isBackgroundClipKeyword(value[1]) || validator.isBackgroundOriginKeyword(value[1])) {
|
||||
if (clipSet) {
|
||||
origin.value = [value];
|
||||
originSet = true;
|
||||
} else {
|
||||
clip.value = [value];
|
||||
clipSet = true;
|
||||
}
|
||||
anyValueSet = true;
|
||||
} else if (validator.isBackgroundRepeatKeyword(value[1])) {
|
||||
if (repeatSet) {
|
||||
repeat.value.unshift(value);
|
||||
} else {
|
||||
repeat.value = [value];
|
||||
repeatSet = true;
|
||||
}
|
||||
anyValueSet = true;
|
||||
} else if (validator.isBackgroundPositionKeyword(value[1]) || validator.isBackgroundSizeKeyword(value[1]) || validator.isUnit(value[1]) || validator.isDynamicUnit(value[1])) {
|
||||
if (i > 0) {
|
||||
var previousValue = values[i - 1];
|
||||
|
||||
if (previousValue[1] == Marker.FORWARD_SLASH) {
|
||||
size.value = [value];
|
||||
} else if (i > 1 && values[i - 2][1] == Marker.FORWARD_SLASH) {
|
||||
size.value = [previousValue, value];
|
||||
i -= 2;
|
||||
} else {
|
||||
if (!positionSet)
|
||||
position.value = [];
|
||||
|
||||
position.value.unshift(value);
|
||||
positionSet = true;
|
||||
}
|
||||
} else {
|
||||
if (!positionSet)
|
||||
position.value = [];
|
||||
|
||||
position.value.unshift(value);
|
||||
positionSet = true;
|
||||
}
|
||||
anyValueSet = true;
|
||||
} else if ((color.value[0][1] == compactable[color.name].defaultValue || color.value[0][1] == 'none') && (validator.isColor(value[1]) || validator.isPrefixed(value[1]))) {
|
||||
color.value = [value];
|
||||
anyValueSet = true;
|
||||
} else if (validator.isUrl(value[1]) || validator.isFunction(value[1])) {
|
||||
image.value = [value];
|
||||
anyValueSet = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (clipSet && !originSet)
|
||||
origin.value = clip.value.slice(0);
|
||||
|
||||
if (!anyValueSet) {
|
||||
throw new InvalidPropertyError('Invalid background value at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
|
||||
}
|
||||
|
||||
return components;
|
||||
}
|
||||
|
||||
function borderRadius(property, compactable) {
|
||||
var values = property.value;
|
||||
var splitAt = -1;
|
||||
|
||||
for (var i = 0, l = values.length; i < l; i++) {
|
||||
if (values[i][1] == Marker.FORWARD_SLASH) {
|
||||
splitAt = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (splitAt === 0 || splitAt === values.length - 1) {
|
||||
throw new InvalidPropertyError('Invalid border-radius value at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
|
||||
}
|
||||
|
||||
var target = _wrapDefault(property.name, property, compactable);
|
||||
target.value = splitAt > -1 ?
|
||||
values.slice(0, splitAt) :
|
||||
values.slice(0);
|
||||
target.components = fourValues(target, compactable);
|
||||
|
||||
var remainder = _wrapDefault(property.name, property, compactable);
|
||||
remainder.value = splitAt > -1 ?
|
||||
values.slice(splitAt + 1) :
|
||||
values.slice(0);
|
||||
remainder.components = fourValues(remainder, compactable);
|
||||
|
||||
for (var j = 0; j < 4; j++) {
|
||||
target.components[j].multiplex = true;
|
||||
target.components[j].value = target.components[j].value.concat(remainder.components[j].value);
|
||||
}
|
||||
|
||||
return target.components;
|
||||
}
|
||||
|
||||
function font(property, compactable, validator) {
|
||||
var style = _wrapDefault('font-style', property, compactable);
|
||||
var variant = _wrapDefault('font-variant', property, compactable);
|
||||
var weight = _wrapDefault('font-weight', property, compactable);
|
||||
var stretch = _wrapDefault('font-stretch', property, compactable);
|
||||
var size = _wrapDefault('font-size', property, compactable);
|
||||
var height = _wrapDefault('line-height', property, compactable);
|
||||
var family = _wrapDefault('font-family', property, compactable);
|
||||
var components = [style, variant, weight, stretch, size, height, family];
|
||||
var values = property.value;
|
||||
var fuzzyMatched = 4; // style, variant, weight, and stretch
|
||||
var index = 0;
|
||||
var isStretchSet = false;
|
||||
var isStretchValid;
|
||||
var isStyleSet = false;
|
||||
var isStyleValid;
|
||||
var isVariantSet = false;
|
||||
var isVariantValid;
|
||||
var isWeightSet = false;
|
||||
var isWeightValid;
|
||||
var isSizeSet = false;
|
||||
var appendableFamilyName = false;
|
||||
|
||||
if (!values[index]) {
|
||||
throw new InvalidPropertyError('Missing font values at ' + formatPosition(property.all[property.position][1][2][0]) + '. Ignoring.');
|
||||
}
|
||||
|
||||
if (values.length == 1 && values[0][1] == 'inherit') {
|
||||
style.value = variant.value = weight.value = stretch.value = size.value = height.value = family.value = values;
|
||||
return components;
|
||||
}
|
||||
|
||||
if (values.length == 1 && (validator.isFontKeyword(values[0][1]) || validator.isGlobal(values[0][1]) || validator.isPrefixed(values[0][1]))) {
|
||||
values[0][1] = Marker.INTERNAL + values[0][1];
|
||||
style.value = variant.value = weight.value = stretch.value = size.value = height.value = family.value = values;
|
||||
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.');
|
||||
}
|
||||
|
||||
// fuzzy match style, variant, weight, and stretch on first elements
|
||||
while (index < fuzzyMatched) {
|
||||
isStretchValid = validator.isFontStretchKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
|
||||
isStyleValid = validator.isFontStyleKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
|
||||
isVariantValid = validator.isFontVariantKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
|
||||
isWeightValid = validator.isFontWeightKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
|
||||
|
||||
if (isStyleValid && !isStyleSet) {
|
||||
style.value = [values[index]];
|
||||
isStyleSet = true;
|
||||
} else if (isVariantValid && !isVariantSet) {
|
||||
variant.value = [values[index]];
|
||||
isVariantSet = true;
|
||||
} else if (isWeightValid && !isWeightSet) {
|
||||
weight.value = [values[index]];
|
||||
isWeightSet = true;
|
||||
} else if (isStretchValid && !isStretchSet) {
|
||||
stretch.value = [values[index]];
|
||||
isStretchSet = true;
|
||||
} else if (isStyleValid && isStyleSet || isVariantValid && isVariantSet || isWeightValid && isWeightSet || isStretchValid && isStretchSet) {
|
||||
throw new InvalidPropertyError('Invalid font style / variant / weight / stretch value at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
|
||||
// now comes font-size ...
|
||||
if (validator.isFontSizeKeyword(values[index][1]) || validator.isUnit(values[index][1]) && !validator.isDynamicUnit(values[index][1])) {
|
||||
size.value = [values[index]];
|
||||
isSizeSet = true;
|
||||
index++;
|
||||
} else {
|
||||
throw new InvalidPropertyError('Missing font size at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
|
||||
}
|
||||
|
||||
if (!values[index]) {
|
||||
throw new InvalidPropertyError('Missing font family at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
|
||||
}
|
||||
|
||||
// ... and perhaps line-height
|
||||
if (isSizeSet && values[index] && values[index][1] == Marker.FORWARD_SLASH && values[index + 1] && (validator.isLineHeightKeyword(values[index + 1][1]) || validator.isUnit(values[index + 1][1]) || validator.isNumber(values[index + 1][1]))) {
|
||||
height.value = [values[index + 1]];
|
||||
index++;
|
||||
index++;
|
||||
}
|
||||
|
||||
// ... and whatever comes next is font-family
|
||||
family.value = [];
|
||||
|
||||
while (values[index]) {
|
||||
if (values[index][1] == Marker.COMMA) {
|
||||
appendableFamilyName = false;
|
||||
} else {
|
||||
if (appendableFamilyName) {
|
||||
family.value[family.value.length - 1][1] += Marker.SPACE + values[index][1];
|
||||
} else {
|
||||
family.value.push(values[index]);
|
||||
}
|
||||
|
||||
appendableFamilyName = true;
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
|
||||
if (family.value.length === 0) {
|
||||
throw new InvalidPropertyError('Missing font family at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
|
||||
}
|
||||
|
||||
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 = [];
|
||||
var value = property.value;
|
||||
|
||||
if (value.length < 1)
|
||||
return [];
|
||||
|
||||
if (value.length < 2)
|
||||
value[1] = value[0].slice(0);
|
||||
if (value.length < 3)
|
||||
value[2] = value[0].slice(0);
|
||||
if (value.length < 4)
|
||||
value[3] = value[1].slice(0);
|
||||
|
||||
for (var i = componentNames.length - 1; i >= 0; i--) {
|
||||
var component = wrapSingle([
|
||||
Token.PROPERTY,
|
||||
[Token.PROPERTY_NAME, componentNames[i]]
|
||||
]);
|
||||
component.value = [value[i]];
|
||||
components.unshift(component);
|
||||
}
|
||||
|
||||
return components;
|
||||
}
|
||||
|
||||
function multiplex(splitWith) {
|
||||
return function (property, compactable, validator) {
|
||||
var splitsAt = [];
|
||||
var values = property.value;
|
||||
var i, j, l, m;
|
||||
|
||||
// find split commas
|
||||
for (i = 0, l = values.length; i < l; i++) {
|
||||
if (values[i][1] == ',')
|
||||
splitsAt.push(i);
|
||||
}
|
||||
|
||||
if (splitsAt.length === 0)
|
||||
return splitWith(property, compactable, validator);
|
||||
|
||||
var splitComponents = [];
|
||||
|
||||
// split over commas, and into components
|
||||
for (i = 0, l = splitsAt.length; i <= l; i++) {
|
||||
var from = i === 0 ? 0 : splitsAt[i - 1] + 1;
|
||||
var to = i < l ? splitsAt[i] : values.length;
|
||||
|
||||
var _property = _wrapDefault(property.name, property, compactable);
|
||||
_property.value = values.slice(from, to);
|
||||
|
||||
splitComponents.push(splitWith(_property, compactable, validator));
|
||||
}
|
||||
|
||||
var components = splitComponents[0];
|
||||
|
||||
// group component values from each split
|
||||
for (i = 0, l = components.length; i < l; i++) {
|
||||
components[i].multiplex = true;
|
||||
|
||||
for (j = 1, m = splitComponents.length; j < m; j++) {
|
||||
components[i].value.push([Token.PROPERTY_VALUE, Marker.COMMA]);
|
||||
Array.prototype.push.apply(components[i].value, splitComponents[j][i].value);
|
||||
}
|
||||
}
|
||||
|
||||
return components;
|
||||
};
|
||||
}
|
||||
|
||||
function listStyle(property, compactable, validator) {
|
||||
var type = _wrapDefault('list-style-type', property, compactable);
|
||||
var position = _wrapDefault('list-style-position', property, compactable);
|
||||
var image = _wrapDefault('list-style-image', property, compactable);
|
||||
var components = [type, position, image];
|
||||
|
||||
if (property.value.length == 1 && property.value[0][1] == 'inherit') {
|
||||
type.value = position.value = image.value = [property.value[0]];
|
||||
return components;
|
||||
}
|
||||
|
||||
var values = property.value.slice(0);
|
||||
var total = values.length;
|
||||
var index = 0;
|
||||
|
||||
// `image` first...
|
||||
for (index = 0, total = values.length; index < total; index++) {
|
||||
if (validator.isUrl(values[index][1]) || values[index][1] == '0') {
|
||||
image.value = [values[index]];
|
||||
values.splice(index, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// ... then `position`
|
||||
for (index = 0, total = values.length; index < total; index++) {
|
||||
if (validator.isListStylePositionKeyword(values[index][1])) {
|
||||
position.value = [values[index]];
|
||||
values.splice(index, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// ... and what's left is a `type`
|
||||
if (values.length > 0 && (validator.isListStyleTypeKeyword(values[0][1]) || validator.isIdentifier(values[0][1]))) {
|
||||
type.value = [values[0]];
|
||||
}
|
||||
|
||||
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 = [
|
||||
_wrapDefault(descriptor.components[0], property, compactable),
|
||||
_wrapDefault(descriptor.components[1], property, compactable),
|
||||
_wrapDefault(descriptor.components[2], property, compactable)
|
||||
];
|
||||
var color, style, width;
|
||||
|
||||
for (var i = 0; i < 3; i++) {
|
||||
var component = components[i];
|
||||
|
||||
if (component.name.indexOf('color') > 0)
|
||||
color = component;
|
||||
else if (component.name.indexOf('style') > 0)
|
||||
style = component;
|
||||
else
|
||||
width = component;
|
||||
}
|
||||
|
||||
if ((property.value.length == 1 && property.value[0][1] == 'inherit') ||
|
||||
(property.value.length == 3 && property.value[0][1] == 'inherit' && property.value[1][1] == 'inherit' && property.value[2][1] == 'inherit')) {
|
||||
color.value = style.value = width.value = [property.value[0]];
|
||||
return components;
|
||||
}
|
||||
|
||||
var values = property.value.slice(0);
|
||||
var match, matches;
|
||||
|
||||
// NOTE: usually users don't follow the required order of parts in this shorthand,
|
||||
// so we'll try to parse it caring as little about order as possible
|
||||
|
||||
if (values.length > 0) {
|
||||
matches = values.filter(_widthFilter(validator));
|
||||
match = matches.length > 1 && (matches[0][1] == 'none' || matches[0][1] == 'auto') ? matches[1] : matches[0];
|
||||
if (match) {
|
||||
width.value = [match];
|
||||
values.splice(values.indexOf(match), 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (values.length > 0) {
|
||||
match = values.filter(_styleFilter(validator))[0];
|
||||
if (match) {
|
||||
style.value = [match];
|
||||
values.splice(values.indexOf(match), 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (values.length > 0) {
|
||||
match = values.filter(_colorFilter(validator))[0];
|
||||
if (match) {
|
||||
color.value = [match];
|
||||
values.splice(values.indexOf(match), 1);
|
||||
}
|
||||
}
|
||||
|
||||
return components;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
animation: animation,
|
||||
background: background,
|
||||
border: widthStyleColor,
|
||||
borderRadius: borderRadius,
|
||||
font: font,
|
||||
fourValues: fourValues,
|
||||
listStyle: listStyle,
|
||||
multiplex: multiplex,
|
||||
outline: widthStyleColor,
|
||||
transition: transition
|
||||
};
|
283
node_modules/clean-css/lib/optimizer/level-2/can-override.js
generated
vendored
283
node_modules/clean-css/lib/optimizer/level-2/can-override.js
generated
vendored
@@ -1,283 +0,0 @@
|
||||
var understandable = require('./properties/understandable');
|
||||
|
||||
function animationIterationCount(validator, value1, value2) {
|
||||
if (!understandable(validator, value1, value2, 0, true) && !(validator.isAnimationIterationCountKeyword(value2) || validator.isPositiveNumber(value2))) {
|
||||
return false;
|
||||
} else if (validator.isVariable(value1) && validator.isVariable(value2)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return validator.isAnimationIterationCountKeyword(value2) || validator.isPositiveNumber(value2);
|
||||
}
|
||||
|
||||
function animationName(validator, value1, value2) {
|
||||
if (!understandable(validator, value1, value2, 0, true) && !(validator.isAnimationNameKeyword(value2) || validator.isIdentifier(value2))) {
|
||||
return false;
|
||||
} else if (validator.isVariable(value1) && validator.isVariable(value2)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return validator.isAnimationNameKeyword(value2) || validator.isIdentifier(value2);
|
||||
}
|
||||
|
||||
function areSameFunction(validator, value1, value2) {
|
||||
if (!validator.isFunction(value1) || !validator.isFunction(value2)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var function1Name = value1.substring(0, value1.indexOf('('));
|
||||
var function2Name = value2.substring(0, value2.indexOf('('));
|
||||
|
||||
return function1Name === function2Name;
|
||||
}
|
||||
|
||||
function backgroundPosition(validator, value1, value2) {
|
||||
if (!understandable(validator, value1, value2, 0, true) && !(validator.isBackgroundPositionKeyword(value2) || validator.isGlobal(value2))) {
|
||||
return false;
|
||||
} else if (validator.isVariable(value1) && validator.isVariable(value2)) {
|
||||
return true;
|
||||
} else if (validator.isBackgroundPositionKeyword(value2) || validator.isGlobal(value2)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return unit(validator, value1, value2);
|
||||
}
|
||||
|
||||
function backgroundSize(validator, value1, value2) {
|
||||
if (!understandable(validator, value1, value2, 0, true) && !(validator.isBackgroundSizeKeyword(value2) || validator.isGlobal(value2))) {
|
||||
return false;
|
||||
} else if (validator.isVariable(value1) && validator.isVariable(value2)) {
|
||||
return true;
|
||||
} else if (validator.isBackgroundSizeKeyword(value2) || validator.isGlobal(value2)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return unit(validator, value1, value2);
|
||||
}
|
||||
|
||||
function color(validator, value1, value2) {
|
||||
if (!understandable(validator, value1, value2, 0, true) && !validator.isColor(value2)) {
|
||||
return false;
|
||||
} else if (validator.isVariable(value1) && validator.isVariable(value2)) {
|
||||
return true;
|
||||
} else if (!validator.colorOpacity && (validator.isRgbColor(value1) || validator.isHslColor(value1))) {
|
||||
return false;
|
||||
} else if (!validator.colorOpacity && (validator.isRgbColor(value2) || validator.isHslColor(value2))) {
|
||||
return false;
|
||||
} else if (validator.isColor(value1) && validator.isColor(value2)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return sameFunctionOrValue(validator, value1, value2);
|
||||
}
|
||||
|
||||
function components(overrideCheckers) {
|
||||
return function (validator, value1, value2, position) {
|
||||
return overrideCheckers[position](validator, value1, value2);
|
||||
};
|
||||
}
|
||||
|
||||
function fontFamily(validator, value1, value2) {
|
||||
return understandable(validator, value1, value2, 0, true);
|
||||
}
|
||||
|
||||
function image(validator, value1, value2) {
|
||||
if (!understandable(validator, value1, value2, 0, true) && !validator.isImage(value2)) {
|
||||
return false;
|
||||
} else if (validator.isVariable(value1) && validator.isVariable(value2)) {
|
||||
return true;
|
||||
} else if (validator.isImage(value2)) {
|
||||
return true;
|
||||
} else if (validator.isImage(value1)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return sameFunctionOrValue(validator, value1, value2);
|
||||
}
|
||||
|
||||
function keyword(propertyName) {
|
||||
return function(validator, value1, value2) {
|
||||
if (!understandable(validator, value1, value2, 0, true) && !validator.isKeyword(propertyName)(value2)) {
|
||||
return false;
|
||||
} else if (validator.isVariable(value1) && validator.isVariable(value2)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return validator.isKeyword(propertyName)(value2);
|
||||
};
|
||||
}
|
||||
|
||||
function keywordWithGlobal(propertyName) {
|
||||
return function(validator, value1, value2) {
|
||||
if (!understandable(validator, value1, value2, 0, true) && !(validator.isKeyword(propertyName)(value2) || validator.isGlobal(value2))) {
|
||||
return false;
|
||||
} else if (validator.isVariable(value1) && validator.isVariable(value2)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return validator.isKeyword(propertyName)(value2) || validator.isGlobal(value2);
|
||||
};
|
||||
}
|
||||
|
||||
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;
|
||||
} else if (validator.isVariable(value1) && validator.isVariable(value2)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return validator.isUnit(value2) || validator.isColor(value2) || validator.isGlobal(value2);
|
||||
}
|
||||
|
||||
function time(validator, value1, value2) {
|
||||
if (!understandable(validator, value1, value2, 0, true) && !validator.isTime(value2)) {
|
||||
return false;
|
||||
} else if (validator.isVariable(value1) && validator.isVariable(value2)) {
|
||||
return true;
|
||||
} else if (validator.isTime(value1) && !validator.isTime(value2)) {
|
||||
return false;
|
||||
} else if (validator.isTime(value2)) {
|
||||
return true;
|
||||
} else if (validator.isTime(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 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;
|
||||
} else if (validator.isVariable(value1) && validator.isVariable(value2)) {
|
||||
return true;
|
||||
} else if (validator.isUnit(value1) && !validator.isUnit(value2)) {
|
||||
return false;
|
||||
} else if (validator.isUnit(value2)) {
|
||||
return true;
|
||||
} else if (validator.isUnit(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 unitOrKeywordWithGlobal(propertyName) {
|
||||
var byKeyword = keywordWithGlobal(propertyName);
|
||||
|
||||
return function(validator, value1, value2) {
|
||||
return unit(validator, value1, value2) || byKeyword(validator, value1, value2);
|
||||
};
|
||||
}
|
||||
|
||||
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;
|
||||
} else if (validator.isVariable(value1) && validator.isVariable(value2)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return validator.isZIndex(value2);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
generic: {
|
||||
color: color,
|
||||
components: components,
|
||||
image: image,
|
||||
propertyName: propertyName,
|
||||
time: time,
|
||||
timingFunction: timingFunction,
|
||||
unit: unit,
|
||||
unitOrNumber: unitOrNumber
|
||||
},
|
||||
property: {
|
||||
animationDirection: keywordWithGlobal('animation-direction'),
|
||||
animationFillMode: keyword('animation-fill-mode'),
|
||||
animationIterationCount: animationIterationCount,
|
||||
animationName: animationName,
|
||||
animationPlayState: keywordWithGlobal('animation-play-state'),
|
||||
backgroundAttachment: keyword('background-attachment'),
|
||||
backgroundClip: keywordWithGlobal('background-clip'),
|
||||
backgroundOrigin: keyword('background-origin'),
|
||||
backgroundPosition: backgroundPosition,
|
||||
backgroundRepeat: keyword('background-repeat'),
|
||||
backgroundSize: backgroundSize,
|
||||
bottom: unitOrKeywordWithGlobal('bottom'),
|
||||
borderCollapse: keyword('border-collapse'),
|
||||
borderStyle: keywordWithGlobal('*-style'),
|
||||
clear: keywordWithGlobal('clear'),
|
||||
cursor: keywordWithGlobal('cursor'),
|
||||
display: keywordWithGlobal('display'),
|
||||
float: keywordWithGlobal('float'),
|
||||
left: unitOrKeywordWithGlobal('left'),
|
||||
fontFamily: fontFamily,
|
||||
fontStretch: keywordWithGlobal('font-stretch'),
|
||||
fontStyle: keywordWithGlobal('font-style'),
|
||||
fontVariant: keywordWithGlobal('font-variant'),
|
||||
fontWeight: keywordWithGlobal('font-weight'),
|
||||
listStyleType: keywordWithGlobal('list-style-type'),
|
||||
listStylePosition: keywordWithGlobal('list-style-position'),
|
||||
outlineStyle: keywordWithGlobal('*-style'),
|
||||
overflow: keywordWithGlobal('overflow'),
|
||||
position: keywordWithGlobal('position'),
|
||||
right: unitOrKeywordWithGlobal('right'),
|
||||
textAlign: keywordWithGlobal('text-align'),
|
||||
textDecoration: keywordWithGlobal('text-decoration'),
|
||||
textOverflow: keywordWithGlobal('text-overflow'),
|
||||
textShadow: textShadow,
|
||||
top: unitOrKeywordWithGlobal('top'),
|
||||
transform: sameFunctionOrValue,
|
||||
verticalAlign: unitOrKeywordWithGlobal('vertical-align'),
|
||||
visibility: keywordWithGlobal('visibility'),
|
||||
whiteSpace: keywordWithGlobal('white-space'),
|
||||
zIndex: zIndex
|
||||
}
|
||||
};
|
33
node_modules/clean-css/lib/optimizer/level-2/clone.js
generated
vendored
33
node_modules/clean-css/lib/optimizer/level-2/clone.js
generated
vendored
@@ -1,33 +0,0 @@
|
||||
var wrapSingle = require('../wrap-for-optimizing').single;
|
||||
|
||||
var Token = require('../../tokenizer/token');
|
||||
|
||||
function deep(property) {
|
||||
var cloned = shallow(property);
|
||||
for (var i = property.components.length - 1; i >= 0; i--) {
|
||||
var component = shallow(property.components[i]);
|
||||
component.value = property.components[i].value.slice(0);
|
||||
cloned.components.unshift(component);
|
||||
}
|
||||
|
||||
cloned.dirty = true;
|
||||
cloned.value = property.value.slice(0);
|
||||
|
||||
return cloned;
|
||||
}
|
||||
|
||||
function shallow(property) {
|
||||
var cloned = wrapSingle([
|
||||
Token.PROPERTY,
|
||||
[Token.PROPERTY_NAME, property.name]
|
||||
]);
|
||||
cloned.important = property.important;
|
||||
cloned.hack = property.hack;
|
||||
cloned.unused = false;
|
||||
return cloned;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
deep: deep,
|
||||
shallow: shallow
|
||||
};
|
1063
node_modules/clean-css/lib/optimizer/level-2/compactable.js
generated
vendored
1063
node_modules/clean-css/lib/optimizer/level-2/compactable.js
generated
vendored
File diff suppressed because it is too large
Load Diff
3
node_modules/clean-css/lib/optimizer/level-2/extract-properties.js
generated
vendored
3
node_modules/clean-css/lib/optimizer/level-2/extract-properties.js
generated
vendored
@@ -27,9 +27,6 @@ function extractProperties(token) {
|
||||
if (name.length === 0)
|
||||
continue;
|
||||
|
||||
if (name.indexOf('--') === 0)
|
||||
continue;
|
||||
|
||||
value = serializeValue(property, i);
|
||||
|
||||
properties.push([
|
||||
|
10
node_modules/clean-css/lib/optimizer/level-2/invalid-property-error.js
generated
vendored
10
node_modules/clean-css/lib/optimizer/level-2/invalid-property-error.js
generated
vendored
@@ -1,10 +0,0 @@
|
||||
function InvalidPropertyError(message) {
|
||||
this.name = 'InvalidPropertyError';
|
||||
this.message = message;
|
||||
this.stack = (new Error()).stack;
|
||||
}
|
||||
|
||||
InvalidPropertyError.prototype = Object.create(Error.prototype);
|
||||
InvalidPropertyError.prototype.constructor = InvalidPropertyError;
|
||||
|
||||
module.exports = InvalidPropertyError;
|
7
node_modules/clean-css/lib/optimizer/level-2/is-mergeable.js
generated
vendored
7
node_modules/clean-css/lib/optimizer/level-2/is-mergeable.js
generated
vendored
@@ -3,6 +3,8 @@ var split = require('../../utils/split');
|
||||
|
||||
var DEEP_SELECTOR_PATTERN = /\/deep\//;
|
||||
var DOUBLE_COLON_PATTERN = /^::/;
|
||||
var VENDOR_PREFIXED_PATTERN = /:(-moz-|-ms-|-o-|-webkit-)/;
|
||||
|
||||
var NOT_PSEUDO = ':not';
|
||||
var PSEUDO_CLASSES_WITH_ARGUMENTS = [
|
||||
':dir',
|
||||
@@ -44,6 +46,7 @@ function isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements,
|
||||
|
||||
if (singleSelector.length === 0 ||
|
||||
isDeepSelector(singleSelector) ||
|
||||
isVendorPrefixed(singleSelector) ||
|
||||
(singleSelector.indexOf(Marker.COLON) > -1 && !areMergeable(singleSelector, extractPseudoFrom(singleSelector), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging))) {
|
||||
return false;
|
||||
}
|
||||
@@ -56,6 +59,10 @@ function isDeepSelector(selector) {
|
||||
return DEEP_SELECTOR_PATTERN.test(selector);
|
||||
}
|
||||
|
||||
function isVendorPrefixed(selector) {
|
||||
return VENDOR_PREFIXED_PATTERN.test(selector);
|
||||
}
|
||||
|
||||
function extractPseudoFrom(selector) {
|
||||
var list = [];
|
||||
var character;
|
||||
|
5
node_modules/clean-css/lib/optimizer/level-2/optimize.js
generated
vendored
5
node_modules/clean-css/lib/optimizer/level-2/optimize.js
generated
vendored
@@ -70,6 +70,7 @@ function recursivelyOptimizeProperties(tokens, context) {
|
||||
|
||||
function level2Optimize(tokens, context, withRestructuring) {
|
||||
var levelOptions = context.options.level[OptimizationLevel.Two];
|
||||
var level2Plugins = context.options.plugins.level2Block;
|
||||
var reduced;
|
||||
var i;
|
||||
|
||||
@@ -124,6 +125,10 @@ function level2Optimize(tokens, context, withRestructuring) {
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < level2Plugins.length; i++) {
|
||||
level2Plugins[i](tokens);
|
||||
}
|
||||
|
||||
if (levelOptions.removeEmpty) {
|
||||
removeEmpty(tokens);
|
||||
}
|
||||
|
4
node_modules/clean-css/lib/optimizer/level-2/properties/find-component-in.js
generated
vendored
4
node_modules/clean-css/lib/optimizer/level-2/properties/find-component-in.js
generated
vendored
@@ -1,4 +1,4 @@
|
||||
var compactable = require('../compactable');
|
||||
var configuration = require('../../configuration');
|
||||
|
||||
function findComponentIn(shorthand, longhand) {
|
||||
var comparator = nameComparator(longhand);
|
||||
@@ -21,7 +21,7 @@ function findInSubComponents(shorthand, comparator) {
|
||||
var longhandMatch;
|
||||
var i, l;
|
||||
|
||||
if (!compactable[shorthand.name].shorthandComponents) {
|
||||
if (!configuration[shorthand.name].shorthandComponents) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
14
node_modules/clean-css/lib/optimizer/level-2/properties/has-same-values.js
generated
vendored
Normal file
14
node_modules/clean-css/lib/optimizer/level-2/properties/has-same-values.js
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
function hasSameValues(property) {
|
||||
var firstValue = property.value[0][1];
|
||||
var i, l;
|
||||
|
||||
for (i = 1, l = property.value.length; i < l; i++) {
|
||||
if (property.value[i][1] != firstValue) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
module.exports = hasSameValues;
|
10
node_modules/clean-css/lib/optimizer/level-2/properties/has-unset.js
generated
vendored
Normal file
10
node_modules/clean-css/lib/optimizer/level-2/properties/has-unset.js
generated
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
function hasUnset(property) {
|
||||
for (var i = property.value.length - 1; i >= 0; i--) {
|
||||
if (property.value[i][1] == 'unset')
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
module.exports = hasUnset;
|
6
node_modules/clean-css/lib/optimizer/level-2/properties/is-component-of.js
generated
vendored
6
node_modules/clean-css/lib/optimizer/level-2/properties/is-component-of.js
generated
vendored
@@ -1,12 +1,12 @@
|
||||
var compactable = require('../compactable');
|
||||
var configuration = require('../../configuration');
|
||||
|
||||
function isComponentOf(property1, property2, shallow) {
|
||||
return isDirectComponentOf(property1, property2) ||
|
||||
!shallow && !!compactable[property1.name].shorthandComponents && isSubComponentOf(property1, property2);
|
||||
!shallow && !!configuration[property1.name].shorthandComponents && isSubComponentOf(property1, property2);
|
||||
}
|
||||
|
||||
function isDirectComponentOf(property1, property2) {
|
||||
var descriptor = compactable[property1.name];
|
||||
var descriptor = configuration[property1.name];
|
||||
|
||||
return 'components' in descriptor && descriptor.components.indexOf(property2.name) > -1;
|
||||
}
|
||||
|
96
node_modules/clean-css/lib/optimizer/level-2/properties/merge-into-shorthands.js
generated
vendored
96
node_modules/clean-css/lib/optimizer/level-2/properties/merge-into-shorthands.js
generated
vendored
@@ -1,9 +1,10 @@
|
||||
var everyValuesPair = require('./every-values-pair');
|
||||
var hasInherit = require('./has-inherit');
|
||||
var hasSameValues = require('./has-same-values');
|
||||
var populateComponents = require('./populate-components');
|
||||
|
||||
var compactable = require('../compactable');
|
||||
var deepClone = require('../clone').deep;
|
||||
var configuration = require('../../configuration');
|
||||
var deepClone = require('../../clone').deep;
|
||||
var restoreWithComponents = require('../restore-with-components');
|
||||
|
||||
var restoreFromOptimizing = require('../../restore-from-optimizing');
|
||||
@@ -27,7 +28,11 @@ function mergeIntoShorthands(properties, validator) {
|
||||
|
||||
for (i = 0, l = properties.length; i < l; i++) {
|
||||
property = properties[i];
|
||||
descriptor = compactable[property.name];
|
||||
descriptor = configuration[property.name];
|
||||
|
||||
if (property.dynamic) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (property.unused) {
|
||||
continue;
|
||||
@@ -41,6 +46,10 @@ function mergeIntoShorthands(properties, validator) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (descriptor && descriptor.singleTypeComponents && !hasSameValues(property)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
invalidateOrCompact(properties, i, candidates, validator);
|
||||
|
||||
if (descriptor && descriptor.componentOf) {
|
||||
@@ -61,13 +70,15 @@ function invalidateOrCompact(properties, position, candidates, validator) {
|
||||
var shorthandName;
|
||||
var shorthandDescriptor;
|
||||
var candidateComponents;
|
||||
var replacedCandidates = [];
|
||||
var i;
|
||||
|
||||
for (shorthandName in candidates) {
|
||||
if (undefined !== invalidatedBy && shorthandName == invalidatedBy.name) {
|
||||
continue;
|
||||
}
|
||||
|
||||
shorthandDescriptor = compactable[shorthandName];
|
||||
shorthandDescriptor = configuration[shorthandName];
|
||||
candidateComponents = candidates[shorthandName];
|
||||
if (invalidatedBy && invalidates(candidates, shorthandName, invalidatedBy)) {
|
||||
delete candidates[shorthandName];
|
||||
@@ -95,12 +106,18 @@ function invalidateOrCompact(properties, position, candidates, validator) {
|
||||
} else {
|
||||
replaceWithShorthand(properties, candidateComponents, shorthandName, validator);
|
||||
}
|
||||
|
||||
replacedCandidates.push(shorthandName);
|
||||
}
|
||||
|
||||
for (i = replacedCandidates.length - 1; i >= 0; i--) {
|
||||
delete candidates[replacedCandidates[i]];
|
||||
}
|
||||
}
|
||||
|
||||
function invalidates(candidates, shorthandName, invalidatedBy) {
|
||||
var shorthandDescriptor = compactable[shorthandName];
|
||||
var invalidatedByDescriptor = compactable[invalidatedBy.name];
|
||||
var shorthandDescriptor = configuration[shorthandName];
|
||||
var invalidatedByDescriptor = configuration[invalidatedBy.name];
|
||||
var componentName;
|
||||
|
||||
if ('overridesShorthands' in shorthandDescriptor && shorthandDescriptor.overridesShorthands.indexOf(invalidatedBy.name) > -1) {
|
||||
@@ -134,7 +151,7 @@ function mixedImportance(components) {
|
||||
}
|
||||
|
||||
function overridable(components, shorthandName, validator) {
|
||||
var descriptor = compactable[shorthandName];
|
||||
var descriptor = configuration[shorthandName];
|
||||
var newValuePlaceholder = [
|
||||
Token.PROPERTY,
|
||||
[Token.PROPERTY_NAME, shorthandName],
|
||||
@@ -149,7 +166,7 @@ function overridable(components, shorthandName, validator) {
|
||||
|
||||
for (i = 0, l = descriptor.components.length; i < l; i++) {
|
||||
component = components[descriptor.components[i]];
|
||||
mayOverride = compactable[component.name].canOverride;
|
||||
mayOverride = configuration[component.name].canOverride || sameValue;
|
||||
|
||||
if (!everyValuesPair(mayOverride.bind(null, validator), newProperty.components[i], component)) {
|
||||
return false;
|
||||
@@ -159,6 +176,10 @@ function overridable(components, shorthandName, validator) {
|
||||
return true;
|
||||
}
|
||||
|
||||
function sameValue(_validator, value1, value2) {
|
||||
return value1 === value2;
|
||||
}
|
||||
|
||||
function mergeable(components) {
|
||||
var lastCount = null;
|
||||
var currentCount;
|
||||
@@ -169,14 +190,14 @@ function mergeable(components) {
|
||||
|
||||
for (componentName in components) {
|
||||
component = components[componentName];
|
||||
descriptor = compactable[componentName];
|
||||
descriptor = configuration[componentName];
|
||||
|
||||
if (!('restore' in descriptor)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
restoreFromOptimizing([component.all[component.position]], restoreWithComponents);
|
||||
values = descriptor.restore(component, compactable);
|
||||
values = descriptor.restore(component, configuration);
|
||||
|
||||
currentCount = values.length;
|
||||
|
||||
@@ -217,24 +238,30 @@ function replaceWithInheritBestFit(properties, candidateComponents, shorthandNam
|
||||
var newTokensSequence = isLonghandsShorter ? longhandTokensSequence : shorthandTokensSequence;
|
||||
var newProperty = isLonghandsShorter ? viaLonghands[1] : viaShorthand[1];
|
||||
var newComponents = isLonghandsShorter ? viaLonghands[2] : viaShorthand[2];
|
||||
var all = candidateComponents[Object.keys(candidateComponents)[0]].all;
|
||||
var lastComponent = candidateComponents[Object.keys(candidateComponents).pop()];
|
||||
var all = lastComponent.all;
|
||||
var insertAt = lastComponent.position;
|
||||
var componentName;
|
||||
var oldComponent;
|
||||
var newComponent;
|
||||
var newToken;
|
||||
|
||||
newProperty.position = all.length;
|
||||
newProperty.position = insertAt;
|
||||
newProperty.shorthand = true;
|
||||
newProperty.important = lastComponent.important;
|
||||
newProperty.multiplex = false;
|
||||
newProperty.dirty = true;
|
||||
newProperty.all = all;
|
||||
newProperty.all.push(newTokensSequence[0]);
|
||||
newProperty.all[insertAt] = newTokensSequence[0];
|
||||
|
||||
properties.push(newProperty);
|
||||
properties.splice(insertAt, 1, newProperty);
|
||||
|
||||
for (componentName in candidateComponents) {
|
||||
oldComponent = candidateComponents[componentName];
|
||||
oldComponent.unused = true;
|
||||
|
||||
newProperty.multiplex = newProperty.multiplex || oldComponent.multiplex;
|
||||
|
||||
if (oldComponent.name in newComponents) {
|
||||
newComponent = newComponents[oldComponent.name];
|
||||
newToken = findTokenIn(newTokensSequence, componentName);
|
||||
@@ -252,7 +279,7 @@ function buildSequenceWithInheritLonghands(components, shorthandName, validator)
|
||||
var tokensSequence = [];
|
||||
var inheritComponents = {};
|
||||
var nonInheritComponents = {};
|
||||
var descriptor = compactable[shorthandName];
|
||||
var descriptor = configuration[shorthandName];
|
||||
var shorthandToken = [
|
||||
Token.PROPERTY,
|
||||
[Token.PROPERTY_NAME, shorthandName],
|
||||
@@ -289,6 +316,8 @@ function buildSequenceWithInheritLonghands(components, shorthandName, validator)
|
||||
}
|
||||
}
|
||||
|
||||
newProperty.important = components[Object.keys(components).pop()].important;
|
||||
|
||||
nameMetadata = joinMetadata(nonInheritComponents, 1);
|
||||
shorthandToken[1].push(nameMetadata);
|
||||
|
||||
@@ -303,7 +332,7 @@ function buildSequenceWithInheritLonghands(components, shorthandName, validator)
|
||||
}
|
||||
|
||||
function inferComponentValue(components, propertyName) {
|
||||
var descriptor = compactable[propertyName];
|
||||
var descriptor = configuration[propertyName];
|
||||
|
||||
if ('oppositeTo' in descriptor) {
|
||||
return components[descriptor.oppositeTo].value;
|
||||
@@ -349,7 +378,7 @@ function buildSequenceWithInheritShorthand(components, shorthandName, validator)
|
||||
var tokensSequence = [];
|
||||
var inheritComponents = {};
|
||||
var nonInheritComponents = {};
|
||||
var descriptor = compactable[shorthandName];
|
||||
var descriptor = configuration[shorthandName];
|
||||
var shorthandToken = [
|
||||
Token.PROPERTY,
|
||||
[Token.PROPERTY_NAME, shorthandName],
|
||||
@@ -400,7 +429,7 @@ function findTokenIn(tokens, componentName) {
|
||||
}
|
||||
|
||||
function replaceWithShorthand(properties, candidateComponents, shorthandName, validator) {
|
||||
var descriptor = compactable[shorthandName];
|
||||
var descriptor = configuration[shorthandName];
|
||||
var nameMetadata;
|
||||
var valueMetadata;
|
||||
var newValuePlaceholder = [
|
||||
@@ -409,10 +438,12 @@ function replaceWithShorthand(properties, candidateComponents, shorthandName, va
|
||||
[Token.PROPERTY_VALUE, descriptor.defaultValue]
|
||||
];
|
||||
var all;
|
||||
var insertAt = inferInsertAtFrom(properties, candidateComponents, shorthandName);
|
||||
|
||||
var newProperty = wrapSingle(newValuePlaceholder);
|
||||
newProperty.shorthand = true;
|
||||
newProperty.dirty = true;
|
||||
newProperty.multiplex = false;
|
||||
|
||||
populateComponents([newProperty], validator, []);
|
||||
|
||||
@@ -421,6 +452,7 @@ function replaceWithShorthand(properties, candidateComponents, shorthandName, va
|
||||
|
||||
newProperty.components[i] = deepClone(component);
|
||||
newProperty.important = component.important;
|
||||
newProperty.multiplex = newProperty.multiplex || component.multiplex;
|
||||
|
||||
all = component.all;
|
||||
}
|
||||
@@ -435,11 +467,33 @@ function replaceWithShorthand(properties, candidateComponents, shorthandName, va
|
||||
valueMetadata = joinMetadata(candidateComponents, 2);
|
||||
newValuePlaceholder[2].push(valueMetadata);
|
||||
|
||||
newProperty.position = all.length;
|
||||
newProperty.position = insertAt;
|
||||
newProperty.all = all;
|
||||
newProperty.all.push(newValuePlaceholder);
|
||||
newProperty.all[insertAt] = newValuePlaceholder;
|
||||
|
||||
properties.push(newProperty);
|
||||
properties.splice(insertAt, 1, newProperty);
|
||||
}
|
||||
|
||||
function inferInsertAtFrom(properties, candidateComponents, shorthandName) {
|
||||
var candidateComponentNames = Object.keys(candidateComponents);
|
||||
var firstCandidatePosition = candidateComponents[candidateComponentNames[0]].position;
|
||||
var lastCandidatePosition = candidateComponents[candidateComponentNames[candidateComponentNames.length - 1]].position;
|
||||
|
||||
if (shorthandName == 'border' && traversesVia(properties.slice(firstCandidatePosition, lastCandidatePosition), 'border-image')) {
|
||||
return firstCandidatePosition;
|
||||
} else {
|
||||
return lastCandidatePosition;
|
||||
}
|
||||
}
|
||||
|
||||
function traversesVia(properties, propertyName) {
|
||||
for (var i = properties.length - 1; i >= 0; i--) {
|
||||
if (properties[i].name == propertyName) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
module.exports = mergeIntoShorthands;
|
||||
|
2
node_modules/clean-css/lib/optimizer/level-2/properties/optimize.js
generated
vendored
2
node_modules/clean-css/lib/optimizer/level-2/properties/optimize.js
generated
vendored
@@ -12,7 +12,7 @@ var OptimizationLevel = require('../../../options/optimization-level').Optimizat
|
||||
|
||||
function optimizeProperties(properties, withOverriding, withMerging, context) {
|
||||
var levelOptions = context.options.level[OptimizationLevel.Two];
|
||||
var _properties = wrapForOptimizing(properties, false, levelOptions.skipProperties);
|
||||
var _properties = wrapForOptimizing(properties, levelOptions.skipProperties);
|
||||
var _property;
|
||||
var i, l;
|
||||
|
||||
|
47
node_modules/clean-css/lib/optimizer/level-2/properties/override-properties.js
generated
vendored
47
node_modules/clean-css/lib/optimizer/level-2/properties/override-properties.js
generated
vendored
@@ -1,15 +1,16 @@
|
||||
var hasInherit = require('./has-inherit');
|
||||
var hasUnset = require('./has-unset');
|
||||
var everyValuesPair = require('./every-values-pair');
|
||||
var findComponentIn = require('./find-component-in');
|
||||
var isComponentOf = require('./is-component-of');
|
||||
var isMergeableShorthand = require('./is-mergeable-shorthand');
|
||||
var overridesNonComponentShorthand = require('./overrides-non-component-shorthand');
|
||||
var sameVendorPrefixesIn = require('./vendor-prefixes').same;
|
||||
var sameVendorPrefixesIn = require('./../../vendor-prefixes').same;
|
||||
|
||||
var compactable = require('../compactable');
|
||||
var deepClone = require('../clone').deep;
|
||||
var configuration = require('../../configuration');
|
||||
var deepClone = require('../../clone').deep;
|
||||
var restoreWithComponents = require('../restore-with-components');
|
||||
var shallowClone = require('../clone').shallow;
|
||||
var shallowClone = require('../../clone').shallow;
|
||||
|
||||
var restoreFromOptimizing = require('../../restore-from-optimizing');
|
||||
|
||||
@@ -18,11 +19,15 @@ var Marker = require('../../../tokenizer/marker');
|
||||
|
||||
var serializeProperty = require('../../../writer/one-time').property;
|
||||
|
||||
function sameValue(_validator, value1, value2) {
|
||||
return value1 === value2;
|
||||
}
|
||||
|
||||
function wouldBreakCompatibility(property, validator) {
|
||||
for (var i = 0; i < property.components.length; i++) {
|
||||
var component = property.components[i];
|
||||
var descriptor = compactable[component.name];
|
||||
var canOverride = descriptor && descriptor.canOverride || canOverride.sameValue;
|
||||
var descriptor = configuration[component.name];
|
||||
var canOverride = descriptor && descriptor.canOverride || sameValue;
|
||||
|
||||
var _component = shallowClone(component);
|
||||
_component.value = [[Token.PROPERTY_VALUE, descriptor.defaultValue]];
|
||||
@@ -73,7 +78,7 @@ function overrideShorthand(property, by) {
|
||||
function turnIntoMultiplex(property, size) {
|
||||
property.multiplex = true;
|
||||
|
||||
if (compactable[property.name].shorthand) {
|
||||
if (configuration[property.name].shorthand) {
|
||||
turnShorthandValueIntoMultiplex(property, size);
|
||||
} else {
|
||||
turnLonghandValueIntoMultiplex(property, size);
|
||||
@@ -94,7 +99,7 @@ function turnShorthandValueIntoMultiplex(property, size) {
|
||||
}
|
||||
|
||||
function turnLonghandValueIntoMultiplex(property, size) {
|
||||
var descriptor = compactable[property.name];
|
||||
var descriptor = configuration[property.name];
|
||||
var withRealValue = descriptor.intoMultiplexMode == 'real';
|
||||
var withValue = descriptor.intoMultiplexMode == 'real' ?
|
||||
property.value.slice(0) :
|
||||
@@ -206,7 +211,7 @@ function wouldResultInLongerValue(left, right) {
|
||||
}
|
||||
|
||||
function isCompactable(property) {
|
||||
return property.name in compactable;
|
||||
return property.name in configuration;
|
||||
}
|
||||
|
||||
function noneOverrideHack(left, right) {
|
||||
@@ -263,7 +268,7 @@ function overrideProperties(properties, withMerging, compatibility, validator) {
|
||||
if (right.block)
|
||||
continue;
|
||||
|
||||
mayOverride = compactable[right.name].canOverride;
|
||||
mayOverride = configuration[right.name].canOverride || sameValue;
|
||||
|
||||
traverseLoop:
|
||||
for (j = i - 1; j >= 0; j--) {
|
||||
@@ -275,6 +280,9 @@ function overrideProperties(properties, withMerging, compatibility, validator) {
|
||||
if (left.block)
|
||||
continue;
|
||||
|
||||
if (left.dynamic || right.dynamic)
|
||||
continue;
|
||||
|
||||
if (left.unused || right.unused)
|
||||
continue;
|
||||
|
||||
@@ -310,7 +318,7 @@ function overrideProperties(properties, withMerging, compatibility, validator) {
|
||||
}
|
||||
|
||||
component = findComponentIn(right, left);
|
||||
mayOverride = compactable[left.name].canOverride;
|
||||
mayOverride = configuration[left.name].canOverride || sameValue;
|
||||
if (everyValuesPair(mayOverride.bind(null, validator), left, component)) {
|
||||
left.unused = true;
|
||||
}
|
||||
@@ -335,7 +343,7 @@ function overrideProperties(properties, withMerging, compatibility, validator) {
|
||||
for (k = overriddenComponents.length - 1; k >= 0; k--) {
|
||||
overriddenComponent = overriddenComponents[k];
|
||||
overridingComponent = findComponentIn(right, overriddenComponent);
|
||||
mayOverride = compactable[overriddenComponent.name].canOverride;
|
||||
mayOverride = configuration[overriddenComponent.name].canOverride || sameValue;
|
||||
|
||||
if (!everyValuesPair(mayOverride.bind(null, validator), left, overridingComponent)) {
|
||||
continue traverseLoop;
|
||||
@@ -363,13 +371,16 @@ function overrideProperties(properties, withMerging, compatibility, validator) {
|
||||
if (!isMergeableShorthand(left))
|
||||
continue;
|
||||
|
||||
if (hasUnset(left) || hasUnset(right))
|
||||
continue;
|
||||
|
||||
component = findComponentIn(left, right);
|
||||
if (everyValuesPair(mayOverride.bind(null, validator), component, right)) {
|
||||
var disabledBackgroundMerging =
|
||||
!compatibility.properties.backgroundClipMerging && component.name.indexOf('background-clip') > -1 ||
|
||||
!compatibility.properties.backgroundOriginMerging && component.name.indexOf('background-origin') > -1 ||
|
||||
!compatibility.properties.backgroundSizeMerging && component.name.indexOf('background-size') > -1;
|
||||
var nonMergeableValue = compactable[right.name].nonMergeableValue === right.value[0][1];
|
||||
var nonMergeableValue = configuration[right.name].nonMergeableValue === right.value[0][1];
|
||||
|
||||
if (disabledBackgroundMerging || nonMergeableValue)
|
||||
continue;
|
||||
@@ -414,7 +425,7 @@ function overrideProperties(properties, withMerging, compatibility, validator) {
|
||||
var leftComponent = left.components[k];
|
||||
var rightComponent = right.components[k];
|
||||
|
||||
mayOverride = compactable[leftComponent.name].canOverride;
|
||||
mayOverride = configuration[leftComponent.name].canOverride || sameValue;
|
||||
if (!everyValuesPair(mayOverride.bind(null, validator), leftComponent, rightComponent))
|
||||
continue propertyLoop;
|
||||
}
|
||||
@@ -428,7 +439,7 @@ function overrideProperties(properties, withMerging, compatibility, validator) {
|
||||
continue;
|
||||
|
||||
component = findComponentIn(left, right);
|
||||
mayOverride = compactable[right.name].canOverride;
|
||||
mayOverride = configuration[right.name].canOverride || sameValue;
|
||||
if (!everyValuesPair(mayOverride.bind(null, validator), component, right))
|
||||
continue;
|
||||
|
||||
@@ -437,7 +448,7 @@ function overrideProperties(properties, withMerging, compatibility, validator) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var rightRestored = compactable[right.name].restore(right, compactable);
|
||||
var rightRestored = configuration[right.name].restore(right, configuration);
|
||||
if (rightRestored.length > 1)
|
||||
continue;
|
||||
|
||||
@@ -452,12 +463,12 @@ function overrideProperties(properties, withMerging, compatibility, validator) {
|
||||
for (k = right.components.length - 1; k >= 0 && overridable; k--) {
|
||||
overriddenComponent = left.components[k];
|
||||
overridingComponent = right.components[k];
|
||||
mayOverride = compactable[overridingComponent.name].canOverride;
|
||||
mayOverride = configuration[overridingComponent.name].canOverride || sameValue;
|
||||
|
||||
overridable = overridable && everyValuesPair(mayOverride.bind(null, validator), overriddenComponent, overridingComponent);
|
||||
}
|
||||
} else {
|
||||
mayOverride = compactable[right.name].canOverride;
|
||||
mayOverride = configuration[right.name].canOverride || sameValue;
|
||||
overridable = everyValuesPair(mayOverride.bind(null, validator), left, right);
|
||||
}
|
||||
|
||||
|
@@ -1,9 +1,9 @@
|
||||
var compactable = require('../compactable');
|
||||
var configuration = require('../../configuration');
|
||||
|
||||
function overridesNonComponentShorthand(property1, property2) {
|
||||
return property1.name in compactable &&
|
||||
'overridesShorthands' in compactable[property1.name] &&
|
||||
compactable[property1.name].overridesShorthands.indexOf(property2.name) > -1;
|
||||
return property1.name in configuration &&
|
||||
'overridesShorthands' in configuration[property1.name] &&
|
||||
configuration[property1.name].overridesShorthands.indexOf(property2.name) > -1;
|
||||
}
|
||||
|
||||
module.exports = overridesNonComponentShorthand;
|
||||
|
25
node_modules/clean-css/lib/optimizer/level-2/properties/populate-components.js
generated
vendored
25
node_modules/clean-css/lib/optimizer/level-2/properties/populate-components.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
var compactable = require('../compactable');
|
||||
var InvalidPropertyError = require('../invalid-property-error');
|
||||
var configuration = require('../../configuration');
|
||||
var InvalidPropertyError = require('../../invalid-property-error');
|
||||
|
||||
function populateComponents(properties, validator, warnings) {
|
||||
var component;
|
||||
@@ -7,19 +7,24 @@ function populateComponents(properties, validator, warnings) {
|
||||
|
||||
for (var i = properties.length - 1; i >= 0; i--) {
|
||||
var property = properties[i];
|
||||
var descriptor = compactable[property.name];
|
||||
var descriptor = configuration[property.name];
|
||||
|
||||
if (!property.dynamic && descriptor && descriptor.shorthand) {
|
||||
if (onlyValueIsVariable(property, validator) || moreThanOneValueIsVariable(property, validator)) {
|
||||
property.optimizable = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (descriptor && descriptor.shorthand) {
|
||||
property.shorthand = true;
|
||||
property.dirty = true;
|
||||
|
||||
try {
|
||||
property.components = descriptor.breakUp(property, compactable, validator);
|
||||
property.components = descriptor.breakUp(property, configuration, validator);
|
||||
|
||||
if (descriptor.shorthandComponents) {
|
||||
for (j = 0, m = property.components.length; j < m; j++) {
|
||||
component = property.components[j];
|
||||
component.components = compactable[component.name].breakUp(component, compactable, validator);
|
||||
component.components = configuration[component.name].breakUp(component, configuration, validator);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
@@ -39,4 +44,12 @@ function populateComponents(properties, validator, warnings) {
|
||||
}
|
||||
}
|
||||
|
||||
function onlyValueIsVariable(property, validator) {
|
||||
return property.value.length == 1 && validator.isVariable(property.value[0][1]);
|
||||
}
|
||||
|
||||
function moreThanOneValueIsVariable(property, validator) {
|
||||
return property.value.length > 1 && property.value.filter(function (value) { return validator.isVariable(value[1]); }).length > 1;
|
||||
}
|
||||
|
||||
module.exports = populateComponents;
|
||||
|
15
node_modules/clean-css/lib/optimizer/level-2/properties/understandable.js
generated
vendored
15
node_modules/clean-css/lib/optimizer/level-2/properties/understandable.js
generated
vendored
@@ -1,15 +0,0 @@
|
||||
var sameVendorPrefixes = require('./vendor-prefixes').same;
|
||||
|
||||
function understandable(validator, value1, value2, _position, isPaired) {
|
||||
if (!sameVendorPrefixes(value1, value2)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isPaired && validator.isVariable(value1) !== validator.isVariable(value2)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
module.exports = understandable;
|
23
node_modules/clean-css/lib/optimizer/level-2/properties/vendor-prefixes.js
generated
vendored
23
node_modules/clean-css/lib/optimizer/level-2/properties/vendor-prefixes.js
generated
vendored
@@ -1,23 +0,0 @@
|
||||
var VENDOR_PREFIX_PATTERN = /(?:^|\W)(\-\w+\-)/g;
|
||||
|
||||
function unique(value) {
|
||||
var prefixes = [];
|
||||
var match;
|
||||
|
||||
while ((match = VENDOR_PREFIX_PATTERN.exec(value)) !== null) {
|
||||
if (prefixes.indexOf(match[0]) == -1) {
|
||||
prefixes.push(match[0]);
|
||||
}
|
||||
}
|
||||
|
||||
return prefixes;
|
||||
}
|
||||
|
||||
function same(value1, value2) {
|
||||
return unique(value1).sort().join(',') == unique(value2).sort().join(',');
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
unique: unique,
|
||||
same: same
|
||||
};
|
6
node_modules/clean-css/lib/optimizer/level-2/restore-with-components.js
generated
vendored
6
node_modules/clean-css/lib/optimizer/level-2/restore-with-components.js
generated
vendored
@@ -1,10 +1,10 @@
|
||||
var compactable = require('./compactable');
|
||||
var configuration = require('../configuration');
|
||||
|
||||
function restoreWithComponents(property) {
|
||||
var descriptor = compactable[property.name];
|
||||
var descriptor = configuration[property.name];
|
||||
|
||||
if (descriptor && descriptor.shorthand) {
|
||||
return descriptor.restore(property, compactable);
|
||||
return descriptor.restore(property, configuration);
|
||||
} else {
|
||||
return property.value;
|
||||
}
|
||||
|
303
node_modules/clean-css/lib/optimizer/level-2/restore.js
generated
vendored
303
node_modules/clean-css/lib/optimizer/level-2/restore.js
generated
vendored
@@ -1,303 +0,0 @@
|
||||
var shallowClone = require('./clone').shallow;
|
||||
|
||||
var Token = require('../../tokenizer/token');
|
||||
var Marker = require('../../tokenizer/marker');
|
||||
|
||||
function isInheritOnly(values) {
|
||||
for (var i = 0, l = values.length; i < l; i++) {
|
||||
var value = values[i][1];
|
||||
|
||||
if (value != 'inherit' && value != Marker.COMMA && value != Marker.FORWARD_SLASH)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function background(property, compactable, lastInMultiplex) {
|
||||
var components = property.components;
|
||||
var restored = [];
|
||||
var needsOne, needsBoth;
|
||||
|
||||
function restoreValue(component) {
|
||||
Array.prototype.unshift.apply(restored, component.value);
|
||||
}
|
||||
|
||||
function isDefaultValue(component) {
|
||||
var descriptor = compactable[component.name];
|
||||
|
||||
if (descriptor.doubleValues && descriptor.defaultValue.length == 1) {
|
||||
return component.value[0][1] == descriptor.defaultValue[0] && (component.value[1] ? component.value[1][1] == descriptor.defaultValue[0] : true);
|
||||
} else if (descriptor.doubleValues && descriptor.defaultValue.length != 1) {
|
||||
return component.value[0][1] == descriptor.defaultValue[0] && (component.value[1] ? component.value[1][1] : component.value[0][1]) == descriptor.defaultValue[1];
|
||||
} else {
|
||||
return component.value[0][1] == descriptor.defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = components.length - 1; i >= 0; i--) {
|
||||
var component = components[i];
|
||||
var isDefault = isDefaultValue(component);
|
||||
|
||||
if (component.name == 'background-clip') {
|
||||
var originComponent = components[i - 1];
|
||||
var isOriginDefault = isDefaultValue(originComponent);
|
||||
|
||||
needsOne = component.value[0][1] == originComponent.value[0][1];
|
||||
|
||||
needsBoth = !needsOne && (
|
||||
(isOriginDefault && !isDefault) ||
|
||||
(!isOriginDefault && !isDefault) ||
|
||||
(!isOriginDefault && isDefault && component.value[0][1] != originComponent.value[0][1]));
|
||||
|
||||
if (needsOne) {
|
||||
restoreValue(originComponent);
|
||||
} else if (needsBoth) {
|
||||
restoreValue(component);
|
||||
restoreValue(originComponent);
|
||||
}
|
||||
|
||||
i--;
|
||||
} else if (component.name == 'background-size') {
|
||||
var positionComponent = components[i - 1];
|
||||
var isPositionDefault = isDefaultValue(positionComponent);
|
||||
|
||||
needsOne = !isPositionDefault && isDefault;
|
||||
|
||||
needsBoth = !needsOne &&
|
||||
(isPositionDefault && !isDefault || !isPositionDefault && !isDefault);
|
||||
|
||||
if (needsOne) {
|
||||
restoreValue(positionComponent);
|
||||
} else if (needsBoth) {
|
||||
restoreValue(component);
|
||||
restored.unshift([Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]);
|
||||
restoreValue(positionComponent);
|
||||
} else if (positionComponent.value.length == 1) {
|
||||
restoreValue(positionComponent);
|
||||
}
|
||||
|
||||
i--;
|
||||
} else {
|
||||
if (isDefault || compactable[component.name].multiplexLastOnly && !lastInMultiplex)
|
||||
continue;
|
||||
|
||||
restoreValue(component);
|
||||
}
|
||||
}
|
||||
|
||||
if (restored.length === 0 && property.value.length == 1 && property.value[0][1] == '0')
|
||||
restored.push(property.value[0]);
|
||||
|
||||
if (restored.length === 0)
|
||||
restored.push([Token.PROPERTY_VALUE, compactable[property.name].defaultValue]);
|
||||
|
||||
if (isInheritOnly(restored))
|
||||
return [restored[0]];
|
||||
|
||||
return restored;
|
||||
}
|
||||
|
||||
function borderRadius(property, compactable) {
|
||||
if (property.multiplex) {
|
||||
var horizontal = shallowClone(property);
|
||||
var vertical = shallowClone(property);
|
||||
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var component = property.components[i];
|
||||
|
||||
var horizontalComponent = shallowClone(property);
|
||||
horizontalComponent.value = [component.value[0]];
|
||||
horizontal.components.push(horizontalComponent);
|
||||
|
||||
var verticalComponent = shallowClone(property);
|
||||
// FIXME: only shorthand compactor (see breakup#borderRadius) knows that border radius
|
||||
// longhands have two values, whereas tokenizer does not care about populating 2nd value
|
||||
// if it's missing, hence this fallback
|
||||
verticalComponent.value = [component.value[1] || component.value[0]];
|
||||
vertical.components.push(verticalComponent);
|
||||
}
|
||||
|
||||
var horizontalValues = fourValues(horizontal, compactable);
|
||||
var verticalValues = fourValues(vertical, compactable);
|
||||
|
||||
if (horizontalValues.length == verticalValues.length &&
|
||||
horizontalValues[0][1] == verticalValues[0][1] &&
|
||||
(horizontalValues.length > 1 ? horizontalValues[1][1] == verticalValues[1][1] : true) &&
|
||||
(horizontalValues.length > 2 ? horizontalValues[2][1] == verticalValues[2][1] : true) &&
|
||||
(horizontalValues.length > 3 ? horizontalValues[3][1] == verticalValues[3][1] : true)) {
|
||||
return horizontalValues;
|
||||
} else {
|
||||
return horizontalValues.concat([[Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]]).concat(verticalValues);
|
||||
}
|
||||
} else {
|
||||
return fourValues(property, compactable);
|
||||
}
|
||||
}
|
||||
|
||||
function font(property, compactable) {
|
||||
var components = property.components;
|
||||
var restored = [];
|
||||
var component;
|
||||
var componentIndex = 0;
|
||||
var fontFamilyIndex = 0;
|
||||
|
||||
if (property.value[0][1].indexOf(Marker.INTERNAL) === 0) {
|
||||
property.value[0][1] = property.value[0][1].substring(Marker.INTERNAL.length);
|
||||
return property.value;
|
||||
}
|
||||
|
||||
// first four components are optional
|
||||
while (componentIndex < 4) {
|
||||
component = components[componentIndex];
|
||||
|
||||
if (component.value[0][1] != compactable[component.name].defaultValue) {
|
||||
Array.prototype.push.apply(restored, component.value);
|
||||
}
|
||||
|
||||
componentIndex++;
|
||||
}
|
||||
|
||||
// then comes font-size
|
||||
Array.prototype.push.apply(restored, components[componentIndex].value);
|
||||
componentIndex++;
|
||||
|
||||
// then may come line-height
|
||||
if (components[componentIndex].value[0][1] != compactable[components[componentIndex].name].defaultValue) {
|
||||
Array.prototype.push.apply(restored, [[Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]]);
|
||||
Array.prototype.push.apply(restored, components[componentIndex].value);
|
||||
}
|
||||
|
||||
componentIndex++;
|
||||
|
||||
// then comes font-family
|
||||
while (components[componentIndex].value[fontFamilyIndex]) {
|
||||
restored.push(components[componentIndex].value[fontFamilyIndex]);
|
||||
|
||||
if (components[componentIndex].value[fontFamilyIndex + 1]) {
|
||||
restored.push([Token.PROPERTY_VALUE, Marker.COMMA]);
|
||||
}
|
||||
|
||||
fontFamilyIndex++;
|
||||
}
|
||||
|
||||
if (isInheritOnly(restored)) {
|
||||
return [restored[0]];
|
||||
}
|
||||
|
||||
return restored;
|
||||
}
|
||||
|
||||
function fourValues(property) {
|
||||
var components = property.components;
|
||||
var value1 = components[0].value[0];
|
||||
var value2 = components[1].value[0];
|
||||
var value3 = components[2].value[0];
|
||||
var value4 = components[3].value[0];
|
||||
|
||||
if (value1[1] == value2[1] && value1[1] == value3[1] && value1[1] == value4[1]) {
|
||||
return [value1];
|
||||
} else if (value1[1] == value3[1] && value2[1] == value4[1]) {
|
||||
return [value1, value2];
|
||||
} else if (value2[1] == value4[1]) {
|
||||
return [value1, value2, value3];
|
||||
} else {
|
||||
return [value1, value2, value3, value4];
|
||||
}
|
||||
}
|
||||
|
||||
function multiplex(restoreWith) {
|
||||
return function (property, compactable) {
|
||||
if (!property.multiplex)
|
||||
return restoreWith(property, compactable, true);
|
||||
|
||||
var multiplexSize = 0;
|
||||
var restored = [];
|
||||
var componentMultiplexSoFar = {};
|
||||
var i, l;
|
||||
|
||||
// At this point we don't know what's the multiplex size, e.g. how many background layers are there
|
||||
for (i = 0, l = property.components[0].value.length; i < l; i++) {
|
||||
if (property.components[0].value[i][1] == Marker.COMMA)
|
||||
multiplexSize++;
|
||||
}
|
||||
|
||||
for (i = 0; i <= multiplexSize; i++) {
|
||||
var _property = shallowClone(property);
|
||||
|
||||
// We split multiplex into parts and restore them one by one
|
||||
for (var j = 0, m = property.components.length; j < m; j++) {
|
||||
var componentToClone = property.components[j];
|
||||
var _component = shallowClone(componentToClone);
|
||||
_property.components.push(_component);
|
||||
|
||||
// The trick is some properties has more than one value, so we iterate over values looking for
|
||||
// a multiplex separator - a comma
|
||||
for (var k = componentMultiplexSoFar[_component.name] || 0, n = componentToClone.value.length; k < n; k++) {
|
||||
if (componentToClone.value[k][1] == Marker.COMMA) {
|
||||
componentMultiplexSoFar[_component.name] = k + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
_component.value.push(componentToClone.value[k]);
|
||||
}
|
||||
}
|
||||
|
||||
// No we can restore shorthand value
|
||||
var lastInMultiplex = i == multiplexSize;
|
||||
var _restored = restoreWith(_property, compactable, lastInMultiplex);
|
||||
Array.prototype.push.apply(restored, _restored);
|
||||
|
||||
if (i < multiplexSize)
|
||||
restored.push([Token.PROPERTY_VALUE, Marker.COMMA]);
|
||||
}
|
||||
|
||||
return restored;
|
||||
};
|
||||
}
|
||||
|
||||
function withoutDefaults(property, compactable) {
|
||||
var components = property.components;
|
||||
var restored = [];
|
||||
|
||||
for (var i = components.length - 1; i >= 0; i--) {
|
||||
var component = components[i];
|
||||
var descriptor = compactable[component.name];
|
||||
|
||||
if (component.value[0][1] != descriptor.defaultValue || ('keepUnlessDefault' in descriptor) && !isDefault(components, compactable, descriptor.keepUnlessDefault)) {
|
||||
restored.unshift(component.value[0]);
|
||||
}
|
||||
}
|
||||
|
||||
if (restored.length === 0)
|
||||
restored.push([Token.PROPERTY_VALUE, compactable[property.name].defaultValue]);
|
||||
|
||||
if (isInheritOnly(restored))
|
||||
return [restored[0]];
|
||||
|
||||
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,
|
||||
font: font,
|
||||
fourValues: fourValues,
|
||||
multiplex: multiplex,
|
||||
withoutDefaults: withoutDefaults
|
||||
};
|
Reference in New Issue
Block a user