source: Dev/branches/rest-dojo-ui/client/dojo/_base/sniff.js @ 263

Last change on this file since 263 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

File size: 5.6 KB
Line 
1define(["./kernel", "../has"], function(dojo, has){
2        // module:
3        //              dojo/sniff
4        // summary:
5        //              This module populates the dojo browser version sniffing properties.
6
7        if(!has("host-browser")){
8                return has;
9        }
10
11        dojo.isBrowser = true,
12        dojo._name = "browser";
13
14        var hasAdd = has.add,
15                n = navigator,
16                dua = n.userAgent,
17                dav = n.appVersion,
18                tv = parseFloat(dav),
19                isOpera,
20                isAIR,
21                isKhtml,
22                isWebKit,
23                isChrome,
24                isMac,
25                isSafari,
26                isMozilla ,
27                isMoz,
28                isIE,
29                isFF,
30                isQuirks,
31                isIos,
32                isAndroid,
33                isWii;
34
35        /*=====
36        dojo.isBrowser = {
37                //      example:
38                //      | if(dojo.isBrowser){ ... }
39        };
40
41        dojo.isFF = {
42                //      example:
43                //      | if(dojo.isFF > 1){ ... }
44        };
45
46        dojo.isIE = {
47                // example:
48                //      | if(dojo.isIE > 6){
49                //      |               // we are IE7
50                //      | }
51        };
52
53        dojo.isSafari = {
54                //      example:
55                //      | if(dojo.isSafari){ ... }
56                //      example:
57                //              Detect iPhone:
58                //      | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){
59                //      |               // we are iPhone. Note, iPod touch reports "iPod" above and fails this test.
60                //      | }
61        };
62
63        dojo.mixin(dojo, {
64                // isBrowser: Boolean
65                //              True if the client is a web-browser
66                isBrowser: true,
67                //      isFF: Number | undefined
68                //              Version as a Number if client is FireFox. undefined otherwise. Corresponds to
69                //              major detected FireFox version (1.5, 2, 3, etc.)
70                isFF: 2,
71                //      isIE: Number | undefined
72                //              Version as a Number if client is MSIE(PC). undefined otherwise. Corresponds to
73                //              major detected IE version (6, 7, 8, etc.)
74                isIE: 6,
75                //      isKhtml: Number | undefined
76                //              Version as a Number if client is a KHTML browser. undefined otherwise. Corresponds to major
77                //              detected version.
78                isKhtml: 0,
79                //      isWebKit: Number | undefined
80                //              Version as a Number if client is a WebKit-derived browser (Konqueror,
81                //              Safari, Chrome, etc.). undefined otherwise.
82                isWebKit: 0,
83                //      isMozilla: Number | undefined
84                //              Version as a Number if client is a Mozilla-based browser (Firefox,
85                //              SeaMonkey). undefined otherwise. Corresponds to major detected version.
86                isMozilla: 0,
87                //      isOpera: Number | undefined
88                //              Version as a Number if client is Opera. undefined otherwise. Corresponds to
89                //              major detected version.
90                isOpera: 0,
91                //      isSafari: Number | undefined
92                //              Version as a Number if client is Safari or iPhone. undefined otherwise.
93                isSafari: 0,
94                //      isChrome: Number | undefined
95                //              Version as a Number if client is Chrome browser. undefined otherwise.
96                isChrome: 0,
97                //      isMac: Boolean
98                //              True if the client runs on Mac
99                isMac: 0,
100                // isIos: Boolean
101                //              True if client is iPhone, iPod, or iPad
102                isIos: 0,
103                // isAndroid: Number | undefined
104                //              Version as a Number if client is android browser. undefined otherwise.
105                isAndroid: 0,
106                // isWii: Boolean
107                //              True if client is Wii
108                isWii: 0
109        });
110        =====*/
111
112        // fill in the rendering support information in dojo.render.*
113        if(dua.indexOf("AdobeAIR") >= 0){ isAIR = 1; }
114        isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : 0;
115        isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined;
116        isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined;
117        isMac = dav.indexOf("Macintosh") >= 0;
118        isIos = /iPhone|iPod|iPad/.test(dua);
119        isAndroid = parseFloat(dua.split("Android ")[1]) || undefined;
120        isWii = typeof opera != "undefined" && opera.wiiremote;
121
122        // safari detection derived from:
123        //              http://developer.apple.com/internet/safari/faq.html#anchor2
124        //              http://developer.apple.com/internet/safari/uamatrix.html
125        var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);
126        if(index && !isChrome){
127                // try to grab the explicit Safari version first. If we don't get
128                // one, look for less than 419.3 as the indication that we're on something
129                // "Safari 2-ish".
130                isSafari = parseFloat(dav.split("Version/")[1]);
131                if(!isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){
132                        isSafari = 2;
133                }
134        }
135
136        if (!has("dojo-webkit")) {
137                if(dua.indexOf("Opera") >= 0){
138                        isOpera = tv;
139                        // see http://dev.opera.com/articles/view/opera-ua-string-changes and http://www.useragentstring.com/pages/Opera/
140                        // 9.8 has both styles; <9.8, 9.9 only old style
141                        if(isOpera >= 9.8){
142                                isOpera = parseFloat(dua.split("Version/")[1]) || tv;
143                        }
144                }
145
146                if(dua.indexOf("Gecko") >= 0 && !isKhtml && !isWebKit){
147                        isMozilla = isMoz = tv;
148                }
149                if(isMoz){
150                        //We really need to get away from this. Consider a sane isGecko approach for the future.
151                        isFF = parseFloat(dua.split("Firefox/")[1] || dua.split("Minefield/")[1]) || undefined;
152                }
153                if(document.all && !isOpera){
154                        isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;
155                        //In cases where the page has an HTTP header or META tag with
156                        //X-UA-Compatible, then it is in emulation mode.
157                        //Make sure isIE reflects the desired version.
158                        //document.documentMode of 5 means quirks mode.
159                        //Only switch the value if documentMode's major version
160                        //is different from isIE's major version.
161                        var mode = document.documentMode;
162                        if(mode && mode != 5 && Math.floor(isIE) != mode){
163                                isIE = mode;
164                        }
165                }
166        }
167
168        isQuirks = document.compatMode == "BackCompat";
169
170        hasAdd("opera", dojo.isOpera = isOpera);
171        hasAdd("air", dojo.isAIR = isAIR);
172        hasAdd("khtml", dojo.isKhtml = isKhtml);
173        hasAdd("webkit", dojo.isWebKit = isWebKit);
174        hasAdd("chrome", dojo.isChrome = isChrome);
175        hasAdd("mac", dojo.isMac = isMac );
176        hasAdd("safari", dojo.isSafari = isSafari);
177        hasAdd("mozilla", dojo.isMozilla = dojo.isMoz = isMozilla );
178        hasAdd("ie", dojo.isIE = isIE );
179        hasAdd("ff", dojo.isFF = isFF);
180        hasAdd("quirks", dojo.isQuirks = isQuirks);
181        hasAdd("ios", dojo.isIos = isIos);
182        hasAdd("android", dojo.isAndroid = isAndroid);
183
184        dojo.locale = dojo.locale || (isIE ? n.userLanguage : n.language).toLowerCase();
185
186        return has;
187});
Note: See TracBrowser for help on using the repository browser.