can-override.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. var understandable = require('./properties/understandable');
  2. function backgroundPosition(validator, value1, value2) {
  3. if (!understandable(validator, value1, value2, 0, true) && !validator.isValidKeywordValue('background-position', value2, true)) {
  4. return false;
  5. } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
  6. return true;
  7. } else if (validator.isValidKeywordValue('background-position', value2, true)) {
  8. return true;
  9. }
  10. return unit(validator, value1, value2);
  11. }
  12. function backgroundSize(validator, value1, value2) {
  13. if (!understandable(validator, value1, value2, 0, true) && !validator.isValidKeywordValue('background-size', value2, true)) {
  14. return false;
  15. } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
  16. return true;
  17. } else if (validator.isValidKeywordValue('background-size', value2, true)) {
  18. return true;
  19. }
  20. return unit(validator, value1, value2);
  21. }
  22. function color(validator, value1, value2) {
  23. if (!understandable(validator, value1, value2, 0, true) && !validator.isValidColor(value2)) {
  24. return false;
  25. } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
  26. return true;
  27. } else if (!validator.colorOpacity && (validator.isValidRgbaColor(value1) || validator.isValidHslaColor(value1))) {
  28. return false;
  29. } else if (!validator.colorOpacity && (validator.isValidRgbaColor(value2) || validator.isValidHslaColor(value2))) {
  30. return false;
  31. } else if (validator.isValidColor(value1) && validator.isValidColor(value2)) {
  32. return true;
  33. }
  34. return sameFunctionOrValue(validator, value1, value2);
  35. }
  36. function components(overrideCheckers) {
  37. return function (validator, value1, value2, position) {
  38. return overrideCheckers[position](validator, value1, value2);
  39. };
  40. }
  41. function image(validator, value1, value2) {
  42. if (!understandable(validator, value1, value2, 0, true) && !validator.isValidImage(value2)) {
  43. return false;
  44. } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
  45. return true;
  46. } else if (validator.isValidImage(value2)) {
  47. return true;
  48. } else if (validator.isValidImage(value1)) {
  49. return false;
  50. }
  51. return sameFunctionOrValue(validator, value1, value2);
  52. }
  53. function keyword(propertyName) {
  54. return function(validator, value1, value2) {
  55. if (!understandable(validator, value1, value2, 0, true) && !validator.isValidKeywordValue(propertyName, value2)) {
  56. return false;
  57. } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
  58. return true;
  59. }
  60. return validator.isValidKeywordValue(propertyName, value2, false);
  61. };
  62. }
  63. function keywordWithGlobal(propertyName) {
  64. return function(validator, value1, value2) {
  65. if (!understandable(validator, value1, value2, 0, true) && !validator.isValidKeywordValue(propertyName, value2, true)) {
  66. return false;
  67. } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
  68. return true;
  69. }
  70. return validator.isValidKeywordValue(propertyName, value2, true);
  71. };
  72. }
  73. function sameFunctionOrValue(validator, value1, value2) {
  74. return validator.areSameFunction(value1, value2) ?
  75. true :
  76. value1 === value2;
  77. }
  78. function textShadow(validator, value1, value2) {
  79. if (!understandable(validator, value1, value2, 0, true) && !validator.isValidTextShadow(value2)) {
  80. return false;
  81. } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
  82. return true;
  83. }
  84. return validator.isValidTextShadow(value2);
  85. }
  86. function unit(validator, value1, value2) {
  87. if (!understandable(validator, value1, value2, 0, true) && !validator.isValidUnitWithoutFunction(value2)) {
  88. return false;
  89. } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
  90. return true;
  91. } else if (validator.isValidUnitWithoutFunction(value1) && !validator.isValidUnitWithoutFunction(value2)) {
  92. return false;
  93. } else if (validator.isValidUnitWithoutFunction(value2)) {
  94. return true;
  95. } else if (validator.isValidUnitWithoutFunction(value1)) {
  96. return false;
  97. } else if (validator.isValidFunctionWithoutVendorPrefix(value1) && validator.isValidFunctionWithoutVendorPrefix(value2)) {
  98. return true;
  99. }
  100. return sameFunctionOrValue(validator, value1, value2);
  101. }
  102. function unitOrKeywordWithGlobal(propertyName) {
  103. var byKeyword = keywordWithGlobal(propertyName);
  104. return function(validator, value1, value2) {
  105. return unit(validator, value1, value2) || byKeyword(validator, value1, value2);
  106. };
  107. }
  108. function zIndex(validator, value1, value2) {
  109. if (!understandable(validator, value1, value2, 0, true) && !validator.isValidZIndex(value2)) {
  110. return false;
  111. } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
  112. return true;
  113. }
  114. return validator.isValidZIndex(value2);
  115. }
  116. module.exports = {
  117. generic: {
  118. color: color,
  119. components: components,
  120. image: image,
  121. unit: unit
  122. },
  123. property: {
  124. backgroundAttachment: keyword('background-attachment'),
  125. backgroundClip: keywordWithGlobal('background-clip'),
  126. backgroundOrigin: keyword('background-origin'),
  127. backgroundPosition: backgroundPosition,
  128. backgroundRepeat: keyword('background-repeat'),
  129. backgroundSize: backgroundSize,
  130. bottom: unitOrKeywordWithGlobal('bottom'),
  131. borderCollapse: keyword('border-collapse'),
  132. borderStyle: keywordWithGlobal('*-style'),
  133. clear: keywordWithGlobal('clear'),
  134. cursor: keywordWithGlobal('cursor'),
  135. display: keywordWithGlobal('display'),
  136. float: keywordWithGlobal('float'),
  137. fontStyle: keywordWithGlobal('font-style'),
  138. left: unitOrKeywordWithGlobal('left'),
  139. fontWeight: keywordWithGlobal('font-weight'),
  140. listStyleType: keywordWithGlobal('list-style-type'),
  141. listStylePosition: keywordWithGlobal('list-style-position'),
  142. outlineStyle: keywordWithGlobal('*-style'),
  143. overflow: keywordWithGlobal('overflow'),
  144. position: keywordWithGlobal('position'),
  145. right: unitOrKeywordWithGlobal('right'),
  146. textAlign: keywordWithGlobal('text-align'),
  147. textDecoration: keywordWithGlobal('text-decoration'),
  148. textOverflow: keywordWithGlobal('text-overflow'),
  149. textShadow: textShadow,
  150. top: unitOrKeywordWithGlobal('top'),
  151. transform: sameFunctionOrValue,
  152. verticalAlign: unitOrKeywordWithGlobal('vertical-align'),
  153. visibility: keywordWithGlobal('visibility'),
  154. whiteSpace: keywordWithGlobal('white-space'),
  155. zIndex: zIndex
  156. }
  157. };