72 lines
2.0 KiB
JavaScript
72 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports['default'] = supportedProperty;
|
|
|
|
var _isInBrowser = require('is-in-browser');
|
|
|
|
var _isInBrowser2 = _interopRequireDefault(_isInBrowser);
|
|
|
|
var _prefix = require('./prefix');
|
|
|
|
var _prefix2 = _interopRequireDefault(_prefix);
|
|
|
|
var _camelize = require('./camelize');
|
|
|
|
var _camelize2 = _interopRequireDefault(_camelize);
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
var el = void 0;
|
|
var cache = {};
|
|
|
|
if (_isInBrowser2['default']) {
|
|
el = document.createElement('p');
|
|
|
|
/**
|
|
* We test every property on vendor prefix requirement.
|
|
* Once tested, result is cached. It gives us up to 70% perf boost.
|
|
* http://jsperf.com/element-style-object-access-vs-plain-object
|
|
*
|
|
* Prefill cache with known css properties to reduce amount of
|
|
* properties we need to feature test at runtime.
|
|
* http://davidwalsh.name/vendor-prefix
|
|
*/
|
|
var computed = window.getComputedStyle(document.documentElement, '');
|
|
for (var key in computed) {
|
|
if (!isNaN(key)) cache[computed[key]] = computed[key];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test if a property is supported, returns supported property with vendor
|
|
* prefix if required. Returns `false` if not supported.
|
|
*
|
|
* @param {String} prop dash separated
|
|
* @return {String|Boolean}
|
|
* @api public
|
|
*/
|
|
function supportedProperty(prop) {
|
|
// For server-side rendering.
|
|
if (!el) return prop;
|
|
|
|
// We have not tested this prop yet, lets do the test.
|
|
if (cache[prop] != null) return cache[prop];
|
|
|
|
// Camelization is required because we can't test using
|
|
// css syntax for e.g. in FF.
|
|
// Test if property is supported as it is.
|
|
if ((0, _camelize2['default'])(prop) in el.style) {
|
|
cache[prop] = prop;
|
|
}
|
|
// Test if property is supported with vendor prefix.
|
|
else if (_prefix2['default'].js + (0, _camelize2['default'])('-' + prop) in el.style) {
|
|
cache[prop] = _prefix2['default'].css + prop;
|
|
} else {
|
|
cache[prop] = false;
|
|
}
|
|
|
|
return cache[prop];
|
|
} |