ua-parser-js 0.7.7 → 0.7.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ua-parser-js might be problematic. Click here for more details.

package/src/ua-parser.js CHANGED
@@ -1,9 +1,9 @@
1
1
  /**
2
- * UAParser.js v0.7.7
2
+ * UAParser.js v0.7.12
3
3
  * Lightweight JavaScript-based User-Agent string parser
4
4
  * https://github.com/faisalman/ua-parser-js
5
5
  *
6
- * Copyright © 2012-2015 Faisal Salman <fyzlman@gmail.com>
6
+ * Copyright © 2012-2016 Faisal Salman <fyzlman@gmail.com>
7
7
  * Dual licensed under GPLv2 & MIT
8
8
  */
9
9
 
@@ -16,7 +16,7 @@
16
16
  /////////////
17
17
 
18
18
 
19
- var LIBVERSION = '0.7.7',
19
+ var LIBVERSION = '0.7.12',
20
20
  EMPTY = '',
21
21
  UNKNOWN = '?',
22
22
  FUNC_TYPE = 'function',
@@ -45,12 +45,15 @@
45
45
 
46
46
  var util = {
47
47
  extend : function (regexes, extensions) {
48
- for (var i in extensions) {
49
- if ("browser cpu device engine os".indexOf(i) !== -1 && extensions[i].length % 2 === 0) {
50
- regexes[i] = extensions[i].concat(regexes[i]);
48
+ var margedRegexes = {};
49
+ for (var i in regexes) {
50
+ if (extensions[i] && extensions[i].length % 2 === 0) {
51
+ margedRegexes[i] = extensions[i].concat(regexes[i]);
52
+ } else {
53
+ margedRegexes[i] = regexes[i];
51
54
  }
52
55
  }
53
- return regexes;
56
+ return margedRegexes;
54
57
  },
55
58
  has : function (str1, str2) {
56
59
  if (typeof str1 === "string") {
@@ -63,7 +66,10 @@
63
66
  return str.toLowerCase();
64
67
  },
65
68
  major : function (version) {
66
- return typeof(version) === STR_TYPE ? version.split(".")[0] : undefined;
69
+ return typeof(version) === STR_TYPE ? version.replace(/[^\d\.]/g,'').split(".")[0] : undefined;
70
+ },
71
+ trim : function (str) {
72
+ return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
67
73
  }
68
74
  };
69
75
 
@@ -89,11 +95,13 @@
89
95
  if (typeof result === UNDEF_TYPE) {
90
96
  result = {};
91
97
  for (p in props) {
92
- q = props[p];
93
- if (typeof q === OBJ_TYPE) {
94
- result[q[0]] = undefined;
95
- } else {
96
- result[q] = undefined;
98
+ if (props.hasOwnProperty(p)){
99
+ q = props[p];
100
+ if (typeof q === OBJ_TYPE) {
101
+ result[q[0]] = undefined;
102
+ } else {
103
+ result[q] = undefined;
104
+ }
97
105
  }
98
106
  }
99
107
  }
@@ -231,9 +239,11 @@
231
239
  /(opera\s[mobiletab]+).+version\/([\w\.-]+)/i, // Opera Mobi/Tablet
232
240
  /(opera).+version\/([\w\.]+)/i, // Opera > 9.80
233
241
  /(opera)[\/\s]+([\w\.]+)/i // Opera < 9.80
234
-
235
242
  ], [NAME, VERSION], [
236
243
 
244
+ /(opios)[\/\s]+([\w\.]+)/i // Opera mini on iphone >= 8.0
245
+ ], [[NAME, 'Opera Mini'], VERSION], [
246
+
237
247
  /\s(opr)\/([\w\.]+)/i // Opera Webkit
238
248
  ], [[NAME, 'Opera'], VERSION], [
239
249
 
@@ -249,41 +259,59 @@
249
259
 
250
260
  // Webkit/KHTML based
251
261
  /(rekonq)\/([\w\.]+)*/i, // Rekonq
252
- /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi)\/([\w\.-]+)/i
253
- // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron
262
+ /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs)\/([\w\.-]+)/i
263
+ // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS
254
264
  ], [NAME, VERSION], [
255
265
 
256
- /(trident).+rv[:\s]([\w\.]+).+like\sgecko/i, // IE11
257
- /(Edge)\/((\d+)?[\w\.]+)/i // IE12
266
+ /(trident).+rv[:\s]([\w\.]+).+like\sgecko/i // IE11
258
267
  ], [[NAME, 'IE'], VERSION], [
259
268
 
269
+ /(edge)\/((\d+)?[\w\.]+)/i // Microsoft Edge
270
+ ], [NAME, VERSION], [
271
+
260
272
  /(yabrowser)\/([\w\.]+)/i // Yandex
261
273
  ], [[NAME, 'Yandex'], VERSION], [
262
274
 
263
275
  /(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
264
276
  ], [[NAME, /_/g, ' '], VERSION], [
265
277
 
278
+ /(micromessenger)\/([\w\.]+)/i // WeChat
279
+ ], [[NAME, 'WeChat'], VERSION], [
280
+
281
+ /xiaomi\/miuibrowser\/([\w\.]+)/i // MIUI Browser
282
+ ], [VERSION, [NAME, 'MIUI Browser']], [
283
+
284
+ /\swv\).+(chrome)\/([\w\.]+)/i // Chrome WebView
285
+ ], [[NAME, /(.+)/, '$1 WebView'], VERSION], [
286
+
287
+ /android.+samsungbrowser\/([\w\.]+)/i,
288
+ /android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i // Android Browser
289
+ ], [VERSION, [NAME, 'Android Browser']], [
290
+
266
291
  /(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i,
267
292
  // Chrome/OmniWeb/Arora/Tizen/Nokia
268
- /(uc\s?browser|qqbrowser)[\/\s]?([\w\.]+)/i
269
- // UCBrowser/QQBrowser
293
+ /(qqbrowser)[\/\s]?([\w\.]+)/i
294
+ // QQBrowser
270
295
  ], [NAME, VERSION], [
271
296
 
297
+ /(uc\s?browser)[\/\s]?([\w\.]+)/i,
298
+ /ucweb.+(ucbrowser)[\/\s]?([\w\.]+)/i,
299
+ /juc.+(ucweb)[\/\s]?([\w\.]+)/i
300
+ // UCBrowser
301
+ ], [[NAME, 'UCBrowser'], VERSION], [
302
+
272
303
  /(dolfin)\/([\w\.]+)/i // Dolphin
273
304
  ], [[NAME, 'Dolphin'], VERSION], [
274
305
 
275
306
  /((?:android.+)crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS
276
307
  ], [[NAME, 'Chrome'], VERSION], [
277
308
 
278
- /XiaoMi\/MiuiBrowser\/([\w\.]+)/i // MIUI Browser
279
- ], [VERSION, [NAME, 'MIUI Browser']], [
280
-
281
- /android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)/i // Android Browser
282
- ], [VERSION, [NAME, 'Android Browser']], [
283
-
284
- /FBAV\/([\w\.]+);/i // Facebook App for iOS
309
+ /;fbav\/([\w\.]+);/i // Facebook App for iOS
285
310
  ], [VERSION, [NAME, 'Facebook']], [
286
311
 
312
+ /fxios\/([\w\.-]+)/i // Firefox for iOS
313
+ ], [VERSION, [NAME, 'Firefox']], [
314
+
287
315
  /version\/([\w\.]+).+?mobile\/\w+\s(safari)/i // Mobile Safari
288
316
  ], [VERSION, [NAME, 'Mobile Safari']], [
289
317
 
@@ -308,8 +336,8 @@
308
336
  /(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla
309
337
 
310
338
  // Other
311
- /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf)[\/\s]?([\w\.]+)/i,
312
- // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf
339
+ /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,
340
+ // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir
313
341
  /(links)\s\(([\w\.]+)/i, // Links
314
342
  /(gobrowser)\/?([\w\.]+)*/i, // GoBrowser
315
343
  /(ice\s?browser)\/v?([\w\._]+)/i, // ICE Browser
@@ -467,6 +495,7 @@
467
495
 
468
496
  /(archos)\s(gamepad2?)/i, // Archos
469
497
  /(hp).+(touchpad)/i, // HP TouchPad
498
+ /(hp).+(tablet)/i, // HP Tablet
470
499
  /(kindle)\/([\w\.]+)/i, // Kindle
471
500
  /\s(nook)[\w\s]+build\/(\w+)/i, // Nook
472
501
  /(dell)\s(strea[kpr\s\d]*[\dko])/i // Dell Streak
@@ -491,7 +520,7 @@
491
520
  /\(bb10;\s(\w+)/i // BlackBerry 10
492
521
  ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [
493
522
  // Asus Tablets
494
- /android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7)/i
523
+ /android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone)/i
495
524
  ], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [
496
525
 
497
526
  /(sony)\s(tablet\s[ps])\sbuild\//i, // Sony
@@ -507,7 +536,7 @@
507
536
  /android.+;\s(shield)\sbuild/i // Nvidia
508
537
  ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
509
538
 
510
- /(playstation\s[3portablevi]+)/i // Playstation
539
+ /(playstation\s[34portablevi]+)/i // Playstation
511
540
  ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [
512
541
 
513
542
  /(sprint\s(\w+))/i // Sprint Phones
@@ -521,10 +550,16 @@
521
550
  /(alcatel|geeksphone|huawei|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]+)*/i
522
551
  // Alcatel/GeeksPhone/Huawei/Lenovo/Nexian/Panasonic/Sony
523
552
  ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
524
-
553
+
525
554
  /(nexus\s9)/i // HTC Nexus 9
526
555
  ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [
527
556
 
557
+ /(nexus\s6p)/i // Huawei Nexus 6P
558
+ ], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [
559
+
560
+ /(microsoft);\s(lumia[\s\w]+)/i // Microsoft Lumia
561
+ ], [VENDOR, MODEL, [TYPE, MOBILE]], [
562
+
528
563
  /[\s\(;](xbox(?:\sone)?)[\s\);]/i // Microsoft Xbox
529
564
  ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [
530
565
  /(kin\.[onetw]{3})/i // Microsoft Kin
@@ -533,23 +568,31 @@
533
568
  // Motorola
534
569
  /\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?(:?\s4g)?)[\w\s]+build\//i,
535
570
  /mot[\s-]?(\w+)*/i,
536
- /(XT\d{3,4}) build\//i
571
+ /(XT\d{3,4}) build\//i,
572
+ /(nexus\s6)/i
537
573
  ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [
538
574
  /android.+\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i
539
575
  ], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [
540
576
 
541
- /android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n8000|sgh-t8[56]9|nexus 10))/i,
577
+ /hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i // HbbTV devices
578
+ ], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [
579
+
580
+ /hbbtv.+maple;(\d+)/i
581
+ ], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [
582
+
583
+ /\(dtv[\);].+(aquos)/i // Sharp
584
+ ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [
585
+
586
+ /android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus 10))/i,
542
587
  /((SM-T\w+))/i
543
588
  ], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [ // Samsung
544
- /((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-n900))/i,
589
+ /smart-tv.+(samsung)/i
590
+ ], [VENDOR, [TYPE, SMARTTV], MODEL], [
591
+ /((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i,
545
592
  /(sam[sung]*)[\s-]*(\w+-?[\w-]*)*/i,
546
593
  /sec-((sgh\w+))/i
547
594
  ], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [
548
- /(samsung);smarttv/i
549
- ], [VENDOR, MODEL, [TYPE, SMARTTV]], [
550
595
 
551
- /\(dtv[\);].+(aquos)/i // Sharp
552
- ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [
553
596
  /sie-(\w+)*/i // Siemens
554
597
  ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
555
598
 
@@ -580,12 +623,16 @@
580
623
  /android.+;\s(glass)\s\d/i // Google Glass
581
624
  ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [
582
625
 
583
- /android.+(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
584
- /android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i, // Xiaomi Hongmi
585
- /android.+(mi[\s\-_]*(?:one|one[\s_]plus)?[\s_]*(?:\d\w)?)\s+build/i // Xiaomi Mi
626
+ /android.+(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
627
+ /android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i, // Xiaomi Hongmi
628
+ /android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d\w)?)\s+build/i // Xiaomi Mi
586
629
  ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [
587
630
 
588
- /(mobile|tablet);.+rv\:.+gecko\//i // Unidentifiable
631
+ /android.+a000(1)\s+build/i // OnePlus
632
+ ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
633
+
634
+ /\s(tablet)[;\/]/i, // Unidentifiable Tablet
635
+ /\s(mobile)(?:[;\/]|\ssafari)/i // Unidentifiable Mobile
589
636
  ], [[TYPE, util.lowerize], VENDOR, MODEL]
590
637
 
591
638
  /*//////////////////////////
@@ -641,7 +688,7 @@
641
688
  ], [VENDOR, MODEL, [TYPE, MOBILE]], [
642
689
  /(i-STYLE2.1)/i // i-mobile i-STYLE 2.1
643
690
  ], [[MODEL, 'i-STYLE 2.1'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [
644
-
691
+
645
692
  /(mobiistar touch LAI 512)/i // mobiistar touch LAI 512
646
693
  ], [[MODEL, 'Touch LAI 512'], [VENDOR, 'mobiistar'], [TYPE, MOBILE]], [
647
694
 
@@ -653,6 +700,9 @@
653
700
 
654
701
  engine : [[
655
702
 
703
+ /windows.+\sedge\/([\w\.]+)/i // EdgeHTML
704
+ ], [VERSION, [NAME, 'EdgeHTML']], [
705
+
656
706
  /(presto)\/([\w\.]+)/i, // Presto
657
707
  /(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m
658
708
  /(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, // KHTML/Tasman/Links
@@ -669,7 +719,8 @@
669
719
  /microsoft\s(windows)\s(vista|xp)/i // Windows (iTunes)
670
720
  ], [NAME, VERSION], [
671
721
  /(windows)\snt\s6\.2;\s(arm)/i, // Windows RT
672
- /(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i
722
+ /(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s]+\w)*/i, // Windows Phone
723
+ /(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i
673
724
  ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [
674
725
  /(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i
675
726
  ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [
@@ -679,7 +730,7 @@
679
730
  ], [[NAME, 'BlackBerry'], VERSION], [
680
731
  /(blackberry)\w*\/?([\w\.]+)*/i, // Blackberry
681
732
  /(tizen)[\/\s]([\w\.]+)/i, // Tizen
682
- /(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i,
733
+ /(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i,
683
734
  // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki
684
735
  /linux;.+(sailfish);/i // Sailfish OS
685
736
  ], [NAME, VERSION], [
@@ -691,12 +742,12 @@
691
742
  ], [[NAME, 'Firefox OS'], VERSION], [
692
743
 
693
744
  // Console
694
- /(nintendo|playstation)\s([wids3portablevu]+)/i, // Nintendo/Playstation
745
+ /(nintendo|playstation)\s([wids34portablevu]+)/i, // Nintendo/Playstation
695
746
 
696
747
  // GNU/Linux based
697
748
  /(mint)[\/\s\(]?(\w+)*/i, // Mint
698
749
  /(mageia|vectorlinux)[;\s]/i, // Mageia/VectorLinux
699
- /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?([\w\.-]+)*/i,
750
+ /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?(?!chrom)([\w\.-]+)*/i,
700
751
  // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware
701
752
  // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus
702
753
  /(hurd|linux)\s?([\w\.]+)*/i, // Hurd/Linux
@@ -714,7 +765,10 @@
714
765
  /\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
715
766
  ], [NAME, VERSION],[
716
767
 
717
- /(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i // iOS
768
+ /(haiku)\s(\w+)/i // Haiku
769
+ ], [NAME, VERSION],[
770
+
771
+ /(ip[honead]+)(?:.*os\s([\w]+)*\slike\smac|;\sopera)/i // iOS
718
772
  ], [[NAME, 'iOS'], [VERSION, /_/g, '.']], [
719
773
 
720
774
  /(mac\sos\sx)\s?([\w\s\.]+\w)*/i,
@@ -723,7 +777,6 @@
723
777
 
724
778
  // Other
725
779
  /((?:open)?solaris)[\/\s-]?([\w\.]+)*/i, // Solaris
726
- /(haiku)\s(\w+)/i, // Haiku
727
780
  /(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i, // AIX
728
781
  /(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,
729
782
  // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS
@@ -781,7 +834,6 @@
781
834
  ua = uastring;
782
835
  return this;
783
836
  };
784
- this.setUA(ua);
785
837
  return this;
786
838
  };
787
839
 
@@ -840,7 +892,7 @@
840
892
  }
841
893
 
842
894
  // jQuery/Zepto specific (optional)
843
- // Note:
895
+ // Note:
844
896
  // In AMD env the global scope should be kept clean, but jQuery is an exception.
845
897
  // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,
846
898
  // and we should catch that.
@@ -860,4 +912,4 @@
860
912
  };
861
913
  }
862
914
 
863
- })(this);
915
+ })(typeof window === 'object' ? window : this);