From 7619f17e70b16ff7b7e7dfecd86d4f97035310f4 Mon Sep 17 00:00:00 2001 From: Gils14 Date: Thu, 18 Jun 2015 16:09:32 -0500 Subject: [PATCH] Converting Bowser to Angular Constant & Code Clean-Up This Bowser Service is great! My team and I use it everywhere! However, we make configurations in our modules based on the browser type. I would be beneficial to us and other users to convert this into a constant. Not only will it be available in BOTH providers and services, but it is better suited as a constant since it does not change while you have an instance of an application running. In addition, I also did a little clean-up with semi-colons and === --- src/angular-bowser.js | 75 +++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/src/angular-bowser.js b/src/angular-bowser.js index 9ab227f..9301ad0 100644 --- a/src/angular-bowser.js +++ b/src/angular-bowser.js @@ -1,8 +1,8 @@ angular.module('jlareau.bowser', []) - .factory('bowser', [function(){ + .constant('bowser', (function(){ - var t = true + var t = true; function detect(ua) { @@ -17,14 +17,14 @@ angular.module('jlareau.bowser', []) , versionIdentifier = getFirstMatch(/version\/(\d+(\.\d+)?)/i) , tablet = /tablet/i.test(ua) , mobile = !tablet && /[^-]mobi/i.test(ua) - , result + , result; if (/opera|opr/i.test(ua)) { result = { name: 'Opera' , opera: t , version: versionIdentifier || getFirstMatch(/(?:opera|opr)[\s\/](\d+(\.\d+)?)/i) - } + }; } else if (/windows phone/i.test(ua)) { result = { @@ -32,29 +32,29 @@ angular.module('jlareau.bowser', []) , windowsphone: t , msie: t , version: getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i) - } + }; } else if (/msie|trident/i.test(ua)) { result = { name: 'Internet Explorer' , msie: t , version: getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i) - } + }; } else if (/chrome|crios|crmo/i.test(ua)) { result = { name: 'Chrome' , chrome: t , version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i) - } + }; } else if (iosdevice) { result = { name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod' - } + }; // WTF: version is not part of user agent in web apps if (versionIdentifier) { - result.version = versionIdentifier + result.version = versionIdentifier; } } else if (/sailfish/i.test(ua)) { @@ -62,23 +62,23 @@ angular.module('jlareau.bowser', []) name: 'Sailfish' , sailfish: t , version: getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i) - } + }; } else if (/seamonkey\//i.test(ua)) { result = { name: 'SeaMonkey' , seamonkey: t , version: getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i) - } + }; } else if (/firefox|iceweasel/i.test(ua)) { result = { name: 'Firefox' , firefox: t , version: getFirstMatch(/(?:firefox|iceweasel)[ \/](\d+(\.\d+)?)/i) - } + }; if (/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)) { - result.firefoxos = t + result.firefoxos = t; } } else if (/silk/i.test(ua)) { @@ -86,27 +86,27 @@ angular.module('jlareau.bowser', []) name: 'Amazon Silk' , silk: t , version : getFirstMatch(/silk\/(\d+(\.\d+)?)/i) - } + }; } else if (android) { result = { name: 'Android' , version: versionIdentifier - } + }; } else if (/phantom/i.test(ua)) { result = { name: 'PhantomJS' , phantom: t , version: getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i) - } + }; } else if (/blackberry|\bbb\d+/i.test(ua) || /rim\stablet/i.test(ua)) { result = { name: 'BlackBerry' , blackberry: t , version: versionIdentifier || getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i) - } + }; } else if (/(web|hpw)os/i.test(ua)) { result = { @@ -114,7 +114,7 @@ angular.module('jlareau.bowser', []) , webos: t , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i) }; - /touchpad\//i.test(ua) && (result.touchpad = t) + /touchpad\//i.test(ua) && (result.touchpad = t); } else if (/bada/i.test(ua)) { result = { @@ -135,29 +135,29 @@ angular.module('jlareau.bowser', []) name: 'Safari' , safari: t , version: versionIdentifier - } + }; } - else result = {} + else result = {}; // set webkit or gecko flag for browsers based on these engines if (/(apple)?webkit/i.test(ua)) { - result.name = result.name || "Webkit" - result.webkit = t + result.name = result.name || "Webkit"; + result.webkit = t; if (!result.version && versionIdentifier) { - result.version = versionIdentifier + result.version = versionIdentifier; } } else if (!result.opera && /gecko\//i.test(ua)) { - result.name = result.name || "Gecko" - result.gecko = t - result.version = result.version || getFirstMatch(/gecko\/(\d+(\.\d+)?)/i) + result.name = result.name || "Gecko"; + result.gecko = t; + result.version = result.version || getFirstMatch(/gecko\/(\d+(\.\d+)?)/i); } // set OS flags for platforms that have multiple browsers if (android || result.silk) { - result.android = t + result.android = t; } else if (iosdevice) { - result[iosdevice] = t - result.ios = t + result[iosdevice] = t; + result.ios = t; } // OS version extraction @@ -184,10 +184,10 @@ angular.module('jlareau.bowser', []) // device type extraction var osMajorVersion = osVersion.split('.')[0]; - if (tablet || iosdevice == 'ipad' || (android && (osMajorVersion == 3 || (osMajorVersion == 4 && !mobile))) || result.silk) { - result.tablet = t + if (tablet || iosdevice == 'ipad' || (android && (osMajorVersion === '3' || (osMajorVersion === '4' && !mobile))) || result.silk) { + result.tablet = t; } else if (mobile || iosdevice == 'iphone' || iosdevice == 'ipod' || android || result.blackberry || result.webos || result.bada) { - result.mobile = t + result.mobile = t; } // Graded Browser Support @@ -208,13 +208,13 @@ angular.module('jlareau.bowser', []) (result.opera && result.version < 10.0) || (result.ios && result.osversion && result.osversion.split(".")[0] < 6) ) { - result.c = t - } else result.x = t + result.c = t; + } else result.x = t; - return result + return result; } - var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent : '') + var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent : ''); /* @@ -223,7 +223,6 @@ angular.module('jlareau.bowser', []) * This is needed to implement future tests. */ bowser._detect = detect; - return bowser; - }]); + })());