You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.6 KiB
92 lines
3.6 KiB
define(["./has"], function(has){ |
|
// module: |
|
// dojo/sniff |
|
|
|
/*===== |
|
return function(){ |
|
// summary: |
|
// This module sets has() flags based on the current browser. |
|
// It returns the has() function. |
|
}; |
|
=====*/ |
|
|
|
if(has("host-browser")){ |
|
var n = navigator, |
|
dua = n.userAgent, |
|
dav = n.appVersion, |
|
tv = parseFloat(dav); |
|
has.add("air", dua.indexOf("AdobeAIR") >= 0); |
|
has.add("wp", parseFloat(dua.split("Windows Phone")[1]) || undefined); |
|
has.add("msapp", parseFloat(dua.split("MSAppHost/")[1]) || undefined); |
|
has.add("khtml", dav.indexOf("Konqueror") >= 0 ? tv : undefined); |
|
has.add("edge", parseFloat(dua.split("Edge/")[1]) || undefined); |
|
has.add("opr", parseFloat(dua.split("OPR/")[1]) || undefined); |
|
// NOTE: https://dev.opera.com/blog/opera-user-agent-strings-opera-15-and-beyond/ |
|
has.add("webkit", !has("wp") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18540 |
|
&& !has("edge") && parseFloat(dua.split("WebKit/")[1]) || undefined); |
|
has.add("chrome", !has("edge") && !has("opr") |
|
&& parseFloat(dua.split("Chrome/")[1]) || undefined); |
|
has.add("android", !has("wp") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18528 |
|
&& parseFloat(dua.split("Android ")[1]) || undefined); |
|
has.add("safari", dav.indexOf("Safari") >= 0 |
|
&& !has("wp") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18540 |
|
&& !has("chrome") && !has("android") && !has("edge") && !has("opr") ? |
|
parseFloat(dav.split("Version/")[1]) : undefined); |
|
has.add("mac", dav.indexOf("Macintosh") >= 0); |
|
has.add("quirks", document.compatMode == "BackCompat"); |
|
if(!has("wp") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18528 |
|
&& dua.match(/(iPhone|iPod|iPad)/)){ |
|
var p = RegExp.$1.replace(/P/, "p"); |
|
var v = dua.match(/OS ([\d_]+)/) ? RegExp.$1 : "1"; |
|
var os = parseFloat(v.replace(/_/, ".").replace(/_/g, "")); |
|
has.add(p, os); // "iphone", "ipad" or "ipod" |
|
has.add("ios", os); |
|
} |
|
has.add("bb", (dua.indexOf("BlackBerry") >= 0 || dua.indexOf("BB10") >= 0) && parseFloat(dua.split("Version/")[1]) || undefined); |
|
has.add("trident", parseFloat(dav.split("Trident/")[1]) || undefined); |
|
|
|
has.add("svg", typeof SVGAngle !== "undefined"); |
|
|
|
if(!has("webkit")){ |
|
// Opera |
|
if(dua.indexOf("Opera") >= 0){ |
|
// see http://dev.opera.com/articles/view/opera-ua-string-changes and http://www.useragentstring.com/pages/Opera/ |
|
// 9.8 has both styles; <9.8, 9.9 only old style |
|
has.add("opera", tv >= 9.8 ? parseFloat(dua.split("Version/")[1]) || tv : tv); |
|
} |
|
|
|
// Mozilla and firefox |
|
if(dua.indexOf("Gecko") >= 0 && !has("wp") // NOTE: necessary since Windows Phone 8.1 Update 1 |
|
&& !has("khtml") && !has("trident") && !has("edge")){ |
|
has.add("mozilla", tv); |
|
} |
|
if(has("mozilla")){ |
|
//We really need to get away from this. Consider a sane isGecko approach for the future. |
|
has.add("ff", parseFloat(dua.split("Firefox/")[1] || dua.split("Minefield/")[1]) || undefined); |
|
} |
|
|
|
// IE |
|
if(document.all && !has("opera")){ |
|
var isIE = parseFloat(dav.split("MSIE ")[1]) || undefined; |
|
|
|
//In cases where the page has an HTTP header or META tag with |
|
//X-UA-Compatible, then it is in emulation mode. |
|
//Make sure isIE reflects the desired version. |
|
//document.documentMode of 5 means quirks mode. |
|
//Only switch the value if documentMode's major version |
|
//is different from isIE's major version. |
|
var mode = document.documentMode; |
|
if(mode && mode != 5 && Math.floor(isIE) != mode){ |
|
isIE = mode; |
|
} |
|
|
|
has.add("ie", isIE); |
|
} |
|
|
|
// Wii |
|
has.add("wii", typeof opera != "undefined" && opera.wiiremote); |
|
} |
|
} |
|
|
|
return has; |
|
});
|
|
|