mirror of
https://github.com/gnh1201/welsonjs.git
synced 2026-01-18 23:36:47 +00:00
42 lines
1.7 KiB
JavaScript
42 lines
1.7 KiB
JavaScript
define(['injectElementWithStyles', 'domToCSS', 'computedStyle'], function(injectElementWithStyles, domToCSS, computedStyle) {
|
|
/**
|
|
* nativeTestProps allows for us to use native feature detection functionality if available.
|
|
* some prefixed form, or false, in the case of an unsupported rule
|
|
*
|
|
* @access private
|
|
* @function nativeTestProps
|
|
* @param {Array} props - An array of property names
|
|
* @param {string} value - A string representing the value we want to check via @supports
|
|
* @returns {boolean|undefined} A boolean when @supports exists, undefined otherwise
|
|
*/
|
|
// Accepts a list of property names and a single value
|
|
// Returns `undefined` if native detection not available
|
|
function nativeTestProps(props, value) {
|
|
var i = props.length;
|
|
// Start with the JS API: https://www.w3.org/TR/css3-conditional/#the-css-interface
|
|
if ('CSS' in window && 'supports' in window.CSS) {
|
|
// Try every prefixed variant of the property
|
|
while (i--) {
|
|
if (window.CSS.supports(domToCSS(props[i]), value)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
// Otherwise fall back to at-rule (for Opera 12.x)
|
|
else if ('CSSSupportsRule' in window) {
|
|
// Build a condition string for every prefixed variant
|
|
var conditionText = [];
|
|
while (i--) {
|
|
conditionText.push('(' + domToCSS(props[i]) + ':' + value + ')');
|
|
}
|
|
conditionText = conditionText.join(' or ');
|
|
return injectElementWithStyles('@supports (' + conditionText + ') { #modernizr { position: absolute; } }', function(node) {
|
|
return computedStyle(node, null, 'position') === 'absolute';
|
|
});
|
|
}
|
|
return undefined;
|
|
}
|
|
return nativeTestProps;
|
|
});
|