| /** | 
|  * Copyright 2004-present Facebook. All Rights Reserved. | 
|  * | 
|  * @providesModule UserAgent_DEPRECATED | 
|  */ | 
|   | 
| /** | 
|  *  Provides entirely client-side User Agent and OS detection. You should prefer | 
|  *  the non-deprecated UserAgent module when possible, which exposes our | 
|  *  authoritative server-side PHP-based detection to the client. | 
|  * | 
|  *  Usage is straightforward: | 
|  * | 
|  *    if (UserAgent_DEPRECATED.ie()) { | 
|  *      //  IE | 
|  *    } | 
|  * | 
|  *  You can also do version checks: | 
|  * | 
|  *    if (UserAgent_DEPRECATED.ie() >= 7) { | 
|  *      //  IE7 or better | 
|  *    } | 
|  * | 
|  *  The browser functions will return NaN if the browser does not match, so | 
|  *  you can also do version compares the other way: | 
|  * | 
|  *    if (UserAgent_DEPRECATED.ie() < 7) { | 
|  *      //  IE6 or worse | 
|  *    } | 
|  * | 
|  *  Note that the version is a float and may include a minor version number, | 
|  *  so you should always use range operators to perform comparisons, not | 
|  *  strict equality. | 
|  * | 
|  *  **Note:** You should **strongly** prefer capability detection to browser | 
|  *  version detection where it's reasonable: | 
|  * | 
|  *    http://www.quirksmode.org/js/support.html | 
|  * | 
|  *  Further, we have a large number of mature wrapper functions and classes | 
|  *  which abstract away many browser irregularities. Check the documentation, | 
|  *  grep for things, or ask on javascript@lists.facebook.com before writing yet | 
|  *  another copy of "event || window.event". | 
|  * | 
|  */ | 
|   | 
| var _populated = false; | 
|   | 
| // Browsers | 
| var _ie, _firefox, _opera, _webkit, _chrome; | 
|   | 
| // Actual IE browser for compatibility mode | 
| var _ie_real_version; | 
|   | 
| // Platforms | 
| var _osx, _windows, _linux, _android; | 
|   | 
| // Architectures | 
| var _win64; | 
|   | 
| // Devices | 
| var _iphone, _ipad, _native; | 
|   | 
| var _mobile; | 
|   | 
| function _populate() { | 
|   if (_populated) { | 
|     return; | 
|   } | 
|   | 
|   _populated = true; | 
|   | 
|   // To work around buggy JS libraries that can't handle multi-digit | 
|   // version numbers, Opera 10's user agent string claims it's Opera | 
|   // 9, then later includes a Version/X.Y field: | 
|   // | 
|   // Opera/9.80 (foo) Presto/2.2.15 Version/10.10 | 
|   var uas = navigator.userAgent; | 
|   var agent = /(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(uas); | 
|   var os    = /(Mac OS X)|(Windows)|(Linux)/.exec(uas); | 
|   | 
|   _iphone = /\b(iPhone|iP[ao]d)/.exec(uas); | 
|   _ipad = /\b(iP[ao]d)/.exec(uas); | 
|   _android = /Android/i.exec(uas); | 
|   _native = /FBAN\/\w+;/i.exec(uas); | 
|   _mobile = /Mobile/i.exec(uas); | 
|   | 
|   // Note that the IE team blog would have you believe you should be checking | 
|   // for 'Win64; x64'.  But MSDN then reveals that you can actually be coming | 
|   // from either x64 or ia64;  so ultimately, you should just check for Win64 | 
|   // as in indicator of whether you're in 64-bit IE.  32-bit IE on 64-bit | 
|   // Windows will send 'WOW64' instead. | 
|   _win64 = !!(/Win64/.exec(uas)); | 
|   | 
|   if (agent) { | 
|     _ie = agent[1] ? parseFloat(agent[1]) : ( | 
|           agent[5] ? parseFloat(agent[5]) : NaN); | 
|     // IE compatibility mode | 
|     if (_ie && document && document.documentMode) { | 
|       _ie = document.documentMode; | 
|     } | 
|     // grab the "true" ie version from the trident token if available | 
|     var trident = /(?:Trident\/(\d+.\d+))/.exec(uas); | 
|     _ie_real_version = trident ? parseFloat(trident[1]) + 4 : _ie; | 
|   | 
|     _firefox = agent[2] ? parseFloat(agent[2]) : NaN; | 
|     _opera   = agent[3] ? parseFloat(agent[3]) : NaN; | 
|     _webkit  = agent[4] ? parseFloat(agent[4]) : NaN; | 
|     if (_webkit) { | 
|       // We do not add the regexp to the above test, because it will always | 
|       // match 'safari' only since 'AppleWebKit' appears before 'Chrome' in | 
|       // the userAgent string. | 
|       agent = /(?:Chrome\/(\d+\.\d+))/.exec(uas); | 
|       _chrome = agent && agent[1] ? parseFloat(agent[1]) : NaN; | 
|     } else { | 
|       _chrome = NaN; | 
|     } | 
|   } else { | 
|     _ie = _firefox = _opera = _chrome = _webkit = NaN; | 
|   } | 
|   | 
|   if (os) { | 
|     if (os[1]) { | 
|       // Detect OS X version.  If no version number matches, set _osx to true. | 
|       // Version examples:  10, 10_6_1, 10.7 | 
|       // Parses version number as a float, taking only first two sets of | 
|       // digits.  If only one set of digits is found, returns just the major | 
|       // version number. | 
|       var ver = /(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(uas); | 
|   | 
|       _osx = ver ? parseFloat(ver[1].replace('_', '.')) : true; | 
|     } else { | 
|       _osx = false; | 
|     } | 
|     _windows = !!os[2]; | 
|     _linux   = !!os[3]; | 
|   } else { | 
|     _osx = _windows = _linux = false; | 
|   } | 
| } | 
|   | 
| var UserAgent_DEPRECATED = { | 
|   | 
|   /** | 
|    *  Check if the UA is Internet Explorer. | 
|    * | 
|    * | 
|    *  @return float|NaN Version number (if match) or NaN. | 
|    */ | 
|   ie: function() { | 
|     return _populate() || _ie; | 
|   }, | 
|   | 
|   /** | 
|    * Check if we're in Internet Explorer compatibility mode. | 
|    * | 
|    * @return bool true if in compatibility mode, false if | 
|    * not compatibility mode or not ie | 
|    */ | 
|   ieCompatibilityMode: function() { | 
|     return _populate() || (_ie_real_version > _ie); | 
|   }, | 
|   | 
|   | 
|   /** | 
|    * Whether the browser is 64-bit IE.  Really, this is kind of weak sauce;  we | 
|    * only need this because Skype can't handle 64-bit IE yet.  We need to remove | 
|    * this when we don't need it -- tracked by #601957. | 
|    */ | 
|   ie64: function() { | 
|     return UserAgent_DEPRECATED.ie() && _win64; | 
|   }, | 
|   | 
|   /** | 
|    *  Check if the UA is Firefox. | 
|    * | 
|    * | 
|    *  @return float|NaN Version number (if match) or NaN. | 
|    */ | 
|   firefox: function() { | 
|     return _populate() || _firefox; | 
|   }, | 
|   | 
|   | 
|   /** | 
|    *  Check if the UA is Opera. | 
|    * | 
|    * | 
|    *  @return float|NaN Version number (if match) or NaN. | 
|    */ | 
|   opera: function() { | 
|     return _populate() || _opera; | 
|   }, | 
|   | 
|   | 
|   /** | 
|    *  Check if the UA is WebKit. | 
|    * | 
|    * | 
|    *  @return float|NaN Version number (if match) or NaN. | 
|    */ | 
|   webkit: function() { | 
|     return _populate() || _webkit; | 
|   }, | 
|   | 
|   /** | 
|    *  For Push | 
|    *  WILL BE REMOVED VERY SOON. Use UserAgent_DEPRECATED.webkit | 
|    */ | 
|   safari: function() { | 
|     return UserAgent_DEPRECATED.webkit(); | 
|   }, | 
|   | 
|   /** | 
|    *  Check if the UA is a Chrome browser. | 
|    * | 
|    * | 
|    *  @return float|NaN Version number (if match) or NaN. | 
|    */ | 
|   chrome : function() { | 
|     return _populate() || _chrome; | 
|   }, | 
|   | 
|   | 
|   /** | 
|    *  Check if the user is running Windows. | 
|    * | 
|    *  @return bool `true' if the user's OS is Windows. | 
|    */ | 
|   windows: function() { | 
|     return _populate() || _windows; | 
|   }, | 
|   | 
|   | 
|   /** | 
|    *  Check if the user is running Mac OS X. | 
|    * | 
|    *  @return float|bool   Returns a float if a version number is detected, | 
|    *                       otherwise true/false. | 
|    */ | 
|   osx: function() { | 
|     return _populate() || _osx; | 
|   }, | 
|   | 
|   /** | 
|    * Check if the user is running Linux. | 
|    * | 
|    * @return bool `true' if the user's OS is some flavor of Linux. | 
|    */ | 
|   linux: function() { | 
|     return _populate() || _linux; | 
|   }, | 
|   | 
|   /** | 
|    * Check if the user is running on an iPhone or iPod platform. | 
|    * | 
|    * @return bool `true' if the user is running some flavor of the | 
|    *    iPhone OS. | 
|    */ | 
|   iphone: function() { | 
|     return _populate() || _iphone; | 
|   }, | 
|   | 
|   mobile: function() { | 
|     return _populate() || (_iphone || _ipad || _android || _mobile); | 
|   }, | 
|   | 
|   nativeApp: function() { | 
|     // webviews inside of the native apps | 
|     return _populate() || _native; | 
|   }, | 
|   | 
|   android: function() { | 
|     return _populate() || _android; | 
|   }, | 
|   | 
|   ipad: function() { | 
|     return _populate() || _ipad; | 
|   } | 
| }; | 
|   | 
| module.exports = UserAgent_DEPRECATED; |