define([
|
'dojo/has'
|
], function (has) {
|
// This module defines feature tests for CSS3 features such as transitions.
|
// The css-transitions, css-transforms, and css-transforms3d has-features
|
// can report either boolean or string:
|
// * false indicates no support
|
// * true indicates prefix-less support
|
// * string indicates the vendor prefix under which the feature is supported
|
|
var cssPrefixes = ['ms', 'O', 'Moz', 'Webkit'];
|
|
function testStyle(element, property) {
|
var style = element.style,
|
i;
|
|
if (property in style) {
|
// Standard, no prefix
|
return true;
|
}
|
property = property.slice(0, 1).toUpperCase() + property.slice(1);
|
for (i = cssPrefixes.length; i--;) {
|
if ((cssPrefixes[i] + property) in style) {
|
// Vendor-specific css property prefix
|
return cssPrefixes[i];
|
}
|
}
|
|
// Otherwise, not supported
|
return false;
|
}
|
|
has.add('css-transitions', function (global, doc, element) {
|
return testStyle(element, 'transitionProperty');
|
});
|
|
has.add('css-transforms', function (global, doc, element) {
|
return testStyle(element, 'transform');
|
});
|
|
has.add('css-transforms3d', function (global, doc, element) {
|
return testStyle(element, 'perspective');
|
});
|
|
has.add('transitionend', function () {
|
// Infer transitionend event name based on CSS transitions has-feature.
|
var tpfx = has('css-transitions');
|
if (!tpfx) {
|
return false;
|
}
|
if (tpfx === true) {
|
return 'transitionend';
|
}
|
return {
|
ms: 'MSTransitionEnd',
|
O: 'oTransitionEnd',
|
Moz: 'transitionend',
|
Webkit: 'webkitTransitionEnd'
|
}[tpfx];
|
});
|
|
return has;
|
});
|