293 lines
11 KiB
JavaScript
293 lines
11 KiB
JavaScript
|
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('('));
|
||
|
|
||
|
var function1Value = value1.substring(function1Name.length + 1, value1.length - 1);
|
||
|
var function2Value = value2.substring(function2Name.length + 1, value2.length - 1);
|
||
|
|
||
|
if (validator.isFunction(function1Value) || validator.isFunction(function2Value)) {
|
||
|
return function1Name === function2Name && areSameFunction(validator, function1Value, function2Value);
|
||
|
} else {
|
||
|
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.colorHexAlpha && (validator.isHexAlphaColor(value1) || validator.isHexAlphaColor(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
|
||
|
}
|
||
|
};
|