ua-parser-js 0.7.15 → 0.7.19

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,10 +1,10 @@
1
- /**
2
- * UAParser.js v0.7.15
1
+ /*!
2
+ * UAParser.js v0.7.19
3
3
  * Lightweight JavaScript-based User-Agent string parser
4
4
  * https://github.com/faisalman/ua-parser-js
5
5
  *
6
6
  * Copyright © 2012-2016 Faisal Salman <fyzlman@gmail.com>
7
- * Dual licensed under GPLv2 & MIT
7
+ * Dual licensed under GPLv2 or MIT
8
8
  */
9
9
 
10
10
  (function (window, undefined) {
@@ -16,7 +16,7 @@
16
16
  /////////////
17
17
 
18
18
 
19
- var LIBVERSION = '0.7.15',
19
+ var LIBVERSION = '0.7.19',
20
20
  EMPTY = '',
21
21
  UNKNOWN = '?',
22
22
  FUNC_TYPE = 'function',
@@ -138,7 +138,7 @@
138
138
  }
139
139
  i += 2;
140
140
  }
141
- //console.log(this);
141
+ // console.log(this);
142
142
  //return this;
143
143
  },
144
144
 
@@ -244,7 +244,7 @@
244
244
 
245
245
  // Mixed
246
246
  /(kindle)\/([\w\.]+)/i, // Kindle
247
- /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i,
247
+ /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]*)/i,
248
248
  // Lunascape/Maxthon/Netfront/Jasmine/Blazer
249
249
 
250
250
  // Trident based
@@ -253,16 +253,16 @@
253
253
  /(?:ms|\()(ie)\s([\w\.]+)/i, // Internet Explorer
254
254
 
255
255
  // Webkit/KHTML based
256
- /(rekonq)\/([\w\.]+)*/i, // Rekonq
257
- /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser)\/([\w\.-]+)/i
256
+ /(rekonq)\/([\w\.]*)/i, // Rekonq
257
+ /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark)\/([\w\.-]+)/i
258
258
  // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser
259
259
  ], [NAME, VERSION], [
260
260
 
261
261
  /(trident).+rv[:\s]([\w\.]+).+like\sgecko/i // IE11
262
262
  ], [[NAME, 'IE'], VERSION], [
263
263
 
264
- /(edge)\/((\d+)?[\w\.]+)/i // Microsoft Edge
265
- ], [NAME, VERSION], [
264
+ /(edge|edgios|edga)\/((\d+)?[\w\.]+)/i // Microsoft Edge
265
+ ], [[NAME, 'Edge'], VERSION], [
266
266
 
267
267
  /(yabrowser)\/([\w\.]+)/i // Yandex
268
268
  ], [[NAME, 'Yandex'], VERSION], [
@@ -270,8 +270,13 @@
270
270
  /(puffin)\/([\w\.]+)/i // Puffin
271
271
  ], [[NAME, 'Puffin'], VERSION], [
272
272
 
273
- /((?:[\s\/])uc?\s?browser|(?:juc.+)ucweb)[\/\s]?([\w\.]+)/i
274
- // UCBrowser
273
+ /(focus)\/([\w\.]+)/i // Firefox Focus
274
+ ], [[NAME, 'Firefox Focus'], VERSION], [
275
+
276
+ /(opt)\/([\w\.]+)/i // Opera Touch
277
+ ], [[NAME, 'Opera Touch'], VERSION], [
278
+
279
+ /((?:[\s\/])uc?\s?browser|(?:juc.+)ucweb)[\/\s]?([\w\.]+)/i // UCBrowser
275
280
  ], [[NAME, 'UCBrowser'], VERSION], [
276
281
 
277
282
  /(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
@@ -280,19 +285,41 @@
280
285
  /(micromessenger)\/([\w\.]+)/i // WeChat
281
286
  ], [[NAME, 'WeChat'], VERSION], [
282
287
 
288
+ /(brave)\/([\w\.]+)/i // Brave browser
289
+ ], [[NAME, 'Brave'], VERSION], [
290
+
291
+ /(qqbrowserlite)\/([\w\.]+)/i // QQBrowserLite
292
+ ], [NAME, VERSION], [
293
+
283
294
  /(QQ)\/([\d\.]+)/i // QQ, aka ShouQ
284
295
  ], [NAME, VERSION], [
285
296
 
286
297
  /m?(qqbrowser)[\/\s]?([\w\.]+)/i // QQBrowser
287
298
  ], [NAME, VERSION], [
288
299
 
300
+ /(BIDUBrowser)[\/\s]?([\w\.]+)/i // Baidu Browser
301
+ ], [NAME, VERSION], [
302
+
303
+ /(2345Explorer)[\/\s]?([\w\.]+)/i // 2345 Browser
304
+ ], [NAME, VERSION], [
305
+
306
+ /(MetaSr)[\/\s]?([\w\.]+)/i // SouGouBrowser
307
+ ], [NAME], [
308
+
309
+ /(LBBROWSER)/i // LieBao Browser
310
+ ], [NAME], [
311
+
289
312
  /xiaomi\/miuibrowser\/([\w\.]+)/i // MIUI Browser
290
313
  ], [VERSION, [NAME, 'MIUI Browser']], [
291
314
 
292
315
  /;fbav\/([\w\.]+);/i // Facebook App for iOS & Android
293
316
  ], [VERSION, [NAME, 'Facebook']], [
294
317
 
295
- /(headlesschrome) ([\w\.]+)/i // Chrome Headless
318
+ /safari\s(line)\/([\w\.]+)/i, // Line App for iOS
319
+ /android.+(line)\/([\w\.]+)\/iab/i // Line App for Android
320
+ ], [NAME, VERSION], [
321
+
322
+ /headlesschrome(?:\/([\w\.]+)|\s)/i // Chrome Headless
296
323
  ], [VERSION, [NAME, 'Chrome Headless']], [
297
324
 
298
325
  /\swv\).+(chrome)\/([\w\.]+)/i // Chrome WebView
@@ -326,6 +353,9 @@
326
353
  /version\/([\w\.]+).+?(mobile\s?safari|safari)/i // Safari & Safari Mobile
327
354
  ], [VERSION, NAME], [
328
355
 
356
+ /webkit.+?(gsa)\/([\w\.]+).+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Google Search Appliance on iOS
357
+ ], [[NAME, 'GSA'], VERSION], [
358
+
329
359
  /webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
330
360
  ], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [
331
361
 
@@ -339,7 +369,8 @@
339
369
  /(swiftfox)/i, // Swiftfox
340
370
  /(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,
341
371
  // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
342
- /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)/i,
372
+ /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([\w\.-]+)$/i,
373
+
343
374
  // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
344
375
  /(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla
345
376
 
@@ -347,7 +378,7 @@
347
378
  /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,
348
379
  // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir
349
380
  /(links)\s\(([\w\.]+)/i, // Links
350
- /(gobrowser)\/?([\w\.]+)*/i, // GoBrowser
381
+ /(gobrowser)\/?([\w\.]*)/i, // GoBrowser
351
382
  /(ice\s?browser)\/v?([\w\._]+)/i, // ICE Browser
352
383
  /(mosaic)[\/\s]([\w\.]+)/i // Mosaic
353
384
  ], [NAME, VERSION]
@@ -485,7 +516,7 @@
485
516
  /(sun4\w)[;\)]/i // SPARC
486
517
  ], [[ARCHITECTURE, 'sparc']], [
487
518
 
488
- /((?:avr32|ia64(?=;))|68k(?=\))|arm(?:64|(?=v\d+;))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i
519
+ /((?:avr32|ia64(?=;))|68k(?=\))|arm(?:64|(?=v\d+[;l]))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i
489
520
  // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
490
521
  ], [[ARCHITECTURE, util.lowerize]]
491
522
  ],
@@ -509,10 +540,12 @@
509
540
  /(dell)\s(strea[kpr\s\d]*[\dko])/i // Dell Streak
510
541
  ], [VENDOR, MODEL, [TYPE, TABLET]], [
511
542
 
512
- /(kf[A-z]+)\sbuild\/[\w\.]+.*silk\//i // Kindle Fire HD
543
+ /(kf[A-z]+)\sbuild\/.+silk\//i // Kindle Fire HD
513
544
  ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
514
- /(sd|kf)[0349hijorstuw]+\sbuild\/[\w\.]+.*silk\//i // Fire Phone
545
+ /(sd|kf)[0349hijorstuw]+\sbuild\/.+silk\//i // Fire Phone
515
546
  ], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [
547
+ /android.+aft([bms])\sbuild/i // Fire TV
548
+ ], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [
516
549
 
517
550
  /\((ip[honed|\s\w*]+);.+(apple)/i // iPod/iPhone
518
551
  ], [MODEL, VENDOR, [TYPE, MOBILE]], [
@@ -520,7 +553,7 @@
520
553
  ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [
521
554
 
522
555
  /(blackberry)[\s-]?(\w+)/i, // BlackBerry
523
- /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]+)*/i,
556
+ /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]*)/i,
524
557
  // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
525
558
  /(hp)\s([\w\s]+\w)/i, // HP iPAQ
526
559
  /(asus)-?(\w+)/i // Asus
@@ -554,8 +587,8 @@
554
587
  ], [VENDOR, MODEL, [TYPE, TABLET]], [
555
588
 
556
589
  /(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i, // HTC
557
- /(zte)-(\w+)*/i, // ZTE
558
- /(alcatel|geeksphone|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]+)*/i
590
+ /(zte)-(\w*)/i, // ZTE
591
+ /(alcatel|geeksphone|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i
559
592
  // Alcatel/GeeksPhone/Lenovo/Nexian/Panasonic/Sony
560
593
  ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
561
594
 
@@ -575,8 +608,8 @@
575
608
  ], [[MODEL, /\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [
576
609
 
577
610
  // Motorola
578
- /\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?(:?\s4g)?)[\w\s]+build\//i,
579
- /mot[\s-]?(\w+)*/i,
611
+ /\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)[\w\s]+build\//i,
612
+ /mot[\s-]?(\w*)/i,
580
613
  /(XT\d{3,4}) build\//i,
581
614
  /(nexus\s6)/i
582
615
  ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [
@@ -598,15 +631,15 @@
598
631
  /smart-tv.+(samsung)/i
599
632
  ], [VENDOR, [TYPE, SMARTTV], MODEL], [
600
633
  /((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i,
601
- /(sam[sung]*)[\s-]*(\w+-?[\w-]*)*/i,
634
+ /(sam[sung]*)[\s-]*(\w+-?[\w-]*)/i,
602
635
  /sec-((sgh\w+))/i
603
636
  ], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [
604
637
 
605
- /sie-(\w+)*/i // Siemens
638
+ /sie-(\w*)/i // Siemens
606
639
  ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
607
640
 
608
641
  /(maemo|nokia).*(n900|lumia\s\d+)/i, // Nokia
609
- /(nokia)[\s_-]?([\w-]+)*/i
642
+ /(nokia)[\s_-]?([\w-]*)/i
610
643
  ], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [
611
644
 
612
645
  /android\s3\.[\s\w;-]{10}(a\d{3})/i // Acer
@@ -619,7 +652,7 @@
619
652
  /(lg) netcast\.tv/i // LG SmartTV
620
653
  ], [VENDOR, MODEL, [TYPE, SMARTTV]], [
621
654
  /(nexus\s[45])/i, // LG
622
- /lg[e;\s\/-]+(\w+)*/i,
655
+ /lg[e;\s\/-]+(\w*)/i,
623
656
  /android.+lg(\-?[\d\w]+)\s+build/i
624
657
  ], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [
625
658
 
@@ -641,27 +674,32 @@
641
674
  /android.+;\s(glass)\s\d/i // Google Glass
642
675
  ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [
643
676
 
644
- /android.+;\s(pixel c)\s/i // Google Pixel C
677
+ /android.+;\s(pixel c)[\s)]/i // Google Pixel C
645
678
  ], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [
646
679
 
647
- /android.+;\s(pixel xl|pixel)\s/i // Google Pixel
680
+ /android.+;\s(pixel( [23])?( xl)?)\s/i // Google Pixel
648
681
  ], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [
649
682
 
650
- /android.+(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
683
+ /android.+;\s(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
651
684
  /android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i, // Xiaomi Hongmi
652
- /android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d\w)?)\s+build/i // Xiaomi Mi
685
+ /android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d?\w?)[\s_]*(?:plus)?)\s+build/i, // Xiaomi Mi
686
+ /android.+(redmi[\s\-_]*(?:note)?(?:[\s_]*[\w\s]+))\s+build/i // Redmi Phones
653
687
  ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [
654
-
688
+ /android.+(mi[\s\-_]*(?:pad)(?:[\s_]*[\w\s]+))\s+build/i // Mi Pad tablets
689
+ ],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [
655
690
  /android.+;\s(m[1-5]\snote)\sbuild/i // Meizu Tablet
656
691
  ], [MODEL, [VENDOR, 'Meizu'], [TYPE, TABLET]], [
692
+ /(mz)-([\w-]{2,})/i // Meizu Phone
693
+ ], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [
657
694
 
658
- /android.+a000(1)\s+build/i // OnePlus
695
+ /android.+a000(1)\s+build/i, // OnePlus
696
+ /android.+oneplus\s(a\d{4})\s+build/i
659
697
  ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
660
698
 
661
699
  /android.+[;\/]\s*(RCT[\d\w]+)\s+build/i // RCA Tablets
662
700
  ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [
663
701
 
664
- /android.+[;\/]\s*(Venue[\d\s]*)\s+build/i // Dell Venue Tablets
702
+ /android.+[;\/\s]+(Venue[\d\s]{2,7})\s+build/i // Dell Venue Tablets
665
703
  ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [
666
704
 
667
705
  /android.+[;\/]\s*(Q[T|M][\d\w]+)\s+build/i // Verizon Tablet
@@ -673,8 +711,8 @@
673
711
  /android.+[;\/]\s+(TM\d{3}.*\b)\s+build/i // Barnes & Noble Tablet
674
712
  ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [
675
713
 
676
- /android.+[;\/]\s*(zte)?.+(k\d{2})\s+build/i // ZTE K Series Tablet
677
- ], [[VENDOR, 'ZTE'], MODEL, [TYPE, TABLET]], [
714
+ /android.+;\s(k88)\sbuild/i // ZTE K Series Tablet
715
+ ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [
678
716
 
679
717
  /android.+[;\/]\s*(gen\d{3})\s+build.*49h/i // Swiss GEN Mobile
680
718
  ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [
@@ -685,26 +723,29 @@
685
723
  /android.+[;\/]\s*((Zeki)?TB.*\b)\s+build/i // Zeki Tablets
686
724
  ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
687
725
 
688
- /(android).+[;\/]\s+([YR]\d{2}x?.*)\s+build/i,
689
- /android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(.+)\s+build/i // Dragon Touch Tablet
726
+ /(android).+[;\/]\s+([YR]\d{2})\s+build/i,
727
+ /android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(\w{5})\sbuild/i // Dragon Touch Tablet
690
728
  ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [
691
729
 
692
- /android.+[;\/]\s*(NS-?.+)\s+build/i // Insignia Tablets
730
+ /android.+[;\/]\s*(NS-?\w{0,9})\sbuild/i // Insignia Tablets
693
731
  ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [
694
732
 
695
- /android.+[;\/]\s*((NX|Next)-?.+)\s+build/i // NextBook Tablets
733
+ /android.+[;\/]\s*((NX|Next)-?\w{0,9})\s+build/i // NextBook Tablets
696
734
  ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [
697
735
 
698
- /android.+[;\/]\s*(Xtreme\_?)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i
736
+ /android.+[;\/]\s*(Xtreme\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i
699
737
  ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones
700
738
 
701
- /android.+[;\/]\s*(LVTEL\-?)?(V1[12])\s+build/i // LvTel Phones
739
+ /android.+[;\/]\s*(LVTEL\-)?(V1[12])\s+build/i // LvTel Phones
702
740
  ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [
703
741
 
742
+ /android.+;\s(PH-1)\s/i
743
+ ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [ // Essential PH-1
744
+
704
745
  /android.+[;\/]\s*(V(100MD|700NA|7011|917G).*\b)\s+build/i // Envizen Tablets
705
746
  ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [
706
747
 
707
- /android.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(.*\b)\s+build/i // Le Pan Tablets
748
+ /android.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(\w{1,9})\s+build/i // Le Pan Tablets
708
749
  ], [VENDOR, MODEL, [TYPE, TABLET]], [
709
750
 
710
751
  /android.+[;\/]\s*(Trio[\s\-]*.*)\s+build/i // MachSpeed Tablets
@@ -719,14 +760,14 @@
719
760
  /android.+(KS(.+))\s+build/i // Amazon Kindle Tablets
720
761
  ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
721
762
 
722
- /android.+(Gigaset)[\s\-]+(Q.+)\s+build/i // Gigaset Tablets
763
+ /android.+(Gigaset)[\s\-]+(Q\w{1,9})\s+build/i // Gigaset Tablets
723
764
  ], [VENDOR, MODEL, [TYPE, TABLET]], [
724
765
 
725
766
  /\s(tablet|tab)[;\/]/i, // Unidentifiable Tablet
726
767
  /\s(mobile)(?:[;\/]|\ssafari)/i // Unidentifiable Mobile
727
768
  ], [[TYPE, util.lowerize], VENDOR, MODEL], [
728
769
 
729
- /(android.+)[;\/].+build/i // Generic Android Device
770
+ /(android[\w\.\s\-]{0,9});.+build/i // Generic Android Device
730
771
  ], [MODEL, [VENDOR, 'Generic']]
731
772
 
732
773
 
@@ -793,7 +834,7 @@
793
834
  /(icab)[\/\s]([23]\.[\d\.]+)/i // iCab
794
835
  ], [NAME, VERSION], [
795
836
 
796
- /rv\:([\w\.]+).*(gecko)/i // Gecko
837
+ /rv\:([\w\.]{1,9}).+(gecko)/i // Gecko
797
838
  ], [VERSION, NAME]
798
839
  ],
799
840
 
@@ -803,7 +844,7 @@
803
844
  /microsoft\s(windows)\s(vista|xp)/i // Windows (iTunes)
804
845
  ], [NAME, VERSION], [
805
846
  /(windows)\snt\s6\.2;\s(arm)/i, // Windows RT
806
- /(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s]+\w)*/i, // Windows Phone
847
+ /(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s\w]*)/i, // Windows Phone
807
848
  /(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i
808
849
  ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [
809
850
  /(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i
@@ -812,13 +853,13 @@
812
853
  // Mobile/Embedded OS
813
854
  /\((bb)(10);/i // BlackBerry 10
814
855
  ], [[NAME, 'BlackBerry'], VERSION], [
815
- /(blackberry)\w*\/?([\w\.]+)*/i, // Blackberry
856
+ /(blackberry)\w*\/?([\w\.]*)/i, // Blackberry
816
857
  /(tizen)[\/\s]([\w\.]+)/i, // Tizen
817
- /(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i,
858
+ /(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]*)/i,
818
859
  // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki
819
860
  /linux;.+(sailfish);/i // Sailfish OS
820
861
  ], [NAME, VERSION], [
821
- /(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i // Symbian
862
+ /(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]*)/i // Symbian
822
863
  ], [[NAME, 'Symbian'], VERSION], [
823
864
  /\((series40);/i // Series 40
824
865
  ], [NAME], [
@@ -829,43 +870,43 @@
829
870
  /(nintendo|playstation)\s([wids34portablevu]+)/i, // Nintendo/Playstation
830
871
 
831
872
  // GNU/Linux based
832
- /(mint)[\/\s\(]?(\w+)*/i, // Mint
873
+ /(mint)[\/\s\(]?(\w*)/i, // Mint
833
874
  /(mageia|vectorlinux)[;\s]/i, // Mageia/VectorLinux
834
- /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?(?!chrom)([\w\.-]+)*/i,
875
+ /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?(?!chrom)([\w\.-]*)/i,
835
876
  // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware
836
877
  // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus
837
- /(hurd|linux)\s?([\w\.]+)*/i, // Hurd/Linux
838
- /(gnu)\s?([\w\.]+)*/i // GNU
878
+ /(hurd|linux)\s?([\w\.]*)/i, // Hurd/Linux
879
+ /(gnu)\s?([\w\.]*)/i // GNU
839
880
  ], [NAME, VERSION], [
840
881
 
841
882
  /(cros)\s[\w]+\s([\w\.]+\w)/i // Chromium OS
842
883
  ], [[NAME, 'Chromium OS'], VERSION],[
843
884
 
844
885
  // Solaris
845
- /(sunos)\s?([\w\.]+\d)*/i // Solaris
886
+ /(sunos)\s?([\w\.\d]*)/i // Solaris
846
887
  ], [[NAME, 'Solaris'], VERSION], [
847
888
 
848
889
  // BSD based
849
- /\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
890
+ /\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]*)/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
850
891
  ], [NAME, VERSION],[
851
892
 
852
- /(haiku)\s(\w+)/i // Haiku
893
+ /(haiku)\s(\w+)/i // Haiku
853
894
  ], [NAME, VERSION],[
854
895
 
855
896
  /cfnetwork\/.+darwin/i,
856
- /ip[honead]+(?:.*os\s([\w]+)*\slike\smac|;\sopera)/i // iOS
897
+ /ip[honead]{2,4}(?:.*os\s([\w]+)\slike\smac|;\sopera)/i // iOS
857
898
  ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
858
899
 
859
- /(mac\sos\sx)\s?([\w\s\.]+\w)*/i,
900
+ /(mac\sos\sx)\s?([\w\s\.]*)/i,
860
901
  /(macintosh|mac(?=_powerpc)\s)/i // Mac OS
861
902
  ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [
862
903
 
863
904
  // Other
864
- /((?:open)?solaris)[\/\s-]?([\w\.]+)*/i, // Solaris
865
- /(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i, // AIX
866
- /(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,
867
- // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS
868
- /(unix)\s?([\w\.]+)*/i // UNIX
905
+ /((?:open)?solaris)[\/\s-]?([\w\.]*)/i, // Solaris
906
+ /(aix)\s((\d)(?=\.|\)|\s)[\w\.])*/i, // AIX
907
+ /(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms|fuchsia)/i,
908
+ // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia
909
+ /(unix)\s?([\w\.]*)/i // UNIX
869
910
  ], [NAME, VERSION]
870
911
  ]
871
912
  };
@@ -1001,6 +1042,35 @@
1001
1042
  if (typeof module !== UNDEF_TYPE && module.exports) {
1002
1043
  exports = module.exports = UAParser;
1003
1044
  }
1045
+ // TODO: test!!!!!!!!
1046
+ /*
1047
+ if (require && require.main === module && process) {
1048
+ // cli
1049
+ var jsonize = function (arr) {
1050
+ var res = [];
1051
+ for (var i in arr) {
1052
+ res.push(new UAParser(arr[i]).getResult());
1053
+ }
1054
+ process.stdout.write(JSON.stringify(res, null, 2) + '\n');
1055
+ };
1056
+ if (process.stdin.isTTY) {
1057
+ // via args
1058
+ jsonize(process.argv.slice(2));
1059
+ } else {
1060
+ // via pipe
1061
+ var str = '';
1062
+ process.stdin.on('readable', function() {
1063
+ var read = process.stdin.read();
1064
+ if (read !== null) {
1065
+ str += read;
1066
+ }
1067
+ });
1068
+ process.stdin.on('end', function () {
1069
+ jsonize(str.replace(/\n$/, '').split('\n'));
1070
+ });
1071
+ }
1072
+ }
1073
+ */
1004
1074
  exports.UAParser = UAParser;
1005
1075
  } else {
1006
1076
  // requirejs env (optional)
@@ -1020,7 +1090,7 @@
1020
1090
  // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,
1021
1091
  // and we should catch that.
1022
1092
  var $ = window && (window.jQuery || window.Zepto);
1023
- if (typeof $ !== UNDEF_TYPE) {
1093
+ if (typeof $ !== UNDEF_TYPE && !$.ua) {
1024
1094
  var parser = new UAParser();
1025
1095
  $.ua = parser.getResult();
1026
1096
  $.ua.get = function () {