update Piwik to version 2.16 (fixes #91)
This commit is contained in:
parent
296343bf3b
commit
d885a4baa9
5833 changed files with 418860 additions and 226988 deletions
|
|
@ -1,3 +0,0 @@
|
|||
.idea/*
|
||||
vendor/*
|
||||
composer.phar
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
language: php
|
||||
|
||||
php:
|
||||
- 5.3
|
||||
- 5.4
|
||||
- 5.5
|
||||
|
||||
before_script:
|
||||
- composer self-update
|
||||
- composer install
|
||||
|
||||
script:
|
||||
- phpunit tests/DeviceDetectorTest.php
|
||||
22
www/analytics/vendor/piwik/device-detector/Cache/Cache.php
vendored
Normal file
22
www/analytics/vendor/piwik/device-detector/Cache/Cache.php
vendored
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
|
||||
namespace DeviceDetector\Cache;
|
||||
|
||||
interface Cache
|
||||
{
|
||||
public function fetch($id);
|
||||
|
||||
public function contains($id);
|
||||
|
||||
public function save($id, $data, $lifeTime = 0);
|
||||
|
||||
public function delete($id);
|
||||
|
||||
public function flushAll();
|
||||
}
|
||||
53
www/analytics/vendor/piwik/device-detector/Cache/StaticCache.php
vendored
Normal file
53
www/analytics/vendor/piwik/device-detector/Cache/StaticCache.php
vendored
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Cache;
|
||||
|
||||
/**
|
||||
* Class StaticCache
|
||||
*
|
||||
* Simple Cache that caches in a static property
|
||||
* (Speeds up multiple detections in one request)
|
||||
*
|
||||
* @package DeviceDetector\Cache
|
||||
*/
|
||||
class StaticCache implements Cache
|
||||
{
|
||||
/**
|
||||
* Holds the static cache data
|
||||
* @var array
|
||||
*/
|
||||
protected static $staticCache = array();
|
||||
|
||||
public function fetch($id)
|
||||
{
|
||||
return $this->contains($id) ? self::$staticCache[$id] : false;
|
||||
}
|
||||
|
||||
public function contains($id)
|
||||
{
|
||||
return isset(self::$staticCache[$id]) || array_key_exists($id, self::$staticCache);
|
||||
}
|
||||
|
||||
public function save($id, $data, $lifeTime = 0)
|
||||
{
|
||||
self::$staticCache[$id] = $data;
|
||||
return true;
|
||||
}
|
||||
|
||||
public function delete($id)
|
||||
{
|
||||
unset(self::$staticCache[$id]);
|
||||
return true;
|
||||
}
|
||||
|
||||
public function flushAll()
|
||||
{
|
||||
self::$staticCache = array();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load diff
72
www/analytics/vendor/piwik/device-detector/Parser/Bot.php
vendored
Normal file
72
www/analytics/vendor/piwik/device-detector/Parser/Bot.php
vendored
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser;
|
||||
|
||||
/**
|
||||
* Class Bot
|
||||
*
|
||||
* Parses a user agent for bot information
|
||||
*
|
||||
* Detected bots are defined in regexes/bots.yml
|
||||
*
|
||||
* @package DeviceDetector\Parser
|
||||
*/
|
||||
class Bot extends ParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/bots.yml';
|
||||
protected $parserName = 'bot';
|
||||
protected $discardDetails = false;
|
||||
|
||||
/**
|
||||
* Enables information discarding
|
||||
*/
|
||||
public function discardDetails()
|
||||
{
|
||||
$this->discardDetails = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the current UA and checks whether it contains bot information
|
||||
*
|
||||
* @see bots.yml for list of detected bots
|
||||
*
|
||||
* Step 1: Build a big regex containing all regexes and match UA against it
|
||||
* -> If no matches found: return
|
||||
* -> Otherwise:
|
||||
* Step 2: Walk through the list of regexes in bots.yml and try to match every one
|
||||
* -> Return the matched data
|
||||
*
|
||||
* If $discardDetails is set to TRUE, the Step 2 will be skipped
|
||||
* $bot will be set to TRUE instead
|
||||
*
|
||||
* NOTE: Doing the big match before matching every single regex speeds up the detection
|
||||
*/
|
||||
public function parse()
|
||||
{
|
||||
$result = null;
|
||||
|
||||
if ($this->preMatchOverall()) {
|
||||
foreach ($this->getRegexes() as $regex) {
|
||||
$matches = $this->matchUserAgent($regex['regex']);
|
||||
|
||||
if ($matches) {
|
||||
if ($this->discardDetails) {
|
||||
$result = true;
|
||||
break;
|
||||
}
|
||||
|
||||
unset($regex['regex']);
|
||||
$result = $regex;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
263
www/analytics/vendor/piwik/device-detector/Parser/Client/Browser.php
vendored
Normal file
263
www/analytics/vendor/piwik/device-detector/Parser/Client/Browser.php
vendored
Normal file
|
|
@ -0,0 +1,263 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser\Client;
|
||||
|
||||
use DeviceDetector\Parser\Client\Browser\Engine;
|
||||
|
||||
/**
|
||||
* Class Browser
|
||||
*
|
||||
* Client parser for browser detection
|
||||
*
|
||||
* @package DeviceDetector\Parser\Client
|
||||
*/
|
||||
class Browser extends ClientParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/client/browsers.yml';
|
||||
protected $parserName = 'browser';
|
||||
|
||||
/**
|
||||
* Known browsers mapped to their internal short codes
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected static $availableBrowsers = array(
|
||||
'36' => '360 Phone Browser',
|
||||
'3B' => '360 Browser',
|
||||
'AA' => 'Avant Browser',
|
||||
'AB' => 'ABrowse',
|
||||
'AG' => 'ANTGalio',
|
||||
'AM' => 'Amaya',
|
||||
'AO' => 'Amigo',
|
||||
'AN' => 'Android Browser',
|
||||
'AR' => 'Arora',
|
||||
'AV' => 'Amiga Voyager',
|
||||
'AW' => 'Amiga Aweb',
|
||||
'BB' => 'BlackBerry Browser',
|
||||
'BD' => 'Baidu Browser',
|
||||
'BS' => 'Baidu Spark',
|
||||
'BE' => 'Beonex',
|
||||
'BJ' => 'Bunjalloo',
|
||||
'BX' => 'BrowseX',
|
||||
'CA' => 'Camino',
|
||||
'CC' => 'Coc Coc',
|
||||
'CD' => 'Comodo Dragon',
|
||||
'CX' => 'Charon',
|
||||
'CF' => 'Chrome Frame',
|
||||
'CH' => 'Chrome',
|
||||
'CI' => 'Chrome Mobile iOS',
|
||||
'CK' => 'Conkeror',
|
||||
'CM' => 'Chrome Mobile',
|
||||
'CN' => 'CoolNovo',
|
||||
'CO' => 'CometBird',
|
||||
'CP' => 'ChromePlus',
|
||||
'CR' => 'Chromium',
|
||||
'CS' => 'Cheshire',
|
||||
'DE' => 'Deepnet Explorer',
|
||||
'DF' => 'Dolphin',
|
||||
'DI' => 'Dillo',
|
||||
'EL' => 'Elinks',
|
||||
'EP' => 'Epiphany',
|
||||
'ES' => 'Espial TV Browser',
|
||||
'FB' => 'Firebird',
|
||||
'FD' => 'Fluid',
|
||||
'FE' => 'Fennec',
|
||||
'FF' => 'Firefox',
|
||||
'FL' => 'Flock',
|
||||
'FN' => 'Fireweb Navigator',
|
||||
'GA' => 'Galeon',
|
||||
'GE' => 'Google Earth',
|
||||
'HJ' => 'HotJava',
|
||||
'IA' => 'Iceape',
|
||||
'IB' => 'IBrowse',
|
||||
'IC' => 'iCab',
|
||||
'ID' => 'IceDragon',
|
||||
'IW' => 'Iceweasel',
|
||||
'IE' => 'Internet Explorer',
|
||||
'IM' => 'IE Mobile',
|
||||
'IR' => 'Iron',
|
||||
'JS' => 'Jasmine',
|
||||
'KI' => 'Kindle Browser',
|
||||
'KM' => 'K-meleon',
|
||||
'KO' => 'Konqueror',
|
||||
'KP' => 'Kapiko',
|
||||
'KY' => 'Kylo',
|
||||
'KZ' => 'Kazehakase',
|
||||
'LB' => 'Liebao',
|
||||
'LI' => 'Links',
|
||||
'LS' => 'Lunascape',
|
||||
'LX' => 'Lynx',
|
||||
'MB' => 'MicroB',
|
||||
'MC' => 'NCSA Mosaic',
|
||||
'ME' => 'Mercury',
|
||||
'MF' => 'Mobile Safari',
|
||||
'MI' => 'Midori',
|
||||
'MU' => 'MIUI Browser',
|
||||
'MS' => 'Mobile Silk',
|
||||
'MX' => 'Maxthon',
|
||||
'NB' => 'Nokia Browser',
|
||||
'NO' => 'Nokia OSS Browser',
|
||||
'NV' => 'Nokia Ovi Browser',
|
||||
'NF' => 'NetFront',
|
||||
'NL' => 'NetFront Life',
|
||||
'NP' => 'NetPositive',
|
||||
'NS' => 'Netscape',
|
||||
'OB' => 'Obigo',
|
||||
'OD' => 'Odyssey Web Browser',
|
||||
'OF' => 'Off By One',
|
||||
'OE' => 'ONE Browser',
|
||||
'OI' => 'Opera Mini',
|
||||
'OM' => 'Opera Mobile',
|
||||
'OP' => 'Opera',
|
||||
'ON' => 'Opera Next',
|
||||
'OR' => 'Oregano',
|
||||
'OV' => 'Openwave Mobile Browser',
|
||||
'OW' => 'OmniWeb',
|
||||
'PL' => 'Palm Blazer',
|
||||
'PM' => 'Pale Moon',
|
||||
'PR' => 'Palm Pre',
|
||||
'PU' => 'Puffin',
|
||||
'PW' => 'Palm WebPro',
|
||||
'PX' => 'Phoenix',
|
||||
'PO' => 'Polaris',
|
||||
'PS' => 'Microsoft Edge',
|
||||
'QQ' => 'QQ Browser',
|
||||
'RK' => 'Rekonq',
|
||||
'RM' => 'RockMelt',
|
||||
'SA' => 'Sailfish Browser',
|
||||
'SC' => 'SEMC-Browser',
|
||||
'SE' => 'Sogou Explorer',
|
||||
'SF' => 'Safari',
|
||||
'SH' => 'Shiira',
|
||||
'SL' => 'Sleipnir',
|
||||
'SM' => 'SeaMonkey',
|
||||
'SN' => 'Snowshoe',
|
||||
'SR' => 'Sunrise',
|
||||
'SX' => 'Swiftfox',
|
||||
'TZ' => 'Tizen Browser',
|
||||
'UC' => 'UC Browser',
|
||||
'VI' => 'Vivaldi',
|
||||
'WE' => 'WebPositive',
|
||||
'WO' => 'wOSBrowser',
|
||||
'WT' => 'WeTab Browser',
|
||||
'YA' => 'Yandex Browser',
|
||||
'XI' => 'Xiino'
|
||||
);
|
||||
|
||||
/**
|
||||
* Browser families mapped to the short codes of the associated browsers
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected static $browserFamilies = array(
|
||||
'Android Browser' => array('AN', 'MU'),
|
||||
'BlackBerry Browser' => array('BB'),
|
||||
'Baidu' => array('BD', 'BS'),
|
||||
'Amiga' => array('AV', 'AW'),
|
||||
'Chrome' => array('CH', 'CC', 'CD', 'CM', 'CI', 'CF', 'CN', 'CR', 'CP', 'IR', 'RM', 'AO', 'VI'),
|
||||
'Firefox' => array('FF', 'FE', 'SX', 'FB', 'PX', 'MB'),
|
||||
'Internet Explorer' => array('IE', 'IM', 'PS'),
|
||||
'Konqueror' => array('KO'),
|
||||
'NetFront' => array('NF'),
|
||||
'Nokia Browser' => array('NB', 'NO', 'NV'),
|
||||
'Opera' => array('OP', 'OM', 'OI', 'ON'),
|
||||
'Safari' => array('SF', 'MF'),
|
||||
'Sailfish Browser' => array('SA')
|
||||
);
|
||||
|
||||
/**
|
||||
* Returns list of all available browsers
|
||||
* @return array
|
||||
*/
|
||||
public static function getAvailableBrowsers()
|
||||
{
|
||||
return self::$availableBrowsers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns list of all available browser families
|
||||
* @return array
|
||||
*/
|
||||
public static function getAvailableBrowserFamilies()
|
||||
{
|
||||
return self::$browserFamilies;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $browserLabel
|
||||
* @return bool|string If false, "Unknown"
|
||||
*/
|
||||
public static function getBrowserFamily($browserLabel)
|
||||
{
|
||||
foreach (self::$browserFamilies as $browserFamily => $browserLabels) {
|
||||
if (in_array($browserLabel, $browserLabels)) {
|
||||
return $browserFamily;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function parse()
|
||||
{
|
||||
foreach ($this->getRegexes() as $regex) {
|
||||
$matches = $this->matchUserAgent($regex['regex']);
|
||||
if ($matches) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$matches) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$name = $this->buildByMatch($regex['name'], $matches);
|
||||
|
||||
foreach (self::getAvailableBrowsers() as $browserShort => $browserName) {
|
||||
if (strtolower($name) == strtolower($browserName)) {
|
||||
$version = (string) $this->buildVersion($regex['version'], $matches);
|
||||
$engine = $this->buildEngine(isset($regex['engine']) ? $regex['engine'] : array(), $version);
|
||||
return array(
|
||||
'type' => 'browser',
|
||||
'name' => $browserName,
|
||||
'short_name' => $browserShort,
|
||||
'version' => $version,
|
||||
'engine' => $engine
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// This Exception should never be thrown. If so a defined browser name is missing in $availableBrowsers
|
||||
throw new \Exception('Detected browser name was not found in $availableBrowsers'); // @codeCoverageIgnore
|
||||
}
|
||||
|
||||
protected function buildEngine($engineData, $browserVersion)
|
||||
{
|
||||
$engine = '';
|
||||
// if an engine is set as default
|
||||
if (isset($engineData['default'])) {
|
||||
$engine = $engineData['default'];
|
||||
}
|
||||
// check if engine is set for browser version
|
||||
if (array_key_exists('versions', $engineData) && is_array($engineData['versions'])) {
|
||||
foreach ($engineData['versions'] as $version => $versionEngine) {
|
||||
if (version_compare($browserVersion, $version) >= 0) {
|
||||
$engine = $versionEngine;
|
||||
}
|
||||
}
|
||||
}
|
||||
// try to detect the engine using the regexes
|
||||
if (empty($engine)) {
|
||||
$engineParser = new Engine();
|
||||
$engineParser->setUserAgent($this->userAgent);
|
||||
$engine = $engineParser->parse();
|
||||
}
|
||||
|
||||
return $engine;
|
||||
}
|
||||
}
|
||||
76
www/analytics/vendor/piwik/device-detector/Parser/Client/Browser/Engine.php
vendored
Normal file
76
www/analytics/vendor/piwik/device-detector/Parser/Client/Browser/Engine.php
vendored
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser\Client\Browser;
|
||||
|
||||
use DeviceDetector\Parser\Client\ClientParserAbstract;
|
||||
|
||||
/**
|
||||
* Class Engine
|
||||
*
|
||||
* Client parser for browser engine detection
|
||||
*
|
||||
* @package DeviceDetector\Parser\Client\Browser
|
||||
*/
|
||||
class Engine extends ClientParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/client/browser_engine.yml';
|
||||
protected $parserName = 'browserengine';
|
||||
|
||||
/**
|
||||
* Known browser engines mapped to their internal short codes
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected static $availableEngines = array(
|
||||
'WebKit',
|
||||
'Blink',
|
||||
'Trident',
|
||||
'Text-based',
|
||||
'Dillo',
|
||||
'iCab',
|
||||
'Presto',
|
||||
'Gecko',
|
||||
'KHTML',
|
||||
'NetFront',
|
||||
'Edge'
|
||||
);
|
||||
|
||||
/**
|
||||
* Returns list of all available browser engines
|
||||
* @return array
|
||||
*/
|
||||
public static function getAvailableEngines()
|
||||
{
|
||||
return self::$availableEngines;
|
||||
}
|
||||
|
||||
public function parse()
|
||||
{
|
||||
foreach ($this->getRegexes() as $regex) {
|
||||
$matches = $this->matchUserAgent($regex['regex']);
|
||||
if ($matches) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$matches) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$name = $this->buildByMatch($regex['name'], $matches);
|
||||
|
||||
foreach (self::getAvailableEngines() as $engineName) {
|
||||
if (strtolower($name) == strtolower($engineName)) {
|
||||
return $engineName;
|
||||
}
|
||||
}
|
||||
|
||||
// This Exception should never be thrown. If so a defined browser name is missing in $availableEngines
|
||||
throw new \Exception('Detected browser engine was not found in $availableEngines'); // @codeCoverageIgnore
|
||||
}
|
||||
}
|
||||
74
www/analytics/vendor/piwik/device-detector/Parser/Client/ClientParserAbstract.php
vendored
Normal file
74
www/analytics/vendor/piwik/device-detector/Parser/Client/ClientParserAbstract.php
vendored
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser\Client;
|
||||
|
||||
use DeviceDetector\Parser\ParserAbstract;
|
||||
|
||||
abstract class ClientParserAbstract extends ParserAbstract
|
||||
{
|
||||
protected $fixtureFile = '';
|
||||
protected $parserName = '';
|
||||
|
||||
/**
|
||||
* Parses the current UA and checks whether it contains any client information
|
||||
*
|
||||
* @see $fixtureFile for file with list of detected clients
|
||||
*
|
||||
* Step 1: Build a big regex containing all regexes and match UA against it
|
||||
* -> If no matches found: return
|
||||
* -> Otherwise:
|
||||
* Step 2: Walk through the list of regexes in feed_readers.yml and try to match every one
|
||||
* -> Return the matched feed reader
|
||||
*
|
||||
* NOTE: Doing the big match before matching every single regex speeds up the detection
|
||||
*/
|
||||
public function parse()
|
||||
{
|
||||
$result = null;
|
||||
|
||||
if ($this->preMatchOverall()) {
|
||||
foreach ($this->getRegexes() as $regex) {
|
||||
$matches = $this->matchUserAgent($regex['regex']);
|
||||
|
||||
if ($matches) {
|
||||
$result = array(
|
||||
'type' => $this->parserName,
|
||||
'name' => $this->buildByMatch($regex['name'], $matches),
|
||||
'version' => $this->buildVersion($regex['version'], $matches)
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all names defined in the regexes
|
||||
*
|
||||
* Attention: This method might not return all names of detected clients
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getAvailableClients()
|
||||
{
|
||||
$instance = new static();
|
||||
$regexes = $instance->getRegexes();
|
||||
$names = array();
|
||||
foreach ($regexes as $regex) {
|
||||
if ($regex['name'] != '$1') {
|
||||
$names[] = $regex['name'];
|
||||
}
|
||||
}
|
||||
|
||||
natcasesort($names);
|
||||
|
||||
return array_unique($names);
|
||||
}
|
||||
}
|
||||
21
www/analytics/vendor/piwik/device-detector/Parser/Client/FeedReader.php
vendored
Normal file
21
www/analytics/vendor/piwik/device-detector/Parser/Client/FeedReader.php
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser\Client;
|
||||
|
||||
/**
|
||||
* Class FeedReader
|
||||
*
|
||||
* Client parser for feed reader detection
|
||||
*
|
||||
* @package DeviceDetector\Parser\Client
|
||||
*/
|
||||
class FeedReader extends ClientParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/client/feed_readers.yml';
|
||||
protected $parserName = 'feed reader';
|
||||
}
|
||||
21
www/analytics/vendor/piwik/device-detector/Parser/Client/Library.php
vendored
Normal file
21
www/analytics/vendor/piwik/device-detector/Parser/Client/Library.php
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser\Client;
|
||||
|
||||
/**
|
||||
* Class Library
|
||||
*
|
||||
* Client parser for tool & software detection
|
||||
*
|
||||
* @package DeviceDetector\Parser\Client
|
||||
*/
|
||||
class Library extends ClientParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/client/libraries.yml';
|
||||
protected $parserName = 'library';
|
||||
}
|
||||
21
www/analytics/vendor/piwik/device-detector/Parser/Client/MediaPlayer.php
vendored
Normal file
21
www/analytics/vendor/piwik/device-detector/Parser/Client/MediaPlayer.php
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser\Client;
|
||||
|
||||
/**
|
||||
* Class MediaPlayer
|
||||
*
|
||||
* Client parser for mediaplayer detection
|
||||
*
|
||||
* @package DeviceDetector\Parser\Client
|
||||
*/
|
||||
class MediaPlayer extends ClientParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/client/mediaplayers.yml';
|
||||
protected $parserName = 'mediaplayer';
|
||||
}
|
||||
21
www/analytics/vendor/piwik/device-detector/Parser/Client/MobileApp.php
vendored
Normal file
21
www/analytics/vendor/piwik/device-detector/Parser/Client/MobileApp.php
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser\Client;
|
||||
|
||||
/**
|
||||
* Class MobileApp
|
||||
*
|
||||
* Client parser for mobile app detection
|
||||
*
|
||||
* @package DeviceDetector\Parser\Client
|
||||
*/
|
||||
class MobileApp extends ClientParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/client/mobile_apps.yml';
|
||||
protected $parserName = 'mobile app';
|
||||
}
|
||||
21
www/analytics/vendor/piwik/device-detector/Parser/Client/PIM.php
vendored
Normal file
21
www/analytics/vendor/piwik/device-detector/Parser/Client/PIM.php
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser\Client;
|
||||
|
||||
/**
|
||||
* Class PIM
|
||||
*
|
||||
* Client parser for pim (personal information manager) detection
|
||||
*
|
||||
* @package DeviceDetector\Parser\Client
|
||||
*/
|
||||
class PIM extends ClientParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/client/pim.yml';
|
||||
protected $parserName = 'pim';
|
||||
}
|
||||
30
www/analytics/vendor/piwik/device-detector/Parser/Device/Camera.php
vendored
Normal file
30
www/analytics/vendor/piwik/device-detector/Parser/Device/Camera.php
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser\Device;
|
||||
|
||||
/**
|
||||
* Class Camera
|
||||
*
|
||||
* Device parser for camera detection
|
||||
*
|
||||
* @package DeviceDetector\Parser\Device
|
||||
*/
|
||||
class Camera extends DeviceParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/device/cameras.yml';
|
||||
protected $parserName = 'camera';
|
||||
|
||||
public function parse()
|
||||
{
|
||||
if (!$this->preMatchOverall()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return parent::parse();
|
||||
}
|
||||
}
|
||||
30
www/analytics/vendor/piwik/device-detector/Parser/Device/CarBrowser.php
vendored
Normal file
30
www/analytics/vendor/piwik/device-detector/Parser/Device/CarBrowser.php
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser\Device;
|
||||
|
||||
/**
|
||||
* Class CarBrowser
|
||||
*
|
||||
* Device parser for car browser detection
|
||||
*
|
||||
* @package DeviceDetector\Parser\Device
|
||||
*/
|
||||
class CarBrowser extends DeviceParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/device/car_browsers.yml';
|
||||
protected $parserName = 'car browser';
|
||||
|
||||
public function parse()
|
||||
{
|
||||
if (!$this->preMatchOverall()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return parent::parse();
|
||||
}
|
||||
}
|
||||
30
www/analytics/vendor/piwik/device-detector/Parser/Device/Console.php
vendored
Normal file
30
www/analytics/vendor/piwik/device-detector/Parser/Device/Console.php
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser\Device;
|
||||
|
||||
/**
|
||||
* Class Console
|
||||
*
|
||||
* Device parser for console detection
|
||||
*
|
||||
* @package DeviceDetector\Parser\Device
|
||||
*/
|
||||
class Console extends DeviceParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/device/consoles.yml';
|
||||
protected $parserName = 'console';
|
||||
|
||||
public function parse()
|
||||
{
|
||||
if (!$this->preMatchOverall()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return parent::parse();
|
||||
}
|
||||
}
|
||||
504
www/analytics/vendor/piwik/device-detector/Parser/Device/DeviceParserAbstract.php
vendored
Normal file
504
www/analytics/vendor/piwik/device-detector/Parser/Device/DeviceParserAbstract.php
vendored
Normal file
|
|
@ -0,0 +1,504 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser\Device;
|
||||
|
||||
use DeviceDetector\Parser\ParserAbstract;
|
||||
|
||||
/**
|
||||
* Class DeviceParserAbstract
|
||||
*
|
||||
* Abstract class for all device parsers
|
||||
*
|
||||
* @package DeviceDetector\Parser\Device
|
||||
*/
|
||||
abstract class DeviceParserAbstract extends ParserAbstract
|
||||
{
|
||||
protected $deviceType = null;
|
||||
protected $model = null;
|
||||
protected $brand = null;
|
||||
|
||||
const DEVICE_TYPE_DESKTOP = 0;
|
||||
const DEVICE_TYPE_SMARTPHONE = 1;
|
||||
const DEVICE_TYPE_TABLET = 2;
|
||||
const DEVICE_TYPE_FEATURE_PHONE = 3;
|
||||
const DEVICE_TYPE_CONSOLE = 4;
|
||||
const DEVICE_TYPE_TV = 5; // including set top boxes, blu-ray players,...
|
||||
const DEVICE_TYPE_CAR_BROWSER = 6;
|
||||
const DEVICE_TYPE_SMART_DISPLAY = 7;
|
||||
const DEVICE_TYPE_CAMERA = 8;
|
||||
const DEVICE_TYPE_PORTABLE_MEDIA_PAYER = 9;
|
||||
const DEVICE_TYPE_PHABLET = 10;
|
||||
|
||||
/**
|
||||
* Detectable device types
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected static $deviceTypes = array(
|
||||
'desktop' => self::DEVICE_TYPE_DESKTOP,
|
||||
'smartphone' => self::DEVICE_TYPE_SMARTPHONE,
|
||||
'tablet' => self::DEVICE_TYPE_TABLET,
|
||||
'feature phone' => self::DEVICE_TYPE_FEATURE_PHONE,
|
||||
'console' => self::DEVICE_TYPE_CONSOLE,
|
||||
'tv' => self::DEVICE_TYPE_TV,
|
||||
'car browser' => self::DEVICE_TYPE_CAR_BROWSER,
|
||||
'smart display' => self::DEVICE_TYPE_SMART_DISPLAY,
|
||||
'camera' => self::DEVICE_TYPE_CAMERA,
|
||||
'portable media player' => self::DEVICE_TYPE_PORTABLE_MEDIA_PAYER,
|
||||
'phablet' => self::DEVICE_TYPE_PHABLET
|
||||
);
|
||||
|
||||
/**
|
||||
* Known device brands
|
||||
*
|
||||
* Note: Before using a new brand in on of the regex files, it needs to be added here
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $deviceBrands = array(
|
||||
'3Q' => '3Q',
|
||||
'AC' => 'Acer',
|
||||
'AZ' => 'Ainol',
|
||||
'AI' => 'Airness',
|
||||
'AL' => 'Alcatel',
|
||||
'A2' => 'Allview',
|
||||
'A1' => 'Altech UEC',
|
||||
'AN' => 'Arnova',
|
||||
'KN' => 'Amazon',
|
||||
'AO' => 'Amoi',
|
||||
'AP' => 'Apple',
|
||||
'AR' => 'Archos',
|
||||
'AS' => 'ARRIS',
|
||||
'AT' => 'Airties',
|
||||
'AU' => 'Asus',
|
||||
'AV' => 'Avvio',
|
||||
'AX' => 'Audiovox',
|
||||
'AY' => 'Axxion',
|
||||
'BB' => 'BBK',
|
||||
'BE' => 'Becker',
|
||||
'BI' => 'Bird',
|
||||
'BL' => 'Beetel',
|
||||
'BM' => 'Bmobile',
|
||||
'BN' => 'Barnes & Noble',
|
||||
'BO' => 'BangOlufsen',
|
||||
'BQ' => 'BenQ',
|
||||
'BS' => 'BenQ-Siemens',
|
||||
'BU' => 'Blu',
|
||||
'BW' => 'Boway',
|
||||
'BX' => 'bq',
|
||||
'BR' => 'Brondi',
|
||||
'B1' => 'Bush',
|
||||
'CB' => 'CUBOT',
|
||||
'CF' => 'Carrefour',
|
||||
'CP' => 'Captiva',
|
||||
'CS' => 'Casio',
|
||||
'CA' => 'Cat',
|
||||
'CE' => 'Celkon',
|
||||
'CC' => 'ConCorde',
|
||||
'C2' => 'Changhong',
|
||||
'CH' => 'Cherry Mobile',
|
||||
'CK' => 'Cricket',
|
||||
'C1' => 'Crosscall',
|
||||
'CL' => 'Compal',
|
||||
'CN' => 'CnM',
|
||||
'CM' => 'Crius Mea',
|
||||
'CR' => 'CreNova',
|
||||
'CT' => 'Capitel',
|
||||
'CQ' => 'Compaq',
|
||||
'CO' => 'Coolpad',
|
||||
'CW' => 'Cowon',
|
||||
'CU' => 'Cube',
|
||||
'CY' => 'Coby Kyros',
|
||||
'DA' => 'Danew',
|
||||
'DT' => 'Datang',
|
||||
'DE' => 'Denver',
|
||||
'DS' => 'Desay',
|
||||
'DB' => 'Dbtel',
|
||||
'DC' => 'DoCoMo',
|
||||
'DI' => 'Dicam',
|
||||
'DL' => 'Dell',
|
||||
'DM' => 'DMM',
|
||||
'DO' => 'Doogee',
|
||||
'DV' => 'Doov',
|
||||
'DP' => 'Dopod',
|
||||
'DU' => 'Dune HD',
|
||||
'EB' => 'E-Boda',
|
||||
'EA' => 'EBEST',
|
||||
'EC' => 'Ericsson',
|
||||
'ES' => 'ECS',
|
||||
'EI' => 'Ezio',
|
||||
'EL' => 'Elephone',
|
||||
'EP' => 'Easypix',
|
||||
'E1' => 'Energy Sistem',
|
||||
'ER' => 'Ericy',
|
||||
'EN' => 'Eton',
|
||||
'ET' => 'eTouch',
|
||||
'EV' => 'Evertek',
|
||||
'EZ' => 'Ezze',
|
||||
'FL' => 'Fly',
|
||||
'FO' => 'Foxconn',
|
||||
'FU' => 'Fujitsu',
|
||||
'GM' => 'Garmin-Asus',
|
||||
'GA' => 'Gateway',
|
||||
'GD' => 'Gemini',
|
||||
'GI' => 'Gionee',
|
||||
'GG' => 'Gigabyte',
|
||||
'GS' => 'Gigaset',
|
||||
'GC' => 'GOCLEVER',
|
||||
'GL' => 'Goly',
|
||||
'GO' => 'Google',
|
||||
'GR' => 'Gradiente',
|
||||
'GU' => 'Grundig',
|
||||
'HA' => 'Haier',
|
||||
'HS' => 'Hasee',
|
||||
'HI' => 'Hisense',
|
||||
'HL' => 'Hi-Level',
|
||||
'HO' => 'Hosin',
|
||||
'HP' => 'HP',
|
||||
'HT' => 'HTC',
|
||||
'HU' => 'Huawei',
|
||||
'HX' => 'Humax',
|
||||
'HY' => 'Hyrican',
|
||||
'HN' => 'Hyundai',
|
||||
'IA' => 'Ikea',
|
||||
'IB' => 'iBall',
|
||||
'IJ' => 'i-Joy',
|
||||
'IY' => 'iBerry',
|
||||
'IK' => 'iKoMo',
|
||||
'IM' => 'i-mate',
|
||||
'I1' => 'iOcean',
|
||||
'IF' => 'Infinix',
|
||||
'IN' => 'Innostream',
|
||||
'II' => 'Inkti',
|
||||
'IX' => 'Intex',
|
||||
'IO' => 'i-mobile',
|
||||
'IQ' => 'INQ',
|
||||
'IT' => 'Intek',
|
||||
'IV' => 'Inverto',
|
||||
'IZ' => 'iTel',
|
||||
'JI' => 'Jiayu',
|
||||
'JO' => 'Jolla',
|
||||
'KA' => 'Karbonn',
|
||||
'KD' => 'KDDI',
|
||||
'KI' => 'Kingsun',
|
||||
'KO' => 'Konka',
|
||||
'KM' => 'Komu',
|
||||
'KB' => 'Koobee',
|
||||
'KT' => 'K-Touch',
|
||||
'KH' => 'KT-Tech',
|
||||
'KP' => 'KOPO',
|
||||
'KR' => 'Koridy',
|
||||
'KU' => 'Kumai',
|
||||
'KY' => 'Kyocera',
|
||||
'KZ' => 'Kazam',
|
||||
'LV' => 'Lava',
|
||||
'LA' => 'Lanix',
|
||||
'LC' => 'LCT',
|
||||
'LE' => 'Lenovo',
|
||||
'LN' => 'Lenco',
|
||||
'LP' => 'Le Pan',
|
||||
'LG' => 'LG',
|
||||
'LI' => 'Lingwin',
|
||||
'LO' => 'Loewe',
|
||||
'LM' => 'Logicom',
|
||||
'LX' => 'Lexibook',
|
||||
'MJ' => 'Majestic',
|
||||
'MA' => 'Manta Multimedia',
|
||||
'MB' => 'Mobistel',
|
||||
'M3' => 'Mecer',
|
||||
'MD' => 'Medion',
|
||||
'M2' => 'MEEG',
|
||||
'M1' => 'Meizu',
|
||||
'ME' => 'Metz',
|
||||
'MX' => 'MEU',
|
||||
'MI' => 'MicroMax',
|
||||
'MC' => 'Mediacom',
|
||||
'MK' => 'MediaTek',
|
||||
'MO' => 'Mio',
|
||||
'MM' => 'Mpman',
|
||||
'MF' => 'Mofut',
|
||||
'MR' => 'Motorola',
|
||||
'MS' => 'Microsoft',
|
||||
'MZ' => 'MSI',
|
||||
'MU' => 'Memup',
|
||||
'MT' => 'Mitsubishi',
|
||||
'ML' => 'MLLED',
|
||||
'MQ' => 'M.T.T.',
|
||||
'MY' => 'MyPhone',
|
||||
'NE' => 'NEC',
|
||||
'NA' => 'Netgear',
|
||||
'NG' => 'NGM',
|
||||
'NI' => 'Nintendo',
|
||||
'N1' => 'Noain',
|
||||
'NK' => 'Nokia',
|
||||
'NM' => 'Nomi',
|
||||
'NN' => 'Nikon',
|
||||
'NW' => 'Newgen',
|
||||
'NX' => 'Nexian',
|
||||
'NT' => 'NextBook',
|
||||
'OD' => 'Onda',
|
||||
'ON' => 'OnePlus',
|
||||
'OP' => 'OPPO',
|
||||
'OR' => 'Orange',
|
||||
'OT' => 'O2',
|
||||
'OK' => 'Ouki',
|
||||
'OU' => 'OUYA',
|
||||
'OO' => 'Opsson',
|
||||
'PA' => 'Panasonic',
|
||||
'PE' => 'PEAQ',
|
||||
'PH' => 'Philips',
|
||||
'PL' => 'Polaroid',
|
||||
'PM' => 'Palm',
|
||||
'PO' => 'phoneOne',
|
||||
'PT' => 'Pantech',
|
||||
'PV' => 'Point of View',
|
||||
'PP' => 'PolyPad',
|
||||
'P2' => 'Pomp',
|
||||
'PS' => 'Positivo',
|
||||
'PR' => 'Prestigio',
|
||||
'P1' => 'ProScan',
|
||||
'PU' => 'PULID',
|
||||
'QI' => 'Qilive',
|
||||
'QT' => 'Qtek',
|
||||
'QM' => 'QMobile',
|
||||
'QU' => 'Quechua',
|
||||
'OV' => 'Overmax',
|
||||
'OY' => 'Oysters',
|
||||
'RA' => 'Ramos',
|
||||
'RC' => 'RCA Tablets',
|
||||
'RB' => 'Readboy',
|
||||
'RI' => 'Rikomagic',
|
||||
'RM' => 'RIM',
|
||||
'RK' => 'Roku',
|
||||
'RO' => 'Rover',
|
||||
'SA' => 'Samsung',
|
||||
'SD' => 'Sega',
|
||||
'SE' => 'Sony Ericsson',
|
||||
'S1' => 'Sencor',
|
||||
'SF' => 'Softbank',
|
||||
'SX' => 'SFR',
|
||||
'SG' => 'Sagem',
|
||||
'SH' => 'Sharp',
|
||||
'SI' => 'Siemens',
|
||||
'SN' => 'Sendo',
|
||||
'SK' => 'Skyworth',
|
||||
'SC' => 'Smartfren',
|
||||
'SO' => 'Sony',
|
||||
'SP' => 'Spice',
|
||||
'SU' => 'SuperSonic',
|
||||
'SV' => 'Selevision',
|
||||
'SY' => 'Sanyo',
|
||||
'SM' => 'Symphony',
|
||||
'SR' => 'Smart',
|
||||
'S4' => 'Star',
|
||||
'ST' => 'Storex',
|
||||
'S2' => 'Stonex',
|
||||
'S3' => 'SunVan',
|
||||
'SZ' => 'Sumvision',
|
||||
'TA' => 'Tesla',
|
||||
'TC' => 'TCL',
|
||||
'TE' => 'Telit',
|
||||
'T4' => 'ThL',
|
||||
'TH' => 'TiPhone',
|
||||
'TB' => 'Tecno Mobile',
|
||||
'TD' => 'Tesco',
|
||||
'TI' => 'TIANYU',
|
||||
'TL' => 'Telefunken',
|
||||
'T2' => 'Telenor',
|
||||
'TM' => 'T-Mobile',
|
||||
'TN' => 'Thomson',
|
||||
'T1' => 'Tolino',
|
||||
'TO' => 'Toplux',
|
||||
'TS' => 'Toshiba',
|
||||
'TT' => 'TechnoTrend',
|
||||
'T3' => 'Trevi',
|
||||
'TU' => 'Tunisie Telecom',
|
||||
'TR' => 'Turbo-X',
|
||||
'TV' => 'TVC',
|
||||
'TX' => 'TechniSat',
|
||||
'TZ' => 'teXet',
|
||||
'UN' => 'Unowhy',
|
||||
'US' => 'Uniscope',
|
||||
'UT' => 'UTStarcom',
|
||||
'VA' => 'Vastking',
|
||||
'VD' => 'Videocon',
|
||||
'VE' => 'Vertu',
|
||||
'VI' => 'Vitelcom',
|
||||
'VK' => 'VK Mobile',
|
||||
'VS' => 'ViewSonic',
|
||||
'VT' => 'Vestel',
|
||||
'VV' => 'Vivo',
|
||||
'V1' => 'Voto',
|
||||
'VO' => 'Voxtel',
|
||||
'VF' => 'Vodafone',
|
||||
'VZ' => 'Vizio',
|
||||
'VW' => 'Videoweb',
|
||||
'WA' => 'Walton',
|
||||
'WB' => 'Web TV',
|
||||
'WE' => 'WellcoM',
|
||||
'WY' => 'Wexler',
|
||||
'WI' => 'Wiko',
|
||||
'WL' => 'Wolder',
|
||||
'WO' => 'Wonu',
|
||||
'WX' => 'Woxter',
|
||||
'XI' => 'Xiaomi',
|
||||
'XO' => 'Xolo',
|
||||
'XX' => 'Unknown',
|
||||
'YA' => 'Yarvik',
|
||||
'YU' => 'Yuandao',
|
||||
'YS' => 'Yusun',
|
||||
'YT' => 'Ytone',
|
||||
'ZE' => 'Zeemi',
|
||||
'ZO' => 'Zonda',
|
||||
'ZP' => 'Zopo',
|
||||
'ZT' => 'ZTE',
|
||||
);
|
||||
|
||||
public function getDeviceType()
|
||||
{
|
||||
return $this->deviceType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns available device types
|
||||
*
|
||||
* @see $deviceTypes
|
||||
* @return array
|
||||
*/
|
||||
public static function getAvailableDeviceTypes()
|
||||
{
|
||||
return self::$deviceTypes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns names of all available device types
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getAvailableDeviceTypeNames()
|
||||
{
|
||||
return array_keys(self::$deviceTypes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the given device type
|
||||
*
|
||||
* @param int $deviceType one of the DEVICE_TYPE_* constants
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public static function getDeviceName($deviceType)
|
||||
{
|
||||
return array_search($deviceType, self::$deviceTypes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the detected device model
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getModel()
|
||||
{
|
||||
return $this->model;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the detected device brand
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getBrand()
|
||||
{
|
||||
return $this->brand;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the full brand name for the given short name
|
||||
*
|
||||
* @param string $brandId short brand name
|
||||
* @return string
|
||||
*/
|
||||
public static function getFullName($brandId)
|
||||
{
|
||||
if (array_key_exists($brandId, self::$deviceBrands)) {
|
||||
return self::$deviceBrands[$brandId];
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
public function parse()
|
||||
{
|
||||
$regexes = $this->getRegexes();
|
||||
foreach ($regexes as $brand => $regex) {
|
||||
$matches = $this->matchUserAgent($regex['regex']);
|
||||
if ($matches) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($matches)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$brandId = array_search($brand, self::$deviceBrands);
|
||||
if ($brandId === false) {
|
||||
// This Exception should never be thrown. If so a defined brand name is missing in $deviceBrands
|
||||
throw new \Exception("The brand with name '$brand' should be listed in the deviceBrands array."); // @codeCoverageIgnore
|
||||
}
|
||||
$this->brand = $brandId;
|
||||
|
||||
if (isset($regex['device']) && in_array($regex['device'], self::$deviceTypes)) {
|
||||
$this->deviceType = self::$deviceTypes[$regex['device']];
|
||||
}
|
||||
|
||||
if (isset($regex['model'])) {
|
||||
$this->model = $this->buildModel($regex['model'], $matches);
|
||||
}
|
||||
|
||||
if (isset($regex['models'])) {
|
||||
foreach ($regex['models'] as $modelRegex) {
|
||||
$modelMatches = $this->matchUserAgent($modelRegex['regex']);
|
||||
if ($modelMatches) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($modelMatches)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$this->model = trim($this->buildModel($modelRegex['model'], $modelMatches));
|
||||
|
||||
if (isset($modelRegex['brand']) && $brandId = array_search($modelRegex['brand'], self::$deviceBrands)) {
|
||||
$this->brand = $brandId;
|
||||
}
|
||||
|
||||
if (isset($modelRegex['device']) && in_array($modelRegex['device'], self::$deviceTypes)) {
|
||||
$this->deviceType = self::$deviceTypes[$modelRegex['device']];
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function buildModel($model, $matches)
|
||||
{
|
||||
$model = $this->buildByMatch($model, $matches);
|
||||
|
||||
$model = str_replace('_', ' ', $model);
|
||||
|
||||
$model = preg_replace('/ TD$/i', '', $model);
|
||||
|
||||
if ($model === 'Build') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $model;
|
||||
}
|
||||
}
|
||||
53
www/analytics/vendor/piwik/device-detector/Parser/Device/HbbTv.php
vendored
Normal file
53
www/analytics/vendor/piwik/device-detector/Parser/Device/HbbTv.php
vendored
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser\Device;
|
||||
|
||||
/**
|
||||
* Class HbbTv
|
||||
*
|
||||
* Device parser for hbbtv detection
|
||||
*
|
||||
* @package DeviceDetector\Parser\Device
|
||||
*/
|
||||
class HbbTv extends DeviceParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/device/televisions.yml';
|
||||
protected $parserName = 'tv';
|
||||
|
||||
/**
|
||||
* Parses the current UA and checks whether it contains HbbTv information
|
||||
*
|
||||
* @see televisions.yml for list of detected televisions
|
||||
*/
|
||||
public function parse()
|
||||
{
|
||||
// only parse user agents containing hbbtv fragment
|
||||
if (!$this->isHbbTv()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
parent::parse();
|
||||
|
||||
// always set device type to tv, even if no model/brand could be found
|
||||
$this->deviceType = self::DEVICE_TYPE_TV;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if the parsed UA was identified as a HbbTV device
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isHbbTv()
|
||||
{
|
||||
$regex = 'HbbTV/([1-9]{1}(?:\.[0-9]{1}){1,2})';
|
||||
$match = $this->matchUserAgent($regex);
|
||||
return $match ? $match[1] : false;
|
||||
}
|
||||
}
|
||||
21
www/analytics/vendor/piwik/device-detector/Parser/Device/Mobile.php
vendored
Normal file
21
www/analytics/vendor/piwik/device-detector/Parser/Device/Mobile.php
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser\Device;
|
||||
|
||||
/**
|
||||
* Class Mobile
|
||||
*
|
||||
* Device parser for mobile detection
|
||||
*
|
||||
* @package DeviceDetector\Parser\Device
|
||||
*/
|
||||
class Mobile extends DeviceParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/device/mobiles.yml';
|
||||
protected $parserName = 'mobile';
|
||||
}
|
||||
30
www/analytics/vendor/piwik/device-detector/Parser/Device/PortableMediaPlayer.php
vendored
Normal file
30
www/analytics/vendor/piwik/device-detector/Parser/Device/PortableMediaPlayer.php
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser\Device;
|
||||
|
||||
/**
|
||||
* Class PortableMediaPlayer
|
||||
*
|
||||
* Device parser for portable media player detection
|
||||
*
|
||||
* @package DeviceDetector\Parser\Device
|
||||
*/
|
||||
class PortableMediaPlayer extends DeviceParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/device/portable_media_player.yml';
|
||||
protected $parserName = 'portablemediaplayer';
|
||||
|
||||
public function parse()
|
||||
{
|
||||
if (!$this->preMatchOverall()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return parent::parse();
|
||||
}
|
||||
}
|
||||
245
www/analytics/vendor/piwik/device-detector/Parser/OperatingSystem.php
vendored
Normal file
245
www/analytics/vendor/piwik/device-detector/Parser/OperatingSystem.php
vendored
Normal file
|
|
@ -0,0 +1,245 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser;
|
||||
|
||||
/**
|
||||
* Class OperatingSystem
|
||||
*
|
||||
* Parses the useragent for operating system information
|
||||
*
|
||||
* Detected operating systems can be found in self::$operatingSystems and /regexes/oss.yml
|
||||
* This class also defined some operating system families and methods to get the family for a specific os
|
||||
*
|
||||
* @package DeviceDetector\Parser
|
||||
*/
|
||||
class OperatingSystem extends ParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/oss.yml';
|
||||
protected $parserName = 'os';
|
||||
|
||||
/**
|
||||
* Known operating systems mapped to their internal short codes
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected static $operatingSystems = array(
|
||||
'AIX' => 'AIX',
|
||||
'AND' => 'Android',
|
||||
'AMG' => 'AmigaOS',
|
||||
'ATV' => 'Apple TV',
|
||||
'ARL' => 'Arch Linux',
|
||||
'BTR' => 'BackTrack',
|
||||
'SBA' => 'Bada',
|
||||
'BEO' => 'BeOS',
|
||||
'BLB' => 'BlackBerry OS',
|
||||
'QNX' => 'BlackBerry Tablet OS',
|
||||
'BMP' => 'Brew',
|
||||
'CES' => 'CentOS',
|
||||
'COS' => 'Chrome OS',
|
||||
'CYN' => 'CyanogenMod',
|
||||
'DEB' => 'Debian',
|
||||
'DFB' => 'DragonFly',
|
||||
'FED' => 'Fedora',
|
||||
'FOS' => 'Firefox OS',
|
||||
'BSD' => 'FreeBSD',
|
||||
'GNT' => 'Gentoo',
|
||||
'GTV' => 'Google TV',
|
||||
'HPX' => 'HP-UX',
|
||||
'HAI' => 'Haiku OS',
|
||||
'IRI' => 'IRIX',
|
||||
'INF' => 'Inferno',
|
||||
'KNO' => 'Knoppix',
|
||||
'KBT' => 'Kubuntu',
|
||||
'LIN' => 'GNU/Linux',
|
||||
'LBT' => 'Lubuntu',
|
||||
'VLN' => 'VectorLinux',
|
||||
'MAC' => 'Mac',
|
||||
'MAE' => 'Maemo',
|
||||
'MDR' => 'Mandriva',
|
||||
'SMG' => 'MeeGo',
|
||||
'MCD' => 'MocorDroid',
|
||||
'MIN' => 'Mint',
|
||||
'MLD' => 'MildWild',
|
||||
'MOR' => 'MorphOS',
|
||||
'NBS' => 'NetBSD',
|
||||
'MTK' => 'MTK / Nucleus',
|
||||
'WII' => 'Nintendo',
|
||||
'NDS' => 'Nintendo Mobile',
|
||||
'OS2' => 'OS/2',
|
||||
'T64' => 'OSF1',
|
||||
'OBS' => 'OpenBSD',
|
||||
'PSP' => 'PlayStation Portable',
|
||||
'PS3' => 'PlayStation',
|
||||
'RHT' => 'Red Hat',
|
||||
'ROS' => 'RISC OS',
|
||||
'RZD' => 'RazoDroiD',
|
||||
'SAB' => 'Sabayon',
|
||||
'SSE' => 'SUSE',
|
||||
'SAF' => 'Sailfish OS',
|
||||
'SLW' => 'Slackware',
|
||||
'SOS' => 'Solaris',
|
||||
'SYL' => 'Syllable',
|
||||
'SYM' => 'Symbian',
|
||||
'SYS' => 'Symbian OS',
|
||||
'S40' => 'Symbian OS Series 40',
|
||||
'S60' => 'Symbian OS Series 60',
|
||||
'SY3' => 'Symbian^3',
|
||||
'TDX' => 'ThreadX',
|
||||
'TIZ' => 'Tizen',
|
||||
'UBT' => 'Ubuntu',
|
||||
'WTV' => 'WebTV',
|
||||
'WIN' => 'Windows',
|
||||
'WCE' => 'Windows CE',
|
||||
'WMO' => 'Windows Mobile',
|
||||
'WPH' => 'Windows Phone',
|
||||
'WRT' => 'Windows RT',
|
||||
'XBX' => 'Xbox',
|
||||
'XBT' => 'Xubuntu',
|
||||
'YNS' => 'YunOs',
|
||||
'IOS' => 'iOS',
|
||||
'POS' => 'palmOS',
|
||||
'WOS' => 'webOS'
|
||||
);
|
||||
|
||||
/**
|
||||
* Operating system families mapped to the short codes of the associated operating systems
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected static $osFamilies = array(
|
||||
'Android' => array('AND', 'CYN', 'RZD', 'MLD', 'MCD'),
|
||||
'AmigaOS' => array('AMG', 'MOR'),
|
||||
'Apple TV' => array('ATV'),
|
||||
'BlackBerry' => array('BLB', 'QNX'),
|
||||
'Brew' => array('BMP'),
|
||||
'BeOS' => array('BEO', 'HAI'),
|
||||
'Chrome OS' => array('COS'),
|
||||
'Firefox OS' => array('FOS'),
|
||||
'Gaming Console' => array('WII', 'PS3'),
|
||||
'Google TV' => array('GTV'),
|
||||
'IBM' => array('OS2'),
|
||||
'iOS' => array('IOS'),
|
||||
'RISC OS' => array('ROS'),
|
||||
'GNU/Linux' => array('LIN', 'ARL', 'DEB', 'KNO', 'MIN', 'UBT', 'KBT', 'XBT', 'LBT', 'FED', 'RHT', 'VLN', 'MDR', 'GNT', 'SAB', 'SLW', 'SSE', 'CES', 'BTR', 'YNS', 'SAF'),
|
||||
'Mac' => array('MAC'),
|
||||
'Mobile Gaming Console' => array('PSP', 'NDS', 'XBX'),
|
||||
'Real-time OS' => array('MTK', 'TDX'),
|
||||
'Other Mobile' => array('WOS', 'POS', 'SBA', 'TIZ', 'SMG', 'MAE'),
|
||||
'Symbian' => array('SYM', 'SYS', 'SY3', 'S60', 'S40'),
|
||||
'Unix' => array('SOS', 'AIX', 'HPX', 'BSD', 'NBS', 'OBS', 'DFB', 'SYL', 'IRI', 'T64', 'INF'),
|
||||
'WebTV' => array('WTV'),
|
||||
'Windows' => array('WIN'),
|
||||
'Windows Mobile' => array('WPH', 'WMO', 'WCE', 'WRT')
|
||||
);
|
||||
|
||||
/**
|
||||
* Returns all available operating systems
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getAvailableOperatingSystems()
|
||||
{
|
||||
return self::$operatingSystems;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all available operating system families
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getAvailableOperatingSystemFamilies()
|
||||
{
|
||||
return self::$osFamilies;
|
||||
}
|
||||
|
||||
public function parse()
|
||||
{
|
||||
$return = array();
|
||||
|
||||
foreach ($this->getRegexes() as $osRegex) {
|
||||
$matches = $this->matchUserAgent($osRegex['regex']);
|
||||
if ($matches) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$matches) {
|
||||
return $return;
|
||||
}
|
||||
|
||||
$name = $this->buildByMatch($osRegex['name'], $matches);
|
||||
$short = 'UNK';
|
||||
|
||||
foreach (self::$operatingSystems as $osShort => $osName) {
|
||||
if (strtolower($name) == strtolower($osName)) {
|
||||
$name = $osName;
|
||||
$short = $osShort;
|
||||
}
|
||||
}
|
||||
|
||||
$return = array(
|
||||
'name' => $name,
|
||||
'short_name' => $short,
|
||||
'version' => $this->buildVersion($osRegex['version'], $matches),
|
||||
'platform' => $this->parsePlatform()
|
||||
);
|
||||
|
||||
if (in_array($return['name'], self::$operatingSystems)) {
|
||||
$return['short_name'] = array_search($return['name'], self::$operatingSystems);
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
protected function parsePlatform()
|
||||
{
|
||||
if ($this->matchUserAgent('arm')) {
|
||||
return 'ARM';
|
||||
} elseif ($this->matchUserAgent('WOW64|x64|win64|amd64|x86_64')) {
|
||||
return 'x64';
|
||||
} elseif ($this->matchUserAgent('i[0-9]86|i86pc')) {
|
||||
return 'x86';
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the operating system family for the given operating system
|
||||
*
|
||||
* @param $osLabel
|
||||
* @return bool|string If false, "Unknown"
|
||||
*/
|
||||
public static function getOsFamily($osLabel)
|
||||
{
|
||||
foreach (self::$osFamilies as $family => $labels) {
|
||||
if (in_array($osLabel, $labels)) {
|
||||
return $family;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the full name for the given short name
|
||||
*
|
||||
* @param $os
|
||||
* @param bool $ver
|
||||
*
|
||||
* @return bool|string
|
||||
*/
|
||||
public static function getNameFromId($os, $ver = false)
|
||||
{
|
||||
if (array_key_exists($os, self::$operatingSystems)) {
|
||||
$osFullName = self::$operatingSystems[$os];
|
||||
return trim($osFullName . " " . $ver);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
283
www/analytics/vendor/piwik/device-detector/Parser/ParserAbstract.php
vendored
Normal file
283
www/analytics/vendor/piwik/device-detector/Parser/ParserAbstract.php
vendored
Normal file
|
|
@ -0,0 +1,283 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser;
|
||||
|
||||
use DeviceDetector\Cache\StaticCache;
|
||||
use DeviceDetector\DeviceDetector;
|
||||
use DeviceDetector\Cache\Cache;
|
||||
use \Spyc;
|
||||
|
||||
/**
|
||||
* Class ParserAbstract
|
||||
*
|
||||
* @package DeviceDetector\Parser
|
||||
*/
|
||||
abstract class ParserAbstract
|
||||
{
|
||||
/**
|
||||
* Holds the path to the yml file containing regexes
|
||||
* @var string
|
||||
*/
|
||||
protected $fixtureFile;
|
||||
/**
|
||||
* Holds the internal name of the parser
|
||||
* Used for caching
|
||||
* @var string
|
||||
*/
|
||||
protected $parserName;
|
||||
|
||||
/**
|
||||
* Holds the user agent the should be parsed
|
||||
* @var string
|
||||
*/
|
||||
protected $userAgent;
|
||||
|
||||
/**
|
||||
* Holds an array with method that should be available global
|
||||
* @var array
|
||||
*/
|
||||
protected $globalMethods;
|
||||
|
||||
/**
|
||||
* Holds an array with regexes to parse, if already loaded
|
||||
* @var array
|
||||
*/
|
||||
protected $regexList;
|
||||
|
||||
/**
|
||||
* Indicates how deep versioning will be detected
|
||||
* if $maxMinorParts is 0 only the major version will be returned
|
||||
* @var int
|
||||
*/
|
||||
protected static $maxMinorParts = 1;
|
||||
|
||||
/**
|
||||
* Versioning constant used to set max versioning to major version only
|
||||
* Version examples are: 3, 5, 6, 200, 123, ...
|
||||
*/
|
||||
|
||||
const VERSION_TRUNCATION_MAJOR = 0;
|
||||
|
||||
/**
|
||||
* Versioning constant used to set max versioning to minor version
|
||||
* Version examples are: 3.4, 5.6, 6.234, 0.200, 1.23, ...
|
||||
*/
|
||||
const VERSION_TRUNCATION_MINOR = 1;
|
||||
|
||||
/**
|
||||
* Versioning constant used to set max versioning to path level
|
||||
* Version examples are: 3.4.0, 5.6.344, 6.234.2, 0.200.3, 1.2.3, ...
|
||||
*/
|
||||
const VERSION_TRUNCATION_PATCH = 2;
|
||||
|
||||
/**
|
||||
* Versioning constant used to set versioning to build number
|
||||
* Version examples are: 3.4.0.12, 5.6.334.0, 6.234.2.3, 0.200.3.1, 1.2.3.0, ...
|
||||
*/
|
||||
const VERSION_TRUNCATION_BUILD = 3;
|
||||
|
||||
/**
|
||||
* Versioning constant used to set versioning to unlimited (no truncation)
|
||||
*/
|
||||
const VERSION_TRUNCATION_NONE = null;
|
||||
|
||||
/**
|
||||
* @var Cache|\Doctrine\Common\Cache\Cache
|
||||
*/
|
||||
protected $cache;
|
||||
|
||||
abstract public function parse();
|
||||
|
||||
public function __construct($ua='')
|
||||
{
|
||||
$this->setUserAgent($ua);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set how DeviceDetector should return versions
|
||||
* @param int|null $type Any of the VERSION_TRUNCATION_* constants
|
||||
*/
|
||||
public static function setVersionTruncation($type)
|
||||
{
|
||||
if (in_array($type, array(self::VERSION_TRUNCATION_BUILD,
|
||||
self::VERSION_TRUNCATION_NONE,
|
||||
self::VERSION_TRUNCATION_MAJOR,
|
||||
self::VERSION_TRUNCATION_MINOR,
|
||||
self::VERSION_TRUNCATION_PATCH))) {
|
||||
self::$maxMinorParts = $type;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the user agent to parse
|
||||
*
|
||||
* @param string $ua user agent
|
||||
*/
|
||||
public function setUserAgent($ua)
|
||||
{
|
||||
$this->userAgent = $ua;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the internal name of the parser
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->parserName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the result of the parsed yml file defined in $fixtureFile
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getRegexes()
|
||||
{
|
||||
if (empty($this->regexList)) {
|
||||
$cacheKey = 'DeviceDetector-'.DeviceDetector::VERSION.'regexes-'.$this->getName();
|
||||
$cacheKey = preg_replace('/([^a-z0-9_-]+)/i', '', $cacheKey);
|
||||
$this->regexList = $this->getCache()->fetch($cacheKey);
|
||||
if (empty($this->regexList)) {
|
||||
$this->regexList = Spyc::YAMLLoad(dirname(__DIR__).DIRECTORY_SEPARATOR.$this->fixtureFile);
|
||||
$this->getCache()->save($cacheKey, $this->regexList);
|
||||
}
|
||||
}
|
||||
return $this->regexList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches the useragent against the given regex
|
||||
*
|
||||
* @param $regex
|
||||
* @return array|bool
|
||||
*/
|
||||
protected function matchUserAgent($regex)
|
||||
{
|
||||
// only match if useragent begins with given regex or there is no letter before it
|
||||
$regex = '/(?:^|[^A-Z0-9\_\-]|sprd-)(?:' . str_replace('/', '\/', $regex) . ')/i';
|
||||
|
||||
if (preg_match($regex, $this->userAgent, $matches)) {
|
||||
return $matches;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $item
|
||||
* @param array $matches
|
||||
* @return string type
|
||||
*/
|
||||
protected function buildByMatch($item, $matches)
|
||||
{
|
||||
for ($nb=1;$nb<=3;$nb++) {
|
||||
if (strpos($item, '$' . $nb) === false) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$replace = isset($matches[$nb]) ? $matches[$nb] : '';
|
||||
$item = trim(str_replace('$' . $nb, $replace, $item));
|
||||
}
|
||||
return $item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the version with the given $versionString and $matches
|
||||
*
|
||||
* Example:
|
||||
* $versionString = 'v$2'
|
||||
* $matches = array('version_1_0_1', '1_0_1')
|
||||
* return value would be v1.0.1
|
||||
*
|
||||
* @param $versionString
|
||||
* @param $matches
|
||||
* @return mixed|string
|
||||
*/
|
||||
protected function buildVersion($versionString, $matches)
|
||||
{
|
||||
$versionString = $this->buildByMatch($versionString, $matches);
|
||||
$versionString = str_replace('_', '.', $versionString);
|
||||
if (null !== self::$maxMinorParts && substr_count($versionString, '.') > self::$maxMinorParts) {
|
||||
$versionParts = explode('.', $versionString);
|
||||
$versionParts = array_slice($versionParts, 0, 1+self::$maxMinorParts);
|
||||
$versionString = implode('.', $versionParts);
|
||||
}
|
||||
return trim($versionString, ' .');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the useragent against a combination of all regexes
|
||||
*
|
||||
* All regexes returned by getRegexes() will be reversed and concated with '|'
|
||||
* Afterwards the big regex will be tested against the user agent
|
||||
*
|
||||
* Method can be used to speed up detections by making a big check before doing checks for every single regex
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function preMatchOverall()
|
||||
{
|
||||
$regexes = $this->getRegexes();
|
||||
|
||||
static $overAllMatch;
|
||||
|
||||
$cacheKey = $this->parserName.DeviceDetector::VERSION.'-all';
|
||||
$cacheKey = preg_replace('/([^a-z0-9_-]+)/i', '', $cacheKey);
|
||||
|
||||
if (empty($overAllMatch)) {
|
||||
$overAllMatch = $this->getCache()->fetch($cacheKey);
|
||||
}
|
||||
|
||||
if (empty($overAllMatch)) {
|
||||
// reverse all regexes, so we have the generic one first, which already matches most patterns
|
||||
$overAllMatch = array_reduce(array_reverse($regexes), function ($val1, $val2) {
|
||||
if (!empty($val1)) {
|
||||
return $val1.'|'.$val2['regex'];
|
||||
} else {
|
||||
return $val2['regex'];
|
||||
}
|
||||
});
|
||||
$this->getCache()->save($cacheKey, $overAllMatch);
|
||||
}
|
||||
|
||||
return $this->matchUserAgent($overAllMatch);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the Cache class
|
||||
*
|
||||
* @param Cache|\Doctrine\Common\Cache\CacheProvider $cache
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function setCache($cache)
|
||||
{
|
||||
if ($cache instanceof Cache ||
|
||||
(class_exists('\Doctrine\Common\Cache\CacheProvider') && $cache instanceof \Doctrine\Common\Cache\CacheProvider)) {
|
||||
$this->cache = $cache;
|
||||
return;
|
||||
}
|
||||
|
||||
throw new \Exception('Cache not supported');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Cache object
|
||||
*
|
||||
* @return Cache|\Doctrine\Common\Cache\CacheProvider
|
||||
*/
|
||||
public function getCache()
|
||||
{
|
||||
if (!empty($this->cache)) {
|
||||
return $this->cache;
|
||||
}
|
||||
|
||||
return new StaticCache();
|
||||
}
|
||||
}
|
||||
44
www/analytics/vendor/piwik/device-detector/Parser/VendorFragment.php
vendored
Normal file
44
www/analytics/vendor/piwik/device-detector/Parser/VendorFragment.php
vendored
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
/**
|
||||
* Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
*/
|
||||
namespace DeviceDetector\Parser;
|
||||
|
||||
use DeviceDetector\Parser\Device\DeviceParserAbstract;
|
||||
|
||||
/**
|
||||
* Class VendorFragments
|
||||
*
|
||||
* Device parser for vendor fragment detection
|
||||
*
|
||||
* @package DeviceDetector\Parser\Device
|
||||
*/
|
||||
class VendorFragment extends ParserAbstract
|
||||
{
|
||||
protected $fixtureFile = 'regexes/vendorfragments.yml';
|
||||
protected $parserName = 'vendorfragments';
|
||||
|
||||
protected $matchedRegex = null;
|
||||
|
||||
public function parse()
|
||||
{
|
||||
foreach ($this->getRegexes() as $brand => $regexes) {
|
||||
foreach ($regexes as $regex) {
|
||||
if ($this->matchUserAgent($regex.'[^a-z0-9]+')) {
|
||||
$this->matchedRegex = $regex;
|
||||
return array_search($brand, DeviceParserAbstract::$deviceBrands);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
public function getMatchedRegex()
|
||||
{
|
||||
return $this->matchedRegex;
|
||||
}
|
||||
}
|
||||
145
www/analytics/vendor/piwik/device-detector/README.md
vendored
145
www/analytics/vendor/piwik/device-detector/README.md
vendored
|
|
@ -1,7 +1,148 @@
|
|||
DeviceDetector
|
||||
==============
|
||||
|
||||
The Universal Device Detection library, that parses User Agents and detects devices (desktop, tablet, mobile, tv, cars, console, etc.), and detects browsers, operating systems, devices, brands and models.
|
||||
[](https://packagist.org/packages/piwik/device-detector)
|
||||
[](https://packagist.org/packages/piwik/device-detector)
|
||||
[](https://packagist.org/packages/piwik/device-detector)
|
||||
[](https://packagist.org/packages/piwik/device-detector)
|
||||
|
||||
## Code Status
|
||||
|
||||
[](https://travis-ci.org/piwik/device-detector)
|
||||
[](https://coveralls.io/r/piwik/device-detector)
|
||||
[](http://isitmaintained.com/project/piwik/device-detector "Average time to resolve an issue")
|
||||
[](http://isitmaintained.com/project/piwik/device-detector "Percentage of issues still open")
|
||||
|
||||
## Description
|
||||
|
||||
The Universal Device Detection library, that parses User Agents and detects devices (desktop, tablet, mobile, tv, cars, console, etc.), and detects clients (browsers, feed readers, media players, PIMs, ...), operating systems, devices, brands and models.
|
||||
|
||||
## Usage
|
||||
|
||||
Using DeviceDetector with composer is quite easy. Just add piwik/device-detector to your projects requirements. And use some code like this one:
|
||||
|
||||
|
||||
Build status (master branch) [](https://travis-ci.org/piwik/DeviceDetector)
|
||||
```php
|
||||
require_once 'vendor/autoload.php';
|
||||
|
||||
use DeviceDetector\DeviceDetector;
|
||||
use DeviceDetector\Parser\Device\DeviceParserAbstract;
|
||||
|
||||
// OPTIONAL: Set version truncation to none, so full versions will be returned
|
||||
// By default only minor versions will be returned (e.g. X.Y)
|
||||
// for other options see VERSION_TRUNCATION_* constants in DeviceParserAbstract class
|
||||
DeviceParserAbstract::setVersionTruncation(DeviceParserAbstract::VERSION_TRUNCATION_NONE);
|
||||
|
||||
$dd = new DeviceDetector($userAgent);
|
||||
|
||||
// OPTIONAL: Set caching method
|
||||
// By default static cache is used, which works best within one php process (memory array caching)
|
||||
// To cache across requests use caching in files or memcache
|
||||
$dd->setCache(new Doctrine\Common\Cache\PhpFileCache('./tmp/'));
|
||||
|
||||
// OPTIONAL: If called, getBot() will only return true if a bot was detected (speeds up detection a bit)
|
||||
$dd->discardBotInformation();
|
||||
|
||||
// OPTIONAL: If called, bot detection will completely be skipped (bots will be detected as regular devices then)
|
||||
$dd->skipBotDetection();
|
||||
|
||||
$dd->parse();
|
||||
|
||||
if ($dd->isBot()) {
|
||||
// handle bots,spiders,crawlers,...
|
||||
$botInfo = $dd->getBot();
|
||||
} else {
|
||||
$clientInfo = $dd->getClient(); // holds information about browser, feed reader, media player, ...
|
||||
$osInfo = $dd->getOs();
|
||||
$device = $dd->getDevice();
|
||||
$brand = $dd->getBrand();
|
||||
$model = $dd->getModel();
|
||||
}
|
||||
```
|
||||
|
||||
### Caching
|
||||
|
||||
:exclamation: Caching of DeviceDetector was completely redesigned in 3.0. You may need to reimplement it when updating from below.
|
||||
|
||||
In order to get results faster across requests, we recommend to use the additional caching possibility.
|
||||
Currently DeviceDetector is able to use [doctrine/cache](https://github.com/doctrine/cache). You can simply require it in your composer.json and use it like in the example before.
|
||||
For those who like to implement their own Caching there is a second possibility. Besides doctrine caches the ```setCache``` method also accepts classes implementing the ```DeviceDetector\Cache\Cache``` interface. That way you can do whatever you want without requiring doctrine/cache.
|
||||
|
||||
## Contributing
|
||||
|
||||
### Hacking the library
|
||||
|
||||
This is a free/libre library under license LGPL v3 or later.
|
||||
|
||||
Your pull requests and/or feedback is very welcome!
|
||||
|
||||
### Listing all user agents from your logs
|
||||
Sometimes it may be useful to generate the list of most used user agents on your website,
|
||||
extracting this list from your access logs using the following command:
|
||||
|
||||
```
|
||||
zcat ~/path/to/access/logs* | awk -F'"' '{print $6}' | sort | uniq -c | sort -rn | head -n20000 > /home/piwik/top-user-agents.txt
|
||||
```
|
||||
|
||||
### Contributors
|
||||
Created by the [Piwik team](http://piwik.org/team/), Stefan Giehl, Matthieu Aubry, Michał Gaździk,
|
||||
Tomasz Majczak, Grzegorz Kaszuba, Piotr Banaszczyk and contributors.
|
||||
|
||||
Together we can build the best Device Detection library.
|
||||
|
||||
We are looking forward to your contributions and pull requests!
|
||||
|
||||
## Tests
|
||||
|
||||
See also: [QA at Piwik](http://piwik.org/qa/)
|
||||
|
||||
### Running tests
|
||||
|
||||
```
|
||||
cd /path/to/device-detector
|
||||
curl -sS https://getcomposer.org/installer | php
|
||||
php composer.phar install
|
||||
phpunit
|
||||
```
|
||||
|
||||
## What Device Detector is able to detect
|
||||
|
||||
The lists below are auto generated and updated from time to time. Some of them might not be complete.
|
||||
|
||||
*Last update: 2016/01/21*
|
||||
|
||||
### List of detected operating systems:
|
||||
|
||||
AIX, Android, AmigaOS, Apple TV, Arch Linux, BackTrack, Bada, BeOS, BlackBerry OS, BlackBerry Tablet OS, Brew, CentOS, Chrome OS, CyanogenMod, Debian, DragonFly, Fedora, Firefox OS, FreeBSD, Gentoo, Google TV, HP-UX, Haiku OS, IRIX, Inferno, Knoppix, Kubuntu, GNU/Linux, Lubuntu, VectorLinux, Mac, Maemo, Mandriva, MeeGo, MocorDroid, Mint, MildWild, MorphOS, NetBSD, MTK / Nucleus, Nintendo, Nintendo Mobile, OS/2, OSF1, OpenBSD, PlayStation Portable, PlayStation, Red Hat, RISC OS, RazoDroiD, Sabayon, SUSE, Sailfish OS, Slackware, Solaris, Syllable, Symbian, Symbian OS, Symbian OS Series 40, Symbian OS Series 60, Symbian^3, ThreadX, Tizen, Ubuntu, WebTV, Windows, Windows CE, Windows Mobile, Windows Phone, Windows RT, Xbox, Xubuntu, YunOs, iOS, palmOS, webOS
|
||||
|
||||
### List of detected browsers:
|
||||
|
||||
360 Phone Browser, 360 Browser, Avant Browser, ABrowse, ANTGalio, Amaya, Amigo, Android Browser, Arora, Amiga Voyager, Amiga Aweb, BlackBerry Browser, Baidu Browser, Baidu Spark, Beonex, Bunjalloo, BrowseX, Camino, Coc Coc, Comodo Dragon, Charon, Chrome Frame, Chrome, Chrome Mobile iOS, Conkeror, Chrome Mobile, CoolNovo, CometBird, ChromePlus, Chromium, Cheshire, Deepnet Explorer, Dolphin, Dillo, Elinks, Epiphany, Espial TV Browser, Firebird, Fluid, Fennec, Firefox, Flock, Fireweb Navigator, Galeon, Google Earth, HotJava, Iceape, IBrowse, iCab, IceDragon, Iceweasel, Internet Explorer, IE Mobile, Iron, Jasmine, Kindle Browser, K-meleon, Konqueror, Kapiko, Kylo, Kazehakase, Liebao, Links, Lunascape, Lynx, MicroB, NCSA Mosaic, Mercury, Mobile Safari, Midori, MIUI Browser, Mobile Silk, Maxthon, Nokia Browser, Nokia OSS Browser, Nokia Ovi Browser, NetFront, NetFront Life, NetPositive, Netscape, Obigo, Odyssey Web Browser, Off By One, ONE Browser, Opera Mini, Opera Mobile, Opera, Opera Next, Oregano, Openwave Mobile Browser, OmniWeb, Palm Blazer, Pale Moon, Palm Pre, Puffin, Palm WebPro, Phoenix, Polaris, Microsoft Edge, QQ Browser, Rekonq, RockMelt, Sailfish Browser, SEMC-Browser, Sogou Explorer, Safari, Shiira, Sleipnir, SeaMonkey, Snowshoe, Sunrise, Swiftfox, Tizen Browser, UC Browser, Vivaldi, WebPositive, wOSBrowser, WeTab Browser, Yandex Browser, Xiino
|
||||
|
||||
### List of detected browser engines:
|
||||
|
||||
WebKit, Blink, Trident, Text-based, Dillo, iCab, Presto, Gecko, KHTML, NetFront, Edge
|
||||
|
||||
### List of detected libraries:
|
||||
|
||||
curl, Guzzle (PHP HTTP Client), Java, Perl, Python Requests, Python urllib, Wget
|
||||
|
||||
### List of detected media players:
|
||||
|
||||
Banshee, Clementine, FlyCast, Instacast, iTunes, Kodi, MediaMonkey, Miro, NexPlayer, Nightingale, QuickTime, Songbird, Stagefright, SubStream, VLC, Winamp, Windows Media Player, XBMC
|
||||
|
||||
### List of detected mobile apps:
|
||||
|
||||
AndroidDownloadManager, Facebook, FeedR, Google Play Newsstand, Google Plus, Sina Weibo, WeChat, YouTube and *mobile apps using [AFNetworking](https://github.com/AFNetworking/AFNetworking)*
|
||||
|
||||
### List of detected PIMs (personal information manager):
|
||||
|
||||
Airmail, Barca, Lotus Notes, Microsoft Outlook, Outlook Express, Postbox, The Bat!, Thunderbird
|
||||
|
||||
### List of detected feed readers:
|
||||
|
||||
Akregator, Apple PubSub, FeedDemon, Feeddler RSS Reader, JetBrains Omea Reader, Liferea, NetNewsWire, Newsbeuter, NewsBlur, NewsBlur Mobile App, Pulp, ReadKit, Reeder, RSS Bandit, RSS Junkie, RSSOwl, Stringer
|
||||
|
||||
### List of brands with detected devices:
|
||||
|
||||
3Q, Acer, Ainol, Airness, Alcatel, Allview, Altech UEC, Arnova, Amazon, Amoi, Apple, Archos, ARRIS, Airties, Asus, Avvio, Audiovox, Axxion, BBK, Becker, Bird, Beetel, Bmobile, Barnes & Noble, BangOlufsen, BenQ, BenQ-Siemens, Blu, Boway, bq, Brondi, Bush, CUBOT, Carrefour, Captiva, Casio, Cat, Celkon, ConCorde, Changhong, Cherry Mobile, Cricket, Crosscall, Compal, CnM, Crius Mea, CreNova, Capitel, Compaq, Coolpad, Cowon, Cube, Coby Kyros, Danew, Datang, Denver, Desay, Dbtel, DoCoMo, Dicam, Dell, DMM, Doogee, Doov, Dopod, Dune HD, E-Boda, EBEST, Ericsson, ECS, Ezio, Elephone, Easypix, Energy Sistem, Ericy, Eton, eTouch, Evertek, Ezze, Fly, Foxconn, Fujitsu, Garmin-Asus, Gateway, Gemini, Gionee, Gigabyte, Gigaset, GOCLEVER, Goly, Google, Gradiente, Grundig, Haier, Hasee, Hisense, Hi-Level, Hosin, HP, HTC, Huawei, Humax, Hyrican, Hyundai, Ikea, iBall, i-Joy, iBerry, iKoMo, i-mate, iOcean, Infinix, Innostream, Inkti, Intex, i-mobile, INQ, Intek, Inverto, iTel, Jiayu, Jolla, Karbonn, KDDI, Kingsun, Konka, Komu, Koobee, K-Touch, KT-Tech, KOPO, Koridy, Kumai, Kyocera, Kazam, Lava, Lanix, LCT, Lenovo, Lenco, Le Pan, LG, Lingwin, Loewe, Logicom, Lexibook, Majestic, Manta Multimedia, Mobistel, Mecer, Medion, MEEG, Meizu, Metz, MEU, MicroMax, Mediacom, MediaTek, Mio, Mpman, Mofut, Motorola, Microsoft, MSI, Memup, Mitsubishi, MLLED, M.T.T., MyPhone, NEC, Netgear, NGM, Nintendo, Noain, Nokia, Nomi, Nikon, Newgen, Nexian, NextBook, Onda, OnePlus, OPPO, Orange, O2, Ouki, OUYA, Opsson, Panasonic, PEAQ, Philips, Polaroid, Palm, phoneOne, Pantech, Point of View, PolyPad, Pomp, Positivo, Prestigio, ProScan, PULID, Qilive, Qtek, QMobile, Quechua, Overmax, Oysters, Ramos, RCA Tablets, Readboy, Rikomagic, RIM, Roku, Rover, Samsung, Sega, Sony Ericsson, Sencor, Softbank, SFR, Sagem, Sharp, Siemens, Sendo, Skyworth, Smartfren, Sony, Spice, SuperSonic, Selevision, Sanyo, Symphony, Smart, Star, Storex, Stonex, SunVan, Sumvision, Tesla, TCL, Telit, ThL, TiPhone, Tecno Mobile, Tesco, TIANYU, Telefunken, Telenor, T-Mobile, Thomson, Tolino, Toplux, Toshiba, TechnoTrend, Trevi, Tunisie Telecom, Turbo-X, TVC, TechniSat, teXet, Unowhy, Uniscope, UTStarcom, Vastking, Videocon, Vertu, Vitelcom, VK Mobile, ViewSonic, Vestel, Vivo, Voto, Voxtel, Vodafone, Vizio, Videoweb, Walton, Web TV, WellcoM, Wexler, Wiko, Wolder, Wonu, Woxter, Xiaomi, Xolo, Unknown, Yarvik, Yuandao, Yusun, Ytone, Zeemi, Zonda, Zopo, ZTE
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
{
|
||||
"name": "piwik/device-detector",
|
||||
"type": "library",
|
||||
"description": "The Universal Device Detection library, that parses User Agents and detects devices (desktop, tablet, mobile, tv, cars, console, etc.), and detects browsers, operating systems, devices, brands and models.",
|
||||
"description": "The Universal Device Detection library, that parses User Agents and detects devices (desktop, tablet, mobile, tv, cars, console, etc.), clients (browsers, media players, mobile apps, feed readers, libraries, etc), operating systems, devices, brands and models.",
|
||||
"keywords": ["useragent","parser","devicedetection"],
|
||||
"homepage": "http://piwik.org",
|
||||
"license": "GPL-3.0+",
|
||||
"license": "LGPL-3.0+",
|
||||
"authors": [
|
||||
{
|
||||
"name": "The Piwik Team",
|
||||
|
|
@ -14,15 +14,22 @@
|
|||
],
|
||||
"support": {
|
||||
"forum": "http://forum.piwik.org/",
|
||||
"issues": "http://dev.piwik.org/trac/roadmap",
|
||||
"issues": "https://github.com/piwik/device-detector/issues",
|
||||
"wiki": "http://dev.piwik.org/",
|
||||
"source": "https://github.com/piwik/piwik"
|
||||
},
|
||||
"autoload": {
|
||||
"files": [ "DeviceDetector.php" ]
|
||||
"psr-4": { "DeviceDetector\\": "" }
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.1",
|
||||
"php": ">=5.3.2",
|
||||
"mustangostang/spyc": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "4.1.*",
|
||||
"fabpot/php-cs-fixer": "~1.7"
|
||||
},
|
||||
"suggest": {
|
||||
"doctrine/cache": "Can directly be used for caching purpose"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
1178
www/analytics/vendor/piwik/device-detector/regexes/bots.yml
vendored
Normal file
1178
www/analytics/vendor/piwik/device-detector/regexes/bots.yml
vendored
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -1,540 +0,0 @@
|
|||
###############
|
||||
# Piwik - Open source web analytics
|
||||
#
|
||||
# @link http://piwik.org
|
||||
# @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
#
|
||||
# @category UserAgentParserEnhanced
|
||||
###############
|
||||
|
||||
#SailfishBrowser
|
||||
- regex: 'SailfishBrowser(?:/(\d+\.\d+))?'
|
||||
name: 'Sailfish Browser'
|
||||
version: '$1'
|
||||
|
||||
# SeaMonkey
|
||||
- regex: '(Iceape|SeaMonkey|gnuzilla)(?:/(\d+\.\d+))?'
|
||||
name: '$1'
|
||||
version: '$2'
|
||||
|
||||
# Camino
|
||||
- regex: 'Camino(?:/(\d+\.\d+))?'
|
||||
name: 'Camino'
|
||||
version: '$1'
|
||||
|
||||
#Fennec (Firefox for mobile)
|
||||
- regex: 'Fennec(?:/(\d+\.\d+))?'
|
||||
name: 'Fennec'
|
||||
version: '$1'
|
||||
|
||||
#MicroB
|
||||
- regex: 'Firefox.*Tablet browser (\d+\.\d+)'
|
||||
name: 'MicroB'
|
||||
version: '$1'
|
||||
|
||||
#Avant Browser
|
||||
- regex: 'Avant Browser'
|
||||
name: 'Avant Browser'
|
||||
version: ''
|
||||
|
||||
#Bunjalloo
|
||||
- regex: 'Bunjalloo(?:/(\d+\.\d+))?'
|
||||
name: 'Bunjalloo'
|
||||
version: '$1'
|
||||
|
||||
#Iceweasel
|
||||
- regex: 'Iceweasel(?:/(\d+\.\d+))?'
|
||||
name: 'Iceweasel'
|
||||
version: '$1'
|
||||
|
||||
#WebPositive
|
||||
- regex: 'WebPositive'
|
||||
name: 'WebPositive'
|
||||
version: ''
|
||||
|
||||
#Pale Moon
|
||||
- regex: 'PaleMoon(?:/(\d+\.\d+))?'
|
||||
name: 'Pale Moon'
|
||||
version: '$1'
|
||||
|
||||
#CometBird
|
||||
- regex: 'CometBird(?:/(\d+\.\d+))?'
|
||||
name: 'CometBird'
|
||||
version: '$1'
|
||||
|
||||
#IceDragon
|
||||
- regex: 'IceDragon(?:/(\d+\.\d+))?'
|
||||
name: 'IceDragon'
|
||||
version: '$1'
|
||||
|
||||
#Flock
|
||||
- regex: 'Flock(?:/(\d+\.\d+))?'
|
||||
name: 'Flock'
|
||||
version: '$1'
|
||||
|
||||
#Swiftfox
|
||||
- regex: 'Firefox/(\d+\.\d+).*\(Swiftfox\)'
|
||||
name: 'Swiftfox'
|
||||
version: '$1'
|
||||
|
||||
#Firefox
|
||||
- regex: 'Firefox(?:/(\d+\.\d+))?'
|
||||
name: 'Firefox'
|
||||
version: '$1'
|
||||
- regex: '(BonEcho|GranParadiso|Lorentz|Minefield|Namoroka|Shiretoko)/(\d+\.\d+)'
|
||||
name: 'Firefox'
|
||||
version: '$1 ($2)'
|
||||
|
||||
#ANTGalio
|
||||
- regex: 'ANTGalio(?:/(\d+\.\d+))?'
|
||||
name: 'ANTGalio'
|
||||
version: '$1'
|
||||
|
||||
#Espial TV Browser
|
||||
- regex: '(?:Espial|Escape)(?:[/ ](\d+\.\d+))?'
|
||||
name: 'Espial TV Browser'
|
||||
version: '$1'
|
||||
|
||||
#RockMelt
|
||||
- regex: 'RockMelt(?:/(\d+\.\d+))?'
|
||||
name: 'RockMelt'
|
||||
version: '$1'
|
||||
|
||||
#Netscape
|
||||
- regex: '(?:Navigator|Netscape6)(?:/(\d+\.\d+))?'
|
||||
name: 'Netscape'
|
||||
version: '$1'
|
||||
|
||||
#Opera
|
||||
- regex: '(?:Opera Tablet.*Version|Opera/.+Opera Mobi.+Version|Mobile.+OPR)/(\d+\.\d+)'
|
||||
name: 'Opera Mobile'
|
||||
version: '$1'
|
||||
- regex: 'Opera Mini/(?:att/)?(\d+\.\d+)'
|
||||
name: 'Opera Mini'
|
||||
version: '$1'
|
||||
- regex: 'Opera.+Edition Next.+Version/(\d+\.\d+)'
|
||||
name: 'Opera Next'
|
||||
version: '$1'
|
||||
- regex: '(?:Opera|OPR)[/ ](?:9.80.*Version/)?(\d+\.\d+).+Edition Next'
|
||||
name: 'Opera Next'
|
||||
version: '$1'
|
||||
- regex: '(?:Opera|OPR)[/ ](?:9.80.*Version/)?(\d+\.\d+)'
|
||||
name: 'Opera'
|
||||
version: '$1'
|
||||
|
||||
#wOSBrowser
|
||||
- regex: '(?:hpw|web)OS/(\d+\.\d+)'
|
||||
name: 'wOSBrowser'
|
||||
version: '$1'
|
||||
|
||||
#Rekonq
|
||||
- regex: 'rekonq(?:/(\d+\.\d+))?'
|
||||
name: 'Rekonq'
|
||||
version: '$1'
|
||||
|
||||
#CoolNovo
|
||||
- regex: 'CoolNovo(?:/(\d+\.\d+))?'
|
||||
name: 'CoolNovo'
|
||||
version: '$1'
|
||||
|
||||
#Comodo Dragon
|
||||
- regex: 'Comodo[ _]Dragon(?:/(\d+\.\d+))?'
|
||||
name: 'Comodo Dragon'
|
||||
version: '$1'
|
||||
|
||||
#ChromePlus
|
||||
- regex: 'ChromePlus(?:/(\d+\.\d+))?'
|
||||
name: 'ChromePlus'
|
||||
version: '$1'
|
||||
|
||||
#Conkeror
|
||||
- regex: 'Conkeror(?:/(\d+\.\d+))?'
|
||||
name: 'Conkeror'
|
||||
version: '$1'
|
||||
|
||||
#Konqueror
|
||||
- regex: 'Konqueror(?:/(\d+\.\d+))?'
|
||||
name: 'Konqueror'
|
||||
version: '$1'
|
||||
|
||||
#Baidu Browser
|
||||
- regex: 'baidubrowser(?:[/ ](\d+(?:\.?\d+)?))?'
|
||||
name: 'Baidu Browser'
|
||||
version: '$1'
|
||||
|
||||
#Yandex Browser
|
||||
- regex: 'YaBrowser(?:/(\d+(?:\.?\d+)?))?'
|
||||
name: 'Yandex Browser'
|
||||
version: '$1'
|
||||
|
||||
#Midori
|
||||
- regex: 'Midori(?:/(\d+\.\d+))?'
|
||||
name: 'Midori'
|
||||
version: '$1'
|
||||
|
||||
#Mercury
|
||||
- regex: 'Mercury(?:/(\d+\.\d+))?'
|
||||
name: 'Mercury'
|
||||
version: '$1'
|
||||
|
||||
#Maxthon
|
||||
- regex: 'Maxthon[ /](\d+\.\d+)'
|
||||
name: 'Maxthon'
|
||||
version: '$1'
|
||||
- regex: '(?:Maxthon|MyIE2|Uzbl|Shiira)'
|
||||
name: 'Maxthon'
|
||||
version: ''
|
||||
|
||||
#Puffin
|
||||
- regex: 'Puffin(?:/(\d+\.\d+))?'
|
||||
name: 'Puffin'
|
||||
version: '$1'
|
||||
|
||||
#Iron
|
||||
- regex: 'Iron(?:/(\d+\.\d+))?'
|
||||
name: 'Iron'
|
||||
version: '$1'
|
||||
|
||||
#Epiphany
|
||||
- regex: 'Epiphany(?:/(\d+\.\d+))?'
|
||||
name: 'Epiphany'
|
||||
version: '$1'
|
||||
|
||||
#Chrome
|
||||
- regex: 'CrMo(?:/(\d+\.\d+))?'
|
||||
name: 'Chrome Mobile'
|
||||
version: '$1'
|
||||
- regex: 'CriOS(?:/(\d+\.\d+))?'
|
||||
name: 'Chrome Mobile iOS'
|
||||
version: '$1'
|
||||
- regex: 'Chrome(?:/(\d+\.\d+))?.*Mobile'
|
||||
name: 'Chrome Mobile'
|
||||
version: '$1'
|
||||
- regex: 'chromeframe(?:/(\d+\.\d+))?'
|
||||
name: 'Chrome Frame'
|
||||
version: '$1'
|
||||
- regex: 'Chrome(?:/(\d+\.\d+))?'
|
||||
name: 'Chrome'
|
||||
version: '$1'
|
||||
- regex: 'Chromium(?:/(\d+\.\d+))?'
|
||||
name: 'Chromium'
|
||||
version: '$1'
|
||||
|
||||
#UC Browser
|
||||
- regex: 'UC[ ]?Browser(?:[ /]?(\d+\.\d+))?'
|
||||
name: 'UC Browser'
|
||||
version: '$1'
|
||||
- regex: 'UCWEB(?:[ /]?(\d+\.\d+))?'
|
||||
name: 'UC Browser'
|
||||
version: '$1'
|
||||
|
||||
#Tizen Browser
|
||||
- regex: '(?:Tizen|SLP) Browser(?:/(\d+\.\d+))?'
|
||||
name: 'Tizen Browser'
|
||||
version: '$1'
|
||||
|
||||
#Palm Blazer
|
||||
- regex: 'Blazer(?:/(\d+\.\d+))?'
|
||||
name: 'Palm Blazer'
|
||||
version: '$1'
|
||||
- regex: 'Pre/(\d+\.\d+)'
|
||||
name: 'Palm Pre'
|
||||
version: '$1'
|
||||
|
||||
#Palm WebPro
|
||||
- regex: 'WebPro(?:[ /](\d+\.\d+))?'
|
||||
name: 'Palm WebPro'
|
||||
version: '$1'
|
||||
|
||||
#Fireweb Navigator
|
||||
- regex: 'Fireweb Navigator(?:/(\d+\.\d+))?'
|
||||
name: 'Fireweb Navigator'
|
||||
version: '$1'
|
||||
|
||||
#Jasmine
|
||||
- regex: 'Jasmine(?:[ /](\d+\.\d+))?'
|
||||
name: 'Jasmine'
|
||||
version: '$1'
|
||||
|
||||
#Lynx
|
||||
- regex: 'Lynx(?:/(\d+\.\d+))?'
|
||||
name: 'Lynx'
|
||||
version: '$1'
|
||||
|
||||
#NCSA Mosaic
|
||||
- regex: 'NCSA_Mosaic(?:/(\d+\.\d+))?'
|
||||
name: 'NCSA Mosaic'
|
||||
version: '$1'
|
||||
|
||||
#ABrowse
|
||||
- regex: 'ABrowse(?: (\d+\.\d+))?'
|
||||
name: 'ABrowse'
|
||||
version: '$1'
|
||||
|
||||
#Amaya
|
||||
- regex: 'amaya(?:/(\d+\.\d+))?'
|
||||
name: 'Amaya'
|
||||
version: '$1'
|
||||
|
||||
#Amiga Voyager
|
||||
- regex: 'AmigaVoyager(?:/(\d+\.\d+))?'
|
||||
name: 'Amiga Voyager'
|
||||
version: '$1'
|
||||
|
||||
#Amiga Aweb
|
||||
- regex: 'Amiga-Aweb(?:/(\d+\.\d+))?'
|
||||
name: 'Amiga Aweb'
|
||||
version: '$1'
|
||||
|
||||
#Arora
|
||||
- regex: 'Arora(?:/(\d+\.\d+))?'
|
||||
name: 'Arora'
|
||||
version: '$1'
|
||||
|
||||
#Beonex
|
||||
- regex: 'Beonex(?:/(\d+\.\d+))?'
|
||||
name: 'Beonex'
|
||||
version: '$1'
|
||||
|
||||
#BlackBerry Browser
|
||||
- regex: 'BlackBerry|PlayBook|BB10'
|
||||
name: 'BlackBerry Browser'
|
||||
version: ''
|
||||
|
||||
#BrowseX
|
||||
- regex: 'BrowseX \((\d+\.\d+)'
|
||||
name: 'BrowseX'
|
||||
version: '$1'
|
||||
|
||||
#Charon
|
||||
- regex: 'Charon(?:[/ ](\d+\.\d+))?'
|
||||
name: 'Charon'
|
||||
version: '$1'
|
||||
|
||||
#Cheshire
|
||||
- regex: 'Cheshire(?:/(\d+\.\d+))?'
|
||||
name: 'Cheshire'
|
||||
version: '$1'
|
||||
|
||||
#Dillo
|
||||
- regex: 'Dillo(?:/(\d+\.\d+))?'
|
||||
name: 'Dillo'
|
||||
version: '$1'
|
||||
|
||||
#Dolphin
|
||||
- regex: 'Dolfin(?:/(\d+\.\d+))?|dolphin'
|
||||
name: 'Dolphin'
|
||||
version: '$1'
|
||||
|
||||
#Elinks
|
||||
- regex: 'Elinks(?:/(\d+\.\d+))?'
|
||||
name: 'Elinks'
|
||||
version: '$1'
|
||||
|
||||
#Firebird
|
||||
- regex: 'Firebird(?:/(\d+\.\d+))?'
|
||||
name: 'Firebird'
|
||||
version: '$1'
|
||||
|
||||
#Fluid
|
||||
- regex: 'Fluid(?:/(\d+\.\d+))?'
|
||||
name: 'Fluid'
|
||||
version: '$1'
|
||||
|
||||
#Galeon
|
||||
- regex: 'Galeon(?:/(\d+\.\d+))?'
|
||||
name: 'Galeon'
|
||||
version: '$1'
|
||||
|
||||
#Google Earth
|
||||
- regex: 'Google Earth(?:/(\d+\.\d+))?'
|
||||
name: 'Google Earth'
|
||||
version: '$1'
|
||||
|
||||
#HotJava
|
||||
- regex: 'HotJava(?:/(\d+\.\d+))?'
|
||||
name: 'HotJava'
|
||||
version: '$1'
|
||||
|
||||
#IBrowse
|
||||
- regex: 'IBrowse(?:[ /](\d+\.\d+))?'
|
||||
name: 'IBrowse'
|
||||
version: '$1'
|
||||
|
||||
#iCab
|
||||
- regex: 'iCab(?:[ /](\d+\.\d+))?'
|
||||
name: 'iCab'
|
||||
version: '$1'
|
||||
|
||||
#Sleipnir
|
||||
- regex: 'Sleipnir(?:[ /](\d+\.\d+))?'
|
||||
name: 'Sleipnir'
|
||||
version: '$1'
|
||||
|
||||
#Lunascape
|
||||
- regex: 'Lunascape(?:[/ ](\d+\.\d+))?'
|
||||
name: 'Lunascape'
|
||||
version: '$1'
|
||||
|
||||
#Internet Explorer
|
||||
- regex: 'IEMobile[ /](\d+\.\d+)'
|
||||
name: 'IE Mobile'
|
||||
version: '$1'
|
||||
- regex: 'MSIE (\d+\.\d+).*XBLWP7'
|
||||
name: 'IE Mobile'
|
||||
version: '$1'
|
||||
- regex: 'MSIE.*Trident/4.0'
|
||||
name: 'Internet Explorer'
|
||||
version: 8.0
|
||||
- regex: 'MSIE.*Trident/5.0'
|
||||
name: 'Internet Explorer'
|
||||
version: 9.0
|
||||
- regex: 'MSIE.*Trident/6.0'
|
||||
name: 'Internet Explorer'
|
||||
version: 10.0
|
||||
- regex: 'Trident/7.0'
|
||||
name: 'Internet Explorer'
|
||||
version: 11.0
|
||||
- regex: 'MSIE (\d+\.\d+)'
|
||||
name: 'Internet Explorer'
|
||||
version: '$1'
|
||||
- regex: 'IE[ /](\d+\.\d+)'
|
||||
name: 'Internet Explorer'
|
||||
version: '$1'
|
||||
|
||||
#Kapiko
|
||||
- regex: 'Kapiko(?:/(\d+\.\d+))?'
|
||||
name: 'Kapiko'
|
||||
version: '$1'
|
||||
|
||||
#Kazehakase
|
||||
- regex: 'Kazehakase(?:/(\d+\.\d+))?'
|
||||
name: 'Kazehakase'
|
||||
version: '$1'
|
||||
|
||||
#Kindle Browser
|
||||
- regex: 'Kindle/(\d+\.\d+)'
|
||||
name: 'Kindle Browser'
|
||||
version: '$1'
|
||||
|
||||
#K-meleon
|
||||
- regex: 'K-meleon(?:/(\d+\.\d+))?'
|
||||
name: 'K-meleon'
|
||||
version: '$1'
|
||||
|
||||
#Lightning
|
||||
- regex: 'Lightning(?:/(\d+\.\d+))?'
|
||||
name: 'Lightning'
|
||||
version: '$1'
|
||||
|
||||
#Links
|
||||
- regex: 'Links(?: \((\d+\.\d+))?'
|
||||
name: 'Links'
|
||||
version: '$1'
|
||||
|
||||
#Openwave Mobile Browser
|
||||
- regex: 'UP.Browser(?:/(\d+\.\d+))?'
|
||||
name: 'Openwave Mobile Browser'
|
||||
version: '$1'
|
||||
|
||||
#OmniWeb
|
||||
- regex: 'OmniWeb(?:/[v]?(\d+\.\d+))?'
|
||||
name: 'OmniWeb'
|
||||
version: '$1'
|
||||
|
||||
#Phoenix
|
||||
- regex: 'Phoenix(?:/(\d+\.\d+))?'
|
||||
name: 'Phoenix'
|
||||
version: '$1'
|
||||
|
||||
#Mobile Silk
|
||||
- regex: 'Silk(?:/(\d+\.\d+))?'
|
||||
name: 'Mobile Silk'
|
||||
version: '$1'
|
||||
|
||||
#Nokia Browser
|
||||
- regex: '(?:NokiaBrowser|BrowserNG)(?:/(\d+\.\d+))?'
|
||||
name: 'Nokia Browser'
|
||||
version: '$1'
|
||||
- regex: 'Series60/5\.0'
|
||||
name: 'Nokia Browser'
|
||||
version: '7.0'
|
||||
- regex: 'Series60/(\d+\.\d+)'
|
||||
name: 'Nokia OSS Browser'
|
||||
version: '$1'
|
||||
- regex: 'S40OviBrowser/(\d+\.\d+)'
|
||||
name: 'Nokia Ovi Browser'
|
||||
version: '$1'
|
||||
- regex: '^Nokia|Nokia[EN]?\d+'
|
||||
name: 'Nokia Browser'
|
||||
version: ''
|
||||
|
||||
#NetFront
|
||||
- regex: 'NetFrontLifeBrowser(?:/(\d+\.\d+))?'
|
||||
name: 'NetFront Life'
|
||||
version: '$1'
|
||||
- regex: 'NetFront(?:/(\d+\.\d+))?'
|
||||
name: 'NetFront'
|
||||
version: '$1'
|
||||
- regex: 'PLAYSTATION|NINTENDO 3|AppleWebKit.+ NX/\d+\.\d+\.\d+'
|
||||
name: 'NetFront'
|
||||
version: ''
|
||||
|
||||
#NetPositive
|
||||
- regex: 'NetPositive(?:/(\d+\.\d+))?'
|
||||
name: 'NetPositive'
|
||||
version: '$1'
|
||||
|
||||
#Obigo
|
||||
- regex: 'Obigo[ ]?(?:InternetBrowser|Browser)?(?:[ /]([a-z0-9]*))?'
|
||||
name: 'Obigo'
|
||||
version: '$1'
|
||||
- regex: 'Obigo|Teleca'
|
||||
name: 'Obigo'
|
||||
version: ''
|
||||
|
||||
#Oregano
|
||||
- regex: 'Oregano(?:[ /](\d+\.\d+))?'
|
||||
name: 'Oregano'
|
||||
version: '$1'
|
||||
|
||||
#Polaris
|
||||
- regex: '(?:Polaris|Embider)(?:/(\d+\.\d+))?'
|
||||
name: 'Polaris'
|
||||
version: '$1'
|
||||
|
||||
#Snowshoe
|
||||
- regex: 'Snowshoe(?:/(\d+\.\d+))?'
|
||||
name: 'Snowshoe'
|
||||
version: '$1'
|
||||
|
||||
#Thunderbird
|
||||
- regex: 'Thunderbird(?:/(\d+\.\d+))?'
|
||||
name: 'Thunderbird'
|
||||
version: '$1'
|
||||
|
||||
#Xiino
|
||||
- regex: 'Xiino(?:/(\d+\.\d+))?'
|
||||
name: 'Xiino'
|
||||
version: '$1'
|
||||
|
||||
#Android Browser
|
||||
- regex: 'Android'
|
||||
name: 'Android Browser'
|
||||
version: ''
|
||||
|
||||
#Safari
|
||||
- regex: '(?:iPod|iPad|iPhone).+Version/(\d+\.\d+)'
|
||||
name: 'Mobile Safari'
|
||||
version: '$1'
|
||||
- regex: 'Version/(\d+\.\d+).*Mobile.*Safari/'
|
||||
name: 'Mobile Safari'
|
||||
version: '$1'
|
||||
- regex: '(?:iPod|iPhone|iPad)'
|
||||
name: 'Mobile Safari'
|
||||
version: ''
|
||||
- regex: 'Version/(\d+\.\d+).*Safari/|Safari/\d+'
|
||||
name: 'Safari'
|
||||
version: '$1'
|
||||
|
||||
|
||||
30
www/analytics/vendor/piwik/device-detector/regexes/client/browser_engine.yml
vendored
Normal file
30
www/analytics/vendor/piwik/device-detector/regexes/client/browser_engine.yml
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
###############
|
||||
# Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
#
|
||||
# @link http://piwik.org
|
||||
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
###############
|
||||
|
||||
- regex: 'NetFront'
|
||||
name: 'NetFront'
|
||||
|
||||
- regex: 'Edge'
|
||||
name: 'Edge'
|
||||
|
||||
- regex: 'Trident'
|
||||
name: 'Trident'
|
||||
|
||||
- regex: 'Blink'
|
||||
name: 'Blink'
|
||||
|
||||
- regex: '(?:Apple)?WebKit'
|
||||
name: 'WebKit'
|
||||
|
||||
- regex: 'Presto'
|
||||
name: 'Presto'
|
||||
|
||||
- regex: '(?<!like )Gecko'
|
||||
name: 'Gecko'
|
||||
|
||||
- regex: 'KHTML'
|
||||
name: 'KHTML'
|
||||
844
www/analytics/vendor/piwik/device-detector/regexes/client/browsers.yml
vendored
Normal file
844
www/analytics/vendor/piwik/device-detector/regexes/client/browsers.yml
vendored
Normal file
|
|
@ -0,0 +1,844 @@
|
|||
###############
|
||||
# Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
#
|
||||
# @link http://piwik.org
|
||||
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
###############
|
||||
|
||||
# Microsoft Edge (newer versions of IE)
|
||||
- regex: 'Edge[ /](\d+[\.\d]+)'
|
||||
name: 'Microsoft Edge'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Edge'
|
||||
|
||||
# 360 Browser
|
||||
- regex: 'QIHU 360[ES]E'
|
||||
name: '360 Browser'
|
||||
version: ''
|
||||
|
||||
# 360 Phone Browser
|
||||
- regex: '360 Aphone Browser(?: \((\d+[\.\d]+)(?:beta)?\))?'
|
||||
name: '360 Phone Browser'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
|
||||
#SailfishBrowser
|
||||
- regex: 'SailfishBrowser(?:/(\d+[\.\d]+))?'
|
||||
name: 'Sailfish Browser'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
# SeaMonkey
|
||||
- regex: '(Iceape|SeaMonkey|gnuzilla)(?:/(\d+[\.\d]+))?'
|
||||
name: '$1'
|
||||
version: '$2'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
# Camino
|
||||
- regex: 'Camino(?:/(\d+[\.\d]+))?'
|
||||
name: 'Camino'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
#Fennec (Firefox for mobile)
|
||||
- regex: 'Fennec(?:/(\d+[\.\d]+))?'
|
||||
name: 'Fennec'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
#MicroB
|
||||
- regex: 'Firefox.*Tablet browser (\d+[\.\d]+)'
|
||||
name: 'MicroB'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
- regex: 'Maemo Browser(?: (\d+[\.\d]+))?'
|
||||
name: 'MicroB'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
#Deepnet Explorer
|
||||
- regex: 'Deepnet Explorer (\d+[\.\d]+)?'
|
||||
name: 'Deepnet Explorer'
|
||||
version: '$1'
|
||||
|
||||
|
||||
#Avant Browser
|
||||
- regex: 'Avant Browser'
|
||||
name: 'Avant Browser'
|
||||
version: ''
|
||||
engine:
|
||||
default: '' # multiple
|
||||
|
||||
#Amigo
|
||||
- regex: 'Chrome/(\d+[\.\d]+).*MRCHROME'
|
||||
name: 'Amigo'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
versions:
|
||||
28: 'Blink'
|
||||
|
||||
#Bunjalloo
|
||||
- regex: 'Bunjalloo(?:/(\d+[\.\d]+))?'
|
||||
name: 'Bunjalloo'
|
||||
version: '$1'
|
||||
|
||||
#Iceweasel
|
||||
- regex: 'Iceweasel(?:/(\d+[\.\d]+))?'
|
||||
name: 'Iceweasel'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
#WebPositive
|
||||
- regex: 'WebPositive'
|
||||
name: 'WebPositive'
|
||||
version: ''
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
|
||||
|
||||
#Pale Moon
|
||||
- regex: 'PaleMoon(?:/(\d+[\.\d]+))?'
|
||||
name: 'Pale Moon'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
#CometBird
|
||||
- regex: 'CometBird(?:/(\d+[\.\d]+))?'
|
||||
name: 'CometBird'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
#IceDragon
|
||||
- regex: 'IceDragon(?:/(\d+[\.\d]+))?'
|
||||
name: 'IceDragon'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
#Flock
|
||||
- regex: 'Flock(?:/(\d+[\.\d]+))?'
|
||||
name: 'Flock'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
versions:
|
||||
3: 'WebKit'
|
||||
|
||||
#Kapiko
|
||||
- regex: 'Kapiko(?:/(\d+[\.\d]+))?'
|
||||
name: 'Kapiko'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
#Kylo
|
||||
- regex: 'Kylo(?:/(\d+[\.\d]+))?'
|
||||
name: 'Kylo'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
#Swiftfox
|
||||
- regex: 'Firefox/(\d+[\.\d]+).*\(Swiftfox\)'
|
||||
name: 'Swiftfox'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
#Firefox
|
||||
- regex: 'Firefox(?:/(\d+[\.\d]+))?'
|
||||
name: 'Firefox'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
- regex: '(BonEcho|GranParadiso|Lorentz|Minefield|Namoroka|Shiretoko)/(\d+[\.\d]+)'
|
||||
name: 'Firefox'
|
||||
version: '$1 ($2)'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
- regex: 'FxiOS/(\d+[\.\d]+)'
|
||||
name: 'Firefox'
|
||||
version: 'iOS $1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
|
||||
#ANTGalio
|
||||
- regex: 'ANTGalio(?:/(\d+[\.\d]+))?'
|
||||
name: 'ANTGalio'
|
||||
version: '$1'
|
||||
|
||||
#Espial TV Browser
|
||||
- regex: '(?:Espial|Escape)(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'Espial TV Browser'
|
||||
version: '$1'
|
||||
|
||||
#RockMelt
|
||||
- regex: 'RockMelt(?:/(\d+[\.\d]+))?'
|
||||
name: 'RockMelt'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
|
||||
#Fireweb Navigator
|
||||
- regex: 'Fireweb Navigator(?:/(\d+[\.\d]+))?'
|
||||
name: 'Fireweb Navigator'
|
||||
version: '$1'
|
||||
|
||||
#Netscape
|
||||
- regex: '(?:Navigator|Netscape6)(?:/(\d+[\.\d]+))?'
|
||||
name: 'Netscape'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: '' # Mosaic in the first versions, then Gecko
|
||||
|
||||
#Opera
|
||||
- regex: '(?:Opera Tablet.*Version|Opera/.+Opera Mobi.+Version|Mobile.+OPR)/(\d+[\.\d]+)'
|
||||
name: 'Opera Mobile'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Presto'
|
||||
versions:
|
||||
15: 'Blink'
|
||||
- regex: 'Opera Mini/(?:att/)?(\d+[\.\d]+)'
|
||||
name: 'Opera Mini'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Presto'
|
||||
- regex: 'Opera.+Edition Next.+Version/(\d+[\.\d]+)'
|
||||
name: 'Opera Next'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Presto'
|
||||
versions:
|
||||
15: 'Blink'
|
||||
- regex: '(?:Opera|OPR)[/ ](?:9.80.*Version/)?(\d+[\.\d]+).+Edition Next'
|
||||
name: 'Opera Next'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Presto'
|
||||
versions:
|
||||
15: 'Blink'
|
||||
- regex: '(?:Opera|OPR)[/ ](?:9.80.*Version/)?(\d+[\.\d]+)'
|
||||
name: 'Opera'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Presto'
|
||||
versions:
|
||||
15: 'Blink'
|
||||
|
||||
#Rekonq
|
||||
- regex: 'rekonq(?:/(\d+[\.\d]+))?'
|
||||
name: 'Rekonq'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
|
||||
#CoolNovo (former ChromePlus)
|
||||
- regex: 'CoolNovo(?:/(\d+[\.\d]+))?'
|
||||
name: 'CoolNovo'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: '' # multi engine
|
||||
|
||||
#Comodo Dragon
|
||||
- regex: 'Comodo[ _]Dragon(?:/(\d+[\.\d]+))?'
|
||||
name: 'Comodo Dragon'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
versions:
|
||||
28: 'Blink'
|
||||
|
||||
#ChromePlus
|
||||
- regex: 'ChromePlus(?:/(\d+[\.\d]+))?'
|
||||
name: 'ChromePlus'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: '' # multi engine
|
||||
|
||||
#Conkeror
|
||||
- regex: 'Conkeror(?:/(\d+[\.\d]+))?'
|
||||
name: 'Conkeror'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
#Konqueror
|
||||
- regex: 'Konqueror(?:/(\d+[\.\d]+))?'
|
||||
name: 'Konqueror'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'KHTML'
|
||||
versions:
|
||||
4: '' # multiple (KHTML or WebKit)
|
||||
|
||||
#Baidu Browser
|
||||
- regex: 'baidubrowser(?:[/ ](\d+[\.\d]*))?'
|
||||
name: 'Baidu Browser'
|
||||
version: '$1'
|
||||
|
||||
#Baidu Spark
|
||||
- regex: '(?:(?:BD)?Spark|BIDUBrowser)[/ ](\d+[\.\d]*)'
|
||||
name: 'Baidu Spark'
|
||||
version: '$1'
|
||||
|
||||
#Yandex Browser
|
||||
- regex: 'YaBrowser(?:/(\d+[\.\d]*))?'
|
||||
name: 'Yandex Browser'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Blink'
|
||||
|
||||
#Vivaldi
|
||||
- regex: 'Vivaldi(?:/(\d+[\.\d]+))?'
|
||||
name: 'Vivaldi'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Blink'
|
||||
|
||||
#Midori
|
||||
- regex: 'Midori(?:/(\d+[\.\d]+))?'
|
||||
name: 'Midori'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
|
||||
#Mercury
|
||||
- regex: 'Mercury(?:/(\d+[\.\d]+))?'
|
||||
name: 'Mercury'
|
||||
version: '$1'
|
||||
|
||||
#Maxthon
|
||||
- regex: '(?:Maxthon|MxBrowser)[ /](\d+[\.\d]+)'
|
||||
name: 'Maxthon'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: '' # Trident and WebKit
|
||||
versions:
|
||||
3: 'WebKit'
|
||||
|
||||
- regex: '(?:Maxthon|MyIE2|Uzbl)'
|
||||
name: 'Maxthon'
|
||||
version: ''
|
||||
engine:
|
||||
default: '' # Trident and WebKit
|
||||
|
||||
#Puffin
|
||||
- regex: 'Puffin(?:/(\d+[\.\d]+))?'
|
||||
name: 'Puffin'
|
||||
version: '$1'
|
||||
|
||||
#Iron
|
||||
- regex: 'Iron(?:/(\d+[\.\d]+))?'
|
||||
name: 'Iron'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
versions:
|
||||
28: 'Blink'
|
||||
|
||||
#Epiphany
|
||||
- regex: 'Epiphany(?:/(\d+[\.\d]+))?'
|
||||
name: 'Epiphany'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
versions:
|
||||
2.9.16: '' # multi engine
|
||||
2.28: 'WebKit'
|
||||
|
||||
# Liebao
|
||||
- regex: 'LBBrowser(?:[ /](\d+[\.\d]+))?'
|
||||
name: 'Liebao'
|
||||
version: '$1'
|
||||
|
||||
# Sogou Explorer
|
||||
- regex: 'SE (\d+[\.\d]+)'
|
||||
name: 'Sogou Explorer'
|
||||
version: '$1'
|
||||
|
||||
# QQ Browser
|
||||
- regex: 'M?QQBrowser/([\.\d]+)'
|
||||
name: 'QQ Browser'
|
||||
version: '$1'
|
||||
|
||||
# MIUI Browser
|
||||
- regex: 'MIUIBrowser(?:/(\d+[\.\d]+))?'
|
||||
name: 'MIUI Browser'
|
||||
version: '$1'
|
||||
|
||||
# Coc Coc
|
||||
# This browser (http://coccoc.vn/) is built on top of Chromium with
|
||||
# additional features for Vietnamese users. Its regex has to be placed
|
||||
# before generic Chrome regex, or Chrome regex will match first and
|
||||
# the browser is mistaken as "Chrome".
|
||||
- regex: 'coc_coc_browser(?:/(\d+[\.\d]+))?'
|
||||
name: 'Coc Coc'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
versions:
|
||||
28: 'Blink'
|
||||
|
||||
#Chrome
|
||||
- regex: 'CrMo(?:/(\d+[\.\d]+))?'
|
||||
name: 'Chrome Mobile'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
versions:
|
||||
28: 'Blink'
|
||||
- regex: 'CriOS(?:/(\d+[\.\d]+))?'
|
||||
name: 'Chrome Mobile iOS'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
- regex: 'Chrome(?:/(\d+[\.\d]+))? Mobile'
|
||||
name: 'Chrome Mobile'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
versions:
|
||||
28: 'Blink'
|
||||
- regex: 'chromeframe(?:/(\d+[\.\d]+))?'
|
||||
name: 'Chrome Frame'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
- regex: 'Chromium(?:/(\d+[\.\d]+))?'
|
||||
name: 'Chromium'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
versions:
|
||||
28: 'Blink'
|
||||
- regex: 'Chrome(?:/(\d+[\.\d]+))?'
|
||||
name: 'Chrome'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
versions:
|
||||
28: 'Blink'
|
||||
|
||||
#UC Browser
|
||||
- regex: 'UC[ ]?Browser(?:[ /]?(\d+[\.\d]+))?'
|
||||
name: 'UC Browser'
|
||||
version: '$1'
|
||||
- regex: 'UCWEB(?:[ /]?(\d+[\.\d]+))?'
|
||||
name: 'UC Browser'
|
||||
version: '$1'
|
||||
|
||||
#Tizen Browser
|
||||
- regex: '(?:Tizen|SLP) Browser(?:/(\d+[\.\d]+))?'
|
||||
name: 'Tizen Browser'
|
||||
version: '$1'
|
||||
|
||||
#Palm Blazer
|
||||
- regex: 'Blazer(?:/(\d+[\.\d]+))?'
|
||||
name: 'Palm Blazer'
|
||||
version: '$1'
|
||||
- regex: 'Pre/(\d+[\.\d]+)'
|
||||
name: 'Palm Pre'
|
||||
version: '$1'
|
||||
|
||||
#wOSBrowser
|
||||
- regex: '(?:hpw|web)OS/(\d+[\.\d]+)'
|
||||
name: 'wOSBrowser'
|
||||
version: '$1'
|
||||
|
||||
#Palm WebPro
|
||||
- regex: 'WebPro(?:[ /](\d+[\.\d]+))?'
|
||||
name: 'Palm WebPro'
|
||||
version: '$1'
|
||||
|
||||
#Jasmine
|
||||
- regex: 'Jasmine(?:[ /](\d+[\.\d]+))?'
|
||||
name: 'Jasmine'
|
||||
version: '$1'
|
||||
|
||||
#Lynx
|
||||
- regex: 'Lynx(?:/(\d+[\.\d]+))?'
|
||||
name: 'Lynx'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Text-based'
|
||||
|
||||
#NCSA Mosaic
|
||||
- regex: 'NCSA_Mosaic(?:/(\d+[\.\d]+))?'
|
||||
name: 'NCSA Mosaic'
|
||||
version: '$1'
|
||||
|
||||
#ABrowse
|
||||
- regex: 'ABrowse(?: (\d+[\.\d]+))?'
|
||||
name: 'ABrowse'
|
||||
version: '$1'
|
||||
|
||||
#Amaya
|
||||
- regex: 'amaya(?:/(\d+[\.\d]+))?'
|
||||
name: 'Amaya'
|
||||
version: '$1'
|
||||
|
||||
#Amiga Voyager
|
||||
- regex: 'AmigaVoyager(?:/(\d+[\.\d]+))?'
|
||||
name: 'Amiga Voyager'
|
||||
version: '$1'
|
||||
|
||||
#Amiga Aweb
|
||||
- regex: 'Amiga-Aweb(?:/(\d+[\.\d]+))?'
|
||||
name: 'Amiga Aweb'
|
||||
version: '$1'
|
||||
|
||||
#Arora
|
||||
- regex: 'Arora(?:/(\d+[\.\d]+))?'
|
||||
name: 'Arora'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
|
||||
#Beonex
|
||||
- regex: 'Beonex(?:/(\d+[\.\d]+))?'
|
||||
name: 'Beonex'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
#BrowseX
|
||||
- regex: 'BrowseX \((\d+[\.\d]+)'
|
||||
name: 'BrowseX'
|
||||
version: '$1'
|
||||
|
||||
#Charon
|
||||
- regex: 'Charon(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'Charon'
|
||||
version: '$1'
|
||||
|
||||
#Cheshire
|
||||
- regex: 'Cheshire(?:/(\d+[\.\d]+))?'
|
||||
name: 'Cheshire'
|
||||
version: '$1'
|
||||
|
||||
#Dillo
|
||||
- regex: 'Dillo(?:/(\d+[\.\d]+))?'
|
||||
name: 'Dillo'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Dillo'
|
||||
|
||||
#Dolphin
|
||||
- regex: 'Dolfin(?:/(\d+[\.\d]+))?|dolphin'
|
||||
name: 'Dolphin'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
|
||||
#Elinks
|
||||
- regex: 'Elinks(?:/(\d+[\.\d]+))?'
|
||||
name: 'Elinks'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Text-based'
|
||||
|
||||
#Firebird
|
||||
- regex: 'Firebird(?:/(\d+[\.\d]+))?'
|
||||
name: 'Firebird'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
#Fluid
|
||||
- regex: 'Fluid(?:/(\d+[\.\d]+))?'
|
||||
name: 'Fluid'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
|
||||
#Galeon
|
||||
- regex: 'Galeon(?:/(\d+[\.\d]+))?'
|
||||
name: 'Galeon'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
#Google Earth
|
||||
- regex: 'Google Earth(?:/(\d+[\.\d]+))?'
|
||||
name: 'Google Earth'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
|
||||
#HotJava
|
||||
- regex: 'HotJava(?:/(\d+[\.\d]+))?'
|
||||
name: 'HotJava'
|
||||
version: '$1'
|
||||
|
||||
#IBrowse
|
||||
- regex: 'IBrowse(?:[ /](\d+[\.\d]+))?'
|
||||
name: 'IBrowse'
|
||||
version: '$1'
|
||||
|
||||
#iCab
|
||||
- regex: 'iCab(?:[ /](\d+[\.\d]+))?'
|
||||
name: 'iCab'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'iCab'
|
||||
versions:
|
||||
4: 'WebKit'
|
||||
|
||||
#Sleipnir
|
||||
- regex: 'Sleipnir(?:[ /](\d+[\.\d]+))?'
|
||||
name: 'Sleipnir'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: '' # multi engine
|
||||
|
||||
#Lunascape
|
||||
- regex: 'Lunascape(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'Lunascape'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: '' # multi engine
|
||||
|
||||
#Internet Explorer
|
||||
- regex: 'IEMobile[ /](\d+[\.\d]+)'
|
||||
name: 'IE Mobile'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Trident'
|
||||
- regex: 'MSIE (\d+[\.\d]+).*XBLWP7'
|
||||
name: 'IE Mobile'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Trident'
|
||||
- regex: 'MSIE.*Trident/4.0'
|
||||
name: 'Internet Explorer'
|
||||
version: 8.0
|
||||
engine:
|
||||
default: 'Trident'
|
||||
- regex: 'MSIE.*Trident/5.0'
|
||||
name: 'Internet Explorer'
|
||||
version: 9.0
|
||||
engine:
|
||||
default: 'Trident'
|
||||
- regex: 'MSIE.*Trident/6.0'
|
||||
name: 'Internet Explorer'
|
||||
version: 10.0
|
||||
engine:
|
||||
default: 'Trident'
|
||||
- regex: 'Trident/7.0'
|
||||
name: 'Internet Explorer'
|
||||
version: 11.0
|
||||
engine:
|
||||
default: 'Trident'
|
||||
- regex: 'MSIE (\d+[\.\d]+)'
|
||||
name: 'Internet Explorer'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Trident'
|
||||
- regex: 'IE[ /](\d+[\.\d]++)'
|
||||
name: 'Internet Explorer'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Trident'
|
||||
|
||||
#Kazehakase
|
||||
- regex: 'Kazehakase(?:/(\d+[\.\d]+))?'
|
||||
name: 'Kazehakase'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: '' # multi engine
|
||||
|
||||
#Kindle Browser
|
||||
- regex: 'Kindle/(\d+[\.\d]+)'
|
||||
name: 'Kindle Browser'
|
||||
version: '$1'
|
||||
|
||||
#K-meleon
|
||||
- regex: 'K-meleon(?:/(\d+[\.\d]+))?'
|
||||
name: 'K-meleon'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Gecko'
|
||||
|
||||
#Links
|
||||
- regex: 'Links(?: \((\d+[\.\d]+))?'
|
||||
name: 'Links'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Text-based'
|
||||
|
||||
#Openwave Mobile Browser
|
||||
- regex: 'UP.Browser(?:/(\d+[\.\d]+))?'
|
||||
name: 'Openwave Mobile Browser'
|
||||
version: '$1'
|
||||
|
||||
#OmniWeb
|
||||
- regex: 'OmniWeb(?:/[v]?(\d+[\.\d]+))?'
|
||||
name: 'OmniWeb'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
|
||||
#Phoenix
|
||||
- regex: 'Phoenix(?:/(\d+[\.\d]+))?'
|
||||
name: 'Phoenix'
|
||||
version: '$1'
|
||||
|
||||
#Mobile Silk
|
||||
- regex: 'Silk(?:/(\d+[\.\d]+))?'
|
||||
name: 'Mobile Silk'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'Blink'
|
||||
|
||||
#NetFront
|
||||
- regex: 'NetFrontLifeBrowser(?:/(\d+[\.\d]+))?'
|
||||
name: 'NetFront Life'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'NetFront'
|
||||
- regex: 'NetFront(?:/(\d+[\.\d]+))?'
|
||||
name: 'NetFront'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'NetFront'
|
||||
- regex: 'PLAYSTATION|NINTENDO 3|AppleWebKit.+ NX/\d+\.\d+\.\d+'
|
||||
name: 'NetFront'
|
||||
version: ''
|
||||
|
||||
#NetPositive
|
||||
- regex: 'NetPositive(?:/(\d+[\.\d]+))?'
|
||||
name: 'NetPositive'
|
||||
version: '$1'
|
||||
|
||||
#Obigo
|
||||
- regex: 'Obigo[ ]?(?:InternetBrowser|Browser)?(?:[ /]([a-z0-9]*))?'
|
||||
name: 'Obigo'
|
||||
version: '$1'
|
||||
- regex: 'Obigo|Teleca'
|
||||
name: 'Obigo'
|
||||
version: ''
|
||||
|
||||
#Odyssey Web Browser
|
||||
- regex: 'Odyssey Web Browser(?:.*OWB/(\d+[\.\d]+))?'
|
||||
name: 'Odyssey Web Browser'
|
||||
version: '$1'
|
||||
|
||||
#Off By One
|
||||
- regex: 'OffByOne'
|
||||
name: 'Off By One'
|
||||
version: ''
|
||||
|
||||
#ONE Browser
|
||||
- regex: 'OneBrowser(?:[ /](\d+[\.\d]+))?'
|
||||
name: 'ONE Browser'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
|
||||
#Oregano
|
||||
- regex: 'Oregano(?:[ /](\d+[\.\d]+))?'
|
||||
name: 'Oregano'
|
||||
version: '$1'
|
||||
|
||||
#Polaris
|
||||
- regex: '(?:Polaris|Embider)(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'Polaris'
|
||||
version: '$1'
|
||||
|
||||
#SEMC Browser
|
||||
- regex: 'SEMC-Browser(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'SEMC-Browser'
|
||||
version: '$1'
|
||||
|
||||
#Shiira
|
||||
- regex: 'Shiira(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'Shiira'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
|
||||
#Snowshoe
|
||||
- regex: 'Snowshoe(?:/(\d+[\.\d]+))?'
|
||||
name: 'Snowshoe'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
|
||||
#Sunrise
|
||||
- regex: 'Sunrise(?:Browser)?(?:/(\d+[\.\d]+))?'
|
||||
name: 'Sunrise'
|
||||
version: '$1'
|
||||
|
||||
# WeTab Browser
|
||||
- regex: 'WeTab-Browser'
|
||||
name: 'WeTab Browser'
|
||||
version: ''
|
||||
|
||||
#Xiino
|
||||
- regex: 'Xiino(?:/(\d+[\.\d]+))?'
|
||||
name: 'Xiino'
|
||||
version: '$1'
|
||||
|
||||
#Nokia Browser
|
||||
- regex: '(?:NokiaBrowser|BrowserNG)(?:/(\d+[\.\d]+))?'
|
||||
name: 'Nokia Browser'
|
||||
version: '$1'
|
||||
- regex: 'Series60/5\.0'
|
||||
name: 'Nokia Browser'
|
||||
version: '7.0'
|
||||
- regex: 'Series60/(\d+[\.\d]+)'
|
||||
name: 'Nokia OSS Browser'
|
||||
version: '$1'
|
||||
- regex: 'S40OviBrowser/(\d+[\.\d]+)'
|
||||
name: 'Nokia Ovi Browser'
|
||||
version: '$1'
|
||||
- regex: '^Nokia|Nokia[EN]?\d+'
|
||||
name: 'Nokia Browser'
|
||||
version: ''
|
||||
|
||||
#BlackBerry Browser
|
||||
- regex: 'BlackBerry|PlayBook|BB10'
|
||||
name: 'BlackBerry Browser'
|
||||
version: ''
|
||||
|
||||
#Android Browser
|
||||
- regex: 'Android'
|
||||
name: 'Android Browser'
|
||||
version: ''
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
|
||||
#Safari
|
||||
- regex: '(?:iPod|iPad|iPhone).+Version/(\d+[\.\d]+)'
|
||||
name: 'Mobile Safari'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
- regex: 'Version/(\d+[\.\d]+).*Mobile.*Safari/'
|
||||
name: 'Mobile Safari'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
- regex: '(?:iPod|iPhone|iPad)'
|
||||
name: 'Mobile Safari'
|
||||
version: ''
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
- regex: 'Version/(\d+[\.\d]+).*Safari/|Safari/\d+'
|
||||
name: 'Safari'
|
||||
version: '$1'
|
||||
engine:
|
||||
default: 'WebKit'
|
||||
108
www/analytics/vendor/piwik/device-detector/regexes/client/feed_readers.yml
vendored
Normal file
108
www/analytics/vendor/piwik/device-detector/regexes/client/feed_readers.yml
vendored
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
###############
|
||||
# Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
#
|
||||
# @link http://piwik.org
|
||||
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
###############
|
||||
|
||||
- regex: 'Akregator(?:/(\d+[\.\d]+))?'
|
||||
name: 'Akregator'
|
||||
version: '$1'
|
||||
url: 'http://userbase.kde.org/Akregator'
|
||||
type: 'Feed Reader'
|
||||
|
||||
- regex: 'Apple-PubSub(?:/(\d+[\.\d]+))?'
|
||||
name: 'Apple PubSub'
|
||||
version: '$1'
|
||||
url: 'https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/pubsub.1.html'
|
||||
type: 'Feed Reader'
|
||||
|
||||
- regex: 'FeedDemon(?:/(\d+[\.\d]+))?'
|
||||
name: 'FeedDemon'
|
||||
version: '$1'
|
||||
url: 'http://www.feeddemon.com/'
|
||||
type: 'Feed Reader'
|
||||
|
||||
- regex: 'Feeddler(?:RSS|PRO)(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'Feeddler RSS Reader'
|
||||
version: '$1'
|
||||
url: 'http://www.chebinliu.com/projects/iphone/feeddler-rss-reader/'
|
||||
type: 'Feed Reader App'
|
||||
|
||||
- regex: 'JetBrains Omea Reader(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'JetBrains Omea Reader'
|
||||
version: '$1'
|
||||
url: 'http://www.jetbrains.com/omea/reader/'
|
||||
type: 'Feed Reader'
|
||||
|
||||
- regex: 'Liferea(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'Liferea'
|
||||
version: '$1'
|
||||
url: 'http://liferea.sf.net/'
|
||||
type: 'Feed Reader'
|
||||
|
||||
- regex: 'NetNewsWire(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'NetNewsWire'
|
||||
version: '$1'
|
||||
url: 'http://netnewswireapp.com/'
|
||||
type: 'Feed Reader'
|
||||
|
||||
- regex: 'NewsBlur (?:iPhone|iPad) App(?: v(\d+[\.\d]+))?'
|
||||
name: 'NewsBlur Mobile App'
|
||||
version: '$1'
|
||||
url: 'http://www.newsblur.com'
|
||||
type: 'Feed Reader App'
|
||||
|
||||
- regex: 'NewsBlur(?:/(\d+[\.\d]+))'
|
||||
name: 'NewsBlur'
|
||||
version: '$1'
|
||||
url: 'http://www.newsblur.com'
|
||||
type: 'Feed Reader'
|
||||
|
||||
- regex: 'newsbeuter(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'Newsbeuter'
|
||||
version: '$1'
|
||||
url: 'http://www.newsbeuter.org/'
|
||||
type: 'Feed Reader'
|
||||
|
||||
- regex: 'Pulp(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'Pulp'
|
||||
version: '$1'
|
||||
url: 'http://www.acrylicapps.com/pulp/'
|
||||
type: 'Feed Reader App'
|
||||
|
||||
- regex: 'ReadKit(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'ReadKit'
|
||||
version: '$1'
|
||||
url: 'http://readkitapp.com/'
|
||||
type: 'Feed Reader App'
|
||||
|
||||
- regex: 'Reeder(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'Reeder'
|
||||
version: '$1'
|
||||
url: 'http://reederapp.com/'
|
||||
type: 'Feed Reader App'
|
||||
|
||||
- regex: 'RSSBandit(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'RSS Bandit'
|
||||
version: '$1'
|
||||
url: 'http://www.rssbandit.org)'
|
||||
type: 'Feed Reader'
|
||||
|
||||
- regex: 'RSS Junkie(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'RSS Junkie'
|
||||
version: '$1'
|
||||
url: 'https://play.google.com/store/apps/details?id=com.bitpowder.rssjunkie'
|
||||
type: 'Feed Reader App'
|
||||
|
||||
- regex: 'RSSOwl(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'RSSOwl'
|
||||
version: '$1'
|
||||
url: 'http://www.rssowl.org/'
|
||||
type: 'Feed Reader'
|
||||
|
||||
- regex: 'Stringer'
|
||||
name: 'Stringer'
|
||||
version: ''
|
||||
url: 'https://github.com/swanson/stringer'
|
||||
type: 'Feed Reader'
|
||||
34
www/analytics/vendor/piwik/device-detector/regexes/client/libraries.yml
vendored
Normal file
34
www/analytics/vendor/piwik/device-detector/regexes/client/libraries.yml
vendored
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
###############
|
||||
# Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
#
|
||||
# @link http://piwik.org
|
||||
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
###############
|
||||
|
||||
- regex: 'Wget(?:/(\d+[\.\d]+))?'
|
||||
name: 'Wget'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Guzzle(?:/(\d+[\.\d]+))?'
|
||||
name: 'Guzzle (PHP HTTP Client)'
|
||||
version: '$1'
|
||||
|
||||
- regex: '(?:lib)?curl(?:/(\d+[\.\d]+))?'
|
||||
name: 'curl'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'python-requests(?:/(\d+[\.\d]+))?'
|
||||
name: 'Python Requests'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Python-urllib(?:/?(\d+[\.\d]+))?'
|
||||
name: 'Python urllib'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Java(?:/?(\d+[\.\d]+))?'
|
||||
name: 'Java'
|
||||
version: '$1'
|
||||
|
||||
- regex: '(?:perlclient|libwww-perl)(?:/?(\d+[\.\d]+))?'
|
||||
name: 'Perl'
|
||||
version: '$1'
|
||||
78
www/analytics/vendor/piwik/device-detector/regexes/client/mediaplayers.yml
vendored
Normal file
78
www/analytics/vendor/piwik/device-detector/regexes/client/mediaplayers.yml
vendored
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
###############
|
||||
# Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
#
|
||||
# @link http://piwik.org
|
||||
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
###############
|
||||
|
||||
- regex: 'Banshee(?:[ /]([\d\.]+))?'
|
||||
name: 'Banshee'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Clementine(?:[ /]([\d\.]+))?'
|
||||
name: 'Clementine'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'iTunes(?:/([\d\.]+))?'
|
||||
name: 'iTunes'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'FlyCast(?:/([\d\.]+))?'
|
||||
name: 'FlyCast'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'MediaMonkey(?:[ /](\d+[\.\d]+))?'
|
||||
name: 'MediaMonkey'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Miro(?:/(\d+[\.\d]+))?'
|
||||
name: 'Miro'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'NexPlayer(?:/(\d+[\.\d]+))?'
|
||||
name: 'NexPlayer'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Nightingale(?:/([\d\.]+))?'
|
||||
name: 'Nightingale'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'QuickTime(?:(?:(?:.+qtver=)|(?:(?: E-)?[\./]))([\d\.]+))?'
|
||||
name: 'QuickTime'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Songbird(?:/([\d\.]+))?'
|
||||
name: 'Songbird'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'SubStream(?:/([\d\.]+))?'
|
||||
name: 'SubStream'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'VLC(?:/([\d\.]+))?'
|
||||
name: 'VLC'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Winamp(?:MPEG)?(?:/(\d+[\.\d]+))?'
|
||||
name: 'Winamp'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Windows-Media-Player(?:/(\d+[\.\d]+))?'
|
||||
name: 'Windows Media Player'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'XBMC(?:/([\d\.]+))?'
|
||||
name: 'XBMC'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Kodi(?:/([\d\.]+))?'
|
||||
name: 'Kodi'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'stagefright(?:/([\d\.]+))?'
|
||||
name: 'Stagefright'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Instacast(?:/([\d\.]+))? CFNetwork/([\d\.]+)'
|
||||
name: 'Instacast'
|
||||
version: '$1'
|
||||
51
www/analytics/vendor/piwik/device-detector/regexes/client/mobile_apps.yml
vendored
Normal file
51
www/analytics/vendor/piwik/device-detector/regexes/client/mobile_apps.yml
vendored
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
###############
|
||||
# Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
#
|
||||
# @link http://piwik.org
|
||||
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
###############
|
||||
|
||||
# AndroidDownloadManager
|
||||
- regex: 'AndroidDownloadManager(?:[ /]([\d\.]+))?'
|
||||
name: 'AndroidDownloadManager'
|
||||
version: '$1'
|
||||
|
||||
# Facebook
|
||||
- regex: 'com.facebook.katana'
|
||||
name: 'Facebook'
|
||||
version: ''
|
||||
|
||||
# FeedR
|
||||
- regex: 'FeedR(?:/([\d\.]+))?'
|
||||
name: 'FeedR'
|
||||
version: '$1'
|
||||
|
||||
# Google Play Kiosk
|
||||
- regex: 'com.google.android.apps.magazines'
|
||||
name: 'Google Play Newsstand'
|
||||
version: ''
|
||||
|
||||
# Google Plus
|
||||
- regex: 'com.google.GooglePlus'
|
||||
name: 'Google Plus'
|
||||
version: ''
|
||||
|
||||
# WeChat
|
||||
- regex: 'MicroMessenger/([^ ]+)'
|
||||
name: 'WeChat'
|
||||
version: '$1'
|
||||
|
||||
# Sina Weibo
|
||||
- regex: '.*__weibo__([0-9\.]+)__'
|
||||
name: 'Sina Weibo'
|
||||
version: '$1'
|
||||
|
||||
# YouTube
|
||||
- regex: 'com.google.android.youtube(?:/([\d\.]+))?'
|
||||
name: 'YouTube'
|
||||
version: '$1'
|
||||
|
||||
# AFNetworking generic
|
||||
- regex: '([^/]+)/(\d+(?:\.\d+)+) \((?:iPhone|iPad); iOS [0-9\.]+; Scale/[0-9\.]+\)'
|
||||
name: '$1'
|
||||
version: '$2'
|
||||
38
www/analytics/vendor/piwik/device-detector/regexes/client/pim.yml
vendored
Normal file
38
www/analytics/vendor/piwik/device-detector/regexes/client/pim.yml
vendored
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
###############
|
||||
# Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
#
|
||||
# @link http://piwik.org
|
||||
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
###############
|
||||
|
||||
- regex: 'Outlook-Express(?:/(\d+[\.\d]+))?'
|
||||
name: 'Outlook Express'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Microsoft Outlook(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'Microsoft Outlook'
|
||||
version: '$1'
|
||||
|
||||
- regex: '(?:Thunderbird|Icedove|Shredder)(?:/(\d+[\.\d]+))?'
|
||||
name: 'Thunderbird'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Airmail(?: (\d+[\.\d]+))?'
|
||||
name: 'Airmail'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Lotus-Notes(?:/(\d+[\.\d]+))?'
|
||||
name: 'Lotus Notes'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Barca(?:Pro)?(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'Barca'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Postbox(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'Postbox'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'The Bat!(?: Voyager)?(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'The Bat!'
|
||||
version: '$1'
|
||||
28
www/analytics/vendor/piwik/device-detector/regexes/device/cameras.yml
vendored
Normal file
28
www/analytics/vendor/piwik/device-detector/regexes/device/cameras.yml
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
###############
|
||||
# Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
#
|
||||
# @link http://piwik.org
|
||||
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
###############
|
||||
|
||||
#Nikon
|
||||
Nikon:
|
||||
regex: 'Coolpix S800c'
|
||||
device: 'camera'
|
||||
model: 'Coolpix S800c'
|
||||
|
||||
# Samsung
|
||||
Samsung:
|
||||
regex: 'EK-G[CN][0-9]{3}'
|
||||
device: 'camera'
|
||||
models:
|
||||
- regex: 'EK-GN120'
|
||||
model: 'GALAXY NX'
|
||||
- regex: 'EK-GC100'
|
||||
model: 'GALAXY Camera'
|
||||
- regex: 'EK-GC110'
|
||||
model: 'GALAXY Camera WiFi only'
|
||||
- regex: 'EK-GC200'
|
||||
model: 'GALAXY Camera 2'
|
||||
- regex: 'EK-GC([0-9]{3})'
|
||||
model: 'GALAXY Camera $1'
|
||||
12
www/analytics/vendor/piwik/device-detector/regexes/device/car_browsers.yml
vendored
Normal file
12
www/analytics/vendor/piwik/device-detector/regexes/device/car_browsers.yml
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
###############
|
||||
# Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
#
|
||||
# @link http://piwik.org
|
||||
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
###############
|
||||
|
||||
# Tesla Model S
|
||||
Tesla:
|
||||
regex: 'QtCarBrowser'
|
||||
device: 'car browser'
|
||||
model: 'Model S'
|
||||
40
www/analytics/vendor/piwik/device-detector/regexes/device/consoles.yml
vendored
Normal file
40
www/analytics/vendor/piwik/device-detector/regexes/device/consoles.yml
vendored
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
###############
|
||||
# Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
#
|
||||
# @link http://piwik.org
|
||||
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
###############
|
||||
|
||||
Archos:
|
||||
regex: 'Archos.*GAMEPAD([2]?)'
|
||||
device: 'console'
|
||||
model: 'Gamepad $1'
|
||||
|
||||
Microsoft:
|
||||
regex: 'Xbox'
|
||||
device: 'console'
|
||||
models:
|
||||
- regex: 'Xbox One'
|
||||
model: 'Xbox One'
|
||||
- regex: 'Xbox'
|
||||
model: 'Xbox 360'
|
||||
|
||||
Nintendo:
|
||||
regex: 'Nintendo (([3]?DS[i]?)|Wii[U]?)'
|
||||
device: 'console'
|
||||
model: '$1'
|
||||
|
||||
OUYA:
|
||||
regex: 'OUYA'
|
||||
device: 'console'
|
||||
model: 'OUYA'
|
||||
|
||||
Sega:
|
||||
regex: 'Dreamcast'
|
||||
device: 'console'
|
||||
model: 'Dreamcast'
|
||||
|
||||
Sony:
|
||||
regex: 'PlayStation (3|4|Portable|Vita)'
|
||||
device: 'console'
|
||||
model: 'PlayStation $1'
|
||||
4569
www/analytics/vendor/piwik/device-detector/regexes/device/mobiles.yml
vendored
Normal file
4569
www/analytics/vendor/piwik/device-detector/regexes/device/mobiles.yml
vendored
Normal file
File diff suppressed because it is too large
Load diff
61
www/analytics/vendor/piwik/device-detector/regexes/device/portable_media_player.yml
vendored
Normal file
61
www/analytics/vendor/piwik/device-detector/regexes/device/portable_media_player.yml
vendored
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
###############
|
||||
# Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
#
|
||||
# @link http://piwik.org
|
||||
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
###############
|
||||
|
||||
Apple:
|
||||
regex: '(?:Apple-)?iPod'
|
||||
device: 'portable media player'
|
||||
models:
|
||||
- regex: '(?:Apple-)?iPod1[C,]1'
|
||||
model: 'iPod Touch 1G'
|
||||
- regex: '(?:Apple-)?iPod2[C,]1'
|
||||
model: 'iPod Touch 2G'
|
||||
- regex: '(?:Apple-)?iPod3[C,]1'
|
||||
model: 'iPod Touch 3'
|
||||
- regex: '(?:Apple-)?iPod4[C,]1'
|
||||
model: 'iPod Touch 4'
|
||||
- regex: '(?:Apple-)?iPod5[C,]1'
|
||||
model: 'iPod Touch 5'
|
||||
- regex: '(?:Apple-)?iPod1[C,]1'
|
||||
model: 'iPod Touch'
|
||||
- regex: '(?:Apple-)?iPod1[C,]1'
|
||||
model: 'iPod Touch'
|
||||
- regex: '(?:Apple-)?iPod'
|
||||
model: 'iPod Touch'
|
||||
|
||||
Cowon:
|
||||
regex: 'COWON ([^;/]+) Build'
|
||||
device: 'portable media player'
|
||||
model: '$1'
|
||||
|
||||
Microsoft:
|
||||
regex: 'Microsoft ZuneHD'
|
||||
device: 'portable media player'
|
||||
model: 'Zune HD'
|
||||
|
||||
Panasonic:
|
||||
device: 'portable media player'
|
||||
regex: '(SV-MV100)'
|
||||
model: '$1'
|
||||
|
||||
Samsung:
|
||||
regex: 'YP-(G[SIPB]?1|G[57]0|GB70D)'
|
||||
device: 'portable media player'
|
||||
models:
|
||||
- regex: 'YP-G[B]?1'
|
||||
model: 'Galaxy Player 4.0'
|
||||
- regex: 'YP-G70'
|
||||
model: 'Galaxy Player 5.0'
|
||||
- regex: 'YP-GS1'
|
||||
model: 'Galaxy Player 3.6'
|
||||
- regex: 'YP-GI1'
|
||||
model: 'Galaxy Player 4.2'
|
||||
- regex: 'YP-GP1'
|
||||
model: 'Galaxy Player 5.8 '
|
||||
- regex: 'YP-G50'
|
||||
model: 'Galaxy Player 50'
|
||||
- regex: 'YP-GB70D'
|
||||
model: 'Galaxy Player 70 Plus'
|
||||
|
|
@ -1,21 +1,43 @@
|
|||
###############
|
||||
# Piwik - Open source web analytics
|
||||
# Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
#
|
||||
# @link http://piwik.org
|
||||
# @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
#
|
||||
# @category UserAgentParserEnhanced
|
||||
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
#
|
||||
# ATTENTION: This file may only include tv user agents that contain 'HbbTV/([1-9]{1}(\.[0-9]{1}){1,2})'
|
||||
#
|
||||
###############
|
||||
|
||||
# Airties
|
||||
Airties:
|
||||
regex: 'Airties'
|
||||
device: 'tv'
|
||||
models:
|
||||
- regex: 'Airties; ?([^);/]+)'
|
||||
model: '$1'
|
||||
|
||||
# Altech UEC
|
||||
'Altech UEC':
|
||||
regex: 'Altech UEC'
|
||||
device: 'tv'
|
||||
models:
|
||||
- regex: 'Altech UEC; ?([^);/]+)'
|
||||
model: '$1'
|
||||
|
||||
# BangOlufsen
|
||||
BangOlufsen:
|
||||
regex: 'Bangolufsen'
|
||||
device: 'tv'
|
||||
model: 'BeoVision'
|
||||
|
||||
# Changhong
|
||||
Changhong:
|
||||
regex: 'Changhong'
|
||||
device: 'tv'
|
||||
models:
|
||||
- regex: 'Changhong; ?([^);/]+)'
|
||||
model: '$1'
|
||||
|
||||
# CreNova
|
||||
CreNova:
|
||||
regex: 'CreNova'
|
||||
|
|
@ -26,7 +48,7 @@ CreNova:
|
|||
DMM:
|
||||
regex: 'DMM'
|
||||
device: 'tv'
|
||||
models: 'Dreambox'
|
||||
model: 'Dreambox'
|
||||
|
||||
# Grundig
|
||||
Grundig:
|
||||
|
|
@ -43,6 +65,8 @@ Humax:
|
|||
model: '$1'
|
||||
- regex: 'HMS1000S'
|
||||
model: 'HMS-1000S'
|
||||
- regex: 'Humax; ([^);/]+)'
|
||||
model: '$1'
|
||||
|
||||
# IKEA
|
||||
Ikea:
|
||||
|
|
@ -65,6 +89,8 @@ Inverto:
|
|||
regex: 'Inverto'
|
||||
device: 'tv'
|
||||
models:
|
||||
- regex: 'inverto; ([^);/]+)'
|
||||
model: '$1'
|
||||
- regex: '(Volksbox Web Edition|Volksbox Essential|Volksbox II|Volksbox)'
|
||||
model: '$1'
|
||||
|
||||
|
|
@ -126,27 +152,31 @@ PEAQ:
|
|||
|
||||
# Philips
|
||||
Philips:
|
||||
regex: 'Philips'
|
||||
regex: 'Philips|NETTV/'
|
||||
device: 'tv'
|
||||
models:
|
||||
- regex: '(NETTV/[0-9\.]{5})'
|
||||
- regex: 'Philips[,;] ?((?! )[^),;/]+)'
|
||||
model: '$1'
|
||||
- regex: 'NETTV/[0-9\.]{5}'
|
||||
model: 'NetTV Series'
|
||||
|
||||
# Samsung
|
||||
Samsung:
|
||||
regex: 'Samsung|Maple_2011'
|
||||
device: 'tv'
|
||||
models:
|
||||
- regex: '(SmartTV2013|SmartTV2012)'
|
||||
model: '$1'
|
||||
- regex: 'SmartTV(2012|2013|2014|2015)'
|
||||
model: 'Smart TV $1'
|
||||
- regex: 'Maple_2011'
|
||||
model: 'SmartTV2011'
|
||||
model: 'Smart TV 2011'
|
||||
|
||||
# Selevision
|
||||
Selevision:
|
||||
regex: 'Selevision'
|
||||
device: 'tv'
|
||||
models:
|
||||
- regex: 'Selevision; (?:Selevision )?([^);/]+)'
|
||||
model: '$1'
|
||||
- regex: '(EMC1000i)'
|
||||
model: '$1'
|
||||
|
||||
|
|
@ -155,14 +185,26 @@ Sharp:
|
|||
regex: 'Sharp'
|
||||
device: 'tv'
|
||||
models:
|
||||
- regex: 'Sharp[,;] ?((?! |HbbTV)[^),;/]+)'
|
||||
model: '$1'
|
||||
- regex: '(LE[0-9]{3}[A-Z]{0,3})'
|
||||
model: '$1'
|
||||
|
||||
# Skyworth
|
||||
Skyworth:
|
||||
regex: 'Sky_worth'
|
||||
device: 'tv'
|
||||
models:
|
||||
- regex: 'Sky_worth;([^);/]+)'
|
||||
model: '$1'
|
||||
|
||||
# Smart
|
||||
Smart:
|
||||
regex: 'Smart'
|
||||
regex: 'Smart[^a-z]'
|
||||
device: 'tv'
|
||||
models:
|
||||
- regex: 'Smart; ([^);/]+)'
|
||||
model: '$1'
|
||||
- regex: '([A-Z]{2}[0-9]{2}|ZAPPIX)'
|
||||
model: '$1'
|
||||
|
||||
|
|
@ -231,12 +273,10 @@ Vestel:
|
|||
|
||||
# Videoweb
|
||||
Videoweb:
|
||||
regex: 'videoweb|compatible;'
|
||||
regex: 'videoweb|tv2n'
|
||||
device: 'tv'
|
||||
models:
|
||||
- regex: '(videowebtv)'
|
||||
model: 'VideoWeb TV'
|
||||
- regex: '(tv2n)'
|
||||
model: '$1'
|
||||
- regex: 'ANTGalio/3.0'
|
||||
model: '600S'
|
||||
- regex: '(videowebtv)'
|
||||
model: 'VideoWeb TV'
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,36 +1,16 @@
|
|||
###############
|
||||
# Piwik - Open source web analytics
|
||||
# Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
#
|
||||
# @link http://piwik.org
|
||||
# @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
#
|
||||
# @category UserAgentParserEnhanced
|
||||
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
###############
|
||||
|
||||
##########
|
||||
# Bot
|
||||
##########
|
||||
- regex: '(nuhk|Sosospider|CareerBot|bingbot|SputnikBot|TsolCrawler|SensikaBot|UptimeRobot|SeznamBot|AhrefsBot|Ezooms|Googlebot|Exabot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves/Teoma|ia_archiver|ScoutJet|Gulper Web Bot|EmailWolf|grub-client|Download Demon|SearchExpress|Microsoft URL Control|bot|borg|yahoo|slurp|msnbot|msrbot|openbot|archiver|netresearch|transcoder|crawler|lycos|scooter|altavista|teoma|gigabot|baiduspider|blitzbot|oegp|charlotte|furlbot|http%20client|polybot|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|seekbot|semanticdiscovery|snappy|speedy|spider|voila|vortex|zao|zeal|fast-webcrawler|converacrawler|dataparksearch|findlinksYottaaMonitor|BrowserMob|HttpMonitor|YandexBot|Slurp|BingPreview|PagePeeker|ThumbShotsBot|WebThumb|URL2PNG|ZooShot|GomezA|Catchpoint bot|Willow Internet Crawler|Google SketchUp|Read%20Later|Minimo|Pingdom.com|facebookexternalhit|Twitterbot|RackspaceBot)'
|
||||
name: 'Bot'
|
||||
version: ''
|
||||
|
||||
|
||||
|
||||
##########
|
||||
# Simulators
|
||||
##########
|
||||
- regex: '(Talkatone|WinWAP)'
|
||||
name: '$1'
|
||||
version: ''
|
||||
|
||||
|
||||
|
||||
##########
|
||||
# Tizen
|
||||
##########
|
||||
- regex: 'Tizen'
|
||||
- regex: 'Tizen[ /]?(\d+[\.\d]+)?'
|
||||
name: 'Tizen'
|
||||
version: ''
|
||||
version: '$1'
|
||||
|
||||
|
||||
|
||||
|
|
@ -41,54 +21,17 @@
|
|||
name: 'Sailfish OS'
|
||||
version: ''
|
||||
|
||||
|
||||
|
||||
##########
|
||||
# Android
|
||||
# YunOS (Android based)
|
||||
##########
|
||||
- regex: '(?:Android|Adr)[ /](?:[a-z]+ )?(\d+\.\d+)'
|
||||
name: 'Android'
|
||||
- regex: '(?:Ali)?YunOS[ /]?(\d+[\.\d]+)?'
|
||||
name: 'YunOS'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'Android|Silk-Accelerated=[a-z]{4,5}'
|
||||
name: 'Android'
|
||||
version: ''
|
||||
|
||||
|
||||
##########
|
||||
# AmigaOS
|
||||
##########
|
||||
- regex: 'AmigaOS[ ]?(\d+\.\d+)'
|
||||
name: 'AmigaOS'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'AmigaOS|AmigaVoyager|Amiga-AWeb'
|
||||
name: 'AmigaOS'
|
||||
version: ''
|
||||
|
||||
|
||||
##########
|
||||
# Linux
|
||||
##########
|
||||
- regex: 'Arch ?Linux(?:[ /\-](\d+\.\d+))?'
|
||||
name: 'Arch Linux'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Linux; .*((?:Debian|Knoppix|Mint|Ubuntu|Kubuntu|Xubuntu|Lubuntu|Fedora|Red Hat|Mandriva|Gentoo|Sabayon|Slackware|SUSE|Puppy|CentOS|BackTrack|YunOs|Presto))[ /](\d+\.\d+)'
|
||||
name: '$1'
|
||||
version: '$2'
|
||||
|
||||
- regex: '(Debian|Knoppix|Mint|Ubuntu|Kubuntu|Xubuntu|Lubuntu|Fedora|Red Hat|Mandriva|Gentoo|Sabayon|Slackware|SUSE|Puppy|CentOS|BackTrack|YunOs)(?: Linux)?(?:[ /\-](\d+\.\d+))?'
|
||||
name: '$1'
|
||||
version: '$2'
|
||||
|
||||
# generic linux match -> end of file
|
||||
|
||||
##########
|
||||
# Windows Mobile
|
||||
##########
|
||||
- regex: 'Windows Phone (?:OS)?[ ]?(\d+\.\d+)'
|
||||
- regex: 'Windows Phone (?:OS)?[ ]?(\d+[\.\d]+)'
|
||||
name: 'Windows Phone'
|
||||
version: '$1'
|
||||
|
||||
|
|
@ -102,7 +45,7 @@
|
|||
version: ''
|
||||
|
||||
|
||||
- regex: '(?:IEMobile|Windows Mobile)(?: (\d+\.\d+))?'
|
||||
- regex: '(?:IEMobile|Windows Mobile)(?: (\d+[\.\d]+))?'
|
||||
name: 'Windows Mobile'
|
||||
version: '$1'
|
||||
|
||||
|
|
@ -111,80 +54,185 @@
|
|||
name: 'Windows RT'
|
||||
version: ''
|
||||
|
||||
- regex: 'Windows NT 6.3; ARM;'
|
||||
name: 'Windows RT'
|
||||
version: '8.1'
|
||||
|
||||
|
||||
##########
|
||||
# Custom Android Roms
|
||||
##########
|
||||
- regex: 'RazoDroiD(?: v(\d+[\.\d]*))?'
|
||||
name: 'RazoDroiD'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'MildWild(?: CM-(\d+[\.\d]*))?'
|
||||
name: 'MildWild'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'CyanogenMod(?:[\-/](?:CM)?(\d+[\.\d]*))?'
|
||||
name: 'CyanogenMod'
|
||||
version: '$1'
|
||||
|
||||
- regex: '(?:.*_)?MocorDroid(?:(\d+[\.\d]*))?'
|
||||
name: 'MocorDroid'
|
||||
version: '$1'
|
||||
|
||||
##########
|
||||
# Android
|
||||
##########
|
||||
- regex: '(?:Android|Adr)[ /](?:[a-z]+ )?(\d+[\.\d]+)'
|
||||
name: 'Android'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'Android|Silk-Accelerated=[a-z]{4,5}'
|
||||
name: 'Android'
|
||||
version: ''
|
||||
|
||||
|
||||
##########
|
||||
# AmigaOS
|
||||
##########
|
||||
- regex: 'AmigaOS[ ]?(\d+[\.\d]+)'
|
||||
name: 'AmigaOS'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'AmigaOS|AmigaVoyager|Amiga-AWeb'
|
||||
name: 'AmigaOS'
|
||||
version: ''
|
||||
|
||||
##########
|
||||
# ThreadX
|
||||
##########
|
||||
- regex: 'ThreadX(?:/(\d+[\.\d]*))?'
|
||||
name: 'ThreadX'
|
||||
version: '$1'
|
||||
|
||||
##########
|
||||
# MTK / Nucleus
|
||||
##########
|
||||
- regex: 'Nucleus(?:(?: |/v?)(\d+[\.\d]*))?'
|
||||
name: 'MTK / Nucleus'
|
||||
version: '$1'
|
||||
- regex: 'MTK(?:(?: |/v?)(\d+[\.\d]*))?'
|
||||
name: 'MTK / Nucleus'
|
||||
version: '$1'
|
||||
|
||||
##########
|
||||
# Linux
|
||||
##########
|
||||
- regex: 'Maemo'
|
||||
name: 'Maemo'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Arch ?Linux(?:[ /\-](\d+[\.\d]+))?'
|
||||
name: 'Arch Linux'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'VectorLinux(?: package)?(?:[ /\-](\d+[\.\d]+))?'
|
||||
name: 'VectorLinux'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Linux; .*((?:Debian|Knoppix|Mint|Ubuntu|Kubuntu|Xubuntu|Lubuntu|Fedora|Red Hat|Mandriva|Gentoo|Sabayon|Slackware|SUSE|CentOS|BackTrack))[ /](\d+[\.\d]+)'
|
||||
name: '$1'
|
||||
version: '$2'
|
||||
|
||||
- regex: '(Debian|Knoppix|Mint|Ubuntu|Kubuntu|Xubuntu|Lubuntu|Fedora|Red Hat|Mandriva|Gentoo|Sabayon|Slackware|SUSE|CentOS|BackTrack)(?:(?: Enterprise)? Linux)?(?:[ /\-](\d+[\.\d]+))?'
|
||||
name: '$1'
|
||||
version: '$2'
|
||||
|
||||
# generic linux match -> end of file
|
||||
|
||||
##########
|
||||
# webOS
|
||||
##########
|
||||
- regex: '(?:webOS|Palm webOS)(?:/(\d+\.\d+))?'
|
||||
- regex: '(?:webOS|Palm webOS)(?:/(\d+[\.\d]+))?'
|
||||
name: 'webOS'
|
||||
version: '$1'
|
||||
|
||||
- regex: '(?:PalmOS|Palm OS)(?:[/ ](\d+\.\d+))?|Palm'
|
||||
- regex: '(?:PalmOS|Palm OS)(?:[/ ](\d+[\.\d]+))?|Palm'
|
||||
name: 'palmOS'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Xiino(?:.*v\. (\d+\.\d+))?' # palmOS only browser
|
||||
- regex: 'Xiino(?:.*v\. (\d+[\.\d]+))?' # palmOS only browser
|
||||
name: 'palmOS'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'MorphOS(?:[ /](\d+[\.\d]+))?'
|
||||
name: 'MorphOS'
|
||||
version: '$1'
|
||||
|
||||
|
||||
##########
|
||||
# Windows
|
||||
##########
|
||||
- regex: 'CYGWIN_NT-6.2|Windows NT 6.2|Windows NT 6.3|Windows 8'
|
||||
name: 'Windows 8'
|
||||
- regex: 'CYGWIN_NT-10.0|Windows NT 10.0|Windows 10'
|
||||
name: 'Windows'
|
||||
version: '10'
|
||||
|
||||
- regex: 'CYGWIN_NT-6.4|Windows NT 6.4|Windows 10'
|
||||
name: 'Windows'
|
||||
version: '10'
|
||||
|
||||
- regex: 'CYGWIN_NT-6.3|Windows NT 6.3|Windows 8.1'
|
||||
name: 'Windows'
|
||||
version: '8.1'
|
||||
|
||||
|
||||
- regex: 'CYGWIN_NT-6.2|Windows NT 6.2|Windows 8'
|
||||
name: 'Windows'
|
||||
version: '8'
|
||||
|
||||
|
||||
- regex: 'CYGWIN_NT-6.1|Windows NT 6.1|Windows 7'
|
||||
name: 'Windows 7'
|
||||
name: 'Windows'
|
||||
version: '7'
|
||||
|
||||
|
||||
- regex: 'CYGWIN_NT-6.0|Windows NT 6.0|Windows Vista'
|
||||
name: 'Windows Vista'
|
||||
name: 'Windows'
|
||||
version: 'Vista'
|
||||
|
||||
|
||||
- regex: 'CYGWIN_NT-5.2|Windows NT 5.2|Windows Server 2003 / XP x64'
|
||||
name: 'Windows Server 2003'
|
||||
name: 'Windows'
|
||||
version: 'Server 2003'
|
||||
|
||||
|
||||
- regex: 'CYGWIN_NT-5.1|Windows NT 5.1|Windows XP'
|
||||
name: 'Windows XP'
|
||||
name: 'Windows'
|
||||
version: 'XP'
|
||||
|
||||
|
||||
- regex: 'CYGWIN_NT-5.0|Windows NT 5.0|Windows 2000'
|
||||
name: 'Windows 2000'
|
||||
name: 'Windows'
|
||||
version: '2000'
|
||||
|
||||
|
||||
- regex: 'CYGWIN_NT-4.0|Windows NT 4.0|WinNT|Windows NT'
|
||||
name: 'Windows NT'
|
||||
name: 'Windows'
|
||||
version: 'NT'
|
||||
|
||||
|
||||
- regex: 'CYGWIN_ME-4.90|Win 9x 4.90|Windows ME'
|
||||
name: 'Windows ME'
|
||||
name: 'Windows'
|
||||
version: 'ME'
|
||||
|
||||
|
||||
- regex: 'CYGWIN_98-4.10|Win98|Windows 98'
|
||||
name: 'Windows 98'
|
||||
name: 'Windows'
|
||||
version: '98'
|
||||
|
||||
|
||||
- regex: 'CYGWIN_95-4.0|Win32|Win95|Windows 95|Windows_95'
|
||||
name: 'Windows 95'
|
||||
name: 'Windows'
|
||||
version: '95'
|
||||
|
||||
|
||||
- regex: 'Windows 3.1'
|
||||
name: 'Windows 3.1'
|
||||
name: 'Windows'
|
||||
version: '3.1'
|
||||
|
||||
|
||||
|
|
@ -194,36 +242,158 @@
|
|||
|
||||
|
||||
|
||||
##########
|
||||
# iOS
|
||||
##########
|
||||
- regex: 'CFNetwork/758\.1\.6'
|
||||
name: 'iOS'
|
||||
version: '9.1'
|
||||
|
||||
- regex: 'CFNetwork/758\.0\.2'
|
||||
name: 'iOS'
|
||||
version: '9.0'
|
||||
|
||||
- regex: 'CFNetwork/711\.5\.6'
|
||||
name: 'iOS'
|
||||
version: '8.4.1'
|
||||
|
||||
- regex: 'CFNetwork/711\.4\.6'
|
||||
name: 'iOS'
|
||||
version: '8.4'
|
||||
|
||||
- regex: 'CFNetwork/711\.3\.18'
|
||||
name: 'iOS'
|
||||
version: '8.3'
|
||||
|
||||
- regex: 'CFNetwork/711\.2\.23'
|
||||
name: 'iOS'
|
||||
version: '8.2'
|
||||
|
||||
- regex: 'CFNetwork/711\.1\.1[26]'
|
||||
name: 'iOS'
|
||||
version: '8.1'
|
||||
|
||||
- regex: 'CFNetwork/711\.0\.6'
|
||||
name: 'iOS'
|
||||
version: '8.0'
|
||||
|
||||
- regex: 'CFNetwork/672\.1'
|
||||
name: 'iOS'
|
||||
version: '7.1'
|
||||
|
||||
- regex: 'CFNetwork/672\.0'
|
||||
name: 'iOS'
|
||||
version: '7.0'
|
||||
|
||||
- regex: 'CFNetwork/609\.1'
|
||||
name: 'iOS'
|
||||
version: '6.1'
|
||||
|
||||
- regex: 'CFNetwork/60[29]'
|
||||
name: 'iOS'
|
||||
version: '6.0'
|
||||
|
||||
- regex: 'CFNetwork/548\.1'
|
||||
name: 'iOS'
|
||||
version: '5.1'
|
||||
|
||||
- regex: 'CFNetwork/548\.0'
|
||||
name: 'iOS'
|
||||
version: '5.0'
|
||||
|
||||
- regex: 'CFNetwork/485\.13'
|
||||
name: 'iOS'
|
||||
version: '4.3'
|
||||
|
||||
- regex: 'CFNetwork/485\.12'
|
||||
name: 'iOS'
|
||||
version: '4.2'
|
||||
|
||||
- regex: 'CFNetwork/485\.10'
|
||||
name: 'iOS'
|
||||
version: '4.1'
|
||||
|
||||
- regex: 'CFNetwork/485\.2'
|
||||
name: 'iOS'
|
||||
version: '4.0'
|
||||
|
||||
- regex: 'CFNetwork/459'
|
||||
name: 'iOS'
|
||||
version: '3.1'
|
||||
|
||||
|
||||
- regex: '(?:CPU OS|iPh(?:one)? OS|iOS)[ _](\d+(?:[_\.]\d+)*)'
|
||||
name: 'iOS'
|
||||
version: '$1'
|
||||
|
||||
- regex: '(?:Apple-)?(?:iPhone|iPad|iPod)(?:.*Mac OS X.*Version/(\d+\.\d+)|; Opera)?'
|
||||
name: 'iOS'
|
||||
version: '$1'
|
||||
|
||||
|
||||
|
||||
##########
|
||||
# Mac
|
||||
##########
|
||||
- regex: 'Mac OS X (\d+[_.]\d+)'
|
||||
|
||||
- regex: 'CFNetwork/760'
|
||||
name: 'Mac'
|
||||
version: '10.11'
|
||||
|
||||
- regex: 'CFNetwork/720'
|
||||
name: 'Mac'
|
||||
version: '10.10'
|
||||
|
||||
- regex: 'CFNetwork/673'
|
||||
name: 'Mac'
|
||||
version: '10.9'
|
||||
|
||||
- regex: 'CFNetwork/596'
|
||||
name: 'Mac'
|
||||
version: '10.8'
|
||||
|
||||
- regex: 'CFNetwork/520'
|
||||
name: 'Mac'
|
||||
version: '10.7'
|
||||
|
||||
- regex: 'CFNetwork/454'
|
||||
name: 'Mac'
|
||||
version: '10.6'
|
||||
|
||||
- regex: 'CFNetwork/(?:438|422|339|330|221|220|217)'
|
||||
name: 'Mac'
|
||||
version: '10.5'
|
||||
|
||||
- regex: 'CFNetwork/12[89]'
|
||||
name: 'Mac'
|
||||
version: '10.4'
|
||||
|
||||
- regex: 'CFNetwork/1\.2'
|
||||
name: 'Mac'
|
||||
version: '10.3'
|
||||
|
||||
- regex: 'CFNetwork/1\.1'
|
||||
name: 'Mac'
|
||||
version: '10.2'
|
||||
|
||||
- regex: 'Mac OS X(?: (?:Version )?(\d+(?:[_\.]\d+)+))?'
|
||||
name: 'Mac'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Mac (\d+(?:[_\.]\d+)+)'
|
||||
name: 'Mac'
|
||||
version: '$1'
|
||||
|
||||
- regex: 'Darwin|Macintosh|Mac_PowerPC|PPC|Mac PowerPC'
|
||||
name: 'Mac'
|
||||
version: ''
|
||||
|
||||
|
||||
|
||||
##########
|
||||
# iOS
|
||||
##########
|
||||
- regex: '(?:CPU OS|iPhone OS)[ _](\d+(?:_\d+)?)'
|
||||
name: 'iOS'
|
||||
version: '$1'
|
||||
|
||||
- regex: '(?:iPhone|iPad|iPod)(?:.*Mac OS X.*Version/(\d+\.\d+)|; Opera)'
|
||||
name: 'iOS'
|
||||
version: '$1'
|
||||
|
||||
|
||||
|
||||
##########
|
||||
# ChromeOS
|
||||
##########
|
||||
- regex: 'CrOS [a-z0-9_]+ (\d+\.\d+)'
|
||||
- regex: 'CrOS [a-z0-9_]+ (\d+[\.\d]+)'
|
||||
name: 'Chrome OS'
|
||||
version: '$1'
|
||||
|
||||
|
|
@ -232,12 +402,12 @@
|
|||
##########
|
||||
# BlackBerry
|
||||
##########
|
||||
- regex: '(?:BB10;.+Version|Black[Bb]erry[0-9a-z]+|Black[Bb]erry.+Version)/(\d+\.\d+)'
|
||||
- regex: '(?:BB10;.+Version|Black[Bb]erry[0-9a-z]+|Black[Bb]erry.+Version)/(\d+[\.\d]+)'
|
||||
name: 'BlackBerry OS'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'RIM Tablet OS (\d+\.\d+)'
|
||||
- regex: 'RIM Tablet OS (\d+[\.\d]+)'
|
||||
name: 'BlackBerry Tablet OS'
|
||||
version: '$1'
|
||||
|
||||
|
|
@ -273,7 +443,22 @@
|
|||
##########
|
||||
# Symbian
|
||||
##########
|
||||
- regex: '(?:Series ?60|SymbOS|S60)(?:[ /]?(\d+\.\d+|V\d+))?'
|
||||
- regex: 'Symbian/3.+NokiaBrowser/7\.3'
|
||||
name: 'Symbian^3'
|
||||
version: 'Anna'
|
||||
|
||||
|
||||
- regex: 'Symbian/3.+NokiaBrowser/7\.4'
|
||||
name: 'Symbian^3'
|
||||
version: 'Belle'
|
||||
|
||||
|
||||
- regex: 'Symbian/3'
|
||||
name: 'Symbian^3'
|
||||
version: ''
|
||||
|
||||
|
||||
- regex: '(?:Series ?60|SymbOS|S60)(?:[ /]?(\d+[\.\d]+|V\d+))?'
|
||||
name: 'Symbian OS Series 60'
|
||||
version: '$1'
|
||||
|
||||
|
|
@ -283,26 +468,11 @@
|
|||
version: ''
|
||||
|
||||
|
||||
- regex: 'SymbianOS/(\d+\.\d+)'
|
||||
- regex: 'SymbianOS/(\d+[\.\d]+)'
|
||||
name: 'Symbian OS'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'Symbian/3.+NokiaBrowser/7\.3'
|
||||
name: 'Symbian'
|
||||
version: '^3 Anna'
|
||||
|
||||
|
||||
- regex: 'Symbian/3.+NokiaBrowser/7\.4'
|
||||
name: 'Symbian'
|
||||
version: '^3 Belle'
|
||||
|
||||
|
||||
- regex: 'Symbian[/]?3'
|
||||
name: 'Symbian^3'
|
||||
version: '^3'
|
||||
|
||||
|
||||
- regex: 'MeeGo|WeTab'
|
||||
name: 'MeeGo'
|
||||
version: ''
|
||||
|
|
@ -330,7 +500,7 @@
|
|||
##########
|
||||
# RISC OS
|
||||
##########
|
||||
- regex: 'RISC OS(?:-NC)?(?:[ /](\d+\.\d+))?'
|
||||
- regex: 'RISC OS(?:-NC)?(?:[ /](\d+[\.\d]+))?'
|
||||
name: 'RISC OS'
|
||||
version: '$1'
|
||||
|
||||
|
|
@ -338,7 +508,7 @@
|
|||
##########
|
||||
# Inferno
|
||||
##########
|
||||
- regex: 'Inferno(?:[ /](\d+\.\d+))?'
|
||||
- regex: 'Inferno(?:[ /](\d+[\.\d]+))?'
|
||||
name: 'Inferno'
|
||||
version: '$1'
|
||||
|
||||
|
|
@ -346,7 +516,7 @@
|
|||
##########
|
||||
# Bada
|
||||
##########
|
||||
- regex: 'bada(?:[ /](\d+\.\d+))'
|
||||
- regex: 'bada(?:[ /](\d+[\.\d]+))'
|
||||
name: 'Bada'
|
||||
version: '$1'
|
||||
|
||||
|
|
@ -359,7 +529,7 @@
|
|||
##########
|
||||
# Brew
|
||||
##########
|
||||
- regex: '(?:Brew MP|BREW|BMP)(?:[ /](\d+\.\d+))'
|
||||
- regex: '(?:Brew MP|BREW|BMP)(?:[ /](\d+[\.\d]+))'
|
||||
name: 'Brew'
|
||||
version: '$1'
|
||||
|
||||
|
|
@ -372,17 +542,17 @@
|
|||
##########
|
||||
# Web TV
|
||||
##########
|
||||
- regex: 'GoogleTV[ /](\d+\.\d+)|GoogleTV'
|
||||
- regex: 'GoogleTV(?:[ /](\d+[\.\d]+))?'
|
||||
name: 'Google TV'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'AppleTV(?:/?(\d+\.\d+))?'
|
||||
- regex: 'AppleTV(?:/?(\d+[\.\d]+))?'
|
||||
name: 'Apple TV'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'WebTV/(\d+\.\d+)'
|
||||
- regex: 'WebTV/(\d+[\.\d]+)'
|
||||
name: 'WebTV'
|
||||
version: '$1'
|
||||
|
||||
|
|
@ -391,52 +561,52 @@
|
|||
##########
|
||||
# Unix
|
||||
##########
|
||||
- regex: '(?:SunOS|Solaris)(?:[/ ](\d+\.\d+))?'
|
||||
- regex: '(?:SunOS|Solaris)(?:[/ ](\d+[\.\d]+))?'
|
||||
name: 'Solaris'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'AIX(?:[/ ]?(\d+\.\d+))?'
|
||||
- regex: 'AIX(?:[/ ]?(\d+[\.\d]+))?'
|
||||
name: 'AIX'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'HP-UX(?:[/ ]?(\d+\.\d+))?'
|
||||
- regex: 'HP-UX(?:[/ ]?(\d+[\.\d]+))?'
|
||||
name: 'HP-UX'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'FreeBSD(?:[/ ]?(\d+\.\d+))?'
|
||||
- regex: 'FreeBSD(?:[/ ]?(\d+[\.\d]+))?'
|
||||
name: 'FreeBSD'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'NetBSD(?:[/ ]?(\d+\.\d+))?'
|
||||
- regex: 'NetBSD(?:[/ ]?(\d+[\.\d]+))?'
|
||||
name: 'NetBSD'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'OpenBSD(?:[/ ]?(\d+\.\d+))?'
|
||||
- regex: 'OpenBSD(?:[/ ]?(\d+[\.\d]+))?'
|
||||
name: 'OpenBSD'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'DragonFly(?:[/ ]?(\d+\.\d+))?'
|
||||
- regex: 'DragonFly(?:[/ ]?(\d+[\.\d]+))?'
|
||||
name: 'DragonFly'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'Syllable(?:[/ ]?(\d+\.\d+))?'
|
||||
- regex: 'Syllable(?:[/ ]?(\d+[\.\d]+))?'
|
||||
name: 'Syllable'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'IRIX(?:[/ ]?(\d+\.\d+))'
|
||||
- regex: 'IRIX(?:;64)?(?:[/ ]?(\d+[\.\d]+))'
|
||||
name: 'IRIX'
|
||||
version: '$1'
|
||||
|
||||
|
||||
- regex: 'OSF1(?:[/ ]?v?(\d+\.\d+))?'
|
||||
- regex: 'OSF1(?:[/ ]?v?(\d+[\.\d]+))?'
|
||||
name: 'OSF1'
|
||||
version: '$1'
|
||||
|
||||
|
|
@ -488,7 +658,7 @@
|
|||
# Linux (Generic)
|
||||
###########
|
||||
- regex: 'Linux[^a-z]'
|
||||
name: 'Linux'
|
||||
name: 'GNU/Linux'
|
||||
version: ''
|
||||
|
||||
|
||||
|
|
|
|||
71
www/analytics/vendor/piwik/device-detector/regexes/vendorfragments.yml
vendored
Normal file
71
www/analytics/vendor/piwik/device-detector/regexes/vendorfragments.yml
vendored
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
###############
|
||||
# Device Detector - The Universal Device Detection library for parsing User Agents
|
||||
#
|
||||
# @link http://piwik.org
|
||||
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
||||
###############
|
||||
|
||||
Dell:
|
||||
- 'MDDR(JS)?'
|
||||
- 'MDDC(JS)?'
|
||||
- 'MDDS(JS)?'
|
||||
|
||||
Acer:
|
||||
- 'MAAR(JS)?'
|
||||
|
||||
Sony:
|
||||
- 'MASE(JS)?'
|
||||
- 'MASP(JS)?'
|
||||
- 'MASA(JS)?'
|
||||
|
||||
Asus:
|
||||
- 'MAAU'
|
||||
- 'NP0[6789]'
|
||||
- 'ASJB'
|
||||
- 'ASU2(JS)?'
|
||||
|
||||
Samsung:
|
||||
- 'MASM(JS)?'
|
||||
- 'SMJB'
|
||||
|
||||
Lenovo:
|
||||
- 'MALC(JS)?'
|
||||
- 'MALE(JS)?'
|
||||
- 'MALN(JS)?'
|
||||
- 'LCJB'
|
||||
- 'LEN2'
|
||||
|
||||
Toshiba:
|
||||
- 'MATM(JS)?'
|
||||
- 'MATB(JS)?'
|
||||
- 'MATP(JS)?'
|
||||
- 'TNJB'
|
||||
- 'TAJB'
|
||||
|
||||
Medion:
|
||||
- 'MAMD'
|
||||
|
||||
MSI:
|
||||
- 'MAMI(JS)?'
|
||||
- 'MAM3'
|
||||
|
||||
Gateway:
|
||||
- 'MAGW(JS)?'
|
||||
|
||||
Fujitsu:
|
||||
- 'MAFS(JS)?'
|
||||
- 'FSJB'
|
||||
|
||||
Compaq:
|
||||
- 'CPDTDF'
|
||||
- 'CPNTDF(JS?)'
|
||||
- 'CMNTDF(JS)?'
|
||||
- 'CMDTDF(JS)?'
|
||||
|
||||
HP:
|
||||
- 'HPCMHP'
|
||||
- 'HPNTDF(JS)?'
|
||||
- 'HPDTDF(JS)?'
|
||||
|
||||
Hyrican:
|
||||
- 'MANM(JS)?'
|
||||
Loading…
Reference in a new issue