ng-device-detector
Advanced tools
Comparing version 1.1.7 to 3.0.1
{ | ||
"name": "ng-device-detector", | ||
"version": "1.1.7", | ||
"version": "3.0.1", | ||
"homepage": "https://github.com/srfrnk/ng-device-detector", | ||
@@ -5,0 +5,0 @@ "authors": [ |
#Version 1.1.7 | ||
* device id "firefoxos" was changed to "firefox-os" | ||
* os id "firefoxos" was changed to "firefox-os" | ||
# Version 3.0.1 | ||
* Breaking changes | ||
* Removed OS and BROWSER for device types. | ||
* Should now detect those by using the 'device' property |
@@ -11,4 +11,3 @@ (function (angular) { | ||
MS_EDGE: "ms-edge", | ||
PS4: "ps4", | ||
VITA: "vita", | ||
FB_MESSANGER: "fb-messanger", | ||
UNKNOWN: "unknown" | ||
@@ -27,2 +26,5 @@ }) | ||
VITA: "vita", | ||
CHROMECAST: "chromecast", | ||
APPLE_TV:"apple-tv", | ||
GOOGLE_TV:"google-tv", | ||
UNKNOWN: "unknown" | ||
@@ -40,4 +42,2 @@ }) | ||
WINDOWS_PHONE: "windows-phone", | ||
PS4: "ps4", | ||
VITA: "vita", | ||
UNKNOWN: "unknown" | ||
@@ -60,2 +60,3 @@ }) | ||
WINDOWS_PHONE_7_5: "windows-phone-7-5", | ||
WINDOWS_PHONE_8_1: "windows-phone-8-1", | ||
WINDOWS_PHONE_10: "windows-phone-10", | ||
@@ -82,10 +83,86 @@ WINDOWS_NT_4_0: "windows-nt-4-0", | ||
]) | ||
.factory("deviceDetector", ["$window", "DEVICES", "BROWSERS", "OS", "OS_VERSIONS","reTree", | ||
function ($window, DEVICES, BROWSERS, OS, OS_VERSIONS,reTree) { | ||
.factory("deviceDetector", ["$window", "DEVICES", "BROWSERS", "OS", "OS_VERSIONS", "reTree", | ||
function ($window, DEVICES, BROWSERS, OS, OS_VERSIONS, reTree) { | ||
/* ES5 polyfills Start*/ | ||
// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys | ||
if (!Object.keys) { | ||
Object.keys = (function () { | ||
'use strict'; | ||
var hasOwnProperty = Object.prototype.hasOwnProperty, | ||
hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'), | ||
dontEnums = [ | ||
'toString', | ||
'toLocaleString', | ||
'valueOf', | ||
'hasOwnProperty', | ||
'isPrototypeOf', | ||
'propertyIsEnumerable', | ||
'constructor' | ||
], | ||
dontEnumsLength = dontEnums.length; | ||
return function (obj) { | ||
if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) { | ||
throw new TypeError('Object.keys called on non-object'); | ||
} | ||
var result = [], prop, i; | ||
for (prop in obj) { | ||
if (hasOwnProperty.call(obj, prop)) { | ||
result.push(prop); | ||
} | ||
} | ||
if (hasDontEnumBug) { | ||
for (i = 0; i < dontEnumsLength; i++) { | ||
if (hasOwnProperty.call(obj, dontEnums[i])) { | ||
result.push(dontEnums[i]); | ||
} | ||
} | ||
} | ||
return result; | ||
}; | ||
}()); | ||
} | ||
// Production steps of ECMA-262, Edition 5, 15.4.4.21 | ||
// Reference: http://es5.github.io/#x15.4.4.21 | ||
if (!Array.prototype.reduce) { | ||
Array.prototype.reduce = function (callback /*, initialValue*/) { | ||
'use strict'; | ||
if (this == null) { | ||
throw new TypeError('Array.prototype.reduce called on null or undefined'); | ||
} | ||
if (typeof callback !== 'function') { | ||
throw new TypeError(callback + ' is not a function'); | ||
} | ||
var t = Object(this), len = t.length >>> 0, k = 0, value; | ||
if (arguments.length == 2) { | ||
value = arguments[1]; | ||
} else { | ||
while (k < len && !(k in t)) { | ||
k++; | ||
} | ||
if (k >= len) { | ||
throw new TypeError('Reduce of empty array with no initial value'); | ||
} | ||
value = t[k++]; | ||
} | ||
for (; k < len; k++) { | ||
if (k in t) { | ||
value = callback(value, t[k], k, t); | ||
} | ||
} | ||
return value; | ||
}; | ||
} | ||
/* ES5 polyfills End*/ | ||
var OS_RE = { | ||
WINDOWS: {and: [{or: [/\bWindows|(Win\d\d)\b/, /\bWin 9x\b/]}, {not: /\bWindows Phone\b/}]}, | ||
MAC: /\bMac OS\b/, | ||
IOS: {or: [/\biPad\b/, /\biPhone\b/, /\biPod\b/]}, | ||
ANDROID: {and:[/\bAndroid\b/,{not:/Windows Phone/}]}, | ||
MAC: {and: [/\bMac OS\b/, {not: /Windows Phone/}]}, | ||
IOS: {and: [{or: [/\biPad\b/, /\biPhone\b/, /\biPod\b/]}, {not: /Windows Phone/}]}, | ||
ANDROID: {and: [/\bAndroid\b/, {not: /Windows Phone/}]}, | ||
LINUX: /\bLinux\b/, | ||
@@ -95,3 +172,3 @@ UNIX: /\bUNIX\b/, | ||
CHROME_OS: /\bCrOS\b/, | ||
WINDOWS_PHONE: {or:[/\bIEMobile\b/,/\bWindows Phone\b/]}, | ||
WINDOWS_PHONE: {or: [/\bIEMobile\b/, /\bWindows Phone\b/]}, | ||
PS4: /\bMozilla\/5.0 \(PlayStation 4\b/, | ||
@@ -102,16 +179,17 @@ VITA: /\bMozilla\/5.0 \(Play(S|s)tation Vita\b/ | ||
var BROWSERS_RE = { | ||
CHROME: {and:[{or: [/\bChrome\b/, /\bCriOS\b/]},{not:{or:[/\bOPR\b/,/\bEdge\b/]}}]}, | ||
CHROME: {and: [{or: [/\bChrome\b/, /\bCriOS\b/]}, {not: {or: [/\bOPR\b/, /\bEdge\b/]}}]}, | ||
FIREFOX: /\bFirefox\b/, | ||
SAFARI: {and:[/^((?!CriOS).)*\Safari\b.*$/,{not:{or:[/\bOPR\b/,/\bEdge\b/]}}]}, | ||
OPERA: {or:[/Opera\b/,/\bOPR\b/]}, | ||
IE: {or: [/\bMSIE\b/, /\bTrident\b/]}, | ||
SAFARI: {and: [/^((?!CriOS).)*\Safari\b.*$/, {not: {or: [/\bOPR\b/, /\bEdge\b/, /Windows Phone/]}}]}, | ||
OPERA: {or: [/Opera\b/, /\bOPR\b/]}, | ||
IE: {or: [/\bMSIE\b/, /\bTrident\b/,/^Mozilla\/5\.0 \(Windows NT 10\.0; Win64; x64\)$/]}, | ||
MS_EDGE: {or: [/\bEdge\b/]}, | ||
PS4: /\bMozilla\/5.0 \(PlayStation 4\b/, | ||
VITA: /\bMozilla\/5.0 \(Play(S|s)tation Vita\b/ | ||
VITA: /\bMozilla\/5.0 \(Play(S|s)tation Vita\b/, | ||
FB_MESSANGER: /\bFBAN\/MessengerForiOS\b/ | ||
}; | ||
var DEVICES_RE = { | ||
ANDROID: {and:[/\bAndroid\b/,{not:/Windows Phone/}]}, | ||
ANDROID: {and: [/\bAndroid\b/, {not: /Windows Phone/}]}, | ||
I_PAD: /\biPad\b/, | ||
IPHONE: /\biPhone\b/, | ||
IPHONE: {and: [/\biPhone\b/, {not: /Windows Phone/}]}, | ||
I_POD: /\biPod\b/, | ||
@@ -121,4 +199,7 @@ BLACKBERRY: /\bblackberry\b/, | ||
CHROME_BOOK: /\bCrOS\b/, | ||
WINDOWS_PHONE: {or:[/\bIEMobile\b/,/\bWindows Phone\b/]}, | ||
WINDOWS_PHONE: {or: [/\bIEMobile\b/, /\bWindows Phone\b/]}, | ||
PS4: /\bMozilla\/5.0 \(PlayStation 4\b/, | ||
CHROMECAST: /\bCrKey\b/, | ||
APPLE_TV:/^iTunes-AppleTV\/4.1$/, | ||
GOOGLE_TV:/\bGoogleTV\b/, | ||
VITA: /\bMozilla\/5.0 \(Play(S|s)tation Vita\b/ | ||
@@ -142,19 +223,20 @@ }; | ||
WINDOWS_PHONE_7_5: /(Windows Phone OS 7.5)/, | ||
WINDOWS_PHONE_8_1: /(Windows Phone 8.1)/, | ||
WINDOWS_PHONE_10: /(Windows Phone 10)/, | ||
WINDOWS_NT_4_0: {and:[/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/,{not:/Windows NT 10.0/}]} | ||
WINDOWS_NT_4_0: {and: [/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/, {not: /Windows NT 10.0/}]} | ||
}; | ||
var BROWSER_VERSIONS_RE_MAP = { | ||
CHROME:/\bChrome\/([\d\.]+)\b/, | ||
FIREFOX:/\bFirefox\/([\d\.]+)\b/, | ||
SAFARI:/\bVersion\/([\d\.]+)\b/, | ||
OPERA:[/\bVersion\/([\d\.]+)\b/,/\bOPR\/([\d\.]+)\b/], | ||
IE:[/\bMSIE ([\d\.]+\w?)\b/,/\brv:([\d\.]+\w?)\b/], | ||
MS_EDGE:/\bEdge\/([\d\.]+)\b/ | ||
CHROME: [/\bChrome\/([\d\.]+)\b/, /\bCriOS\/([\d\.]+)\b/], | ||
FIREFOX: /\bFirefox\/([\d\.]+)\b/, | ||
SAFARI: /\bVersion\/([\d\.]+)\b/, | ||
OPERA: [/\bVersion\/([\d\.]+)\b/, /\bOPR\/([\d\.]+)\b/], | ||
IE: [/\bMSIE ([\d\.]+\w?)\b/, /\brv:([\d\.]+\w?)\b/], | ||
MS_EDGE: /\bEdge\/([\d\.]+)\b/ | ||
}; | ||
var BROWSER_VERSIONS_RE = Object.keys(BROWSER_VERSIONS_RE_MAP).reduce(function (obj, key) { | ||
obj[BROWSERS[key]]=BROWSER_VERSIONS_RE_MAP[key]; | ||
obj[BROWSERS[key]] = BROWSER_VERSIONS_RE_MAP[key]; | ||
return obj; | ||
},{}); | ||
}, {}); | ||
@@ -201,8 +283,6 @@ var ua = $window.navigator.userAgent; | ||
OS.CHROME_OS, | ||
OS.WINDOWS_PHONE, | ||
OS.PS4, | ||
OS.VITA | ||
OS.WINDOWS_PHONE | ||
].reduce(function (previousValue, currentValue) { | ||
return (previousValue === OS.UNKNOWN && deviceInfo.raw.os[currentValue]) ? currentValue : previousValue; | ||
}, OS.UNKNOWN); | ||
return (previousValue === OS.UNKNOWN && deviceInfo.raw.os[currentValue]) ? currentValue : previousValue; | ||
}, OS.UNKNOWN); | ||
@@ -216,7 +296,6 @@ deviceInfo.browser = [ | ||
BROWSERS.MS_EDGE, | ||
BROWSERS.PS4, | ||
BROWSERS.VITA | ||
BROWSERS.FB_MESSANGER | ||
].reduce(function (previousValue, currentValue) { | ||
return (previousValue === BROWSERS.UNKNOWN && deviceInfo.raw.browser[currentValue]) ? currentValue : previousValue; | ||
}, BROWSERS.UNKNOWN); | ||
return (previousValue === BROWSERS.UNKNOWN && deviceInfo.raw.browser[currentValue]) ? currentValue : previousValue; | ||
}, BROWSERS.UNKNOWN); | ||
@@ -233,6 +312,9 @@ deviceInfo.device = [ | ||
DEVICES.PS4, | ||
DEVICES.CHROMECAST, | ||
DEVICES.APPLE_TV, | ||
DEVICES.GOOGLE_TV, | ||
DEVICES.VITA | ||
].reduce(function (previousValue, currentValue) { | ||
return (previousValue === DEVICES.UNKNOWN && deviceInfo.raw.device[currentValue]) ? currentValue : previousValue; | ||
}, DEVICES.UNKNOWN); | ||
return (previousValue === DEVICES.UNKNOWN && deviceInfo.raw.device[currentValue]) ? currentValue : previousValue; | ||
}, DEVICES.UNKNOWN); | ||
@@ -254,7 +336,8 @@ deviceInfo.os_version = [ | ||
OS_VERSIONS.WINDOWS_PHONE_7_5, | ||
OS_VERSIONS.WINDOWS_PHONE_8_1, | ||
OS_VERSIONS.WINDOWS_PHONE_10, | ||
OS_VERSIONS.WINDOWS_NT_4_0 | ||
].reduce(function (previousValue, currentValue) { | ||
return (previousValue === OS_VERSIONS.UNKNOWN && deviceInfo.raw.os_version[currentValue]) ? currentValue : previousValue; | ||
}, OS_VERSIONS.UNKNOWN); | ||
return (previousValue === OS_VERSIONS.UNKNOWN && deviceInfo.raw.os_version[currentValue]) ? currentValue : previousValue; | ||
}, OS_VERSIONS.UNKNOWN); | ||
@@ -264,3 +347,3 @@ deviceInfo.browser_version = "0"; | ||
var re = BROWSER_VERSIONS_RE[deviceInfo.browser]; | ||
var res = reTree.exec(ua,re); | ||
var res = reTree.exec(ua, re); | ||
if (!!res) { | ||
@@ -279,8 +362,7 @@ deviceInfo.browser_version = res[1]; | ||
DEVICES.FIREFOX_OS, | ||
DEVICES.CHROME_BOOK, | ||
DEVICES.WINDOWS_PHONE, | ||
DEVICES.VITA | ||
].some(function (item) { | ||
return deviceInfo.device == item; | ||
}); | ||
return deviceInfo.device == item; | ||
}); | ||
}; | ||
@@ -291,7 +373,6 @@ | ||
DEVICES.I_PAD, | ||
DEVICES.FIREFOX_OS, | ||
DEVICES.CHROME_BOOK | ||
DEVICES.FIREFOX_OS | ||
].some(function (item) { | ||
return deviceInfo.device == item; | ||
}); | ||
return deviceInfo.device == item; | ||
}); | ||
}; | ||
@@ -302,6 +383,7 @@ | ||
DEVICES.PS4, | ||
DEVICES.CHROME_BOOK, | ||
DEVICES.UNKNOWN | ||
].some(function (item) { | ||
return deviceInfo.device == item; | ||
}); | ||
return deviceInfo.device == item; | ||
}); | ||
}; | ||
@@ -308,0 +390,0 @@ |
@@ -1,1 +0,1 @@ | ||
!function(n){"use strict";n.module("ng.deviceDetector",["reTree"]).constant("BROWSERS",{CHROME:"chrome",FIREFOX:"firefox",SAFARI:"safari",OPERA:"opera",IE:"ie",MS_EDGE:"ms-edge",PS4:"ps4",VITA:"vita",UNKNOWN:"unknown"}).constant("DEVICES",{ANDROID:"android",I_PAD:"ipad",IPHONE:"iphone",I_POD:"ipod",BLACKBERRY:"blackberry",FIREFOX_OS:"firefox-os",CHROME_BOOK:"chrome-book",WINDOWS_PHONE:"windows-phone",PS4:"ps4",VITA:"vita",UNKNOWN:"unknown"}).constant("OS",{WINDOWS:"windows",MAC:"mac",IOS:"ios",ANDROID:"android",LINUX:"linux",UNIX:"unix",FIREFOX_OS:"firefox-os",CHROME_OS:"chrome-os",WINDOWS_PHONE:"windows-phone",PS4:"ps4",VITA:"vita",UNKNOWN:"unknown"}).constant("OS_VERSIONS",{WINDOWS_3_11:"windows-3-11",WINDOWS_95:"windows-95",WINDOWS_ME:"windows-me",WINDOWS_98:"windows-98",WINDOWS_CE:"windows-ce",WINDOWS_2000:"windows-2000",WINDOWS_XP:"windows-xp",WINDOWS_SERVER_2003:"windows-server-2003",WINDOWS_VISTA:"windows-vista",WINDOWS_7:"windows-7",WINDOWS_8_1:"windows-8-1",WINDOWS_8:"windows-8",WINDOWS_10:"windows-10",WINDOWS_PHONE_7_5:"windows-phone-7-5",WINDOWS_PHONE_10:"windows-phone-10",WINDOWS_NT_4_0:"windows-nt-4-0",UNKNOWN:"unknown"}).service("detectUtils",["deviceDetector","DEVICES","BROWSERS","OS",function(n,o,e,O){var i=n;this.isMobile=function(){return"unknown"!==i.device},this.isAndroid=function(){return i.device===o.ANDROID||i.OS===O.ANDROID},this.isIOS=function(){return i.os===O.IOS||i.device===o.I_POD||i.device===o.IPHONE}}]).factory("deviceDetector",["$window","DEVICES","BROWSERS","OS","OS_VERSIONS","reTree",function(n,o,e,O,i,W){var N={WINDOWS:{and:[{or:[/\bWindows|(Win\d\d)\b/,/\bWin 9x\b/]},{not:/\bWindows Phone\b/}]},MAC:/\bMac OS\b/,IOS:{or:[/\biPad\b/,/\biPhone\b/,/\biPod\b/]},ANDROID:{and:[/\bAndroid\b/,{not:/Windows Phone/}]},LINUX:/\bLinux\b/,UNIX:/\bUNIX\b/,FIREFOX_OS:{and:[/\bFirefox\b/,/Mobile\b/]},CHROME_OS:/\bCrOS\b/,WINDOWS_PHONE:{or:[/\bIEMobile\b/,/\bWindows Phone\b/]},PS4:/\bMozilla\/5.0 \(PlayStation 4\b/,VITA:/\bMozilla\/5.0 \(Play(S|s)tation Vita\b/},r={CHROME:{and:[{or:[/\bChrome\b/,/\bCriOS\b/]},{not:{or:[/\bOPR\b/,/\bEdge\b/]}}]},FIREFOX:/\bFirefox\b/,SAFARI:{and:[/^((?!CriOS).)*\Safari\b.*$/,{not:{or:[/\bOPR\b/,/\bEdge\b/]}}]},OPERA:{or:[/Opera\b/,/\bOPR\b/]},IE:{or:[/\bMSIE\b/,/\bTrident\b/]},MS_EDGE:{or:[/\bEdge\b/]},PS4:/\bMozilla\/5.0 \(PlayStation 4\b/,VITA:/\bMozilla\/5.0 \(Play(S|s)tation Vita\b/},I={ANDROID:{and:[/\bAndroid\b/,{not:/Windows Phone/}]},I_PAD:/\biPad\b/,IPHONE:/\biPhone\b/,I_POD:/\biPod\b/,BLACKBERRY:/\bblackberry\b/,FIREFOX_OS:{and:[/\bFirefox\b/,/\bMobile\b/]},CHROME_BOOK:/\bCrOS\b/,WINDOWS_PHONE:{or:[/\bIEMobile\b/,/\bWindows Phone\b/]},PS4:/\bMozilla\/5.0 \(PlayStation 4\b/,VITA:/\bMozilla\/5.0 \(Play(S|s)tation Vita\b/},S={WINDOWS_3_11:/Win16/,WINDOWS_95:/(Windows 95|Win95|Windows_95)/,WINDOWS_ME:/(Win 9x 4.90|Windows ME)/,WINDOWS_98:/(Windows 98|Win98)/,WINDOWS_CE:/Windows CE/,WINDOWS_2000:/(Windows NT 5.0|Windows 2000)/,WINDOWS_XP:/(Windows NT 5.1|Windows XP)/,WINDOWS_SERVER_2003:/Windows NT 5.2/,WINDOWS_VISTA:/Windows NT 6.0/,WINDOWS_7:/(Windows 7|Windows NT 6.1)/,WINDOWS_8_1:/(Windows 8.1|Windows NT 6.3)/,WINDOWS_8:/(Windows 8|Windows NT 6.2)/,WINDOWS_10:/(Windows NT 10.0)/,WINDOWS_PHONE_7_5:/(Windows Phone OS 7.5)/,WINDOWS_PHONE_10:/(Windows Phone 10)/,WINDOWS_NT_4_0:{and:[/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/,{not:/Windows NT 10.0/}]}},b={CHROME:/\bChrome\/([\d\.]+)\b/,FIREFOX:/\bFirefox\/([\d\.]+)\b/,SAFARI:/\bVersion\/([\d\.]+)\b/,OPERA:[/\bVersion\/([\d\.]+)\b/,/\bOPR\/([\d\.]+)\b/],IE:[/\bMSIE ([\d\.]+\w?)\b/,/\brv:([\d\.]+\w?)\b/],MS_EDGE:/\bEdge\/([\d\.]+)\b/},s=Object.keys(b).reduce(function(n,o){return n[e[o]]=b[o],n},{}),d=n.navigator.userAgent,t={raw:{userAgent:d,os:{},browser:{},device:{}}};if(t.raw.os=Object.keys(O).reduce(function(n,o){return n[O[o]]=W.test(d,N[o]),n},{}),t.raw.browser=Object.keys(e).reduce(function(n,o){return n[e[o]]=W.test(d,r[o]),n},{}),t.raw.device=Object.keys(o).reduce(function(n,e){return n[o[e]]=W.test(d,I[e]),n},{}),t.raw.os_version=Object.keys(i).reduce(function(n,o){return n[i[o]]=W.test(d,S[o]),n},{}),t.os=[O.WINDOWS,O.IOS,O.MAC,O.ANDROID,O.LINUX,O.UNIX,O.FIREFOX_OS,O.CHROME_OS,O.WINDOWS_PHONE,O.PS4,O.VITA].reduce(function(n,o){return n===O.UNKNOWN&&t.raw.os[o]?o:n},O.UNKNOWN),t.browser=[e.CHROME,e.FIREFOX,e.SAFARI,e.OPERA,e.IE,e.MS_EDGE,e.PS4,e.VITA].reduce(function(n,o){return n===e.UNKNOWN&&t.raw.browser[o]?o:n},e.UNKNOWN),t.device=[o.ANDROID,o.I_PAD,o.IPHONE,o.I_POD,o.BLACKBERRY,o.FIREFOX_OS,o.CHROME_BOOK,o.WINDOWS_PHONE,o.PS4,o.VITA].reduce(function(n,e){return n===o.UNKNOWN&&t.raw.device[e]?e:n},o.UNKNOWN),t.os_version=[i.WINDOWS_3_11,i.WINDOWS_95,i.WINDOWS_ME,i.WINDOWS_98,i.WINDOWS_CE,i.WINDOWS_2000,i.WINDOWS_XP,i.WINDOWS_SERVER_2003,i.WINDOWS_VISTA,i.WINDOWS_7,i.WINDOWS_8_1,i.WINDOWS_8,i.WINDOWS_10,i.WINDOWS_PHONE_7_5,i.WINDOWS_PHONE_10,i.WINDOWS_NT_4_0].reduce(function(n,o){return n===i.UNKNOWN&&t.raw.os_version[o]?o:n},i.UNKNOWN),t.browser_version="0",t.browser!==e.UNKNOWN){var _=s[t.browser],D=W.exec(d,_);D&&(t.browser_version=D[1])}return t.isMobile=function(){return[o.ANDROID,o.I_PAD,o.IPHONE,o.I_POD,o.BLACKBERRY,o.FIREFOX_OS,o.CHROME_BOOK,o.WINDOWS_PHONE,o.VITA].some(function(n){return t.device==n})},t.isTablet=function(){return[o.I_PAD,o.FIREFOX_OS,o.CHROME_BOOK].some(function(n){return t.device==n})},t.isDesktop=function(){return[o.PS4,o.UNKNOWN].some(function(n){return t.device==n})},t}]).directive("deviceDetector",["deviceDetector",function(n){return{restrict:"A",link:function(o,e){e.addClass("os-"+n.os),e.addClass("browser-"+n.browser),e.addClass("device-"+n.device)}}}])}(angular); | ||
!function(n){"use strict";n.module("ng.deviceDetector",["reTree"]).constant("BROWSERS",{CHROME:"chrome",FIREFOX:"firefox",SAFARI:"safari",OPERA:"opera",IE:"ie",MS_EDGE:"ms-edge",FB_MESSANGER:"fb-messanger",UNKNOWN:"unknown"}).constant("DEVICES",{ANDROID:"android",I_PAD:"ipad",IPHONE:"iphone",I_POD:"ipod",BLACKBERRY:"blackberry",FIREFOX_OS:"firefox-os",CHROME_BOOK:"chrome-book",WINDOWS_PHONE:"windows-phone",PS4:"ps4",VITA:"vita",CHROMECAST:"chromecast",APPLE_TV:"apple-tv",GOOGLE_TV:"google-tv",UNKNOWN:"unknown"}).constant("OS",{WINDOWS:"windows",MAC:"mac",IOS:"ios",ANDROID:"android",LINUX:"linux",UNIX:"unix",FIREFOX_OS:"firefox-os",CHROME_OS:"chrome-os",WINDOWS_PHONE:"windows-phone",UNKNOWN:"unknown"}).constant("OS_VERSIONS",{WINDOWS_3_11:"windows-3-11",WINDOWS_95:"windows-95",WINDOWS_ME:"windows-me",WINDOWS_98:"windows-98",WINDOWS_CE:"windows-ce",WINDOWS_2000:"windows-2000",WINDOWS_XP:"windows-xp",WINDOWS_SERVER_2003:"windows-server-2003",WINDOWS_VISTA:"windows-vista",WINDOWS_7:"windows-7",WINDOWS_8_1:"windows-8-1",WINDOWS_8:"windows-8",WINDOWS_10:"windows-10",WINDOWS_PHONE_7_5:"windows-phone-7-5",WINDOWS_PHONE_8_1:"windows-phone-8-1",WINDOWS_PHONE_10:"windows-phone-10",WINDOWS_NT_4_0:"windows-nt-4-0",UNKNOWN:"unknown"}).service("detectUtils",["deviceDetector","DEVICES","BROWSERS","OS",function(n,o,e,r){var i=n;this.isMobile=function(){return"unknown"!==i.device},this.isAndroid=function(){return i.device===o.ANDROID||i.OS===r.ANDROID},this.isIOS=function(){return i.os===r.IOS||i.device===o.I_POD||i.device===o.IPHONE}}]).factory("deviceDetector",["$window","DEVICES","BROWSERS","OS","OS_VERSIONS","reTree",function(n,o,e,r,i,O){Object.keys||(Object.keys=function(){var n=Object.prototype.hasOwnProperty,o=!{toString:null}.propertyIsEnumerable("toString"),e=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],r=e.length;return function(i){if("object"!=typeof i&&("function"!=typeof i||null===i))throw new TypeError("Object.keys called on non-object");var O,W,t=[];for(O in i)n.call(i,O)&&t.push(O);if(o)for(W=0;r>W;W++)n.call(i,e[W])&&t.push(e[W]);return t}}()),Array.prototype.reduce||(Array.prototype.reduce=function(n){if(null==this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof n)throw new TypeError(n+" is not a function");var o,e=Object(this),r=e.length>>>0,i=0;if(2==arguments.length)o=arguments[1];else{for(;r>i&&!(i in e);)i++;if(i>=r)throw new TypeError("Reduce of empty array with no initial value");o=e[i++]}for(;r>i;i++)i in e&&(o=n(o,e[i],i,e));return o});var W={WINDOWS:{and:[{or:[/\bWindows|(Win\d\d)\b/,/\bWin 9x\b/]},{not:/\bWindows Phone\b/}]},MAC:{and:[/\bMac OS\b/,{not:/Windows Phone/}]},IOS:{and:[{or:[/\biPad\b/,/\biPhone\b/,/\biPod\b/]},{not:/Windows Phone/}]},ANDROID:{and:[/\bAndroid\b/,{not:/Windows Phone/}]},LINUX:/\bLinux\b/,UNIX:/\bUNIX\b/,FIREFOX_OS:{and:[/\bFirefox\b/,/Mobile\b/]},CHROME_OS:/\bCrOS\b/,WINDOWS_PHONE:{or:[/\bIEMobile\b/,/\bWindows Phone\b/]},PS4:/\bMozilla\/5.0 \(PlayStation 4\b/,VITA:/\bMozilla\/5.0 \(Play(S|s)tation Vita\b/},t={CHROME:{and:[{or:[/\bChrome\b/,/\bCriOS\b/]},{not:{or:[/\bOPR\b/,/\bEdge\b/]}}]},FIREFOX:/\bFirefox\b/,SAFARI:{and:[/^((?!CriOS).)*\Safari\b.*$/,{not:{or:[/\bOPR\b/,/\bEdge\b/,/Windows Phone/]}}]},OPERA:{or:[/Opera\b/,/\bOPR\b/]},IE:{or:[/\bMSIE\b/,/\bTrident\b/,/^Mozilla\/5\.0 \(Windows NT 10\.0; Win64; x64\)$/]},MS_EDGE:{or:[/\bEdge\b/]},PS4:/\bMozilla\/5.0 \(PlayStation 4\b/,VITA:/\bMozilla\/5.0 \(Play(S|s)tation Vita\b/,FB_MESSANGER:/\bFBAN\/MessengerForiOS\b/},N={ANDROID:{and:[/\bAndroid\b/,{not:/Windows Phone/}]},I_PAD:/\biPad\b/,IPHONE:{and:[/\biPhone\b/,{not:/Windows Phone/}]},I_POD:/\biPod\b/,BLACKBERRY:/\bblackberry\b/,FIREFOX_OS:{and:[/\bFirefox\b/,/\bMobile\b/]},CHROME_BOOK:/\bCrOS\b/,WINDOWS_PHONE:{or:[/\bIEMobile\b/,/\bWindows Phone\b/]},PS4:/\bMozilla\/5.0 \(PlayStation 4\b/,CHROMECAST:/\bCrKey\b/,APPLE_TV:/^iTunes-AppleTV\/4.1$/,GOOGLE_TV:/\bGoogleTV\b/,VITA:/\bMozilla\/5.0 \(Play(S|s)tation Vita\b/},s={WINDOWS_3_11:/Win16/,WINDOWS_95:/(Windows 95|Win95|Windows_95)/,WINDOWS_ME:/(Win 9x 4.90|Windows ME)/,WINDOWS_98:/(Windows 98|Win98)/,WINDOWS_CE:/Windows CE/,WINDOWS_2000:/(Windows NT 5.0|Windows 2000)/,WINDOWS_XP:/(Windows NT 5.1|Windows XP)/,WINDOWS_SERVER_2003:/Windows NT 5.2/,WINDOWS_VISTA:/Windows NT 6.0/,WINDOWS_7:/(Windows 7|Windows NT 6.1)/,WINDOWS_8_1:/(Windows 8.1|Windows NT 6.3)/,WINDOWS_8:/(Windows 8|Windows NT 6.2)/,WINDOWS_10:/(Windows NT 10.0)/,WINDOWS_PHONE_7_5:/(Windows Phone OS 7.5)/,WINDOWS_PHONE_8_1:/(Windows Phone 8.1)/,WINDOWS_PHONE_10:/(Windows Phone 10)/,WINDOWS_NT_4_0:{and:[/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/,{not:/Windows NT 10.0/}]}},b={CHROME:[/\bChrome\/([\d\.]+)\b/,/\bCriOS\/([\d\.]+)\b/],FIREFOX:/\bFirefox\/([\d\.]+)\b/,SAFARI:/\bVersion\/([\d\.]+)\b/,OPERA:[/\bVersion\/([\d\.]+)\b/,/\bOPR\/([\d\.]+)\b/],IE:[/\bMSIE ([\d\.]+\w?)\b/,/\brv:([\d\.]+\w?)\b/],MS_EDGE:/\bEdge\/([\d\.]+)\b/},S=Object.keys(b).reduce(function(n,o){return n[e[o]]=b[o],n},{}),d=n.navigator.userAgent,I={raw:{userAgent:d,os:{},browser:{},device:{}}};if(I.raw.os=Object.keys(r).reduce(function(n,o){return n[r[o]]=O.test(d,W[o]),n},{}),I.raw.browser=Object.keys(e).reduce(function(n,o){return n[e[o]]=O.test(d,t[o]),n},{}),I.raw.device=Object.keys(o).reduce(function(n,e){return n[o[e]]=O.test(d,N[e]),n},{}),I.raw.os_version=Object.keys(i).reduce(function(n,o){return n[i[o]]=O.test(d,s[o]),n},{}),I.os=[r.WINDOWS,r.IOS,r.MAC,r.ANDROID,r.LINUX,r.UNIX,r.FIREFOX_OS,r.CHROME_OS,r.WINDOWS_PHONE].reduce(function(n,o){return n===r.UNKNOWN&&I.raw.os[o]?o:n},r.UNKNOWN),I.browser=[e.CHROME,e.FIREFOX,e.SAFARI,e.OPERA,e.IE,e.MS_EDGE,e.FB_MESSANGER].reduce(function(n,o){return n===e.UNKNOWN&&I.raw.browser[o]?o:n},e.UNKNOWN),I.device=[o.ANDROID,o.I_PAD,o.IPHONE,o.I_POD,o.BLACKBERRY,o.FIREFOX_OS,o.CHROME_BOOK,o.WINDOWS_PHONE,o.PS4,o.CHROMECAST,o.APPLE_TV,o.GOOGLE_TV,o.VITA].reduce(function(n,e){return n===o.UNKNOWN&&I.raw.device[e]?e:n},o.UNKNOWN),I.os_version=[i.WINDOWS_3_11,i.WINDOWS_95,i.WINDOWS_ME,i.WINDOWS_98,i.WINDOWS_CE,i.WINDOWS_2000,i.WINDOWS_XP,i.WINDOWS_SERVER_2003,i.WINDOWS_VISTA,i.WINDOWS_7,i.WINDOWS_8_1,i.WINDOWS_8,i.WINDOWS_10,i.WINDOWS_PHONE_7_5,i.WINDOWS_PHONE_8_1,i.WINDOWS_PHONE_10,i.WINDOWS_NT_4_0].reduce(function(n,o){return n===i.UNKNOWN&&I.raw.os_version[o]?o:n},i.UNKNOWN),I.browser_version="0",I.browser!==e.UNKNOWN){var _=S[I.browser],E=O.exec(d,_);E&&(I.browser_version=E[1])}return I.isMobile=function(){return[o.ANDROID,o.I_PAD,o.IPHONE,o.I_POD,o.BLACKBERRY,o.FIREFOX_OS,o.WINDOWS_PHONE,o.VITA].some(function(n){return I.device==n})},I.isTablet=function(){return[o.I_PAD,o.FIREFOX_OS].some(function(n){return I.device==n})},I.isDesktop=function(){return[o.PS4,o.CHROME_BOOK,o.UNKNOWN].some(function(n){return I.device==n})},I}]).directive("deviceDetector",["deviceDetector",function(n){return{restrict:"A",link:function(o,e){e.addClass("os-"+n.os),e.addClass("browser-"+n.browser),e.addClass("device-"+n.device)}}}])}(angular); |
{ | ||
"name": "ng-device-detector", | ||
"version": "1.1.7", | ||
"version": "3.0.1", | ||
"devDependencies": { | ||
"angular": "*", | ||
"angular-mocks": "*", | ||
"gulp": "*", | ||
"gulp-bump": "^0.3.0", | ||
"gulp-concat": "*", | ||
"gulp-filter": "^2.0.2", | ||
"gulp-git": "^1.2.3", | ||
"gulp-karma": "*", | ||
"gulp-tag-version": "^1.2.1", | ||
"gulp-uglify": "*", | ||
"karma": "*", | ||
"karma-jasmine": "*", | ||
"karma-nested-reporter": "*", | ||
"karma-phantomjs-launcher": "*", | ||
"uglify-js": "*" | ||
"angular": "~1.3.16", | ||
"angular-mocks": "~1.3.16", | ||
"gulp": "~3.9.0", | ||
"gulp-bump": "~0.3.0", | ||
"gulp-concat": "~2.5.2", | ||
"gulp-filter": "~2.0.2", | ||
"gulp-git": "~1.2.3", | ||
"gulp-karma": "~0.0.4", | ||
"gulp-tag-version": "~1.2.1", | ||
"gulp-uglify": "~1.2.0", | ||
"karma": "~0.12.36", | ||
"karma-jasmine": "~0.3.5", | ||
"karma-nested-reporter": "~0.1.3", | ||
"karma-phantomjs-launcher": "~0.2.0", | ||
"uglify-js": "~2.4.23", | ||
"phantomjs": "~1.9.8" | ||
}, | ||
@@ -25,3 +26,3 @@ "scripts": { | ||
"description": "Uses user-agent to set css classes or directly usable via JS.", | ||
"main": "ng-device-detector.js", | ||
"main": "index.js", | ||
"repository": { | ||
@@ -41,4 +42,4 @@ "type": "git", | ||
"dependencies": { | ||
"re-tree": "^0.0.2" | ||
"re-tree": "~0.0.2" | ||
} | ||
} |
@@ -106,2 +106,28 @@ describe("detectUtils", function () { | ||
}); | ||
describe("with windows phone user-agent", function () { | ||
function describeUserAgent(userAgent, os, browser, device) { | ||
describe(userAgent, function () { | ||
beforeEach(function () { | ||
loadDetector(userAgent); | ||
}); | ||
it("should return false for iOS", function () { | ||
expect(util.isIOS()).toBeFalsy(); | ||
}); | ||
it("should return true for isMobile ", function () { | ||
expect(util.isMobile()).toBeTruthy(); | ||
}); | ||
it("should return false for isAndroid ", function () { | ||
expect(util.isAndroid()).toBeFalsy(); | ||
}); | ||
}); | ||
} | ||
// Windows phone | ||
describeUserAgent("Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 930) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537", | ||
"windows-phone", "ie", "windows-phone"); | ||
}); | ||
}); |
@@ -107,3 +107,3 @@ describe("ng-device-detector", function () { | ||
describeUserAgent("Mozilla/5.0 (iPad; CPU OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) CriOS/38.0.2125.59 Mobile/12A405 Safari/600.1.4 (000767)", | ||
"ios", "unknown", "chrome", "0", "ipad", true, true, false); | ||
"ios", "unknown", "chrome", "38.0.2125.59", "ipad", true, true, false); | ||
@@ -116,5 +116,5 @@ // Issue #14 | ||
describeUserAgent("Mozilla/5.0 (PlayStation 4 1.52) AppleWebKit/536.26 (KHTML, like Gecko)", | ||
"ps4", "unknown", "ps4", "0", "ps4", false, false, true); | ||
"unknown", "unknown", "unknown", "0", "ps4", false, false, true); | ||
describeUserAgent("Mozilla/5.0 (Playstation Vita 1.61) AppleWebKit/531.22.8 (KHTML, like Gecko) Silk/3.2", | ||
"vita", "unknown", "vita", "0", "vita", true, false, false); | ||
"unknown", "unknown", "unknown", "0", "vita", true, false, false); | ||
@@ -202,4 +202,44 @@ // Issue #18 | ||
describeUserAgent("Mozilla/5.0 (X11; CrOS x86_64 4731.85.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36", | ||
"chrome-os", "unknown", "chrome", "31.0.1650.63", "chrome-book", true, true, false); | ||
"chrome-os", "unknown", "chrome", "31.0.1650.63", "chrome-book", false, false, true); | ||
// Issue 32 | ||
describeUserAgent("Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 930) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537", | ||
"windows-phone", "windows-phone-8-1", "ie", "11.0", "windows-phone", true, false, false); | ||
// Issue 42 | ||
describeUserAgent("Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/47.0.2526.107 Mobile/13C75 Safari/601.1.46", | ||
"ios", "unknown", "chrome", "47.0.2526.107", "iphone", true, false, false); | ||
// Issue 43 | ||
describe("ES5 support", function () { | ||
beforeEach(function () { | ||
Object.keys = undefined; | ||
Array.prototype.reduce = undefined; | ||
}); | ||
it("should load", function () { | ||
loadDetector(""); | ||
expect(deviceDetector).not.toBeNull(); | ||
}); | ||
}); | ||
// Issue 39 | ||
describeUserAgent("Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13B143 [FBAN/MessengerForiOS;FBAV/48.0.0.20.47;FBBV/17291106;FBDV/iPad2,5;FBMD/iPad;FBSN/iPhone OS;FBSV/9.1;FBSS/1; FBCR/;FBID/tablet;FBLC/cs_CZ;FBOP/1]", | ||
"ios", "unknown", "fb-messanger", "0", "ipad", true, true, false); | ||
// Issue 40 | ||
describeUserAgent("Mozilla/5.0 (CrKey armv7l 1.4.15250) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.0 Safari/537.36", | ||
"unknown", "unknown", "chrome", "31.0.1650.0", "chromecast", false, false, false); | ||
describeUserAgent("iTunes-AppleTV/4.1", | ||
"unknown", "unknown", "unknown", "0", "apple-tv", false, false, false); | ||
describeUserAgent("Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.127 Large Screen Safari/533.4 GoogleTV/ 162671", | ||
"linux", "unknown", "chrome", "5.0.375.127", "google-tv", false, false, false); | ||
// Issue 44 | ||
describeUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64)", | ||
"windows", "windows-10", "ie", "0", "unknown", false, false, true); | ||
}); | ||
}); |
Sorry, the diff of this file is not supported yet
67632
25
1012
16
Updatedre-tree@~0.0.2