62 строки
1.9 KiB
JavaScript
62 строки
1.9 KiB
JavaScript
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*
|
|
* @providesModule ColorPropType
|
|
*/
|
|
'use strict';
|
|
|
|
var ReactPropTypeLocationNames = require('react/lib/ReactPropTypeLocationNames');
|
|
|
|
var normalizeColor = require('normalizeColor');
|
|
|
|
var colorPropType = function(isRequired, props, propName, componentName, location, propFullName) {
|
|
var color = props[propName];
|
|
if (color === undefined || color === null) {
|
|
if (isRequired) {
|
|
var locationName = ReactPropTypeLocationNames[location];
|
|
return new Error(
|
|
'Required ' + locationName + ' `' + (propFullName || propName) +
|
|
'` was not specified in `' + componentName + '`.'
|
|
);
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (typeof color === 'number') {
|
|
// Developers should not use a number, but we are using the prop type
|
|
// both for user provided colors and for transformed ones. This isn't ideal
|
|
// and should be fixed but will do for now...
|
|
return;
|
|
}
|
|
|
|
if (normalizeColor(color) === null) {
|
|
var locationName = ReactPropTypeLocationNames[location];
|
|
return new Error(
|
|
'Invalid ' + locationName + ' `' + (propFullName || propName) +
|
|
'` supplied to `' + componentName + '`: ' + color + '\n' +
|
|
`Valid color formats are
|
|
- '#f0f' (#rgb)
|
|
- '#f0fc' (#rgba)
|
|
- '#ff00ff' (#rrggbb)
|
|
- '#ff00ff00' (#rrggbbaa)
|
|
- 'rgb(255, 255, 255)'
|
|
- 'rgba(255, 255, 255, 1.0)'
|
|
- 'hsl(360, 100%, 100%)'
|
|
- 'hsla(360, 100%, 100%, 1.0)'
|
|
- 'transparent'
|
|
- 'red'
|
|
- 0xff00ff00 (0xrrggbbaa)
|
|
`);
|
|
}
|
|
};
|
|
|
|
var ColorPropType = colorPropType.bind(null, false /* isRequired */);
|
|
ColorPropType.isRequired = colorPropType.bind(null, true /* isRequired */);
|
|
|
|
module.exports = ColorPropType;
|