Skip to content
Snippets Groups Projects
Commit 1cbc5405 authored by Brian Weaver's avatar Brian Weaver
Browse files

Re-add mobile_device_detection without composer (removal broke sites)

parent 3df30a09
No related branches found
No related tags found
No related merge requests found
Showing
with 1044 additions and 0 deletions
CONTENTS OF THIS FILE
---------------------
* Introduction
* Requirements
* Installation
* Configuration
* Usage
* Maintainers
INTRODUCTION
------------
"Mobile device detection" module can detect any mobile device. You can use it
via service or "Views". This module integrate with "Views" and you can easily
to switch "Views display" for different devices.
* For a full description of the module, visit the project page:
https://www.drupal.org/project/mobile_device_detection
REQUIREMENTS
------------
-No special requirements.
INSTALLATION
------------
* Module: Install as you would normally install a contributed Drupal module.
See: https://www.drupal.org/documentation/install/modules-themes/modules-8
for further information.
CONFIGURATION
-------------
The module has no menu or modifiable settings. There is no configuration.
USAGE
-------------
Initialization
$detection_service = \Drupal::service('mobile_device_detection.object');
You can to use a couple of methods to check devices
if($detection_service->isMobile()){
If is mobile then you can get object
$detection_service->getObject();
}
if($detection_service->isTablet()){
If is tablet then you can get object
$detection_service->getObject();
}
MAINTAINERS
-----------
Current maintainers:
* Victor Isaikin - https://www.drupal.org/u/depthinteractive
* Site - https://depthinteractive.ru
attributes:
DETECTION_TYPE_MOBILE: mobile
DETECTION_TYPE_EXTENDED: extended
VER: ([\w._\+]+)
MOBILE_GRADE_A: A
MOBILE_GRADE_B: B
MOBILE_GRADE_C: C
VERSION: 2.8.33
VERSION_TYPE_STRING: text
VERSION_TYPE_FLOAT: float
mobile_headers:
HTTP_ACCEPT:
- application/x-obml2d
- application/vnd.rim.html
- text/vnd.wap.wml
- application/vnd.wap.xhtml+xml
HTTP_X_WAP_PROFILE: null
HTTP_X_WAP_CLIENTID: null
HTTP_WAP_CONNECTION: null
HTTP_PROFILE: null
HTTP_X_OPERAMINI_PHONE_UA: null
HTTP_X_NOKIA_GATEWAY_ID: null
HTTP_X_ORANGE_ID: null
HTTP_X_VODAFONE_3GPDPCONTEXT: null
HTTP_X_HUAWEI_USERID: null
HTTP_UA_OS: null
HTTP_X_MOBILE_GATEWAY: null
HTTP_X_ATT_DEVICEID: null
HTTP_UA_CPU:
matches:
- ARM
phone_devices:
iPhone: \biPhone\b|\biPod\b
BlackBerry: BlackBerry|\bBB10\b|rim[0-9]+
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
Nexus: Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6
Dell: Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\b001DL\b|\b101DL\b|\bGS01\b
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
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
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)
Sony: SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533|E5823
Asus: Asus.*Galaxy|PadFone.*Mobile
NokiaLumia: Lumia [0-9]{3,4}
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
Palm: PalmSource|Palm
Vertu: Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature
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
Fly: IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250
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
iMobile: i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)
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
Wolfgang: AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q
Alcatel: Alcatel
Nintendo: Nintendo (3DS|Switch)
Amoi: Amoi
INQ: INQ
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
tablet_devices:
iPad: iPad|iPad.*Mobile
NexusTablet: Android.*Nexus[\s]+(7|9|10)
GoogleTablet: Android.*Pixel C
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
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)
SurfaceTablet: Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)
HPTablet: HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10
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
BlackBerryTablet: PlayBook|RIM Tablet
HTCtablet: HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410
MotorolaTablet: xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617
NookTablet: Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2
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
ToshibaTablet: Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO
LGTablet: \bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\b
FujitsuTablet: Android.*\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\b
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
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-X304F|TB-X304L|TB-8703F|Tab2A7-10F|TB2-X30L
DellTablet: Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7
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
MedionTablet: Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB
ArnovaTablet: 97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2
IntensoTablet: INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004
IRUTablet: M702pro
MegafonTablet: MegaFon V9|\bZTE V9\b|Android.*\bMT7A\b
EbodaTablet: E-Boda (Supreme|Impresspeed|Izzycomm|Essential)
AllViewTablet: Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)
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
AinolTablet: NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark
NokiaLumiaTablet: Lumia 2520
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
PhilipsTablet: \b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\b
CubeTablet: Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT
CobyTablet: MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010
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
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
SMiTTablet: Android.*(\bMID\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)
RockChipTablet: Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A
FlyTablet: IQ310|Fly Vision
bqTablet: Android.*(bq)?.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))|Maxwell.*Lite|Maxwell.*Plus
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
NecTablet: \bN-06D|\bN-08D
PantechTablet: Pantech.*P4100
BronchoTablet: Broncho.*(N701|N708|N802|a710)
VersusTablet: TOUCHPAD.*[78910]|\bTOUCHTAB\b
ZyncTablet: z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900
PositivoTablet: TB07STA|TB10STA|TB07FTA|TB10FTA
NabiTablet: Android.*\bNabi
KoboTablet: Kobo Touch|\bK080\b|\bVox\b Build|\bArc\b Build
DanewTablet: DSlide.*\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\b
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
PlaystationTablet: Playstation.*(Portable|Vita)
TrekstorTablet: ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab
PyleAudioTablet: \b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\b
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
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
GalapadTablet: Android.*\bG1\b(?!\))
MicromaxTablet: Funbook|Micromax.*\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\b
KarbonnTablet: Android.*\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\b
AllFineTablet: Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide
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
YONESTablet: BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026
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
GUTablet: TX-A1301|TX-M9002|Q702|kf026
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
OvermaxTablet: OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027
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
DPSTablet: DPS Dream 9|DPS Dual 7
VistureTablet: V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10
CrestaTablet: CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989
MediatekTablet: \bMT8125|MT8389|MT8135|MT8377\b
ConcordeTablet: Concorde([ ]+)?Tab|ConCorde ReadMan
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
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
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
ECSTablet: V07OT2|TM105A|S10OT1|TR10CS1
StorexTablet: eZee[_\']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab
VodafoneTablet: SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497
EssentielBTablet: Smart[ \']?TAB[ ]+?[0-9]+|Family[ \']?TAB2
RossMoorTablet: RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711
iMobileTablet: i-mobile i-note
TolinoTablet: tolino tab [0-9.]+|tolino shine
AudioSonicTablet: \bC-22Q|T7-QC|T-17B|T-17P\b
AMPETablet: Android.* A78
SkkTablet: Android.* (SKYPAD|PHOENIX|CYCLOPS)
TecnoTablet: TECNO P9|TECNO DP8D
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
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)
FX2Tablet: FX2 PAD7|FX2 PAD10
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
ViewsonicTablet: ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a
VerizonTablet: QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1
OdysTablet: LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\bXELIO\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10
CaptivaTablet: CAPTIVA PAD
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
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
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
JaytechTablet: TPC-PA762
BlaupunktTablet: Endeavour 800NG|Endeavour 1010
DigmaTablet: \b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\b
EvolioTablet: ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\bEvotab\b|\bNeura\b
LavaTablet: QPAD E704|\bIvoryS\b|E-TAB IVORY|\bE-TAB\b
AocTablet: MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712
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
CelkonTablet: CT695|CT888|CT[\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\bCT-1\b
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
MediacomTablet: M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA
MiTablet: \bMI PAD\b|\bHM NOTE 1W\b
NibiruTablet: Nibiru M1|Nibiru Jupiter One
NexoTablet: NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI
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
UbislateTablet: UbiSlate[\s]?7C
PocketBookTablet: Pocketbook
KocasoTablet: \b(TB-1207)\b
HisenseTablet: \b(F5281|E2371)\b
Hudl: Hudl HT7S3|Hudl 2
TelstraTablet: T-Hub2
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
operating_systems:
AndroidOS: Android
BlackBerryOS: blackberry|\bBB10\b|rim tablet os
PalmOS: PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino
SymbianOS: Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\bS60\b
WindowsMobileOS: Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Window Mobile|Windows Phone [0-9.]+|WCE;
WindowsPhoneOS: Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;
iOS: \biPhone.*Mobile|\biPod|\biPad|AppleCoreMedia
MeeGoOS: MeeGo
MaemoOS: Maemo
JavaOS: J2ME/|\bMIDP\b|\bCLDC\b
webOS: webOS|hpwOS
badaOS: \bBada\b
BREWOS: BREW
browsers:
Chrome: \bCrMo\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?
Dolfin: \bDolfin\b
Opera: Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+$|Coast/[0-9.]+
Skyfire: Skyfire
Edge: Mobile Safari/[.0-9]* Edge
IE: IEMobile|MSIEMobile
Firefox: fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS
Bolt: bolt
TeaShark: teashark
Blazer: Blazer
Safari: Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari
WeChat: \bMicroMessenger\b
UCBrowser: UC.*Browser|UCWEB
baiduboxapp: baiduboxapp
baidubrowser: baidubrowser
DiigoBrowser: DiigoBrowser
Puffin: Puffin
Mercury: \bMercury\b
ObigoBrowser: Obigo
NetFront: NF-Browser
GenericBrowser: NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger
PaleMoon: Android.*PaleMoon|Mobile.*PaleMoon
utilities:
Bot: Googlebot|facebookexternalhit|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
MobileBot: Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2
DesktopMode: WPDesktop
TV: SonyDTV|HbbTV
WebKit: (webkit)[ /]([\w.]+)
Console: \b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\b
Watch: SM-V700
user_agent_headers:
- HTTP_USER_AGENT
- HTTP_X_OPERAMINI_PHONE_UA
- HTTP_X_DEVICE_USER_AGENT
- HTTP_X_ORIGINAL_USER_AGENT
- HTTP_X_SKYFIRE_PHONE
- HTTP_X_BOLT_PHONE_UA
- HTTP_DEVICE_STOCK_UA
- HTTP_X_UCBROWSER_DEVICE_UA
properties:
Mobile: Mobile/[VER]
Build: Build/[VER]
Version: Version/[VER]
VendorID: VendorID/[VER]
iPad: iPad.*CPU[a-z ]+[VER]
iPhone: iPhone.*CPU[a-z ]+[VER]
iPod: iPod.*CPU[a-z ]+[VER]
Kindle: Kindle/[VER]
Chrome:
- Chrome/[VER]
- CriOS/[VER]
- CrMo/[VER]
Coast:
- Coast/[VER]
Dolfin: Dolfin/[VER]
Firefox:
- Firefox/[VER]
- FxiOS/[VER]
Fennec: Fennec/[VER]
Edge: Edge/[VER]
IE:
- IEMobile/[VER];
- IEMobile [VER]
- MSIE [VER];
- Trident/[0-9.]+;.*rv:[VER]
NetFront: NetFront/[VER]
NokiaBrowser: NokiaBrowser/[VER]
Opera:
- OPR/[VER]
- Opera Mini/[VER]
- Version/[VER]
Opera Mini: Opera Mini/[VER]
Opera Mobi: Version/[VER]
UCBrowser:
- UCWEB[VER]
- UC.*Browser/[VER]
MQQBrowser: MQQBrowser/[VER]
MicroMessenger: MicroMessenger/[VER]
baiduboxapp: baiduboxapp/[VER]
baidubrowser: baidubrowser/[VER]
SamsungBrowser: SamsungBrowser/[VER]
Iron: Iron/[VER]
Safari:
- Version/[VER]
- Safari/[VER]
Skyfire: Skyfire/[VER]
Tizen: Tizen/[VER]
Webkit: webkit[ /][VER]
PaleMoon: PaleMoon/[VER]
Gecko: Gecko/[VER]
Trident: Trident/[VER]
Presto: Presto/[VER]
Goanna: Goanna/[VER]
iOS: \bi?OS\b [VER][ ;]{1}
AndroidOS: Android [VER]
BlackBerryOS:
- BlackBerry[\w]+/[VER]
- BlackBerry.*Version/[VER]
- Version/[VER]
BREWOS: BREW [VER]
JavaOS: Java/[VER]
Windows Phone OS:
- Windows Phone OS [VER]
- Windows Phone [VER]
Windows Phone: Windows Phone [VER]
Windows CE: Windows CE/[VER]
Windows NT: Windows NT [VER]
SymbianOS:
- SymbianOS/[VER]
- Symbian/[VER]
webOS:
- webOS/[VER]
- hpwOS/[VER];
condition.plugin.mobile_device_detection_condition_plugin:
type: condition.plugin
label: 'Show it on special devices'
mapping:
devices:
type: sequence
sequence:
type: string
name: Mobile Device Detection
type: module
description: 'This module can detect any mobile devices.'
package: Other
core_version_requirement: ^8 || ^9
dependencies:
- drupal:views
<?php
/**
* @file
* Default install and uninstall functions which set up default data.
*/
/**
* Implements hook_install().
*/
function mobile_device_detection_install() {
// Enable mobile_device_detection plugin.
$config = \Drupal::service('config.factory')->getEditable('views.settings');
$display_extenders = $config->get('display_extenders') ?: [];
$display_extenders[] = 'mobile_device_detection';
$config->set('display_extenders', $display_extenders);
$config->save();
}
/**
* Implements hook_uninstall().
*/
function mobile_device_detection_uninstall() {
// Disable mobile_device_detection plugin.
$config = \Drupal::service('config.factory')->getEditable('views.settings');
$display_extenders = $config->get('display_extenders') ?: [];
$key = array_search('mobile_device_detection', $display_extenders);
if ($key !== FALSE) {
unset($display_extenders[$key]);
$config->set('display_extenders', $display_extenders);
$config->save();
}
}
<?php
/**
* @file
* Controls the visual building blocks, views a page is constructed with.
*/
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\views\ViewExecutable;
/**
* Implements hook_help().
*/
function mobile_device_detection_help($route_name, RouteMatchInterface $route_match) {
switch ($route_name) {
case 'help.page.mobile_device_detection':
$output = '';
$output .= '<h3>' . t('About') . '</h3>';
$output .= '<p>' . t('"Mobile device detection" module can detect any mobile device. You can use it via service or "Views". This module integrate with "Views" and you can easily to switch "Views display" for different devices.') . '</p>';
$output .= '<p>' . t('For more information, see the <a href="https://www.drupal.org/project/mobile_device_detection">Mobile device detection</a>.') . '</p>';
$output .= '<h3>' . t('Usage') . '</h3>';
$output .= '<p>' . t('Initialization:') . '</p>';
$output .= '<p>' . t('$detection_service = \Drupal::service("mobile_device_detection.object");') . '</p>';
$output .= '<hr>';
$output .= '<p>' . t('Implementation:') . '</p>';
$output .= '<p>' . t('if($detection_service->isMobile()) { $detection_service->getObject(); }') . '</p>';
$output .= '<p>' . t('if($detection_service->isTablet()) { $detection_service->getObject(); }') . '</p>';
return $output;
}
}
/**
* Implements hook_views_post_execute().
*/
function mobile_device_detection_views_post_execute(ViewExecutable $view) {
$display = $view->getDisplay();
$extenders = $display->getExtenders();
if (!isset($extenders['mobile_device_detection'])) {
return;
}
if (!$extenders['mobile_device_detection']->getDevices()) {
return;
}
$devices = array_filter($extenders['mobile_device_detection']->getDevices());
if (!empty($devices)) {
\Drupal::service('page_cache_kill_switch')->trigger();
$view->element['#cache']['contexts'] = ['cache_context.session'];
$view->element['#cache']['max-age'] = 0;
$entity = \Drupal::service('mobile_device_detection.object');
$view->build_info['fail'] = TRUE;
foreach ($devices as $key => $value) {
if ($key != 'desktop') {
$func = 'is' . ucfirst($value);
if (is_callable([$entity, $func]) && $entity->$func()) {
$view->build_info['fail'] = FALSE;
}
}
else {
if (!$entity->isMobile() && !$entity->isTablet()) {
$view->build_info['fail'] = FALSE;
}
}
}
}
}
services:
mobile_device_detection.properties:
class: Drupal\mobile_device_detection\Object\MobileDeviceDetectionAttributes
mobile_device_detection.object:
class: Drupal\mobile_device_detection\Object\MobileDeviceDetection
arguments: ['@mobile_device_detection.properties', '@request_stack']
# plugin_extender
mobile_device_detection.plugin_extender:
class: Drupal\mobile_device_detection\Plugin\views\display_extender\MobileDeviceDetectionExtenderPlugin
<?php
namespace Drupal\mobile_device_detection\Object;
use Symfony\Component\HttpFoundation\RequestStack;
/**
* MobileDeviceDetection object.
*/
class MobileDeviceDetection {
/**
* A default attributes instance.
*
* @var \Drupal\mobile_device_detection\Object\MobileDeviceDetectionAttributes
*/
private $attributes;
/**
* Request stack.
*
* @var \Symfony\Component\HttpFoundation\RequestStack
*/
public $request;
/**
* The MobileDeviceDetectionObject mobileHeaders.
*
* @var array
*/
private $mobileHeaders;
/**
* The MobileDeviceDetectionObject cloudHeaders.
*
* @var array
*/
private $cloudHeaders;
/**
* The MobileDeviceDetectionObject userAgentHeaders.
*
* @var array
*/
private $userAgentHeaders;
/**
* The MobileDeviceDetectionObject object.
*
* @var object
*/
private $object;
/**
* The constructoror.
*/
public function __construct($attributes, $request) {
$this->setAttributes($attributes);
$this->setRequest($request);
$this->init();
}
/**
* Initialization.
*/
private function init() {
$this->object = new \stdClass();
$this->object->type = NULL;
$headers = $this->getRequest()->getCurrentRequest()->server->all();
$this->setMobileHeaders($headers);
$this->setCloudHeaders($headers);
$this->setUserAgentHeaders($this->getAttributes()->get('user_agent_headers'));
if ($this->check('mobile')) {
$this->object->type = 'mobile';
}
if ($this->check('tablet')) {
$this->object->type = 'tablet';
}
}
/**
* Get object.
*/
public function getObject() {
if (isset($this->object->type)) {
$this->getOperatingSystem();
$this->getBrowser();
return $this->object;
}
}
/**
* Is checking mobile or not.
*/
public function isMobile() {
return ($this->object->type === 'mobile') ? TRUE : FALSE;
}
/**
* Is checking tablet or not.
*/
public function isTablet() {
return ($this->object->type === 'tablet') ? TRUE : FALSE;
}
/**
* Set attributes.
*/
protected function setAttributes($attributes) {
$this->attributes = $attributes;
}
/**
* Get attributes.
*/
protected function getAttributes() {
return $this->attributes;
}
/**
* Set request.
*/
protected function setRequest($request) {
$this->request = $request;
}
/**
* Get request.
*/
protected function getRequest() {
return $this->request;
}
/**
* Set headers.
*/
protected function setMobileHeaders($headers) {
array_walk($headers, function (&$v, $k) {
if (substr($k, 0, 5) === 'HTTP_') {
$this->mobileHeaders[$k] = $v;
}
});
}
/**
* Get headers.
*/
protected function getMobileHeaders() {
return $this->mobileHeaders;
}
/**
* Set cloud headers.
*/
protected function setCloudHeaders($headers) {
array_walk($headers, function (&$v, $k) {
if (substr(strtolower($k), 0, 16) === 'http_cloudfront_') {
$this->cloudHeaders[strtoupper($k)] = $v;
}
});
}
/**
* Get cloud headers.
*/
protected function getCloudHeaders() {
return $this->cloudHeaders;
}
/**
* Set user agent headers.
*/
protected function setUserAgentHeaders($headers) {
$this->userAgentHeaders = implode(' ', array_intersect_key($this->getMobileHeaders(), array_flip($headers)));
if (!$this->userAgentHeaders && !empty($this->getCloudHeaders())) {
$this->userAgentHeaders = 'Amazon CloudFront';
}
}
/**
* Get user agent headers.
*/
protected function getUserAgentHeaders() {
return $this->userAgentHeaders;
}
/**
* Is checking which kind of device using.
*/
private function check($type) {
if ($this->getUserAgentHeaders() === 'Amazon CloudFront') {
$headers = $this->setCloudHeaders($this->getRequest()->getCurrentRequest()->server->all());
if (array_key_exists('HTTP_CLOUDFRONT_IS_MOBILE_VIEWER', $headers) && $headers['HTTP_CLOUDFRONT_IS_MOBILE_VIEWER'] === 'true') {
return TRUE;
}
}
switch ($type) {
case 'mobile':
$options = array_merge($this->getAttributes()->get('phone_devices'));
$headers = array_intersect_key($this->getAttributes()->get('mobile_headers'), $this->getMobileHeaders());
foreach ($headers as $key => $value) {
foreach ($value as $v) {
if (strpos($this->getMobileHeaders()[$key], $v) !== FALSE) {
return TRUE;
}
}
}
goto device_detect;
break;
case 'tablet':
$options = array_merge($this->getAttributes()->get('tablet_devices'));
case 'deviceDetect':
device_detect:
$device = false;
foreach ($options as $value) {
if (!empty($value)) {
if ($this->match($value)) {
$device = TRUE;
}
}
}
if ($device) {
foreach ($this->getAttributes()->get('browsers') as $value) {
if (!empty($value)) {
if ($this->match($value)) {
return TRUE;
}
}
}
}
break;
}
return FALSE;
}
/**
* Get operating system.
*/
private function getOperatingSystem() {
$this->object->OS = $this->get($this->getAttributes()->get('operating_systems'));
$this->version($this->object->OS);
}
/**
* Get browser.
*/
private function getBrowser() {
$this->object->browser = $this->get($this->getAttributes()->get('browsers'));
$this->version($this->object->browser);
}
/**
* Get options.
*/
private function get($options) {
foreach ($options as $key => $value) {
if (!empty($value)) {
if ($this->match($value)) {
return $key;
}
}
}
}
/**
* Match headers.
*/
private function match($value) {
return (bool) preg_match(sprintf('#%s#is', $value), $this->getUserAgentHeaders(), $matches);
}
/**
* Versions.
*/
private function version($name) {
$properties = (array) $this->getAttributes()->get('properties')[$name];
foreach ($properties as $value) {
$pattern = str_replace('[VER]', $this->getAttributes()->get('VER'), $value);
preg_match(sprintf('#%s#is', $pattern), $this->getUserAgentHeaders(), $matches);
if (!empty($matches)) {
$this->object->$name[] = $matches;
}
}
}
}
<?php
namespace Drupal\mobile_device_detection\Object;
use Symfony\Component\Yaml\Yaml;
/**
* MobileDeviceDetectionAttributes class.
*/
class MobileDeviceDetectionAttributes {
/**
* {@inheritdoc}
*/
public function get($attribute = NULL) {
$file = __DIR__ . '/../../config/attributes/attributes.yml';
if (!file_exists($file)) {
return FALSE;
}
$attributes = Yaml::parse(file_get_contents($file))['attributes'];
if (!is_null($attribute)) {
return $attributes[$attribute];
}
return $attributes;
}
}
<?php
namespace Drupal\mobile_device_detection\Plugin\Condition;
use Drupal\Core\Condition\ConditionPluginBase;
use Drupal\Core\Form\FormStateInterface;
/**
* This main class which add ability to determine device.
*
* @Condition(
* id = "mobile_device_detection_condition_plugin",
* label = @Translation("Show it on special devices"),
* )
*/
class MobileDeviceDetectionConditionPlugin extends ConditionPluginBase {
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form = parent::buildConfigurationForm($form, $form_state);
$form['negate'] = [];
$form['devices'] = [
'#type' => 'checkboxes',
'#title' => $this->t('When the device is determined'),
'#default_value' => $this->configuration['devices'],
'#options' => [
'mobile' => $this->t('Mobile'),
'tablet' => $this->t('Tablet'),
'desktop' => $this->t('Desktop'),
],
'#description' => $this->t('If you select no devices, the condition will evaluate to TRUE for all devices.'),
];
return $form;
}
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'devices' => [],
] + parent::defaultConfiguration();
}
/**
* {@inheritdoc}
*/
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
$this->configuration['devices'] = array_filter($form_state->getValue('devices'));
parent::submitConfigurationForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
public function summary() {
$devices = $this->configuration['devices'];
if (count($devices) > 1) {
$devices = implode(', ', $devices);
}
else {
$devices = reset($devices);
}
if (!empty($this->configuration['negate'])) {
return $this->t('The device is not @devices', ['@devices' => $devices]);
}
else {
return $this->t('The device is @devices', ['@devices' => $devices]);
}
}
/**
* {@inheritdoc}
*/
public function evaluate() {
if (empty($this->configuration['devices']) && !$this->isNegated()) {
return TRUE;
}
\Drupal::service('page_cache_kill_switch')->trigger();
$entity = \Drupal::service('mobile_device_detection.object');
foreach ($this->configuration['devices'] as $key => $value) {
if ($key != 'desktop') {
$func = 'is' . ucfirst($value);
if (is_callable([$entity, $func]) && $entity->$func()) {
return TRUE;
}
}
else {
if (!$entity->isMobile() && !$entity->isTablet()) {
return TRUE;
}
}
}
return FALSE;
}
}
<?php
namespace Drupal\mobile_device_detection\Plugin\views\display_extender;
use Drupal\Core\Form\FormStateInterface;
use Drupal\views\Plugin\views\display_extender\DisplayExtenderPluginBase;
/**
* Default display extender plugin. It is extends Views display.
*
* @ingroup views_display_extender_plugins
*
* @ViewsDisplayExtender(
* id = "mobile_device_detection",
* title = @Translation("Mobile device detection display extender"),
* help = @Translation("Mobile device detection settings for this view."),
* no_ui = TRUE
* )
*/
class MobileDeviceDetectionExtenderPlugin extends DisplayExtenderPluginBase {
/**
* Provide the key options for this plugin.
*/
public function defineOptionsAlter(&$options) {
$options['device_detection'] = [
'contains' => [
'title' => ['default' => ''],
'description' => ['default' => ''],
],
];
}
/**
* Provide the default summary for options and category in the views UI.
*/
public function optionsSummary(&$categories, &$options) {
$categories['device_detection'] = [
'title' => $this->t('Show "View" on special devices'),
'column' => 'second',
];
$options['device_detection'] = [
'category' => 'other',
'title' => $this->t('Show "View" on special devices'),
'value' => $this->getDevices() ? implode(', ', $this->getDevices()) : $this->t('none'),
];
}
/**
* Provide a form to edit options for this plugin.
*/
public function buildOptionsForm(&$form, FormStateInterface $form_state) {
if ($form_state->get('section') == 'device_detection') {
$form['#title'] .= $this->t('Show "View" on special devices');
$form['device_detection']['#type'] = 'container';
$form['device_detection']['#tree'] = TRUE;
$form['device_detection']['devices'] = [
'#type' => 'checkboxes',
'#options' => [
'mobile' => $this->t('Mobile'),
'tablet' => $this->t('Tablet'),
'desktop' => $this->t('Desktop'),
],
'#default_value' => $this->getDevices() ? $this->getDevices() : [],
'#title' => $this->t('Select device'),
];
}
}
/**
* Validate the options form.
*/
public function validateOptionsForm(&$form, FormStateInterface $form_state) {}
/**
* Handle any special handling on the validate form.
*/
public function submitOptionsForm(&$form, FormStateInterface $form_state) {
if ($form_state->get('section') == 'device_detection') {
$device_detection = $form_state->getValue('device_detection');
$this->options['device_detection'] = $device_detection;
}
}
/**
* Set up any variables on the view prior to execution.
*/
public function preExecute() {}
/**
* Inject anything into the query that the display_extender handler needs.
*/
public function query() {}
/**
* Static member function to list which sections are defaultable.
*/
public function defaultableSections(&$sections, $section = NULL) {}
/**
* Get the selected devices for this display.
*/
public function getDevices() {
$devices = isset($this->options['device_detection']) ? $this->options['device_detection'] : NULL;
if ($devices && isset($devices['devices'])) {
$devices = array_filter($devices['devices'], function ($var) {
return($var != FALSE);
});
}
return $devices;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment