Upgrade to ExtJS 4.0.1 - Released 05/18/2011
[extjs.git] / docs / source / OS.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5   <title>The source code</title>
6   <link href="../prettify/prettify.css" type="text/css" rel="stylesheet" />
7   <script type="text/javascript" src="../prettify/prettify.js"></script>
8   <style type="text/css">
9     .highlight { display: block; background-color: #ddd; }
10   </style>
11   <script type="text/javascript">
12     function highlight() {
13       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
14     }
15   </script>
16 </head>
17 <body onload="prettyPrint(); highlight();">
18   <pre class="prettyprint lang-js"><span id='Ext-env-OS'>/**
19 </span> * @class Ext.env.OS
20  * Provide useful information about the current operating system environment. Access the global instance stored in Ext.os. Example:
21  * &lt;pre&gt;&lt;code&gt;
22  * if (Ext.os.is.Windows) {
23  *      // Windows specific code here
24  * }
25  *
26  * if (Ext.os.is.iOS) {
27  *      // iPad, iPod, iPhone, etc.
28  * }
29  *
30  * console.log(&quot;Version &quot; + Ext.os.version);
31  * &lt;/code&gt;&lt;/pre&gt;
32  *
33  * For a full list of supported values, refer to: {@link Ext.env.OS#is Ext.env.OS.is}
34  */
35 Ext.define('Ext.env.OS', {
36
37     statics: {
38         osNames: {
39             ios: 'iOS',
40             android: 'Android',
41             webos: 'WebOS',
42             blackberry: 'BlackBerry',
43             mac: 'MacOSX',
44             win: 'Windows',
45             linux: 'Linux',
46             other: 'Other'
47         },
48         osPrefixes: {
49             ios: 'iPhone OS ',
50             android: 'Android ',
51             blackberry: 'BlackBerry ',
52             webos: 'webOS/'
53         }
54     },
55
56 <span id='Ext-env-OS-method-is'>    /**
57 </span>     * A &quot;hybrid&quot; property, can be either accessed as a method call, i.e:
58      * &lt;pre&gt;&lt;code&gt;
59      * if (Ext.os.is('Android')) { ... }
60      * &lt;/code&gt;&lt;/pre&gt;
61      *
62      * or as an object with boolean properties, i.e:
63      * &lt;pre&gt;&lt;code&gt;
64      * if (Ext.os.is.Android) { ... }
65      * &lt;/code&gt;&lt;/pre&gt;
66      *
67      * Versions can be conveniently checked as well. For example:
68      * &lt;pre&gt;&lt;code&gt;
69      * if (Ext.os.is.Android2) { ... } // Equivalent to (Ext.os.is.Android &amp;&amp; Ext.os.version.equals(2))
70      *
71      * if (Ext.os.is.iOS32) { ... } // Equivalent to (Ext.os.is.iOS &amp;&amp; Ext.os.version.equals(3.2))
72      * &lt;/code&gt;&lt;/pre&gt;
73      *
74      * Note that only {@link Ext.Version#getMajor major component}  and {@link Ext.Version#getShortVersion shortVersion}
75      * value of the version are available via direct property checking.
76      *
77      * Supported values are: iOS, iPad, iPhone, iPod, Android, WebOS, BlackBerry, MacOSX, Windows, Linux and Other
78      *
79      * @param {String} value The OS name to check
80      * @return {Boolean}
81      * @method
82      */
83     is: Ext.emptyFn,
84
85 <span id='Ext-env-OS-property-name'>    /**
86 </span>     * Read-only - the full name of the current operating system
87      * Possible values are: iOS, Android, WebOS, BlackBerry, MacOSX, Windows, Linux and Other
88      * @type String
89      */
90     name: null,
91
92 <span id='Ext-env-OS-property-version'>    /**
93 </span>     * Read-only, refer to {@link Ext.Version}
94      * @type Ext.Version
95      */
96     version: null,
97
98     constructor: function() {
99         var userAgent = Ext.global.navigator.userAgent,
100             platform = Ext.global.navigator.platform,
101             selfClass = this.statics(),
102             osMatch = userAgent.match(new RegExp('((?:' + Ext.Object.getValues(selfClass.osPrefixes).join(')|(?:') + '))([^\\s;]+)')),
103             name = 'other',
104             version = '',
105             actualVersionMatch;
106
107         if (osMatch) {
108             name = selfClass.osNames[Ext.Object.getKey(selfClass.osPrefixes, osMatch[1])];
109             version = osMatch[2];
110
111             if (name === 'BlackBerry') {
112                 actualVersionMatch = userAgent.match(/Version\/([\d\._]+)/);
113
114                 if (actualVersionMatch) {
115                     version = actualVersionMatch[1];
116                 }
117             }
118         }
119         else {
120             name = selfClass.osNames[(userAgent.toLowerCase().match(/mac|win|linux/i) || ['other'])[0]];
121         }
122
123         Ext.apply(this, {
124             name: name,
125             version: new Ext.Version(version)
126         });
127
128         this.is = function(name) {
129             return this.is[name] === true;
130         };
131
132         if (name === 'iOS') {
133             this.is[platform] = true;
134         }
135
136         this.is[this.name] = true;
137         this.is[this.name + (this.version.getMajor() || '')] = true;
138         this.is[this.name + this.version.getShortVersion()] = true;
139
140         Ext.Object.each(selfClass.osNames, function(key, name) {
141             this.is[name] = (this.name === name);
142         }, this);
143
144         return this;
145     }
146 }, function() {
147
148 Ext.os = new Ext.env.OS();
149
150 });
151 </pre>
152 </body>
153 </html>