mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-26 07:23:40 +00:00
* convert iD.Detect() iife to a module * iD.Detect() should return loaded locale (except for 'en') (The previous code was a hack to replace the detected locale with the loaded locale. Now that Detect is a module, we can not replace the detected locale from external code, but we can have Detect() return the locale we really want)
90 lines
2.7 KiB
JavaScript
90 lines
2.7 KiB
JavaScript
export function Detect() {
|
|
var detected = {};
|
|
|
|
var ua = navigator.userAgent,
|
|
m = null;
|
|
|
|
m = ua.match(/(edge)\/?\s*(\.?\d+(\.\d+)*)/i); // Edge
|
|
if (m !== null) {
|
|
detected.browser = m[1];
|
|
detected.version = m[2];
|
|
}
|
|
if (!detected.browser) {
|
|
m = ua.match(/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/i); // IE11
|
|
if (m !== null) {
|
|
detected.browser = 'msie';
|
|
detected.version = m[1];
|
|
}
|
|
}
|
|
if (!detected.browser) {
|
|
m = ua.match(/(opr)\/?\s*(\.?\d+(\.\d+)*)/i); // Opera 15+
|
|
if (m !== null) {
|
|
detected.browser = 'Opera';
|
|
detected.version = m[2];
|
|
}
|
|
}
|
|
if (!detected.browser) {
|
|
m = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
|
|
if (m !== null) {
|
|
detected.browser = m[1];
|
|
detected.version = m[2];
|
|
m = ua.match(/version\/([\.\d]+)/i);
|
|
if (m !== null) detected.version = m[1];
|
|
}
|
|
}
|
|
if (!detected.browser) {
|
|
detected.browser = navigator.appName;
|
|
detected.version = navigator.appVersion;
|
|
}
|
|
|
|
// keep major.minor version only..
|
|
detected.version = detected.version.split(/\W/).slice(0,2).join('.');
|
|
|
|
if (detected.browser.toLowerCase() === 'msie') {
|
|
detected.ie = true;
|
|
detected.browser = 'Internet Explorer';
|
|
detected.support = parseFloat(detected.version) >= 11;
|
|
} else {
|
|
detected.ie = false;
|
|
detected.support = true;
|
|
}
|
|
|
|
// Added due to incomplete svg style support. See #715
|
|
detected.opera = (detected.browser.toLowerCase() === 'opera' && parseFloat(detected.version) < 15 );
|
|
|
|
detected.locale = (navigator.languages && navigator.languages.length)
|
|
? navigator.languages[0] : (navigator.language || navigator.userLanguage || 'en-US');
|
|
|
|
// Loaded locale is stored in window.locale.current()
|
|
// return that instead (except in the situation where 'en' might override 'en-US')
|
|
var loadedLocale = (window.locale && window.locale.current()) || 'en';
|
|
if (loadedLocale !== 'en') {
|
|
detected.locale = loadedLocale;
|
|
}
|
|
|
|
detected.filedrop = (window.FileReader && 'ondrop' in window);
|
|
|
|
function nav(x) {
|
|
return navigator.userAgent.indexOf(x) !== -1;
|
|
}
|
|
|
|
if (nav('Win')) {
|
|
detected.os = 'win';
|
|
detected.platform = 'Windows';
|
|
}
|
|
else if (nav('Mac')) {
|
|
detected.os = 'mac';
|
|
detected.platform = 'Macintosh';
|
|
}
|
|
else if (nav('X11') || nav('Linux')) {
|
|
detected.os = 'linux';
|
|
detected.platform = 'Linux';
|
|
}
|
|
else {
|
|
detected.os = 'win';
|
|
detected.platform = 'Unknown';
|
|
}
|
|
|
|
return detected;
|
|
}
|