/**
* @archivo navegador.js
* Navegador @módulo
* /
importar * como Dom desde './dom';
importar ventana desde 'global/window';
const AGENTE_USUARIO = ventana.navegador && ventana.navigator.userAgent || '';
const webkitVersionMap = (/AppleWebKit\/([\d.]+)/i).exec(USER_AGENT);
const appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null;
/ **
* Si este dispositivo es o no un iPod.
*
* @estático
* @const
* @tipo {Booleano}
* /
export const IS_IPOD = (/iPod/i).test(USER_AGENT);
/ **
* La versión de iOS detectada - o `null`.
*
* @estático
* @const
* @type {cadena|null}
* /
export const IOS_VERSION = (función() {
const coincidencia = USER_AGENT.match(/OS (\d+)_/i);
si (coincidencia && partido[1]) {
devolver partido[1];
}
devolver nulo;
}());
/ **
* Si se trata o no de un dispositivo Android.
*
* @estático
* @const
* @tipo {Booleano}
* /
export const IS_ANDROID = (/Android/i).test(USER_AGENT);
/ **
* La versión de Android detectada - o `null`.
*
* @estático
* @const
* @type {número|cadena|null}
* /
exportar const ANDROID_VERSION = (función() {
// Esto coincide con las versiones Major.Minor.Patch de Android
// ANDROID_VERSION es Major.Minor as a Number, si Minor no está disponible, solo se devuelve Major
coincidencia const = USER_AGENT.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);
si (! coincidencia) {
devolver nulo;
}
const mayor = partido[1] && parseFloat(coincidencia[1]);
constante menor = partido[2] && parseFloat(coincidencia[2]);
si (mayor && menor) {
return parseFloat(coincidencia[1] + '.' + coincidencia[2]);
} más si (principal) {
volver mayor;
}
devolver nulo;
}());
/ **
* Si se trata o no de un navegador Android nativo.
*
* @estático
* @const
* @tipo {Booleano}
* /
exportación constante IS_NATIVE_ANDROID = IS_ANDROID && VERSIÓN DE ANDROID < 5 && appleWebkitVersión < 537;
/ **
* Sea o no Mozilla Firefox.
*
* @estático
* @const
* @tipo {Booleano}
* /
export const IS_FIREFOX = (/Firefox/i).test(USER_AGENT);
/ **
* Si se trata o no de Microsoft Edge.
*
* @estático
* @const
* @tipo {Booleano}
* /
export const IS_EDGE = (/Edg/i).test(USER_AGENT);
/ **
* Si esto es o no Google Chrome.
*
* Esto también será "verdadero" para Chrome en iOS, que tendrá un soporte diferente
* ya que en realidad es Safari debajo del capó.
*
* @estático
* @const
* @tipo {Booleano}
* /
exportar const IS_CHROME = !IS_EDGE && ((/Chrome/i).test(USER_AGENT) || (/CriOS/i).test(USER_AGENT));
/ **
* La versión detectada de Google Chrome - o `null`.
*
* @estático
* @const
* @type {número|nulo}
* /
export const CHROME_VERSION = (función() {
coincidencia const = USER_AGENT.match(/(Chrome|CriOS)\/(\d+)/);
si (coincidencia && partido[2]) {
return parseFloat(coincidencia[2]);
}
devolver nulo;
}());
/ **
* La versión detectada de Internet Explorer - o `null`.
*
* @estático
* @const
* @type {número|nulo}
* /
exportar constante IE_VERSION = (función() {
const resultado = (/MSIE\s(\d+)\.\d/).exec(USER_AGENT);
dejar versión = resultado && parseFloat(resultado[1]);
si (! versión && (/Trident\/7.0/i).prueba(USUARIO_AGENTE) && (/rv:11.0/).prueba(AGENTE_USUARIO)) {
// IE 11 tiene una cadena de agente de usuario diferente a otras versiones de IE
versión = 11.0;
}
versión de retorno;
}());
/ **
* Si se trata o no de Safari de escritorio.
*
* @estático
* @const
* @tipo {Booleano}
* /
export const IS_SAFARI = (/Safari/i).test(USER_AGENT) && !ES_CROMO && !ES_ANDROID && !ES_BORDE;
/ **
* Si se trata o no de una máquina con Windows.
*
* @estático
* @const
* @tipo {Booleano}
* /
export const IS_WINDOWS = (/Windows/i).test(USER_AGENT);
/ **
* Si este dispositivo es táctil o no.
*
* @estático
* @const
* @tipo {Booleano}
* /
exportar const TOUCH_ENABLED = Boolean(Dom.isReal() && (
'ontouchstart' en la ventana ||
ventana.navigator.maxTouchPoints ||
ventana.DocumentTouch && ventana.documento instancia de ventana.DocumentTouch));
/ **
* Si este dispositivo es o no un iPad.
*
* @estático
* @const
* @tipo {Booleano}
* /
export const IS_IPAD = (/iPad/i).test(USER_AGENT) ||
(ES_SAFARI && TOQUE_HABILITADO && !(/iPhone/i).prueba(USUARIO_AGENTE));
/ **
* Si este dispositivo es o no un iPhone.
*
* @estático
* @const
* @tipo {Booleano}
* /
// La UIWebView de la aplicación de Facebook se identifica como un iPhone y un iPad, por lo que
// para identificar iPhones, necesitamos excluir iPads.
// http://artsy.github.io/blog/2012/10/18/los-peligros-de-ios-user-agent-sniffing/
export const IS_IPHONE = (/iPhone/i).test(USER_AGENT) && !ES_IPAD;
/ **
* Si se trata o no de un dispositivo iOS.
*
* @estático
* @const
* @tipo {Booleano}
* /
exportar constante IS_IOS = IS_IPHONE || ES_IPAD || ES_IPOD;
/ **
* Ya sea que se trate o no de cualquier sabor de Safari, incluido iOS.
*
* @estático
* @const
* @tipo {Booleano}
* /
exportación constante IS_ANY_SAFARI = (IS_SAFARI || IS_IOS) && !ES_CROMO;