From 3327e951441b98dac753d46916a2f8559f8617fe Mon Sep 17 00:00:00 2001 From: Baraa Date: Sat, 22 Nov 2014 21:57:14 -0800 Subject: [PATCH 1/3] Update Browser Detection to Support iPod, Kindle and BlackBerry devices. --- README.md | 22 +++-- dist/jquery.browser.js | 37 ++++++--- test/test.js | 180 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 222 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 2a48746..2dd1943 100644 --- a/README.md +++ b/README.md @@ -28,17 +28,27 @@ Reading the browser verion ## Things not included in the original jQuery $.browser implementation -- Detect Windows, Mac, Linux, iPad, iPhone, Android, Chrome OS, and Windows Phone useragents, in addition to desktop and mobile browsers +- Detect specifically Windows, Mac, Linux, iPad, iPhone, iPod, Android, Kindle, BlackBerry, Chrome OS, and Windows Phone useragents ```javascript - $.browser.ipad - $.browser.iphone - $.browser["windows phone"] $.browser.android + $.browser.blackberry $.browser.cros - $.browser.win - $.browser.mac + $.browser.ipad + $.browser.iphone + $.browser.ipod + $.browser.kindle $.browser.linux + $.browser.mac + $.browser.playbook + $.browser.silk + $.browser.win + $.browser["windows phone"] +``` + +Alternatively, you can detect for generic classifications such as desktop or mobile + +```javascript $.browser.desktop $.browser.mobile ``` diff --git a/dist/jquery.browser.js b/dist/jquery.browser.js index a56e816..dd3c9d3 100644 --- a/dist/jquery.browser.js +++ b/dist/jquery.browser.js @@ -31,26 +31,32 @@ jQuery.uaMatch = function( ua ) { ua = ua.toLowerCase(); - var match = /(edge)\/([\w.]+)/.exec( ua ) || + var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || + /(edge)\/([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || /(opr)[\/]([\w.]+)/.exec( ua ) || - /(chrome)[ \/]([\w.]+)/.exec( ua ) || /(version)(applewebkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec( ua ) || /(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec( ua ) || /(webkit)[ \/]([\w.]+)/.exec( ua ) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || - /(msie) ([\w.]+)/.exec( ua ) || ua.indexOf("trident") >= 0 && /(rv)(?::| )([\w.]+)/.exec( ua ) || ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || []; - var platform_match = /(ipad)/.exec( ua ) || + var platform_match = /(android)/.exec( ua ) || + /(bb)/.exec( ua ) || + /(blackberry)/.exec( ua ) || + /(cros)/.exec( ua ) || + /(ipad)/.exec( ua ) || /(iphone)/.exec( ua ) || - /(android)/.exec( ua ) || - /(windows phone)/.exec( ua ) || - /(win)/.exec( ua ) || - /(mac)/.exec( ua ) || + /(ipod)/.exec( ua ) || + /(kindle)/.exec( ua ) || /(linux)/.exec( ua ) || - /(cros)/.exec( ua ) || + /(mac)/.exec( ua ) || + /(playbook)/.exec( ua ) || + /(silk)/.exec( ua ) || + /(win)/.exec( ua ) || + /(windows phone)/.exec( ua ) || []; return { @@ -75,7 +81,8 @@ } // These are all considered mobile platforms, meaning they run a mobile browser - if ( browser.android || browser.ipad || browser.iphone || browser[ "windows phone" ] ) { + if ( browser.android || browser.bb || browser.blackberry || browser.ipad || browser.iphone || + browser.ipod || browser.kindle || browser.playbook || browser.silk || browser[ "windows phone" ]) { browser.mobile = true; } @@ -98,6 +105,14 @@ browser[ie] = true; } + // BB10 is a newer OS version of BlackBerry + if ( browser.bb ) { + var blackberry = "blackberry"; + + matched.browser = blackberry; + browser[blackberry] = true; + } + // Opera 15+ are identified as opr if ( browser.opr ) { var opera = "opera"; diff --git a/test/test.js b/test/test.js index 82e3937..43b4232 100644 --- a/test/test.js +++ b/test/test.js @@ -26,6 +26,7 @@ var ua = { mac: "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9) AppleWebKit/537.71 (KHTML, like Gecko) Version/7.0 Safari/537.71", ipad: "Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.71 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53", iphone: "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.71 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53", + ipod: "Mozilla/5.0 (iPod; CPU iPod OS 7_0 like Mac OS X) AppleWebKit/537.71 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53", version: "537.71", versionNumber: 7, name: "safari" @@ -78,6 +79,46 @@ var ua = { versionNumber: 4 }, name: "android" + }, + kindle : { + v_4: { + kindle : "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", + version: "533.1", + versionNumber: 4 + }, + name: "kindle" + }, + silk : { + v_5: { + silk : "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-80) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true", + version: "533.16", + versionNumber: 5 + }, + name: "silk" + }, + blackberry : { + v_7: { + blackberry : "Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.346 Mobile Safari/534.11+", + version: "534.11", + versionNumber: 7 + }, + name: "blackberry" + }, + bb : { + v_10: { + bb : "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.1 (KHTML, like Gecko) Version/10.0.0.1337 Mobile Safari/537.1", + version: "537.1", + versionNumber: 10 + }, + name: "bb" + }, + playbook : { + v_7: { + playbook : "Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML, like Gecko) Version/7.2.1.0 Safari/536.2+", + version: "536.2", + versionNumber: 7 + }, + name: "playbook" } }; @@ -348,6 +389,30 @@ casper.test.begin("when using Safari on iPhone", 7, function(test) { }); }); +casper.test.begin("when using Safari on iPod", 7, function(test) { + casper.userAgent(ua.safari.ipod); + + casper.start(test_url).then(function(){ + + var browser = casper.evaluate(function(){ + return $.browser; + }); + + test.assert(browser.safari, "Browser should be Safari"); + test.assertEquals(browser.name, ua.safari.name,"Browser name should be " + ua.safari.name); + + test.assert(browser.webkit, "Browser should be WebKit based"); + test.assertEquals(browser.version, ua.safari.version, "Version should be " + ua.safari.version); + test.assertEquals(browser.versionNumber, ua.safari.versionNumber, "Version number should be " + ua.safari.versionNumber); + + test.assert(browser.mobile, "Browser platform should be mobile"); + test.assert(browser.ipod, "Platform should be iPod"); + + }).run(function(){ + test.done(); + }); +}); + casper.test.begin("when using IE9", 7, function(test) { casper.userAgent(ua.ie.windows.v_9); @@ -642,6 +707,121 @@ casper.test.begin("when using Android 4.4 stock browser on Android", 6, function test.assert(browser.mobile, "Browser platform should be mobile"); test.assert(browser.webkit, "Browser should be WebKit based"); + }).run(function(){ + test.done(); + }); +}); + +casper.test.begin("when using Kindle 4 stock browser", 6, function(test) { + casper.userAgent(ua.kindle.v_4.kindle); + + casper.start(test_url).then(function(){ + + var browser = casper.evaluate(function(){ + return $.browser; + }); + + test.assert(browser.kindle, "Browser should be Kindle"); + test.assertEquals(browser.name, ua.kindle.name,"Browser name should be " + ua.kindle.name); + + test.assertEquals(browser.version, ua.kindle.v_4.version, "Version should be " + ua.kindle.v_4.version); + test.assertEquals(browser.versionNumber, ua.kindle.v_4.versionNumber, "Version number should be " + ua.kindle.v_4.versionNumber); + + test.assert(browser.mobile, "Browser platform should be mobile"); + test.assert(browser.webkit, "Browser should be WebKit based"); + + }).run(function(){ + test.done(); + }); +}); + +casper.test.begin("when using Kindle Silk 5 browser", 6, function(test) { + casper.userAgent(ua.silk.v_5.silk); + + casper.start(test_url).then(function(){ + + var browser = casper.evaluate(function(){ + return $.browser; + }); + + test.assert(browser.silk, "Browser should be Silk"); + test.assertEquals(browser.name, ua.silk.name,"Browser name should be " + ua.silk.name); + + test.assertEquals(browser.version, ua.silk.v_5.version, "Version should be " + ua.silk.v_5.version); + test.assertEquals(browser.versionNumber, ua.silk.v_5.versionNumber, "Version number should be " + ua.silk.v_5.versionNumber); + + test.assert(browser.mobile, "Browser platform should be mobile"); + test.assert(browser.webkit, "Browser should be WebKit based"); + + }).run(function(){ + test.done(); + }); +}); + +casper.test.begin("when using BlackBerry 7 stock browser", 6, function(test) { + casper.userAgent(ua.blackberry.v_7.blackberry); + + casper.start(test_url).then(function(){ + + var browser = casper.evaluate(function(){ + return $.browser; + }); + + test.assert(browser.blackberry, "Browser should be BlackBerry"); + test.assertEquals(browser.name, ua.blackberry.name,"Browser name should be " + ua.blackberry.name); + + test.assertEquals(browser.version, ua.blackberry.v_7.version, "Version should be " + ua.blackberry.v_7.version); + test.assertEquals(browser.versionNumber, ua.blackberry.v_7.versionNumber, "Version number should be " + ua.blackberry.v_7.versionNumber); + + test.assert(browser.mobile, "Browser platform should be mobile"); + test.assert(browser.webkit, "Browser should be WebKit based"); + + }).run(function(){ + test.done(); + }); +}); + +casper.test.begin("when using BB10 stock browser", 6, function(test) { + casper.userAgent(ua.bb.v_10.bb); + + casper.start(test_url).then(function(){ + + var browser = casper.evaluate(function(){ + return $.browser; + }); + + test.assert(browser.blackberry, "Browser should be BlackBerry"); + test.assertEquals(browser.name, ua.blackberry.name,"Browser name should be " + ua.blackberry.name); + + test.assertEquals(browser.version, ua.bb.v_10.version, "Version should be " + ua.bb.v_10.version); + test.assertEquals(browser.versionNumber, ua.bb.v_10.versionNumber, "Version number should be " + ua.bb.v_10.versionNumber); + + test.assert(browser.mobile, "Browser platform should be mobile"); + test.assert(browser.webkit, "Browser should be WebKit based"); + + }).run(function(){ + test.done(); + }); +}); + +casper.test.begin("when using BlackBerry PlayBook stock browser", 6, function(test) { + casper.userAgent(ua.playbook.v_7.playbook); + + casper.start(test_url).then(function(){ + + var browser = casper.evaluate(function(){ + return $.browser; + }); + + test.assert(browser.playbook, "Browser should be BlackBerry PlayBook"); + test.assertEquals(browser.name, ua.playbook.name,"Browser name should be " + ua.playbook.name); + + test.assertEquals(browser.version, ua.playbook.v_7.version, "Version should be " + ua.playbook.v_7.version); + test.assertEquals(browser.versionNumber, ua.playbook.v_7.versionNumber, "Version number should be " + ua.playbook.v_7.versionNumber); + + test.assert(browser.mobile, "Browser platform should be mobile"); + test.assert(browser.webkit, "Browser should be WebKit based"); + }).run(function(){ test.done(); casper.exit(); From 0bdb9aac9290b4e639c4a8fd748de2a906b6c760 Mon Sep 17 00:00:00 2001 From: Baraa Date: Mon, 8 Dec 2014 23:58:37 -0800 Subject: [PATCH 2/3] Ran grunt test and all tests pass without errors. --- dist/jquery.browser.min.js | 4 +- test/src/jquery.browser.js | 91 ++++++++++++++++++++++++-------------- 2 files changed, 60 insertions(+), 35 deletions(-) diff --git a/dist/jquery.browser.min.js b/dist/jquery.browser.min.js index d5f6aa3..5e0a2b2 100644 --- a/dist/jquery.browser.min.js +++ b/dist/jquery.browser.min.js @@ -10,5 +10,5 @@ * * Released under the MIT license * - * Date: 28-09-2014 - */!function(a,b){"use strict";var c,d;if(a.uaMatch=function(a){a=a.toLowerCase();var b=/(opr)[\/]([\w.]+)/.exec(a)||/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[],c=/(ipad)/.exec(a)||/(iphone)/.exec(a)||/(android)/.exec(a)||/(windows phone)/.exec(a)||/(win)/.exec(a)||/(mac)/.exec(a)||/(linux)/.exec(a)||/(cros)/.exec(a)||[];return{browser:b[3]||b[1]||"",version:b[4]||b[2],versionNumber:b[2]||"0",platform:c[0]||""}},c=a.uaMatch(b.navigator.userAgent),d={},c.browser&&(d[c.browser]=!0,d.version=c.version,d.versionNumber=parseInt(c.versionNumber)),c.platform&&(d[c.platform]=!0),(d.android||d.ipad||d.iphone||d["windows phone"])&&(d.mobile=!0),(d.cros||d.mac||d.linux||d.win)&&(d.desktop=!0),(d.chrome||d.opr||d.safari)&&(d.webkit=!0),d.rv){var e="msie";c.browser=e,d[e]=!0}if(d.opr){var f="opera";c.browser=f,d[f]=!0}if(d.safari&&d.android){var g="android";c.browser=g,d[g]=!0}d.name=c.browser,d.platform=c.platform,a.browser=d}(jQuery,window); \ No newline at end of file + * Date: 08-12-2014 + */!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(c){b(c,a)}):b(jQuery,a)}(this,function(a,b){"use strict";var c,d;if(a.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(edge)\/([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(opr)[\/]([\w.]+)/.exec(a)||/(version)(applewebkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||a.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[],c=/(android)/.exec(a)||/(bb)/.exec(a)||/(blackberry)/.exec(a)||/(cros)/.exec(a)||/(ipad)/.exec(a)||/(iphone)/.exec(a)||/(ipod)/.exec(a)||/(kindle)/.exec(a)||/(linux)/.exec(a)||/(mac)/.exec(a)||/(playbook)/.exec(a)||/(silk)/.exec(a)||/(win)/.exec(a)||/(windows phone)/.exec(a)||[];return{browser:b[5]||b[3]||b[1]||"",version:b[2]||b[4]||"0",versionNumber:b[4]||b[2]||"0",platform:c[0]||""}},c=a.uaMatch(b.navigator.userAgent),d={},c.browser&&(d[c.browser]=!0,d.version=c.version,d.versionNumber=parseInt(c.versionNumber,10)),c.platform&&(d[c.platform]=!0),(d.android||d.bb||d.blackberry||d.ipad||d.iphone||d.ipod||d.kindle||d.playbook||d.silk||d["windows phone"])&&(d.mobile=!0),(d.cros||d.mac||d.linux||d.win)&&(d.desktop=!0),(d.chrome||d.opr||d.safari)&&(d.webkit=!0),d.rv||d.edge){var e="msie";c.browser=e,d[e]=!0}if(d.bb){var f="blackberry";c.browser=f,d[f]=!0}if(d.opr){var g="opera";c.browser=g,d[g]=!0}if(d.safari&&d.android){var h="android";c.browser=h,d[h]=!0}return d.name=c.browser,d.platform=c.platform,a.browser=d,d}); \ No newline at end of file diff --git a/test/src/jquery.browser.js b/test/src/jquery.browser.js index ceea0e4..dd3c9d3 100644 --- a/test/src/jquery.browser.js +++ b/test/src/jquery.browser.js @@ -13,7 +13,17 @@ * Date: 2013-07-29T17:23:27-07:00 */ -(function( jQuery, window, undefined ) { +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], function ($) { + factory($, root); + }); + } else { + // Browser globals + factory(jQuery, root); + } +}(this, function(jQuery, window) { "use strict"; var matched, browser; @@ -21,30 +31,38 @@ jQuery.uaMatch = function( ua ) { ua = ua.toLowerCase(); - var match = /(opr)[\/]([\w.]+)/.exec( ua ) || - /(chrome)[ \/]([\w.]+)/.exec( ua ) || - /(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec( ua ) || - /(webkit)[ \/]([\w.]+)/.exec( ua ) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || - /(msie) ([\w.]+)/.exec( ua ) || - ua.indexOf("trident") >= 0 && /(rv)(?::| )([\w.]+)/.exec( ua ) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || - []; - - var platform_match = /(ipad)/.exec( ua ) || - /(iphone)/.exec( ua ) || - /(android)/.exec( ua ) || - /(windows phone)/.exec( ua ) || - /(win)/.exec( ua ) || - /(mac)/.exec( ua ) || - /(linux)/.exec( ua ) || - /(cros)/.exec( ua ) || - []; + var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || + /(edge)\/([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || + /(opr)[\/]([\w.]+)/.exec( ua ) || + /(version)(applewebkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec( ua ) || + /(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec( ua ) || + /(webkit)[ \/]([\w.]+)/.exec( ua ) || + ua.indexOf("trident") >= 0 && /(rv)(?::| )([\w.]+)/.exec( ua ) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || + []; + + var platform_match = /(android)/.exec( ua ) || + /(bb)/.exec( ua ) || + /(blackberry)/.exec( ua ) || + /(cros)/.exec( ua ) || + /(ipad)/.exec( ua ) || + /(iphone)/.exec( ua ) || + /(ipod)/.exec( ua ) || + /(kindle)/.exec( ua ) || + /(linux)/.exec( ua ) || + /(mac)/.exec( ua ) || + /(playbook)/.exec( ua ) || + /(silk)/.exec( ua ) || + /(win)/.exec( ua ) || + /(windows phone)/.exec( ua ) || + []; return { - browser: match[ 3 ] || match[ 1 ] || "", - version: match[ 4 ] || match[ 2 ], - versionNumber: match[ 2 ] || "0", + browser: match[ 5 ] || match[ 3 ] || match[ 1 ] || "", + version: match[ 2 ] || match[ 4 ] || "0", + versionNumber: match[ 4 ] || match[ 2 ] || "0", platform: platform_match[ 0 ] || "" }; }; @@ -55,7 +73,7 @@ if ( matched.browser ) { browser[ matched.browser ] = true; browser.version = matched.version; - browser.versionNumber = parseInt(matched.versionNumber); + browser.versionNumber = parseInt(matched.versionNumber, 10); } if ( matched.platform ) { @@ -63,7 +81,8 @@ } // These are all considered mobile platforms, meaning they run a mobile browser - if ( browser.android || browser.ipad || browser.iphone || browser[ "windows phone" ] ) { + if ( browser.android || browser.bb || browser.blackberry || browser.ipad || browser.iphone || + browser.ipod || browser.kindle || browser.playbook || browser.silk || browser[ "windows phone" ]) { browser.mobile = true; } @@ -78,17 +97,24 @@ } // IE11 has a new token so we will assign it msie to avoid breaking changes - if ( browser.rv ) - { + // IE12 disguises itself as Chrome, but adds a new Edge token. + if ( browser.rv || browser.edge ) { var ie = "msie"; matched.browser = ie; browser[ie] = true; } + // BB10 is a newer OS version of BlackBerry + if ( browser.bb ) { + var blackberry = "blackberry"; + + matched.browser = blackberry; + browser[blackberry] = true; + } + // Opera 15+ are identified as opr - if ( browser.opr ) - { + if ( browser.opr ) { var opera = "opera"; matched.browser = opera; @@ -96,8 +122,7 @@ } // Stock Android browsers are marked as Safari on Android. - if ( browser.safari && browser.android ) - { + if ( browser.safari && browser.android ) { var android = "android"; matched.browser = android; @@ -108,6 +133,6 @@ browser.name = matched.browser; browser.platform = matched.platform; - jQuery.browser = browser; -})( jQuery, window ); + return browser; +})); From 09f3b44d71f3414e2dc9918c7d7a18267c22489f Mon Sep 17 00:00:00 2001 From: Baraa Date: Thu, 11 Dec 2014 23:23:30 -0800 Subject: [PATCH 3/3] Removed grunt test files + reorded windows mobile > win --- dist/jquery.browser.js | 2 +- dist/jquery.browser.min.js | 4 +- test/src/jquery.browser.js | 91 ++++++++++++++------------------------ 3 files changed, 36 insertions(+), 61 deletions(-) diff --git a/dist/jquery.browser.js b/dist/jquery.browser.js index dd3c9d3..0d1f22c 100644 --- a/dist/jquery.browser.js +++ b/dist/jquery.browser.js @@ -55,8 +55,8 @@ /(mac)/.exec( ua ) || /(playbook)/.exec( ua ) || /(silk)/.exec( ua ) || - /(win)/.exec( ua ) || /(windows phone)/.exec( ua ) || + /(win)/.exec( ua ) || []; return { diff --git a/dist/jquery.browser.min.js b/dist/jquery.browser.min.js index 5e0a2b2..d5f6aa3 100644 --- a/dist/jquery.browser.min.js +++ b/dist/jquery.browser.min.js @@ -10,5 +10,5 @@ * * Released under the MIT license * - * Date: 08-12-2014 - */!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(c){b(c,a)}):b(jQuery,a)}(this,function(a,b){"use strict";var c,d;if(a.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(edge)\/([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(opr)[\/]([\w.]+)/.exec(a)||/(version)(applewebkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||a.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[],c=/(android)/.exec(a)||/(bb)/.exec(a)||/(blackberry)/.exec(a)||/(cros)/.exec(a)||/(ipad)/.exec(a)||/(iphone)/.exec(a)||/(ipod)/.exec(a)||/(kindle)/.exec(a)||/(linux)/.exec(a)||/(mac)/.exec(a)||/(playbook)/.exec(a)||/(silk)/.exec(a)||/(win)/.exec(a)||/(windows phone)/.exec(a)||[];return{browser:b[5]||b[3]||b[1]||"",version:b[2]||b[4]||"0",versionNumber:b[4]||b[2]||"0",platform:c[0]||""}},c=a.uaMatch(b.navigator.userAgent),d={},c.browser&&(d[c.browser]=!0,d.version=c.version,d.versionNumber=parseInt(c.versionNumber,10)),c.platform&&(d[c.platform]=!0),(d.android||d.bb||d.blackberry||d.ipad||d.iphone||d.ipod||d.kindle||d.playbook||d.silk||d["windows phone"])&&(d.mobile=!0),(d.cros||d.mac||d.linux||d.win)&&(d.desktop=!0),(d.chrome||d.opr||d.safari)&&(d.webkit=!0),d.rv||d.edge){var e="msie";c.browser=e,d[e]=!0}if(d.bb){var f="blackberry";c.browser=f,d[f]=!0}if(d.opr){var g="opera";c.browser=g,d[g]=!0}if(d.safari&&d.android){var h="android";c.browser=h,d[h]=!0}return d.name=c.browser,d.platform=c.platform,a.browser=d,d}); \ No newline at end of file + * Date: 28-09-2014 + */!function(a,b){"use strict";var c,d;if(a.uaMatch=function(a){a=a.toLowerCase();var b=/(opr)[\/]([\w.]+)/.exec(a)||/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[],c=/(ipad)/.exec(a)||/(iphone)/.exec(a)||/(android)/.exec(a)||/(windows phone)/.exec(a)||/(win)/.exec(a)||/(mac)/.exec(a)||/(linux)/.exec(a)||/(cros)/.exec(a)||[];return{browser:b[3]||b[1]||"",version:b[4]||b[2],versionNumber:b[2]||"0",platform:c[0]||""}},c=a.uaMatch(b.navigator.userAgent),d={},c.browser&&(d[c.browser]=!0,d.version=c.version,d.versionNumber=parseInt(c.versionNumber)),c.platform&&(d[c.platform]=!0),(d.android||d.ipad||d.iphone||d["windows phone"])&&(d.mobile=!0),(d.cros||d.mac||d.linux||d.win)&&(d.desktop=!0),(d.chrome||d.opr||d.safari)&&(d.webkit=!0),d.rv){var e="msie";c.browser=e,d[e]=!0}if(d.opr){var f="opera";c.browser=f,d[f]=!0}if(d.safari&&d.android){var g="android";c.browser=g,d[g]=!0}d.name=c.browser,d.platform=c.platform,a.browser=d}(jQuery,window); \ No newline at end of file diff --git a/test/src/jquery.browser.js b/test/src/jquery.browser.js index dd3c9d3..ceea0e4 100644 --- a/test/src/jquery.browser.js +++ b/test/src/jquery.browser.js @@ -13,17 +13,7 @@ * Date: 2013-07-29T17:23:27-07:00 */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['jquery'], function ($) { - factory($, root); - }); - } else { - // Browser globals - factory(jQuery, root); - } -}(this, function(jQuery, window) { +(function( jQuery, window, undefined ) { "use strict"; var matched, browser; @@ -31,38 +21,30 @@ jQuery.uaMatch = function( ua ) { ua = ua.toLowerCase(); - var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || - /(edge)\/([\w.]+)/.exec( ua ) || - /(msie) ([\w.]+)/.exec( ua ) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || - /(opr)[\/]([\w.]+)/.exec( ua ) || - /(version)(applewebkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec( ua ) || - /(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec( ua ) || - /(webkit)[ \/]([\w.]+)/.exec( ua ) || - ua.indexOf("trident") >= 0 && /(rv)(?::| )([\w.]+)/.exec( ua ) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || - []; - - var platform_match = /(android)/.exec( ua ) || - /(bb)/.exec( ua ) || - /(blackberry)/.exec( ua ) || - /(cros)/.exec( ua ) || - /(ipad)/.exec( ua ) || - /(iphone)/.exec( ua ) || - /(ipod)/.exec( ua ) || - /(kindle)/.exec( ua ) || - /(linux)/.exec( ua ) || - /(mac)/.exec( ua ) || - /(playbook)/.exec( ua ) || - /(silk)/.exec( ua ) || - /(win)/.exec( ua ) || - /(windows phone)/.exec( ua ) || - []; + var match = /(opr)[\/]([\w.]+)/.exec( ua ) || + /(chrome)[ \/]([\w.]+)/.exec( ua ) || + /(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec( ua ) || + /(webkit)[ \/]([\w.]+)/.exec( ua ) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + ua.indexOf("trident") >= 0 && /(rv)(?::| )([\w.]+)/.exec( ua ) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || + []; + + var platform_match = /(ipad)/.exec( ua ) || + /(iphone)/.exec( ua ) || + /(android)/.exec( ua ) || + /(windows phone)/.exec( ua ) || + /(win)/.exec( ua ) || + /(mac)/.exec( ua ) || + /(linux)/.exec( ua ) || + /(cros)/.exec( ua ) || + []; return { - browser: match[ 5 ] || match[ 3 ] || match[ 1 ] || "", - version: match[ 2 ] || match[ 4 ] || "0", - versionNumber: match[ 4 ] || match[ 2 ] || "0", + browser: match[ 3 ] || match[ 1 ] || "", + version: match[ 4 ] || match[ 2 ], + versionNumber: match[ 2 ] || "0", platform: platform_match[ 0 ] || "" }; }; @@ -73,7 +55,7 @@ if ( matched.browser ) { browser[ matched.browser ] = true; browser.version = matched.version; - browser.versionNumber = parseInt(matched.versionNumber, 10); + browser.versionNumber = parseInt(matched.versionNumber); } if ( matched.platform ) { @@ -81,8 +63,7 @@ } // These are all considered mobile platforms, meaning they run a mobile browser - if ( browser.android || browser.bb || browser.blackberry || browser.ipad || browser.iphone || - browser.ipod || browser.kindle || browser.playbook || browser.silk || browser[ "windows phone" ]) { + if ( browser.android || browser.ipad || browser.iphone || browser[ "windows phone" ] ) { browser.mobile = true; } @@ -97,24 +78,17 @@ } // IE11 has a new token so we will assign it msie to avoid breaking changes - // IE12 disguises itself as Chrome, but adds a new Edge token. - if ( browser.rv || browser.edge ) { + if ( browser.rv ) + { var ie = "msie"; matched.browser = ie; browser[ie] = true; } - // BB10 is a newer OS version of BlackBerry - if ( browser.bb ) { - var blackberry = "blackberry"; - - matched.browser = blackberry; - browser[blackberry] = true; - } - // Opera 15+ are identified as opr - if ( browser.opr ) { + if ( browser.opr ) + { var opera = "opera"; matched.browser = opera; @@ -122,7 +96,8 @@ } // Stock Android browsers are marked as Safari on Android. - if ( browser.safari && browser.android ) { + if ( browser.safari && browser.android ) + { var android = "android"; matched.browser = android; @@ -133,6 +108,6 @@ browser.name = matched.browser; browser.platform = matched.platform; + jQuery.browser = browser; - return browser; -})); +})( jQuery, window );