| 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 |
| } |
| }; |