Skip to content

Commit a9298f3

Browse files
committed
Merge pull request #2 from dmxfee/master
Updated factory to latest bowser code which supports edge detection.
2 parents d8b6a3f + ceec343 commit a9298f3

File tree

1 file changed

+64
-11
lines changed

1 file changed

+64
-11
lines changed

src/angular-bowser.js

Lines changed: 64 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,16 @@ angular.module('jlareau.bowser', [])
1111
return (match && match.length > 1 && match[1]) || '';
1212
}
1313

14+
function getSecondMatch(regex) {
15+
var match = ua.match(regex);
16+
return (match && match.length > 1 && match[2]) || '';
17+
}
18+
1419
var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()
1520
, likeAndroid = /like android/i.test(ua)
1621
, android = !likeAndroid && /android/i.test(ua)
22+
, chromeBook = /CrOS/.test(ua)
23+
, edgeVersion = getFirstMatch(/edge\/(\d+(\.\d+)?)/i)
1724
, versionIdentifier = getFirstMatch(/version\/(\d+(\.\d+)?)/i)
1825
, tablet = /tablet/i.test(ua)
1926
, mobile = !tablet && /[^-]mobi/i.test(ua)
@@ -26,12 +33,25 @@ angular.module('jlareau.bowser', [])
2633
, version: versionIdentifier || getFirstMatch(/(?:opera|opr)[\s\/](\d+(\.\d+)?)/i)
2734
}
2835
}
36+
else if (/yabrowser/i.test(ua)) {
37+
result = {
38+
name: 'Yandex Browser'
39+
, yandexbrowser: t
40+
, version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)
41+
}
42+
}
2943
else if (/windows phone/i.test(ua)) {
3044
result = {
3145
name: 'Windows Phone'
3246
, windowsphone: t
33-
, msie: t
34-
, version: getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i)
47+
}
48+
if (edgeVersion) {
49+
result.msedge = t
50+
result.version = edgeVersion
51+
}
52+
else {
53+
result.msie = t
54+
result.version = getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i)
3555
}
3656
}
3757
else if (/msie|trident/i.test(ua)) {
@@ -40,6 +60,19 @@ angular.module('jlareau.bowser', [])
4060
, msie: t
4161
, version: getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i)
4262
}
63+
} else if (chromeBook) {
64+
result = {
65+
name: 'Chrome'
66+
, chromeBook: t
67+
, chrome: t
68+
, version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)
69+
}
70+
} else if (/chrome.+? edge/i.test(ua)) {
71+
result = {
72+
name: 'Microsoft Edge'
73+
, msedge: t
74+
, version: edgeVersion
75+
}
4376
}
4477
else if (/chrome|crios|crmo/i.test(ua)) {
4578
result = {
@@ -82,7 +115,7 @@ angular.module('jlareau.bowser', [])
82115
}
83116
}
84117
else if (/silk/i.test(ua)) {
85-
result = {
118+
result = {
86119
name: 'Amazon Silk'
87120
, silk: t
88121
, version : getFirstMatch(/silk\/(\d+(\.\d+)?)/i)
@@ -137,10 +170,15 @@ angular.module('jlareau.bowser', [])
137170
, version: versionIdentifier
138171
}
139172
}
140-
else result = {}
173+
else {
174+
result = {
175+
name: getFirstMatch(/^(.*)\/(.*) /),
176+
version: getSecondMatch(/^(.*)\/(.*) /)
177+
};
178+
}
141179

142180
// set webkit or gecko flag for browsers based on these engines
143-
if (/(apple)?webkit/i.test(ua)) {
181+
if (!result.msedge && /(apple)?webkit/i.test(ua)) {
144182
result.name = result.name || "Webkit"
145183
result.webkit = t
146184
if (!result.version && versionIdentifier) {
@@ -153,7 +191,7 @@ angular.module('jlareau.bowser', [])
153191
}
154192

155193
// set OS flags for platforms that have multiple browsers
156-
if (android || result.silk) {
194+
if (!result.msedge && (android || result.silk)) {
157195
result.android = t
158196
} else if (iosdevice) {
159197
result[iosdevice] = t
@@ -162,13 +200,13 @@ angular.module('jlareau.bowser', [])
162200

163201
// OS version extraction
164202
var osVersion = '';
165-
if (iosdevice) {
203+
if (result.windowsphone) {
204+
osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i);
205+
} else if (iosdevice) {
166206
osVersion = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i);
167207
osVersion = osVersion.replace(/[_\s]/g, '.');
168208
} else if (android) {
169209
osVersion = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i);
170-
} else if (result.windowsphone) {
171-
osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i);
172210
} else if (result.webos) {
173211
osVersion = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i);
174212
} else if (result.blackberry) {
@@ -192,12 +230,15 @@ angular.module('jlareau.bowser', [])
192230

193231
// Graded Browser Support
194232
// http://developer.yahoo.com/yui/articles/gbs
195-
if ((result.msie && result.version >= 10) ||
233+
if (result.msedge ||
234+
(result.msie && result.version >= 10) ||
235+
(result.yandexbrowser && result.version >= 15) ||
196236
(result.chrome && result.version >= 20) ||
197237
(result.firefox && result.version >= 20.0) ||
198238
(result.safari && result.version >= 6) ||
199239
(result.opera && result.version >= 10.0) ||
200-
(result.ios && result.osversion && result.osversion.split(".")[0] >= 6)
240+
(result.ios && result.osversion && result.osversion.split(".")[0] >= 6) ||
241+
(result.blackberry && result.version >= 10.1)
201242
) {
202243
result.a = t;
203244
}
@@ -216,6 +257,18 @@ angular.module('jlareau.bowser', [])
216257

217258
var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent : '')
218259

260+
bowser.test = function (browserList) {
261+
for (var i = 0; i < browserList.length; ++i) {
262+
var browserItem = browserList[i];
263+
if (typeof browserItem=== 'string') {
264+
if (browserItem in bowser) {
265+
return true;
266+
}
267+
}
268+
}
269+
return false;
270+
}
271+
219272

220273
/*
221274
* Set our detect method to the main bowser object so we can

0 commit comments

Comments
 (0)