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/.travis.yml +1 -1
- package/bower.json +1 -1
- package/dist/ua-parser.min.js +4 -4
- package/dist/ua-parser.pack.js +4 -4
- package/license.md +21 -0
- package/package.js +1 -1
- package/package.json +24 -5
- package/readme.md +62 -25
- package/src/ua-parser.js +135 -65
- package/test/browser-test.json +175 -10
- package/test/cpu-test.json +8 -0
- package/test/device-test.json +695 -685
- package/test/os-test.json +12 -3
- package/.npmignore +0 -24
package/src/ua-parser.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
|
2
|
-
* UAParser.js v0.7.
|
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
|
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.
|
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\.]
|
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\.]
|
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
|
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
|
-
/(
|
274
|
-
|
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
|
-
/(
|
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\.-]+)
|
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\.]
|
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
|
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
|
543
|
+
/(kf[A-z]+)\sbuild\/.+silk\//i // Kindle Fire HD
|
513
544
|
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
514
|
-
/(sd|kf)[0349hijorstuw]+\sbuild
|
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-]
|
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
|
558
|
-
/(alcatel|geeksphone|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]
|
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))
|
579
|
-
/mot[\s-]?(\w
|
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-]*)
|
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
|
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-]
|
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
|
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
|
677
|
+
/android.+;\s(pixel c)[\s)]/i // Google Pixel C
|
645
678
|
], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [
|
646
679
|
|
647
|
-
/android.+;\s(pixel xl
|
680
|
+
/android.+;\s(pixel( [23])?( xl)?)\s/i // Google Pixel
|
648
681
|
], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [
|
649
682
|
|
650
|
-
/android
|
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
|
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
|
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.+[
|
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
|
677
|
-
], [[VENDOR, 'ZTE'],
|
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}
|
689
|
-
/android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(
|
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
|
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)
|
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\_
|
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
|
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\-]+(
|
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
|
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
|
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\.]
|
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]
|
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\.]
|
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\.]
|
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\.]
|
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
|
873
|
+
/(mint)[\/\s\(]?(\w*)/i, // Mint
|
833
874
|
/(mageia|vectorlinux)[;\s]/i, // Mageia/VectorLinux
|
834
|
-
/(joli|[kxln]?ubuntu|debian|
|
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\.]
|
838
|
-
/(gnu)\s?([\w\.]
|
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
|
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\.]
|
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
|
893
|
+
/(haiku)\s(\w+)/i // Haiku
|
853
894
|
], [NAME, VERSION],[
|
854
895
|
|
855
896
|
/cfnetwork\/.+darwin/i,
|
856
|
-
/ip[honead]
|
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\.]
|
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\.]
|
865
|
-
/(aix)\s((\d)(?=\.|\)|\s)[\w\.]
|
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\.]
|
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 () {
|