add icons for Character groups

This commit is contained in:
coderkun 2014-04-29 14:18:04 +02:00
commit 2d9a41a5fe
3461 changed files with 594457 additions and 0 deletions

View file

@ -0,0 +1,266 @@
<?php
/**
* Piwik - Open source web analytics
*
* @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\Piwik;
use Piwik\Plugins\Goals\API as APIGoals;
use Piwik\Site;
use Piwik\View;
/**
*
*/
class Controller extends \Piwik\Plugin\Controller
{
// By default plot up to the last 30 days of visitors on the map, for low traffic sites
const REAL_TIME_WINDOW = 'last30';
public function visitorMap($fetch = false, $segmentOverride = false)
{
$this->checkUserCountryPluginEnabled();
$idSite = Common::getRequestVar('idSite', 1, 'int');
Piwik::checkUserHasViewAccess($idSite);
$period = Common::getRequestVar('period');
$date = Common::getRequestVar('date');
$segment = $segmentOverride ? : Request::getRawSegmentFromRequest() ? : '';
$token_auth = Piwik::getCurrentUserTokenAuth();
$view = new View('@UserCountryMap/visitorMap');
// request visits summary
$request = new Request(
'method=VisitsSummary.get&format=PHP'
. '&idSite=' . $idSite
. '&period=' . $period
. '&date=' . $date
. '&segment=' . $segment
. '&token_auth=' . $token_auth
. '&filter_limit=-1'
);
$config = array();
$config['visitsSummary'] = unserialize($request->process());
$config['countryDataUrl'] = $this->_report('UserCountry', 'getCountry',
$idSite, $period, $date, $token_auth, false, $segment);
$config['regionDataUrl'] = $this->_report('UserCountry', 'getRegion',
$idSite, $period, $date, $token_auth, true, $segment);
$config['cityDataUrl'] = $this->_report('UserCountry', 'getCity',
$idSite, $period, $date, $token_auth, true, $segment);
$config['countrySummaryUrl'] = $this->getApiRequestUrl('VisitsSummary', 'get',
$idSite, $period, $date, $token_auth, true, $segment);
$view->defaultMetric = 'nb_visits';
// some translations
$view->localeJSON = Common::json_encode(array(
'nb_visits' => Piwik::translate('General_NVisits'),
'one_visit' => Piwik::translate('General_OneVisit'),
'no_visit' => Piwik::translate('UserCountryMap_NoVisit'),
'nb_actions' => Piwik::translate('VisitsSummary_NbActionsDescription'),
'nb_actions_per_visit' => Piwik::translate('VisitsSummary_NbActionsPerVisit'),
'bounce_rate' => Piwik::translate('VisitsSummary_NbVisitsBounced'),
'avg_time_on_site' => Piwik::translate('VisitsSummary_AverageVisitDuration'),
'and_n_others' => Piwik::translate('UserCountryMap_AndNOthers'),
'no_data' => Piwik::translate('CoreHome_ThereIsNoDataForThisReport'),
'nb_uniq_visitors' => Piwik::translate('VisitsSummary_NbUniqueVisitors')
));
$view->reqParamsJSON = $this->getEnrichedRequest($params = array(
'period' => $period,
'idSite' => $idSite,
'date' => $date,
'segment' => $segment,
'token_auth' => $token_auth,
'enable_filter_excludelowpop' => 1,
'filter_excludelowpop_value' => -1
));
$view->metrics = $config['metrics'] = $this->getMetrics($idSite, $period, $date, $token_auth);
$config['svgBasePath'] = 'plugins/UserCountryMap/svg/';
$config['mapCssPath'] = 'plugins/UserCountryMap/stylesheets/map.css';
$view->config = Common::json_encode($config);
$view->noData = empty($config['visitsSummary']['nb_visits']);
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();
$idSite = Common::getRequestVar('idSite', 1, 'int');
Piwik::checkUserHasViewAccess($idSite);
$token_auth = Piwik::getCurrentUserTokenAuth();
$view = new View('@UserCountryMap/realtimeMap');
$view->mapIsStandaloneNotWidget = $standalone;
$view->metrics = $this->getMetrics($idSite, 'range', self::REAL_TIME_WINDOW, $token_auth);
$view->defaultMetric = 'nb_visits';
$liveRefreshAfterMs = (int)Config::getInstance()->General['live_widget_refresh_after_seconds'] * 1000;
$goals = APIGoals::getInstance()->getGoals($idSite);
$site = new Site($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' => Piwik::translate('VisitsSummary_NbActionsDescription'),
'local_time' => Piwik::translate('VisitTime_ColumnLocalTime'),
'from' => Piwik::translate('General_FromReferrer'),
'seconds' => Piwik::translate('UserCountryMap_Seconds'),
'seconds_ago' => Piwik::translate('UserCountryMap_SecondsAgo'),
'minutes' => Piwik::translate('UserCountryMap_Minutes'),
'minutes_ago' => Piwik::translate('UserCountryMap_MinutesAgo'),
'hours' => Piwik::translate('UserCountryMap_Hours'),
'hours_ago' => Piwik::translate('UserCountryMap_HoursAgo'),
'days_ago' => Piwik::translate('UserCountryMap_DaysAgo'),
'actions' => Piwik::translate('VisitsSummary_NbPageviewsDescription'),
'searches' => Piwik::translate('UserCountryMap_Searches'),
'goal_conversions' => Piwik::translate('UserCountryMap_GoalConversions'),
);
$segment = $segmentOverride ? : Request::getRawSegmentFromRequest() ? : '';
$params = array(
'period' => 'range',
'idSite' => $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 = \Piwik\API\Request::getRawSegmentFromRequest();
if (!empty($segment)) {
$params['segment'] = urldecode($segment);
}
}
if ($encode) {
$params = Common::json_encode($params);
}
return $params;
}
private function checkUserCountryPluginEnabled()
{
if (!\Piwik\Plugin\Manager::getInstance()->isPluginActivated('UserCountry')) {
throw new Exception(Piwik::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 = $request->process();
$metrics = array();
foreach ($metaData[0]['metrics'] as $id => $val) {
if (Common::getRequestVar('period') == 'day' || $id != 'nb_uniq_visitors') {
$metrics[] = array($id, $val);
}
}
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);
}
}

View file

@ -0,0 +1,81 @@
<?php
/**
* Piwik - Open source web analytics
*
* @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\Menu\MenuMain;
use Piwik\Piwik;
use Piwik\Version;
use Piwik\WidgetsList;
/**
*/
class UserCountryMap extends \Piwik\Plugin
{
/**
* @see Piwik\Plugin::getInformation
*/
public function getInformation()
{
return array(
'name' => 'User Country Map',
'description' => 'This plugin provides the widgets Visitor Map and Real-time Map. Note: Requires the UserCountry plugin enabled.',
'authors' => array(array('name' => 'Piwik', 'homepage' => 'http://piwik.org/')),
'version' => Version::VERSION,
'license' => 'GPL v3+',
'license_homepage' => 'http://www.gnu.org/licenses/gpl.html'
);
}
public function postLoad()
{
WidgetsList::add('General_Visitors', Piwik::translate('UserCountryMap_VisitorMap'), 'UserCountryMap', 'visitorMap');
WidgetsList::add('Live!', Piwik::translate('UserCountryMap_RealTimeMap'), 'UserCountryMap', 'realtimeMap');
Piwik::addAction('Template.leftColumnUserCountry', array('Piwik\Plugins\UserCountryMap\UserCountryMap', 'insertMapInLocationReport'));
}
static public function insertMapInLocationReport(&$out)
{
$out = '<h2>' . Piwik::translate('UserCountryMap_VisitorMap') . '</h2>';
$out .= FrontController::getInstance()->fetchDispatch('UserCountryMap', 'visitorMap');
}
public function getListHooksRegistered()
{
$hooks = array(
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
'Menu.Reporting.addItems' => 'addMenu'
);
return $hooks;
}
public function addMenu()
{
MenuMain::getInstance()->add('General_Visitors', 'UserCountryMap_RealTimeMap',
array('module' => 'UserCountryMap', 'action' => 'realtimeWorldMap'), true, $order = 70);
}
public function getJsFiles(&$jsFiles)
{
$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[] = "plugins/UserCountryMap/javascripts/vendor/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";
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 B

View file

@ -0,0 +1,640 @@
/*!
* Piwik - Web Analytics
*
* Real time visitors map
* Using Kartograph.js http://kartograph.org/
*
* @link http://piwik.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 = Kartograph.map('#' + this.uniqueId);
$element.focus();
},
_initStandaloneMap: function () {
$('.top_controls').hide();
$('.Menu--dashboard').on('piwikSwitchPage', function (event, item) {
var clickedMenuIsNotMap = ($(item).attr('href').indexOf('module=UserCountryMap&action=realtimeWorldMap') == -1);
if (clickedMenuIsNotMap) {
$('.top_controls').show();
}
});
$('.realTimeMap_overlay').css('top', '0px');
$('.realTimeMap_datetime').css('top', '20px');
},
run: function () {
var debug = 0;
var self = this,
config = self.config,
_ = config._,
map = self.map,
main = $('.RealTimeMap_container', this.$element),
worldTotalVisits = 0,
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,
width = main.width(),
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,
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']),
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', 'referrerType', 'referrerName',
'referrerTypeName', 'browserIcon', 'operatingSystemIcon',
'countryFlag', 'idVisit', 'actionDetails', 'continentCode',
'actions', 'searches', 'goalConversions', 'visitorId'].join(','),
minTimestamp: firstRun ? -1 : 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 src="' + src + '" alt="" class="icon" />&nbsp;'; };
return '<h3>' + (r.city ? r.city + ' / ' : '') + r.country + '</h3>' +
// icons
ico(r.countryFlag) + ico(r.browserIcon) + ico(r.operatingSystemIcon) + '<br/>' +
// last action
(ad && ad.length && ad[ad.length - 1].pageTitle ? '<em>' + ad[ad.length - 1].pageTitle + '</em><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 + ': ' + r.referrerName) + '<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 Piwik
*
* 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) {
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: Kartograph.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;
});
}
// 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);
}
firstRun = false;
}
if (firstRun && lastVisits.length) {
// zoom changed, use cached report data
gotNewReport(lastVisits.slice());
} 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('countries', {
styles: {
fill: colorTheme[currentTheme].fill,
stroke: colorTheme[currentTheme].bg,
'stroke-width': 0.2
},
click: function (d, p, evt) {
evt.stopPropagation();
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;
}
});
var lastVisitId = -1,
lastReport = [];
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) {
clearTimeout(nextReqTimer);
$.each(symbolFadeInTimer, function (i, t) {
clearTimeout(t);
});
symbolFadeInTimer = [];
try {
map.removeSymbols();
} catch (e) {}
currentMap = _map;
_updateMap(currentMap + '.svg', initMap);
storeSettings();
}
updateMap(location.hash && (location.hash == '#world' || location.hash.match(/^#[A-Z][A-Z]$/)) ? 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') 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) $('.tableIcon span').hide();
else $('.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;
}
});
}());

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,84 @@
/*
* 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;
}

View file

@ -0,0 +1,146 @@
/* 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-black {
position: absolute;
right: 0;
left: 0;
z-index: 10001;
width: 1000px;
height: 1000px;
background: #D5D3C8;
}
.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;
bottom: 6px;
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 {
bottom: 24px;
color: #887;
font-size: 14px;
}
// 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: #444440;
}
.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;
}

View file

@ -0,0 +1,222 @@
.UserCountryMap-black {
position: absolute;
right: 0;
left: 0;
z-index: 900;
width: 1000px;
height: 1000px;
background: #D5D3C8;
}
.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: 9;
}
.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: 40px;
}
.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: 5px;
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: #fff;
}
.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: #fff;
}
.visitor-map[data-name=city-label-color] {
color: #fff;
}
.visitor-map[data-name=city-stroke-color] {
color: #fff;
}
.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: #fff;
}
.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;
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 40 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 23 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 49 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 26 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

View 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

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 20 KiB

View 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

View 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

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 25 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 36 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 35 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 10 KiB

View 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="34.8758560247" lon0="33.3819793127"/><bbox h="9.17" w="20.68" x="987.68" y="995.02"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M121,78L123,85L137,93L155,100L166,101L181,93L201,85L226,78L239,83L256,83L268,81L277,87L284,97L286,123L289,125L300,114L319,118L333,120L344,115L351,114L358,112L367,106L375,99L383,101L396,109L405,107L389,87L383,70L391,46L450,3L450,0L408,0L317,30L285,34L252,33L211,28L172,20L168,50L158,76L134,81L121,78Z " data-iso="CYN"/><path d="M108,75L87,82L69,100L50,110L31,101L34,136L55,183L62,196L75,203L116,218L128,219L154,215L165,222L171,238L185,240L189,232L189,222L197,212L209,206L223,206L249,200L275,192L297,177L338,133L351,132L365,134L390,132L415,127L409,112L405,107L396,109L383,101L375,99L367,106L358,112L351,114L344,115L333,120L319,118L300,114L289,125L286,123L284,97L277,87L268,81L256,83L239,83L226,78L201,85L181,93L166,101L155,100L137,93L123,85L121,78L108,75Z " data-iso="CYP"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M354,127L354,130L359,130L358,129L354,127Z M348,124L349,123L349,121L347,121L347,124L348,124Z M295,116L299,125L297,125L293,134L287,134L281,136L277,134L276,134L273,142L272,143L260,145L256,142L254,143L249,147L242,153L241,154L236,150L228,151L227,149L224,149L215,153L214,155L213,157L213,162L214,163L230,168L240,178L242,181L244,187L243,195L244,203L246,202L249,200L266,197L272,193L272,186L275,190L287,185L297,182L304,174L307,174L314,173L317,172L320,166L323,164L324,162L323,157L324,152L326,143L329,138L334,134L338,132L335,125L329,124L320,120L317,121L314,120L312,119L310,121L308,124L304,126L301,125L300,121L300,115L298,113L296,115L295,116Z " data-fips="CY03" data-fips-="" data-iso3="CYP" data-name="Larnaca"/><path d="M293,118L292,125L291,130L285,131L283,128L282,124L285,113L285,104L285,97L277,90L277,82L275,82L266,83L262,82L261,83L256,88L253,90L250,94L245,93L242,91L237,84L234,83L226,81L222,81L217,85L211,89L206,89L200,88L194,87L192,88L190,90L181,95L173,103L170,105L167,105L160,100L158,101L153,107L148,108L144,107L142,105L142,99L139,97L130,92L124,90L121,88L119,85L116,76L116,75L109,74L107,81L104,83L101,83L98,83L95,81L93,78L89,78L89,78L89,79L98,88L98,90L103,96L102,105L98,107L99,110L102,115L107,118L111,126L112,139L111,140L109,147L112,151L114,153L117,151L118,153L123,152L125,149L127,148L133,150L133,147L135,139L141,137L144,139L156,142L163,142L167,141L175,136L179,135L180,136L185,143L193,149L196,154L204,153L213,157L214,155L215,153L224,149L227,149L228,151L236,150L241,154L242,153L249,147L254,143L256,142L260,145L272,143L273,142L276,134L277,134L281,136L287,134L293,134L297,125L299,125L295,116L293,118Z " data-fips="CY04" data-fips-="" data-iso3="CYP" data-name="Nicosia"/><path d="M87,76L86,76L84,79L81,82L78,86L75,94L70,101L63,108L55,112L46,112L42,111L38,108L32,100L27,97L25,99L24,104L25,110L27,115L31,123L32,128L33,137L37,144L35,147L35,151L40,159L47,164L52,178L53,182L54,190L56,191L64,198L68,201L72,202L81,203L86,205L90,206L101,214L105,215L105,209L107,203L108,201L112,199L117,195L119,194L120,188L119,181L122,176L127,172L132,163L136,159L134,154L133,150L127,148L125,149L123,152L118,153L117,151L114,153L112,151L109,147L111,140L112,139L111,126L107,118L102,115L99,110L98,107L102,105L103,96L98,90L98,88L89,79L89,78L87,76Z " data-fips="CY06" data-fips-="" data-iso3="CYP" data-name="Paphos"/><path d="M387,110L381,108L377,105L372,110L369,111L366,108L361,111L360,114L365,116L367,118L369,126L373,127L373,131L371,132L368,134L370,135L374,134L380,137L384,132L395,129L407,128L409,129L412,132L417,133L426,133L423,132L420,127L418,123L415,115L412,112L409,109L404,111L399,109L396,109L392,111L387,110Z " data-fips="CY01" data-fips-="" data-iso3="CYP" data-name="Famagusta"/><path d="M204,153L196,154L193,149L185,143L180,136L179,135L175,136L167,141L163,142L156,142L144,139L141,137L135,139L133,147L133,150L134,154L136,159L132,163L127,172L122,176L119,181L120,188L119,194L117,195L112,199L108,201L107,203L105,209L105,215L110,217L119,219L128,218L131,217L131,213L132,211L139,213L141,209L147,205L153,205L153,208L154,211L160,215L164,217L165,214L170,216L171,214L174,211L181,212L181,220L177,220L176,218L174,220L174,224L175,225L177,223L182,223L187,223L189,218L200,209L203,207L206,206L222,204L238,206L241,205L244,203L243,195L244,187L242,181L240,178L230,168L214,163L213,162L213,157L204,153Z " data-fips="CY05" data-fips-="" data-iso3="CYP" data-name="Limassol"/></g></svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

View 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="11.2285397407" lon0="42.8569994876"/><bbox h="24.35" w="22.6" x="985.39" y="980.53"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M311,188L293,185L274,185L256,189L235,197L225,198L219,197L216,187L233,189L257,162L294,148L327,127L337,118L343,108L348,93L339,66L331,52L306,22L304,15L288,22L270,28L267,28L261,36L252,58L243,65L238,65L210,44L205,43L199,47L195,51L180,73L138,135L131,144L111,164L108,169L104,184L103,211L108,276L119,280L132,282L146,278L163,275L184,273L207,267L221,261L236,262L248,267L255,272L264,274L275,274L294,244L311,218L323,198L311,188Z " data-iso="DJI"/><path d="M195,51L199,47L205,43L210,44L238,65L243,65L252,58L261,36L267,28L270,28L288,22L304,15L300,0L150,0L159,5L172,22L182,36L195,51Z " data-iso="ERI"/><path d="M275,274L264,274L255,272L248,267L236,262L221,261L207,267L184,273L163,275L146,278L132,282L119,280L108,276L103,211L104,184L108,169L111,164L131,144L138,135L180,73L195,51L182,36L172,22L159,5L150,0L0,0L0,299L257,299L259,297L267,288L273,280L275,274Z " data-iso="ETH"/><path d="M323,198L311,218L294,244L275,274L273,280L267,288L259,297L257,299L408,299L381,268L352,221L323,198Z " data-iso="SOL"/><path d="M357,0L359,16L381,9L410,20L424,28L436,30L450,25L450,0L357,0Z " data-iso="YEM"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M243,234L231,240L229,245L229,260L229,260L230,260L240,263L244,263L247,264L250,272L253,274L262,276L266,277L270,276L272,274L276,274L315,212L300,203L296,201L274,206L267,219L262,222L243,234Z " data-fips="DJ01" data-fips-="GM15" data-iso3="DJI" data-name="Ali Sabieh"/><path d="M312,191L310,183L309,181L305,186L302,186L299,184L293,185L272,185L280,194L289,195L294,195L313,192L312,191Z " data-fips="DJ07" data-fips-="DJ03|GM15" data-iso3="DJI" data-name="Djibouti"/><path d="M193,175L193,181L197,198L200,210L212,228L243,234L262,222L267,219L274,206L296,201L300,203L315,212L323,200L321,198L316,195L314,194L313,192L294,195L289,195L280,194L272,185L268,185L266,183L258,187L248,188L241,191L238,193L237,196L240,198L238,201L234,200L230,202L218,197L218,194L217,191L200,183L198,181L193,175Z " data-fips="" data-fips-="" data-iso3="DJI" data-name="Arta"/><path d="M229,260L229,260L229,245L231,240L243,234L212,228L200,210L197,198L193,181L193,175L167,149L161,146L137,141L135,140L129,148L123,152L122,153L117,158L110,162L108,167L106,178L101,192L101,200L105,218L107,234L106,263L105,270L103,274L104,276L108,278L126,282L127,284L131,282L140,282L144,281L148,276L152,275L161,274L168,276L171,276L178,273L184,273L188,271L196,273L223,261L229,260Z " data-fips="DJ06" data-fips-="DJ02|GM15" data-iso3="DJI" data-name="Dikhil"/><path d="M242,65L242,70L240,72L239,77L244,86L252,93L258,95L289,129L291,132L295,141L300,147L301,146L301,146L313,132L317,129L320,128L327,128L330,127L334,125L343,121L346,118L348,113L349,108L348,97L348,88L348,85L342,78L340,64L337,58L336,56L336,48L333,50L331,49L329,47L325,41L311,25L307,16L304,15L272,29L267,27L265,29L261,38L255,44L255,48L257,53L256,57L250,59L246,63L242,65Z " data-fips="DJ04" data-fips-="GM15" data-iso3="DJI" data-name="Obock"/><path d="M135,140L137,141L161,146L167,149L193,175L198,181L200,183L217,191L217,191L217,185L220,185L222,188L233,189L240,185L250,166L254,163L258,160L272,155L274,155L278,156L285,153L293,153L298,147L300,147L295,141L291,132L289,129L258,95L252,93L244,86L239,77L240,72L242,70L242,65L241,65L239,68L216,47L209,44L205,43L203,43L195,51L186,64L181,73L162,100L158,108L155,110L153,111L147,123L135,140Z " data-fips="DJ05" data-fips-="GM15" data-iso3="DJI" data-name="Tadjourah"/></g></svg>

After

Width:  |  Height:  |  Size: 4 KiB

View 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="15.5389872301" lon0="-61.3536410472"/><bbox h="5.67" w="3.19" x="998.22" y="998.66"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M280,259L299,179L283,79L256,41L169,9L162,29L155,80L196,161L221,273L280,259Z " data-iso="DMA"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M278,76L269,59L265,49L263,45L232,32L225,34L215,39L207,33L197,18L189,13L182,10L175,9L180,34L182,37L186,41L189,44L193,45L194,52L194,71L194,75L198,78L199,81L201,94L202,100L210,108L215,111L226,108L232,111L238,112L244,115L254,123L257,132L269,121L272,119L274,119L276,117L280,115L284,112L284,94L288,90L278,76Z " data-fips="DO02" data-fips-="" data-iso3="DMA" data-name="Saint Andrew"/><path d="M296,184L300,160L297,159L294,157L292,156L296,138L295,114L289,91L288,90L284,94L284,112L280,115L276,117L274,119L272,119L269,121L257,132L247,158L251,169L251,197L261,203L263,205L263,206L264,212L263,215L268,211L271,210L297,205L296,184Z " data-fips="DO03" data-fips-="" data-iso3="DMA" data-name="Saint David"/><path d="M264,212L263,206L263,205L261,203L251,197L225,210L223,215L219,218L210,217L210,221L211,229L219,238L223,245L222,248L222,252L233,256L242,243L248,238L258,231L266,218L265,217L263,215L264,212Z " data-fips="DO04" data-fips-="" data-iso3="DMA" data-name="Saint George"/><path d="M162,9L155,37L150,45L155,45L162,48L167,49L163,55L153,62L150,67L150,73L152,76L153,77L156,74L165,75L166,75L201,94L199,81L198,78L194,75L194,71L194,52L193,45L189,44L186,41L182,37L180,34L175,9L162,9Z " data-fips="DO05" data-fips-="" data-iso3="DMA" data-name="Saint John"/><path d="M254,123L244,115L238,112L232,111L226,108L215,111L210,108L202,100L191,101L186,103L181,109L171,118L172,119L174,126L176,132L178,137L192,152L194,157L196,168L203,165L210,165L221,168L226,168L247,158L257,132L254,123Z " data-fips="DO06" data-fips-="" data-iso3="DMA" data-name="Saint Joseph"/><path d="M222,252L223,267L223,268L223,268L233,263L233,256L222,252Z " data-fips="DO07" data-fips-="" data-iso3="DMA" data-name="Saint Luke"/><path d="M233,263L223,268L223,268L221,283L222,288L229,290L236,288L239,284L233,263Z " data-fips="DO08" data-fips-="" data-iso3="DMA" data-name="Saint Mark"/><path d="M240,283L242,278L250,275L254,266L257,263L261,262L266,263L278,262L283,258L296,236L297,210L297,205L271,210L268,211L263,215L265,217L266,218L258,231L248,238L242,243L233,256L233,263L239,284L240,283Z " data-fips="DO09" data-fips-="" data-iso3="DMA" data-name="Saint Patrick"/><path d="M251,169L247,158L226,168L221,168L210,165L203,165L196,168L196,169L197,174L206,193L209,205L210,217L219,218L223,215L225,210L251,197L251,169Z " data-fips="DO10" data-fips-="" data-iso3="DMA" data-name="Saint Paul"/><path d="M166,75L165,75L156,74L153,77L156,79L158,84L159,100L160,108L165,112L168,114L171,118L181,109L186,103L191,101L202,100L201,94L166,75Z " data-fips="DO11" data-fips-="" data-iso3="DMA" data-name="Saint Peter"/></g></svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 37 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

View 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.9116970759" lon0="178.289753188"/><bbox h="124.32" w="93.19" x="952.55" y="927.99"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M233,205L225,205L220,210L223,209L227,206L229,207L233,206L233,205Z M257,179L256,174L254,177L257,179Z M325,175L323,173L322,174L325,175Z M227,157L226,156L217,158L214,158L208,160L202,165L203,168L198,173L198,175L204,180L209,181L215,183L223,183L228,180L238,178L234,164L230,162L227,157Z M259,157L260,155L258,154L259,157Z M197,151L199,148L196,149L197,151Z M276,145L276,140L274,143L276,145Z M276,144L279,142L281,139L279,137L276,140L276,144Z M276,122L270,123L268,123L261,125L258,128L243,133L242,135L237,136L235,135L233,140L236,140L239,145L249,141L253,138L256,138L257,139L260,140L274,139L273,136L274,132L272,132L263,139L263,135L265,132L269,130L276,122Z " data-iso="FJI"/><path d="M415,277L413,280L415,282L415,277Z M408,273L404,270L403,271L408,276L408,273Z M445,199L442,199L444,201L445,199Z " data-iso="TON"/><path d="M332,68L328,66L329,67L332,68Z " data-iso="WLF"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M214,183L220,184L226,181L235,180L238,178L236,175L237,172L236,166L232,162L232,162L230,166L219,166L218,171L219,174L218,176L214,175L214,179L213,182L214,183Z " data-fips="FJ01" data-fips-="" data-iso3="FJI" data-name="Central"/><path d="M230,203L228,204L224,207L221,207L218,209L222,210L224,210L224,207L228,206L229,207L233,206L233,204L230,203Z M273,194L274,192L271,193L273,194Z M256,174L254,174L254,177L256,179L257,177L256,174Z M324,176L324,173L322,173L324,176Z M242,168L243,165L242,164L242,168Z M259,157L260,153L258,154L259,157Z " data-fips="FJ02" data-fips-="" data-iso3="FJI" data-name="Eastern"/><path d="M274,146L276,145L276,140L272,145L274,146Z M279,142L281,140L279,137L277,144L279,142Z M273,124L275,121L272,123L268,122L265,124L264,124L261,125L256,129L253,129L246,130L245,132L243,133L242,135L241,134L238,136L235,135L233,141L237,140L239,146L242,145L243,142L248,143L249,140L254,137L257,139L256,140L260,141L264,140L273,137L271,136L274,131L274,131L268,135L266,137L261,139L263,135L273,124Z " data-fips="FJ03" data-fips-="" data-iso3="FJI" data-name="Northern"/><path d="M213,182L214,179L214,175L218,176L219,174L218,171L219,166L230,166L232,162L231,162L226,156L215,158L214,159L209,159L209,161L202,166L203,168L201,171L198,172L198,175L200,179L210,182L213,182Z M199,148L197,148L196,150L199,148Z M204,140L206,138L203,140L204,140Z " data-fips="FJ05" data-fips-="" data-iso3="FJI" data-name="Western"/></g></svg>

After

Width:  |  Height:  |  Size: 3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

View 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="62.1992528346" lon0="-6.78808412278"/><bbox h="13.35" w="8.83" x="994.58" y="997.06"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M259,274L259,260L254,249L254,240L250,236L235,231L232,223L228,222L229,231L234,250L250,272L259,282L262,283L259,274Z M269,175L269,169L264,159L247,150L240,148L235,149L238,159L241,165L251,172L263,185L266,185L269,175Z M196,82L190,79L177,82L165,82L171,100L187,108L197,110L205,108L212,101L207,93L196,82Z M268,58L245,47L226,33L198,42L218,95L245,127L256,134L257,131L256,124L245,99L241,95L241,88L243,82L250,85L259,95L265,95L268,58Z M297,49L288,40L277,23L278,44L277,59L279,64L281,66L291,69L297,49Z " data-iso="FRO"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M234,225L233,225L235,220L233,218L231,218L226,221L227,224L225,224L227,234L230,241L234,247L237,252L237,259L242,267L254,278L259,286L262,288L265,288L266,285L266,280L264,276L261,275L262,271L256,270L254,271L252,275L252,272L248,269L248,267L251,268L253,267L258,265L262,265L263,262L257,259L258,257L257,252L252,252L248,245L245,244L246,242L250,243L254,247L256,246L257,244L257,240L254,237L246,236L243,231L231,233L231,231L237,225L234,225Z M240,149L235,146L232,146L233,150L236,157L237,165L241,168L253,170L255,172L263,190L265,190L268,185L269,173L270,170L270,168L266,164L265,160L263,158L253,155L252,154L247,149L243,149L240,149Z M149,94L148,91L144,88L140,89L137,91L137,93L148,94L149,94Z M199,84L196,83L191,79L192,75L183,78L179,81L178,85L172,84L167,79L164,80L165,85L167,91L170,94L177,96L183,100L171,100L171,102L173,102L178,106L186,108L192,112L193,111L193,109L189,104L191,102L193,104L195,111L194,115L196,113L204,110L199,108L201,106L208,108L211,106L215,96L213,92L209,92L206,92L203,91L199,84Z M307,52L310,48L309,43L313,39L313,37L311,36L307,36L303,40L301,41L299,43L303,53L307,52Z M196,35L195,34L193,45L193,50L196,55L194,56L192,64L190,66L190,71L193,75L198,79L203,76L205,79L203,80L202,83L204,86L206,87L216,89L222,95L223,97L224,105L225,107L232,110L239,122L247,128L250,134L254,138L259,136L258,132L259,126L255,123L254,119L257,112L253,108L245,108L240,106L240,104L248,104L249,103L244,92L233,93L238,89L239,87L239,80L232,78L225,71L220,70L221,64L214,51L213,44L211,41L207,38L196,35Z M235,32L233,32L229,28L228,28L222,29L217,33L215,34L210,32L209,36L213,41L218,55L226,68L233,76L238,76L248,89L254,93L256,87L255,80L251,75L247,72L244,68L248,67L252,71L255,76L258,81L259,88L259,95L260,101L265,104L264,102L266,98L266,96L264,95L265,92L273,91L273,89L268,84L266,82L263,81L263,79L270,82L276,83L272,78L256,70L256,68L258,67L266,68L271,67L271,65L265,61L258,58L253,61L248,57L248,55L251,54L253,51L254,48L253,47L243,45L246,43L244,40L241,40L231,43L231,46L232,55L230,52L229,41L230,39L235,35L235,32Z M299,49L292,45L287,39L282,32L279,21L280,19L276,21L275,25L276,30L279,46L278,53L275,51L274,53L274,58L275,62L280,68L282,72L284,71L280,58L282,57L284,60L287,67L289,70L292,70L297,68L297,66L295,58L292,60L290,58L285,51L286,49L289,52L293,54L297,53L299,49Z M274,47L272,37L267,24L265,20L263,17L261,20L261,26L262,32L270,47L272,49L274,47Z M266,55L267,52L256,30L252,21L249,16L247,17L248,21L251,30L259,47L260,51L262,54L264,56L266,55Z M290,31L288,24L286,21L284,14L282,12L279,11L277,13L278,16L280,18L281,25L283,30L286,35L290,39L294,41L297,39L298,35L297,32L294,31L292,33L290,31Z " data-fips="FO00" data-fips-="" data-iso3="FRO" data-name="Eysturoyar"/></g></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

View 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.5716008571" lon0="-14.8021772893"/><bbox h="13.57" w="40.48" x="973.49" y="994.76"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M438,255L438,266L446,282L445,294L443,299L450,299L450,256L438,255Z " data-iso="GIN"/><path d="M64,147L76,162L88,163L117,149L155,147L192,142L210,144L211,146L205,148L186,147L161,152L137,154L114,158L110,165L110,171L99,170L80,173L61,168L55,161L53,150L46,145L35,151L25,163L32,189L33,201L41,193L48,189L104,188L157,189L160,166L181,162L204,159L230,156L236,152L240,144L243,137L248,134L265,140L275,146L312,163L343,174L369,178L400,170L422,165L425,155L421,145L405,136L382,137L375,139L365,142L358,144L348,142L334,134L326,126L314,123L300,119L277,103L265,100L254,99L232,102L211,111L200,130L94,128L60,129L64,147Z " data-iso="GMB"/><path d="M438,255L393,255L274,255L242,255L191,281L156,288L115,285L102,287L78,297L66,299L443,299L445,294L446,282L438,266L438,255Z M40,299L62,299L46,297L39,298L40,299Z " data-iso="GNB"/><path d="M438,255L450,256L450,0L0,0L0,12L6,17L18,44L29,60L30,72L37,72L46,68L53,67L50,72L38,78L33,86L36,94L49,104L57,115L60,129L94,128L200,130L211,111L232,102L254,99L265,100L277,103L300,119L314,123L326,126L334,134L348,142L358,144L365,142L375,139L382,137L405,136L421,145L425,155L422,165L400,170L369,178L343,174L312,163L275,146L265,140L248,134L243,137L240,144L236,152L230,156L204,159L181,162L160,166L157,189L104,188L48,189L41,193L33,201L33,212L32,226L33,251L30,255L32,261L35,267L40,264L44,262L49,253L54,249L61,256L73,261L75,264L74,268L69,267L60,264L44,270L32,275L29,282L34,292L39,298L46,297L62,299L66,299L78,297L102,287L115,285L156,288L191,281L242,255L274,255L393,255L438,255Z " data-iso="SEN"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M202,123L210,124L218,124L219,125L219,133L220,137L229,141L237,137L244,134L246,132L250,130L254,132L260,138L266,143L275,147L279,148L298,154L300,158L304,161L309,163L313,164L323,162L324,163L328,166L332,158L337,156L336,156L333,149L335,147L340,140L339,139L338,138L335,130L334,127L329,123L324,120L318,120L313,121L304,126L301,126L295,121L292,112L289,107L284,104L280,102L266,101L258,98L255,98L246,102L236,108L228,103L222,102L216,105L210,109L206,113L202,122L202,123Z " data-fips="GA03" data-fips-="" data-iso3="GMB" data-name="Maccarthy Island"/><path d="M340,140L335,147L333,149L336,156L337,156L332,158L328,166L329,168L333,169L337,169L340,171L344,175L353,178L356,179L364,178L371,179L378,178L384,173L388,172L394,170L400,170L405,168L415,167L422,164L425,159L424,148L421,144L418,142L415,136L413,134L406,132L401,131L397,134L392,134L383,138L373,141L366,145L355,149L350,147L340,140Z " data-fips="GA04" data-fips-="" data-iso3="GMB" data-name="Upper River"/><path d="M158,176L139,172L129,173L127,173L123,176L122,175L119,171L116,170L114,171L115,171L115,172L110,175L107,176L104,175L105,170L104,167L100,166L98,166L85,174L83,171L76,172L76,173L79,173L84,181L81,179L79,181L79,175L75,174L71,171L69,170L62,170L56,163L56,161L55,157L54,153L52,151L53,150L57,149L56,147L50,144L48,146L45,143L44,142L41,145L33,154L27,158L25,162L24,163L25,171L29,177L28,185L31,192L31,194L30,198L34,201L35,196L38,193L40,188L45,187L157,189L158,188L158,179L158,176Z " data-fips="GA05" data-fips-="GA01" data-iso3="GMB" data-name="Banjul"/><path d="M244,134L237,137L229,141L229,143L228,148L223,150L217,150L212,148L208,143L206,143L202,144L196,141L194,141L190,146L188,147L184,148L179,145L174,148L166,151L164,151L155,150L152,150L148,152L145,152L136,154L117,153L113,151L111,155L106,159L105,161L108,174L108,175L113,171L114,171L116,170L119,171L122,175L123,176L127,173L129,173L139,172L158,176L158,167L161,164L170,163L176,161L187,162L199,158L203,158L218,161L223,161L235,156L238,152L239,140L241,137L244,134Z M202,124L201,130L199,131L124,130L60,129L62,135L61,140L66,148L68,155L65,161L70,161L80,164L92,163L95,162L94,158L96,154L97,156L96,160L102,158L107,153L116,148L123,150L166,147L170,145L176,142L181,142L185,144L187,143L192,139L194,138L206,141L213,146L221,148L224,148L228,145L220,137L219,133L219,125L218,124L210,124L202,123L202,124Z " data-fips="GA02" data-fips-="" data-iso3="GMB" data-name="Lower River"/></g></svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.8 KiB

View 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="-1.44572539656" lon0="5.63310697886"/><bbox h="73.22" w="79.09" x="995.5" y="931.39"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M292,91L295,96L301,98L357,98L369,98L369,95L370,92L380,91L399,92L421,92L446,94L450,94L450,0L251,0L251,1L266,7L267,9L275,9L276,6L276,3L282,4L285,2L284,8L288,12L289,13L283,12L279,16L282,21L284,25L290,25L285,29L295,41L297,44L299,52L296,60L295,70L293,79L292,91Z " data-iso="CMR"/><path d="M369,98L369,110L369,157L303,157L297,159L290,153L287,153L281,155L281,157L283,168L283,176L280,178L279,174L276,174L268,177L268,180L272,183L275,189L279,193L291,198L299,196L302,198L292,201L292,205L289,203L280,200L275,199L272,197L269,190L267,193L269,210L266,225L258,236L251,239L249,242L243,243L239,238L237,237L244,253L249,261L255,273L262,277L269,274L266,282L271,285L274,284L278,288L272,290L268,290L253,273L254,277L259,284L264,294L265,299L450,299L450,94L446,94L421,92L399,92L380,91L370,92L369,95L369,98Z " data-iso="GAB"/><path d="M369,98L357,98L301,98L295,96L292,91L291,103L292,110L288,117L283,129L281,130L276,135L273,142L271,150L277,151L282,154L281,155L287,153L290,153L297,159L303,157L369,157L369,110L369,98Z M238,18L235,19L233,23L232,27L230,32L224,34L223,41L225,43L234,45L237,45L239,41L241,36L249,25L249,21L247,18L238,18Z " data-iso="GNQ"/><path d="M134,201L138,195L138,191L135,187L132,187L127,190L124,193L124,196L128,205L134,201Z M172,128L174,125L172,122L167,127L170,130L172,128Z " data-iso="STP"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M311,98L312,104L311,106L307,110L307,116L302,125L298,129L307,132L308,133L309,143L315,151L313,152L307,153L302,157L303,157L323,157L350,157L351,155L347,148L341,143L341,141L345,135L348,130L348,128L340,127L337,129L331,127L332,124L331,122L332,119L333,116L329,113L328,111L328,111L324,106L323,101L322,98L311,98Z " data-fips="EK06" data-fips-="" data-iso3="GNQ" data-name="Centro Sur"/><path d="M322,98L323,101L324,106L328,111L328,111L334,108L337,107L343,110L346,110L349,108L350,109L352,119L353,120L360,120L364,119L369,120L369,100L368,98L337,98L322,98Z " data-fips="EK07" data-fips-="" data-iso3="GNQ" data-name="Ki-Ntem"/><path d="M302,157L307,153L313,152L315,151L309,143L308,133L307,132L298,129L302,125L307,116L307,110L311,106L312,104L311,98L301,98L294,95L291,90L290,91L291,94L291,100L290,101L292,108L290,113L287,119L282,125L285,129L283,127L280,132L275,136L271,146L269,148L270,150L273,152L274,151L280,152L281,154L284,154L290,152L297,160L300,160L301,157L302,157Z " data-fips="EK08" data-fips-="" data-iso3="GNQ" data-name="Litoral"/><path d="M328,111L329,113L333,116L332,119L331,122L332,124L331,127L337,129L340,127L348,128L348,130L345,135L341,141L341,143L347,148L351,155L350,157L369,157L369,157L369,120L364,119L360,120L353,120L352,119L350,109L349,108L346,110L343,110L337,107L334,108L328,111Z " data-fips="EK09" data-fips-="" data-iso3="GNQ" data-name="Wele-Nzs"/><path d="M246,28L250,22L249,20L245,19L236,18L235,20L233,24L233,24L242,27L243,28L245,30L246,28Z " data-fips="EK05" data-fips-="EK04" data-iso3="GNQ" data-name="Bioko Norte"/><path d="M232,28L229,33L225,33L223,36L223,38L224,42L229,45L235,46L240,40L241,36L242,35L244,30L245,30L243,28L242,27L233,24L232,28Z " data-fips="EK04" data-fips-="EK05" data-iso3="GNQ" data-name="Bioko Sur"/></g></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 29 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 10 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 32 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 20 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

Some files were not shown because too many files have changed in this diff Show more