forgeplus-react/node_modules/css-vendor/tests/supported-value.js

74 lines
1.8 KiB
JavaScript

'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports['default'] = supportedValue;
var _isInBrowser = require('is-in-browser');
var _isInBrowser2 = _interopRequireDefault(_isInBrowser);
var _prefix = require('./prefix');
var _prefix2 = _interopRequireDefault(_prefix);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var cache = {};
var el = void 0;
if (_isInBrowser2['default']) el = document.createElement('p');
/**
* Returns prefixed value if needed. Returns `false` if value is not supported.
*
* @param {String} property
* @param {String} value
* @return {String|Boolean}
* @api public
*/
function supportedValue(property, value) {
// For server-side rendering.
if (!el) return value;
// It is a string or a number as a string like '1'.
// We want only prefixable values here.
if (typeof value !== 'string' || !isNaN(parseInt(value, 10))) return value;
var cacheKey = property + value;
if (cache[cacheKey] != null) return cache[cacheKey];
// IE can even throw an error in some cases, for e.g. style.content = 'bar'
try {
// Test value as it is.
el.style[property] = value;
} catch (err) {
cache[cacheKey] = false;
return false;
}
// Value is supported as it is.
if (el.style[property] !== '') {
cache[cacheKey] = value;
} else {
// Test value with vendor prefix.
value = _prefix2['default'].css + value;
// Hardcode test to convert "flex" to "-ms-flexbox" for IE10.
if (value === '-ms-flex') value = '-ms-flexbox';
el.style[property] = value;
// Value is supported with vendor prefix.
if (el.style[property] !== '') cache[cacheKey] = value;
}
if (!cache[cacheKey]) cache[cacheKey] = false;
// Reset style value.
el.style[property] = '';
return cache[cacheKey];
}