@zykjcommon/questions 0.0.17 → 0.0.18

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.
@@ -10334,6 +10334,1018 @@ if (DESCRIPTORS && !('size' in URLSearchParamsPrototype)) {
10334
10334
 
10335
10335
  /***/ }),
10336
10336
 
10337
+ /***/ 2437:
10338
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
10339
+
10340
+ // THIS FILE IS GENERATED - DO NOT EDIT!
10341
+ /*!mobile-detect v1.4.5 2021-03-13*/
10342
+ /*global module:false, define:false*/
10343
+ /*jshint latedef:false*/
10344
+ /*!@license Copyright 2013, Heinrich Goebl, License: MIT, see https://github.com/hgoebl/mobile-detect.js*/
10345
+ (function (define, undefined) {
10346
+ define(function () {
10347
+ 'use strict';
10348
+
10349
+ var impl = {};
10350
+
10351
+ impl.mobileDetectRules = {
10352
+ "phones": {
10353
+ "iPhone": "\\biPhone\\b|\\biPod\\b",
10354
+ "BlackBerry": "BlackBerry|\\bBB10\\b|rim[0-9]+|\\b(BBA100|BBB100|BBD100|BBE100|BBF100|STH100)\\b-[0-9]+",
10355
+ "Pixel": "; \\bPixel\\b",
10356
+ "HTC": "HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\\bEVO\\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel",
10357
+ "Nexus": "Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 5X|Nexus 6",
10358
+ "Dell": "Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\\b001DL\\b|\\b101DL\\b|\\bGS01\\b",
10359
+ "Motorola": "Motorola|DROIDX|DROID BIONIC|\\bDroid\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\bMoto E\\b|XT1068|XT1092|XT1052",
10360
+ "Samsung": "\\bSamsung\\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F|SM-G610F|SM-G981B|SM-G892A|SM-A530F",
10361
+ "LG": "\\bLG\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323|M257)|LM-G710",
10362
+ "Sony": "SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533|SOV34|601SO|F8332",
10363
+ "Asus": "Asus.*Galaxy|PadFone.*Mobile",
10364
+ "Xiaomi": "^(?!.*\\bx11\\b).*xiaomi.*$|POCOPHONE F1|MI 8|Redmi Note 9S|Redmi Note 5A Prime|N2G47H|M2001J2G|M2001J2I|M1805E10A|M2004J11G|M1902F1G|M2002J9G|M2004J19G|M2003J6A1G",
10365
+ "NokiaLumia": "Lumia [0-9]{3,4}",
10366
+ "Micromax": "Micromax.*\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\b",
10367
+ "Palm": "PalmSource|Palm",
10368
+ "Vertu": "Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature",
10369
+ "Pantech": "PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790",
10370
+ "Fly": "IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250",
10371
+ "Wiko": "KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM",
10372
+ "iMobile": "i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)",
10373
+ "SimValley": "\\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\\b",
10374
+ "Wolfgang": "AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q",
10375
+ "Alcatel": "Alcatel",
10376
+ "Nintendo": "Nintendo (3DS|Switch)",
10377
+ "Amoi": "Amoi",
10378
+ "INQ": "INQ",
10379
+ "OnePlus": "ONEPLUS",
10380
+ "GenericPhone": "Tapatalk|PDA;|SAGEM|\\bmmp\\b|pocket|\\bpsp\\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\\bwap\\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser"
10381
+ },
10382
+ "tablets": {
10383
+ "iPad": "iPad|iPad.*Mobile",
10384
+ "NexusTablet": "Android.*Nexus[\\s]+(7|9|10)",
10385
+ "GoogleTablet": "Android.*Pixel C",
10386
+ "SamsungTablet": "SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835|SM-T830|SM-T837V|SM-T720|SM-T510|SM-T387V|SM-P610|SM-T290|SM-T515|SM-T590|SM-T595|SM-T725|SM-T817P|SM-P585N0|SM-T395|SM-T295|SM-T865|SM-P610N|SM-P615|SM-T970|SM-T380|SM-T5950|SM-T905|SM-T231|SM-T500|SM-T860",
10387
+ "Kindle": "Kindle|Silk.*Accelerated|Android.*\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\\b|Android.*Silk\/[0-9.]+ like Chrome\/[0-9.]+ (?!Mobile)",
10388
+ "SurfaceTablet": "Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)",
10389
+ "HPTablet": "HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10",
10390
+ "AsusTablet": "^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\\bK00F\\b|\\bK00C\\b|\\bK00E\\b|\\bK00L\\b|TX201LA|ME176C|ME102A|\\bM80TA\\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\\bME70C\\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\\bP027\\b|\\bP024\\b|\\bP00C\\b",
10391
+ "BlackBerryTablet": "PlayBook|RIM Tablet",
10392
+ "HTCtablet": "HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410",
10393
+ "MotorolaTablet": "xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617",
10394
+ "NookTablet": "Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2",
10395
+ "AcerTablet": "Android.*; \\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\b|W3-810|\\bA3-A10\\b|\\bA3-A11\\b|\\bA3-A20\\b|\\bA3-A30|A3-A40",
10396
+ "ToshibaTablet": "Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO",
10397
+ "LGTablet": "\\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\\b",
10398
+ "FujitsuTablet": "Android.*\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\b",
10399
+ "PrestigioTablet": "PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002",
10400
+ "LenovoTablet": "Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304X|TB-X304F|TB-X304L|TB-X505F|TB-X505L|TB-X505X|TB-X605F|TB-X605L|TB-8703F|TB-8703X|TB-8703N|TB-8704N|TB-8704F|TB-8704X|TB-8704V|TB-7304F|TB-7304I|TB-7304X|Tab2A7-10F|Tab2A7-20F|TB2-X30L|YT3-X50L|YT3-X50F|YT3-X50M|YT-X705F|YT-X703F|YT-X703L|YT-X705L|YT-X705X|TB2-X30F|TB2-X30L|TB2-X30M|A2107A-F|A2107A-H|TB3-730F|TB3-730M|TB3-730X|TB-7504F|TB-7504X|TB-X704F|TB-X104F|TB3-X70F|TB-X705F|TB-8504F|TB3-X70L|TB3-710F|TB-X704L",
10401
+ "DellTablet": "Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7",
10402
+ "YarvikTablet": "Android.*\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\b",
10403
+ "MedionTablet": "Android.*\\bOYO\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB",
10404
+ "ArnovaTablet": "97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2",
10405
+ "IntensoTablet": "INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004",
10406
+ "IRUTablet": "M702pro",
10407
+ "MegafonTablet": "MegaFon V9|\\bZTE V9\\b|Android.*\\bMT7A\\b",
10408
+ "EbodaTablet": "E-Boda (Supreme|Impresspeed|Izzycomm|Essential)",
10409
+ "AllViewTablet": "Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)",
10410
+ "ArchosTablet": "\\b(101G9|80G9|A101IT)\\b|Qilive 97R|Archos5|\\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\\b",
10411
+ "AinolTablet": "NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark",
10412
+ "NokiaLumiaTablet": "Lumia 2520",
10413
+ "SonyTablet": "Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP641|SGP612|SOT31|SGP771|SGP611|SGP612|SGP712",
10414
+ "PhilipsTablet": "\\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\\b",
10415
+ "CubeTablet": "Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT",
10416
+ "CobyTablet": "MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010",
10417
+ "MIDTablet": "M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10",
10418
+ "MSITablet": "MSI \\b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\\b",
10419
+ "SMiTTablet": "Android.*(\\bMID\\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)",
10420
+ "RockChipTablet": "Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A",
10421
+ "FlyTablet": "IQ310|Fly Vision",
10422
+ "bqTablet": "Android.*(bq)?.*\\b(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))\\b|Maxwell.*Lite|Maxwell.*Plus",
10423
+ "HuaweiTablet": "MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L|BAH-L09|BAH-W09|AGS-L09|CMR-AL19",
10424
+ "NecTablet": "\\bN-06D|\\bN-08D",
10425
+ "PantechTablet": "Pantech.*P4100",
10426
+ "BronchoTablet": "Broncho.*(N701|N708|N802|a710)",
10427
+ "VersusTablet": "TOUCHPAD.*[78910]|\\bTOUCHTAB\\b",
10428
+ "ZyncTablet": "z1000|Z99 2G|z930|z990|z909|Z919|z900",
10429
+ "PositivoTablet": "TB07STA|TB10STA|TB07FTA|TB10FTA",
10430
+ "NabiTablet": "Android.*\\bNabi",
10431
+ "KoboTablet": "Kobo Touch|\\bK080\\b|\\bVox\\b Build|\\bArc\\b Build",
10432
+ "DanewTablet": "DSlide.*\\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\\b",
10433
+ "TexetTablet": "NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE",
10434
+ "PlaystationTablet": "Playstation.*(Portable|Vita)",
10435
+ "TrekstorTablet": "ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab",
10436
+ "PyleAudioTablet": "\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\b",
10437
+ "AdvanTablet": "Android.* \\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\b ",
10438
+ "DanyTechTablet": "Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1",
10439
+ "GalapadTablet": "Android [0-9.]+; [a-z-]+; \\bG1\\b",
10440
+ "MicromaxTablet": "Funbook|Micromax.*\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\b",
10441
+ "KarbonnTablet": "Android.*\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\b",
10442
+ "AllFineTablet": "Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide",
10443
+ "PROSCANTablet": "\\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\\b",
10444
+ "YONESTablet": "BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026",
10445
+ "ChangJiaTablet": "TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503",
10446
+ "GUTablet": "TX-A1301|TX-M9002|Q702|kf026",
10447
+ "PointOfViewTablet": "TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10",
10448
+ "OvermaxTablet": "OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027",
10449
+ "HCLTablet": "HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync",
10450
+ "DPSTablet": "DPS Dream 9|DPS Dual 7",
10451
+ "VistureTablet": "V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10",
10452
+ "CrestaTablet": "CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989",
10453
+ "MediatekTablet": "\\bMT8125|MT8389|MT8135|MT8377\\b",
10454
+ "ConcordeTablet": "Concorde([ ]+)?Tab|ConCorde ReadMan",
10455
+ "GoCleverTablet": "GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042",
10456
+ "ModecomTablet": "FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003",
10457
+ "VoninoTablet": "\\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\\bQ8\\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\\b",
10458
+ "ECSTablet": "V07OT2|TM105A|S10OT1|TR10CS1",
10459
+ "StorexTablet": "eZee[_']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab",
10460
+ "VodafoneTablet": "SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497|VFD 1400",
10461
+ "EssentielBTablet": "Smart[ ']?TAB[ ]+?[0-9]+|Family[ ']?TAB2",
10462
+ "RossMoorTablet": "RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711",
10463
+ "iMobileTablet": "i-mobile i-note",
10464
+ "TolinoTablet": "tolino tab [0-9.]+|tolino shine",
10465
+ "AudioSonicTablet": "\\bC-22Q|T7-QC|T-17B|T-17P\\b",
10466
+ "AMPETablet": "Android.* A78 ",
10467
+ "SkkTablet": "Android.* (SKYPAD|PHOENIX|CYCLOPS)",
10468
+ "TecnoTablet": "TECNO P9|TECNO DP8D",
10469
+ "JXDTablet": "Android.* \\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\\b",
10470
+ "iJoyTablet": "Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)",
10471
+ "FX2Tablet": "FX2 PAD7|FX2 PAD10",
10472
+ "XoroTablet": "KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151",
10473
+ "ViewsonicTablet": "ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a",
10474
+ "VerizonTablet": "QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1",
10475
+ "OdysTablet": "LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\\bXELIO\\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10",
10476
+ "CaptivaTablet": "CAPTIVA PAD",
10477
+ "IconbitTablet": "NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S",
10478
+ "TeclastTablet": "T98 4G|\\bP80\\b|\\bX90HD\\b|X98 Air|X98 Air 3G|\\bX89\\b|P80 3G|\\bX80h\\b|P98 Air|\\bX89HD\\b|P98 3G|\\bP90HD\\b|P89 3G|X98 3G|\\bP70h\\b|P79HD 3G|G18d 3G|\\bP79HD\\b|\\bP89s\\b|\\bA88\\b|\\bP10HD\\b|\\bP19HD\\b|G18 3G|\\bP78HD\\b|\\bA78\\b|\\bP75\\b|G17s 3G|G17h 3G|\\bP85t\\b|\\bP90\\b|\\bP11\\b|\\bP98t\\b|\\bP98HD\\b|\\bG18d\\b|\\bP85s\\b|\\bP11HD\\b|\\bP88s\\b|\\bA80HD\\b|\\bA80se\\b|\\bA10h\\b|\\bP89\\b|\\bP78s\\b|\\bG18\\b|\\bP85\\b|\\bA70h\\b|\\bA70\\b|\\bG17\\b|\\bP18\\b|\\bA80s\\b|\\bA11s\\b|\\bP88HD\\b|\\bA80h\\b|\\bP76s\\b|\\bP76h\\b|\\bP98\\b|\\bA10HD\\b|\\bP78\\b|\\bP88\\b|\\bA11\\b|\\bA10t\\b|\\bP76a\\b|\\bP76t\\b|\\bP76e\\b|\\bP85HD\\b|\\bP85a\\b|\\bP86\\b|\\bP75HD\\b|\\bP76v\\b|\\bA12\\b|\\bP75a\\b|\\bA15\\b|\\bP76Ti\\b|\\bP81HD\\b|\\bA10\\b|\\bT760VE\\b|\\bT720HD\\b|\\bP76\\b|\\bP73\\b|\\bP71\\b|\\bP72\\b|\\bT720SE\\b|\\bC520Ti\\b|\\bT760\\b|\\bT720VE\\b|T720-3GE|T720-WiFi",
10479
+ "OndaTablet": "\\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\\b[\\s]+|V10 \\b4G\\b",
10480
+ "JaytechTablet": "TPC-PA762",
10481
+ "BlaupunktTablet": "Endeavour 800NG|Endeavour 1010",
10482
+ "DigmaTablet": "\\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\\b",
10483
+ "EvolioTablet": "ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\\bEvotab\\b|\\bNeura\\b",
10484
+ "LavaTablet": "QPAD E704|\\bIvoryS\\b|E-TAB IVORY|\\bE-TAB\\b",
10485
+ "AocTablet": "MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712",
10486
+ "MpmanTablet": "MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\\bMPG7\\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010",
10487
+ "CelkonTablet": "CT695|CT888|CT[\\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\\bCT-1\\b",
10488
+ "WolderTablet": "miTab \\b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\\b",
10489
+ "MediacomTablet": "M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA",
10490
+ "MiTablet": "\\bMI PAD\\b|\\bHM NOTE 1W\\b",
10491
+ "NibiruTablet": "Nibiru M1|Nibiru Jupiter One",
10492
+ "NexoTablet": "NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI",
10493
+ "LeaderTablet": "TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100",
10494
+ "UbislateTablet": "UbiSlate[\\s]?7C",
10495
+ "PocketBookTablet": "Pocketbook",
10496
+ "KocasoTablet": "\\b(TB-1207)\\b",
10497
+ "HisenseTablet": "\\b(F5281|E2371)\\b",
10498
+ "Hudl": "Hudl HT7S3|Hudl 2",
10499
+ "TelstraTablet": "T-Hub2",
10500
+ "GenericTablet": "Android.*\\b97D\\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\\bA7EB\\b|CatNova8|A1_07|CT704|CT1002|\\bM721\\b|rk30sdk|\\bEVOTAB\\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\\bM6pro\\b|CT1020W|arc 10HD|\\bTP750\\b|\\bQTAQZ3\\b|WVT101|TM1088|KT107"
10501
+ },
10502
+ "oss": {
10503
+ "AndroidOS": "Android",
10504
+ "BlackBerryOS": "blackberry|\\bBB10\\b|rim tablet os",
10505
+ "PalmOS": "PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino",
10506
+ "SymbianOS": "Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\\bS60\\b",
10507
+ "WindowsMobileOS": "Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Windows Mobile|Windows Phone [0-9.]+|WCE;",
10508
+ "WindowsPhoneOS": "Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;",
10509
+ "iOS": "\\biPhone.*Mobile|\\biPod|\\biPad|AppleCoreMedia",
10510
+ "iPadOS": "CPU OS 13",
10511
+ "SailfishOS": "Sailfish",
10512
+ "MeeGoOS": "MeeGo",
10513
+ "MaemoOS": "Maemo",
10514
+ "JavaOS": "J2ME\/|\\bMIDP\\b|\\bCLDC\\b",
10515
+ "webOS": "webOS|hpwOS",
10516
+ "badaOS": "\\bBada\\b",
10517
+ "BREWOS": "BREW"
10518
+ },
10519
+ "uas": {
10520
+ "Chrome": "\\bCrMo\\b|CriOS|Android.*Chrome\/[.0-9]* (Mobile)?",
10521
+ "Dolfin": "\\bDolfin\\b",
10522
+ "Opera": "Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR\/[0-9.]+$|Coast\/[0-9.]+",
10523
+ "Skyfire": "Skyfire",
10524
+ "Edge": "\\bEdgiOS\\b|Mobile Safari\/[.0-9]* Edge",
10525
+ "IE": "IEMobile|MSIEMobile",
10526
+ "Firefox": "fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS",
10527
+ "Bolt": "bolt",
10528
+ "TeaShark": "teashark",
10529
+ "Blazer": "Blazer",
10530
+ "Safari": "Version((?!\\bEdgiOS\\b).)*Mobile.*Safari|Safari.*Mobile|MobileSafari",
10531
+ "WeChat": "\\bMicroMessenger\\b",
10532
+ "UCBrowser": "UC.*Browser|UCWEB",
10533
+ "baiduboxapp": "baiduboxapp",
10534
+ "baidubrowser": "baidubrowser",
10535
+ "DiigoBrowser": "DiigoBrowser",
10536
+ "Mercury": "\\bMercury\\b",
10537
+ "ObigoBrowser": "Obigo",
10538
+ "NetFront": "NF-Browser",
10539
+ "GenericBrowser": "NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger",
10540
+ "PaleMoon": "Android.*PaleMoon|Mobile.*PaleMoon"
10541
+ },
10542
+ "props": {
10543
+ "Mobile": "Mobile\/[VER]",
10544
+ "Build": "Build\/[VER]",
10545
+ "Version": "Version\/[VER]",
10546
+ "VendorID": "VendorID\/[VER]",
10547
+ "iPad": "iPad.*CPU[a-z ]+[VER]",
10548
+ "iPhone": "iPhone.*CPU[a-z ]+[VER]",
10549
+ "iPod": "iPod.*CPU[a-z ]+[VER]",
10550
+ "Kindle": "Kindle\/[VER]",
10551
+ "Chrome": [
10552
+ "Chrome\/[VER]",
10553
+ "CriOS\/[VER]",
10554
+ "CrMo\/[VER]"
10555
+ ],
10556
+ "Coast": [
10557
+ "Coast\/[VER]"
10558
+ ],
10559
+ "Dolfin": "Dolfin\/[VER]",
10560
+ "Firefox": [
10561
+ "Firefox\/[VER]",
10562
+ "FxiOS\/[VER]"
10563
+ ],
10564
+ "Fennec": "Fennec\/[VER]",
10565
+ "Edge": "Edge\/[VER]",
10566
+ "IE": [
10567
+ "IEMobile\/[VER];",
10568
+ "IEMobile [VER]",
10569
+ "MSIE [VER];",
10570
+ "Trident\/[0-9.]+;.*rv:[VER]"
10571
+ ],
10572
+ "NetFront": "NetFront\/[VER]",
10573
+ "NokiaBrowser": "NokiaBrowser\/[VER]",
10574
+ "Opera": [
10575
+ " OPR\/[VER]",
10576
+ "Opera Mini\/[VER]",
10577
+ "Version\/[VER]"
10578
+ ],
10579
+ "Opera Mini": "Opera Mini\/[VER]",
10580
+ "Opera Mobi": "Version\/[VER]",
10581
+ "UCBrowser": [
10582
+ "UCWEB[VER]",
10583
+ "UC.*Browser\/[VER]"
10584
+ ],
10585
+ "MQQBrowser": "MQQBrowser\/[VER]",
10586
+ "MicroMessenger": "MicroMessenger\/[VER]",
10587
+ "baiduboxapp": "baiduboxapp\/[VER]",
10588
+ "baidubrowser": "baidubrowser\/[VER]",
10589
+ "SamsungBrowser": "SamsungBrowser\/[VER]",
10590
+ "Iron": "Iron\/[VER]",
10591
+ "Safari": [
10592
+ "Version\/[VER]",
10593
+ "Safari\/[VER]"
10594
+ ],
10595
+ "Skyfire": "Skyfire\/[VER]",
10596
+ "Tizen": "Tizen\/[VER]",
10597
+ "Webkit": "webkit[ \/][VER]",
10598
+ "PaleMoon": "PaleMoon\/[VER]",
10599
+ "SailfishBrowser": "SailfishBrowser\/[VER]",
10600
+ "Gecko": "Gecko\/[VER]",
10601
+ "Trident": "Trident\/[VER]",
10602
+ "Presto": "Presto\/[VER]",
10603
+ "Goanna": "Goanna\/[VER]",
10604
+ "iOS": " \\bi?OS\\b [VER][ ;]{1}",
10605
+ "Android": "Android [VER]",
10606
+ "Sailfish": "Sailfish [VER]",
10607
+ "BlackBerry": [
10608
+ "BlackBerry[\\w]+\/[VER]",
10609
+ "BlackBerry.*Version\/[VER]",
10610
+ "Version\/[VER]"
10611
+ ],
10612
+ "BREW": "BREW [VER]",
10613
+ "Java": "Java\/[VER]",
10614
+ "Windows Phone OS": [
10615
+ "Windows Phone OS [VER]",
10616
+ "Windows Phone [VER]"
10617
+ ],
10618
+ "Windows Phone": "Windows Phone [VER]",
10619
+ "Windows CE": "Windows CE\/[VER]",
10620
+ "Windows NT": "Windows NT [VER]",
10621
+ "Symbian": [
10622
+ "SymbianOS\/[VER]",
10623
+ "Symbian\/[VER]"
10624
+ ],
10625
+ "webOS": [
10626
+ "webOS\/[VER]",
10627
+ "hpwOS\/[VER];"
10628
+ ]
10629
+ },
10630
+ "utils": {
10631
+ "Bot": "Googlebot|facebookexternalhit|Google-AMPHTML|s~amp-validator|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom|contentkingapp|AspiegelBot",
10632
+ "MobileBot": "Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker\/M1A1-R2D2",
10633
+ "DesktopMode": "WPDesktop",
10634
+ "TV": "SonyDTV|HbbTV",
10635
+ "WebKit": "(webkit)[ \/]([\\w.]+)",
10636
+ "Console": "\\b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\\b",
10637
+ "Watch": "SM-V700"
10638
+ }
10639
+ };
10640
+
10641
+ // following patterns come from http://detectmobilebrowsers.com/
10642
+ impl.detectMobileBrowsers = {
10643
+ fullPattern: /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,
10644
+ shortPattern: /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,
10645
+ tabletPattern: /android|ipad|playbook|silk/i
10646
+ };
10647
+
10648
+ var hasOwnProp = Object.prototype.hasOwnProperty,
10649
+ isArray;
10650
+
10651
+ impl.FALLBACK_PHONE = 'UnknownPhone';
10652
+ impl.FALLBACK_TABLET = 'UnknownTablet';
10653
+ impl.FALLBACK_MOBILE = 'UnknownMobile';
10654
+
10655
+ isArray = ('isArray' in Array) ?
10656
+ Array.isArray : function (value) { return Object.prototype.toString.call(value) === '[object Array]'; };
10657
+
10658
+ function equalIC(a, b) {
10659
+ return a != null && b != null && a.toLowerCase() === b.toLowerCase();
10660
+ }
10661
+
10662
+ function containsIC(array, value) {
10663
+ var valueLC, i, len = array.length;
10664
+ if (!len || !value) {
10665
+ return false;
10666
+ }
10667
+ valueLC = value.toLowerCase();
10668
+ for (i = 0; i < len; ++i) {
10669
+ if (valueLC === array[i].toLowerCase()) {
10670
+ return true;
10671
+ }
10672
+ }
10673
+ return false;
10674
+ }
10675
+
10676
+ function convertPropsToRegExp(object) {
10677
+ for (var key in object) {
10678
+ if (hasOwnProp.call(object, key)) {
10679
+ object[key] = new RegExp(object[key], 'i');
10680
+ }
10681
+ }
10682
+ }
10683
+
10684
+ function prepareUserAgent(userAgent) {
10685
+ return (userAgent || '').substr(0, 500); // mitigate vulnerable to ReDoS
10686
+ }
10687
+
10688
+ (function init() {
10689
+ var key, values, value, i, len, verPos, mobileDetectRules = impl.mobileDetectRules;
10690
+ for (key in mobileDetectRules.props) {
10691
+ if (hasOwnProp.call(mobileDetectRules.props, key)) {
10692
+ values = mobileDetectRules.props[key];
10693
+ if (!isArray(values)) {
10694
+ values = [values];
10695
+ }
10696
+ len = values.length;
10697
+ for (i = 0; i < len; ++i) {
10698
+ value = values[i];
10699
+ verPos = value.indexOf('[VER]');
10700
+ if (verPos >= 0) {
10701
+ value = value.substring(0, verPos) + '([\\w._\\+]+)' + value.substring(verPos + 5);
10702
+ }
10703
+ values[i] = new RegExp(value, 'i');
10704
+ }
10705
+ mobileDetectRules.props[key] = values;
10706
+ }
10707
+ }
10708
+ convertPropsToRegExp(mobileDetectRules.oss);
10709
+ convertPropsToRegExp(mobileDetectRules.phones);
10710
+ convertPropsToRegExp(mobileDetectRules.tablets);
10711
+ convertPropsToRegExp(mobileDetectRules.uas);
10712
+ convertPropsToRegExp(mobileDetectRules.utils);
10713
+
10714
+ // copy some patterns to oss0 which are tested first (see issue#15)
10715
+ mobileDetectRules.oss0 = {
10716
+ WindowsPhoneOS: mobileDetectRules.oss.WindowsPhoneOS,
10717
+ WindowsMobileOS: mobileDetectRules.oss.WindowsMobileOS
10718
+ };
10719
+ }());
10720
+
10721
+ /**
10722
+ * Test userAgent string against a set of rules and find the first matched key.
10723
+ * @param {Object} rules (key is String, value is RegExp)
10724
+ * @param {String} userAgent the navigator.userAgent (or HTTP-Header 'User-Agent').
10725
+ * @returns {String|null} the matched key if found, otherwise <tt>null</tt>
10726
+ * @private
10727
+ */
10728
+ impl.findMatch = function(rules, userAgent) {
10729
+ for (var key in rules) {
10730
+ if (hasOwnProp.call(rules, key)) {
10731
+ if (rules[key].test(userAgent)) {
10732
+ return key;
10733
+ }
10734
+ }
10735
+ }
10736
+ return null;
10737
+ };
10738
+
10739
+ /**
10740
+ * Test userAgent string against a set of rules and return an array of matched keys.
10741
+ * @param {Object} rules (key is String, value is RegExp)
10742
+ * @param {String} userAgent the navigator.userAgent (or HTTP-Header 'User-Agent').
10743
+ * @returns {Array} an array of matched keys, may be empty when there is no match, but not <tt>null</tt>
10744
+ * @private
10745
+ */
10746
+ impl.findMatches = function(rules, userAgent) {
10747
+ var result = [];
10748
+ for (var key in rules) {
10749
+ if (hasOwnProp.call(rules, key)) {
10750
+ if (rules[key].test(userAgent)) {
10751
+ result.push(key);
10752
+ }
10753
+ }
10754
+ }
10755
+ return result;
10756
+ };
10757
+
10758
+ /**
10759
+ * Check the version of the given property in the User-Agent.
10760
+ *
10761
+ * @param {String} propertyName
10762
+ * @param {String} userAgent
10763
+ * @return {String} version or <tt>null</tt> if version not found
10764
+ * @private
10765
+ */
10766
+ impl.getVersionStr = function (propertyName, userAgent) {
10767
+ var props = impl.mobileDetectRules.props, patterns, i, len, match;
10768
+ if (hasOwnProp.call(props, propertyName)) {
10769
+ patterns = props[propertyName];
10770
+ len = patterns.length;
10771
+ for (i = 0; i < len; ++i) {
10772
+ match = patterns[i].exec(userAgent);
10773
+ if (match !== null) {
10774
+ return match[1];
10775
+ }
10776
+ }
10777
+ }
10778
+ return null;
10779
+ };
10780
+
10781
+ /**
10782
+ * Check the version of the given property in the User-Agent.
10783
+ * Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31)
10784
+ *
10785
+ * @param {String} propertyName
10786
+ * @param {String} userAgent
10787
+ * @return {Number} version or <tt>NaN</tt> if version not found
10788
+ * @private
10789
+ */
10790
+ impl.getVersion = function (propertyName, userAgent) {
10791
+ var version = impl.getVersionStr(propertyName, userAgent);
10792
+ return version ? impl.prepareVersionNo(version) : NaN;
10793
+ };
10794
+
10795
+ /**
10796
+ * Prepare the version number.
10797
+ *
10798
+ * @param {String} version
10799
+ * @return {Number} the version number as a floating number
10800
+ * @private
10801
+ */
10802
+ impl.prepareVersionNo = function (version) {
10803
+ var numbers;
10804
+
10805
+ numbers = version.split(/[a-z._ \/\-]/i);
10806
+ if (numbers.length === 1) {
10807
+ version = numbers[0];
10808
+ }
10809
+ if (numbers.length > 1) {
10810
+ version = numbers[0] + '.';
10811
+ numbers.shift();
10812
+ version += numbers.join('');
10813
+ }
10814
+ return Number(version);
10815
+ };
10816
+
10817
+ impl.isMobileFallback = function (userAgent) {
10818
+ return impl.detectMobileBrowsers.fullPattern.test(userAgent) ||
10819
+ impl.detectMobileBrowsers.shortPattern.test(userAgent.substr(0,4));
10820
+ };
10821
+
10822
+ impl.isTabletFallback = function (userAgent) {
10823
+ return impl.detectMobileBrowsers.tabletPattern.test(userAgent);
10824
+ };
10825
+
10826
+ impl.prepareDetectionCache = function (cache, userAgent, maxPhoneWidth) {
10827
+ if (cache.mobile !== undefined) {
10828
+ return;
10829
+ }
10830
+ var phone, tablet, phoneSized;
10831
+
10832
+ // first check for stronger tablet rules, then phone (see issue#5)
10833
+ tablet = impl.findMatch(impl.mobileDetectRules.tablets, userAgent);
10834
+ if (tablet) {
10835
+ cache.mobile = cache.tablet = tablet;
10836
+ cache.phone = null;
10837
+ return; // unambiguously identified as tablet
10838
+ }
10839
+
10840
+ phone = impl.findMatch(impl.mobileDetectRules.phones, userAgent);
10841
+ if (phone) {
10842
+ cache.mobile = cache.phone = phone;
10843
+ cache.tablet = null;
10844
+ return; // unambiguously identified as phone
10845
+ }
10846
+
10847
+ // our rules haven't found a match -> try more general fallback rules
10848
+ if (impl.isMobileFallback(userAgent)) {
10849
+ phoneSized = MobileDetect.isPhoneSized(maxPhoneWidth);
10850
+ if (phoneSized === undefined) {
10851
+ cache.mobile = impl.FALLBACK_MOBILE;
10852
+ cache.tablet = cache.phone = null;
10853
+ } else if (phoneSized) {
10854
+ cache.mobile = cache.phone = impl.FALLBACK_PHONE;
10855
+ cache.tablet = null;
10856
+ } else {
10857
+ cache.mobile = cache.tablet = impl.FALLBACK_TABLET;
10858
+ cache.phone = null;
10859
+ }
10860
+ } else if (impl.isTabletFallback(userAgent)) {
10861
+ cache.mobile = cache.tablet = impl.FALLBACK_TABLET;
10862
+ cache.phone = null;
10863
+ } else {
10864
+ // not mobile at all!
10865
+ cache.mobile = cache.tablet = cache.phone = null;
10866
+ }
10867
+ };
10868
+
10869
+ // t is a reference to a MobileDetect instance
10870
+ impl.mobileGrade = function (t) {
10871
+ // impl note:
10872
+ // To keep in sync w/ Mobile_Detect.php easily, the following code is tightly aligned to the PHP version.
10873
+ // When changes are made in Mobile_Detect.php, copy this method and replace:
10874
+ // $this-> / t.
10875
+ // self::MOBILE_GRADE_(.) / '$1'
10876
+ // , self::VERSION_TYPE_FLOAT / (nothing)
10877
+ // isIOS() / os('iOS')
10878
+ // [reg] / (nothing) <-- jsdelivr complaining about unescaped unicode character U+00AE
10879
+ var $isMobile = t.mobile() !== null;
10880
+
10881
+ if (
10882
+ // Apple iOS 3.2-5.1 - Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3), iPad 3 (5.1), original iPhone (3.1), iPhone 3 (3.2), 3GS (4.3), 4 (4.3 / 5.0), and 4S (5.1)
10883
+ t.os('iOS') && t.version('iPad')>=4.3 ||
10884
+ t.os('iOS') && t.version('iPhone')>=3.1 ||
10885
+ t.os('iOS') && t.version('iPod')>=3.1 ||
10886
+
10887
+ // Android 2.1-2.3 - Tested on the HTC Incredible (2.2), original Droid (2.2), HTC Aria (2.1), Google Nexus S (2.3). Functional on 1.5 & 1.6 but performance may be sluggish, tested on Google G1 (1.5)
10888
+ // Android 3.1 (Honeycomb) - Tested on the Samsung Galaxy Tab 10.1 and Motorola XOOM
10889
+ // Android 4.0 (ICS) - Tested on a Galaxy Nexus. Note: transition performance can be poor on upgraded devices
10890
+ // Android 4.1 (Jelly Bean) - Tested on a Galaxy Nexus and Galaxy 7
10891
+ ( t.version('Android')>2.1 && t.is('Webkit') ) ||
10892
+
10893
+ // Windows Phone 7-7.5 - Tested on the HTC Surround (7.0) HTC Trophy (7.5), LG-E900 (7.5), Nokia Lumia 800
10894
+ t.version('Windows Phone OS')>=7.0 ||
10895
+
10896
+ // Blackberry 7 - Tested on BlackBerry Torch 9810
10897
+ // Blackberry 6.0 - Tested on the Torch 9800 and Style 9670
10898
+ t.is('BlackBerry') && t.version('BlackBerry')>=6.0 ||
10899
+ // Blackberry Playbook (1.0-2.0) - Tested on PlayBook
10900
+ t.match('Playbook.*Tablet') ||
10901
+
10902
+ // Palm WebOS (1.4-2.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0)
10903
+ ( t.version('webOS')>=1.4 && t.match('Palm|Pre|Pixi') ) ||
10904
+ // Palm WebOS 3.0 - Tested on HP TouchPad
10905
+ t.match('hp.*TouchPad') ||
10906
+
10907
+ // Firefox Mobile (12 Beta) - Tested on Android 2.3 device
10908
+ ( t.is('Firefox') && t.version('Firefox')>=12 ) ||
10909
+
10910
+ // Chrome for Android - Tested on Android 4.0, 4.1 device
10911
+ ( t.is('Chrome') && t.is('AndroidOS') && t.version('Android')>=4.0 ) ||
10912
+
10913
+ // Skyfire 4.1 - Tested on Android 2.3 device
10914
+ ( t.is('Skyfire') && t.version('Skyfire')>=4.1 && t.is('AndroidOS') && t.version('Android')>=2.3 ) ||
10915
+
10916
+ // Opera Mobile 11.5-12: Tested on Android 2.3
10917
+ ( t.is('Opera') && t.version('Opera Mobi')>11 && t.is('AndroidOS') ) ||
10918
+
10919
+ // Meego 1.2 - Tested on Nokia 950 and N9
10920
+ t.is('MeeGoOS') ||
10921
+
10922
+ // Tizen (pre-release) - Tested on early hardware
10923
+ t.is('Tizen') ||
10924
+
10925
+ // Samsung Bada 2.0 - Tested on a Samsung Wave 3, Dolphin browser
10926
+ // @todo: more tests here!
10927
+ t.is('Dolfin') && t.version('Bada')>=2.0 ||
10928
+
10929
+ // UC Browser - Tested on Android 2.3 device
10930
+ ( (t.is('UC Browser') || t.is('Dolfin')) && t.version('Android')>=2.3 ) ||
10931
+
10932
+ // Kindle 3 and Fire - Tested on the built-in WebKit browser for each
10933
+ ( t.match('Kindle Fire') ||
10934
+ t.is('Kindle') && t.version('Kindle')>=3.0 ) ||
10935
+
10936
+ // Nook Color 1.4.1 - Tested on original Nook Color, not Nook Tablet
10937
+ t.is('AndroidOS') && t.is('NookTablet') ||
10938
+
10939
+ // Chrome Desktop 11-21 - Tested on OS X 10.7 and Windows 7
10940
+ t.version('Chrome')>=11 && !$isMobile ||
10941
+
10942
+ // Safari Desktop 4-5 - Tested on OS X 10.7 and Windows 7
10943
+ t.version('Safari')>=5.0 && !$isMobile ||
10944
+
10945
+ // Firefox Desktop 4-13 - Tested on OS X 10.7 and Windows 7
10946
+ t.version('Firefox')>=4.0 && !$isMobile ||
10947
+
10948
+ // Internet Explorer 7-9 - Tested on Windows XP, Vista and 7
10949
+ t.version('MSIE')>=7.0 && !$isMobile ||
10950
+
10951
+ // Opera Desktop 10-12 - Tested on OS X 10.7 and Windows 7
10952
+ // @reference: http://my.opera.com/community/openweb/idopera/
10953
+ t.version('Opera')>=10 && !$isMobile
10954
+
10955
+ ){
10956
+ return 'A';
10957
+ }
10958
+
10959
+ if (
10960
+ t.os('iOS') && t.version('iPad')<4.3 ||
10961
+ t.os('iOS') && t.version('iPhone')<3.1 ||
10962
+ t.os('iOS') && t.version('iPod')<3.1 ||
10963
+
10964
+ // Blackberry 5.0: Tested on the Storm 2 9550, Bold 9770
10965
+ t.is('Blackberry') && t.version('BlackBerry')>=5 && t.version('BlackBerry')<6 ||
10966
+
10967
+ //Opera Mini (5.0-6.5) - Tested on iOS 3.2/4.3 and Android 2.3
10968
+ ( t.version('Opera Mini')>=5.0 && t.version('Opera Mini')<=6.5 &&
10969
+ (t.version('Android')>=2.3 || t.is('iOS')) ) ||
10970
+
10971
+ // Nokia Symbian^3 - Tested on Nokia N8 (Symbian^3), C7 (Symbian^3), also works on N97 (Symbian^1)
10972
+ t.match('NokiaN8|NokiaC7|N97.*Series60|Symbian/3') ||
10973
+
10974
+ // @todo: report this (tested on Nokia N71)
10975
+ t.version('Opera Mobi')>=11 && t.is('SymbianOS')
10976
+ ){
10977
+ return 'B';
10978
+ }
10979
+
10980
+ if (
10981
+ // Blackberry 4.x - Tested on the Curve 8330
10982
+ t.version('BlackBerry')<5.0 ||
10983
+ // Windows Mobile - Tested on the HTC Leo (WinMo 5.2)
10984
+ t.match('MSIEMobile|Windows CE.*Mobile') || t.version('Windows Mobile')<=5.2
10985
+
10986
+ ){
10987
+ return 'C';
10988
+ }
10989
+
10990
+ //All older smartphone platforms and featurephones - Any device that doesn't support media queries
10991
+ //will receive the basic, C grade experience.
10992
+ return 'C';
10993
+ };
10994
+
10995
+ impl.detectOS = function (ua) {
10996
+ return impl.findMatch(impl.mobileDetectRules.oss0, ua) ||
10997
+ impl.findMatch(impl.mobileDetectRules.oss, ua);
10998
+ };
10999
+
11000
+ impl.getDeviceSmallerSide = function () {
11001
+ return window.screen.width < window.screen.height ?
11002
+ window.screen.width :
11003
+ window.screen.height;
11004
+ };
11005
+
11006
+ /**
11007
+ * Constructor for MobileDetect object.
11008
+ * <br>
11009
+ * Such an object will keep a reference to the given user-agent string and cache most of the detect queries.<br>
11010
+ * <div style="background-color: #d9edf7; border: 1px solid #bce8f1; color: #3a87ad; padding: 14px; border-radius: 2px; margin-top: 20px">
11011
+ * <strong>Find information how to download and install:</strong>
11012
+ * <a href="https://github.com/hgoebl/mobile-detect.js/">github.com/hgoebl/mobile-detect.js/</a>
11013
+ * </div>
11014
+ *
11015
+ * @example <pre>
11016
+ * var md = new MobileDetect(window.navigator.userAgent);
11017
+ * if (md.mobile()) {
11018
+ * location.href = (md.mobileGrade() === 'A') ? '/mobile/' : '/lynx/';
11019
+ * }
11020
+ * </pre>
11021
+ *
11022
+ * @param {string} userAgent typically taken from window.navigator.userAgent or http_header['User-Agent']
11023
+ * @param {number} [maxPhoneWidth=600] <strong>only for browsers</strong> specify a value for the maximum
11024
+ * width of smallest device side (in logical "CSS" pixels) until a device detected as mobile will be handled
11025
+ * as phone.
11026
+ * This is only used in cases where the device cannot be classified as phone or tablet.<br>
11027
+ * See <a href="http://developer.android.com/guide/practices/screens_support.html">Declaring Tablet Layouts
11028
+ * for Android</a>.<br>
11029
+ * If you provide a value < 0, then this "fuzzy" check is disabled.
11030
+ * @constructor
11031
+ * @global
11032
+ */
11033
+ function MobileDetect(userAgent, maxPhoneWidth) {
11034
+ this.ua = prepareUserAgent(userAgent);
11035
+ this._cache = {};
11036
+ //600dp is typical 7" tablet minimum width
11037
+ this.maxPhoneWidth = maxPhoneWidth || 600;
11038
+ }
11039
+
11040
+ MobileDetect.prototype = {
11041
+ constructor: MobileDetect,
11042
+
11043
+ /**
11044
+ * Returns the detected phone or tablet type or <tt>null</tt> if it is not a mobile device.
11045
+ * <br>
11046
+ * For a list of possible return values see {@link MobileDetect#phone} and {@link MobileDetect#tablet}.<br>
11047
+ * <br>
11048
+ * If the device is not detected by the regular expressions from Mobile-Detect, a test is made against
11049
+ * the patterns of <a href="http://detectmobilebrowsers.com/">detectmobilebrowsers.com</a>. If this test
11050
+ * is positive, a value of <code>UnknownPhone</code>, <code>UnknownTablet</code> or
11051
+ * <code>UnknownMobile</code> is returned.<br>
11052
+ * When used in browser, the decision whether phone or tablet is made based on <code>screen.width/height</code>.<br>
11053
+ * <br>
11054
+ * When used server-side (node.js), there is no way to tell the difference between <code>UnknownTablet</code>
11055
+ * and <code>UnknownMobile</code>, so you will get <code>UnknownMobile</code> here.<br>
11056
+ * Be aware that since v1.0.0 in this special case you will get <code>UnknownMobile</code> only for:
11057
+ * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}.
11058
+ * In versions before v1.0.0 all 3 methods returned <code>UnknownMobile</code> which was tedious to use.
11059
+ * <br>
11060
+ * In most cases you will use the return value just as a boolean.
11061
+ *
11062
+ * @returns {String} the key for the phone family or tablet family, e.g. "Nexus".
11063
+ * @function MobileDetect#mobile
11064
+ */
11065
+ mobile: function () {
11066
+ impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth);
11067
+ return this._cache.mobile;
11068
+ },
11069
+
11070
+ /**
11071
+ * Returns the detected phone type/family string or <tt>null</tt>.
11072
+ * <br>
11073
+ * The returned tablet (family or producer) is one of following keys:<br>
11074
+ * <br><tt>iPhone, BlackBerry, Pixel, HTC, Nexus, Dell, Motorola, Samsung, LG, Sony, Asus,
11075
+ * Xiaomi, NokiaLumia, Micromax, Palm, Vertu, Pantech, Fly, Wiko, iMobile,
11076
+ * SimValley, Wolfgang, Alcatel, Nintendo, Amoi, INQ, OnePlus, GenericPhone</tt><br>
11077
+ * <br>
11078
+ * If the device is not detected by the regular expressions from Mobile-Detect, a test is made against
11079
+ * the patterns of <a href="http://detectmobilebrowsers.com/">detectmobilebrowsers.com</a>. If this test
11080
+ * is positive, a value of <code>UnknownPhone</code> or <code>UnknownMobile</code> is returned.<br>
11081
+ * When used in browser, the decision whether phone or tablet is made based on <code>screen.width/height</code>.<br>
11082
+ * <br>
11083
+ * When used server-side (node.js), there is no way to tell the difference between <code>UnknownTablet</code>
11084
+ * and <code>UnknownMobile</code>, so you will get <code>null</code> here, while {@link MobileDetect#mobile}
11085
+ * will return <code>UnknownMobile</code>.<br>
11086
+ * Be aware that since v1.0.0 in this special case you will get <code>UnknownMobile</code> only for:
11087
+ * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}.
11088
+ * In versions before v1.0.0 all 3 methods returned <code>UnknownMobile</code> which was tedious to use.
11089
+ * <br>
11090
+ * In most cases you will use the return value just as a boolean.
11091
+ *
11092
+ * @returns {String} the key of the phone family or producer, e.g. "iPhone"
11093
+ * @function MobileDetect#phone
11094
+ */
11095
+ phone: function () {
11096
+ impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth);
11097
+ return this._cache.phone;
11098
+ },
11099
+
11100
+ /**
11101
+ * Returns the detected tablet type/family string or <tt>null</tt>.
11102
+ * <br>
11103
+ * The returned tablet (family or producer) is one of following keys:<br>
11104
+ * <br><tt>iPad, NexusTablet, GoogleTablet, SamsungTablet, Kindle, SurfaceTablet,
11105
+ * HPTablet, AsusTablet, BlackBerryTablet, HTCtablet, MotorolaTablet, NookTablet,
11106
+ * AcerTablet, ToshibaTablet, LGTablet, FujitsuTablet, PrestigioTablet,
11107
+ * LenovoTablet, DellTablet, YarvikTablet, MedionTablet, ArnovaTablet,
11108
+ * IntensoTablet, IRUTablet, MegafonTablet, EbodaTablet, AllViewTablet,
11109
+ * ArchosTablet, AinolTablet, NokiaLumiaTablet, SonyTablet, PhilipsTablet,
11110
+ * CubeTablet, CobyTablet, MIDTablet, MSITablet, SMiTTablet, RockChipTablet,
11111
+ * FlyTablet, bqTablet, HuaweiTablet, NecTablet, PantechTablet, BronchoTablet,
11112
+ * VersusTablet, ZyncTablet, PositivoTablet, NabiTablet, KoboTablet, DanewTablet,
11113
+ * TexetTablet, PlaystationTablet, TrekstorTablet, PyleAudioTablet, AdvanTablet,
11114
+ * DanyTechTablet, GalapadTablet, MicromaxTablet, KarbonnTablet, AllFineTablet,
11115
+ * PROSCANTablet, YONESTablet, ChangJiaTablet, GUTablet, PointOfViewTablet,
11116
+ * OvermaxTablet, HCLTablet, DPSTablet, VistureTablet, CrestaTablet,
11117
+ * MediatekTablet, ConcordeTablet, GoCleverTablet, ModecomTablet, VoninoTablet,
11118
+ * ECSTablet, StorexTablet, VodafoneTablet, EssentielBTablet, RossMoorTablet,
11119
+ * iMobileTablet, TolinoTablet, AudioSonicTablet, AMPETablet, SkkTablet,
11120
+ * TecnoTablet, JXDTablet, iJoyTablet, FX2Tablet, XoroTablet, ViewsonicTablet,
11121
+ * VerizonTablet, OdysTablet, CaptivaTablet, IconbitTablet, TeclastTablet,
11122
+ * OndaTablet, JaytechTablet, BlaupunktTablet, DigmaTablet, EvolioTablet,
11123
+ * LavaTablet, AocTablet, MpmanTablet, CelkonTablet, WolderTablet, MediacomTablet,
11124
+ * MiTablet, NibiruTablet, NexoTablet, LeaderTablet, UbislateTablet,
11125
+ * PocketBookTablet, KocasoTablet, HisenseTablet, Hudl, TelstraTablet,
11126
+ * GenericTablet</tt><br>
11127
+ * <br>
11128
+ * If the device is not detected by the regular expressions from Mobile-Detect, a test is made against
11129
+ * the patterns of <a href="http://detectmobilebrowsers.com/">detectmobilebrowsers.com</a>. If this test
11130
+ * is positive, a value of <code>UnknownTablet</code> or <code>UnknownMobile</code> is returned.<br>
11131
+ * When used in browser, the decision whether phone or tablet is made based on <code>screen.width/height</code>.<br>
11132
+ * <br>
11133
+ * When used server-side (node.js), there is no way to tell the difference between <code>UnknownTablet</code>
11134
+ * and <code>UnknownMobile</code>, so you will get <code>null</code> here, while {@link MobileDetect#mobile}
11135
+ * will return <code>UnknownMobile</code>.<br>
11136
+ * Be aware that since v1.0.0 in this special case you will get <code>UnknownMobile</code> only for:
11137
+ * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}.
11138
+ * In versions before v1.0.0 all 3 methods returned <code>UnknownMobile</code> which was tedious to use.
11139
+ * <br>
11140
+ * In most cases you will use the return value just as a boolean.
11141
+ *
11142
+ * @returns {String} the key of the tablet family or producer, e.g. "SamsungTablet"
11143
+ * @function MobileDetect#tablet
11144
+ */
11145
+ tablet: function () {
11146
+ impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth);
11147
+ return this._cache.tablet;
11148
+ },
11149
+
11150
+ /**
11151
+ * Returns the (first) detected user-agent string or <tt>null</tt>.
11152
+ * <br>
11153
+ * The returned user-agent is one of following keys:<br>
11154
+ * <br><tt>Chrome, Dolfin, Opera, Skyfire, Edge, IE, Firefox, Bolt, TeaShark, Blazer,
11155
+ * Safari, WeChat, UCBrowser, baiduboxapp, baidubrowser, DiigoBrowser, Mercury,
11156
+ * ObigoBrowser, NetFront, GenericBrowser, PaleMoon</tt><br>
11157
+ * <br>
11158
+ * In most cases calling {@link MobileDetect#userAgent} will be sufficient. But there are rare
11159
+ * cases where a mobile device pretends to be more than one particular browser. You can get the
11160
+ * list of all matches with {@link MobileDetect#userAgents} or check for a particular value by
11161
+ * providing one of the defined keys as first argument to {@link MobileDetect#is}.
11162
+ *
11163
+ * @returns {String} the key for the detected user-agent or <tt>null</tt>
11164
+ * @function MobileDetect#userAgent
11165
+ */
11166
+ userAgent: function () {
11167
+ if (this._cache.userAgent === undefined) {
11168
+ this._cache.userAgent = impl.findMatch(impl.mobileDetectRules.uas, this.ua);
11169
+ }
11170
+ return this._cache.userAgent;
11171
+ },
11172
+
11173
+ /**
11174
+ * Returns all detected user-agent strings.
11175
+ * <br>
11176
+ * The array is empty or contains one or more of following keys:<br>
11177
+ * <br><tt>Chrome, Dolfin, Opera, Skyfire, Edge, IE, Firefox, Bolt, TeaShark, Blazer,
11178
+ * Safari, WeChat, UCBrowser, baiduboxapp, baidubrowser, DiigoBrowser, Mercury,
11179
+ * ObigoBrowser, NetFront, GenericBrowser, PaleMoon</tt><br>
11180
+ * <br>
11181
+ * In most cases calling {@link MobileDetect#userAgent} will be sufficient. But there are rare
11182
+ * cases where a mobile device pretends to be more than one particular browser. You can get the
11183
+ * list of all matches with {@link MobileDetect#userAgents} or check for a particular value by
11184
+ * providing one of the defined keys as first argument to {@link MobileDetect#is}.
11185
+ *
11186
+ * @returns {Array} the array of detected user-agent keys or <tt>[]</tt>
11187
+ * @function MobileDetect#userAgents
11188
+ */
11189
+ userAgents: function () {
11190
+ if (this._cache.userAgents === undefined) {
11191
+ this._cache.userAgents = impl.findMatches(impl.mobileDetectRules.uas, this.ua);
11192
+ }
11193
+ return this._cache.userAgents;
11194
+ },
11195
+
11196
+ /**
11197
+ * Returns the detected operating system string or <tt>null</tt>.
11198
+ * <br>
11199
+ * The operating system is one of following keys:<br>
11200
+ * <br><tt>AndroidOS, BlackBerryOS, PalmOS, SymbianOS, WindowsMobileOS, WindowsPhoneOS,
11201
+ * iOS, iPadOS, SailfishOS, MeeGoOS, MaemoOS, JavaOS, webOS, badaOS, BREWOS</tt><br>
11202
+ *
11203
+ * @returns {String} the key for the detected operating system.
11204
+ * @function MobileDetect#os
11205
+ */
11206
+ os: function () {
11207
+ if (this._cache.os === undefined) {
11208
+ this._cache.os = impl.detectOS(this.ua);
11209
+ }
11210
+ return this._cache.os;
11211
+ },
11212
+
11213
+ /**
11214
+ * Get the version (as Number) of the given property in the User-Agent.
11215
+ * <br>
11216
+ * Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31)
11217
+ *
11218
+ * @param {String} key a key defining a thing which has a version.<br>
11219
+ * You can use one of following keys:<br>
11220
+ * <br><tt>Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast,
11221
+ * Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini,
11222
+ * Opera Mobi, UCBrowser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser,
11223
+ * SamsungBrowser, Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon,
11224
+ * SailfishBrowser, Gecko, Trident, Presto, Goanna, iOS, Android, Sailfish,
11225
+ * BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows CE, Windows
11226
+ * NT, Symbian, webOS</tt><br>
11227
+ *
11228
+ * @returns {Number} the version as float or <tt>NaN</tt> if User-Agent doesn't contain this version.
11229
+ * Be careful when comparing this value with '==' operator!
11230
+ * @function MobileDetect#version
11231
+ */
11232
+ version: function (key) {
11233
+ return impl.getVersion(key, this.ua);
11234
+ },
11235
+
11236
+ /**
11237
+ * Get the version (as String) of the given property in the User-Agent.
11238
+ * <br>
11239
+ *
11240
+ * @param {String} key a key defining a thing which has a version.<br>
11241
+ * You can use one of following keys:<br>
11242
+ * <br><tt>Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast,
11243
+ * Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini,
11244
+ * Opera Mobi, UCBrowser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser,
11245
+ * SamsungBrowser, Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon,
11246
+ * SailfishBrowser, Gecko, Trident, Presto, Goanna, iOS, Android, Sailfish,
11247
+ * BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows CE, Windows
11248
+ * NT, Symbian, webOS</tt><br>
11249
+ *
11250
+ * @returns {String} the "raw" version as String or <tt>null</tt> if User-Agent doesn't contain this version.
11251
+ *
11252
+ * @function MobileDetect#versionStr
11253
+ */
11254
+ versionStr: function (key) {
11255
+ return impl.getVersionStr(key, this.ua);
11256
+ },
11257
+
11258
+ /**
11259
+ * Global test key against userAgent, os, phone, tablet and some other properties of userAgent string.
11260
+ *
11261
+ * @param {String} key the key (case-insensitive) of a userAgent, an operating system, phone or
11262
+ * tablet family.<br>
11263
+ * For a complete list of possible values, see {@link MobileDetect#userAgent},
11264
+ * {@link MobileDetect#os}, {@link MobileDetect#phone}, {@link MobileDetect#tablet}.<br>
11265
+ * Additionally you have following keys:<br>
11266
+ * <br><tt>Bot, MobileBot, DesktopMode, TV, WebKit, Console, Watch</tt><br>
11267
+ *
11268
+ * @returns {boolean} <tt>true</tt> when the given key is one of the defined keys of userAgent, os, phone,
11269
+ * tablet or one of the listed additional keys, otherwise <tt>false</tt>
11270
+ * @function MobileDetect#is
11271
+ */
11272
+ is: function (key) {
11273
+ return containsIC(this.userAgents(), key) ||
11274
+ equalIC(key, this.os()) ||
11275
+ equalIC(key, this.phone()) ||
11276
+ equalIC(key, this.tablet()) ||
11277
+ containsIC(impl.findMatches(impl.mobileDetectRules.utils, this.ua), key);
11278
+ },
11279
+
11280
+ /**
11281
+ * Do a quick test against navigator::userAgent.
11282
+ *
11283
+ * @param {String|RegExp} pattern the pattern, either as String or RegExp
11284
+ * (a string will be converted to a case-insensitive RegExp).
11285
+ * @returns {boolean} <tt>true</tt> when the pattern matches, otherwise <tt>false</tt>
11286
+ * @function MobileDetect#match
11287
+ */
11288
+ match: function (pattern) {
11289
+ if (!(pattern instanceof RegExp)) {
11290
+ pattern = new RegExp(pattern, 'i');
11291
+ }
11292
+ return pattern.test(this.ua);
11293
+ },
11294
+
11295
+ /**
11296
+ * Checks whether the mobile device can be considered as phone regarding <code>screen.width</code>.
11297
+ * <br>
11298
+ * Obviously this method makes sense in browser environments only (not for Node.js)!
11299
+ * @param {number} [maxPhoneWidth] the maximum logical pixels (aka. CSS-pixels) to be considered as phone.<br>
11300
+ * The argument is optional and if not present or falsy, the value of the constructor is taken.
11301
+ * @returns {boolean|undefined} <code>undefined</code> if screen size wasn't detectable, else <code>true</code>
11302
+ * when screen.width is less or equal to maxPhoneWidth, otherwise <code>false</code>.<br>
11303
+ * Will always return <code>undefined</code> server-side.
11304
+ */
11305
+ isPhoneSized: function (maxPhoneWidth) {
11306
+ return MobileDetect.isPhoneSized(maxPhoneWidth || this.maxPhoneWidth);
11307
+ },
11308
+
11309
+ /**
11310
+ * Returns the mobile grade ('A', 'B', 'C').
11311
+ *
11312
+ * @returns {String} one of the mobile grades ('A', 'B', 'C').
11313
+ * @function MobileDetect#mobileGrade
11314
+ */
11315
+ mobileGrade: function () {
11316
+ if (this._cache.grade === undefined) {
11317
+ this._cache.grade = impl.mobileGrade(this);
11318
+ }
11319
+ return this._cache.grade;
11320
+ }
11321
+ };
11322
+
11323
+ // environment-dependent
11324
+ if (typeof window !== 'undefined' && window.screen) {
11325
+ MobileDetect.isPhoneSized = function (maxPhoneWidth) {
11326
+ return maxPhoneWidth < 0 ? undefined : impl.getDeviceSmallerSide() <= maxPhoneWidth;
11327
+ };
11328
+ } else {
11329
+ MobileDetect.isPhoneSized = function () {};
11330
+ }
11331
+
11332
+ // should not be replaced by a completely new object - just overwrite existing methods
11333
+ MobileDetect._impl = impl;
11334
+
11335
+ MobileDetect.version = '1.4.5 2021-03-13';
11336
+
11337
+ return MobileDetect;
11338
+ }); // end of call of define()
11339
+ })((function (undefined) {
11340
+ if ( true && module.exports) {
11341
+ return function (factory) { module.exports = factory(); };
11342
+ } else if (true) {
11343
+ return __webpack_require__.amdD;
11344
+ } else {}
11345
+ })());
11346
+
11347
+ /***/ }),
11348
+
10337
11349
  /***/ 6659:
10338
11350
  /***/ (function(module) {
10339
11351
 
@@ -10664,6 +11676,13 @@ module.exports = require("vue");
10664
11676
  /******/ }
10665
11677
  /******/
10666
11678
  /************************************************************************/
11679
+ /******/ /* webpack/runtime/amd define */
11680
+ /******/ !function() {
11681
+ /******/ __webpack_require__.amdD = function () {
11682
+ /******/ throw new Error('define cannot be used indirect');
11683
+ /******/ };
11684
+ /******/ }();
11685
+ /******/
10667
11686
  /******/ /* webpack/runtime/compat get default export */
10668
11687
  /******/ !function() {
10669
11688
  /******/ // getDefaultExport function for compatibility with non-harmony modules
@@ -11008,7 +12027,7 @@ var web_url_search_params_size = __webpack_require__(2062);
11008
12027
  // import {postWeb} from "./http.js";
11009
12028
  // import helper from "./helper";
11010
12029
 
11011
-
12030
+ let MobileDetect = __webpack_require__(2437);
11012
12031
  /**
11013
12032
  * 字典排序
11014
12033
  * @param <Object> dict
@@ -11819,7 +12838,46 @@ function getVueVersion() {
11819
12838
  version = Vue.version || 'undefined';
11820
12839
  return version;
11821
12840
  }
12841
+ function getDeviceEnv() {
12842
+ function isIpad() {
12843
+ var ua = window.navigator.userAgent;
12844
+ var IsIPad = false;
12845
+ if (/ipad/i.test(ua)) {
12846
+ IsIPad = true;
12847
+ }
12848
+ // iPad from IOS13
12849
+ var macApp = ua.match(/Macintosh/i) != null;
12850
+ if (macApp) {
12851
+ // need to distinguish between Macbook and iPad
12852
+ var canvas = document.createElement('canvas');
12853
+ if (canvas != null) {
12854
+ var context = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
12855
+ if (context) {
12856
+ var info = context.getExtension('WEBGL_debug_renderer_info');
12857
+ if (info) {
12858
+ var renderer = context.getParameter(info.UNMASKED_RENDERER_WEBGL);
12859
+ if (renderer.indexOf('Apple') != -1) IsIPad = true;
12860
+ }
12861
+ }
12862
+ }
12863
+ }
12864
+ return IsIPad;
12865
+ }
12866
+ let env = '';
12867
+ let md = new MobileDetect(window.navigator.userAgent); //初始化mobile-detect
12868
+ let os = md.os(); //获取系统
12869
+ if (os) {
12870
+ os = os.toLowerCase();
12871
+ }
12872
+ if (os === 'ios' || os === 'androidos' || isIpad()) {
12873
+ env = 'mobile';
12874
+ } else {
12875
+ env = 'pc';
12876
+ }
12877
+ return env;
12878
+ }
11822
12879
  /* harmony default export */ var js_fun = ({
12880
+ getDeviceEnv,
11823
12881
  getVueVersion,
11824
12882
  getToken,
11825
12883
  getQueryVariable,
@@ -15202,6 +16260,379 @@ var index = {
15202
16260
  const Question_Programming_exports_ = /*#__PURE__*/(0,exportHelper/* default */.Z)(Question_Programmingvue_type_script_lang_js, [['render',Question_Programmingvue_type_template_id_66006ba2_render]])
15203
16261
 
15204
16262
  /* harmony default export */ var Question_Programming = (Question_Programming_exports_);
16263
+ ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[4]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/questions/Question_Classify.vue?vue&type=template&id=08b2b52d
16264
+
16265
+ const Question_Classifyvue_type_template_id_08b2b52d_hoisted_1 = {
16266
+ class: "zykjcommon-question",
16267
+ style: {
16268
+ "width": "100%",
16269
+ "height": "100%"
16270
+ }
16271
+ };
16272
+ const Question_Classifyvue_type_template_id_08b2b52d_hoisted_2 = {
16273
+ class: "question-classify"
16274
+ };
16275
+ const Question_Classifyvue_type_template_id_08b2b52d_hoisted_3 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_.createStaticVNode)("<div class=\"box\"><div class=\"box-item\"><div class=\"main-block\"></div><div class=\"main-content\"><div class=\"main-append\"></div></div></div><div class=\"box-item\"><div class=\"main-block\"></div><div class=\"main-content\"><div class=\"main-append\"></div></div></div></div>", 1);
16276
+ const Question_Classifyvue_type_template_id_08b2b52d_hoisted_4 = {
16277
+ class: "list-outter"
16278
+ };
16279
+ const Question_Classifyvue_type_template_id_08b2b52d_hoisted_5 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_.createElementVNode)("div", {
16280
+ class: "prev"
16281
+ }, [/*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_.createElementVNode)("div", {
16282
+ class: "prev-main"
16283
+ })], -1);
16284
+ const Question_Classifyvue_type_template_id_08b2b52d_hoisted_6 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_.createElementVNode)("div", {
16285
+ class: "next"
16286
+ }, [/*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_.createElementVNode)("div", {
16287
+ class: "next-main"
16288
+ })], -1);
16289
+ const Question_Classifyvue_type_template_id_08b2b52d_hoisted_7 = {
16290
+ class: "list"
16291
+ };
16292
+ const Question_Classifyvue_type_template_id_08b2b52d_hoisted_8 = {
16293
+ class: "list-item-text"
16294
+ };
16295
+ function Question_Classifyvue_type_template_id_08b2b52d_render(_ctx, _cache, $props, $setup, $data, $options) {
16296
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createElementBlock)("div", Question_Classifyvue_type_template_id_08b2b52d_hoisted_1, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.createElementVNode)("div", Question_Classifyvue_type_template_id_08b2b52d_hoisted_2, [Question_Classifyvue_type_template_id_08b2b52d_hoisted_3, (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createElementVNode)("div", Question_Classifyvue_type_template_id_08b2b52d_hoisted_4, [Question_Classifyvue_type_template_id_08b2b52d_hoisted_5, Question_Classifyvue_type_template_id_08b2b52d_hoisted_6, (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createElementVNode)("div", Question_Classifyvue_type_template_id_08b2b52d_hoisted_7, [((0,external_commonjs_vue_commonjs2_vue_root_Vue_.openBlock)(true), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createElementBlock)(external_commonjs_vue_commonjs2_vue_root_Vue_.Fragment, null, (0,external_commonjs_vue_commonjs2_vue_root_Vue_.renderList)($data.list, (item, index) => {
16297
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createElementBlock)("div", {
16298
+ class: "list-item",
16299
+ key: index
16300
+ }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.createElementVNode)("div", Question_Classifyvue_type_template_id_08b2b52d_hoisted_8, (0,external_commonjs_vue_commonjs2_vue_root_Vue_.toDisplayString)(item.name), 1)]);
16301
+ }), 128))])])])]);
16302
+ }
16303
+ ;// CONCATENATED MODULE: ./src/components/questions/Question_Classify.vue?vue&type=template&id=08b2b52d
16304
+
16305
+ ;// CONCATENATED MODULE: ./src/assets/js/rem.js
16306
+ /**
16307
+ * Created by Allen Liu on 2022/3/31.
16308
+ */
16309
+
16310
+ let setRem = function () {
16311
+ //动态设置html的font-size ----start
16312
+ let designWidth = 1440;
16313
+ let baseNum = 100;
16314
+ function setRootFontSize() {
16315
+ let winWidth = document.documentElement.clientWidth || document.body.clientWidth;
16316
+ let winHeight = document.documentElement.clientHeight || document.body.clientHeight;
16317
+ let html = document.getElementsByTagName('html')[0];
16318
+ /*if(winWidth>=1000){
16319
+ winWidth = 1000
16320
+ }*/
16321
+ let frameBili = 4 / 3;
16322
+ let b = frameBili / (winWidth / winHeight);
16323
+ // let realW = parseInt(winWidth * b)
16324
+ let realW = winWidth - 50;
16325
+ // console.log(realW,3333333333333);
16326
+
16327
+ html.style.fontSize = realW / designWidth * baseNum + 'px';
16328
+ // console.log(html.style.fontSize);
16329
+ }
16330
+
16331
+ setRootFontSize();
16332
+ window.addEventListener('resize', e => {
16333
+ setRootFontSize();
16334
+ });
16335
+ //动态设置html的font-size ----end
16336
+ };
16337
+
16338
+ let setRemFixedHeight = function (designWidth = 1440, repairH = 0, scale = 1) {
16339
+ let baseNum = 100;
16340
+ let winWidth = document.documentElement.clientWidth || document.body.clientWidth;
16341
+ let winHeight = document.documentElement.clientHeight || document.body.clientHeight;
16342
+ winHeight = winHeight - repairH;
16343
+ let html = document.getElementsByTagName('html')[0];
16344
+ let frameBili = 4 / 3;
16345
+ let b = frameBili / (winWidth / winHeight);
16346
+ let realW = parseInt(winWidth * b);
16347
+ html.style.fontSize = realW / designWidth * baseNum * scale + 'px';
16348
+ console.log(html.style.fontSize);
16349
+ };
16350
+ ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/questions/Question_Classify.vue?vue&type=script&lang=js
16351
+
16352
+
16353
+
16354
+ let env = js_fun.getDeviceEnv();
16355
+ /* harmony default export */ var Question_Classifyvue_type_script_lang_js = ({
16356
+ name: 'Question_Classify',
16357
+ props: {
16358
+ questionInfo: {
16359
+ type: Object,
16360
+ default: {}
16361
+ },
16362
+ bus: {
16363
+ type: Object,
16364
+ default: {}
16365
+ },
16366
+ mode: {
16367
+ type: String,
16368
+ default: 'exam'
16369
+ }
16370
+ },
16371
+ created() {
16372
+ this.setRootFontSize();
16373
+ window.addEventListener('resize', this.setRootFontSize);
16374
+ },
16375
+ unmounted() {
16376
+ this.unmountedDo();
16377
+ },
16378
+ destroyed() {
16379
+ this.unmountedDo();
16380
+ },
16381
+ mounted() {
16382
+ this.init();
16383
+ this.$watch('list', nv => {
16384
+ if (nv && nv.length) {
16385
+ this.$nextTick(() => {
16386
+ this.dothings();
16387
+ });
16388
+ }
16389
+ });
16390
+ setTimeout(() => {
16391
+ this.list = [{
16392
+ name: '每年春夏秋冬季节变化'
16393
+ }, {
16394
+ name: '音乐播放10次'
16395
+ }, {
16396
+ name: '把10个梨子放进篮子'
16397
+ }, {
16398
+ name: '音乐播放9次'
16399
+ }, {
16400
+ name: '把9个梨子放进篮子'
16401
+ }, {
16402
+ name: '音乐播放8次'
16403
+ }, {
16404
+ name: '把8个梨子放进篮子'
16405
+ }, {
16406
+ name: '音乐播放6次'
16407
+ }];
16408
+ }, 500);
16409
+ },
16410
+ data() {
16411
+ return {
16412
+ analyCorrectAnswer: '',
16413
+ exam_options_data: [],
16414
+ answerMap: {},
16415
+ list: [],
16416
+ env,
16417
+ p1: {},
16418
+ //存mousedown相关
16419
+ p2: {},
16420
+ //存mousemove相关
16421
+ listItem: null,
16422
+ moveDiv: null,
16423
+ timer: null,
16424
+ mousedown: env === 'mobile' ? 'touchstart' : 'mousedown',
16425
+ mousemove: env === 'mobile' ? 'touchmove' : 'mousemove',
16426
+ mouseup: env === 'mobile' ? 'touchend' : 'mouseup',
16427
+ dragWay: '',
16428
+ flag: false,
16429
+ scrollDistance: 3000 //设置一个死的滚动距离,保证能滚到底,目前够用
16430
+ };
16431
+ },
16432
+
16433
+ watch: {},
16434
+ computed: {},
16435
+ methods: {
16436
+ setRootFontSize() {
16437
+ setRemFixedHeight(1000, 140, 1.08);
16438
+ },
16439
+ unmountedDo() {
16440
+ window.removeEventListener('resize', this.setRootFontSize);
16441
+ document.removeEventListener('gesturestart', this.gesturestartListener);
16442
+ $('.question-classify .append-item').off(this.mousedown);
16443
+ $('.question-classify .list-item').off(this.mousedown);
16444
+ $(document).off(this.mouseup);
16445
+ let html = document.getElementsByTagName("html")[0];
16446
+ html.style.fontSize = "";
16447
+ },
16448
+ gesturestartListener(event) {
16449
+ event.preventDefault();
16450
+ },
16451
+ init() {
16452
+ //禁止ios10以上缩放页面
16453
+ if (env === 'mobile') {
16454
+ document.addEventListener('gesturestart', this.gesturestartListener);
16455
+ }
16456
+ },
16457
+ getSpecArr() {
16458
+ let self = this;
16459
+ let specArr = [];
16460
+ let moveDivLeft = self.moveDiv.offset().left;
16461
+ let moveDivLeftEnd = moveDivLeft + self.moveDiv.width();
16462
+ let moveDivTop = self.moveDiv.offset().top;
16463
+ let moveDivTopEnd = moveDivTop + self.moveDiv.height();
16464
+ $('.box-item').each((index, item) => {
16465
+ let boxItem = $(item);
16466
+ let boxLeft = boxItem.offset().left;
16467
+ let boxLeftEnd = boxLeft + boxItem.width();
16468
+ let boxTop = boxItem.offset().top;
16469
+ let boxTopEnd = boxTop + boxItem.height();
16470
+ if (moveDivLeft > boxLeft && moveDivLeftEnd < boxLeftEnd && moveDivTop > boxTop && moveDivTopEnd < boxTopEnd) {
16471
+ specArr.push({
16472
+ dom: boxItem
16473
+ });
16474
+ }
16475
+ });
16476
+ return specArr;
16477
+ },
16478
+ bindDragDomEvent(appendItem, way) {
16479
+ let self = this;
16480
+ appendItem.on(this.mousedown, function (e) {
16481
+ if (self.moveDiv) {
16482
+ return;
16483
+ }
16484
+ self.flag = false;
16485
+ self.dragWay = way;
16486
+ console.log(e);
16487
+ e.stopPropagation();
16488
+ e.preventDefault();
16489
+ self.listItem = $(this);
16490
+ self.listItem.addClass('drag');
16491
+ self.p1.moveX = self.listItem.offset().left;
16492
+ self.p1.moveY = self.listItem.offset().top - 30;
16493
+ console.log(this.p1);
16494
+ self.moveDiv = $(`<div class="question-classify-moveDiv"><div class="list-item-text">${self.listItem.find('.list-item-text').text()}</div></div>`);
16495
+ self.moveDiv.css({
16496
+ left: `${self.p1.moveX}px`,
16497
+ top: `${self.p1.moveY}px`
16498
+ });
16499
+ $('body').append(self.moveDiv);
16500
+ $(document).on(self.mousemove, function (e2) {
16501
+ // e2.preventDefault()
16502
+ e2.stopPropagation();
16503
+ self.p2.moveX = e2.clientX || e2.originalEvent.touches && e2.originalEvent.touches[0].clientX;
16504
+ self.p2.moveY = e2.clientY || e2.originalEvent.touches && e2.originalEvent.touches[0].clientY;
16505
+ let curX = self.p2.moveX - self.moveDiv.width() / 2;
16506
+ let curY = self.p2.moveY - self.moveDiv.height() / 2;
16507
+ self.moveDiv.css({
16508
+ left: curX + 'px',
16509
+ top: curY + 'px'
16510
+ });
16511
+ });
16512
+ });
16513
+ },
16514
+ appendMoveDiv(options) {
16515
+ let self = this;
16516
+ self.listItem.remove();
16517
+ let appendItem = $(`<div class="${options.appendItemClassName}"><div class="list-item-text">${self.moveDiv.find('.list-item-text').text()}</div></div>`);
16518
+ appendItem.css({
16519
+ opacity: 0
16520
+ });
16521
+ options.targetList.append(appendItem);
16522
+ options.targetList[options.scrollDirection](self.scrollDistance);
16523
+ let appendLeft = appendItem.offset().left;
16524
+ let appendTop = appendItem.offset().top;
16525
+ //transitionend事件会执行2次,所以使用标记避免
16526
+ self.moveDiv.css({
16527
+ transition: 'all 0.5s',
16528
+ left: appendLeft,
16529
+ top: appendTop
16530
+ }).on('transitionend', function () {
16531
+ if (!self.flag) {
16532
+ self.moveDiv.remove();
16533
+ self.moveDiv.off('transitionend');
16534
+ self.moveDiv = null;
16535
+ appendItem.css({
16536
+ opacity: 1
16537
+ });
16538
+ self.bindDragDomEvent(appendItem, options.op);
16539
+ }
16540
+ self.flag = true;
16541
+ });
16542
+ },
16543
+ bindNextPrevEvent(type) {
16544
+ $(`.question-classify .${type}`).on('click', function (e) {
16545
+ e.stopPropagation();
16546
+ e.preventDefault();
16547
+ let listItem = $('.question-classify .list-item');
16548
+ let list = $('.question-classify .list');
16549
+ let w = listItem.outerWidth() * (type === 'next' ? 1 : -1);
16550
+ let scrollLeft = list.scrollLeft();
16551
+ console.log(scrollLeft);
16552
+ $('.question-classify .list').stop(true).animate({
16553
+ scrollLeft: scrollLeft + w
16554
+ }, 500);
16555
+ });
16556
+ },
16557
+ dothings() {
16558
+ let self = this;
16559
+ self.bindDragDomEvent($('.question-classify .list-item'), 'go');
16560
+ $(document).on(self.mouseup, function (e) {
16561
+ // e.preventDefault()
16562
+ if (self.dragWay === 'go') {
16563
+ $(document).off(self.mousemove);
16564
+ self.listItem && self.listItem.removeClass('drag');
16565
+ if (self.moveDiv) {
16566
+ let specArr = self.getSpecArr();
16567
+ if (specArr.length === 0) {
16568
+ //没进框内,回到原位
16569
+ if (self.moveDiv) {
16570
+ self.moveDiv.remove();
16571
+ self.moveDiv = null;
16572
+ }
16573
+ } else {
16574
+ let appendItemBox = specArr[0].dom;
16575
+ self.appendMoveDiv({
16576
+ targetList: appendItemBox.find('.main-append'),
16577
+ appendItemClassName: 'append-item',
16578
+ op: 'back',
16579
+ scrollDirection: 'scrollTop'
16580
+ });
16581
+ }
16582
+ }
16583
+ } else if (self.dragWay === 'back') {
16584
+ $(document).off(self.mousemove);
16585
+ self.listItem && self.listItem.removeClass('drag');
16586
+ if (self.moveDiv) {
16587
+ let specArr = self.getSpecArr();
16588
+ //0说明都不在两个框内 1说明在其中一个框内
16589
+ if (specArr.length === 0) {
16590
+ self.appendMoveDiv({
16591
+ targetList: $('.question-classify .list'),
16592
+ appendItemClassName: 'list-item',
16593
+ op: 'go',
16594
+ scrollDirection: 'scrollLeft'
16595
+ });
16596
+ } else {
16597
+ let appendItemBox = specArr[0].dom;
16598
+ let curAppendItemBox = self.listItem.parents('.question-classify .box-item');
16599
+ if (appendItemBox.get(0) === curAppendItemBox.get(0)) {
16600
+ console.log('自己');
16601
+ self.moveDiv.remove();
16602
+ self.moveDiv = null;
16603
+ self.listItem && self.listItem.removeClass('drag');
16604
+ } else {
16605
+ console.log('不是自己');
16606
+ self.appendMoveDiv({
16607
+ targetList: appendItemBox.find('.main-append'),
16608
+ appendItemClassName: 'append-item',
16609
+ op: 'back',
16610
+ scrollDirection: 'scrollTop'
16611
+ });
16612
+ console.log('不是自己');
16613
+ }
16614
+ }
16615
+ console.log(specArr.length);
16616
+ }
16617
+ }
16618
+ });
16619
+ self.bindNextPrevEvent('next');
16620
+ self.bindNextPrevEvent('prev');
16621
+ }
16622
+ },
16623
+ components: {}
16624
+ });
16625
+ ;// CONCATENATED MODULE: ./src/components/questions/Question_Classify.vue?vue&type=script&lang=js
16626
+
16627
+ ;// CONCATENATED MODULE: ./src/components/questions/Question_Classify.vue
16628
+
16629
+
16630
+
16631
+
16632
+ ;
16633
+ const Question_Classify_exports_ = /*#__PURE__*/(0,exportHelper/* default */.Z)(Question_Classifyvue_type_script_lang_js, [['render',Question_Classifyvue_type_template_id_08b2b52d_render]])
16634
+
16635
+ /* harmony default export */ var Question_Classify = (Question_Classify_exports_);
15205
16636
  ;// CONCATENATED MODULE: ./src/components/questions/const.js
15206
16637
  /**
15207
16638
  * Created by Allen Liu on 2022/4/22.
@@ -15220,7 +16651,9 @@ let questionMapper = {
15220
16651
  //编程
15221
16652
  '11': 'Question_Reading',
15222
16653
  //阅读
15223
- '4': 'Question_FillBlank' //填空
16654
+ '4': 'Question_FillBlank',
16655
+ //填空
16656
+ '17': 'Question_Classify' //分类
15224
16657
  };
15225
16658
  // EXTERNAL MODULE: ./node_modules/crypto-js/index.js
15226
16659
  var crypto_js = __webpack_require__(1354);
@@ -15499,6 +16932,7 @@ const state = {
15499
16932
 
15500
16933
 
15501
16934
 
16935
+
15502
16936
  /* harmony default export */ function buildEntry(store) {
15503
16937
  //动态注册store
15504
16938
  store.registerModule('zykjcommonQuestions', questions_store);
@@ -15611,13 +17045,15 @@ const state = {
15611
17045
  Vue.component('Question_BriefAnswer', Question_BriefAnswer);
15612
17046
  Vue.component('Question_FillBlank', Question_FillBlank);
15613
17047
  Vue.component('Question_Programming', Question_Programming);
17048
+ Vue.component('Question_Classify', Question_Classify);
15614
17049
  },
15615
17050
  Question_SingleChoice: Question_SingleChoice,
15616
17051
  Question_MultipleChoice: Question_MultipleChoice,
15617
17052
  Question_Reading: Question_Reading,
15618
17053
  Question_BriefAnswer: Question_BriefAnswer,
15619
17054
  Question_FillBlank: Question_FillBlank,
15620
- Question_Programming: Question_Programming
17055
+ Question_Programming: Question_Programming,
17056
+ Question_Classify: Question_Classify
15621
17057
  };
15622
17058
  }
15623
17059
  ;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js