1297 lines
442 KiB
JavaScript
1297 lines
442 KiB
JavaScript
|
/*!
|
||
|
* JQVMap: jQuery Vector Map Library
|
||
|
* @author JQVMap <me@peterschmalfeldt.com>
|
||
|
* @version 1.5.0
|
||
|
* @link http://jqvmap.com
|
||
|
* @license https://github.com/manifestinteractive/jqvmap/blob/master/LICENSE
|
||
|
* @builddate 2016/03/15
|
||
|
*/
|
||
|
|
||
|
var VectorCanvas = function (width, height, params) {
|
||
|
this.mode = window.SVGAngle ? 'svg' : 'vml';
|
||
|
this.params = params;
|
||
|
|
||
|
if (this.mode === 'svg') {
|
||
|
this.createSvgNode = function (nodeName) {
|
||
|
return document.createElementNS(this.svgns, nodeName);
|
||
|
};
|
||
|
} else {
|
||
|
try {
|
||
|
if (!document.namespaces.rvml) {
|
||
|
document.namespaces.add('rvml', 'urn:schemas-microsoft-com:vml');
|
||
|
}
|
||
|
this.createVmlNode = function (tagName) {
|
||
|
return document.createElement('<rvml:' + tagName + ' class="rvml">');
|
||
|
};
|
||
|
} catch (e) {
|
||
|
this.createVmlNode = function (tagName) {
|
||
|
return document.createElement('<' + tagName + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">');
|
||
|
};
|
||
|
}
|
||
|
|
||
|
document.createStyleSheet().addRule('.rvml', 'behavior:url(#default#VML)');
|
||
|
}
|
||
|
|
||
|
if (this.mode === 'svg') {
|
||
|
this.canvas = this.createSvgNode('svg');
|
||
|
} else {
|
||
|
this.canvas = this.createVmlNode('group');
|
||
|
this.canvas.style.position = 'absolute';
|
||
|
}
|
||
|
|
||
|
this.setSize(width, height);
|
||
|
};
|
||
|
|
||
|
VectorCanvas.prototype = {
|
||
|
svgns: 'http://www.w3.org/2000/svg',
|
||
|
mode: 'svg',
|
||
|
width: 0,
|
||
|
height: 0,
|
||
|
canvas: null
|
||
|
};
|
||
|
|
||
|
var ColorScale = function (colors, normalizeFunction, minValue, maxValue) {
|
||
|
if (colors) {
|
||
|
this.setColors(colors);
|
||
|
}
|
||
|
if (normalizeFunction) {
|
||
|
this.setNormalizeFunction(normalizeFunction);
|
||
|
}
|
||
|
if (minValue) {
|
||
|
this.setMin(minValue);
|
||
|
}
|
||
|
if (minValue) {
|
||
|
this.setMax(maxValue);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ColorScale.prototype = {
|
||
|
colors: []
|
||
|
};
|
||
|
|
||
|
var JQVMap = function (params) {
|
||
|
params = params || {};
|
||
|
var map = this;
|
||
|
var mapData = JQVMap.maps[params.map];
|
||
|
var mapPins;
|
||
|
|
||
|
if( !mapData){
|
||
|
throw new Error('Invalid "' + params.map + '" map parameter. Please make sure you have loaded this map file in your HTML.');
|
||
|
}
|
||
|
|
||
|
this.selectedRegions = [];
|
||
|
this.multiSelectRegion = params.multiSelectRegion;
|
||
|
|
||
|
this.container = params.container;
|
||
|
|
||
|
this.defaultWidth = mapData.width;
|
||
|
this.defaultHeight = mapData.height;
|
||
|
|
||
|
this.color = params.color;
|
||
|
this.selectedColor = params.selectedColor;
|
||
|
this.hoverColor = params.hoverColor;
|
||
|
this.hoverColors = params.hoverColors;
|
||
|
this.hoverOpacity = params.hoverOpacity;
|
||
|
this.setBackgroundColor(params.backgroundColor);
|
||
|
|
||
|
this.width = params.container.width();
|
||
|
this.height = params.container.height();
|
||
|
|
||
|
this.resize();
|
||
|
|
||
|
jQuery(window).resize(function () {
|
||
|
var newWidth = params.container.width();
|
||
|
var newHeight = params.container.height();
|
||
|
|
||
|
if(newWidth && newHeight){
|
||
|
map.width = newWidth;
|
||
|
map.height = newHeight;
|
||
|
map.resize();
|
||
|
map.canvas.setSize(map.width, map.height);
|
||
|
map.applyTransform();
|
||
|
|
||
|
var resizeEvent = jQuery.Event('resize.jqvmap');
|
||
|
jQuery(params.container).trigger(resizeEvent, [newWidth, newHeight]);
|
||
|
|
||
|
if(mapPins){
|
||
|
jQuery('.jqvmap-pin').remove();
|
||
|
map.pinHandlers = false;
|
||
|
map.placePins(mapPins.pins, mapPins.mode);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
this.canvas = new VectorCanvas(this.width, this.height, params);
|
||
|
params.container.append(this.canvas.canvas);
|
||
|
|
||
|
this.makeDraggable();
|
||
|
|
||
|
this.rootGroup = this.canvas.createGroup(true);
|
||
|
|
||
|
this.index = JQVMap.mapIndex;
|
||
|
this.label = jQuery('<div/>').addClass('jqvmap-label').appendTo(jQuery('body')).hide();
|
||
|
|
||
|
if (params.enableZoom) {
|
||
|
jQuery('<div/>').addClass('jqvmap-zoomin').text('+').appendTo(params.container);
|
||
|
jQuery('<div/>').addClass('jqvmap-zoomout').html('−').appendTo(params.container);
|
||
|
}
|
||
|
|
||
|
map.countries = [];
|
||
|
|
||
|
for (var key in mapData.paths) {
|
||
|
var path = this.canvas.createPath({
|
||
|
path: mapData.paths[key].path
|
||
|
});
|
||
|
|
||
|
path.setFill(this.color);
|
||
|
path.id = map.getCountryId(key);
|
||
|
map.countries[key] = path;
|
||
|
|
||
|
if (this.canvas.mode === 'svg') {
|
||
|
path.setAttribute('class', 'jqvmap-region');
|
||
|
} else {
|
||
|
jQuery(path).addClass('jqvmap-region');
|
||
|
}
|
||
|
|
||
|
jQuery(this.rootGroup).append(path);
|
||
|
}
|
||
|
|
||
|
jQuery(params.container).delegate(this.canvas.mode === 'svg' ? 'path' : 'shape', 'mouseover mouseout', function (e) {
|
||
|
var containerPath = e.target,
|
||
|
code = e.target.id.split('_').pop(),
|
||
|
labelShowEvent = jQuery.Event('labelShow.jqvmap'),
|
||
|
regionMouseOverEvent = jQuery.Event('regionMouseOver.jqvmap');
|
||
|
|
||
|
code = code.toLowerCase();
|
||
|
|
||
|
if (e.type === 'mouseover') {
|
||
|
jQuery(params.container).trigger(regionMouseOverEvent, [code, mapData.paths[code].name]);
|
||
|
if (!regionMouseOverEvent.isDefaultPrevented()) {
|
||
|
map.highlight(code, containerPath);
|
||
|
}
|
||
|
if (params.showTooltip) {
|
||
|
map.label.text(mapData.paths[code].name);
|
||
|
jQuery(params.container).trigger(labelShowEvent, [map.label, code]);
|
||
|
|
||
|
if (!labelShowEvent.isDefaultPrevented()) {
|
||
|
map.label.show();
|
||
|
map.labelWidth = map.label.width();
|
||
|
map.labelHeight = map.label.height();
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
map.unhighlight(code, containerPath);
|
||
|
|
||
|
map.label.hide();
|
||
|
jQuery(params.container).trigger('regionMouseOut.jqvmap', [code, mapData.paths[code].name]);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
jQuery(params.container).delegate(this.canvas.mode === 'svg' ? 'path' : 'shape', 'click', function (regionClickEvent) {
|
||
|
|
||
|
var targetPath = regionClickEvent.target;
|
||
|
var code = regionClickEvent.target.id.split('_').pop();
|
||
|
var mapClickEvent = jQuery.Event('regionClick.jqvmap');
|
||
|
|
||
|
code = code.toLowerCase();
|
||
|
|
||
|
jQuery(params.container).trigger(mapClickEvent, [code, mapData.paths[code].name]);
|
||
|
|
||
|
if ( !params.multiSelectRegion && !mapClickEvent.isDefaultPrevented()) {
|
||
|
for (var keyPath in mapData.paths) {
|
||
|
map.countries[keyPath].currentFillColor = map.countries[keyPath].getOriginalFill();
|
||
|
map.countries[keyPath].setFill(map.countries[keyPath].getOriginalFill());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( !mapClickEvent.isDefaultPrevented()) {
|
||
|
if (map.isSelected(code)) {
|
||
|
map.deselect(code, targetPath);
|
||
|
} else {
|
||
|
map.select(code, targetPath);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if (params.showTooltip) {
|
||
|
params.container.mousemove(function (e) {
|
||
|
if (map.label.is(':visible')) {
|
||
|
var left = e.pageX - 15 - map.labelWidth;
|
||
|
var top = e.pageY - 15 - map.labelHeight;
|
||
|
|
||
|
if(left < 0) {
|
||
|
left = e.pageX + 15;
|
||
|
}
|
||
|
if(top < 0) {
|
||
|
top = e.pageY + 15;
|
||
|
}
|
||
|
|
||
|
map.label.css({
|
||
|
left: left,
|
||
|
top: top
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
this.setColors(params.colors);
|
||
|
|
||
|
this.canvas.canvas.appendChild(this.rootGroup);
|
||
|
|
||
|
this.applyTransform();
|
||
|
|
||
|
this.colorScale = new ColorScale(params.scaleColors, params.normalizeFunction, params.valueMin, params.valueMax);
|
||
|
|
||
|
if (params.values) {
|
||
|
this.values = params.values;
|
||
|
this.setValues(params.values);
|
||
|
}
|
||
|
|
||
|
if (params.selectedRegions) {
|
||
|
if (params.selectedRegions instanceof Array) {
|
||
|
for(var k in params.selectedRegions) {
|
||
|
this.select(params.selectedRegions[k].toLowerCase());
|
||
|
}
|
||
|
} else {
|
||
|
this.select(params.selectedRegions.toLowerCase());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.bindZoomButtons();
|
||
|
|
||
|
if(params.pins) {
|
||
|
mapPins = {
|
||
|
pins: params.pins,
|
||
|
mode: params.pinMode
|
||
|
};
|
||
|
|
||
|
this.pinHandlers = false;
|
||
|
this.placePins(params.pins, params.pinMode);
|
||
|
}
|
||
|
|
||
|
if(params.showLabels){
|
||
|
this.pinHandlers = false;
|
||
|
|
||
|
var pins = {};
|
||
|
for (key in map.countries){
|
||
|
if (typeof map.countries[key] !== 'function') {
|
||
|
if( !params.pins || !params.pins[key] ){
|
||
|
pins[key] = key.toUpperCase();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
mapPins = {
|
||
|
pins: pins,
|
||
|
mode: 'content'
|
||
|
};
|
||
|
|
||
|
this.placePins(pins, 'content');
|
||
|
}
|
||
|
|
||
|
JQVMap.mapIndex++;
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype = {
|
||
|
transX: 0,
|
||
|
transY: 0,
|
||
|
scale: 1,
|
||
|
baseTransX: 0,
|
||
|
baseTransY: 0,
|
||
|
baseScale: 1,
|
||
|
width: 0,
|
||
|
height: 0,
|
||
|
countries: {},
|
||
|
countriesColors: {},
|
||
|
countriesData: {},
|
||
|
zoomStep: 1.4,
|
||
|
zoomMaxStep: 4,
|
||
|
zoomCurStep: 1
|
||
|
};
|
||
|
|
||
|
JQVMap.xlink = 'http://www.w3.org/1999/xlink';
|
||
|
JQVMap.mapIndex = 1;
|
||
|
JQVMap.maps = {};
|
||
|
|
||
|
(function(){
|
||
|
|
||
|
var apiParams = {
|
||
|
colors: 1,
|
||
|
values: 1,
|
||
|
backgroundColor: 1,
|
||
|
scaleColors: 1,
|
||
|
normalizeFunction: 1,
|
||
|
enableZoom: 1,
|
||
|
showTooltip: 1,
|
||
|
borderColor: 1,
|
||
|
borderWidth: 1,
|
||
|
borderOpacity: 1,
|
||
|
selectedRegions: 1,
|
||
|
multiSelectRegion: 1
|
||
|
};
|
||
|
|
||
|
var apiEvents = {
|
||
|
onLabelShow: 'labelShow',
|
||
|
onLoad: 'load',
|
||
|
onRegionOver: 'regionMouseOver',
|
||
|
onRegionOut: 'regionMouseOut',
|
||
|
onRegionClick: 'regionClick',
|
||
|
onRegionSelect: 'regionSelect',
|
||
|
onRegionDeselect: 'regionDeselect',
|
||
|
onResize: 'resize'
|
||
|
};
|
||
|
|
||
|
jQuery.fn.vectorMap = function (options) {
|
||
|
|
||
|
var defaultParams = {
|
||
|
map: 'world_en',
|
||
|
backgroundColor: '#a5bfdd',
|
||
|
color: '#f4f3f0',
|
||
|
hoverColor: '#c9dfaf',
|
||
|
hoverColors: {},
|
||
|
selectedColor: '#c9dfaf',
|
||
|
scaleColors: ['#b6d6ff', '#005ace'],
|
||
|
normalizeFunction: 'linear',
|
||
|
enableZoom: true,
|
||
|
showTooltip: true,
|
||
|
borderColor: '#818181',
|
||
|
borderWidth: 1,
|
||
|
borderOpacity: 0.25,
|
||
|
selectedRegions: null,
|
||
|
multiSelectRegion: false
|
||
|
}, map = this.data('mapObject');
|
||
|
|
||
|
if (options === 'addMap') {
|
||
|
JQVMap.maps[arguments[1]] = arguments[2];
|
||
|
} else if (options === 'set' && apiParams[arguments[1]]) {
|
||
|
map['set' + arguments[1].charAt(0).toUpperCase() + arguments[1].substr(1)].apply(map, Array.prototype.slice.call(arguments, 2));
|
||
|
} else if (typeof options === 'string' &&
|
||
|
typeof map[options] === 'function') {
|
||
|
return map[options].apply(map, Array.prototype.slice.call(arguments, 1));
|
||
|
} else {
|
||
|
jQuery.extend(defaultParams, options);
|
||
|
defaultParams.container = this;
|
||
|
this.css({ position: 'relative', overflow: 'hidden' });
|
||
|
|
||
|
map = new JQVMap(defaultParams);
|
||
|
|
||
|
this.data('mapObject', map);
|
||
|
|
||
|
this.unbind('.jqvmap');
|
||
|
|
||
|
for (var e in apiEvents) {
|
||
|
if (defaultParams[e]) {
|
||
|
this.bind(apiEvents[e] + '.jqvmap', defaultParams[e]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var loadEvent = jQuery.Event('load.jqvmap');
|
||
|
jQuery(defaultParams.container).trigger(loadEvent, map);
|
||
|
|
||
|
return map;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
})(jQuery);
|
||
|
|
||
|
ColorScale.arrayToRgb = function (ar) {
|
||
|
var rgb = '#';
|
||
|
var d;
|
||
|
for (var i = 0; i < ar.length; i++) {
|
||
|
d = ar[i].toString(16);
|
||
|
rgb += d.length === 1 ? '0' + d : d;
|
||
|
}
|
||
|
return rgb;
|
||
|
};
|
||
|
|
||
|
ColorScale.prototype.getColor = function (value) {
|
||
|
if (typeof this.normalize === 'function') {
|
||
|
value = this.normalize(value);
|
||
|
}
|
||
|
|
||
|
var lengthes = [];
|
||
|
var fullLength = 0;
|
||
|
var l;
|
||
|
|
||
|
for (var i = 0; i < this.colors.length - 1; i++) {
|
||
|
l = this.vectorLength(this.vectorSubtract(this.colors[i + 1], this.colors[i]));
|
||
|
lengthes.push(l);
|
||
|
fullLength += l;
|
||
|
}
|
||
|
|
||
|
var c = (this.maxValue - this.minValue) / fullLength;
|
||
|
|
||
|
for (i = 0; i < lengthes.length; i++) {
|
||
|
lengthes[i] *= c;
|
||
|
}
|
||
|
|
||
|
i = 0;
|
||
|
value -= this.minValue;
|
||
|
|
||
|
while (value - lengthes[i] >= 0) {
|
||
|
value -= lengthes[i];
|
||
|
i++;
|
||
|
}
|
||
|
|
||
|
var color;
|
||
|
if (i === this.colors.length - 1) {
|
||
|
color = this.vectorToNum(this.colors[i]).toString(16);
|
||
|
} else {
|
||
|
color = (this.vectorToNum(this.vectorAdd(this.colors[i], this.vectorMult(this.vectorSubtract(this.colors[i + 1], this.colors[i]), (value) / (lengthes[i]))))).toString(16);
|
||
|
}
|
||
|
|
||
|
while (color.length < 6) {
|
||
|
color = '0' + color;
|
||
|
}
|
||
|
return '#' + color;
|
||
|
};
|
||
|
|
||
|
ColorScale.rgbToArray = function (rgb) {
|
||
|
rgb = rgb.substr(1);
|
||
|
return [parseInt(rgb.substr(0, 2), 16), parseInt(rgb.substr(2, 2), 16), parseInt(rgb.substr(4, 2), 16)];
|
||
|
};
|
||
|
|
||
|
ColorScale.prototype.setColors = function (colors) {
|
||
|
for (var i = 0; i < colors.length; i++) {
|
||
|
colors[i] = ColorScale.rgbToArray(colors[i]);
|
||
|
}
|
||
|
this.colors = colors;
|
||
|
};
|
||
|
|
||
|
ColorScale.prototype.setMax = function (max) {
|
||
|
this.clearMaxValue = max;
|
||
|
if (typeof this.normalize === 'function') {
|
||
|
this.maxValue = this.normalize(max);
|
||
|
} else {
|
||
|
this.maxValue = max;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ColorScale.prototype.setMin = function (min) {
|
||
|
this.clearMinValue = min;
|
||
|
|
||
|
if (typeof this.normalize === 'function') {
|
||
|
this.minValue = this.normalize(min);
|
||
|
} else {
|
||
|
this.minValue = min;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ColorScale.prototype.setNormalizeFunction = function (f) {
|
||
|
if (f === 'polynomial') {
|
||
|
this.normalize = function (value) {
|
||
|
return Math.pow(value, 0.2);
|
||
|
};
|
||
|
} else if (f === 'linear') {
|
||
|
delete this.normalize;
|
||
|
} else {
|
||
|
this.normalize = f;
|
||
|
}
|
||
|
this.setMin(this.clearMinValue);
|
||
|
this.setMax(this.clearMaxValue);
|
||
|
};
|
||
|
|
||
|
ColorScale.prototype.vectorAdd = function (vector1, vector2) {
|
||
|
var vector = [];
|
||
|
for (var i = 0; i < vector1.length; i++) {
|
||
|
vector[i] = vector1[i] + vector2[i];
|
||
|
}
|
||
|
return vector;
|
||
|
};
|
||
|
|
||
|
ColorScale.prototype.vectorLength = function (vector) {
|
||
|
var result = 0;
|
||
|
for (var i = 0; i < vector.length; i++) {
|
||
|
result += vector[i] * vector[i];
|
||
|
}
|
||
|
return Math.sqrt(result);
|
||
|
};
|
||
|
|
||
|
ColorScale.prototype.vectorMult = function (vector, num) {
|
||
|
var result = [];
|
||
|
for (var i = 0; i < vector.length; i++) {
|
||
|
result[i] = vector[i] * num;
|
||
|
}
|
||
|
return result;
|
||
|
};
|
||
|
|
||
|
ColorScale.prototype.vectorSubtract = function (vector1, vector2) {
|
||
|
var vector = [];
|
||
|
for (var i = 0; i < vector1.length; i++) {
|
||
|
vector[i] = vector1[i] - vector2[i];
|
||
|
}
|
||
|
return vector;
|
||
|
};
|
||
|
|
||
|
ColorScale.prototype.vectorToNum = function (vector) {
|
||
|
var num = 0;
|
||
|
for (var i = 0; i < vector.length; i++) {
|
||
|
num += Math.round(vector[i]) * Math.pow(256, vector.length - i - 1);
|
||
|
}
|
||
|
return num;
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.applyTransform = function () {
|
||
|
var maxTransX, maxTransY, minTransX, minTransY;
|
||
|
if (this.defaultWidth * this.scale <= this.width) {
|
||
|
maxTransX = (this.width - this.defaultWidth * this.scale) / (2 * this.scale);
|
||
|
minTransX = (this.width - this.defaultWidth * this.scale) / (2 * this.scale);
|
||
|
} else {
|
||
|
maxTransX = 0;
|
||
|
minTransX = (this.width - this.defaultWidth * this.scale) / this.scale;
|
||
|
}
|
||
|
|
||
|
if (this.defaultHeight * this.scale <= this.height) {
|
||
|
maxTransY = (this.height - this.defaultHeight * this.scale) / (2 * this.scale);
|
||
|
minTransY = (this.height - this.defaultHeight * this.scale) / (2 * this.scale);
|
||
|
} else {
|
||
|
maxTransY = 0;
|
||
|
minTransY = (this.height - this.defaultHeight * this.scale) / this.scale;
|
||
|
}
|
||
|
|
||
|
if (this.transY > maxTransY) {
|
||
|
this.transY = maxTransY;
|
||
|
} else if (this.transY < minTransY) {
|
||
|
this.transY = minTransY;
|
||
|
}
|
||
|
if (this.transX > maxTransX) {
|
||
|
this.transX = maxTransX;
|
||
|
} else if (this.transX < minTransX) {
|
||
|
this.transX = minTransX;
|
||
|
}
|
||
|
|
||
|
this.canvas.applyTransformParams(this.scale, this.transX, this.transY);
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.bindZoomButtons = function () {
|
||
|
var map = this;
|
||
|
this.container.find('.jqvmap-zoomin').click(function(){
|
||
|
map.zoomIn();
|
||
|
});
|
||
|
this.container.find('.jqvmap-zoomout').click(function(){
|
||
|
map.zoomOut();
|
||
|
});
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.deselect = function (cc, path) {
|
||
|
cc = cc.toLowerCase();
|
||
|
path = path || jQuery('#' + this.getCountryId(cc))[0];
|
||
|
|
||
|
if (this.isSelected(cc)) {
|
||
|
this.selectedRegions.splice(this.selectIndex(cc), 1);
|
||
|
|
||
|
jQuery(this.container).trigger('regionDeselect.jqvmap', [cc]);
|
||
|
path.currentFillColor = path.getOriginalFill();
|
||
|
path.setFill(path.getOriginalFill());
|
||
|
} else {
|
||
|
for (var key in this.countries) {
|
||
|
this.selectedRegions.splice(this.selectedRegions.indexOf(key), 1);
|
||
|
this.countries[key].currentFillColor = this.color;
|
||
|
this.countries[key].setFill(this.color);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.getCountryId = function (cc) {
|
||
|
return 'jqvmap' + this.index + '_' + cc;
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.getPin = function(cc){
|
||
|
var pinObj = jQuery('#' + this.getPinId(cc));
|
||
|
return pinObj.html();
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.getPinId = function (cc) {
|
||
|
return this.getCountryId(cc) + '_pin';
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.getPins = function(){
|
||
|
var pins = this.container.find('.jqvmap-pin');
|
||
|
var ret = {};
|
||
|
jQuery.each(pins, function(index, pinObj){
|
||
|
pinObj = jQuery(pinObj);
|
||
|
var cc = pinObj.attr('for').toLowerCase();
|
||
|
var pinContent = pinObj.html();
|
||
|
ret[cc] = pinContent;
|
||
|
});
|
||
|
return JSON.stringify(ret);
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.highlight = function (cc, path) {
|
||
|
path = path || jQuery('#' + this.getCountryId(cc))[0];
|
||
|
if (this.hoverOpacity) {
|
||
|
path.setOpacity(this.hoverOpacity);
|
||
|
} else if (this.hoverColors && (cc in this.hoverColors)) {
|
||
|
path.currentFillColor = path.getFill() + '';
|
||
|
path.setFill(this.hoverColors[cc]);
|
||
|
} else if (this.hoverColor) {
|
||
|
path.currentFillColor = path.getFill() + '';
|
||
|
path.setFill(this.hoverColor);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.isSelected = function(cc) {
|
||
|
return this.selectIndex(cc) >= 0;
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.makeDraggable = function () {
|
||
|
var mouseDown = false;
|
||
|
var oldPageX, oldPageY;
|
||
|
var self = this;
|
||
|
|
||
|
self.isMoving = false;
|
||
|
self.isMovingTimeout = false;
|
||
|
|
||
|
var lastTouchCount;
|
||
|
var touchCenterX;
|
||
|
var touchCenterY;
|
||
|
var touchStartDistance;
|
||
|
var touchStartScale;
|
||
|
var touchX;
|
||
|
var touchY;
|
||
|
|
||
|
this.container.mousemove(function (e) {
|
||
|
|
||
|
if (mouseDown) {
|
||
|
self.transX -= (oldPageX - e.pageX) / self.scale;
|
||
|
self.transY -= (oldPageY - e.pageY) / self.scale;
|
||
|
|
||
|
self.applyTransform();
|
||
|
|
||
|
oldPageX = e.pageX;
|
||
|
oldPageY = e.pageY;
|
||
|
|
||
|
self.isMoving = true;
|
||
|
if (self.isMovingTimeout) {
|
||
|
clearTimeout(self.isMovingTimeout);
|
||
|
}
|
||
|
|
||
|
self.container.trigger('drag');
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
|
||
|
}).mousedown(function (e) {
|
||
|
|
||
|
mouseDown = true;
|
||
|
oldPageX = e.pageX;
|
||
|
oldPageY = e.pageY;
|
||
|
|
||
|
return false;
|
||
|
|
||
|
}).mouseup(function () {
|
||
|
|
||
|
mouseDown = false;
|
||
|
|
||
|
clearTimeout(self.isMovingTimeout);
|
||
|
self.isMovingTimeout = setTimeout(function () {
|
||
|
self.isMoving = false;
|
||
|
}, 100);
|
||
|
|
||
|
return false;
|
||
|
|
||
|
}).mouseout(function () {
|
||
|
|
||
|
if(mouseDown && self.isMoving){
|
||
|
|
||
|
clearTimeout(self.isMovingTimeout);
|
||
|
self.isMovingTimeout = setTimeout(function () {
|
||
|
mouseDown = false;
|
||
|
self.isMoving = false;
|
||
|
}, 100);
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
jQuery(this.container).bind('touchmove', function (e) {
|
||
|
|
||
|
var offset;
|
||
|
var scale;
|
||
|
var touches = e.originalEvent.touches;
|
||
|
var transformXOld;
|
||
|
var transformYOld;
|
||
|
|
||
|
if (touches.length === 1) {
|
||
|
if (lastTouchCount === 1) {
|
||
|
|
||
|
if(touchX === touches[0].pageX && touchY === touches[0].pageY){
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
transformXOld = self.transX;
|
||
|
transformYOld = self.transY;
|
||
|
|
||
|
self.transX -= (touchX - touches[0].pageX) / self.scale;
|
||
|
self.transY -= (touchY - touches[0].pageY) / self.scale;
|
||
|
|
||
|
self.applyTransform();
|
||
|
|
||
|
if (transformXOld !== self.transX || transformYOld !== self.transY) {
|
||
|
e.preventDefault();
|
||
|
}
|
||
|
|
||
|
self.isMoving = true;
|
||
|
if (self.isMovingTimeout) {
|
||
|
clearTimeout(self.isMovingTimeout);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
touchX = touches[0].pageX;
|
||
|
touchY = touches[0].pageY;
|
||
|
|
||
|
} else if (touches.length === 2) {
|
||
|
|
||
|
if (lastTouchCount === 2) {
|
||
|
scale = Math.sqrt(
|
||
|
Math.pow(touches[0].pageX - touches[1].pageX, 2) +
|
||
|
Math.pow(touches[0].pageY - touches[1].pageY, 2)
|
||
|
) / touchStartDistance;
|
||
|
|
||
|
self.setScale(
|
||
|
touchStartScale * scale,
|
||
|
touchCenterX,
|
||
|
touchCenterY
|
||
|
);
|
||
|
|
||
|
e.preventDefault();
|
||
|
|
||
|
} else {
|
||
|
|
||
|
offset = jQuery(self.container).offset();
|
||
|
if (touches[0].pageX > touches[1].pageX) {
|
||
|
touchCenterX = touches[1].pageX + (touches[0].pageX - touches[1].pageX) / 2;
|
||
|
} else {
|
||
|
touchCenterX = touches[0].pageX + (touches[1].pageX - touches[0].pageX) / 2;
|
||
|
}
|
||
|
|
||
|
if (touches[0].pageY > touches[1].pageY) {
|
||
|
touchCenterY = touches[1].pageY + (touches[0].pageY - touches[1].pageY) / 2;
|
||
|
} else {
|
||
|
touchCenterY = touches[0].pageY + (touches[1].pageY - touches[0].pageY) / 2;
|
||
|
}
|
||
|
|
||
|
touchCenterX -= offset.left;
|
||
|
touchCenterY -= offset.top;
|
||
|
touchStartScale = self.scale;
|
||
|
|
||
|
touchStartDistance = Math.sqrt(
|
||
|
Math.pow(touches[0].pageX - touches[1].pageX, 2) +
|
||
|
Math.pow(touches[0].pageY - touches[1].pageY, 2)
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
lastTouchCount = touches.length;
|
||
|
});
|
||
|
|
||
|
jQuery(this.container).bind('touchstart', function () {
|
||
|
lastTouchCount = 0;
|
||
|
});
|
||
|
|
||
|
jQuery(this.container).bind('touchend', function () {
|
||
|
lastTouchCount = 0;
|
||
|
});
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.placePins = function(pins, pinMode){
|
||
|
var map = this;
|
||
|
|
||
|
if(!pinMode || (pinMode !== 'content' && pinMode !== 'id')) {
|
||
|
pinMode = 'content';
|
||
|
}
|
||
|
|
||
|
if(pinMode === 'content') {//treat pin as content
|
||
|
jQuery.each(pins, function(index, pin){
|
||
|
if(jQuery('#' + map.getCountryId(index)).length === 0){
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var pinIndex = map.getPinId(index);
|
||
|
var $pin = jQuery('#' + pinIndex);
|
||
|
if($pin.length > 0){
|
||
|
$pin.remove();
|
||
|
}
|
||
|
map.container.append('<div id="' + pinIndex + '" for="' + index + '" class="jqvmap-pin" style="position:absolute">' + pin + '</div>');
|
||
|
});
|
||
|
} else { //treat pin as id of an html content
|
||
|
jQuery.each(pins, function(index, pin){
|
||
|
if(jQuery('#' + map.getCountryId(index)).length === 0){
|
||
|
return;
|
||
|
}
|
||
|
var pinIndex = map.getPinId(index);
|
||
|
var $pin = jQuery('#' + pinIndex);
|
||
|
if($pin.length > 0){
|
||
|
$pin.remove();
|
||
|
}
|
||
|
map.container.append('<div id="' + pinIndex + '" for="' + index + '" class="jqvmap-pin" style="position:absolute"></div>');
|
||
|
$pin.append(jQuery('#' + pin));
|
||
|
});
|
||
|
}
|
||
|
|
||
|
this.positionPins();
|
||
|
if(!this.pinHandlers){
|
||
|
this.pinHandlers = true;
|
||
|
var positionFix = function(){
|
||
|
map.positionPins();
|
||
|
};
|
||
|
this.container.bind('zoomIn', positionFix)
|
||
|
.bind('zoomOut', positionFix)
|
||
|
.bind('drag', positionFix);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.positionPins = function(){
|
||
|
var map = this;
|
||
|
var pins = this.container.find('.jqvmap-pin');
|
||
|
jQuery.each(pins, function(index, pinObj){
|
||
|
pinObj = jQuery(pinObj);
|
||
|
var countryId = map.getCountryId(pinObj.attr('for').toLowerCase());
|
||
|
var countryObj = jQuery('#' + countryId);
|
||
|
|
||
|
var bbox = document.getElementById(countryId).getBBox();
|
||
|
var position = countryObj.position();
|
||
|
|
||
|
var scale = map.scale;
|
||
|
|
||
|
var left = position.left + (bbox.width / 2) * scale - pinObj.width() / 2,
|
||
|
top = position.top + (bbox.height / 2) * scale - pinObj.height() / 2;
|
||
|
|
||
|
pinObj.css('left', left).css('top', top);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.removePin = function(cc) {
|
||
|
cc = cc.toLowerCase();
|
||
|
jQuery('#' + this.getPinId(cc)).remove();
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.removePins = function(){
|
||
|
this.container.find('.jqvmap-pin').remove();
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.reset = function () {
|
||
|
for (var key in this.countries) {
|
||
|
this.countries[key].setFill(this.color);
|
||
|
}
|
||
|
this.scale = this.baseScale;
|
||
|
this.transX = this.baseTransX;
|
||
|
this.transY = this.baseTransY;
|
||
|
this.applyTransform();
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.resize = function () {
|
||
|
var curBaseScale = this.baseScale;
|
||
|
if (this.width / this.height > this.defaultWidth / this.defaultHeight) {
|
||
|
this.baseScale = this.height / this.defaultHeight;
|
||
|
this.baseTransX = Math.abs(this.width - this.defaultWidth * this.baseScale) / (2 * this.baseScale);
|
||
|
} else {
|
||
|
this.baseScale = this.width / this.defaultWidth;
|
||
|
this.baseTransY = Math.abs(this.height - this.defaultHeight * this.baseScale) / (2 * this.baseScale);
|
||
|
}
|
||
|
this.scale *= this.baseScale / curBaseScale;
|
||
|
this.transX *= this.baseScale / curBaseScale;
|
||
|
this.transY *= this.baseScale / curBaseScale;
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.select = function (cc, path) {
|
||
|
cc = cc.toLowerCase();
|
||
|
path = path || jQuery('#' + this.getCountryId(cc))[0];
|
||
|
|
||
|
if (!this.isSelected(cc)) {
|
||
|
if (this.multiSelectRegion) {
|
||
|
this.selectedRegions.push(cc);
|
||
|
} else {
|
||
|
this.selectedRegions = [cc];
|
||
|
}
|
||
|
|
||
|
jQuery(this.container).trigger('regionSelect.jqvmap', [cc]);
|
||
|
if (this.selectedColor && path) {
|
||
|
path.currentFillColor = this.selectedColor;
|
||
|
path.setFill(this.selectedColor);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.selectIndex = function (cc) {
|
||
|
cc = cc.toLowerCase();
|
||
|
for (var i = 0; i < this.selectedRegions.length; i++) {
|
||
|
if (cc === this.selectedRegions[i]) {
|
||
|
return i;
|
||
|
}
|
||
|
}
|
||
|
return -1;
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.setBackgroundColor = function (backgroundColor) {
|
||
|
this.container.css('background-color', backgroundColor);
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.setColors = function (key, color) {
|
||
|
if (typeof key === 'string') {
|
||
|
this.countries[key].setFill(color);
|
||
|
this.countries[key].setAttribute('original', color);
|
||
|
} else {
|
||
|
var colors = key;
|
||
|
|
||
|
for (var code in colors) {
|
||
|
if (this.countries[code]) {
|
||
|
this.countries[code].setFill(colors[code]);
|
||
|
this.countries[code].setAttribute('original', colors[code]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.setNormalizeFunction = function (f) {
|
||
|
this.colorScale.setNormalizeFunction(f);
|
||
|
|
||
|
if (this.values) {
|
||
|
this.setValues(this.values);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.setScale = function (scale) {
|
||
|
this.scale = scale;
|
||
|
this.applyTransform();
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.setScaleColors = function (colors) {
|
||
|
this.colorScale.setColors(colors);
|
||
|
|
||
|
if (this.values) {
|
||
|
this.setValues(this.values);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.setValues = function (values) {
|
||
|
var max = 0,
|
||
|
min = Number.MAX_VALUE,
|
||
|
val;
|
||
|
|
||
|
for (var cc in values) {
|
||
|
cc = cc.toLowerCase();
|
||
|
val = parseFloat(values[cc]);
|
||
|
|
||
|
if (isNaN(val)) {
|
||
|
continue;
|
||
|
}
|
||
|
if (val > max) {
|
||
|
max = values[cc];
|
||
|
}
|
||
|
if (val < min) {
|
||
|
min = val;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (min === max) {
|
||
|
max++;
|
||
|
}
|
||
|
|
||
|
this.colorScale.setMin(min);
|
||
|
this.colorScale.setMax(max);
|
||
|
|
||
|
var colors = {};
|
||
|
for (cc in values) {
|
||
|
cc = cc.toLowerCase();
|
||
|
val = parseFloat(values[cc]);
|
||
|
colors[cc] = isNaN(val) ? this.color : this.colorScale.getColor(val);
|
||
|
}
|
||
|
this.setColors(colors);
|
||
|
this.values = values;
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.unhighlight = function (cc, path) {
|
||
|
cc = cc.toLowerCase();
|
||
|
path = path || jQuery('#' + this.getCountryId(cc))[0];
|
||
|
path.setOpacity(1);
|
||
|
if (path.currentFillColor) {
|
||
|
path.setFill(path.currentFillColor);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.zoomIn = function () {
|
||
|
var map = this;
|
||
|
var sliderDelta = (jQuery('#zoom').innerHeight() - 6 * 2 - 15 * 2 - 3 * 2 - 7 - 6) / (this.zoomMaxStep - this.zoomCurStep);
|
||
|
|
||
|
if (map.zoomCurStep < map.zoomMaxStep) {
|
||
|
map.transX -= (map.width / map.scale - map.width / (map.scale * map.zoomStep)) / 2;
|
||
|
map.transY -= (map.height / map.scale - map.height / (map.scale * map.zoomStep)) / 2;
|
||
|
map.setScale(map.scale * map.zoomStep);
|
||
|
map.zoomCurStep++;
|
||
|
|
||
|
var $slider = jQuery('#zoomSlider');
|
||
|
|
||
|
$slider.css('top', parseInt($slider.css('top'), 10) - sliderDelta);
|
||
|
|
||
|
map.container.trigger('zoomIn');
|
||
|
}
|
||
|
};
|
||
|
|
||
|
JQVMap.prototype.zoomOut = function () {
|
||
|
var map = this;
|
||
|
var sliderDelta = (jQuery('#zoom').innerHeight() - 6 * 2 - 15 * 2 - 3 * 2 - 7 - 6) / (this.zoomMaxStep - this.zoomCurStep);
|
||
|
|
||
|
if (map.zoomCurStep > 1) {
|
||
|
map.transX += (map.width / (map.scale / map.zoomStep) - map.width / map.scale) / 2;
|
||
|
map.transY += (map.height / (map.scale / map.zoomStep) - map.height / map.scale) / 2;
|
||
|
map.setScale(map.scale / map.zoomStep);
|
||
|
map.zoomCurStep--;
|
||
|
|
||
|
var $slider = jQuery('#zoomSlider');
|
||
|
|
||
|
$slider.css('top', parseInt($slider.css('top'), 10) + sliderDelta);
|
||
|
|
||
|
map.container.trigger('zoomOut');
|
||
|
}
|
||
|
};
|
||
|
|
||
|
VectorCanvas.prototype.applyTransformParams = function (scale, transX, transY) {
|
||
|
if (this.mode === 'svg') {
|
||
|
this.rootGroup.setAttribute('transform', 'scale(' + scale + ') translate(' + transX + ', ' + transY + ')');
|
||
|
} else {
|
||
|
this.rootGroup.coordorigin = (this.width - transX) + ',' + (this.height - transY);
|
||
|
this.rootGroup.coordsize = this.width / scale + ',' + this.height / scale;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
VectorCanvas.prototype.createGroup = function (isRoot) {
|
||
|
var node;
|
||
|
if (this.mode === 'svg') {
|
||
|
node = this.createSvgNode('g');
|
||
|
} else {
|
||
|
node = this.createVmlNode('group');
|
||
|
node.style.width = this.width + 'px';
|
||
|
node.style.height = this.height + 'px';
|
||
|
node.style.left = '0px';
|
||
|
node.style.top = '0px';
|
||
|
node.coordorigin = '0 0';
|
||
|
node.coordsize = this.width + ' ' + this.height;
|
||
|
}
|
||
|
|
||
|
if (isRoot) {
|
||
|
this.rootGroup = node;
|
||
|
}
|
||
|
return node;
|
||
|
};
|
||
|
|
||
|
VectorCanvas.prototype.createPath = function (config) {
|
||
|
var node;
|
||
|
if (this.mode === 'svg') {
|
||
|
node = this.createSvgNode('path');
|
||
|
node.setAttribute('d', config.path);
|
||
|
|
||
|
if (this.params.borderColor !== null) {
|
||
|
node.setAttribute('stroke', this.params.borderColor);
|
||
|
}
|
||
|
if (this.params.borderWidth > 0) {
|
||
|
node.setAttribute('stroke-width', this.params.borderWidth);
|
||
|
node.setAttribute('stroke-linecap', 'round');
|
||
|
node.setAttribute('stroke-linejoin', 'round');
|
||
|
}
|
||
|
if (this.params.borderOpacity > 0) {
|
||
|
node.setAttribute('stroke-opacity', this.params.borderOpacity);
|
||
|
}
|
||
|
|
||
|
node.setFill = function (color) {
|
||
|
this.setAttribute('fill', color);
|
||
|
if (this.getAttribute('original') === null) {
|
||
|
this.setAttribute('original', color);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
node.getFill = function () {
|
||
|
return this.getAttribute('fill');
|
||
|
};
|
||
|
|
||
|
node.getOriginalFill = function () {
|
||
|
return this.getAttribute('original');
|
||
|
};
|
||
|
|
||
|
node.setOpacity = function (opacity) {
|
||
|
this.setAttribute('fill-opacity', opacity);
|
||
|
};
|
||
|
} else {
|
||
|
node = this.createVmlNode('shape');
|
||
|
node.coordorigin = '0 0';
|
||
|
node.coordsize = this.width + ' ' + this.height;
|
||
|
node.style.width = this.width + 'px';
|
||
|
node.style.height = this.height + 'px';
|
||
|
node.fillcolor = JQVMap.defaultFillColor;
|
||
|
node.stroked = false;
|
||
|
node.path = VectorCanvas.pathSvgToVml(config.path);
|
||
|
|
||
|
var scale = this.createVmlNode('skew');
|
||
|
scale.on = true;
|
||
|
scale.matrix = '0.01,0,0,0.01,0,0';
|
||
|
scale.offset = '0,0';
|
||
|
|
||
|
node.appendChild(scale);
|
||
|
|
||
|
var fill = this.createVmlNode('fill');
|
||
|
node.appendChild(fill);
|
||
|
|
||
|
node.setFill = function (color) {
|
||
|
this.getElementsByTagName('fill')[0].color = color;
|
||
|
if (this.getAttribute('original') === null) {
|
||
|
this.setAttribute('original', color);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
node.getFill = function () {
|
||
|
return this.getElementsByTagName('fill')[0].color;
|
||
|
};
|
||
|
node.getOriginalFill = function () {
|
||
|
return this.getAttribute('original');
|
||
|
};
|
||
|
node.setOpacity = function (opacity) {
|
||
|
this.getElementsByTagName('fill')[0].opacity = parseInt(opacity * 100, 10) + '%';
|
||
|
};
|
||
|
}
|
||
|
return node;
|
||
|
};
|
||
|
|
||
|
VectorCanvas.prototype.pathSvgToVml = function (path) {
|
||
|
var result = '';
|
||
|
var cx = 0, cy = 0, ctrlx, ctrly;
|
||
|
|
||
|
return path.replace(/([MmLlHhVvCcSs])((?:-?(?:\d+)?(?:\.\d+)?,?\s?)+)/g, function (segment, letter, coords) {
|
||
|
coords = coords.replace(/(\d)-/g, '$1,-').replace(/\s+/g, ',').split(',');
|
||
|
if (!coords[0]) {
|
||
|
coords.shift();
|
||
|
}
|
||
|
|
||
|
for (var i = 0, l = coords.length; i < l; i++) {
|
||
|
coords[i] = Math.round(100 * coords[i]);
|
||
|
}
|
||
|
|
||
|
switch (letter) {
|
||
|
case 'm':
|
||
|
cx += coords[0];
|
||
|
cy += coords[1];
|
||
|
result = 't' + coords.join(',');
|
||
|
break;
|
||
|
|
||
|
case 'M':
|
||
|
cx = coords[0];
|
||
|
cy = coords[1];
|
||
|
result = 'm' + coords.join(',');
|
||
|
break;
|
||
|
|
||
|
case 'l':
|
||
|
cx += coords[0];
|
||
|
cy += coords[1];
|
||
|
result = 'r' + coords.join(',');
|
||
|
break;
|
||
|
|
||
|
case 'L':
|
||
|
cx = coords[0];
|
||
|
cy = coords[1];
|
||
|
result = 'l' + coords.join(',');
|
||
|
break;
|
||
|
|
||
|
case 'h':
|
||
|
cx += coords[0];
|
||
|
result = 'r' + coords[0] + ',0';
|
||
|
break;
|
||
|
|
||
|
case 'H':
|
||
|
cx = coords[0];
|
||
|
result = 'l' + cx + ',' + cy;
|
||
|
break;
|
||
|
|
||
|
case 'v':
|
||
|
cy += coords[0];
|
||
|
result = 'r0,' + coords[0];
|
||
|
break;
|
||
|
|
||
|
case 'V':
|
||
|
cy = coords[0];
|
||
|
result = 'l' + cx + ',' + cy;
|
||
|
break;
|
||
|
|
||
|
case 'c':
|
||
|
ctrlx = cx + coords[coords.length - 4];
|
||
|
ctrly = cy + coords[coords.length - 3];
|
||
|
cx += coords[coords.length - 2];
|
||
|
cy += coords[coords.length - 1];
|
||
|
result = 'v' + coords.join(',');
|
||
|
break;
|
||
|
|
||
|
case 'C':
|
||
|
ctrlx = coords[coords.length - 4];
|
||
|
ctrly = coords[coords.length - 3];
|
||
|
cx = coords[coords.length - 2];
|
||
|
cy = coords[coords.length - 1];
|
||
|
result = 'c' + coords.join(',');
|
||
|
break;
|
||
|
|
||
|
case 's':
|
||
|
coords.unshift(cy - ctrly);
|
||
|
coords.unshift(cx - ctrlx);
|
||
|
ctrlx = cx + coords[coords.length - 4];
|
||
|
ctrly = cy + coords[coords.length - 3];
|
||
|
cx += coords[coords.length - 2];
|
||
|
cy += coords[coords.length - 1];
|
||
|
result = 'v' + coords.join(',');
|
||
|
break;
|
||
|
|
||
|
case 'S':
|
||
|
coords.unshift(cy + cy - ctrly);
|
||
|
coords.unshift(cx + cx - ctrlx);
|
||
|
ctrlx = coords[coords.length - 4];
|
||
|
ctrly = coords[coords.length - 3];
|
||
|
cx = coords[coords.length - 2];
|
||
|
cy = coords[coords.length - 1];
|
||
|
result = 'c' + coords.join(',');
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
|
||
|
}).replace(/z/g, '');
|
||
|
};
|
||
|
|
||
|
VectorCanvas.prototype.setSize = function (width, height) {
|
||
|
if (this.mode === 'svg') {
|
||
|
this.canvas.setAttribute('width', width);
|
||
|
this.canvas.setAttribute('height', height);
|
||
|
} else {
|
||
|
this.canvas.style.width = width + 'px';
|
||
|
this.canvas.style.height = height + 'px';
|
||
|
this.canvas.coordsize = width + ' ' + height;
|
||
|
this.canvas.coordorigin = '0 0';
|
||
|
if (this.rootGroup) {
|
||
|
var paths = this.rootGroup.getElementsByTagName('shape');
|
||
|
for (var i = 0, l = paths.length; i < l; i++) {
|
||
|
paths[i].coordsize = width + ' ' + height;
|
||
|
paths[i].style.width = width + 'px';
|
||
|
paths[i].style.height = height + 'px';
|
||
|
}
|
||
|
this.rootGroup.coordsize = width + ' ' + height;
|
||
|
this.rootGroup.style.width = width + 'px';
|
||
|
this.rootGroup.style.height = height + 'px';
|
||
|
}
|
||
|
}
|
||
|
this.width = width;
|
||
|
this.height = height;
|
||
|
};
|
||
|
|
||
|
/** Add World Map Data Points */
|
||
|
jQuery.fn.vectorMap('addMap', 'world_en', {"width":950,"height":550,"paths":{"id":{"path":"M781.68,324.4l-2.31,8.68l-12.53,4.23l-3.75-4.4l-1.82,0.5l3.4,13.12l5.09,0.57l6.79,2.57v2.57l3.11-0.57l4.53-6.27v-5.13l2.55-5.13l2.83,0.57l-3.4-7.13l-0.52-4.59L781.68,324.4L781.68,324.4M722.48,317.57l-0.28,2.28l6.79,11.41h1.98l14.15,23.67l5.66,0.57l2.83-8.27l-4.53-2.85l-0.85-4.56L722.48,317.57L722.48,317.57M789.53,349.11l2.26,2.77l-1.47,4.16v0.79h3.34l1.18-10.4l1.08,0.3l1.96,9.5l1.87,0.5l1.77-4.06l-1.77-6.14l-1.47-2.67l4.62-3.37l-1.08-1.49l-4.42,2.87h-1.18l-2.16-3.17l0.69-1.39l3.64-1.78l5.5,1.68l1.67-0.1l4.13-3.86l-1.67-1.68l-3.83,2.97h-2.46l-3.73-1.78l-2.65,0.1l-2.95,4.75l-1.87,8.22L789.53,349.11L789.53,349.11M814.19,330.5l-1.87,4.55l2.95,3.86h0.98l1.28-2.57l0.69-0.89l-1.28-1.39l-1.87-0.69L814.19,330.5L814.19,330.5M819.99,345.45l-4.03,0.89l-1.18,1.29l0.98,1.68l2.65-0.99l1.67-0.99l2.46,1.98l1.08-0.89l-1.96-2.38L819.99,345.45L819.99,345.45M753.17,358.32l-2.75,1.88l0.59,1.58l8.75,1.98l4.42,0.79l1.87,1.98l5.01,0.4l2.36,1.98l2.16-0.5l1.97-1.78l-3.64-1.68l-3.14-2.67l-8.16-1.98L753.17,358.32L753.17,358.32M781.77,366.93l-2.16,1.19l1.28,1.39l3.14-1.19L781.77,366.93L781.77,366.93M785.5,366.04l0.39,1.88l2.26,0.59l0.88-1.09l-0.98-1.49L785.5,366.04L785.5,366.04M790.91,370.99l-2.75,0.4l2.46,2.08h1.96L790.91,370.99L790.91,370.99M791.69,367.72l-0.59,1.19l4.42,0.69l3.44-1.98l-1.96-0.59l-3.14,0.89l-1.18-0.99L791.69,367.72L791.69,367.72M831.93,339.34l-4.17,0.47l-2.68,1.96l1.11,2.24l4.54,0.84v0.84l-2.87,2.33l1.39,4.85l1.39,0.09l1.2-4.76h2.22l0.93,4.66l10.83,8.96l0.28,7l3.7,4.01l1.67-0.09l0.37-24.72l-6.29-4.38l-5.93,4.01l-2.13,1.31l-3.52-2.24l-0.09-7.09L831.93,339.34L831.93,339.34z","name":"Indonesia"},"pg":{"path":"M852.76,348.29l-0.37,24.44l3.52-0.19l4.63-5.41l3.89,0.19l2.5,2.24l0.83,6.9l7.96,4.2l2.04-0.75v-2.52l-6.39-5.32l-3.15-7.28l2.5-1.21l-1.85-4.01l-3.7-0.09l-0.93-4.29l-9.81-6.62L852.76,348.29L852.76,348.29M880.48,349l-0.88,1.25l4.81,4.26l0.66,2.5l1.31-0.15l0.15-2.57l-1.46-1.32L880.48,349L880.48,349M882.89,355.03l-0.95,0.22l-0.58,2.57l-1.82,1.18l-5.47,0.96l0.22,2.06l5.76-0.29l3.65-2.28l-0.22-3.97L882.89,355.03L882.89,355.03M889.38,359.51l1.24,3.45l2.19,2.13l0.66-0.59l-0.22-2.28l-2.48-3.01L889.38,359.51L889.38,359.51z","name":"Papua New Guinea"},"mx":{"path":"M137.49,225.43l4.83,15.21l-2.25,1.26l0.25,3.02l4.25,3.27v6.05l5.25,5.04l-2.25-14.86l-3-9.83l0.75-6.8l2.5,0.25l1,2.27l-1,5.79l13,25.44v9.07l10.5,12.34l11.5,5.29l4.75-2.77l6.75,5.54l4-4.03l-1.75-4.54l5.75-1.76l1.75,1.01l1.75-1.76h2.75l5-8.82l-2.5-2.27l-9.75,2.27l-2.25,6.55l-5.75,1.01l-6.75-2.77l-3-9.57l2.27-12.07l-4.64-2.89l-2.21-11.59l-1.85-0.79l-3.38,3.43l-3.88-2.07l-1.52-7.73l-15.37-1.61l-7.94-5.97L137.49,225.43L137.49,225.43z","name":"Mexico"},"ee":{"path":"M517.77,143.66l-5.6-0.2l-3.55,2.17l-0.05,1.61l2.3,2.17l7.15,1.21L517.77,143.66L517.77,143.66M506.76,147.64l-1.55-0.05l-0.9,0.91l0.65,0.96l1.55,0.1l0.8-1.16L506.76,147.64L506.76,147.64z","name":"Estonia"},"dz":{"path":"M473.88,227.49l-4.08-1.37l-16.98,3.19l-3.7,2.81l2.26,11.67l-6.75,0.27l-4.06,6.53l-9.67,2.32l0.03,4.75l31.85,24.35l5.43,0.46l18.11-14.15l-1.81-2.28l-3.4-0.46l-2.04-3.42v-14.15l-1.36-1.37l0.23-3.65l-3.62-3.65l-0.45-3.88l1.58-1.14l-0.68-4.11L473.88,227.49L473.88,227.49z","name":"Algeria"},"ma":{"path":"M448.29,232.28h-11.55l-2.26,5.02l-5.21,2.51l-4.3,11.64l-8.38,5.02l-11.77,19.39l11.55-0.23l0.45-5.7h2.94v-7.76h10.19l0.23-10.04l9.74-2.28l4.08-6.62l6.34-0.23L448.29,232.28L448.29,232.28z","name":"Morocco"},"mr":{"path":"M404.9,276.66l2.18,2.85l-0.45,12.32l3.17-2.28l2.26-0.46l3.17,1.14l3.62,5.02l3.4-2.28l16.53-0.23l-4.08-27.61l4.38-0.02l-8.16-6.25l0.01,4.06l-10.33,0.01l-0.05,7.75l-2.97-0.01l-0.38,5.72L404.9,276.66L404.9,276.66z","name":"Mauritania"},"sn":{"path":"M412.03,289.84L410.12,290.31L406.18,293.18L405.28,294.78L405,296.37L406.43,297.40L411.28,297.34L414.40,296.5L414.75,298.03L414.46,300.06L414.53,300.09L406.78,300.21L408.03,303.21L408.71,301.37L418,302.15L418.06,302.21L419.03,302.25L422,302.37L422.12,300.62L418.53,296.31L414.53,290.87L412.03,289.84z","name":"Senegal"},"gm":{"path":"M406.89,298.34l-0.13,1.11l6.92-0.1l0.35
|
||
|
|
||
|
/** Add Russia Map Data Points */
|
||
|
jQuery.fn.vectorMap('addMap','russia_en',{"width":959,"height":593,"paths":{"da":{"path":"m34.939,403.74,2.6516,1.2627,3.6618,0.50507,1.7678-2.0203,2.1466,2.0203,2.3991-1.6415,0.25254-1.7678,1.6415-2.1466,3.0305,0.50508,3.7881-2.9042-0.50508-1.894-4.7982-0.50508,0.75762-3.1567-1.0102-0.63134,0.63135-2.2728-3.1567-2.7779,1.5152-0.50508,3.9143,0.88388,0-1.389-1.0102-1.2627,8.3338-0.25254,4.9245,5.4296,1.2627,1.894-0.37881,2.2728-5.3033-0.3788,0.50508,2.5254,1.5152,3.0304-1.0102,3.5355-2.3991,2.7779-1.2627,0.25254,4.5457,0.75761-5.5558,2.1466-0.50508,2.0203-0.75762,0.50508-3.0305,0.50507-0.25254,4.7982-1.2627,0.88388-1.1364,13.132-9.0914-0.12627-3.6618-2.2728-1.389-0.88388,0-11.617-3.283-5.9346,0.37881-2.9042,1.2627-0.37881z","name":"Republic of Dagestan"},"sa":{"path":"M671.25,126.75l-1.44,1.06-1.25,1.63s1.44,0.87,2.16,0.87c0.71,0,2.69-1.97,2.69-1.97l-2.16-1.59zm18.47,12.09c-0.18-0.01-0.4,0.02-0.63,0.07-1.78,0.35-4.81,1.93-4.81,1.93s-1.41,1.1-2.12,1.1c-0.72,0-2.35-0.38-2.35-0.38-0.71,0-2.5,1.25-2.5,1.25l-1.4,1.78s-1.1-0.51-1.1,0.38-0.35,1.96,0.72,2.5c1.07,0.53,1.61,1.06,2.5,1.06s3.22-0.72,3.22-0.72l1.97-0.87,1.97,1.06s0.51-0.9,1.4-1.44c0.9-0.53,3.4-2.31,3.75-3.03,0.36-0.71,0.72-3.22,0.72-3.22s-0.11-1.36-1.34-1.47zm-19.81,7.1c-0.15,0.01-0.29,0.05-0.44,0.09-1.25,0.36-2.85,0.19-3.56,0.19-0.72,0-0.91,0.19-0.91,0.19s-0.88,1.58-1.59,1.93c-0.72,0.36-1.99,0.74-3.07,0.57-1.07-0.18-3.75-1.25-3.75-1.25s-1.93-0.02-1.93,1.59,3.03,3.41,3.03,3.41l1.06,1.4s-2.51,0.73-3.41,0.38c-0.89-0.36-2.65-2.16-2.65-2.16l-3.22-0.72s-2.88,0.2-2.88,1.1c0,0.89-0.68,2.67-0.68,3.56s-0.9,3.04,0.53,3.94c1.43,0.89,1.79,3.03,1.97,3.75,0.17,0.71,0.7,1.77,2.84,2.31,2.14,0.53,4.29,0.53,5,1.06,0.71,0.54,1.77,1.07,2.84,0.53,1.08-0.53,1.82-2.65,1.82-2.65l2.12-1.97s1.61-1.44,2.5-2.16c0.89-0.71,2.7-0.54,4.13-1.44,1.42-0.89,2.31-3.75,2.31-3.75v-5l-0.38-4.43s-0.68-0.58-1.68-0.47zm106.25,5.62c-0.45,0.09-0.75,4.1-0.75,4.1l-7.32,1.65-3.28,0.63-4.53-6.06-7.84-0.13-0.38,0.87-5.68,1.66-1.76,2.13-6.06,6.31v2.78l-2.15,1.91-3.29,5.03-4.93-2.38-3.41-0.37-1.75,2h-4.56l-3.41,1.78-1.75-1.53,4.28-2.91-2.28-1.62-3.03-0.13-8.84,4.03,1.9,5.44-0.87,4.78-2.66,2.91-1.65-2.13,3.03-7.47-1.75-0.37-2.66,4.03-3.03,2.03-1-0.75,1-3.16,2.28-0.74,2.91-2.66-7.1,1.75-9.22,5.31-6.68,0.25,3.65,3.66-3.65,3.4-0.5,3.03,0.37,1.16,3.91-1.78-1,4.03,4.81,2.91-0.91,2.9-2-1.37-3.68,1,1.28,3.41,2.4-0.26-1.03,2.66-3.9-0.5-4.28-1.66-3.53,0.26-2.41,3.15-0.63,4.06h-6.46l-1.76-1.53-2.4-2-0.5,4.41,0.87,0.87-0.12,1.41,1.65,0.87-0.9,2.54,1.66,6.18-3.29-1.4-1,1.15-9.87-5.31v-4.94l-2.25,0.13-1.78,2.41-2-3.41,3.65-0.63-0.5-2.9-4.43-1.66,0.75-0.87,0.12-2.53-5.28-4.04-5.31-2.53-1,3.66-7.35,0.65-2.37-1.65-4.19,2.15v2.13l4.19,4.69-10.94,5.31-10.28-1.16,0.44-4.4-12.07,0.19-3.96,3.78h-2.85l-1.09,1.09,2.66,2.87h-2.13l-2.91-2.06,1.19-2.09-0.87-1.38-1.54-1.78,0.07,2.28-1.5,1.07-3.85-1.32s-2.9,3.53-2.84,3.78c0.06,0.26,2.66,3.29,2.66,3.29l-1.41,3.34,1.59,2.09,0.19,2.78,7.38,5.82-0.32,5.47,2.53,1.9,1.63,2.53-2.53,2.72-4.41,3.03-0.69,2.63-4.81,2.78,0.25,6.12-2.25,1.1-2.97-1.28-5.65,4.75-4.44,0.09,0.06,1.97,5.38,6.59,1.78,20.1-6.35,1.97,4.19,3.4-1.78,4.19v1.25l7.16,8.84-4.57,6.69,0.97,1.6-2.4,1.87,0.09,2.25,5.63,0.34,0.71,0.72,9.1,0.19,3.31,3.31-0.53,1.6-3.31,0.34,0.19,3.94,4.03-1.06,5.06,6.59-0.53,5.53,3.84,5.19-1.97,3.4,0.53,2.13,7.69,6.53v4.37l-3.75,6.44,0.28,10.78,3.85,4.13,3.37-3.94,3.75,0.09,1.88-1.34,2.68-0.62,2.41-2.07,3.56,3.85,0.38,2.31,4-5.06,0.09-4.13,5.38-2.75-0.29-6.25,2.32-4.12,3.84-1.5,4.91,1.06,6.15,4.91,0.57,3.84,1.31,0.87,4.03-1.4,2.5-2.06,2.69,1.06,0.87,4.47,3.13,4.56,2.15,1.78v3.03l2.32,1.35,0.71,4.71,3.94,0.19,0.97,1.35,1.53,4.09,8.38-0.25,3.31-1.97,5.53,1.16,3.56,1.97,11-0.72,5.54,3.75,2.21,0.53,5.19-2.6h2.6l3.03,2.26,2.78-0.19,3.22-3.94,5.68-0.06,2.5-1.97h7.88l0.19-3.75,10.68-5.09,0.82-3.04-4.28-4.12,2.31-1.69,0.62-4.03-1.34-1.69-2.41,0.38-2.03-1.44,2.75-4.03-2.84-1.6,0.25-1.87,1.53-1.97-1.44-1.44-3.47-1.15-0.53-1.6,3.38-1.43-1.88-0.91-0.19-5.25-0.87-0.62-0.19-1.88,2.78-1.25-1.62-1.25v-2.94l5.47-1.97,3.12,0.16,0.25-1.78,6.53,0.09v-2.75l-1.25-1.53,1.16-1.25,3.47-0.62,3.31-2.22,1.34-6,5-0.44,0.1-2.06s-5.29-4.9-5.47
|
||
|
|
||
|
/** Add USA Map Data Points */
|
||
|
jQuery.fn.vectorMap('addMap', 'usa_en', {"width":959,"height":593,"paths":{"hi":{"path":"m244.66,512.25c-2.48,3.8 2.23,4.04 4.74,5.38 3.06,0.16 3.51,-4.28 2.66,-6.56 -2.72,-0.77 -5.01,-0.19 -7.41,1.19z m-9.31,3.97c-4.02,5.11 3.64,0.48 0.63,-0.09l-0.5,0.07 -0.14,0.02z m39.69,7.97c-0.62,2.09 1.91,6.73 4.39,6.2 2.41,-1.46 3.73,1.73 6.48,0.56 1.23,-1.48 -3.77,-3.2 -3.7,-6.08 -0.95,-3.8 -3.28,-3.2 -5.96,-1.28 -0.41,0.2 -0.81,0.4 -1.22,0.6z m19.94,10.03c3.58,0.95 7.91,2.99 11.25,0.47 -1.05,-1.63 -5.06,-0.59 -7.1,-0.86 -1.44,0.01 -3.54,-1.63 -4.15,0.39z m12.13,4.38c2.33,2.45 3.64,6.83 7.24,7.4 2.36,-0.69 6.84,-0.66 7.32,-3.43 -2.09,-2.51 -5.77,-3.35 -8.88,-4.29 -2.53,-1.2 -4.11,-3.25 -5.68,0.33z m-7.06,1c-0.29,3.69 5.55,3.98 3.67,0.55 -0.27,-1.25 -3.83,-1.74 -3.67,-0.55z m23.66,14.69c0.27,2.45 3.18,3.93 0.47,6.15 -0.65,2.42 -5.54,2.87 -2.52,5.53 2.36,1.46 2.01,4.85 2.92,7.14 -0.72,2.69 -1.43,6.78 1.72,8.06 2.8,2.95 4.5,-1.93 6.19,-3.68 1.27,-1.69 3.85,-4.1 5.94,-2.59 3.04,-0.81 6.3,-2.42 7.78,-5.22 -2.79,-1.31 -4.88,-3.19 -5.57,-6.29 -2.4,-5.33 -8.95,-6.26 -13.58,-8.98 -1.29,-0.52 -2.26,-1.62 -3.34,-0.11z","name":"Hawaii"},"ak":{"path":"m107.84,436.56c-2.27,0.55 -4.87,0.32 -6.84,-0.34 -2.41,1.22 -5.63,4.03 -8.25,1.88 -3.1,0.93 -3.51,3.84 -5.22,5.97 -1.82,2.52 -4.21,3.65 -7.31,3.14 -2.5,-0.94 -5.49,-1.15 -7.5,0.98 2.03,4.34 6.39,8.13 5.82,13.23 -1.85,2.94 6.31,2.99 2.68,5.02 0.15,2.8 3.07,5.68 2.91,7.88 -2.35,2.21 -5.24,-0.38 -7.71,-1.06 -3.24,-0.64 -2.73,-3.35 -0.82,-5.22 -1.57,-1.51 -7.35,-1.81 -6.51,1.12 -2.01,0.04 -3.81,-1.66 -6.27,-0.77 -3.72,-0.44 -5.97,0.65 -2.94,4.05 3.68,1.45 1.06,4.72 1.17,7.57 0.76,2.63 3.66,4.89 6.67,4.17 3.2,-0.06 5.87,3.59 9.21,1.65 2.16,-1.3 5.33,-0.99 4.79,1.89 -2.53,2.07 -1.36,6.13 -2.78,8.75 -1.96,1.88 -4.53,1.59 -6.59,0.16 -1.52,1.37 -4.7,3.68 -6.28,2.22 0.72,-3.71 -4.77,-3.63 -5.51,-0.61 -1.21,3.97 -6.27,4.46 -8.31,7.63 -0.7,2.42 -1.55,6.7 1.74,6.3 1.26,1.11 -1.2,4.8 -2.77,5.52 1.62,2.19 2.65,4.59 2.72,7.34 1.71,1.55 6.35,1.98 7.5,-0.16 2.45,-0.95 1.79,4.1 2.08,5.97 2.47,2.95 -4.02,1.28 -1.61,4.56 -0.85,2.93 -1.76,5.02 2,2.72 2.76,-0.47 5.11,-0.69 5.66,2.09 2.59,-3.91 2.26,2.78 3.25,4.66 0.59,-0.75 1.3,-5.69 3.94,-3.06 -0.17,4.52 5.33,-0.45 5.78,-0.04 0.54,2.92 -1.63,4.24 -2.86,6.41 -1.51,2.24 -2.07,5.63 -4.21,7.17 -3.87,-0.42 -3.37,4.1 -5.5,5.02 -2.65,-0.72 -5.73,0.71 -8.44,1.41 -1.35,2.41 -3.61,4.2 -5.78,1.81 -2.56,0.05 -5.63,0.68 -7.63,2.33 -2.48,2.43 -6.32,3.11 -9.66,2.29 -2.78,-1.91 -7.11,3.41 -3.11,2.31 2.5,-1.91 4.66,0.64 7.25,0.63 2.21,-1.15 4.17,-2.75 6.84,-2.06 2.32,-3.35 5.1,-0.32 7.92,-1.16 2.31,-0.39 7.01,-3.91 5.26,0.66 0.09,-2.91 3.42,-2.73 5.54,-2.04 4.21,0.96 0.29,-3.16 2.08,-3.43 3.47,-2.05 7.52,-2.41 11.2,-3.72 5.48,-3.19 11.62,-5.7 16.21,-10.1 4.27,-2.97 -2.78,-3.48 -1.21,-6.32 1.68,-2.43 4.58,-3.81 7.47,-4.5 1.5,-3.07 3.53,-6.11 5.88,-8.52 2.49,-1.32 4.83,-3.39 7.83,-2.32 2.67,0.71 3.74,5.32 -0.52,3.66 -1.27,-1.88 -5.56,-0.09 -5.25,2.41 -0.21,2.44 -2.56,4.22 -3.06,6.66 4.79,0.85 0.24,3.54 -1.38,3.8 1.67,1.91 5.66,0.6 7.57,-1.14 1.25,-1.85 3.43,-3.8 5.41,-4.22 1.81,2.8 5.1,-1.16 5.74,2.72 0.71,2.78 6.02,-4.86 3.34,-3.1 -3.03,3.11 -3.78,2.86 -1.94,-1.24 1.43,-4.85 -1.76,6.17 -1.45,0.81 -0.81,-3.19 -0.93,-6.03 3.05,-6.4 2.7,-0.86 5.37,-0.87 5.79,2.52 0.42,3.48 3.8,2.84 5.95,4.76 2.41,2.2 4.76,1.95 7.8,1.78 4.34,-0.47 8.01,4.04 12.28,3.17 2.49,-0.42 5.1,-5.2 4.29,-0.23 -2.26,2.83 -0.02,4.12 2.5,5.41 3.13,1.35 5.87,3.14 7.94,5.85 1.31,3.02 6.05,0.28 6.18,2.43 -3.83,1.25 -1.23,3.54 0.21,5.47 1.81,1.95 0.33,5.72 3.64,5.82 1.14,1.28 3.49,7.44 4.01,5.38 -0.35,-2.32 -0.7,-7.86 1.61,-3.76 0.37,1.42 1.04,8.7 2.07,4.74 1.07,-4.88 3.18,0.18 2.22,2.93 3.33,1.69 -1.23,3.33 0.69,4.88 0.69,-3.24 1.31,-0.36 2.16,1.56 1.05,1 1.54,3.94 3.13,3.72 -1.68,-1.72 -2.94,-6.23 0.4,-3 2.42,2.79 4.05,2.12 2.74,-1.66 -2.65,-2.66 0.28,-4.96 2.58,-2.29 3.12,-0.05 2.84,5.21 5.28,4.53 3.31,-3.17 1.5,-7.87 0.69,-11.7 -3.3,-1.55 -7.04,-2.54 -10.22,-4.06 -1.5,-5.33 -6.29,-8.69 -8.4,-13.77 -0.44,-3.33 -4.71,-2.62 -5.75,-5.23 -2.32,-1.72 -2.7,-4.4 -4.56,-6.35 -1.65,-1.53 -5.22,0.95 -5.51,2.94 0.59,3.09 -3.23,3.
|
||
|
|
||
|
/** Add Germany Map Data Points */
|
||
|
jQuery.fn.vectorMap('addMap', 'germany_en', {"width":592,"height":801,"paths":{"th":{"path":"m312.19,352.19c-2.73,0.22 -2.22,4.11 -3.64,5.97 -1.01,2.7 -4.71,2.26 -7.13,2.91 -2.52,0.84 -2.65,-2.93 -5,-3.11 -2.02,-1.67 -5.36,0.2 -4.98,2.55 -0.62,4.82 -6.22,6.91 -9.72,9.65 -2.98,3.28 -7.8,2.07 -11.1,4.73 -2.55,1.59 -5.81,3.14 -7.87,5.03 0.64,3.74 1.96,8.43 6.44,8.84 3.41,0.33 2.07,4.91 5.71,5.17 2.12,1.11 4.61,1.57 6.04,3.67 2.61,-0.18 1.95,2.83 0.13,3.41 -0.75,1.55 1.21,2.98 -0.06,4.88 -2.65,1.33 -1.59,-4.91 -4.58,-2.96 -2.15,1.14 2.24,4.28 1.18,6.62 -0.73,2.87 3.35,2.38 3.93,4.97 0.22,2.4 -1.82,4.2 -4.4,4.04 -1.89,0.05 -3.04,-2.14 -5.19,-1.69 -2.29,-1.13 -3.6,1.4 -2.29,3.19 0.92,3.27 2.06,6.86 1.64,10.24 -1.04,2.07 -1.35,6.09 -4.56,5.07 -2.5,-0.54 -3.05,2.78 -2.17,4.43 0.33,2.11 -1.94,1.58 -0.64,3.71 0.2,3.37 -2.96,5.74 -4.05,8.57 -1.46,3 3.1,3.73 4.61,2.61 -1.8,-1.67 -0.95,-4.04 1.83,-4.18 2.21,-0.46 5.52,-0.43 5.9,2.47 2.29,2.61 -2.68,2.96 -1.96,5.59 0.5,1.86 -0.79,8.31 0.95,7 1.72,-3.38 5.8,-2.18 8.88,-2.88 2.69,0.85 3.11,5.24 6.43,5.5 3.89,0.66 4.77,4.88 6.09,7.93 -0.55,3.14 2.45,3.82 4.54,1.98 0.31,5.02 5.89,6.45 10.06,7.19 -0.2,3.63 -1.27,7.43 0.53,10.84 2.35,0.1 5.18,2.71 7.07,1.85 0.03,-1.3 -1.32,-4.82 1.27,-4.26 2.07,-0.06 5.3,2.5 6.66,0.25 0.29,-2.71 -3.43,-1.58 -4.54,-3.52 -1.94,-1.64 -5.47,-2.54 -4.67,-5.79 -0.91,-3.55 3.89,-3.37 6.02,-4.77 2.87,-1.54 6.27,-0.65 9.38,-0.79 1.61,1.84 2.4,4.9 5.49,4.49 2.33,1.02 3.21,-1.38 4.71,-2.1 2.52,-0.39 4.79,2.85 4.64,5.17 -2.32,0.34 -2,2.87 -0.04,3.79 1.25,1.09 4.62,-1.62 5.78,-2.97 1.07,-2.95 1.98,-5.92 0.84,-9.01 0.33,-2.69 -1.49,-4.1 -2.06,-6.05 -0.35,-1.26 0.15,-3.52 1.89,-2.72 2.51,-0.54 3.16,-3.11 5.03,-4.31 2.41,-0.31 6.41,-0.25 6.75,2.81 -1.09,1.47 -1.71,2.75 -1.31,4.94 2.04,1.91 4.67,0.65 4.88,4.5 0.54,1.96 3.79,3.19 4.05,0.56 1.06,-1.74 3.34,-0.66 4.25,0.63 6.13,-1.07 12.67,-0.94 18.25,-3.97 -1.68,-0.65 -2.19,-2.46 -0.38,-3.31 1.4,-0.73 5.24,-2.7 2.32,-4.13 -1.1,-2.24 -4.24,-0.26 -4.55,-3.08 -1.3,-2.44 2.29,-4.28 3.11,-6.33 2.98,-0.71 2.97,-4.68 5.91,-5.31 1.95,1.54 1.58,4.54 1.16,6.72 1.66,-0.64 6.6,0.71 6.33,-0.74 -3.05,-0.17 -0.61,-3 1.2,-3.1 2.57,-1.22 5.33,-2.23 7.87,-3.14 1.72,-1.51 4.46,-4.54 0.25,-4.48 -1.74,-1.64 -3.31,-4.12 -3.69,-6.5 0.38,-2.82 0.28,-5.87 1.72,-8.41 0.89,2.58 5.82,0.77 5.81,-1.09 0.71,-1.83 4.18,-2.99 5.41,-0.97 2.56,-0.68 0.59,-4.69 3.44,-5.44 3.25,-1.87 7.85,-0.32 10.53,-2.97 -2.57,-1.55 -0.79,-6.34 -4.47,-6.16 -2.74,-0.84 -6.28,-2.6 -5.42,-6.03 0.8,-2.88 -3.5,-2.46 -5.15,-3.47 -2.87,-0.81 -6.3,-2.89 -8.61,0.02 -2.54,2.1 0.01,3.58 1.21,5.21 -0.17,3.21 -2.39,6.03 -3.68,8.9 -1.08,1.71 -2.42,1.35 -2.66,-0.64 -2.24,-4.02 -1.09,1.94 -3.66,-0.66 -2.71,-1.39 -5.95,-1.32 -8.59,0.19 -0.02,-4.6 -5.04,-6.77 -8.31,-9 -2.72,-0.06 -5.6,1.79 -8.33,0.1 -2.65,-0.52 -5.05,-1.27 -4.7,-4.45 -2.02,-1.11 -5.86,-2.21 -7.53,-1.16 -1.29,1.98 -3.84,1.06 -5.84,1.31 -1.81,-1.01 -2.04,-3.39 -2.5,-5.41 3.14,0.3 2.23,-3.59 0.51,-4.83 -1.37,-2.03 -4.15,0.89 -5.53,-1.6 -1.69,-0.96 1.02,-5.32 2.36,-2.94 1.62,-1.63 2.76,-3.73 4,-5.66 -0.78,-1.58 -4.12,-2.02 -3.47,-4.09 -2.15,-0.17 -2.01,-2.77 -1.75,-4.31 -4.91,-2.77 -10.54,-0.91 -15.84,-1.69 -2.69,-0.42 -5.41,-2.8 -8.03,-1.28 -1.99,0.45 -4.28,-1.52 -3.68,-3.5 0.86,-2.86 -0.76,-4.88 -2.35,-7.1 -1.55,-2.64 -4.98,-6.28 -2.16,-9.19 -2.47,-3.43 -7.17,-3.03 -10.89,-3.21 -0.41,0.09 -0.82,0.18 -1.23,0.27z m95.09,106.63c0.36,0.47 0.77,-0.65 0,0z","name":"Thüringen"},"sh":{"path":"m173.41,0.78c-1.96,2.02 -2.32,5.26 -3.72,7.72 0.61,-2.46 2.87,-3.44 4.94,-4.31 1.37,-2.31 1.87,-2.9 -1.22,-3.41z m-4.63,9.69c-1.37,3.14 -2.78,7.11 -2.63,10.16 1.42,-1.81 3.12,-2.33 4.66,-0.67 1.41,1.35 2.9,1.87 4.52,0.27 2.61,-1.53 -0.74,-0.41 -1.92,-1.16 -2.06,-1.81 -4.59,-3.55 -3.89,-6.71 -0.29,-0.68 0.25,-4.89 -0.73,-1.88z m16.78,8.5c-1.27,2.96 0.71,4.89 2.59,6.89 3.39,3 2.55,7.98 4.79,11.67 0.62,3.55 5.38,3.23 6.46,6.57 3.09,5.18 8.01,9.55 9.53,15.49 -0.32,3.65 -4.55,4.93 -6.72,7.41 -1.75,1.07 -3.73,2 -5.62,0.78 -2.44,0.59 -7.26,-0.45 -7.37,2.95 0.9,2.44 -1.97,3.88 -3.95,4.18 -1.94,-2.13 -2.52,-1.01 -2.77,1.45 -0.87,2.9 3.21,3.7 4.93,4.64 1.92
|
||
|
|
||
|
/** Add Europe Map Data Points */
|
||
|
jQuery.fn.vectorMap('addMap', 'europe_en', {"width":680,"height":520,"paths":{"gl":{"path":"M13.47,93.57C12.35,92.52 12.34,90 10.44,89.14 10.62,88.14 13.84,87.66 11.35,86.39 10.05,87.17 9.25,86.92 8.71,87.58 6.27,88.12 8.6,85.09 6.17,85.17 5.23,84.47 10.33,84.75 9.98,83.14 11.32,83.4 14.67,82.04 12.37,81.03 11.23,81.19 6.54,82.06 10.06,81.32 13.04,80.64 9.92,76.6 8.71,79.05 9.24,77.06 11.03,78.05 12.88,77.78 14.68,74.59 9.38,77.17 8.23,75.54 7.26,73.61 12.43,77.09 11.48,74.6c2.44,-0.76 -0.97,1.23 1.21,1.43 1,0.07 3.06,0.24 1.26,-0.8C15.39,74.51 14.27,73.05 14.04,72.76 16.26,70.08 9.73,69.39 11.65,72.54 9.43,70.77 7.4,69.72 5.62,68.37 4.84,67.27 3.62,65.14 5.75,64.54 6.27,63.17 3.83,63.23 6.08,62.64 8.52,60.62 3.8,58.38 3.79,56.87 4.78,56.07 3.39,53.57 4.92,55.82c2,1.48 -1.5,0.05 -0.41,1.67 0.7,1.18 4.94,4.58 4.09,1.22C7.96,57.37 6.11,57.21 8.09,56.47 5.75,56.14 4.83,52.58 8.11,53.61c1.58,0.65 2.17,-1 2.13,-1.24 1.86,-0.56 0.99,-3.89 0.14,-5.02 -2.29,-0.92 1.59,-2.34 -1.23,-2.91 0.6,-3.73 4.98,-2.29 7.51,-3.37 2.78,-1.33 -1.33,-1.73 -1.69,-3.06 -3.07,-1.99 2.8,-0.5 3.28,-2.76 2.87,0.22 -2.67,-2.82 -1.49,-3.84 1.34,0.59 4.57,3.1 4.27,-0.2C20.58,29.48 17.09,31.14 17.33,29.6c1.78,1.02 0.79,-3.69 2.33,-1.12 1.76,1.21 4.05,-0.81 1.11,-1.21 -0.72,-0.16 1.96,-1.91 2.18,-0.31 2.04,0.89 2.39,3.26 4.86,3.29 1.12,-1.58 -2.89,-2.38 -0.16,-2.31 1.35,-1.83 -5.03,-0.94 -1.14,-2.29 1.39,-1.55 1.81,4.29 2.64,1.36 -0.57,-1.39 -0.41,-4.67 1.53,-2.59 0.16,2.02 -2.74,3.73 -1.03,6.23 2.7,1.13 0.11,-4.85 3.69,-4.25 2.74,-0.7 0.37,-3.01 -1.39,-3.16 0.93,-1.59 -0.48,-0.52 -0.91,-1.1 -1.26,0.42 -2.63,-0.27 -1.15,-1.19 -0.81,-1.9 -3.85,0.74 -5.54,0.53 -3.44,0.64 1.14,-2.76 2.36,-3.3 2.28,-0.77 4.66,2.97 6.55,0.04C34.81,17.14 33.04,17.79 32.17,17.97 30.61,18.81 30.38,17.32 30.54,16.77 29.14,17.79 26.4,16.27 29.42,16.34 29.89,14.12 31.85,14.39 33.58,13.44c0.27,-2.21 -3.96,0.03 -1.92,-1.94 2.34,1.37 5.29,0.49 7.37,1.6 0.49,1.25 2.93,3.07 2.07,0.58C40.16,10.86 37.07,10.79 34.89,10.94 32.01,10.71 38.39,8.92 36.45,6.69 35.49,6.8 33.31,6.65 34.75,5.53c1.74,0.57 3.45,1.31 2.13,3.63 0.97,-0.77 3.6,0.14 4.92,-0.01C42.62,6.51 37.36,8.29 39.31,5.97 39.94,4.69 35.39,5.71 36.07,3.41c2.18,-0.52 6.21,0.1 8.48,1.64 1.78,-0.72 2.84,-0.23 4.07,0.55 1.73,-0.23 3.46,0.06 2.78,2.25C52.75,9.86 54.51,8.35 52.72,6.73 52.71,4.07 54.56,10.07 55.78,8.98 56.01,5.87 52.57,4.02 49.87,3.57 48.45,2.66 43.96,4.29 45.02,2.48 44.96,1.07 43.75,0.16 45.71,1.28 47.56,3.52 50.55,-0.47 53.01,0.78 55.13,-0.05 52.02,4.62 54.57,4.07 55.09,3.62 56.43,7.62 57.26,5.53 57.36,3.28 54.5,4.61 54.71,2.93 54.66,0.68 56.28,0.89 57.93,0.78 59.1,1.36 57.92,5.72 60.98,5.64 61.74,4.33 57.63,0.17 61.09,2.11 61.53,3.09 65.18,3.43 63.42,2.17 61.88,1.53 60.02,-0.12 62.69,1.24c1.18,0.74 1.27,-0.27 2.37,-0.09 0.49,-0.8 2.06,-0.17 3.01,-0.37 45.89,0 91.78,0 137.67,0 0.61,1.21 1.15,3.04 -0.24,1.09 -2.48,-0.7 1.23,2.94 1.58,3.94 1.63,2.86 -1.86,0.67 -3.36,1.88 1.28,-1.72 -2.26,-4.24 -1.57,-1.36 0.03,2.25 1.64,3.73 3.68,2.39 1.03,0.77 -1.42,2.8 -1.62,3.53 -3.09,0.12 0.02,1.62 1.04,2.22 0.66,2.09 4.04,0.64 2.3,3.22 -1.05,1.95 -3.92,1.82 -3.21,-0.86 0.14,-3.28 -4.67,-1.36 -4.04,-5.02 -2.02,-0.71 -0.18,3.84 -2.96,2.48 -0.73,0.74 0.41,1.75 -1.42,1.32 -2.61,0.54 1.71,4.84 -0.38,4.25 -1.39,0.66 -1.21,4.72 0.33,2.08 -0.04,-1.13 1.18,-4.09 2.39,-2.05 0.43,1.69 3.14,3.16 0.34,3.59 0.86,3.33 -3.29,2.48 -4.22,0.42 -0.56,1.42 -4.92,2.25 -4.96,-1.01 -1.09,-1.09 -0.61,-6.28 0.38,-2.79 -0.38,2.15 4.88,3.94 3.74,1.34 -3.75,0.99 -2.13,-7.24 -6.06,-4.79 -0.93,1.3 -1.66,1.94 -1.57,-0.09 0.87,-1.48 -0.65,-6.36 -1.62,-2.76 -0.29,1.71 1.87,5.7 -1.38,4.23 -1.61,0.79 -3.43,1.95 -3.68,-0.56 -1.68,-1 0.16,-4.48 -2.68,-3.04 -0.67,1.11 2.68,6.25 0.02,3.71 -0.94,-1.89 -3.02,-1.6 -4.56,-0.77 1.83,0.09 2.37,0.85 0.57,2.18 0.59,2.05 2.81,-2.2 3.66,0.12 1.38,0.4 3.13,-0.11 3.81,2.17 2.43,3.24 -2.95,0.83 -4.01,1.04 -0.05,-1.82 -4.79,-3.3 -3.23,-1.13 1.49,0.95 1.71,0.82 0.15,1.51 -1.1,2.37 1.53,3.48 2.9,1.87 3.12,-1.53 5.02,4.79 1.15,3.53 -2.62,-0.97 -1.48,2.05 -3.89,2.7 -0.43,2.18 2.56,-0.04 2.88,-0.79 2.47,-0.74 2.4,2.46 3.26,3.28 -2.41,2.08 2.06
|