PDF rausgenommen
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\UserCountryMap\Categories;
|
||||
|
||||
use Piwik\Category\Subcategory;
|
||||
|
||||
class RealTimeMapSubcategory extends Subcategory
|
||||
{
|
||||
protected $categoryId = 'General_Visitors';
|
||||
protected $id = 'UserCountryMap_RealTimeMap';
|
||||
protected $order = 9;
|
||||
|
||||
}
|
331
msd2/tracking/piwik/plugins/UserCountryMap/Controller.php
Normal file
@ -0,0 +1,331 @@
|
||||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\UserCountryMap;
|
||||
|
||||
use Exception;
|
||||
use Piwik\API\Request;
|
||||
use Piwik\Common;
|
||||
use Piwik\Config;
|
||||
use Piwik\Container\StaticContainer;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugins\Goals\API as APIGoals;
|
||||
use Piwik\Site;
|
||||
use Piwik\Translation\Translator;
|
||||
use Piwik\View;
|
||||
|
||||
require_once PIWIK_INCLUDE_PATH . '/plugins/UserCountry/functions.php';
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class Controller extends \Piwik\Plugin\Controller
|
||||
{
|
||||
// By default plot up to the last 3 days of visitors on the map, for low traffic sites
|
||||
const REAL_TIME_WINDOW = 'last3';
|
||||
|
||||
/**
|
||||
* @var Translator
|
||||
*/
|
||||
private $translator;
|
||||
|
||||
public function __construct(Translator $translator)
|
||||
{
|
||||
$this->translator = $translator;
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
public function visitorMap($fetch = false, $segmentOverride = false)
|
||||
{
|
||||
$this->checkUserCountryPluginEnabled();
|
||||
|
||||
$this->checkSitePermission();
|
||||
Piwik::checkUserHasViewAccess($this->idSite);
|
||||
|
||||
$period = Common::getRequestVar('period');
|
||||
$date = Common::getRequestVar('date');
|
||||
|
||||
if (!empty($segmentOverride)) {
|
||||
$segment = $segmentOverride;
|
||||
} else {
|
||||
$segment = Request::getRawSegmentFromRequest();
|
||||
if (empty($segment)) {
|
||||
$segment = '';
|
||||
}
|
||||
}
|
||||
|
||||
$token_auth = Piwik::getCurrentUserTokenAuth();
|
||||
|
||||
$view = new View('@UserCountryMap/visitorMap');
|
||||
|
||||
// request visits summary
|
||||
$request = new Request(
|
||||
'method=VisitsSummary.get&format=PHP'
|
||||
. '&idSite=' . $this->idSite
|
||||
. '&period=' . $period
|
||||
. '&date=' . $date
|
||||
. '&segment=' . $segment
|
||||
. '&token_auth=' . $token_auth
|
||||
. '&filter_limit=-1'
|
||||
);
|
||||
$config = array();
|
||||
$config['visitsSummary'] = Common::safe_unserialize($request->process());
|
||||
$config['countryDataUrl'] = $this->_report('UserCountry', 'getCountry',
|
||||
$this->idSite, $period, $date, $token_auth, false, $segment);
|
||||
$config['regionDataUrl'] = $this->_report('UserCountry', 'getRegion',
|
||||
$this->idSite, $period, $date, $token_auth, true, $segment);
|
||||
$config['cityDataUrl'] = $this->_report('UserCountry', 'getCity',
|
||||
$this->idSite, $period, $date, $token_auth, true, $segment);
|
||||
$config['countrySummaryUrl'] = $this->getApiRequestUrl('VisitsSummary', 'get',
|
||||
$this->idSite, $period, $date, $token_auth, true, $segment);
|
||||
$view->defaultMetric = array_key_exists('nb_uniq_visitors', $config['visitsSummary']) ? 'nb_uniq_visitors' : 'nb_visits';
|
||||
|
||||
$noVisitTranslation = $this->translator->translate('UserCountryMap_NoVisit');
|
||||
// some translations containing metric number
|
||||
$translations = array(
|
||||
'nb_visits' => $this->translator->translate('General_NVisits'),
|
||||
'no_visit' => $noVisitTranslation,
|
||||
'nb_actions' => $this->translator->translate('VisitsSummary_NbActionsDescription'),
|
||||
'nb_actions_per_visit' => $this->translator->translate('VisitsSummary_NbActionsPerVisit'),
|
||||
'bounce_rate' => $this->translator->translate('VisitsSummary_NbVisitsBounced'),
|
||||
'avg_time_on_site' => $this->translator->translate('VisitsSummary_AverageVisitDuration'),
|
||||
'and_n_others' => $this->translator->translate('UserCountryMap_AndNOthers'),
|
||||
'nb_uniq_visitors' => $this->translator->translate('General_NUniqueVisitors'),
|
||||
'nb_users' => $this->translator->translate('VisitsSummary_NbUsers'),
|
||||
);
|
||||
|
||||
foreach ($translations as &$translation) {
|
||||
if (false === strpos($translation, '%s')
|
||||
&& $translation !== $noVisitTranslation) {
|
||||
$translation = '%s ' . $translation;
|
||||
}
|
||||
}
|
||||
|
||||
$translations['one_visit'] = $this->translator->translate('General_OneVisit');
|
||||
$translations['no_data'] = $this->translator->translate('CoreHome_ThereIsNoDataForThisReport');
|
||||
|
||||
$view->localeJSON = json_encode($translations);
|
||||
|
||||
$view->reqParamsJSON = $this->getEnrichedRequest($params = array(
|
||||
'period' => $period,
|
||||
'idSite' => $this->idSite,
|
||||
'date' => $date,
|
||||
'segment' => $segment,
|
||||
'token_auth' => $token_auth,
|
||||
'enable_filter_excludelowpop' => 1,
|
||||
'filter_excludelowpop_value' => -1
|
||||
));
|
||||
|
||||
$view->metrics = $config['metrics'] = $this->getMetrics($this->idSite, $period, $date, $token_auth);
|
||||
$config['svgBasePath'] = 'plugins/UserCountryMap/svg/';
|
||||
$config['mapCssPath'] = 'plugins/UserCountryMap/stylesheets/map.css';
|
||||
$view->config = json_encode($config);
|
||||
$view->noData = empty($config['visitsSummary']['nb_visits']);
|
||||
|
||||
$countriesByIso = array();
|
||||
$regionDataProvider = StaticContainer::get('Piwik\Intl\Data\Provider\RegionDataProvider');
|
||||
$countries = array_keys($regionDataProvider->getCountryList());
|
||||
|
||||
foreach ($countries AS $country) {
|
||||
$countriesByIso[strtoupper($country)] = Piwik::translate('Intl_Country_'.strtoupper($country));
|
||||
}
|
||||
|
||||
$view->countriesByIso = $countriesByIso;
|
||||
|
||||
$view->continents = array(
|
||||
'AF' => \Piwik\Plugins\UserCountry\continentTranslate('afr'),
|
||||
'AS' => \Piwik\Plugins\UserCountry\continentTranslate('asi'),
|
||||
'EU' => \Piwik\Plugins\UserCountry\continentTranslate('eur'),
|
||||
'NA' => \Piwik\Plugins\UserCountry\continentTranslate('amn'),
|
||||
'OC' => \Piwik\Plugins\UserCountry\continentTranslate('oce'),
|
||||
'SA' => \Piwik\Plugins\UserCountry\continentTranslate('ams')
|
||||
);
|
||||
|
||||
return $view->render();
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to build the report Visitor > Real time map
|
||||
*/
|
||||
public function realtimeWorldMap()
|
||||
{
|
||||
return $this->realtimeMap($standalone = true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $standalone When set to true, the Top controls will be hidden to provide better full screen view
|
||||
* @param bool $fetch
|
||||
* @param bool|string $segmentOverride
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function realtimeMap($standalone = false, $fetch = false, $segmentOverride = false)
|
||||
{
|
||||
$this->checkUserCountryPluginEnabled();
|
||||
|
||||
$this->checkSitePermission();
|
||||
Piwik::checkUserHasViewAccess($this->idSite);
|
||||
|
||||
$token_auth = Piwik::getCurrentUserTokenAuth();
|
||||
$view = new View('@UserCountryMap/realtimeMap');
|
||||
|
||||
$view->mapIsStandaloneNotWidget = !(bool) Common::getRequestVar('widget', $standalone, 'int');
|
||||
|
||||
$view->metrics = $this->getMetrics($this->idSite, 'range', self::REAL_TIME_WINDOW, $token_auth);
|
||||
$view->defaultMetric = 'nb_visits';
|
||||
$liveRefreshAfterMs = (int)Config::getInstance()->General['live_widget_refresh_after_seconds'] * 1000;
|
||||
|
||||
$goals = Request::processRequest('Goals.getGoals', ['idSite' => $this->idSite, 'filter_limit' => '-1'], $default = []);
|
||||
$site = new Site($this->idSite);
|
||||
$hasGoals = !empty($goals) || $site->isEcommerceEnabled();
|
||||
|
||||
// maximum number of visits to be displayed in the map
|
||||
$maxVisits = Common::getRequestVar('filter_limit', 100, 'int');
|
||||
|
||||
// some translations
|
||||
$locale = array(
|
||||
'nb_actions' => $this->translator->translate('VisitsSummary_NbActionsDescription'),
|
||||
'local_time' => $this->translator->translate('VisitTime_ColumnLocalTime'),
|
||||
'from' => $this->translator->translate('General_FromReferrer'),
|
||||
'seconds' => $this->translator->translate('Intl_Seconds'),
|
||||
'seconds_ago' => $this->translator->translate('UserCountryMap_SecondsAgo'),
|
||||
'minutes' => $this->translator->translate('Intl_Minutes'),
|
||||
'minutes_ago' => $this->translator->translate('UserCountryMap_MinutesAgo'),
|
||||
'hours' => $this->translator->translate('Intl_Hours'),
|
||||
'hours_ago' => $this->translator->translate('UserCountryMap_HoursAgo'),
|
||||
'days_ago' => $this->translator->translate('UserCountryMap_DaysAgo'),
|
||||
'actions' => $this->translator->translate('Transitions_NumPageviews'),
|
||||
'searches' => $this->translator->translate('UserCountryMap_Searches'),
|
||||
'goal_conversions' => $this->translator->translate('UserCountryMap_GoalConversions'),
|
||||
);
|
||||
|
||||
$segment = $segmentOverride ? : Request::getRawSegmentFromRequest() ? : '';
|
||||
$params = array(
|
||||
'period' => 'range',
|
||||
'idSite' => $this->idSite,
|
||||
'segment' => $segment,
|
||||
'token_auth' => $token_auth,
|
||||
);
|
||||
|
||||
$realtimeWindow = Common::getRequestVar('realtimeWindow', self::REAL_TIME_WINDOW, 'string');
|
||||
if ($realtimeWindow != 'false') { // handle special value
|
||||
$params['date'] = $realtimeWindow;
|
||||
}
|
||||
|
||||
$reqParams = $this->getEnrichedRequest($params, $encode = false);
|
||||
|
||||
$view->config = array(
|
||||
'metrics' => array(),
|
||||
'svgBasePath' => $view->piwikUrl . 'plugins/UserCountryMap/svg/',
|
||||
'liveRefreshAfterMs' => $liveRefreshAfterMs,
|
||||
'_' => $locale,
|
||||
'reqParams' => $reqParams,
|
||||
'siteHasGoals' => $hasGoals,
|
||||
'maxVisits' => $maxVisits,
|
||||
'changeVisitAlpha' => Common::getRequestVar('changeVisitAlpha', true, 'int'),
|
||||
'removeOldVisits' => Common::getRequestVar('removeOldVisits', true, 'int'),
|
||||
'showFooterMessage' => Common::getRequestVar('showFooterMessage', true, 'int'),
|
||||
'showDateTime' => Common::getRequestVar('showDateTime', true, 'int'),
|
||||
'doNotRefreshVisits' => Common::getRequestVar('doNotRefreshVisits', false, 'int'),
|
||||
'enableAnimation' => Common::getRequestVar('enableAnimation', true, 'int'),
|
||||
'forceNowValue' => Common::getRequestVar('forceNowValue', false, 'int')
|
||||
);
|
||||
|
||||
return $view->render();
|
||||
}
|
||||
|
||||
private function getEnrichedRequest($params, $encode = true)
|
||||
{
|
||||
$params['format'] = 'json';
|
||||
$params['showRawMetrics'] = 1;
|
||||
if (empty($params['segment'])) {
|
||||
$segment = Request::getRawSegmentFromRequest();
|
||||
if (!empty($segment)) {
|
||||
$params['segment'] = $segment;
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($params['segment'])) {
|
||||
$params['segment'] = urldecode($params['segment']);
|
||||
}
|
||||
|
||||
if ($encode) {
|
||||
$params = json_encode($params);
|
||||
}
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
private function checkUserCountryPluginEnabled()
|
||||
{
|
||||
if (!\Piwik\Plugin\Manager::getInstance()->isPluginActivated('UserCountry')) {
|
||||
throw new Exception($this->translator->translate('General_Required', 'Plugin UserCountry'));
|
||||
}
|
||||
}
|
||||
|
||||
private function getMetrics($idSite, $period, $date, $token_auth)
|
||||
{
|
||||
$request = new Request(
|
||||
'method=API.getMetadata&format=PHP'
|
||||
. '&apiModule=UserCountry&apiAction=getCountry'
|
||||
. '&idSite=' . $idSite
|
||||
. '&period=' . $period
|
||||
. '&date=' . $date
|
||||
. '&token_auth=' . $token_auth
|
||||
. '&filter_limit=-1'
|
||||
);
|
||||
$metaData = Common::safe_unserialize($request->process());
|
||||
|
||||
$metrics = array();
|
||||
if (!empty($metaData[0]['metrics']) && is_array($metaData[0]['metrics'])) {
|
||||
foreach ($metaData[0]['metrics'] as $id => $val) {
|
||||
// todo: should use SettingsPiwik::isUniqueVisitorsEnabled ?
|
||||
if (Common::getRequestVar('period') == 'day' || $id != 'nb_uniq_visitors') {
|
||||
$metrics[] = array($id, $val);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!empty($metaData[0]['processedMetrics']) && is_array($metaData[0]['processedMetrics'])) {
|
||||
foreach ($metaData[0]['processedMetrics'] as $id => $val) {
|
||||
$metrics[] = array($id, $val);
|
||||
}
|
||||
}
|
||||
return $metrics;
|
||||
}
|
||||
|
||||
private function getApiRequestUrl($module, $action, $idSite, $period, $date, $token_auth, $filter_by_country = false, $segmentOverride = false)
|
||||
{
|
||||
// use processed reports
|
||||
$url = "?module=" . $module
|
||||
. "&method=" . $module . "." . $action . "&format=JSON"
|
||||
. "&idSite=" . $idSite
|
||||
. "&period=" . $period
|
||||
. "&date=" . $date
|
||||
. "&token_auth=" . $token_auth
|
||||
. "&segment=" . ($segmentOverride ? : Request::getRawSegmentFromRequest())
|
||||
. "&enable_filter_excludelowpop=1"
|
||||
. "&showRawMetrics=1";
|
||||
|
||||
if ($filter_by_country) {
|
||||
$url .= "&filter_column=country"
|
||||
. "&filter_sort_column=nb_visits"
|
||||
. "&filter_limit=-1"
|
||||
. "&filter_pattern=";
|
||||
} else {
|
||||
$url .= "&filter_limit=-1";
|
||||
}
|
||||
return $url;
|
||||
}
|
||||
|
||||
private function _report($module, $action, $idSite, $period, $date, $token_auth, $filter_by_country = false, $segmentOverride = false)
|
||||
{
|
||||
return $this->getApiRequestUrl('API', 'getProcessedReport&apiModule=' . $module . '&apiAction=' . $action,
|
||||
$idSite, $period, $date, $token_auth, $filter_by_country, $segmentOverride);
|
||||
}
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\UserCountryMap;
|
||||
|
||||
use Piwik\FrontController;
|
||||
use Piwik\Piwik;
|
||||
|
||||
/**
|
||||
*/
|
||||
class UserCountryMap extends \Piwik\Plugin
|
||||
{
|
||||
public function postLoad()
|
||||
{
|
||||
Piwik::addAction('Template.leftColumnUserCountry', array('Piwik\Plugins\UserCountryMap\UserCountryMap', 'insertMapInLocationReport'));
|
||||
}
|
||||
|
||||
public static function insertMapInLocationReport(&$out)
|
||||
{
|
||||
$out = '<h2>' . Piwik::translate('UserCountryMap_VisitorMap') . '</h2>';
|
||||
$out .= FrontController::getInstance()->fetchDispatch('UserCountryMap', 'visitorMap');
|
||||
}
|
||||
|
||||
public function registerEvents()
|
||||
{
|
||||
$hooks = array(
|
||||
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
|
||||
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
|
||||
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys'
|
||||
);
|
||||
return $hooks;
|
||||
}
|
||||
|
||||
public function getJsFiles(&$jsFiles)
|
||||
{
|
||||
$jsFiles[] = "libs/bower_components/visibilityjs/lib/visibility.core.js";
|
||||
$jsFiles[] = "plugins/UserCountryMap/javascripts/vendor/raphael.min.js";
|
||||
$jsFiles[] = "plugins/UserCountryMap/javascripts/vendor/jquery.qtip.min.js";
|
||||
$jsFiles[] = "plugins/UserCountryMap/javascripts/vendor/kartograph.min.js";
|
||||
$jsFiles[] = "libs/bower_components/chroma-js/chroma.min.js";
|
||||
$jsFiles[] = "plugins/UserCountryMap/javascripts/visitor-map.js";
|
||||
$jsFiles[] = "plugins/UserCountryMap/javascripts/realtime-map.js";
|
||||
}
|
||||
|
||||
public function getStylesheetFiles(&$stylesheets)
|
||||
{
|
||||
$stylesheets[] = "plugins/UserCountryMap/stylesheets/visitor-map.less";
|
||||
$stylesheets[] = "plugins/UserCountryMap/stylesheets/realtime-map.less";
|
||||
}
|
||||
|
||||
public function getClientSideTranslationKeys(&$translationKeys)
|
||||
{
|
||||
$translationKeys[] = 'UserCountryMap_WithUnknownRegion';
|
||||
$translationKeys[] = 'UserCountryMap_WithUnknownCity';
|
||||
$translationKeys[] = 'General_UserId';
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\UserCountryMap\Widgets;
|
||||
|
||||
use Piwik\Widget\WidgetConfig;
|
||||
use Piwik\Plugin\Manager as PluginManager;
|
||||
|
||||
class GetRealtimeMap extends \Piwik\Widget\Widget
|
||||
{
|
||||
public static function configure(WidgetConfig $config)
|
||||
{
|
||||
$config->setCategoryId('General_Visitors');
|
||||
$config->setSubcategoryId('UserCountryMap_RealTimeMap');
|
||||
$config->setName('UserCountryMap_RealTimeMap');
|
||||
$config->setModule('UserCountryMap');
|
||||
$config->setAction('realtimeMap');
|
||||
$config->setIsWide();
|
||||
$config->setOrder(15);
|
||||
|
||||
if (!PluginManager::getInstance()->isPluginActivated('UserCountry')) {
|
||||
$config->disable();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\UserCountryMap\Widgets;
|
||||
|
||||
use Piwik\Widget\WidgetConfig;
|
||||
|
||||
class GetVisitorMap extends \Piwik\Widget\Widget
|
||||
{
|
||||
public static function configure(WidgetConfig $config)
|
||||
{
|
||||
$config->setCategoryId('General_Visitors');
|
||||
$config->setSubcategoryId('UserCountry_SubmenuLocations');
|
||||
$config->setName('UserCountryMap_VisitorMap');
|
||||
$config->setAction('visitorMap');
|
||||
$config->setOrder(1);
|
||||
}
|
||||
}
|
BIN
msd2/tracking/piwik/plugins/UserCountryMap/images/cities.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 308 B |
BIN
msd2/tracking/piwik/plugins/UserCountryMap/images/regions.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.3 KiB |
@ -0,0 +1,693 @@
|
||||
/*!
|
||||
* Matomo - free/libre analytics platform
|
||||
*
|
||||
* Real time visitors map
|
||||
* Using Kartograph.js http://kartograph.org/
|
||||
*
|
||||
* @link https://matomo.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*/
|
||||
|
||||
(function () {
|
||||
|
||||
var UIControl = require('piwik/UI').UIControl;
|
||||
|
||||
var RealtimeMap = window.UserCountryMap.RealtimeMap = function (element) {
|
||||
UIControl.call(this, element);
|
||||
this._init();
|
||||
this.run();
|
||||
};
|
||||
|
||||
RealtimeMap.initElements = function () {
|
||||
UIControl.initElements(this, '.RealTimeMap');
|
||||
};
|
||||
|
||||
$.extend(RealtimeMap.prototype, UIControl.prototype, {
|
||||
|
||||
_init: function () {
|
||||
var $element = this.$element;
|
||||
|
||||
this.config = JSON.parse($element.attr('data-config'));
|
||||
|
||||
// If the map is loaded from the menu, do a few tweaks to clean up the display
|
||||
if ($element.attr('data-standalone') == 1) {
|
||||
this._initStandaloneMap();
|
||||
}
|
||||
|
||||
// handle widgetry
|
||||
if ($('#dashboardWidgetsArea').length) {
|
||||
var $widgetContent = $element.closest('.widgetContent');
|
||||
|
||||
var self = this;
|
||||
$widgetContent.on('widget:maximise', function () {
|
||||
self.resize();
|
||||
}).on('widget:minimise', function () {
|
||||
self.resize();
|
||||
});
|
||||
}
|
||||
|
||||
// set unique ID for kartograph map div
|
||||
this.uniqueId = 'RealTimeMap_map-' + this._controlId;
|
||||
$('.RealTimeMap_map', $element).attr('id', this.uniqueId);
|
||||
|
||||
// create the map
|
||||
this.map = $K.map('#' + this.uniqueId);
|
||||
|
||||
$element.focus();
|
||||
},
|
||||
|
||||
_initStandaloneMap: function () {
|
||||
$('#periodString').hide();
|
||||
initTopControls();
|
||||
|
||||
var $rootScope = piwikHelper.getAngularDependency('$rootScope');
|
||||
$rootScope.$on('piwikPageChange', function () {
|
||||
var href = location.href;
|
||||
var clickedMenuIsNotMap = !href || (href.indexOf('module=UserCountryMap&action=realtimeWorldMap') == -1);
|
||||
if (clickedMenuIsNotMap) {
|
||||
$('#periodString').show();
|
||||
initTopControls();
|
||||
}
|
||||
});
|
||||
$('.realTimeMap_overlay').css('top', '0px');
|
||||
$('.realTimeMap_datetime').css('top', '20px');
|
||||
},
|
||||
|
||||
run: function () {
|
||||
var self = this,
|
||||
config = self.config,
|
||||
_ = config._,
|
||||
map = self.map,
|
||||
maxVisits = config.maxVisits || 100,
|
||||
changeVisitAlpha = typeof config.changeVisitAlpha === 'undefined' ? true : config.changeVisitAlpha,
|
||||
removeOldVisits = typeof config.removeOldVisits === 'undefined' ? true : config.removeOldVisits,
|
||||
doNotRefreshVisits = typeof config.doNotRefreshVisits === 'undefined' ? false : config.doNotRefreshVisits,
|
||||
enableAnimation = typeof config.enableAnimation === 'undefined' ? true : config.enableAnimation,
|
||||
forceNowValue = typeof config.forceNowValue === 'undefined' ? false : +config.forceNowValue,
|
||||
lastTimestamp = -1,
|
||||
lastVisits = [],
|
||||
visitSymbols,
|
||||
tokenAuth = '' + config.reqParams.token_auth,
|
||||
oldest,
|
||||
isFullscreenWidget = $('.widget').parent().get(0) == document.body,
|
||||
now,
|
||||
nextReqTimer,
|
||||
symbolFadeInTimer = [],
|
||||
colorMode = 'default',
|
||||
currentMap = 'world',
|
||||
yesterday = false,
|
||||
userHasZoomed = false,
|
||||
colorManager = piwik.ColorManager,
|
||||
colors = colorManager.getColors('realtime-map', ['white-bg', 'white-fill', 'black-bg', 'black-fill', 'visit-stroke',
|
||||
'website-referrer-color', 'direct-referrer-color', 'search-referrer-color',
|
||||
'live-widget-highlight', 'live-widget-unhighlight', 'symbol-animate-fill', 'region-stroke-color']),
|
||||
currentTheme = 'white',
|
||||
colorTheme = {
|
||||
white: {
|
||||
bg: colors['white-bg'],
|
||||
fill: colors['white-fill']
|
||||
},
|
||||
black: {
|
||||
bg: colors['black-bg'],
|
||||
fill: colors['black-fill']
|
||||
}
|
||||
},
|
||||
visitStrokeColor = colors['visit-stroke'],
|
||||
referrerColorWebsite = colors['referrer-color-website'],
|
||||
referrerColorDirect = colors['referrer-color-direct'],
|
||||
referrerColorSearch = colors['referrer-color-search'],
|
||||
liveWidgetHighlightColor = colors['live-widget-highlight'],
|
||||
liveWidgetUnhighlightColor = colors['live-widget-unhighlight'],
|
||||
symbolAnimateFill = colors['symbol-animate-fill']
|
||||
;
|
||||
|
||||
self.widget = $('#widgetRealTimeMaprealtimeMap').parent();
|
||||
|
||||
var preset = self.widget.dashboardWidget('getWidgetObject').parameters;
|
||||
if (preset) {
|
||||
currentTheme = preset.colorTheme;
|
||||
colorMode = preset.colorMode;
|
||||
currentMap = preset.lastMap;
|
||||
}
|
||||
|
||||
/*
|
||||
* returns the parameters for API calls, extended from
|
||||
* self.reqParams which is set in template
|
||||
*/
|
||||
function _reportParams(firstRun) {
|
||||
return $.extend(config.reqParams, {
|
||||
module: 'API',
|
||||
method: 'Live.getLastVisitsDetails',
|
||||
filter_limit: maxVisits,
|
||||
showColumns: ['latitude', 'longitude', 'actions', 'lastActionTimestamp',
|
||||
'visitLocalTime', 'city', 'country', 'countryCode', 'referrerType', 'referrerName',
|
||||
'referrerTypeName', 'browserIcon', 'operatingSystemIcon', 'deviceType', 'deviceModel',
|
||||
'countryFlag', 'idVisit', 'actionDetails', 'continentCode',
|
||||
'actions', 'searches', 'goalConversions', 'visitorId', 'userId'].join(','),
|
||||
minTimestamp: firstRun ? 0 : lastTimestamp
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
* wrapper around jQuery.ajax, moves token_auth parameter
|
||||
* to POST data while keeping other parameters as GET
|
||||
*/
|
||||
function ajax(params) {
|
||||
delete params['token_auth'];
|
||||
return $.ajax({
|
||||
url: 'index.php?' + $.param(params),
|
||||
dataType: 'json',
|
||||
data: { token_auth: tokenAuth },
|
||||
type: 'POST'
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
* updateMap is called by renderCountryMap() and renderWorldMap()
|
||||
*/
|
||||
function _updateMap(svgUrl, callback) {
|
||||
if (svgUrl === undefined) return;
|
||||
map.loadMap(config.svgBasePath + svgUrl, function () {
|
||||
map.clear();
|
||||
self.resize();
|
||||
callback();
|
||||
$('.ui-tooltip').remove(); // remove all existing tooltips
|
||||
}, { padding: -3});
|
||||
}
|
||||
|
||||
/*
|
||||
* to ensure that onResize is not called a hundred times
|
||||
* while resizing the browser window, this functions
|
||||
* makes sure to only call onResize at the end
|
||||
*/
|
||||
function onResizeLazy() {
|
||||
clearTimeout(self._resizeTimer);
|
||||
self._resizeTimer = setTimeout(self.resize.bind(self), 300);
|
||||
}
|
||||
|
||||
/*
|
||||
* returns value betwddn 0..1, where 1 means that the
|
||||
* visit is fresh, and 0 means the visit is almost gone
|
||||
* from the map
|
||||
*/
|
||||
function age(r) {
|
||||
var nowSecs = Math.floor(now);
|
||||
var o = (r.lastActionTimestamp - oldest) / (nowSecs - oldest);
|
||||
return Math.min(1, Math.max(0, o));
|
||||
}
|
||||
|
||||
function relativeTime(ds) {
|
||||
var val = function (val) { return '<strong>' + Math.round(val) + '</strong>'; };
|
||||
return (ds < 90 ? _.seconds_ago.replace('%s', val(ds))
|
||||
: ds < 5400 ? _.minutes_ago.replace('%s', val(ds / 60))
|
||||
: ds < 129600 ? _.hours_ago.replace('%s', val(ds / 3600))
|
||||
: _.days_ago.replace('%s', val(ds / 86400)));
|
||||
}
|
||||
|
||||
/*
|
||||
* returns the content of the tooltip displayed for each
|
||||
* visitor on the map
|
||||
*/
|
||||
function visitTooltip(r) {
|
||||
var ds = new Date().getTime() / 1000 - r.lastActionTimestamp,
|
||||
ad = r.actionDetails,
|
||||
ico = function (src) { return '<img height="16px" src="' + src + '" alt="" class="icon" /> '; };
|
||||
return '<h3>' + (r.city ? $('<span>').text(r.city).html() + ' / ' : '') + $('<span>').text(r.country).html() + '</h3>' +
|
||||
// icons
|
||||
ico(r.countryFlag) + ico(r.browserIcon) + ico(r.operatingSystemIcon) + '<br/>' +
|
||||
// device type, model, brand
|
||||
r.deviceType + ' (' + r.deviceModel + ')<br/>' +
|
||||
// User ID
|
||||
(r.userId ? _pk_translate('General_UserId') + ': ' + $('<span>').text(r.userId).html() + '<br/>' : '') +
|
||||
// last action
|
||||
(ad && ad.length && ad[ad.length - 1].pageTitle ? '' + $('<span>').text(ad[ad.length - 1].pageTitle).html() + '<br/>' : '') +
|
||||
// time of visit
|
||||
'<div class="rel-time" data-actiontime="' + r.lastActionTimestamp + '">' + relativeTime(ds) + '</div>' +
|
||||
// either from or direct
|
||||
(r.referrerType == "direct" ? r.referrerTypeName :
|
||||
_.from + ': ' + $('<span>').text(r.referrerName).html()) + '<br />' +
|
||||
// local time
|
||||
'<small>' + _.local_time + ': ' + r.visitLocalTime + '</small><br />' +
|
||||
// goals, if available
|
||||
(self.config.siteHasGoals && r.goalConversions ? '<small>' + _.goal_conversions.replace('%s', '<strong>' + r.goalConversions + '</strong>') +
|
||||
(r.searches > 0 ? ', ' + _.searches.replace('%s', r.searches) : '') + '</small><br />' : '') +
|
||||
// actions and searches
|
||||
'<small>' + _.actions.replace('%s', '<strong>' + r.actions + '</strong>') +
|
||||
(r.searches > 0 ? ', ' + _.searches.replace('%s', '<strong>' + r.searches + '</strong>') : '') + '</small>';
|
||||
}
|
||||
|
||||
/*
|
||||
* the radius of the symbol depends on the lastActionTimestamp
|
||||
*/
|
||||
function visitRadius(r) {
|
||||
return Math.pow(age(r), 4) * (self.maxRad - self.minRad) + self.minRad;
|
||||
}
|
||||
|
||||
/*
|
||||
* defines the color of the map symbols.
|
||||
* depends on colorMode, which is set to 'default'
|
||||
* unless you type Shift+Alt+C
|
||||
*/
|
||||
function visitColor(r) {
|
||||
var col,
|
||||
engaged = self.config.siteHasGoals ? r.goalConversions > 0 : r.actions > 4;
|
||||
if (colorMode == 'referrerType') {
|
||||
col = ({
|
||||
website: referrerColorWebsite,
|
||||
direct: referrerColorDirect,
|
||||
search: referrerColorSearch
|
||||
})[r.referrerType];
|
||||
}
|
||||
// defu
|
||||
else col = chroma.hsl(
|
||||
42 * age(r), // hue
|
||||
Math.sqrt(age(r)), // saturation
|
||||
(engaged ? 0.65 : 0.5) - (1 - age(r)) * 0.45 // lightness
|
||||
);
|
||||
return col;
|
||||
}
|
||||
|
||||
/*
|
||||
* attributes of the map symbols
|
||||
*/
|
||||
function visitSymbolAttrs(r) {
|
||||
var result = {
|
||||
fill: visitColor(r).hex(),
|
||||
stroke: visitStrokeColor,
|
||||
'stroke-width': 1 * age(r),
|
||||
r: visitRadius(r),
|
||||
cursor: 'pointer'
|
||||
};
|
||||
if (changeVisitAlpha) {
|
||||
result['fill-opacity'] = Math.pow(age(r), 2) * 0.8 + 0.2;
|
||||
result['stroke-opacity'] = Math.pow(age(r), 1.7) * 0.8 + 0.2;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* eventually highlights the row in LiveVisitors widget
|
||||
* that corresponds to a visit on the map
|
||||
*/
|
||||
function highlightVisit(r) {
|
||||
$('#visitsLive').find('li#' + r.idVisit + ' .datetime')
|
||||
.css('background', liveWidgetHighlightColor);
|
||||
}
|
||||
|
||||
/*
|
||||
* removes the highlight after the mouse left
|
||||
* the visit marker on the map
|
||||
*/
|
||||
function unhighlightVisit(r) {
|
||||
$('#visitsLive').find('li#' + r.idVisit + ' .datetime')
|
||||
.css({ background: liveWidgetUnhighlightColor });
|
||||
}
|
||||
|
||||
/*
|
||||
* create a nice popping animation for appearing
|
||||
* visit symbols.
|
||||
*/
|
||||
function animateSymbol(s) {
|
||||
// create a white outline and explode it
|
||||
var c = map.paper.circle().attr(s.path.attrs);
|
||||
c.insertBefore(s.path);
|
||||
c.attr({ fill: false });
|
||||
c.animate({ r: c.attrs.r * 3, 'stroke-width': 7, opacity: 0 }, 2500,
|
||||
'linear', function () { c.remove(); });
|
||||
// ..and pop the bubble itself
|
||||
var col = s.path.attrs.fill,
|
||||
rad = s.path.attrs.r;
|
||||
s.path.show();
|
||||
s.path.attr({ fill: symbolAnimateFill, r: 0.1, opacity: 1 });
|
||||
s.path.animate({ fill: col, r: rad }, 700, 'bounce');
|
||||
|
||||
}
|
||||
|
||||
// default click behavior. if a visit is clicked, the visitor profile is launched,
|
||||
// otherwise zoom in or out.
|
||||
// TODO: visitor profile launching logic should probably be contained in
|
||||
// visitorProfile.js. not sure how to do that, though...
|
||||
this.$element.on('mapClick', function (e, visit, mapPath) {
|
||||
var VisitorProfileControl = require('piwik/UI').VisitorProfileControl;
|
||||
if (visit
|
||||
&& VisitorProfileControl
|
||||
&& !self.$element.closest('.visitor-profile').length
|
||||
) {
|
||||
VisitorProfileControl.showPopover(visit.visitorId);
|
||||
} else {
|
||||
var cont = UserCountryMap.cont2cont[mapPath.data.continentCode];
|
||||
if (cont && cont != currentMap) {
|
||||
updateMap(cont);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
* this function requests new data from Live.getLastVisitsDetails
|
||||
* and updates the symbols on the map. Then, it sets a timeout
|
||||
* to call itself after the refresh time set by Matomo
|
||||
*
|
||||
* If firstRun is true, the SymbolGroup is initialized
|
||||
*/
|
||||
function refreshVisits(firstRun) {
|
||||
if (lastTimestamp != -1
|
||||
&& doNotRefreshVisits
|
||||
&& !firstRun
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* this is called after new visit reports came in
|
||||
*/
|
||||
function gotNewReport(report) {
|
||||
// if the map has been destroyed, do nothing
|
||||
if (!self.map || !self.$element.length || !$.contains(document, self.$element[0])) {
|
||||
return;
|
||||
}
|
||||
|
||||
// successful request, so set timeout for next API call
|
||||
nextReqTimer = setTimeout(refreshVisits, config.liveRefreshAfterMs);
|
||||
|
||||
// hide loading indicator
|
||||
$('.realTimeMap_overlay img').hide();
|
||||
$('.realTimeMap_overlay .loading_data').hide();
|
||||
|
||||
// store current timestamp
|
||||
now = forceNowValue || (new Date().getTime() / 1000);
|
||||
|
||||
if (firstRun) { // if we run this the first time, we initialiize the map symbols
|
||||
visitSymbols = map.addSymbols({
|
||||
data: [],
|
||||
type: $K.Bubble,
|
||||
/*title: function(d) {
|
||||
return visitRadius(d) > 15 && d.actions > 1 ? d.actions : '';
|
||||
},
|
||||
labelattrs: {
|
||||
fill: '#fff',
|
||||
'font-weight': 'bold',
|
||||
'font-size': 11,
|
||||
stroke: false,
|
||||
cursor: 'pointer'
|
||||
},*/
|
||||
sortBy: function (r) { return r.lastActionTimestamp; },
|
||||
radius: visitRadius,
|
||||
location: function (r) { return [r.longitude, r.latitude]; },
|
||||
attrs: visitSymbolAttrs,
|
||||
tooltip: visitTooltip,
|
||||
mouseenter: highlightVisit,
|
||||
mouseleave: unhighlightVisit,
|
||||
click: function (visit, mapPath, evt) {
|
||||
evt.stopPropagation();
|
||||
self.$element.trigger('mapClick', [visit, mapPath]);
|
||||
}
|
||||
});
|
||||
|
||||
// clear existing report
|
||||
lastVisits = [];
|
||||
}
|
||||
|
||||
if (report.length) {
|
||||
// filter results without location
|
||||
report = $.grep(report, function (r) {
|
||||
return r.latitude !== null;
|
||||
});
|
||||
|
||||
// show warning if no visits w/ latitude
|
||||
$('#realTimeMapNoVisitsInfo').toggle(!report.length);
|
||||
}
|
||||
|
||||
// check wether we got any geolocated visits left
|
||||
if (!report.length) {
|
||||
$('.realTimeMap_overlay .showing_visits_of').hide();
|
||||
$('.realTimeMap_overlay .no_data').show();
|
||||
return;
|
||||
} else {
|
||||
$('.realTimeMap_overlay .showing_visits_of').show();
|
||||
$('.realTimeMap_overlay .no_data').hide();
|
||||
|
||||
if (yesterday === false) {
|
||||
yesterday = report[0].lastActionTimestamp - 24 * 60 * 60;
|
||||
}
|
||||
|
||||
lastVisits = [].concat(report).concat(lastVisits).slice(0, maxVisits);
|
||||
oldest = Math.max(lastVisits[lastVisits.length - 1].lastActionTimestamp, yesterday);
|
||||
|
||||
// let's try a different strategy
|
||||
// remove symbols that are too old
|
||||
var _removed = 0;
|
||||
if (removeOldVisits) {
|
||||
visitSymbols.remove(function (r) {
|
||||
if (r.lastActionTimestamp < oldest) _removed++;
|
||||
return r.lastActionTimestamp < oldest;
|
||||
});
|
||||
}
|
||||
|
||||
// update symbols that remain
|
||||
visitSymbols.update({
|
||||
radius: function (d) { return visitSymbolAttrs(d).r; },
|
||||
attrs: visitSymbolAttrs
|
||||
}, true);
|
||||
|
||||
// add new symbols
|
||||
var newSymbols = [];
|
||||
$.each(report, function (i, r) {
|
||||
newSymbols.push(visitSymbols.add(r));
|
||||
});
|
||||
|
||||
visitSymbols.layout().render();
|
||||
|
||||
if (enableAnimation) {
|
||||
$.each(newSymbols, function (i, s) {
|
||||
if (i > 10) return false;
|
||||
|
||||
s.path.hide(); // hide new symbol at first
|
||||
var t = setTimeout(function () { animateSymbol(s); },
|
||||
1000 * (s.data.lastActionTimestamp - now) + config.liveRefreshAfterMs);
|
||||
symbolFadeInTimer.push(t);
|
||||
});
|
||||
}
|
||||
|
||||
lastTimestamp = report[0].lastActionTimestamp;
|
||||
|
||||
// show
|
||||
var dur = lastTimestamp - oldest, d;
|
||||
if (dur < 60) d = dur + ' ' + _.seconds;
|
||||
else if (dur < 3600) d = Math.ceil(dur / 60) + ' ' + _.minutes;
|
||||
else d = Math.ceil(dur / 3600) + ' ' + _.hours;
|
||||
$('.realTimeMap_timeSpan').html(d);
|
||||
|
||||
if (!userHasZoomed) {
|
||||
// we only apply auto zoom when user has not zoomed manually
|
||||
var usedContinents = [];
|
||||
var usedCountries = [];
|
||||
var aSymbol;
|
||||
for (var z = 0; z < visitSymbols.symbols.length; z++) {
|
||||
aSymbol = visitSymbols.symbols[z];
|
||||
if (aSymbol && aSymbol.data) {
|
||||
if (aSymbol.data.continentCode && -1 === usedContinents.indexOf(aSymbol.data.continentCode)) {
|
||||
usedContinents.push(aSymbol.data.continentCode);
|
||||
}
|
||||
if (aSymbol.data.countryCode && -1 === usedCountries.indexOf(aSymbol.data.countryCode)) {
|
||||
usedCountries.push(aSymbol.data.countryCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (usedCountries.length === 1 && usedCountries[0] && usedCountries[0] !== 'unk') {
|
||||
updateMap(UserCountryMap.ISO2toISO3[usedCountries[0].toUpperCase()], false);
|
||||
} else if (usedContinents.length === 1 && usedContinents[0] && usedContinents[0] !== 'unk') {
|
||||
updateMap(UserCountryMap.cont2cont[usedContinents[0]], false);
|
||||
}
|
||||
}
|
||||
}
|
||||
firstRun = false;
|
||||
}
|
||||
|
||||
if (firstRun && lastVisits.length) {
|
||||
// zoom changed, use cached report data
|
||||
gotNewReport(lastVisits.slice());
|
||||
} else if (Visibility.hidden()) {
|
||||
nextReqTimer = setTimeout(refreshVisits, config.liveRefreshAfterMs);
|
||||
} else {
|
||||
// request API for new data
|
||||
$('.realTimeMap_overlay img').show();
|
||||
ajax(_reportParams(firstRun)).done(gotNewReport);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Set up the base map after loading of the SVG. Adds a single layer
|
||||
* that shows countries in gray with white outlines. Also this is where
|
||||
* the zoom behaviour is initialized.
|
||||
*/
|
||||
function initMap() {
|
||||
$('#widgetRealTimeMapliveMap .loadingPiwik, .RealTimeMap .loadingPiwik').hide();
|
||||
map.addLayer(currentMap.length == 3 ? 'context' : 'countries', {
|
||||
styles: {
|
||||
fill: colorTheme[currentTheme].fill,
|
||||
stroke: colorTheme[currentTheme].bg,
|
||||
'stroke-width': 0.2
|
||||
},
|
||||
click: function (d, p, evt) {
|
||||
evt.stopPropagation();
|
||||
userHasZoomed = true;
|
||||
if (currentMap.length == 2){ // zoom to country
|
||||
updateMap(d.iso);
|
||||
} else if (currentMap != 'world') { // zoom out if zoomed in
|
||||
updateMap('world');
|
||||
} else { // or zoom to continent view otherwise
|
||||
updateMap(UserCountryMap.ISO3toCONT[d.iso]);
|
||||
}
|
||||
},
|
||||
title: function (d) {
|
||||
// return the country name for educational purpose
|
||||
return d.name;
|
||||
}
|
||||
});
|
||||
if (currentMap.length == 3){
|
||||
map.addLayer('regions', {
|
||||
styles: {
|
||||
stroke: colors['region-stroke-color']
|
||||
}
|
||||
});
|
||||
}
|
||||
refreshVisits(true);
|
||||
}
|
||||
|
||||
function storeSettings() {
|
||||
self.widget.dashboardWidget('setParameters', {
|
||||
lastMap: currentMap, theme: colorTheme, colorMode: colorMode
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
* updates the map view (after changing the zoom)
|
||||
* clears all existing timeouts
|
||||
*/
|
||||
function updateMap(_map, _storeSettings) {
|
||||
if ('undefined' === typeof _storeSettings) {
|
||||
_storeSettings = true;
|
||||
}
|
||||
if (_map && currentMap === _map && _map !== 'world') {
|
||||
return;
|
||||
}
|
||||
|
||||
clearTimeout(nextReqTimer);
|
||||
$.each(symbolFadeInTimer, function (i, t) {
|
||||
clearTimeout(t);
|
||||
});
|
||||
symbolFadeInTimer = [];
|
||||
try {
|
||||
map.removeSymbols();
|
||||
} catch (e) {}
|
||||
currentMap = _map;
|
||||
_updateMap(currentMap + '.svg', initMap);
|
||||
|
||||
if (_storeSettings) {
|
||||
storeSettings();
|
||||
}
|
||||
}
|
||||
|
||||
updateMap(location.hash && (location.hash == '#world' || location.hash.match(/^#[A-Z]{2,3}$/)) ? location.hash.substr(1) : 'world'); // TODO: restore last state
|
||||
|
||||
// clicking on map background zooms out
|
||||
$('.RealTimeMap_map', this.$element).off('click').click(function () {
|
||||
if (currentMap != 'world') {
|
||||
userHasZoomed = true;
|
||||
updateMap('world');
|
||||
}
|
||||
});
|
||||
|
||||
// secret gimmick shortcuts
|
||||
this.$element.on('keydown', function (evt) {
|
||||
// shift+alt+C changes color mode
|
||||
if (evt.shiftKey && evt.altKey && evt.keyCode == 67) {
|
||||
colorMode = ({
|
||||
'default': 'referrerType',
|
||||
referrerType: 'default'
|
||||
})[colorMode];
|
||||
storeSettings();
|
||||
}
|
||||
|
||||
function switchTheme() {
|
||||
self.$element.css({ background: colorTheme[currentTheme].bg });
|
||||
if (isFullscreenWidget) {
|
||||
$('body').css({ background: colorTheme[currentTheme].bg });
|
||||
$('.widget').css({ 'border-width': 1 });
|
||||
}
|
||||
map.getLayer('countries')
|
||||
.style('fill', colorTheme[currentTheme].fill)
|
||||
.style('stroke', colorTheme[currentTheme].bg);
|
||||
|
||||
storeSettings();
|
||||
}
|
||||
|
||||
// shift+alt+B: switch to black background
|
||||
if (evt.shiftKey && evt.altKey && evt.keyCode == 66) {
|
||||
currentTheme = 'black';
|
||||
switchTheme();
|
||||
}
|
||||
|
||||
// shift+alt+W: return to white background
|
||||
if (evt.shiftKey && evt.altKey && evt.keyCode == 87) {
|
||||
currentTheme = 'white';
|
||||
switchTheme();
|
||||
}
|
||||
});
|
||||
|
||||
// make sure the map adapts to the widget size
|
||||
$(window).on('resize.' + this.uniqueId, onResizeLazy);
|
||||
|
||||
// setup automatic tooltip updates
|
||||
this._tooltipUpdateInterval = setInterval(function () {
|
||||
$('.qtip .rel-time').each(function (i, el) {
|
||||
el = $(el);
|
||||
var ds = new Date().getTime() / 1000 - el.data('actiontime');
|
||||
el.html(relativeTime(ds));
|
||||
});
|
||||
var d = new Date(), datetime = d.toTimeString().substr(0, 8);
|
||||
$('.realTimeMap_datetime').html(datetime);
|
||||
}, 1000);
|
||||
},
|
||||
|
||||
/*
|
||||
* resizes the map to widget dimensions
|
||||
*/
|
||||
resize: function () {
|
||||
var ratio, w, h, map = this.map;
|
||||
ratio = map.viewAB.width / map.viewAB.height;
|
||||
w = map.container.width();
|
||||
h = Math.min(w / ratio, $(window).height() - 30);
|
||||
|
||||
var radScale = Math.pow((h * ratio * h) / 130000, 0.3);
|
||||
this.maxRad = 10 * radScale;
|
||||
this.minRad = 4 * radScale;
|
||||
|
||||
map.container.height(h - 2);
|
||||
map.resize(w, h);
|
||||
if (map.symbolGroups && map.symbolGroups.length > 0) {
|
||||
map.symbolGroups[0].update();
|
||||
}
|
||||
|
||||
if (w < 355) $('.UserCountryMap .tableIcon span').hide();
|
||||
else $('.UserCountryMap .tableIcon span').show();
|
||||
},
|
||||
|
||||
_destroy: function () {
|
||||
UIControl.prototype._destroy.call(this);
|
||||
|
||||
if (this._tooltipUpdateInterval) {
|
||||
clearInterval(this._tooltipUpdateInterval);
|
||||
}
|
||||
|
||||
$(window).off('resize.' + this.uniqueId);
|
||||
|
||||
this.map.clear();
|
||||
$(this.map.container).html('');
|
||||
delete this.map;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}());
|
14
msd2/tracking/piwik/plugins/UserCountryMap/javascripts/vendor/jquery.qtip.min.js
vendored
Normal file
23
msd2/tracking/piwik/plugins/UserCountryMap/javascripts/vendor/kartograph.min.js
vendored
Normal file
11
msd2/tracking/piwik/plugins/UserCountryMap/javascripts/vendor/raphael.min.js
vendored
Normal file
5
msd2/tracking/piwik/plugins/UserCountryMap/lang/ar.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"map": "خريطة"
|
||||
}
|
||||
}
|
5
msd2/tracking/piwik/plugins/UserCountryMap/lang/be.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"map": "карта"
|
||||
}
|
||||
}
|
22
msd2/tracking/piwik/plugins/UserCountryMap/lang/bg.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"AndNOthers": "и %s други",
|
||||
"Cities": "Градове",
|
||||
"Countries": "Държави",
|
||||
"DaysAgo": "преди %s дни",
|
||||
"GoalConversions": "%s достигнати цели",
|
||||
"HoursAgo": "преди %s часа",
|
||||
"map": "карта",
|
||||
"MinutesAgo": "преди %s минути",
|
||||
"None": "Няма",
|
||||
"NoVisit": "Няма посещения",
|
||||
"RealTimeMap": "Карта на посетителите в реално време",
|
||||
"Regions": "Региони",
|
||||
"Searches": "%s търсения",
|
||||
"SecondsAgo": "преди %s секунди",
|
||||
"ShowingVisits": "Последни посещения базирани на географско местоположение",
|
||||
"Unlocated": "<b>%s<\/b> %p посещения от %c вашето местоположение не може да бъде открито.",
|
||||
"VisitorMap": "Карта на посетителите",
|
||||
"WorldWide": "По целия свят"
|
||||
}
|
||||
}
|
5
msd2/tracking/piwik/plugins/UserCountryMap/lang/bn.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"None": "কিছুই না"
|
||||
}
|
||||
}
|
6
msd2/tracking/piwik/plugins/UserCountryMap/lang/ca.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"map": "mapa",
|
||||
"ShowingVisits": "Visites geolocalitzades des de l'última vegada"
|
||||
}
|
||||
}
|
25
msd2/tracking/piwik/plugins/UserCountryMap/lang/cs.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Tento modul poskytuje widgety Mapa návštěvníků a Real-time Mapa. Poznámka: Vyžaduje povolený UserCountry plugin.",
|
||||
"AndNOthers": "a %s dalších",
|
||||
"Cities": "Města",
|
||||
"Countries": "Země",
|
||||
"DaysAgo": "před %s dny",
|
||||
"GoalConversions": "%s konverzí cíle",
|
||||
"HoursAgo": "před %s hodinami",
|
||||
"map": "mapa",
|
||||
"MinutesAgo": "před %s minutami",
|
||||
"None": "Žádní",
|
||||
"NoVisit": "Žádná návštěva",
|
||||
"RealTimeMap": "Mapa v reálném čase",
|
||||
"Regions": "Regiony",
|
||||
"Searches": "%s vyhledávání",
|
||||
"SecondsAgo": "před %s sekundami",
|
||||
"ShowingVisits": "Geolokované návštěvy posledních",
|
||||
"Unlocated": "<b>%s<\/b> %p z návštěv z %c nebylo možné geolokovat.",
|
||||
"VisitorMap": "Mapa návštěvníků",
|
||||
"WorldWide": "Celosvětová",
|
||||
"WithUnknownRegion": "%s s neznámým regionem",
|
||||
"WithUnknownCity": "%s s neznámým městem"
|
||||
}
|
||||
}
|
25
msd2/tracking/piwik/plugins/UserCountryMap/lang/da.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Denne udvidelse leverer de to widgets Besøgerkort og Realtidskort. Bemærk: Kræver at BrugerLand-udvidelsen er aktiveret.",
|
||||
"AndNOthers": "og %s andre",
|
||||
"Cities": "Byer",
|
||||
"Countries": "Lande",
|
||||
"DaysAgo": "%s dage siden",
|
||||
"GoalConversions": "%s målkonverteringer",
|
||||
"HoursAgo": "%s timer siden",
|
||||
"map": "kort",
|
||||
"MinutesAgo": "%s minutter siden",
|
||||
"None": "Ingen",
|
||||
"NoVisit": "Ingen besøg",
|
||||
"RealTimeMap": "Realtidskort",
|
||||
"Regions": "Regioner",
|
||||
"Searches": "%s søgninger",
|
||||
"SecondsAgo": "%s sekunder siden",
|
||||
"ShowingVisits": "Geografisk placeret besøg af sidste",
|
||||
"Unlocated": "<b>%s<\/b> besøg %p fra %c kunne ikke placeres geografisk.",
|
||||
"VisitorMap": "Besøgerkort",
|
||||
"WorldWide": "Hele verden",
|
||||
"WithUnknownRegion": "%s med ukendt region",
|
||||
"WithUnknownCity": "%s med ukendt by"
|
||||
}
|
||||
}
|
27
msd2/tracking/piwik/plugins/UserCountryMap/lang/de.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Dieses Plugin stellt die Widgets \"Besucherkarte\" sowie \"Besucherkarte in Echtzeit\" bereit. Hinweis: Hierfür muss das Plugin \"UserCountry\" aktiviert sein.",
|
||||
"AndNOthers": "und %s andere",
|
||||
"Cities": "Städte",
|
||||
"Countries": "Länder",
|
||||
"DaysAgo": "vor %s Tagen",
|
||||
"GoalConversions": "%s Ziel-Konversionen",
|
||||
"HoursAgo": "vor %s Stunden",
|
||||
"map": "Karte",
|
||||
"MinutesAgo": "vor %s Minuten",
|
||||
"None": "Keine",
|
||||
"NoVisit": "Keine Besuche",
|
||||
"RealTimeMap": "Besucherkarte in Echtzeit",
|
||||
"Regions": "Regionen",
|
||||
"Searches": "%s Suchen",
|
||||
"SecondsAgo": "vor %s Sekunden",
|
||||
"ShowingVisits": "Lokalisierte Besuche der letzten",
|
||||
"Unlocated": "<b>%s<\/b> %p der Besuche von %c konnten nicht lokalisiert werden.",
|
||||
"VisitorMap": "Besucherkarte",
|
||||
"WorldWide": "Weltweit",
|
||||
"WithUnknownRegion": "%s mit unbekannter Region",
|
||||
"WithUnknownCity": "%s mit unbekannter Stadt",
|
||||
"NoVisitsInfo": "Es werden aktuell keine Besuche angezeigt, weil für diesen Zeitraum kein Besuch mit korrekten Geolocation Informationen (Längengrad & Breitengrad) existiert.",
|
||||
"NoVisitsInfo2": "Um das Problem zu lösen, stellen Sie sicher, dass Sie einen GeoIP Geolocation Provider mit einer GeoIP Stadt Datenbank verwenden. Wenn dies Ihr Problem nicht löst, dann ist es möglich (wenn auch unwahrscheinlich) dass Ihre Besuche IP Adressen haben, die nicht geolokalisiert werden können."
|
||||
}
|
||||
}
|
27
msd2/tracking/piwik/plugins/UserCountryMap/lang/el.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Το πρόσθετο αυτό παρέχει το γραφικό συστατικό Χάρτης Επισκεπτών και τον Χάρτη Σε Πραγματικό Χρόνο. Σημείωση: Απαιτεί να είναι ενεργοποιημένο το πρόσθετο UserCountry.",
|
||||
"AndNOthers": "και %s άλλοι",
|
||||
"Cities": "Πόλεις",
|
||||
"Countries": "Χώρες",
|
||||
"DaysAgo": "πριν %s ημέρες",
|
||||
"GoalConversions": "%s μετατροπές στόχων",
|
||||
"HoursAgo": "πριν %s ώρες",
|
||||
"map": "χάρτης",
|
||||
"MinutesAgo": "πριν %s λεπτά",
|
||||
"None": "Κανένα",
|
||||
"NoVisit": "Δεν υπάρχουν επισκέψεις",
|
||||
"RealTimeMap": "Χάρτης σε πραγματικό χρόνο",
|
||||
"Regions": "Περιοχές",
|
||||
"Searches": "%s αναζητήσεις",
|
||||
"SecondsAgo": "πριν %s δευτερόλεπτα",
|
||||
"ShowingVisits": "Επισκέψεις με γεωτοποθεσία στα τελευταία",
|
||||
"Unlocated": "<b>%s<\/b> %p από τις επισκέψεις από %c δεν ήταν δυνατόν να χαρακτηριστούν με γεωτοποθεσία.",
|
||||
"VisitorMap": "Χάρτης Επισκεπτών",
|
||||
"WorldWide": "Παγκοσμίως",
|
||||
"WithUnknownRegion": "%s με άγνωστη περιοχή",
|
||||
"WithUnknownCity": "%s με άγνωστη πόλη",
|
||||
"NoVisitsInfo": "Δεν εμφανίζονται αυτή τη στιγμή επισκέψεις, διότι δεν υπήρξε επίσκεψη για αυτήν την περίοδο με σωστή πληροφορία γεωτοποθεσίας (πλάτος και μήκος).",
|
||||
"NoVisitsInfo2": "Για να λυθεί το ζήτημα, βεβαιωθείτε ότι χρησιμοποιείτε ένα πάροχο γεωτοποθεσίας με βάση δεδομένων πόλεων. Αν αυτό δεν λύσει το θέμα σας, τότε υπάρχει περίπτωση (όμως όχι τόσο πιθανό) ότι έχετε επισκέψεις με διευθύνσεις IP που δεν επιλύονται στην γεωτοποθεσία τους."
|
||||
}
|
||||
}
|
27
msd2/tracking/piwik/plugins/UserCountryMap/lang/en.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "This plugin provides the widgets Visitor Map and Real-time Map. Note: Requires the UserCountry plugin enabled.",
|
||||
"AndNOthers": "and %s others",
|
||||
"Cities": "Cities",
|
||||
"Countries": "Countries",
|
||||
"DaysAgo": "%s days ago",
|
||||
"GoalConversions": "%s goal conversions",
|
||||
"HoursAgo": "%s hours ago",
|
||||
"map": "map",
|
||||
"MinutesAgo": "%s minutes ago",
|
||||
"None": "None",
|
||||
"NoVisit": "No visit",
|
||||
"RealTimeMap": "Real-time Map",
|
||||
"Regions": "Regions",
|
||||
"Searches": "%s searches",
|
||||
"SecondsAgo": "%s seconds ago",
|
||||
"ShowingVisits": "Geo-located visits of last",
|
||||
"Unlocated": "<b>%s<\/b> %p of the visits from %c couldn't be geo located.",
|
||||
"VisitorMap": "Visitor Map",
|
||||
"WorldWide": "World-Wide",
|
||||
"WithUnknownRegion": "%s with unknown region",
|
||||
"WithUnknownCity": "%s with unknown city",
|
||||
"NoVisitsInfo": "There are no visits displayed currently, because no visit for this period has the correct geolocation information (latitude & longitude).",
|
||||
"NoVisitsInfo2": "To resolve this issue, make sure you are using a GeoIP geolocation provider with a GeoIP city database. If this does not resolve your issue, then it is possible (though unlikely) that your visits have IP addresses that just cannot be geolocated."
|
||||
}
|
||||
}
|
22
msd2/tracking/piwik/plugins/UserCountryMap/lang/es-ar.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"AndNOthers": "y %s otros",
|
||||
"Cities": "Ciudades",
|
||||
"Countries": "Países",
|
||||
"DaysAgo": "Hace %s días",
|
||||
"GoalConversions": "%s conversiones de objetivo",
|
||||
"HoursAgo": "Hace %s horas",
|
||||
"map": "mapa",
|
||||
"MinutesAgo": "Hace %s minutos",
|
||||
"None": "Ninguno",
|
||||
"NoVisit": "Ninguna visita",
|
||||
"RealTimeMap": "Mapa en Tiempo Real",
|
||||
"Regions": "Regiones",
|
||||
"Searches": "%s búsquedas",
|
||||
"SecondsAgo": "Hace %s segundos",
|
||||
"ShowingVisits": "Geo-ubicadas últimas visitas",
|
||||
"Unlocated": "<b>%s<\/b> %p de las visitas desde %c no pudieron ser geo ubicadas.",
|
||||
"VisitorMap": "Mapa de Visitantes",
|
||||
"WorldWide": "Mundial"
|
||||
}
|
||||
}
|
27
msd2/tracking/piwik/plugins/UserCountryMap/lang/es.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Este complemento suministra los módulos Mapa de visitante y Mapa en tiempo real. Nota: Requiere el complemento UserCountry habilitado.",
|
||||
"AndNOthers": "y %s otros",
|
||||
"Cities": "Ciudades",
|
||||
"Countries": "Países",
|
||||
"DaysAgo": "%s días atrás",
|
||||
"GoalConversions": "%s conversiones de objetivo",
|
||||
"HoursAgo": "%s horas atrás",
|
||||
"map": "mapa",
|
||||
"MinutesAgo": "Hace %s minutos",
|
||||
"None": "Ninguno",
|
||||
"NoVisit": "Sin visitas",
|
||||
"RealTimeMap": "Mapa en Tiempo real",
|
||||
"Regions": "Regiones",
|
||||
"Searches": "%s búsquedas",
|
||||
"SecondsAgo": "Hace %s segundos",
|
||||
"ShowingVisits": "Visitas geolocalizadas desde la última vez",
|
||||
"Unlocated": "<b>%s<\/b> %p de las visitas desde %c no pudieron ser geolocalizadas.",
|
||||
"VisitorMap": "Mapa de visitantes",
|
||||
"WorldWide": "Global",
|
||||
"WithUnknownRegion": "%s con región desconocida",
|
||||
"WithUnknownCity": "%s con ciudad desconocida",
|
||||
"NoVisitsInfo": "No hay visitas mostradas actualmente, porque ninguna visita para este período tiene la información de geolocalización correcta (latitud y longitud).",
|
||||
"NoVisitsInfo2": "Para resolver este problema, asegúrese de que está utilizando un proveedor de geolocalización GeoIP con una base de datos de la ciudad GeoIP. Si esto no resuelve su problema, entonces es posible (aunque improbable) que sus visitas tengan direcciones IP que simplemente no se puedan geolocalizar."
|
||||
}
|
||||
}
|
21
msd2/tracking/piwik/plugins/UserCountryMap/lang/et.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"AndNOthers": "ja %s muud",
|
||||
"Cities": "Linnad",
|
||||
"Countries": "Riigid",
|
||||
"DaysAgo": "%s päeva tagasi",
|
||||
"GoalConversions": "%s tulutoovaid eesmärke",
|
||||
"HoursAgo": "%s tundi tagasi",
|
||||
"map": "kaart",
|
||||
"MinutesAgo": "%s minutit tagasi",
|
||||
"None": "Mitte ükski",
|
||||
"NoVisit": "Külastused puuduvad",
|
||||
"RealTimeMap": "Reaalaja kaart",
|
||||
"Regions": "Regioonid",
|
||||
"Searches": "%s otsingut",
|
||||
"SecondsAgo": "%s sekundit tagasi",
|
||||
"ShowingVisits": "Tuvastatud asukohaga külastused viimase",
|
||||
"VisitorMap": "Külastuste kaart",
|
||||
"WorldWide": "Globaalne"
|
||||
}
|
||||
}
|
21
msd2/tracking/piwik/plugins/UserCountryMap/lang/fa.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"AndNOthers": "و%s سایر",
|
||||
"Cities": "شهرها",
|
||||
"Countries": "کشورها",
|
||||
"DaysAgo": "%s روز پیش",
|
||||
"GoalConversions": "%s تبدیل هدف",
|
||||
"HoursAgo": "%s ساعت پیش",
|
||||
"map": "نقشه",
|
||||
"MinutesAgo": "%s دقیقه پیش",
|
||||
"None": "هیچ",
|
||||
"NoVisit": "بدون بازدید",
|
||||
"RealTimeMap": "نقشه در همین لحظه",
|
||||
"Regions": "منطقه ها",
|
||||
"Searches": "%sجستجو",
|
||||
"SecondsAgo": "%s ثانیه پیش",
|
||||
"ShowingVisits": "مکان اخرین بازدید کنندگان",
|
||||
"VisitorMap": "نقشه بازدیدکننده",
|
||||
"WorldWide": "سراسر جهان"
|
||||
}
|
||||
}
|
25
msd2/tracking/piwik/plugins/UserCountryMap/lang/fi.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Tämä lisäosa tarjoaa käyttäjäkartan ja reaaliaikakartan. Huom: \"UserCountry\"-lisäosan täytyy olla päällä.",
|
||||
"AndNOthers": "ja %s muuta",
|
||||
"Cities": "Kaupunkeja",
|
||||
"Countries": "Maita",
|
||||
"DaysAgo": "%s päivää sitten",
|
||||
"GoalConversions": "%s tavoitekonversiot",
|
||||
"HoursAgo": "%s tuntia sitten",
|
||||
"map": "kartta",
|
||||
"MinutesAgo": "%s minuuttia sitten",
|
||||
"None": "Ei mitään",
|
||||
"NoVisit": "Ei käyntejä",
|
||||
"RealTimeMap": "Reaaliaikainen kartta",
|
||||
"Regions": "Alueita",
|
||||
"Searches": "%s hakua",
|
||||
"SecondsAgo": "%s sekuntia sitten",
|
||||
"ShowingVisits": "Geopaikannetut käynnit viimeiset",
|
||||
"Unlocated": "<b>%s<\/b> %p käynneistä %c:sta ei voitu geopaikantaa.",
|
||||
"VisitorMap": "Kartta kävijöistä",
|
||||
"WorldWide": "Maailmanlaajuinen",
|
||||
"WithUnknownRegion": "%s tuntemattomalta alueelta",
|
||||
"WithUnknownCity": "%s tuntemattomista kaupungeista"
|
||||
}
|
||||
}
|
27
msd2/tracking/piwik/plugins/UserCountryMap/lang/fr.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Ce composant fournit les gadgets Carte du Visiteur et Carte en temps réel. Note : requiert que le composant Pays du Visiteur soit activé.",
|
||||
"AndNOthers": "et %s autres",
|
||||
"Cities": "Villes",
|
||||
"Countries": "Pays",
|
||||
"DaysAgo": "%s jours",
|
||||
"GoalConversions": "%s conversions d'objectifs",
|
||||
"HoursAgo": "%s heures",
|
||||
"map": "carte",
|
||||
"MinutesAgo": "%s minutes",
|
||||
"None": "aucun",
|
||||
"NoVisit": "Aucune visite",
|
||||
"RealTimeMap": "Carte en temps-réel",
|
||||
"Regions": "Régions",
|
||||
"Searches": "%s recherches",
|
||||
"SecondsAgo": "%s secondes",
|
||||
"ShowingVisits": "Dernières visites géo-localisées",
|
||||
"Unlocated": "<b>%s<\/b> %p des dernières visites de %c n'ont pas pu être géo-localisées.",
|
||||
"VisitorMap": "Carte des visiteurs",
|
||||
"WorldWide": "Mondialement",
|
||||
"WithUnknownRegion": "%s avec une région inconnue",
|
||||
"WithUnknownCity": "%s avec une ville inconnue",
|
||||
"NoVisitsInfo": "Il n'y a aucune visite affichée en ce moment car aucune visite pour cette période n'a les bonnes informations de géolocalisation (latitude & longitude).",
|
||||
"NoVisitsInfo2": "Afin de résoudre ce problème, assurez vous que vous utilisez un fournisseur de géolocalisation GeoIP avec une base de donnée GeoIP City. Si cela ne résout pas votre problème, il est possible (mais improbable) que vos visites ont des adresses IP qui ne peuvent pas être géolocalisées."
|
||||
}
|
||||
}
|
10
msd2/tracking/piwik/plugins/UserCountryMap/lang/he.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"Cities": "ערים",
|
||||
"Countries": "מדינות",
|
||||
"map": "מפה",
|
||||
"MinutesAgo": "לפני %s דקות",
|
||||
"VisitorMap": "מפת מבקרים",
|
||||
"WorldWide": "כלל-עולמי"
|
||||
}
|
||||
}
|
23
msd2/tracking/piwik/plugins/UserCountryMap/lang/hi.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "इस प्लगइन विगेट्स आगंतुक मानचित्र और वास्तविक समय का नक्शा प्रदान करता है। नोट: सक्षम UserCountry प्लगइन की आवश्यकता है।",
|
||||
"AndNOthers": "और %s दूसरों के",
|
||||
"Cities": "शहरों",
|
||||
"Countries": "देश",
|
||||
"DaysAgo": "%s दिन पहले",
|
||||
"GoalConversions": "%s लक्ष्य रूपांतरण",
|
||||
"HoursAgo": "%s घंटे पहले",
|
||||
"map": "नक्शा",
|
||||
"MinutesAgo": "%s मिनट पहले",
|
||||
"None": "कोई नहीं",
|
||||
"NoVisit": "कोई यात्रा",
|
||||
"RealTimeMap": "वास्तविक समय नक्शा",
|
||||
"Regions": "क्षेत्र",
|
||||
"Searches": "%s खोजों",
|
||||
"SecondsAgo": "%s सेकंड पहले",
|
||||
"ShowingVisits": "आखिरी का भू स्थित दौरा",
|
||||
"Unlocated": "<b>%s<\/b> %p से यात्राओं की %c भौगोलिक स्थित खोजा नहीं जा सकता है.",
|
||||
"VisitorMap": "आगंतुक मानचित्र",
|
||||
"WorldWide": "विश्व व्यापक"
|
||||
}
|
||||
}
|
5
msd2/tracking/piwik/plugins/UserCountryMap/lang/hr.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"VisitorMap": "Mapa posjetitelja"
|
||||
}
|
||||
}
|
5
msd2/tracking/piwik/plugins/UserCountryMap/lang/hu.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"map": "térkép"
|
||||
}
|
||||
}
|
25
msd2/tracking/piwik/plugins/UserCountryMap/lang/id.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Pengaya ini menyediakan gawit Peta Pengunjung dan Peta Waktu-Nyata. Catatan: Membutuhkan pengaya NegaraPengguna diaktifkan.",
|
||||
"AndNOthers": "dan %s lain",
|
||||
"Cities": "Kita",
|
||||
"Countries": "Negara",
|
||||
"DaysAgo": "%s hari lalu",
|
||||
"GoalConversions": "%s konversi tujuan",
|
||||
"HoursAgo": "%s jam lalu",
|
||||
"map": "peta",
|
||||
"MinutesAgo": "%s menit lalu",
|
||||
"None": "Tidak Ada",
|
||||
"NoVisit": "Tidak ada kunjungan",
|
||||
"RealTimeMap": "Peta Waktu-Nyata",
|
||||
"Regions": "Wilayah",
|
||||
"Searches": "%s pencarian",
|
||||
"SecondsAgo": "%s detik lalu",
|
||||
"ShowingVisits": "Kunjungan Lokasi-Geo terakhir",
|
||||
"Unlocated": "<b>%s<\/b> %p kunjungan dari %c lokasi-geo tidak diketahui.",
|
||||
"VisitorMap": "Peta Pengunjung",
|
||||
"WorldWide": "Seluruh Dunia",
|
||||
"WithUnknownRegion": "%s dengan wilayah tidak dikenal",
|
||||
"WithUnknownCity": "%s dengan kota tidak dikenal"
|
||||
}
|
||||
}
|
27
msd2/tracking/piwik/plugins/UserCountryMap/lang/it.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Questo plugin fornisce i widget Mappa Visitatori e Mappa in Tempo Reale. Richiede che sia abilitato il plugin UserCountry.",
|
||||
"AndNOthers": "e %s altri",
|
||||
"Cities": "Città",
|
||||
"Countries": "Nazioni",
|
||||
"DaysAgo": "%s giorni fa",
|
||||
"GoalConversions": "%s conversioni obiettivi",
|
||||
"HoursAgo": "%s ore fa",
|
||||
"map": "mappa",
|
||||
"MinutesAgo": "%s minuti fa",
|
||||
"None": "Nessuno",
|
||||
"NoVisit": "Nessuna visita",
|
||||
"RealTimeMap": "Mappa Real Time",
|
||||
"Regions": "Regioni",
|
||||
"Searches": "%s ricerche",
|
||||
"SecondsAgo": "%s secondi fa",
|
||||
"ShowingVisits": "Visite geolocalizzate degli ultimi",
|
||||
"Unlocated": "<b>%s<\/b> %p delle visite da %c non possono essere geolocalizzate.",
|
||||
"VisitorMap": "Mappa Visitatori",
|
||||
"WorldWide": "Tutto il Mondo",
|
||||
"WithUnknownRegion": "%s con regione sconosciuta",
|
||||
"WithUnknownCity": "%s con città sconosciuta",
|
||||
"NoVisitsInfo": "Al momento non vengono mostrate visite, poiché in questo periodo non ci sono visite con le corrette informazioni di geo-localizzazione (latitudine\/longitudine)",
|
||||
"NoVisitsInfo2": "Per risolvere questo problema, assicurati di utilizzare un provider di geo-localizzazione GeoIP con un database di città GeoIP. Se ciò non risolve il tuo problema, è possibile (anche se improbabile) che le tue visite abbiano degli indirizzi IP che proprio non possono essere geo-localizzati."
|
||||
}
|
||||
}
|
27
msd2/tracking/piwik/plugins/UserCountryMap/lang/ja.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "このプラグインでは、ビジターマップとリアルタイムマップウィジェットを提供します。注:利用可能なユーザーカントリープラグインが必要。",
|
||||
"AndNOthers": "と、%s ほか",
|
||||
"Cities": "都市",
|
||||
"Countries": "国",
|
||||
"DaysAgo": "%s 日前",
|
||||
"GoalConversions": "%s 目標コンバージョン",
|
||||
"HoursAgo": "%s 時間前",
|
||||
"map": "地図",
|
||||
"MinutesAgo": "%s 分前",
|
||||
"None": "なし",
|
||||
"NoVisit": "訪問なし",
|
||||
"RealTimeMap": "リアルタイムマップ",
|
||||
"Regions": "地域",
|
||||
"Searches": "%s 検索",
|
||||
"SecondsAgo": "%s 秒前",
|
||||
"ShowingVisits": "位置情報が探索された最後の訪問",
|
||||
"Unlocated": "%c からの訪問の <b> %s <\/b> %p は、位置情報が特定できませんでした。",
|
||||
"VisitorMap": "ビジターマップ",
|
||||
"WorldWide": "世界規模",
|
||||
"WithUnknownRegion": "未知の地域と %s",
|
||||
"WithUnknownCity": "未知の都市と %s",
|
||||
"NoVisitsInfo": "この期間のビジットには、正しい地理情報(緯度と経度)がないため、現在表示されているビジットはありません。",
|
||||
"NoVisitsInfo2": "この問題を解決するには、GeoIP ジオロケーションプロバイダを GeoIP の都市データベースで使用していることを確認してください。 これで問題が解決しない場合、このビジットには地理的に配置できない IP アドレスが含まれている可能性(通常ではありえませんが)があります。"
|
||||
}
|
||||
}
|
5
msd2/tracking/piwik/plugins/UserCountryMap/lang/ka.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"map": "რუკა"
|
||||
}
|
||||
}
|
25
msd2/tracking/piwik/plugins/UserCountryMap/lang/ko.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "이 플러그인은 방문자 지도 및 실시간 지도 위젯을 제공합니다. 주의: UserCountry 플러그인이 활성화 되어 있어야 합니다.",
|
||||
"AndNOthers": ", 기타 %s",
|
||||
"Cities": "도시",
|
||||
"Countries": "국가",
|
||||
"DaysAgo": "%s일 전",
|
||||
"GoalConversions": "%s 목표 전환",
|
||||
"HoursAgo": "%s시간 전",
|
||||
"map": "지도",
|
||||
"MinutesAgo": "%s분 전",
|
||||
"None": "없음",
|
||||
"NoVisit": "방문 없음",
|
||||
"RealTimeMap": "실시간 지도",
|
||||
"Regions": "지역",
|
||||
"Searches": "%s 검색",
|
||||
"SecondsAgo": "%s초 전",
|
||||
"ShowingVisits": "최근 방문의 지리적 위치",
|
||||
"Unlocated": "<b>%s<\/b> %c 방문에서 %p의 지리적 위치를 찾을 수 없습니다.",
|
||||
"VisitorMap": "방문자 지도",
|
||||
"WorldWide": "전세계",
|
||||
"WithUnknownRegion": "%s 알 수 없는 지역",
|
||||
"WithUnknownCity": "%s 알 수 없는 도시"
|
||||
}
|
||||
}
|
10
msd2/tracking/piwik/plugins/UserCountryMap/lang/lt.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"Countries": "Šalys",
|
||||
"DaysAgo": "Prieš %s dienų",
|
||||
"HoursAgo": "Prieš %s valandų",
|
||||
"map": "žemėlapis",
|
||||
"MinutesAgo": "Prieš %s minučių",
|
||||
"SecondsAgo": "Prieš %s sekundžių"
|
||||
}
|
||||
}
|
5
msd2/tracking/piwik/plugins/UserCountryMap/lang/lv.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"map": "karte"
|
||||
}
|
||||
}
|
25
msd2/tracking/piwik/plugins/UserCountryMap/lang/nb.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Denne utvidelsen gir deg widgetene Kart over besøkende og Sanntidskart. Merk: krever at UserCountry-utvidelsen er aktivert.",
|
||||
"AndNOthers": "og %s andre",
|
||||
"Cities": "Byer",
|
||||
"Countries": "Land",
|
||||
"DaysAgo": "%s dager siden",
|
||||
"GoalConversions": "%s målkonverteringer",
|
||||
"HoursAgo": "%s timer siden",
|
||||
"map": "kart",
|
||||
"MinutesAgo": "%s minutter siden",
|
||||
"None": "Ingen",
|
||||
"NoVisit": "Ingen besøk",
|
||||
"RealTimeMap": "Sanntidskart",
|
||||
"Regions": "Regioner",
|
||||
"Searches": "%s søk",
|
||||
"SecondsAgo": "%s sekunder siden",
|
||||
"ShowingVisits": "Stedsbestemte besøk siste",
|
||||
"Unlocated": "<b>%s<\/b> %p av besøkene fra %c kunne ikke stedsbestemmes.",
|
||||
"VisitorMap": "Kart over besøkende",
|
||||
"WorldWide": "Verdensbasis",
|
||||
"WithUnknownRegion": "%s med ukjent region",
|
||||
"WithUnknownCity": "%s med ukjent by"
|
||||
}
|
||||
}
|
25
msd2/tracking/piwik/plugins/UserCountryMap/lang/nl.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Deze plugin verzorgt de widgets Bezoekers landkaart en Real-time landkaart. Opmerking: Vereist dat de UserCountry plugin is ingeschakeld.",
|
||||
"AndNOthers": "en %s anderen",
|
||||
"Cities": "Steden",
|
||||
"Countries": "Landen",
|
||||
"DaysAgo": "%s dagen geleden",
|
||||
"GoalConversions": "%s doelconversies",
|
||||
"HoursAgo": "%s uur geleden",
|
||||
"map": "kaart",
|
||||
"MinutesAgo": "%s minuten geleden",
|
||||
"None": "Geen",
|
||||
"NoVisit": "Geen bezoek",
|
||||
"RealTimeMap": "Realtime Kaart",
|
||||
"Regions": "Regio's",
|
||||
"Searches": "%s zoekopdrachten",
|
||||
"SecondsAgo": "%s seconden geleden",
|
||||
"ShowingVisits": "Gelokaliseerde bezoeken van laatste",
|
||||
"Unlocated": "<b>%s<\/b> %p van de bezoeken vanaf %c konden niet worden gelokaliseerd.",
|
||||
"VisitorMap": "Bezoekersmap",
|
||||
"WorldWide": "Wereldwijd",
|
||||
"WithUnknownRegion": "%s met onbekende regio",
|
||||
"WithUnknownCity": "%s met onbekende stad"
|
||||
}
|
||||
}
|
25
msd2/tracking/piwik/plugins/UserCountryMap/lang/pl.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Wtyczka dostarcza widżetów Mapa Odwiedzin i Mapa Czasu Rzeczywistego. NOTKA: Wymaga włączenia wtyczki UserCountry.",
|
||||
"AndNOthers": "i %s innych",
|
||||
"Cities": "Miasta",
|
||||
"Countries": "Państw",
|
||||
"DaysAgo": "%s dni temu",
|
||||
"GoalConversions": "%s konwersji celów",
|
||||
"HoursAgo": "%s godzin temu",
|
||||
"map": "mapa",
|
||||
"MinutesAgo": "%s minut temu",
|
||||
"None": "Brak",
|
||||
"NoVisit": "Brak wizyt",
|
||||
"RealTimeMap": "Mapa Czasu Rzeczywistego",
|
||||
"Regions": "Regiony",
|
||||
"Searches": "%s wyszukań",
|
||||
"SecondsAgo": "%s sekund temu",
|
||||
"ShowingVisits": "Geolokalizowane wizyty z ostatnich",
|
||||
"Unlocated": "<b>%s<\/b> %p wizyt z %c nie mogło zostać zlokalizowane.",
|
||||
"VisitorMap": "Mapa Odwiedzin",
|
||||
"WorldWide": "World-Wide",
|
||||
"WithUnknownRegion": "%s z nieznanego regionu",
|
||||
"WithUnknownCity": "%s z nieznanego miasta"
|
||||
}
|
||||
}
|
25
msd2/tracking/piwik/plugins/UserCountryMap/lang/pt-br.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Este plugin fornece os widgets Mapa de Visitantes e o Mapa Tempo-Real. Nota: Requer o plugin UserCountry ativado.",
|
||||
"AndNOthers": "e %s outros",
|
||||
"Cities": "Cidades",
|
||||
"Countries": "Países",
|
||||
"DaysAgo": "%s dias atrás",
|
||||
"GoalConversions": "%s conversões de meta",
|
||||
"HoursAgo": "%s horas atrás",
|
||||
"map": "mapa",
|
||||
"MinutesAgo": "%s minutos atrás",
|
||||
"None": "Nenhum",
|
||||
"NoVisit": "Nenhuma visita",
|
||||
"RealTimeMap": "Mapa em tempo real",
|
||||
"Regions": "Regiões",
|
||||
"Searches": "%s buscas",
|
||||
"SecondsAgo": "%s segundos atrás",
|
||||
"ShowingVisits": "Geo-localização das últimas visitas",
|
||||
"Unlocated": "<b>%s<\/b> %p das visitas de %c não puderam ser geo localizados.",
|
||||
"VisitorMap": "Mapa de visitantes",
|
||||
"WorldWide": "World-Wide",
|
||||
"WithUnknownRegion": "%s com região desconhecida",
|
||||
"WithUnknownCity": "%s com cidade desconhecida"
|
||||
}
|
||||
}
|
27
msd2/tracking/piwik/plugins/UserCountryMap/lang/pt.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Esta extensão fornece as widgets do Mapa de visitantes e o Mapa em tempo real. Nota: Requer que a extensão UserCountry esteja ativa.",
|
||||
"AndNOthers": "e %s outros",
|
||||
"Cities": "Cidades",
|
||||
"Countries": "Países",
|
||||
"DaysAgo": "Há %s dias",
|
||||
"GoalConversions": "%s conversões de objetivos",
|
||||
"HoursAgo": "Há %s horas",
|
||||
"map": "mapa",
|
||||
"MinutesAgo": "Há %s minutos",
|
||||
"None": "Nenhum",
|
||||
"NoVisit": "Nenhuma visita",
|
||||
"RealTimeMap": "Mapa em tempo real",
|
||||
"Regions": "Regiões",
|
||||
"Searches": "%s pesquisas",
|
||||
"SecondsAgo": "Há %s segundos",
|
||||
"ShowingVisits": "Visitas geolocalizadas dos últimos",
|
||||
"Unlocated": "<b>%s<\/b> %p das visitas de %c não puderam ser geolocalizadas.",
|
||||
"VisitorMap": "Mapa de visitantes",
|
||||
"WorldWide": "Mundial",
|
||||
"WithUnknownRegion": "%s com uma região desconhecida",
|
||||
"WithUnknownCity": "%s com uma cidade desconhecida",
|
||||
"NoVisitsInfo": "Não existem visitas atualmente a serem mostradas porque nenhuma visita para este período tem informações corretas de geolocalização (latitude e longitude).",
|
||||
"NoVisitsInfo2": "Para resolver este problema, confirme que está a utilizar um fornecedor de localização GeoIP com uma base de dados GeoIP de cidades. Se isto não resolver o seu problema, então é possível (embora pouco provável) que as suas visitas têm endereços de IP que não podem ser geolocalizados."
|
||||
}
|
||||
}
|
22
msd2/tracking/piwik/plugins/UserCountryMap/lang/ro.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"AndNOthers": "si %s altii",
|
||||
"Cities": "Oraşe",
|
||||
"Countries": "Ţări",
|
||||
"DaysAgo": "%s zile în urmă",
|
||||
"GoalConversions": "%s obiectivul conversiilor",
|
||||
"HoursAgo": "%s ore în urmă",
|
||||
"map": "harta",
|
||||
"MinutesAgo": "%s acum cateva minute",
|
||||
"None": "Nu sunt",
|
||||
"NoVisit": "Nici o vizita",
|
||||
"RealTimeMap": "Harta în timp real",
|
||||
"Regions": "Regiuni",
|
||||
"Searches": "%s cautari",
|
||||
"SecondsAgo": "%s acum o secunda",
|
||||
"ShowingVisits": "Ultimile vizite geo-localizate",
|
||||
"Unlocated": "<b>%s<\/b> %p vizitelor de la %c nu au putut fi geolocalizate.",
|
||||
"VisitorMap": "Harta vizitatori",
|
||||
"WorldWide": "World-Wide"
|
||||
}
|
||||
}
|
25
msd2/tracking/piwik/plugins/UserCountryMap/lang/ru.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Этот плагин предоставляет виджеты Visitor Map и Real-time Map. Внимание: требуется включенный плагин UserCountry.",
|
||||
"AndNOthers": "и %s других",
|
||||
"Cities": "Города",
|
||||
"Countries": "Страны",
|
||||
"DaysAgo": "%s дней назад",
|
||||
"GoalConversions": "%s целей достигнуто",
|
||||
"HoursAgo": "%s часов назад",
|
||||
"map": "карта",
|
||||
"MinutesAgo": "%s минут назад",
|
||||
"None": "Нет",
|
||||
"NoVisit": "Без посещений",
|
||||
"RealTimeMap": "Карта в реальном времени",
|
||||
"Regions": "Регионы",
|
||||
"Searches": "%s поисковых запросов",
|
||||
"SecondsAgo": "%s секунд назад",
|
||||
"ShowingVisits": "Последние геолокационные посещения",
|
||||
"Unlocated": "<b>%s<\/b> %p посещения из %c не могут быть геолокализованны.",
|
||||
"VisitorMap": "Карта посещений",
|
||||
"WorldWide": "Весь мир",
|
||||
"WithUnknownRegion": "%s с неизвестным регионом",
|
||||
"WithUnknownCity": "%s с неизвестным городом"
|
||||
}
|
||||
}
|
12
msd2/tracking/piwik/plugins/UserCountryMap/lang/sk.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"Cities": "Mestá",
|
||||
"Countries": "Krajiny",
|
||||
"map": "mapa",
|
||||
"None": "Nič",
|
||||
"NoVisit": "Žiadna návšteva",
|
||||
"RealTimeMap": "Mapa v reálnom čase",
|
||||
"Regions": "Regióny",
|
||||
"VisitorMap": "Mapa návštev"
|
||||
}
|
||||
}
|
9
msd2/tracking/piwik/plugins/UserCountryMap/lang/sl.json
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"map": "zemljevid",
|
||||
"RealTimeMap": "Zemljevid v realnem času",
|
||||
"Regions": "Regije",
|
||||
"VisitorMap": "Zemljevid obiskovalcev",
|
||||
"WorldWide": "Cel svet"
|
||||
}
|
||||
}
|
27
msd2/tracking/piwik/plugins/UserCountryMap/lang/sq.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Kjo shtojcë ofron widget-et Hartë Vizitorësh dhe Hartë Në Kohë Reale. Shënim: Lyp shtojcën UserCountry të aktivizuar.",
|
||||
"AndNOthers": "dhe %s të tjerë",
|
||||
"Cities": "Qytete",
|
||||
"Countries": "Vende",
|
||||
"DaysAgo": "%s ditë më parë",
|
||||
"GoalConversions": "%s shndërrime objektivash",
|
||||
"HoursAgo": "%s orë më parë",
|
||||
"map": "hartë",
|
||||
"MinutesAgo": "%s minuta më parë",
|
||||
"None": "Asnjë",
|
||||
"NoVisit": "Pa vizita",
|
||||
"RealTimeMap": "Hartë e Atypëratyshme",
|
||||
"Regions": "Rajone",
|
||||
"Searches": "%s kërkime",
|
||||
"SecondsAgo": "%s sekonda më parë",
|
||||
"ShowingVisits": "Vizita të gjeovendëzuara, për pjesën e fundit të",
|
||||
"Unlocated": "<b>%s<\/b> %p e vizitës prej %c s’u gjeovendëzua dot.",
|
||||
"VisitorMap": "Hartë Vizitorësh",
|
||||
"WorldWide": "Anembanë Botës",
|
||||
"WithUnknownRegion": "%s me rajon të panjohur",
|
||||
"WithUnknownCity": "%s me qytet të panjohur",
|
||||
"NoVisitsInfo": "Hëpërhë s’ka vizita të shfaqura, ngaqë për këtë periudhë asnjë vizitë nuk ka të dhëna të sakta gjeolokalizimi (gjerësi & gjatësi gjeografike).",
|
||||
"NoVisitsInfo2": "Për ta zgjidhur këtë problem, sigurohuni që po përdorni një shërbim gjeolokalizimi GeoIP me një bazë të dhënash GeoIP qytetesh. Nëse kjo nuk e zgjidh problemin tuaj, atëherë ka mundësi (edhe pse zor) që vizitat tuaja të kenë adresa IP që nuk gjeolokalizohen dot."
|
||||
}
|
||||
}
|
25
msd2/tracking/piwik/plugins/UserCountryMap/lang/sr.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Ovaj dodatak donosi vidžete Mapa posetilaca i Mapa u realnom vremenu. Zahteva UserCountry dodatak.",
|
||||
"AndNOthers": "i %s ostalih",
|
||||
"Cities": "Gradovi",
|
||||
"Countries": "Države",
|
||||
"DaysAgo": "pre %s dana",
|
||||
"GoalConversions": "%s ispunjenih ciljeva",
|
||||
"HoursAgo": "pre %s sati",
|
||||
"map": "mapa",
|
||||
"MinutesAgo": "pre %s minuta",
|
||||
"None": "Ništa",
|
||||
"NoVisit": "Nema poseta",
|
||||
"RealTimeMap": "Mapa u realnom vremenu",
|
||||
"Regions": "Regioni",
|
||||
"Searches": "%s pretraga",
|
||||
"SecondsAgo": "pre %s sekundi",
|
||||
"ShowingVisits": "Geolocirane posete od poslednjih",
|
||||
"Unlocated": "<b>%s<\/b> %p od poseta sa %c nije moguće geolocirati.",
|
||||
"VisitorMap": "Mapa posetilaca",
|
||||
"WorldWide": "Ceo svet",
|
||||
"WithUnknownRegion": "%s sa nepoznatim regionom",
|
||||
"WithUnknownCity": "%s sa nepoznatim gradom"
|
||||
}
|
||||
}
|
27
msd2/tracking/piwik/plugins/UserCountryMap/lang/sv.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Denna plugin ger dig widgetarna besökskarta och realtidskarta. Notera: Kräver aktiverad UserCountry-plugin.",
|
||||
"AndNOthers": "och %s andra",
|
||||
"Cities": "Städer",
|
||||
"Countries": "Länder",
|
||||
"DaysAgo": "%s dagar sedan",
|
||||
"GoalConversions": "%s målomvandlingar",
|
||||
"HoursAgo": "%s timmar sedan",
|
||||
"map": "karta",
|
||||
"MinutesAgo": "%s minuter sedan",
|
||||
"None": "Ingen",
|
||||
"NoVisit": "Inga besök",
|
||||
"RealTimeMap": "Realtidskarta",
|
||||
"Regions": "Regioner",
|
||||
"Searches": "%s sökningar",
|
||||
"SecondsAgo": "%s sekunder sedan",
|
||||
"ShowingVisits": "Geolokaliserade besök de senaste",
|
||||
"Unlocated": "<b>%s<\/b> %p av besöken från %c kunde inte geolokaliseras.",
|
||||
"VisitorMap": "Besökskarta",
|
||||
"WorldWide": "Hela världen",
|
||||
"WithUnknownRegion": "%s med okänd region",
|
||||
"WithUnknownCity": "%s med okänd stad",
|
||||
"NoVisitsInfo": "Det finns inga besök som visas för tillfället, eftersom inget besök för denna period har rätt geografisk platsinformation (latitud och longitud).",
|
||||
"NoVisitsInfo2": "För att lösa detta problem se till att du använder en GeoIP leverantör med en databas över städer. Om det inte löser problemet är det möjligt (men osannolikt) att dina besök har IP-adresser som inte kan geopositioneras."
|
||||
}
|
||||
}
|
5
msd2/tracking/piwik/plugins/UserCountryMap/lang/te.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"map": "పటం"
|
||||
}
|
||||
}
|
5
msd2/tracking/piwik/plugins/UserCountryMap/lang/th.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"map": "แผนที่"
|
||||
}
|
||||
}
|
24
msd2/tracking/piwik/plugins/UserCountryMap/lang/tl.json
Normal file
@ -0,0 +1,24 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"AndNOthers": "at %s iba",
|
||||
"Cities": "Lungsod",
|
||||
"Countries": "Mga Bansa",
|
||||
"DaysAgo": "araw %s na ang nakalipas",
|
||||
"GoalConversions": "Mga %s goal conversion",
|
||||
"HoursAgo": "oras %s na ang nakalipas",
|
||||
"map": "mapa",
|
||||
"MinutesAgo": "%s minuto ang nakalipas",
|
||||
"None": "Wala",
|
||||
"NoVisit": "walang bumisita",
|
||||
"RealTimeMap": "Real-time Map",
|
||||
"Regions": "Mga Rehiyon",
|
||||
"Searches": "%s searches",
|
||||
"SecondsAgo": "segundo %s na ang nakalipas",
|
||||
"ShowingVisits": "Geo-located na pagbisita ng huling",
|
||||
"Unlocated": "<b> %s <b> %p sa mga pagbisita mula sa %c ay hindi pwedeng i-geolocated.",
|
||||
"VisitorMap": "Mapa ng bumisita",
|
||||
"WorldWide": "World-Wide",
|
||||
"WithUnknownRegion": "%s na may hindi kilalang rehiyon",
|
||||
"WithUnknownCity": "%s hindi kilalang lungsod"
|
||||
}
|
||||
}
|
27
msd2/tracking/piwik/plugins/UserCountryMap/lang/tr.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Bu uygulama eki Ziyaretçi Haritası ve Gerçek Zamanlı Harita gereçlerini görüntüler. Not: Kullanıcı Ülkesi uygulama ekinin etkinleştirilmiş olması gerekir.",
|
||||
"AndNOthers": "ve %s diğer",
|
||||
"Cities": "İller",
|
||||
"Countries": "Ülkeler",
|
||||
"DaysAgo": "%s gün önce",
|
||||
"GoalConversions": "%s hedef tutturma",
|
||||
"HoursAgo": "%s saat önce",
|
||||
"map": "harita",
|
||||
"MinutesAgo": "%s dakika önce",
|
||||
"None": "Yok",
|
||||
"NoVisit": "Henüz bir ziyaret yok",
|
||||
"RealTimeMap": "Gerçek Zamanlı Harita",
|
||||
"Regions": "Bölgeler",
|
||||
"Searches": "%s arama",
|
||||
"SecondsAgo": "%s saniye önce",
|
||||
"ShowingVisits": "Son dönemdeki ziyaret coğrafi konumları",
|
||||
"Unlocated": "%c üzerinden <b>%s<\/b> %p ziyaretin coğrafi konumu belirlenemedi.",
|
||||
"VisitorMap": "Ziyaretçi Haritası",
|
||||
"WorldWide": "Dünya Geneli",
|
||||
"WithUnknownRegion": "%s ziyaretin bölgesi bilinmiyor",
|
||||
"WithUnknownCity": "%s ziyaretin ili bilinmiyor",
|
||||
"NoVisitsInfo": "Bu aralıkta doğru coğrafi konum bilgilerine (enlem ve boylam) sahip herhangi bir ziyaret olmadığından, şu anda görüntülenecek bir ziyaret yok.",
|
||||
"NoVisitsInfo2": "Bu sorunu çözmek için GeoIP il veritabanı ile bir GeoIP hizmeti sağlayıcısını kullandığınızdan emin olun. Sorun çözülmez ise (pek olası olmamakla birlikte) ziyaretçilerinizin IP adresleri coğrafi kodlaması yapılamayan adreslerdir."
|
||||
}
|
||||
}
|
25
msd2/tracking/piwik/plugins/UserCountryMap/lang/uk.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "Цей плагін надає віджет відображення відвідувачів на карті в реальному часі. Примітка: вимагає активації плагіну UserCountry.",
|
||||
"AndNOthers": "та %s інших",
|
||||
"Cities": "Міста",
|
||||
"Countries": "Країни",
|
||||
"DaysAgo": "%s днів назад",
|
||||
"GoalConversions": "%s цілей досягнуто",
|
||||
"HoursAgo": "%s годин тому",
|
||||
"map": "мапа",
|
||||
"MinutesAgo": "%s хвилин тому",
|
||||
"None": "Немає",
|
||||
"NoVisit": "Без відвідувань",
|
||||
"RealTimeMap": "Мапа в реальному часі",
|
||||
"Regions": "Регіони",
|
||||
"Searches": "%s пошукових запитів",
|
||||
"SecondsAgo": "%s секунд тому",
|
||||
"ShowingVisits": "Останні геолокаційні відвідування",
|
||||
"Unlocated": "<b>%s<\/b> %p відвідування з %c не можуть бути геолокалізованни.",
|
||||
"VisitorMap": "Мапа відвідувань",
|
||||
"WorldWide": "Весь світ",
|
||||
"WithUnknownRegion": "%s з невідомим регіоном",
|
||||
"WithUnknownCity": "%s з невідомим містом"
|
||||
}
|
||||
}
|
22
msd2/tracking/piwik/plugins/UserCountryMap/lang/vi.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"AndNOthers": "và %s khác",
|
||||
"Cities": "Các thành phố",
|
||||
"Countries": "Các quốc gia",
|
||||
"DaysAgo": "%s ngày cách đây",
|
||||
"GoalConversions": "%s các chuyển đổi mục tiêu",
|
||||
"HoursAgo": "%s giờ cách đây",
|
||||
"map": "Bản đồ",
|
||||
"MinutesAgo": "%s phút cách đây",
|
||||
"None": "Không có gì",
|
||||
"NoVisit": "Không có truy cập nào",
|
||||
"RealTimeMap": "Bản đồ thời gian thực",
|
||||
"Regions": "Các vùng",
|
||||
"Searches": "%s tìm kiếm",
|
||||
"SecondsAgo": "%s giây cách đây",
|
||||
"ShowingVisits": "Định vị lượt truy cập cuối cùng",
|
||||
"Unlocated": "<b>%s<\/b> %p các lượt truy cập từ %c có thể không được định vị.",
|
||||
"VisitorMap": "Bản đồ khách truy cập",
|
||||
"WorldWide": "Khắp thế giới"
|
||||
}
|
||||
}
|
25
msd2/tracking/piwik/plugins/UserCountryMap/lang/zh-cn.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "这个插件提供了访客地图和实时地图的小工具。注意:需要激活UserCountry插件。",
|
||||
"AndNOthers": "和 %s 其它",
|
||||
"Cities": "城市",
|
||||
"Countries": "国家",
|
||||
"DaysAgo": "%s 天前",
|
||||
"GoalConversions": "%s 目标转化",
|
||||
"HoursAgo": "%s 小时前",
|
||||
"map": "地图",
|
||||
"MinutesAgo": "%s 分钟前",
|
||||
"None": "无",
|
||||
"NoVisit": "没有访问",
|
||||
"RealTimeMap": "实时地图",
|
||||
"Regions": "地区",
|
||||
"Searches": "%s 次搜索",
|
||||
"SecondsAgo": "%s 秒前",
|
||||
"ShowingVisits": "最后访客地理位置",
|
||||
"Unlocated": "<b>%s<\/b> %p 的访问来自 %c 无法定位地理位置。",
|
||||
"VisitorMap": "访客地图",
|
||||
"WorldWide": "全世界",
|
||||
"WithUnknownRegion": "%s未知区域",
|
||||
"WithUnknownCity": "%s未知城市"
|
||||
}
|
||||
}
|
27
msd2/tracking/piwik/plugins/UserCountryMap/lang/zh-tw.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"UserCountryMap": {
|
||||
"PluginDescription": "這個外掛提供訪客地圖和即時地圖外掛。注意:需要啟用 UserCountry 外掛。",
|
||||
"AndNOthers": "和其他 %s 人",
|
||||
"Cities": "城市",
|
||||
"Countries": "國家",
|
||||
"DaysAgo": "%s 天前",
|
||||
"GoalConversions": "%s 個目標轉換",
|
||||
"HoursAgo": "%s 小時前",
|
||||
"map": "地圖",
|
||||
"MinutesAgo": "%s 分前",
|
||||
"None": "無",
|
||||
"NoVisit": "沒有資料",
|
||||
"RealTimeMap": "即時地圖",
|
||||
"Regions": "地區",
|
||||
"Searches": "%s 個搜尋次數",
|
||||
"SecondsAgo": "%s 秒前",
|
||||
"ShowingVisits": "訪客地理位置從過去的",
|
||||
"Unlocated": "來自 %c 的訪客 <b>%s<\/b> %p 無法定位地理位置。",
|
||||
"VisitorMap": "訪客分佈地圖",
|
||||
"WorldWide": "全球",
|
||||
"WithUnknownRegion": "%s 個未知地區",
|
||||
"WithUnknownCity": "%s 個未知城市",
|
||||
"NoVisitsInfo": "由於這段期間內沒有任何包含正確地理位置資訊(經度、緯度)的訪問,因此目前沒有顯示任何訪問。",
|
||||
"NoVisitsInfo2": "要解決這個問題,確定你正在使用包含 GeoIP 程式資料庫的 GeoIP 地理位置供應商。如果這沒有解決你的問題,那麼有可能(雖然不太可能)是你的訪客使用了無法被定位的 IP 位址。"
|
||||
}
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Stylesheets for Kartograph map
|
||||
*/
|
||||
|
||||
.UserCountryMap_map svg path {
|
||||
stroke-linejoin: round;
|
||||
}
|
||||
|
||||
.UserCountryMap_map svg .countries {
|
||||
cursor: pointer;
|
||||
stroke-width: 0.5px;
|
||||
stroke: #545C6D;
|
||||
}
|
||||
|
||||
.UserCountryMap_map svg .context {
|
||||
stroke: #BBBBBB;
|
||||
fill: #F6F5F3;
|
||||
stroke-width: 0.5px;
|
||||
}
|
||||
|
||||
.UserCountryMap_map svg .context-clickable {
|
||||
cursor: pointer;
|
||||
stroke: #BBBBBB;
|
||||
fill: #F2F1ED;
|
||||
stroke-width: 0.5px;
|
||||
}
|
||||
|
||||
.UserCountryMap_map svg .context-clickable:hover {
|
||||
fill: #E4E2D7;
|
||||
}
|
||||
|
||||
.UserCountryMap_map svg .regionBG {
|
||||
stroke-width: 6px;
|
||||
stroke: #fff;
|
||||
fill: none;
|
||||
}
|
||||
|
||||
.UserCountryMap_map svg .regionBG-fill {
|
||||
stroke: #555;
|
||||
stroke-width: 0.2px;
|
||||
fill: #F6F5F3;
|
||||
}
|
||||
|
||||
.UserCountryMap_map svg .regionBG-3 {
|
||||
stroke: #ccc;
|
||||
fill: #F2F1ED;
|
||||
stroke-width: 1px;
|
||||
}
|
||||
|
||||
.UserCountryMap_map svg .countryBG {
|
||||
stroke: #fff;
|
||||
fill: #fff;
|
||||
stroke-width: 4px;
|
||||
}
|
||||
|
||||
.UserCountryMap_map svg .regions {
|
||||
stroke-width: 1px;
|
||||
}
|
||||
|
||||
.UserCountryMap_map svg .regions2 {
|
||||
stroke-width: 1px;
|
||||
stroke: #aaa;
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.UserCountryMap_map svg .countryLabelBg {
|
||||
font-weight: bold;
|
||||
font-size: 10px;
|
||||
font-family: Arial, Verdana, Helvetica, sans-serif;
|
||||
fill: #F6F5F3;
|
||||
stroke: #F6F5F3;
|
||||
stroke-width: 3px;
|
||||
stroke-linejoin: round;
|
||||
stroke-linecap: round;
|
||||
}
|
||||
|
||||
.UserCountryMap_map svg .countryLabel {
|
||||
font-weight: bold;
|
||||
font-size: 10px;
|
||||
font-family: Arial, Verdana, Helvetica, sans-serif;
|
||||
fill: #808888;
|
||||
}
|
||||
|
@ -0,0 +1,165 @@
|
||||
/* this should me moved to TableView css sometimes */
|
||||
.dataTableFooterIcons .inactiveIcon:hover {
|
||||
background-color: #F2F1ED;
|
||||
}
|
||||
|
||||
.dataTableFooterIcons .inactiveIcon {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.dataTableFooterIcons .inactiveIcon img {
|
||||
opacity: 0.3;
|
||||
-moz-opacity: 0.3;
|
||||
filter: alpha(opacity=3);
|
||||
}
|
||||
|
||||
.RealTimeMap:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.RealTimeMap-black {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
left: 0;
|
||||
z-index: 10001;
|
||||
width: 1000px;
|
||||
height: 1000px;
|
||||
background: #D5D3C8;
|
||||
}
|
||||
|
||||
.card .RealTimeMap_container {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.RealTimeMap .loadingPiwik {
|
||||
position: absolute !important;
|
||||
top: 42% !important;
|
||||
right: 10px !important;
|
||||
left: 10px !important;
|
||||
z-index: 10002 !important;
|
||||
display: block;
|
||||
color: #000;
|
||||
vertical-align: middle !important;
|
||||
text-align: center;
|
||||
text-shadow: 0 0 5px #fff;
|
||||
}
|
||||
|
||||
.tableIcon.inactiveIcon {
|
||||
color: #99a;
|
||||
}
|
||||
|
||||
.RealTimeMap-overlay,
|
||||
.RealTimeMap-tooltip {
|
||||
display: block;
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.RealTimeMap-overlay .content,
|
||||
.RealTimeMap-tooltip .content {
|
||||
padding: 5px;
|
||||
border-radius: 3px;
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
}
|
||||
|
||||
.RealTimeMap-title {
|
||||
top: 5px;
|
||||
left: 5px;
|
||||
}
|
||||
|
||||
.RealTimeMap-legend {
|
||||
right: 5px;
|
||||
font-size: 9px;
|
||||
bottom: 40px;
|
||||
}
|
||||
|
||||
.RealTimeMap-info {
|
||||
left: 5px;
|
||||
font-size: 11px;
|
||||
bottom: 60px;
|
||||
max-width: 42%;
|
||||
}
|
||||
|
||||
.RealTimeMap-info-btn {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAAOVBMVEX///8AAAAAAABXV1dSUlKsrKzExMTd3d3V1dXp6end3d3p6enz8/P7+/v39/f///+vqZ6oopWUjH2LPulWAAAAE3RSTlMAESIzM2Z3mZmqqrvd7u7/////UUgTXgAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAAYdEVYdENyZWF0aW9uIFRpbWUAMDMuMDEuMjAxM8rVeD8AAABnSURBVBiVhY/LFoAgCEQZ0p4W6f9/bIJ4slV3oTIeBoaICGADIAO8ibEwWn2IcwVovev7znqmCYRon9kEWUFvg3IysXyIXSil3fOvELupC9XUx7pQx/piDV1sVFLwMNF80sw97hj/AXRPCjtYdmhtAAAAAElFTkSuQmCC);
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
cursor: pointer;
|
||||
left: 5px;
|
||||
bottom: 40px;
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
opacity: 0.9;
|
||||
|
||||
}
|
||||
|
||||
.realTimeMap_overlay {
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
font-size: 12px;
|
||||
z-index: 10;
|
||||
text-shadow: 1px 1px 1px #FFFFFF, -1px 1px 1px #FFFFFF, 1px -1px 1px #FFFFFF, -1px -1px 1px #FFFFFF, 1px 1px 1px #FFFFFF, -1px 1px 1px #FFFFFF, 1px -1px 1px #FFFFFF, -1px -1px 1px #FFFFFF;
|
||||
}
|
||||
|
||||
.realTimeMap_datetime {
|
||||
color: #887;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.widget {
|
||||
.realTimeMap_overlay {
|
||||
bottom: 6px;
|
||||
}
|
||||
.realTimeMap_datetime {
|
||||
bottom: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
// realtime map colors (for theming)
|
||||
.realtime-map[data-name=white-bg] {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.realtime-map[data-name=white-fill] {
|
||||
color: #aa9;
|
||||
}
|
||||
|
||||
.realtime-map[data-name=black-bg] {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.realtime-map[data-name=black-fill] {
|
||||
color: @theme-color-text-light;
|
||||
}
|
||||
|
||||
.realtime-map[data-name=visit-stroke] {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.realtime-map[data-name=website-referrer-color] {
|
||||
color: #F29007;
|
||||
}
|
||||
|
||||
.realtime-map[data-name=direct-referrer-color] {
|
||||
color: #5170AE;
|
||||
}
|
||||
|
||||
.realtime-map[data-name=search-referrer-color] {
|
||||
color: #CC3399;
|
||||
}
|
||||
|
||||
.realtime-map[data-name=live-widget-highlight] {
|
||||
color: #E4CD74;
|
||||
}
|
||||
|
||||
.realtime-map[data-name=live-widget-unhighlight] {
|
||||
color: #E4E2D7;
|
||||
}
|
||||
|
||||
.realtime-map[data-name=symbol-animate-fill] {
|
||||
color: #fdb;
|
||||
}
|
||||
|
||||
.realtime-map[data-name=region-stroke-color] {
|
||||
color: #bbb;
|
||||
}
|
@ -0,0 +1,239 @@
|
||||
.UserCountryMap-black {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
left: 0;
|
||||
z-index: 900;
|
||||
width: 1000px;
|
||||
height: 1000px;
|
||||
background: #D5D3C8;
|
||||
}
|
||||
|
||||
.UserCountryMap .unlocatableCount {
|
||||
font-size: 11px;
|
||||
color: @color-silver-l60;
|
||||
}
|
||||
|
||||
.UserCountryMap .loadingPiwik {
|
||||
position: absolute !important;
|
||||
top: 42% !important;
|
||||
right: 10px !important;
|
||||
left: 10px !important;
|
||||
z-index: 100 !important;
|
||||
display: block;
|
||||
font-size: 12px;
|
||||
color: #000;
|
||||
vertical-align: middle !important;
|
||||
text-align: center;
|
||||
text-shadow: 0 0 5px #fff;
|
||||
}
|
||||
|
||||
.tableIcon.inactiveIcon {
|
||||
color: #99a;
|
||||
}
|
||||
|
||||
.UserCountryMap .UserCountryMap-legend {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.UserCountryMap:hover .UserCountryMap-legend {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.UserCountryMap-overlay,
|
||||
.UserCountryMap-tooltip {
|
||||
display: block;
|
||||
position: absolute;
|
||||
z-index: 40;
|
||||
}
|
||||
|
||||
.UserCountryMap-overlay .content,
|
||||
.UserCountryMap-tooltip .content {
|
||||
padding: 5px;
|
||||
border-radius: 3px;
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
}
|
||||
|
||||
.UserCountryMap-title {
|
||||
top: 5px;
|
||||
left: 5px;
|
||||
}
|
||||
|
||||
.UserCountryMap-legend {
|
||||
right: 5px;
|
||||
font-size: 9px;
|
||||
bottom: 24px;
|
||||
}
|
||||
|
||||
.UserCountryMap-info {
|
||||
left: 5px;
|
||||
font-size: 11px;
|
||||
bottom: 60px;
|
||||
max-width: 42%;
|
||||
}
|
||||
|
||||
.UserCountryMap-info-btn {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAAOVBMVEX///8AAAAAAABXV1dSUlKsrKzExMTd3d3V1dXp6end3d3p6enz8/P7+/v39/f///+vqZ6oopWUjH2LPulWAAAAE3RSTlMAESIzM2Z3mZmqqrvd7u7/////UUgTXgAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAAYdEVYdENyZWF0aW9uIFRpbWUAMDMuMDEuMjAxM8rVeD8AAABnSURBVBiVhY/LFoAgCEQZ0p4W6f9/bIJ4slV3oTIeBoaICGADIAO8ibEwWn2IcwVovev7znqmCYRon9kEWUFvg3IysXyIXSil3fOvELupC9XUx7pQx/piDV1sVFLwMNF80sw97hj/AXRPCjtYdmhtAAAAAElFTkSuQmCC);
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
cursor: pointer;
|
||||
left: 13px;
|
||||
bottom: 40px;
|
||||
position: absolute;
|
||||
z-index: 700;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
/* this should me moved to TableView css sometimes */
|
||||
.dataTableFooterIcons .inactiveIcon:hover {
|
||||
background-color: #F2F1ED;
|
||||
}
|
||||
|
||||
.dataTableFooterIcons .inactiveIcon {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.dataTableFooterIcons .inactiveIcon img {
|
||||
opacity: 0.3;
|
||||
-moz-opacity: 0.3;
|
||||
filter: alpha(opacity=3);
|
||||
}
|
||||
|
||||
.mapWidgetStatus {
|
||||
padding-bottom: 24px;
|
||||
}
|
||||
|
||||
.widgetUserCountryMapvisitorMap .widgetTop .button {
|
||||
z-index: 3;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.widgetUserCountryMapvisitorMap .widgetName {
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.widgetUserCountryMapvisitorMap.widgetHover .widgetName {
|
||||
width: 75%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
// visitor map colors
|
||||
.visitor-map[data-name=no-data-color] {
|
||||
color: #E4E2D7;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=one-country-color] {
|
||||
color: #CDDAEF;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=color-range-start-choropleth] {
|
||||
color: #CDDAEF;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=color-range-start-normal] {
|
||||
color: #385993;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=color-range-end-choropleth] {
|
||||
color: #385993;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=color-range-end-normal] {
|
||||
color: #385993;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=country-highlight-color] {
|
||||
color: #f4f45b;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=country-selected-color] {
|
||||
color: #f4f45b;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=unknown-region-fill-color] {
|
||||
color: @theme-color-background-base;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=unknown-region-stroke-color] {
|
||||
color: #bbb;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=region-stroke-color] {
|
||||
color: #3C6FB6;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=region-selected-color] {
|
||||
color: #f4f45b;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=region-highlight-color] {
|
||||
color: #f4f45b;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=invisible-region-background] {
|
||||
color: @theme-color-background-base;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=city-label-color] {
|
||||
color: @theme-color-background-base;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=city-stroke-color] {
|
||||
color: @theme-color-background-base;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=city-highlight-stroke-color] {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=city-highlight-fill-color] {
|
||||
color: #f4f45b;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=city-highlight-label-color] {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=city-label-fill-color] {
|
||||
color: @theme-color-background-base;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=city-selected-color] {
|
||||
color: #f4f45b;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=city-selected-label-color] {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=region-layer-stroke-color] {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=special-metrics-color-scale-1] {
|
||||
color: #385993;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=special-metrics-color-scale-2] {
|
||||
color: #385993;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=special-metrics-color-scale-3] {
|
||||
color: #E87500;
|
||||
}
|
||||
|
||||
.visitor-map[data-name=special-metrics-color-scale-4] {
|
||||
color: #E87500;
|
||||
}
|
||||
|
||||
.userCountryMapSelectCountry, .userCountryMapSelectMetrics {
|
||||
float: right;
|
||||
margin-right: 5px;
|
||||
margin-bottom: 5px;
|
||||
max-width: 10em;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.ui-tooltip.qtip {
|
||||
min-width: 100px;
|
||||
}
|
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/AF.svg
Normal file
After Width: | Height: | Size: 40 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/AFG.svg
Normal file
After Width: | Height: | Size: 23 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/AGO.svg
Normal file
After Width: | Height: | Size: 12 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/ALB.svg
Normal file
After Width: | Height: | Size: 9.7 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/ARE.svg
Normal file
After Width: | Height: | Size: 8.1 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/ARG.svg
Normal file
After Width: | Height: | Size: 15 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/ARM.svg
Normal file
After Width: | Height: | Size: 9.0 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/AS.svg
Normal file
After Width: | Height: | Size: 40 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/AUS.svg
Normal file
After Width: | Height: | Size: 8.0 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/AUT.svg
Normal file
After Width: | Height: | Size: 11 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/AZE.svg
Normal file
After Width: | Height: | Size: 26 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/BDI.svg
Normal file
After Width: | Height: | Size: 8.9 KiB |
1
msd2/tracking/piwik/plugins/UserCountryMap/svg/BEL.svg
Normal file
After Width: | Height: | Size: 13 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/BEN.svg
Normal file
After Width: | Height: | Size: 7.3 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/BFA.svg
Normal file
After Width: | Height: | Size: 22 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/BGD.svg
Normal file
After Width: | Height: | Size: 16 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/BGR.svg
Normal file
After Width: | Height: | Size: 18 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/BIH.svg
Normal file
After Width: | Height: | Size: 12 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/BLR.svg
Normal file
After Width: | Height: | Size: 11 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/BLZ.svg
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 301" height="301px" style="stroke-linejoin: round; stroke:#000; fill:#f6f3f0;" version="1.1" viewBox="0 0 450 301" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }
|
||||
#context path { fill: #eee; stroke: #bbb; } ]]></style></defs><metadata><views><view h="301.0" padding="0.06" w="450"><proj id="laea" lat0="17.5383871525" lon0="-88.4327421438"/><bbox h="34.28" w="19.26" x="989.42" y="987.21"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M293,124L298,118L299,113L296,111L295,115L292,120L288,124L284,135L285,139L293,124Z M283,70L293,47L292,45L288,45L282,62L282,66L278,72L283,70Z M247,11L239,10L230,11L224,14L218,31L201,54L195,66L190,69L186,71L170,62L162,65L159,72L159,82L158,108L150,288L150,289L163,288L181,289L186,289L184,282L187,275L206,250L220,246L230,230L236,225L246,209L251,173L248,149L248,136L250,127L257,114L250,104L255,89L256,78L268,49L269,37L264,24L252,24L247,25L242,23L247,11Z " data-iso="BLZ"/><path d="M186,289L181,289L163,288L150,289L150,288L158,108L159,82L137,82L54,81L0,80L0,202L4,208L6,215L6,221L12,226L23,229L28,234L28,238L25,248L24,259L25,268L0,268L0,299L207,299L205,298L195,292L191,291L186,289Z M243,299L217,282L216,285L219,288L223,293L218,299L243,299Z " data-iso="GTM"/><path d="M331,299L325,295L318,287L309,287L291,290L288,292L278,299L331,299Z M375,299L352,295L343,296L333,299L375,299Z M446,299L435,298L407,299L405,299L446,299Z M450,229L439,232L427,237L420,244L425,244L441,235L450,232L450,229Z " data-iso="HND"/><path d="M273,0L272,5L273,10L282,14L290,32L293,33L298,23L302,14L304,0L273,0Z M159,82L159,72L162,65L170,62L186,71L190,69L195,66L201,54L218,31L224,14L230,11L239,10L247,11L249,6L253,0L0,0L0,80L54,81L137,82L159,82Z M0,268L25,268L24,259L25,248L28,238L28,234L23,229L12,226L6,221L6,215L4,208L0,202L0,268Z " data-iso="MEX"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M298,135L299,134L297,128L296,126L296,138L298,138L298,135Z M270,115L269,116L269,120L271,117L270,115Z M299,112L295,111L298,114L297,119L296,119L292,119L286,125L286,130L284,138L285,139L287,135L288,127L292,123L294,125L297,120L300,116L299,112Z M273,110L272,104L270,100L271,106L273,110Z M264,97L267,96L269,94L270,90L261,97L264,97Z M261,66L248,65L226,71L220,74L220,82L219,85L219,92L213,99L212,105L213,121L216,120L218,119L219,140L220,147L221,152L220,155L218,157L216,158L243,158L247,156L248,155L248,155L247,150L248,133L253,119L254,116L259,116L261,114L260,113L255,113L254,110L249,107L248,104L256,86L257,77L256,75L261,66Z M293,45L292,43L290,45L287,45L284,54L282,61L282,64L284,64L282,69L277,72L277,72L281,71L284,68L286,64L293,47L293,45Z " data-fips="BH01" data-fips-="" data-iso3="BLZ" data-name="Belize"/><path d="M213,121L212,120L201,125L191,125L188,125L183,128L171,129L163,132L156,138L152,237L154,235L160,228L167,226L172,222L179,222L180,220L182,218L184,218L191,213L194,209L193,208L196,204L198,204L198,202L203,192L208,190L209,179L215,173L219,166L219,165L215,159L216,158L218,157L220,155L221,152L220,147L219,140L218,119L216,120L213,121Z " data-fips="BH02" data-fips-="" data-iso3="BLZ" data-name="Cayo"/><path d="M215,35L222,38L227,42L234,52L248,65L261,66L261,66L262,65L268,49L269,39L268,26L263,27L267,24L268,22L263,23L260,25L251,23L244,26L243,28L245,21L240,24L238,22L238,20L246,15L248,12L246,10L239,10L236,9L231,10L227,10L223,14L219,26L216,30L215,35L215,35Z " data-fips="BH03" data-fips-="" data-iso3="BLZ" data-name="Corozal"/><path d="M248,65L234,52L227,42L222,38L215,35L214,36L212,39L206,43L207,44L203,55L198,60L196,64L189,73L187,74L181,67L177,67L172,63L170,62L159,68L159,72L158,88L156,138L163,132L171,129L183,128L188,125L191,125L201,125L212,120L213,121L212,105L213,99L219,92L219,85L220,82L220,74L226,71L248,65Z " data-fips="BH04" data-fips-="" data-iso3="BLZ" data-name="Orange Walk"/><path d="M237,223L239,217L240,214L243,207L243,209L240,221L241,223L242,221L242,218L244,210L246,207L247,199L247,194L250,190L252,190L249,181L253,175L255,174L254,163L250,160L248,156L248,155L247,156L243,158L216,158L215,159L219,165L219,166L215,173L209,179L208,190L203,192L198,202L198,204L201,203L213,203L216,205L217,210L221,216L221,222L225,222L233,222L235,222L238,224L237,223Z " data-fips="BH05" data-fips-="" data-iso3="BLZ" data-name="Stann Creek"/><path d="M198,204L196,204L193,208L194,209L191,213L184,218L182,218L180,220L179,222L172,222L167,226L160,228L154,235L152,237L150,287L151,290L156,288L164,288L170,288L179,290L184,286L182,281L182,279L187,275L189,274L190,271L197,263L199,263L201,258L201,254L203,252L206,250L210,250L211,247L215,249L217,249L218,246L218,251L219,248L223,247L228,239L229,236L232,231L234,230L236,226L238,224L238,224L235,222L233,222L225,222L221,222L221,216L217,210L216,205L213,203L201,203L198,204Z " data-fips="BH06" data-fips-="" data-iso3="BLZ" data-name="Toledo"/></g></svg>
|
After Width: | Height: | Size: 4.9 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/BOL.svg
Normal file
After Width: | Height: | Size: 11 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/BRA.svg
Normal file
After Width: | Height: | Size: 20 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/BRB.svg
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 301" height="301px" style="stroke-linejoin: round; stroke:#000; fill:#f6f3f0;" version="1.1" viewBox="0 0 450 301" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }
|
||||
#context path { fill: #eee; stroke: #bbb; } ]]></style></defs><metadata><views><view h="301.0" padding="0.06" w="450"><proj id="laea" lat0="13.0902865665" lon0="-59.5334721681"/><bbox h="3.95" w="3.06" x="998.39" y="996.7"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M268,258L328,192L273,150L179,38L128,51L132,194L161,239L242,276L268,258Z " data-iso="BRB"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M250,213L198,233L199,239L199,241L199,241L171,256L183,257L203,261L220,271L229,287L235,283L241,282L247,282L254,281L273,261L284,254L279,247L270,244L268,240L261,220L258,216L250,213Z " data-fips="BB01" data-fips-="" data-iso3="BRB" data-name="Christ Church"/><path d="M217,102L199,64L191,64L189,65L183,66L179,70L172,71L169,70L166,77L165,108L170,132L181,132L184,133L188,138L198,116L201,112L203,113L207,113L218,107L220,107L217,102Z " data-fips="BB02" data-fips-="" data-iso3="BRB" data-name="Saint Andrew"/><path d="M246,184L244,182L225,164L225,164L212,166L206,174L204,175L183,184L198,233L250,213L254,198L246,184Z " data-fips="BB03" data-fips-="" data-iso3="BRB" data-name="Saint George"/><path d="M146,105L130,113L125,111L129,184L134,202L136,202L141,206L144,206L149,204L151,201L161,194L155,171L149,164L148,163L151,159L157,143L165,139L170,132L165,108L146,105Z " data-fips="BB04" data-fips-="" data-iso3="BRB" data-name="Saint James"/><path d="M283,157L269,149L245,131L243,132L228,146L226,149L225,164L244,182L246,184L254,198L266,182L273,179L290,162L291,160L283,157Z " data-fips="BB05" data-fips-="" data-iso3="BRB" data-name="Saint John"/><path d="M229,118L220,107L218,107L207,113L203,113L201,112L198,116L188,138L201,146L202,148L205,150L212,166L225,164L225,164L226,149L228,146L243,132L245,131L229,118Z " data-fips="BB06" data-fips-="" data-iso3="BRB" data-name="Saint Joseph"/><path d="M188,40L176,22L159,12L143,19L130,32L123,44L122,59L123,78L126,78L143,66L192,50L193,50L188,40Z " data-fips="BB07" data-fips-="" data-iso3="BRB" data-name="Saint Lucy"/><path d="M183,184L177,190L175,191L161,194L151,201L149,204L144,206L141,206L136,202L134,202L141,226L151,247L163,255L171,256L199,241L199,241L199,239L198,233L183,184Z " data-fips="BB08" data-fips-="" data-iso3="BRB" data-name="Saint Michael"/><path d="M193,50L192,50L143,66L126,78L123,78L125,111L130,113L146,105L165,108L166,77L169,70L172,71L179,70L183,66L189,65L191,64L199,64L193,50Z " data-fips="BB09" data-fips-="" data-iso3="BRB" data-name="Saint Peter"/><path d="M302,241L326,217L328,184L318,171L301,163L291,160L290,162L273,179L266,182L254,198L250,213L258,216L261,220L268,240L270,244L279,247L284,254L302,241Z " data-fips="BB10" data-fips-="" data-iso3="BRB" data-name="Saint Philip"/><path d="M184,133L181,132L170,132L165,139L157,143L151,159L148,163L149,164L155,171L161,194L175,191L177,190L183,184L204,175L206,174L212,166L205,150L202,148L201,146L188,138L184,133Z " data-fips="BB11" data-fips-="BB04" data-iso3="BRB" data-name="Saint Thomas"/></g></svg>
|
After Width: | Height: | Size: 3.3 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/BRN.svg
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 301" height="301px" style="stroke-linejoin: round; stroke:#000; fill:#f6f3f0;" version="1.1" viewBox="0 0 450 301" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }
|
||||
#context path { fill: #eee; stroke: #bbb; } ]]></style></defs><metadata><views><view h="301.0" padding="0.06" w="450"><proj id="laea" lat0="4.3490630152" lon0="114.515106167"/><bbox h="14.85" w="18.76" x="992.64" y="990.25"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M311,59L311,79L311,111L317,138L331,186L347,192L365,197L376,195L383,192L385,188L374,169L370,125L361,96L346,68L339,59L311,59Z M316,44L316,30L303,29L265,48L240,64L217,85L192,103L162,119L131,132L101,136L72,136L80,142L98,152L112,164L121,180L128,195L128,207L137,218L160,219L167,232L184,255L198,271L207,277L219,274L236,259L249,241L257,217L251,213L263,195L265,185L259,176L252,168L250,146L245,117L242,105L251,95L271,84L291,70L311,59L316,44Z " data-iso="BRN"/><path d="M450,299L450,292L445,298L445,299L450,299Z " data-iso="IDN"/><path d="M450,0L444,0L441,11L433,22L410,42L397,51L339,59L346,68L361,96L370,125L374,169L385,188L383,192L376,195L365,197L347,192L331,186L317,138L311,111L311,79L311,59L291,70L271,84L251,95L242,105L245,117L250,146L252,168L259,176L265,185L263,195L251,213L257,217L249,241L236,259L219,274L207,277L198,271L184,255L167,232L160,219L137,218L128,207L128,195L121,180L112,164L98,152L80,142L72,136L70,136L60,140L53,147L54,163L54,178L45,211L38,222L0,266L0,299L445,299L445,298L450,292L450,0Z " data-iso="MYS"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M155,123L138,132L119,136L72,141L86,143L91,146L99,152L105,155L108,157L110,162L117,163L119,169L122,171L123,174L125,181L125,188L128,193L130,204L129,207L125,211L125,215L127,217L135,218L146,220L156,218L161,218L164,222L169,237L171,242L175,247L190,261L196,265L201,276L202,278L224,272L247,250L248,247L250,236L252,231L257,223L259,218L250,212L252,210L253,208L244,203L240,197L238,189L234,182L229,176L223,170L218,164L212,158L204,153L203,147L204,139L201,134L191,133L187,129L184,125L179,114L155,123Z " data-fips="BX01" data-fips-="" data-iso3="BRN" data-name="Belait"/><path d="M245,60L245,66L245,72L244,79L242,84L241,89L239,97L241,101L243,99L252,96L256,93L264,85L268,82L274,81L283,82L291,79L293,76L294,68L300,62L302,58L310,51L316,35L318,31L326,28L330,25L329,22L325,20L319,21L287,34L245,60Z " data-fips="BX02" data-fips-="" data-iso3="BRN" data-name="Brunei and Muara"/><path d="M356,78L349,69L343,65L341,63L340,57L334,58L333,60L335,64L337,68L337,71L331,72L326,75L321,81L316,84L310,99L311,119L313,129L321,148L324,158L327,182L329,186L332,188L346,193L352,194L359,193L361,194L365,197L367,199L372,198L379,202L385,205L394,201L393,196L389,190L381,182L375,175L372,165L370,154L370,145L372,135L373,131L372,125L356,78Z " data-fips="BX03" data-fips-="" data-iso3="BRN" data-name="Temburong"/><path d="M236,65L206,89L197,98L193,105L188,111L179,114L184,125L187,129L191,133L201,134L204,139L203,147L204,153L212,158L218,164L223,170L229,176L234,182L238,189L240,197L244,203L253,208L259,203L262,198L264,194L266,185L267,178L265,176L261,177L256,175L252,168L250,159L249,130L248,125L247,120L242,110L240,106L240,102L241,101L239,97L241,89L242,84L244,79L245,72L245,66L245,60L236,65Z " data-fips="BX04" data-fips-="" data-iso3="BRN" data-name="Tutong"/></g></svg>
|
After Width: | Height: | Size: 3.5 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/BTN.svg
Normal file
After Width: | Height: | Size: 25 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/BWA.svg
Normal file
After Width: | Height: | Size: 6.5 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/CAF.svg
Normal file
After Width: | Height: | Size: 12 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/CAN.svg
Normal file
After Width: | Height: | Size: 36 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/CHE.svg
Normal file
After Width: | Height: | Size: 18 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/CHL.svg
Normal file
After Width: | Height: | Size: 17 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/CHN.svg
Normal file
After Width: | Height: | Size: 32 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/CIV.svg
Normal file
After Width: | Height: | Size: 14 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/CMR.svg
Normal file
After Width: | Height: | Size: 9.9 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/COD.svg
Normal file
After Width: | Height: | Size: 14 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/COG.svg
Normal file
After Width: | Height: | Size: 11 KiB |
2
msd2/tracking/piwik/plugins/UserCountryMap/svg/COL.svg
Normal file
After Width: | Height: | Size: 21 KiB |