@atlassian/aui
Version:
Atlassian User Interface Framework
96 lines (86 loc) • 3.42 kB
JavaScript
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(['exports'], factory);
} else if (typeof exports !== "undefined") {
factory(exports);
} else {
var mod = {
exports: {}
};
factory(mod.exports);
global.browser = mod.exports;
}
})(this, function (exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.needsLayeringShim = needsLayeringShim;
exports.supportsCalc = supportsCalc;
exports.supportsRequestAnimationFrame = supportsRequestAnimationFrame;
exports.supportsCssTransition = supportsCssTransition;
exports.supportsVoiceOver = supportsVoiceOver;
exports.supportsDateField = supportsDateField;
exports.supportsNewMouseEvent = supportsNewMouseEvent;
var ua = navigator.userAgent.toLowerCase();
var isIE = /msie/.test(ua);
var isWinXP = /windows nt 5.1/.test(ua);
var isWinVista = /windows nt 6.0/.test(ua);
var isWin7 = /windows nt 6.1/.test(ua);
var isMacOSX = /mac os x/.test(ua);
var doesSupportCalc;
var doesSupportCssTransition;
var doesSupportHtml5DateInput;
/**
* Layered elements can get obscured by <object>, <embed>, <select> or sometimes even <iframe>
* on older versions of Windows + Internet Explorer.
* From manual testing, all IE versions on Windows 7 appear to have the bug,
* but no IE versions on Windows 8 have it.
*/
function needsLayeringShim() {
return isIE && (isWinXP || isWinVista || isWin7);
}
function supportsCalc() {
if (typeof doesSupportCalc === 'undefined') {
var d = document.createElement('div');
d.style.cssText = 'height: -webkit-calc(20px + 0); height: calc(20px);';
// browsers will cull the rules they don't understand, so we can check whether
// any were added at all to confirm presence of the calc() behaviour.
doesSupportCalc = d.style.cssText.length > 0;
}
return doesSupportCalc;
}
function supportsRequestAnimationFrame() {
return !!window.requestAnimationFrame;
}
function supportsCssTransition() {
if (typeof doesSupportCssTransition === 'undefined') {
var documentBody = document.body || document.documentElement;
var style = documentBody.style;
doesSupportCssTransition = typeof style.transition === 'string' || typeof style.WebkitTransition === 'string';
}
return doesSupportCssTransition;
}
function supportsVoiceOver() {
return isMacOSX;
}
function supportsDateField() {
if (typeof doesSupportHtml5DateInput === 'undefined') {
var el = document.createElement('input');
el.setAttribute('type', 'date');
doesSupportHtml5DateInput = el.type === 'date';
}
return doesSupportHtml5DateInput;
}
// This is supported everywhere except Chrome 22, but we needed to support this use case due to
// https://bitbucket.org/atlassian/aui/pull-requests/1920/aui-4380-fix-shortcut-not-work-in-old/diff .
function supportsNewMouseEvent() {
try {
new MouseEvent('click');
} catch (e) {
return false;
}
return true;
}
});
//# sourceMappingURL=browser.js.map