Version Description
Download this release
Release Info
Developer | matomoteam |
Plugin | Matomo Analytics – Ethical Stats. Powerful Insights. |
Version | 1.0.5 |
Comparing to | |
See all releases |
Code changes from version 1.0.4 to 1.0.5
- app/bootstrap.php +21 -19
- app/core/Application/Kernel/EnvironmentValidator.php +1 -1
- app/core/Archive/ArchivePurger.php +1 -10
- app/core/Archive/DataTableFactory.php +5 -1
- app/core/ArchiveProcessor.php +60 -29
- app/core/ArchiveProcessor/Loader.php +1 -1
- app/core/ArchiveProcessor/PluginsArchiver.php +1 -1
- app/core/Columns/Dimension.php +11 -0
- app/core/CronArchive.php +11 -7
- app/core/CronArchive/StopArchiverException.php +15 -0
- app/core/DataAccess/ArchivingDbAdapter.php +11 -1
- app/core/DataAccess/LogAggregator.php +10 -0
- app/core/DataAccess/Model.php +6 -14
- app/core/Plugin/ControllerAdmin.php +0 -1
- app/core/Plugin/Segment.php +32 -0
- app/core/Tracker/GoalManager.php +5 -5
- app/core/Updates/3.13.4-b1.php +2 -2
- app/core/Updates/3.13.5-rc1.php +50 -0
- app/core/Version.php +1 -1
- app/js/piwik.min.js +33 -33
- app/matomo.js +33 -33
- app/piwik.js +33 -33
- app/plugins/API/API.php +57 -0
- app/plugins/API/SegmentMetadata.php +4 -0
- app/plugins/Actions/Columns/ClickedUrl.php +1 -0
- app/plugins/Actions/Columns/DownloadUrl.php +1 -0
- app/plugins/Actions/Columns/EntryPageTitle.php +1 -0
- app/plugins/Actions/Columns/EntryPageUrl.php +1 -0
- app/plugins/Actions/Columns/ExitPageTitle.php +1 -0
- app/plugins/Actions/Columns/ExitPageUrl.php +1 -0
- app/plugins/Actions/Columns/PageTitle.php +1 -0
- app/plugins/Actions/Columns/PageUrl.php +1 -0
- app/plugins/Actions/DataTable/Filter/Actions.php +15 -2
- app/plugins/Contents/Columns/ContentName.php +1 -0
- app/plugins/Contents/Columns/ContentPiece.php +1 -0
- app/plugins/CoreAdminHome/Tasks.php +20 -0
- app/plugins/CoreHome/Columns/UserId.php +8 -0
- app/plugins/CoreUpdater/Controller.php +12 -0
- app/plugins/CoreUpdater/Updater.php +39 -26
- app/plugins/CustomPiwikJs/TrackingCode/JsTestPluginTrackerFiles.php +17 -0
- app/plugins/Events/Columns/EventAction.php +1 -0
- app/plugins/Events/Columns/EventCategory.php +1 -0
- app/plugins/Events/Columns/EventName.php +2 -0
- app/plugins/Live/Controller.php +2 -0
- app/plugins/Marketplace/Api/Client.php +0 -2
- app/plugins/UserId/API.php +1 -0
- app/vendor/autoload.php +1 -1
- app/vendor/composer/autoload_classmap.php +2 -0
- app/vendor/composer/autoload_real.php +7 -7
- app/vendor/composer/autoload_static.php +8 -6
- app/vendor/composer/installed.json +6 -6
- app/vendor/piwik/device-detector/DeviceDetector.php +1 -1
- app/vendor/piwik/device-detector/Parser/Client/Browser.php +2 -1
- app/vendor/piwik/device-detector/Parser/Device/DeviceParserAbstract.php +44 -1
- app/vendor/piwik/device-detector/README.md +9 -8
- app/vendor/piwik/device-detector/regexes/bots.yml +16 -0
- app/vendor/piwik/device-detector/regexes/client/browsers.yml +5 -0
- app/vendor/piwik/device-detector/regexes/client/libraries.yml +15 -0
- app/vendor/piwik/device-detector/regexes/device/car_browsers.yml +6 -2
- app/vendor/piwik/device-detector/regexes/device/mobiles.yml +864 -179
- app/vendor/piwik/device-detector/regexes/device/portable_media_player.yml +1 -1
- assets/css/admin-style.css +4 -0
- assets/js/asset_manager_core_js.js +4 -4
- classes/WpMatomo/Admin/Marketplace.php +13 -0
- classes/WpMatomo/Admin/SystemReport.php +31 -3
- classes/WpMatomo/Admin/TrackingSettings.php +1 -0
- classes/WpMatomo/Admin/views/marketplace.php +37 -8
- classes/WpMatomo/Admin/views/summary.php +1 -1
- classes/WpMatomo/Admin/views/tracking.php +2 -0
- classes/WpMatomo/Db/WordPressTracker.php +3 -4
- classes/WpMatomo/Logger.php +1 -1
- classes/WpMatomo/Settings.php +1 -0
- classes/WpMatomo/TrackingCode/TrackingCodeGenerator.php +3 -0
- matomo.php +1 -1
- readme.txt +1 -14
app/bootstrap.php
CHANGED
@@ -24,29 +24,31 @@ if ( ! defined( 'PIWIK_ENABLE_ERROR_HANDLER' ) ) {
|
|
24 |
|
25 |
$GLOBALS['MATOMO_LOADED_DIRECTLY'] = ! defined( 'ABSPATH' );
|
26 |
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
if (
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
|
|
|
|
|
|
37 |
}
|
38 |
-
@ini_set('display_errors', $value_orig);
|
39 |
}
|
40 |
-
}
|
41 |
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
|
|
|
50 |
}
|
51 |
}
|
52 |
}
|
24 |
|
25 |
$GLOBALS['MATOMO_LOADED_DIRECTLY'] = ! defined( 'ABSPATH' );
|
26 |
|
27 |
+
if (!function_exists('matomo_log_message_no_display')) {
|
28 |
+
function matomo_log_message_no_display($message)
|
29 |
+
{
|
30 |
+
$message = 'Matomo ' . $message;
|
31 |
+
|
32 |
+
if ( defined( 'WP_DEBUG' ) && WP_DEBUG === true ) {
|
33 |
+
if (function_exists('ini_set') && function_exists('ini_get')) {
|
34 |
+
$value_orig = @ini_get('display_errors');
|
35 |
+
$value = @ini_set('display_errors', 'Off');
|
36 |
+
if (false !== $value) {
|
37 |
+
error_log( $message );
|
38 |
+
}
|
39 |
+
@ini_set('display_errors', $value_orig);
|
40 |
}
|
|
|
41 |
}
|
|
|
42 |
|
43 |
+
if (function_exists('update_option')
|
44 |
+
&& class_exists('\WpMatomo\Logger')) {
|
45 |
+
// only if WordPress was bootstrapped by now... otherwise it will fail
|
46 |
+
try {
|
47 |
+
$logger = new \WpMatomo\Logger();
|
48 |
+
$logger->log_exception('archive_boot', new Exception($message));
|
49 |
+
} catch (Exception $e) {
|
50 |
|
51 |
+
}
|
52 |
}
|
53 |
}
|
54 |
}
|
app/core/Application/Kernel/EnvironmentValidator.php
CHANGED
@@ -82,7 +82,7 @@ class EnvironmentValidator
|
|
82 |
if (isset($general['enable_installer'])
|
83 |
&& !$general['enable_installer']
|
84 |
) {
|
85 |
-
throw new NotYetInstalledException('Matomo is not set up yet');
|
86 |
}
|
87 |
|
88 |
$message = $this->getSpecificMessageWhetherFileExistsOrNot($path);
|
82 |
if (isset($general['enable_installer'])
|
83 |
&& !$general['enable_installer']
|
84 |
) {
|
85 |
+
throw new NotYetInstalledException('Matomo is not set up yet. File not readable: ' . $path);
|
86 |
}
|
87 |
|
88 |
$message = $this->getSpecificMessageWhetherFileExistsOrNot($path);
|
app/core/Archive/ArchivePurger.php
CHANGED
@@ -95,16 +95,7 @@ class ArchivePurger
|
|
95 |
{
|
96 |
$numericTable = ArchiveTableCreator::getNumericTable($date);
|
97 |
|
98 |
-
|
99 |
-
// so we first look for sites w/ invalidated archives, and use this as a constraint in getInvalidatedArchiveIdsSafeToDelete() below.
|
100 |
-
// the constraint will hit an INDEX and speed up the inner join that happens in getInvalidatedArchiveIdsSafeToDelete().
|
101 |
-
$idSites = $this->model->getSitesWithInvalidatedArchive($numericTable);
|
102 |
-
if (empty($idSites)) {
|
103 |
-
$this->logger->debug("No sites with invalidated archives found in {table}.", array('table' => $numericTable));
|
104 |
-
return 0;
|
105 |
-
}
|
106 |
-
|
107 |
-
$archiveIds = $this->model->getInvalidatedArchiveIdsSafeToDelete($numericTable, $idSites);
|
108 |
if (empty($archiveIds)) {
|
109 |
$this->logger->debug("No invalidated archives found in {table} with newer, valid archives.", array('table' => $numericTable));
|
110 |
return 0;
|
95 |
{
|
96 |
$numericTable = ArchiveTableCreator::getNumericTable($date);
|
97 |
|
98 |
+
$archiveIds = $this->model->getInvalidatedArchiveIdsSafeToDelete($numericTable);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
if (empty($archiveIds)) {
|
100 |
$this->logger->debug("No invalidated archives found in {table} with newer, valid archives.", array('table' => $numericTable));
|
101 |
return 0;
|
app/core/Archive/DataTableFactory.php
CHANGED
@@ -404,13 +404,17 @@ class DataTableFactory
|
|
404 |
foreach ($dataTable->getRowsWithoutSummaryRow() as $row) {
|
405 |
$row->removeSubtable();
|
406 |
}
|
|
|
|
|
|
|
|
|
407 |
|
408 |
return;
|
409 |
}
|
410 |
|
411 |
$dataName = reset($this->dataNames);
|
412 |
|
413 |
-
foreach ($dataTable->
|
414 |
$sid = $row->getIdSubDataTable();
|
415 |
if ($sid === null) {
|
416 |
continue;
|
404 |
foreach ($dataTable->getRowsWithoutSummaryRow() as $row) {
|
405 |
$row->removeSubtable();
|
406 |
}
|
407 |
+
$summaryRow = $dataTable->getRowFromId(DataTable::ID_SUMMARY_ROW);
|
408 |
+
if ($summaryRow) {
|
409 |
+
$summaryRow->removeSubtable();
|
410 |
+
}
|
411 |
|
412 |
return;
|
413 |
}
|
414 |
|
415 |
$dataName = reset($this->dataNames);
|
416 |
|
417 |
+
foreach ($dataTable->getRows() as $row) {
|
418 |
$sid = $row->getIdSubDataTable();
|
419 |
if ($sid === null) {
|
420 |
continue;
|
app/core/ArchiveProcessor.php
CHANGED
@@ -103,22 +103,11 @@ class ArchiveProcessor
|
|
103 |
|
104 |
private $numberOfVisitsConverted = false;
|
105 |
|
106 |
-
/**
|
107 |
-
* If true, unique visitors are not calculated when we are aggregating data for multiple sites.
|
108 |
-
* The `[General] enable_processing_unique_visitors_multiple_sites` INI config option controls
|
109 |
-
* the value of this variable.
|
110 |
-
*
|
111 |
-
* @var bool
|
112 |
-
*/
|
113 |
-
private $skipUniqueVisitorsCalculationForMultipleSites = true;
|
114 |
-
|
115 |
public function __construct(Parameters $params, ArchiveWriter $archiveWriter, LogAggregator $logAggregator)
|
116 |
{
|
117 |
$this->params = $params;
|
118 |
$this->logAggregator = $logAggregator;
|
119 |
$this->archiveWriter = $archiveWriter;
|
120 |
-
|
121 |
-
$this->skipUniqueVisitorsCalculationForMultipleSites = Rules::shouldSkipUniqueVisitorsCalculationForMultipleSites();
|
122 |
}
|
123 |
|
124 |
protected function getArchive()
|
@@ -414,30 +403,40 @@ class ArchiveProcessor
|
|
414 |
|
415 |
protected function enrichWithUniqueVisitorsMetric(Row $row)
|
416 |
{
|
417 |
-
// skip unique visitors metrics calculation if calculating for multiple sites is disabled
|
418 |
-
if (!$this->getParams()->isSingleSite()
|
419 |
-
&& $this->skipUniqueVisitorsCalculationForMultipleSites
|
420 |
-
) {
|
421 |
-
return;
|
422 |
-
}
|
423 |
-
|
424 |
if ($row->getColumn('nb_uniq_visitors') === false
|
425 |
&& $row->getColumn('nb_users') === false
|
426 |
) {
|
427 |
return;
|
428 |
}
|
429 |
|
430 |
-
|
|
|
|
|
431 |
$row->deleteColumn('nb_uniq_visitors');
|
432 |
$row->deleteColumn('nb_users');
|
433 |
return;
|
434 |
}
|
435 |
|
436 |
-
$
|
437 |
-
|
438 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
439 |
|
440 |
-
if ($
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
441 |
$uniqueVisitorsMetric = Metrics::INDEX_NB_UNIQ_VISITORS;
|
442 |
} else {
|
443 |
if (!SettingsPiwik::isSameFingerprintAcrossWebsites()) {
|
@@ -447,9 +446,13 @@ class ArchiveProcessor
|
|
447 |
}
|
448 |
$uniqueVisitorsMetric = Metrics::INDEX_NB_UNIQ_FINGERPRINTS;
|
449 |
}
|
450 |
-
$metrics[] = $uniqueVisitorsMetric;
|
451 |
|
452 |
-
$
|
|
|
|
|
|
|
|
|
|
|
453 |
|
454 |
// see edge case as described in https://github.com/piwik/piwik/issues/9357 where uniq_visitors might be higher
|
455 |
// than visits because we archive / process it after nb_visits. Between archiving nb_visits and nb_uniq_visitors
|
@@ -475,19 +478,47 @@ class ArchiveProcessor
|
|
475 |
return 'sum';
|
476 |
}
|
477 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
478 |
/**
|
479 |
* Processes number of unique visitors for the given period
|
480 |
*
|
481 |
* This is the only Period metric (ie. week/month/year/range) that we process from the logs directly,
|
482 |
* since unique visitors cannot be summed like other metrics.
|
483 |
*
|
484 |
-
* @param array Metrics Ids for which to aggregates count of values
|
485 |
-
* @
|
|
|
|
|
486 |
*/
|
487 |
-
protected function computeNbUniques($metrics)
|
488 |
{
|
489 |
$logAggregator = $this->getLogAggregator();
|
490 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
491 |
$data = $query->fetch();
|
492 |
return $data;
|
493 |
}
|
103 |
|
104 |
private $numberOfVisitsConverted = false;
|
105 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
106 |
public function __construct(Parameters $params, ArchiveWriter $archiveWriter, LogAggregator $logAggregator)
|
107 |
{
|
108 |
$this->params = $params;
|
109 |
$this->logAggregator = $logAggregator;
|
110 |
$this->archiveWriter = $archiveWriter;
|
|
|
|
|
111 |
}
|
112 |
|
113 |
protected function getArchive()
|
403 |
|
404 |
protected function enrichWithUniqueVisitorsMetric(Row $row)
|
405 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
406 |
if ($row->getColumn('nb_uniq_visitors') === false
|
407 |
&& $row->getColumn('nb_users') === false
|
408 |
) {
|
409 |
return;
|
410 |
}
|
411 |
|
412 |
+
$periodLabel = $this->getParams()->getPeriod()->getLabel();
|
413 |
+
|
414 |
+
if (!SettingsPiwik::isUniqueVisitorsEnabled($periodLabel)) {
|
415 |
$row->deleteColumn('nb_uniq_visitors');
|
416 |
$row->deleteColumn('nb_users');
|
417 |
return;
|
418 |
}
|
419 |
|
420 |
+
$sites = $this->getIdSitesToComputeNbUniques();
|
421 |
+
|
422 |
+
if (count($sites) > 1 && Rules::shouldSkipUniqueVisitorsCalculationForMultipleSites()) {
|
423 |
+
if ($periodLabel != 'day') {
|
424 |
+
// for day we still keep the aggregated metric but for other periods we remove it as it becomes to
|
425 |
+
// inaccurate
|
426 |
+
$row->deleteColumn('nb_uniq_visitors');
|
427 |
+
$row->deleteColumn('nb_users');
|
428 |
+
}
|
429 |
+
return;
|
430 |
+
}
|
431 |
|
432 |
+
if (empty($sites)) {
|
433 |
+
// a plugin disabled running below query by removing all sites.
|
434 |
+
$row->deleteColumn('nb_uniq_visitors');
|
435 |
+
$row->deleteColumn('nb_users');
|
436 |
+
return;
|
437 |
+
}
|
438 |
+
|
439 |
+
if (count($sites) === 1) {
|
440 |
$uniqueVisitorsMetric = Metrics::INDEX_NB_UNIQ_VISITORS;
|
441 |
} else {
|
442 |
if (!SettingsPiwik::isSameFingerprintAcrossWebsites()) {
|
446 |
}
|
447 |
$uniqueVisitorsMetric = Metrics::INDEX_NB_UNIQ_FINGERPRINTS;
|
448 |
}
|
|
|
449 |
|
450 |
+
$metrics = array(
|
451 |
+
Metrics::INDEX_NB_USERS,
|
452 |
+
$uniqueVisitorsMetric
|
453 |
+
);
|
454 |
+
|
455 |
+
$uniques = $this->computeNbUniques($metrics, $sites);
|
456 |
|
457 |
// see edge case as described in https://github.com/piwik/piwik/issues/9357 where uniq_visitors might be higher
|
458 |
// than visits because we archive / process it after nb_visits. Between archiving nb_visits and nb_uniq_visitors
|
478 |
return 'sum';
|
479 |
}
|
480 |
|
481 |
+
private function getIdSitesToComputeNbUniques()
|
482 |
+
{
|
483 |
+
$params = $this->getParams();
|
484 |
+
$sites = array($params->getSite()->getId());
|
485 |
+
|
486 |
+
/**
|
487 |
+
* Triggered to change which site ids should be looked at when processing unique visitors and users.
|
488 |
+
*
|
489 |
+
* @param array &$idSites An array with one idSite. This site is being archived currently. To cancel the query
|
490 |
+
* you can change this value to an empty array. To include other sites in the query you
|
491 |
+
* can add more idSites to this list of idSites.
|
492 |
+
* @param Period $period The period that is being requested to be archived.
|
493 |
+
* @param Segment $segment The segment that is request to be archived.
|
494 |
+
*/
|
495 |
+
Piwik::postEvent('ArchiveProcessor.ComputeNbUniques.getIdSites', array(&$sites, $params->getPeriod(), $params->getSegment()));
|
496 |
+
|
497 |
+
return $sites;
|
498 |
+
}
|
499 |
+
|
500 |
/**
|
501 |
* Processes number of unique visitors for the given period
|
502 |
*
|
503 |
* This is the only Period metric (ie. week/month/year/range) that we process from the logs directly,
|
504 |
* since unique visitors cannot be summed like other metrics.
|
505 |
*
|
506 |
+
* @param array $metrics Metrics Ids for which to aggregates count of values
|
507 |
+
* @param int[] $sites A list of idSites that should be included
|
508 |
+
* @return array|null An array of metrics, where the key is metricid and the value is the metric value or null if
|
509 |
+
* the query was cancelled and not executed.
|
510 |
*/
|
511 |
+
protected function computeNbUniques($metrics, $sites)
|
512 |
{
|
513 |
$logAggregator = $this->getLogAggregator();
|
514 |
+
$sitesBackup = $logAggregator->getSites();
|
515 |
+
|
516 |
+
$logAggregator->setSites($sites);
|
517 |
+
try {
|
518 |
+
$query = $logAggregator->queryVisitsByDimension(array(), false, array(), $metrics);
|
519 |
+
} finally {
|
520 |
+
$logAggregator->setSites($sitesBackup);
|
521 |
+
}
|
522 |
$data = $query->fetch();
|
523 |
return $data;
|
524 |
}
|
app/core/ArchiveProcessor/Loader.php
CHANGED
@@ -172,7 +172,7 @@ class Loader
|
|
172 |
protected function doesRequestedPluginIncludeVisitsSummary()
|
173 |
{
|
174 |
$processAllReportsIncludingVisitsSummary =
|
175 |
-
Rules::shouldProcessReportsAllPlugins($this->params->
|
176 |
$doesRequestedPluginIncludeVisitsSummary = $processAllReportsIncludingVisitsSummary
|
177 |
|| $this->params->getRequestedPlugin() == 'VisitsSummary';
|
178 |
return $doesRequestedPluginIncludeVisitsSummary;
|
172 |
protected function doesRequestedPluginIncludeVisitsSummary()
|
173 |
{
|
174 |
$processAllReportsIncludingVisitsSummary =
|
175 |
+
Rules::shouldProcessReportsAllPlugins(array($this->params->getSite()->getId()), $this->params->getSegment(), $this->params->getPeriod()->getLabel());
|
176 |
$doesRequestedPluginIncludeVisitsSummary = $processAllReportsIncludingVisitsSummary
|
177 |
|| $this->params->getRequestedPlugin() == 'VisitsSummary';
|
178 |
return $doesRequestedPluginIncludeVisitsSummary;
|
app/core/ArchiveProcessor/PluginsArchiver.php
CHANGED
@@ -269,7 +269,7 @@ class PluginsArchiver
|
|
269 |
}
|
270 |
|
271 |
if (Rules::shouldProcessReportsAllPlugins(
|
272 |
-
$this->params->
|
273 |
$this->params->getSegment(),
|
274 |
$this->params->getPeriod()->getLabel())) {
|
275 |
return true;
|
269 |
}
|
270 |
|
271 |
if (Rules::shouldProcessReportsAllPlugins(
|
272 |
+
array($this->params->getSite()->getId()),
|
273 |
$this->params->getSegment(),
|
274 |
$this->params->getPeriod()->getLabel())) {
|
275 |
return true;
|
app/core/Columns/Dimension.php
CHANGED
@@ -115,6 +115,13 @@ abstract class Dimension
|
|
115 |
*/
|
116 |
protected $suggestedValuesCallback;
|
117 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
/**
|
119 |
* Here you should explain which values are accepted/useful for your segment, for example:
|
120 |
* "1, 2, 3, etc." or "comcast.net, proxad.net, etc.". If the value needs any special encoding you should mention
|
@@ -620,6 +627,10 @@ abstract class Dimension
|
|
620 |
$segment->setSuggestedValuesCallback($this->suggestedValuesCallback);
|
621 |
}
|
622 |
|
|
|
|
|
|
|
|
|
623 |
if ($this->sqlFilterValue && !$segment->getSqlFilterValue()) {
|
624 |
$segment->setSqlFilterValue($this->sqlFilterValue);
|
625 |
}
|
115 |
*/
|
116 |
protected $suggestedValuesCallback;
|
117 |
|
118 |
+
/**
|
119 |
+
* An API method whose label columns will be used to determine the suggested values should browser archiving
|
120 |
+
* be disabled. The API must have defined a segment metadata on each row for this to work.
|
121 |
+
* @var string
|
122 |
+
*/
|
123 |
+
protected $suggestedValuesApi = '';
|
124 |
+
|
125 |
/**
|
126 |
* Here you should explain which values are accepted/useful for your segment, for example:
|
127 |
* "1, 2, 3, etc." or "comcast.net, proxad.net, etc.". If the value needs any special encoding you should mention
|
627 |
$segment->setSuggestedValuesCallback($this->suggestedValuesCallback);
|
628 |
}
|
629 |
|
630 |
+
if ($this->suggestedValuesApi) {
|
631 |
+
$segment->setSuggestedValuesApi($this->suggestedValuesApi);
|
632 |
+
}
|
633 |
+
|
634 |
if ($this->sqlFilterValue && !$segment->getSqlFilterValue()) {
|
635 |
$segment->setSqlFilterValue($this->sqlFilterValue);
|
636 |
}
|
app/core/CronArchive.php
CHANGED
@@ -19,11 +19,11 @@ use Piwik\CronArchive\FixedSiteIds;
|
|
19 |
use Piwik\CronArchive\Performance\Logger;
|
20 |
use Piwik\CronArchive\SharedSiteIds;
|
21 |
use Piwik\Archive\ArchiveInvalidator;
|
|
|
22 |
use Piwik\DataAccess\ArchiveSelector;
|
23 |
use Piwik\DataAccess\RawLogDao;
|
24 |
use Piwik\Exception\UnexpectedWebsiteFoundException;
|
25 |
use Piwik\Metrics\Formatter;
|
26 |
-
use Piwik\Period\Factory;
|
27 |
use Piwik\Period\Factory as PeriodFactory;
|
28 |
use Piwik\CronArchive\SitesToReprocessDistributedList;
|
29 |
use Piwik\CronArchive\SegmentArchivingRequestUrlProvider;
|
@@ -324,10 +324,14 @@ class CronArchive
|
|
324 |
|
325 |
$self = $this;
|
326 |
Access::doAsSuperUser(function () use ($self) {
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
|
|
|
|
|
|
|
|
331 |
});
|
332 |
}
|
333 |
|
@@ -978,10 +982,10 @@ class CronArchive
|
|
978 |
public function isThereAValidArchiveForPeriod($idSite, $period, $date, $segment = '')
|
979 |
{
|
980 |
if (Range::isMultiplePeriod($date, $period)) {
|
981 |
-
$rangePeriod =
|
982 |
$periodsToCheck = $rangePeriod->getSubperiods();
|
983 |
} else {
|
984 |
-
$periodsToCheck = [
|
985 |
}
|
986 |
|
987 |
$isTodayIncluded = $this->isTodayIncludedInPeriod($idSite, $periodsToCheck);
|
19 |
use Piwik\CronArchive\Performance\Logger;
|
20 |
use Piwik\CronArchive\SharedSiteIds;
|
21 |
use Piwik\Archive\ArchiveInvalidator;
|
22 |
+
use Piwik\CronArchive\StopArchiverException;
|
23 |
use Piwik\DataAccess\ArchiveSelector;
|
24 |
use Piwik\DataAccess\RawLogDao;
|
25 |
use Piwik\Exception\UnexpectedWebsiteFoundException;
|
26 |
use Piwik\Metrics\Formatter;
|
|
|
27 |
use Piwik\Period\Factory as PeriodFactory;
|
28 |
use Piwik\CronArchive\SitesToReprocessDistributedList;
|
29 |
use Piwik\CronArchive\SegmentArchivingRequestUrlProvider;
|
324 |
|
325 |
$self = $this;
|
326 |
Access::doAsSuperUser(function () use ($self) {
|
327 |
+
try {
|
328 |
+
$self->init();
|
329 |
+
$self->run();
|
330 |
+
$self->runScheduledTasks();
|
331 |
+
$self->end();
|
332 |
+
} catch (StopArchiverException $e) {
|
333 |
+
$this->logger->info("Archiving stopped by stop archiver exception");
|
334 |
+
}
|
335 |
});
|
336 |
}
|
337 |
|
982 |
public function isThereAValidArchiveForPeriod($idSite, $period, $date, $segment = '')
|
983 |
{
|
984 |
if (Range::isMultiplePeriod($date, $period)) {
|
985 |
+
$rangePeriod = PeriodFactory::build($period, $date, Site::getTimezoneFor($idSite));
|
986 |
$periodsToCheck = $rangePeriod->getSubperiods();
|
987 |
} else {
|
988 |
+
$periodsToCheck = [PeriodFactory::build($period, $date, Site::getTimezoneFor($idSite))];
|
989 |
}
|
990 |
|
991 |
$isTodayIncluded = $this->isTodayIncludedInPeriod($idSite, $periodsToCheck);
|
app/core/CronArchive/StopArchiverException.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Piwik - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
namespace Piwik\CronArchive;
|
10 |
+
|
11 |
+
use Piwik\Exception\Exception;
|
12 |
+
|
13 |
+
class StopArchiverException extends Exception
|
14 |
+
{
|
15 |
+
}
|
app/core/DataAccess/ArchivingDbAdapter.php
CHANGED
@@ -9,6 +9,7 @@
|
|
9 |
|
10 |
namespace Piwik\DataAccess;
|
11 |
|
|
|
12 |
use Piwik\Concurrency\Lock;
|
13 |
use Piwik\Db\AdapterInterface;
|
14 |
use Psr\Log\LoggerInterface;
|
@@ -30,6 +31,11 @@ class ArchivingDbAdapter
|
|
30 |
*/
|
31 |
private $logger;
|
32 |
|
|
|
|
|
|
|
|
|
|
|
33 |
public function __construct($wrapped, Lock $archivingLock = null, LoggerInterface $logger = null)
|
34 |
{
|
35 |
$this->wrapped = $wrapped;
|
@@ -101,7 +107,11 @@ class ArchivingDbAdapter
|
|
101 |
private function reexpireLock()
|
102 |
{
|
103 |
if ($this->archivingLock) {
|
104 |
-
$
|
|
|
|
|
|
|
|
|
105 |
}
|
106 |
}
|
107 |
}
|
9 |
|
10 |
namespace Piwik\DataAccess;
|
11 |
|
12 |
+
use Piwik\ArchiveProcessor\ArchivingStatus;
|
13 |
use Piwik\Concurrency\Lock;
|
14 |
use Piwik\Db\AdapterInterface;
|
15 |
use Psr\Log\LoggerInterface;
|
31 |
*/
|
32 |
private $logger;
|
33 |
|
34 |
+
/**
|
35 |
+
* @var int
|
36 |
+
*/
|
37 |
+
private $lastReexpireTime = null;
|
38 |
+
|
39 |
public function __construct($wrapped, Lock $archivingLock = null, LoggerInterface $logger = null)
|
40 |
{
|
41 |
$this->wrapped = $wrapped;
|
107 |
private function reexpireLock()
|
108 |
{
|
109 |
if ($this->archivingLock) {
|
110 |
+
$timeBetweenReexpires = ArchivingStatus::DEFAULT_ARCHIVING_TTL / 4;
|
111 |
+
if ($this->lastReexpireTime + $timeBetweenReexpires < time()) {
|
112 |
+
$this->archivingLock->reexpireLock();
|
113 |
+
$this->lastReexpireTime = time();
|
114 |
+
}
|
115 |
}
|
116 |
}
|
117 |
}
|
app/core/DataAccess/LogAggregator.php
CHANGED
@@ -184,6 +184,16 @@ class LogAggregator
|
|
184 |
$this->logger = $logger ?: StaticContainer::get('Psr\Log\LoggerInterface');
|
185 |
}
|
186 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
187 |
public function getSegment()
|
188 |
{
|
189 |
return $this->segment;
|
184 |
$this->logger = $logger ?: StaticContainer::get('Psr\Log\LoggerInterface');
|
185 |
}
|
186 |
|
187 |
+
public function setSites($sites)
|
188 |
+
{
|
189 |
+
$this->sites = array_map('intval', $sites);
|
190 |
+
}
|
191 |
+
|
192 |
+
public function getSites()
|
193 |
+
{
|
194 |
+
return $this->sites;
|
195 |
+
}
|
196 |
+
|
197 |
public function getSegment()
|
198 |
{
|
199 |
return $this->segment;
|
app/core/DataAccess/Model.php
CHANGED
@@ -46,7 +46,7 @@ class Model
|
|
46 |
* @return array
|
47 |
* @throws Exception
|
48 |
*/
|
49 |
-
public function getInvalidatedArchiveIdsSafeToDelete($archiveTable
|
50 |
{
|
51 |
try {
|
52 |
Db::get()->query('SET SESSION group_concat_max_len=' . (128 * 1024));
|
@@ -54,17 +54,12 @@ class Model
|
|
54 |
$this->logger->info("Could not set group_concat_max_len MySQL session variable.");
|
55 |
}
|
56 |
|
57 |
-
$idSites = array_map(function ($v) { return (int)$v; }, $idSites);
|
58 |
-
|
59 |
$sql = "SELECT idsite, date1, date2, period, name,
|
60 |
GROUP_CONCAT(idarchive, '.', value ORDER BY ts_archived DESC) as archives
|
61 |
FROM `$archiveTable`
|
62 |
WHERE name LIKE 'done%'
|
63 |
-
AND value IN (" . ArchiveWriter::
|
64 |
-
|
65 |
-
. ArchiveWriter::DONE_OK_TEMPORARY . ")
|
66 |
-
AND idsite IN (" . implode(',', $idSites) . ")
|
67 |
-
GROUP BY idsite, date1, date2, period, name";
|
68 |
|
69 |
$archiveIds = array();
|
70 |
|
@@ -73,11 +68,10 @@ class Model
|
|
73 |
$duplicateArchives = explode(',', $row['archives']);
|
74 |
$countOfArchives = count($duplicateArchives);
|
75 |
|
76 |
-
$firstArchive = array_shift($duplicateArchives);
|
77 |
-
list($firstArchiveId, $firstArchiveValue) = explode('.', $firstArchive);
|
78 |
-
|
79 |
// if there is more than one archive, the older invalidated ones can be deleted
|
80 |
if ($countOfArchives > 1) {
|
|
|
|
|
81 |
foreach ($duplicateArchives as $pair) {
|
82 |
if (strpos($pair, '.') === false) {
|
83 |
$this->logger->info("GROUP_CONCAT cut off the query result, you may have to purge archives again.");
|
@@ -85,9 +79,7 @@ class Model
|
|
85 |
}
|
86 |
|
87 |
list($idarchive, $value) = explode('.', $pair);
|
88 |
-
|
89 |
-
$archiveIds[] = $idarchive;
|
90 |
-
}
|
91 |
}
|
92 |
}
|
93 |
}
|
46 |
* @return array
|
47 |
* @throws Exception
|
48 |
*/
|
49 |
+
public function getInvalidatedArchiveIdsSafeToDelete($archiveTable)
|
50 |
{
|
51 |
try {
|
52 |
Db::get()->query('SET SESSION group_concat_max_len=' . (128 * 1024));
|
54 |
$this->logger->info("Could not set group_concat_max_len MySQL session variable.");
|
55 |
}
|
56 |
|
|
|
|
|
57 |
$sql = "SELECT idsite, date1, date2, period, name,
|
58 |
GROUP_CONCAT(idarchive, '.', value ORDER BY ts_archived DESC) as archives
|
59 |
FROM `$archiveTable`
|
60 |
WHERE name LIKE 'done%'
|
61 |
+
AND `value` NOT IN (" . ArchiveWriter::DONE_ERROR . ")
|
62 |
+
GROUP BY idsite, date1, date2, period, name";
|
|
|
|
|
|
|
63 |
|
64 |
$archiveIds = array();
|
65 |
|
68 |
$duplicateArchives = explode(',', $row['archives']);
|
69 |
$countOfArchives = count($duplicateArchives);
|
70 |
|
|
|
|
|
|
|
71 |
// if there is more than one archive, the older invalidated ones can be deleted
|
72 |
if ($countOfArchives > 1) {
|
73 |
+
array_shift($duplicateArchives); // we don't want to delete the latest archive if it is usable
|
74 |
+
|
75 |
foreach ($duplicateArchives as $pair) {
|
76 |
if (strpos($pair, '.') === false) {
|
77 |
$this->logger->info("GROUP_CONCAT cut off the query result, you may have to purge archives again.");
|
79 |
}
|
80 |
|
81 |
list($idarchive, $value) = explode('.', $pair);
|
82 |
+
$archiveIds[] = $idarchive;
|
|
|
|
|
83 |
}
|
84 |
}
|
85 |
}
|
app/core/Plugin/ControllerAdmin.php
CHANGED
@@ -222,7 +222,6 @@ abstract class ControllerAdmin extends Controller
|
|
222 |
|
223 |
private static function notifyWhenPhpVersionIsNotCompatibleWithNextMajorPiwik()
|
224 |
{
|
225 |
-
return;
|
226 |
}
|
227 |
|
228 |
private static function notifyWhenPhpVersionIsEOL()
|
222 |
|
223 |
private static function notifyWhenPhpVersionIsNotCompatibleWithNextMajorPiwik()
|
224 |
{
|
|
|
225 |
}
|
226 |
|
227 |
private static function notifyWhenPhpVersionIsEOL()
|
app/core/Plugin/Segment.php
CHANGED
@@ -8,6 +8,7 @@
|
|
8 |
*/
|
9 |
namespace Piwik\Plugin;
|
10 |
use Exception;
|
|
|
11 |
|
12 |
/**
|
13 |
* Creates a new segment that can be used for instance within the {@link \Piwik\Columns\Dimension::configureSegment()}
|
@@ -54,6 +55,7 @@ class Segment
|
|
54 |
private $suggestedValuesCallback;
|
55 |
private $unionOfSegments;
|
56 |
private $isInternalSegment = false;
|
|
|
57 |
|
58 |
/**
|
59 |
* If true, this segment will only be visible to the user if the user has view access
|
@@ -296,6 +298,32 @@ class Segment
|
|
296 |
$this->suggestedValuesCallback = $suggestedValuesCallback;
|
297 |
}
|
298 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
299 |
/**
|
300 |
* You can restrict the access to this segment by passing a boolean `false`. For instance if you want to make
|
301 |
* a certain segment only available to users having super user access you could do the following:
|
@@ -346,6 +374,10 @@ class Segment
|
|
346 |
$segment['suggestedValuesCallback'] = $this->suggestedValuesCallback;
|
347 |
}
|
348 |
|
|
|
|
|
|
|
|
|
349 |
return $segment;
|
350 |
}
|
351 |
|
8 |
*/
|
9 |
namespace Piwik\Plugin;
|
10 |
use Exception;
|
11 |
+
use Piwik\Development;
|
12 |
|
13 |
/**
|
14 |
* Creates a new segment that can be used for instance within the {@link \Piwik\Columns\Dimension::configureSegment()}
|
55 |
private $suggestedValuesCallback;
|
56 |
private $unionOfSegments;
|
57 |
private $isInternalSegment = false;
|
58 |
+
private $suggestedValuesApi = '';
|
59 |
|
60 |
/**
|
61 |
* If true, this segment will only be visible to the user if the user has view access
|
298 |
$this->suggestedValuesCallback = $suggestedValuesCallback;
|
299 |
}
|
300 |
|
301 |
+
/**
|
302 |
+
* @return string
|
303 |
+
* @ignore
|
304 |
+
*/
|
305 |
+
public function getSuggestedValuesApi()
|
306 |
+
{
|
307 |
+
return $this->suggestedValuesApi;
|
308 |
+
}
|
309 |
+
|
310 |
+
/**
|
311 |
+
* Set callback which will be executed when user will call for suggested values for segment.
|
312 |
+
*
|
313 |
+
* @param string $suggestedValuesApi
|
314 |
+
*/
|
315 |
+
public function setSuggestedValuesApi($suggestedValuesApi)
|
316 |
+
{
|
317 |
+
if (!empty($suggestedValuesApi) && is_string($suggestedValuesApi)) {
|
318 |
+
if (Development::isEnabled() && strpos($suggestedValuesApi, '.get') === false) {
|
319 |
+
throw new Exception('Invalid suggested values API defined, expecting ".get" to be present.');
|
320 |
+
}
|
321 |
+
} else {
|
322 |
+
$suggestedValuesApi = '';
|
323 |
+
}
|
324 |
+
$this->suggestedValuesApi = $suggestedValuesApi;
|
325 |
+
}
|
326 |
+
|
327 |
/**
|
328 |
* You can restrict the access to this segment by passing a boolean `false`. For instance if you want to make
|
329 |
* a certain segment only available to users having super user access you could do the following:
|
374 |
$segment['suggestedValuesCallback'] = $this->suggestedValuesCallback;
|
375 |
}
|
376 |
|
377 |
+
if (is_string($this->suggestedValuesApi) && !empty($this->suggestedValuesApi)) {
|
378 |
+
$segment['suggestedValuesApi'] = $this->suggestedValuesApi;
|
379 |
+
}
|
380 |
+
|
381 |
return $segment;
|
382 |
}
|
383 |
|
app/core/Tracker/GoalManager.php
CHANGED
@@ -665,10 +665,6 @@ class GoalManager
|
|
665 |
|
666 |
protected function getItemRowEnriched($goal, $item)
|
667 |
{
|
668 |
-
if (empty($goal['server_time'])) {
|
669 |
-
// hack to test #215
|
670 |
-
$goal['server_time'] = Date::getDatetimeFromTimestamp(time());
|
671 |
-
}
|
672 |
$newRow = array(
|
673 |
'idaction_sku' => (int)$item[self::INTERNAL_ITEM_SKU],
|
674 |
'idaction_name' => (int)$item[self::INTERNAL_ITEM_NAME],
|
@@ -886,10 +882,14 @@ class GoalManager
|
|
886 |
$lastVisitTime = $request->getCurrentTimestamp();
|
887 |
}
|
888 |
|
|
|
|
|
|
|
|
|
889 |
$goal = array(
|
890 |
'idvisit' => $visitProperties->getProperty('idvisit'),
|
891 |
'idvisitor' => $visitProperties->getProperty('idvisitor'),
|
892 |
-
'server_time' =>
|
893 |
);
|
894 |
|
895 |
$visitDimensions = VisitDimension::getAllDimensions();
|
665 |
|
666 |
protected function getItemRowEnriched($goal, $item)
|
667 |
{
|
|
|
|
|
|
|
|
|
668 |
$newRow = array(
|
669 |
'idaction_sku' => (int)$item[self::INTERNAL_ITEM_SKU],
|
670 |
'idaction_name' => (int)$item[self::INTERNAL_ITEM_NAME],
|
882 |
$lastVisitTime = $request->getCurrentTimestamp();
|
883 |
}
|
884 |
|
885 |
+
if (!empty($lastVisitTime) && is_numeric($lastVisitTime)) {
|
886 |
+
$lastVisitTime = Date::getDatetimeFromTimestamp($lastVisitTime);
|
887 |
+
}
|
888 |
+
|
889 |
$goal = array(
|
890 |
'idvisit' => $visitProperties->getProperty('idvisit'),
|
891 |
'idvisitor' => $visitProperties->getProperty('idvisitor'),
|
892 |
+
'server_time' => $lastVisitTime,
|
893 |
);
|
894 |
|
895 |
$visitDimensions = VisitDimension::getAllDimensions();
|
app/core/Updates/3.13.4-b1.php
CHANGED
@@ -10,16 +10,16 @@
|
|
10 |
namespace Piwik\Updates;
|
11 |
|
12 |
use Piwik\Plugins\Installation\ServerFilesGenerator;
|
13 |
-
use Piwik\SettingsServer;
|
14 |
use Piwik\Updater;
|
15 |
use Piwik\Updates as PiwikUpdates;
|
|
|
16 |
|
17 |
class Updates_3_13_4_b1 extends PiwikUpdates
|
18 |
{
|
19 |
public function doUpdate(Updater $updater)
|
20 |
{
|
21 |
-
// Fix issue with HeatmapSessionRecording on IIS (https://github.com/matomo-org/matomo/issues/15651)
|
22 |
if (SettingsServer::isIIS()) {
|
|
|
23 |
ServerFilesGenerator::createFilesForSecurity();
|
24 |
}
|
25 |
}
|
10 |
namespace Piwik\Updates;
|
11 |
|
12 |
use Piwik\Plugins\Installation\ServerFilesGenerator;
|
|
|
13 |
use Piwik\Updater;
|
14 |
use Piwik\Updates as PiwikUpdates;
|
15 |
+
use Piwik\SettingsServer;
|
16 |
|
17 |
class Updates_3_13_4_b1 extends PiwikUpdates
|
18 |
{
|
19 |
public function doUpdate(Updater $updater)
|
20 |
{
|
|
|
21 |
if (SettingsServer::isIIS()) {
|
22 |
+
// Fix issue with HeatmapSessionRecording on IIS (https://github.com/matomo-org/matomo/issues/15651)
|
23 |
ServerFilesGenerator::createFilesForSecurity();
|
24 |
}
|
25 |
}
|
app/core/Updates/3.13.5-rc1.php
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Piwik - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Updates;
|
11 |
+
|
12 |
+
use Piwik\DataAccess\ArchiveTableCreator;
|
13 |
+
use Piwik\Date;
|
14 |
+
use Piwik\Plugins\CoreAdminHome\Tasks\ArchivesToPurgeDistributedList;
|
15 |
+
use Piwik\Updater;
|
16 |
+
use Piwik\Updates as PiwikUpdates;
|
17 |
+
|
18 |
+
class Updates_3_13_5_rc1 extends PiwikUpdates
|
19 |
+
{
|
20 |
+
public function doUpdate(Updater $updater)
|
21 |
+
{
|
22 |
+
$this->addArchivesToPurge();
|
23 |
+
}
|
24 |
+
|
25 |
+
private function addArchivesToPurge()
|
26 |
+
{
|
27 |
+
$archivesToPurge = new ArchivesToPurgeDistributedList();
|
28 |
+
|
29 |
+
$startOfProblem = Date::factory('2020-01-01 00:00:00');
|
30 |
+
|
31 |
+
$archiveTables = ArchiveTableCreator::getTablesArchivesInstalled(ArchiveTableCreator::NUMERIC_TABLE);
|
32 |
+
foreach ($archiveTables as $table) {
|
33 |
+
$date = ArchiveTableCreator::getDateFromTableName($table);
|
34 |
+
list($year, $month) = explode('_', $date);
|
35 |
+
|
36 |
+
// only add if the table is for jan 2020 or above since tables w/ that date will be most affected
|
37 |
+
try {
|
38 |
+
$dateObj = Date::factory("$year-$month-01 00:00:00");
|
39 |
+
} catch (\Exception $ex) {
|
40 |
+
continue; // date is too old for some reason
|
41 |
+
}
|
42 |
+
|
43 |
+
if ($dateObj->isEarlier($startOfProblem)) {
|
44 |
+
continue;
|
45 |
+
}
|
46 |
+
|
47 |
+
$archivesToPurge->add("{$year}_{$month}");
|
48 |
+
}
|
49 |
+
}
|
50 |
+
}
|
app/core/Version.php
CHANGED
@@ -20,7 +20,7 @@ final class Version
|
|
20 |
* The current Matomo version.
|
21 |
* @var string
|
22 |
*/
|
23 |
-
const VERSION = '3.13.
|
24 |
|
25 |
public function isStableVersion($version)
|
26 |
{
|
20 |
* The current Matomo version.
|
21 |
* @var string
|
22 |
*/
|
23 |
+
const VERSION = '3.13.5';
|
24 |
|
25 |
public function isStableVersion($version)
|
26 |
{
|
app/js/piwik.min.js
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
* @license https://piwik.org/free-software/bsd/ BSD-3 Clause (also in js/LICENSE.txt)
|
9 |
* @license magnet:?xt=urn:btih:c80d50af7d3db9be66a4d0a86db0286e4fd33292&dn=bsd-3-clause.txt BSD-3-Clause
|
10 |
*/
|
11 |
-
;if(typeof
|
12 |
/*!! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */
|
13 |
(function(){var c=typeof define==="function"&&define.amd;var e={"function":true,object:true};var h=e[typeof a]&&a&&!a.nodeType&&a;var i=e[typeof window]&&window||this,b=h&&e[typeof module]&&module&&!module.nodeType&&typeof global=="object"&&global;if(b&&(b.global===b||b.window===b||b.self===b)){i=b}function j(ab,V){ab||(ab=i.Object());V||(V=i.Object());
|
14 |
var K=ab.Number||i.Number,R=ab.String||i.String,x=ab.Object||i.Object,S=ab.Date||i.Date,T=ab.SyntaxError||i.SyntaxError,aa=ab.TypeError||i.TypeError,J=ab.Math||i.Math,Y=ab.JSON||i.JSON;if(typeof Y=="object"&&Y){V.stringify=Y.stringify;V.parse=Y.parse}var n=x.prototype,u=n.toString,r,m,L;var B=new S(-3509827334573292);try{B=B.getUTCFullYear()==-109252&&B.getUTCMonth()===0&&B.getUTCDate()===1&&B.getUTCHours()==10&&B.getUTCMinutes()==37&&B.getUTCSeconds()==6&&B.getUTCMilliseconds()==708}catch(v){}function o(ac){if(o[ac]!==L){return o[ac]}var ad;if(ac=="bug-string-char-index"){ad="a"[0]!="a"}else{if(ac=="json"){ad=o("json-stringify")&&o("json-parse")}else{var ak,ah='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if(ac=="json-stringify"){var ai=V.stringify,aj=typeof ai=="function"&&B;if(aj){(ak=function(){return 1}).toJSON=ak;try{aj=ai(0)==="0"&&ai(new K())==="0"&&ai(new R())=='""'&&ai(u)===L&&ai(L)===L&&ai()===L&&ai(ak)==="1"&&ai([ak])=="[1]"&&ai([L])=="[null]"&&ai(null)=="null"&&ai([L,u,null])=="[null,null,null]"&&ai({a:[ak,true,false,null,"\x00\b\n\f\r\t"]})==ah&&ai(null,ak)==="1"&&ai([1,2],null,1)=="[\n 1,\n 2\n]"&&ai(new S(-8640000000000000))=='"-271821-04-20T00:00:00.000Z"'&&ai(new S(8640000000000000))=='"+275760-09-13T00:00:00.000Z"'&&ai(new S(-62198755200000))=='"-000001-01-01T00:00:00.000Z"'&&ai(new S(-1))=='"1969-12-31T23:59:59.999Z"'
|
@@ -38,38 +38,38 @@ if(!aq){aq="/"}}return aq},findMediaUrlInNode:function(at){if(!at){return}var aq
|
|
38 |
if(aq&&au.offsetTop){aq=(au.offsetTop+at.height)>0}var ap=ar.clientWidth;if(T.innerWidth&&ap>T.innerWidth){ap=T.innerWidth}var ao=ar.clientHeight;if(T.innerHeight&&ao>T.innerHeight){ao=T.innerHeight}return((at.bottom>0||aq)&&at.right>0&&at.left<ap&&((at.top<ao)||aq))},isNodeVisible:function(ap){var ao=j(ap);var aq=this.isOrWasNodeInViewport(ap);return ao&&aq},buildInteractionRequestParams:function(ao,ap,aq,ar){var at="";if(ao){at+="c_i="+t(ao)}if(ap){if(at){at+="&"}at+="c_n="+t(ap)}if(aq){if(at){at+="&"}at+="c_p="+t(aq)}if(ar){if(at){at+="&"}at+="c_t="+t(ar)}return at},buildImpressionRequestParams:function(ao,ap,aq){var ar="c_n="+t(ao)+"&c_p="+t(ap);if(aq){ar+="&c_t="+t(aq)}return ar},buildContentBlock:function(aq){if(!aq){return}var ao=this.findContentName(aq);var ap=this.findContentPiece(aq);var ar=this.findContentTarget(aq);ao=this.trim(ao);ap=this.trim(ap);ar=this.trim(ar);return{name:ao||"Unknown",piece:ap||"Unknown",target:ar||""}},collectContent:function(ar){if(!ar||!ar.length){return[]
|
39 |
}var aq=[];var ao,ap;for(ao=0;ao<ar.length;ao++){ap=this.buildContentBlock(ar[ao]);if(J(ap)){aq.push(ap)}}return aq},setLocation:function(ao){this.location=ao},getLocation:function(){var ao=this.location||T.location;if(!ao.origin){ao.origin=ao.protocol+"//"+ao.hostname+(ao.port?":"+ao.port:"")}return ao},toAbsoluteUrl:function(ap){if((!ap||String(ap)!==ap)&&ap!==""){return ap}if(""===ap){return this.getLocation().href}if(ap.search(/^\/\//)!==-1){return this.getLocation().protocol+ap}if(ap.search(/:\/\//)!==-1){return ap}if(0===ap.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.search("^[a-zA-Z]{2,11}:")){return ap}if(ap.search(/^\//)!==-1){return this.getLocation().origin+ap}var ao="(.*/)";var aq=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ao))[0];return aq+ap},isUrlToCurrentDomain:function(ap){var aq=this.toAbsoluteUrl(ap);if(!aq){return false
|
40 |
}var ao=this.getLocation().origin;if(ao===aq){return true}if(0===String(aq).indexOf(ao)){if(":"===String(aq).substr(ao.length,1)){return false}return true}return false},setHrefAttribute:function(ap,ao){if(!ap||!ao){return}ae.setAnyAttribute(ap,"href",ao)},shouldIgnoreInteraction:function(aq){var ap=ae.hasNodeAttribute(aq,this.CONTENT_IGNOREINTERACTION_ATTR);var ao=ae.hasNodeCssClass(aq,this.CONTENT_IGNOREINTERACTION_CLASS);return ap||ao}};function O(ap,at){if(at){return at}ap=v.toAbsoluteUrl(ap);if(z(ap,"?")){var ar=ap.indexOf("?");ap=ap.slice(0,ar)}if(R(ap,"matomo.php")){ap=g(ap,"matomo.php".length)}else{if(R(ap,"piwik.php")){ap=g(ap,"piwik.php".length)}else{if(R(ap,".php")){var ao=ap.lastIndexOf("/");var aq=1;ap=ap.slice(0,ao+aq)}}}if(R(ap,"/js/")){ap=g(ap,"js/".length)}return ap}function N(av){var ax="Piwik_Overlay";var ap=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var aq=ap.exec(G.referrer);if(aq){var at=aq[1];
|
41 |
-
if(at!==String(av)){return false}var au=aq[2],ao=aq[3],ar=aq[4];if(!ar){ar=""}else{if(ar.indexOf("&segment=")===0){ar=ar.substr("&segment=".length)}}T.name=ax+"###"+au+"###"+ao+"###"+ar}var aw=T.name.split("###");return aw.length===4&&aw[0]===ax}function Z(ap,aw,ar){var av=T.name.split("###"),au=av[1],ao=av[2],at=av[3],aq=O(ap,aw);o(aq+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(aq,ar,au,ao,at)})}function u(){var aq;try{aq=T.frameElement}catch(ap){return true}if(J(aq)){return(aq&&String(aq.nodeName).toLowerCase()==="iframe")?true:false}try{return T.self!==T.top}catch(ao){return true}}function Q(cd,b8){var bH=this,bd="mtm_consent",
|
42 |
-
try{bi=G.title}catch(cx){bi=""}function
|
43 |
-
if(
|
44 |
-
var
|
45 |
-
|
46 |
-
}function ay(){if(
|
47 |
-
|
48 |
-
}if(A(T.GearsFactory)){
|
49 |
-
var
|
50 |
-
}function bL(){var
|
51 |
-
if(bk){aE()}if(
|
52 |
-
var
|
53 |
-
}}}if(aK){
|
54 |
-
}
|
55 |
-
}var
|
56 |
-
if(!
|
57 |
-
v.setHrefAttribute(
|
58 |
-
}}}function bw(
|
59 |
-
return false}var
|
60 |
-
if(!
|
61 |
-
}}function a1(
|
62 |
-
}
|
63 |
-
};this.getVisitorInfo=function(){return
|
64 |
-
};this.getRequest=function(
|
65 |
-
}};this.deleteCustomVariables=function(
|
66 |
-
};this.setCrossDomainLinkingTimeout=function(
|
67 |
-
}if(!J(
|
68 |
-
}
|
69 |
-
})};this.getNumTrackedPageViews=function(){return cr};this.trackPageView=function(
|
70 |
-
}
|
71 |
-
};this.addEcommerceItem=function(
|
72 |
-
};this.requireConsent=function(){cz=true;bA=this.hasRememberedConsent();x++;b["CoreConsent"+x]={unload:function(){if(!bA){aE()}}}};this.setConsentGiven=function(){bA=true;bX(
|
73 |
if(av[ap]>1&&ap!=="addTracker"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: https://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","requireConsent","setConsentGiven"];function ad(ao,aq){var ap=new Q(ao,aq);I.push(ap);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();e.trigger("TrackerAdded",[ap]);return ap}an(T,"beforeunload",ai,false);an(T,"message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=e.getAsyncTrackers();for(ar=0;ar<at.length;ar++){ap=d(at[ar].getPiwikUrl());
|
74 |
if(ap===ax){aw=at[ar];break}}if(!aw){return}var aq=null;try{aq=JSON.parse(au.data)}catch(av){return}if(!aq){return}function ao(aA){var aC=G.getElementsByTagName("iframe");for(ar=0;ar<aC.length;ar++){var aB=aC[ar];var ay=d(aB.src);if(aB.contentWindow&&J(aB.contentWindow.postMessage)&&ay===ax){var az=JSON.stringify(aA);aB.contentWindow.postMessage(az,"*")}}}if(J(aq.maq_initial_value)){ao({maq_opted_in:aq.maq_initial_value&&aw.hasConsent(),maq_url:aw.getPiwikUrl(),maq_optout_by_default:aw.isConsentRequired()})}else{if(J(aq.maq_opted_in)){at=e.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getPiwikUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;e={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:n,onReady:q,isNodeVisible:j,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]
|
75 |
}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||T,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ao,ap){if(!J(ap)){ap=this.getAsyncTracker().getSiteId()}if(!J(ao)){ao=this.getAsyncTracker().getTrackerUrl()}return new Q(ao,ap)},getAsyncTrackers:function(){return I},addTracker:function(ao,aq){var ap;if(!I.length){ap=ad(ao,aq)}else{ap=I[0].addTracker(ao,aq)}return ap},getAsyncTracker:function(ap,at){var ar;if(I&&I.length&&I[0]){ar=I[0]}else{return ad(ap,at)}if(!at&&!ap){return ar}if((!J(at)||null===at)&&ar){at=ar.getSiteId()}if((!J(ap)||null===ap)&&ar){ap=ar.getTrackerUrl()}var aq,ao=0;for(ao;ao<I.length;ao++){aq=I[ao];if(aq&&String(aq.getSiteId())===String(at)&&aq.getTrackerUrl()===ap){return aq}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])
|
8 |
* @license https://piwik.org/free-software/bsd/ BSD-3 Clause (also in js/LICENSE.txt)
|
9 |
* @license magnet:?xt=urn:btih:c80d50af7d3db9be66a4d0a86db0286e4fd33292&dn=bsd-3-clause.txt BSD-3-Clause
|
10 |
*/
|
11 |
+
;if(typeof window.JSON==="object"&&typeof window.JSON.stringify==="function"&&typeof window.JSON.parse==="function"){JSON_PIWIK=window.JSON}else{(function(){var a={};
|
12 |
/*!! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */
|
13 |
(function(){var c=typeof define==="function"&&define.amd;var e={"function":true,object:true};var h=e[typeof a]&&a&&!a.nodeType&&a;var i=e[typeof window]&&window||this,b=h&&e[typeof module]&&module&&!module.nodeType&&typeof global=="object"&&global;if(b&&(b.global===b||b.window===b||b.self===b)){i=b}function j(ab,V){ab||(ab=i.Object());V||(V=i.Object());
|
14 |
var K=ab.Number||i.Number,R=ab.String||i.String,x=ab.Object||i.Object,S=ab.Date||i.Date,T=ab.SyntaxError||i.SyntaxError,aa=ab.TypeError||i.TypeError,J=ab.Math||i.Math,Y=ab.JSON||i.JSON;if(typeof Y=="object"&&Y){V.stringify=Y.stringify;V.parse=Y.parse}var n=x.prototype,u=n.toString,r,m,L;var B=new S(-3509827334573292);try{B=B.getUTCFullYear()==-109252&&B.getUTCMonth()===0&&B.getUTCDate()===1&&B.getUTCHours()==10&&B.getUTCMinutes()==37&&B.getUTCSeconds()==6&&B.getUTCMilliseconds()==708}catch(v){}function o(ac){if(o[ac]!==L){return o[ac]}var ad;if(ac=="bug-string-char-index"){ad="a"[0]!="a"}else{if(ac=="json"){ad=o("json-stringify")&&o("json-parse")}else{var ak,ah='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if(ac=="json-stringify"){var ai=V.stringify,aj=typeof ai=="function"&&B;if(aj){(ak=function(){return 1}).toJSON=ak;try{aj=ai(0)==="0"&&ai(new K())==="0"&&ai(new R())=='""'&&ai(u)===L&&ai(L)===L&&ai()===L&&ai(ak)==="1"&&ai([ak])=="[1]"&&ai([L])=="[null]"&&ai(null)=="null"&&ai([L,u,null])=="[null,null,null]"&&ai({a:[ak,true,false,null,"\x00\b\n\f\r\t"]})==ah&&ai(null,ak)==="1"&&ai([1,2],null,1)=="[\n 1,\n 2\n]"&&ai(new S(-8640000000000000))=='"-271821-04-20T00:00:00.000Z"'&&ai(new S(8640000000000000))=='"+275760-09-13T00:00:00.000Z"'&&ai(new S(-62198755200000))=='"-000001-01-01T00:00:00.000Z"'&&ai(new S(-1))=='"1969-12-31T23:59:59.999Z"'
|
38 |
if(aq&&au.offsetTop){aq=(au.offsetTop+at.height)>0}var ap=ar.clientWidth;if(T.innerWidth&&ap>T.innerWidth){ap=T.innerWidth}var ao=ar.clientHeight;if(T.innerHeight&&ao>T.innerHeight){ao=T.innerHeight}return((at.bottom>0||aq)&&at.right>0&&at.left<ap&&((at.top<ao)||aq))},isNodeVisible:function(ap){var ao=j(ap);var aq=this.isOrWasNodeInViewport(ap);return ao&&aq},buildInteractionRequestParams:function(ao,ap,aq,ar){var at="";if(ao){at+="c_i="+t(ao)}if(ap){if(at){at+="&"}at+="c_n="+t(ap)}if(aq){if(at){at+="&"}at+="c_p="+t(aq)}if(ar){if(at){at+="&"}at+="c_t="+t(ar)}return at},buildImpressionRequestParams:function(ao,ap,aq){var ar="c_n="+t(ao)+"&c_p="+t(ap);if(aq){ar+="&c_t="+t(aq)}return ar},buildContentBlock:function(aq){if(!aq){return}var ao=this.findContentName(aq);var ap=this.findContentPiece(aq);var ar=this.findContentTarget(aq);ao=this.trim(ao);ap=this.trim(ap);ar=this.trim(ar);return{name:ao||"Unknown",piece:ap||"Unknown",target:ar||""}},collectContent:function(ar){if(!ar||!ar.length){return[]
|
39 |
}var aq=[];var ao,ap;for(ao=0;ao<ar.length;ao++){ap=this.buildContentBlock(ar[ao]);if(J(ap)){aq.push(ap)}}return aq},setLocation:function(ao){this.location=ao},getLocation:function(){var ao=this.location||T.location;if(!ao.origin){ao.origin=ao.protocol+"//"+ao.hostname+(ao.port?":"+ao.port:"")}return ao},toAbsoluteUrl:function(ap){if((!ap||String(ap)!==ap)&&ap!==""){return ap}if(""===ap){return this.getLocation().href}if(ap.search(/^\/\//)!==-1){return this.getLocation().protocol+ap}if(ap.search(/:\/\//)!==-1){return ap}if(0===ap.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.search("^[a-zA-Z]{2,11}:")){return ap}if(ap.search(/^\//)!==-1){return this.getLocation().origin+ap}var ao="(.*/)";var aq=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ao))[0];return aq+ap},isUrlToCurrentDomain:function(ap){var aq=this.toAbsoluteUrl(ap);if(!aq){return false
|
40 |
}var ao=this.getLocation().origin;if(ao===aq){return true}if(0===String(aq).indexOf(ao)){if(":"===String(aq).substr(ao.length,1)){return false}return true}return false},setHrefAttribute:function(ap,ao){if(!ap||!ao){return}ae.setAnyAttribute(ap,"href",ao)},shouldIgnoreInteraction:function(aq){var ap=ae.hasNodeAttribute(aq,this.CONTENT_IGNOREINTERACTION_ATTR);var ao=ae.hasNodeCssClass(aq,this.CONTENT_IGNOREINTERACTION_CLASS);return ap||ao}};function O(ap,at){if(at){return at}ap=v.toAbsoluteUrl(ap);if(z(ap,"?")){var ar=ap.indexOf("?");ap=ap.slice(0,ar)}if(R(ap,"matomo.php")){ap=g(ap,"matomo.php".length)}else{if(R(ap,"piwik.php")){ap=g(ap,"piwik.php".length)}else{if(R(ap,".php")){var ao=ap.lastIndexOf("/");var aq=1;ap=ap.slice(0,ao+aq)}}}if(R(ap,"/js/")){ap=g(ap,"js/".length)}return ap}function N(av){var ax="Piwik_Overlay";var ap=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var aq=ap.exec(G.referrer);if(aq){var at=aq[1];
|
41 |
+
if(at!==String(av)){return false}var au=aq[2],ao=aq[3],ar=aq[4];if(!ar){ar=""}else{if(ar.indexOf("&segment=")===0){ar=ar.substr("&segment=".length)}}T.name=ax+"###"+au+"###"+ao+"###"+ar}var aw=T.name.split("###");return aw.length===4&&aw[0]===ax}function Z(ap,aw,ar){var av=T.name.split("###"),au=av[1],ao=av[2],at=av[3],aq=O(ap,aw);o(aq+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(aq,ar,au,ao,at)})}function u(){var aq;try{aq=T.frameElement}catch(ap){return true}if(J(aq)){return(aq&&String(aq.nodeName).toLowerCase()==="iframe")?true:false}try{return T.self!==T.top}catch(ao){return true}}function Q(cd,b8){var bH=this,bd="mtm_consent",cL="mtm_consent_removed",b3=aa(G.domain,T.location.href,K()),cU=L(b3[0]),bM=p(b3[1]),bm=p(b3[2]),cS=false,ch="GET",da=ch,aH="application/x-www-form-urlencoded; charset=UTF-8",cw=aH,aD=cd||"",bG="",cZ="",b5=b8||"",bx="",bN="",a4,bi="",c6=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ax=[cU],by=[],bK=[],a8=[],bI=500,cW=false,cH,a5,bQ,c7=1800,bO,ao,cq=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bF=["pk_kwd","piwik_kwd","utm_term"],bj="_pk_",av="pk_vid",aZ=180,cX,bo,bR=false,bk=false,cP,be,bu,cI=33955200000,co=1800000,c5=15768000000,a2=true,cm=0,bP=false,aQ=false,ca,bV={},cl={},bl={},bs=200,c0={},c8={},b9=[],ce=false,cA=false,ap=false,c9=false,cM=false,aN=false,bc=u(),cR=null,cY=null,cb,aR,bz,b6=am,bn,aK,cr=0,bt=["id","ses","cvar","ref"],cz=false,bA=null,cJ=[],aw=U++;
|
42 |
+
try{bi=G.title}catch(cx){bi=""}function de(dq,dn,dm,dp,dl,dk){if(bk){return}var dj;if(dm){dj=new Date();dj.setTime(dj.getTime()+dm)}G.cookie=dq+"="+t(dn)+(dm?";expires="+dj.toGMTString():"")+";path="+(dp||"/")+(dl?";domain="+dl:"")+(dk?";secure":"")+";SameSite=Lax"}function aC(dl){if(bk){return 0}var dj=new RegExp("(^|;)[ ]*"+dl+"=([^;]*)"),dk=dj.exec(G.cookie);return dk?S(dk[2]):0}bA=!aC(cL);function b1(dj){var dk;dj=k(dj,av);if(bO){dk=new RegExp("#.*");return dj.replace(dk,"")}return dj}function bU(dl,dj){var dm=s(dj),dk;if(dm){return dj}if(dj.slice(0,1)==="/"){return s(dl)+"://"+d(dl)+dj}dl=b1(dl);dk=dl.indexOf("?");if(dk>=0){dl=dl.slice(0,dk)}dk=dl.lastIndexOf("/");if(dk!==dl.length-1){dl=dl.slice(0,dk+1)}return dl+dj}function cF(dl,dj){var dk;dl=String(dl).toLowerCase();dj=String(dj).toLowerCase();if(dl===dj){return true}if(dj.slice(0,1)==="."){if(dl===dj.slice(1)){return true}dk=dl.length-dj.length;if((dk>0)&&(dl.slice(dk)===dj)){return true}}return false}function ck(dj){var dk=document.createElement("a");
|
43 |
+
if(dj.indexOf("//")!==0&&dj.indexOf("http")!==0){if(dj.indexOf("*")===0){dj=dj.substr(1)}if(dj.indexOf(".")===0){dj=dj.substr(1)}dj="http://"+dj}dk.href=v.toAbsoluteUrl(dj);if(dk.pathname){return dk.pathname}return""}function a3(dk,dj){if(!aj(dj,"/")){dj="/"+dj}if(!aj(dk,"/")){dk="/"+dk}var dl=(dj==="/"||dj==="/*");if(dl){return true}if(dk===dj){return true}dj=String(dj).toLowerCase();dk=String(dk).toLowerCase();if(R(dj,"*")){dj=dj.slice(0,-1);dl=(!dj||dj==="/");if(dl){return true}if(dk===dj){return true}return dk.indexOf(dj)===0}if(!R(dk,"/")){dk+="/"}if(!R(dj,"/")){dj+="/"}return dk.indexOf(dj)===0}function ar(dn,dq){var dk,dj,dl,dm,dp;for(dk=0;dk<ax.length;dk++){dm=L(ax[dk]);dp=ck(ax[dk]);if(cF(dn,dm)&&a3(dq,dp)){return true}}return false}function aV(dm){var dk,dj,dl;for(dk=0;dk<ax.length;dk++){dj=L(ax[dk].toLowerCase());if(dm===dj){return true}if(dj.slice(0,1)==="."){if(dm===dj.slice(1)){return true}dl=dm.length-dj.length;if((dl>0)&&(dm.slice(dl)===dj)){return true}}}return false}function cp(dj,dl){dj=dj.replace("send_image=0","send_image=1");
|
44 |
+
var dk=new Image(1,1);dk.onload=function(){E=0;if(typeof dl==="function"){dl({request:dj,trackerUrl:aD,success:true})}};dk.onerror=function(){if(typeof dl==="function"){dl({request:dj,trackerUrl:aD,success:false})}};dk.src=aD+(aD.indexOf("?")<0?"?":"&")+dj}function cC(dj){if(da==="POST"){return true}return dj&&(dj.length>2000||dj.indexOf('{"requests"')===0)}function aJ(){return"object"===typeof h&&"function"===typeof h.sendBeacon&&"function"===typeof Blob}function a6(dn,dr,dq){var dl=aJ();if(!dl){return false}var dm={type:"application/x-www-form-urlencoded; charset=UTF-8"};var ds=false;var dk=aD;try{var dj=new Blob([dn],dm);if(dq&&!cC(dn)){dj=new Blob([],dm);dk=dk+(dk.indexOf("?")<0?"?":"&")+dn}ds=h.sendBeacon(dk,dj)}catch(dp){return false}if(ds&&typeof dr==="function"){dr({request:dn,trackerUrl:aD,success:true,isSendBeacon:true})}return ds}function c4(dk,dl,dj){if(!J(dj)||null===dj){dj=true}if(m&&a6(dk,dl,dj)){return}setTimeout(function(){if(m&&a6(dk,dl,dj)){return}var dp;try{var dn=T.XMLHttpRequest?new T.XMLHttpRequest():T.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;
|
45 |
+
dn.open("POST",aD,true);dn.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var dq=m&&a6(dk,dl,dj);if(!dq&&dj){cp(dk,dl)}else{if(typeof dl==="function"){dl({request:dk,trackerUrl:aD,success:false,xhr:this})}}}else{if(this.readyState===4&&(typeof dl==="function")){dl({request:dk,trackerUrl:aD,success:true,xhr:this})}}};dn.setRequestHeader("Content-Type",cw);dn.withCredentials=true;dn.send(dk)}catch(dm){dp=m&&a6(dk,dl,dj);if(!dp&&dj){cp(dk,dl)}else{if(typeof dl==="function"){dl({request:dk,trackerUrl:aD,success:false})}}}},50)}function cf(dk){var dj=new Date();var dl=dj.getTime()+dk;if(!r||dl>r){r=dl}}function cn(dj){if(cb||!a5||!bA){return}cb=setTimeout(function dk(){cb=null;if(!bc){bc=(!G.hasFocus||G.hasFocus())}if(!bc){cn(a5);return}if(bQ()){return}var dl=new Date(),dm=a5-(dl.getTime()-cY);dm=Math.min(a5,dm);cn(dm)},dj||a5)}function bJ(){if(!cb){return}clearTimeout(cb);cb=null}function ba(){bc=true;cR=new Date().getTime()}function dd(){var dj=new Date().getTime();
|
46 |
+
return !cR||(dj-cR)>a5}function ay(){if(dd()){bQ()}bJ()}function dg(){if(aN||!a5){return}aN=true;an(T,"focus",ba);an(T,"blur",ay);ab++;e.addPlugin("HeartBeat"+ab,{unload:function(){if(aN&&dd()){bQ()}}})}function cB(dn){var dk=new Date();var dj=dk.getTime();cY=dj;if(cA&&dj<cA){var dl=cA-dj;setTimeout(dn,dl);cf(dl+50);cA+=50;return}if(cA===false){var dm=800;cA=dj+dm}dn()}function aO(){if(aC(cL)){bA=false}else{if(aC(bd)){bA=true}}}function bE(dk,dj,dl){aO();if(!bA){cJ.push(dk);return}if(!cP&&dk){if(cz&&bA){dk+="&consent=1"}cB(function(){if(cW&&a6(dk,dl,true)){cf(100);return}if(cC(dk)){c4(dk,dl)}else{cp(dk,dl)}cf(dj)})}if(!aN){dg()}}function cj(dj){if(cP){return false}return(dj&&dj.length)}function c3(dj,dn){if(!dn||dn>=dj.length){return[dj]}var dk=0;var dl=dj.length;var dm=[];for(dk;dk<dl;dk+=dn){dm.push(dj.slice(dk,dk+dn))}return dm}function df(dk,dj){if(!cj(dk)){return}if(!bA){cJ.push(dk);return}cB(function(){var dn=c3(dk,50);var dl=0,dm;for(dl;dl<dn.length;dl++){dm='{"requests":["?'+dn[dl].join('","?')+'"]}';
|
47 |
+
if(cW&&a6(dm,null,false)){cf(100)}else{c4(dm,null,false)}}cf(dj)})}function aT(dj){return bj+dj+"."+b5+"."+bn}function bX(dl,dk,dj){de(dl,"",-86400,dk,dj)}function b4(){if(bk){return"0"}if(!J(T.showModalDialog)&&J(h.cookieEnabled)){return h.cookieEnabled?"1":"0"}var dj=bj+"testcookie";de(dj,"1",undefined,bo,cX,bR);var dk=aC(dj)==="1"?"1":"0";bX(dj);return dk}function bh(){bn=b6((cX||cU)+(bo||"/")).slice(0,4)}function cG(){if(J(c8.res)){return c8}var dk,dm,dn={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(h.userAgent))){if(h.mimeTypes&&h.mimeTypes.length){for(dk in dn){if(Object.prototype.hasOwnProperty.call(dn,dk)){dm=h.mimeTypes[dn[dk]];c8[dk]=(dm&&dm.enabledPlugin)?"1":"0"}}}if(!((new RegExp("Edge[ /](\\d+[\\.\\d]+)")).test(h.userAgent))&&typeof navigator.javaEnabled!=="unknown"&&J(h.javaEnabled)&&h.javaEnabled()){c8.java="1"
|
48 |
+
}if(A(T.GearsFactory)){c8.gears="1"}c8.cookie=b4()}var dl=parseInt(X.width,10);var dj=parseInt(X.height,10);c8.res=parseInt(dl,10)+"x"+parseInt(dj,10);return c8}function bW(){var dk=aT("cvar"),dj=aC(dk);if(dj.length){dj=JSON_PIWIK.parse(dj);if(W(dj)){return dj}}return{}}function cD(){if(aQ===false){aQ=bW()}}function cQ(){var dj=cG();return b6((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(dj)+(new Date()).getTime()+Math.random()).slice(0,16)}function az(){var dj=cG();return b6((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(dj)).slice(0,6)}function bf(){return Math.floor((new Date()).getTime()/1000)}function aI(){var dk=bf();var dl=az();var dj=String(dk)+dl;return dj}function c2(dl){dl=String(dl);var dp=az();var dm=dp.length;var dn=dl.substr(-1*dm,dm);var dk=parseInt(dl.substr(0,dl.length-dm),10);if(dk&&dn&&dn===dp){var dj=bf();if(aZ<=0){return true}if(dj>=dk&&dj<=(dk+aZ)){return true}}return false}function dh(dj){if(!cM){return""}var dn=f(dj,av);if(!dn){return""}dn=String(dn);
|
49 |
+
var dl=new RegExp("^[a-zA-Z0-9]+$");if(dn.length===32&&dl.test(dn)){var dk=dn.substr(16,32);if(c2(dk)){var dm=dn.substr(0,16);return dm}}return""}function cN(){if(!bN){bN=dh(bM)}var dl=new Date(),dj=Math.round(dl.getTime()/1000),dk=aT("id"),dp=aC(dk),dn,dm;if(dp){dn=dp.split(".");dn.unshift("0");if(bN.length){dn[1]=bN}return dn}if(bN.length){dm=bN}else{if("0"===b4()){dm=""}else{dm=cQ()}}dn=["1",dm,dj,0,dj,"",""];return dn}function aY(){var dr=cN(),dm=dr[0],dn=dr[1],dk=dr[2],dj=dr[3],dp=dr[4],dl=dr[5];if(!J(dr[6])){dr[6]=""}var dq=dr[6];return{newVisitor:dm,uuid:dn,createTs:dk,visitCount:dj,currentVisitTs:dp,lastVisitTs:dl,lastEcommerceOrderTs:dq}}function aG(){var dm=new Date(),dk=dm.getTime(),dn=aY().createTs;var dj=parseInt(dn,10);var dl=(dj*1000)+cI-dk;return dl}function aL(dj){if(!b5){return}var dl=new Date(),dk=Math.round(dl.getTime()/1000);if(!J(dj)){dj=aY()}var dm=dj.uuid+"."+dj.createTs+"."+dj.visitCount+"."+dk+"."+dj.lastVisitTs+"."+dj.lastEcommerceOrderTs;de(aT("id"),dm,aG(),bo,cX,bR)
|
50 |
+
}function bL(){var dj=aC(aT("ref"));if(dj.length){try{dj=JSON_PIWIK.parse(dj);if(W(dj)){return dj}}catch(dk){}}return["","",0,""]}function bv(dk){var dj="testvalue";de("test",dj,10000,null,dk);if(aC("test")===dj){bX("test",null,dk);return true}return false}function aE(){var dk=bk;bk=false;var dj,dl;for(dj=0;dj<bt.length;dj++){dl=aT(bt[dj]);if(dl!==cL&&dl!==bd&&0!==aC(dl)){bX(dl,bo,cX)}}bk=dk}function b2(dj){b5=dj;aL()}function di(dn){if(!dn||!W(dn)){return}var dm=[];var dl;for(dl in dn){if(Object.prototype.hasOwnProperty.call(dn,dl)){dm.push(dl)}}var dp={};dm.sort();var dj=dm.length;var dk;for(dk=0;dk<dj;dk++){dp[dm[dk]]=dn[dm[dk]]}return dp}function cc(){de(aT("ses"),"1",co,bo,cX,bR)}function bg(){var dm="";var dk="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var dl=dk.length;var dj;for(dj=0;dj<6;dj++){dm+=dk.charAt(Math.floor(Math.random()*dl))}return dm}function cs(dl,dH,dI,dm){var dG,dk=new Date(),du=Math.round(dk.getTime()/1000),dr,dF,dn=1024,dO,dv,dD=aQ,dp=aT("ses"),dB=aT("ref"),dy=aT("cvar"),dz=aC(dp),dE=bL(),dK=a4||bM,ds,dj;
|
51 |
+
if(bk){aE()}if(cP){return""}var dA=aY();if(!J(dm)){dm=""}var dx=G.characterSet||G.charset;if(!dx||dx.toLowerCase()==="utf-8"){dx=null}ds=dE[0];dj=dE[1];dr=dE[2];dF=dE[3];if(!dz){var dJ=co/1000;if(!dA.lastVisitTs||(du-dA.lastVisitTs)>dJ){dA.visitCount++;dA.lastVisitTs=dA.currentVisitTs}if(!bu||!ds.length){for(dG in cq){if(Object.prototype.hasOwnProperty.call(cq,dG)){ds=f(dK,cq[dG]);if(ds.length){break}}}for(dG in bF){if(Object.prototype.hasOwnProperty.call(bF,dG)){dj=f(dK,bF[dG]);if(dj.length){break}}}}dO=d(bm);dv=dF.length?d(dF):"";if(dO.length&&!aV(dO)&&(!bu||!dv.length||aV(dv))){dF=bm}if(dF.length||ds.length){dr=du;dE=[ds,dj,dr,b1(dF.slice(0,dn))];de(dB,JSON_PIWIK.stringify(dE),c5,bo,cX)}}dl+="&idsite="+b5+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+dk.getHours()+"&m="+dk.getMinutes()+"&s="+dk.getSeconds()+"&url="+t(b1(dK))+(bm.length?"&urlref="+t(b1(bm)):"")+((bx&&bx.length)?"&uid="+t(bx):"")+"&_id="+dA.uuid+"&_idts="+dA.createTs+"&_idvc="+dA.visitCount+"&_idn="+dA.newVisitor+(ds.length?"&_rcn="+t(ds):"")+(dj.length?"&_rck="+t(dj):"")+"&_refts="+dr+"&_viewts="+dA.lastVisitTs+(String(dA.lastEcommerceOrderTs).length?"&_ects="+dA.lastEcommerceOrderTs:"")+(String(dF).length?"&_ref="+t(b1(dF.slice(0,dn))):"")+(dx?"&cs="+t(dx):"")+"&send_image=0";
|
52 |
+
var dN=cG();for(dG in dN){if(Object.prototype.hasOwnProperty.call(dN,dG)){dl+="&"+dG+"="+dN[dG]}}var dM=[];if(dH){for(dG in dH){if(Object.prototype.hasOwnProperty.call(dH,dG)&&/^dimension\d+$/.test(dG)){var dq=dG.replace("dimension","");dM.push(parseInt(dq,10));dM.push(String(dq));dl+="&"+dG+"="+t(dH[dG]);delete dH[dG]}}}if(dH&&B(dH)){dH=null}for(dG in bl){if(Object.prototype.hasOwnProperty.call(bl,dG)){var dw=(-1===M(dM,dG));if(dw){dl+="&dimension"+dG+"="+t(bl[dG])}}}if(dH){dl+="&data="+t(JSON_PIWIK.stringify(dH))}else{if(ao){dl+="&data="+t(JSON_PIWIK.stringify(ao))}}function dt(dP,dQ){var dR=JSON_PIWIK.stringify(dP);if(dR.length>2){return"&"+dQ+"="+t(dR)}return""}var dL=di(bV);var dC=di(cl);dl+=dt(dL,"cvar");dl+=dt(dC,"e_cvar");if(aQ){dl+=dt(aQ,"_cvar");for(dG in dD){if(Object.prototype.hasOwnProperty.call(dD,dG)){if(aQ[dG][0]===""||aQ[dG][1]===""){delete aQ[dG]}}}if(bP){de(dy,JSON_PIWIK.stringify(aQ),co,bo,cX)}}if(a2){if(cm){dl+=">_ms="+cm}else{if(i&&i.timing&&i.timing.requestStart&&i.timing.responseEnd){dl+=">_ms="+(i.timing.responseEnd-i.timing.requestStart)
|
53 |
+
}}}if(aK){dl+="&pv_id="+aK}dA.lastEcommerceOrderTs=J(dm)&&String(dm).length?dm:dA.lastEcommerceOrderTs;aL(dA);cc();dl+=ac(dI,{tracker:bH,request:dl});if(cZ.length){dl+="&"+cZ}if(A(ca)){dl=ca(dl)}return dl}bQ=function a7(){var dj=new Date();dj=dj.getTime();if(!cY){return false}if((cY+(1000*c7))<=dj){return false}if(cY+a5<=dj){bH.ping();return true}return false};function bp(dm,dl,ds,dn,dj,dv){var dq="idgoal=0",dr,dk=new Date(),dt=[],du,dp=String(dm).length;if(dp){dq+="&ec_id="+t(dm);dr=Math.round(dk.getTime()/1000)}dq+="&revenue="+dl;if(String(ds).length){dq+="&ec_st="+ds}if(String(dn).length){dq+="&ec_tx="+dn}if(String(dj).length){dq+="&ec_sh="+dj}if(String(dv).length){dq+="&ec_dt="+dv}if(c0){for(du in c0){if(Object.prototype.hasOwnProperty.call(c0,du)){if(!J(c0[du][1])){c0[du][1]=""}if(!J(c0[du][2])){c0[du][2]=""}if(!J(c0[du][3])||String(c0[du][3]).length===0){c0[du][3]=0}if(!J(c0[du][4])||String(c0[du][4]).length===0){c0[du][4]=1}dt.push(c0[du])}}dq+="&ec_items="+t(JSON_PIWIK.stringify(dt))
|
54 |
+
}dq=cs(dq,ao,"ecommerce",dr);bE(dq,bI);if(dp){c0={}}}function bY(dj,dn,dm,dl,dk,dp){if(String(dj).length&&J(dn)){bp(dj,dn,dm,dl,dk,dp)}}function br(dj){if(J(dj)){bp("",dj,"","","","")}}function bZ(dk,dm,dl){aK=bg();var dj=cs("action_name="+t(al(dk||bi)),dm,"log");bE(dj,bI,dl)}function a0(dl,dk){var dm,dj="(^| )(piwik[_-]"+dk;if(dl){for(dm=0;dm<dl.length;dm++){dj+="|"+dl[dm]}}dj+=")( |$)";return new RegExp(dj)}function aU(dj){return(aD&&dj&&0===String(dj).indexOf(aD))}function cu(dn,dj,dp,dk){if(aU(dj)){return 0}var dm=a0(bK,"download"),dl=a0(a8,"link"),dq=new RegExp("\\.("+c6.join("|")+")([?&#]|$)","i");if(dl.test(dn)){return"link"}if(dk||dm.test(dn)||dq.test(dj)){return"download"}if(dp){return 0}return"link"}function au(dk){var dj;dj=dk.parentNode;while(dj!==null&&J(dj)){if(ae.isLinkElement(dk)){break}dk=dj;dj=dk.parentNode}return dk}function dc(dp){dp=au(dp);if(!ae.hasNodeAttribute(dp,"href")){return}if(!J(dp.href)){return}var dn=ae.getAttributeValueFromNode(dp,"href");if(aU(dn)){return
|
55 |
+
}var dk=dp.pathname||ck(dp.href);var dq=dp.hostname||d(dp.href);var dr=dq.toLowerCase();var dl=dp.href.replace(dq,dr);var dm=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!dm.test(dl)){var dj=cu(dp.className,dl,ar(dr,dk),ae.hasNodeAttribute(dp,"download"));if(dj){return{type:dj,href:dl}}}}function aP(dj,dk,dl,dm){var dn=v.buildInteractionRequestParams(dj,dk,dl,dm);if(!dn){return}return cs(dn,null,"contentInteraction")}function cK(dl,dm,dr,dj,dk){if(!J(dl)){return}if(aU(dl)){return dl}var dp=v.toAbsoluteUrl(dl);var dn="redirecturl="+t(dp)+"&";dn+=aP(dm,dr,dj,(dk||dl));var dq="&";if(aD.indexOf("?")<0){dq="?"}return aD+dq+dn}function bb(dj,dk){if(!dj||!dk){return false}var dl=v.findTargetNode(dj);if(v.shouldIgnoreInteraction(dl)){return false}dl=v.findTargetNodeNoDefault(dj);if(dl&&!V(dl,dk)){return false}return true}function ct(dl,dk,dn){if(!dl){return}var dj=v.findParentContentNode(dl);if(!dj){return}if(!bb(dj,dl)){return}var dm=v.buildContentBlock(dj);
|
56 |
+
if(!dm){return}if(!dm.target&&dn){dm.target=dn}return v.buildInteractionRequestParams(dk,dm.name,dm.piece,dm.target)}function aW(dk){if(!b9||!b9.length){return false}var dj,dl;for(dj=0;dj<b9.length;dj++){dl=b9[dj];if(dl&&dl.name===dk.name&&dl.piece===dk.piece&&dl.target===dk.target){return true}}return false}function bD(dm){if(!dm){return false}var dq=v.findTargetNode(dm);if(!dq||v.shouldIgnoreInteraction(dq)){return false}var dr=dc(dq);if(c9&&dr&&dr.type){return false}if(ae.isLinkElement(dq)&&ae.hasNodeAttributeWithValue(dq,"href")){var dj=String(ae.getAttributeValueFromNode(dq,"href"));if(0===dj.indexOf("#")){return false}if(aU(dj)){return true}if(!v.isUrlToCurrentDomain(dj)){return false}var dn=v.buildContentBlock(dm);if(!dn){return}var dl=dn.name;var ds=dn.piece;var dp=dn.target;if(!ae.hasNodeAttributeWithValue(dq,v.CONTENT_TARGET_ATTR)||dq.wasContentTargetAttrReplaced){dq.wasContentTargetAttrReplaced=true;dp=v.toAbsoluteUrl(dj);ae.setAnyAttribute(dq,v.CONTENT_TARGET_ATTR,dp)}var dk=cK(dj,"click",dl,ds,dp);
|
57 |
+
v.setHrefAttribute(dq,dk);return true}return false}function aM(dk){if(!dk||!dk.length){return}var dj;for(dj=0;dj<dk.length;dj++){bD(dk[dj])}}function aX(dj){return function(dk){if(!dj){return}var dn=v.findParentContentNode(dj);var dp;if(dk){dp=dk.target||dk.srcElement}if(!dp){dp=dj}if(!bb(dn,dp)){return}cf(bI);if(ae.isLinkElement(dj)&&ae.hasNodeAttributeWithValue(dj,"href")&&ae.hasNodeAttributeWithValue(dj,v.CONTENT_TARGET_ATTR)){var dl=ae.getAttributeValueFromNode(dj,"href");if(!aU(dl)&&dj.wasContentTargetAttrReplaced){ae.setAnyAttribute(dj,v.CONTENT_TARGET_ATTR,"")}}var dt=dc(dj);if(ap&&dt&&dt.type){return dt.type}if(bD(dn)){return"href"}var dq=v.buildContentBlock(dn);if(!dq){return}var dm=dq.name;var du=dq.piece;var ds=dq.target;var dr=aP("click",dm,du,ds);if(dr){bE(dr,bI)}return dr}}function b0(dl){if(!dl||!dl.length){return}var dj,dk;for(dj=0;dj<dl.length;dj++){dk=v.findTargetNode(dl[dj]);if(dk&&!dk.contentInteractionTrackingSetupDone){dk.contentInteractionTrackingSetupDone=true;an(dk,"click",aX(dk))
|
58 |
+
}}}function bw(dl,dm){if(!dl||!dl.length){return[]}var dj,dk;for(dj=0;dj<dl.length;dj++){if(aW(dl[dj])){dl.splice(dj,1);dj--}else{b9.push(dl[dj])}}if(!dl||!dl.length){return[]}aM(dm);b0(dm);var dn=[];for(dj=0;dj<dl.length;dj++){dk=cs(v.buildImpressionRequestParams(dl[dj].name,dl[dj].piece,dl[dj].target),undefined,"contentImpressions");if(dk){dn.push(dk)}}return dn}function cy(dk){var dj=v.collectContent(dk);return bw(dj,dk)}function a9(dk){if(!dk||!dk.length){return[]}var dj;for(dj=0;dj<dk.length;dj++){if(!v.isNodeVisible(dk[dj])){dk.splice(dj,1);dj--}}if(!dk||!dk.length){return[]}return cy(dk)}function aF(dl,dj,dk){var dm=v.buildImpressionRequestParams(dl,dj,dk);return cs(dm,null,"contentImpression")}function db(dm,dk){if(!dm){return}var dj=v.findParentContentNode(dm);var dl=v.buildContentBlock(dj);if(!dl){return}if(!dk){dk="Unknown"}return aP(dk,dl.name,dl.piece,dl.target)}function cO(dk,dm,dj,dl){return"e_c="+t(dk)+"&e_a="+t(dm)+(J(dj)?"&e_n="+t(dj):"")+(J(dl)?"&e_v="+t(dl):"")}function at(dl,dn,dj,dm,dq,dp){if(a(String(dl)).length===0||a(String(dn)).length===0){ak("Error while logging event: Parameters `category` and `action` must not be empty or filled with whitespaces");
|
59 |
+
return false}var dk=cs(cO(dl,dn,dj,dm),dq,"event");bE(dk,bI,dp)}function b7(dj,dm,dk,dn){var dl=cs("search="+t(dj)+(dm?"&search_cat="+t(dm):"")+(J(dk)?"&search_count="+dk:""),dn,"sitesearch");bE(dl,bI)}function cT(dj,dn,dm,dl){var dk=cs("idgoal="+dj+(dn?"&revenue="+dn:""),dm,"goal");bE(dk,bI,dl)}function c1(dm,dj,dr,dq,dl){var dp=dj+"="+t(b1(dm));var dk=ct(dl,"click",dm);if(dk){dp+="&"+dk}var dn=cs(dp,dr,"link");bE(dn,bI,dq)}function bT(dk,dj){if(dk!==""){return dk+dj.charAt(0).toUpperCase()+dj.slice(1)}return dj}function cg(dp){var dn,dj,dm=["","webkit","ms","moz"],dl;if(!be){for(dj=0;dj<dm.length;dj++){dl=dm[dj];if(Object.prototype.hasOwnProperty.call(G,bT(dl,"hidden"))){if(G[bT(dl,"visibilityState")]==="prerender"){dn=true}break}}}if(dn){an(G,dl+"visibilitychange",function dk(){G.removeEventListener(dl+"visibilitychange",dk,false);dp()});return}dp()}function bq(){var dk=aY().uuid;var dj=aI();return dk+dj}function ci(dj){if(!dj){return}if(!ae.hasNodeAttribute(dj,"href")){return}var dk=ae.getAttributeValueFromNode(dj,"href");
|
60 |
+
if(!dk||aU(dk)){return}dk=k(dk,av);var dl=bq();dk=F(dk,av,dl);ae.setAnyAttribute(dj,"href",dk)}function aA(dm){var dn=ae.getAttributeValueFromNode(dm,"href");if(!dn){return false}dn=String(dn);var dk=dn.indexOf("//")===0||dn.indexOf("http://")===0||dn.indexOf("https://")===0;if(!dk){return false}var dj=dm.pathname||ck(dm.href);var dl=(dm.hostname||d(dm.href)).toLowerCase();if(ar(dl,dj)){if(!cF(cU,L(dl))){return true}return false}return false}function cE(dj){var dk=dc(dj);if(dk&&dk.type){dk.href=p(dk.href);c1(dk.href,dk.type,undefined,null,dj);return}if(cM){dj=au(dj);if(aA(dj)){ci(dj)}}}function cv(){return G.all&&!G.addEventListener}function cV(dj){var dl=dj.which;var dk=(typeof dj.button);if(!dl&&dk!=="undefined"){if(cv()){if(dj.button&1){dl=1}else{if(dj.button&2){dl=3}else{if(dj.button&4){dl=2}}}}else{if(dj.button===0||dj.button==="0"){dl=1}else{if(dj.button&1){dl=2}else{if(dj.button&2){dl=3}}}}}return dl}function bS(dj){switch(cV(dj)){case 1:return"left";case 2:return"middle";case 3:return"right"
|
61 |
+
}}function a1(dj){return dj.target||dj.srcElement}function aB(dj){return function(dm){dm=dm||T.event;var dl=bS(dm);var dn=a1(dm);if(dm.type==="click"){var dk=false;if(dj&&dl==="middle"){dk=true}if(dn&&!dk){cE(dn)}}else{if(dm.type==="mousedown"){if(dl==="middle"&&dn){aR=dl;bz=dn}else{aR=bz=null}}else{if(dm.type==="mouseup"){if(dl===aR&&dn===bz){cE(dn)}aR=bz=null}else{if(dm.type==="contextmenu"){cE(dn)}}}}}}function aq(dl,dk){var dj=typeof dk;if(dj==="undefined"){dk=true}an(dl,"click",aB(dk),false);if(dk){an(dl,"mouseup",aB(dk),false);an(dl,"mousedown",aB(dk),false);an(dl,"contextmenu",aB(dk),false)}}function bC(dl,dn){ap=true;var dm,dk=a0(by,"ignore"),dp=G.links,dj=null,dq=null;if(dp){for(dm=0;dm<dp.length;dm++){dj=dp[dm];if(!dk.test(dj.className)){dq=typeof dj.piwikTrackers;if("undefined"===dq){dj.piwikTrackers=[]}if(-1===M(dj.piwikTrackers,dn)){dj.piwikTrackers.push(dn);aq(dj,dl)}}}}}function aS(dk,dn,dp){if(ce){return true}ce=true;var dq=false;var dm,dl;function dj(){dq=true}n(function(){function dr(dt){setTimeout(function(){if(!ce){return
|
62 |
+
}dq=false;dp.trackVisibleContentImpressions();dr(dt)},dt)}function ds(dt){setTimeout(function(){if(!ce){return}if(dq){dq=false;dp.trackVisibleContentImpressions()}ds(dt)},dt)}if(dk){dm=["scroll","resize"];for(dl=0;dl<dm.length;dl++){if(G.addEventListener){G.addEventListener(dm[dl],dj,false)}else{T.attachEvent("on"+dm[dl],dj)}}ds(100)}if(dn&&dn>0){dn=parseInt(dn,10);dr(dn)}})}var bB={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var dj=this.requests;this.requests=[];if(dj.length===1){bE(dj[0],bI)}else{df(dj,bI)}},push:function(dj){if(!dj){return}if(m||!this.enabled){bE(dj,bI);return}bB.requests.push(dj);if(this.timeout){clearTimeout(this.timeout);this.timeout=null}this.timeout=setTimeout(function(){bB.timeout=null;bB.sendRequests()},bB.interval);var dk="RequestQueue"+aw;if(!Object.prototype.hasOwnProperty.call(b,dk)){b[dk]={unload:function(){if(bB.timeout){clearTimeout(bB.timeout)}bB.sendRequests()}}}}};bh();aL();this.hasConsent=function(){return bA};this.getVisitorId=function(){return aY().uuid
|
63 |
+
};this.getVisitorInfo=function(){return cN()};this.getAttributionInfo=function(){return bL()};this.getAttributionCampaignName=function(){return bL()[0]};this.getAttributionCampaignKeyword=function(){return bL()[1]};this.getAttributionReferrerTimestamp=function(){return bL()[2]};this.getAttributionReferrerUrl=function(){return bL()[3]};this.setTrackerUrl=function(dj){aD=dj};this.getTrackerUrl=function(){return aD};this.getPiwikUrl=function(){return O(this.getTrackerUrl(),bG)};this.addTracker=function(dj,dl){if(!J(dj)||null===dj){dj=this.getTrackerUrl()}var dk=new Q(dj,dl);I.push(dk);e.trigger("TrackerAdded",[this]);return dk};this.getSiteId=function(){return b5};this.setSiteId=function(dj){b2(dj)};this.resetUserId=function(){bx=""};this.setUserId=function(dj){if(Y(dj)){bx=dj}};this.getUserId=function(){return bx};this.setCustomData=function(dj,dk){if(W(dj)){ao=dj}else{if(!ao){ao={}}ao[dj]=dk}};this.getCustomData=function(){return ao};this.setCustomRequestProcessing=function(dj){ca=dj};this.appendToTrackingUrl=function(dj){cZ=dj
|
64 |
+
};this.getRequest=function(dj){return cs(dj)};this.addPlugin=function(dj,dk){b[dj]=dk};this.setCustomDimension=function(dj,dk){dj=parseInt(dj,10);if(dj>0){if(!J(dk)){dk=""}if(!w(dk)){dk=String(dk)}bl[dj]=dk}};this.getCustomDimension=function(dj){dj=parseInt(dj,10);if(dj>0&&Object.prototype.hasOwnProperty.call(bl,dj)){return bl[dj]}};this.deleteCustomDimension=function(dj){dj=parseInt(dj,10);if(dj>0){delete bl[dj]}};this.setCustomVariable=function(dk,dj,dn,dl){var dm;if(!J(dl)){dl="visit"}if(!J(dj)){return}if(!J(dn)){dn=""}if(dk>0){dj=!w(dj)?String(dj):dj;dn=!w(dn)?String(dn):dn;dm=[dj.slice(0,bs),dn.slice(0,bs)];if(dl==="visit"||dl===2){cD();aQ[dk]=dm}else{if(dl==="page"||dl===3){bV[dk]=dm}else{if(dl==="event"){cl[dk]=dm}}}}};this.getCustomVariable=function(dk,dl){var dj;if(!J(dl)){dl="visit"}if(dl==="page"||dl===3){dj=bV[dk]}else{if(dl==="event"){dj=cl[dk]}else{if(dl==="visit"||dl===2){cD();dj=aQ[dk]}}}if(!J(dj)||(dj&&dj[0]==="")){return false}return dj};this.deleteCustomVariable=function(dj,dk){if(this.getCustomVariable(dj,dk)){this.setCustomVariable(dj,"","",dk)
|
65 |
+
}};this.deleteCustomVariables=function(dj){if(dj==="page"||dj===3){bV={}}else{if(dj==="event"){cl={}}else{if(dj==="visit"||dj===2){aQ={}}}}};this.storeCustomVariablesInCookie=function(){bP=true};this.setLinkTrackingTimer=function(dj){bI=dj};this.getLinkTrackingTimer=function(){return bI};this.setDownloadExtensions=function(dj){if(w(dj)){dj=dj.split("|")}c6=dj};this.addDownloadExtensions=function(dk){var dj;if(w(dk)){dk=dk.split("|")}for(dj=0;dj<dk.length;dj++){c6.push(dk[dj])}};this.removeDownloadExtensions=function(dl){var dk,dj=[];if(w(dl)){dl=dl.split("|")}for(dk=0;dk<c6.length;dk++){if(M(dl,c6[dk])===-1){dj.push(c6[dk])}}c6=dj};this.setDomains=function(dj){ax=w(dj)?[dj]:dj;var dn=false,dl=0,dk;for(dl;dl<ax.length;dl++){dk=String(ax[dl]);if(cF(cU,L(dk))){dn=true;break}var dm=ck(dk);if(dm&&dm!=="/"&&dm!=="/*"){dn=true;break}}if(!dn){ax.push(cU)}};this.enableCrossDomainLinking=function(){cM=true};this.disableCrossDomainLinking=function(){cM=false};this.isCrossDomainLinkingEnabled=function(){return cM
|
66 |
+
};this.setCrossDomainLinkingTimeout=function(dj){aZ=dj};this.getCrossDomainLinkingUrlParameter=function(){return t(av)+"="+t(bq())};this.setIgnoreClasses=function(dj){by=w(dj)?[dj]:dj};this.setRequestMethod=function(dj){da=dj||ch};this.setRequestContentType=function(dj){cw=dj||aH};this.setReferrerUrl=function(dj){bm=dj};this.setCustomUrl=function(dj){a4=bU(bM,dj)};this.getCurrentUrl=function(){return a4||bM};this.setDocumentTitle=function(dj){bi=dj};this.setAPIUrl=function(dj){bG=dj};this.setDownloadClasses=function(dj){bK=w(dj)?[dj]:dj};this.setLinkClasses=function(dj){a8=w(dj)?[dj]:dj};this.setCampaignNameKey=function(dj){cq=w(dj)?[dj]:dj};this.setCampaignKeywordKey=function(dj){bF=w(dj)?[dj]:dj};this.discardHashTag=function(dj){bO=dj};this.setCookieNamePrefix=function(dj){bj=dj;aQ=bW()};this.setCookieDomain=function(dj){var dk=L(dj);if(bv(dk)){cX=dk;bh()}};this.getCookieDomain=function(){return cX};this.hasCookies=function(){return"1"===b4()};this.setSessionCookie=function(dl,dk,dj){if(!dl){throw new Error("Missing cookie name")
|
67 |
+
}if(!J(dj)){dj=co}bt.push(dl);de(aT(dl),dk,dj,bo,cX)};this.getCookie=function(dk){var dj=aC(aT(dk));if(dj===0){return null}return dj};this.setCookiePath=function(dj){bo=dj;bh()};this.getCookiePath=function(dj){return bo};this.setVisitorCookieTimeout=function(dj){cI=dj*1000};this.setSessionCookieTimeout=function(dj){co=dj*1000};this.getSessionCookieTimeout=function(){return co};this.setReferralCookieTimeout=function(dj){c5=dj*1000};this.setConversionAttributionFirstReferrer=function(dj){bu=dj};this.setSecureCookie=function(dj){bR=dj};this.disableCookies=function(){bk=true;c8.cookie="0";if(b5){aE()}};this.deleteCookies=function(){aE()};this.setDoNotTrack=function(dk){var dj=h.doNotTrack||h.msDoNotTrack;cP=dk&&(dj==="yes"||dj==="1");if(cP){this.disableCookies()}};this.alwaysUseSendBeacon=function(){cW=true};this.addListener=function(dk,dj){aq(dk,dj)};this.enableLinkTracking=function(dk){c9=true;var dj=this;cg(function(){q(function(){bC(dk,dj)})})};this.enableJSErrorTracking=function(){if(cS){return
|
68 |
+
}cS=true;var dj=T.onerror;T.onerror=function(dp,dm,dl,dn,dk){cg(function(){var dq="JavaScript Errors";var dr=dm+":"+dl;if(dn){dr+=":"+dn}at(dq,dr,dp)});if(dj){return dj(dp,dm,dl,dn,dk)}return false}};this.disablePerformanceTracking=function(){a2=false};this.setGenerationTimeMs=function(dj){cm=parseInt(dj,10)};this.setVisitStandardLength=function(dj){dj=Math.max(dj,5);c7=dj};this.enableHeartBeatTimer=function(dj){dj=Math.max(dj,5);a5=(dj||15)*1000;if(cY!==null){dg()}};this.disableHeartBeatTimer=function(){bJ();if(a5||aN){if(T.removeEventListener){T.removeEventListener("focus",ba);T.removeEventListener("blur",ay)}else{if(T.detachEvent){T.detachEvent("onfocus",ba);T.detachEvent("onblur",ay)}}}a5=null;aN=false};this.killFrame=function(){if(T.location!==T.top.location){T.top.location=T.location}};this.redirectFile=function(dj){if(T.location.protocol==="file:"){T.location=dj}};this.setCountPreRendered=function(dj){be=dj};this.trackGoal=function(dj,dm,dl,dk){cg(function(){cT(dj,dm,dl,dk)})};this.trackLink=function(dk,dj,dm,dl){cg(function(){c1(dk,dj,dm,dl)
|
69 |
+
})};this.getNumTrackedPageViews=function(){return cr};this.trackPageView=function(dj,dl,dk){b9=[];cJ=[];if(N(b5)){cg(function(){Z(aD,bG,b5)})}else{cg(function(){cr++;bZ(dj,dl,dk)})}};this.trackAllContentImpressions=function(){if(N(b5)){return}cg(function(){q(function(){var dj=v.findContentNodes();var dk=cy(dj);df(dk,bI)})})};this.trackVisibleContentImpressions=function(dj,dk){if(N(b5)){return}if(!J(dj)){dj=true}if(!J(dk)){dk=750}aS(dj,dk,this);cg(function(){n(function(){var dl=v.findContentNodes();var dm=a9(dl);df(dm,bI)})})};this.trackContentImpression=function(dl,dj,dk){if(N(b5)){return}dl=a(dl);dj=a(dj);dk=a(dk);if(!dl){return}dj=dj||"Unknown";cg(function(){var dm=aF(dl,dj,dk);bE(dm,bI)})};this.trackContentImpressionsWithinNode=function(dj){if(N(b5)||!dj){return}cg(function(){if(ce){n(function(){var dk=v.findContentNodesWithinNode(dj);var dl=a9(dk);df(dl,bI)})}else{q(function(){var dk=v.findContentNodesWithinNode(dj);var dl=cy(dk);df(dl,bI)})}})};this.trackContentInteraction=function(dl,dm,dj,dk){if(N(b5)){return
|
70 |
+
}dl=a(dl);dm=a(dm);dj=a(dj);dk=a(dk);if(!dl||!dm){return}dj=dj||"Unknown";cg(function(){var dn=aP(dl,dm,dj,dk);if(dn){bE(dn,bI)}})};this.trackContentInteractionNode=function(dk,dj){if(N(b5)||!dk){return}cg(function(){var dl=db(dk,dj);if(dl){bE(dl,bI)}})};this.logAllContentBlocksOnPage=function(){var dl=v.findContentNodes();var dj=v.collectContent(dl);var dk=typeof console;if(dk!=="undefined"&&console&&console.log){console.log(dj)}};this.trackEvent=function(dk,dm,dj,dl,dp,dn){cg(function(){at(dk,dm,dj,dl,dp,dn)})};this.trackSiteSearch=function(dj,dl,dk,dm){b9=[];cg(function(){b7(dj,dl,dk,dm)})};this.setEcommerceView=function(dm,dj,dl,dk){if(Y(dl)){dl=String(dl)}if(!J(dl)||dl===null||dl===false||!dl.length){dl=""}else{if(dl instanceof Array){dl=JSON_PIWIK.stringify(dl)}}bV[5]=["_pkc",dl];if(J(dk)&&dk!==null&&dk!==false&&String(dk).length){bV[2]=["_pkp",dk]}if(!Y(dm)&&!Y(dj)){return}if(Y(dm)){bV[3]=["_pks",dm]}if(!Y(dj)){dj=""}bV[4]=["_pkn",dj]};this.getEcommerceItems=function(){return JSON.parse(JSON.stringify(c0))
|
71 |
+
};this.addEcommerceItem=function(dn,dj,dl,dk,dm){if(Y(dn)){c0[dn]=[String(dn),dj,dl,dk,dm]}};this.removeEcommerceItem=function(dj){if(Y(dj)){dj=String(dj);delete c0[dj]}};this.clearEcommerceCart=function(){c0={}};this.trackEcommerceOrder=function(dj,dn,dm,dl,dk,dp){bY(dj,dn,dm,dl,dk,dp)};this.trackEcommerceCartUpdate=function(dj){br(dj)};this.trackRequest=function(dk,dm,dl,dj){cg(function(){var dn=cs(dk,dm,dj);bE(dn,bI,dl)})};this.ping=function(){this.trackRequest("ping=1",null,null,"ping")};this.disableQueueRequest=function(){bB.enabled=false};this.setRequestQueueInterval=function(dj){if(dj<1000){throw new Error("Request queue interval needs to be at least 1000ms")}bB.interval=dj};this.queueRequest=function(dj){cg(function(){var dk=cs(dj);bB.push(dk)})};this.isConsentRequired=function(){return cz};this.getRememberedConsent=function(){var dj=aC(bd);if(aC(cL)){if(dj){bX(bd,bo,cX)}return null}if(!dj||dj===0){return null}return dj};this.hasRememberedConsent=function(){return !!this.getRememberedConsent()
|
72 |
+
};this.requireConsent=function(){cz=true;bA=this.hasRememberedConsent();x++;b["CoreConsent"+x]={unload:function(){if(!bA){aE()}}}};this.setConsentGiven=function(){bA=true;bX(cL,bo,cX);var dk,dj;for(dk=0;dk<cJ.length;dk++){dj=typeof cJ[dk];if(dj==="string"){bE(cJ[dk],bI)}else{if(dj==="object"){df(cJ[dk],bI)}}}cJ=[]};this.rememberConsentGiven=function(dk){if(dk){dk=dk*60*60*1000}else{dk=30*365*24*60*60*1000}this.setConsentGiven();var dj=new Date().getTime();de(bd,dj,dk,bo,cX,bR)};this.forgetConsentGiven=function(){var dj=30*365*24*60*60*1000;bX(bd,bo,cX);de(cL,new Date().getTime(),dj,bo,cX,bR);this.requireConsent()};this.isUserOptedOut=function(){return !bA};this.optUserOut=this.forgetConsentGiven;this.forgetUserOptOut=this.rememberConsentGiven;e.trigger("TrackerSetup",[this])}function H(){return{push:af}}function c(au,at){var av={};var aq,ar;for(aq=0;aq<at.length;aq++){var ao=at[aq];av[ao]=1;for(ar=0;ar<au.length;ar++){if(au[ar]&&au[ar][0]){var ap=au[ar][0];if(ao===ap){af(au[ar]);delete au[ar];
|
73 |
if(av[ap]>1&&ap!=="addTracker"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: https://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","requireConsent","setConsentGiven"];function ad(ao,aq){var ap=new Q(ao,aq);I.push(ap);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();e.trigger("TrackerAdded",[ap]);return ap}an(T,"beforeunload",ai,false);an(T,"message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=e.getAsyncTrackers();for(ar=0;ar<at.length;ar++){ap=d(at[ar].getPiwikUrl());
|
74 |
if(ap===ax){aw=at[ar];break}}if(!aw){return}var aq=null;try{aq=JSON.parse(au.data)}catch(av){return}if(!aq){return}function ao(aA){var aC=G.getElementsByTagName("iframe");for(ar=0;ar<aC.length;ar++){var aB=aC[ar];var ay=d(aB.src);if(aB.contentWindow&&J(aB.contentWindow.postMessage)&&ay===ax){var az=JSON.stringify(aA);aB.contentWindow.postMessage(az,"*")}}}if(J(aq.maq_initial_value)){ao({maq_opted_in:aq.maq_initial_value&&aw.hasConsent(),maq_url:aw.getPiwikUrl(),maq_optout_by_default:aw.isConsentRequired()})}else{if(J(aq.maq_opted_in)){at=e.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getPiwikUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;e={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:n,onReady:q,isNodeVisible:j,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]
|
75 |
}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||T,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ao,ap){if(!J(ap)){ap=this.getAsyncTracker().getSiteId()}if(!J(ao)){ao=this.getAsyncTracker().getTrackerUrl()}return new Q(ao,ap)},getAsyncTrackers:function(){return I},addTracker:function(ao,aq){var ap;if(!I.length){ap=ad(ao,aq)}else{ap=I[0].addTracker(ao,aq)}return ap},getAsyncTracker:function(ap,at){var ar;if(I&&I.length&&I[0]){ar=I[0]}else{return ad(ap,at)}if(!at&&!ap){return ar}if((!J(at)||null===at)&&ar){at=ar.getSiteId()}if((!J(ap)||null===ap)&&ar){ap=ar.getTrackerUrl()}var aq,ao=0;for(ao;ao<I.length;ao++){aq=I[ao];if(aq&&String(aq.getSiteId())===String(at)&&aq.getTrackerUrl()===ap){return aq}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])
|
app/matomo.js
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
* @license https://piwik.org/free-software/bsd/ BSD-3 Clause (also in js/LICENSE.txt)
|
9 |
* @license magnet:?xt=urn:btih:c80d50af7d3db9be66a4d0a86db0286e4fd33292&dn=bsd-3-clause.txt BSD-3-Clause
|
10 |
*/
|
11 |
-
;if(typeof
|
12 |
/*!! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */
|
13 |
(function(){var c=typeof define==="function"&&define.amd;var e={"function":true,object:true};var h=e[typeof a]&&a&&!a.nodeType&&a;var i=e[typeof window]&&window||this,b=h&&e[typeof module]&&module&&!module.nodeType&&typeof global=="object"&&global;if(b&&(b.global===b||b.window===b||b.self===b)){i=b}function j(ab,V){ab||(ab=i.Object());V||(V=i.Object());
|
14 |
var K=ab.Number||i.Number,R=ab.String||i.String,x=ab.Object||i.Object,S=ab.Date||i.Date,T=ab.SyntaxError||i.SyntaxError,aa=ab.TypeError||i.TypeError,J=ab.Math||i.Math,Y=ab.JSON||i.JSON;if(typeof Y=="object"&&Y){V.stringify=Y.stringify;V.parse=Y.parse}var n=x.prototype,u=n.toString,r,m,L;var B=new S(-3509827334573292);try{B=B.getUTCFullYear()==-109252&&B.getUTCMonth()===0&&B.getUTCDate()===1&&B.getUTCHours()==10&&B.getUTCMinutes()==37&&B.getUTCSeconds()==6&&B.getUTCMilliseconds()==708}catch(v){}function o(ac){if(o[ac]!==L){return o[ac]}var ad;if(ac=="bug-string-char-index"){ad="a"[0]!="a"}else{if(ac=="json"){ad=o("json-stringify")&&o("json-parse")}else{var ak,ah='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if(ac=="json-stringify"){var ai=V.stringify,aj=typeof ai=="function"&&B;if(aj){(ak=function(){return 1}).toJSON=ak;try{aj=ai(0)==="0"&&ai(new K())==="0"&&ai(new R())=='""'&&ai(u)===L&&ai(L)===L&&ai()===L&&ai(ak)==="1"&&ai([ak])=="[1]"&&ai([L])=="[null]"&&ai(null)=="null"&&ai([L,u,null])=="[null,null,null]"&&ai({a:[ak,true,false,null,"\x00\b\n\f\r\t"]})==ah&&ai(null,ak)==="1"&&ai([1,2],null,1)=="[\n 1,\n 2\n]"&&ai(new S(-8640000000000000))=='"-271821-04-20T00:00:00.000Z"'&&ai(new S(8640000000000000))=='"+275760-09-13T00:00:00.000Z"'&&ai(new S(-62198755200000))=='"-000001-01-01T00:00:00.000Z"'&&ai(new S(-1))=='"1969-12-31T23:59:59.999Z"'
|
@@ -38,38 +38,38 @@ if(!aq){aq="/"}}return aq},findMediaUrlInNode:function(at){if(!at){return}var aq
|
|
38 |
if(aq&&au.offsetTop){aq=(au.offsetTop+at.height)>0}var ap=ar.clientWidth;if(T.innerWidth&&ap>T.innerWidth){ap=T.innerWidth}var ao=ar.clientHeight;if(T.innerHeight&&ao>T.innerHeight){ao=T.innerHeight}return((at.bottom>0||aq)&&at.right>0&&at.left<ap&&((at.top<ao)||aq))},isNodeVisible:function(ap){var ao=j(ap);var aq=this.isOrWasNodeInViewport(ap);return ao&&aq},buildInteractionRequestParams:function(ao,ap,aq,ar){var at="";if(ao){at+="c_i="+t(ao)}if(ap){if(at){at+="&"}at+="c_n="+t(ap)}if(aq){if(at){at+="&"}at+="c_p="+t(aq)}if(ar){if(at){at+="&"}at+="c_t="+t(ar)}return at},buildImpressionRequestParams:function(ao,ap,aq){var ar="c_n="+t(ao)+"&c_p="+t(ap);if(aq){ar+="&c_t="+t(aq)}return ar},buildContentBlock:function(aq){if(!aq){return}var ao=this.findContentName(aq);var ap=this.findContentPiece(aq);var ar=this.findContentTarget(aq);ao=this.trim(ao);ap=this.trim(ap);ar=this.trim(ar);return{name:ao||"Unknown",piece:ap||"Unknown",target:ar||""}},collectContent:function(ar){if(!ar||!ar.length){return[]
|
39 |
}var aq=[];var ao,ap;for(ao=0;ao<ar.length;ao++){ap=this.buildContentBlock(ar[ao]);if(J(ap)){aq.push(ap)}}return aq},setLocation:function(ao){this.location=ao},getLocation:function(){var ao=this.location||T.location;if(!ao.origin){ao.origin=ao.protocol+"//"+ao.hostname+(ao.port?":"+ao.port:"")}return ao},toAbsoluteUrl:function(ap){if((!ap||String(ap)!==ap)&&ap!==""){return ap}if(""===ap){return this.getLocation().href}if(ap.search(/^\/\//)!==-1){return this.getLocation().protocol+ap}if(ap.search(/:\/\//)!==-1){return ap}if(0===ap.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.search("^[a-zA-Z]{2,11}:")){return ap}if(ap.search(/^\//)!==-1){return this.getLocation().origin+ap}var ao="(.*/)";var aq=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ao))[0];return aq+ap},isUrlToCurrentDomain:function(ap){var aq=this.toAbsoluteUrl(ap);if(!aq){return false
|
40 |
}var ao=this.getLocation().origin;if(ao===aq){return true}if(0===String(aq).indexOf(ao)){if(":"===String(aq).substr(ao.length,1)){return false}return true}return false},setHrefAttribute:function(ap,ao){if(!ap||!ao){return}ae.setAnyAttribute(ap,"href",ao)},shouldIgnoreInteraction:function(aq){var ap=ae.hasNodeAttribute(aq,this.CONTENT_IGNOREINTERACTION_ATTR);var ao=ae.hasNodeCssClass(aq,this.CONTENT_IGNOREINTERACTION_CLASS);return ap||ao}};function O(ap,at){if(at){return at}ap=v.toAbsoluteUrl(ap);if(z(ap,"?")){var ar=ap.indexOf("?");ap=ap.slice(0,ar)}if(R(ap,"matomo.php")){ap=g(ap,"matomo.php".length)}else{if(R(ap,"piwik.php")){ap=g(ap,"piwik.php".length)}else{if(R(ap,".php")){var ao=ap.lastIndexOf("/");var aq=1;ap=ap.slice(0,ao+aq)}}}if(R(ap,"/js/")){ap=g(ap,"js/".length)}return ap}function N(av){var ax="Piwik_Overlay";var ap=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var aq=ap.exec(G.referrer);if(aq){var at=aq[1];
|
41 |
-
if(at!==String(av)){return false}var au=aq[2],ao=aq[3],ar=aq[4];if(!ar){ar=""}else{if(ar.indexOf("&segment=")===0){ar=ar.substr("&segment=".length)}}T.name=ax+"###"+au+"###"+ao+"###"+ar}var aw=T.name.split("###");return aw.length===4&&aw[0]===ax}function Z(ap,aw,ar){var av=T.name.split("###"),au=av[1],ao=av[2],at=av[3],aq=O(ap,aw);o(aq+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(aq,ar,au,ao,at)})}function u(){var aq;try{aq=T.frameElement}catch(ap){return true}if(J(aq)){return(aq&&String(aq.nodeName).toLowerCase()==="iframe")?true:false}try{return T.self!==T.top}catch(ao){return true}}function Q(cd,b8){var bH=this,bd="mtm_consent",
|
42 |
-
try{bi=G.title}catch(cx){bi=""}function
|
43 |
-
if(
|
44 |
-
var
|
45 |
-
|
46 |
-
}function ay(){if(
|
47 |
-
|
48 |
-
}if(A(T.GearsFactory)){
|
49 |
-
var
|
50 |
-
}function bL(){var
|
51 |
-
if(bk){aE()}if(
|
52 |
-
var
|
53 |
-
}}}if(aK){
|
54 |
-
}
|
55 |
-
}var
|
56 |
-
if(!
|
57 |
-
v.setHrefAttribute(
|
58 |
-
}}}function bw(
|
59 |
-
return false}var
|
60 |
-
if(!
|
61 |
-
}}function a1(
|
62 |
-
}
|
63 |
-
};this.getVisitorInfo=function(){return
|
64 |
-
};this.getRequest=function(
|
65 |
-
}};this.deleteCustomVariables=function(
|
66 |
-
};this.setCrossDomainLinkingTimeout=function(
|
67 |
-
}if(!J(
|
68 |
-
}
|
69 |
-
})};this.getNumTrackedPageViews=function(){return cr};this.trackPageView=function(
|
70 |
-
}
|
71 |
-
};this.addEcommerceItem=function(
|
72 |
-
};this.requireConsent=function(){cz=true;bA=this.hasRememberedConsent();x++;b["CoreConsent"+x]={unload:function(){if(!bA){aE()}}}};this.setConsentGiven=function(){bA=true;bX(
|
73 |
if(av[ap]>1&&ap!=="addTracker"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: https://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","requireConsent","setConsentGiven"];function ad(ao,aq){var ap=new Q(ao,aq);I.push(ap);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();e.trigger("TrackerAdded",[ap]);return ap}an(T,"beforeunload",ai,false);an(T,"message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=e.getAsyncTrackers();for(ar=0;ar<at.length;ar++){ap=d(at[ar].getPiwikUrl());
|
74 |
if(ap===ax){aw=at[ar];break}}if(!aw){return}var aq=null;try{aq=JSON.parse(au.data)}catch(av){return}if(!aq){return}function ao(aA){var aC=G.getElementsByTagName("iframe");for(ar=0;ar<aC.length;ar++){var aB=aC[ar];var ay=d(aB.src);if(aB.contentWindow&&J(aB.contentWindow.postMessage)&&ay===ax){var az=JSON.stringify(aA);aB.contentWindow.postMessage(az,"*")}}}if(J(aq.maq_initial_value)){ao({maq_opted_in:aq.maq_initial_value&&aw.hasConsent(),maq_url:aw.getPiwikUrl(),maq_optout_by_default:aw.isConsentRequired()})}else{if(J(aq.maq_opted_in)){at=e.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getPiwikUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;e={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:n,onReady:q,isNodeVisible:j,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]
|
75 |
}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||T,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ao,ap){if(!J(ap)){ap=this.getAsyncTracker().getSiteId()}if(!J(ao)){ao=this.getAsyncTracker().getTrackerUrl()}return new Q(ao,ap)},getAsyncTrackers:function(){return I},addTracker:function(ao,aq){var ap;if(!I.length){ap=ad(ao,aq)}else{ap=I[0].addTracker(ao,aq)}return ap},getAsyncTracker:function(ap,at){var ar;if(I&&I.length&&I[0]){ar=I[0]}else{return ad(ap,at)}if(!at&&!ap){return ar}if((!J(at)||null===at)&&ar){at=ar.getSiteId()}if((!J(ap)||null===ap)&&ar){ap=ar.getTrackerUrl()}var aq,ao=0;for(ao;ao<I.length;ao++){aq=I[ao];if(aq&&String(aq.getSiteId())===String(at)&&aq.getTrackerUrl()===ap){return aq}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])
|
8 |
* @license https://piwik.org/free-software/bsd/ BSD-3 Clause (also in js/LICENSE.txt)
|
9 |
* @license magnet:?xt=urn:btih:c80d50af7d3db9be66a4d0a86db0286e4fd33292&dn=bsd-3-clause.txt BSD-3-Clause
|
10 |
*/
|
11 |
+
;if(typeof window.JSON==="object"&&typeof window.JSON.stringify==="function"&&typeof window.JSON.parse==="function"){JSON_PIWIK=window.JSON}else{(function(){var a={};
|
12 |
/*!! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */
|
13 |
(function(){var c=typeof define==="function"&&define.amd;var e={"function":true,object:true};var h=e[typeof a]&&a&&!a.nodeType&&a;var i=e[typeof window]&&window||this,b=h&&e[typeof module]&&module&&!module.nodeType&&typeof global=="object"&&global;if(b&&(b.global===b||b.window===b||b.self===b)){i=b}function j(ab,V){ab||(ab=i.Object());V||(V=i.Object());
|
14 |
var K=ab.Number||i.Number,R=ab.String||i.String,x=ab.Object||i.Object,S=ab.Date||i.Date,T=ab.SyntaxError||i.SyntaxError,aa=ab.TypeError||i.TypeError,J=ab.Math||i.Math,Y=ab.JSON||i.JSON;if(typeof Y=="object"&&Y){V.stringify=Y.stringify;V.parse=Y.parse}var n=x.prototype,u=n.toString,r,m,L;var B=new S(-3509827334573292);try{B=B.getUTCFullYear()==-109252&&B.getUTCMonth()===0&&B.getUTCDate()===1&&B.getUTCHours()==10&&B.getUTCMinutes()==37&&B.getUTCSeconds()==6&&B.getUTCMilliseconds()==708}catch(v){}function o(ac){if(o[ac]!==L){return o[ac]}var ad;if(ac=="bug-string-char-index"){ad="a"[0]!="a"}else{if(ac=="json"){ad=o("json-stringify")&&o("json-parse")}else{var ak,ah='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if(ac=="json-stringify"){var ai=V.stringify,aj=typeof ai=="function"&&B;if(aj){(ak=function(){return 1}).toJSON=ak;try{aj=ai(0)==="0"&&ai(new K())==="0"&&ai(new R())=='""'&&ai(u)===L&&ai(L)===L&&ai()===L&&ai(ak)==="1"&&ai([ak])=="[1]"&&ai([L])=="[null]"&&ai(null)=="null"&&ai([L,u,null])=="[null,null,null]"&&ai({a:[ak,true,false,null,"\x00\b\n\f\r\t"]})==ah&&ai(null,ak)==="1"&&ai([1,2],null,1)=="[\n 1,\n 2\n]"&&ai(new S(-8640000000000000))=='"-271821-04-20T00:00:00.000Z"'&&ai(new S(8640000000000000))=='"+275760-09-13T00:00:00.000Z"'&&ai(new S(-62198755200000))=='"-000001-01-01T00:00:00.000Z"'&&ai(new S(-1))=='"1969-12-31T23:59:59.999Z"'
|
38 |
if(aq&&au.offsetTop){aq=(au.offsetTop+at.height)>0}var ap=ar.clientWidth;if(T.innerWidth&&ap>T.innerWidth){ap=T.innerWidth}var ao=ar.clientHeight;if(T.innerHeight&&ao>T.innerHeight){ao=T.innerHeight}return((at.bottom>0||aq)&&at.right>0&&at.left<ap&&((at.top<ao)||aq))},isNodeVisible:function(ap){var ao=j(ap);var aq=this.isOrWasNodeInViewport(ap);return ao&&aq},buildInteractionRequestParams:function(ao,ap,aq,ar){var at="";if(ao){at+="c_i="+t(ao)}if(ap){if(at){at+="&"}at+="c_n="+t(ap)}if(aq){if(at){at+="&"}at+="c_p="+t(aq)}if(ar){if(at){at+="&"}at+="c_t="+t(ar)}return at},buildImpressionRequestParams:function(ao,ap,aq){var ar="c_n="+t(ao)+"&c_p="+t(ap);if(aq){ar+="&c_t="+t(aq)}return ar},buildContentBlock:function(aq){if(!aq){return}var ao=this.findContentName(aq);var ap=this.findContentPiece(aq);var ar=this.findContentTarget(aq);ao=this.trim(ao);ap=this.trim(ap);ar=this.trim(ar);return{name:ao||"Unknown",piece:ap||"Unknown",target:ar||""}},collectContent:function(ar){if(!ar||!ar.length){return[]
|
39 |
}var aq=[];var ao,ap;for(ao=0;ao<ar.length;ao++){ap=this.buildContentBlock(ar[ao]);if(J(ap)){aq.push(ap)}}return aq},setLocation:function(ao){this.location=ao},getLocation:function(){var ao=this.location||T.location;if(!ao.origin){ao.origin=ao.protocol+"//"+ao.hostname+(ao.port?":"+ao.port:"")}return ao},toAbsoluteUrl:function(ap){if((!ap||String(ap)!==ap)&&ap!==""){return ap}if(""===ap){return this.getLocation().href}if(ap.search(/^\/\//)!==-1){return this.getLocation().protocol+ap}if(ap.search(/:\/\//)!==-1){return ap}if(0===ap.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.search("^[a-zA-Z]{2,11}:")){return ap}if(ap.search(/^\//)!==-1){return this.getLocation().origin+ap}var ao="(.*/)";var aq=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ao))[0];return aq+ap},isUrlToCurrentDomain:function(ap){var aq=this.toAbsoluteUrl(ap);if(!aq){return false
|
40 |
}var ao=this.getLocation().origin;if(ao===aq){return true}if(0===String(aq).indexOf(ao)){if(":"===String(aq).substr(ao.length,1)){return false}return true}return false},setHrefAttribute:function(ap,ao){if(!ap||!ao){return}ae.setAnyAttribute(ap,"href",ao)},shouldIgnoreInteraction:function(aq){var ap=ae.hasNodeAttribute(aq,this.CONTENT_IGNOREINTERACTION_ATTR);var ao=ae.hasNodeCssClass(aq,this.CONTENT_IGNOREINTERACTION_CLASS);return ap||ao}};function O(ap,at){if(at){return at}ap=v.toAbsoluteUrl(ap);if(z(ap,"?")){var ar=ap.indexOf("?");ap=ap.slice(0,ar)}if(R(ap,"matomo.php")){ap=g(ap,"matomo.php".length)}else{if(R(ap,"piwik.php")){ap=g(ap,"piwik.php".length)}else{if(R(ap,".php")){var ao=ap.lastIndexOf("/");var aq=1;ap=ap.slice(0,ao+aq)}}}if(R(ap,"/js/")){ap=g(ap,"js/".length)}return ap}function N(av){var ax="Piwik_Overlay";var ap=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var aq=ap.exec(G.referrer);if(aq){var at=aq[1];
|
41 |
+
if(at!==String(av)){return false}var au=aq[2],ao=aq[3],ar=aq[4];if(!ar){ar=""}else{if(ar.indexOf("&segment=")===0){ar=ar.substr("&segment=".length)}}T.name=ax+"###"+au+"###"+ao+"###"+ar}var aw=T.name.split("###");return aw.length===4&&aw[0]===ax}function Z(ap,aw,ar){var av=T.name.split("###"),au=av[1],ao=av[2],at=av[3],aq=O(ap,aw);o(aq+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(aq,ar,au,ao,at)})}function u(){var aq;try{aq=T.frameElement}catch(ap){return true}if(J(aq)){return(aq&&String(aq.nodeName).toLowerCase()==="iframe")?true:false}try{return T.self!==T.top}catch(ao){return true}}function Q(cd,b8){var bH=this,bd="mtm_consent",cL="mtm_consent_removed",b3=aa(G.domain,T.location.href,K()),cU=L(b3[0]),bM=p(b3[1]),bm=p(b3[2]),cS=false,ch="GET",da=ch,aH="application/x-www-form-urlencoded; charset=UTF-8",cw=aH,aD=cd||"",bG="",cZ="",b5=b8||"",bx="",bN="",a4,bi="",c6=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ax=[cU],by=[],bK=[],a8=[],bI=500,cW=false,cH,a5,bQ,c7=1800,bO,ao,cq=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bF=["pk_kwd","piwik_kwd","utm_term"],bj="_pk_",av="pk_vid",aZ=180,cX,bo,bR=false,bk=false,cP,be,bu,cI=33955200000,co=1800000,c5=15768000000,a2=true,cm=0,bP=false,aQ=false,ca,bV={},cl={},bl={},bs=200,c0={},c8={},b9=[],ce=false,cA=false,ap=false,c9=false,cM=false,aN=false,bc=u(),cR=null,cY=null,cb,aR,bz,b6=am,bn,aK,cr=0,bt=["id","ses","cvar","ref"],cz=false,bA=null,cJ=[],aw=U++;
|
42 |
+
try{bi=G.title}catch(cx){bi=""}function de(dq,dn,dm,dp,dl,dk){if(bk){return}var dj;if(dm){dj=new Date();dj.setTime(dj.getTime()+dm)}G.cookie=dq+"="+t(dn)+(dm?";expires="+dj.toGMTString():"")+";path="+(dp||"/")+(dl?";domain="+dl:"")+(dk?";secure":"")+";SameSite=Lax"}function aC(dl){if(bk){return 0}var dj=new RegExp("(^|;)[ ]*"+dl+"=([^;]*)"),dk=dj.exec(G.cookie);return dk?S(dk[2]):0}bA=!aC(cL);function b1(dj){var dk;dj=k(dj,av);if(bO){dk=new RegExp("#.*");return dj.replace(dk,"")}return dj}function bU(dl,dj){var dm=s(dj),dk;if(dm){return dj}if(dj.slice(0,1)==="/"){return s(dl)+"://"+d(dl)+dj}dl=b1(dl);dk=dl.indexOf("?");if(dk>=0){dl=dl.slice(0,dk)}dk=dl.lastIndexOf("/");if(dk!==dl.length-1){dl=dl.slice(0,dk+1)}return dl+dj}function cF(dl,dj){var dk;dl=String(dl).toLowerCase();dj=String(dj).toLowerCase();if(dl===dj){return true}if(dj.slice(0,1)==="."){if(dl===dj.slice(1)){return true}dk=dl.length-dj.length;if((dk>0)&&(dl.slice(dk)===dj)){return true}}return false}function ck(dj){var dk=document.createElement("a");
|
43 |
+
if(dj.indexOf("//")!==0&&dj.indexOf("http")!==0){if(dj.indexOf("*")===0){dj=dj.substr(1)}if(dj.indexOf(".")===0){dj=dj.substr(1)}dj="http://"+dj}dk.href=v.toAbsoluteUrl(dj);if(dk.pathname){return dk.pathname}return""}function a3(dk,dj){if(!aj(dj,"/")){dj="/"+dj}if(!aj(dk,"/")){dk="/"+dk}var dl=(dj==="/"||dj==="/*");if(dl){return true}if(dk===dj){return true}dj=String(dj).toLowerCase();dk=String(dk).toLowerCase();if(R(dj,"*")){dj=dj.slice(0,-1);dl=(!dj||dj==="/");if(dl){return true}if(dk===dj){return true}return dk.indexOf(dj)===0}if(!R(dk,"/")){dk+="/"}if(!R(dj,"/")){dj+="/"}return dk.indexOf(dj)===0}function ar(dn,dq){var dk,dj,dl,dm,dp;for(dk=0;dk<ax.length;dk++){dm=L(ax[dk]);dp=ck(ax[dk]);if(cF(dn,dm)&&a3(dq,dp)){return true}}return false}function aV(dm){var dk,dj,dl;for(dk=0;dk<ax.length;dk++){dj=L(ax[dk].toLowerCase());if(dm===dj){return true}if(dj.slice(0,1)==="."){if(dm===dj.slice(1)){return true}dl=dm.length-dj.length;if((dl>0)&&(dm.slice(dl)===dj)){return true}}}return false}function cp(dj,dl){dj=dj.replace("send_image=0","send_image=1");
|
44 |
+
var dk=new Image(1,1);dk.onload=function(){E=0;if(typeof dl==="function"){dl({request:dj,trackerUrl:aD,success:true})}};dk.onerror=function(){if(typeof dl==="function"){dl({request:dj,trackerUrl:aD,success:false})}};dk.src=aD+(aD.indexOf("?")<0?"?":"&")+dj}function cC(dj){if(da==="POST"){return true}return dj&&(dj.length>2000||dj.indexOf('{"requests"')===0)}function aJ(){return"object"===typeof h&&"function"===typeof h.sendBeacon&&"function"===typeof Blob}function a6(dn,dr,dq){var dl=aJ();if(!dl){return false}var dm={type:"application/x-www-form-urlencoded; charset=UTF-8"};var ds=false;var dk=aD;try{var dj=new Blob([dn],dm);if(dq&&!cC(dn)){dj=new Blob([],dm);dk=dk+(dk.indexOf("?")<0?"?":"&")+dn}ds=h.sendBeacon(dk,dj)}catch(dp){return false}if(ds&&typeof dr==="function"){dr({request:dn,trackerUrl:aD,success:true,isSendBeacon:true})}return ds}function c4(dk,dl,dj){if(!J(dj)||null===dj){dj=true}if(m&&a6(dk,dl,dj)){return}setTimeout(function(){if(m&&a6(dk,dl,dj)){return}var dp;try{var dn=T.XMLHttpRequest?new T.XMLHttpRequest():T.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;
|
45 |
+
dn.open("POST",aD,true);dn.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var dq=m&&a6(dk,dl,dj);if(!dq&&dj){cp(dk,dl)}else{if(typeof dl==="function"){dl({request:dk,trackerUrl:aD,success:false,xhr:this})}}}else{if(this.readyState===4&&(typeof dl==="function")){dl({request:dk,trackerUrl:aD,success:true,xhr:this})}}};dn.setRequestHeader("Content-Type",cw);dn.withCredentials=true;dn.send(dk)}catch(dm){dp=m&&a6(dk,dl,dj);if(!dp&&dj){cp(dk,dl)}else{if(typeof dl==="function"){dl({request:dk,trackerUrl:aD,success:false})}}}},50)}function cf(dk){var dj=new Date();var dl=dj.getTime()+dk;if(!r||dl>r){r=dl}}function cn(dj){if(cb||!a5||!bA){return}cb=setTimeout(function dk(){cb=null;if(!bc){bc=(!G.hasFocus||G.hasFocus())}if(!bc){cn(a5);return}if(bQ()){return}var dl=new Date(),dm=a5-(dl.getTime()-cY);dm=Math.min(a5,dm);cn(dm)},dj||a5)}function bJ(){if(!cb){return}clearTimeout(cb);cb=null}function ba(){bc=true;cR=new Date().getTime()}function dd(){var dj=new Date().getTime();
|
46 |
+
return !cR||(dj-cR)>a5}function ay(){if(dd()){bQ()}bJ()}function dg(){if(aN||!a5){return}aN=true;an(T,"focus",ba);an(T,"blur",ay);ab++;e.addPlugin("HeartBeat"+ab,{unload:function(){if(aN&&dd()){bQ()}}})}function cB(dn){var dk=new Date();var dj=dk.getTime();cY=dj;if(cA&&dj<cA){var dl=cA-dj;setTimeout(dn,dl);cf(dl+50);cA+=50;return}if(cA===false){var dm=800;cA=dj+dm}dn()}function aO(){if(aC(cL)){bA=false}else{if(aC(bd)){bA=true}}}function bE(dk,dj,dl){aO();if(!bA){cJ.push(dk);return}if(!cP&&dk){if(cz&&bA){dk+="&consent=1"}cB(function(){if(cW&&a6(dk,dl,true)){cf(100);return}if(cC(dk)){c4(dk,dl)}else{cp(dk,dl)}cf(dj)})}if(!aN){dg()}}function cj(dj){if(cP){return false}return(dj&&dj.length)}function c3(dj,dn){if(!dn||dn>=dj.length){return[dj]}var dk=0;var dl=dj.length;var dm=[];for(dk;dk<dl;dk+=dn){dm.push(dj.slice(dk,dk+dn))}return dm}function df(dk,dj){if(!cj(dk)){return}if(!bA){cJ.push(dk);return}cB(function(){var dn=c3(dk,50);var dl=0,dm;for(dl;dl<dn.length;dl++){dm='{"requests":["?'+dn[dl].join('","?')+'"]}';
|
47 |
+
if(cW&&a6(dm,null,false)){cf(100)}else{c4(dm,null,false)}}cf(dj)})}function aT(dj){return bj+dj+"."+b5+"."+bn}function bX(dl,dk,dj){de(dl,"",-86400,dk,dj)}function b4(){if(bk){return"0"}if(!J(T.showModalDialog)&&J(h.cookieEnabled)){return h.cookieEnabled?"1":"0"}var dj=bj+"testcookie";de(dj,"1",undefined,bo,cX,bR);var dk=aC(dj)==="1"?"1":"0";bX(dj);return dk}function bh(){bn=b6((cX||cU)+(bo||"/")).slice(0,4)}function cG(){if(J(c8.res)){return c8}var dk,dm,dn={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(h.userAgent))){if(h.mimeTypes&&h.mimeTypes.length){for(dk in dn){if(Object.prototype.hasOwnProperty.call(dn,dk)){dm=h.mimeTypes[dn[dk]];c8[dk]=(dm&&dm.enabledPlugin)?"1":"0"}}}if(!((new RegExp("Edge[ /](\\d+[\\.\\d]+)")).test(h.userAgent))&&typeof navigator.javaEnabled!=="unknown"&&J(h.javaEnabled)&&h.javaEnabled()){c8.java="1"
|
48 |
+
}if(A(T.GearsFactory)){c8.gears="1"}c8.cookie=b4()}var dl=parseInt(X.width,10);var dj=parseInt(X.height,10);c8.res=parseInt(dl,10)+"x"+parseInt(dj,10);return c8}function bW(){var dk=aT("cvar"),dj=aC(dk);if(dj.length){dj=JSON_PIWIK.parse(dj);if(W(dj)){return dj}}return{}}function cD(){if(aQ===false){aQ=bW()}}function cQ(){var dj=cG();return b6((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(dj)+(new Date()).getTime()+Math.random()).slice(0,16)}function az(){var dj=cG();return b6((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(dj)).slice(0,6)}function bf(){return Math.floor((new Date()).getTime()/1000)}function aI(){var dk=bf();var dl=az();var dj=String(dk)+dl;return dj}function c2(dl){dl=String(dl);var dp=az();var dm=dp.length;var dn=dl.substr(-1*dm,dm);var dk=parseInt(dl.substr(0,dl.length-dm),10);if(dk&&dn&&dn===dp){var dj=bf();if(aZ<=0){return true}if(dj>=dk&&dj<=(dk+aZ)){return true}}return false}function dh(dj){if(!cM){return""}var dn=f(dj,av);if(!dn){return""}dn=String(dn);
|
49 |
+
var dl=new RegExp("^[a-zA-Z0-9]+$");if(dn.length===32&&dl.test(dn)){var dk=dn.substr(16,32);if(c2(dk)){var dm=dn.substr(0,16);return dm}}return""}function cN(){if(!bN){bN=dh(bM)}var dl=new Date(),dj=Math.round(dl.getTime()/1000),dk=aT("id"),dp=aC(dk),dn,dm;if(dp){dn=dp.split(".");dn.unshift("0");if(bN.length){dn[1]=bN}return dn}if(bN.length){dm=bN}else{if("0"===b4()){dm=""}else{dm=cQ()}}dn=["1",dm,dj,0,dj,"",""];return dn}function aY(){var dr=cN(),dm=dr[0],dn=dr[1],dk=dr[2],dj=dr[3],dp=dr[4],dl=dr[5];if(!J(dr[6])){dr[6]=""}var dq=dr[6];return{newVisitor:dm,uuid:dn,createTs:dk,visitCount:dj,currentVisitTs:dp,lastVisitTs:dl,lastEcommerceOrderTs:dq}}function aG(){var dm=new Date(),dk=dm.getTime(),dn=aY().createTs;var dj=parseInt(dn,10);var dl=(dj*1000)+cI-dk;return dl}function aL(dj){if(!b5){return}var dl=new Date(),dk=Math.round(dl.getTime()/1000);if(!J(dj)){dj=aY()}var dm=dj.uuid+"."+dj.createTs+"."+dj.visitCount+"."+dk+"."+dj.lastVisitTs+"."+dj.lastEcommerceOrderTs;de(aT("id"),dm,aG(),bo,cX,bR)
|
50 |
+
}function bL(){var dj=aC(aT("ref"));if(dj.length){try{dj=JSON_PIWIK.parse(dj);if(W(dj)){return dj}}catch(dk){}}return["","",0,""]}function bv(dk){var dj="testvalue";de("test",dj,10000,null,dk);if(aC("test")===dj){bX("test",null,dk);return true}return false}function aE(){var dk=bk;bk=false;var dj,dl;for(dj=0;dj<bt.length;dj++){dl=aT(bt[dj]);if(dl!==cL&&dl!==bd&&0!==aC(dl)){bX(dl,bo,cX)}}bk=dk}function b2(dj){b5=dj;aL()}function di(dn){if(!dn||!W(dn)){return}var dm=[];var dl;for(dl in dn){if(Object.prototype.hasOwnProperty.call(dn,dl)){dm.push(dl)}}var dp={};dm.sort();var dj=dm.length;var dk;for(dk=0;dk<dj;dk++){dp[dm[dk]]=dn[dm[dk]]}return dp}function cc(){de(aT("ses"),"1",co,bo,cX,bR)}function bg(){var dm="";var dk="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var dl=dk.length;var dj;for(dj=0;dj<6;dj++){dm+=dk.charAt(Math.floor(Math.random()*dl))}return dm}function cs(dl,dH,dI,dm){var dG,dk=new Date(),du=Math.round(dk.getTime()/1000),dr,dF,dn=1024,dO,dv,dD=aQ,dp=aT("ses"),dB=aT("ref"),dy=aT("cvar"),dz=aC(dp),dE=bL(),dK=a4||bM,ds,dj;
|
51 |
+
if(bk){aE()}if(cP){return""}var dA=aY();if(!J(dm)){dm=""}var dx=G.characterSet||G.charset;if(!dx||dx.toLowerCase()==="utf-8"){dx=null}ds=dE[0];dj=dE[1];dr=dE[2];dF=dE[3];if(!dz){var dJ=co/1000;if(!dA.lastVisitTs||(du-dA.lastVisitTs)>dJ){dA.visitCount++;dA.lastVisitTs=dA.currentVisitTs}if(!bu||!ds.length){for(dG in cq){if(Object.prototype.hasOwnProperty.call(cq,dG)){ds=f(dK,cq[dG]);if(ds.length){break}}}for(dG in bF){if(Object.prototype.hasOwnProperty.call(bF,dG)){dj=f(dK,bF[dG]);if(dj.length){break}}}}dO=d(bm);dv=dF.length?d(dF):"";if(dO.length&&!aV(dO)&&(!bu||!dv.length||aV(dv))){dF=bm}if(dF.length||ds.length){dr=du;dE=[ds,dj,dr,b1(dF.slice(0,dn))];de(dB,JSON_PIWIK.stringify(dE),c5,bo,cX)}}dl+="&idsite="+b5+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+dk.getHours()+"&m="+dk.getMinutes()+"&s="+dk.getSeconds()+"&url="+t(b1(dK))+(bm.length?"&urlref="+t(b1(bm)):"")+((bx&&bx.length)?"&uid="+t(bx):"")+"&_id="+dA.uuid+"&_idts="+dA.createTs+"&_idvc="+dA.visitCount+"&_idn="+dA.newVisitor+(ds.length?"&_rcn="+t(ds):"")+(dj.length?"&_rck="+t(dj):"")+"&_refts="+dr+"&_viewts="+dA.lastVisitTs+(String(dA.lastEcommerceOrderTs).length?"&_ects="+dA.lastEcommerceOrderTs:"")+(String(dF).length?"&_ref="+t(b1(dF.slice(0,dn))):"")+(dx?"&cs="+t(dx):"")+"&send_image=0";
|
52 |
+
var dN=cG();for(dG in dN){if(Object.prototype.hasOwnProperty.call(dN,dG)){dl+="&"+dG+"="+dN[dG]}}var dM=[];if(dH){for(dG in dH){if(Object.prototype.hasOwnProperty.call(dH,dG)&&/^dimension\d+$/.test(dG)){var dq=dG.replace("dimension","");dM.push(parseInt(dq,10));dM.push(String(dq));dl+="&"+dG+"="+t(dH[dG]);delete dH[dG]}}}if(dH&&B(dH)){dH=null}for(dG in bl){if(Object.prototype.hasOwnProperty.call(bl,dG)){var dw=(-1===M(dM,dG));if(dw){dl+="&dimension"+dG+"="+t(bl[dG])}}}if(dH){dl+="&data="+t(JSON_PIWIK.stringify(dH))}else{if(ao){dl+="&data="+t(JSON_PIWIK.stringify(ao))}}function dt(dP,dQ){var dR=JSON_PIWIK.stringify(dP);if(dR.length>2){return"&"+dQ+"="+t(dR)}return""}var dL=di(bV);var dC=di(cl);dl+=dt(dL,"cvar");dl+=dt(dC,"e_cvar");if(aQ){dl+=dt(aQ,"_cvar");for(dG in dD){if(Object.prototype.hasOwnProperty.call(dD,dG)){if(aQ[dG][0]===""||aQ[dG][1]===""){delete aQ[dG]}}}if(bP){de(dy,JSON_PIWIK.stringify(aQ),co,bo,cX)}}if(a2){if(cm){dl+=">_ms="+cm}else{if(i&&i.timing&&i.timing.requestStart&&i.timing.responseEnd){dl+=">_ms="+(i.timing.responseEnd-i.timing.requestStart)
|
53 |
+
}}}if(aK){dl+="&pv_id="+aK}dA.lastEcommerceOrderTs=J(dm)&&String(dm).length?dm:dA.lastEcommerceOrderTs;aL(dA);cc();dl+=ac(dI,{tracker:bH,request:dl});if(cZ.length){dl+="&"+cZ}if(A(ca)){dl=ca(dl)}return dl}bQ=function a7(){var dj=new Date();dj=dj.getTime();if(!cY){return false}if((cY+(1000*c7))<=dj){return false}if(cY+a5<=dj){bH.ping();return true}return false};function bp(dm,dl,ds,dn,dj,dv){var dq="idgoal=0",dr,dk=new Date(),dt=[],du,dp=String(dm).length;if(dp){dq+="&ec_id="+t(dm);dr=Math.round(dk.getTime()/1000)}dq+="&revenue="+dl;if(String(ds).length){dq+="&ec_st="+ds}if(String(dn).length){dq+="&ec_tx="+dn}if(String(dj).length){dq+="&ec_sh="+dj}if(String(dv).length){dq+="&ec_dt="+dv}if(c0){for(du in c0){if(Object.prototype.hasOwnProperty.call(c0,du)){if(!J(c0[du][1])){c0[du][1]=""}if(!J(c0[du][2])){c0[du][2]=""}if(!J(c0[du][3])||String(c0[du][3]).length===0){c0[du][3]=0}if(!J(c0[du][4])||String(c0[du][4]).length===0){c0[du][4]=1}dt.push(c0[du])}}dq+="&ec_items="+t(JSON_PIWIK.stringify(dt))
|
54 |
+
}dq=cs(dq,ao,"ecommerce",dr);bE(dq,bI);if(dp){c0={}}}function bY(dj,dn,dm,dl,dk,dp){if(String(dj).length&&J(dn)){bp(dj,dn,dm,dl,dk,dp)}}function br(dj){if(J(dj)){bp("",dj,"","","","")}}function bZ(dk,dm,dl){aK=bg();var dj=cs("action_name="+t(al(dk||bi)),dm,"log");bE(dj,bI,dl)}function a0(dl,dk){var dm,dj="(^| )(piwik[_-]"+dk;if(dl){for(dm=0;dm<dl.length;dm++){dj+="|"+dl[dm]}}dj+=")( |$)";return new RegExp(dj)}function aU(dj){return(aD&&dj&&0===String(dj).indexOf(aD))}function cu(dn,dj,dp,dk){if(aU(dj)){return 0}var dm=a0(bK,"download"),dl=a0(a8,"link"),dq=new RegExp("\\.("+c6.join("|")+")([?&#]|$)","i");if(dl.test(dn)){return"link"}if(dk||dm.test(dn)||dq.test(dj)){return"download"}if(dp){return 0}return"link"}function au(dk){var dj;dj=dk.parentNode;while(dj!==null&&J(dj)){if(ae.isLinkElement(dk)){break}dk=dj;dj=dk.parentNode}return dk}function dc(dp){dp=au(dp);if(!ae.hasNodeAttribute(dp,"href")){return}if(!J(dp.href)){return}var dn=ae.getAttributeValueFromNode(dp,"href");if(aU(dn)){return
|
55 |
+
}var dk=dp.pathname||ck(dp.href);var dq=dp.hostname||d(dp.href);var dr=dq.toLowerCase();var dl=dp.href.replace(dq,dr);var dm=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!dm.test(dl)){var dj=cu(dp.className,dl,ar(dr,dk),ae.hasNodeAttribute(dp,"download"));if(dj){return{type:dj,href:dl}}}}function aP(dj,dk,dl,dm){var dn=v.buildInteractionRequestParams(dj,dk,dl,dm);if(!dn){return}return cs(dn,null,"contentInteraction")}function cK(dl,dm,dr,dj,dk){if(!J(dl)){return}if(aU(dl)){return dl}var dp=v.toAbsoluteUrl(dl);var dn="redirecturl="+t(dp)+"&";dn+=aP(dm,dr,dj,(dk||dl));var dq="&";if(aD.indexOf("?")<0){dq="?"}return aD+dq+dn}function bb(dj,dk){if(!dj||!dk){return false}var dl=v.findTargetNode(dj);if(v.shouldIgnoreInteraction(dl)){return false}dl=v.findTargetNodeNoDefault(dj);if(dl&&!V(dl,dk)){return false}return true}function ct(dl,dk,dn){if(!dl){return}var dj=v.findParentContentNode(dl);if(!dj){return}if(!bb(dj,dl)){return}var dm=v.buildContentBlock(dj);
|
56 |
+
if(!dm){return}if(!dm.target&&dn){dm.target=dn}return v.buildInteractionRequestParams(dk,dm.name,dm.piece,dm.target)}function aW(dk){if(!b9||!b9.length){return false}var dj,dl;for(dj=0;dj<b9.length;dj++){dl=b9[dj];if(dl&&dl.name===dk.name&&dl.piece===dk.piece&&dl.target===dk.target){return true}}return false}function bD(dm){if(!dm){return false}var dq=v.findTargetNode(dm);if(!dq||v.shouldIgnoreInteraction(dq)){return false}var dr=dc(dq);if(c9&&dr&&dr.type){return false}if(ae.isLinkElement(dq)&&ae.hasNodeAttributeWithValue(dq,"href")){var dj=String(ae.getAttributeValueFromNode(dq,"href"));if(0===dj.indexOf("#")){return false}if(aU(dj)){return true}if(!v.isUrlToCurrentDomain(dj)){return false}var dn=v.buildContentBlock(dm);if(!dn){return}var dl=dn.name;var ds=dn.piece;var dp=dn.target;if(!ae.hasNodeAttributeWithValue(dq,v.CONTENT_TARGET_ATTR)||dq.wasContentTargetAttrReplaced){dq.wasContentTargetAttrReplaced=true;dp=v.toAbsoluteUrl(dj);ae.setAnyAttribute(dq,v.CONTENT_TARGET_ATTR,dp)}var dk=cK(dj,"click",dl,ds,dp);
|
57 |
+
v.setHrefAttribute(dq,dk);return true}return false}function aM(dk){if(!dk||!dk.length){return}var dj;for(dj=0;dj<dk.length;dj++){bD(dk[dj])}}function aX(dj){return function(dk){if(!dj){return}var dn=v.findParentContentNode(dj);var dp;if(dk){dp=dk.target||dk.srcElement}if(!dp){dp=dj}if(!bb(dn,dp)){return}cf(bI);if(ae.isLinkElement(dj)&&ae.hasNodeAttributeWithValue(dj,"href")&&ae.hasNodeAttributeWithValue(dj,v.CONTENT_TARGET_ATTR)){var dl=ae.getAttributeValueFromNode(dj,"href");if(!aU(dl)&&dj.wasContentTargetAttrReplaced){ae.setAnyAttribute(dj,v.CONTENT_TARGET_ATTR,"")}}var dt=dc(dj);if(ap&&dt&&dt.type){return dt.type}if(bD(dn)){return"href"}var dq=v.buildContentBlock(dn);if(!dq){return}var dm=dq.name;var du=dq.piece;var ds=dq.target;var dr=aP("click",dm,du,ds);if(dr){bE(dr,bI)}return dr}}function b0(dl){if(!dl||!dl.length){return}var dj,dk;for(dj=0;dj<dl.length;dj++){dk=v.findTargetNode(dl[dj]);if(dk&&!dk.contentInteractionTrackingSetupDone){dk.contentInteractionTrackingSetupDone=true;an(dk,"click",aX(dk))
|
58 |
+
}}}function bw(dl,dm){if(!dl||!dl.length){return[]}var dj,dk;for(dj=0;dj<dl.length;dj++){if(aW(dl[dj])){dl.splice(dj,1);dj--}else{b9.push(dl[dj])}}if(!dl||!dl.length){return[]}aM(dm);b0(dm);var dn=[];for(dj=0;dj<dl.length;dj++){dk=cs(v.buildImpressionRequestParams(dl[dj].name,dl[dj].piece,dl[dj].target),undefined,"contentImpressions");if(dk){dn.push(dk)}}return dn}function cy(dk){var dj=v.collectContent(dk);return bw(dj,dk)}function a9(dk){if(!dk||!dk.length){return[]}var dj;for(dj=0;dj<dk.length;dj++){if(!v.isNodeVisible(dk[dj])){dk.splice(dj,1);dj--}}if(!dk||!dk.length){return[]}return cy(dk)}function aF(dl,dj,dk){var dm=v.buildImpressionRequestParams(dl,dj,dk);return cs(dm,null,"contentImpression")}function db(dm,dk){if(!dm){return}var dj=v.findParentContentNode(dm);var dl=v.buildContentBlock(dj);if(!dl){return}if(!dk){dk="Unknown"}return aP(dk,dl.name,dl.piece,dl.target)}function cO(dk,dm,dj,dl){return"e_c="+t(dk)+"&e_a="+t(dm)+(J(dj)?"&e_n="+t(dj):"")+(J(dl)?"&e_v="+t(dl):"")}function at(dl,dn,dj,dm,dq,dp){if(a(String(dl)).length===0||a(String(dn)).length===0){ak("Error while logging event: Parameters `category` and `action` must not be empty or filled with whitespaces");
|
59 |
+
return false}var dk=cs(cO(dl,dn,dj,dm),dq,"event");bE(dk,bI,dp)}function b7(dj,dm,dk,dn){var dl=cs("search="+t(dj)+(dm?"&search_cat="+t(dm):"")+(J(dk)?"&search_count="+dk:""),dn,"sitesearch");bE(dl,bI)}function cT(dj,dn,dm,dl){var dk=cs("idgoal="+dj+(dn?"&revenue="+dn:""),dm,"goal");bE(dk,bI,dl)}function c1(dm,dj,dr,dq,dl){var dp=dj+"="+t(b1(dm));var dk=ct(dl,"click",dm);if(dk){dp+="&"+dk}var dn=cs(dp,dr,"link");bE(dn,bI,dq)}function bT(dk,dj){if(dk!==""){return dk+dj.charAt(0).toUpperCase()+dj.slice(1)}return dj}function cg(dp){var dn,dj,dm=["","webkit","ms","moz"],dl;if(!be){for(dj=0;dj<dm.length;dj++){dl=dm[dj];if(Object.prototype.hasOwnProperty.call(G,bT(dl,"hidden"))){if(G[bT(dl,"visibilityState")]==="prerender"){dn=true}break}}}if(dn){an(G,dl+"visibilitychange",function dk(){G.removeEventListener(dl+"visibilitychange",dk,false);dp()});return}dp()}function bq(){var dk=aY().uuid;var dj=aI();return dk+dj}function ci(dj){if(!dj){return}if(!ae.hasNodeAttribute(dj,"href")){return}var dk=ae.getAttributeValueFromNode(dj,"href");
|
60 |
+
if(!dk||aU(dk)){return}dk=k(dk,av);var dl=bq();dk=F(dk,av,dl);ae.setAnyAttribute(dj,"href",dk)}function aA(dm){var dn=ae.getAttributeValueFromNode(dm,"href");if(!dn){return false}dn=String(dn);var dk=dn.indexOf("//")===0||dn.indexOf("http://")===0||dn.indexOf("https://")===0;if(!dk){return false}var dj=dm.pathname||ck(dm.href);var dl=(dm.hostname||d(dm.href)).toLowerCase();if(ar(dl,dj)){if(!cF(cU,L(dl))){return true}return false}return false}function cE(dj){var dk=dc(dj);if(dk&&dk.type){dk.href=p(dk.href);c1(dk.href,dk.type,undefined,null,dj);return}if(cM){dj=au(dj);if(aA(dj)){ci(dj)}}}function cv(){return G.all&&!G.addEventListener}function cV(dj){var dl=dj.which;var dk=(typeof dj.button);if(!dl&&dk!=="undefined"){if(cv()){if(dj.button&1){dl=1}else{if(dj.button&2){dl=3}else{if(dj.button&4){dl=2}}}}else{if(dj.button===0||dj.button==="0"){dl=1}else{if(dj.button&1){dl=2}else{if(dj.button&2){dl=3}}}}}return dl}function bS(dj){switch(cV(dj)){case 1:return"left";case 2:return"middle";case 3:return"right"
|
61 |
+
}}function a1(dj){return dj.target||dj.srcElement}function aB(dj){return function(dm){dm=dm||T.event;var dl=bS(dm);var dn=a1(dm);if(dm.type==="click"){var dk=false;if(dj&&dl==="middle"){dk=true}if(dn&&!dk){cE(dn)}}else{if(dm.type==="mousedown"){if(dl==="middle"&&dn){aR=dl;bz=dn}else{aR=bz=null}}else{if(dm.type==="mouseup"){if(dl===aR&&dn===bz){cE(dn)}aR=bz=null}else{if(dm.type==="contextmenu"){cE(dn)}}}}}}function aq(dl,dk){var dj=typeof dk;if(dj==="undefined"){dk=true}an(dl,"click",aB(dk),false);if(dk){an(dl,"mouseup",aB(dk),false);an(dl,"mousedown",aB(dk),false);an(dl,"contextmenu",aB(dk),false)}}function bC(dl,dn){ap=true;var dm,dk=a0(by,"ignore"),dp=G.links,dj=null,dq=null;if(dp){for(dm=0;dm<dp.length;dm++){dj=dp[dm];if(!dk.test(dj.className)){dq=typeof dj.piwikTrackers;if("undefined"===dq){dj.piwikTrackers=[]}if(-1===M(dj.piwikTrackers,dn)){dj.piwikTrackers.push(dn);aq(dj,dl)}}}}}function aS(dk,dn,dp){if(ce){return true}ce=true;var dq=false;var dm,dl;function dj(){dq=true}n(function(){function dr(dt){setTimeout(function(){if(!ce){return
|
62 |
+
}dq=false;dp.trackVisibleContentImpressions();dr(dt)},dt)}function ds(dt){setTimeout(function(){if(!ce){return}if(dq){dq=false;dp.trackVisibleContentImpressions()}ds(dt)},dt)}if(dk){dm=["scroll","resize"];for(dl=0;dl<dm.length;dl++){if(G.addEventListener){G.addEventListener(dm[dl],dj,false)}else{T.attachEvent("on"+dm[dl],dj)}}ds(100)}if(dn&&dn>0){dn=parseInt(dn,10);dr(dn)}})}var bB={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var dj=this.requests;this.requests=[];if(dj.length===1){bE(dj[0],bI)}else{df(dj,bI)}},push:function(dj){if(!dj){return}if(m||!this.enabled){bE(dj,bI);return}bB.requests.push(dj);if(this.timeout){clearTimeout(this.timeout);this.timeout=null}this.timeout=setTimeout(function(){bB.timeout=null;bB.sendRequests()},bB.interval);var dk="RequestQueue"+aw;if(!Object.prototype.hasOwnProperty.call(b,dk)){b[dk]={unload:function(){if(bB.timeout){clearTimeout(bB.timeout)}bB.sendRequests()}}}}};bh();aL();this.hasConsent=function(){return bA};this.getVisitorId=function(){return aY().uuid
|
63 |
+
};this.getVisitorInfo=function(){return cN()};this.getAttributionInfo=function(){return bL()};this.getAttributionCampaignName=function(){return bL()[0]};this.getAttributionCampaignKeyword=function(){return bL()[1]};this.getAttributionReferrerTimestamp=function(){return bL()[2]};this.getAttributionReferrerUrl=function(){return bL()[3]};this.setTrackerUrl=function(dj){aD=dj};this.getTrackerUrl=function(){return aD};this.getPiwikUrl=function(){return O(this.getTrackerUrl(),bG)};this.addTracker=function(dj,dl){if(!J(dj)||null===dj){dj=this.getTrackerUrl()}var dk=new Q(dj,dl);I.push(dk);e.trigger("TrackerAdded",[this]);return dk};this.getSiteId=function(){return b5};this.setSiteId=function(dj){b2(dj)};this.resetUserId=function(){bx=""};this.setUserId=function(dj){if(Y(dj)){bx=dj}};this.getUserId=function(){return bx};this.setCustomData=function(dj,dk){if(W(dj)){ao=dj}else{if(!ao){ao={}}ao[dj]=dk}};this.getCustomData=function(){return ao};this.setCustomRequestProcessing=function(dj){ca=dj};this.appendToTrackingUrl=function(dj){cZ=dj
|
64 |
+
};this.getRequest=function(dj){return cs(dj)};this.addPlugin=function(dj,dk){b[dj]=dk};this.setCustomDimension=function(dj,dk){dj=parseInt(dj,10);if(dj>0){if(!J(dk)){dk=""}if(!w(dk)){dk=String(dk)}bl[dj]=dk}};this.getCustomDimension=function(dj){dj=parseInt(dj,10);if(dj>0&&Object.prototype.hasOwnProperty.call(bl,dj)){return bl[dj]}};this.deleteCustomDimension=function(dj){dj=parseInt(dj,10);if(dj>0){delete bl[dj]}};this.setCustomVariable=function(dk,dj,dn,dl){var dm;if(!J(dl)){dl="visit"}if(!J(dj)){return}if(!J(dn)){dn=""}if(dk>0){dj=!w(dj)?String(dj):dj;dn=!w(dn)?String(dn):dn;dm=[dj.slice(0,bs),dn.slice(0,bs)];if(dl==="visit"||dl===2){cD();aQ[dk]=dm}else{if(dl==="page"||dl===3){bV[dk]=dm}else{if(dl==="event"){cl[dk]=dm}}}}};this.getCustomVariable=function(dk,dl){var dj;if(!J(dl)){dl="visit"}if(dl==="page"||dl===3){dj=bV[dk]}else{if(dl==="event"){dj=cl[dk]}else{if(dl==="visit"||dl===2){cD();dj=aQ[dk]}}}if(!J(dj)||(dj&&dj[0]==="")){return false}return dj};this.deleteCustomVariable=function(dj,dk){if(this.getCustomVariable(dj,dk)){this.setCustomVariable(dj,"","",dk)
|
65 |
+
}};this.deleteCustomVariables=function(dj){if(dj==="page"||dj===3){bV={}}else{if(dj==="event"){cl={}}else{if(dj==="visit"||dj===2){aQ={}}}}};this.storeCustomVariablesInCookie=function(){bP=true};this.setLinkTrackingTimer=function(dj){bI=dj};this.getLinkTrackingTimer=function(){return bI};this.setDownloadExtensions=function(dj){if(w(dj)){dj=dj.split("|")}c6=dj};this.addDownloadExtensions=function(dk){var dj;if(w(dk)){dk=dk.split("|")}for(dj=0;dj<dk.length;dj++){c6.push(dk[dj])}};this.removeDownloadExtensions=function(dl){var dk,dj=[];if(w(dl)){dl=dl.split("|")}for(dk=0;dk<c6.length;dk++){if(M(dl,c6[dk])===-1){dj.push(c6[dk])}}c6=dj};this.setDomains=function(dj){ax=w(dj)?[dj]:dj;var dn=false,dl=0,dk;for(dl;dl<ax.length;dl++){dk=String(ax[dl]);if(cF(cU,L(dk))){dn=true;break}var dm=ck(dk);if(dm&&dm!=="/"&&dm!=="/*"){dn=true;break}}if(!dn){ax.push(cU)}};this.enableCrossDomainLinking=function(){cM=true};this.disableCrossDomainLinking=function(){cM=false};this.isCrossDomainLinkingEnabled=function(){return cM
|
66 |
+
};this.setCrossDomainLinkingTimeout=function(dj){aZ=dj};this.getCrossDomainLinkingUrlParameter=function(){return t(av)+"="+t(bq())};this.setIgnoreClasses=function(dj){by=w(dj)?[dj]:dj};this.setRequestMethod=function(dj){da=dj||ch};this.setRequestContentType=function(dj){cw=dj||aH};this.setReferrerUrl=function(dj){bm=dj};this.setCustomUrl=function(dj){a4=bU(bM,dj)};this.getCurrentUrl=function(){return a4||bM};this.setDocumentTitle=function(dj){bi=dj};this.setAPIUrl=function(dj){bG=dj};this.setDownloadClasses=function(dj){bK=w(dj)?[dj]:dj};this.setLinkClasses=function(dj){a8=w(dj)?[dj]:dj};this.setCampaignNameKey=function(dj){cq=w(dj)?[dj]:dj};this.setCampaignKeywordKey=function(dj){bF=w(dj)?[dj]:dj};this.discardHashTag=function(dj){bO=dj};this.setCookieNamePrefix=function(dj){bj=dj;aQ=bW()};this.setCookieDomain=function(dj){var dk=L(dj);if(bv(dk)){cX=dk;bh()}};this.getCookieDomain=function(){return cX};this.hasCookies=function(){return"1"===b4()};this.setSessionCookie=function(dl,dk,dj){if(!dl){throw new Error("Missing cookie name")
|
67 |
+
}if(!J(dj)){dj=co}bt.push(dl);de(aT(dl),dk,dj,bo,cX)};this.getCookie=function(dk){var dj=aC(aT(dk));if(dj===0){return null}return dj};this.setCookiePath=function(dj){bo=dj;bh()};this.getCookiePath=function(dj){return bo};this.setVisitorCookieTimeout=function(dj){cI=dj*1000};this.setSessionCookieTimeout=function(dj){co=dj*1000};this.getSessionCookieTimeout=function(){return co};this.setReferralCookieTimeout=function(dj){c5=dj*1000};this.setConversionAttributionFirstReferrer=function(dj){bu=dj};this.setSecureCookie=function(dj){bR=dj};this.disableCookies=function(){bk=true;c8.cookie="0";if(b5){aE()}};this.deleteCookies=function(){aE()};this.setDoNotTrack=function(dk){var dj=h.doNotTrack||h.msDoNotTrack;cP=dk&&(dj==="yes"||dj==="1");if(cP){this.disableCookies()}};this.alwaysUseSendBeacon=function(){cW=true};this.addListener=function(dk,dj){aq(dk,dj)};this.enableLinkTracking=function(dk){c9=true;var dj=this;cg(function(){q(function(){bC(dk,dj)})})};this.enableJSErrorTracking=function(){if(cS){return
|
68 |
+
}cS=true;var dj=T.onerror;T.onerror=function(dp,dm,dl,dn,dk){cg(function(){var dq="JavaScript Errors";var dr=dm+":"+dl;if(dn){dr+=":"+dn}at(dq,dr,dp)});if(dj){return dj(dp,dm,dl,dn,dk)}return false}};this.disablePerformanceTracking=function(){a2=false};this.setGenerationTimeMs=function(dj){cm=parseInt(dj,10)};this.setVisitStandardLength=function(dj){dj=Math.max(dj,5);c7=dj};this.enableHeartBeatTimer=function(dj){dj=Math.max(dj,5);a5=(dj||15)*1000;if(cY!==null){dg()}};this.disableHeartBeatTimer=function(){bJ();if(a5||aN){if(T.removeEventListener){T.removeEventListener("focus",ba);T.removeEventListener("blur",ay)}else{if(T.detachEvent){T.detachEvent("onfocus",ba);T.detachEvent("onblur",ay)}}}a5=null;aN=false};this.killFrame=function(){if(T.location!==T.top.location){T.top.location=T.location}};this.redirectFile=function(dj){if(T.location.protocol==="file:"){T.location=dj}};this.setCountPreRendered=function(dj){be=dj};this.trackGoal=function(dj,dm,dl,dk){cg(function(){cT(dj,dm,dl,dk)})};this.trackLink=function(dk,dj,dm,dl){cg(function(){c1(dk,dj,dm,dl)
|
69 |
+
})};this.getNumTrackedPageViews=function(){return cr};this.trackPageView=function(dj,dl,dk){b9=[];cJ=[];if(N(b5)){cg(function(){Z(aD,bG,b5)})}else{cg(function(){cr++;bZ(dj,dl,dk)})}};this.trackAllContentImpressions=function(){if(N(b5)){return}cg(function(){q(function(){var dj=v.findContentNodes();var dk=cy(dj);df(dk,bI)})})};this.trackVisibleContentImpressions=function(dj,dk){if(N(b5)){return}if(!J(dj)){dj=true}if(!J(dk)){dk=750}aS(dj,dk,this);cg(function(){n(function(){var dl=v.findContentNodes();var dm=a9(dl);df(dm,bI)})})};this.trackContentImpression=function(dl,dj,dk){if(N(b5)){return}dl=a(dl);dj=a(dj);dk=a(dk);if(!dl){return}dj=dj||"Unknown";cg(function(){var dm=aF(dl,dj,dk);bE(dm,bI)})};this.trackContentImpressionsWithinNode=function(dj){if(N(b5)||!dj){return}cg(function(){if(ce){n(function(){var dk=v.findContentNodesWithinNode(dj);var dl=a9(dk);df(dl,bI)})}else{q(function(){var dk=v.findContentNodesWithinNode(dj);var dl=cy(dk);df(dl,bI)})}})};this.trackContentInteraction=function(dl,dm,dj,dk){if(N(b5)){return
|
70 |
+
}dl=a(dl);dm=a(dm);dj=a(dj);dk=a(dk);if(!dl||!dm){return}dj=dj||"Unknown";cg(function(){var dn=aP(dl,dm,dj,dk);if(dn){bE(dn,bI)}})};this.trackContentInteractionNode=function(dk,dj){if(N(b5)||!dk){return}cg(function(){var dl=db(dk,dj);if(dl){bE(dl,bI)}})};this.logAllContentBlocksOnPage=function(){var dl=v.findContentNodes();var dj=v.collectContent(dl);var dk=typeof console;if(dk!=="undefined"&&console&&console.log){console.log(dj)}};this.trackEvent=function(dk,dm,dj,dl,dp,dn){cg(function(){at(dk,dm,dj,dl,dp,dn)})};this.trackSiteSearch=function(dj,dl,dk,dm){b9=[];cg(function(){b7(dj,dl,dk,dm)})};this.setEcommerceView=function(dm,dj,dl,dk){if(Y(dl)){dl=String(dl)}if(!J(dl)||dl===null||dl===false||!dl.length){dl=""}else{if(dl instanceof Array){dl=JSON_PIWIK.stringify(dl)}}bV[5]=["_pkc",dl];if(J(dk)&&dk!==null&&dk!==false&&String(dk).length){bV[2]=["_pkp",dk]}if(!Y(dm)&&!Y(dj)){return}if(Y(dm)){bV[3]=["_pks",dm]}if(!Y(dj)){dj=""}bV[4]=["_pkn",dj]};this.getEcommerceItems=function(){return JSON.parse(JSON.stringify(c0))
|
71 |
+
};this.addEcommerceItem=function(dn,dj,dl,dk,dm){if(Y(dn)){c0[dn]=[String(dn),dj,dl,dk,dm]}};this.removeEcommerceItem=function(dj){if(Y(dj)){dj=String(dj);delete c0[dj]}};this.clearEcommerceCart=function(){c0={}};this.trackEcommerceOrder=function(dj,dn,dm,dl,dk,dp){bY(dj,dn,dm,dl,dk,dp)};this.trackEcommerceCartUpdate=function(dj){br(dj)};this.trackRequest=function(dk,dm,dl,dj){cg(function(){var dn=cs(dk,dm,dj);bE(dn,bI,dl)})};this.ping=function(){this.trackRequest("ping=1",null,null,"ping")};this.disableQueueRequest=function(){bB.enabled=false};this.setRequestQueueInterval=function(dj){if(dj<1000){throw new Error("Request queue interval needs to be at least 1000ms")}bB.interval=dj};this.queueRequest=function(dj){cg(function(){var dk=cs(dj);bB.push(dk)})};this.isConsentRequired=function(){return cz};this.getRememberedConsent=function(){var dj=aC(bd);if(aC(cL)){if(dj){bX(bd,bo,cX)}return null}if(!dj||dj===0){return null}return dj};this.hasRememberedConsent=function(){return !!this.getRememberedConsent()
|
72 |
+
};this.requireConsent=function(){cz=true;bA=this.hasRememberedConsent();x++;b["CoreConsent"+x]={unload:function(){if(!bA){aE()}}}};this.setConsentGiven=function(){bA=true;bX(cL,bo,cX);var dk,dj;for(dk=0;dk<cJ.length;dk++){dj=typeof cJ[dk];if(dj==="string"){bE(cJ[dk],bI)}else{if(dj==="object"){df(cJ[dk],bI)}}}cJ=[]};this.rememberConsentGiven=function(dk){if(dk){dk=dk*60*60*1000}else{dk=30*365*24*60*60*1000}this.setConsentGiven();var dj=new Date().getTime();de(bd,dj,dk,bo,cX,bR)};this.forgetConsentGiven=function(){var dj=30*365*24*60*60*1000;bX(bd,bo,cX);de(cL,new Date().getTime(),dj,bo,cX,bR);this.requireConsent()};this.isUserOptedOut=function(){return !bA};this.optUserOut=this.forgetConsentGiven;this.forgetUserOptOut=this.rememberConsentGiven;e.trigger("TrackerSetup",[this])}function H(){return{push:af}}function c(au,at){var av={};var aq,ar;for(aq=0;aq<at.length;aq++){var ao=at[aq];av[ao]=1;for(ar=0;ar<au.length;ar++){if(au[ar]&&au[ar][0]){var ap=au[ar][0];if(ao===ap){af(au[ar]);delete au[ar];
|
73 |
if(av[ap]>1&&ap!=="addTracker"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: https://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","requireConsent","setConsentGiven"];function ad(ao,aq){var ap=new Q(ao,aq);I.push(ap);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();e.trigger("TrackerAdded",[ap]);return ap}an(T,"beforeunload",ai,false);an(T,"message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=e.getAsyncTrackers();for(ar=0;ar<at.length;ar++){ap=d(at[ar].getPiwikUrl());
|
74 |
if(ap===ax){aw=at[ar];break}}if(!aw){return}var aq=null;try{aq=JSON.parse(au.data)}catch(av){return}if(!aq){return}function ao(aA){var aC=G.getElementsByTagName("iframe");for(ar=0;ar<aC.length;ar++){var aB=aC[ar];var ay=d(aB.src);if(aB.contentWindow&&J(aB.contentWindow.postMessage)&&ay===ax){var az=JSON.stringify(aA);aB.contentWindow.postMessage(az,"*")}}}if(J(aq.maq_initial_value)){ao({maq_opted_in:aq.maq_initial_value&&aw.hasConsent(),maq_url:aw.getPiwikUrl(),maq_optout_by_default:aw.isConsentRequired()})}else{if(J(aq.maq_opted_in)){at=e.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getPiwikUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;e={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:n,onReady:q,isNodeVisible:j,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]
|
75 |
}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||T,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ao,ap){if(!J(ap)){ap=this.getAsyncTracker().getSiteId()}if(!J(ao)){ao=this.getAsyncTracker().getTrackerUrl()}return new Q(ao,ap)},getAsyncTrackers:function(){return I},addTracker:function(ao,aq){var ap;if(!I.length){ap=ad(ao,aq)}else{ap=I[0].addTracker(ao,aq)}return ap},getAsyncTracker:function(ap,at){var ar;if(I&&I.length&&I[0]){ar=I[0]}else{return ad(ap,at)}if(!at&&!ap){return ar}if((!J(at)||null===at)&&ar){at=ar.getSiteId()}if((!J(ap)||null===ap)&&ar){ap=ar.getTrackerUrl()}var aq,ao=0;for(ao;ao<I.length;ao++){aq=I[ao];if(aq&&String(aq.getSiteId())===String(at)&&aq.getTrackerUrl()===ap){return aq}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])
|
app/piwik.js
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
* @license https://piwik.org/free-software/bsd/ BSD-3 Clause (also in js/LICENSE.txt)
|
9 |
* @license magnet:?xt=urn:btih:c80d50af7d3db9be66a4d0a86db0286e4fd33292&dn=bsd-3-clause.txt BSD-3-Clause
|
10 |
*/
|
11 |
-
;if(typeof
|
12 |
/*!! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */
|
13 |
(function(){var c=typeof define==="function"&&define.amd;var e={"function":true,object:true};var h=e[typeof a]&&a&&!a.nodeType&&a;var i=e[typeof window]&&window||this,b=h&&e[typeof module]&&module&&!module.nodeType&&typeof global=="object"&&global;if(b&&(b.global===b||b.window===b||b.self===b)){i=b}function j(ab,V){ab||(ab=i.Object());V||(V=i.Object());
|
14 |
var K=ab.Number||i.Number,R=ab.String||i.String,x=ab.Object||i.Object,S=ab.Date||i.Date,T=ab.SyntaxError||i.SyntaxError,aa=ab.TypeError||i.TypeError,J=ab.Math||i.Math,Y=ab.JSON||i.JSON;if(typeof Y=="object"&&Y){V.stringify=Y.stringify;V.parse=Y.parse}var n=x.prototype,u=n.toString,r,m,L;var B=new S(-3509827334573292);try{B=B.getUTCFullYear()==-109252&&B.getUTCMonth()===0&&B.getUTCDate()===1&&B.getUTCHours()==10&&B.getUTCMinutes()==37&&B.getUTCSeconds()==6&&B.getUTCMilliseconds()==708}catch(v){}function o(ac){if(o[ac]!==L){return o[ac]}var ad;if(ac=="bug-string-char-index"){ad="a"[0]!="a"}else{if(ac=="json"){ad=o("json-stringify")&&o("json-parse")}else{var ak,ah='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if(ac=="json-stringify"){var ai=V.stringify,aj=typeof ai=="function"&&B;if(aj){(ak=function(){return 1}).toJSON=ak;try{aj=ai(0)==="0"&&ai(new K())==="0"&&ai(new R())=='""'&&ai(u)===L&&ai(L)===L&&ai()===L&&ai(ak)==="1"&&ai([ak])=="[1]"&&ai([L])=="[null]"&&ai(null)=="null"&&ai([L,u,null])=="[null,null,null]"&&ai({a:[ak,true,false,null,"\x00\b\n\f\r\t"]})==ah&&ai(null,ak)==="1"&&ai([1,2],null,1)=="[\n 1,\n 2\n]"&&ai(new S(-8640000000000000))=='"-271821-04-20T00:00:00.000Z"'&&ai(new S(8640000000000000))=='"+275760-09-13T00:00:00.000Z"'&&ai(new S(-62198755200000))=='"-000001-01-01T00:00:00.000Z"'&&ai(new S(-1))=='"1969-12-31T23:59:59.999Z"'
|
@@ -38,38 +38,38 @@ if(!aq){aq="/"}}return aq},findMediaUrlInNode:function(at){if(!at){return}var aq
|
|
38 |
if(aq&&au.offsetTop){aq=(au.offsetTop+at.height)>0}var ap=ar.clientWidth;if(T.innerWidth&&ap>T.innerWidth){ap=T.innerWidth}var ao=ar.clientHeight;if(T.innerHeight&&ao>T.innerHeight){ao=T.innerHeight}return((at.bottom>0||aq)&&at.right>0&&at.left<ap&&((at.top<ao)||aq))},isNodeVisible:function(ap){var ao=j(ap);var aq=this.isOrWasNodeInViewport(ap);return ao&&aq},buildInteractionRequestParams:function(ao,ap,aq,ar){var at="";if(ao){at+="c_i="+t(ao)}if(ap){if(at){at+="&"}at+="c_n="+t(ap)}if(aq){if(at){at+="&"}at+="c_p="+t(aq)}if(ar){if(at){at+="&"}at+="c_t="+t(ar)}return at},buildImpressionRequestParams:function(ao,ap,aq){var ar="c_n="+t(ao)+"&c_p="+t(ap);if(aq){ar+="&c_t="+t(aq)}return ar},buildContentBlock:function(aq){if(!aq){return}var ao=this.findContentName(aq);var ap=this.findContentPiece(aq);var ar=this.findContentTarget(aq);ao=this.trim(ao);ap=this.trim(ap);ar=this.trim(ar);return{name:ao||"Unknown",piece:ap||"Unknown",target:ar||""}},collectContent:function(ar){if(!ar||!ar.length){return[]
|
39 |
}var aq=[];var ao,ap;for(ao=0;ao<ar.length;ao++){ap=this.buildContentBlock(ar[ao]);if(J(ap)){aq.push(ap)}}return aq},setLocation:function(ao){this.location=ao},getLocation:function(){var ao=this.location||T.location;if(!ao.origin){ao.origin=ao.protocol+"//"+ao.hostname+(ao.port?":"+ao.port:"")}return ao},toAbsoluteUrl:function(ap){if((!ap||String(ap)!==ap)&&ap!==""){return ap}if(""===ap){return this.getLocation().href}if(ap.search(/^\/\//)!==-1){return this.getLocation().protocol+ap}if(ap.search(/:\/\//)!==-1){return ap}if(0===ap.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.search("^[a-zA-Z]{2,11}:")){return ap}if(ap.search(/^\//)!==-1){return this.getLocation().origin+ap}var ao="(.*/)";var aq=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ao))[0];return aq+ap},isUrlToCurrentDomain:function(ap){var aq=this.toAbsoluteUrl(ap);if(!aq){return false
|
40 |
}var ao=this.getLocation().origin;if(ao===aq){return true}if(0===String(aq).indexOf(ao)){if(":"===String(aq).substr(ao.length,1)){return false}return true}return false},setHrefAttribute:function(ap,ao){if(!ap||!ao){return}ae.setAnyAttribute(ap,"href",ao)},shouldIgnoreInteraction:function(aq){var ap=ae.hasNodeAttribute(aq,this.CONTENT_IGNOREINTERACTION_ATTR);var ao=ae.hasNodeCssClass(aq,this.CONTENT_IGNOREINTERACTION_CLASS);return ap||ao}};function O(ap,at){if(at){return at}ap=v.toAbsoluteUrl(ap);if(z(ap,"?")){var ar=ap.indexOf("?");ap=ap.slice(0,ar)}if(R(ap,"matomo.php")){ap=g(ap,"matomo.php".length)}else{if(R(ap,"piwik.php")){ap=g(ap,"piwik.php".length)}else{if(R(ap,".php")){var ao=ap.lastIndexOf("/");var aq=1;ap=ap.slice(0,ao+aq)}}}if(R(ap,"/js/")){ap=g(ap,"js/".length)}return ap}function N(av){var ax="Piwik_Overlay";var ap=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var aq=ap.exec(G.referrer);if(aq){var at=aq[1];
|
41 |
-
if(at!==String(av)){return false}var au=aq[2],ao=aq[3],ar=aq[4];if(!ar){ar=""}else{if(ar.indexOf("&segment=")===0){ar=ar.substr("&segment=".length)}}T.name=ax+"###"+au+"###"+ao+"###"+ar}var aw=T.name.split("###");return aw.length===4&&aw[0]===ax}function Z(ap,aw,ar){var av=T.name.split("###"),au=av[1],ao=av[2],at=av[3],aq=O(ap,aw);o(aq+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(aq,ar,au,ao,at)})}function u(){var aq;try{aq=T.frameElement}catch(ap){return true}if(J(aq)){return(aq&&String(aq.nodeName).toLowerCase()==="iframe")?true:false}try{return T.self!==T.top}catch(ao){return true}}function Q(cd,b8){var bH=this,bd="mtm_consent",
|
42 |
-
try{bi=G.title}catch(cx){bi=""}function
|
43 |
-
if(
|
44 |
-
var
|
45 |
-
|
46 |
-
}function ay(){if(
|
47 |
-
|
48 |
-
}if(A(T.GearsFactory)){
|
49 |
-
var
|
50 |
-
}function bL(){var
|
51 |
-
if(bk){aE()}if(
|
52 |
-
var
|
53 |
-
}}}if(aK){
|
54 |
-
}
|
55 |
-
}var
|
56 |
-
if(!
|
57 |
-
v.setHrefAttribute(
|
58 |
-
}}}function bw(
|
59 |
-
return false}var
|
60 |
-
if(!
|
61 |
-
}}function a1(
|
62 |
-
}
|
63 |
-
};this.getVisitorInfo=function(){return
|
64 |
-
};this.getRequest=function(
|
65 |
-
}};this.deleteCustomVariables=function(
|
66 |
-
};this.setCrossDomainLinkingTimeout=function(
|
67 |
-
}if(!J(
|
68 |
-
}
|
69 |
-
})};this.getNumTrackedPageViews=function(){return cr};this.trackPageView=function(
|
70 |
-
}
|
71 |
-
};this.addEcommerceItem=function(
|
72 |
-
};this.requireConsent=function(){cz=true;bA=this.hasRememberedConsent();x++;b["CoreConsent"+x]={unload:function(){if(!bA){aE()}}}};this.setConsentGiven=function(){bA=true;bX(
|
73 |
if(av[ap]>1&&ap!=="addTracker"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: https://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","requireConsent","setConsentGiven"];function ad(ao,aq){var ap=new Q(ao,aq);I.push(ap);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();e.trigger("TrackerAdded",[ap]);return ap}an(T,"beforeunload",ai,false);an(T,"message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=e.getAsyncTrackers();for(ar=0;ar<at.length;ar++){ap=d(at[ar].getPiwikUrl());
|
74 |
if(ap===ax){aw=at[ar];break}}if(!aw){return}var aq=null;try{aq=JSON.parse(au.data)}catch(av){return}if(!aq){return}function ao(aA){var aC=G.getElementsByTagName("iframe");for(ar=0;ar<aC.length;ar++){var aB=aC[ar];var ay=d(aB.src);if(aB.contentWindow&&J(aB.contentWindow.postMessage)&&ay===ax){var az=JSON.stringify(aA);aB.contentWindow.postMessage(az,"*")}}}if(J(aq.maq_initial_value)){ao({maq_opted_in:aq.maq_initial_value&&aw.hasConsent(),maq_url:aw.getPiwikUrl(),maq_optout_by_default:aw.isConsentRequired()})}else{if(J(aq.maq_opted_in)){at=e.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getPiwikUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;e={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:n,onReady:q,isNodeVisible:j,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]
|
75 |
}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||T,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ao,ap){if(!J(ap)){ap=this.getAsyncTracker().getSiteId()}if(!J(ao)){ao=this.getAsyncTracker().getTrackerUrl()}return new Q(ao,ap)},getAsyncTrackers:function(){return I},addTracker:function(ao,aq){var ap;if(!I.length){ap=ad(ao,aq)}else{ap=I[0].addTracker(ao,aq)}return ap},getAsyncTracker:function(ap,at){var ar;if(I&&I.length&&I[0]){ar=I[0]}else{return ad(ap,at)}if(!at&&!ap){return ar}if((!J(at)||null===at)&&ar){at=ar.getSiteId()}if((!J(ap)||null===ap)&&ar){ap=ar.getTrackerUrl()}var aq,ao=0;for(ao;ao<I.length;ao++){aq=I[ao];if(aq&&String(aq.getSiteId())===String(at)&&aq.getTrackerUrl()===ap){return aq}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])
|
8 |
* @license https://piwik.org/free-software/bsd/ BSD-3 Clause (also in js/LICENSE.txt)
|
9 |
* @license magnet:?xt=urn:btih:c80d50af7d3db9be66a4d0a86db0286e4fd33292&dn=bsd-3-clause.txt BSD-3-Clause
|
10 |
*/
|
11 |
+
;if(typeof window.JSON==="object"&&typeof window.JSON.stringify==="function"&&typeof window.JSON.parse==="function"){JSON_PIWIK=window.JSON}else{(function(){var a={};
|
12 |
/*!! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */
|
13 |
(function(){var c=typeof define==="function"&&define.amd;var e={"function":true,object:true};var h=e[typeof a]&&a&&!a.nodeType&&a;var i=e[typeof window]&&window||this,b=h&&e[typeof module]&&module&&!module.nodeType&&typeof global=="object"&&global;if(b&&(b.global===b||b.window===b||b.self===b)){i=b}function j(ab,V){ab||(ab=i.Object());V||(V=i.Object());
|
14 |
var K=ab.Number||i.Number,R=ab.String||i.String,x=ab.Object||i.Object,S=ab.Date||i.Date,T=ab.SyntaxError||i.SyntaxError,aa=ab.TypeError||i.TypeError,J=ab.Math||i.Math,Y=ab.JSON||i.JSON;if(typeof Y=="object"&&Y){V.stringify=Y.stringify;V.parse=Y.parse}var n=x.prototype,u=n.toString,r,m,L;var B=new S(-3509827334573292);try{B=B.getUTCFullYear()==-109252&&B.getUTCMonth()===0&&B.getUTCDate()===1&&B.getUTCHours()==10&&B.getUTCMinutes()==37&&B.getUTCSeconds()==6&&B.getUTCMilliseconds()==708}catch(v){}function o(ac){if(o[ac]!==L){return o[ac]}var ad;if(ac=="bug-string-char-index"){ad="a"[0]!="a"}else{if(ac=="json"){ad=o("json-stringify")&&o("json-parse")}else{var ak,ah='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if(ac=="json-stringify"){var ai=V.stringify,aj=typeof ai=="function"&&B;if(aj){(ak=function(){return 1}).toJSON=ak;try{aj=ai(0)==="0"&&ai(new K())==="0"&&ai(new R())=='""'&&ai(u)===L&&ai(L)===L&&ai()===L&&ai(ak)==="1"&&ai([ak])=="[1]"&&ai([L])=="[null]"&&ai(null)=="null"&&ai([L,u,null])=="[null,null,null]"&&ai({a:[ak,true,false,null,"\x00\b\n\f\r\t"]})==ah&&ai(null,ak)==="1"&&ai([1,2],null,1)=="[\n 1,\n 2\n]"&&ai(new S(-8640000000000000))=='"-271821-04-20T00:00:00.000Z"'&&ai(new S(8640000000000000))=='"+275760-09-13T00:00:00.000Z"'&&ai(new S(-62198755200000))=='"-000001-01-01T00:00:00.000Z"'&&ai(new S(-1))=='"1969-12-31T23:59:59.999Z"'
|
38 |
if(aq&&au.offsetTop){aq=(au.offsetTop+at.height)>0}var ap=ar.clientWidth;if(T.innerWidth&&ap>T.innerWidth){ap=T.innerWidth}var ao=ar.clientHeight;if(T.innerHeight&&ao>T.innerHeight){ao=T.innerHeight}return((at.bottom>0||aq)&&at.right>0&&at.left<ap&&((at.top<ao)||aq))},isNodeVisible:function(ap){var ao=j(ap);var aq=this.isOrWasNodeInViewport(ap);return ao&&aq},buildInteractionRequestParams:function(ao,ap,aq,ar){var at="";if(ao){at+="c_i="+t(ao)}if(ap){if(at){at+="&"}at+="c_n="+t(ap)}if(aq){if(at){at+="&"}at+="c_p="+t(aq)}if(ar){if(at){at+="&"}at+="c_t="+t(ar)}return at},buildImpressionRequestParams:function(ao,ap,aq){var ar="c_n="+t(ao)+"&c_p="+t(ap);if(aq){ar+="&c_t="+t(aq)}return ar},buildContentBlock:function(aq){if(!aq){return}var ao=this.findContentName(aq);var ap=this.findContentPiece(aq);var ar=this.findContentTarget(aq);ao=this.trim(ao);ap=this.trim(ap);ar=this.trim(ar);return{name:ao||"Unknown",piece:ap||"Unknown",target:ar||""}},collectContent:function(ar){if(!ar||!ar.length){return[]
|
39 |
}var aq=[];var ao,ap;for(ao=0;ao<ar.length;ao++){ap=this.buildContentBlock(ar[ao]);if(J(ap)){aq.push(ap)}}return aq},setLocation:function(ao){this.location=ao},getLocation:function(){var ao=this.location||T.location;if(!ao.origin){ao.origin=ao.protocol+"//"+ao.hostname+(ao.port?":"+ao.port:"")}return ao},toAbsoluteUrl:function(ap){if((!ap||String(ap)!==ap)&&ap!==""){return ap}if(""===ap){return this.getLocation().href}if(ap.search(/^\/\//)!==-1){return this.getLocation().protocol+ap}if(ap.search(/:\/\//)!==-1){return ap}if(0===ap.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.search("^[a-zA-Z]{2,11}:")){return ap}if(ap.search(/^\//)!==-1){return this.getLocation().origin+ap}var ao="(.*/)";var aq=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ao))[0];return aq+ap},isUrlToCurrentDomain:function(ap){var aq=this.toAbsoluteUrl(ap);if(!aq){return false
|
40 |
}var ao=this.getLocation().origin;if(ao===aq){return true}if(0===String(aq).indexOf(ao)){if(":"===String(aq).substr(ao.length,1)){return false}return true}return false},setHrefAttribute:function(ap,ao){if(!ap||!ao){return}ae.setAnyAttribute(ap,"href",ao)},shouldIgnoreInteraction:function(aq){var ap=ae.hasNodeAttribute(aq,this.CONTENT_IGNOREINTERACTION_ATTR);var ao=ae.hasNodeCssClass(aq,this.CONTENT_IGNOREINTERACTION_CLASS);return ap||ao}};function O(ap,at){if(at){return at}ap=v.toAbsoluteUrl(ap);if(z(ap,"?")){var ar=ap.indexOf("?");ap=ap.slice(0,ar)}if(R(ap,"matomo.php")){ap=g(ap,"matomo.php".length)}else{if(R(ap,"piwik.php")){ap=g(ap,"piwik.php".length)}else{if(R(ap,".php")){var ao=ap.lastIndexOf("/");var aq=1;ap=ap.slice(0,ao+aq)}}}if(R(ap,"/js/")){ap=g(ap,"js/".length)}return ap}function N(av){var ax="Piwik_Overlay";var ap=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var aq=ap.exec(G.referrer);if(aq){var at=aq[1];
|
41 |
+
if(at!==String(av)){return false}var au=aq[2],ao=aq[3],ar=aq[4];if(!ar){ar=""}else{if(ar.indexOf("&segment=")===0){ar=ar.substr("&segment=".length)}}T.name=ax+"###"+au+"###"+ao+"###"+ar}var aw=T.name.split("###");return aw.length===4&&aw[0]===ax}function Z(ap,aw,ar){var av=T.name.split("###"),au=av[1],ao=av[2],at=av[3],aq=O(ap,aw);o(aq+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(aq,ar,au,ao,at)})}function u(){var aq;try{aq=T.frameElement}catch(ap){return true}if(J(aq)){return(aq&&String(aq.nodeName).toLowerCase()==="iframe")?true:false}try{return T.self!==T.top}catch(ao){return true}}function Q(cd,b8){var bH=this,bd="mtm_consent",cL="mtm_consent_removed",b3=aa(G.domain,T.location.href,K()),cU=L(b3[0]),bM=p(b3[1]),bm=p(b3[2]),cS=false,ch="GET",da=ch,aH="application/x-www-form-urlencoded; charset=UTF-8",cw=aH,aD=cd||"",bG="",cZ="",b5=b8||"",bx="",bN="",a4,bi="",c6=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ax=[cU],by=[],bK=[],a8=[],bI=500,cW=false,cH,a5,bQ,c7=1800,bO,ao,cq=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bF=["pk_kwd","piwik_kwd","utm_term"],bj="_pk_",av="pk_vid",aZ=180,cX,bo,bR=false,bk=false,cP,be,bu,cI=33955200000,co=1800000,c5=15768000000,a2=true,cm=0,bP=false,aQ=false,ca,bV={},cl={},bl={},bs=200,c0={},c8={},b9=[],ce=false,cA=false,ap=false,c9=false,cM=false,aN=false,bc=u(),cR=null,cY=null,cb,aR,bz,b6=am,bn,aK,cr=0,bt=["id","ses","cvar","ref"],cz=false,bA=null,cJ=[],aw=U++;
|
42 |
+
try{bi=G.title}catch(cx){bi=""}function de(dq,dn,dm,dp,dl,dk){if(bk){return}var dj;if(dm){dj=new Date();dj.setTime(dj.getTime()+dm)}G.cookie=dq+"="+t(dn)+(dm?";expires="+dj.toGMTString():"")+";path="+(dp||"/")+(dl?";domain="+dl:"")+(dk?";secure":"")+";SameSite=Lax"}function aC(dl){if(bk){return 0}var dj=new RegExp("(^|;)[ ]*"+dl+"=([^;]*)"),dk=dj.exec(G.cookie);return dk?S(dk[2]):0}bA=!aC(cL);function b1(dj){var dk;dj=k(dj,av);if(bO){dk=new RegExp("#.*");return dj.replace(dk,"")}return dj}function bU(dl,dj){var dm=s(dj),dk;if(dm){return dj}if(dj.slice(0,1)==="/"){return s(dl)+"://"+d(dl)+dj}dl=b1(dl);dk=dl.indexOf("?");if(dk>=0){dl=dl.slice(0,dk)}dk=dl.lastIndexOf("/");if(dk!==dl.length-1){dl=dl.slice(0,dk+1)}return dl+dj}function cF(dl,dj){var dk;dl=String(dl).toLowerCase();dj=String(dj).toLowerCase();if(dl===dj){return true}if(dj.slice(0,1)==="."){if(dl===dj.slice(1)){return true}dk=dl.length-dj.length;if((dk>0)&&(dl.slice(dk)===dj)){return true}}return false}function ck(dj){var dk=document.createElement("a");
|
43 |
+
if(dj.indexOf("//")!==0&&dj.indexOf("http")!==0){if(dj.indexOf("*")===0){dj=dj.substr(1)}if(dj.indexOf(".")===0){dj=dj.substr(1)}dj="http://"+dj}dk.href=v.toAbsoluteUrl(dj);if(dk.pathname){return dk.pathname}return""}function a3(dk,dj){if(!aj(dj,"/")){dj="/"+dj}if(!aj(dk,"/")){dk="/"+dk}var dl=(dj==="/"||dj==="/*");if(dl){return true}if(dk===dj){return true}dj=String(dj).toLowerCase();dk=String(dk).toLowerCase();if(R(dj,"*")){dj=dj.slice(0,-1);dl=(!dj||dj==="/");if(dl){return true}if(dk===dj){return true}return dk.indexOf(dj)===0}if(!R(dk,"/")){dk+="/"}if(!R(dj,"/")){dj+="/"}return dk.indexOf(dj)===0}function ar(dn,dq){var dk,dj,dl,dm,dp;for(dk=0;dk<ax.length;dk++){dm=L(ax[dk]);dp=ck(ax[dk]);if(cF(dn,dm)&&a3(dq,dp)){return true}}return false}function aV(dm){var dk,dj,dl;for(dk=0;dk<ax.length;dk++){dj=L(ax[dk].toLowerCase());if(dm===dj){return true}if(dj.slice(0,1)==="."){if(dm===dj.slice(1)){return true}dl=dm.length-dj.length;if((dl>0)&&(dm.slice(dl)===dj)){return true}}}return false}function cp(dj,dl){dj=dj.replace("send_image=0","send_image=1");
|
44 |
+
var dk=new Image(1,1);dk.onload=function(){E=0;if(typeof dl==="function"){dl({request:dj,trackerUrl:aD,success:true})}};dk.onerror=function(){if(typeof dl==="function"){dl({request:dj,trackerUrl:aD,success:false})}};dk.src=aD+(aD.indexOf("?")<0?"?":"&")+dj}function cC(dj){if(da==="POST"){return true}return dj&&(dj.length>2000||dj.indexOf('{"requests"')===0)}function aJ(){return"object"===typeof h&&"function"===typeof h.sendBeacon&&"function"===typeof Blob}function a6(dn,dr,dq){var dl=aJ();if(!dl){return false}var dm={type:"application/x-www-form-urlencoded; charset=UTF-8"};var ds=false;var dk=aD;try{var dj=new Blob([dn],dm);if(dq&&!cC(dn)){dj=new Blob([],dm);dk=dk+(dk.indexOf("?")<0?"?":"&")+dn}ds=h.sendBeacon(dk,dj)}catch(dp){return false}if(ds&&typeof dr==="function"){dr({request:dn,trackerUrl:aD,success:true,isSendBeacon:true})}return ds}function c4(dk,dl,dj){if(!J(dj)||null===dj){dj=true}if(m&&a6(dk,dl,dj)){return}setTimeout(function(){if(m&&a6(dk,dl,dj)){return}var dp;try{var dn=T.XMLHttpRequest?new T.XMLHttpRequest():T.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;
|
45 |
+
dn.open("POST",aD,true);dn.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var dq=m&&a6(dk,dl,dj);if(!dq&&dj){cp(dk,dl)}else{if(typeof dl==="function"){dl({request:dk,trackerUrl:aD,success:false,xhr:this})}}}else{if(this.readyState===4&&(typeof dl==="function")){dl({request:dk,trackerUrl:aD,success:true,xhr:this})}}};dn.setRequestHeader("Content-Type",cw);dn.withCredentials=true;dn.send(dk)}catch(dm){dp=m&&a6(dk,dl,dj);if(!dp&&dj){cp(dk,dl)}else{if(typeof dl==="function"){dl({request:dk,trackerUrl:aD,success:false})}}}},50)}function cf(dk){var dj=new Date();var dl=dj.getTime()+dk;if(!r||dl>r){r=dl}}function cn(dj){if(cb||!a5||!bA){return}cb=setTimeout(function dk(){cb=null;if(!bc){bc=(!G.hasFocus||G.hasFocus())}if(!bc){cn(a5);return}if(bQ()){return}var dl=new Date(),dm=a5-(dl.getTime()-cY);dm=Math.min(a5,dm);cn(dm)},dj||a5)}function bJ(){if(!cb){return}clearTimeout(cb);cb=null}function ba(){bc=true;cR=new Date().getTime()}function dd(){var dj=new Date().getTime();
|
46 |
+
return !cR||(dj-cR)>a5}function ay(){if(dd()){bQ()}bJ()}function dg(){if(aN||!a5){return}aN=true;an(T,"focus",ba);an(T,"blur",ay);ab++;e.addPlugin("HeartBeat"+ab,{unload:function(){if(aN&&dd()){bQ()}}})}function cB(dn){var dk=new Date();var dj=dk.getTime();cY=dj;if(cA&&dj<cA){var dl=cA-dj;setTimeout(dn,dl);cf(dl+50);cA+=50;return}if(cA===false){var dm=800;cA=dj+dm}dn()}function aO(){if(aC(cL)){bA=false}else{if(aC(bd)){bA=true}}}function bE(dk,dj,dl){aO();if(!bA){cJ.push(dk);return}if(!cP&&dk){if(cz&&bA){dk+="&consent=1"}cB(function(){if(cW&&a6(dk,dl,true)){cf(100);return}if(cC(dk)){c4(dk,dl)}else{cp(dk,dl)}cf(dj)})}if(!aN){dg()}}function cj(dj){if(cP){return false}return(dj&&dj.length)}function c3(dj,dn){if(!dn||dn>=dj.length){return[dj]}var dk=0;var dl=dj.length;var dm=[];for(dk;dk<dl;dk+=dn){dm.push(dj.slice(dk,dk+dn))}return dm}function df(dk,dj){if(!cj(dk)){return}if(!bA){cJ.push(dk);return}cB(function(){var dn=c3(dk,50);var dl=0,dm;for(dl;dl<dn.length;dl++){dm='{"requests":["?'+dn[dl].join('","?')+'"]}';
|
47 |
+
if(cW&&a6(dm,null,false)){cf(100)}else{c4(dm,null,false)}}cf(dj)})}function aT(dj){return bj+dj+"."+b5+"."+bn}function bX(dl,dk,dj){de(dl,"",-86400,dk,dj)}function b4(){if(bk){return"0"}if(!J(T.showModalDialog)&&J(h.cookieEnabled)){return h.cookieEnabled?"1":"0"}var dj=bj+"testcookie";de(dj,"1",undefined,bo,cX,bR);var dk=aC(dj)==="1"?"1":"0";bX(dj);return dk}function bh(){bn=b6((cX||cU)+(bo||"/")).slice(0,4)}function cG(){if(J(c8.res)){return c8}var dk,dm,dn={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(h.userAgent))){if(h.mimeTypes&&h.mimeTypes.length){for(dk in dn){if(Object.prototype.hasOwnProperty.call(dn,dk)){dm=h.mimeTypes[dn[dk]];c8[dk]=(dm&&dm.enabledPlugin)?"1":"0"}}}if(!((new RegExp("Edge[ /](\\d+[\\.\\d]+)")).test(h.userAgent))&&typeof navigator.javaEnabled!=="unknown"&&J(h.javaEnabled)&&h.javaEnabled()){c8.java="1"
|
48 |
+
}if(A(T.GearsFactory)){c8.gears="1"}c8.cookie=b4()}var dl=parseInt(X.width,10);var dj=parseInt(X.height,10);c8.res=parseInt(dl,10)+"x"+parseInt(dj,10);return c8}function bW(){var dk=aT("cvar"),dj=aC(dk);if(dj.length){dj=JSON_PIWIK.parse(dj);if(W(dj)){return dj}}return{}}function cD(){if(aQ===false){aQ=bW()}}function cQ(){var dj=cG();return b6((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(dj)+(new Date()).getTime()+Math.random()).slice(0,16)}function az(){var dj=cG();return b6((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(dj)).slice(0,6)}function bf(){return Math.floor((new Date()).getTime()/1000)}function aI(){var dk=bf();var dl=az();var dj=String(dk)+dl;return dj}function c2(dl){dl=String(dl);var dp=az();var dm=dp.length;var dn=dl.substr(-1*dm,dm);var dk=parseInt(dl.substr(0,dl.length-dm),10);if(dk&&dn&&dn===dp){var dj=bf();if(aZ<=0){return true}if(dj>=dk&&dj<=(dk+aZ)){return true}}return false}function dh(dj){if(!cM){return""}var dn=f(dj,av);if(!dn){return""}dn=String(dn);
|
49 |
+
var dl=new RegExp("^[a-zA-Z0-9]+$");if(dn.length===32&&dl.test(dn)){var dk=dn.substr(16,32);if(c2(dk)){var dm=dn.substr(0,16);return dm}}return""}function cN(){if(!bN){bN=dh(bM)}var dl=new Date(),dj=Math.round(dl.getTime()/1000),dk=aT("id"),dp=aC(dk),dn,dm;if(dp){dn=dp.split(".");dn.unshift("0");if(bN.length){dn[1]=bN}return dn}if(bN.length){dm=bN}else{if("0"===b4()){dm=""}else{dm=cQ()}}dn=["1",dm,dj,0,dj,"",""];return dn}function aY(){var dr=cN(),dm=dr[0],dn=dr[1],dk=dr[2],dj=dr[3],dp=dr[4],dl=dr[5];if(!J(dr[6])){dr[6]=""}var dq=dr[6];return{newVisitor:dm,uuid:dn,createTs:dk,visitCount:dj,currentVisitTs:dp,lastVisitTs:dl,lastEcommerceOrderTs:dq}}function aG(){var dm=new Date(),dk=dm.getTime(),dn=aY().createTs;var dj=parseInt(dn,10);var dl=(dj*1000)+cI-dk;return dl}function aL(dj){if(!b5){return}var dl=new Date(),dk=Math.round(dl.getTime()/1000);if(!J(dj)){dj=aY()}var dm=dj.uuid+"."+dj.createTs+"."+dj.visitCount+"."+dk+"."+dj.lastVisitTs+"."+dj.lastEcommerceOrderTs;de(aT("id"),dm,aG(),bo,cX,bR)
|
50 |
+
}function bL(){var dj=aC(aT("ref"));if(dj.length){try{dj=JSON_PIWIK.parse(dj);if(W(dj)){return dj}}catch(dk){}}return["","",0,""]}function bv(dk){var dj="testvalue";de("test",dj,10000,null,dk);if(aC("test")===dj){bX("test",null,dk);return true}return false}function aE(){var dk=bk;bk=false;var dj,dl;for(dj=0;dj<bt.length;dj++){dl=aT(bt[dj]);if(dl!==cL&&dl!==bd&&0!==aC(dl)){bX(dl,bo,cX)}}bk=dk}function b2(dj){b5=dj;aL()}function di(dn){if(!dn||!W(dn)){return}var dm=[];var dl;for(dl in dn){if(Object.prototype.hasOwnProperty.call(dn,dl)){dm.push(dl)}}var dp={};dm.sort();var dj=dm.length;var dk;for(dk=0;dk<dj;dk++){dp[dm[dk]]=dn[dm[dk]]}return dp}function cc(){de(aT("ses"),"1",co,bo,cX,bR)}function bg(){var dm="";var dk="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var dl=dk.length;var dj;for(dj=0;dj<6;dj++){dm+=dk.charAt(Math.floor(Math.random()*dl))}return dm}function cs(dl,dH,dI,dm){var dG,dk=new Date(),du=Math.round(dk.getTime()/1000),dr,dF,dn=1024,dO,dv,dD=aQ,dp=aT("ses"),dB=aT("ref"),dy=aT("cvar"),dz=aC(dp),dE=bL(),dK=a4||bM,ds,dj;
|
51 |
+
if(bk){aE()}if(cP){return""}var dA=aY();if(!J(dm)){dm=""}var dx=G.characterSet||G.charset;if(!dx||dx.toLowerCase()==="utf-8"){dx=null}ds=dE[0];dj=dE[1];dr=dE[2];dF=dE[3];if(!dz){var dJ=co/1000;if(!dA.lastVisitTs||(du-dA.lastVisitTs)>dJ){dA.visitCount++;dA.lastVisitTs=dA.currentVisitTs}if(!bu||!ds.length){for(dG in cq){if(Object.prototype.hasOwnProperty.call(cq,dG)){ds=f(dK,cq[dG]);if(ds.length){break}}}for(dG in bF){if(Object.prototype.hasOwnProperty.call(bF,dG)){dj=f(dK,bF[dG]);if(dj.length){break}}}}dO=d(bm);dv=dF.length?d(dF):"";if(dO.length&&!aV(dO)&&(!bu||!dv.length||aV(dv))){dF=bm}if(dF.length||ds.length){dr=du;dE=[ds,dj,dr,b1(dF.slice(0,dn))];de(dB,JSON_PIWIK.stringify(dE),c5,bo,cX)}}dl+="&idsite="+b5+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+dk.getHours()+"&m="+dk.getMinutes()+"&s="+dk.getSeconds()+"&url="+t(b1(dK))+(bm.length?"&urlref="+t(b1(bm)):"")+((bx&&bx.length)?"&uid="+t(bx):"")+"&_id="+dA.uuid+"&_idts="+dA.createTs+"&_idvc="+dA.visitCount+"&_idn="+dA.newVisitor+(ds.length?"&_rcn="+t(ds):"")+(dj.length?"&_rck="+t(dj):"")+"&_refts="+dr+"&_viewts="+dA.lastVisitTs+(String(dA.lastEcommerceOrderTs).length?"&_ects="+dA.lastEcommerceOrderTs:"")+(String(dF).length?"&_ref="+t(b1(dF.slice(0,dn))):"")+(dx?"&cs="+t(dx):"")+"&send_image=0";
|
52 |
+
var dN=cG();for(dG in dN){if(Object.prototype.hasOwnProperty.call(dN,dG)){dl+="&"+dG+"="+dN[dG]}}var dM=[];if(dH){for(dG in dH){if(Object.prototype.hasOwnProperty.call(dH,dG)&&/^dimension\d+$/.test(dG)){var dq=dG.replace("dimension","");dM.push(parseInt(dq,10));dM.push(String(dq));dl+="&"+dG+"="+t(dH[dG]);delete dH[dG]}}}if(dH&&B(dH)){dH=null}for(dG in bl){if(Object.prototype.hasOwnProperty.call(bl,dG)){var dw=(-1===M(dM,dG));if(dw){dl+="&dimension"+dG+"="+t(bl[dG])}}}if(dH){dl+="&data="+t(JSON_PIWIK.stringify(dH))}else{if(ao){dl+="&data="+t(JSON_PIWIK.stringify(ao))}}function dt(dP,dQ){var dR=JSON_PIWIK.stringify(dP);if(dR.length>2){return"&"+dQ+"="+t(dR)}return""}var dL=di(bV);var dC=di(cl);dl+=dt(dL,"cvar");dl+=dt(dC,"e_cvar");if(aQ){dl+=dt(aQ,"_cvar");for(dG in dD){if(Object.prototype.hasOwnProperty.call(dD,dG)){if(aQ[dG][0]===""||aQ[dG][1]===""){delete aQ[dG]}}}if(bP){de(dy,JSON_PIWIK.stringify(aQ),co,bo,cX)}}if(a2){if(cm){dl+=">_ms="+cm}else{if(i&&i.timing&&i.timing.requestStart&&i.timing.responseEnd){dl+=">_ms="+(i.timing.responseEnd-i.timing.requestStart)
|
53 |
+
}}}if(aK){dl+="&pv_id="+aK}dA.lastEcommerceOrderTs=J(dm)&&String(dm).length?dm:dA.lastEcommerceOrderTs;aL(dA);cc();dl+=ac(dI,{tracker:bH,request:dl});if(cZ.length){dl+="&"+cZ}if(A(ca)){dl=ca(dl)}return dl}bQ=function a7(){var dj=new Date();dj=dj.getTime();if(!cY){return false}if((cY+(1000*c7))<=dj){return false}if(cY+a5<=dj){bH.ping();return true}return false};function bp(dm,dl,ds,dn,dj,dv){var dq="idgoal=0",dr,dk=new Date(),dt=[],du,dp=String(dm).length;if(dp){dq+="&ec_id="+t(dm);dr=Math.round(dk.getTime()/1000)}dq+="&revenue="+dl;if(String(ds).length){dq+="&ec_st="+ds}if(String(dn).length){dq+="&ec_tx="+dn}if(String(dj).length){dq+="&ec_sh="+dj}if(String(dv).length){dq+="&ec_dt="+dv}if(c0){for(du in c0){if(Object.prototype.hasOwnProperty.call(c0,du)){if(!J(c0[du][1])){c0[du][1]=""}if(!J(c0[du][2])){c0[du][2]=""}if(!J(c0[du][3])||String(c0[du][3]).length===0){c0[du][3]=0}if(!J(c0[du][4])||String(c0[du][4]).length===0){c0[du][4]=1}dt.push(c0[du])}}dq+="&ec_items="+t(JSON_PIWIK.stringify(dt))
|
54 |
+
}dq=cs(dq,ao,"ecommerce",dr);bE(dq,bI);if(dp){c0={}}}function bY(dj,dn,dm,dl,dk,dp){if(String(dj).length&&J(dn)){bp(dj,dn,dm,dl,dk,dp)}}function br(dj){if(J(dj)){bp("",dj,"","","","")}}function bZ(dk,dm,dl){aK=bg();var dj=cs("action_name="+t(al(dk||bi)),dm,"log");bE(dj,bI,dl)}function a0(dl,dk){var dm,dj="(^| )(piwik[_-]"+dk;if(dl){for(dm=0;dm<dl.length;dm++){dj+="|"+dl[dm]}}dj+=")( |$)";return new RegExp(dj)}function aU(dj){return(aD&&dj&&0===String(dj).indexOf(aD))}function cu(dn,dj,dp,dk){if(aU(dj)){return 0}var dm=a0(bK,"download"),dl=a0(a8,"link"),dq=new RegExp("\\.("+c6.join("|")+")([?&#]|$)","i");if(dl.test(dn)){return"link"}if(dk||dm.test(dn)||dq.test(dj)){return"download"}if(dp){return 0}return"link"}function au(dk){var dj;dj=dk.parentNode;while(dj!==null&&J(dj)){if(ae.isLinkElement(dk)){break}dk=dj;dj=dk.parentNode}return dk}function dc(dp){dp=au(dp);if(!ae.hasNodeAttribute(dp,"href")){return}if(!J(dp.href)){return}var dn=ae.getAttributeValueFromNode(dp,"href");if(aU(dn)){return
|
55 |
+
}var dk=dp.pathname||ck(dp.href);var dq=dp.hostname||d(dp.href);var dr=dq.toLowerCase();var dl=dp.href.replace(dq,dr);var dm=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!dm.test(dl)){var dj=cu(dp.className,dl,ar(dr,dk),ae.hasNodeAttribute(dp,"download"));if(dj){return{type:dj,href:dl}}}}function aP(dj,dk,dl,dm){var dn=v.buildInteractionRequestParams(dj,dk,dl,dm);if(!dn){return}return cs(dn,null,"contentInteraction")}function cK(dl,dm,dr,dj,dk){if(!J(dl)){return}if(aU(dl)){return dl}var dp=v.toAbsoluteUrl(dl);var dn="redirecturl="+t(dp)+"&";dn+=aP(dm,dr,dj,(dk||dl));var dq="&";if(aD.indexOf("?")<0){dq="?"}return aD+dq+dn}function bb(dj,dk){if(!dj||!dk){return false}var dl=v.findTargetNode(dj);if(v.shouldIgnoreInteraction(dl)){return false}dl=v.findTargetNodeNoDefault(dj);if(dl&&!V(dl,dk)){return false}return true}function ct(dl,dk,dn){if(!dl){return}var dj=v.findParentContentNode(dl);if(!dj){return}if(!bb(dj,dl)){return}var dm=v.buildContentBlock(dj);
|
56 |
+
if(!dm){return}if(!dm.target&&dn){dm.target=dn}return v.buildInteractionRequestParams(dk,dm.name,dm.piece,dm.target)}function aW(dk){if(!b9||!b9.length){return false}var dj,dl;for(dj=0;dj<b9.length;dj++){dl=b9[dj];if(dl&&dl.name===dk.name&&dl.piece===dk.piece&&dl.target===dk.target){return true}}return false}function bD(dm){if(!dm){return false}var dq=v.findTargetNode(dm);if(!dq||v.shouldIgnoreInteraction(dq)){return false}var dr=dc(dq);if(c9&&dr&&dr.type){return false}if(ae.isLinkElement(dq)&&ae.hasNodeAttributeWithValue(dq,"href")){var dj=String(ae.getAttributeValueFromNode(dq,"href"));if(0===dj.indexOf("#")){return false}if(aU(dj)){return true}if(!v.isUrlToCurrentDomain(dj)){return false}var dn=v.buildContentBlock(dm);if(!dn){return}var dl=dn.name;var ds=dn.piece;var dp=dn.target;if(!ae.hasNodeAttributeWithValue(dq,v.CONTENT_TARGET_ATTR)||dq.wasContentTargetAttrReplaced){dq.wasContentTargetAttrReplaced=true;dp=v.toAbsoluteUrl(dj);ae.setAnyAttribute(dq,v.CONTENT_TARGET_ATTR,dp)}var dk=cK(dj,"click",dl,ds,dp);
|
57 |
+
v.setHrefAttribute(dq,dk);return true}return false}function aM(dk){if(!dk||!dk.length){return}var dj;for(dj=0;dj<dk.length;dj++){bD(dk[dj])}}function aX(dj){return function(dk){if(!dj){return}var dn=v.findParentContentNode(dj);var dp;if(dk){dp=dk.target||dk.srcElement}if(!dp){dp=dj}if(!bb(dn,dp)){return}cf(bI);if(ae.isLinkElement(dj)&&ae.hasNodeAttributeWithValue(dj,"href")&&ae.hasNodeAttributeWithValue(dj,v.CONTENT_TARGET_ATTR)){var dl=ae.getAttributeValueFromNode(dj,"href");if(!aU(dl)&&dj.wasContentTargetAttrReplaced){ae.setAnyAttribute(dj,v.CONTENT_TARGET_ATTR,"")}}var dt=dc(dj);if(ap&&dt&&dt.type){return dt.type}if(bD(dn)){return"href"}var dq=v.buildContentBlock(dn);if(!dq){return}var dm=dq.name;var du=dq.piece;var ds=dq.target;var dr=aP("click",dm,du,ds);if(dr){bE(dr,bI)}return dr}}function b0(dl){if(!dl||!dl.length){return}var dj,dk;for(dj=0;dj<dl.length;dj++){dk=v.findTargetNode(dl[dj]);if(dk&&!dk.contentInteractionTrackingSetupDone){dk.contentInteractionTrackingSetupDone=true;an(dk,"click",aX(dk))
|
58 |
+
}}}function bw(dl,dm){if(!dl||!dl.length){return[]}var dj,dk;for(dj=0;dj<dl.length;dj++){if(aW(dl[dj])){dl.splice(dj,1);dj--}else{b9.push(dl[dj])}}if(!dl||!dl.length){return[]}aM(dm);b0(dm);var dn=[];for(dj=0;dj<dl.length;dj++){dk=cs(v.buildImpressionRequestParams(dl[dj].name,dl[dj].piece,dl[dj].target),undefined,"contentImpressions");if(dk){dn.push(dk)}}return dn}function cy(dk){var dj=v.collectContent(dk);return bw(dj,dk)}function a9(dk){if(!dk||!dk.length){return[]}var dj;for(dj=0;dj<dk.length;dj++){if(!v.isNodeVisible(dk[dj])){dk.splice(dj,1);dj--}}if(!dk||!dk.length){return[]}return cy(dk)}function aF(dl,dj,dk){var dm=v.buildImpressionRequestParams(dl,dj,dk);return cs(dm,null,"contentImpression")}function db(dm,dk){if(!dm){return}var dj=v.findParentContentNode(dm);var dl=v.buildContentBlock(dj);if(!dl){return}if(!dk){dk="Unknown"}return aP(dk,dl.name,dl.piece,dl.target)}function cO(dk,dm,dj,dl){return"e_c="+t(dk)+"&e_a="+t(dm)+(J(dj)?"&e_n="+t(dj):"")+(J(dl)?"&e_v="+t(dl):"")}function at(dl,dn,dj,dm,dq,dp){if(a(String(dl)).length===0||a(String(dn)).length===0){ak("Error while logging event: Parameters `category` and `action` must not be empty or filled with whitespaces");
|
59 |
+
return false}var dk=cs(cO(dl,dn,dj,dm),dq,"event");bE(dk,bI,dp)}function b7(dj,dm,dk,dn){var dl=cs("search="+t(dj)+(dm?"&search_cat="+t(dm):"")+(J(dk)?"&search_count="+dk:""),dn,"sitesearch");bE(dl,bI)}function cT(dj,dn,dm,dl){var dk=cs("idgoal="+dj+(dn?"&revenue="+dn:""),dm,"goal");bE(dk,bI,dl)}function c1(dm,dj,dr,dq,dl){var dp=dj+"="+t(b1(dm));var dk=ct(dl,"click",dm);if(dk){dp+="&"+dk}var dn=cs(dp,dr,"link");bE(dn,bI,dq)}function bT(dk,dj){if(dk!==""){return dk+dj.charAt(0).toUpperCase()+dj.slice(1)}return dj}function cg(dp){var dn,dj,dm=["","webkit","ms","moz"],dl;if(!be){for(dj=0;dj<dm.length;dj++){dl=dm[dj];if(Object.prototype.hasOwnProperty.call(G,bT(dl,"hidden"))){if(G[bT(dl,"visibilityState")]==="prerender"){dn=true}break}}}if(dn){an(G,dl+"visibilitychange",function dk(){G.removeEventListener(dl+"visibilitychange",dk,false);dp()});return}dp()}function bq(){var dk=aY().uuid;var dj=aI();return dk+dj}function ci(dj){if(!dj){return}if(!ae.hasNodeAttribute(dj,"href")){return}var dk=ae.getAttributeValueFromNode(dj,"href");
|
60 |
+
if(!dk||aU(dk)){return}dk=k(dk,av);var dl=bq();dk=F(dk,av,dl);ae.setAnyAttribute(dj,"href",dk)}function aA(dm){var dn=ae.getAttributeValueFromNode(dm,"href");if(!dn){return false}dn=String(dn);var dk=dn.indexOf("//")===0||dn.indexOf("http://")===0||dn.indexOf("https://")===0;if(!dk){return false}var dj=dm.pathname||ck(dm.href);var dl=(dm.hostname||d(dm.href)).toLowerCase();if(ar(dl,dj)){if(!cF(cU,L(dl))){return true}return false}return false}function cE(dj){var dk=dc(dj);if(dk&&dk.type){dk.href=p(dk.href);c1(dk.href,dk.type,undefined,null,dj);return}if(cM){dj=au(dj);if(aA(dj)){ci(dj)}}}function cv(){return G.all&&!G.addEventListener}function cV(dj){var dl=dj.which;var dk=(typeof dj.button);if(!dl&&dk!=="undefined"){if(cv()){if(dj.button&1){dl=1}else{if(dj.button&2){dl=3}else{if(dj.button&4){dl=2}}}}else{if(dj.button===0||dj.button==="0"){dl=1}else{if(dj.button&1){dl=2}else{if(dj.button&2){dl=3}}}}}return dl}function bS(dj){switch(cV(dj)){case 1:return"left";case 2:return"middle";case 3:return"right"
|
61 |
+
}}function a1(dj){return dj.target||dj.srcElement}function aB(dj){return function(dm){dm=dm||T.event;var dl=bS(dm);var dn=a1(dm);if(dm.type==="click"){var dk=false;if(dj&&dl==="middle"){dk=true}if(dn&&!dk){cE(dn)}}else{if(dm.type==="mousedown"){if(dl==="middle"&&dn){aR=dl;bz=dn}else{aR=bz=null}}else{if(dm.type==="mouseup"){if(dl===aR&&dn===bz){cE(dn)}aR=bz=null}else{if(dm.type==="contextmenu"){cE(dn)}}}}}}function aq(dl,dk){var dj=typeof dk;if(dj==="undefined"){dk=true}an(dl,"click",aB(dk),false);if(dk){an(dl,"mouseup",aB(dk),false);an(dl,"mousedown",aB(dk),false);an(dl,"contextmenu",aB(dk),false)}}function bC(dl,dn){ap=true;var dm,dk=a0(by,"ignore"),dp=G.links,dj=null,dq=null;if(dp){for(dm=0;dm<dp.length;dm++){dj=dp[dm];if(!dk.test(dj.className)){dq=typeof dj.piwikTrackers;if("undefined"===dq){dj.piwikTrackers=[]}if(-1===M(dj.piwikTrackers,dn)){dj.piwikTrackers.push(dn);aq(dj,dl)}}}}}function aS(dk,dn,dp){if(ce){return true}ce=true;var dq=false;var dm,dl;function dj(){dq=true}n(function(){function dr(dt){setTimeout(function(){if(!ce){return
|
62 |
+
}dq=false;dp.trackVisibleContentImpressions();dr(dt)},dt)}function ds(dt){setTimeout(function(){if(!ce){return}if(dq){dq=false;dp.trackVisibleContentImpressions()}ds(dt)},dt)}if(dk){dm=["scroll","resize"];for(dl=0;dl<dm.length;dl++){if(G.addEventListener){G.addEventListener(dm[dl],dj,false)}else{T.attachEvent("on"+dm[dl],dj)}}ds(100)}if(dn&&dn>0){dn=parseInt(dn,10);dr(dn)}})}var bB={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var dj=this.requests;this.requests=[];if(dj.length===1){bE(dj[0],bI)}else{df(dj,bI)}},push:function(dj){if(!dj){return}if(m||!this.enabled){bE(dj,bI);return}bB.requests.push(dj);if(this.timeout){clearTimeout(this.timeout);this.timeout=null}this.timeout=setTimeout(function(){bB.timeout=null;bB.sendRequests()},bB.interval);var dk="RequestQueue"+aw;if(!Object.prototype.hasOwnProperty.call(b,dk)){b[dk]={unload:function(){if(bB.timeout){clearTimeout(bB.timeout)}bB.sendRequests()}}}}};bh();aL();this.hasConsent=function(){return bA};this.getVisitorId=function(){return aY().uuid
|
63 |
+
};this.getVisitorInfo=function(){return cN()};this.getAttributionInfo=function(){return bL()};this.getAttributionCampaignName=function(){return bL()[0]};this.getAttributionCampaignKeyword=function(){return bL()[1]};this.getAttributionReferrerTimestamp=function(){return bL()[2]};this.getAttributionReferrerUrl=function(){return bL()[3]};this.setTrackerUrl=function(dj){aD=dj};this.getTrackerUrl=function(){return aD};this.getPiwikUrl=function(){return O(this.getTrackerUrl(),bG)};this.addTracker=function(dj,dl){if(!J(dj)||null===dj){dj=this.getTrackerUrl()}var dk=new Q(dj,dl);I.push(dk);e.trigger("TrackerAdded",[this]);return dk};this.getSiteId=function(){return b5};this.setSiteId=function(dj){b2(dj)};this.resetUserId=function(){bx=""};this.setUserId=function(dj){if(Y(dj)){bx=dj}};this.getUserId=function(){return bx};this.setCustomData=function(dj,dk){if(W(dj)){ao=dj}else{if(!ao){ao={}}ao[dj]=dk}};this.getCustomData=function(){return ao};this.setCustomRequestProcessing=function(dj){ca=dj};this.appendToTrackingUrl=function(dj){cZ=dj
|
64 |
+
};this.getRequest=function(dj){return cs(dj)};this.addPlugin=function(dj,dk){b[dj]=dk};this.setCustomDimension=function(dj,dk){dj=parseInt(dj,10);if(dj>0){if(!J(dk)){dk=""}if(!w(dk)){dk=String(dk)}bl[dj]=dk}};this.getCustomDimension=function(dj){dj=parseInt(dj,10);if(dj>0&&Object.prototype.hasOwnProperty.call(bl,dj)){return bl[dj]}};this.deleteCustomDimension=function(dj){dj=parseInt(dj,10);if(dj>0){delete bl[dj]}};this.setCustomVariable=function(dk,dj,dn,dl){var dm;if(!J(dl)){dl="visit"}if(!J(dj)){return}if(!J(dn)){dn=""}if(dk>0){dj=!w(dj)?String(dj):dj;dn=!w(dn)?String(dn):dn;dm=[dj.slice(0,bs),dn.slice(0,bs)];if(dl==="visit"||dl===2){cD();aQ[dk]=dm}else{if(dl==="page"||dl===3){bV[dk]=dm}else{if(dl==="event"){cl[dk]=dm}}}}};this.getCustomVariable=function(dk,dl){var dj;if(!J(dl)){dl="visit"}if(dl==="page"||dl===3){dj=bV[dk]}else{if(dl==="event"){dj=cl[dk]}else{if(dl==="visit"||dl===2){cD();dj=aQ[dk]}}}if(!J(dj)||(dj&&dj[0]==="")){return false}return dj};this.deleteCustomVariable=function(dj,dk){if(this.getCustomVariable(dj,dk)){this.setCustomVariable(dj,"","",dk)
|
65 |
+
}};this.deleteCustomVariables=function(dj){if(dj==="page"||dj===3){bV={}}else{if(dj==="event"){cl={}}else{if(dj==="visit"||dj===2){aQ={}}}}};this.storeCustomVariablesInCookie=function(){bP=true};this.setLinkTrackingTimer=function(dj){bI=dj};this.getLinkTrackingTimer=function(){return bI};this.setDownloadExtensions=function(dj){if(w(dj)){dj=dj.split("|")}c6=dj};this.addDownloadExtensions=function(dk){var dj;if(w(dk)){dk=dk.split("|")}for(dj=0;dj<dk.length;dj++){c6.push(dk[dj])}};this.removeDownloadExtensions=function(dl){var dk,dj=[];if(w(dl)){dl=dl.split("|")}for(dk=0;dk<c6.length;dk++){if(M(dl,c6[dk])===-1){dj.push(c6[dk])}}c6=dj};this.setDomains=function(dj){ax=w(dj)?[dj]:dj;var dn=false,dl=0,dk;for(dl;dl<ax.length;dl++){dk=String(ax[dl]);if(cF(cU,L(dk))){dn=true;break}var dm=ck(dk);if(dm&&dm!=="/"&&dm!=="/*"){dn=true;break}}if(!dn){ax.push(cU)}};this.enableCrossDomainLinking=function(){cM=true};this.disableCrossDomainLinking=function(){cM=false};this.isCrossDomainLinkingEnabled=function(){return cM
|
66 |
+
};this.setCrossDomainLinkingTimeout=function(dj){aZ=dj};this.getCrossDomainLinkingUrlParameter=function(){return t(av)+"="+t(bq())};this.setIgnoreClasses=function(dj){by=w(dj)?[dj]:dj};this.setRequestMethod=function(dj){da=dj||ch};this.setRequestContentType=function(dj){cw=dj||aH};this.setReferrerUrl=function(dj){bm=dj};this.setCustomUrl=function(dj){a4=bU(bM,dj)};this.getCurrentUrl=function(){return a4||bM};this.setDocumentTitle=function(dj){bi=dj};this.setAPIUrl=function(dj){bG=dj};this.setDownloadClasses=function(dj){bK=w(dj)?[dj]:dj};this.setLinkClasses=function(dj){a8=w(dj)?[dj]:dj};this.setCampaignNameKey=function(dj){cq=w(dj)?[dj]:dj};this.setCampaignKeywordKey=function(dj){bF=w(dj)?[dj]:dj};this.discardHashTag=function(dj){bO=dj};this.setCookieNamePrefix=function(dj){bj=dj;aQ=bW()};this.setCookieDomain=function(dj){var dk=L(dj);if(bv(dk)){cX=dk;bh()}};this.getCookieDomain=function(){return cX};this.hasCookies=function(){return"1"===b4()};this.setSessionCookie=function(dl,dk,dj){if(!dl){throw new Error("Missing cookie name")
|
67 |
+
}if(!J(dj)){dj=co}bt.push(dl);de(aT(dl),dk,dj,bo,cX)};this.getCookie=function(dk){var dj=aC(aT(dk));if(dj===0){return null}return dj};this.setCookiePath=function(dj){bo=dj;bh()};this.getCookiePath=function(dj){return bo};this.setVisitorCookieTimeout=function(dj){cI=dj*1000};this.setSessionCookieTimeout=function(dj){co=dj*1000};this.getSessionCookieTimeout=function(){return co};this.setReferralCookieTimeout=function(dj){c5=dj*1000};this.setConversionAttributionFirstReferrer=function(dj){bu=dj};this.setSecureCookie=function(dj){bR=dj};this.disableCookies=function(){bk=true;c8.cookie="0";if(b5){aE()}};this.deleteCookies=function(){aE()};this.setDoNotTrack=function(dk){var dj=h.doNotTrack||h.msDoNotTrack;cP=dk&&(dj==="yes"||dj==="1");if(cP){this.disableCookies()}};this.alwaysUseSendBeacon=function(){cW=true};this.addListener=function(dk,dj){aq(dk,dj)};this.enableLinkTracking=function(dk){c9=true;var dj=this;cg(function(){q(function(){bC(dk,dj)})})};this.enableJSErrorTracking=function(){if(cS){return
|
68 |
+
}cS=true;var dj=T.onerror;T.onerror=function(dp,dm,dl,dn,dk){cg(function(){var dq="JavaScript Errors";var dr=dm+":"+dl;if(dn){dr+=":"+dn}at(dq,dr,dp)});if(dj){return dj(dp,dm,dl,dn,dk)}return false}};this.disablePerformanceTracking=function(){a2=false};this.setGenerationTimeMs=function(dj){cm=parseInt(dj,10)};this.setVisitStandardLength=function(dj){dj=Math.max(dj,5);c7=dj};this.enableHeartBeatTimer=function(dj){dj=Math.max(dj,5);a5=(dj||15)*1000;if(cY!==null){dg()}};this.disableHeartBeatTimer=function(){bJ();if(a5||aN){if(T.removeEventListener){T.removeEventListener("focus",ba);T.removeEventListener("blur",ay)}else{if(T.detachEvent){T.detachEvent("onfocus",ba);T.detachEvent("onblur",ay)}}}a5=null;aN=false};this.killFrame=function(){if(T.location!==T.top.location){T.top.location=T.location}};this.redirectFile=function(dj){if(T.location.protocol==="file:"){T.location=dj}};this.setCountPreRendered=function(dj){be=dj};this.trackGoal=function(dj,dm,dl,dk){cg(function(){cT(dj,dm,dl,dk)})};this.trackLink=function(dk,dj,dm,dl){cg(function(){c1(dk,dj,dm,dl)
|
69 |
+
})};this.getNumTrackedPageViews=function(){return cr};this.trackPageView=function(dj,dl,dk){b9=[];cJ=[];if(N(b5)){cg(function(){Z(aD,bG,b5)})}else{cg(function(){cr++;bZ(dj,dl,dk)})}};this.trackAllContentImpressions=function(){if(N(b5)){return}cg(function(){q(function(){var dj=v.findContentNodes();var dk=cy(dj);df(dk,bI)})})};this.trackVisibleContentImpressions=function(dj,dk){if(N(b5)){return}if(!J(dj)){dj=true}if(!J(dk)){dk=750}aS(dj,dk,this);cg(function(){n(function(){var dl=v.findContentNodes();var dm=a9(dl);df(dm,bI)})})};this.trackContentImpression=function(dl,dj,dk){if(N(b5)){return}dl=a(dl);dj=a(dj);dk=a(dk);if(!dl){return}dj=dj||"Unknown";cg(function(){var dm=aF(dl,dj,dk);bE(dm,bI)})};this.trackContentImpressionsWithinNode=function(dj){if(N(b5)||!dj){return}cg(function(){if(ce){n(function(){var dk=v.findContentNodesWithinNode(dj);var dl=a9(dk);df(dl,bI)})}else{q(function(){var dk=v.findContentNodesWithinNode(dj);var dl=cy(dk);df(dl,bI)})}})};this.trackContentInteraction=function(dl,dm,dj,dk){if(N(b5)){return
|
70 |
+
}dl=a(dl);dm=a(dm);dj=a(dj);dk=a(dk);if(!dl||!dm){return}dj=dj||"Unknown";cg(function(){var dn=aP(dl,dm,dj,dk);if(dn){bE(dn,bI)}})};this.trackContentInteractionNode=function(dk,dj){if(N(b5)||!dk){return}cg(function(){var dl=db(dk,dj);if(dl){bE(dl,bI)}})};this.logAllContentBlocksOnPage=function(){var dl=v.findContentNodes();var dj=v.collectContent(dl);var dk=typeof console;if(dk!=="undefined"&&console&&console.log){console.log(dj)}};this.trackEvent=function(dk,dm,dj,dl,dp,dn){cg(function(){at(dk,dm,dj,dl,dp,dn)})};this.trackSiteSearch=function(dj,dl,dk,dm){b9=[];cg(function(){b7(dj,dl,dk,dm)})};this.setEcommerceView=function(dm,dj,dl,dk){if(Y(dl)){dl=String(dl)}if(!J(dl)||dl===null||dl===false||!dl.length){dl=""}else{if(dl instanceof Array){dl=JSON_PIWIK.stringify(dl)}}bV[5]=["_pkc",dl];if(J(dk)&&dk!==null&&dk!==false&&String(dk).length){bV[2]=["_pkp",dk]}if(!Y(dm)&&!Y(dj)){return}if(Y(dm)){bV[3]=["_pks",dm]}if(!Y(dj)){dj=""}bV[4]=["_pkn",dj]};this.getEcommerceItems=function(){return JSON.parse(JSON.stringify(c0))
|
71 |
+
};this.addEcommerceItem=function(dn,dj,dl,dk,dm){if(Y(dn)){c0[dn]=[String(dn),dj,dl,dk,dm]}};this.removeEcommerceItem=function(dj){if(Y(dj)){dj=String(dj);delete c0[dj]}};this.clearEcommerceCart=function(){c0={}};this.trackEcommerceOrder=function(dj,dn,dm,dl,dk,dp){bY(dj,dn,dm,dl,dk,dp)};this.trackEcommerceCartUpdate=function(dj){br(dj)};this.trackRequest=function(dk,dm,dl,dj){cg(function(){var dn=cs(dk,dm,dj);bE(dn,bI,dl)})};this.ping=function(){this.trackRequest("ping=1",null,null,"ping")};this.disableQueueRequest=function(){bB.enabled=false};this.setRequestQueueInterval=function(dj){if(dj<1000){throw new Error("Request queue interval needs to be at least 1000ms")}bB.interval=dj};this.queueRequest=function(dj){cg(function(){var dk=cs(dj);bB.push(dk)})};this.isConsentRequired=function(){return cz};this.getRememberedConsent=function(){var dj=aC(bd);if(aC(cL)){if(dj){bX(bd,bo,cX)}return null}if(!dj||dj===0){return null}return dj};this.hasRememberedConsent=function(){return !!this.getRememberedConsent()
|
72 |
+
};this.requireConsent=function(){cz=true;bA=this.hasRememberedConsent();x++;b["CoreConsent"+x]={unload:function(){if(!bA){aE()}}}};this.setConsentGiven=function(){bA=true;bX(cL,bo,cX);var dk,dj;for(dk=0;dk<cJ.length;dk++){dj=typeof cJ[dk];if(dj==="string"){bE(cJ[dk],bI)}else{if(dj==="object"){df(cJ[dk],bI)}}}cJ=[]};this.rememberConsentGiven=function(dk){if(dk){dk=dk*60*60*1000}else{dk=30*365*24*60*60*1000}this.setConsentGiven();var dj=new Date().getTime();de(bd,dj,dk,bo,cX,bR)};this.forgetConsentGiven=function(){var dj=30*365*24*60*60*1000;bX(bd,bo,cX);de(cL,new Date().getTime(),dj,bo,cX,bR);this.requireConsent()};this.isUserOptedOut=function(){return !bA};this.optUserOut=this.forgetConsentGiven;this.forgetUserOptOut=this.rememberConsentGiven;e.trigger("TrackerSetup",[this])}function H(){return{push:af}}function c(au,at){var av={};var aq,ar;for(aq=0;aq<at.length;aq++){var ao=at[aq];av[ao]=1;for(ar=0;ar<au.length;ar++){if(au[ar]&&au[ar][0]){var ap=au[ar][0];if(ao===ap){af(au[ar]);delete au[ar];
|
73 |
if(av[ap]>1&&ap!=="addTracker"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: https://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","requireConsent","setConsentGiven"];function ad(ao,aq){var ap=new Q(ao,aq);I.push(ap);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();e.trigger("TrackerAdded",[ap]);return ap}an(T,"beforeunload",ai,false);an(T,"message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=e.getAsyncTrackers();for(ar=0;ar<at.length;ar++){ap=d(at[ar].getPiwikUrl());
|
74 |
if(ap===ax){aw=at[ar];break}}if(!aw){return}var aq=null;try{aq=JSON.parse(au.data)}catch(av){return}if(!aq){return}function ao(aA){var aC=G.getElementsByTagName("iframe");for(ar=0;ar<aC.length;ar++){var aB=aC[ar];var ay=d(aB.src);if(aB.contentWindow&&J(aB.contentWindow.postMessage)&&ay===ax){var az=JSON.stringify(aA);aB.contentWindow.postMessage(az,"*")}}}if(J(aq.maq_initial_value)){ao({maq_opted_in:aq.maq_initial_value&&aw.hasConsent(),maq_url:aw.getPiwikUrl(),maq_optout_by_default:aw.isConsentRequired()})}else{if(J(aq.maq_opted_in)){at=e.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getPiwikUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;e={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:n,onReady:q,isNodeVisible:j,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]
|
75 |
}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||T,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ao,ap){if(!J(ap)){ap=this.getAsyncTracker().getSiteId()}if(!J(ao)){ao=this.getAsyncTracker().getTrackerUrl()}return new Q(ao,ap)},getAsyncTrackers:function(){return I},addTracker:function(ao,aq){var ap;if(!I.length){ap=ad(ao,aq)}else{ap=I[0].addTracker(ao,aq)}return ap},getAsyncTracker:function(ap,at){var ar;if(I&&I.length&&I[0]){ar=I[0]}else{return ad(ap,at)}if(!at&&!ap){return ar}if((!J(at)||null===at)&&ar){at=ar.getSiteId()}if((!J(ap)||null===ap)&&ar){ap=ar.getTrackerUrl()}var aq,ao=0;for(ao;ao<I.length;ao++){aq=I[ao];if(aq&&String(aq.getSiteId())===String(at)&&aq.getTrackerUrl()===ap){return aq}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])
|
app/plugins/API/API.php
CHANGED
@@ -10,6 +10,7 @@ namespace Piwik\Plugins\API;
|
|
10 |
|
11 |
use Piwik\API\Proxy;
|
12 |
use Piwik\API\Request;
|
|
|
13 |
use Piwik\Cache;
|
14 |
use Piwik\CacheId;
|
15 |
use Piwik\Category\CategoryList;
|
@@ -29,6 +30,7 @@ use Piwik\Plugin\SettingsProvider;
|
|
29 |
use Piwik\Plugins\API\DataTable\MergeDataTables;
|
30 |
use Piwik\Plugins\CoreAdminHome\CustomLogo;
|
31 |
use Piwik\Plugins\CorePluginsAdmin\SettingsMetadata;
|
|
|
32 |
use Piwik\Site;
|
33 |
use Piwik\Translation\Translator;
|
34 |
use Piwik\Measurable\Type\TypeManager;
|
@@ -580,6 +582,61 @@ class API extends \Piwik\Plugin\API
|
|
580 |
|
581 |
// if segment has suggested values callback then return result from it instead
|
582 |
$suggestedValuesCallbackRequiresTable = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
583 |
if (isset($segment['suggestedValuesCallback'])) {
|
584 |
$suggestedValuesCallbackRequiresTable = $this->doesSuggestedValuesCallbackNeedData(
|
585 |
$segment['suggestedValuesCallback']);
|
10 |
|
11 |
use Piwik\API\Proxy;
|
12 |
use Piwik\API\Request;
|
13 |
+
use Piwik\ArchiveProcessor\Rules;
|
14 |
use Piwik\Cache;
|
15 |
use Piwik\CacheId;
|
16 |
use Piwik\Category\CategoryList;
|
30 |
use Piwik\Plugins\API\DataTable\MergeDataTables;
|
31 |
use Piwik\Plugins\CoreAdminHome\CustomLogo;
|
32 |
use Piwik\Plugins\CorePluginsAdmin\SettingsMetadata;
|
33 |
+
use Piwik\Segment;
|
34 |
use Piwik\Site;
|
35 |
use Piwik\Translation\Translator;
|
36 |
use Piwik\Measurable\Type\TypeManager;
|
582 |
|
583 |
// if segment has suggested values callback then return result from it instead
|
584 |
$suggestedValuesCallbackRequiresTable = false;
|
585 |
+
|
586 |
+
if (!empty($segment['suggestedValuesApi']) && is_string($segment['suggestedValuesApi']) && !Rules::isBrowserTriggerEnabled()) {
|
587 |
+
$now = Date::now()->setTimezone(Site::getTimezoneFor($idSite));
|
588 |
+
if (self::$_autoSuggestLookBack != 60) {
|
589 |
+
// in Auto suggest tests we need to assume now is in 2018...
|
590 |
+
// we do - 20 to make sure the year is still correct otherwise could end up being 2017-12-31 and the recorded visits are over several days in the tests we make sure to select the last day a visit was recorded
|
591 |
+
$now = $now->subDay(self::$_autoSuggestLookBack - 20);
|
592 |
+
}
|
593 |
+
// we want to avoid launching the archiver should browser archiving be enabled as this can be very slow... we then rather
|
594 |
+
// use the live api.
|
595 |
+
$period = 'year';
|
596 |
+
$date = $now->toString();
|
597 |
+
if ($now->toString('m') == '01') {
|
598 |
+
if (Rules::isArchivingDisabledFor(array($idSite), new Segment('', array($idSite)), 'range')) {
|
599 |
+
$date = $now->subYear(1)->toString(); // use previous year data to avoid using range
|
600 |
+
} else {
|
601 |
+
$period = 'range';
|
602 |
+
$date = $now->subMonth(1)->toString() . ',' . $now->addDay(1)->toString();
|
603 |
+
}
|
604 |
+
}
|
605 |
+
|
606 |
+
$apiParts = explode('.', $segment['suggestedValuesApi']);
|
607 |
+
$meta = $this->getMetadata($idSite, $apiParts[0], $apiParts[1]);
|
608 |
+
$flat = !empty($meta[0]['actionToLoadSubTables']) && $meta[0]['actionToLoadSubTables'] == $apiParts[1];
|
609 |
+
|
610 |
+
$table = Request::processRequest($segment['suggestedValuesApi'], array(
|
611 |
+
'idSite' => $idSite,
|
612 |
+
'period' => $period,
|
613 |
+
'date' => $date,
|
614 |
+
'segment' => '',
|
615 |
+
'filter_offset' => 0,
|
616 |
+
'flat' => (int) $flat,
|
617 |
+
'filter_limit' => $maxSuggestionsToReturn
|
618 |
+
));
|
619 |
+
if ($table && $table instanceof DataTable && $table->getRowsCount()) {
|
620 |
+
$values = [];
|
621 |
+
foreach ($table->getRowsWithoutSummaryRow() as $row) {
|
622 |
+
$segment = $row->getMetadata('segment');
|
623 |
+
$remove = array(
|
624 |
+
$segmentName . Segment\SegmentExpression::MATCH_EQUAL,
|
625 |
+
$segmentName . Segment\SegmentExpression::MATCH_STARTS_WITH
|
626 |
+
);
|
627 |
+
// we don't look at row columns since this could include rows that won't work eg Other summary rows. etc
|
628 |
+
// and it is generally not reliable.
|
629 |
+
if (!empty($segment) && preg_match('/^' . implode('|',$remove) . '/', $segment)) {
|
630 |
+
$values[] = urldecode(urldecode(str_replace($remove, '', $segment)));
|
631 |
+
}
|
632 |
+
}
|
633 |
+
|
634 |
+
$values = array_slice($values, 0, $maxSuggestionsToReturn);
|
635 |
+
$values = array_map(array('Piwik\Common', 'unsanitizeInputValue'), $values);
|
636 |
+
return $values;
|
637 |
+
}
|
638 |
+
}
|
639 |
+
|
640 |
if (isset($segment['suggestedValuesCallback'])) {
|
641 |
$suggestedValuesCallbackRequiresTable = $this->doesSuggestedValuesCallbackNeedData(
|
642 |
$segment['suggestedValuesCallback']);
|
app/plugins/API/SegmentMetadata.php
CHANGED
@@ -94,6 +94,10 @@ class SegmentMetadata
|
|
94 |
) {
|
95 |
unset($segment['suggestedValuesCallback']);
|
96 |
}
|
|
|
|
|
|
|
|
|
97 |
}
|
98 |
}
|
99 |
|
94 |
) {
|
95 |
unset($segment['suggestedValuesCallback']);
|
96 |
}
|
97 |
+
|
98 |
+
if (isset($segment['suggestedValuesApi'])) {
|
99 |
+
unset($segment['suggestedValuesApi']);
|
100 |
+
}
|
101 |
}
|
102 |
}
|
103 |
|
app/plugins/Actions/Columns/ClickedUrl.php
CHANGED
@@ -20,6 +20,7 @@ class ClickedUrl extends ActionDimension
|
|
20 |
protected $nameSingular = 'Actions_ColumnClickedURL';
|
21 |
protected $namePlural = 'Actions_ColumnClickedURLs';
|
22 |
protected $category = 'General_Actions';
|
|
|
23 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
24 |
protected $type = self::TYPE_URL;
|
25 |
|
20 |
protected $nameSingular = 'Actions_ColumnClickedURL';
|
21 |
protected $namePlural = 'Actions_ColumnClickedURLs';
|
22 |
protected $category = 'General_Actions';
|
23 |
+
protected $suggestedValuesApi = 'Actions.getOutlinks';
|
24 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
25 |
protected $type = self::TYPE_URL;
|
26 |
|
app/plugins/Actions/Columns/DownloadUrl.php
CHANGED
@@ -20,6 +20,7 @@ class DownloadUrl extends ActionDimension
|
|
20 |
protected $namePlural = 'Actions_ColumnDownloadURLs';
|
21 |
protected $columnName = 'idaction_url';
|
22 |
protected $category = 'General_Actions';
|
|
|
23 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
24 |
protected $type = self::TYPE_URL;
|
25 |
|
20 |
protected $namePlural = 'Actions_ColumnDownloadURLs';
|
21 |
protected $columnName = 'idaction_url';
|
22 |
protected $category = 'General_Actions';
|
23 |
+
protected $suggestedValuesApi = 'Actions.getDownloads';
|
24 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
25 |
protected $type = self::TYPE_URL;
|
26 |
|
app/plugins/Actions/Columns/EntryPageTitle.php
CHANGED
@@ -21,6 +21,7 @@ class EntryPageTitle extends VisitDimension
|
|
21 |
protected $columnType = 'INTEGER(10) UNSIGNED NULL';
|
22 |
protected $type = self::TYPE_TEXT;
|
23 |
protected $segmentName = 'entryPageTitle';
|
|
|
24 |
protected $nameSingular = 'Actions_ColumnEntryPageTitle';
|
25 |
protected $namePlural = 'Actions_WidgetEntryPageTitles';
|
26 |
protected $category = 'General_Actions';
|
21 |
protected $columnType = 'INTEGER(10) UNSIGNED NULL';
|
22 |
protected $type = self::TYPE_TEXT;
|
23 |
protected $segmentName = 'entryPageTitle';
|
24 |
+
protected $suggestedValuesApi = 'Actions.getEntryPageTitles';
|
25 |
protected $nameSingular = 'Actions_ColumnEntryPageTitle';
|
26 |
protected $namePlural = 'Actions_WidgetEntryPageTitles';
|
27 |
protected $category = 'General_Actions';
|
app/plugins/Actions/Columns/EntryPageUrl.php
CHANGED
@@ -22,6 +22,7 @@ class EntryPageUrl extends VisitDimension
|
|
22 |
protected $segmentName = 'entryPageUrl';
|
23 |
protected $nameSingular = 'Actions_ColumnEntryPageURL';
|
24 |
protected $namePlural = 'Actions_ColumnEntryPageURLs';
|
|
|
25 |
protected $category = 'General_Actions';
|
26 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
27 |
protected $type = self::TYPE_URL;
|
22 |
protected $segmentName = 'entryPageUrl';
|
23 |
protected $nameSingular = 'Actions_ColumnEntryPageURL';
|
24 |
protected $namePlural = 'Actions_ColumnEntryPageURLs';
|
25 |
+
protected $suggestedValuesApi = 'Actions.getEntryPageUrls';
|
26 |
protected $category = 'General_Actions';
|
27 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
28 |
protected $type = self::TYPE_URL;
|
app/plugins/Actions/Columns/ExitPageTitle.php
CHANGED
@@ -23,6 +23,7 @@ class ExitPageTitle extends VisitDimension
|
|
23 |
protected $nameSingular = 'Actions_ColumnExitPageTitle';
|
24 |
protected $namePlural = 'Actions_WidgetExitPageTitles';
|
25 |
protected $category = 'General_Actions';
|
|
|
26 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
27 |
protected $type = self::TYPE_TEXT;
|
28 |
|
23 |
protected $nameSingular = 'Actions_ColumnExitPageTitle';
|
24 |
protected $namePlural = 'Actions_WidgetExitPageTitles';
|
25 |
protected $category = 'General_Actions';
|
26 |
+
protected $suggestedValuesApi = 'Actions.getExitPageTitles';
|
27 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
28 |
protected $type = self::TYPE_TEXT;
|
29 |
|
app/plugins/Actions/Columns/ExitPageUrl.php
CHANGED
@@ -27,6 +27,7 @@ class ExitPageUrl extends VisitDimension
|
|
27 |
protected $nameSingular = 'Actions_ColumnExitPageURL';
|
28 |
protected $namePlural = 'Actions_ColumnExitPageURLs';
|
29 |
protected $category = 'General_Actions';
|
|
|
30 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
31 |
|
32 |
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
27 |
protected $nameSingular = 'Actions_ColumnExitPageURL';
|
28 |
protected $namePlural = 'Actions_ColumnExitPageURLs';
|
29 |
protected $category = 'General_Actions';
|
30 |
+
protected $suggestedValuesApi = 'Actions.getExitPageUrls';
|
31 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
32 |
|
33 |
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
app/plugins/Actions/Columns/PageTitle.php
CHANGED
@@ -22,6 +22,7 @@ class PageTitle extends ActionDimension
|
|
22 |
protected $nameSingular = 'Goals_PageTitle';
|
23 |
protected $namePlural = 'Actions_WidgetPageTitles';
|
24 |
protected $category = 'General_Actions';
|
|
|
25 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
26 |
|
27 |
public function getDbColumnJoin()
|
22 |
protected $nameSingular = 'Goals_PageTitle';
|
23 |
protected $namePlural = 'Actions_WidgetPageTitles';
|
24 |
protected $category = 'General_Actions';
|
25 |
+
protected $suggestedValuesApi = 'Actions.getPageTitles';
|
26 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
27 |
|
28 |
public function getDbColumnJoin()
|
app/plugins/Actions/Columns/PageUrl.php
CHANGED
@@ -25,6 +25,7 @@ class PageUrl extends ActionDimension
|
|
25 |
protected $acceptValues = 'All these segments must be URL encoded, for example: http%3A%2F%2Fexample.com%2Fpath%2Fpage%3Fquery';
|
26 |
protected $category = 'General_Actions';
|
27 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
|
|
28 |
|
29 |
public function getDbColumnJoin()
|
30 |
{
|
25 |
protected $acceptValues = 'All these segments must be URL encoded, for example: http%3A%2F%2Fexample.com%2Fpath%2Fpage%3Fquery';
|
26 |
protected $category = 'General_Actions';
|
27 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
28 |
+
protected $suggestedValuesApi = 'Actions.getPageUrls';
|
29 |
|
30 |
public function getDbColumnJoin()
|
31 |
{
|
app/plugins/Actions/DataTable/Filter/Actions.php
CHANGED
@@ -13,6 +13,7 @@ use Piwik\Config;
|
|
13 |
use Piwik\DataTable\BaseFilter;
|
14 |
use Piwik\DataTable\Row;
|
15 |
use Piwik\DataTable;
|
|
|
16 |
use Piwik\Tracker\Action;
|
17 |
|
18 |
class Actions extends BaseFilter
|
@@ -54,6 +55,9 @@ class Actions extends BaseFilter
|
|
54 |
}
|
55 |
}
|
56 |
|
|
|
|
|
|
|
57 |
foreach ($dataTable->getRows() as $row) {
|
58 |
if (!$row->isSummaryRow()) {
|
59 |
$url = $row->getMetadata('url');
|
@@ -75,10 +79,19 @@ class Actions extends BaseFilter
|
|
75 |
if ($row->getIdSubDataTable()) {
|
76 |
$row->setMetadata('segment', 'pageTitle=^' . urlencode(urlencode(trim($label))));
|
77 |
} else {
|
78 |
-
$
|
|
|
|
|
|
|
|
|
|
|
79 |
}
|
80 |
} else if ($this->actionType == Action::TYPE_PAGE_URL && $urlPrefix) { // folder for older data w/ no folder URL metadata
|
81 |
-
|
|
|
|
|
|
|
|
|
82 |
}
|
83 |
}
|
84 |
|
13 |
use Piwik\DataTable\BaseFilter;
|
14 |
use Piwik\DataTable\Row;
|
15 |
use Piwik\DataTable;
|
16 |
+
use Piwik\Plugins\Actions\ArchivingHelper;
|
17 |
use Piwik\Tracker\Action;
|
18 |
|
19 |
class Actions extends BaseFilter
|
55 |
}
|
56 |
}
|
57 |
|
58 |
+
$notDefinedUrl = ArchivingHelper::getUnknownActionName(Action::TYPE_PAGE_URL);
|
59 |
+
$notDefinedTitle = ArchivingHelper::getUnknownActionName(Action::TYPE_PAGE_TITLE);
|
60 |
+
|
61 |
foreach ($dataTable->getRows() as $row) {
|
62 |
if (!$row->isSummaryRow()) {
|
63 |
$url = $row->getMetadata('url');
|
79 |
if ($row->getIdSubDataTable()) {
|
80 |
$row->setMetadata('segment', 'pageTitle=^' . urlencode(urlencode(trim($label))));
|
81 |
} else {
|
82 |
+
$notDefinedName = ArchivingHelper::getUnknownActionName(Action::TYPE_PAGE_TITLE);
|
83 |
+
if (trim($label) == $notDefinedName) {
|
84 |
+
$row->setMetadata('segmentValue', '');
|
85 |
+
} else {
|
86 |
+
$row->setMetadata('segmentValue', urlencode(trim($label)));
|
87 |
+
}
|
88 |
}
|
89 |
} else if ($this->actionType == Action::TYPE_PAGE_URL && $urlPrefix) { // folder for older data w/ no folder URL metadata
|
90 |
+
if ($label === $notDefinedUrl) {
|
91 |
+
$row->setMetadata('segmentValue', '');
|
92 |
+
} else {
|
93 |
+
$row->setMetadata('segment', 'pageUrl=^' . urlencode(urlencode($urlPrefix . '/' . $label)));
|
94 |
+
}
|
95 |
}
|
96 |
}
|
97 |
|
app/plugins/Contents/Columns/ContentName.php
CHANGED
@@ -24,6 +24,7 @@ class ContentName extends ActionDimension
|
|
24 |
protected $nameSingular = 'Contents_ContentName';
|
25 |
protected $namePlural = 'Contents_ContentNames';
|
26 |
protected $acceptValues = 'The name of a content block, for instance "Ad Sale"';
|
|
|
27 |
protected $type = self::TYPE_TEXT;
|
28 |
protected $category = 'General_Actions';
|
29 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
24 |
protected $nameSingular = 'Contents_ContentName';
|
25 |
protected $namePlural = 'Contents_ContentNames';
|
26 |
protected $acceptValues = 'The name of a content block, for instance "Ad Sale"';
|
27 |
+
protected $suggestedValuesApi = 'Contents.getContentNames';
|
28 |
protected $type = self::TYPE_TEXT;
|
29 |
protected $category = 'General_Actions';
|
30 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
app/plugins/Contents/Columns/ContentPiece.php
CHANGED
@@ -23,6 +23,7 @@ class ContentPiece extends ActionDimension
|
|
23 |
protected $nameSingular = 'Contents_ContentPiece';
|
24 |
protected $namePlural = 'Contents_ContentPieces';
|
25 |
protected $acceptValues = 'The actual content. For instance "ad.jpg" or "My text ad"';
|
|
|
26 |
protected $type = self::TYPE_TEXT;
|
27 |
protected $category = 'General_Actions';
|
28 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
23 |
protected $nameSingular = 'Contents_ContentPiece';
|
24 |
protected $namePlural = 'Contents_ContentPieces';
|
25 |
protected $acceptValues = 'The actual content. For instance "ad.jpg" or "My text ad"';
|
26 |
+
protected $suggestedValuesApi = 'Contents.getContentPieces';
|
27 |
protected $type = self::TYPE_TEXT;
|
28 |
protected $category = 'General_Actions';
|
29 |
protected $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
|
app/plugins/CoreAdminHome/Tasks.php
CHANGED
@@ -195,6 +195,7 @@ class Tasks extends \Piwik\Plugin\Tasks
|
|
195 |
*/
|
196 |
public function notifyTrackingFailures()
|
197 |
{
|
|
|
198 |
$failures = $this->trackingFailures->getAllFailures();
|
199 |
$general = Config::getInstance()->General;
|
200 |
if (!empty($failures) && $general['enable_tracking_failures_notification']) {
|
@@ -251,11 +252,30 @@ class Tasks extends \Piwik\Plugin\Tasks
|
|
251 |
|
252 |
public function purgeInvalidatedArchives()
|
253 |
{
|
|
|
|
|
254 |
$archivesToPurge = new ArchivesToPurgeDistributedList();
|
255 |
foreach ($archivesToPurge->getAllAsDates() as $date) {
|
256 |
$this->archivePurger->purgeInvalidatedArchivesFrom($date);
|
257 |
|
258 |
$archivesToPurge->removeDate($date);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
259 |
}
|
260 |
}
|
261 |
|
195 |
*/
|
196 |
public function notifyTrackingFailures()
|
197 |
{
|
198 |
+
$this->cleanupTrackingFailures();
|
199 |
$failures = $this->trackingFailures->getAllFailures();
|
200 |
$general = Config::getInstance()->General;
|
201 |
if (!empty($failures) && $general['enable_tracking_failures_notification']) {
|
252 |
|
253 |
public function purgeInvalidatedArchives()
|
254 |
{
|
255 |
+
$purgedDates = [];
|
256 |
+
|
257 |
$archivesToPurge = new ArchivesToPurgeDistributedList();
|
258 |
foreach ($archivesToPurge->getAllAsDates() as $date) {
|
259 |
$this->archivePurger->purgeInvalidatedArchivesFrom($date);
|
260 |
|
261 |
$archivesToPurge->removeDate($date);
|
262 |
+
|
263 |
+
$purgedDates[$date->toString('Y-m')] = true;
|
264 |
+
}
|
265 |
+
|
266 |
+
// purge from today if not done already since we will have many archives to remove
|
267 |
+
$today = Date::today();
|
268 |
+
$todayStr = $today->toString('Y-m');
|
269 |
+
if (empty($purgedDates[$todayStr])) {
|
270 |
+
$this->archivePurger->purgeInvalidatedArchivesFrom($today);
|
271 |
+
$purgedDates[$todayStr] = true;
|
272 |
+
}
|
273 |
+
|
274 |
+
// handle yesterday if it belongs to a different month
|
275 |
+
$yesterday = Date::yesterday();
|
276 |
+
$yesterdayStr = $yesterday->toString('Y-m');
|
277 |
+
if (empty($purgedDates[$yesterdayStr])) {
|
278 |
+
$this->archivePurger->purgeInvalidatedArchivesFrom($yesterday);
|
279 |
}
|
280 |
}
|
281 |
|
app/plugins/CoreHome/Columns/UserId.php
CHANGED
@@ -12,6 +12,7 @@ use Piwik\Cache;
|
|
12 |
use Piwik\DataTable;
|
13 |
use Piwik\DataTable\Map;
|
14 |
use Piwik\Metrics;
|
|
|
15 |
use Piwik\Plugin\Dimension\VisitDimension;
|
16 |
use Piwik\Plugins\VisitsSummary\API as VisitsSummaryApi;
|
17 |
use Piwik\Tracker\Request;
|
@@ -39,6 +40,13 @@ class UserId extends VisitDimension
|
|
39 |
*/
|
40 |
protected $columnType = 'VARCHAR(200) NULL';
|
41 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
/**
|
43 |
* @param Request $request
|
44 |
* @param Visitor $visitor
|
12 |
use Piwik\DataTable;
|
13 |
use Piwik\DataTable\Map;
|
14 |
use Piwik\Metrics;
|
15 |
+
use Piwik\Plugin;
|
16 |
use Piwik\Plugin\Dimension\VisitDimension;
|
17 |
use Piwik\Plugins\VisitsSummary\API as VisitsSummaryApi;
|
18 |
use Piwik\Tracker\Request;
|
40 |
*/
|
41 |
protected $columnType = 'VARCHAR(200) NULL';
|
42 |
|
43 |
+
public function __construct()
|
44 |
+
{
|
45 |
+
if (Plugin\Manager::getInstance()->isPluginActivated('UserId')) {
|
46 |
+
$this->suggestedValuesApi = 'UserId.getUsers';
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
/**
|
51 |
* @param Request $request
|
52 |
* @param Visitor $visitor
|
app/plugins/CoreUpdater/Controller.php
CHANGED
@@ -12,6 +12,7 @@ use Exception;
|
|
12 |
use Piwik\AssetManager;
|
13 |
use Piwik\Common;
|
14 |
use Piwik\Config;
|
|
|
15 |
use Piwik\DbHelper;
|
16 |
use Piwik\Filechecks;
|
17 |
use Piwik\FileIntegrity;
|
@@ -172,6 +173,17 @@ class Controller extends \Piwik\Plugin\Controller
|
|
172 |
return $view->render();
|
173 |
}
|
174 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
175 |
public function oneClickResults()
|
176 |
{
|
177 |
Filesystem::deleteAllCacheOnUpdate();
|
12 |
use Piwik\AssetManager;
|
13 |
use Piwik\Common;
|
14 |
use Piwik\Config;
|
15 |
+
use Piwik\DataTable\Renderer\Json;
|
16 |
use Piwik\DbHelper;
|
17 |
use Piwik\Filechecks;
|
18 |
use Piwik\FileIntegrity;
|
173 |
return $view->render();
|
174 |
}
|
175 |
|
176 |
+
public function oneClickUpdatePartTwo()
|
177 |
+
{
|
178 |
+
Piwik::checkUserHasSuperUserAccess();
|
179 |
+
|
180 |
+
Json::sendHeaderJSON();
|
181 |
+
|
182 |
+
$messages = $this->updater->oneClickUpdatePartTwo();
|
183 |
+
|
184 |
+
echo json_encode($messages);
|
185 |
+
}
|
186 |
+
|
187 |
public function oneClickResults()
|
188 |
{
|
189 |
Filesystem::deleteAllCacheOnUpdate();
|
app/plugins/CoreUpdater/Updater.php
CHANGED
@@ -23,6 +23,7 @@ use Piwik\Plugins\Marketplace\Marketplace;
|
|
23 |
use Piwik\SettingsServer;
|
24 |
use Piwik\Translation\Translator;
|
25 |
use Piwik\Unzip;
|
|
|
26 |
use Piwik\Version;
|
27 |
|
28 |
class Updater
|
@@ -114,21 +115,6 @@ class Updater
|
|
114 |
$this->verifyDecompressedArchive($extractedArchiveDirectory);
|
115 |
$messages[] = $this->translator->translate('CoreUpdater_VerifyingUnpackedFiles');
|
116 |
|
117 |
-
if (Marketplace::isMarketplaceEnabled()) {
|
118 |
-
// we need to load the marketplace already here, otherwise it will use the new, updated file in Piwik 3
|
119 |
-
|
120 |
-
// we also need to make sure to create a new instance here as otherwise we would change the "global"
|
121 |
-
// environment, but we only want to change piwik version temporarily for this task here
|
122 |
-
$environment = StaticContainer::getContainer()->make('Piwik\Plugins\Marketplace\Environment');
|
123 |
-
$environment->setPiwikVersion($newVersion);
|
124 |
-
/** @var \Piwik\Plugins\Marketplace\Api\Client $marketplaceClient */
|
125 |
-
$marketplaceClient = StaticContainer::getContainer()->make('Piwik\Plugins\Marketplace\Api\Client', array(
|
126 |
-
'environment' => $environment
|
127 |
-
));
|
128 |
-
require_once PIWIK_DOCUMENT_ROOT . '/plugins/CorePluginsAdmin/PluginInstaller.php';
|
129 |
-
require_once PIWIK_DOCUMENT_ROOT . '/plugins/Marketplace/Api/Exception.php';
|
130 |
-
}
|
131 |
-
|
132 |
$this->installNewFiles($extractedArchiveDirectory);
|
133 |
$messages[] = $this->translator->translate('CoreUpdater_InstallingTheLatestVersion');
|
134 |
|
@@ -138,9 +124,45 @@ class Updater
|
|
138 |
throw new UpdaterException($e, $messages);
|
139 |
}
|
140 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
try {
|
142 |
|
143 |
-
if (Marketplace::isMarketplaceEnabled()
|
144 |
$messages[] = $this->translator->translate('CoreUpdater_CheckingForPluginUpdates');
|
145 |
$pluginManager = PluginManager::getInstance();
|
146 |
$pluginManager->loadAllPluginsAndGetTheirInfo();
|
@@ -152,7 +174,7 @@ class Updater
|
|
152 |
foreach ($pluginsWithUpdate as $pluginWithUpdate) {
|
153 |
$pluginName = $pluginWithUpdate['name'];
|
154 |
$messages[] = $this->translator->translate('CoreUpdater_UpdatingPluginXToVersionY',
|
155 |
-
|
156 |
$pluginInstaller = new PluginInstaller($marketplaceClient);
|
157 |
$pluginInstaller->installOrUpdatePluginFromMarketplace($pluginName);
|
158 |
}
|
@@ -163,15 +185,6 @@ class Updater
|
|
163 |
throw new UpdaterException($e, $messages);
|
164 |
}
|
165 |
|
166 |
-
try {
|
167 |
-
$disabledPluginNames = $this->disableIncompatiblePlugins($newVersion);
|
168 |
-
if (!empty($disabledPluginNames)) {
|
169 |
-
$messages[] = $this->translator->translate('CoreUpdater_DisablingIncompatiblePlugins', implode(', ', $disabledPluginNames));
|
170 |
-
}
|
171 |
-
} catch (Exception $e) {
|
172 |
-
throw new UpdaterException($e, $messages);
|
173 |
-
}
|
174 |
-
|
175 |
return $messages;
|
176 |
}
|
177 |
|
23 |
use Piwik\SettingsServer;
|
24 |
use Piwik\Translation\Translator;
|
25 |
use Piwik\Unzip;
|
26 |
+
use Piwik\Url;
|
27 |
use Piwik\Version;
|
28 |
|
29 |
class Updater
|
115 |
$this->verifyDecompressedArchive($extractedArchiveDirectory);
|
116 |
$messages[] = $this->translator->translate('CoreUpdater_VerifyingUnpackedFiles');
|
117 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
$this->installNewFiles($extractedArchiveDirectory);
|
119 |
$messages[] = $this->translator->translate('CoreUpdater_InstallingTheLatestVersion');
|
120 |
|
124 |
throw new UpdaterException($e, $messages);
|
125 |
}
|
126 |
|
127 |
+
$partTwoUrl = Url::getCurrentUrlWithoutQueryString() . Url::getCurrentQueryStringWithParametersModified([
|
128 |
+
'action' => 'oneClickUpdatePartTwo',
|
129 |
+
]);
|
130 |
+
|
131 |
+
$response = Http::sendHttpRequest($partTwoUrl, 300);
|
132 |
+
$response = @json_decode($response, $assoc = true);
|
133 |
+
|
134 |
+
$messages = array_merge($messages, $response);
|
135 |
+
|
136 |
+
try {
|
137 |
+
$disabledPluginNames = $this->disableIncompatiblePlugins($newVersion);
|
138 |
+
if (!empty($disabledPluginNames)) {
|
139 |
+
$messages[] = $this->translator->translate('CoreUpdater_DisablingIncompatiblePlugins', implode(', ', $disabledPluginNames));
|
140 |
+
}
|
141 |
+
} catch (Exception $e) {
|
142 |
+
throw new UpdaterException($e, $messages);
|
143 |
+
}
|
144 |
+
|
145 |
+
return $messages;
|
146 |
+
}
|
147 |
+
|
148 |
+
public function oneClickUpdatePartTwo()
|
149 |
+
{
|
150 |
+
$messages = [];
|
151 |
+
|
152 |
+
$newVersion = Version::VERSION;
|
153 |
+
|
154 |
+
// we also need to make sure to create a new instance here as otherwise we would change the "global"
|
155 |
+
// environment, but we only want to change piwik version temporarily for this task here
|
156 |
+
$environment = StaticContainer::getContainer()->make('Piwik\Plugins\Marketplace\Environment');
|
157 |
+
$environment->setPiwikVersion($newVersion);
|
158 |
+
/** @var \Piwik\Plugins\Marketplace\Api\Client $marketplaceClient */
|
159 |
+
$marketplaceClient = StaticContainer::getContainer()->make('Piwik\Plugins\Marketplace\Api\Client', array(
|
160 |
+
'environment' => $environment
|
161 |
+
));
|
162 |
+
|
163 |
try {
|
164 |
|
165 |
+
if (Marketplace::isMarketplaceEnabled()) {
|
166 |
$messages[] = $this->translator->translate('CoreUpdater_CheckingForPluginUpdates');
|
167 |
$pluginManager = PluginManager::getInstance();
|
168 |
$pluginManager->loadAllPluginsAndGetTheirInfo();
|
174 |
foreach ($pluginsWithUpdate as $pluginWithUpdate) {
|
175 |
$pluginName = $pluginWithUpdate['name'];
|
176 |
$messages[] = $this->translator->translate('CoreUpdater_UpdatingPluginXToVersionY',
|
177 |
+
array($pluginName, $pluginWithUpdate['version']));
|
178 |
$pluginInstaller = new PluginInstaller($marketplaceClient);
|
179 |
$pluginInstaller->installOrUpdatePluginFromMarketplace($pluginName);
|
180 |
}
|
185 |
throw new UpdaterException($e, $messages);
|
186 |
}
|
187 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
188 |
return $messages;
|
189 |
}
|
190 |
|
app/plugins/CustomPiwikJs/TrackingCode/JsTestPluginTrackerFiles.php
CHANGED
@@ -19,6 +19,23 @@ class JsTestPluginTrackerFiles extends PluginTrackerFiles
|
|
19 |
$this->ignoreMinified = true;
|
20 |
}
|
21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
protected function isPluginActivated($pluginName)
|
23 |
{
|
24 |
return true;
|
19 |
$this->ignoreMinified = true;
|
20 |
}
|
21 |
|
22 |
+
protected function getDirectoriesToLook()
|
23 |
+
{
|
24 |
+
$dirs = array();
|
25 |
+
$trackerFiles = \_glob(PIWIK_DOCUMENT_ROOT . '/plugins/*/' . self::TRACKER_FILE);
|
26 |
+
foreach ($trackerFiles as $trackerFile) {
|
27 |
+
$pluginName = $this->getPluginNameFromFile($trackerFile);
|
28 |
+
$dirs[$pluginName] = dirname($trackerFile) . '/';
|
29 |
+
}
|
30 |
+
return $dirs;
|
31 |
+
}
|
32 |
+
|
33 |
+
protected function getPluginNameFromFile($file)
|
34 |
+
{
|
35 |
+
$file = str_replace(array(PIWIK_DOCUMENT_ROOT . '/plugins/', self::TRACKER_FILE), '', $file);
|
36 |
+
return trim($file, '/');
|
37 |
+
}
|
38 |
+
|
39 |
protected function isPluginActivated($pluginName)
|
40 |
{
|
41 |
return true;
|
app/plugins/Events/Columns/EventAction.php
CHANGED
@@ -24,6 +24,7 @@ class EventAction extends ActionDimension
|
|
24 |
protected $segmentName = 'eventAction';
|
25 |
protected $nameSingular = 'Events_EventAction';
|
26 |
protected $namePlural = 'Events_EventActions';
|
|
|
27 |
protected $category = 'Events_Events';
|
28 |
protected $sqlFilter = '\Piwik\Tracker\TableLogAction::getIdActionFromSegment';
|
29 |
|
24 |
protected $segmentName = 'eventAction';
|
25 |
protected $nameSingular = 'Events_EventAction';
|
26 |
protected $namePlural = 'Events_EventActions';
|
27 |
+
protected $suggestedValuesApi = 'Events.getAction';
|
28 |
protected $category = 'Events_Events';
|
29 |
protected $sqlFilter = '\Piwik\Tracker\TableLogAction::getIdActionFromSegment';
|
30 |
|
app/plugins/Events/Columns/EventCategory.php
CHANGED
@@ -24,6 +24,7 @@ class EventCategory extends ActionDimension
|
|
24 |
protected $category = 'Events_Events';
|
25 |
protected $sqlFilter = '\Piwik\Tracker\TableLogAction::getIdActionFromSegment';
|
26 |
protected $segmentName = 'eventCategory';
|
|
|
27 |
protected $nameSingular = 'Events_EventCategory';
|
28 |
protected $namePlural = 'Events_EventCategories';
|
29 |
|
24 |
protected $category = 'Events_Events';
|
25 |
protected $sqlFilter = '\Piwik\Tracker\TableLogAction::getIdActionFromSegment';
|
26 |
protected $segmentName = 'eventCategory';
|
27 |
+
protected $suggestedValuesApi = 'Events.getCategory';
|
28 |
protected $nameSingular = 'Events_EventCategory';
|
29 |
protected $namePlural = 'Events_EventCategories';
|
30 |
|
app/plugins/Events/Columns/EventName.php
CHANGED
@@ -22,6 +22,8 @@ class EventName extends ActionDimension
|
|
22 |
protected $category = 'Events_Events';
|
23 |
protected $sqlFilter = '\Piwik\Tracker\TableLogAction::getIdActionFromSegment';
|
24 |
protected $segmentName = 'eventName';
|
|
|
|
|
25 |
protected $nameSingular = 'Events_EventName';
|
26 |
protected $namePlural = 'Events_EventNames';
|
27 |
|
22 |
protected $category = 'Events_Events';
|
23 |
protected $sqlFilter = '\Piwik\Tracker\TableLogAction::getIdActionFromSegment';
|
24 |
protected $segmentName = 'eventName';
|
25 |
+
protected $suggestedValuesApi = 'Events.getName';
|
26 |
+
|
27 |
protected $nameSingular = 'Events_EventName';
|
28 |
protected $namePlural = 'Events_EventNames';
|
29 |
|
app/plugins/Live/Controller.php
CHANGED
@@ -195,6 +195,8 @@ class Controller extends \Piwik\Plugin\Controller
|
|
195 |
return '';
|
196 |
}
|
197 |
|
|
|
|
|
198 |
$view = new View('@Live/getVisitList.twig');
|
199 |
$view->idSite = $this->idSite;
|
200 |
$view->startCounter = $startCounter < $nextVisits->getRowsCount() ? $nextVisits->getRowsCount() : $startCounter;
|
195 |
return '';
|
196 |
}
|
197 |
|
198 |
+
VisitorLog::groupActionsByPageviewId($nextVisits);
|
199 |
+
|
200 |
$view = new View('@Live/getVisitList.twig');
|
201 |
$view->idSite = $this->idSite;
|
202 |
$view->startCounter = $startCounter < $nextVisits->getRowsCount() ? $nextVisits->getRowsCount() : $startCounter;
|
app/plugins/Marketplace/Api/Client.php
CHANGED
@@ -8,11 +8,9 @@
|
|
8 |
*/
|
9 |
namespace Piwik\Plugins\Marketplace\Api;
|
10 |
|
11 |
-
use Piwik\API\Request;
|
12 |
use Piwik\Cache;
|
13 |
use Piwik\Common;
|
14 |
use Piwik\Container\StaticContainer;
|
15 |
-
use Piwik\DataTable;
|
16 |
use Piwik\Filesystem;
|
17 |
use Piwik\Http;
|
18 |
use Piwik\Piwik;
|
8 |
*/
|
9 |
namespace Piwik\Plugins\Marketplace\Api;
|
10 |
|
|
|
11 |
use Piwik\Cache;
|
12 |
use Piwik\Common;
|
13 |
use Piwik\Container\StaticContainer;
|
|
|
14 |
use Piwik\Filesystem;
|
15 |
use Piwik\Http;
|
16 |
use Piwik\Piwik;
|
app/plugins/UserId/API.php
CHANGED
@@ -40,6 +40,7 @@ class API extends \Piwik\Plugin\API
|
|
40 |
|
41 |
$dataTable->queueFilter('ReplaceColumnNames');
|
42 |
$dataTable->queueFilter('ReplaceSummaryRowLabel');
|
|
|
43 |
|
44 |
return $dataTable;
|
45 |
}
|
40 |
|
41 |
$dataTable->queueFilter('ReplaceColumnNames');
|
42 |
$dataTable->queueFilter('ReplaceSummaryRowLabel');
|
43 |
+
$dataTable->queueFilter('AddSegmentByLabel', array('userId'));
|
44 |
|
45 |
return $dataTable;
|
46 |
}
|
app/vendor/autoload.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
-
return
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInita7390451fa333dcc08d2dd84c32bbfc6::getLoader();
|
app/vendor/composer/autoload_classmap.php
CHANGED
@@ -527,6 +527,7 @@ return array(
|
|
527 |
'Piwik\\CronArchive\\SegmentArchivingRequestUrlProvider' => $baseDir . '/core/CronArchive/SegmentArchivingRequestUrlProvider.php',
|
528 |
'Piwik\\CronArchive\\SharedSiteIds' => $baseDir . '/core/CronArchive/SharedSiteIds.php',
|
529 |
'Piwik\\CronArchive\\SitesToReprocessDistributedList' => $baseDir . '/core/CronArchive/SitesToReprocessDistributedList.php',
|
|
|
530 |
'Piwik\\DataAccess\\Actions' => $baseDir . '/core/DataAccess/Actions.php',
|
531 |
'Piwik\\DataAccess\\ArchiveSelector' => $baseDir . '/core/DataAccess/ArchiveSelector.php',
|
532 |
'Piwik\\DataAccess\\ArchiveTableCreator' => $baseDir . '/core/DataAccess/ArchiveTableCreator.php',
|
@@ -2604,6 +2605,7 @@ return array(
|
|
2604 |
'Piwik\\Updates\\Updates_3_12_0_b7' => $baseDir . '/core/Updates/3.12.0-b7.php',
|
2605 |
'Piwik\\Updates\\Updates_3_13_1_b2' => $baseDir . '/core/Updates/3.13.1-b2.php',
|
2606 |
'Piwik\\Updates\\Updates_3_13_4_b1' => $baseDir . '/core/Updates/3.13.4-b1.php',
|
|
|
2607 |
'Piwik\\Updates\\Updates_3_5_0_b2' => $baseDir . '/core/Updates/3.5.0-b2.php',
|
2608 |
'Piwik\\Updates\\Updates_3_5_0_b4' => $baseDir . '/core/Updates/3.5.0-b4.php',
|
2609 |
'Piwik\\Updates\\Updates_3_5_0_rc2' => $baseDir . '/core/Updates/3.5.0-rc2.php',
|
527 |
'Piwik\\CronArchive\\SegmentArchivingRequestUrlProvider' => $baseDir . '/core/CronArchive/SegmentArchivingRequestUrlProvider.php',
|
528 |
'Piwik\\CronArchive\\SharedSiteIds' => $baseDir . '/core/CronArchive/SharedSiteIds.php',
|
529 |
'Piwik\\CronArchive\\SitesToReprocessDistributedList' => $baseDir . '/core/CronArchive/SitesToReprocessDistributedList.php',
|
530 |
+
'Piwik\\CronArchive\\StopArchiverException' => $baseDir . '/core/CronArchive/StopArchiverException.php',
|
531 |
'Piwik\\DataAccess\\Actions' => $baseDir . '/core/DataAccess/Actions.php',
|
532 |
'Piwik\\DataAccess\\ArchiveSelector' => $baseDir . '/core/DataAccess/ArchiveSelector.php',
|
533 |
'Piwik\\DataAccess\\ArchiveTableCreator' => $baseDir . '/core/DataAccess/ArchiveTableCreator.php',
|
2605 |
'Piwik\\Updates\\Updates_3_12_0_b7' => $baseDir . '/core/Updates/3.12.0-b7.php',
|
2606 |
'Piwik\\Updates\\Updates_3_13_1_b2' => $baseDir . '/core/Updates/3.13.1-b2.php',
|
2607 |
'Piwik\\Updates\\Updates_3_13_4_b1' => $baseDir . '/core/Updates/3.13.4-b1.php',
|
2608 |
+
'Piwik\\Updates\\Updates_3_13_5_rc1' => $baseDir . '/core/Updates/3.13.5-rc1.php',
|
2609 |
'Piwik\\Updates\\Updates_3_5_0_b2' => $baseDir . '/core/Updates/3.5.0-b2.php',
|
2610 |
'Piwik\\Updates\\Updates_3_5_0_b4' => $baseDir . '/core/Updates/3.5.0-b4.php',
|
2611 |
'Piwik\\Updates\\Updates_3_5_0_rc2' => $baseDir . '/core/Updates/3.5.0-rc2.php',
|
app/vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -22,9 +22,9 @@ class ComposerAutoloaderInitd94bcb60246118fb0b76072b15fbc1cf
|
|
22 |
return self::$loader;
|
23 |
}
|
24 |
|
25 |
-
spl_autoload_register(array('
|
26 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
27 |
-
spl_autoload_unregister(array('
|
28 |
|
29 |
$includePaths = require __DIR__ . '/include_paths.php';
|
30 |
$includePaths[] = get_include_path();
|
@@ -34,7 +34,7 @@ class ComposerAutoloaderInitd94bcb60246118fb0b76072b15fbc1cf
|
|
34 |
if ($useStaticLoader) {
|
35 |
require_once __DIR__ . '/autoload_static.php';
|
36 |
|
37 |
-
call_user_func(\Composer\Autoload\
|
38 |
} else {
|
39 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
40 |
foreach ($map as $namespace => $path) {
|
@@ -55,19 +55,19 @@ class ComposerAutoloaderInitd94bcb60246118fb0b76072b15fbc1cf
|
|
55 |
$loader->register(false);
|
56 |
|
57 |
if ($useStaticLoader) {
|
58 |
-
$includeFiles = Composer\Autoload\
|
59 |
} else {
|
60 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
61 |
}
|
62 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
63 |
-
|
64 |
}
|
65 |
|
66 |
return $loader;
|
67 |
}
|
68 |
}
|
69 |
|
70 |
-
function
|
71 |
{
|
72 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
73 |
require $file;
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInita7390451fa333dcc08d2dd84c32bbfc6
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
22 |
return self::$loader;
|
23 |
}
|
24 |
|
25 |
+
spl_autoload_register(array('ComposerAutoloaderInita7390451fa333dcc08d2dd84c32bbfc6', 'loadClassLoader'), true, false);
|
26 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
27 |
+
spl_autoload_unregister(array('ComposerAutoloaderInita7390451fa333dcc08d2dd84c32bbfc6', 'loadClassLoader'));
|
28 |
|
29 |
$includePaths = require __DIR__ . '/include_paths.php';
|
30 |
$includePaths[] = get_include_path();
|
34 |
if ($useStaticLoader) {
|
35 |
require_once __DIR__ . '/autoload_static.php';
|
36 |
|
37 |
+
call_user_func(\Composer\Autoload\ComposerStaticInita7390451fa333dcc08d2dd84c32bbfc6::getInitializer($loader));
|
38 |
} else {
|
39 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
40 |
foreach ($map as $namespace => $path) {
|
55 |
$loader->register(false);
|
56 |
|
57 |
if ($useStaticLoader) {
|
58 |
+
$includeFiles = Composer\Autoload\ComposerStaticInita7390451fa333dcc08d2dd84c32bbfc6::$files;
|
59 |
} else {
|
60 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
61 |
}
|
62 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
63 |
+
composerRequirea7390451fa333dcc08d2dd84c32bbfc6($fileIdentifier, $file);
|
64 |
}
|
65 |
|
66 |
return $loader;
|
67 |
}
|
68 |
}
|
69 |
|
70 |
+
function composerRequirea7390451fa333dcc08d2dd84c32bbfc6($fileIdentifier, $file)
|
71 |
{
|
72 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
73 |
require $file;
|
app/vendor/composer/autoload_static.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
-
class
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'04c6c5c2f7095ccf6c481d3e53e1776f' => __DIR__ . '/..' . '/mustangostang/spyc/Spyc.php',
|
@@ -769,6 +769,7 @@ class ComposerStaticInitd94bcb60246118fb0b76072b15fbc1cf
|
|
769 |
'Piwik\\CronArchive\\SegmentArchivingRequestUrlProvider' => __DIR__ . '/../..' . '/core/CronArchive/SegmentArchivingRequestUrlProvider.php',
|
770 |
'Piwik\\CronArchive\\SharedSiteIds' => __DIR__ . '/../..' . '/core/CronArchive/SharedSiteIds.php',
|
771 |
'Piwik\\CronArchive\\SitesToReprocessDistributedList' => __DIR__ . '/../..' . '/core/CronArchive/SitesToReprocessDistributedList.php',
|
|
|
772 |
'Piwik\\DataAccess\\Actions' => __DIR__ . '/../..' . '/core/DataAccess/Actions.php',
|
773 |
'Piwik\\DataAccess\\ArchiveSelector' => __DIR__ . '/../..' . '/core/DataAccess/ArchiveSelector.php',
|
774 |
'Piwik\\DataAccess\\ArchiveTableCreator' => __DIR__ . '/../..' . '/core/DataAccess/ArchiveTableCreator.php',
|
@@ -2846,6 +2847,7 @@ class ComposerStaticInitd94bcb60246118fb0b76072b15fbc1cf
|
|
2846 |
'Piwik\\Updates\\Updates_3_12_0_b7' => __DIR__ . '/../..' . '/core/Updates/3.12.0-b7.php',
|
2847 |
'Piwik\\Updates\\Updates_3_13_1_b2' => __DIR__ . '/../..' . '/core/Updates/3.13.1-b2.php',
|
2848 |
'Piwik\\Updates\\Updates_3_13_4_b1' => __DIR__ . '/../..' . '/core/Updates/3.13.4-b1.php',
|
|
|
2849 |
'Piwik\\Updates\\Updates_3_5_0_b2' => __DIR__ . '/../..' . '/core/Updates/3.5.0-b2.php',
|
2850 |
'Piwik\\Updates\\Updates_3_5_0_b4' => __DIR__ . '/../..' . '/core/Updates/3.5.0-b4.php',
|
2851 |
'Piwik\\Updates\\Updates_3_5_0_rc2' => __DIR__ . '/../..' . '/core/Updates/3.5.0-rc2.php',
|
@@ -3604,11 +3606,11 @@ class ComposerStaticInitd94bcb60246118fb0b76072b15fbc1cf
|
|
3604 |
public static function getInitializer(ClassLoader $loader)
|
3605 |
{
|
3606 |
return \Closure::bind(function () use ($loader) {
|
3607 |
-
$loader->prefixLengthsPsr4 =
|
3608 |
-
$loader->prefixDirsPsr4 =
|
3609 |
-
$loader->prefixesPsr0 =
|
3610 |
-
$loader->fallbackDirsPsr0 =
|
3611 |
-
$loader->classMap =
|
3612 |
|
3613 |
}, null, ClassLoader::class);
|
3614 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInita7390451fa333dcc08d2dd84c32bbfc6
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'04c6c5c2f7095ccf6c481d3e53e1776f' => __DIR__ . '/..' . '/mustangostang/spyc/Spyc.php',
|
769 |
'Piwik\\CronArchive\\SegmentArchivingRequestUrlProvider' => __DIR__ . '/../..' . '/core/CronArchive/SegmentArchivingRequestUrlProvider.php',
|
770 |
'Piwik\\CronArchive\\SharedSiteIds' => __DIR__ . '/../..' . '/core/CronArchive/SharedSiteIds.php',
|
771 |
'Piwik\\CronArchive\\SitesToReprocessDistributedList' => __DIR__ . '/../..' . '/core/CronArchive/SitesToReprocessDistributedList.php',
|
772 |
+
'Piwik\\CronArchive\\StopArchiverException' => __DIR__ . '/../..' . '/core/CronArchive/StopArchiverException.php',
|
773 |
'Piwik\\DataAccess\\Actions' => __DIR__ . '/../..' . '/core/DataAccess/Actions.php',
|
774 |
'Piwik\\DataAccess\\ArchiveSelector' => __DIR__ . '/../..' . '/core/DataAccess/ArchiveSelector.php',
|
775 |
'Piwik\\DataAccess\\ArchiveTableCreator' => __DIR__ . '/../..' . '/core/DataAccess/ArchiveTableCreator.php',
|
2847 |
'Piwik\\Updates\\Updates_3_12_0_b7' => __DIR__ . '/../..' . '/core/Updates/3.12.0-b7.php',
|
2848 |
'Piwik\\Updates\\Updates_3_13_1_b2' => __DIR__ . '/../..' . '/core/Updates/3.13.1-b2.php',
|
2849 |
'Piwik\\Updates\\Updates_3_13_4_b1' => __DIR__ . '/../..' . '/core/Updates/3.13.4-b1.php',
|
2850 |
+
'Piwik\\Updates\\Updates_3_13_5_rc1' => __DIR__ . '/../..' . '/core/Updates/3.13.5-rc1.php',
|
2851 |
'Piwik\\Updates\\Updates_3_5_0_b2' => __DIR__ . '/../..' . '/core/Updates/3.5.0-b2.php',
|
2852 |
'Piwik\\Updates\\Updates_3_5_0_b4' => __DIR__ . '/../..' . '/core/Updates/3.5.0-b4.php',
|
2853 |
'Piwik\\Updates\\Updates_3_5_0_rc2' => __DIR__ . '/../..' . '/core/Updates/3.5.0-rc2.php',
|
3606 |
public static function getInitializer(ClassLoader $loader)
|
3607 |
{
|
3608 |
return \Closure::bind(function () use ($loader) {
|
3609 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInita7390451fa333dcc08d2dd84c32bbfc6::$prefixLengthsPsr4;
|
3610 |
+
$loader->prefixDirsPsr4 = ComposerStaticInita7390451fa333dcc08d2dd84c32bbfc6::$prefixDirsPsr4;
|
3611 |
+
$loader->prefixesPsr0 = ComposerStaticInita7390451fa333dcc08d2dd84c32bbfc6::$prefixesPsr0;
|
3612 |
+
$loader->fallbackDirsPsr0 = ComposerStaticInita7390451fa333dcc08d2dd84c32bbfc6::$fallbackDirsPsr0;
|
3613 |
+
$loader->classMap = ComposerStaticInita7390451fa333dcc08d2dd84c32bbfc6::$classMap;
|
3614 |
|
3615 |
}, null, ClassLoader::class);
|
3616 |
}
|
app/vendor/composer/installed.json
CHANGED
@@ -1164,17 +1164,17 @@
|
|
1164 |
},
|
1165 |
{
|
1166 |
"name": "piwik/device-detector",
|
1167 |
-
"version": "3.12.
|
1168 |
-
"version_normalized": "3.12.
|
1169 |
"source": {
|
1170 |
"type": "git",
|
1171 |
"url": "https://github.com/matomo-org/device-detector.git",
|
1172 |
-
"reference": "
|
1173 |
},
|
1174 |
"dist": {
|
1175 |
"type": "zip",
|
1176 |
-
"url": "https://api.github.com/repos/matomo-org/device-detector/zipball/
|
1177 |
-
"reference": "
|
1178 |
"shasum": ""
|
1179 |
},
|
1180 |
"require": {
|
@@ -1192,7 +1192,7 @@
|
|
1192 |
"doctrine/cache": "Can directly be used for caching purpose",
|
1193 |
"ext-yaml": "Necessary for using the Pecl YAML parser"
|
1194 |
},
|
1195 |
-
"time": "2020-
|
1196 |
"type": "library",
|
1197 |
"installation-source": "dist",
|
1198 |
"autoload": {
|
1164 |
},
|
1165 |
{
|
1166 |
"name": "piwik/device-detector",
|
1167 |
+
"version": "3.12.4",
|
1168 |
+
"version_normalized": "3.12.4.0",
|
1169 |
"source": {
|
1170 |
"type": "git",
|
1171 |
"url": "https://github.com/matomo-org/device-detector.git",
|
1172 |
+
"reference": "6a92e45a55eb507f53581e9add7dc82835ad6424"
|
1173 |
},
|
1174 |
"dist": {
|
1175 |
"type": "zip",
|
1176 |
+
"url": "https://api.github.com/repos/matomo-org/device-detector/zipball/6a92e45a55eb507f53581e9add7dc82835ad6424",
|
1177 |
+
"reference": "6a92e45a55eb507f53581e9add7dc82835ad6424",
|
1178 |
"shasum": ""
|
1179 |
},
|
1180 |
"require": {
|
1192 |
"doctrine/cache": "Can directly be used for caching purpose",
|
1193 |
"ext-yaml": "Necessary for using the Pecl YAML parser"
|
1194 |
},
|
1195 |
+
"time": "2020-03-31T08:53:12+00:00",
|
1196 |
"type": "library",
|
1197 |
"installation-source": "dist",
|
1198 |
"autoload": {
|
app/vendor/piwik/device-detector/DeviceDetector.php
CHANGED
@@ -50,7 +50,7 @@ class DeviceDetector
|
|
50 |
/**
|
51 |
* Current version number of DeviceDetector
|
52 |
*/
|
53 |
-
const VERSION = '3.12.
|
54 |
|
55 |
/**
|
56 |
* Holds all registered client types
|
50 |
/**
|
51 |
* Current version number of DeviceDetector
|
52 |
*/
|
53 |
+
const VERSION = '3.12.4';
|
54 |
|
55 |
/**
|
56 |
* Holds all registered client types
|
app/vendor/piwik/device-detector/Parser/Client/Browser.php
CHANGED
@@ -242,6 +242,7 @@ class Browser extends ClientParserAbstract
|
|
242 |
'TB' => 'Tenta Browser',
|
243 |
'TZ' => 'Tizen Browser',
|
244 |
'TS' => 'TweakStyle',
|
|
|
245 |
'UB' => 'UBrowser',
|
246 |
'UC' => 'UC Browser',
|
247 |
'UM' => 'UC Browser Mini',
|
@@ -276,7 +277,7 @@ class Browser extends ClientParserAbstract
|
|
276 |
'BlackBerry Browser' => array('BB'),
|
277 |
'Baidu' => array('BD', 'BS'),
|
278 |
'Amiga' => array('AV', 'AW'),
|
279 |
-
'Chrome' => array('CH', 'BA', 'BR', 'CC', 'CD', 'CM', 'CI', 'CF', 'CN', 'CR', 'CP', 'DD', 'IR', 'RM', 'AO', 'TS', 'VI', 'PT', 'AS', 'TB', 'AD', 'SB', 'WP', 'I3', 'CV', 'WH', 'SZ', 'QW', 'LF', 'KW', '2B', 'CE', 'EC', 'MT', 'MS', 'HA', 'OC', 'MZ', 'BM', 'KN', 'SW', 'M1', 'FA', 'TA', 'AH', 'CL', 'SU', 'EU', 'UB', 'LO', 'VG'),
|
280 |
'Firefox' => array('FF', 'FE', 'FM', 'SX', 'FB', 'PX', 'MB', 'EI', 'WF', 'CU', 'TF', 'QM', 'FR', 'I4', 'GZ', 'MO', 'F1', 'BI', 'MN', 'BH', 'TO', 'OS', 'FY'),
|
281 |
'Internet Explorer' => array('IE', 'IM', 'PS'),
|
282 |
'Konqueror' => array('KO'),
|
242 |
'TB' => 'Tenta Browser',
|
243 |
'TZ' => 'Tizen Browser',
|
244 |
'TS' => 'TweakStyle',
|
245 |
+
'TV' => 'TV Bro',
|
246 |
'UB' => 'UBrowser',
|
247 |
'UC' => 'UC Browser',
|
248 |
'UM' => 'UC Browser Mini',
|
277 |
'BlackBerry Browser' => array('BB'),
|
278 |
'Baidu' => array('BD', 'BS'),
|
279 |
'Amiga' => array('AV', 'AW'),
|
280 |
+
'Chrome' => array('CH', 'BA', 'BR', 'CC', 'CD', 'CM', 'CI', 'CF', 'CN', 'CR', 'CP', 'DD', 'IR', 'RM', 'AO', 'TS', 'VI', 'PT', 'AS', 'TB', 'AD', 'SB', 'WP', 'I3', 'CV', 'WH', 'SZ', 'QW', 'LF', 'KW', '2B', 'CE', 'EC', 'MT', 'MS', 'HA', 'OC', 'MZ', 'BM', 'KN', 'SW', 'M1', 'FA', 'TA', 'AH', 'CL', 'SU', 'EU', 'UB', 'LO', 'VG', 'TV'),
|
281 |
'Firefox' => array('FF', 'FE', 'FM', 'SX', 'FB', 'PX', 'MB', 'EI', 'WF', 'CU', 'TF', 'QM', 'FR', 'I4', 'GZ', 'MO', 'F1', 'BI', 'MN', 'BH', 'TO', 'OS', 'FY'),
|
282 |
'Internet Explorer' => array('IE', 'IM', 'PS'),
|
283 |
'Konqueror' => array('KO'),
|
app/vendor/piwik/device-detector/Parser/Device/DeviceParserAbstract.php
CHANGED
@@ -65,6 +65,7 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
65 |
public static $deviceBrands = array(
|
66 |
'3Q' => '3Q',
|
67 |
'4G' => '4Good',
|
|
|
68 |
'AA' => 'AllCall',
|
69 |
'AC' => 'Acer',
|
70 |
'A9' => 'Advan',
|
@@ -77,11 +78,14 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
77 |
'AK' => 'Akai',
|
78 |
'1A' => 'Alba',
|
79 |
'AL' => 'Alcatel',
|
|
|
|
|
80 |
'A2' => 'Allview',
|
81 |
'A7' => 'Allwinner',
|
82 |
'A1' => 'Altech UEC',
|
83 |
'A5' => 'altron',
|
84 |
'AN' => 'Arnova',
|
|
|
85 |
'KN' => 'Amazon',
|
86 |
'AG' => 'AMGOO',
|
87 |
'AO' => 'Amoi',
|
@@ -121,6 +125,7 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
121 |
'B2' => 'Blackview',
|
122 |
'B4' => 'bogo',
|
123 |
'BW' => 'Boway',
|
|
|
124 |
'BX' => 'bq',
|
125 |
'BV' => 'Bravis',
|
126 |
'BR' => 'Brondi',
|
@@ -135,7 +140,9 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
135 |
'CE' => 'Celkon',
|
136 |
'CC' => 'ConCorde',
|
137 |
'C2' => 'Changhong',
|
|
|
138 |
'CH' => 'Cherry Mobile',
|
|
|
139 |
'L8' => 'Clarmin',
|
140 |
'CK' => 'Cricket',
|
141 |
'C1' => 'Crosscall',
|
@@ -157,10 +164,12 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
157 |
'CX' => 'Crescent',
|
158 |
'C4' => 'Cyrus',
|
159 |
'CV' => 'CVTE',
|
|
|
160 |
'DA' => 'Danew',
|
161 |
'DT' => 'Datang',
|
162 |
'D1' => 'Datsun',
|
163 |
'DE' => 'Denver',
|
|
|
164 |
'DX' => 'DEXP',
|
165 |
'DS' => 'Desay',
|
166 |
'DB' => 'Dbtel',
|
@@ -171,6 +180,7 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
171 |
'D3' => 'Digicel',
|
172 |
'DD' => 'Digiland',
|
173 |
'D2' => 'Digma',
|
|
|
174 |
'DL' => 'Dell',
|
175 |
'DN' => 'DNS',
|
176 |
'DM' => 'DMM',
|
@@ -234,6 +244,7 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
234 |
'GG' => 'Gigabyte',
|
235 |
'GS' => 'Gigaset',
|
236 |
'GZ' => 'Ginzzu',
|
|
|
237 |
'GC' => 'GOCLEVER',
|
238 |
'GL' => 'Goly',
|
239 |
'GO' => 'Google',
|
@@ -279,6 +290,7 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
279 |
'IS' => 'Insignia',
|
280 |
'I4' => 'Inoi',
|
281 |
'IR' => 'iRola',
|
|
|
282 |
'I6' => 'Irbis',
|
283 |
'II' => 'Inkti',
|
284 |
'IX' => 'Intex',
|
@@ -295,9 +307,13 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
295 |
'J5' => 'Just5',
|
296 |
'KL' => 'Kalley',
|
297 |
'K4' => 'Kaan',
|
|
|
|
|
298 |
'KA' => 'Karbonn',
|
|
|
299 |
'KD' => 'KDDI',
|
300 |
'K1' => 'Kiano',
|
|
|
301 |
'KI' => 'Kingsun',
|
302 |
'KC' => 'Kocaso',
|
303 |
'KG' => 'Kogan',
|
@@ -341,11 +357,14 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
341 |
'LX' => 'Lexibook',
|
342 |
'LY' => 'LYF',
|
343 |
'LU' => 'Lumus',
|
|
|
344 |
'MN' => 'M4tel',
|
345 |
'MJ' => 'Majestic',
|
346 |
'MA' => 'Manta Multimedia',
|
|
|
347 |
'2M' => 'Masstel',
|
348 |
'MW' => 'Maxwest',
|
|
|
349 |
'M0' => 'Maze',
|
350 |
'MB' => 'Mobistel',
|
351 |
'0M' => 'Mecool',
|
@@ -383,13 +402,16 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
383 |
'1M' => 'MYFON',
|
384 |
'MG' => 'MyWigo',
|
385 |
'M8' => 'Myria',
|
|
|
386 |
'N3' => 'Navon',
|
|
|
387 |
'N5' => 'NOA',
|
388 |
'NE' => 'NEC',
|
389 |
'NF' => 'Neffos',
|
390 |
'NA' => 'Netgear',
|
391 |
'NU' => 'NeuImage',
|
392 |
'NG' => 'NGM',
|
|
|
393 |
'N6' => 'Nobby',
|
394 |
'NO' => 'Nous',
|
395 |
'NI' => 'Nintendo',
|
@@ -399,10 +421,12 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
399 |
'NV' => 'Nvidia',
|
400 |
'NB' => 'Noblex',
|
401 |
'NM' => 'Nomi',
|
|
|
402 |
'NL' => 'NUU Mobile',
|
403 |
'NY' => 'NYX Mobile',
|
404 |
'NN' => 'Nikon',
|
405 |
'NW' => 'Newgen',
|
|
|
406 |
'NX' => 'Nexian',
|
407 |
'NT' => 'NextBook',
|
408 |
'O3' => 'O+',
|
@@ -415,6 +439,7 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
415 |
'OS' => 'Ordissimo',
|
416 |
'OT' => 'O2',
|
417 |
'OK' => 'Ouki',
|
|
|
418 |
'OU' => 'OUYA',
|
419 |
'OO' => 'Opsson',
|
420 |
'OV' => 'Overmax',
|
@@ -433,6 +458,7 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
433 |
'PL' => 'Polaroid',
|
434 |
'P5' => 'Polytron',
|
435 |
'P9' => 'Primepad',
|
|
|
436 |
'PM' => 'Palm',
|
437 |
'PO' => 'phoneOne',
|
438 |
'PT' => 'Pantech',
|
@@ -452,6 +478,7 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
452 |
'QM' => 'QMobile',
|
453 |
'QA' => 'Quantum',
|
454 |
'QU' => 'Quechua',
|
|
|
455 |
'RA' => 'Ramos',
|
456 |
'RC' => 'RCA Tablets',
|
457 |
'RB' => 'Readboy',
|
@@ -467,9 +494,12 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
467 |
'R3' => 'Rombica',
|
468 |
'RT' => 'RT Project',
|
469 |
'RX' => 'Ritmix',
|
|
|
470 |
'R5' => 'Ross&Moor',
|
471 |
'R2' => 'R-TV',
|
472 |
-
'
|
|
|
|
|
473 |
'SA' => 'Samsung',
|
474 |
'S0' => 'Sanei',
|
475 |
'SD' => 'Sega',
|
@@ -480,6 +510,7 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
480 |
'SX' => 'SFR',
|
481 |
'SG' => 'Sagem',
|
482 |
'SH' => 'Sharp',
|
|
|
483 |
'3S' => 'Shuttle',
|
484 |
'SI' => 'Siemens',
|
485 |
'SJ' => 'Silent Circle',
|
@@ -493,6 +524,8 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
493 |
'SO' => 'Sony',
|
494 |
'OI' => 'Sonim',
|
495 |
'SP' => 'Spice',
|
|
|
|
|
496 |
'SU' => 'SuperSonic',
|
497 |
'S5' => 'Supra',
|
498 |
'SV' => 'Selevision',
|
@@ -548,6 +581,7 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
548 |
'TZ' => 'teXet',
|
549 |
'UC' => 'U.S. Cellular',
|
550 |
'UH' => 'Uhappy',
|
|
|
551 |
'UL' => 'Ulefone',
|
552 |
'UO' => 'Unnecto',
|
553 |
'UN' => 'Unowhy',
|
@@ -556,15 +590,20 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
556 |
'UM' => 'UMIDIGI',
|
557 |
'UU' => 'Unonu',
|
558 |
'UK' => 'UTOK',
|
|
|
559 |
'UT' => 'UTStarcom',
|
|
|
560 |
'VA' => 'Vastking',
|
561 |
'VD' => 'Videocon',
|
562 |
'VE' => 'Vertu',
|
563 |
'VN' => 'Venso',
|
564 |
'V5' => 'Vivax',
|
565 |
'VI' => 'Vitelcom',
|
|
|
566 |
'VK' => 'VK Mobile',
|
567 |
'VS' => 'ViewSonic',
|
|
|
|
|
568 |
'VT' => 'Vestel',
|
569 |
'VR' => 'Vernee',
|
570 |
'V4' => 'Verizon',
|
@@ -588,6 +627,7 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
588 |
'WE' => 'WellcoM',
|
589 |
'WY' => 'Wexler',
|
590 |
'WI' => 'Wiko',
|
|
|
591 |
'WL' => 'Wolder',
|
592 |
'WG' => 'Wolfgang',
|
593 |
'WO' => 'Wonu',
|
@@ -598,6 +638,7 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
598 |
'XL' => 'Xiaolajiao',
|
599 |
'XN' => 'Xion',
|
600 |
'XO' => 'Xolo',
|
|
|
601 |
'YA' => 'Yarvik',
|
602 |
'YD' => 'Yandex',
|
603 |
'Y2' => 'Yes',
|
@@ -605,7 +646,9 @@ abstract class DeviceParserAbstract extends ParserAbstract
|
|
605 |
'Y1' => 'Yu',
|
606 |
'YU' => 'Yuandao',
|
607 |
'YS' => 'Yusun',
|
|
|
608 |
'YT' => 'Ytone',
|
|
|
609 |
'ZE' => 'Zeemi',
|
610 |
'ZK' => 'Zenek',
|
611 |
'ZO' => 'Zonda',
|
65 |
public static $deviceBrands = array(
|
66 |
'3Q' => '3Q',
|
67 |
'4G' => '4Good',
|
68 |
+
'AE' => 'Ace',
|
69 |
'AA' => 'AllCall',
|
70 |
'AC' => 'Acer',
|
71 |
'A9' => 'Advan',
|
78 |
'AK' => 'Akai',
|
79 |
'1A' => 'Alba',
|
80 |
'AL' => 'Alcatel',
|
81 |
+
'4A' => 'Aligator',
|
82 |
+
'3A' => 'AllDocube',
|
83 |
'A2' => 'Allview',
|
84 |
'A7' => 'Allwinner',
|
85 |
'A1' => 'Altech UEC',
|
86 |
'A5' => 'altron',
|
87 |
'AN' => 'Arnova',
|
88 |
+
'2A' => 'Atom',
|
89 |
'KN' => 'Amazon',
|
90 |
'AG' => 'AMGOO',
|
91 |
'AO' => 'Amoi',
|
125 |
'B2' => 'Blackview',
|
126 |
'B4' => 'bogo',
|
127 |
'BW' => 'Boway',
|
128 |
+
'BZ' => 'Bezkam',
|
129 |
'BX' => 'bq',
|
130 |
'BV' => 'Bravis',
|
131 |
'BR' => 'Brondi',
|
140 |
'CE' => 'Celkon',
|
141 |
'CC' => 'ConCorde',
|
142 |
'C2' => 'Changhong',
|
143 |
+
'2C' => 'Ghong',
|
144 |
'CH' => 'Cherry Mobile',
|
145 |
+
'1C' => 'Chuwi',
|
146 |
'L8' => 'Clarmin',
|
147 |
'CK' => 'Cricket',
|
148 |
'C1' => 'Crosscall',
|
164 |
'CX' => 'Crescent',
|
165 |
'C4' => 'Cyrus',
|
166 |
'CV' => 'CVTE',
|
167 |
+
'D5' => 'Daewoo',
|
168 |
'DA' => 'Danew',
|
169 |
'DT' => 'Datang',
|
170 |
'D1' => 'Datsun',
|
171 |
'DE' => 'Denver',
|
172 |
+
'DW' => 'DeWalt',
|
173 |
'DX' => 'DEXP',
|
174 |
'DS' => 'Desay',
|
175 |
'DB' => 'Dbtel',
|
180 |
'D3' => 'Digicel',
|
181 |
'DD' => 'Digiland',
|
182 |
'D2' => 'Digma',
|
183 |
+
'D6' => 'Divisat',
|
184 |
'DL' => 'Dell',
|
185 |
'DN' => 'DNS',
|
186 |
'DM' => 'DMM',
|
244 |
'GG' => 'Gigabyte',
|
245 |
'GS' => 'Gigaset',
|
246 |
'GZ' => 'Ginzzu',
|
247 |
+
'G4' => 'Globex',
|
248 |
'GC' => 'GOCLEVER',
|
249 |
'GL' => 'Goly',
|
250 |
'GO' => 'Google',
|
290 |
'IS' => 'Insignia',
|
291 |
'I4' => 'Inoi',
|
292 |
'IR' => 'iRola',
|
293 |
+
'IU' => 'iRulu',
|
294 |
'I6' => 'Irbis',
|
295 |
'II' => 'Inkti',
|
296 |
'IX' => 'Intex',
|
307 |
'J5' => 'Just5',
|
308 |
'KL' => 'Kalley',
|
309 |
'K4' => 'Kaan',
|
310 |
+
'K7' => 'Kaiomy',
|
311 |
+
'K6' => 'Kanji',
|
312 |
'KA' => 'Karbonn',
|
313 |
+
'K5' => 'KATV1',
|
314 |
'KD' => 'KDDI',
|
315 |
'K1' => 'Kiano',
|
316 |
+
'KV' => 'Kivi',
|
317 |
'KI' => 'Kingsun',
|
318 |
'KC' => 'Kocaso',
|
319 |
'KG' => 'Kogan',
|
357 |
'LX' => 'Lexibook',
|
358 |
'LY' => 'LYF',
|
359 |
'LU' => 'Lumus',
|
360 |
+
'L9' => 'Luna',
|
361 |
'MN' => 'M4tel',
|
362 |
'MJ' => 'Majestic',
|
363 |
'MA' => 'Manta Multimedia',
|
364 |
+
'5M' => 'Mann',
|
365 |
'2M' => 'Masstel',
|
366 |
'MW' => 'Maxwest',
|
367 |
+
'7M' => 'Maxcom',
|
368 |
'M0' => 'Maze',
|
369 |
'MB' => 'Mobistel',
|
370 |
'0M' => 'Mecool',
|
402 |
'1M' => 'MYFON',
|
403 |
'MG' => 'MyWigo',
|
404 |
'M8' => 'Myria',
|
405 |
+
'6M' => 'Mystery',
|
406 |
'N3' => 'Navon',
|
407 |
+
'N7' => 'National',
|
408 |
'N5' => 'NOA',
|
409 |
'NE' => 'NEC',
|
410 |
'NF' => 'Neffos',
|
411 |
'NA' => 'Netgear',
|
412 |
'NU' => 'NeuImage',
|
413 |
'NG' => 'NGM',
|
414 |
+
'NZ' => 'NG Optics',
|
415 |
'N6' => 'Nobby',
|
416 |
'NO' => 'Nous',
|
417 |
'NI' => 'Nintendo',
|
421 |
'NV' => 'Nvidia',
|
422 |
'NB' => 'Noblex',
|
423 |
'NM' => 'Nomi',
|
424 |
+
'N0' => 'Nuvo',
|
425 |
'NL' => 'NUU Mobile',
|
426 |
'NY' => 'NYX Mobile',
|
427 |
'NN' => 'Nikon',
|
428 |
'NW' => 'Newgen',
|
429 |
+
'NS' => 'NewsMy',
|
430 |
'NX' => 'Nexian',
|
431 |
'NT' => 'NextBook',
|
432 |
'O3' => 'O+',
|
439 |
'OS' => 'Ordissimo',
|
440 |
'OT' => 'O2',
|
441 |
'OK' => 'Ouki',
|
442 |
+
'OE' => 'Oukitel',
|
443 |
'OU' => 'OUYA',
|
444 |
'OO' => 'Opsson',
|
445 |
'OV' => 'Overmax',
|
458 |
'PL' => 'Polaroid',
|
459 |
'P5' => 'Polytron',
|
460 |
'P9' => 'Primepad',
|
461 |
+
'P6' => 'Proline',
|
462 |
'PM' => 'Palm',
|
463 |
'PO' => 'phoneOne',
|
464 |
'PT' => 'Pantech',
|
478 |
'QM' => 'QMobile',
|
479 |
'QA' => 'Quantum',
|
480 |
'QU' => 'Quechua',
|
481 |
+
'QO' => 'Qumo',
|
482 |
'RA' => 'Ramos',
|
483 |
'RC' => 'RCA Tablets',
|
484 |
'RB' => 'Readboy',
|
494 |
'R3' => 'Rombica',
|
495 |
'RT' => 'RT Project',
|
496 |
'RX' => 'Ritmix',
|
497 |
+
'R7' => 'Ritzviva',
|
498 |
'R5' => 'Ross&Moor',
|
499 |
'R2' => 'R-TV',
|
500 |
+
'RG' => 'RugGear',
|
501 |
+
'RU' => 'Runbo',
|
502 |
+
'SQ' => 'Santin',
|
503 |
'SA' => 'Samsung',
|
504 |
'S0' => 'Sanei',
|
505 |
'SD' => 'Sega',
|
510 |
'SX' => 'SFR',
|
511 |
'SG' => 'Sagem',
|
512 |
'SH' => 'Sharp',
|
513 |
+
'7S' => 'Shift Phones',
|
514 |
'3S' => 'Shuttle',
|
515 |
'SI' => 'Siemens',
|
516 |
'SJ' => 'Silent Circle',
|
524 |
'SO' => 'Sony',
|
525 |
'OI' => 'Sonim',
|
526 |
'SP' => 'Spice',
|
527 |
+
'6S' => 'Spectrum',
|
528 |
+
'5S' => 'Sunvell',
|
529 |
'SU' => 'SuperSonic',
|
530 |
'S5' => 'Supra',
|
531 |
'SV' => 'Selevision',
|
581 |
'TZ' => 'teXet',
|
582 |
'UC' => 'U.S. Cellular',
|
583 |
'UH' => 'Uhappy',
|
584 |
+
'UG' => 'Ugoos',
|
585 |
'UL' => 'Ulefone',
|
586 |
'UO' => 'Unnecto',
|
587 |
'UN' => 'Unowhy',
|
590 |
'UM' => 'UMIDIGI',
|
591 |
'UU' => 'Unonu',
|
592 |
'UK' => 'UTOK',
|
593 |
+
'UA' => 'Umax',
|
594 |
'UT' => 'UTStarcom',
|
595 |
+
'UZ' => 'Unihertz',
|
596 |
'VA' => 'Vastking',
|
597 |
'VD' => 'Videocon',
|
598 |
'VE' => 'Vertu',
|
599 |
'VN' => 'Venso',
|
600 |
'V5' => 'Vivax',
|
601 |
'VI' => 'Vitelcom',
|
602 |
+
'V7' => 'Vinga',
|
603 |
'VK' => 'VK Mobile',
|
604 |
'VS' => 'ViewSonic',
|
605 |
+
'V9' => 'Vsun',
|
606 |
+
'V8' => 'Vesta',
|
607 |
'VT' => 'Vestel',
|
608 |
'VR' => 'Vernee',
|
609 |
'V4' => 'Verizon',
|
627 |
'WE' => 'WellcoM',
|
628 |
'WY' => 'Wexler',
|
629 |
'WI' => 'Wiko',
|
630 |
+
'WP' => 'Wieppo',
|
631 |
'WL' => 'Wolder',
|
632 |
'WG' => 'Wolfgang',
|
633 |
'WO' => 'Wonu',
|
638 |
'XL' => 'Xiaolajiao',
|
639 |
'XN' => 'Xion',
|
640 |
'XO' => 'Xolo',
|
641 |
+
'XR' => 'Xoro',
|
642 |
'YA' => 'Yarvik',
|
643 |
'YD' => 'Yandex',
|
644 |
'Y2' => 'Yes',
|
646 |
'Y1' => 'Yu',
|
647 |
'YU' => 'Yuandao',
|
648 |
'YS' => 'Yusun',
|
649 |
+
'YO' => 'Yota',
|
650 |
'YT' => 'Ytone',
|
651 |
+
'YX' => 'Yxtel',
|
652 |
'ZE' => 'Zeemi',
|
653 |
'ZK' => 'Zenek',
|
654 |
'ZO' => 'Zonda',
|
app/vendor/piwik/device-detector/README.md
CHANGED
@@ -9,7 +9,6 @@ DeviceDetector
|
|
9 |
## Code Status
|
10 |
|
11 |
[![Build Status](https://travis-ci.org/matomo-org/device-detector.svg?branch=master)](https://travis-ci.org/matomo-org/device-detector)
|
12 |
-
[![Code Coverage](https://coveralls.io/repos/piwik/device-detector/badge.png)](https://coveralls.io/r/piwik/device-detector)
|
13 |
[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/matomo-org/device-detector.svg)](http://isitmaintained.com/project/matomo-org/device-detector "Average time to resolve an issue")
|
14 |
[![Percentage of issues still open](http://isitmaintained.com/badge/open/matomo-org/device-detector.svg)](http://isitmaintained.com/project/matomo-org/device-detector "Percentage of issues still open")
|
15 |
|
@@ -185,19 +184,21 @@ php composer.phar install
|
|
185 |
|
186 |
There are already a few ports of this tool to other languages:
|
187 |
|
|
|
188 |
- **.NET** https://github.com/totpero/DeviceDetector.NET
|
189 |
- **Ruby** https://github.com/podigee/device_detector
|
190 |
-
- **
|
191 |
- **Python 3** https://github.com/thinkwelltwd/device_detector
|
192 |
- **Crystal** https://github.com/creadone/device_detector
|
193 |
- **Elixir** https://github.com/elixir-inspector/ua_inspector
|
|
|
194 |
|
195 |
|
196 |
## What Device Detector is able to detect
|
197 |
|
198 |
The lists below are auto generated and updated from time to time. Some of them might not be complete.
|
199 |
|
200 |
-
*Last update: 2020/
|
201 |
|
202 |
### List of detected operating systems:
|
203 |
|
@@ -205,7 +206,7 @@ AIX, Android, AmigaOS, Apple TV, Arch Linux, BackTrack, Bada, BeOS, BlackBerry O
|
|
205 |
|
206 |
### List of detected browsers:
|
207 |
|
208 |
-
2345 Browser, 360 Phone Browser, 360 Browser, Avant Browser, ABrowse, ANT Fresco, ANTGalio, Aloha Browser, Aloha Browser Lite, Amaya, Amigo, Android Browser, AOL Shield, Arora, Amiga Voyager, Amiga Aweb, Atomic Web Browser, Avast Secure Browser, AVG Secure Browser, Beaker Browser, Beamrise, BlackBerry Browser, Baidu Browser, Baidu Spark, Basilisk, Beonex, BlackHawk, Bunjalloo, B-Line, Brave, BriskBard, BrowseX, Camino, CCleaner, Coc Coc, Comodo Dragon, Coast, Charon, CM Browser, Chrome Frame, Headless Chrome, Chrome, Chrome Mobile iOS, Conkeror, Chrome Mobile, CoolNovo, CometBird, COS Browser, ChromePlus, Chromium, Cyberfox, Cheshire, Crusta, Cunaguaro, Chrome Webview, dbrowser, Deepnet Explorer, Delta Browser, Dolphin, Dorado, Dooble, Dillo, DuckDuckGo Privacy Browser, Ecosia, Epic, Elinks, Element Browser, eZ Browser, EUI Browser, GNOME Web, Espial TV Browser, Falkon, Faux Browser, Firefox Mobile iOS, Firebird, Fluid, Fennec, Firefox, Firefox Focus, Firefox Reality, Firefox Rocket, Flock, Firefox Mobile, Fireweb, Fireweb Navigator, FreeU, Galeon, Google Earth, Hawk Turbo Browser, hola! Browser, HotJava, Huawei Browser, IBrowse, iCab, iCab Mobile, Iridium, Iron Mobile, IceCat, IceDragon, Isivioo, Iceweasel, Internet Explorer, IE Mobile, Iron, Jasmine, Jig Browser, Jio Browser, K.Browser, Kindle Browser, K-meleon, Konqueror, Kapiko, Kinza, Kiwi, Kylo, Kazehakase, Cheetah Browser, LieBaoFast, LG Browser, Links, Lovense Browser, LuaKit, Lunascape, Lynx, mCent, MicroB, NCSA Mosaic, Meizu Browser, Mercury, Mobile Safari, Midori, Mobicip, MIUI Browser, Mobile Silk, Minimo, Mint Browser, Maxthon, Nokia Browser, Nokia OSS Browser, Nokia Ovi Browser, Nox Browser, NetSurf, NetFront, NetFront Life, NetPositive, Netscape, NTENT Browser, Oculus Browser, Opera Mini iOS, Obigo, Odyssey Web Browser, Off By One, ONE Browser, Opera GX, Opera Neon, Opera Devices, Opera Mini, Opera Mobile, Opera, Opera Next, Opera Touch, Ordissimo, Oregano, Origyn Web Browser, Openwave Mobile Browser, OmniWeb, Otter Browser, Palm Blazer, Pale Moon, Oppo Browser, Palm Pre, Puffin, Palm WebPro, Palmscape, Phoenix, Polaris, Polarity, Microsoft Edge, QQ Browser Mini, QQ Browser, Qutebrowser, QupZilla, Qwant Mobile, QtWebEngine, Realme Browser, Rekonq, RockMelt, Samsung Browser, Sailfish Browser, SEMC-Browser, Sogou Explorer, Safari, SalamWeb, Shiira, SimpleBrowser, Skyfire, Seraphic Sraf, Sleipnir, Snowshoe, Sogou Mobile Browser, Splash, Sputnik Browser, Sunrise, SuperBird, Super Fast Browser, START Internet Browser, Streamy, Swiftfox, Seznam Browser, t-online.de Browser, Tao Browser, TenFourFox, Tenta Browser, Tizen Browser, TweakStyle, UBrowser, UC Browser, UC Browser Mini, UC Browser Turbo, Uzbl, Vivaldi, vivo Browser, Vision Mobile Browser, Wear Internet Browser, Web Explorer, WebPositive, Waterfox, Whale Browser, wOSBrowser, WeTab Browser, Yandex Browser, Yandex Browser Lite, Xiino
|
209 |
|
210 |
### List of detected browser engines:
|
211 |
|
@@ -213,7 +214,7 @@ WebKit, Blink, Trident, Text-based, Dillo, iCab, Elektra, Presto, Gecko, KHTML,
|
|
213 |
|
214 |
### List of detected libraries:
|
215 |
|
216 |
-
aiohttp, curl, Faraday, Go-http-client, Google HTTP Java Client, Guzzle (PHP HTTP Client), HTTPie, HTTP_Request2, Java, libdnf, Mechanize, OkHttp, Perl, Python Requests, Python urllib, REST Client for Ruby, RestSharp, urlgrabber (yum), Wget, WWW-Mechanize
|
217 |
|
218 |
### List of detected media players:
|
219 |
|
@@ -221,7 +222,7 @@ Audacious, Banshee, Boxee, Clementine, Deezer, FlyCast, Foobar2000, Google Podca
|
|
221 |
|
222 |
### List of detected mobile apps:
|
223 |
|
224 |
-
AndroidDownloadManager, AntennaPod, Apple News, Baidu Box App, BeyondPod, BingWebApp, bPod, CastBox, Castro, Castro 2, CrosswalkApp, DoggCatcher, douban App, Facebook, Facebook Messenger, FeedR, Flipboard App, Google Go, Google Play Newsstand, Google Plus, Google Search App, iCatcher, Instacast, Instagram App, Line, NewsArticle App, Overcast, Pinterest, Player FM, Pocket Casts, Podcast & Radio Addict, Podcast Republic, Podcasts, Podcat, Podcatcher Deluxe, Podkicker, RSSRadio, Sina Weibo, SogouSearch App, tieba, WeChat, WhatsApp, Yahoo! Japan, Yelp Mobile, YouTube
|
225 |
|
226 |
### List of detected PIMs (personal information manager):
|
227 |
|
@@ -233,8 +234,8 @@ Akregator, Apple PubSub, BashPodder, Breaker, Downcast, FeedDemon, Feeddler RSS
|
|
233 |
|
234 |
### List of brands with detected devices:
|
235 |
|
236 |
-
3Q, 4Good, Acer, Advan, Advance, AGM, Ainol, Airness, Airties, AIS, Aiwa, Akai, Alba, Alcatel, AllCall, Allview, Allwinner, Altech UEC, altron, Amazon, AMGOO, Amoi, ANS, Apple, Archos, Arian Space, Ark, Arnova, ARRIS, Ask, Assistant, Asus, Audiovox, AVH, Avvio, Axxion, Azumi Mobile, BangOlufsen, Barnes & Noble, BBK, BDF, Becker, Beeline, Beetel, BenQ, BenQ-Siemens, BGH, Bird, Bitel, Black Fox, Blackview, Blaupunkt, Blu, Bluboo, Bluegood, Bmobile, bogo, Boway, bq, Bravis, Brondi, Bush, CAGI, Capitel, Captiva, Carrefour, Casio, Casper, Cat, Celkon, Changhong, Cherry Mobile, China Mobile, Clarmin, CnM, Coby Kyros, Comio, Compal, Compaq, ComTrade Tesla, Concord, ConCorde, Condor, Coolpad, Cowon, CreNova, Crescent, Cricket, Crius Mea, Crosscall, Cube, CUBOT, CVTE, Cyrus, Danew, Datang, Datsun, Dbtel, Dell, Denver, Desay, DEXP, Dialog, Dicam, Digi, Digicel, Digiland, Digma, DMM, DNS, DoCoMo, Doogee, Doov, Dopod, Doro, Dune HD, E-Boda, E-tel, Easypix, EBEST, Echo Mobiles, ECS, EE, EKO, Eks Mobility, Elenberg, Elephone, Energizer, Energy Sistem, Ergo, Ericsson, Ericy, Essential, Essentielb, Eton, eTouch, Etuline, Eurostar, Evercoss, Evertek, Evolio, Evolveo, EvroMedia, Explay, Extrem, Ezio, Ezze, Fairphone, Famoco, Fengxiang, FiGO, FinePower, Fly, FNB, Fondi, FORME, Forstar, Foxconn, Freetel, Fujitsu, G-TiDE, Garmin-Asus, Gateway, Gemini, General Mobile, Geotel, Ghia, Gigabyte, Gigaset, Ginzzu, Gionee, GOCLEVER, Goly, GoMobile, Google, Gradiente, Grape, Grundig, Hafury, Haier, HannSpree, Hasee, Hi-Level, Highscreen, Hisense, Hoffmann, Homtom, Hoozo, Hosin, HP, HTC, Huawei, Humax, Hyrican, Hyundai, i-Joy, i-mate, i-mobile, iBall, iBerry, IconBIT, iHunt, Ikea, iKoMo, iLA, IMO Mobile, Impression, iNew, Infinix, InFocus, Inkti, InnJoo, Innostream, Inoi, INQ, Insignia, Intek, Intex, Inverto, iOcean, iPro, Irbis, iRola, iTel, iView, iZotron, JAY-Tech, Jiayu, Jolla, Just5, K-Touch, Kaan, Kalley, Karbonn, Kazam, KDDI, Kempler & Strauss, Keneksi, Kiano, Kingsun, Kocaso, Kodak, Kogan, Komu, Konka, Konrow, Koobee, KOPO, Koridy, KRONO, Krüger&Matz, KT-Tech, Kumai, Kyocera, LAIQ, Land Rover, Landvo, Lanix, Lark, Lava, LCT, Leagoo, Ledstar, LeEco, Lemhoov, Lenco, Lenovo, Leotec, Le Pan, Lephone, Lexand, Lexibook, LG, Lingwin, Loewe, Logicom, Lumus, LYF, M.T.T., M4tel, Majestic, Manta Multimedia, Masstel, Maxwest, Maze, Mecer, Mecool, Mediacom, MediaTek, Medion, MEEG, MegaFon, Meitu, Meizu, Memup, Metz, MEU, MicroMax, Microsoft, Mio, Miray, Mitsubishi, MIXC, MLLED, Mobicel, Mobiistar, Mobiola, Mobistel, Modecom, Mofut, Motorola, Movic, Mpman, MSI, MTC, MTN, MYFON, MyPhone, Myria, MyWigo, Navon, NEC, Neffos, Netgear, NeuImage, Newgen, NEXBOX, Nexian, Nextbit, NextBook, NGM, Nikon, Nintendo, NOA, Noain, Nobby, Noblex, Nokia, Nomi, Nous, NUU Mobile, Nvidia, NYX Mobile, O+, O2, Obi, Odys, Onda, OnePlus, OPPO, Opsson, Orange, Ordissimo, Ouki, OUYA, Overmax, Oysters, Palm, Panacom, Panasonic, Pantech, PCBOX, PCD, PCD Argentina, PEAQ, Pentagram, Philips, phoneOne, Pioneer, Pixus, Ployer, Plum, Point of View, Polaroid, PolyPad, Polytron, Pomp, Positivo, PPTV, Prestigio, Primepad, ProScan, PULID, Q-Touch, Qilive, QMobile, Qtek, Quantum, Quechua, R-TV, Ramos, RCA Tablets, Readboy, Rikomagic, RIM, Rinno, Ritmix, Riviera, Roadrover, Rokit, Roku, Rombica, Ross&Moor, Rover, RoverPad, RT Project, Safaricom, Sagem, Samsung, Sanei, Santin
|
237 |
|
238 |
### List of detected bots:
|
239 |
|
240 |
-
360Spider, Aboundexbot, Acoon, AddThis.com, ADMantX, aHrefs Bot, Alexa Crawler, Alexa Site Audit, Amazon Route53 Health Check, Amorank Spider, Analytics SEO Crawler, ApacheBench, Applebot, Arachni, archive.org bot, Ask Jeeves, Awario, Awario, Backlink-Check.de, BacklinkCrawler, Baidu Spider, BazQux Reader, BingBot, BitlyBot, Blekkobot, BLEXBot Crawler, Bloglovin, Blogtrottr, BoardReader, BoardReader Blog Indexer, Bountii Bot, BrandVerity, Browsershots, BUbiNG, Buck, Butterfly Robot, Bytespider, CareerBot, Castro 2, Catchpoint, CATExplorador, ccBot crawler, Charlotte, Cliqzbot, CloudFlare Always Online, CloudFlare AMP Fetcher, Collectd, CommaFeed, CSS Certificate Spider, Cốc Cốc Bot, Datadog Agent, Datanyze, Dataprovider, Daum, Dazoobot, Discobot, Domain Re-Animator Bot, DotBot, DuckDuckGo Bot, Easou Spider, eCairn-Grabber, EMail Exractor, EmailWolf, Embedly, evc-batch, ExaBot, ExactSeek Crawler, Ezooms, eZ Publish Link Validator, Facebook External Hit, Feedbin, FeedBurner, Feedly, Feedspot, Feed Wrangler, Fever, Findxbot, Flipboard, FreshRSS, Generic Bot, Generic Bot, Genieo Web filter, Gigablast, Gigabot, Gluten Free Crawler, Gmail Image Proxy, Goo, Googlebot, Google Favicon, Google PageSpeed Insights, Google Partner Monitoring, Google Search Console, Google Structured Data Testing Tool, Grapeshot, Heritrix, Heureka Feed, HTTPMon, HubPages, HubSpot, ICC-Crawler, ichiro, IDG/IT, IIS Site Analysis, Inktomi Slurp, inoreader, IP-Guide Crawler, IPS Agent, Kaspersky, Kouio, Larbin web crawler, LCC, Let's Encrypt Validation, Lighthouse, Linkdex Bot, LinkedIn Bot, LTX71, Lycos, Magpie-Crawler, MagpieRSS, Mail.Ru Bot, masscan, Mastodon Bot, Meanpath Bot, MetaInspector, MetaJobBot, Mixrank Bot, MJ12 Bot, Mnogosearch, MojeekBot, Monitor.Us, Munin, Nagios check_http, NalezenCzBot, nbertaupete95, Netcraft Survey Bot, netEstate, NetLyzer FastProbe, NetResearchServer, Netvibes, NewsBlur, NewsGator, NLCrawler, Nmap, Nutch-based Bot, Nuzzel, oBot, Octopus, Omgili bot, Openindex Spider, OpenLinkProfiler, OpenWebSpider, Orange Bot, Outbrain, PagePeeker, PaperLiBot, Phantomas, PHP Server Monitor, Picsearch bot, Pingdom Bot, Pinterest, PocketParser, Pompos, PritTorrent, QuerySeekerSpider, Quora Link Preview, Qwantify, Rainmeter, RamblerMail Image Proxy, Reddit Bot, Riddler, Rogerbot, ROI Hunter, RSSRadio Bot, SafeDNSBot, Scooter, ScoutJet, Scrapy, Screaming Frog SEO Spider, ScreenerBot, Semrush Bot, Sensika Bot, Sentry Bot, SEOENGBot, SEOkicks-Robot, Seoscanners.net, Server Density, Seznam Bot, Seznam Email Proxy, Seznam Zbozi.cz, ShopAlike, Shopify Partner, ShopWiki, SilverReader, SimplePie, SISTRIX Crawler, SISTRIX Optimizer, Site24x7 Website Monitoring, Siteimprove, SiteSucker, Sixy.ch, Skype URI Preview, Slackbot, SMTBot, Snapchat Proxy, Sogou Spider, Soso Spider, Sparkler, Speedy, Spinn3r, Spotify, Sputnik Bot, sqlmap, SSL Labs, Startpagina Linkchecker, StatusCake, Superfeedr Bot, Survey Bot, Tarmot Gezgin, TelegramBot, The Knowledge AI, theoldreader, TinEye Crawler, Tiny Tiny RSS, TLSProbe, TraceMyFile, Trendiction Bot, TurnitinBot, TweetedTimes Bot, Tweetmeme Bot, Twingly Recon, Twitterbot, UkrNet Mail Proxy, UniversalFeedParser, Uptimebot, Uptime Robot, URLAppendBot, Vagabondo, Visual Site Mapper Crawler, VK Share Button, W3C CSS Validator, W3C I18N Checker, W3C Link Checker, W3C Markup Validation Service, W3C MobileOK Checker, W3C Unified Validator, Wappalyzer, WebbCrawler, Weborama, WebPageTest, WebSitePulse, WebThumbnail, WeSEE:Search, WikiDo, Willow Internet Crawler, WooRank, WordPress, Wotbox, YaCy, Yahoo! Cache System, Yahoo! Japan BRW, Yahoo! Link Preview, Yahoo! Slurp, Yahoo Gemini, Yandex Bot, Yeti/Naverbot, Yottaa Site Monitor, Youdao Bot, Yourls, Yunyun Bot, Zao, Ze List, zgrab, Zookabot, ZumBot
|
9 |
## Code Status
|
10 |
|
11 |
[![Build Status](https://travis-ci.org/matomo-org/device-detector.svg?branch=master)](https://travis-ci.org/matomo-org/device-detector)
|
|
|
12 |
[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/matomo-org/device-detector.svg)](http://isitmaintained.com/project/matomo-org/device-detector "Average time to resolve an issue")
|
13 |
[![Percentage of issues still open](http://isitmaintained.com/badge/open/matomo-org/device-detector.svg)](http://isitmaintained.com/project/matomo-org/device-detector "Percentage of issues still open")
|
14 |
|
184 |
|
185 |
There are already a few ports of this tool to other languages:
|
186 |
|
187 |
+
- **.NET** https://github.com/AgileFlexAgency/MatomoDeviceDetector.NET
|
188 |
- **.NET** https://github.com/totpero/DeviceDetector.NET
|
189 |
- **Ruby** https://github.com/podigee/device_detector
|
190 |
+
- **JavaScript/TypeScript/NodeJS** https://github.com/etienne-martin/device-detector-js
|
191 |
- **Python 3** https://github.com/thinkwelltwd/device_detector
|
192 |
- **Crystal** https://github.com/creadone/device_detector
|
193 |
- **Elixir** https://github.com/elixir-inspector/ua_inspector
|
194 |
+
- **Java** https://github.com/mngsk/device-detector
|
195 |
|
196 |
|
197 |
## What Device Detector is able to detect
|
198 |
|
199 |
The lists below are auto generated and updated from time to time. Some of them might not be complete.
|
200 |
|
201 |
+
*Last update: 2020/03/31*
|
202 |
|
203 |
### List of detected operating systems:
|
204 |
|
206 |
|
207 |
### List of detected browsers:
|
208 |
|
209 |
+
2345 Browser, 360 Phone Browser, 360 Browser, Avant Browser, ABrowse, ANT Fresco, ANTGalio, Aloha Browser, Aloha Browser Lite, Amaya, Amigo, Android Browser, AOL Shield, Arora, Amiga Voyager, Amiga Aweb, Atomic Web Browser, Avast Secure Browser, AVG Secure Browser, Beaker Browser, Beamrise, BlackBerry Browser, Baidu Browser, Baidu Spark, Basilisk, Beonex, BlackHawk, Bunjalloo, B-Line, Brave, BriskBard, BrowseX, Camino, CCleaner, Coc Coc, Comodo Dragon, Coast, Charon, CM Browser, Chrome Frame, Headless Chrome, Chrome, Chrome Mobile iOS, Conkeror, Chrome Mobile, CoolNovo, CometBird, COS Browser, ChromePlus, Chromium, Cyberfox, Cheshire, Crusta, Cunaguaro, Chrome Webview, dbrowser, Deepnet Explorer, Delta Browser, Dolphin, Dorado, Dooble, Dillo, DuckDuckGo Privacy Browser, Ecosia, Epic, Elinks, Element Browser, eZ Browser, EUI Browser, GNOME Web, Espial TV Browser, Falkon, Faux Browser, Firefox Mobile iOS, Firebird, Fluid, Fennec, Firefox, Firefox Focus, Firefox Reality, Firefox Rocket, Flock, Firefox Mobile, Fireweb, Fireweb Navigator, FreeU, Galeon, Google Earth, Hawk Turbo Browser, hola! Browser, HotJava, Huawei Browser, IBrowse, iCab, iCab Mobile, Iridium, Iron Mobile, IceCat, IceDragon, Isivioo, Iceweasel, Internet Explorer, IE Mobile, Iron, Jasmine, Jig Browser, Jio Browser, K.Browser, Kindle Browser, K-meleon, Konqueror, Kapiko, Kinza, Kiwi, Kylo, Kazehakase, Cheetah Browser, LieBaoFast, LG Browser, Links, Lovense Browser, LuaKit, Lunascape, Lynx, mCent, MicroB, NCSA Mosaic, Meizu Browser, Mercury, Mobile Safari, Midori, Mobicip, MIUI Browser, Mobile Silk, Minimo, Mint Browser, Maxthon, Nokia Browser, Nokia OSS Browser, Nokia Ovi Browser, Nox Browser, NetSurf, NetFront, NetFront Life, NetPositive, Netscape, NTENT Browser, Oculus Browser, Opera Mini iOS, Obigo, Odyssey Web Browser, Off By One, ONE Browser, Opera GX, Opera Neon, Opera Devices, Opera Mini, Opera Mobile, Opera, Opera Next, Opera Touch, Ordissimo, Oregano, Origyn Web Browser, Openwave Mobile Browser, OmniWeb, Otter Browser, Palm Blazer, Pale Moon, Oppo Browser, Palm Pre, Puffin, Palm WebPro, Palmscape, Phoenix, Polaris, Polarity, Microsoft Edge, QQ Browser Mini, QQ Browser, Qutebrowser, QupZilla, Qwant Mobile, QtWebEngine, Realme Browser, Rekonq, RockMelt, Samsung Browser, Sailfish Browser, SEMC-Browser, Sogou Explorer, Safari, SalamWeb, Shiira, SimpleBrowser, Skyfire, Seraphic Sraf, Sleipnir, Snowshoe, Sogou Mobile Browser, Splash, Sputnik Browser, Sunrise, SuperBird, Super Fast Browser, START Internet Browser, Streamy, Swiftfox, Seznam Browser, t-online.de Browser, Tao Browser, TenFourFox, Tenta Browser, Tizen Browser, TweakStyle, TV Bro, UBrowser, UC Browser, UC Browser Mini, UC Browser Turbo, Uzbl, Vivaldi, vivo Browser, Vision Mobile Browser, Wear Internet Browser, Web Explorer, WebPositive, Waterfox, Whale Browser, wOSBrowser, WeTab Browser, Yandex Browser, Yandex Browser Lite, Xiino
|
210 |
|
211 |
### List of detected browser engines:
|
212 |
|
214 |
|
215 |
### List of detected libraries:
|
216 |
|
217 |
+
aiohttp, curl, Faraday, Go-http-client, Google HTTP Java Client, Guzzle (PHP HTTP Client), HTTPie, HTTP_Request2, Java, libdnf, Mechanize, Node Fetch, OkHttp, Perl, Perl REST::Client, Python Requests, Python urllib, REST Client for Ruby, RestSharp, ScalaJ HTTP, urlgrabber (yum), Wget, WWW-Mechanize
|
218 |
|
219 |
### List of detected media players:
|
220 |
|
222 |
|
223 |
### List of detected mobile apps:
|
224 |
|
225 |
+
AndroidDownloadManager, AntennaPod, Apple News, Baidu Box App, BeyondPod, BingWebApp, bPod, CastBox, Castro, Castro 2, CrosswalkApp, DoggCatcher, douban App, Facebook, Facebook Messenger, FeedR, Flipboard App, Google Go, Google Play Newsstand, Google Plus, Google Search App, iCatcher, Instacast, Instagram App, Line, NewsArticle App, Overcast, Pinterest, Player FM, Pocket Casts, Podcast & Radio Addict, Podcast Republic, Podcasts, Podcat, Podcatcher Deluxe, Podkicker, RSSRadio, Sina Weibo, SogouSearch App, tieba, WeChat, WhatsApp, Yahoo! Japan, Yelp Mobile, YouTube and *mobile apps using [AFNetworking](https://github.com/AFNetworking/AFNetworking)*
|
226 |
|
227 |
### List of detected PIMs (personal information manager):
|
228 |
|
234 |
|
235 |
### List of brands with detected devices:
|
236 |
|
237 |
+
3Q, 4Good, Ace, Acer, Advan, Advance, AGM, Ainol, Airness, Airties, AIS, Aiwa, Akai, Alba, Alcatel, Aligator, AllCall, AllDocube, Allview, Allwinner, Altech UEC, altron, Amazon, AMGOO, Amoi, ANS, Apple, Archos, Arian Space, Ark, Arnova, ARRIS, Ask, Assistant, Asus, Atom, Audiovox, AVH, Avvio, Axxion, Azumi Mobile, BangOlufsen, Barnes & Noble, BBK, BDF, Becker, Beeline, Beetel, BenQ, BenQ-Siemens, Bezkam, BGH, Bird, Bitel, Black Fox, Blackview, Blaupunkt, Blu, Bluboo, Bluegood, Bmobile, bogo, Boway, bq, Bravis, Brondi, Bush, CAGI, Capitel, Captiva, Carrefour, Casio, Casper, Cat, Celkon, Changhong, Cherry Mobile, China Mobile, Chuwi, Clarmin, CnM, Coby Kyros, Comio, Compal, Compaq, ComTrade Tesla, Concord, ConCorde, Condor, Coolpad, Cowon, CreNova, Crescent, Cricket, Crius Mea, Crosscall, Cube, CUBOT, CVTE, Cyrus, Daewoo, Danew, Datang, Datsun, Dbtel, Dell, Denver, Desay, DeWalt, DEXP, Dialog, Dicam, Digi, Digicel, Digiland, Digma, Divisat, DMM, DNS, DoCoMo, Doogee, Doov, Dopod, Doro, Dune HD, E-Boda, E-tel, Easypix, EBEST, Echo Mobiles, ECS, EE, EKO, Eks Mobility, Elenberg, Elephone, Energizer, Energy Sistem, Ergo, Ericsson, Ericy, Essential, Essentielb, Eton, eTouch, Etuline, Eurostar, Evercoss, Evertek, Evolio, Evolveo, EvroMedia, Explay, Extrem, Ezio, Ezze, Fairphone, Famoco, Fengxiang, FiGO, FinePower, Fly, FNB, Fondi, FORME, Forstar, Foxconn, Freetel, Fujitsu, G-TiDE, Garmin-Asus, Gateway, Gemini, General Mobile, Geotel, Ghia, Ghong, Gigabyte, Gigaset, Ginzzu, Gionee, Globex, GOCLEVER, Goly, GoMobile, Google, Gradiente, Grape, Grundig, Hafury, Haier, HannSpree, Hasee, Hi-Level, Highscreen, Hisense, Hoffmann, Homtom, Hoozo, Hosin, HP, HTC, Huawei, Humax, Hyrican, Hyundai, i-Joy, i-mate, i-mobile, iBall, iBerry, IconBIT, iHunt, Ikea, iKoMo, iLA, IMO Mobile, Impression, iNew, Infinix, InFocus, Inkti, InnJoo, Innostream, Inoi, INQ, Insignia, Intek, Intex, Inverto, iOcean, iPro, Irbis, iRola, iRulu, iTel, iView, iZotron, JAY-Tech, Jiayu, Jolla, Just5, K-Touch, Kaan, Kaiomy, Kalley, Kanji, Karbonn, KATV1, Kazam, KDDI, Kempler & Strauss, Keneksi, Kiano, Kingsun, Kivi, Kocaso, Kodak, Kogan, Komu, Konka, Konrow, Koobee, KOPO, Koridy, KRONO, Krüger&Matz, KT-Tech, Kumai, Kyocera, LAIQ, Land Rover, Landvo, Lanix, Lark, Lava, LCT, Leagoo, Ledstar, LeEco, Lemhoov, Lenco, Lenovo, Leotec, Le Pan, Lephone, Lexand, Lexibook, LG, Lingwin, Loewe, Logicom, Lumus, Luna, LYF, M.T.T., M4tel, Majestic, Mann, Manta Multimedia, Masstel, Maxcom, Maxwest, Maze, Mecer, Mecool, Mediacom, MediaTek, Medion, MEEG, MegaFon, Meitu, Meizu, Memup, Metz, MEU, MicroMax, Microsoft, Mio, Miray, Mitsubishi, MIXC, MLLED, Mobicel, Mobiistar, Mobiola, Mobistel, Modecom, Mofut, Motorola, Movic, Mpman, MSI, MTC, MTN, MYFON, MyPhone, Myria, Mystery, MyWigo, National, Navon, NEC, Neffos, Netgear, NeuImage, Newgen, NewsMy, NEXBOX, Nexian, Nextbit, NextBook, NGM, NG Optics, Nikon, Nintendo, NOA, Noain, Nobby, Noblex, Nokia, Nomi, Nous, NUU Mobile, Nuvo, Nvidia, NYX Mobile, O+, O2, Obi, Odys, Onda, OnePlus, OPPO, Opsson, Orange, Ordissimo, Ouki, Oukitel, OUYA, Overmax, Oysters, Palm, Panacom, Panasonic, Pantech, PCBOX, PCD, PCD Argentina, PEAQ, Pentagram, Philips, phoneOne, Pioneer, Pixus, Ployer, Plum, Point of View, Polaroid, PolyPad, Polytron, Pomp, Positivo, PPTV, Prestigio, Primepad, Proline, ProScan, PULID, Q-Touch, Qilive, QMobile, Qtek, Quantum, Quechua, Qumo, R-TV, Ramos, RCA Tablets, Readboy, Rikomagic, RIM, Rinno, Ritmix, Ritzviva, Riviera, Roadrover, Rokit, Roku, Rombica, Ross&Moor, Rover, RoverPad, RT Project, RugGear, Runbo, Safaricom, Sagem, Samsung, Sanei, Santin, Sanyo, Savio, Sega, Selevision, Selfix, Sencor, Sendo, Senseit, Senwa, SFR, Sharp, Shift Phones, Shuttle, Siemens, Sigma, Silent Circle, Simbans, Sky, Skyworth, Smart, Smartfren, Smartisan, Softbank, Sonim, Sony, Sony Ericsson, Spectrum, Spice, Star, Starway, STF Mobile, STK, Stonex, Storex, Sumvision, SunVan, Sunvell, SuperSonic, Supra, SWISSMOBILITY, Symphony, Syrox, T-Mobile, TB Touch, TCL, TechniSat, TechnoTrend, TechPad, Teclast, Tecno Mobile, Telefunken, Telego, Telenor, Telit, Tesco, Tesla, teXet, ThL, Thomson, TIANYU, Timovi, TiPhone, Tolino, Tooky, Top House, Toplux, Toshiba, Touchmate, TrekStor, Trevi, True, Tunisie Telecom, Turbo, Turbo-X, TVC, U.S. Cellular, Ugoos, Uhappy, Ulefone, Umax, UMIDIGI, Unihertz, Unimax, Uniscope, Unknown, Unnecto, Unonu, Unowhy, UTOK, UTStarcom, Vastking, Venso, Verizon, Vernee, Vertex, Vertu, Verykool, Vesta, Vestel, VGO TEL, Videocon, Videoweb, ViewSonic, Vinga, Vinsoc, Vitelcom, Vivax, Vivo, Vizio, VK Mobile, Vodafone, Vonino, Vorago, Voto, Voxtel, Vsun, Vulcan, Walton, Web TV, Weimei, WellcoM, Wexler, Wieppo, Wiko, Wileyfox, Wink, Wolder, Wolfgang, Wonu, Woo, Woxter, X-TIGI, X-View, Xiaolajiao, Xiaomi, Xion, Xolo, Xoro, Yandex, Yarvik, Yes, Yezz, Yota, Ytone, Yu, Yuandao, Yusun, Yxtel, Zeemi, Zen, Zenek, Zonda, Zopo, ZTE, Zuum, Zync, ZYQ, öwn
|
238 |
|
239 |
### List of detected bots:
|
240 |
|
241 |
+
360Spider, Aboundexbot, Acoon, AddThis.com, ADMantX, aHrefs Bot, Alexa Crawler, Alexa Site Audit, Amazon Route53 Health Check, Amorank Spider, Analytics SEO Crawler, ApacheBench, Applebot, Arachni, archive.org bot, Ask Jeeves, Awario, Awario, Backlink-Check.de, BacklinkCrawler, Baidu Spider, BazQux Reader, BingBot, BitlyBot, Blekkobot, BLEXBot Crawler, Bloglovin, Blogtrottr, BoardReader, BoardReader Blog Indexer, Bountii Bot, BrandVerity, Browsershots, BUbiNG, Buck, Butterfly Robot, Bytespider, CareerBot, Castro 2, Catchpoint, CATExplorador, ccBot crawler, Charlotte, Cliqzbot, CloudFlare Always Online, CloudFlare AMP Fetcher, Collectd, CommaFeed, CSS Certificate Spider, Cốc Cốc Bot, Datadog Agent, Datanyze, Dataprovider, Daum, Dazoobot, Discobot, Domain Re-Animator Bot, DotBot, DuckDuckGo Bot, Easou Spider, eCairn-Grabber, EMail Exractor, EmailWolf, Embedly, evc-batch, ExaBot, ExactSeek Crawler, Ezooms, eZ Publish Link Validator, Facebook External Hit, Feedbin, FeedBurner, Feedly, Feedspot, Feed Wrangler, Fever, Findxbot, Flipboard, FreshRSS, Generic Bot, Generic Bot, Genieo Web filter, Gigablast, Gigabot, Gluten Free Crawler, Gmail Image Proxy, Goo, Googlebot, Google Cloud Scheduler, Google Favicon, Google PageSpeed Insights, Google Partner Monitoring, Google Search Console, Google Stackdriver Monitoring, Google Structured Data Testing Tool, Grapeshot, Heritrix, Heureka Feed, HTTPMon, HubPages, HubSpot, ICC-Crawler, ichiro, IDG/IT, IIS Site Analysis, Inktomi Slurp, inoreader, IP-Guide Crawler, IPS Agent, Kaspersky, Kouio, Larbin web crawler, LCC, Let's Encrypt Validation, Lighthouse, Linkdex Bot, LinkedIn Bot, LTX71, Lycos, Magpie-Crawler, MagpieRSS, Mail.Ru Bot, masscan, Mastodon Bot, Meanpath Bot, MetaInspector, MetaJobBot, Mixrank Bot, MJ12 Bot, Mnogosearch, MojeekBot, Monitor.Us, Munin, Nagios check_http, NalezenCzBot, nbertaupete95, Netcraft Survey Bot, netEstate, NetLyzer FastProbe, NetResearchServer, Netvibes, NewsBlur, NewsGator, NLCrawler, Nmap, Nutch-based Bot, Nuzzel, oBot, Octopus, Omgili bot, Openindex Spider, OpenLinkProfiler, OpenWebSpider, Orange Bot, Outbrain, PagePeeker, PaperLiBot, Phantomas, PHP Server Monitor, Picsearch bot, Pingdom Bot, Pinterest, PocketParser, Pompos, PritTorrent, QuerySeekerSpider, Quora Link Preview, Qwantify, Rainmeter, RamblerMail Image Proxy, Reddit Bot, Riddler, Rogerbot, ROI Hunter, RSSRadio Bot, SafeDNSBot, Scooter, ScoutJet, Scrapy, Screaming Frog SEO Spider, ScreenerBot, Semrush Bot, Sensika Bot, Sentry Bot, SEOENGBot, SEOkicks-Robot, Seoscanners.net, Server Density, Seznam Bot, Seznam Email Proxy, Seznam Zbozi.cz, ShopAlike, Shopify Partner, ShopWiki, SilverReader, SimplePie, SISTRIX Crawler, SISTRIX Optimizer, Site24x7 Website Monitoring, Siteimprove, SiteSucker, Sixy.ch, Skype URI Preview, Slackbot, SMTBot, Snapchat Proxy, Sogou Spider, Soso Spider, Sparkler, Speedy, Spinn3r, Spotify, Sputnik Bot, sqlmap, SSL Labs, Startpagina Linkchecker, StatusCake, Superfeedr Bot, Survey Bot, Tarmot Gezgin, TelegramBot, The Knowledge AI, theoldreader, TinEye Crawler, Tiny Tiny RSS, TLSProbe, TraceMyFile, Trendiction Bot, TurnitinBot, TweetedTimes Bot, Tweetmeme Bot, Twingly Recon, Twitterbot, UkrNet Mail Proxy, UniversalFeedParser, Uptimebot, Uptime Robot, URLAppendBot, Vagabondo, Visual Site Mapper Crawler, VK Share Button, W3C CSS Validator, W3C I18N Checker, W3C Link Checker, W3C Markup Validation Service, W3C MobileOK Checker, W3C Unified Validator, Wappalyzer, WebbCrawler, Weborama, WebPageTest, WebSitePulse, WebThumbnail, WeSEE:Search, WikiDo, Willow Internet Crawler, WooRank, WordPress, Wotbox, YaCy, Yahoo! Cache System, Yahoo! Japan BRW, Yahoo! Link Preview, Yahoo! Slurp, Yahoo Gemini, Yandex Bot, Yeti/Naverbot, Yottaa Site Monitor, Youdao Bot, Yourls, Yunyun Bot, Zao, Ze List, zgrab, Zookabot, ZumBot
|
app/vendor/piwik/device-detector/regexes/bots.yml
CHANGED
@@ -577,6 +577,14 @@
|
|
577 |
name: 'Google Inc.'
|
578 |
url: 'http://www.google.com'
|
579 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
580 |
- regex: 'Google-Structured-Data-Testing-Tool'
|
581 |
name: 'Google Structured Data Testing Tool'
|
582 |
category: 'Validator'
|
@@ -585,6 +593,14 @@
|
|
585 |
name: 'Google Inc.'
|
586 |
url: 'http://www.google.com'
|
587 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
588 |
- regex: 'via ggpht\.com GoogleImageProxy'
|
589 |
name: 'Gmail Image Proxy'
|
590 |
category: 'Crawler'
|
577 |
name: 'Google Inc.'
|
578 |
url: 'http://www.google.com'
|
579 |
|
580 |
+
- regex: 'Google-Cloud-Scheduler'
|
581 |
+
name: 'Google Cloud Scheduler'
|
582 |
+
category: 'Crawler'
|
583 |
+
url: 'https://cloud.google.com/scheduler'
|
584 |
+
producer:
|
585 |
+
name: 'Google Inc.'
|
586 |
+
url: 'https://www.google.com'
|
587 |
+
|
588 |
- regex: 'Google-Structured-Data-Testing-Tool'
|
589 |
name: 'Google Structured Data Testing Tool'
|
590 |
category: 'Validator'
|
593 |
name: 'Google Inc.'
|
594 |
url: 'http://www.google.com'
|
595 |
|
596 |
+
- regex: 'GoogleStackdriverMonitoring'
|
597 |
+
name: 'Google Stackdriver Monitoring'
|
598 |
+
category: 'Site Monitor'
|
599 |
+
url: 'https://cloud.google.com/monitoring'
|
600 |
+
producer:
|
601 |
+
name: 'Google Inc.'
|
602 |
+
url: 'https://www.google.com'
|
603 |
+
|
604 |
- regex: 'via ggpht\.com GoogleImageProxy'
|
605 |
name: 'Gmail Image Proxy'
|
606 |
category: 'Crawler'
|
app/vendor/piwik/device-detector/regexes/client/browsers.yml
CHANGED
@@ -1074,6 +1074,11 @@
|
|
1074 |
name: 'NTENT Browser'
|
1075 |
version: '$1'
|
1076 |
|
|
|
|
|
|
|
|
|
|
|
1077 |
# Chrome Webview
|
1078 |
- regex: 'Version/.* Chrome(?:/(\d+[\.\d]+))?'
|
1079 |
name: 'Chrome Webview'
|
1074 |
name: 'NTENT Browser'
|
1075 |
version: '$1'
|
1076 |
|
1077 |
+
# TV Bro
|
1078 |
+
- regex: 'TV Bro/(\d+[\.\d]+)'
|
1079 |
+
name: 'TV Bro'
|
1080 |
+
version: '$1'
|
1081 |
+
|
1082 |
# Chrome Webview
|
1083 |
- regex: 'Version/.* Chrome(?:/(\d+[\.\d]+))?'
|
1084 |
name: 'Chrome Webview'
|
app/vendor/piwik/device-detector/regexes/client/libraries.yml
CHANGED
@@ -91,3 +91,18 @@
|
|
91 |
name: 'RestSharp'
|
92 |
version: '$1'
|
93 |
url: 'http://restsharp.org/'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
name: 'RestSharp'
|
92 |
version: '$1'
|
93 |
url: 'http://restsharp.org/'
|
94 |
+
|
95 |
+
- regex: 'scalaj-http/(\d+[\.\d]+)'
|
96 |
+
name: 'ScalaJ HTTP'
|
97 |
+
version: '$1'
|
98 |
+
url: 'https://github.com/scalaj/scalaj-http'
|
99 |
+
|
100 |
+
- regex: 'REST::Client/(\d+)'
|
101 |
+
name: 'Perl REST::Client'
|
102 |
+
version: '$1'
|
103 |
+
url: 'https://metacpan.org/pod/REST::Client'
|
104 |
+
|
105 |
+
- regex: 'node-fetch/(\d+[\.\d]+)'
|
106 |
+
name: 'Node Fetch'
|
107 |
+
version: $1
|
108 |
+
url: 'https://github.com/node-fetch/node-fetch'
|
app/vendor/piwik/device-detector/regexes/device/car_browsers.yml
CHANGED
@@ -7,6 +7,10 @@
|
|
7 |
|
8 |
# Tesla Model S
|
9 |
Tesla:
|
10 |
-
regex: 'QtCarBrowser'
|
11 |
device: 'car browser'
|
12 |
-
|
|
|
|
|
|
|
|
7 |
|
8 |
# Tesla Model S
|
9 |
Tesla:
|
10 |
+
regex: '(?:Tesla/[0-9.]+|QtCarBrowser)'
|
11 |
device: 'car browser'
|
12 |
+
models:
|
13 |
+
- regex: 'QtCarBrowser'
|
14 |
+
model: 'Model S'
|
15 |
+
- regex: 'Tesla/[0-9.]+'
|
16 |
+
model: ''
|
app/vendor/piwik/device-detector/regexes/device/mobiles.yml
CHANGED
@@ -5,6 +5,14 @@
|
|
5 |
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
6 |
###############
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
'Tunisie Telecom':
|
9 |
regex: 'StarTrail TT[);/ ]'
|
10 |
device: 'smartphone'
|
@@ -56,7 +64,7 @@ SFR:
|
|
56 |
|
57 |
# HTC
|
58 |
HTC:
|
59 |
-
regex: 'HTC|Sprint (?:APA|ATP)|ADR(?!910L)[a-z0-9]+|NexusHD2|Amaze[ _]4G[);/ ]|(Desire|Sensation|Evo ?3D|IncredibleS|Wildfire|Butterfly)[ _]?([^;/]+) Build|(Amaze[ _]4G|One ?[XELSV\+]+)[);/ ]|SPV E6[05]0|One M8|X525a|PG86100|PC36100|XV6975|PJ83100[);/ ]|2PYB2|2PZC5|0PJA10|0PJA2'
|
60 |
device: 'smartphone'
|
61 |
models:
|
62 |
# explicit smartphone models
|
@@ -68,6 +76,8 @@ HTC:
|
|
68 |
model: 'Evo 3G'
|
69 |
- regex: 'PC36100[);/ ]'
|
70 |
model: 'Evo 4G'
|
|
|
|
|
71 |
- regex: 'PJ83100[);/ ]'
|
72 |
model: 'One X'
|
73 |
- regex: '(?:0PJA2|0PJA10)[);/ ]'
|
@@ -118,7 +128,7 @@ HTC:
|
|
118 |
model: '$1'
|
119 |
- regex: 'HTC;(?: )?([a-z0-9 ]+)'
|
120 |
model: '$1'
|
121 |
-
- regex: '(Desire|Sensation|Evo ?3D|IncredibleS|Wildfire|Butterfly)[ _]?([^;/]+) Build'
|
122 |
model: '$1 $2'
|
123 |
- regex: '(Amaze[ _]4G|One ?[XELSV\+]*) Build'
|
124 |
model: '$1'
|
@@ -405,7 +415,7 @@ Palm:
|
|
405 |
|
406 |
# HP
|
407 |
HP:
|
408 |
-
regex: 'TouchPad/\d+\.\d+|hp-tablet|HP ?iPAQ|webOS.*P160U|HP Slate|HP [78]|Compaq [7|8]|HP; [^;/)]+'
|
409 |
device: 'smartphone'
|
410 |
models:
|
411 |
- regex: 'HP Slate 6 Voice Tab'
|
@@ -417,6 +427,9 @@ HP:
|
|
417 |
- regex: 'Compaq ([78][^/;]*) Build'
|
418 |
model: 'Compaq $1'
|
419 |
device: 'tablet'
|
|
|
|
|
|
|
420 |
- regex: 'HP Slate ?(.+) Build'
|
421 |
model: 'Slate $1'
|
422 |
device: 'tablet'
|
@@ -982,7 +995,7 @@ Arian Space:
|
|
982 |
|
983 |
# Alcatel
|
984 |
Alcatel:
|
985 |
-
regex: 'Alcatel|Alc(?!or )[a-z0-9]+|One[ _]?Touch|idol3|(?:4003[AJ]|4009[ADEFIKMSX]|4013[DEJKMX]|4014[ADEKMX]|4015[ADNTX]|4016[ADX]|4017[ADEFSX]|4018[ADEFMX]|4024[EDX]|4027[ADNX]|4028[AEJS]|4032[ADEX]|4034[ADEFGX]|4035[ADXY]|4045[ADEX]|4047[ADFGNX]|4049[DEGMX]|4060[SW]|4114E|5009[AD]|5010[DEGSUX]|5011A|5012[DFG]|5015[ADEX]|5016[AXJ]|5017[ABDEOX]|5019D|5022[EDX]|5023[EF]|
|
986 |
device: 'smartphone'
|
987 |
models:
|
988 |
- regex: '(?:5022[EDX]|5070D)[);/ ]'
|
@@ -1049,9 +1062,9 @@ Alcatel:
|
|
1049 |
model: 'One Touch Idol 2'
|
1050 |
- regex: '5027B[);/ ]'
|
1051 |
model: 'One Touch Dawn'
|
1052 |
-
- regex: '
|
1053 |
model: '1S'
|
1054 |
-
- regex: '5034D[);/ ]'
|
1055 |
model: '3L'
|
1056 |
- regex: '7040[RT][);/ ]'
|
1057 |
model: 'One Touch Fierce 2'
|
@@ -1145,6 +1158,9 @@ Alcatel:
|
|
1145 |
- regex: '9203A[);/ ]'
|
1146 |
model: 'A3 7" 3G'
|
1147 |
device: 'tablet'
|
|
|
|
|
|
|
1148 |
- regex: '5085[BQ][);/ ]'
|
1149 |
model: 'A5'
|
1150 |
- regex: '5085[ADHIJY][);/ ]'
|
@@ -1248,15 +1264,17 @@ Alcatel:
|
|
1248 |
model: '1'
|
1249 |
- regex: '5009[AD][);/ ]'
|
1250 |
model: '1C'
|
1251 |
-
- regex: '
|
|
|
|
|
1252 |
model: '1X'
|
1253 |
-
- regex: '5052[AD][);/ ]'
|
1254 |
model: '3'
|
1255 |
-
- regex: '5099[ADYUI][);/ ]'
|
1256 |
model: '3V'
|
1257 |
- regex: '5026[AD][);/ ]'
|
1258 |
model: '3C'
|
1259 |
-
- regex: '5058[AIY][);/ ]'
|
1260 |
model: '3X'
|
1261 |
- regex: '5086[ADY][);/ ]'
|
1262 |
model: '5'
|
@@ -1279,7 +1297,7 @@ Alcatel:
|
|
1279 |
|
1280 |
# Allview
|
1281 |
Allview:
|
1282 |
-
regex: 'Allview|A4You|A5_(?:Easy(?:_TM)?|Ready(?:_TM)?|Quad|Quad_Plus_TM)|A[56789]_Lite|A5Smiley|A6_Duo|A10_Lite_2019|A10_Plus|AX2_Frenzy|AX4Nano|AX5NanoQ|C6_Duo|E[23]_Living|E3_(?:Jump|Sign)|E4_Lite|M9_Connect|P(?:43_Easy|[5689]_Energy|6_Energy_Lite|[68]_Energy_Mini(?:_TM)?|(41|[458])_eMagic(?:_TM)?|[589](?:_)?Life(?:_TM)?|[567]_Lite(?:_TM)?|6_plus|[45678]_Pro|7_Seon|10_Life|10_Style|7_Xtreme|6_Qmax|4_Quad)|V(?:[13]_Viper|1_Viper_I|2_Viper_(?:E|I|S|X|X_plus|Xe))|X(?:[1234]_Soul_Xtreme|[12345]_Soul|3_Soul_Lite|[
|
1283 |
device: 'smartphone'
|
1284 |
models:
|
1285 |
- regex: 'A4You'
|
@@ -1338,6 +1356,8 @@ Allview:
|
|
1338 |
model: 'P$1 Life'
|
1339 |
- regex: 'P10_Life'
|
1340 |
model: 'P10 Life'
|
|
|
|
|
1341 |
- regex: 'P10_Style'
|
1342 |
model: 'P10 Style'
|
1343 |
- regex: 'V([12])_Viper_I4G(?:_TM)?'
|
@@ -1358,7 +1378,7 @@ Allview:
|
|
1358 |
model: 'X$1 Soul Lite'
|
1359 |
- regex: 'X4_Soul_Mini_S(?:_TM)?'
|
1360 |
model: 'X4 Soul Mini S'
|
1361 |
-
- regex: 'X([
|
1362 |
model: 'X$1 Soul Mini'
|
1363 |
- regex: 'X3_Soul_PLUS'
|
1364 |
model: 'X3 Soul Plus'
|
@@ -1413,9 +1433,9 @@ Allview:
|
|
1413 |
- regex: 'Allview3SpeedQuad'
|
1414 |
device: 'tablet'
|
1415 |
model: 'Alldro 3 Speed Quad'
|
1416 |
-
- regex: '
|
1417 |
device: 'tablet'
|
1418 |
-
model: 'Viva
|
1419 |
- regex: 'ALLVIEW ?SPEEDI'
|
1420 |
device: 'tablet'
|
1421 |
model: 'Speed I'
|
@@ -1505,15 +1525,19 @@ Amoi:
|
|
1505 |
|
1506 |
# Ainol
|
1507 |
Ainol:
|
1508 |
-
regex: 'Numy|novo[0-9]'
|
1509 |
device: 'tablet'
|
1510 |
models:
|
1511 |
- regex: 'Numy 3G AX1'
|
1512 |
model: 'Novo 7 Numy AX1 3G'
|
1513 |
- regex: 'Numy_3G_AX3'
|
1514 |
model: 'Numy AX3 Sword'
|
|
|
|
|
1515 |
- regex: 'Numy_3G_BW1'
|
1516 |
model: 'Numy 3G Talos 2'
|
|
|
|
|
1517 |
|
1518 |
- regex: 'Numy[ _]([^;/]+) Build'
|
1519 |
model: 'Numy $1'
|
@@ -1648,7 +1672,7 @@ ANS:
|
|
1648 |
|
1649 |
# Assistant
|
1650 |
Assistant:
|
1651 |
-
regex: '(AS[-_](?:543[1-6]|44[12]1|541[12]|54[23]1|6431|401L)|AP-(?:721N|753G|7[25]7G|
|
1652 |
device: 'smartphone'
|
1653 |
models:
|
1654 |
- regex: 'AS[-_]401L '
|
@@ -1665,6 +1689,8 @@ Assistant:
|
|
1665 |
model: 'Unami'
|
1666 |
- regex: 'AS-5431'
|
1667 |
model: 'Prima'
|
|
|
|
|
1668 |
- regex: 'AS-5435'
|
1669 |
model: 'Shine'
|
1670 |
- regex: 'AS-5436[ _]'
|
@@ -1681,19 +1707,22 @@ Assistant:
|
|
1681 |
- regex: 'AP-941'
|
1682 |
model: 'AP-941'
|
1683 |
device: 'tablet'
|
|
|
|
|
|
|
1684 |
- regex: 'AP-106'
|
1685 |
model: 'AP-106 Force'
|
1686 |
device: 'tablet'
|
1687 |
-
- regex: '(AP-(?:7[25]7G|753G|107G))[/;) ]'
|
1688 |
device: 'tablet'
|
1689 |
model: '$1'
|
1690 |
|
1691 |
# Ark
|
1692 |
Ark:
|
1693 |
-
regex: '(ARK[_ -])?Benefit[_ -]([^/;]*) Build|EDGE A5HD|ICON (R40\+|R45)|Impulse[ _](P[12])|Wizard_1[/;) ]'
|
1694 |
device: 'smartphone'
|
1695 |
models:
|
1696 |
-
- regex: '(?:ARK[_ -])?Benefit[_ -]([^/;]*) Build'
|
1697 |
model: 'Benefit $1'
|
1698 |
- regex: 'Impulse[ _]P1\+'
|
1699 |
model: 'Impulse P1 Plus'
|
@@ -1720,7 +1749,7 @@ Garmin-Asus:
|
|
1720 |
|
1721 |
# Asus
|
1722 |
Asus:
|
1723 |
-
regex: 'Asus|Transformer|TF300T|Slider SL101|PadFone|ME302(?:C|KL)|ME301T|ME371MG|ME17(?:1|2V|3X)|(?:K0[01][0-9a-z]|P(?:00[18ACIL]|01[MTVWYZ]|01MA|01T_1|02[13478])(?: Build|\))|X015D|X018D|X003|X00[7ABT]D|Z00D|Z00[MTY]D|Z01[7FGHKMR]D)[);/ ]|ZB(631|602|633|55[135]|50[01])KL|ZC(55[134]|520|600)KL|ZA550KL|ZE(520|620|55[2345])KL|ZD55[23]KL|ZS(6[
|
1724 |
device: 'smartphone'
|
1725 |
models:
|
1726 |
# explicit tablet models
|
@@ -1847,7 +1876,7 @@ Asus:
|
|
1847 |
model: 'ZenFone Max M1'
|
1848 |
- regex: '(?:ASUS_)?(ZB601KL)'
|
1849 |
model: 'ZenFone Max Pro M1'
|
1850 |
-
- regex: '(?:ASUS_)?(
|
1851 |
model: 'ZenFone Max M2'
|
1852 |
- regex: '(?:ASUS_)?(?:Z00[AD]|Z008D|Z008|Z00AD[AB]?)'
|
1853 |
model: 'ZenFone 2'
|
@@ -1855,6 +1884,8 @@ Asus:
|
|
1855 |
model: 'ZenFone Live'
|
1856 |
- regex: '(?:ASUS_)?X00RD'
|
1857 |
model: 'ZenFone Live L1'
|
|
|
|
|
1858 |
- regex: '(?:ASUS_)Z00YD'
|
1859 |
model: 'Live'
|
1860 |
- regex: '(?:ASUS_)?(?:Z00[ERLMT]D|Z011D)'
|
@@ -1869,7 +1900,7 @@ Asus:
|
|
1869 |
model: 'ZenFone 5 Lite'
|
1870 |
- regex: '(?:ASUS_)?(?:Z01RD|ZS620KL)'
|
1871 |
model: 'ZenFone 5Z'
|
1872 |
-
- regex: '(?:ASUS_)?(?:T00G|Z002|ZS630KL)'
|
1873 |
model: 'ZenFone 6'
|
1874 |
- regex: '(?:ASUS_)?Z010D'
|
1875 |
model: 'ZenFone Max'
|
@@ -1897,6 +1928,8 @@ Asus:
|
|
1897 |
model: 'ZenFone 3 Pegasus'
|
1898 |
- regex: '(?:ASUS_)?(ZE553KL|Z01HD)'
|
1899 |
model: 'ZenFone 3 Zoom'
|
|
|
|
|
1900 |
- regex: '(?:ASUS_)?Z00UD'
|
1901 |
model: 'ZenFone Selfie'
|
1902 |
- regex: '(?:ASUS_)?(Z016[DS]|Z01FD)'
|
@@ -1929,7 +1962,7 @@ Asus:
|
|
1929 |
model: 'ZenFone Zoom'
|
1930 |
- regex: '(?:ASUS_)?Z01QD'
|
1931 |
model: 'ROG Phone'
|
1932 |
-
- regex: '(?:ASUS_)?
|
1933 |
model: 'ROG Phone 2'
|
1934 |
|
1935 |
# general detections
|
@@ -2102,7 +2135,7 @@ Bluegood:
|
|
2102 |
|
2103 |
# Blackview
|
2104 |
Blackview:
|
2105 |
-
regex: '(BV([2456789]000|(5[589]|9[156])00)(?:[ _](?:PRO))?|(P10000(?:[ _](?:PRO))?)|omega[ _]pro|Alife[ _][PS]1|Heatwave|DM550|BV9700Pro|(?<!Lenovo[_ ])A60(?:Pro)?\))'
|
2106 |
device: 'smartphone'
|
2107 |
models:
|
2108 |
- regex: 'A60Pro\)'
|
@@ -2115,7 +2148,7 @@ Blackview:
|
|
2115 |
model: '$1 Pro'
|
2116 |
- regex: 'BV9000Pro-F'
|
2117 |
model: 'BV9000 Pro F'
|
2118 |
-
- regex: '(BV([48]000|9[56]00))Pro'
|
2119 |
model: '$1 Pro'
|
2120 |
- regex: '(BV([2456789]000|(5[589]|9[15])00)(?:[ _](?:PRO))?)'
|
2121 |
model: '$1'
|
@@ -2144,11 +2177,13 @@ Bluboo:
|
|
2144 |
|
2145 |
# Black Fox
|
2146 |
'Black Fox':
|
2147 |
-
regex: 'BMM[ _-]?((44[123]D|431D|533D|54[12]S|541[AB]|54[123]D|531[ABD]))[;/) ]'
|
2148 |
device: 'smartphone'
|
2149 |
models:
|
2150 |
- regex: 'BMM443D'
|
2151 |
model: 'B7 Fox+'
|
|
|
|
|
2152 |
- regex: 'BMM442D'
|
2153 |
model: 'B7'
|
2154 |
- regex: 'BMM531D'
|
@@ -2157,7 +2192,7 @@ Bluboo:
|
|
2157 |
model: 'B5'
|
2158 |
- regex: 'BMM541A'
|
2159 |
model: 'B5+'
|
2160 |
-
- regex: '
|
2161 |
model: 'B4'
|
2162 |
- regex: 'BMM441D'
|
2163 |
model: 'B4 Mini'
|
@@ -2202,9 +2237,11 @@ Boway:
|
|
2202 |
|
2203 |
# Brondi
|
2204 |
Brondi:
|
2205 |
-
regex: '(?:CENTURION|GLADIATOR| GLORY|LUXURY|SENSUELLE|VICTORY)(?:[ _-]?[2-6])?[);/ ]|Surfing Tab'
|
2206 |
device: 'smartphone'
|
2207 |
models:
|
|
|
|
|
2208 |
- regex: 'CENTURION(?:[ _-]?([2-6]))?[);/ ]'
|
2209 |
model: 'CENTURION $1'
|
2210 |
- regex: 'GLADIATOR(?:[ _-]?([2-6]))?[);/ ]'
|
@@ -2235,22 +2272,28 @@ VGO TEL:
|
|
2235 |
|
2236 |
# Vivo
|
2237 |
Vivo:
|
2238 |
-
regex: '((?:VIV-|BBG-)?vivo)|V1813B[AT]|V1818T|V1731CA|
|
2239 |
device: 'smartphone'
|
2240 |
models:
|
2241 |
- regex: '(?:VIV-|BBG-)?vivo[ _]1601[);/ ]'
|
2242 |
model: 'V5'
|
2243 |
- regex: 'V1932[AT]'
|
2244 |
model: 'S5'
|
|
|
|
|
|
|
|
|
2245 |
- regex: 'V1813B[AT]'
|
2246 |
model: 'Z3'
|
|
|
|
|
2247 |
- regex: 'Vivo ONE'
|
2248 |
model: 'One'
|
2249 |
- regex: 'X9Plus'
|
2250 |
model: 'X9 Plus'
|
2251 |
- regex: 'X20Plus'
|
2252 |
model: 'X20 Plus'
|
2253 |
-
- regex: '
|
2254 |
model: 'X23'
|
2255 |
- regex: 'V1818[AT]|vivo 181[45]'
|
2256 |
model: 'Y93'
|
@@ -2294,6 +2337,8 @@ Vivo:
|
|
2294 |
model: 'Y71'
|
2295 |
- regex: 'vivo 1725'
|
2296 |
model: 'X21'
|
|
|
|
|
2297 |
- regex: 'V1838A'
|
2298 |
model: 'X27'
|
2299 |
- regex: 'vivo 1727'
|
@@ -2407,7 +2452,7 @@ Blaupunkt:
|
|
2407 |
model: 'Polaris $1'
|
2408 |
- regex: 'Atlantis[_ ](1001A|1010A|A10\.G402)'
|
2409 |
model: 'Atlantis $1'
|
2410 |
-
- regex: 'Blaupunkt (SL 0[
|
2411 |
device: 'smartphone'
|
2412 |
model: '$1'
|
2413 |
|
@@ -2829,25 +2874,30 @@ Casio:
|
|
2829 |
|
2830 |
# Casper
|
2831 |
Casper:
|
2832 |
-
regex: 'CASPER_|
|
2833 |
device: 'smartphone'
|
2834 |
models:
|
2835 |
-
- regex: 'CASPER_VIA_([AE]2|M[
|
2836 |
model: 'VIA $1'
|
2837 |
-
- regex: '
|
2838 |
-
model: 'VIA
|
2839 |
-
- regex: 'VIA-(T7D)[);/ ]'
|
2840 |
model: 'VIA $1'
|
2841 |
device: 'tablet'
|
|
|
|
|
2842 |
|
2843 |
-
# Cat
|
2844 |
Cat:
|
2845 |
-
regex: 'Cat ?(tablet|stargate|nova)|B15Q'
|
2846 |
device: 'tablet'
|
2847 |
models:
|
2848 |
- regex: 'B15Q'
|
2849 |
model: 'B15Q'
|
2850 |
device: 'smartphone'
|
|
|
|
|
|
|
2851 |
- regex: 'Cat ?(?:tablet)? ?((?:Galactica|Nova|StarGate|PHOENIX)[^/;]*) Build'
|
2852 |
model: '$1'
|
2853 |
- regex: 'Cat ?tablet'
|
@@ -2922,6 +2972,8 @@ Changhong:
|
|
2922 |
model: 'Flare S6 Plus'
|
2923 |
- regex: 'FLARE S6 POWER'
|
2924 |
model: 'Flare S6 Power'
|
|
|
|
|
2925 |
- regex: 'Flare(?:[ _])?(4|A[13]|J[135]|P[13]|S4|X2)'
|
2926 |
model: 'Flare $1'
|
2927 |
- regex: 'OMEGA HD 4'
|
@@ -3044,12 +3096,15 @@ ConCorde:
|
|
3044 |
|
3045 |
# Condor
|
3046 |
Condor:
|
3047 |
-
regex: 'Allure M[13]|Griffe
|
3048 |
device: 'smartphone'
|
3049 |
models:
|
3050 |
- regex: 'CTAB([^/;]+) Build'
|
3051 |
device: 'tablet'
|
3052 |
model: 'CTAB $1'
|
|
|
|
|
|
|
3053 |
|
3054 |
- regex: 'PHS\-601'
|
3055 |
model: 'C8'
|
@@ -3059,6 +3114,8 @@ Condor:
|
|
3059 |
model: 'C7 Mini'
|
3060 |
- regex: 'PGN\-?409'
|
3061 |
model: 'Plume P4'
|
|
|
|
|
3062 |
- regex: 'PGN\-?504'
|
3063 |
model: 'C5'
|
3064 |
- regex: 'PGN\-?505'
|
@@ -3077,6 +3134,8 @@ Condor:
|
|
3077 |
model: 'Allure A9 Plus'
|
3078 |
- regex: 'PGN\-?513'
|
3079 |
model: 'Griffe G4'
|
|
|
|
|
3080 |
- regex: 'PGN\-?514'
|
3081 |
model: 'Plume P7'
|
3082 |
- regex: 'PGN\-?515'
|
@@ -3087,8 +3146,18 @@ Condor:
|
|
3087 |
model: 'Plume P6'
|
3088 |
- regex: 'PGN\-?521'
|
3089 |
model: 'Griffe G4 Plus'
|
|
|
|
|
|
|
|
|
3090 |
- regex: 'Griffe T6'
|
3091 |
model: 'Griffe T6'
|
|
|
|
|
|
|
|
|
|
|
|
|
3092 |
- regex: 'PGN\-?522'
|
3093 |
model: 'P6 Plus'
|
3094 |
- regex: 'PGN\-?523'
|
@@ -3115,20 +3184,26 @@ Condor:
|
|
3115 |
model: 'Allure A8 Plus'
|
3116 |
- regex: 'PGN\-?613'
|
3117 |
model: 'Allure A55 Plus'
|
|
|
|
|
3118 |
- regex: 'Plume L1'
|
3119 |
model: 'Plume L1'
|
3120 |
- regex: 'Plume L2 Pro'
|
3121 |
model: 'Plume L2 Pro'
|
|
|
|
|
|
|
|
|
3122 |
|
3123 |
- regex: 'PGN\-?([0-9]{3})'
|
3124 |
model: 'PGN-$1'
|
3125 |
|
3126 |
# Coolpad
|
3127 |
Coolpad:
|
3128 |
-
regex: '(?:YL-)?Coolpad|8190Q[ ;/\)]|(8295|5860S) Build|CP8676_I0[23] Build|CP8298_I00 Build|REVVLPLUS C3701A|VCR-
|
3129 |
device: 'smartphone'
|
3130 |
models:
|
3131 |
-
- regex: 'VCR-
|
3132 |
model: 'Cool Play 6'
|
3133 |
- regex: 'REVVLPLUS C3701A'
|
3134 |
model: 'REVVL Plus'
|
@@ -3172,11 +3247,13 @@ Cricket:
|
|
3172 |
|
3173 |
# Crosscall
|
3174 |
Crosscall:
|
3175 |
-
regex: 'Crosscall|ODYSSEY_Plus|Odyssey S1|Trekker-[MSX][1234]|Action-X3'
|
3176 |
device: 'smartphone'
|
3177 |
models:
|
3178 |
- regex: 'Action-X3'
|
3179 |
model: 'Action-X3'
|
|
|
|
|
3180 |
- regex: 'Crosscall ([^;/]+) Build'
|
3181 |
model: '$1'
|
3182 |
- regex: 'ODYSSEY_Plus'
|
@@ -3209,11 +3286,13 @@ Cube:
|
|
3209 |
|
3210 |
# CUBOT
|
3211 |
CUBOT:
|
3212 |
-
regex: 'CUBOT'
|
3213 |
device: 'smartphone'
|
3214 |
models:
|
3215 |
- regex: 'CHEETAH 2'
|
3216 |
model: 'Cheetah 2'
|
|
|
|
|
3217 |
- regex: 'DINOSAUR'
|
3218 |
model: 'Dinosaur'
|
3219 |
- regex: 'KING KONG'
|
@@ -3346,21 +3425,23 @@ Desay:
|
|
3346 |
|
3347 |
# DEXP
|
3348 |
DEXP:
|
3349 |
-
regex: 'DEXP|(?:Ursus|Ixion)[ _]([^;/)]+)|H135[ _]Build|(BL150|BS155|BS160|BS550|BS650)[);/ ]'
|
3350 |
device: 'smartphone'
|
3351 |
models:
|
3352 |
|
3353 |
- regex: 'Ixion[_ ]([^;/]+)(?: Build|\))'
|
3354 |
model: 'Ixion $1'
|
|
|
|
|
3355 |
|
3356 |
-
- regex: 'Ursus ([^;/]+) Build'
|
3357 |
model: 'Ursus $1'
|
3358 |
device: 'tablet'
|
3359 |
|
3360 |
- regex: 'H135[ _]Build'
|
3361 |
model: 'Atlas'
|
3362 |
device: 'desktop'
|
3363 |
-
- regex: '(BL150|BS155|BS160|BS550|BS650)[);/ ]'
|
3364 |
model: '$1'
|
3365 |
- regex: 'DEXP[ _]([^;/]+) Build'
|
3366 |
model: '$1'
|
@@ -3412,7 +3493,7 @@ Digiland:
|
|
3412 |
|
3413 |
# Digma
|
3414 |
Digma:
|
3415 |
-
regex: 'Digma[_ ]([^;/]+) Build|HIT HT707[10]MG|CITI 1902 3G|(CITI[_ ](?:[A-Z0-9]+)[_ ][34]G)[ _]C[ST](500[67]PG|8209MG|8139ML)|
|
3416 |
device: 'smartphone'
|
3417 |
models:
|
3418 |
- regex: 'HIT HT707[10]MG'
|
@@ -3424,8 +3505,8 @@ Digma:
|
|
3424 |
model: 'HIT Q500 3G'
|
3425 |
- regex: 'HT4039PG'
|
3426 |
model: 'HIT Q401 3G'
|
3427 |
-
- regex: '
|
3428 |
-
model: '
|
3429 |
device: 'tablet'
|
3430 |
- regex: '(VOX[ _](?:[0-9\.A-Z]+)[_ ][43]G)'
|
3431 |
model: '$1'
|
@@ -3465,7 +3546,7 @@ Digma:
|
|
3465 |
- regex: 'MVM908HCZ'
|
3466 |
model: 'iDx9'
|
3467 |
device: 'tablet'
|
3468 |
-
- regex: '(
|
3469 |
model: '$1'
|
3470 |
device: 'tablet'
|
3471 |
- regex: '(iDx10|iDx7)'
|
@@ -3478,6 +3559,8 @@ Digma:
|
|
3478 |
- regex: '(CITI 1902 3G)'
|
3479 |
model: '$1'
|
3480 |
device: 'tablet'
|
|
|
|
|
3481 |
- regex: '(CITI_8527_4G)'
|
3482 |
model: '$1'
|
3483 |
device: 'tablet'
|
@@ -3487,7 +3570,7 @@ Digma:
|
|
3487 |
- regex: 'iDxD8 3G'
|
3488 |
model: 'D-Plane2 8'
|
3489 |
device: 'tablet'
|
3490 |
-
- regex: '(
|
3491 |
model: '$1'
|
3492 |
device: 'tablet'
|
3493 |
- regex: 'NS6902QL'
|
@@ -3517,7 +3600,7 @@ DoCoMo:
|
|
3517 |
|
3518 |
# Doogee
|
3519 |
Doogee:
|
3520 |
-
regex: 'DOOGEE[ _-]|Valencia2_Y100pro|X5max(?:[_ ]PRO)?|(KISSME|BIGBOY|COLLO[23]?|DAGGER|DISCOVERY2?|FIND|HOTWIND|LATTE|MAX|MINT|MOON|PIXELS|RAINBOX|TURBO|VALENCIA|VOYAGER2?|TITANS2?)[ -_](DG[0-9]+C?)[);/ ]|BL[579]000[);/ ]|BL12000|BL5500[_ ]Lite'
|
3521 |
device: 'smartphone'
|
3522 |
models:
|
3523 |
- regex: 'Valencia2_Y100pro'
|
@@ -3532,6 +3615,8 @@ Doogee:
|
|
3532 |
model: 'BL12000'
|
3533 |
- regex: 'KISSME-DG580'
|
3534 |
model: 'Kissme DG580'
|
|
|
|
|
3535 |
- regex: '(X5max(?:[_ ]PRO)?)'
|
3536 |
model: '$1'
|
3537 |
- regex: '(?:DOOGEE[ _-])?(BIGBOY|COLLO[23]?|DAGGER|DISCOVERY2?|FIND|HOTWIND|LATTE|MAX|MINT|MOON|PIXELS|RAINBOX|TURBO|VALENCIA|Valencia2_Y100pro|VOYAGER2?|TITANS2?)[ -_](DG[0-9]+C?)[);/ ]'
|
@@ -3775,13 +3860,13 @@ Riviera:
|
|
3775 |
|
3776 |
# Senseit
|
3777 |
Senseit:
|
3778 |
-
regex: 'SENSEIT[ _]?([^;/)]+) Build'
|
3779 |
device: 'smartphone'
|
3780 |
model: '$1'
|
3781 |
|
3782 |
# Sony & Sony Ericsson (combined as they are mixed up)
|
3783 |
Sony:
|
3784 |
-
regex: 'Sony(?: ?Ericsson)?|SGP|Xperia|([456]0[12]|701)SO|C1[569]0[45]|C2[01]0[45]|C230[45]|C530[236]|C550[23]|C6[56]0[236]|C6616|C68(?:0[26]|[34]3)|C69(?:0[236]|16|43)|D200[45]|D21(?:0[45]|14)|D22(?:0[236]|12|43)|D230[2356]|D240[36]|D25(?:02|33)|D510[236]|D530[36]|D5316|D5322|D5503|D58[03]3|D65(?:0[23]|43|63)|D66[03458]3|D66[14]6|D6708|E(?:20[0345]3|2006|210[45]|2115|2124|230[36]|2312|23[356]3|530[36]|53[3456]3|5506|55[356]3|56[46305][36]|58[02]3|65[35]3|66[0358]3|68[358]3)|I[34]312|I4332|F311[12356]|F331[13]|F321[12356]|F5[13]21|F5122|F813[12]|F833[12]|G312[135]|G311[26]|G322[136]|G3212|G331[123]|G3412|G3416|G342[136]|G823[12]|G834[123]|G8[14]4[12]|H(?:3113|3123|3133|3213|3223|3311|3321|4113|4133|4213|4233|4311|4331|4413|4433|82[167]6|83[12]4|8416|9436)|(?:WT|LT|SO|ST|SK|MK)[0-9]+[a-z]+[0-9]*(?: Build|\))|X?L39H|XM50[ht]|W960|portalmmm/2\.0 K|S3[69]h|SOL2[246]|SOV3[1234567]|X10[ia]v?|E1[05][ai]v?|MT[0-9]{2}[a-z]? Build|SO-0(?:[12]C|[345]D|[234]E|[
|
3785 |
device: 'smartphone'
|
3786 |
models:
|
3787 |
# SONY ERICSSON: explicit smartphone models
|
@@ -3908,6 +3993,8 @@ Sony:
|
|
3908 |
device: 'feature phone'
|
3909 |
|
3910 |
# SONY: explicit smartphone models
|
|
|
|
|
3911 |
- regex: 'SO-04G'
|
3912 |
model: 'Xperia A4'
|
3913 |
- regex: '(?:Sony(?:Ericsson)?)?I(?:4113|31[12]3)'
|
@@ -4105,7 +4192,7 @@ Sony:
|
|
4105 |
model: 'Xperia XZ2 Dual'
|
4106 |
- regex: 'H8166'
|
4107 |
model: 'Xperia XZ2 Premium Dual'
|
4108 |
-
- regex: '(?:Sony(?:Ericsson)?)?H(8416|9436|9493)'
|
4109 |
model: 'Xperia XZ3'
|
4110 |
- regex: '(?:Sony(?:Ericsson)?)?G331[13]'
|
4111 |
model: 'Xperia L1'
|
@@ -4132,6 +4219,9 @@ Sony:
|
|
4132 |
- regex: 'SGP(?:311|312|321)[);/ ]|SO-03E'
|
4133 |
model: 'Xperia Tablet Z'
|
4134 |
device: 'tablet'
|
|
|
|
|
|
|
4135 |
- regex: 'SGP(?:511|512|521)[);/ ]|SO-05F'
|
4136 |
model: 'Xperia Tablet Z2'
|
4137 |
device: 'tablet'
|
@@ -4142,6 +4232,11 @@ Sony:
|
|
4142 |
model: 'Xperia Tablet S'
|
4143 |
device: 'tablet'
|
4144 |
|
|
|
|
|
|
|
|
|
|
|
4145 |
# general detections
|
4146 |
- regex: 'SonyBDP|SonyDBV'
|
4147 |
model: 'Blu-ray Player'
|
@@ -4199,9 +4294,9 @@ Ergo:
|
|
4199 |
model: 'V550 Vision'
|
4200 |
- regex: 'B504[_ ]Unit'
|
4201 |
model: 'B504 Unit'
|
4202 |
-
- regex: 'A500 Best'
|
4203 |
model: 'A500 Best'
|
4204 |
-
- regex: 'A550 Maxx'
|
4205 |
model: 'A550 Maxx'
|
4206 |
- regex: 'Prime B400'
|
4207 |
model: 'Prime B400'
|
@@ -4352,11 +4447,13 @@ Explay:
|
|
4352 |
|
4353 |
# EvroMedia
|
4354 |
EvroMedia:
|
4355 |
-
regex: 'Playpad[ _]'
|
4356 |
device: 'tablet'
|
4357 |
models:
|
4358 |
- regex: 'Playpad 3G GOO'
|
4359 |
model: 'Play Pad 3G Goo'
|
|
|
|
|
4360 |
- regex: 'PlayPad 3GTab XL'
|
4361 |
model: 'Play Pad 3G Tab XL'
|
4362 |
# EKO
|
@@ -4582,11 +4679,13 @@ General Mobile:
|
|
4582 |
|
4583 |
# Geotel
|
4584 |
Geotel:
|
4585 |
-
regex: 'GEOTEL'
|
4586 |
device: 'smartphone'
|
4587 |
models:
|
4588 |
- regex: 'G1'
|
4589 |
model: 'G1'
|
|
|
|
|
4590 |
|
4591 |
# Ghia
|
4592 |
Ghia:
|
@@ -4603,10 +4702,10 @@ Ghia:
|
|
4603 |
|
4604 |
# Gigabyte
|
4605 |
Gigabyte:
|
4606 |
-
regex: 'GSmart [a-z0-9 ]+ Build|Gigabyte-[a-z0-9]+'
|
4607 |
device: 'smartphone'
|
4608 |
models:
|
4609 |
-
- regex: '(GSmart [a-z0-9 ]+) Build'
|
4610 |
model: '$1'
|
4611 |
- regex: 'Gigabyte-([a-z0-9]+)'
|
4612 |
model: '$1'
|
@@ -4626,22 +4725,22 @@ Gigaset:
|
|
4626 |
|
4627 |
# Ginzzu
|
4628 |
Ginzzu:
|
4629 |
-
regex: 'GINZZU[_ ]|((?:RS(?:7[14]|81|9[67])D)|S50[45]0|S5120|RS(6[12]|
|
4630 |
device: 'smartphone'
|
4631 |
models:
|
4632 |
-
- regex: 'GINZZU[_ ]?(S40[17]0|S4710|ST6040)'
|
4633 |
model: '$1'
|
4634 |
-
- regex: 'GINZZU[_ ]?(GT-7105)'
|
4635 |
model: '$1'
|
4636 |
device: 'tablet'
|
4637 |
- regex: '(RS6[12]D) ULTIMATE'
|
4638 |
model: '$1 Ultimate'
|
4639 |
-
- regex: '((?:RS(?:7[14]|81|9[
|
4640 |
model: '$1'
|
4641 |
|
4642 |
# Gionee
|
4643 |
Gionee:
|
4644 |
-
regex: '(?:GIO-)?GIONEE[ _-]?[a-z0-9]+|(?:Dream_D1|V188S?|GN[0-9]{3,4}[a-z]?)[);/ ]|F103(?: Pro)? Build|P5 mini Build|P7 Max Build|M7 Power '
|
4645 |
device: 'smartphone'
|
4646 |
models:
|
4647 |
- regex: 'GN810[);/ ]'
|
@@ -4651,6 +4750,8 @@ Gionee:
|
|
4651 |
model: 'GN$1'
|
4652 |
- regex: 'V188S[);/ ]'
|
4653 |
model: 'V188S'
|
|
|
|
|
4654 |
- regex: 'V188[);/ ]'
|
4655 |
model: 'V188'
|
4656 |
- regex: 'F103( Pro)? Build'
|
@@ -4696,8 +4797,8 @@ GOCLEVER:
|
|
4696 |
- regex: 'QUANTUM_(1010N|1010M|900)'
|
4697 |
model: 'QUANTUM $1'
|
4698 |
device: 'tablet'
|
4699 |
-
- regex: '
|
4700 |
-
model: 'INSIGNIA
|
4701 |
device: 'tablet'
|
4702 |
- regex: '(ORION|ARIES|ELIPSO)[_ ](71|101|102)'
|
4703 |
model: '$1 $2'
|
@@ -4705,7 +4806,7 @@ GOCLEVER:
|
|
4705 |
- regex: 'TQ700N'
|
4706 |
model: 'QUANTUM 700N'
|
4707 |
device: 'tablet'
|
4708 |
-
- regex: '((?:QUANTUM|ARIES|INSIGNIA|ORION|ELIPSO)[ _-]?[^;/]+) Build'
|
4709 |
model: '$1'
|
4710 |
- regex: 'GOCLEVER[ _-]TAB[ _-]?([^;/]+) Build'
|
4711 |
model: 'TAB $1'
|
@@ -4748,7 +4849,7 @@ Goly:
|
|
4748 |
|
4749 |
# Google
|
4750 |
Google:
|
4751 |
-
regex: 'Nexus|GoogleTV|Glass|CrKey[^a-z0-9]|Pixel(?: Build|\))|Pixel (?:XL|C|[2-4]|[2-4] XL)'
|
4752 |
device: 'smartphone'
|
4753 |
models:
|
4754 |
- regex: 'Glass'
|
@@ -4785,6 +4886,8 @@ Google:
|
|
4785 |
model: 'Pixel 4'
|
4786 |
- regex: 'Pixel 2'
|
4787 |
model: 'Pixel 2'
|
|
|
|
|
4788 |
- regex: 'Pixel C'
|
4789 |
device: 'tablet'
|
4790 |
model: 'Pixel C'
|
@@ -4822,11 +4925,17 @@ Hafury:
|
|
4822 |
|
4823 |
# Haier
|
4824 |
Haier:
|
4825 |
-
regex: 'Haier|(?:HW-)?W(?:716|757|860|970)[);/ ]|(?:HM-)?(G(?:152|303|353|552|70[01])?-FL|G(?:303)?-W|I(?:557)?-FL)|(?:PAD[ _](D71|G781|d85))'
|
4826 |
device: 'smartphone'
|
4827 |
models:
|
|
|
|
|
|
|
|
|
4828 |
- regex: '(?:HM-)?(G(?:152|353|552|70[01])|G(?:303)|I(?:557))'
|
4829 |
model: '$1'
|
|
|
|
|
4830 |
- regex: '(?:HW-)?W(716|757|860|970)[);/ ]'
|
4831 |
model: 'W$1'
|
4832 |
- regex: 'PAD[ -_](D71|G781|d85)'
|
@@ -4874,7 +4983,7 @@ Hasee:
|
|
4874 |
|
4875 |
# Hisense
|
4876 |
Hisense:
|
4877 |
-
regex: '(?:HS-)?Hisense ([^;/]+) Build|Hisense [^);/]+|HS-(?:G|U|EG?|I|L|T|X)[0-9]+[a-z0-9\-]*|E270BSA|M470BS[AE]|E2281|EG680|
|
4878 |
device: 'smartphone'
|
4879 |
models:
|
4880 |
# explicit tablet models
|
@@ -4889,6 +4998,10 @@ Hisense:
|
|
4889 |
model: 'Sero 8'
|
4890 |
- regex: 'HLTE700T'
|
4891 |
model: 'A6'
|
|
|
|
|
|
|
|
|
4892 |
- regex: 'EG680'
|
4893 |
model: 'Smartfren Andromax Z'
|
4894 |
|
@@ -4944,7 +5057,7 @@ Hoozo:
|
|
4944 |
|
4945 |
# Huawei
|
4946 |
Huawei:
|
4947 |
-
regex: '(HW-)?(?:Huawei|Ideos|Honor[ _]?|(?:(?:AGS|AGS2|ALE|ALP|AMN|ANE|ARE|ARS|ATH|ATU|AUM|BAC|BAH|BAH2|BG2|BGO|BKK|BKL|BLA|BLL|BLN|BND|BTV|CAG|CAM|CAN|CAZ|CHC|CHE[12]?|CHM|CLT|CMR|COL|COR|CPN|CRO|CRR|CUN|DIG|DIG|DLI|DRA|DUA|DUB|DUK|EDI|ELE|EML|EVA|EVR|FDR|FIG|FLA|FRD|GRA|HLK|HMA|HRY|HWI|H[36]0|INE|JAT|JDN|JDN2|JKM|JMM|JSN|KIW|KNT|KOB|KSA|LDN|LLD|LND|LON|LUA|LY[AO]|MAR|MHA|MRD|MYA|NCE|NEM|NEO|NXT|PAR|PCT|PIC|PLE|PLK|POT|PRA|RIO|RNE|RVL|SCC|SCL|SEA|SHT|SLA|SNE|STF|STK|TAG|TIT|TNY|TRT|VCE|VEN|VIE|VKY|VNS|VOG|VRD|VTR|WAS|YAL|G(?:527|620S|621|630|735)|Y(?:221|330|550|6[23]5))-(?:[A-Z]{0,2}[0-9]{1,4}[A-Z]{0,2}?)|H1711|U(?:8230|8500|8661|8665|8667|8800|8818|8860|9200|9508))[);/ ])|hi6210sft|SPN-AL00|HRY-LX1MEB|GEM-70[1-3]L|PE-(UL00|TL10)|VRD-W09|T1-
|
4948 |
device: 'smartphone'
|
4949 |
models:
|
4950 |
- regex: 'ARS-([AT]L00|L22)[);/ ]'
|
@@ -4997,6 +5110,8 @@ Huawei:
|
|
4997 |
model: 'Ascend G620S'
|
4998 |
- regex: 'G630-U251'
|
4999 |
model: 'Ascend G630'
|
|
|
|
|
5000 |
- regex: 'U8860[);/ ]'
|
5001 |
model: 'Honor'
|
5002 |
- regex: 'H1711[);/ ]'
|
@@ -5013,7 +5128,9 @@ Huawei:
|
|
5013 |
model: 'Honor 2'
|
5014 |
- regex: 'YAL-(?:L21|AL00)'
|
5015 |
model: 'Honor 20'
|
5016 |
-
- regex: '
|
|
|
|
|
5017 |
model: 'Honor 20S'
|
5018 |
- regex: 'YAL-(L41|AL10)[);/ ]'
|
5019 |
model: 'Honor 20 Pro'
|
@@ -5025,9 +5142,12 @@ Huawei:
|
|
5025 |
model: 'Honor Play 4C'
|
5026 |
- regex: 'ASK-AL00x'
|
5027 |
model: 'Honor Play 3'
|
5028 |
-
- regex: 'JDN-AL00'
|
5029 |
model: 'Honor Pad 2'
|
5030 |
device: 'tablet'
|
|
|
|
|
|
|
5031 |
- regex: 'JAT-AL00'
|
5032 |
model: 'Honor Play 8A'
|
5033 |
- regex: 'KNT-(?:AL[12]0|[TU]L10)'
|
@@ -5048,12 +5168,16 @@ Huawei:
|
|
5048 |
model: 'G621'
|
5049 |
- regex: '(?:Honor_|HW-)?H30-(?:C00|L01M?|L02|U10|T00|T10)(?:_TD)?[);/ ]'
|
5050 |
model: 'Honor 3C'
|
|
|
|
|
5051 |
- regex: '(?:Honor_|HW-)?SCL-(?:AL00|CL00|TL00H?)(?:_TD)?[);/ ]'
|
5052 |
model: 'Honor 4A'
|
5053 |
- regex: '(?:Honor_|HW-)?CAM-(?:AL00|TL00H|TL00)(?:_TD)?[);/ ]'
|
5054 |
model: 'Honor 5A'
|
5055 |
- regex: '(?:Honor_|HW-)?KIW-(?:AL10|TL00H|[TC]L00|L2[124]|UL00)(?:_TD)?[);/ ]'
|
5056 |
model: 'Honor 5X'
|
|
|
|
|
5057 |
- regex: '(?:Honor_|HW-)?CHM-U01(?:_TD)?[);/ ]'
|
5058 |
model: 'Honor 4C'
|
5059 |
- regex: '((?:Honor_|HW-)?H60-L(?:01|02|03|04|11|12)(?:_TD)?|HW-H60-J1)[);/ ]'
|
@@ -5062,7 +5186,7 @@ Huawei:
|
|
5062 |
model: 'Honor 6 Play'
|
5063 |
- regex: 'PE-(UL00|TL10)'
|
5064 |
model: 'Honor 6 Plus'
|
5065 |
-
- regex: '(?:Honor_|HW-)?SCL-
|
5066 |
model: 'Honor Y6'
|
5067 |
- regex: '(?:Honor_|HW-)?LYO-L21'
|
5068 |
model: 'Honor Y6 II Compact' # Honor 5A
|
@@ -5100,7 +5224,7 @@ Huawei:
|
|
5100 |
model: 'Honor 8C'
|
5101 |
- regex: 'JSN-L(?:2[123]|42)|JSN-[TA]L00[a]?'
|
5102 |
model: 'Honor 8X'
|
5103 |
-
- regex: 'KSA-
|
5104 |
model: 'Honor 8S'
|
5105 |
- regex: 'ARE-(?:AL[10]0|L22HN|TL00)'
|
5106 |
model: 'Honor 8X Max'
|
@@ -5116,13 +5240,15 @@ Huawei:
|
|
5116 |
model: 'Honor 9'
|
5117 |
- regex: 'HLK-AL00'
|
5118 |
model: 'Honor 9X'
|
|
|
|
|
5119 |
- regex: 'LLD-AL[23]0'
|
5120 |
model: 'Honor 9i'
|
5121 |
- regex: 'LLD-(?:AL[01]0|L[23]1|TL10)'
|
5122 |
model: 'Honor 9 Lite'
|
5123 |
- regex: 'COL-(?:AL[01]0|TL[01]0|L29)'
|
5124 |
model: 'Honor 10'
|
5125 |
-
- regex: 'HRY-(?:
|
5126 |
model: 'Honor 10 Lite'
|
5127 |
- regex: 'VKY-TL00'
|
5128 |
model: 'Honor P10 Plus'
|
@@ -5164,6 +5290,8 @@ Huawei:
|
|
5164 |
model: 'Nova 3e'
|
5165 |
- regex: 'INE-(?:AL00|LX1r|LX[12]|TL00)'
|
5166 |
model: 'Nova 3i'
|
|
|
|
|
5167 |
- regex: 'SEA-AL10'
|
5168 |
model: 'Nova 5 Pro'
|
5169 |
- regex: 'VCE-(L22|[AT]L00)'
|
@@ -5198,13 +5326,13 @@ Huawei:
|
|
5198 |
model: 'P20'
|
5199 |
- regex: 'ANE-(?:LX[123]|TL00)'
|
5200 |
model: 'P20 Lite'
|
5201 |
-
- regex: 'CLT-(?:AL0[01]|TL00|L(?:04|[02]9))'
|
5202 |
model: 'P20 Pro'
|
5203 |
-
- regex: 'ELE-L(?:04|09|29)|ELE-
|
5204 |
model: 'P30'
|
5205 |
- regex: 'VOG-L(?:04|09|29)|VOG-TL00'
|
5206 |
model: 'P30 Pro'
|
5207 |
-
- regex: 'MAR-LX(
|
5208 |
model: 'P30 Lite'
|
5209 |
- regex: 'MAR-LX[13]A'
|
5210 |
model: 'P30 Lite Dual SIM'
|
@@ -5212,7 +5340,7 @@ Huawei:
|
|
5212 |
model: 'P smart'
|
5213 |
- regex: 'STK-LX1'
|
5214 |
model: 'P smart Z'
|
5215 |
-
- regex: 'POT-LX[13]'
|
5216 |
model: 'P smart (2019)'
|
5217 |
- regex: 'POT-[TA]L00a'
|
5218 |
model: '9S'
|
@@ -5220,7 +5348,7 @@ Huawei:
|
|
5220 |
model: 'Y3 (2017)'
|
5221 |
- regex: 'CAG-L[02]2'
|
5222 |
model: 'Y3 (2018)'
|
5223 |
-
- regex: 'LUA-U22'
|
5224 |
model: 'Y3II'
|
5225 |
- regex: 'CUN-L(?:0[123]|2[123]|33)'
|
5226 |
model: 'Y5II'
|
@@ -5310,7 +5438,7 @@ Huawei:
|
|
5310 |
model: 'Mate 20 Pro'
|
5311 |
- regex: 'SNE-(?:AL00|LX[0-3])'
|
5312 |
model: 'Mate 20 Lite'
|
5313 |
-
- regex: 'EVR-(?:[TA]L00|L29)'
|
5314 |
model: 'Mate 20 X'
|
5315 |
- regex: 'CRR-(?:L09|UL00)'
|
5316 |
model: 'Mate S'
|
@@ -5322,18 +5450,20 @@ Huawei:
|
|
5322 |
model: 'Mate SE'
|
5323 |
- regex: 'SPN-AL00'
|
5324 |
model: 'Mate 30 Lite' # Nova 5i Pro
|
|
|
|
|
5325 |
- regex: 'Bucare Y330-U05'
|
5326 |
model: 'Y330-U05'
|
5327 |
- regex: 'DRA-L(?:01|03|21|23|X3)'
|
5328 |
model: 'Y5 (2018)'
|
5329 |
- regex: 'ATH-UL0[16]'
|
5330 |
model: 'ShotX'
|
5331 |
-
- regex: 'T1-A21w'
|
5332 |
-
device: 'tablet'
|
5333 |
-
model: 'Honor Tablet Note'
|
5334 |
- regex: 'CMR-(?:AL[01]9|W09)'
|
5335 |
device: 'tablet'
|
5336 |
model: 'MediaPad M5 10.8'
|
|
|
|
|
|
|
5337 |
- regex: 'GEM-70[1-3]L'
|
5338 |
device: 'tablet'
|
5339 |
model: 'MediaPad X2'
|
@@ -5343,9 +5473,12 @@ Huawei:
|
|
5343 |
- regex: 'SHT-(?:AL|W)09'
|
5344 |
device: 'tablet'
|
5345 |
model: 'MediaPad M5 8.4'
|
5346 |
-
- regex: 'VRD-(AL|W)09'
|
5347 |
device: 'tablet'
|
5348 |
model: 'MediaPad M6 8.4'
|
|
|
|
|
|
|
5349 |
- regex: 'BTV-W09'
|
5350 |
device: 'tablet'
|
5351 |
model: 'MediaPad M3 8'
|
@@ -5382,7 +5515,7 @@ Huawei:
|
|
5382 |
- regex: 'FDR-A01(?:L|w)'
|
5383 |
device: 'tablet'
|
5384 |
model: 'MediaPad T2 10.0 Pro'
|
5385 |
-
- regex: 'T1-
|
5386 |
device: 'tablet'
|
5387 |
model: 'MediaPad T1 10'
|
5388 |
- regex: 'T1-701u'
|
@@ -5475,14 +5608,20 @@ iRola:
|
|
5475 |
- regex: 'iRola ([^/;]+) Build'
|
5476 |
model: '$1'
|
5477 |
|
|
|
|
|
|
|
|
|
|
|
|
|
5478 |
# Irbis
|
5479 |
Irbis:
|
5480 |
-
regex: 'TZ(
|
5481 |
device: 'tablet'
|
5482 |
models:
|
5483 |
-
- regex: '(TZ(?:
|
5484 |
model: '$1'
|
5485 |
-
- regex: '(SP(?:0[56]|2[01]|4[1-36]|45[
|
5486 |
device: 'smartphone'
|
5487 |
model: '$1'
|
5488 |
|
@@ -5498,7 +5637,7 @@ iBerry:
|
|
5498 |
|
5499 |
# iHunt
|
5500 |
iHunt:
|
5501 |
-
regex: 'iHunt|One_ Love_|TITAN_P11000_PRO|Like_(3|4U|3_Pro)|X300 Elite|S10_Tank_2019'
|
5502 |
device: 'smartphone'
|
5503 |
models:
|
5504 |
- regex: 'iHunt_Like'
|
@@ -5517,10 +5656,14 @@ iHunt:
|
|
5517 |
model: 'Like 4U'
|
5518 |
- regex: 'X300 Elite'
|
5519 |
model: 'X300 Elite'
|
|
|
|
|
|
|
|
|
5520 |
|
5521 |
# IconBIT
|
5522 |
IconBIT:
|
5523 |
-
regex: 'NT-(3506M|0704S|0909T|1009T|10[01]1T|1017T|3601P/3602P|3603P|3702S|3805C|3905T|3701S|0701S|0805C|0902S|370[23]M)'
|
5524 |
device: 'tablet'
|
5525 |
models:
|
5526 |
- regex: 'NT-3506M'
|
@@ -5559,6 +5702,10 @@ IconBIT:
|
|
5559 |
- regex: 'NT-3703M'
|
5560 |
model: 'NetTAB Matrix 3GT'
|
5561 |
|
|
|
|
|
|
|
|
|
5562 |
# LYF
|
5563 |
LYF:
|
5564 |
regex: '(LYF[ _])?LS-[456][0-9]{3}|LYF/[^/]+/'
|
@@ -5610,6 +5757,8 @@ LYF:
|
|
5610 |
model: 'Wind 7'
|
5611 |
- regex: 'LS-5504'
|
5612 |
model: 'Water 7'
|
|
|
|
|
5613 |
- regex: 'LS-5017'
|
5614 |
model: 'Water 11'
|
5615 |
- regex: 'LS-5018'
|
@@ -5848,7 +5997,7 @@ Infinix:
|
|
5848 |
|
5849 |
# InFocus
|
5850 |
InFocus:
|
5851 |
-
regex: 'IF(9001|9007|9021|9035|9031)
|
5852 |
device: 'smartphone'
|
5853 |
models:
|
5854 |
- regex: 'IF9001'
|
@@ -6306,12 +6455,14 @@ K-Touch:
|
|
6306 |
|
6307 |
# kyocera
|
6308 |
Kyocera:
|
6309 |
-
regex: 'Kyocera|KWC-|QC-|C5120|C5170|C5155|C5215|C6730|C6750|C6522N?|C6530N|C6740|C6743|E6[89]10|KYL21|KYY23|S2151|KC-S701'
|
6310 |
device: 'smartphone'
|
6311 |
models:
|
6312 |
# explicit smartphone models
|
6313 |
- regex: 'C5120'
|
6314 |
model: 'Milano'
|
|
|
|
|
6315 |
- regex: 'C5155'
|
6316 |
model: 'Rise'
|
6317 |
- regex: 'C5170'
|
@@ -6355,19 +6506,25 @@ Kyocera:
|
|
6355 |
- regex: '(?:KWC|QC)-([a-z0-9]+)'
|
6356 |
model: '$1'
|
6357 |
|
6358 |
-
# Krüger&Matz
|
6359 |
Krüger&Matz:
|
6360 |
-
regex: 'Kruger[ _&]Matz|MOVE_'
|
6361 |
device: 'smartphone'
|
6362 |
models:
|
6363 |
- regex: 'MOVE_6_mini'
|
6364 |
model: 'MOVE 6 Mini'
|
6365 |
-
- regex: '
|
6366 |
model: 'MOVE $1'
|
6367 |
- regex: 'DRIVE 4 mini LTE'
|
6368 |
model: 'DRIVE 4 mini LTE'
|
|
|
|
|
6369 |
- regex: 'Drive 5[;/) ]'
|
6370 |
model: 'DRIVE 5'
|
|
|
|
|
|
|
|
|
6371 |
|
6372 |
# LAIQ
|
6373 |
LAIQ:
|
@@ -6439,7 +6596,7 @@ Lanix:
|
|
6439 |
device: 'tablet'
|
6440 |
- regex: 'X120C'
|
6441 |
model: 'Ilium X120C'
|
6442 |
-
- regex: 'Ilium[ _](Alpha 3|L(?:200|6[12]0|9[125]0|1[0124]00|1050|1120)|LT5[012]0|M[
|
6443 |
model: 'Ilium $1'
|
6444 |
- regex: 'ILIUM[ _]([^;/]+) Build'
|
6445 |
model: 'Ilium $1'
|
@@ -6540,6 +6697,8 @@ LeEco:
|
|
6540 |
model: 'Max X900+'
|
6541 |
- regex: 'X50[10]'
|
6542 |
model: 'Le 1S'
|
|
|
|
|
6543 |
- regex: 'X900 Build'
|
6544 |
model: 'Le X900'
|
6545 |
- regex: 'Le ?X526 Build'
|
@@ -6588,7 +6747,7 @@ Lenco:
|
|
6588 |
|
6589 |
# lenovo
|
6590 |
Lenovo:
|
6591 |
-
regex: '(?:LNV-)?Lenovo|IdeaTab|IdeaPad|Thinkpad|Yoga Tablet|Tab2A[0-9]-[0-9]{2}[a-z]?|YT3-
|
6592 |
device: 'smartphone'
|
6593 |
models:
|
6594 |
- regex: 'Lenovo ?G780'
|
@@ -6612,7 +6771,7 @@ Lenovo:
|
|
6612 |
- regex: 'TB2-X30[FL]'
|
6613 |
model: 'Tab 2 A10-30'
|
6614 |
device: 'tablet'
|
6615 |
-
- regex: 'YT3-X50[
|
6616 |
model: 'Yoga Tab 3'
|
6617 |
device: 'tablet'
|
6618 |
- regex: 'TB3-730X'
|
@@ -6636,6 +6795,15 @@ Lenovo:
|
|
6636 |
- regex: 'Lenovo ?B8000(-[FH])?'
|
6637 |
model: 'Yoga Tablet 10'
|
6638 |
device: 'tablet'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6639 |
- regex: 'Lenovo ?B6000(-[FH])?'
|
6640 |
model: 'Yoga Tablet 8'
|
6641 |
device: 'tablet'
|
@@ -6716,8 +6884,10 @@ Lenovo:
|
|
6716 |
model: 'K5 Note'
|
6717 |
- regex: '(?:Lenovo-)?A6020(?:a40|l36)(?: Build|\))'
|
6718 |
model: 'K5 Vibe'
|
6719 |
-
- regex: 'A6020a46(?: Build|\))'
|
6720 |
model: 'K5 Vibe Plus'
|
|
|
|
|
6721 |
- regex: 'k33a48(?: Build|\))'
|
6722 |
model: 'K6'
|
6723 |
- regex: 'k53a48(?: Build|\))'
|
@@ -6830,7 +7000,7 @@ Lexibook:
|
|
6830 |
|
6831 |
# LG
|
6832 |
LG:
|
6833 |
-
regex: 'LG|portalmmm/2\.0 (?:KE|KG|KP|L3)|(?:VX[0-9]+|L-0[12]D|L-07C|P713|(LM-[A-Z][0-9]{3}[A-Z]{0,3}(?:\(FGN?\)|\(G\)|\.FN|\.F(?:GN?)?)?)|LM-(X625N1|G820QM[0127]))[);/ ]|NetCast|RS987|RS500|VS(?:50[01]|835|98[
|
6834 |
device: 'smartphone'
|
6835 |
models:
|
6836 |
- regex: 'LG-D325'
|
@@ -6843,7 +7013,9 @@ LG:
|
|
6843 |
model: 'Zone 4'
|
6844 |
- regex: 'LM-X220PM'
|
6845 |
model: 'Tribute Empire'
|
6846 |
-
- regex: '
|
|
|
|
|
6847 |
model: 'G3'
|
6848 |
- regex: 'LG-D72[2458]'
|
6849 |
model: 'G3 Beat'
|
@@ -6913,7 +7085,7 @@ LG:
|
|
6913 |
model: 'Fortune 2'
|
6914 |
- regex: 'LM-X410\.F[);/ ]'
|
6915 |
model: 'Premier Pro'
|
6916 |
-
- regex: '
|
6917 |
model: 'Premier Pro LTE'
|
6918 |
- regex: 'LM-X525'
|
6919 |
model: 'Q60'
|
@@ -7019,8 +7191,12 @@ LG:
|
|
7019 |
model: 'Spirit'
|
7020 |
- regex: '(?:LG)?C660'
|
7021 |
model: 'Optimus Pro'
|
7022 |
-
- regex: '
|
7023 |
model: 'Rebel 4'
|
|
|
|
|
|
|
|
|
7024 |
|
7025 |
- regex: 'LG-V490'
|
7026 |
model: 'G Pad 8.0'
|
@@ -7692,7 +7868,7 @@ MLLED:
|
|
7692 |
|
7693 |
# Mobistel
|
7694 |
Mobistel:
|
7695 |
-
regex: '(Cynus[ _][^/;]+) Build'
|
7696 |
device: 'smartphone'
|
7697 |
model: '$1'
|
7698 |
|
@@ -7738,7 +7914,7 @@ Mofut:
|
|
7738 |
|
7739 |
# motorola
|
7740 |
Motorola:
|
7741 |
-
regex: 'MOT(?!TO)|(?<!AN)DROID ?(?:Build|[a-z0-9]+)|portalmmm/2.0 (?:E378i|L6|L7|v3)|XOOM [^;/]*Build|XT1021|XT180[3-5]|(?:XT|MZ|MB|ME)[0-9]{3,4}[a-z]?(?:\(Defy\)|-0[1-5])?(?: Build|\))'
|
7742 |
device: 'smartphone'
|
7743 |
models:
|
7744 |
# Explicit feature phone models
|
@@ -7823,6 +7999,8 @@ Motorola:
|
|
7823 |
model: 'Droid Turbo'
|
7824 |
- regex: '(?:MOT-|Motorola-)?XT10(?:28|3[1234]|68|69)'
|
7825 |
model: 'Moto G'
|
|
|
|
|
7826 |
- regex: '(?:MOT-|Motorola-)?XT180[3-5]'
|
7827 |
model: 'Moto G5s Plus'
|
7828 |
- regex: '(?:MOT-|Motorola-)?XT168[57]'
|
@@ -7839,6 +8017,8 @@ Motorola:
|
|
7839 |
model: 'Moto Z'
|
7840 |
- regex: '(?:MOT-|Motorola-)?XT1635(?:-0[1-3])?'
|
7841 |
model: 'Moto Z Play'
|
|
|
|
|
7842 |
- regex: '(?:MOT-|Motorola-)?XT1663'
|
7843 |
model: 'Moto M'
|
7844 |
|
@@ -7895,7 +8075,7 @@ MTN:
|
|
7895 |
|
7896 |
# myphone
|
7897 |
MyPhone:
|
7898 |
-
regex: '(?:MyPhone|MyPad|MyTab)[ _][^;/]+ Build|Cube_LTE|myTab10II|HAMMER[ _]ENERGY|
|
7899 |
device: 'smartphone'
|
7900 |
models:
|
7901 |
- regex: 'MyPad[ _]([^;/]+) Build'
|
@@ -7911,15 +8091,21 @@ MyPhone:
|
|
7911 |
model: 'Cube LTE'
|
7912 |
- regex: 'HAMMER[ _]ENERGY'
|
7913 |
model: 'Hammer Energy'
|
7914 |
-
- regex: '
|
7915 |
model: 'Hammer Axe M LTE'
|
7916 |
- regex: 'Hammer Titan 2'
|
7917 |
model: 'Hammer Titan 2'
|
|
|
|
|
|
|
|
|
|
|
|
|
7918 |
- regex: 'C-Smart_pix'
|
7919 |
model: 'C-Smart Pix'
|
7920 |
- regex: 'myPhone_Fun_8'
|
7921 |
model: 'FUN 8'
|
7922 |
-
- regex: 'MyPhone[ _]([^;/]+) Build'
|
7923 |
model: '$1'
|
7924 |
|
7925 |
# MyWigo
|
@@ -8126,7 +8312,7 @@ Noblex:
|
|
8126 |
|
8127 |
# Nomi
|
8128 |
Nomi:
|
8129 |
-
regex: 'Nomi[ _-]|(C101010 Ultra2|i501[23]|i5032|i5050|i5532)[;/) ]'
|
8130 |
device: 'smartphone'
|
8131 |
models:
|
8132 |
- regex: 'i501[23][;/) ]'
|
@@ -8140,6 +8326,9 @@ Nomi:
|
|
8140 |
- regex: 'C101010 Ultra2'
|
8141 |
model: 'Ultra 2'
|
8142 |
device: 'tablet'
|
|
|
|
|
|
|
8143 |
- regex: 'Nomi[ _-]([^;/]+) Build'
|
8144 |
model: '$1'
|
8145 |
- regex: 'Nomi[ _-]([^;/)]+)[;/)]'
|
@@ -8147,11 +8336,13 @@ Nomi:
|
|
8147 |
|
8148 |
# NUU Mobile
|
8149 |
NUU Mobile:
|
8150 |
-
regex: 'NUU_|N(5702|5001)L[;)/ ]'
|
8151 |
device: 'smartphone'
|
8152 |
models:
|
8153 |
- regex: 'NUU_A1'
|
8154 |
model: 'A1'
|
|
|
|
|
8155 |
- regex: 'N5702L'
|
8156 |
model: 'G3'
|
8157 |
- regex: '(N5001L)[;)/ ]'
|
@@ -8367,14 +8558,14 @@ Onda:
|
|
8367 |
|
8368 |
# OnePlus
|
8369 |
OnePlus:
|
8370 |
-
regex: '(?:du_)?ONEPLUS|(?:A0001|A200[135]|A300[03]|A3010|A5000|A600[03]|A601[03]|E100[135]|GM191[03517]|GM190[013]|
|
8371 |
device: 'smartphone'
|
8372 |
models:
|
8373 |
- regex: 'GM191[03517]'
|
8374 |
model: '7 Pro'
|
8375 |
- regex: 'GM190[013]'
|
8376 |
model: '7'
|
8377 |
-
- regex: '
|
8378 |
model: '7T'
|
8379 |
- regex: 'A0001'
|
8380 |
model: 'One'
|
@@ -8399,12 +8590,12 @@ OnePlus:
|
|
8399 |
|
8400 |
# oppo
|
8401 |
OPPO:
|
8402 |
-
regex: '(?:OB-)?OPPO[ _]?([a-z0-9]+)|N1T|(?:X90[07][0679]|U707T?|X909T?|R(?:10[01]1|2001|201[07]|6007|7005|7007|80[13579]|81[13579]|82[01379]|83[013]|800[067]|8015|810[679]|811[13]|820[057])[KLSTW]?|N520[79]|N5117|A33f|A33fw|A37fw?|PAAM00|PAC[T|M]00|PBAM00)[);/ ]|R7kf|R7plusf|R7Plusm|A1601|CPH[0-9]{4}|PCAM10|PADM00|PBBT00|PBBM[03]0|RMX18(0[1579]|11|3[13]|2[15]|[45]1|45)|CPH19(69|79|23|1[179])|RMX(1827|194[
|
8403 |
device: 'smartphone'
|
8404 |
models:
|
8405 |
- regex: '(?:OPPO[ _]?)?U707T?[);/ ]'
|
8406 |
model: 'Find Way S'
|
8407 |
-
- regex: '(?:OPPO[ _]?)?CPH1979[);/ ]'
|
8408 |
model: 'Reno Z'
|
8409 |
- regex: 'CPH1945'
|
8410 |
model: 'Reno2 Z'
|
@@ -8412,10 +8603,18 @@ OPPO:
|
|
8412 |
model: 'F11 Pro'
|
8413 |
- regex: 'CPH1911'
|
8414 |
model: 'F11'
|
8415 |
-
- regex: 'CPH1917'
|
8416 |
model: 'Reno'
|
|
|
|
|
|
|
|
|
|
|
|
|
8417 |
- regex: 'CPH1921'
|
8418 |
model: 'Reno 5G'
|
|
|
|
|
8419 |
- regex: 'PCCM00'
|
8420 |
model: 'Reno 10X'
|
8421 |
- regex: 'CPH1919'
|
@@ -8500,6 +8699,8 @@ OPPO:
|
|
8500 |
model: 'A83'
|
8501 |
- regex: '(?:OPPO[ _]?)?CPH1801[);/ ]'
|
8502 |
model: 'A71'
|
|
|
|
|
8503 |
- regex: '(?:OPPO[ _]?)?CPH18(0[35]|53)[);/ ]'
|
8504 |
model: 'A3s'
|
8505 |
- regex: '(?:OPPO[ _]?)?(?:CPH1809|PBAT00|PBBT30)[);/ ]'
|
@@ -8508,8 +8709,10 @@ OPPO:
|
|
8508 |
model: 'A5 (2020)'
|
8509 |
- regex: '(?:OPPO[ _]?)?CPH1938[);/ ]'
|
8510 |
model: 'A9 (EN)'
|
8511 |
-
- regex: 'CPH1937'
|
8512 |
model: 'A9 (2020)'
|
|
|
|
|
8513 |
- regex: '(?:OPPO[ _]?)?CPH18(19|21)[);/ ]'
|
8514 |
model: 'F7'
|
8515 |
- regex: '(?:OPPO[ _]?)?CPH1823[);/ ]'
|
@@ -8520,8 +8723,6 @@ OPPO:
|
|
8520 |
model: 'R15 Pro'
|
8521 |
- regex: '(?:OPPO[ _]?)?CPH1835[);/ ]'
|
8522 |
model: 'R15'
|
8523 |
-
- regex: '(?:OPPO[ _]?)?CPH1837[);/ ]'
|
8524 |
-
model: 'A3'
|
8525 |
- regex: '(?:OPPO[ _]?)?CPH1851[);/ ]'
|
8526 |
model: 'AX5'
|
8527 |
- regex: 'CPH1920'
|
@@ -8534,13 +8735,15 @@ OPPO:
|
|
8534 |
model: 'K1'
|
8535 |
- regex: 'RMX1811'
|
8536 |
model: 'RealMe C1'
|
8537 |
-
- regex: 'RMX194[
|
8538 |
model: 'RealMe C2'
|
8539 |
- regex: 'RMX1831'
|
8540 |
model: 'RealMe U1'
|
8541 |
- regex: '(?:OPPO[ _]?)?(?:CPH187[15]|PAFM00)[);/ ]'
|
8542 |
model: 'Find X'
|
8543 |
-
- regex: '(?:OPPO[ _]?)?
|
|
|
|
|
8544 |
model: 'R17 Pro'
|
8545 |
- regex: '(?:OPPO[ _]?)?(?:CPH1879|PBE[MT]00)[);/ ]'
|
8546 |
model: 'R17'
|
@@ -8550,11 +8753,13 @@ OPPO:
|
|
8550 |
model: 'R17 Neo'
|
8551 |
- regex: '(?:OPPO[ _]?)?(?:CPH1901|PBFM00)[);/ ]'
|
8552 |
model: 'A7'
|
|
|
|
|
8553 |
- regex: '(?:OPPO[ _]?)?CPH1903[);/ ]'
|
8554 |
model: 'AX7'
|
8555 |
- regex: '(?:OPPO[ _]?)?A37f(w)?(?: Build|\))'
|
8556 |
model: 'A37f$1'
|
8557 |
-
- regex: '(?:OPPO[ _]?)?PADM00'
|
8558 |
model: 'A3'
|
8559 |
- regex: '(?:OPPO[ _]?)?PBAM00'
|
8560 |
model: 'A5'
|
@@ -8578,12 +8783,20 @@ OPPO:
|
|
8578 |
model: 'Realme 3 Pro'
|
8579 |
- regex: 'RMX1901'
|
8580 |
model: 'Realme X'
|
|
|
|
|
|
|
|
|
|
|
|
|
8581 |
- regex: 'RMX1921'
|
8582 |
model: 'Realme XT'
|
8583 |
-
- regex: '
|
8584 |
model: 'Realme 5'
|
8585 |
- regex: 'RMX1971'
|
8586 |
model: 'Realme 5 Pro'
|
|
|
|
|
8587 |
- regex: '(PBBT00|PBBM00)[);/ ]'
|
8588 |
model: 'A7x'
|
8589 |
- regex: 'PCDM00[);/ ]'
|
@@ -8639,7 +8852,7 @@ Orange:
|
|
8639 |
model: '$1 $2'
|
8640 |
- regex: 'Orange[ _-](Dive)72[ ;/)]'
|
8641 |
model: '$1 72'
|
8642 |
-
- regex: 'Orange[ _-](Daytona|Dive (30|7[13])|Dublin|Fova|Gova|Hi 4G|Hiro|Kivo|Monte Carlo|Neva 80|Neva play|Nura|Reyo|Rise[_ ](3[034]|40|5[
|
8643 |
model: '$1'
|
8644 |
- regex: 'SPV[ \-]?([a-z0-9]+)'
|
8645 |
model: 'SPV $1'
|
@@ -8658,6 +8871,14 @@ Ouki:
|
|
8658 |
- regex: '(OK[AU][0-9]+[a-z]*) Build'
|
8659 |
model: '$1'
|
8660 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8661 |
# Overmax
|
8662 |
Overmax:
|
8663 |
regex: 'OV-[a-z]+(?:[^;(/]*)[();/ ]|Qualcore 1010'
|
@@ -8679,7 +8900,7 @@ Overmax:
|
|
8679 |
|
8680 |
# Oysters
|
8681 |
Oysters:
|
8682 |
-
regex: 'Oysters|T84ERI[ _]3G|T72HM(s_)?3G|(T74HMi|T84Bi)[_ ]4G'
|
8683 |
device: 'tablet'
|
8684 |
models:
|
8685 |
- regex: 'Oysters ((?:Arctic|Indian|Atlantic|Pacific)[^/;]+) Build'
|
@@ -8687,6 +8908,8 @@ Oysters:
|
|
8687 |
model: '$1'
|
8688 |
- regex: '(T84ERI[ _]3G|T72HM(s_)?3G|(?:(T74HMi|T84Bi)[_ ]4G))'
|
8689 |
model: '$1'
|
|
|
|
|
8690 |
- regex: 'Oysters ([^/;]+)( Build|\))'
|
8691 |
model: '$1'
|
8692 |
# öwn
|
@@ -8718,13 +8941,16 @@ Panacom:
|
|
8718 |
|
8719 |
# panasonic
|
8720 |
Panasonic:
|
8721 |
-
regex: 'Panasonic|PANATV[0-9]+|Viera/|P902i[);/ ]|Eluga[ _]|FZ-N1|P55 Novo 4G'
|
8722 |
device: 'smartphone'
|
8723 |
models:
|
8724 |
- regex: 'Eluga[ _-]([^;/]+) Build'
|
8725 |
model: 'Eluga $1'
|
8726 |
- regex: 'Eluga[ _-]([^;/]+)[;/)]'
|
8727 |
model: 'Eluga $1'
|
|
|
|
|
|
|
8728 |
- regex: 'FZ-N1'
|
8729 |
model: 'Toughpad'
|
8730 |
- regex: 'P55 Novo 4G'
|
@@ -8799,7 +9025,7 @@ Pentagram:
|
|
8799 |
|
8800 |
# philips
|
8801 |
Philips:
|
8802 |
-
regex: 'Philips|AND1E[);/ ]|NETTV/|PI3210G|TLE(821L|722G)'
|
8803 |
device: 'smartphone'
|
8804 |
models:
|
8805 |
- regex: 'AND1E(?: TV)?[);/ ]'
|
@@ -8808,6 +9034,9 @@ Philips:
|
|
8808 |
- regex: '(PI3210G)'
|
8809 |
model: '$1'
|
8810 |
device: 'tablet'
|
|
|
|
|
|
|
8811 |
- regex: '(TLE821L)[);/ ]'
|
8812 |
model: '$1 4G LTE'
|
8813 |
device: 'tablet'
|
@@ -8856,11 +9085,15 @@ Pioneer:
|
|
8856 |
|
8857 |
# Pixus
|
8858 |
Pixus:
|
8859 |
-
regex: 'Pixus|Ride[_ ]4G[;)\ ]'
|
8860 |
device: 'tablet'
|
8861 |
models:
|
8862 |
- regex: 'Ride[_ ]4G'
|
8863 |
model: 'Ride 4G'
|
|
|
|
|
|
|
|
|
8864 |
- regex: 'Raze'
|
8865 |
model: 'Raze'
|
8866 |
device: 'smartphone'
|
@@ -8970,9 +9203,13 @@ Rokit:
|
|
8970 |
|
8971 |
# Rombica
|
8972 |
Rombica:
|
8973 |
-
regex: 'SSQ-A0500[);/ ]'
|
8974 |
device: 'tv'
|
8975 |
-
|
|
|
|
|
|
|
|
|
8976 |
|
8977 |
# Rover
|
8978 |
Rover:
|
@@ -9016,13 +9253,27 @@ Safaricom:
|
|
9016 |
model: 'Neon Ray'
|
9017 |
|
9018 |
|
9019 |
-
# Santin
|
9020 |
-
Santin
|
9021 |
-
regex: '
|
9022 |
device: 'smartphone'
|
9023 |
models:
|
9024 |
-
- regex: 'BiTBiZ_V58'
|
9025 |
-
model: 'V58'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9026 |
|
9027 |
# Siemens
|
9028 |
Siemens:
|
@@ -9480,6 +9731,18 @@ Samsung:
|
|
9480 |
model: 'GALAXY S10+'
|
9481 |
- regex: '(?:SAMSUNG-)?SM-G970[FU]'
|
9482 |
model: 'GALAXY S10e'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9483 |
- regex: '(?:SAMSUNG-)?SCH-I200'
|
9484 |
model: 'GALAXY Stellar'
|
9485 |
- regex: '(?:SAMSUNG-)?SCH-I829'
|
@@ -10272,11 +10535,13 @@ Positivo:
|
|
10272 |
|
10273 |
# Prestigio
|
10274 |
Prestigio:
|
10275 |
-
regex: '(?:PMP|PAP|PMT|PSP)[0-9]+[a-z0-9_]+[);/ ]'
|
10276 |
device: 'tablet'
|
10277 |
models:
|
10278 |
- regex: 'PMT3277_3G'
|
10279 |
model: 'MultiPad Ranger 7.0 3G'
|
|
|
|
|
10280 |
- regex: 'PMT3201_4G'
|
10281 |
model: 'Grace 4G'
|
10282 |
- regex: 'PSP5551DUO'
|
@@ -10315,18 +10580,22 @@ Sanyo:
|
|
10315 |
|
10316 |
# Qilive (Auchan)
|
10317 |
Qilive:
|
10318 |
-
regex: 'Qilive [0-9][^;/]*|Q(8S55IN4G2|10S5[37]IN4G|
|
10319 |
device: 'smartphone'
|
10320 |
models:
|
10321 |
- regex: 'Q8S55IN4G2'
|
10322 |
model: 'Q8 5.5" 4G'
|
|
|
|
|
10323 |
- regex: 'Q8S5IN4GP'
|
10324 |
model: 'Q8 5.1" 4G'
|
|
|
|
|
10325 |
- regex: 'Q10S53IN4G'
|
10326 |
model: 'Q10 5.3" 4G'
|
10327 |
- regex: 'Q10S57IN4G'
|
10328 |
model: 'Q10 5.7" 4G'
|
10329 |
-
- regex: '
|
10330 |
model: 'Q10 5.0" 4G'
|
10331 |
- regex: 'Q10S6IN4G'
|
10332 |
model: 'Q10 6.0" 4G'
|
@@ -10451,21 +10720,27 @@ Spice:
|
|
10451 |
|
10452 |
# Sharp
|
10453 |
Sharp:
|
10454 |
-
regex: 'SHARP|SBM|SH-?[0-9]+[a-z]?[);/ ]|SH-
|
10455 |
device: 'smartphone'
|
10456 |
models:
|
10457 |
# explicit smartphone models
|
10458 |
- regex: '506SH'
|
10459 |
model: 'Aquos Xx3'
|
|
|
|
|
10460 |
- regex: 'SH-Z10'
|
10461 |
model: 'Aquos zero'
|
|
|
|
|
10462 |
- regex: 'SH-02E'
|
10463 |
model: 'Aquos Phone Zeta'
|
10464 |
- regex: 'SH06D'
|
10465 |
model: 'Aquos Phone SH-06D'
|
10466 |
- regex: 'SHL22'
|
10467 |
model: 'Aquos Phone SHL22'
|
10468 |
-
- regex: '
|
|
|
|
|
10469 |
model: 'Aquos S2'
|
10470 |
- regex: 'FS8032'
|
10471 |
model: 'Aquos S3'
|
@@ -10627,11 +10902,13 @@ Q-Touch:
|
|
10627 |
|
10628 |
# T-Mobile
|
10629 |
T-Mobile:
|
10630 |
-
regex: 'T-Mobile[ _][a-z0-9 ]+|REVVL 2( PLUS)?[);/ ]'
|
10631 |
device: 'smartphone'
|
10632 |
models:
|
10633 |
- regex: 'REVVL 2 PLUS'
|
10634 |
model: 'REVVL 2 Plus'
|
|
|
|
|
10635 |
- regex: 'REVVL 2[);/ ]'
|
10636 |
model: 'REVVL 2'
|
10637 |
- regex: 'T-Mobile[ _]([a-z0-9_ ]+) Build'
|
@@ -10735,7 +11012,7 @@ Tesco:
|
|
10735 |
|
10736 |
# teXet
|
10737 |
teXet:
|
10738 |
-
regex: 'Texet|(NaviPad [^/;]*) Build|TM-(?:1046|1058|1057|1067|3000|3200R|3500|4003|4071|450[34]|451[30]|4377|4082R|550[83]|5010|5017|507[4-7]|5[23]77|6003|6906|702[13]|7055HD|709[69]|9747BT|9758|9751HD|9767|5513|520[410]|5505|507[13]|5581|7859|8044|9748[ _]3G|9720|7047HD[ _]3G|9757|9740|4982|4515|4083|500[3567]|5571|3204R|5016|8043|7047HD[ _]3G|8041HD|8066|705[23]|7041|8041HD|8051|8048|974[96]|973[78]W|974[
|
10739 |
device: 'tablet'
|
10740 |
models:
|
10741 |
- regex: 'TM-9749'
|
@@ -10770,7 +11047,7 @@ teXet:
|
|
10770 |
model: 'NaviPad TM-7887 3G'
|
10771 |
- regex: 'TM-8066'
|
10772 |
model: 'X-pad Rapid 8.2 4G'
|
10773 |
-
- regex: '(TM-(?:1057|1067|6906|8043|9748[_ ]3G|9740|9757(?:[_ ]3G)?|7047HD[ _]3G|9747BT|9751HD|702[13]|705[23]|7041|9720|7047HD[_ ]3G|8044|8041HD|973[78]W|9743W|974[
|
10774 |
model: '$1'
|
10775 |
- regex: 'TM-4503'
|
10776 |
device: 'smartphone'
|
@@ -10822,12 +11099,13 @@ teXet:
|
|
10822 |
|
10823 |
# Telefunken
|
10824 |
Telefunken:
|
10825 |
-
regex: 'TEL-1013GIQA'
|
10826 |
-
device: '
|
10827 |
models:
|
10828 |
- regex: 'TEL-1013GIQA'
|
10829 |
-
device: 'tablet'
|
10830 |
model: 'Giqa 10.1 3G'
|
|
|
|
|
10831 |
|
10832 |
# Telego
|
10833 |
Telego:
|
@@ -11055,7 +11333,7 @@ UTStarcom:
|
|
11055 |
|
11056 |
# Ulefone
|
11057 |
Ulefone:
|
11058 |
-
regex: 'Ulefone|Power_[
|
11059 |
device: 'smartphone'
|
11060 |
models:
|
11061 |
- regex: 'S10_Pro'
|
@@ -11080,7 +11358,7 @@ Ulefone:
|
|
11080 |
model: 'Armor 2'
|
11081 |
- regex: 'Armor Build'
|
11082 |
model: 'Armor'
|
11083 |
-
- regex: 'Power_([
|
11084 |
model: 'Power $1'
|
11085 |
- regex: 'Ulefone[_ ](X|S1[ _]Pro|S[17])[);\ ]'
|
11086 |
model: '$1'
|
@@ -11091,9 +11369,11 @@ Ulefone:
|
|
11091 |
|
11092 |
# UMIDIGI
|
11093 |
UMIDIGI:
|
11094 |
-
regex: 'UMI(?:DIGI)?[ _]'
|
11095 |
device: 'smartphone'
|
11096 |
models:
|
|
|
|
|
11097 |
- regex: 'UMI(?:DIGI)?[ _]([^/;]+) Build'
|
11098 |
model: '$1'
|
11099 |
|
@@ -11165,6 +11445,9 @@ ViewSonic:
|
|
11165 |
- regex: '(?:ViewSonic-)?V500[);/ ]'
|
11166 |
model: 'V500'
|
11167 |
device: 'smartphone'
|
|
|
|
|
|
|
11168 |
- regex: '(?:ViewSonic-)?ViewPhone ?([^;/]+) Build'
|
11169 |
model: 'ViewPhone $1'
|
11170 |
device: 'smartphone'
|
@@ -11228,7 +11511,7 @@ Vertu:
|
|
11228 |
|
11229 |
# Venso mobile
|
11230 |
Venso:
|
11231 |
-
regex: '(CX-508)[/;) ]'
|
11232 |
device: 'smartphone'
|
11233 |
model: '$1'
|
11234 |
|
@@ -11260,7 +11543,7 @@ Verykool:
|
|
11260 |
|
11261 |
# Vestel
|
11262 |
Vestel:
|
11263 |
-
regex: 'Venus[ _](V[1-9]|Z[1-9]0)|V_?TAB|VP74|VT97PRO|VSP145M|VSP250G|VSP355[GS]'
|
11264 |
device: 'smartphone'
|
11265 |
models:
|
11266 |
- regex: 'VT97PRO'
|
@@ -11290,6 +11573,8 @@ Vestel:
|
|
11290 |
model: 'Venus V$1'
|
11291 |
- regex: 'Venus[ _]Z([1-9]0)'
|
11292 |
model: 'Venus Z$1'
|
|
|
|
|
11293 |
|
11294 |
# Videocon
|
11295 |
Videocon:
|
@@ -11303,7 +11588,7 @@ Videocon:
|
|
11303 |
|
11304 |
# Vodafone
|
11305 |
Vodafone:
|
11306 |
-
regex: 'Vodafone[ _-]|Smart ?Tab ?(?:III? ?)?(?:|4G|7|10)[);/ -]|VodafoneSmartChat|VFD[ _][0-9]+[;/) ]|VFD320|VF6[89]5|VF-795|
|
11307 |
device: 'smartphone'
|
11308 |
models:
|
11309 |
- regex: 'VFD 100'
|
@@ -11348,10 +11633,15 @@ Vodafone:
|
|
11348 |
model: 'Smart 4 Power'
|
11349 |
- regex: 'VodafoneSmartChat'
|
11350 |
model: 'Smart Chat'
|
|
|
|
|
11351 |
- regex: 'VF-795'
|
11352 |
model: 'Smart Speed 6'
|
11353 |
- regex: 'VF-895N'
|
11354 |
model: 'Smart Prime 6'
|
|
|
|
|
|
|
11355 |
|
11356 |
# explicit table models
|
11357 |
- regex: 'VFD 1100'
|
@@ -11400,7 +11690,7 @@ Vodafone:
|
|
11400 |
|
11401 |
# Vonino
|
11402 |
Vonino:
|
11403 |
-
regex: 'Vonino|Epic (?:E8|P7)|Gyga[ _](?:X|S|QS|XS)|Jax[ _](?:Q|QS|S|X|Mini)|Magnet[ _]M[19]|Navo_QS|Onyx_(QS|Z)|Orin_QS|Pluri[ _](?:[BCMQ]7|[CQ]8)|Sirius_QS|Volt[ _][XS]|Xavy_T7|Xylo[ _][
|
11404 |
device: 'smartphone'
|
11405 |
models:
|
11406 |
- regex: 'Zun[ _]XO'
|
@@ -11409,7 +11699,7 @@ Vonino:
|
|
11409 |
model: 'Zun XS'
|
11410 |
- regex: 'Zun[ _]X'
|
11411 |
model: 'Zun X'
|
11412 |
-
- regex: 'Xylo[ _](P|S|X)'
|
11413 |
model: 'Xylo $1'
|
11414 |
- regex: 'Volt[ _]S_A7'
|
11415 |
model: 'Volt S A7'
|
@@ -11541,7 +11831,7 @@ Wexler:
|
|
11541 |
|
11542 |
# Wiko
|
11543 |
Wiko:
|
11544 |
-
regex: '(?:WIKO[_ -])|(?:WIKO-)?CINK_[a-z0-9_]+|(?:WIKO-)?HIGHWAY_[a-z0-9_]+|(?:WIKO-)?(?:Cink([^/;]*)|Highway([^/;]*)|Iggy|Stairway|Rainbow ?(Jam|Lite|Up)?|Darkside|Darkmoon|Darkfull|Darknight|Freddy|FEVER|Jerry[2]?|Sublim|Ozzy|JIMMY|Barry|Birdy|Bloom|Getaway|Goa|Kite|Robby|Lenny[2-9]?|Slide|Sunset[2-9]?|Sunny[2-9]?|Tommy[2-9]?|PULP(?: Fab)?|Wax|HARRY|
|
11545 |
device: 'smartphone'
|
11546 |
models:
|
11547 |
- regex: '(?:Wiko-)?Cink([^/;]*) Build'
|
@@ -11620,6 +11910,8 @@ Wiko:
|
|
11620 |
model: 'Sunset 2'
|
11621 |
- regex: '(?:WIKO-)?Sunset'
|
11622 |
model: 'Sunset'
|
|
|
|
|
11623 |
- regex: '(?:WIKO-)?Sunny2 Plus'
|
11624 |
model: 'Sunny 2 Plus'
|
11625 |
- regex: '(?:WIKO-)?Sunny2'
|
@@ -11660,6 +11952,8 @@ Wiko:
|
|
11660 |
model: 'U Feel Prime'
|
11661 |
- regex: '(?:WIKO-)?U FEEL'
|
11662 |
model: 'U Feel'
|
|
|
|
|
11663 |
- regex: '(?:WIKO-)?View XL'
|
11664 |
model: 'View XL'
|
11665 |
- regex: '(?:WIKO-)?View Prime'
|
@@ -11668,13 +11962,27 @@ Wiko:
|
|
11668 |
model: 'View Lite'
|
11669 |
- regex: 'W_C800'
|
11670 |
model: 'View 2'
|
|
|
|
|
11671 |
- regex: 'W-V800-EEA'
|
11672 |
model: 'View 3 Lite'
|
|
|
|
|
|
|
|
|
|
|
|
|
11673 |
- regex: 'Wiko ([^/;]+) Build'
|
11674 |
model: '$1'
|
11675 |
- regex: 'Wiko ([^/; ]+)'
|
11676 |
model: '$1'
|
11677 |
|
|
|
|
|
|
|
|
|
|
|
|
|
11678 |
# Wink
|
11679 |
Wink:
|
11680 |
regex: 'Wink_'
|
@@ -11758,15 +12066,17 @@ X-View:
|
|
11758 |
|
11759 |
# Xiaomi
|
11760 |
Xiaomi:
|
11761 |
-
regex: 'Xiaomi(?!/MiuiBrowser)|(?:MI [a-z0-9]+|Mi-4c|MI-One[ _]?[a-z0-9]+|MIX(?: 2S?)?)[);/ ]|HM (?:[^/;]+) (?:Build|MIUI)|(?:2014501|2014011|201481[12378]|201302[23]|2013061) Build|Redmi|POCOPHONE|SKR-[AH]0|SKW-[AH]0|POCO F1|DLT-
|
11762 |
device: 'smartphone'
|
11763 |
models:
|
11764 |
# specific smartphone models
|
11765 |
- regex: 'SKR-[AH]0'
|
11766 |
model: 'Black Shark'
|
|
|
|
|
11767 |
- regex: 'SKW-[AH]0'
|
11768 |
model: 'Black Shark 2'
|
11769 |
-
- regex: 'DLT-
|
11770 |
model: 'Black Shark 2 Pro'
|
11771 |
- regex: 'Xiaomi_2014501|2014501 Build'
|
11772 |
model: 'Hongmi 4G'
|
@@ -11829,6 +12139,12 @@ Xiaomi:
|
|
11829 |
- regex: 'MI PAD[);/ ]'
|
11830 |
model: 'Mi Pad'
|
11831 |
device: 'tablet'
|
|
|
|
|
|
|
|
|
|
|
|
|
11832 |
- regex: 'HM NOTE 1W (?:Build|MIUI)'
|
11833 |
device: 'phablet'
|
11834 |
model: 'Redmi Note'
|
@@ -12107,7 +12423,7 @@ ZYQ:
|
|
12107 |
|
12108 |
# Toshiba
|
12109 |
Toshiba:
|
12110 |
-
regex: 'Toshiba|TSBNetTV/|portalmmm/[12].0 TS|T-01C|T-0[12]D|IS04|IS11T|AT1S0|AT300SE|AT(10-A|10[PL]E-A|100|200|270|300|330|374|400|470|500|503|570|703|830)'
|
12111 |
device: 'smartphone'
|
12112 |
models:
|
12113 |
# explicit smartphone models
|
@@ -12123,6 +12439,9 @@ Toshiba:
|
|
12123 |
model: 'Regza IS11T'
|
12124 |
|
12125 |
# explicit tablet models
|
|
|
|
|
|
|
12126 |
- regex: 'AT1S0'
|
12127 |
model: 'Regza AT1S0'
|
12128 |
device: 'tablet'
|
@@ -12161,6 +12480,8 @@ Vivax:
|
|
12161 |
model: 'Fly 5 Lite'
|
12162 |
- regex: 'VIVAX[ _]Fly3'
|
12163 |
model: 'Fly 3'
|
|
|
|
|
12164 |
- regex: 'SMART Point X5010'
|
12165 |
model: 'Smart Point X5010'
|
12166 |
|
@@ -12291,6 +12612,8 @@ Fly:
|
|
12291 |
model: 'Era Nano 3'
|
12292 |
- regex: '(?:Fly_)?IQ440(?: Build|[;/\)])'
|
12293 |
model: 'Energy'
|
|
|
|
|
12294 |
- regex: '(?:Fly_)?IQ441(?: Build|[;/\)])'
|
12295 |
model: 'Radiance'
|
12296 |
- regex: '(?:Fly_)?IQ442(?: Build|[;/\)])'
|
@@ -12431,10 +12754,10 @@ Zenek:
|
|
12431 |
|
12432 |
# Zopo
|
12433 |
Zopo:
|
12434 |
-
regex: '(?:ZOPO[_ ])?(Flash X3|ZP[0-9]{2,}[^/;]+)(?:\)| Build)'
|
12435 |
device: 'smartphone'
|
12436 |
models:
|
12437 |
-
- regex: 'ZP998[);/ ]'
|
12438 |
model: 'C2 II'
|
12439 |
- regex: '(?:ZOPO_)?ZP980[+][);/ ]'
|
12440 |
model: 'ZP980+'
|
@@ -12444,6 +12767,8 @@ Zopo:
|
|
12444 |
model: 'Speed 7 Plus'
|
12445 |
- regex: 'ZP951[);/ ]'
|
12446 |
model: 'Speed 7'
|
|
|
|
|
12447 |
- regex: 'ZP950[+h]?[);/ ]'
|
12448 |
model: 'Leader Max'
|
12449 |
- regex: 'ZP(?:900H?|910)[);/ ]'
|
@@ -12454,6 +12779,12 @@ Zopo:
|
|
12454 |
model: 'Libero'
|
12455 |
- regex: 'ZP330[);/ ]'
|
12456 |
model: 'Color C'
|
|
|
|
|
|
|
|
|
|
|
|
|
12457 |
- regex: 'ZP300[S+]?[);/ ]'
|
12458 |
model: 'Field'
|
12459 |
- regex: 'ZP200[+]?[);/ ]'
|
@@ -12462,17 +12793,21 @@ Zopo:
|
|
12462 |
model: 'Pilot'
|
12463 |
- regex: 'ZP1790[);/ ]'
|
12464 |
model: 'Flash X2'
|
|
|
|
|
12465 |
- regex: '(Flash X3|ZP[0-9]{2,}[^/;]+) Build'
|
12466 |
model: '$1'
|
12467 |
|
12468 |
# ZTE
|
12469 |
ZTE:
|
12470 |
-
regex: 'ZTE|AxonPhone|([a-z0-9]+)_USA_Cricket|(?:Blade (?:L110|L[2357]|L7A|S6|V[6789]|V8Q|V8 SE|V9 VITA|X7|A(310|460|465|475|520|530|602)|V580)|N9[15]8St|NX(?:403A|404H|406E|40[X2]|507J|503A|505J|506J|508J|510J|512J|511J|513J|521J|523J_V1|529J|531J|541J|
|
12471 |
device: 'smartphone'
|
12472 |
models:
|
12473 |
# explicit smartphone models
|
12474 |
- regex: 'N799D[);/ ]'
|
12475 |
model: 'Blade Eg'
|
|
|
|
|
12476 |
- regex: 'N918St[);/ ]'
|
12477 |
model: 'V5S'
|
12478 |
- regex: 'N958St[);/ ]'
|
@@ -12517,9 +12852,9 @@ ZTE:
|
|
12517 |
model: 'Nubia Z7 max'
|
12518 |
- regex: 'NX508J[);/ ]'
|
12519 |
model: 'Nubia Z9'
|
12520 |
-
- regex: 'NX5[12]1J[);/ ]'
|
12521 |
model: 'Nubia Z9 mini'
|
12522 |
-
- regex: 'NX510J[);/ ]'
|
12523 |
model: 'Nubia Z9 max'
|
12524 |
- regex: 'NX512J[);/ ]'
|
12525 |
model: 'Nubia Z9 max dual'
|
@@ -12539,8 +12874,14 @@ ZTE:
|
|
12539 |
model: 'Nubia Z17'
|
12540 |
- regex: 'NX569H[);/ ]'
|
12541 |
model: 'Nubia Z17 Mini'
|
|
|
|
|
12542 |
- regex: 'NX595J'
|
12543 |
model: 'Nubia Z17S'
|
|
|
|
|
|
|
|
|
12544 |
- regex: 'NX513J[);/ ]'
|
12545 |
model: 'Nubia My Prague'
|
12546 |
- regex: 'NX591J[);/ ]'
|
@@ -12551,6 +12892,10 @@ ZTE:
|
|
12551 |
model: 'Nubia X6'
|
12552 |
- regex: 'NX609J[);/ ]'
|
12553 |
model: 'Nubia Red Magic'
|
|
|
|
|
|
|
|
|
12554 |
- regex: 'NX573J'
|
12555 |
model: 'Nubia M2 Lite'
|
12556 |
- regex: 'NX907J[);/ ]'
|
@@ -12836,7 +13181,7 @@ Lemhoov:
|
|
12836 |
model: '$1'
|
12837 |
# MTC
|
12838 |
MTC:
|
12839 |
-
regex: 'MTC[ _](97[82]|970|982[OT]|982|1078)|SMART[ _](Race|Sprint|Run)[ _]4G|MTC975'
|
12840 |
device: 'smartphone'
|
12841 |
models:
|
12842 |
- regex: 'MTC[ _](97[82]|970[H]?|982[OT]|982)'
|
@@ -12848,20 +13193,25 @@ MTC:
|
|
12848 |
device: 'tablet'
|
12849 |
- regex: 'SMART[ _]Race[ _]4G'
|
12850 |
model: 'Smart Race 4G'
|
12851 |
-
- regex: 'SMART[ _]Sprint[ _]4G'
|
12852 |
model: 'Smart Sprint 4G'
|
12853 |
-
- regex: 'SMART[ _]Run[ _]4G'
|
12854 |
model: 'Smart Run 4G'
|
|
|
|
|
12855 |
|
12856 |
# MegaFon
|
12857 |
MegaFon:
|
12858 |
-
regex: 'MFLoginPh|(
|
12859 |
device: 'smartphone'
|
12860 |
models:
|
12861 |
-
- regex: 'MFLoginPh'
|
12862 |
model: 'Login+'
|
12863 |
- regex: 'MFLogin4'
|
12864 |
model: 'Login 4 LTE'
|
|
|
|
|
|
|
12865 |
- regex: 'MS3B'
|
12866 |
model: 'Optima'
|
12867 |
- regex: 'SP-A20i'
|
@@ -12898,7 +13248,7 @@ Unknown:
|
|
12898 |
|
12899 |
# Starway
|
12900 |
Starway:
|
12901 |
-
regex: 'Andromeda[ _]S(707|84[05])[;/) ]'
|
12902 |
device: 'tablet'
|
12903 |
model: 'Andromeda S$1'
|
12904 |
|
@@ -12952,13 +13302,17 @@ X-TIGI:
|
|
12952 |
|
12953 |
# Xiaolajiao
|
12954 |
Xiaolajiao:
|
12955 |
-
regex: '(LA2-(?:L|S[N]?))[);/ ]'
|
12956 |
device: 'smartphone'
|
12957 |
-
|
|
|
|
|
|
|
|
|
12958 |
|
12959 |
# Ritmix
|
12960 |
Ritmix:
|
12961 |
-
regex: 'RMD[-_](10(?:2[68]|5[89])|726)[);/ ]'
|
12962 |
device: 'tablet'
|
12963 |
model: 'RMD-$1'
|
12964 |
|
@@ -12997,9 +13351,9 @@ NEXBOX:
|
|
12997 |
model: 'Smart 4G Speedy 5.0 Plus'
|
12998 |
|
12999 |
Yandex:
|
13000 |
-
regex: '(YNDX
|
13001 |
device: 'smartphone'
|
13002 |
-
model: '
|
13003 |
|
13004 |
# FORME
|
13005 |
FORME:
|
@@ -13025,12 +13379,343 @@ BDF:
|
|
13025 |
|
13026 |
# Highscreen
|
13027 |
Highscreen:
|
13028 |
-
regex: '(Power Ice Max|Zera[ _][UFS])[;)/ ]'
|
13029 |
device: 'smartphone'
|
13030 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13031 |
|
13032 |
# CVTE
|
13033 |
CVTE:
|
13034 |
regex: 'CVTE[_ ](MSD338_(:?1G|512M))[;)/ ]'
|
13035 |
device: 'tv'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13036 |
model: '$1'
|
5 |
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
6 |
###############
|
7 |
|
8 |
+
# Ace (https://www.acemobile.fr/)
|
9 |
+
Ace:
|
10 |
+
regex: 'BUZZ 1 Lite'
|
11 |
+
device: 'smartphone'
|
12 |
+
models:
|
13 |
+
- regex: 'BUZZ 1 Lite'
|
14 |
+
model: 'Buzz 1 Lite'
|
15 |
+
|
16 |
'Tunisie Telecom':
|
17 |
regex: 'StarTrail TT[);/ ]'
|
18 |
device: 'smartphone'
|
64 |
|
65 |
# HTC
|
66 |
HTC:
|
67 |
+
regex: 'HTC|Sprint (?:APA|ATP)|ADR(?!910L)[a-z0-9]+|NexusHD2|Amaze[ _]4G[);/ ]|(Desire|Sensation|Evo ?3D|IncredibleS|Wildfire|Butterfly)[ _]?([^;/)]+)(?: Build|\))|(Amaze[ _]4G|One ?[XELSV\+]+)[);/ ]|SPV E6[05]0|One M8|X525a|PG86100|PC36100|XV6975|PJ83100[);/ ]|2PYB2|2PZC5|0PJA10|0PJA2|HTV33'
|
68 |
device: 'smartphone'
|
69 |
models:
|
70 |
# explicit smartphone models
|
76 |
model: 'Evo 3G'
|
77 |
- regex: 'PC36100[);/ ]'
|
78 |
model: 'Evo 4G'
|
79 |
+
- regex: 'HTV33[);/ ]'
|
80 |
+
model: 'U11'
|
81 |
- regex: 'PJ83100[);/ ]'
|
82 |
model: 'One X'
|
83 |
- regex: '(?:0PJA2|0PJA10)[);/ ]'
|
128 |
model: '$1'
|
129 |
- regex: 'HTC;(?: )?([a-z0-9 ]+)'
|
130 |
model: '$1'
|
131 |
+
- regex: '(Desire|Sensation|Evo ?3D|IncredibleS|Wildfire|Butterfly)[ _]?([^;/)]+)(?: Build|\))'
|
132 |
model: '$1 $2'
|
133 |
- regex: '(Amaze[ _]4G|One ?[XELSV\+]*) Build'
|
134 |
model: '$1'
|
415 |
|
416 |
# HP
|
417 |
HP:
|
418 |
+
regex: 'TouchPad/\d+\.\d+|hp-tablet|HP ?iPAQ|webOS.*P160U|HP (?:Pro )?Slate|HP [78]|Compaq [7|8]|HP; [^;/)]+'
|
419 |
device: 'smartphone'
|
420 |
models:
|
421 |
- regex: 'HP Slate 6 Voice Tab'
|
427 |
- regex: 'Compaq ([78][^/;]*) Build'
|
428 |
model: 'Compaq $1'
|
429 |
device: 'tablet'
|
430 |
+
- regex: 'HP Pro Slate 8'
|
431 |
+
model: 'Pro Slate 8'
|
432 |
+
device: 'tablet'
|
433 |
- regex: 'HP Slate ?(.+) Build'
|
434 |
model: 'Slate $1'
|
435 |
device: 'tablet'
|
995 |
|
996 |
# Alcatel
|
997 |
Alcatel:
|
998 |
+
regex: 'Alcatel|Alc(?!or )[a-z0-9]+|One[ _]?Touch|idol3|(?:4003[AJ]|4009[ADEFIKMSX]|4013[DEJKMX]|4014[ADEKMX]|4015[ADNTX]|4016[ADX]|4017[ADEFSX]|4018[ADEFMX]|4024[EDX]|4027[ADNX]|4028[AEJS]|4032[ADEX]|4034[ADEFGX]|4035[ADXY]|4045[ADEX]|4047[ADFGNX]|4049[DEGMX]|4060[SW]|4114E|5001[ADJTU](?:_EEA|_RU|)?|5009[AD]|5010[DEGSUX]|5011A|5012[DFG]|5015[ADEX]|5016[AXJ]|5017[ABDEOX]|5019D|5022[EDX]|5023[EF]|5024[AD](?:_RU)?|5025[DEG]|5026[AD]|5027B|5032W|5033[AX]|5033D[ _]RU|5034D(_RU)?|5038[ADEX]|5041C|5042[ADEFGWX]|5044[ADGIKOPSTY]|5045[ADFGIJTXY]|5046[ADGIJSTUY]|5047[DIUY]|5049[EGSWZ]|5050[ASXY]|5051[ADEJMTWX]|5052[AD](_RU)?|5054[ADNSTWX]|5056[ADEGIJMNTUWX]|5057M|5058[AIY](_RU)?|5059[ADXYZ](_RU)?|5065[ADNWX]|5070D|5080[ADFQUX]|5085[ABCDGHIJNOQY]|5086[ADY]|5090[AIY]|5095[IKY]|5098[OS]|5099[ADYUI](_RU)?|5116J|5145A|6016[ADEX]|6036[AXY]|6037[BKY]|6039[AHJKY]|6043[AD]|6044D|6045[BFIKOY]|6050[AFY]|6055[ABDHIKPUYZ]|6058[ADX]|6060S|6062W|6070K|7040[ADEFKRT]|7041[DX]|7043[AEKY]|7044[AX]|7045Y|7048[ASWX]|7055A|7070X|8030Y|8050[DEGX]|8063|9001[DIX]|9002X|9003[AX]|9024O|9005X|9026X|9007[ATX]|9008[ADIJNTUX]|9010X|9022X|9203A|A570BL|I213|I216X)[);/ ]|TIMXL'
|
999 |
device: 'smartphone'
|
1000 |
models:
|
1001 |
- regex: '(?:5022[EDX]|5070D)[);/ ]'
|
1062 |
model: 'One Touch Idol 2'
|
1063 |
- regex: '5027B[);/ ]'
|
1064 |
model: 'One Touch Dawn'
|
1065 |
+
- regex: '5024[AD](?:_RU)?[);/ ]'
|
1066 |
model: '1S'
|
1067 |
+
- regex: '5034D(_RU)?[);/ ]'
|
1068 |
model: '3L'
|
1069 |
- regex: '7040[RT][);/ ]'
|
1070 |
model: 'One Touch Fierce 2'
|
1158 |
- regex: '9203A[);/ ]'
|
1159 |
model: 'A3 7" 3G'
|
1160 |
device: 'tablet'
|
1161 |
+
- regex: '9026X[);/ ]'
|
1162 |
+
model: 'A3 10"'
|
1163 |
+
device: 'tablet'
|
1164 |
- regex: '5085[BQ][);/ ]'
|
1165 |
model: 'A5'
|
1166 |
- regex: '5085[ADHIJY][);/ ]'
|
1264 |
model: '1'
|
1265 |
- regex: '5009[AD][);/ ]'
|
1266 |
model: '1C'
|
1267 |
+
- regex: '5001[ADJTU](?:_EEA|_RU|)?[);/ ]'
|
1268 |
+
model: '1V'
|
1269 |
+
- regex: '5059[ADXYZ](_RU)?[);/ ]'
|
1270 |
model: '1X'
|
1271 |
+
- regex: '5052[AD](_RU)?[);/ ]'
|
1272 |
model: '3'
|
1273 |
+
- regex: '(?:5032W|5099[ADYUI](_RU)?)[);/ ]'
|
1274 |
model: '3V'
|
1275 |
- regex: '5026[AD][);/ ]'
|
1276 |
model: '3C'
|
1277 |
+
- regex: '5058[AIY](_RU)?[);/ ]'
|
1278 |
model: '3X'
|
1279 |
- regex: '5086[ADY][);/ ]'
|
1280 |
model: '5'
|
1297 |
|
1298 |
# Allview
|
1299 |
Allview:
|
1300 |
+
regex: 'Allview|A4You|A5_(?:Easy(?:_TM)?|Ready(?:_TM)?|Quad|Quad_Plus_TM)|A[56789]_Lite|A5Smiley|A6_Duo|A10_Lite_2019|A10_Plus|AX2_Frenzy|AX4Nano|AX5NanoQ|C6_Duo|E[23]_Living|E3_(?:Jump|Sign)|E4_Lite|M9_Connect|P(?:43_Easy|[5689]_Energy|6_Energy_Lite|[68]_Energy_Mini(?:_TM)?|(41|[458])_eMagic(?:_TM)?|[589](?:_)?Life(?:_TM)?|[567]_Lite(?:_TM)?|6_plus|[45678]_Pro|7_Seon|10_Life|10_Max|10_Style|7_Xtreme|6_Qmax|4_Quad)|V(?:[13]_Viper|1_Viper_I|2_Viper_(?:E|I|S|X|X_plus|Xe))|X(?:[1234]_Soul_Xtreme|[12345]_Soul|3_Soul_Lite|[23456]_Soul_Mini(?:_TM)?|4_Soul_Mini_S(?:_TM)?|[234]_Soul_Style(?:_TM)?|2_Soul_Style_Plus|2_Twin)|Viva_(H801|100[13]G|H1001_LTE)'
|
1301 |
device: 'smartphone'
|
1302 |
models:
|
1303 |
- regex: 'A4You'
|
1356 |
model: 'P$1 Life'
|
1357 |
- regex: 'P10_Life'
|
1358 |
model: 'P10 Life'
|
1359 |
+
- regex: 'P10_Max'
|
1360 |
+
model: 'P10 Max'
|
1361 |
- regex: 'P10_Style'
|
1362 |
model: 'P10 Style'
|
1363 |
- regex: 'V([12])_Viper_I4G(?:_TM)?'
|
1378 |
model: 'X$1 Soul Lite'
|
1379 |
- regex: 'X4_Soul_Mini_S(?:_TM)?'
|
1380 |
model: 'X4 Soul Mini S'
|
1381 |
+
- regex: 'X([23456])_Soul_Mini(?:_TM)?'
|
1382 |
model: 'X$1 Soul Mini'
|
1383 |
- regex: 'X3_Soul_PLUS'
|
1384 |
model: 'X3 Soul Plus'
|
1433 |
- regex: 'Allview3SpeedQuad'
|
1434 |
device: 'tablet'
|
1435 |
model: 'Alldro 3 Speed Quad'
|
1436 |
+
- regex: 'Viva_(H801|100[13]G|H1001_LTE)'
|
1437 |
device: 'tablet'
|
1438 |
+
model: 'Viva $1'
|
1439 |
- regex: 'ALLVIEW ?SPEEDI'
|
1440 |
device: 'tablet'
|
1441 |
model: 'Speed I'
|
1525 |
|
1526 |
# Ainol
|
1527 |
Ainol:
|
1528 |
+
regex: 'Numy|novo[0-9]|Novo 10 Hero'
|
1529 |
device: 'tablet'
|
1530 |
models:
|
1531 |
- regex: 'Numy 3G AX1'
|
1532 |
model: 'Novo 7 Numy AX1 3G'
|
1533 |
- regex: 'Numy_3G_AX3'
|
1534 |
model: 'Numy AX3 Sword'
|
1535 |
+
- regex: 'Numy3GTalos'
|
1536 |
+
model: 'Numy 3G Talos'
|
1537 |
- regex: 'Numy_3G_BW1'
|
1538 |
model: 'Numy 3G Talos 2'
|
1539 |
+
- regex: '(Novo 10 Hero QuadCore)'
|
1540 |
+
model: '$1'
|
1541 |
|
1542 |
- regex: 'Numy[ _]([^;/]+) Build'
|
1543 |
model: 'Numy $1'
|
1672 |
|
1673 |
# Assistant
|
1674 |
Assistant:
|
1675 |
+
regex: '(AS[-_](?:502|543[1-6]|44[12]1|541[12]|54[23]1|6431|401L)|AP-(?:109|721N|753G|7[25]7G|10[68]|107G|110N|941))[;/)_ ]'
|
1676 |
device: 'smartphone'
|
1677 |
models:
|
1678 |
- regex: 'AS[-_]401L '
|
1689 |
model: 'Unami'
|
1690 |
- regex: 'AS-5431'
|
1691 |
model: 'Prima'
|
1692 |
+
- regex: 'AS-502'
|
1693 |
+
model: 'Shot'
|
1694 |
- regex: 'AS-5435'
|
1695 |
model: 'Shine'
|
1696 |
- regex: 'AS-5436[ _]'
|
1707 |
- regex: 'AP-941'
|
1708 |
model: 'AP-941'
|
1709 |
device: 'tablet'
|
1710 |
+
- regex: 'AP-108'
|
1711 |
+
model: 'Cetus'
|
1712 |
+
device: 'tablet'
|
1713 |
- regex: 'AP-106'
|
1714 |
model: 'AP-106 Force'
|
1715 |
device: 'tablet'
|
1716 |
+
- regex: '(AP-(?:109|7[25]7G|753G|107G|110N))[/;) ]'
|
1717 |
device: 'tablet'
|
1718 |
model: '$1'
|
1719 |
|
1720 |
# Ark
|
1721 |
Ark:
|
1722 |
+
regex: '(ARK[_ -])?Benefit[_ -]([^/;]*)(?: Build|\))|EDGE A5HD|ICON (R40\+|R45)|Impulse[ _](P[12])|Wizard_1[/;) ]'
|
1723 |
device: 'smartphone'
|
1724 |
models:
|
1725 |
+
- regex: '(?:ARK[_ -])?Benefit[_ -]([^/;]*)(?: Build|\))'
|
1726 |
model: 'Benefit $1'
|
1727 |
- regex: 'Impulse[ _]P1\+'
|
1728 |
model: 'Impulse P1 Plus'
|
1749 |
|
1750 |
# Asus
|
1751 |
Asus:
|
1752 |
+
regex: 'Asus|Transformer|TF300T|Slider SL101|PadFone|ME302(?:C|KL)|ME301T|ME371MG|ME17(?:1|2V|3X)|(?:K0[01][0-9a-z]|P(?:00[18ACIL]|01[MTVWYZ]|01MA|01T_1|02[13478])(?: Build|\))|X015D|X018D|X003|X00[7ABT]D|Z00D|Z00[MTY]D|Z01[7FGHKMR]D)[);/ ]|G553KL|ZB(631|602|633|55[135]|50[01])KL|ZC(55[134]|520|600)KL|ZA550KL|ZE(520|620|55[2345])KL|ZD55[23]KL|ZS(6[236]0|55[10])KL|ZB(500KG|601KL)'
|
1753 |
device: 'smartphone'
|
1754 |
models:
|
1755 |
# explicit tablet models
|
1876 |
model: 'ZenFone Max M1'
|
1877 |
- regex: '(?:ASUS_)?(ZB601KL)'
|
1878 |
model: 'ZenFone Max Pro M1'
|
1879 |
+
- regex: '(?:ASUS_)?(X01([AB]D)|ZB633KL)[);/ ]'
|
1880 |
model: 'ZenFone Max M2'
|
1881 |
- regex: '(?:ASUS_)?(?:Z00[AD]|Z008D|Z008|Z00AD[AB]?)'
|
1882 |
model: 'ZenFone 2'
|
1884 |
model: 'ZenFone Live'
|
1885 |
- regex: '(?:ASUS_)?X00RD'
|
1886 |
model: 'ZenFone Live L1'
|
1887 |
+
- regex: 'G553KL'
|
1888 |
+
model: 'ZenFone Lite L1'
|
1889 |
- regex: '(?:ASUS_)Z00YD'
|
1890 |
model: 'Live'
|
1891 |
- regex: '(?:ASUS_)?(?:Z00[ERLMT]D|Z011D)'
|
1900 |
model: 'ZenFone 5 Lite'
|
1901 |
- regex: '(?:ASUS_)?(?:Z01RD|ZS620KL)'
|
1902 |
model: 'ZenFone 5Z'
|
1903 |
+
- regex: '(?:ASUS_)?(?:T00G|Z002|ZS630KL|I01WD[X]?)'
|
1904 |
model: 'ZenFone 6'
|
1905 |
- regex: '(?:ASUS_)?Z010D'
|
1906 |
model: 'ZenFone Max'
|
1928 |
model: 'ZenFone 3 Pegasus'
|
1929 |
- regex: '(?:ASUS_)?(ZE553KL|Z01HD)'
|
1930 |
model: 'ZenFone 3 Zoom'
|
1931 |
+
- regex: '(?:ASUS_)?ZS550KL'
|
1932 |
+
model: 'ZenFone 3 Deluxe'
|
1933 |
- regex: '(?:ASUS_)?Z00UD'
|
1934 |
model: 'ZenFone Selfie'
|
1935 |
- regex: '(?:ASUS_)?(Z016[DS]|Z01FD)'
|
1962 |
model: 'ZenFone Zoom'
|
1963 |
- regex: '(?:ASUS_)?Z01QD'
|
1964 |
model: 'ROG Phone'
|
1965 |
+
- regex: '(?:ASUS_)?(I001D[ABCE]?|ZS660KL)'
|
1966 |
model: 'ROG Phone 2'
|
1967 |
|
1968 |
# general detections
|
2135 |
|
2136 |
# Blackview
|
2137 |
Blackview:
|
2138 |
+
regex: '(BV([2456789]000|(5[589]|9[156])00|6800)(?:[ _](?:PRO))?|(P10000(?:[ _](?:PRO))?)|omega[ _]pro|Alife[ _][PS]1|Heatwave|DM550|BV9700Pro|(?<!Lenovo[_ ])A60(?:Pro)?\))'
|
2139 |
device: 'smartphone'
|
2140 |
models:
|
2141 |
- regex: 'A60Pro\)'
|
2148 |
model: '$1 Pro'
|
2149 |
- regex: 'BV9000Pro-F'
|
2150 |
model: 'BV9000 Pro F'
|
2151 |
+
- regex: '(BV([48]000|9[56]00|6800))Pro'
|
2152 |
model: '$1 Pro'
|
2153 |
- regex: '(BV([2456789]000|(5[589]|9[15])00)(?:[ _](?:PRO))?)'
|
2154 |
model: '$1'
|
2177 |
|
2178 |
# Black Fox
|
2179 |
'Black Fox':
|
2180 |
+
regex: 'BMM[ _-]?((44[123]D|441S|431D|533D|54[12]S|541[AB]|54[123]D|543S|531[ABD]))[;/) ]'
|
2181 |
device: 'smartphone'
|
2182 |
models:
|
2183 |
- regex: 'BMM443D'
|
2184 |
model: 'B7 Fox+'
|
2185 |
+
- regex: 'BMM441S'
|
2186 |
+
model: 'B8 Fox'
|
2187 |
- regex: 'BMM442D'
|
2188 |
model: 'B7'
|
2189 |
- regex: 'BMM531D'
|
2192 |
model: 'B5'
|
2193 |
- regex: 'BMM541A'
|
2194 |
model: 'B5+'
|
2195 |
+
- regex: 'BMM543[DS]'
|
2196 |
model: 'B4'
|
2197 |
- regex: 'BMM441D'
|
2198 |
model: 'B4 Mini'
|
2237 |
|
2238 |
# Brondi
|
2239 |
Brondi:
|
2240 |
+
regex: 'Brondi[ _]|(?:CENTURION|GLADIATOR| GLORY|LUXURY|SENSUELLE|VICTORY)(?:[ _-]?[2-6])?[);/ ]|Surfing Tab'
|
2241 |
device: 'smartphone'
|
2242 |
models:
|
2243 |
+
- regex: 'Brondi[ _](620 SZ|730_4G_HD)[);/ ]'
|
2244 |
+
model: '$1'
|
2245 |
- regex: 'CENTURION(?:[ _-]?([2-6]))?[);/ ]'
|
2246 |
model: 'CENTURION $1'
|
2247 |
- regex: 'GLADIATOR(?:[ _-]?([2-6]))?[);/ ]'
|
2272 |
|
2273 |
# Vivo
|
2274 |
Vivo:
|
2275 |
+
regex: '((?:VIV-|BBG-)?vivo)|V1801A0|V1730(D[AT]|GA)|V1813B[AT]|V1818T|V1731CA|V1809[AT]|V1813[AT]|V1901A|V18[13]8A|V1932[AT]|V1814A'
|
2276 |
device: 'smartphone'
|
2277 |
models:
|
2278 |
- regex: '(?:VIV-|BBG-)?vivo[ _]1601[);/ ]'
|
2279 |
model: 'V5'
|
2280 |
- regex: 'V1932[AT]'
|
2281 |
model: 'S5'
|
2282 |
+
- regex: 'V1801A0'
|
2283 |
+
model: 'Z1'
|
2284 |
+
- regex: 'V1730D[AT]'
|
2285 |
+
model: 'Z1i'
|
2286 |
- regex: 'V1813B[AT]'
|
2287 |
model: 'Z3'
|
2288 |
+
- regex: 'V1730GA'
|
2289 |
+
model: 'Z3x'
|
2290 |
- regex: 'Vivo ONE'
|
2291 |
model: 'One'
|
2292 |
- regex: 'X9Plus'
|
2293 |
model: 'X9 Plus'
|
2294 |
- regex: 'X20Plus'
|
2295 |
model: 'X20 Plus'
|
2296 |
+
- regex: 'V1809[AT]'
|
2297 |
model: 'X23'
|
2298 |
- regex: 'V1818[AT]|vivo 181[45]'
|
2299 |
model: 'Y93'
|
2337 |
model: 'Y71'
|
2338 |
- regex: 'vivo 1725'
|
2339 |
model: 'X21'
|
2340 |
+
- regex: 'V1814A'
|
2341 |
+
model: 'X21S'
|
2342 |
- regex: 'V1838A'
|
2343 |
model: 'X27'
|
2344 |
- regex: 'vivo 1727'
|
2452 |
model: 'Polaris $1'
|
2453 |
- regex: 'Atlantis[_ ](1001A|1010A|A10\.G402)'
|
2454 |
model: 'Atlantis $1'
|
2455 |
+
- regex: 'Blaupunkt (SL 0[124]|SM 01)'
|
2456 |
device: 'smartphone'
|
2457 |
model: '$1'
|
2458 |
|
2874 |
|
2875 |
# Casper
|
2876 |
Casper:
|
2877 |
+
regex: 'CASPER_|VIA[- _](T7D|A3|F[12]|G4|M4|L8|P2|V8C|A1_Plus|A1|S10|S|T17_M|T17)[);/ ]'
|
2878 |
device: 'smartphone'
|
2879 |
models:
|
2880 |
+
- regex: 'CASPER_VIA_(G1|E1|[AE]2|M[123]|V[35689]|V10)[);/ ]'
|
2881 |
model: 'VIA $1'
|
2882 |
+
- regex: 'CASPER_VIA_E1c'
|
2883 |
+
model: 'VIA E1C'
|
2884 |
+
- regex: 'VIA[- _](T7D|S10|L8|T17_M|T17)[);/ ]'
|
2885 |
model: 'VIA $1'
|
2886 |
device: 'tablet'
|
2887 |
+
- regex: 'VIA_(A3|F[12]|G4|M4|P2|S|V8C|A1_Plus|A1)'
|
2888 |
+
model: 'VIA $1'
|
2889 |
|
2890 |
+
# Cat (Caterpillar, Catphones)
|
2891 |
Cat:
|
2892 |
+
regex: 'Cat ?(tablet|stargate|nova)|B15Q|CAT B35'
|
2893 |
device: 'tablet'
|
2894 |
models:
|
2895 |
- regex: 'B15Q'
|
2896 |
model: 'B15Q'
|
2897 |
device: 'smartphone'
|
2898 |
+
- regex: 'CAT B35'
|
2899 |
+
model: 'B35'
|
2900 |
+
device: 'smartphone'
|
2901 |
- regex: 'Cat ?(?:tablet)? ?((?:Galactica|Nova|StarGate|PHOENIX)[^/;]*) Build'
|
2902 |
model: '$1'
|
2903 |
- regex: 'Cat ?tablet'
|
2972 |
model: 'Flare S6 Plus'
|
2973 |
- regex: 'FLARE S6 POWER'
|
2974 |
model: 'Flare S6 Power'
|
2975 |
+
- regex: 'Flare S6'
|
2976 |
+
model: 'Flare S6'
|
2977 |
- regex: 'Flare(?:[ _])?(4|A[13]|J[135]|P[13]|S4|X2)'
|
2978 |
model: 'Flare $1'
|
2979 |
- regex: 'OMEGA HD 4'
|
3096 |
|
3097 |
# Condor
|
3098 |
Condor:
|
3099 |
+
regex: 'Allure M[13]|Griffe T[256789]|TGW[-]?(710G|709)|(?:PGN\-?[456][012][0-9]|PHS\-601|PHQ520|PKT\-301|Plume (?:H1|L[123]|P8))[;/) ]|CTAB[^/;]+ Build'
|
3100 |
device: 'smartphone'
|
3101 |
models:
|
3102 |
- regex: 'CTAB([^/;]+) Build'
|
3103 |
device: 'tablet'
|
3104 |
model: 'CTAB $1'
|
3105 |
+
- regex: '(TGW)-?(710G|709)[);/ ]'
|
3106 |
+
device: 'tablet'
|
3107 |
+
model: '$1 $2'
|
3108 |
|
3109 |
- regex: 'PHS\-601'
|
3110 |
model: 'C8'
|
3114 |
model: 'C7 Mini'
|
3115 |
- regex: 'PGN\-?409'
|
3116 |
model: 'Plume P4'
|
3117 |
+
- regex: 'PKT\-?301'
|
3118 |
+
model: 'C2'
|
3119 |
- regex: 'PGN\-?504'
|
3120 |
model: 'C5'
|
3121 |
- regex: 'PGN\-?505'
|
3134 |
model: 'Allure A9 Plus'
|
3135 |
- regex: 'PGN\-?513'
|
3136 |
model: 'Griffe G4'
|
3137 |
+
- regex: 'PHQ520'
|
3138 |
+
model: 'Griffe G5'
|
3139 |
- regex: 'PGN\-?514'
|
3140 |
model: 'Plume P7'
|
3141 |
- regex: 'PGN\-?515'
|
3146 |
model: 'Plume P6'
|
3147 |
- regex: 'PGN\-?521'
|
3148 |
model: 'Griffe G4 Plus'
|
3149 |
+
- regex: 'Griffe T2'
|
3150 |
+
model: 'Griffe T2'
|
3151 |
+
- regex: 'Griffe T5'
|
3152 |
+
model: 'Griffe T5'
|
3153 |
- regex: 'Griffe T6'
|
3154 |
model: 'Griffe T6'
|
3155 |
+
- regex: 'Griffe T7'
|
3156 |
+
model: 'Griffe T7'
|
3157 |
+
- regex: 'Griffe T8 Plus'
|
3158 |
+
model: 'Griffe T8 Plus'
|
3159 |
+
- regex: 'Griffe T9'
|
3160 |
+
model: 'Griffe T9'
|
3161 |
- regex: 'PGN\-?522'
|
3162 |
model: 'P6 Plus'
|
3163 |
- regex: 'PGN\-?523'
|
3184 |
model: 'Allure A8 Plus'
|
3185 |
- regex: 'PGN\-?613'
|
3186 |
model: 'Allure A55 Plus'
|
3187 |
+
- regex: 'Plume H1'
|
3188 |
+
model: 'Plume H1'
|
3189 |
- regex: 'Plume L1'
|
3190 |
model: 'Plume L1'
|
3191 |
- regex: 'Plume L2 Pro'
|
3192 |
model: 'Plume L2 Pro'
|
3193 |
+
- regex: 'Plume L3 Plus'
|
3194 |
+
model: 'Plume L3 Plus'
|
3195 |
+
- regex: 'Plume P8 Pro'
|
3196 |
+
model: 'Plume P8 Pro'
|
3197 |
|
3198 |
- regex: 'PGN\-?([0-9]{3})'
|
3199 |
model: 'PGN-$1'
|
3200 |
|
3201 |
# Coolpad
|
3202 |
Coolpad:
|
3203 |
+
regex: '(?:YL-)?Coolpad|8190Q[ ;/\)]|(8295|5860S) Build|CP8676_I0[23] Build|CP8298_I00 Build|REVVLPLUS C3701A|VCR-[AI]0|C106-7'
|
3204 |
device: 'smartphone'
|
3205 |
models:
|
3206 |
+
- regex: 'VCR-[AI]0'
|
3207 |
model: 'Cool Play 6'
|
3208 |
- regex: 'REVVLPLUS C3701A'
|
3209 |
model: 'REVVL Plus'
|
3247 |
|
3248 |
# Crosscall
|
3249 |
Crosscall:
|
3250 |
+
regex: 'Crosscall|ODYSSEY_Plus|Odyssey S1|Trekker-[MSX][1234]|Action-X3|Core-X3'
|
3251 |
device: 'smartphone'
|
3252 |
models:
|
3253 |
- regex: 'Action-X3'
|
3254 |
model: 'Action-X3'
|
3255 |
+
- regex: 'Core-X3'
|
3256 |
+
model: 'Core-X3'
|
3257 |
- regex: 'Crosscall ([^;/]+) Build'
|
3258 |
model: '$1'
|
3259 |
- regex: 'ODYSSEY_Plus'
|
3286 |
|
3287 |
# CUBOT
|
3288 |
CUBOT:
|
3289 |
+
regex: 'CUBOT|RAINBOW 2'
|
3290 |
device: 'smartphone'
|
3291 |
models:
|
3292 |
- regex: 'CHEETAH 2'
|
3293 |
model: 'Cheetah 2'
|
3294 |
+
- regex: 'RAINBOW 2'
|
3295 |
+
model: 'Rainbow 2'
|
3296 |
- regex: 'DINOSAUR'
|
3297 |
model: 'Dinosaur'
|
3298 |
- regex: 'KING KONG'
|
3425 |
|
3426 |
# DEXP
|
3427 |
DEXP:
|
3428 |
+
regex: 'DEXP|(?:Ursus|Ixion)[ _]([^;/)]+)|H135[ _]Build|(ML450|MS[56]50|BL150|BS155|BS160|BS550|BS650|AL[12]40)[);/ ]'
|
3429 |
device: 'smartphone'
|
3430 |
models:
|
3431 |
|
3432 |
- regex: 'Ixion[_ ]([^;/]+)(?: Build|\))'
|
3433 |
model: 'Ixion $1'
|
3434 |
+
- regex: '(ML450|MS[56]50)[);/ ]'
|
3435 |
+
model: 'Ixion $1'
|
3436 |
|
3437 |
+
- regex: 'Ursus ([^;/)]+)(?: Build|\))'
|
3438 |
model: 'Ursus $1'
|
3439 |
device: 'tablet'
|
3440 |
|
3441 |
- regex: 'H135[ _]Build'
|
3442 |
model: 'Atlas'
|
3443 |
device: 'desktop'
|
3444 |
+
- regex: '(BL150|BS155|BS160|BS550|BS650|AL[12]40)[);/ ]'
|
3445 |
model: '$1'
|
3446 |
- regex: 'DEXP[ _]([^;/]+) Build'
|
3447 |
model: '$1'
|
3493 |
|
3494 |
# Digma
|
3495 |
Digma:
|
3496 |
+
regex: 'Digma[_ ]([^;/]+) Build|HIT HT707[10]MG|CITI 1902 3G|CITI Z530 3G|(CITI[_ ](?:[A-Z0-9]+)[_ ][34]G)[ _]C[ST](500[67]PG|8209MG|8139ML)|HIT 4G|HT7074ML|IDX5|(iDx10|iDx7)|MVM900H(?:WZ|C)|MVM908HCZ|(iDxD8 3G|iDxD10 3G|iDrQ10 3G|iDxD[45]|iDxQ5|iD[nx]D7(?:[_ ]3G)?)|PS604M|PT452E|Linx A400 3G LT4001PG|Linx C500 3G LT5001PG|Linx PS474S|LS504[01]PL|LT40(47|54)MG|LS405[01]MG|LS5053ML|LT5048MG|LT5052ML|HT5035PG|HT4039PG|LT4049PG|NS6902QL|NS9797MG|TT1004PG|((?:Optima|Platina|Plane)[ _](?:[EM])?(?:[0-9\.ST]+|Prime)(?:[ _][43]G)?)|(VOX[ _](?:[0-9\.A-Z]+)[_ ][43]G)'
|
3497 |
device: 'smartphone'
|
3498 |
models:
|
3499 |
- regex: 'HIT HT707[10]MG'
|
3505 |
model: 'HIT Q500 3G'
|
3506 |
- regex: 'HT4039PG'
|
3507 |
model: 'HIT Q401 3G'
|
3508 |
+
- regex: 'TT1004PG'
|
3509 |
+
model: 'Optima 10.4 3G'
|
3510 |
device: 'tablet'
|
3511 |
- regex: '(VOX[ _](?:[0-9\.A-Z]+)[_ ][43]G)'
|
3512 |
model: '$1'
|
3546 |
- regex: 'MVM908HCZ'
|
3547 |
model: 'iDx9'
|
3548 |
device: 'tablet'
|
3549 |
+
- regex: '(iD(?:xD10|rQ10|xD7)[_ ]3G)'
|
3550 |
model: '$1'
|
3551 |
device: 'tablet'
|
3552 |
- regex: '(iDx10|iDx7)'
|
3559 |
- regex: '(CITI 1902 3G)'
|
3560 |
model: '$1'
|
3561 |
device: 'tablet'
|
3562 |
+
- regex: '(CITI Z530 3G)'
|
3563 |
+
model: '$1'
|
3564 |
- regex: '(CITI_8527_4G)'
|
3565 |
model: '$1'
|
3566 |
device: 'tablet'
|
3570 |
- regex: 'iDxD8 3G'
|
3571 |
model: 'D-Plane2 8'
|
3572 |
device: 'tablet'
|
3573 |
+
- regex: '(iDnD7)'
|
3574 |
model: '$1'
|
3575 |
device: 'tablet'
|
3576 |
- regex: 'NS6902QL'
|
3600 |
|
3601 |
# Doogee
|
3602 |
Doogee:
|
3603 |
+
regex: 'DOOGEE[ _-]|Valencia2_Y100pro|X5max(?:[_ ]PRO)?|(KISSME|BIGBOY|COLLO[23]?|DAGGER|DISCOVERY2?|FIND|HOTWIND|LATTE|MAX|MINT|MOON|PIXELS|RAINBOX|TURBO|VALENCIA|VOYAGER2?|TITANS2?)[ -_](DG[0-9]+C?)[);/ ]|BL[579]000[);/ ]|BL12000|BL5500[_ ]Lite|X9 Mini'
|
3604 |
device: 'smartphone'
|
3605 |
models:
|
3606 |
- regex: 'Valencia2_Y100pro'
|
3615 |
model: 'BL12000'
|
3616 |
- regex: 'KISSME-DG580'
|
3617 |
model: 'Kissme DG580'
|
3618 |
+
- regex: 'X9 Mini'
|
3619 |
+
model: 'X9 Mini'
|
3620 |
- regex: '(X5max(?:[_ ]PRO)?)'
|
3621 |
model: '$1'
|
3622 |
- regex: '(?:DOOGEE[ _-])?(BIGBOY|COLLO[23]?|DAGGER|DISCOVERY2?|FIND|HOTWIND|LATTE|MAX|MINT|MOON|PIXELS|RAINBOX|TURBO|VALENCIA|Valencia2_Y100pro|VOYAGER2?|TITANS2?)[ -_](DG[0-9]+C?)[);/ ]'
|
3860 |
|
3861 |
# Senseit
|
3862 |
Senseit:
|
3863 |
+
regex: 'SENSEIT[ _]?([^;/)]+)( Build|\))'
|
3864 |
device: 'smartphone'
|
3865 |
model: '$1'
|
3866 |
|
3867 |
# Sony & Sony Ericsson (combined as they are mixed up)
|
3868 |
Sony:
|
3869 |
+
regex: 'Sony(?: ?Ericsson)?|SGP|Xperia|([456]0[12]|701)SO|C1[569]0[45]|C2[01]0[45]|C230[45]|C530[236]|C550[23]|C6[56]0[236]|C6616|C68(?:0[26]|[34]3)|C69(?:0[236]|16|43)|D200[45]|D21(?:0[45]|14)|D22(?:0[236]|12|43)|D230[2356]|D240[36]|D25(?:02|33)|D510[236]|D530[36]|D5316|D5322|D5503|D58[03]3|D65(?:0[23]|43|63)|D66[03458]3|D66[14]6|D6708|E(?:20[0345]3|2006|210[45]|2115|2124|230[36]|2312|23[356]3|530[36]|53[3456]3|5506|55[356]3|56[46305][36]|58[02]3|65[35]3|66[0358]3|68[358]3)|I[34]312|I4332|F311[12356]|F331[13]|F321[12356]|F5[13]21|F5122|F813[12]|F833[12]|G312[135]|G311[26]|G322[136]|G3212|G331[123]|G3412|G3416|G342[136]|G823[12]|G834[123]|G8[14]4[12]|H(?:3113|3123|3133|3213|3223|3311|3321|4113|4133|4213|4233|4311|4331|4413|4433|82[167]6|83[12]4|8416|9436)|(?:WT|LT|SO|ST|SK|MK)[0-9]+[a-z]+[0-9]*(?: Build|\))|X?L39H|XM50[ht]|W960|portalmmm/2\.0 K|S3[69]h|SOL2[246]|SOV3[1234567]|X10[ia]v?|E1[05][ai]v?|MT[0-9]{2}[a-z]? Build|SO-0(?:[12]C|[345]D|[234]E|[1-5]F|[1234]G|[134]H|[1234]J|[12]K|1L)|R800[aix]|J9110|J81[17]0|I[34]113|I3[12]23|I42[19]3|H9493|H8296|H8166|H4493|LiveWithWalkman|BRAVIA'
|
3870 |
device: 'smartphone'
|
3871 |
models:
|
3872 |
# SONY ERICSSON: explicit smartphone models
|
3993 |
device: 'feature phone'
|
3994 |
|
3995 |
# SONY: explicit smartphone models
|
3996 |
+
- regex: 'SO-04F'
|
3997 |
+
model: 'Xperia A2'
|
3998 |
- regex: 'SO-04G'
|
3999 |
model: 'Xperia A4'
|
4000 |
- regex: '(?:Sony(?:Ericsson)?)?I(?:4113|31[12]3)'
|
4192 |
model: 'Xperia XZ2 Dual'
|
4193 |
- regex: 'H8166'
|
4194 |
model: 'Xperia XZ2 Premium Dual'
|
4195 |
+
- regex: '(?:Sony(?:Ericsson)?)?(?:H(8416|9436|9493)|SO-01L)'
|
4196 |
model: 'Xperia XZ3'
|
4197 |
- regex: '(?:Sony(?:Ericsson)?)?G331[13]'
|
4198 |
model: 'Xperia L1'
|
4219 |
- regex: 'SGP(?:311|312|321)[);/ ]|SO-03E'
|
4220 |
model: 'Xperia Tablet Z'
|
4221 |
device: 'tablet'
|
4222 |
+
- regex: 'SGP712[);/ ]'
|
4223 |
+
model: 'Xperia Tablet Z4'
|
4224 |
+
device: 'tablet'
|
4225 |
- regex: 'SGP(?:511|512|521)[);/ ]|SO-05F'
|
4226 |
model: 'Xperia Tablet Z2'
|
4227 |
device: 'tablet'
|
4232 |
model: 'Xperia Tablet S'
|
4233 |
device: 'tablet'
|
4234 |
|
4235 |
+
# SONY: Bravia
|
4236 |
+
- regex: '(?:BRAVIA )(2K GB ATV3|4K UR2|4K GB ATV3|4K GB|4K 2015|2015)[);/ ]'
|
4237 |
+
model: 'Bravia $1'
|
4238 |
+
device: 'tv'
|
4239 |
+
|
4240 |
# general detections
|
4241 |
- regex: 'SonyBDP|SonyDBV'
|
4242 |
model: 'Blu-ray Player'
|
4294 |
model: 'V550 Vision'
|
4295 |
- regex: 'B504[_ ]Unit'
|
4296 |
model: 'B504 Unit'
|
4297 |
+
- regex: '(ERGO_)?A500[ _]Best'
|
4298 |
model: 'A500 Best'
|
4299 |
+
- regex: '(ERGO_)?A550[ _]Maxx'
|
4300 |
model: 'A550 Maxx'
|
4301 |
- regex: 'Prime B400'
|
4302 |
model: 'Prime B400'
|
4447 |
|
4448 |
# EvroMedia
|
4449 |
EvroMedia:
|
4450 |
+
regex: 'EVROMEDIA|Playpad[ _]'
|
4451 |
device: 'tablet'
|
4452 |
models:
|
4453 |
- regex: 'Playpad 3G GOO'
|
4454 |
model: 'Play Pad 3G Goo'
|
4455 |
+
- regex: 'Play Pad PRO'
|
4456 |
+
model: 'Play Pad Pro'
|
4457 |
- regex: 'PlayPad 3GTab XL'
|
4458 |
model: 'Play Pad 3G Tab XL'
|
4459 |
# EKO
|
4679 |
|
4680 |
# Geotel
|
4681 |
Geotel:
|
4682 |
+
regex: 'GEOTEL[ _]?'
|
4683 |
device: 'smartphone'
|
4684 |
models:
|
4685 |
- regex: 'G1'
|
4686 |
model: 'G1'
|
4687 |
+
- regex: 'GEOTEL[ _]?Note'
|
4688 |
+
model: 'Note'
|
4689 |
|
4690 |
# Ghia
|
4691 |
Ghia:
|
4702 |
|
4703 |
# Gigabyte
|
4704 |
Gigabyte:
|
4705 |
+
regex: 'GSmart[ _][a-z0-9 ]+(?: Build|\))|Gigabyte-[a-z0-9]+'
|
4706 |
device: 'smartphone'
|
4707 |
models:
|
4708 |
+
- regex: '(GSmart[ _][a-z0-9 ]+)(?: Build|\))'
|
4709 |
model: '$1'
|
4710 |
- regex: 'Gigabyte-([a-z0-9]+)'
|
4711 |
model: '$1'
|
4725 |
|
4726 |
# Ginzzu
|
4727 |
Ginzzu:
|
4728 |
+
regex: 'GINZZU[_ ]|((?:RS(?:7[14]|81|9[67])D)|S50[45]0|S5120|RS(6[12]|9[45])D|S40[23]0|RS8502|RS9602)[);/ ]'
|
4729 |
device: 'smartphone'
|
4730 |
models:
|
4731 |
+
- regex: 'GINZZU[_ ]?(S40[17]0|S4710|ST6040|ST6120)'
|
4732 |
model: '$1'
|
4733 |
+
- regex: 'GINZZU[_ ]?(GT-(?:7105|70[1-4]0|7115|7210|[WX]831|7810|8010))'
|
4734 |
model: '$1'
|
4735 |
device: 'tablet'
|
4736 |
- regex: '(RS6[12]D) ULTIMATE'
|
4737 |
model: '$1 Ultimate'
|
4738 |
+
- regex: '(?:GINZZU[ _])?((?:RS(?:7[14]|81|9[4-7])D)|S50[45]0|S5120|S40[23]0|RS8502|RS9602|RS94D)[);/ ]'
|
4739 |
model: '$1'
|
4740 |
|
4741 |
# Gionee
|
4742 |
Gionee:
|
4743 |
+
regex: '(?:GIO-)?GIONEE[ _-]?[a-z0-9]+|(?:Dream_D1|V188S?|GN[0-9]{3,4}[a-z]?)[);/ ]|F103(?: Pro)? Build|P5 mini Build|P7 Max Build|M7 Power |F106L'
|
4744 |
device: 'smartphone'
|
4745 |
models:
|
4746 |
- regex: 'GN810[);/ ]'
|
4750 |
model: 'GN$1'
|
4751 |
- regex: 'V188S[);/ ]'
|
4752 |
model: 'V188S'
|
4753 |
+
- regex: 'F106L[);/ ]'
|
4754 |
+
model: 'F106L'
|
4755 |
- regex: 'V188[);/ ]'
|
4756 |
model: 'V188'
|
4757 |
- regex: 'F103( Pro)? Build'
|
4797 |
- regex: 'QUANTUM_(1010N|1010M|900)'
|
4798 |
model: 'QUANTUM $1'
|
4799 |
device: 'tablet'
|
4800 |
+
- regex: 'INSIGNIA_(785_PRO|1010M|800M)'
|
4801 |
+
model: 'INSIGNIA $1'
|
4802 |
device: 'tablet'
|
4803 |
- regex: '(ORION|ARIES|ELIPSO)[_ ](71|101|102)'
|
4804 |
model: '$1 $2'
|
4806 |
- regex: 'TQ700N'
|
4807 |
model: 'QUANTUM 700N'
|
4808 |
device: 'tablet'
|
4809 |
+
- regex: '((?:QUANTUM|ARIES|INSIGNIA|ORION|ELIPSO)[ _-]?[^;/]+)(?: Build|\))'
|
4810 |
model: '$1'
|
4811 |
- regex: 'GOCLEVER[ _-]TAB[ _-]?([^;/]+) Build'
|
4812 |
model: 'TAB $1'
|
4849 |
|
4850 |
# Google
|
4851 |
Google:
|
4852 |
+
regex: 'Nexus|GoogleTV|Glass|CrKey[^a-z0-9]|Pixel(?: Build|\))|Pixel (?:XL|C|[2-4]|[2-4] XL)|Google 2XL'
|
4853 |
device: 'smartphone'
|
4854 |
models:
|
4855 |
- regex: 'Glass'
|
4886 |
model: 'Pixel 4'
|
4887 |
- regex: 'Pixel 2'
|
4888 |
model: 'Pixel 2'
|
4889 |
+
- regex: 'Google 2XL'
|
4890 |
+
model: 'Pixel 2 XL'
|
4891 |
- regex: 'Pixel C'
|
4892 |
device: 'tablet'
|
4893 |
model: 'Pixel C'
|
4925 |
|
4926 |
# Haier
|
4927 |
Haier:
|
4928 |
+
regex: 'Haier|I6_Infinity|Titan[ _]T[13]|(?:HW-)?W(?:716|757|860|970)[);/ ]|(?:HM-)?(N700|G(?:152|303|353|552|70[01])?-FL|HM-N501-FL|G(?:303)?-W|I(?:557)?-FL)|(?:PAD[ _](D71|G781|d85))'
|
4929 |
device: 'smartphone'
|
4930 |
models:
|
4931 |
+
- regex: 'HM-N700-FL'
|
4932 |
+
model: 'L7'
|
4933 |
+
- regex: 'HM-N501-FL'
|
4934 |
+
model: 'L56'
|
4935 |
- regex: '(?:HM-)?(G(?:152|353|552|70[01])|G(?:303)|I(?:557))'
|
4936 |
model: '$1'
|
4937 |
+
- regex: '(Titan[_ ]T[13]|I6_Infinity)'
|
4938 |
+
model: '$1'
|
4939 |
- regex: '(?:HW-)?W(716|757|860|970)[);/ ]'
|
4940 |
model: 'W$1'
|
4941 |
- regex: 'PAD[ -_](D71|G781|d85)'
|
4983 |
|
4984 |
# Hisense
|
4985 |
Hisense:
|
4986 |
+
regex: '(?:HS-)?Hisense ([^;/]+) Build|Hisense [^);/]+|HS-(?:G|U|EG?|I|L|T|X)[0-9]+[a-z0-9\-]*|E270BSA|M470BS[AE]|E2281|EG680|HLTE(700T|22[13]E)'
|
4987 |
device: 'smartphone'
|
4988 |
models:
|
4989 |
# explicit tablet models
|
4998 |
model: 'Sero 8'
|
4999 |
- regex: 'HLTE700T'
|
5000 |
model: 'A6'
|
5001 |
+
- regex: 'HLTE221E'
|
5002 |
+
model: 'E Max'
|
5003 |
+
- regex: 'HLTE223E'
|
5004 |
+
model: 'H30'
|
5005 |
- regex: 'EG680'
|
5006 |
model: 'Smartfren Andromax Z'
|
5007 |
|
5057 |
|
5058 |
# Huawei
|
5059 |
Huawei:
|
5060 |
+
regex: '(HW-)?(?:Huawei|Ideos|Honor[ _]?|(?:(?:AGS|AGS2|ALE|ALP|AMN|ANE|ARE|ARS|ATH|ATU|AUM|BAC|BAH|BAH2|BG2|BGO|BKK|BKL|BLA|BLL|BLN|BND|BTV|CAG|CAM|CAN|CAZ|CHC|CHE[12]?|CHM|CLT|CMR|COL|COR|CPN|CRO|CRR|CUN|DIG|DIG|DLI|DRA|DUA|DUB|DUK|EDI|ELE|EML|EVA|EVR|FDR|FIG|FLA|FRD|GRA|HLK|HMA|HRY|HWI|H[36]0|INE|JAT|JDN|JDN2|JKM|JMM|JSN|KIW|KNT|KOB|KSA|LDN|LLD|LND|LON|LUA|LY[AO]|MAR|MHA|MRD|MYA|NCE|NEM|NEO|NXT|PAR|PCT|PIC|PLE|PLK|POT|PRA|RIO|RNE|RVL|SCC|SCL|SEA|SHT|SLA|SNE|STF|STK|TAG|TIT|TNY|TRT|VCE|VEN|VIE|VKY|VNS|VOG|VRD|VTR|WAS|YAL|G(?:527|620S|621|630|735)|Y(?:221|330|550|6[23]5))-(?:[A-Z]{0,2}[0-9]{1,4}[A-Z]{0,2}?)|H1711|U(?:8230|8500|8661|8665|8667|8800|8818|8860|9200|9508))[);/ ])|hi6210sft|SPN-AL00|SCM-(AL09|W09)|HRY-LX1MEB|GEM-70[1-3]L|PE-(UL00|TL10)|VRD-W09|T1-A21[Lw]|T1-701u|G7-L01| ASK-AL00x|LIO-(?:[TA]L00|L29|AN00)|HW-01K|LRA-AL00|HDN-W09|Hol-U19'
|
5061 |
device: 'smartphone'
|
5062 |
models:
|
5063 |
- regex: 'ARS-([AT]L00|L22)[);/ ]'
|
5110 |
model: 'Ascend G620S'
|
5111 |
- regex: 'G630-U251'
|
5112 |
model: 'Ascend G630'
|
5113 |
+
- regex: 'G7-L01[);/ ]'
|
5114 |
+
model: 'Ascend G7'
|
5115 |
- regex: 'U8860[);/ ]'
|
5116 |
model: 'Honor'
|
5117 |
- regex: 'H1711[);/ ]'
|
5128 |
model: 'Honor 2'
|
5129 |
- regex: 'YAL-(?:L21|AL00)'
|
5130 |
model: 'Honor 20'
|
5131 |
+
- regex: 'LRA-AL00'
|
5132 |
+
model: 'Honor 20 Lite'
|
5133 |
+
- regex: 'MAR-LX1H|YAL-AL50'
|
5134 |
model: 'Honor 20S'
|
5135 |
- regex: 'YAL-(L41|AL10)[);/ ]'
|
5136 |
model: 'Honor 20 Pro'
|
5142 |
model: 'Honor Play 4C'
|
5143 |
- regex: 'ASK-AL00x'
|
5144 |
model: 'Honor Play 3'
|
5145 |
+
- regex: 'JDN-(?:AL00|W09)'
|
5146 |
model: 'Honor Pad 2'
|
5147 |
device: 'tablet'
|
5148 |
+
- regex: 'HDN-W09'
|
5149 |
+
model: 'Honor Water Play 10.1'
|
5150 |
+
device: 'tablet'
|
5151 |
- regex: 'JAT-AL00'
|
5152 |
model: 'Honor Play 8A'
|
5153 |
- regex: 'KNT-(?:AL[12]0|[TU]L10)'
|
5168 |
model: 'G621'
|
5169 |
- regex: '(?:Honor_|HW-)?H30-(?:C00|L01M?|L02|U10|T00|T10)(?:_TD)?[);/ ]'
|
5170 |
model: 'Honor 3C'
|
5171 |
+
- regex: 'Hol-U19[);/ ]'
|
5172 |
+
model: 'Honor 3C Lite'
|
5173 |
- regex: '(?:Honor_|HW-)?SCL-(?:AL00|CL00|TL00H?)(?:_TD)?[);/ ]'
|
5174 |
model: 'Honor 4A'
|
5175 |
- regex: '(?:Honor_|HW-)?CAM-(?:AL00|TL00H|TL00)(?:_TD)?[);/ ]'
|
5176 |
model: 'Honor 5A'
|
5177 |
- regex: '(?:Honor_|HW-)?KIW-(?:AL10|TL00H|[TC]L00|L2[124]|UL00)(?:_TD)?[);/ ]'
|
5178 |
model: 'Honor 5X'
|
5179 |
+
- regex: '(?:Honor_|HW-)?CUN-AL00[);/ ]'
|
5180 |
+
model: 'Honor 5 Play'
|
5181 |
- regex: '(?:Honor_|HW-)?CHM-U01(?:_TD)?[);/ ]'
|
5182 |
model: 'Honor 4C'
|
5183 |
- regex: '((?:Honor_|HW-)?H60-L(?:01|02|03|04|11|12)(?:_TD)?|HW-H60-J1)[);/ ]'
|
5186 |
model: 'Honor 6 Play'
|
5187 |
- regex: 'PE-(UL00|TL10)'
|
5188 |
model: 'Honor 6 Plus'
|
5189 |
+
- regex: '(?:Honor_|HW-)?SCL-L(01|32)(?:_TD)?[);/ ]'
|
5190 |
model: 'Honor Y6'
|
5191 |
- regex: '(?:Honor_|HW-)?LYO-L21'
|
5192 |
model: 'Honor Y6 II Compact' # Honor 5A
|
5224 |
model: 'Honor 8C'
|
5225 |
- regex: 'JSN-L(?:2[123]|42)|JSN-[TA]L00[a]?'
|
5226 |
model: 'Honor 8X'
|
5227 |
+
- regex: 'KSA-(LX[29]|AL00)'
|
5228 |
model: 'Honor 8S'
|
5229 |
- regex: 'ARE-(?:AL[10]0|L22HN|TL00)'
|
5230 |
model: 'Honor 8X Max'
|
5240 |
model: 'Honor 9'
|
5241 |
- regex: 'HLK-AL00'
|
5242 |
model: 'Honor 9X'
|
5243 |
+
- regex: 'HLK-AL10'
|
5244 |
+
model: 'Honor 9X Pro'
|
5245 |
- regex: 'LLD-AL[23]0'
|
5246 |
model: 'Honor 9i'
|
5247 |
- regex: 'LLD-(?:AL[01]0|L[23]1|TL10)'
|
5248 |
model: 'Honor 9 Lite'
|
5249 |
- regex: 'COL-(?:AL[01]0|TL[01]0|L29)'
|
5250 |
model: 'Honor 10'
|
5251 |
+
- regex: 'HRY-(?:[AT]L00|LX[12]|LX1MEB)'
|
5252 |
model: 'Honor 10 Lite'
|
5253 |
- regex: 'VKY-TL00'
|
5254 |
model: 'Honor P10 Plus'
|
5290 |
model: 'Nova 3e'
|
5291 |
- regex: 'INE-(?:AL00|LX1r|LX[12]|TL00)'
|
5292 |
model: 'Nova 3i'
|
5293 |
+
- regex: 'SEA-AL00'
|
5294 |
+
model: 'Nova 5'
|
5295 |
- regex: 'SEA-AL10'
|
5296 |
model: 'Nova 5 Pro'
|
5297 |
- regex: 'VCE-(L22|[AT]L00)'
|
5326 |
model: 'P20'
|
5327 |
- regex: 'ANE-(?:LX[123]|TL00)'
|
5328 |
model: 'P20 Lite'
|
5329 |
+
- regex: 'CLT-(?:AL0[01]|TL00|L(?:04|[02]9))|HW-01K'
|
5330 |
model: 'P20 Pro'
|
5331 |
+
- regex: 'ELE-L(?:04|09|29)|ELE-[AT]L00'
|
5332 |
model: 'P30'
|
5333 |
- regex: 'VOG-L(?:04|09|29)|VOG-TL00'
|
5334 |
model: 'P30 Pro'
|
5335 |
+
- regex: 'MAR-(?:LX(1[BM]|2)|TL00)'
|
5336 |
model: 'P30 Lite'
|
5337 |
- regex: 'MAR-LX[13]A'
|
5338 |
model: 'P30 Lite Dual SIM'
|
5340 |
model: 'P smart'
|
5341 |
- regex: 'STK-LX1'
|
5342 |
model: 'P smart Z'
|
5343 |
+
- regex: 'POT-LX([13]|2J)'
|
5344 |
model: 'P smart (2019)'
|
5345 |
- regex: 'POT-[TA]L00a'
|
5346 |
model: '9S'
|
5348 |
model: 'Y3 (2017)'
|
5349 |
- regex: 'CAG-L[02]2'
|
5350 |
model: 'Y3 (2018)'
|
5351 |
+
- regex: 'LUA-(U22|L2[12]|U03)'
|
5352 |
model: 'Y3II'
|
5353 |
- regex: 'CUN-L(?:0[123]|2[123]|33)'
|
5354 |
model: 'Y5II'
|
5438 |
model: 'Mate 20 Pro'
|
5439 |
- regex: 'SNE-(?:AL00|LX[0-3])'
|
5440 |
model: 'Mate 20 Lite'
|
5441 |
+
- regex: 'EVR-(?:[TA]L00|L29|N29)'
|
5442 |
model: 'Mate 20 X'
|
5443 |
- regex: 'CRR-(?:L09|UL00)'
|
5444 |
model: 'Mate S'
|
5450 |
model: 'Mate SE'
|
5451 |
- regex: 'SPN-AL00'
|
5452 |
model: 'Mate 30 Lite' # Nova 5i Pro
|
5453 |
+
- regex: 'LIO-(?:[TA]L00|L29|AN00)'
|
5454 |
+
model: 'Mate 30 Pro'
|
5455 |
- regex: 'Bucare Y330-U05'
|
5456 |
model: 'Y330-U05'
|
5457 |
- regex: 'DRA-L(?:01|03|21|23|X3)'
|
5458 |
model: 'Y5 (2018)'
|
5459 |
- regex: 'ATH-UL0[16]'
|
5460 |
model: 'ShotX'
|
|
|
|
|
|
|
5461 |
- regex: 'CMR-(?:AL[01]9|W09)'
|
5462 |
device: 'tablet'
|
5463 |
model: 'MediaPad M5 10.8'
|
5464 |
+
- regex: 'SCM-AL09'
|
5465 |
+
device: 'tablet'
|
5466 |
+
model: 'MediaPad M5 Pro'
|
5467 |
- regex: 'GEM-70[1-3]L'
|
5468 |
device: 'tablet'
|
5469 |
model: 'MediaPad X2'
|
5473 |
- regex: 'SHT-(?:AL|W)09'
|
5474 |
device: 'tablet'
|
5475 |
model: 'MediaPad M5 8.4'
|
5476 |
+
- regex: 'VRD-(?:(AL|W)09|AL10)'
|
5477 |
device: 'tablet'
|
5478 |
model: 'MediaPad M6 8.4'
|
5479 |
+
- regex: 'SCM-W09'
|
5480 |
+
device: 'tablet'
|
5481 |
+
model: 'MediaPad M6 10'
|
5482 |
- regex: 'BTV-W09'
|
5483 |
device: 'tablet'
|
5484 |
model: 'MediaPad M3 8'
|
5515 |
- regex: 'FDR-A01(?:L|w)'
|
5516 |
device: 'tablet'
|
5517 |
model: 'MediaPad T2 10.0 Pro'
|
5518 |
+
- regex: 'T1-A21[Lw]'
|
5519 |
device: 'tablet'
|
5520 |
model: 'MediaPad T1 10'
|
5521 |
- regex: 'T1-701u'
|
5608 |
- regex: 'iRola ([^/;]+) Build'
|
5609 |
model: '$1'
|
5610 |
|
5611 |
+
# iRulu
|
5612 |
+
iRulu:
|
5613 |
+
regex: 'iRULU[ _](X11|V[34])[;)\ ]'
|
5614 |
+
device: 'tablet'
|
5615 |
+
model: '$1'
|
5616 |
+
|
5617 |
# Irbis
|
5618 |
Irbis:
|
5619 |
+
regex: 'TZ(1(?:00|50|84|65|7[35-8]|9[578])|49|7(?:1[467]|2[0156]|37|4[27]|5[23457]|62|72|7[17]|8[1]|9[47])|8(?:[34]1|5[3-7]|6[45]|7[2478]|8[1-5]|9[012])|96[0-9])|TZ(?:one|art|HIT)|(SP(?:0[56]|2[01]|4[1-36]|401|45[345]|50|51[0147]|531|55[01]))[;)\ ]'
|
5620 |
device: 'tablet'
|
5621 |
models:
|
5622 |
+
- regex: '(TZ(?:[0-9]+)|TZ(?:one|art|HIT))[;)\ ]'
|
5623 |
model: '$1'
|
5624 |
+
- regex: '(SP(?:0[56]|2[01]|4[1-36]|401|45[345]|50|51[0147]|531|55[01]))[;)\ ]'
|
5625 |
device: 'smartphone'
|
5626 |
model: '$1'
|
5627 |
|
5637 |
|
5638 |
# iHunt
|
5639 |
iHunt:
|
5640 |
+
regex: 'iHunt|One_ Love_|TITAN_P11000_PRO|Like_(3|4U|3_Pro)|X300 Elite|S10_Tank_2019|S60_Discovery_2019|AlienXLite2020'
|
5641 |
device: 'smartphone'
|
5642 |
models:
|
5643 |
- regex: 'iHunt_Like'
|
5656 |
model: 'Like 4U'
|
5657 |
- regex: 'X300 Elite'
|
5658 |
model: 'X300 Elite'
|
5659 |
+
- regex: 'S60_Discovery_2019'
|
5660 |
+
model: 'S60 Discovery 2019'
|
5661 |
+
- regex: 'AlienXLite2020'
|
5662 |
+
model: 'Alien X Lite 2020'
|
5663 |
|
5664 |
# IconBIT
|
5665 |
IconBIT:
|
5666 |
+
regex: 'IconBIT|NT-(3506M|0704S|0909T|1009T|10[01]1T|1017T|3601P/3602P|3603P|3702S|3805C|3905T|3701S|0701S|0805C|0902S|370[23]M)'
|
5667 |
device: 'tablet'
|
5668 |
models:
|
5669 |
- regex: 'NT-3506M'
|
5702 |
- regex: 'NT-3703M'
|
5703 |
model: 'NetTAB Matrix 3GT'
|
5704 |
|
5705 |
+
- regex: 'iconBIT (Movie Ultra HD 4K)'
|
5706 |
+
model: '$1'
|
5707 |
+
device: 'tv'
|
5708 |
+
|
5709 |
# LYF
|
5710 |
LYF:
|
5711 |
regex: '(LYF[ _])?LS-[456][0-9]{3}|LYF/[^/]+/'
|
5757 |
model: 'Wind 7'
|
5758 |
- regex: 'LS-5504'
|
5759 |
model: 'Water 7'
|
5760 |
+
- regex: 'LS-5507'
|
5761 |
+
model: 'Water 7S'
|
5762 |
- regex: 'LS-5017'
|
5763 |
model: 'Water 11'
|
5764 |
- regex: 'LS-5018'
|
5997 |
|
5998 |
# InFocus
|
5999 |
InFocus:
|
6000 |
+
regex: 'IF(9001|9007|9021|9035|9031)[);/ ]'
|
6001 |
device: 'smartphone'
|
6002 |
models:
|
6003 |
- regex: 'IF9001'
|
6455 |
|
6456 |
# kyocera
|
6457 |
Kyocera:
|
6458 |
+
regex: 'Kyocera|KWC-|QC-|C5120|C5170|C5155|C5215|C6730|C6750|C6522N?|C6530N|C6740|C6743|E6[89]10|KYL21|KYY23|S2151|KC-S701|S4-KC[;/) ]'
|
6459 |
device: 'smartphone'
|
6460 |
models:
|
6461 |
# explicit smartphone models
|
6462 |
- regex: 'C5120'
|
6463 |
model: 'Milano'
|
6464 |
+
- regex: 'S4-KC'
|
6465 |
+
model: 'One S4'
|
6466 |
- regex: 'C5155'
|
6467 |
model: 'Rise'
|
6468 |
- regex: 'C5170'
|
6506 |
- regex: '(?:KWC|QC)-([a-z0-9]+)'
|
6507 |
model: '$1'
|
6508 |
|
6509 |
+
# Krüger&Matz (Kruger&Matz)
|
6510 |
Krüger&Matz:
|
6511 |
+
regex: 'Kruger[ _&]Matz|MOVE_|LIVE4_KM043[89]'
|
6512 |
device: 'smartphone'
|
6513 |
models:
|
6514 |
- regex: 'MOVE_6_mini'
|
6515 |
model: 'MOVE 6 Mini'
|
6516 |
+
- regex: 'MOVE[_ ]([78]|6S)'
|
6517 |
model: 'MOVE $1'
|
6518 |
- regex: 'DRIVE 4 mini LTE'
|
6519 |
model: 'DRIVE 4 mini LTE'
|
6520 |
+
- regex: 'DRIVE 4[;/) ]'
|
6521 |
+
model: 'DRIVE 4'
|
6522 |
- regex: 'Drive 5[;/) ]'
|
6523 |
model: 'DRIVE 5'
|
6524 |
+
- regex: 'FLOW (4[S]?)[;/) ]'
|
6525 |
+
model: 'FLOW $1'
|
6526 |
+
- regex: 'LIVE4_(KM043[89])[;/) ]'
|
6527 |
+
model: 'LIVE 4 $1'
|
6528 |
|
6529 |
# LAIQ
|
6530 |
LAIQ:
|
6596 |
device: 'tablet'
|
6597 |
- regex: 'X120C'
|
6598 |
model: 'Ilium X120C'
|
6599 |
+
- regex: 'Ilium[ _](Alpha 3|L(?:200|6[12]0|9[125]0|1[0124]00|1050|1120)|LT5[012]0|M[13579]|S(?:106|520|6[27]0)|X(?:1[12]0|2[0126]0|5[12]0|500B|710))'
|
6600 |
model: 'Ilium $1'
|
6601 |
- regex: 'ILIUM[ _]([^;/]+) Build'
|
6602 |
model: 'Ilium $1'
|
6697 |
model: 'Max X900+'
|
6698 |
- regex: 'X50[10]'
|
6699 |
model: 'Le 1S'
|
6700 |
+
- regex: '(X910)'
|
6701 |
+
model: '$1'
|
6702 |
- regex: 'X900 Build'
|
6703 |
model: 'Le X900'
|
6704 |
- regex: 'Le ?X526 Build'
|
6747 |
|
6748 |
# lenovo
|
6749 |
Lenovo:
|
6750 |
+
regex: '(?:LNV-)?Lenovo|IdeaTab|IdeaPad|Thinkpad|Yoga Tablet|Tab2A[0-9]-[0-9]{2}[a-z]?|TB2-X30L|TB3-710I|YT3-X50[ML]|ZUK[ -_]|K50a40|TB-(8504F|X304F|X704V|X704A)|A2107A-H|S6000[ ;)]|Z2 Plus|VIBE Z2|Vibe K5 Plus'
|
6751 |
device: 'smartphone'
|
6752 |
models:
|
6753 |
- regex: 'Lenovo ?G780'
|
6771 |
- regex: 'TB2-X30[FL]'
|
6772 |
model: 'Tab 2 A10-30'
|
6773 |
device: 'tablet'
|
6774 |
+
- regex: 'YT3-X50[FLM]'
|
6775 |
model: 'Yoga Tab 3'
|
6776 |
device: 'tablet'
|
6777 |
- regex: 'TB3-730X'
|
6795 |
- regex: 'Lenovo ?B8000(-[FH])?'
|
6796 |
model: 'Yoga Tablet 10'
|
6797 |
device: 'tablet'
|
6798 |
+
- regex: 'YOGA Tablet 2 Pro-1380[FL]'
|
6799 |
+
model: 'Yoga Tablet 2 Pro 13.3"'
|
6800 |
+
device: 'tablet'
|
6801 |
+
- regex: 'YOGA Tablet 2-1050[FL]'
|
6802 |
+
model: 'Yoga Tablet 2 10.1"'
|
6803 |
+
device: 'tablet'
|
6804 |
+
- regex: 'YOGA Tablet 2-830(?:[FL]|LC)'
|
6805 |
+
model: 'Yoga Tablet 2 8.0"'
|
6806 |
+
device: 'tablet'
|
6807 |
- regex: 'Lenovo ?B6000(-[FH])?'
|
6808 |
model: 'Yoga Tablet 8'
|
6809 |
device: 'tablet'
|
6884 |
model: 'K5 Note'
|
6885 |
- regex: '(?:Lenovo-)?A6020(?:a40|l36)(?: Build|\))'
|
6886 |
model: 'K5 Vibe'
|
6887 |
+
- regex: 'A6020a46(?: Build|\))|Vibe K5 Plus'
|
6888 |
model: 'K5 Vibe Plus'
|
6889 |
+
- regex: 'VIBE Z2[);/ ]'
|
6890 |
+
model: 'Vibe Z2'
|
6891 |
- regex: 'k33a48(?: Build|\))'
|
6892 |
model: 'K6'
|
6893 |
- regex: 'k53a48(?: Build|\))'
|
7000 |
|
7001 |
# LG
|
7002 |
LG:
|
7003 |
+
regex: 'LG|portalmmm/2\.0 (?:KE|KG|KP|L3)|(?:VX[0-9]+|L-0[12]D|L-07C|P713|(LM-[A-Z][0-9]{3}[A-Z]{0,3}(?:\(FGN?\)|\(G\)|\.FN|\.F(?:GN?)?)?)|LM-(X625N1|G820QM[0127]))[);/ ]|NetCast|RS987|RS500|VS(?:50[01]|835|876|880|98[0578]|99[56]|(410|415|425|500|880)PP)|Nexsus 5|LML(41[34]D|211B|713D|212V)L|VK810 4G|VK815'
|
7004 |
device: 'smartphone'
|
7005 |
models:
|
7006 |
- regex: 'LG-D325'
|
7013 |
model: 'Zone 4'
|
7014 |
- regex: 'LM-X220PM'
|
7015 |
model: 'Tribute Empire'
|
7016 |
+
- regex: 'VS980'
|
7017 |
+
model: 'G2'
|
7018 |
+
- regex: 'LG-D85[0125]|VS985'
|
7019 |
model: 'G3'
|
7020 |
- regex: 'LG-D72[2458]'
|
7021 |
model: 'G3 Beat'
|
7085 |
model: 'Fortune 2'
|
7086 |
- regex: 'LM-X410\.F[);/ ]'
|
7087 |
model: 'Premier Pro'
|
7088 |
+
- regex: 'LML41[34]DL[);/ ]'
|
7089 |
model: 'Premier Pro LTE'
|
7090 |
- regex: 'LM-X525'
|
7091 |
model: 'Q60'
|
7191 |
model: 'Spirit'
|
7192 |
- regex: '(?:LG)?C660'
|
7193 |
model: 'Optimus Pro'
|
7194 |
+
- regex: 'LML21(?:1B|2V)L'
|
7195 |
model: 'Rebel 4'
|
7196 |
+
- regex: 'VS876'
|
7197 |
+
model: 'Lucid 3'
|
7198 |
+
- regex: 'VS880(PP)?'
|
7199 |
+
model: 'G Vista'
|
7200 |
|
7201 |
- regex: 'LG-V490'
|
7202 |
model: 'G Pad 8.0'
|
7868 |
|
7869 |
# Mobistel
|
7870 |
Mobistel:
|
7871 |
+
regex: '(Cynus[ _][^/;)]+)( Build|\))'
|
7872 |
device: 'smartphone'
|
7873 |
model: '$1'
|
7874 |
|
7914 |
|
7915 |
# motorola
|
7916 |
Motorola:
|
7917 |
+
regex: 'MOT(?!TO)|(?<!AN)DROID ?(?:Build|[a-z0-9]+)|portalmmm/2.0 (?:E378i|L6|L7|v3)|XOOM [^;/]*Build|XT1799-2|XT1021|XT180[3-5]|(?:XT|MZ|MB|ME)[0-9]{3,4}[a-z]?(?:\(Defy\)|-0[1-5])?(?: Build|\))'
|
7918 |
device: 'smartphone'
|
7919 |
models:
|
7920 |
# Explicit feature phone models
|
7999 |
model: 'Droid Turbo'
|
8000 |
- regex: '(?:MOT-|Motorola-)?XT10(?:28|3[1234]|68|69)'
|
8001 |
model: 'Moto G'
|
8002 |
+
- regex: '(?:MOT-|Motorola-)?XT1799-2'
|
8003 |
+
model: 'Moto G5s'
|
8004 |
- regex: '(?:MOT-|Motorola-)?XT180[3-5]'
|
8005 |
model: 'Moto G5s Plus'
|
8006 |
- regex: '(?:MOT-|Motorola-)?XT168[57]'
|
8017 |
model: 'Moto Z'
|
8018 |
- regex: '(?:MOT-|Motorola-)?XT1635(?:-0[1-3])?'
|
8019 |
model: 'Moto Z Play'
|
8020 |
+
- regex: '(?:MOT-|Motorola-)?XT1710-(?:-02)?'
|
8021 |
+
model: 'Moto Z2 Play'
|
8022 |
- regex: '(?:MOT-|Motorola-)?XT1663'
|
8023 |
model: 'Moto M'
|
8024 |
|
8075 |
|
8076 |
# myphone
|
8077 |
MyPhone:
|
8078 |
+
regex: '(?:MyPhone|MyPad|MyTab)[ _][^;/)]+( Build|\))|Cube_LTE|myTab10II|HAMMER[ _](ENERGY|Titan 2|AXE[_ ](?:M[_ ]LTE|Pro)|Iron 2|Active)|C-Smart_pix|myPhone_Fun_8'
|
8079 |
device: 'smartphone'
|
8080 |
models:
|
8081 |
- regex: 'MyPad[ _]([^;/]+) Build'
|
8091 |
model: 'Cube LTE'
|
8092 |
- regex: 'HAMMER[ _]ENERGY'
|
8093 |
model: 'Hammer Energy'
|
8094 |
+
- regex: 'HAMMER_AXE[_ ]M[_ ]LTE'
|
8095 |
model: 'Hammer Axe M LTE'
|
8096 |
- regex: 'Hammer Titan 2'
|
8097 |
model: 'Hammer Titan 2'
|
8098 |
+
- regex: 'Hammer Iron 2'
|
8099 |
+
model: 'Hammer Iron 2'
|
8100 |
+
- regex: 'Hammer Active'
|
8101 |
+
model: 'Hammer Active'
|
8102 |
+
- regex: 'Hammer AXE Pro'
|
8103 |
+
model: 'Hammer Axe Pro'
|
8104 |
- regex: 'C-Smart_pix'
|
8105 |
model: 'C-Smart Pix'
|
8106 |
- regex: 'myPhone_Fun_8'
|
8107 |
model: 'FUN 8'
|
8108 |
+
- regex: 'MyPhone[ _]([^;/)]+)( Build|\))'
|
8109 |
model: '$1'
|
8110 |
|
8111 |
# MyWigo
|
8312 |
|
8313 |
# Nomi
|
8314 |
Nomi:
|
8315 |
+
regex: 'Nomi[ _-]|(C101010 Ultra2|i501[23]|i5032|i5050|i5532|C0(700(?:[02358]|2HD)|7850)|C1010[0-3])[;/) ]'
|
8316 |
device: 'smartphone'
|
8317 |
models:
|
8318 |
- regex: 'i501[23][;/) ]'
|
8326 |
- regex: 'C101010 Ultra2'
|
8327 |
model: 'Ultra 2'
|
8328 |
device: 'tablet'
|
8329 |
+
- regex: '(C0(?:700(?:[02358]|2HD)|7850)|C1010[0-3])[;/) ]'
|
8330 |
+
model: '$1'
|
8331 |
+
device: 'tablet'
|
8332 |
- regex: 'Nomi[ _-]([^;/]+) Build'
|
8333 |
model: '$1'
|
8334 |
- regex: 'Nomi[ _-]([^;/)]+)[;/)]'
|
8336 |
|
8337 |
# NUU Mobile
|
8338 |
NUU Mobile:
|
8339 |
+
regex: 'NUU_|(?:N(5702|5001)L|S6001L)[;)/ ]'
|
8340 |
device: 'smartphone'
|
8341 |
models:
|
8342 |
- regex: 'NUU_A1'
|
8343 |
model: 'A1'
|
8344 |
+
- regex: 'S6001L'
|
8345 |
+
model: 'G2'
|
8346 |
- regex: 'N5702L'
|
8347 |
model: 'G3'
|
8348 |
- regex: '(N5001L)[;)/ ]'
|
8558 |
|
8559 |
# OnePlus
|
8560 |
OnePlus:
|
8561 |
+
regex: '(?:du_)?ONEPLUS|(?:A0001|A200[135]|A300[03]|A3010|A5000|A600[03]|A601[03]|E100[135]|GM191[03517]|GM190[013]|HD190[1357])(?: Build|\))'
|
8562 |
device: 'smartphone'
|
8563 |
models:
|
8564 |
- regex: 'GM191[03517]'
|
8565 |
model: '7 Pro'
|
8566 |
- regex: 'GM190[013]'
|
8567 |
model: '7'
|
8568 |
+
- regex: 'HD190[1357]'
|
8569 |
model: '7T'
|
8570 |
- regex: 'A0001'
|
8571 |
model: 'One'
|
8590 |
|
8591 |
# oppo
|
8592 |
OPPO:
|
8593 |
+
regex: '(?:OB-)?OPPO[ _]?([a-z0-9]+)|N1T|(?:X90[07][0679]|U707T?|X909T?|R(?:10[01]1|2001|201[07]|6007|7005|7007|80[13579]|81[13579]|82[01379]|83[013]|800[067]|8015|810[679]|811[13]|820[057])[KLSTW]?|N520[79]|N5117|A33f|A33fw|A37fw?|PAAM00|PAC[T|M]00|PBAM00)[);/ ]|R7kf|R7plusf|R7Plusm|A1601|CPH[0-9]{4}|PCAM10|PADM00|PBBT00|PBBM[03]0|RMX18(0[1579]|11|3[13]|2[15]|[45]1|45)|CPH19(69|79|23|1[179])|RMX(1827|194[1235]|199[23]|19[01379]1|192[157])|PC[CDG]M00|PB(AT00|BT30|CM[13]0|[FD]M00)|P[CB]E[MT]00|P(AFM00|ADT00|AHM00|CA[MT]00|CDM10|CHM[13]0|CKM[08]0|CLM10|DBM00)'
|
8594 |
device: 'smartphone'
|
8595 |
models:
|
8596 |
- regex: '(?:OPPO[ _]?)?U707T?[);/ ]'
|
8597 |
model: 'Find Way S'
|
8598 |
+
- regex: '(?:OPPO[ _]?)?(?:CPH1979|PCDM10)[);/ ]'
|
8599 |
model: 'Reno Z'
|
8600 |
- regex: 'CPH1945'
|
8601 |
model: 'Reno2 Z'
|
8603 |
model: 'F11 Pro'
|
8604 |
- regex: 'CPH1911'
|
8605 |
model: 'F11'
|
8606 |
+
- regex: '(?:CPH1917|PCA[MT]00)[);/ ]'
|
8607 |
model: 'Reno'
|
8608 |
+
- regex: 'PCLM10'
|
8609 |
+
model: 'Reno Ace'
|
8610 |
+
- regex: 'PCKM00'
|
8611 |
+
model: 'Reno 2'
|
8612 |
+
- regex: 'PCKM80'
|
8613 |
+
model: 'Reno 2Z'
|
8614 |
- regex: 'CPH1921'
|
8615 |
model: 'Reno 5G'
|
8616 |
+
- regex: 'PCGM00[);/ ]'
|
8617 |
+
model: 'Reno K3'
|
8618 |
- regex: 'PCCM00'
|
8619 |
model: 'Reno 10X'
|
8620 |
- regex: 'CPH1919'
|
8699 |
model: 'A83'
|
8700 |
- regex: '(?:OPPO[ _]?)?CPH1801[);/ ]'
|
8701 |
model: 'A71'
|
8702 |
+
- regex: 'PADT00[);/ ]'
|
8703 |
+
model: 'A3'
|
8704 |
- regex: '(?:OPPO[ _]?)?CPH18(0[35]|53)[);/ ]'
|
8705 |
model: 'A3s'
|
8706 |
- regex: '(?:OPPO[ _]?)?(?:CPH1809|PBAT00|PBBT30)[);/ ]'
|
8709 |
model: 'A5 (2020)'
|
8710 |
- regex: '(?:OPPO[ _]?)?CPH1938[);/ ]'
|
8711 |
model: 'A9 (EN)'
|
8712 |
+
- regex: 'CPH1937|PCHM30'
|
8713 |
model: 'A9 (2020)'
|
8714 |
+
- regex: 'PCHM10'
|
8715 |
+
model: 'A11'
|
8716 |
- regex: '(?:OPPO[ _]?)?CPH18(19|21)[);/ ]'
|
8717 |
model: 'F7'
|
8718 |
- regex: '(?:OPPO[ _]?)?CPH1823[);/ ]'
|
8723 |
model: 'R15 Pro'
|
8724 |
- regex: '(?:OPPO[ _]?)?CPH1835[);/ ]'
|
8725 |
model: 'R15'
|
|
|
|
|
8726 |
- regex: '(?:OPPO[ _]?)?CPH1851[);/ ]'
|
8727 |
model: 'AX5'
|
8728 |
- regex: 'CPH1920'
|
8735 |
model: 'K1'
|
8736 |
- regex: 'RMX1811'
|
8737 |
model: 'RealMe C1'
|
8738 |
+
- regex: 'RMX194[1235]'
|
8739 |
model: 'RealMe C2'
|
8740 |
- regex: 'RMX1831'
|
8741 |
model: 'RealMe U1'
|
8742 |
- regex: '(?:OPPO[ _]?)?(?:CPH187[15]|PAFM00)[);/ ]'
|
8743 |
model: 'Find X'
|
8744 |
+
- regex: '(?:OPPO[ _]?)?(?:PAHM00)[);/ ]'
|
8745 |
+
model: 'Find X Lamborghini'
|
8746 |
+
- regex: '(?:OPPO[ _]?)?(?:CPH1877|PBDM00)[);/ ]'
|
8747 |
model: 'R17 Pro'
|
8748 |
- regex: '(?:OPPO[ _]?)?(?:CPH1879|PBE[MT]00)[);/ ]'
|
8749 |
model: 'R17'
|
8753 |
model: 'R17 Neo'
|
8754 |
- regex: '(?:OPPO[ _]?)?(?:CPH1901|PBFM00)[);/ ]'
|
8755 |
model: 'A7'
|
8756 |
+
- regex: '(?:OPPO[ _]?)?(?:PDBM00)[);/ ]'
|
8757 |
+
model: 'A8'
|
8758 |
- regex: '(?:OPPO[ _]?)?CPH1903[);/ ]'
|
8759 |
model: 'AX7'
|
8760 |
- regex: '(?:OPPO[ _]?)?A37f(w)?(?: Build|\))'
|
8761 |
model: 'A37f$1'
|
8762 |
+
- regex: '(?:OPPO[ _]?)?(CPH1837|PADM00)[);/ ]'
|
8763 |
model: 'A3'
|
8764 |
- regex: '(?:OPPO[ _]?)?PBAM00'
|
8765 |
model: 'A5'
|
8783 |
model: 'Realme 3 Pro'
|
8784 |
- regex: 'RMX1901'
|
8785 |
model: 'Realme X'
|
8786 |
+
- regex: 'RMX199[12]'
|
8787 |
+
model: 'Realme X2'
|
8788 |
+
- regex: 'RMX1993'
|
8789 |
+
model: 'Realme X2 Dual'
|
8790 |
+
- regex: 'RMX1931'
|
8791 |
+
model: 'Realme X2 Pro'
|
8792 |
- regex: 'RMX1921'
|
8793 |
model: 'Realme XT'
|
8794 |
+
- regex: 'RMX19(11|27)'
|
8795 |
model: 'Realme 5'
|
8796 |
- regex: 'RMX1971'
|
8797 |
model: 'Realme 5 Pro'
|
8798 |
+
- regex: 'RMX1925'
|
8799 |
+
model: 'Realme 5S'
|
8800 |
- regex: '(PBBT00|PBBM00)[);/ ]'
|
8801 |
model: 'A7x'
|
8802 |
- regex: 'PCDM00[);/ ]'
|
8852 |
model: '$1 $2'
|
8853 |
- regex: 'Orange[ _-](Dive)72[ ;/)]'
|
8854 |
model: '$1 72'
|
8855 |
+
- regex: 'Orange[ _-](Daytona|Dive (30|7[13])|Dublin|Fova|Gova|Hi 4G|Hiro|Kivo|Monte Carlo|Neva 80|Neva play|Nura|Reyo|Rise[_ ](3[034]|40|5[345])|Rono|Roya|San Francisco|Tactile internet 2|Tado|Yomi|Yumo|Zali)[ ;/)]'
|
8856 |
model: '$1'
|
8857 |
- regex: 'SPV[ \-]?([a-z0-9]+)'
|
8858 |
model: 'SPV $1'
|
8871 |
- regex: '(OK[AU][0-9]+[a-z]*) Build'
|
8872 |
model: '$1'
|
8873 |
|
8874 |
+
# Oukitel
|
8875 |
+
Oukitel:
|
8876 |
+
regex: '(?:C15|C16|K10000)[ _]Pro'
|
8877 |
+
device: 'smartphone'
|
8878 |
+
models:
|
8879 |
+
- regex: '(C15|C16|K10000)[ _]Pro'
|
8880 |
+
model: '$1 Pro'
|
8881 |
+
|
8882 |
# Overmax
|
8883 |
Overmax:
|
8884 |
regex: 'OV-[a-z]+(?:[^;(/]*)[();/ ]|Qualcore 1010'
|
8900 |
|
8901 |
# Oysters
|
8902 |
Oysters:
|
8903 |
+
regex: 'Oysters|T84ERI[ _]3G|T72HM(s_)?3G|(T74HMi|T84Bi)[_ ]4G|T74MR4G'
|
8904 |
device: 'tablet'
|
8905 |
models:
|
8906 |
- regex: 'Oysters ((?:Arctic|Indian|Atlantic|Pacific)[^/;]+) Build'
|
8908 |
model: '$1'
|
8909 |
- regex: '(T84ERI[ _]3G|T72HM(s_)?3G|(?:(T74HMi|T84Bi)[_ ]4G))'
|
8910 |
model: '$1'
|
8911 |
+
- regex: '(T74MR)(4G)'
|
8912 |
+
model: '$1 $2'
|
8913 |
- regex: 'Oysters ([^/;]+)( Build|\))'
|
8914 |
model: '$1'
|
8915 |
# öwn
|
8941 |
|
8942 |
# panasonic
|
8943 |
Panasonic:
|
8944 |
+
regex: 'Panasonic|PANATV[0-9]+|Viera/|P902i[);/ ]|Eluga[ _]|FZ-N1|P55 Novo 4G|DMC-CM1'
|
8945 |
device: 'smartphone'
|
8946 |
models:
|
8947 |
- regex: 'Eluga[ _-]([^;/]+) Build'
|
8948 |
model: 'Eluga $1'
|
8949 |
- regex: 'Eluga[ _-]([^;/]+)[;/)]'
|
8950 |
model: 'Eluga $1'
|
8951 |
+
- regex: '(DMC-CM1)'
|
8952 |
+
model: 'Lumix $1'
|
8953 |
+
device: 'camera'
|
8954 |
- regex: 'FZ-N1'
|
8955 |
model: 'Toughpad'
|
8956 |
- regex: 'P55 Novo 4G'
|
9025 |
|
9026 |
# philips
|
9027 |
Philips:
|
9028 |
+
regex: 'Philips|AND1E[);/ ]|NETTV/|PI3210G|TLE(821L|722G)|TPM171E'
|
9029 |
device: 'smartphone'
|
9030 |
models:
|
9031 |
- regex: 'AND1E(?: TV)?[);/ ]'
|
9034 |
- regex: '(PI3210G)'
|
9035 |
model: '$1'
|
9036 |
device: 'tablet'
|
9037 |
+
- regex: '(TPM171E)' # Smart Tv 2018
|
9038 |
+
model: '$1'
|
9039 |
+
device: 'tv'
|
9040 |
- regex: '(TLE821L)[);/ ]'
|
9041 |
model: '$1 4G LTE'
|
9042 |
device: 'tablet'
|
9085 |
|
9086 |
# Pixus
|
9087 |
Pixus:
|
9088 |
+
regex: 'Pixus|(Ride[_ ]4G|Play[ _]Three[ _]v(?:[24].0|3.1))[;)\ ]'
|
9089 |
device: 'tablet'
|
9090 |
models:
|
9091 |
- regex: 'Ride[_ ]4G'
|
9092 |
model: 'Ride 4G'
|
9093 |
+
- regex: 'Play[ _]Three[ _]v([24].0|3.1)'
|
9094 |
+
model: 'Play Three v$1'
|
9095 |
+
- regex: 'Play Two'
|
9096 |
+
model: 'Play Two'
|
9097 |
- regex: 'Raze'
|
9098 |
model: 'Raze'
|
9099 |
device: 'smartphone'
|
9203 |
|
9204 |
# Rombica
|
9205 |
Rombica:
|
9206 |
+
regex: '(Rombica|SSQ-A0500)[);/ ]'
|
9207 |
device: 'tv'
|
9208 |
+
models:
|
9209 |
+
- regex: 'SSQ-A0500[);/ ]'
|
9210 |
+
model: 'Smart Stick 4K'
|
9211 |
+
- regex: '(Infinity K8|Smart Box (?:v005|Quad|Ultra HD v002|4K V001))[);/ ]'
|
9212 |
+
model: '$1'
|
9213 |
|
9214 |
# Rover
|
9215 |
Rover:
|
9253 |
model: 'Neon Ray'
|
9254 |
|
9255 |
|
9256 |
+
# Santin
|
9257 |
+
Santin:
|
9258 |
+
regex: '(SANTIN|BiTBiZ_V58)[);/_ ]'
|
9259 |
device: 'smartphone'
|
9260 |
models:
|
9261 |
+
- regex: 'BiTBiZ_V58[);/ ]'
|
9262 |
+
model: 'BiTBiZ V58'
|
9263 |
+
- regex: 'GreenOrange[);/ ]'
|
9264 |
+
model: 'Green Orange'
|
9265 |
+
- regex: 'halove[);/ ]'
|
9266 |
+
model: 'Halove'
|
9267 |
+
- regex: 'monica[);/ ]'
|
9268 |
+
model: 'Monica'
|
9269 |
+
- regex: 'POWER[);/ ]'
|
9270 |
+
model: 'Power'
|
9271 |
+
- regex: 'GALAZ[);/ ]'
|
9272 |
+
model: 'Galaz'
|
9273 |
+
- regex: 'NEWDUN[);/ ]'
|
9274 |
+
model: 'Newdun'
|
9275 |
+
- regex: 'SANTIN[ _][#]?(Dante|Candy U7|Armor|YSL-Y7|ANT.W|N[13]|JS|S6|V9)[);/ ]'
|
9276 |
+
model: '$1'
|
9277 |
|
9278 |
# Siemens
|
9279 |
Siemens:
|
9731 |
model: 'GALAXY S10+'
|
9732 |
- regex: '(?:SAMSUNG-)?SM-G970[FU]'
|
9733 |
model: 'GALAXY S10e'
|
9734 |
+
- regex: '(?:SAMSUNG-)?SM-G980F'
|
9735 |
+
model: 'GALAXY S20'
|
9736 |
+
- regex: '(?:SAMSUNG-)?SM-G981(?:[0BNUW]|U1)'
|
9737 |
+
model: 'GALAXY S20 5G'
|
9738 |
+
- regex: '(?:SAMSUNG-)?SM-G988(?:[0BNUW]|U1)'
|
9739 |
+
model: 'GALAXY S20 Ultra 5G'
|
9740 |
+
- regex: '(?:SAMSUNG-)?SM-G985F'
|
9741 |
+
model: 'GALAXY S20+'
|
9742 |
+
- regex: '(?:SAMSUNG-)?SM-G986(?:[0BNUW]|U1)'
|
9743 |
+
model: 'GALAXY S20+ 5G'
|
9744 |
+
- regex: '(?:SAMSUNG-)?SM-F700(?:[0FNUW]|U1)|SCV47'
|
9745 |
+
model: 'GALAXY Z Flip'
|
9746 |
- regex: '(?:SAMSUNG-)?SCH-I200'
|
9747 |
model: 'GALAXY Stellar'
|
9748 |
- regex: '(?:SAMSUNG-)?SCH-I829'
|
10535 |
|
10536 |
# Prestigio
|
10537 |
Prestigio:
|
10538 |
+
regex: '(?:PMP|PAP|PMT|PSP|PGPS)[0-9]+[a-z0-9_]+[);/ ]'
|
10539 |
device: 'tablet'
|
10540 |
models:
|
10541 |
- regex: 'PMT3277_3G'
|
10542 |
model: 'MultiPad Ranger 7.0 3G'
|
10543 |
+
- regex: 'PGPS7799CIS08GBPG'
|
10544 |
+
model: 'Geo Vision Tour 3'
|
10545 |
- regex: 'PMT3201_4G'
|
10546 |
model: 'Grace 4G'
|
10547 |
- regex: 'PSP5551DUO'
|
10580 |
|
10581 |
# Qilive (Auchan)
|
10582 |
Qilive:
|
10583 |
+
regex: 'Qilive [0-9][^;/]*|Q(8S55IN4G2|8S[56]IN4G|10S5[37]IN4G|10S[56]IN4G|10S[56]IN4GR|9S5IN4G|6T7IN)'
|
10584 |
device: 'smartphone'
|
10585 |
models:
|
10586 |
- regex: 'Q8S55IN4G2'
|
10587 |
model: 'Q8 5.5" 4G'
|
10588 |
+
- regex: 'Q8S6IN4G'
|
10589 |
+
model: 'Q8 6.0" 4G'
|
10590 |
- regex: 'Q8S5IN4GP'
|
10591 |
model: 'Q8 5.1" 4G'
|
10592 |
+
- regex: 'Q9S5IN4G'
|
10593 |
+
model: 'Q9 5.0" 4G'
|
10594 |
- regex: 'Q10S53IN4G'
|
10595 |
model: 'Q10 5.3" 4G'
|
10596 |
- regex: 'Q10S57IN4G'
|
10597 |
model: 'Q10 5.7" 4G'
|
10598 |
+
- regex: 'Q10S5IN4G[R]?'
|
10599 |
model: 'Q10 5.0" 4G'
|
10600 |
- regex: 'Q10S6IN4G'
|
10601 |
model: 'Q10 6.0" 4G'
|
10720 |
|
10721 |
# Sharp
|
10722 |
Sharp:
|
10723 |
+
regex: 'SHARP|SBM|SH-?[0-9]+[a-z]?[);/ ]|SH-M0[89]|S3-SH|SH-Z(10|01)|AQUOS|506SH|SHL22|FS80(1[08]|32|28|0[29])[);/ ]|TG-L900S'
|
10724 |
device: 'smartphone'
|
10725 |
models:
|
10726 |
# explicit smartphone models
|
10727 |
- regex: '506SH'
|
10728 |
model: 'Aquos Xx3'
|
10729 |
+
- regex: 'S3-SH'
|
10730 |
+
model: 'One S3'
|
10731 |
- regex: 'SH-Z10'
|
10732 |
model: 'Aquos zero'
|
10733 |
+
- regex: 'SH-Z01'
|
10734 |
+
model: 'Aquos S2 (C10)'
|
10735 |
- regex: 'SH-02E'
|
10736 |
model: 'Aquos Phone Zeta'
|
10737 |
- regex: 'SH06D'
|
10738 |
model: 'Aquos Phone SH-06D'
|
10739 |
- regex: 'SHL22'
|
10740 |
model: 'Aquos Phone SHL22'
|
10741 |
+
- regex: 'SH-M09'
|
10742 |
+
model: 'Aquos R2'
|
10743 |
+
- regex: 'FS8010|SH-M08'
|
10744 |
model: 'Aquos S2'
|
10745 |
- regex: 'FS8032'
|
10746 |
model: 'Aquos S3'
|
10902 |
|
10903 |
# T-Mobile
|
10904 |
T-Mobile:
|
10905 |
+
regex: 'T-Mobile[ _][a-z0-9 ]+|REVVLRY|REVVL 2( PLUS)?[);/ ]'
|
10906 |
device: 'smartphone'
|
10907 |
models:
|
10908 |
- regex: 'REVVL 2 PLUS'
|
10909 |
model: 'REVVL 2 Plus'
|
10910 |
+
- regex: 'REVVLRY'
|
10911 |
+
model: 'REVVL Plus'
|
10912 |
- regex: 'REVVL 2[);/ ]'
|
10913 |
model: 'REVVL 2'
|
10914 |
- regex: 'T-Mobile[ _]([a-z0-9_ ]+) Build'
|
11012 |
|
11013 |
# teXet
|
11014 |
teXet:
|
11015 |
+
regex: 'Texet|(NaviPad [^/;]*) Build|TM-(?:1046|1058|1057|1067|3000|3200R|3500|4003|4071|450[34]|451[30]|4377|4082R|550[83]|5010|5017|507[4-7]|5[23]77|6003|6906|702[13]|7055HD|709[69]|9747BT|9758|9751HD|9767|5513|520[410]|5505|507[13]|5581|7859|8044|9748[ _]3G|9720|7047HD[ _]3G|9757|9740|4982|4515|4083|500[3567]|5571|3204R|5016|8043|7047HD[ _]3G|8041HD|8066|705[23]|7041|8041HD|8051|8048|974[96]|973[78]W|974[170]|9743W|9750HD|7043XD|7049|7887|7037W|702[46])|TB-(771A|711A)|X-Force[\(-]?TM-5009\)?|X-Plus[\(-]?TM-5577\)?|X-pad (?:AIR 8|iX 7) 3G'
|
11016 |
device: 'tablet'
|
11017 |
models:
|
11018 |
- regex: 'TM-9749'
|
11047 |
model: 'NaviPad TM-7887 3G'
|
11048 |
- regex: 'TM-8066'
|
11049 |
model: 'X-pad Rapid 8.2 4G'
|
11050 |
+
- regex: '(TM-(?:1057|1067|6906|8043|9748[_ ]3G|9740|9757(?:[_ ]3G)?|7047HD[ _]3G|9747BT|9751HD|702[13]|705[23]|7041|9720|7047HD[_ ]3G|8044|8041HD|973[78]W|9743W|974[710]|9750HD|7043XD|7037W|702[46])|TB-(?:771A|711A|8041HD))'
|
11051 |
model: '$1'
|
11052 |
- regex: 'TM-4503'
|
11053 |
device: 'smartphone'
|
11099 |
|
11100 |
# Telefunken
|
11101 |
Telefunken:
|
11102 |
+
regex: 'TEL-1013GIQA|(TF-MID(?:9705RG|7805G|1010G))'
|
11103 |
+
device: 'tablet'
|
11104 |
models:
|
11105 |
- regex: 'TEL-1013GIQA'
|
|
|
11106 |
model: 'Giqa 10.1 3G'
|
11107 |
+
- regex: '(TF-MID(?:9705RG|7805G|1010G))'
|
11108 |
+
model: '$1'
|
11109 |
|
11110 |
# Telego
|
11111 |
Telego:
|
11333 |
|
11334 |
# Ulefone
|
11335 |
Ulefone:
|
11336 |
+
regex: 'Ulefone|Power_[356]|S10_Pro|(Armor(?:[ _]2)?|U00[78][ _]Pro|Be[ _]X|Be[ _]Touch(?:[ _][23])?|Be[ _](?:One|Pure)(?:[ _]Lite)?) Build'
|
11337 |
device: 'smartphone'
|
11338 |
models:
|
11339 |
- regex: 'S10_Pro'
|
11358 |
model: 'Armor 2'
|
11359 |
- regex: 'Armor Build'
|
11360 |
model: 'Armor'
|
11361 |
+
- regex: 'Power_([356])'
|
11362 |
model: 'Power $1'
|
11363 |
- regex: 'Ulefone[_ ](X|S1[ _]Pro|S[17])[);\ ]'
|
11364 |
model: '$1'
|
11369 |
|
11370 |
# UMIDIGI
|
11371 |
UMIDIGI:
|
11372 |
+
regex: 'UMI(?:DIGI)?[ _]|A5_Pro'
|
11373 |
device: 'smartphone'
|
11374 |
models:
|
11375 |
+
- regex: 'A5_Pro'
|
11376 |
+
model: 'A5 Pro'
|
11377 |
- regex: 'UMI(?:DIGI)?[ _]([^/;]+) Build'
|
11378 |
model: '$1'
|
11379 |
|
11445 |
- regex: '(?:ViewSonic-)?V500[);/ ]'
|
11446 |
model: 'V500'
|
11447 |
device: 'smartphone'
|
11448 |
+
- regex: 'ViewSonic A8\+[);/ ]'
|
11449 |
+
model: 'A8 Plus'
|
11450 |
+
device: 'smartphone'
|
11451 |
- regex: '(?:ViewSonic-)?ViewPhone ?([^;/]+) Build'
|
11452 |
model: 'ViewPhone $1'
|
11453 |
device: 'smartphone'
|
11511 |
|
11512 |
# Venso mobile
|
11513 |
Venso:
|
11514 |
+
regex: '(CX-508|CX-551)[/;) ]'
|
11515 |
device: 'smartphone'
|
11516 |
model: '$1'
|
11517 |
|
11543 |
|
11544 |
# Vestel
|
11545 |
Vestel:
|
11546 |
+
regex: 'Venus[ _](GO|V[1-9]|Z[1-9]0)|V_?TAB|VP74|VT97PRO|VSP145M|VSP250G|VSP355[GS]'
|
11547 |
device: 'smartphone'
|
11548 |
models:
|
11549 |
- regex: 'VT97PRO'
|
11573 |
model: 'Venus V$1'
|
11574 |
- regex: 'Venus[ _]Z([1-9]0)'
|
11575 |
model: 'Venus Z$1'
|
11576 |
+
- regex: 'Venus[ _]GO'
|
11577 |
+
model: 'Venus Go'
|
11578 |
|
11579 |
# Videocon
|
11580 |
Videocon:
|
11588 |
|
11589 |
# Vodafone
|
11590 |
Vodafone:
|
11591 |
+
regex: 'Vodafone[ _-]|Smart ?Tab ?(?:III? ?)?(?:|4G|7|10)[);/ -]|VodafoneSmartChat|VFD[ _][0-9]+[;/) ]|VFD320|VF6[89]5|VF-(696|795|895N|1497)'
|
11592 |
device: 'smartphone'
|
11593 |
models:
|
11594 |
- regex: 'VFD 100'
|
11633 |
model: 'Smart 4 Power'
|
11634 |
- regex: 'VodafoneSmartChat'
|
11635 |
model: 'Smart Chat'
|
11636 |
+
- regex: 'VF-696'
|
11637 |
+
model: 'Smart Grand 6'
|
11638 |
- regex: 'VF-795'
|
11639 |
model: 'Smart Speed 6'
|
11640 |
- regex: 'VF-895N'
|
11641 |
model: 'Smart Prime 6'
|
11642 |
+
- regex: 'VF-1497'
|
11643 |
+
model: 'Tab Prime 6'
|
11644 |
+
device: 'tablet'
|
11645 |
|
11646 |
# explicit table models
|
11647 |
- regex: 'VFD 1100'
|
11690 |
|
11691 |
# Vonino
|
11692 |
Vonino:
|
11693 |
+
regex: 'Vonino|Epic (?:E8|P7)|Gyga[ _](?:X|S|QS|XS)|Jax[ _](?:Q|QS|S|X|Mini)|Magnet[ _]M[19]|Navo_QS|Onyx_(QS|Z)|Orin_QS|Pluri[ _](?:[BCMQ]7|[CQ]8)|Sirius_QS|Volt[ _][XS]|Xavy_T7|Xylo[ _][XSPQ]|Zun[ _]X[OS]?'
|
11694 |
device: 'smartphone'
|
11695 |
models:
|
11696 |
- regex: 'Zun[ _]XO'
|
11699 |
model: 'Zun XS'
|
11700 |
- regex: 'Zun[ _]X'
|
11701 |
model: 'Zun X'
|
11702 |
+
- regex: 'Xylo[ _](P|S|X|Q)'
|
11703 |
model: 'Xylo $1'
|
11704 |
- regex: 'Volt[ _]S_A7'
|
11705 |
model: 'Volt S A7'
|
11831 |
|
11832 |
# Wiko
|
11833 |
Wiko:
|
11834 |
+
regex: '(?:WIKO[_ -])|(?:WIKO-)?CINK_[a-z0-9_]+|(?:WIKO-)?HIGHWAY_[a-z0-9_]+|(?:WIKO-)?(?:Cink([^/;]*)|Highway([^/;]*)|Iggy|Stairway|Rainbow ?(Jam|Lite|Up)?|Darkside|Darkmoon|Darkfull|Darknight|Freddy|FEVER|Jerry[2]?|Sublim|Ozzy|JIMMY|Barry|Birdy|Bloom|Getaway|Goa|Kite|Robby|Lenny[2-9]?|Slide|Sunset[2-9]?|Sunny[2-9]?|Tommy[2-9]?|PULP(?: Fab)?|Wax|HARRY|Ridge(?: Fab)?|U FEEL(?: Prime| Lite)?|U PULSE(?: LITE)?|View2 Go|View XL|View Prime)(?: Plus)?(?: 4G)?(?: Build|$)?|W_(?:C800|K[346]00|P200)|WC300|W-(V800|P[36]11|K510)-EEA|WIM Lite'
|
11835 |
device: 'smartphone'
|
11836 |
models:
|
11837 |
- regex: '(?:Wiko-)?Cink([^/;]*) Build'
|
11910 |
model: 'Sunset 2'
|
11911 |
- regex: '(?:WIKO-)?Sunset'
|
11912 |
model: 'Sunset'
|
11913 |
+
- regex: '(?:WIKO-)?Sunny3'
|
11914 |
+
model: 'Sunny 3'
|
11915 |
- regex: '(?:WIKO-)?Sunny2 Plus'
|
11916 |
model: 'Sunny 2 Plus'
|
11917 |
- regex: '(?:WIKO-)?Sunny2'
|
11952 |
model: 'U Feel Prime'
|
11953 |
- regex: '(?:WIKO-)?U FEEL'
|
11954 |
model: 'U Feel'
|
11955 |
+
- regex: '(?:WIKO-)?View2 Go'
|
11956 |
+
model: 'View 2 Go'
|
11957 |
- regex: '(?:WIKO-)?View XL'
|
11958 |
model: 'View XL'
|
11959 |
- regex: '(?:WIKO-)?View Prime'
|
11962 |
model: 'View Lite'
|
11963 |
- regex: 'W_C800'
|
11964 |
model: 'View 2'
|
11965 |
+
- regex: 'W_P200'
|
11966 |
+
model: 'View Max'
|
11967 |
- regex: 'W-V800-EEA'
|
11968 |
model: 'View 3 Lite'
|
11969 |
+
- regex: 'W-K510-EEA'
|
11970 |
+
model: 'Y60'
|
11971 |
+
- regex: 'W-P311-EEA'
|
11972 |
+
model: 'View 3'
|
11973 |
+
- regex: 'W-P611-EEA'
|
11974 |
+
model: 'View 3 Pro'
|
11975 |
- regex: 'Wiko ([^/;]+) Build'
|
11976 |
model: '$1'
|
11977 |
- regex: 'Wiko ([^/; ]+)'
|
11978 |
model: '$1'
|
11979 |
|
11980 |
+
# Wieppo
|
11981 |
+
Wieppo:
|
11982 |
+
regex: 'Wieppo (S6 Lite|S[658])[;/) ]'
|
11983 |
+
device: 'smartphone'
|
11984 |
+
model: '$1'
|
11985 |
+
|
11986 |
# Wink
|
11987 |
Wink:
|
11988 |
regex: 'Wink_'
|
12066 |
|
12067 |
# Xiaomi
|
12068 |
Xiaomi:
|
12069 |
+
regex: 'Xiaomi(?!/MiuiBrowser)|(?:MI [a-z0-9]+|Mi-4c|MI-One[ _]?[a-z0-9]+|MIX(?: 2S?)?)[);/ ]|HM (?:[^/;]+) (?:Build|MIUI)|(?:2014501|2014011|201481[12378]|201302[23]|2013061) Build|Redmi|POCOPHONE|SKR-[AH]0|SKW-[AH]0|POCO F1|DLT-[AH]0|MIBOX[34]|MiTV4[CSX]|AWM-A0'
|
12070 |
device: 'smartphone'
|
12071 |
models:
|
12072 |
# specific smartphone models
|
12073 |
- regex: 'SKR-[AH]0'
|
12074 |
model: 'Black Shark'
|
12075 |
+
- regex: 'AWM-A0'
|
12076 |
+
model: 'Black Shark Helo'
|
12077 |
- regex: 'SKW-[AH]0'
|
12078 |
model: 'Black Shark 2'
|
12079 |
+
- regex: 'DLT-[AH]0'
|
12080 |
model: 'Black Shark 2 Pro'
|
12081 |
- regex: 'Xiaomi_2014501|2014501 Build'
|
12082 |
model: 'Hongmi 4G'
|
12139 |
- regex: 'MI PAD[);/ ]'
|
12140 |
model: 'Mi Pad'
|
12141 |
device: 'tablet'
|
12142 |
+
- regex: 'MIBOX([34])[);/ ]'
|
12143 |
+
model: 'Mi Box $1'
|
12144 |
+
device: 'tv'
|
12145 |
+
- regex: '(MiTV)(4[CSX]|4)[);/ ]'
|
12146 |
+
model: '$1 $2'
|
12147 |
+
device: 'tv'
|
12148 |
- regex: 'HM NOTE 1W (?:Build|MIUI)'
|
12149 |
device: 'phablet'
|
12150 |
model: 'Redmi Note'
|
12423 |
|
12424 |
# Toshiba
|
12425 |
Toshiba:
|
12426 |
+
regex: 'Toshiba|TSBNetTV/|portalmmm/[12].0 TS|T-01C|T-0[12]D|IS04|IS11T|AT1S0|AT300SE|AT(7-C|10-A|10[PL]E-A|100|200|270|300|330|374|400|470|500|503|570|703|830)'
|
12427 |
device: 'smartphone'
|
12428 |
models:
|
12429 |
# explicit smartphone models
|
12439 |
model: 'Regza IS11T'
|
12440 |
|
12441 |
# explicit tablet models
|
12442 |
+
- regex: 'AT7-C'
|
12443 |
+
model: 'Excite'
|
12444 |
+
device: 'tablet'
|
12445 |
- regex: 'AT1S0'
|
12446 |
model: 'Regza AT1S0'
|
12447 |
device: 'tablet'
|
12480 |
model: 'Fly 5 Lite'
|
12481 |
- regex: 'VIVAX[ _]Fly3'
|
12482 |
model: 'Fly 3'
|
12483 |
+
- regex: 'VIVAX (Point X551)'
|
12484 |
+
model: '$1'
|
12485 |
- regex: 'SMART Point X5010'
|
12486 |
model: 'Smart Point X5010'
|
12487 |
|
12612 |
model: 'Era Nano 3'
|
12613 |
- regex: '(?:Fly_)?IQ440(?: Build|[;/\)])'
|
12614 |
model: 'Energy'
|
12615 |
+
- regex: '(?:Fly_)?IQ4401(?: Build|[;/\)])'
|
12616 |
+
model: 'Era Energy 2'
|
12617 |
- regex: '(?:Fly_)?IQ441(?: Build|[;/\)])'
|
12618 |
model: 'Radiance'
|
12619 |
- regex: '(?:Fly_)?IQ442(?: Build|[;/\)])'
|
12754 |
|
12755 |
# Zopo
|
12756 |
Zopo:
|
12757 |
+
regex: 'ZOPO|(?:ZOPO[_ ])?(Flash X3|ZP[0-9]{2,}[^/;]+)(?:\)| Build)'
|
12758 |
device: 'smartphone'
|
12759 |
models:
|
12760 |
+
- regex: '(ZOPO_C2_MOD|ZP998)[);/ ]'
|
12761 |
model: 'C2 II'
|
12762 |
- regex: '(?:ZOPO_)?ZP980[+][);/ ]'
|
12763 |
model: 'ZP980+'
|
12767 |
model: 'Speed 7 Plus'
|
12768 |
- regex: 'ZP951[);/ ]'
|
12769 |
model: 'Speed 7'
|
12770 |
+
- regex: 'ZP955[);/ ]'
|
12771 |
+
model: 'Speed 8'
|
12772 |
- regex: 'ZP950[+h]?[);/ ]'
|
12773 |
model: 'Leader Max'
|
12774 |
- regex: 'ZP(?:900H?|910)[);/ ]'
|
12779 |
model: 'Libero'
|
12780 |
- regex: 'ZP330[);/ ]'
|
12781 |
model: 'Color C'
|
12782 |
+
- regex: 'ZP370[);/ ]'
|
12783 |
+
model: 'Color S'
|
12784 |
+
- regex: 'ZP5(63|86)[);/ ]'
|
12785 |
+
model: 'Color X'
|
12786 |
+
- regex: 'ZP567[);/ ]'
|
12787 |
+
model: 'Color C5i'
|
12788 |
- regex: 'ZP300[S+]?[);/ ]'
|
12789 |
model: 'Field'
|
12790 |
- regex: 'ZP200[+]?[);/ ]'
|
12793 |
model: 'Pilot'
|
12794 |
- regex: 'ZP1790[);/ ]'
|
12795 |
model: 'Flash X2'
|
12796 |
+
- regex: 'ZP781[);/ ]'
|
12797 |
+
model: 'Flash G5 Plus'
|
12798 |
- regex: '(Flash X3|ZP[0-9]{2,}[^/;]+) Build'
|
12799 |
model: '$1'
|
12800 |
|
12801 |
# ZTE
|
12802 |
ZTE:
|
12803 |
+
regex: 'ZTE|AxonPhone|([a-z0-9]+)_USA_Cricket|(?:Blade (?:L110|L[2357]|L7A|S6|V[6789]|V8Q|V8 SE|V9 VITA|X7|A(310|460|465|475|520|530|602)|V580)|N9[15]8St|NX(?:403A|404H|406E|40[X2]|507J|503A|505J|506J|508J|510J|512J|511J|513J|521J|523J_V1|529J|531J|541J|5[48]9J|551J|563J|569[HJ]|573J|575J|591J|595J|597J|60[19]J|61[269]J|62[79]J|907J)|N951[0579]|N9180|N9101|N913[67]|N952[01]|N9560|N9810|N799D|[UV]9180|[UV]9815|Z(?:233V|331|667T|768G|792|81[25]|82[08]|83[12359]|85[125]|851M|(557|71[67]|798|836|861|916)BL|986DL|(232|718|828)TL|(233|353|558|717|799|837|862|899|917|963)VL|955A|95[678]|965|97[018]|98[1237]|986U|999)|Apex2|G (LTE|Lux)|Vec)[);/ ]|KIS II Max|Kis 3|K3DX-V5G|Z930L|Blade A5 2019-T|BLADE A6 MAX|Nubia Z9'
|
12804 |
device: 'smartphone'
|
12805 |
models:
|
12806 |
# explicit smartphone models
|
12807 |
- regex: 'N799D[);/ ]'
|
12808 |
model: 'Blade Eg'
|
12809 |
+
- regex: 'K3DX-V5G[);/ ]'
|
12810 |
+
model: 'V5G'
|
12811 |
- regex: 'N918St[);/ ]'
|
12812 |
model: 'V5S'
|
12813 |
- regex: 'N958St[);/ ]'
|
12852 |
model: 'Nubia Z7 max'
|
12853 |
- regex: 'NX508J[);/ ]'
|
12854 |
model: 'Nubia Z9'
|
12855 |
+
- regex: '(NX5[12]1J|Nubia Z9 mini)[);/ ]'
|
12856 |
model: 'Nubia Z9 mini'
|
12857 |
+
- regex: '(NX510J|Nubia Z9 Max)[);/ ]'
|
12858 |
model: 'Nubia Z9 max'
|
12859 |
- regex: 'NX512J[);/ ]'
|
12860 |
model: 'Nubia Z9 max dual'
|
12874 |
model: 'Nubia Z17'
|
12875 |
- regex: 'NX569H[);/ ]'
|
12876 |
model: 'Nubia Z17 Mini'
|
12877 |
+
- regex: 'NX589J[);/ ]'
|
12878 |
+
model: 'Nubia Z17 Mini S'
|
12879 |
- regex: 'NX595J'
|
12880 |
model: 'Nubia Z17S'
|
12881 |
+
- regex: 'NX612J[);/ ]'
|
12882 |
+
model: 'Nubia V18'
|
12883 |
+
- regex: 'NX627J'
|
12884 |
+
model: 'Nubia Z20'
|
12885 |
- regex: 'NX513J[);/ ]'
|
12886 |
model: 'Nubia My Prague'
|
12887 |
- regex: 'NX591J[);/ ]'
|
12892 |
model: 'Nubia X6'
|
12893 |
- regex: 'NX609J[);/ ]'
|
12894 |
model: 'Nubia Red Magic'
|
12895 |
+
- regex: 'NX619J[);/ ]'
|
12896 |
+
model: 'Nubia Red Magic Mars'
|
12897 |
+
- regex: 'NX629J[);/ ]'
|
12898 |
+
model: 'Nubia Red Magic 3'
|
12899 |
- regex: 'NX573J'
|
12900 |
model: 'Nubia M2 Lite'
|
12901 |
- regex: 'NX907J[);/ ]'
|
13181 |
model: '$1'
|
13182 |
# MTC
|
13183 |
MTC:
|
13184 |
+
regex: 'MTC[ _](97[82]|970|982[OT]|982|1078)|(MTC_)?SMART[ _]?(Race|Sprint|Run|Surf2)[ _]4G|MTC975'
|
13185 |
device: 'smartphone'
|
13186 |
models:
|
13187 |
- regex: 'MTC[ _](97[82]|970[H]?|982[OT]|982)'
|
13193 |
device: 'tablet'
|
13194 |
- regex: 'SMART[ _]Race[ _]4G'
|
13195 |
model: 'Smart Race 4G'
|
13196 |
+
- regex: '(MTC_)?SMART[ _]Sprint[ _]4G'
|
13197 |
model: 'Smart Sprint 4G'
|
13198 |
+
- regex: 'SMART[ _]?Run[ _]4G'
|
13199 |
model: 'Smart Run 4G'
|
13200 |
+
- regex: 'SMART[ _]Surf2[ _]4G'
|
13201 |
+
model: 'Smart Surf 2 4G'
|
13202 |
|
13203 |
# MegaFon
|
13204 |
MegaFon:
|
13205 |
+
regex: 'MegaFon|MFLoginPh|MegLogPh|(MFLogin[34]T?|MS3B|SP-A5|SP-A20i)[)\; ]'
|
13206 |
device: 'smartphone'
|
13207 |
models:
|
13208 |
+
- regex: 'MFLoginPh|MegLogPh'
|
13209 |
model: 'Login+'
|
13210 |
- regex: 'MFLogin4'
|
13211 |
model: 'Login 4 LTE'
|
13212 |
+
- regex: 'MFLogin3T|MegaFon Login 3'
|
13213 |
+
model: 'Login 3'
|
13214 |
+
device: 'tablet'
|
13215 |
- regex: 'MS3B'
|
13216 |
model: 'Optima'
|
13217 |
- regex: 'SP-A20i'
|
13248 |
|
13249 |
# Starway
|
13250 |
Starway:
|
13251 |
+
regex: 'Andromeda[ _]S(707|84[05]|8)[;/) ]'
|
13252 |
device: 'tablet'
|
13253 |
model: 'Andromeda S$1'
|
13254 |
|
13302 |
|
13303 |
# Xiaolajiao
|
13304 |
Xiaolajiao:
|
13305 |
+
regex: '(LA2-(?:L|S[N]?)|HLA Note3)[);/ ]'
|
13306 |
device: 'smartphone'
|
13307 |
+
models:
|
13308 |
+
- regex: 'HLA Note3[);/ ]'
|
13309 |
+
model: 'Red Pepper Note 3'
|
13310 |
+
- regex: '(LA2-(?:L|S[N]?))[);/ ]'
|
13311 |
+
model: '$1'
|
13312 |
|
13313 |
# Ritmix
|
13314 |
Ritmix:
|
13315 |
+
regex: 'RMD[-_](10(?:2[68]|5[89])|726|857|870)[);/ ]'
|
13316 |
device: 'tablet'
|
13317 |
model: 'RMD-$1'
|
13318 |
|
13351 |
model: 'Smart 4G Speedy 5.0 Plus'
|
13352 |
|
13353 |
Yandex:
|
13354 |
+
regex: '(YNDX-?000SB)[;)\ ]'
|
13355 |
device: 'smartphone'
|
13356 |
+
model: 'YNDX-000SB'
|
13357 |
|
13358 |
# FORME
|
13359 |
FORME:
|
13379 |
|
13380 |
# Highscreen
|
13381 |
Highscreen:
|
13382 |
+
regex: 'HIGHSCREEN|(Power Ice Max|Power Rage Evo|Zera[ _][UFS]|PowerFivePro|PowerFour|BOOST II)[;)/ ]'
|
13383 |
device: 'smartphone'
|
13384 |
+
models:
|
13385 |
+
- regex: '(Power Ice Max|Power Rage Evo|Zera[ _][UFS])[;)/ ]'
|
13386 |
+
model: '$1'
|
13387 |
+
- regex: 'PowerFivePro[;)/ ]'
|
13388 |
+
model: 'Power Five Pro'
|
13389 |
+
- regex: 'PowerFour[;)/ ]'
|
13390 |
+
model: 'Power Four'
|
13391 |
+
- regex: 'HIGHSCREEN Easy-Power-Pro[;)/ ]'
|
13392 |
+
model: 'Easy Power Pro'
|
13393 |
+
- regex: 'BOOST II[;)/ ]'
|
13394 |
+
model: 'Boost 2'
|
13395 |
|
13396 |
# CVTE
|
13397 |
CVTE:
|
13398 |
regex: 'CVTE[_ ](MSD338_(:?1G|512M))[;)/ ]'
|
13399 |
device: 'tv'
|
13400 |
+
model: '$1'
|
13401 |
+
|
13402 |
+
# Globex
|
13403 |
+
Globex:
|
13404 |
+
regex: 'GU8012C[;)/ ]'
|
13405 |
+
device: 'tablet'
|
13406 |
+
model: 'X8'
|
13407 |
+
|
13408 |
+
# Atom
|
13409 |
+
Atom:
|
13410 |
+
regex: 'ATOM-(108AM)[;)/ ]'
|
13411 |
+
device: 'tv'
|
13412 |
+
model: '$1'
|
13413 |
+
|
13414 |
+
# Qumo
|
13415 |
+
Qumo:
|
13416 |
+
regex: 'QUMO[ _]?|(Vega[ _]?78[23])[;)/ ]'
|
13417 |
+
device: 'tablet'
|
13418 |
+
models:
|
13419 |
+
- regex: '(?:QUMO[ _]?)?Vega[ _]?(78[23]|8002)[;)/ ]'
|
13420 |
+
model: 'Vega $1'
|
13421 |
+
- regex: 'Yooda[;)/ ]'
|
13422 |
+
model: 'Yooda'
|
13423 |
+
- regex: '(Sirius 101-4G 8GB Black|Altair 701 8GB Black|Altair 7004)[;)/ ]'
|
13424 |
+
model: '$1'
|
13425 |
+
- regex: 'QUMO[ _]Quest[ _]?(35[34]|402|45[28]|476|570|600)[;)/ ]'
|
13426 |
+
device: 'smartphone'
|
13427 |
+
model: 'Quest $1'
|
13428 |
+
|
13429 |
+
# Umax
|
13430 |
+
Umax:
|
13431 |
+
regex: 'VisionBook[ _]'
|
13432 |
+
device: 'tablet'
|
13433 |
+
models:
|
13434 |
+
- regex: '(VisionBook[ _](?:7Qi 3G|7Q Plus|8Q LTE|8Q_Plus|10Qi_3G))[;)/ ]'
|
13435 |
+
model: '$1'
|
13436 |
+
- regex: '(VisionBook[ _](?:P50 LTE|P55 LTE(?: Pro)?))[;)/ ]'
|
13437 |
+
device: 'smartphone'
|
13438 |
+
model: '$1'
|
13439 |
+
|
13440 |
+
# Mann
|
13441 |
+
Mann:
|
13442 |
+
regex: '(ZUG 3|ZUG 5S(?: Q)?)[;)/ ]'
|
13443 |
+
device: 'smartphone'
|
13444 |
+
model: '$1'
|
13445 |
+
|
13446 |
+
# Unihertz
|
13447 |
+
Unihertz:
|
13448 |
+
regex: '(Titan|Jelly-Pro)[;)/ ]'
|
13449 |
+
device: 'smartphone'
|
13450 |
+
models:
|
13451 |
+
- regex: '(Jelly)-(Pro)[;)/ ]'
|
13452 |
+
model: '$1 $2'
|
13453 |
+
- regex: '(Titan)[;)/ ]'
|
13454 |
+
model: '$1'
|
13455 |
+
|
13456 |
+
# Chuwi
|
13457 |
+
Chuwi:
|
13458 |
+
regex: 'CW-(Hi8-super|Hi12|V99|V17HD3G|VX8-3G|V88-QUAD|V9-DUAL|V88S|Vi[78]|[HV]i10 (pro|plus))[;)/ ]'
|
13459 |
+
device: 'tablet'
|
13460 |
+
models:
|
13461 |
+
- regex: '(CW-Hi8-super)[;)/ ]'
|
13462 |
+
model: 'Hi8'
|
13463 |
+
- regex: 'CW-(Vi10) plus[;)/ ]'
|
13464 |
+
model: '$1 Plus'
|
13465 |
+
- regex: 'CW-(V88)-QUAD[;)/ ]'
|
13466 |
+
model: '$1 Quad'
|
13467 |
+
- regex: 'CW-(V9)-DUAL[;)/ ]'
|
13468 |
+
model: '$1 Dual'
|
13469 |
+
- regex: 'CW-(V17HD|VX8)-?(3G)[;)/ ]'
|
13470 |
+
model: '$1 $2'
|
13471 |
+
- regex: 'CW-(Hi10) pro[;)/ ]'
|
13472 |
+
model: '$1 Pro'
|
13473 |
+
- regex: 'CW-(Vi[78]|Hi12|V99|V88S)[;)/ ]'
|
13474 |
+
model: '$1'
|
13475 |
+
|
13476 |
+
# Bezkam
|
13477 |
+
Bezkam:
|
13478 |
+
regex: 'BEZKAM (BK-RAM2)[;)/ ]'
|
13479 |
+
device: 'smartphone'
|
13480 |
+
model: '$1'
|
13481 |
+
|
13482 |
+
# NG Optics
|
13483 |
+
'NG Optics':
|
13484 |
+
regex: '(NG3128HD)[;)/ ]'
|
13485 |
+
device: 'tv'
|
13486 |
+
model: '$1'
|
13487 |
+
|
13488 |
+
# KATV1
|
13489 |
+
KATV1:
|
13490 |
+
regex: '(KATV-01) PRO[;)/ ]'
|
13491 |
+
device: 'tv'
|
13492 |
+
model: '$1 Pro'
|
13493 |
+
|
13494 |
+
# Ghong
|
13495 |
+
Ghong:
|
13496 |
+
regex: 'GHONG(V10)[;)/ ]'
|
13497 |
+
device: 'smartphone'
|
13498 |
+
model: '$1'
|
13499 |
+
|
13500 |
+
# Xoro
|
13501 |
+
Xoro:
|
13502 |
+
regex: 'TelePAD(795|731|1032|10A3|7A3)|Era 2X[;)/ ]'
|
13503 |
+
device: 'tablet'
|
13504 |
+
models:
|
13505 |
+
- regex: 'TelePAD(7|10)A3 4G[;)/ ]'
|
13506 |
+
model: 'TelePad $1 A3 4G'
|
13507 |
+
- regex: 'TelePAD(795|731|1032)[;)/ ]'
|
13508 |
+
model: 'TelePad $1'
|
13509 |
+
- regex: '(Era 2X)[;)/ ]'
|
13510 |
+
model: '$1'
|
13511 |
+
device: 'smartphone'
|
13512 |
+
|
13513 |
+
# Vinga
|
13514 |
+
Vinga:
|
13515 |
+
regex: 'VMP-(021-82|041-162|011-81)[);/ ]'
|
13516 |
+
device: 'tv'
|
13517 |
+
models:
|
13518 |
+
- regex: 'VMP-021-82'
|
13519 |
+
model: '021'
|
13520 |
+
- regex: 'VMP-041-162'
|
13521 |
+
model: '041'
|
13522 |
+
- regex: 'VMP-011-81'
|
13523 |
+
model: '011'
|
13524 |
+
|
13525 |
+
# Nuvo
|
13526 |
+
Nuvo:
|
13527 |
+
regex: 'Nuvo[_ ](NS35|Blue ND40|Green[_ ]ND[_ ]45)[);/ ]'
|
13528 |
+
device: 'smartphone'
|
13529 |
+
models:
|
13530 |
+
- regex: 'Nuvo[_ ](NS35)[);/ ]'
|
13531 |
+
model: '$1'
|
13532 |
+
- regex: 'Blue (ND40)[);/ ]'
|
13533 |
+
model: '$1'
|
13534 |
+
- regex: 'Green[_ ]ND[_ ]45[);/ ]'
|
13535 |
+
model: 'ND45'
|
13536 |
+
|
13537 |
+
# Sunvell
|
13538 |
+
Sunvell:
|
13539 |
+
regex: 'T95ZPLUS[);/ ]'
|
13540 |
+
device: 'tv'
|
13541 |
+
model: 'T95Z Plus'
|
13542 |
+
|
13543 |
+
# AllDocube
|
13544 |
+
AllDocube:
|
13545 |
+
regex: 'T1001XS[);/ ]'
|
13546 |
+
device: 'tablet'
|
13547 |
+
model: 'M5XS'
|
13548 |
+
|
13549 |
+
# Ugoos
|
13550 |
+
Ugoos:
|
13551 |
+
regex: 'UGOOS-AM6[);/ ]'
|
13552 |
+
device: 'tv'
|
13553 |
+
model: 'AM6'
|
13554 |
+
|
13555 |
+
# Yxtel
|
13556 |
+
Yxtel:
|
13557 |
+
regex: 'YXTEL_([HU]1|U3)[);/ ]'
|
13558 |
+
device: 'smartphone'
|
13559 |
+
model: '$1'
|
13560 |
+
|
13561 |
+
# Proline
|
13562 |
+
Proline:
|
13563 |
+
regex: '(H10882M-TN)[);/ ]'
|
13564 |
+
device: 'tablet'
|
13565 |
+
model: '$1'
|
13566 |
+
|
13567 |
+
# Yota
|
13568 |
+
Yota:
|
13569 |
+
regex: '(YD20[16]|YOTA 3[+])[);/ ]'
|
13570 |
+
device: 'smartphone'
|
13571 |
+
models:
|
13572 |
+
- regex: 'YD20[16][);/ ]'
|
13573 |
+
model: 'Phone 2'
|
13574 |
+
- regex: 'YOTA 3[+][);/ ]'
|
13575 |
+
model: 'Phone 3 Plus'
|
13576 |
+
|
13577 |
+
# Mystery
|
13578 |
+
Mystery:
|
13579 |
+
regex: '(MYSTERY|MID-(?:123G|72[12]|7[01348]3G|753G|833G))[);/ ]'
|
13580 |
+
device: 'tablet'
|
13581 |
+
models:
|
13582 |
+
- regex: 'MID-(123G|72[12]|7[01348]3G|753G|833G)[);/ ]'
|
13583 |
+
model: 'MID-$1'
|
13584 |
+
|
13585 |
+
# Ritzviva
|
13586 |
+
Ritzviva:
|
13587 |
+
regex: '(RITZVIVA[_ ]S500C)[);/ ]'
|
13588 |
+
device: 'smartphone'
|
13589 |
+
model: 'S500C'
|
13590 |
+
|
13591 |
+
# DeWalt
|
13592 |
+
DeWalt:
|
13593 |
+
regex: 'DeWalt (MD501)[);/ ]'
|
13594 |
+
device: 'smartphone'
|
13595 |
+
model: '$1'
|
13596 |
+
|
13597 |
+
# Runbo
|
13598 |
+
Runbo:
|
13599 |
+
regex: 'Runbo'
|
13600 |
+
device: 'smartphone'
|
13601 |
+
models:
|
13602 |
+
- regex: 'Runbo[ _-]?(X5-W|F1 Plus|F1-TT|F1-EN|F1|TT|Q5-S|X5-King)[);/ ]'
|
13603 |
+
model: '$1'
|
13604 |
+
|
13605 |
+
# NewsMy
|
13606 |
+
NewsMy:
|
13607 |
+
regex: '(CarPad-(?:II|III)-P)[);/ ]'
|
13608 |
+
device: 'car browser'
|
13609 |
+
model: '$1'
|
13610 |
+
|
13611 |
+
# Daewoo
|
13612 |
+
Daewoo:
|
13613 |
+
regex: 'Daewoo'
|
13614 |
+
device: 'tv'
|
13615 |
+
models:
|
13616 |
+
- regex: 'Daewoo (Android TV 638)[);/ ]'
|
13617 |
+
model: '$1'
|
13618 |
+
|
13619 |
+
# Vesta
|
13620 |
+
Vesta:
|
13621 |
+
regex: 'VESTA32LD86[);/ ]'
|
13622 |
+
device: 'tv'
|
13623 |
+
model: 'SmartT V2.0 32LD86S'
|
13624 |
+
|
13625 |
+
# Spectrum
|
13626 |
+
Spectrum:
|
13627 |
+
regex: '(CARBONO_5|CUARZO_6|DIAMANTE_5|VULCANO_55)[);/ ]'
|
13628 |
+
device: 'smartphone'
|
13629 |
+
models:
|
13630 |
+
- regex: 'VULCANO_55[);/ ]'
|
13631 |
+
model: 'Vulcano 5.5"'
|
13632 |
+
- regex: 'CARBONO_5[);/ ]'
|
13633 |
+
model: 'Carbono 5.0"'
|
13634 |
+
- regex: 'CUARZO_6[);/ ]'
|
13635 |
+
model: 'Cuarzo 6.0"'
|
13636 |
+
- regex: 'DIAMANTE_5[);/ ]'
|
13637 |
+
model: 'Diamante 5.0"'
|
13638 |
+
|
13639 |
+
# Kivi
|
13640 |
+
Kivi:
|
13641 |
+
regex: '(4[39]UP50GU|40UR50GU|32HR55GU|55UP50GU)[);/ ]'
|
13642 |
+
device: 'tv'
|
13643 |
+
model: '$1'
|
13644 |
+
|
13645 |
+
# Divisat
|
13646 |
+
Divisat:
|
13647 |
+
regex: '(Divisat)[);/ ]'
|
13648 |
+
device: 'tv'
|
13649 |
+
models:
|
13650 |
+
- regex: '(J-Link)[);/ ]'
|
13651 |
+
model: '$1'
|
13652 |
+
|
13653 |
+
# Kanji
|
13654 |
+
Kanji:
|
13655 |
+
regex: 'KJ-(OB03|YUBI)[);/ ]'
|
13656 |
+
device: 'tablet'
|
13657 |
+
models:
|
13658 |
+
- regex: 'KJ-OB03[);/ ]'
|
13659 |
+
model: 'Cata 7'
|
13660 |
+
- regex: 'KJ-YUBI[);/ ]'
|
13661 |
+
model: 'Yubi 3G'
|
13662 |
+
|
13663 |
+
#Kaiomy
|
13664 |
+
Kaiomy:
|
13665 |
+
regex: 'KaiCloud[ ]?(7[48]4|942)[);/ ]'
|
13666 |
+
device: 'tablet'
|
13667 |
+
model: 'KaiCloud $1'
|
13668 |
+
|
13669 |
+
# National
|
13670 |
+
National:
|
13671 |
+
regex: '(NX-32THS100)[);/ ]'
|
13672 |
+
device: 'tv'
|
13673 |
+
model: '$1'
|
13674 |
+
|
13675 |
+
# Vsun
|
13676 |
+
Vsun:
|
13677 |
+
regex: 'VSUN (ILLUSION|RACE|V9)[);/ ]'
|
13678 |
+
device: 'smartphone'
|
13679 |
+
models:
|
13680 |
+
- regex: 'ILLUSION[);/ ]'
|
13681 |
+
model: 'Illusion'
|
13682 |
+
- regex: 'RACE[);/ ]'
|
13683 |
+
model: 'Race'
|
13684 |
+
- regex: '(V9)[);/ ]'
|
13685 |
+
model: '$1'
|
13686 |
+
|
13687 |
+
# Shift Phones
|
13688 |
+
Shift Phones:
|
13689 |
+
regex: '(SHIFT6m)[);/ ]'
|
13690 |
+
device: 'smartphone'
|
13691 |
+
model: '$1'
|
13692 |
+
|
13693 |
+
# RugGear
|
13694 |
+
RugGear:
|
13695 |
+
regex: '(RG702)[);/ ]'
|
13696 |
+
device: 'smartphone'
|
13697 |
+
model: '$1'
|
13698 |
+
|
13699 |
+
# Aligator
|
13700 |
+
Aligator:
|
13701 |
+
regex: 'ALIGATOR[);/ ]'
|
13702 |
+
device: 'smartphone'
|
13703 |
+
models:
|
13704 |
+
- regex: 'ALIGATOR (S50(?:65|70))[);/ ]'
|
13705 |
+
model: '$1'
|
13706 |
+
|
13707 |
+
# Maxcom
|
13708 |
+
Maxcom:
|
13709 |
+
regex: '(MS(?:45[036]|505|514)|MS457(?:PLUS)?)[);/ ]'
|
13710 |
+
device: 'smartphone'
|
13711 |
+
models:
|
13712 |
+
- regex: '(MS457)PLUS[);/ ]'
|
13713 |
+
model: '$1 Plus'
|
13714 |
+
- regex: 'MS(45[0367]|505|514|)[);/ ]'
|
13715 |
+
model: 'MS$1'
|
13716 |
+
|
13717 |
+
# Luna
|
13718 |
+
Luna:
|
13719 |
+
regex: 'LUNA[ _](V55|G60)[);/ ]'
|
13720 |
+
device: 'smartphone'
|
13721 |
model: '$1'
|
app/vendor/piwik/device-detector/regexes/device/portable_media_player.yml
CHANGED
@@ -56,4 +56,4 @@ Samsung:
|
|
56 |
- regex: 'YP-G50'
|
57 |
model: 'Galaxy Player 50'
|
58 |
- regex: 'YP-GB70D'
|
59 |
-
model: 'Galaxy Player 70 Plus'
|
56 |
- regex: 'YP-G50'
|
57 |
model: 'Galaxy Player 50'
|
58 |
- regex: 'YP-GB70D'
|
59 |
+
model: 'Galaxy Player 70 Plus'
|
assets/css/admin-style.css
CHANGED
@@ -87,6 +87,10 @@ ol.matomo-list {
|
|
87 |
font-weight: bold;
|
88 |
}
|
89 |
|
|
|
|
|
|
|
|
|
90 |
.postbox .table .widefat.matomo-table {
|
91 |
border: 0;
|
92 |
}
|
87 |
font-weight: bold;
|
88 |
}
|
89 |
|
90 |
+
.matomo-dashboard-container .postbox-container {
|
91 |
+
min-width: 40%;
|
92 |
+
}
|
93 |
+
|
94 |
.postbox .table .widefat.matomo-table {
|
95 |
border: 0;
|
96 |
}
|
assets/js/asset_manager_core_js.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
/* Matomo Javascript - cb=
|
2 |
|
3 |
/*! jQuery Browser - v0.1.0 - 3/23/2012
|
4 |
* https://github.com/jquery/jquery-browser
|
@@ -872,7 +872,7 @@ return result;},getValuesFromUrl:function(url){var searchString=this._removeHash
|
|
872 |
hashStr=hashStr.split('#')[0];return broadcast.getParamValue(param,hashStr);},getParamValue:function(param,url){var lookFor=param+'=';var startStr=url.indexOf(lookFor);if(startStr>=0){return getSingleValue(startStr,url);}else{url=decodeURIComponent(url);lookFor=param+'[]=';startStr=url.indexOf(lookFor);if(startStr>=0){var result=[getSingleValue(startStr)];while((startStr=url.indexOf(lookFor,startStr+1))!==-1){result.push(getSingleValue(startStr));}
|
873 |
return result;}else{return'';}}
|
874 |
function getSingleValue(startPos){var endStr=url.indexOf("&",startPos);if(endStr===-1){endStr=url.length;}
|
875 |
-
var value=url.substring(startPos+lookFor.length,endStr);if(param!='segment'){value=value.replace(/[^_%~\*\+\-\<\>!@\$\.()=,;0-9a-zA-Z]/gi,'');}
|
876 |
return value;}},getHash:function(){return broadcast.getHashFromUrl().replace(/^#/,'').split('#')[0];},_removeHashFromUrl:function(url){var searchString='';if(url){var urlParts=url.split('#');searchString=urlParts[0];}else{searchString=window.location.search;}
|
877 |
return searchString;}};
|
878 |
/*!
|
@@ -1791,7 +1791,7 @@ if('toast'==scope.type){addToastEvent();}
|
|
1791 |
if(!scope.noclear){addCloseEvent();}
|
1792 |
function addToastEvent(){$timeout(function(){element.fadeOut('slow',function(){element.remove();});},scope.toastLength);}
|
1793 |
function addCloseEvent(){element.on('click','.close',function(event){if(event&&event.delegateTarget){angular.element(event.delegateTarget).remove();}});}
|
1794 |
-
function closeExistingNotificationHavingSameIdIfNeeded(id,notificationElement){var existingNode=angular.element('[notification-id='+id+']').not(notificationElement);if(existingNode&&existingNode.length){existingNode.remove();}}}};}})();
|
1795 |
/*!
|
1796 |
* Piwik - free/libre analytics platform
|
1797 |
*
|
@@ -3680,7 +3680,7 @@ return instance;}});})();
|
|
3680 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
3681 |
*/
|
3682 |
(function(){angular.module('piwikApp').directive('piwikLiveWidgetRefresh',piwikLiveWidgetRefresh);piwikLiveWidgetRefresh.$inject=['piwik','$timeout'];function piwikLiveWidgetRefresh(piwik,$timeout){return{restrict:'A',scope:{liveRefreshAfterMs:'@'},compile:function(element,attrs){return function(scope,element,attrs){$timeout(function(){var segment=broadcast.getValueFromHash('segment');if(!segment){segment=broadcast.getValueFromUrl('segment');}
|
3683 |
-
$(element).find('#visitsLive').liveWidget({interval:scope.liveRefreshAfterMs,onUpdate:function(){var ajaxRequest=new ajaxHelper();ajaxRequest.setFormat('html');ajaxRequest.addParams({module:'Live',action:'ajaxTotalVisitors',segment:segment},'GET');ajaxRequest.setCallback(function(r){$(element).find("#visitsTotal").
|
3684 |
/*!
|
3685 |
* Piwik - free/libre analytics platform
|
3686 |
*
|
1 |
+
/* Matomo Javascript - cb=37addcf7ea70a383f0f9ad805a588fe5*/
|
2 |
|
3 |
/*! jQuery Browser - v0.1.0 - 3/23/2012
|
4 |
* https://github.com/jquery/jquery-browser
|
872 |
hashStr=hashStr.split('#')[0];return broadcast.getParamValue(param,hashStr);},getParamValue:function(param,url){var lookFor=param+'=';var startStr=url.indexOf(lookFor);if(startStr>=0){return getSingleValue(startStr,url);}else{url=decodeURIComponent(url);lookFor=param+'[]=';startStr=url.indexOf(lookFor);if(startStr>=0){var result=[getSingleValue(startStr)];while((startStr=url.indexOf(lookFor,startStr+1))!==-1){result.push(getSingleValue(startStr));}
|
873 |
return result;}else{return'';}}
|
874 |
function getSingleValue(startPos){var endStr=url.indexOf("&",startPos);if(endStr===-1){endStr=url.length;}
|
875 |
+
var value=url.substring(startPos+lookFor.length,endStr);if(param!='segment'&¶m!='popover'&¶m!='compareSegments'){value=value.replace(/[^_%~\*\+\-\<\>!@\$\.()=,;0-9a-zA-Z]/gi,'');}
|
876 |
return value;}},getHash:function(){return broadcast.getHashFromUrl().replace(/^#/,'').split('#')[0];},_removeHashFromUrl:function(url){var searchString='';if(url){var urlParts=url.split('#');searchString=urlParts[0];}else{searchString=window.location.search;}
|
877 |
return searchString;}};
|
878 |
/*!
|
1791 |
if(!scope.noclear){addCloseEvent();}
|
1792 |
function addToastEvent(){$timeout(function(){element.fadeOut('slow',function(){element.remove();});},scope.toastLength);}
|
1793 |
function addCloseEvent(){element.on('click','.close',function(event){if(event&&event.delegateTarget){angular.element(event.delegateTarget).remove();}});}
|
1794 |
+
function closeExistingNotificationHavingSameIdIfNeeded(id,notificationElement){var notificationStillExists=!!notificationElement.parents('body').length;var existingNode=angular.element('[notification-id='+id+']').not(notificationElement);if(notificationStillExists&&existingNode&&existingNode.length){existingNode.remove();}}}};}})();
|
1795 |
/*!
|
1796 |
* Piwik - free/libre analytics platform
|
1797 |
*
|
3680 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
3681 |
*/
|
3682 |
(function(){angular.module('piwikApp').directive('piwikLiveWidgetRefresh',piwikLiveWidgetRefresh);piwikLiveWidgetRefresh.$inject=['piwik','$timeout'];function piwikLiveWidgetRefresh(piwik,$timeout){return{restrict:'A',scope:{liveRefreshAfterMs:'@'},compile:function(element,attrs){return function(scope,element,attrs){$timeout(function(){var segment=broadcast.getValueFromHash('segment');if(!segment){segment=broadcast.getValueFromUrl('segment');}
|
3683 |
+
$(element).find('#visitsLive').liveWidget({interval:scope.liveRefreshAfterMs,onUpdate:function(){var ajaxRequest=new ajaxHelper();ajaxRequest.setFormat('html');ajaxRequest.addParams({module:'Live',action:'ajaxTotalVisitors',segment:segment},'GET');ajaxRequest.setCallback(function(r){$(element).find("#visitsTotal").replaceWith(r);});ajaxRequest.send();},maxRows:10,fadeInSpeed:600,dataUrlParams:{module:'Live',action:'getLastVisitsStart',segment:segment}});});};}};}})();
|
3684 |
/*!
|
3685 |
* Piwik - free/libre analytics platform
|
3686 |
*
|
classes/WpMatomo/Admin/Marketplace.php
CHANGED
@@ -26,8 +26,21 @@ class Marketplace {
|
|
26 |
$this->settings = $settings;
|
27 |
}
|
28 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
public function show() {
|
30 |
$settings = $this->settings;
|
|
|
|
|
|
|
31 |
include dirname( __FILE__ ) . '/views/marketplace.php';
|
32 |
}
|
33 |
|
26 |
$this->settings = $settings;
|
27 |
}
|
28 |
|
29 |
+
private function show_premium_bundle_offer() {
|
30 |
+
if (get_option('matomo_marketplace_license_key')) {
|
31 |
+
return false; // already has features
|
32 |
+
}
|
33 |
+
if (is_plugin_active('HeatmapSessionRecording/HeatmapSessionRecording.php')) {
|
34 |
+
return false; // already has features
|
35 |
+
}
|
36 |
+
return true;
|
37 |
+
}
|
38 |
+
|
39 |
public function show() {
|
40 |
$settings = $this->settings;
|
41 |
+
|
42 |
+
$matomo_show_offer = $this->show_premium_bundle_offer();
|
43 |
+
|
44 |
include dirname( __FILE__ ) . '/views/marketplace.php';
|
45 |
}
|
46 |
|
classes/WpMatomo/Admin/SystemReport.php
CHANGED
@@ -10,11 +10,13 @@
|
|
10 |
namespace WpMatomo\Admin;
|
11 |
|
12 |
use Piwik\CliMulti;
|
|
|
13 |
use Piwik\Container\StaticContainer;
|
14 |
use Piwik\Filesystem;
|
15 |
use Piwik\MetricsFormatter;
|
16 |
use Piwik\Plugins\Diagnostics\Diagnostic\DiagnosticResult;
|
17 |
use Piwik\Plugins\Diagnostics\DiagnosticService;
|
|
|
18 |
use WpMatomo\Bootstrap;
|
19 |
use WpMatomo\Capabilities;
|
20 |
use WpMatomo\Logger;
|
@@ -262,11 +264,10 @@ class SystemReport {
|
|
262 |
);
|
263 |
|
264 |
$paths = new Paths();
|
265 |
-
$
|
266 |
-
$path_config_file = $upload_dir . '/' . MATOMO_CONFIG_PATH;
|
267 |
$rows = $this->check_file_exists_and_writable( $rows, $path_config_file, 'Config', true );
|
268 |
|
269 |
-
$path_tracker_file = $
|
270 |
$rows = $this->check_file_exists_and_writable( $rows, $path_tracker_file, 'JS Tracker', false );
|
271 |
|
272 |
$rows[] = array(
|
@@ -432,6 +433,25 @@ class SystemReport {
|
|
432 |
'comment' => '',
|
433 |
);
|
434 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
435 |
$num_days_check_visits = 5;
|
436 |
$had_visits = $this->had_visits_in_last_days($num_days_check_visits);
|
437 |
if ($had_visits === false || $had_visits === true) {
|
@@ -820,6 +840,14 @@ class SystemReport {
|
|
820 |
'value' => $_SERVER['HTTP_USER_AGENT'],
|
821 |
);
|
822 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
823 |
|
824 |
return $rows;
|
825 |
}
|
10 |
namespace WpMatomo\Admin;
|
11 |
|
12 |
use Piwik\CliMulti;
|
13 |
+
use Piwik\Common;
|
14 |
use Piwik\Container\StaticContainer;
|
15 |
use Piwik\Filesystem;
|
16 |
use Piwik\MetricsFormatter;
|
17 |
use Piwik\Plugins\Diagnostics\Diagnostic\DiagnosticResult;
|
18 |
use Piwik\Plugins\Diagnostics\DiagnosticService;
|
19 |
+
use Piwik\Plugins\UserCountry\LocationProvider;
|
20 |
use WpMatomo\Bootstrap;
|
21 |
use WpMatomo\Capabilities;
|
22 |
use WpMatomo\Logger;
|
264 |
);
|
265 |
|
266 |
$paths = new Paths();
|
267 |
+
$path_config_file = $paths->get_config_ini_path();
|
|
|
268 |
$rows = $this->check_file_exists_and_writable( $rows, $path_config_file, 'Config', true );
|
269 |
|
270 |
+
$path_tracker_file = $paths->get_matomo_js_upload_path();
|
271 |
$rows = $this->check_file_exists_and_writable( $rows, $path_tracker_file, 'JS Tracker', false );
|
272 |
|
273 |
$rows[] = array(
|
433 |
'comment' => '',
|
434 |
);
|
435 |
|
436 |
+
$location_provider = LocationProvider::getCurrentProvider();
|
437 |
+
if ($location_provider) {
|
438 |
+
$rows[] = array(
|
439 |
+
'name' => 'Location provider ID',
|
440 |
+
'value' => $location_provider->getId(),
|
441 |
+
'comment' => '',
|
442 |
+
);
|
443 |
+
$rows[] = array(
|
444 |
+
'name' => 'Location provider available',
|
445 |
+
'value' => $location_provider->isAvailable(),
|
446 |
+
'comment' => '',
|
447 |
+
);
|
448 |
+
$rows[] = array(
|
449 |
+
'name' => 'Location provider working',
|
450 |
+
'value' => $location_provider->isWorking(),
|
451 |
+
'comment' => '',
|
452 |
+
);
|
453 |
+
}
|
454 |
+
|
455 |
$num_days_check_visits = 5;
|
456 |
$had_visits = $this->had_visits_in_last_days($num_days_check_visits);
|
457 |
if ($had_visits === false || $had_visits === true) {
|
840 |
'value' => $_SERVER['HTTP_USER_AGENT'],
|
841 |
);
|
842 |
}
|
843 |
+
if (!\WpMatomo::is_safe_mode()) {
|
844 |
+
Bootstrap::do_bootstrap();
|
845 |
+
$rows[] = array(
|
846 |
+
'name' => 'Language',
|
847 |
+
'value' => Common::getBrowserLanguage()
|
848 |
+
);
|
849 |
+
}
|
850 |
+
|
851 |
|
852 |
return $rows;
|
853 |
}
|
classes/WpMatomo/Admin/TrackingSettings.php
CHANGED
@@ -81,6 +81,7 @@ class TrackingSettings implements AdminSettingsInterface {
|
|
81 |
'limit_cookies_session',
|
82 |
'limit_cookies_visitor',
|
83 |
'limit_cookies',
|
|
|
84 |
'disable_cookies',
|
85 |
'add_download_extensions',
|
86 |
'track_404',
|
81 |
'limit_cookies_session',
|
82 |
'limit_cookies_visitor',
|
83 |
'limit_cookies',
|
84 |
+
'force_post',
|
85 |
'disable_cookies',
|
86 |
'add_download_extensions',
|
87 |
'track_404',
|
classes/WpMatomo/Admin/views/marketplace.php
CHANGED
@@ -6,6 +6,7 @@
|
|
6 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
* @package matomo
|
8 |
*/
|
|
|
9 |
|
10 |
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
exit;
|
@@ -27,6 +28,13 @@ $matomo_extra_url_params = '&' . http_build_query(
|
|
27 |
<p><?php esc_html_e( 'Only super users can see this page', 'matomo' ); ?></p>
|
28 |
</div>
|
29 |
<?php } ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
|
31 |
<div id="icon-plugins" class="icon32"></div>
|
32 |
|
@@ -86,6 +94,13 @@ $matomo_extra_url_params = '&' . http_build_query(
|
|
86 |
'title' => 'Most popular premium features',
|
87 |
'features' =>
|
88 |
array(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
array(
|
90 |
'name' => 'Heatmap & Session Recording',
|
91 |
'description' => 'Truly understand your visitors by seeing where they click, hover, type and scroll. Replay their actions in a video and ultimately increase conversions.',
|
@@ -101,13 +116,6 @@ $matomo_extra_url_params = '&' . http_build_query(
|
|
101 |
'image' => '',
|
102 |
),
|
103 |
|
104 |
-
array(
|
105 |
-
'name' => 'Premium Bundle',
|
106 |
-
'description' => 'All premium features in one bundle, make the most out of your Matomo for WordPress and enjoy discounts of over 20%!',
|
107 |
-
'price' => '499EUR / 579USD',
|
108 |
-
'url' => 'https://plugins.matomo.org/WpPremiumBundle?wp=1',
|
109 |
-
'image' => '',
|
110 |
-
),
|
111 |
),
|
112 |
),
|
113 |
array(
|
@@ -175,6 +183,13 @@ $matomo_extra_url_params = '&' . http_build_query(
|
|
175 |
'url' => 'https://plugins.matomo.org/SearchEngineKeywordsPerformance?wp=1',
|
176 |
'image' => '',
|
177 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
/*
|
179 |
array(
|
180 |
'name' => 'Activity Log',
|
@@ -190,6 +205,20 @@ $matomo_extra_url_params = '&' . http_build_query(
|
|
190 |
echo '<h2>' . esc_html( $matomo_feature_section['title'] ) . '</h2>';
|
191 |
echo '<div class="wp-list-table widefat plugin-install"><div id="the-list">';
|
192 |
foreach ( $matomo_feature_section['features'] as $matomo_index => $matomo_feature ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
193 |
$matomo_style = '';
|
194 |
$matomo_is_3_columns = count( $matomo_feature_section['features'] ) === 3;
|
195 |
if ( $matomo_is_3_columns ) {
|
@@ -247,7 +276,7 @@ $matomo_extra_url_params = '&' . http_build_query(
|
|
247 |
<?php
|
248 |
if ( ! empty( $matomo_feature['price'] ) ) {
|
249 |
?>
|
250 |
-
|
251 |
<?php
|
252 |
} else {
|
253 |
?>
|
6 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
* @package matomo
|
8 |
*/
|
9 |
+
/** @var bool $matomo_show_offer */
|
10 |
|
11 |
if ( ! defined( 'ABSPATH' ) ) {
|
12 |
exit;
|
28 |
<p><?php esc_html_e( 'Only super users can see this page', 'matomo' ); ?></p>
|
29 |
</div>
|
30 |
<?php } ?>
|
31 |
+
<?php if ( $matomo_show_offer ) { ?>
|
32 |
+
<div class="notice notice-info">
|
33 |
+
<p>Limited time only: 300€ Off Matomo Premium Bundle. Now only 199€/year.
|
34 |
+
<a href="https://matomo.org/wp-premium-bundle/" target="_blank" rel="noreferrer noopener" class="button">Learn more</a></p>
|
35 |
+
<div style="clear:both;"></div>
|
36 |
+
</div>
|
37 |
+
<?php } ?>
|
38 |
|
39 |
<div id="icon-plugins" class="icon32"></div>
|
40 |
|
94 |
'title' => 'Most popular premium features',
|
95 |
'features' =>
|
96 |
array(
|
97 |
+
array(
|
98 |
+
'name' => 'Premium Bundle',
|
99 |
+
'description' => 'All premium features in one bundle, make the most out of your Matomo for WordPress and enjoy discounts of over 20%!',
|
100 |
+
'price' => '499EUR / 579USD',
|
101 |
+
'url' => 'https://plugins.matomo.org/WpPremiumBundle?wp=1',
|
102 |
+
'image' => '',
|
103 |
+
),
|
104 |
array(
|
105 |
'name' => 'Heatmap & Session Recording',
|
106 |
'description' => 'Truly understand your visitors by seeing where they click, hover, type and scroll. Replay their actions in a video and ultimately increase conversions.',
|
116 |
'image' => '',
|
117 |
),
|
118 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
),
|
120 |
),
|
121 |
array(
|
183 |
'url' => 'https://plugins.matomo.org/SearchEngineKeywordsPerformance?wp=1',
|
184 |
'image' => '',
|
185 |
),
|
186 |
+
array(
|
187 |
+
'name' => 'Paid Advertising Performance',
|
188 |
+
'description' => 'Analyse the success of your Google Ads campaigns directly in your Matomo. See what keywords and search queries are leading to clicks for your paid ads and bringing your business the highest ROI.',
|
189 |
+
'price' => '79EUR / 89USD',
|
190 |
+
'url' => 'https://plugins.matomo.org/PaidAdvertisingPerformance?wp=1',
|
191 |
+
'image' => '',
|
192 |
+
),
|
193 |
/*
|
194 |
array(
|
195 |
'name' => 'Activity Log',
|
205 |
echo '<h2>' . esc_html( $matomo_feature_section['title'] ) . '</h2>';
|
206 |
echo '<div class="wp-list-table widefat plugin-install"><div id="the-list">';
|
207 |
foreach ( $matomo_feature_section['features'] as $matomo_index => $matomo_feature ) {
|
208 |
+
if ($matomo_show_offer && $matomo_feature['name'] === 'Premium Bundle') {
|
209 |
+
?><div class="plugin-card" style="width: calc(33% - 8px);min-width:282px;max-width:350px;">
|
210 |
+
<div style="border: 6px dashed red;text-align: center">
|
211 |
+
<h2 style="font-size: 24px;">
|
212 |
+
<a href="https://matomo.org/wp-premium-bundle/" target="_blank" rel="noreferrer noopener"><span style="color: black;">Limited time!</span><br><br><span style="color:red">300€ Off Premium Bundle</span></a></h2>
|
213 |
+
<p>All premium features in one bundle.<br>
|
214 |
+
No risk 100% money back guarantee.<br><br>
|
215 |
+
<a class="button-primary" href="https://matomo.org/wp-premium-bundle/" target="_blank" rel="noreferrer noopener">Get it for only 199€/year</a>
|
216 |
+
<br>
|
217 |
+
</p>
|
218 |
+
</div>
|
219 |
+
</div><?php
|
220 |
+
continue;
|
221 |
+
}
|
222 |
$matomo_style = '';
|
223 |
$matomo_is_3_columns = count( $matomo_feature_section['features'] ) === 3;
|
224 |
if ( $matomo_is_3_columns ) {
|
276 |
<?php
|
277 |
if ( ! empty( $matomo_feature['price'] ) ) {
|
278 |
?>
|
279 |
+
<?php echo esc_html( $matomo_feature['price'] ); ?>
|
280 |
<?php
|
281 |
} else {
|
282 |
?>
|
classes/WpMatomo/Admin/views/summary.php
CHANGED
@@ -49,7 +49,7 @@ global $wp;
|
|
49 |
}
|
50 |
?>
|
51 |
|
52 |
-
<div id="dashboard-widgets" class="metabox-holder
|
53 |
<?php
|
54 |
$matomo_columns = array( 1, 0 );
|
55 |
foreach ( $matomo_columns as $matomo_column_index => $matomo_column_modulo ) {
|
49 |
}
|
50 |
?>
|
51 |
|
52 |
+
<div id="dashboard-widgets" class="metabox-holder has-right-sidebar matomo-dashboard-container">
|
53 |
<?php
|
54 |
$matomo_columns = array( 1, 0 );
|
55 |
foreach ( $matomo_columns as $matomo_column_index => $matomo_column_modulo ) {
|
classes/WpMatomo/Admin/views/tracking.php
CHANGED
@@ -158,6 +158,8 @@ if ( $was_updated ) {
|
|
158 |
|
159 |
$matomo_form->show_checkbox( 'track_crossdomain_linking', esc_html__( 'Enable cross domain linking', 'matomo' ), esc_html__( 'When enabled, it will make sure to use the same visitor ID for the same visitor across several domains. This works only when this feature is enabled because the visitor ID is stored in a cookie and cannot be read on the other domain by default. When this feature is enabled, it will append a URL parameter "pk_vid" that contains the visitor ID when a user clicks on a URL that belongs to one of your domains. For this feature to work, you also have to configure which domains should be treated as local in your Matomo website settings.', 'matomo' ), $matomo_is_not_tracking, $matomo_full_generated_tracking_group );
|
160 |
|
|
|
|
|
161 |
$matomo_form->show_checkbox( 'track_feed', esc_html__( 'Track RSS feeds', 'matomo' ), esc_html__( 'Enable to track posts in feeds via tracking pixel.', 'matomo' ), $matomo_is_not_tracking, $matomo_full_generated_tracking_group . ' matomo-track-option-manually matomo-track-option-tagmanager' );
|
162 |
|
163 |
$matomo_form->show_checkbox( 'track_feed_addcampaign', esc_html__( 'Track RSS feed links as campaign', 'matomo' ), esc_html__( 'This will add Matomo campaign parameters to the RSS feed links.', 'matomo' ) . ' ' . sprintf( esc_html__( 'See %1$sMatomo documentation%2$s.', 'matomo' ), '<a href="https://matomo.org/docs/tracking-campaigns/" target="_BLANK">', '</a>' ), $matomo_is_not_tracking, $matomo_full_generated_tracking_group . ' matomo-track-option-manually matomo-track-option-tagmanager', true, 'jQuery(\'tr.matomo-feed_campaign-option\').toggle(\'hidden\');' );
|
158 |
|
159 |
$matomo_form->show_checkbox( 'track_crossdomain_linking', esc_html__( 'Enable cross domain linking', 'matomo' ), esc_html__( 'When enabled, it will make sure to use the same visitor ID for the same visitor across several domains. This works only when this feature is enabled because the visitor ID is stored in a cookie and cannot be read on the other domain by default. When this feature is enabled, it will append a URL parameter "pk_vid" that contains the visitor ID when a user clicks on a URL that belongs to one of your domains. For this feature to work, you also have to configure which domains should be treated as local in your Matomo website settings.', 'matomo' ), $matomo_is_not_tracking, $matomo_full_generated_tracking_group );
|
160 |
|
161 |
+
$matomo_form->show_checkbox( 'force_post', esc_html__( 'Force POST requests', 'matomo' ), esc_html__( 'When enabled, Matomo will always use POST requests. This can be helpful should you experience for example HTTP 414 URI too long errors in your tracking code.', 'matomo' ), $matomo_is_not_tracking, $matomo_full_generated_tracking_group );
|
162 |
+
|
163 |
$matomo_form->show_checkbox( 'track_feed', esc_html__( 'Track RSS feeds', 'matomo' ), esc_html__( 'Enable to track posts in feeds via tracking pixel.', 'matomo' ), $matomo_is_not_tracking, $matomo_full_generated_tracking_group . ' matomo-track-option-manually matomo-track-option-tagmanager' );
|
164 |
|
165 |
$matomo_form->show_checkbox( 'track_feed_addcampaign', esc_html__( 'Track RSS feed links as campaign', 'matomo' ), esc_html__( 'This will add Matomo campaign parameters to the RSS feed links.', 'matomo' ) . ' ' . sprintf( esc_html__( 'See %1$sMatomo documentation%2$s.', 'matomo' ), '<a href="https://matomo.org/docs/tracking-campaigns/" target="_BLANK">', '</a>' ), $matomo_is_not_tracking, $matomo_full_generated_tracking_group . ' matomo-track-option-manually matomo-track-option-tagmanager', true, 'jQuery(\'tr.matomo-feed_campaign-option\').toggle(\'hidden\');' );
|
classes/WpMatomo/Db/WordPressTracker.php
CHANGED
@@ -180,12 +180,11 @@ class WordPress extends Mysqli {
|
|
180 |
if ( ! $this->activeTransaction === false ) {
|
181 |
return;
|
182 |
}
|
|
|
183 |
$wpdb->query( 'START TRANSACTION' );
|
184 |
-
|
185 |
-
$this->activeTransaction = uniqid();
|
186 |
|
187 |
-
|
188 |
-
}
|
189 |
}
|
190 |
|
191 |
/**
|
180 |
if ( ! $this->activeTransaction === false ) {
|
181 |
return;
|
182 |
}
|
183 |
+
|
184 |
$wpdb->query( 'START TRANSACTION' );
|
185 |
+
$this->activeTransaction = uniqid();
|
|
|
186 |
|
187 |
+
return $this->activeTransaction;
|
|
|
188 |
}
|
189 |
|
190 |
/**
|
classes/WpMatomo/Logger.php
CHANGED
@@ -74,7 +74,7 @@ class Logger {
|
|
74 |
if ( ! empty( $item['file'] ) ) {
|
75 |
$trace .= basename( $item['file'] ) . ':' . $item['line'] . '; ';
|
76 |
}
|
77 |
-
if ( $index >
|
78 |
continue;
|
79 |
}
|
80 |
}
|
74 |
if ( ! empty( $item['file'] ) ) {
|
75 |
$trace .= basename( $item['file'] ) . ':' . $item['line'] . '; ';
|
76 |
}
|
77 |
+
if ( $index > 8 ) {
|
78 |
continue;
|
79 |
}
|
80 |
}
|
classes/WpMatomo/Settings.php
CHANGED
@@ -76,6 +76,7 @@ class Settings {
|
|
76 |
'version_history' => array(),
|
77 |
'mail_history' => array(),
|
78 |
'disable_cookies' => false,
|
|
|
79 |
'limit_cookies' => false,
|
80 |
'limit_cookies_visitor' => 34186669, // Matomo default 13 months
|
81 |
'limit_cookies_session' => 1800, // Matomo default 30 minutes
|
76 |
'version_history' => array(),
|
77 |
'mail_history' => array(),
|
78 |
'disable_cookies' => false,
|
79 |
+
'force_post' => false,
|
80 |
'limit_cookies' => false,
|
81 |
'limit_cookies_visitor' => 34186669, // Matomo default 13 months
|
82 |
'limit_cookies_session' => 1800, // Matomo default 30 minutes
|
classes/WpMatomo/TrackingCode/TrackingCodeGenerator.php
CHANGED
@@ -258,6 +258,9 @@ g.type=\'text/javascript\'; g.async=true; g.defer=true; g.src="' . $container_ur
|
|
258 |
$options[] = '_paq.push(["setDomains", ' . wp_json_encode( $hosts ) . ']);';
|
259 |
}
|
260 |
}
|
|
|
|
|
|
|
261 |
if ( $this->settings->get_global_option( 'limit_cookies' ) ) {
|
262 |
$options[] = "_paq.push(['setVisitorCookieTimeout', " . wp_json_encode( $this->settings->get_global_option( 'limit_cookies_visitor' ) ) . ']);';
|
263 |
$options[] = "_paq.push(['setSessionCookieTimeout', " . wp_json_encode( $this->settings->get_global_option( 'limit_cookies_session' ) ) . ']);';
|
258 |
$options[] = '_paq.push(["setDomains", ' . wp_json_encode( $hosts ) . ']);';
|
259 |
}
|
260 |
}
|
261 |
+
if ( $this->settings->get_global_option( 'force_post' ) ) {
|
262 |
+
$options[] = "_paq.push(['setRequestMethod', 'POST']);";
|
263 |
+
}
|
264 |
if ( $this->settings->get_global_option( 'limit_cookies' ) ) {
|
265 |
$options[] = "_paq.push(['setVisitorCookieTimeout', " . wp_json_encode( $this->settings->get_global_option( 'limit_cookies_visitor' ) ) . ']);';
|
266 |
$options[] = "_paq.push(['setSessionCookieTimeout', " . wp_json_encode( $this->settings->get_global_option( 'limit_cookies_session' ) ) . ']);';
|
matomo.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Description: The #1 Google Analytics alternative that gives you full control over your data and protects the privacy for your users. Free, secure and open.
|
5 |
* Author: Matomo
|
6 |
* Author URI: https://matomo.org
|
7 |
-
* Version: 1.0.
|
8 |
* Domain Path: /languages
|
9 |
* WC requires at least: 2.4.0
|
10 |
* WC tested up to: 4.0.0
|
4 |
* Description: The #1 Google Analytics alternative that gives you full control over your data and protects the privacy for your users. Free, secure and open.
|
5 |
* Author: Matomo
|
6 |
* Author URI: https://matomo.org
|
7 |
+
* Version: 1.0.5
|
8 |
* Domain Path: /languages
|
9 |
* WC requires at least: 2.4.0
|
10 |
* WC tested up to: 4.0.0
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_i
|
|
4 |
Tags: matomo,piwik,analytics,statistics,stats,tracking,ecommerce
|
5 |
Requires at least: 4.8
|
6 |
Tested up to: 5.4
|
7 |
-
Stable tag: 1.0.
|
8 |
Requires PHP: 7.2
|
9 |
License: GPLv3 or later
|
10 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
@@ -163,17 +163,4 @@ Needing to know more? [Click here to view all of our FAQs on our website](https:
|
|
163 |
|
164 |
== Changelog ==
|
165 |
|
166 |
-
= 1.0.4 =
|
167 |
-
* Update Matomo core to 3.13.4
|
168 |
-
* Fix the website's timezone may be set to UTC instead of the WP timezone
|
169 |
-
* Improve compatibility with PHP 7.4 by fixing more notices
|
170 |
-
* Add a review link to the About page
|
171 |
-
* Add a newsletter signup possibility to the About page.
|
172 |
-
* Support MaxMind geolocation database
|
173 |
-
* Better support for hiding login URLs eg with WPS plugin
|
174 |
-
* Show header icon images
|
175 |
-
* Update GeoIP DB monthly instead of weekly
|
176 |
-
* Ask for a review every 90 days unless dismissed
|
177 |
-
* Possibility to configure proxy client header
|
178 |
-
|
179 |
[See changelog for all versions](https://github.com/matomo-org/wp-matomo/blob/develop/CHANGELOG.md).
|
4 |
Tags: matomo,piwik,analytics,statistics,stats,tracking,ecommerce
|
5 |
Requires at least: 4.8
|
6 |
Tested up to: 5.4
|
7 |
+
Stable tag: 1.0.5
|
8 |
Requires PHP: 7.2
|
9 |
License: GPLv3 or later
|
10 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
163 |
|
164 |
== Changelog ==
|
165 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
166 |
[See changelog for all versions](https://github.com/matomo-org/wp-matomo/blob/develop/CHANGELOG.md).
|