Properly cache the css transform support result

This commit is contained in:
ahocevar
2014-02-15 17:37:37 +01:00
parent 81f7ea106b
commit 91a736954d

View File

@@ -26,40 +26,41 @@ ol.dom.BrowserFeature = {
* http://caniuse.com/#feat=transforms2d * http://caniuse.com/#feat=transforms2d
* @return {boolean} * @return {boolean}
*/ */
ol.dom.canUseCssTransform = function() { ol.dom.canUseCssTransform = (function() {
goog.asserts.assert(!goog.isNull(document.body));
var canUseCssTransform; var canUseCssTransform;
if (!goog.isDef(canUseCssTransform)) { return function() {
canUseCssTransform = (function() { if (!goog.isDef(canUseCssTransform)) {
goog.asserts.assert(!goog.isNull(document.body));
if (!goog.global.getComputedStyle) { if (!goog.global.getComputedStyle) {
// this browser is ancient // this browser is ancient
return false; canUseCssTransform = false;
} } else {
var el = goog.dom.createElement(goog.dom.TagName.P), var el = goog.dom.createElement(goog.dom.TagName.P),
has2d, has2d,
transforms = { transforms = {
'webkitTransform': '-webkit-transform', 'webkitTransform': '-webkit-transform',
'OTransform': '-o-transform', 'OTransform': '-o-transform',
'msTransform': '-ms-transform', 'msTransform': '-ms-transform',
'MozTransform': '-moz-transform', 'MozTransform': '-moz-transform',
'transform': 'transform' 'transform': 'transform'
}; };
goog.dom.appendChild(document.body, el); goog.dom.appendChild(document.body, el);
for (var t in transforms) { for (var t in transforms) {
if (t in el.style) { if (t in el.style) {
el.style[t] = 'translate(1px,1px)'; el.style[t] = 'translate(1px,1px)';
has2d = goog.global.getComputedStyle(el).getPropertyValue( has2d = goog.global.getComputedStyle(el).getPropertyValue(
transforms[t]); transforms[t]);
}
} }
} goog.dom.removeNode(el);
goog.dom.removeNode(el);
return (goog.isDefAndNotNull(has2d) && has2d.length > 0 && canUseCssTransform = (goog.isDefAndNotNull(has2d) && has2d.length > 0 &&
has2d !== 'none'); has2d !== 'none');
}()); }
} }
return canUseCssTransform; return canUseCssTransform;
}; };
}());
/** /**
@@ -68,40 +69,41 @@ ol.dom.canUseCssTransform = function() {
* http://caniuse.com/#feat=transforms3d * http://caniuse.com/#feat=transforms3d
* @return {boolean} * @return {boolean}
*/ */
ol.dom.canUseCssTransform3D = function() { ol.dom.canUseCssTransform3D = (function() {
goog.asserts.assert(!goog.isNull(document.body));
var canUseCssTransform3D; var canUseCssTransform3D;
if (!goog.isDef(canUseCssTransform3D)) { return function() {
canUseCssTransform3D = (function() { if (!goog.isDef(canUseCssTransform3D)) {
goog.asserts.assert(!goog.isNull(document.body));
if (!goog.global.getComputedStyle) { if (!goog.global.getComputedStyle) {
// this browser is ancient // this browser is ancient
return false; canUseCssTransform3D = false;
} } else {
var el = goog.dom.createElement(goog.dom.TagName.P), var el = goog.dom.createElement(goog.dom.TagName.P),
has3d, has3d,
transforms = { transforms = {
'webkitTransform': '-webkit-transform', 'webkitTransform': '-webkit-transform',
'OTransform': '-o-transform', 'OTransform': '-o-transform',
'msTransform': '-ms-transform', 'msTransform': '-ms-transform',
'MozTransform': '-moz-transform', 'MozTransform': '-moz-transform',
'transform': 'transform' 'transform': 'transform'
}; };
goog.dom.appendChild(document.body, el); goog.dom.appendChild(document.body, el);
for (var t in transforms) { for (var t in transforms) {
if (t in el.style) { if (t in el.style) {
el.style[t] = 'translate3d(1px,1px,1px)'; el.style[t] = 'translate3d(1px,1px,1px)';
has3d = goog.global.getComputedStyle(el).getPropertyValue( has3d = goog.global.getComputedStyle(el).getPropertyValue(
transforms[t]); transforms[t]);
}
} }
} goog.dom.removeNode(el);
goog.dom.removeNode(el);
return (goog.isDefAndNotNull(has3d) && has3d.length > 0 && canUseCssTransform3D = (goog.isDefAndNotNull(has3d) &&
has3d !== 'none'); has3d.length > 0 && has3d !== 'none');
}()); }
} }
return canUseCssTransform3D; return canUseCssTransform3D;
}; };
}());
/** /**