Spaces:
Sleeping
Sleeping
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; | |
} 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; | |
} 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); | |
} | |
return function1Name === function2Name; | |
} | |
function backgroundPosition(validator, value1, value2) { | |
if (!understandable(validator, value1, value2, 0, true) | |
&& !(validator.isBackgroundPositionKeyword(value2) || validator.isGlobal(value2))) { | |
return false; | |
} if (validator.isVariable(value1) && validator.isVariable(value2)) { | |
return true; | |
} 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; | |
} if (validator.isVariable(value1) && validator.isVariable(value2)) { | |
return true; | |
} 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; | |
} if (validator.isVariable(value1) && validator.isVariable(value2)) { | |
return true; | |
} if (!validator.colorOpacity && (validator.isRgbColor(value1) || validator.isHslColor(value1))) { | |
return false; | |
} if (!validator.colorOpacity && (validator.isRgbColor(value2) || validator.isHslColor(value2))) { | |
return false; | |
} if (!validator.colorHexAlpha && (validator.isHexAlphaColor(value1) || validator.isHexAlphaColor(value2))) { | |
return false; | |
} 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; | |
} if (validator.isVariable(value1) && validator.isVariable(value2)) { | |
return true; | |
} if (validator.isImage(value2)) { | |
return true; | |
} 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; | |
} 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; | |
} 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; | |
} 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; | |
} 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; | |
} if (validator.isVariable(value1) && validator.isVariable(value2)) { | |
return true; | |
} if (validator.isTime(value1) && !validator.isTime(value2)) { | |
return false; | |
} if (validator.isTime(value2)) { | |
return true; | |
} if (validator.isTime(value1)) { | |
return false; | |
} 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; | |
} 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; | |
} if (validator.isVariable(value1) && validator.isVariable(value2)) { | |
return true; | |
} if (validator.isUnit(value1) && !validator.isUnit(value2)) { | |
return false; | |
} if (validator.isUnit(value2)) { | |
return true; | |
} if (validator.isUnit(value1)) { | |
return false; | |
} 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; | |
} if (validator.isVariable(value1) && validator.isVariable(value2)) { | |
return true; | |
} if ((validator.isUnit(value1) | |
|| validator.isNumber(value1)) | |
&& !(validator.isUnit(value2) | |
|| validator.isNumber(value2))) { | |
return false; | |
} if (validator.isUnit(value2) || validator.isNumber(value2)) { | |
return true; | |
} if (validator.isUnit(value1) || validator.isNumber(value1)) { | |
return false; | |
} 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; | |
} 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 | |
} | |
}; | |