Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * jVectorMap version 1.1
- *
- * Copyright 2011-2012, Kirill Lebedev
- * Licensed under the MIT license.
- *
- */
- (function (e) {
- var t = {
- set : {
- colors : 1,
- values : 1,
- backgroundColor : 1,
- scaleColors : 1,
- normalizeFunction : 1,
- focus : 1
- },
- get : {
- selectedRegions : 1,
- selectedMarkers : 1,
- mapObject : 1,
- regionName : 1
- }
- };
- e.fn.vectorMap = function (e) {
- var n,
- r,
- i,
- n = this.children(".jvectormap-container").data("mapObject");
- if (e === "addMap")
- jvm.WorldMap.maps[arguments[1]] = arguments[2];
- else {
- if (!(e !== "set" && e !== "get" || !t[e][arguments[1]]))
- return r = arguments[1].charAt(0).toUpperCase() + arguments[1].substr(1), n[e + r].apply(n, Array.prototype.slice.call(arguments, 2));
- e = e || {},
- e.container = this,
- n = new jvm.WorldMap(e)
- }
- return this
- }
- })(jQuery), function (e) {
- function r(t) {
- var n = t || window.event,
- r = [].slice.call(arguments, 1),
- i = 0,
- s = !0,
- o = 0,
- u = 0;
- return t = e.event.fix(n),
- t.type = "mousewheel",
- n.wheelDelta && (i = n.wheelDelta / 120),
- n.detail && (i = -n.detail / 3),
- u = i,
- n.axis !== undefined && n.axis === n.HORIZONTAL_AXIS && (u = 0, o = -1 * i),
- n.wheelDeltaY !== undefined && (u = n.wheelDeltaY / 120),
- n.wheelDeltaX !== undefined && (o = -1 * n.wheelDeltaX / 120),
- r.unshift(t, i, o, u),
- (e.event.dispatch || e.event.handle).apply(this, r)
- }
- var t = ["DOMMouseScroll", "mousewheel"];
- if (e.event.fixHooks)
- for (var n = t.length; n; )
- e.event.fixHooks[t[--n]] = e.event.mouseHooks;
- e.event.special.mousewheel = {
- setup : function () {
- if (this.addEventListener)
- for (var e = t.length; e; )
- this.addEventListener(t[--e], r, !1);
- else
- this.onmousewheel = r
- },
- teardown : function () {
- if (this.removeEventListener)
- for (var e = t.length; e; )
- this.removeEventListener(t[--e], r, !1);
- else
- this.onmousewheel = null
- }
- },
- e.fn.extend({
- mousewheel : function (e) {
- return e ? this.bind("mousewheel", e) : this.trigger("mousewheel")
- },
- unmousewheel : function (e) {
- return this.unbind("mousewheel", e)
- }
- })
- }
- (jQuery);
- var jvm = {
- inherits : function (e, t) {
- function n() {}
- n.prototype = t.prototype,
- e.prototype = new n,
- e.prototype.constructor = e,
- e.parentClass = t
- },
- mixin : function (e, t) {
- var n;
- for (n in t.prototype)
- t.prototype.hasOwnProperty(n) && (e.prototype[n] = t.prototype[n])
- },
- min : function (e) {
- var t = Number.MAX_VALUE,
- n;
- if (e instanceof Array)
- for (n = 0; n < e.length; n++)
- e[n] < t && (t = e[n]);
- else
- for (n in e)
- e[n] < t && (t = e[n]);
- return t
- },
- max : function (e) {
- var t = Number.MIN_VALUE,
- n;
- if (e instanceof Array)
- for (n = 0; n < e.length; n++)
- e[n] > t && (t = e[n]);
- else
- for (n in e)
- e[n] > t && (t = e[n]);
- return t
- },
- keys : function (e) {
- var t = [],
- n;
- for (n in e)
- t.push(n);
- return t
- },
- values : function (e) {
- var t = [],
- n,
- r;
- for (r = 0; r < arguments.length; r++) {
- e = arguments[r];
- for (n in e)
- t.push(e[n])
- }
- return t
- }
- };
- jvm.$ = jQuery, jvm.AbstractElement = function (e, t) {
- this.node = this.createElement(e),
- this.name = e,
- this.properties = {},
- t && this.set(t)
- }, jvm.AbstractElement.prototype.set = function (e, t) {
- var n;
- if (typeof e == "object")
- for (n in e)
- this.properties[n] = e[n], this.applyAttr(n, e[n]);
- else
- this.properties[e] = t, this.applyAttr(e, t)
- }, jvm.AbstractElement.prototype.get = function (e) {
- return this.properties[e]
- }, jvm.AbstractElement.prototype.applyAttr = function (e, t) {
- this.node.setAttribute(e, t)
- }, jvm.AbstractElement.prototype.remove = function () {
- jvm.$(this.node).remove()
- }, jvm.AbstractCanvasElement = function (e, t, n) {
- this.container = e,
- this.setSize(t, n),
- this.rootElement = new jvm[this.classPrefix + "GroupElement"],
- this.node.appendChild(this.rootElement.node),
- this.container.appendChild(this.node)
- }, jvm.AbstractCanvasElement.prototype.add = function (e, t) {
- t = t || this.rootElement,
- t.add(e),
- e.canvas = this
- }, jvm.AbstractCanvasElement.prototype.addPath = function (e, t, n) {
- var r = new jvm[this.classPrefix + "PathElement"](e, t);
- return this.add(r, n),
- r
- }, jvm.AbstractCanvasElement.prototype.addCircle = function (e, t, n) {
- var r = new jvm[this.classPrefix + "CircleElement"](e, t);
- return this.add(r, n),
- r
- }, jvm.AbstractCanvasElement.prototype.addGroup = function (e) {
- var t = new jvm[this.classPrefix + "GroupElement"];
- return e ? e.node.appendChild(t.node) : this.node.appendChild(t.node),
- t.canvas = this,
- t
- }, jvm.AbstractShapeElement = function (e, t, n) {
- this.style = n || {},
- this.style.current = {},
- this.isHovered = !1,
- this.isSelected = !1,
- this.updateStyle()
- }, jvm.AbstractShapeElement.prototype.setHovered = function (e) {
- this.isHovered !== e && (this.isHovered = e, this.updateStyle())
- }, jvm.AbstractShapeElement.prototype.setSelected = function (e) {
- this.isSelected !== e && (this.isSelected = e, this.updateStyle(), jvm.$(this.node).trigger("selected", [e]))
- }, jvm.AbstractShapeElement.prototype.setStyle = function (e, t) {
- var n = {};
- typeof e == "object" ? n = e : n[e] = t,
- jvm.$.extend(this.style.current, n),
- this.updateStyle()
- }, jvm.AbstractShapeElement.prototype.updateStyle = function () {
- var e = {};
- jvm.$.extend(e, this.style.initial || {}),
- jvm.$.extend(e, this.style.current || {}),
- this.isHovered && jvm.$.extend(e, this.style.hover || {}),
- this.isSelected && (jvm.$.extend(e, this.style.selected || {}), this.isHovered && jvm.$.extend(e, this.style.selectedHover || {})),
- this.set(e)
- }, jvm.SVGElement = function (e, t) {
- jvm.SVGElement.parentClass.apply(this, arguments)
- }, jvm.inherits(jvm.SVGElement, jvm.AbstractElement), jvm.SVGElement.svgns = "http://www.w3.org/2000/svg", jvm.SVGElement.prototype.createElement = function (e) {
- return document.createElementNS(jvm.SVGElement.svgns, e)
- }, jvm.SVGElement.prototype.addClass = function (e) {
- this.node.setAttribute("class", e)
- }, jvm.SVGElement.prototype.getElementCtr = function (e) {
- return jvm["SVG" + e]
- }, jvm.SVGElement.prototype.getBBox = function () {
- return this.node.getBBox()
- }, jvm.SVGGroupElement = function () {
- jvm.SVGGroupElement.parentClass.call(this, "g")
- }, jvm.inherits(jvm.SVGGroupElement, jvm.SVGElement), jvm.SVGGroupElement.prototype.add = function (e) {
- this.node.appendChild(e.node)
- }, jvm.SVGCanvasElement = function (e, t, n) {
- this.classPrefix = "SVG",
- jvm.SVGCanvasElement.parentClass.call(this, "svg"),
- jvm.AbstractCanvasElement.apply(this, arguments)
- }, jvm.inherits(jvm.SVGCanvasElement, jvm.SVGElement), jvm.mixin(jvm.SVGCanvasElement, jvm.AbstractCanvasElement), jvm.SVGCanvasElement.prototype.setSize = function (e, t) {
- this.width = e,
- this.height = t,
- this.node.setAttribute("width", e),
- this.node.setAttribute("height", t)
- }, jvm.SVGCanvasElement.prototype.applyTransformParams = function (e, t, n) {
- this.scale = e,
- this.transX = t,
- this.transY = n,
- this.rootElement.node.setAttribute("transform", "scale(" + e + ") translate(" + t + ", " + n + ")")
- }, jvm.SVGShapeElement = function (e, t, n) {
- jvm.SVGShapeElement.parentClass.call(this, e, t),
- jvm.AbstractShapeElement.apply(this, arguments)
- }, jvm.inherits(jvm.SVGShapeElement, jvm.SVGElement), jvm.mixin(jvm.SVGShapeElement, jvm.AbstractShapeElement), jvm.SVGPathElement = function (e, t) {
- jvm.SVGPathElement.parentClass.call(this, "path", e, t),
- this.node.setAttribute("fill-rule", "evenodd")
- }, jvm.inherits(jvm.SVGPathElement, jvm.SVGShapeElement), jvm.SVGCircleElement = function (e, t) {
- jvm.SVGCircleElement.parentClass.call(this, "circle", e, t)
- }, jvm.inherits(jvm.SVGCircleElement, jvm.SVGShapeElement), jvm.VMLElement = function (e, t) {
- jvm.VMLElement.VMLInitialized || jvm.VMLElement.initializeVML(),
- jvm.VMLElement.parentClass.apply(this, arguments)
- }, jvm.inherits(jvm.VMLElement, jvm.AbstractElement), jvm.VMLElement.VMLInitialized = !1, jvm.VMLElement.initializeVML = function () {
- try {
- document.namespaces.rvml || document.namespaces.add("rvml", "urn:schemas-microsoft-com:vml"),
- jvm.VMLElement.prototype.createElement = function (e) {
- return document.createElement("<rvml:" + e + ' class="rvml">')
- }
- } catch (e) {
- jvm.VMLElement.prototype.createElement = function (e) {
- return document.createElement("<" + e + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')
- }
- }
- document.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)"),
- jvm.VMLElement.VMLInitialized = !0
- }, jvm.VMLElement.prototype.getElementCtr = function (e) {
- return jvm["VML" + e]
- }, jvm.VMLElement.prototype.addClass = function (e) {
- jvm.$(this.node).addClass(e)
- }, jvm.VMLElement.prototype.applyAttr = function (e, t) {
- this.node[e] = t
- }, jvm.VMLElement.prototype.getBBox = function () {
- var e = jvm.$(this.node);
- return {
- x : e.position().left / this.canvas.scale,
- y : e.position().top / this.canvas.scale,
- width : e.width() / this.canvas.scale,
- height : e.height() / this.canvas.scale
- }
- }, jvm.VMLGroupElement = function () {
- jvm.VMLGroupElement.parentClass.call(this, "group"),
- this.node.style.left = "0px",
- this.node.style.top = "0px",
- this.node.coordorigin = "0 0"
- }, jvm.inherits(jvm.VMLGroupElement, jvm.VMLElement), jvm.VMLGroupElement.prototype.add = function (e) {
- this.node.appendChild(e.node)
- }, jvm.VMLCanvasElement = function (e, t, n) {
- this.classPrefix = "VML",
- jvm.VMLCanvasElement.parentClass.call(this, "group"),
- jvm.AbstractCanvasElement.apply(this, arguments),
- this.node.style.position = "absolute"
- }, jvm.inherits(jvm.VMLCanvasElement, jvm.VMLElement), jvm.mixin(jvm.VMLCanvasElement, jvm.AbstractCanvasElement), jvm.VMLCanvasElement.prototype.setSize = function (e, t) {
- var n,
- r,
- i,
- s;
- this.width = e,
- this.height = t,
- this.node.style.width = e + "px",
- this.node.style.height = t + "px",
- this.node.coordsize = e + " " + t,
- this.node.coordorigin = "0 0";
- if (this.rootElement) {
- n = this.rootElement.node.getElementsByTagName("shape");
- for (i = 0, s = n.length; i < s; i++)
- n[i].coordsize = e + " " + t, n[i].style.width = e + "px", n[i].style.height = t + "px";
- r = this.node.getElementsByTagName("group");
- for (i = 0, s = r.length; i < s; i++)
- r[i].coordsize = e + " " + t, r[i].style.width = e + "px", r[i].style.height = t + "px"
- }
- }, jvm.VMLCanvasElement.prototype.applyTransformParams = function (e, t, n) {
- this.scale = e,
- this.transX = t,
- this.transY = n,
- this.rootElement.node.coordorigin = this.width - t - this.width / 100 + "," + (this.height - n - this.height / 100),
- this.rootElement.node.coordsize = this.width / e + "," + this.height / e
- }, jvm.VMLShapeElement = function (e, t) {
- jvm.VMLShapeElement.parentClass.call(this, e, t),
- this.fillElement = new jvm.VMLElement("fill"),
- this.strokeElement = new jvm.VMLElement("stroke"),
- this.node.appendChild(this.fillElement.node),
- this.node.appendChild(this.strokeElement.node),
- this.node.stroked = !1,
- jvm.AbstractShapeElement.apply(this, arguments)
- }, jvm.inherits(jvm.VMLShapeElement, jvm.VMLElement), jvm.mixin(jvm.VMLShapeElement, jvm.AbstractShapeElement), jvm.VMLShapeElement.prototype.applyAttr = function (e, t) {
- switch (e) {
- case "fill":
- this.node.fillcolor = t;
- break;
- case "fill-opacity":
- this.fillElement.node.opacity = Math.round(t * 100) + "%";
- break;
- case "stroke":
- t === "none" ? this.node.stroked = !1 : this.node.stroked = !0,
- this.node.strokecolor = t;
- break;
- case "stroke-opacity":
- this.strokeElement.node.opacity = Math.round(t * 100) + "%";
- break;
- case "stroke-width":
- parseInt(t, 10) === 0 ? this.node.stroked = !1 : this.node.stroked = !0,
- this.node.strokeweight = t;
- break;
- case "d":
- this.node.path = jvm.VMLPathElement.pathSvgToVml(t);
- break;
- default:
- jvm.VMLShapeElement.parentClass.prototype.applyAttr.apply(this, arguments)
- }
- }, jvm.VMLPathElement = function (e, t) {
- var n = new jvm.VMLElement("skew");
- jvm.VMLPathElement.parentClass.call(this, "shape", e, t),
- this.node.coordorigin = "0 0",
- n.node.on = !0,
- n.node.matrix = "0.01,0,0,0.01,0,0",
- n.node.offset = "0,0",
- this.node.appendChild(n.node)
- }, jvm.inherits(jvm.VMLPathElement, jvm.VMLShapeElement), jvm.VMLPathElement.prototype.applyAttr = function (e, t) {
- e === "d" ? this.node.path = jvm.VMLPathElement.pathSvgToVml(t) : jvm.VMLShapeElement.prototype.applyAttr.call(this, e, t)
- }, jvm.VMLPathElement.pathSvgToVml = function (e) {
- var t = "",
- n = 0,
- r = 0,
- i,
- s;
- return e = e.replace(/(-?\d+)e(-?\d+)/g, "0"),
- e.replace(/([MmLlHhVvCcSs])\s*((?:-?\d*(?:\.\d+)?\s*,?\s*)+)/g, function (e, t, o, u) {
- o = o.replace(/(\d)-/g, "$1,-").replace(/^\s+/g, "").replace(/\s+$/g, "").replace(/\s+/g, ",").split(","),
- o[0] || o.shift();
- for (var a = 0, f = o.length; a < f; a++)
- o[a] = Math.round(100 * o[a]);
- switch (t) {
- case "m":
- return n += o[0],
- r += o[1],
- "t" + o.join(",");
- case "M":
- return n = o[0],
- r = o[1],
- "m" + o.join(",");
- case "l":
- return n += o[0],
- r += o[1],
- "r" + o.join(",");
- case "L":
- return n = o[0],
- r = o[1],
- "l" + o.join(",");
- case "h":
- return n += o[0],
- "r" + o[0] + ",0";
- case "H":
- return n = o[0],
- "l" + n + "," + r;
- case "v":
- return r += o[0],
- "r0," + o[0];
- case "V":
- return r = o[0],
- "l" + n + "," + r;
- case "c":
- return i = n + o[o.length - 4],
- s = r + o[o.length - 3],
- n += o[o.length - 2],
- r += o[o.length - 1],
- "v" + o.join(",");
- case "C":
- return i = o[o.length - 4],
- s = o[o.length - 3],
- n = o[o.length - 2],
- r = o[o.length - 1],
- "c" + o.join(",");
- case "s":
- return o.unshift(r - s),
- o.unshift(n - i),
- i = n + o[o.length - 4],
- s = r + o[o.length - 3],
- n += o[o.length - 2],
- r += o[o.length - 1],
- "v" + o.join(",");
- case "S":
- return o.unshift(r + r - s),
- o.unshift(n + n - i),
- i = o[o.length - 4],
- s = o[o.length - 3],
- n = o[o.length - 2],
- r = o[o.length - 1],
- "c" + o.join(",")
- }
- return ""
- }).replace(/z/g, "e")
- }, jvm.VMLCircleElement = function (e, t) {
- jvm.VMLCircleElement.parentClass.call(this, "oval", e, t)
- }, jvm.inherits(jvm.VMLCircleElement, jvm.VMLShapeElement), jvm.VMLCircleElement.prototype.applyAttr = function (e, t) {
- switch (e) {
- case "r":
- this.node.style.width = t * 2 + "px",
- this.node.style.height = t * 2 + "px",
- this.applyAttr("cx", this.get("cx") || 0),
- this.applyAttr("cy", this.get("cy") || 0);
- break;
- case "cx":
- if (!t)
- return;
- this.node.style.left = t - (this.get("r") || 0) + "px";
- break;
- case "cy":
- if (!t)
- return;
- this.node.style.top = t - (this.get("r") || 0) + "px";
- break;
- default:
- jvm.VMLCircleElement.parentClass.prototype.applyAttr.call(this, e, t)
- }
- }, jvm.VectorCanvas = function (e, t, n) {
- return this.mode = window.SVGAngle ? "svg" : "vml",
- this.mode == "svg" ? this.impl = new jvm.SVGCanvasElement(e, t, n) : this.impl = new jvm.VMLCanvasElement(e, t, n),
- this.impl
- }, jvm.SimpleScale = function (e) {
- this.scale = e
- }, jvm.SimpleScale.prototype.getValue = function (e) {
- return e
- }, jvm.OrdinalScale = function (e) {
- this.scale = e
- }, jvm.OrdinalScale.prototype.getValue = function (e) {
- return this.scale[e]
- }, jvm.NumericScale = function (e, t, n, r) {
- this.scale = [],
- t = t || "linear",
- e && this.setScale(e),
- t && this.setNormalizeFunction(t),
- n && this.setMin(n),
- r && this.setMax(r)
- }, jvm.NumericScale.prototype = {
- setMin : function (e) {
- this.clearMinValue = e,
- typeof this.normalize == "function" ? this.minValue = this.normalize(e) : this.minValue = e
- },
- setMax : function (e) {
- this.clearMaxValue = e,
- typeof this.normalize == "function" ? this.maxValue = this.normalize(e) : this.maxValue = e
- },
- setScale : function (e) {
- var t;
- for (t = 0; t < e.length; t++)
- this.scale[t] = [e[t]]
- },
- setNormalizeFunction : function (e) {
- e === "polynomial" ? this.normalize = function (e) {
- return Math.pow(e, .2)
- }
- : e === "linear" ? delete this.normalize : this.normalize = e,
- this.setMin(this.clearMinValue),
- this.setMax(this.clearMaxValue)
- },
- getValue : function (e) {
- var t = [],
- n = 0,
- r,
- i = 0,
- s;
- typeof this.normalize == "function" && (e = this.normalize(e));
- for (i = 0; i < this.scale.length - 1; i++)
- r = this.vectorLength(this.vectorSubtract(this.scale[i + 1], this.scale[i])), t.push(r), n += r;
- s = (this.maxValue - this.minValue) / n;
- for (i = 0; i < t.length; i++)
- t[i] *= s;
- i = 0,
- e -= this.minValue;
- while (e - t[i] >= 0)
- e -= t[i], i++;
- return i == this.scale.length - 1 ? e = this.vectorToNum(this.scale[i]) : e = this.vectorToNum(this.vectorAdd(this.scale[i], this.vectorMult(this.vectorSubtract(this.scale[i + 1], this.scale[i]), e / t[i]))),
- e
- },
- vectorToNum : function (e) {
- var t = 0,
- n;
- for (n = 0; n < e.length; n++)
- t += Math.round(e[n]) * Math.pow(256, e.length - n - 1);
- return t
- },
- vectorSubtract : function (e, t) {
- var n = [],
- r;
- for (r = 0; r < e.length; r++)
- n[r] = e[r] - t[r];
- return n
- },
- vectorAdd : function (e, t) {
- var n = [],
- r;
- for (r = 0; r < e.length; r++)
- n[r] = e[r] + t[r];
- return n
- },
- vectorMult : function (e, t) {
- var n = [],
- r;
- for (r = 0; r < e.length; r++)
- n[r] = e[r] * t;
- return n
- },
- vectorLength : function (e) {
- var t = 0,
- n;
- for (n = 0; n < e.length; n++)
- t += e[n] * e[n];
- return Math.sqrt(t)
- }
- }, jvm.ColorScale = function (e, t, n, r) {
- jvm.ColorScale.parentClass.apply(this, arguments)
- }, jvm.inherits(jvm.ColorScale, jvm.NumericScale), jvm.ColorScale.prototype.setScale = function (e) {
- var t;
- for (t = 0; t < e.length; t++)
- this.scale[t] = jvm.ColorScale.rgbToArray(e[t])
- }, jvm.ColorScale.prototype.getValue = function (e) {
- return jvm.ColorScale.numToRgb(jvm.ColorScale.parentClass.prototype.getValue.call(this, e))
- }, jvm.ColorScale.arrayToRgb = function (e) {
- var t = "#",
- n,
- r;
- for (r = 0; r < e.length; r++)
- n = e[r].toString(16), t += n.length == 1 ? "0" + n : n;
- return t
- }, jvm.ColorScale.numToRgb = function (e) {
- e = e.toString(16);
- while (e.length < 6)
- e = "0" + e;
- return "#" + e
- }, jvm.ColorScale.rgbToArray = function (e) {
- return e = e.substr(1),
- [parseInt(e.substr(0, 2), 16), parseInt(e.substr(2, 2), 16), parseInt(e.substr(4, 2), 16)]
- }, jvm.DataSeries = function (e, t) {
- var n;
- e = e || {},
- e.attribute = e.attribute || "fill",
- this.elements = t,
- this.params = e,
- e.attributes && this.setAttributes(e.attributes),
- jvm.$.isArray(e.scale) ? (n = e.attribute === "fill" || e.attribute === "stroke" ? jvm.ColorScale : jvm.NumericScale, this.scale = new n(e.scale, e.normalizeFunction, e.min, e.max)) : e.scale ? this.scale = new jvm.OrdinalScale(e.scale) : this.scale = new jvm.SimpleScale(e.scale),
- e.values && (this.values = e.values || {}, this.setValues(e.values))
- }, jvm.DataSeries.prototype = {
- setAttributes : function (e, t) {
- var n = e,
- r;
- if (typeof e == "string")
- this.elements[e] && this.elements[e].setStyle(this.params.attribute, t);
- else
- for (r in n)
- this.elements[r] && this.elements[r].element.setStyle(this.params.attribute, n[r])
- },
- setValues : function (e) {
- var t = Number.MIN_VALUE,
- n = Number.MAX_VALUE,
- r,
- i,
- s = {};
- if (this.scale instanceof jvm.OrdinalScale || this.scale instanceof jvm.SimpleScale)
- for (i in e)
- e[i] ? s[i] = this.scale.getValue(e[i]) : s[i] = this.elements[i].element.style.initial[this.params.attribute];
- else {
- if (!this.params.min || !this.params.max) {
- for (i in e)
- r = parseFloat(e[i]), r > t && (t = e[i]), r < n && (n = r);
- this.params.min || this.scale.setMin(n),
- this.params.max || this.scale.setMax(t),
- this.params.min = n,
- this.params.max = t
- }
- for (i in e)
- r = parseFloat(e[i]), isNaN(r) ? s[i] = this.elements[i].element.style.initial[this.params.attribute] : s[i] = this.scale.getValue(r)
- }
- this.setAttributes(s),
- $.extend(this.values, e)
- },
- clear : function () {
- var e,
- t = {};
- for (e in this.values)
- t[e] = this.elements[e].element.style.initial[this.params.attribute];
- this.setAttributes(t),
- this.values = {}
- },
- setScale : function (e) {
- this.scale.setScale(e),
- this.values && this.setValues(this.values)
- },
- setNormalizeFunction : function (e) {
- this.scale.setNormalizeFunction(e),
- this.values && this.setValues(this.values)
- }
- }, jvm.Proj = {
- mill : function (e, t, n) {
- return {
- x : (t - n) / 360 * jvm.WorldMap.circumference,
- y : - (180 / Math.PI * (5 / 4) * Math.log(Math.tan(Math.PI / 4 + .8 * e * Math.PI / 360))) / 360 * jvm.WorldMap.circumference
- }
- },
- merc : function (e, t, n) {
- return {
- x : (t - n) / 360 * jvm.WorldMap.circumference,
- y : - (180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + e * Math.PI / 360))) / 360 * jvm.WorldMap.circumference
- }
- },
- aea : function (e, t, n) {
- var r = 0,
- i = n / 180 * Math.PI,
- s = 29.5 / 180 * Math.PI,
- o = 45.5 / 180 * Math.PI,
- u = e / 180 * Math.PI,
- a = t / 180 * Math.PI,
- f = (Math.sin(s) + Math.sin(o)) / 2,
- l = Math.cos(s) * Math.cos(s) + 2 * f * Math.sin(s),
- c = f * (a - i),
- h = Math.sqrt(l - 2 * f * Math.sin(u)) / f,
- p = Math.sqrt(l - 2 * f * Math.sin(r)) / f;
- return {
- x : h * Math.sin(c) / (2 * Math.PI) * jvm.WorldMap.circumference,
- y : - (p - h * Math.cos(c)) / (2 * Math.PI) * jvm.WorldMap.circumference
- }
- },
- lcc : function (e, t, r) {
- var i = 0,
- s = r / 180 * Math.PI,
- o = t / 180 * Math.PI,
- u = 33 / 180 * Math.PI,
- a = .25 * Math.PI,
- f = e / 180 * Math.PI;
- return n = Math.log(Math.cos(u) * (1 / Math.cos(a))) / Math.log(Math.tan(Math.PI / 4 + a / 2) * (1 / Math.tan(Math.PI / 4 + u / 2))),
- F = Math.cos(u) * Math.pow(Math.tan(Math.PI / 4 + u / 2), n) / n,
- ro = F * Math.pow(1 / Math.tan(Math.PI / 4 + f / 2), n),
- ro0 = F * Math.pow(1 / Math.tan(Math.PI / 4 + i / 2), n), {
- x : ro * Math.sin(n * (o - s)) / (2 * Math.PI) * jvm.WorldMap.circumference,
- y : - (ro0 - ro * Math.cos(n * (o - s))) / (2 * Math.PI) * jvm.WorldMap.circumference
- }
- }
- }, jvm.WorldMap = function (e) {
- var t = this,
- n;
- this.params = jvm.$.extend(!0, {}, jvm.WorldMap.defaultParams, e),
- this.mapData = jvm.WorldMap.maps[this.params.map],
- this.markers = {},
- this.regions = {},
- this.regionsColors = {},
- this.regionsData = {},
- this.container = jvm.$("<div>").css({
- width : "100%",
- height : "100%"
- }).addClass("jvectormap-container"),
- this.params.container.append(this.container),
- this.container.data("mapObject", this),
- this.container.css({
- position : "relative",
- overflow : "hidden"
- }),
- this.defaultWidth = this.mapData.width,
- this.defaultHeight = this.mapData.height,
- //this.setBackgroundColor(this.params.backgroundColor),
- this.onResize = function () {
- t.setSize()
- },
- jvm.$(window).resize(this.onResize);
- for (n in jvm.WorldMap.apiEvents)
- this.params[n] && this.container.bind(jvm.WorldMap.apiEvents[n] + ".jvectormap", this.params[n]);
- this.canvas = new jvm.VectorCanvas(this.container[0], this.width, this.height),
- "ontouchstart" in window || window.DocumentTouch && document instanceof DocumentTouch ? this.params.bindTouchEvents && this.bindContainerTouchEvents() : this.bindContainerEvents(),
- this.bindElementEvents(),
- this.createLabel(),
- this.bindZoomButtons(),
- this.createRegions(),
- this.createMarkers(this.params.markers || {}),
- this.setSize(),
- this.params.focusOn && (typeof this.params.focusOn == "object" ? this.setFocus.call(this, this.params.focusOn.scale, this.params.focusOn.x, this.params.focusOn.y) : this.setFocus.call(this, this.params.focusOn)),
- this.params.selectedRegions && this.setSelectedRegions(this.params.selectedRegions),
- this.params.selectedMarkers && this.setSelectedMarkers(this.params.selectedMarkers),
- this.params.series && this.createSeries()
- }, jvm.WorldMap.prototype = {
- transX : 0,
- transY : 0,
- scale : 1,
- baseTransX : 0,
- baseTransY : 0,
- baseScale : 1,
- width : 0,
- height : 0,
- setBackgroundColor : function (e) {
- this.container.css("background-color", e)
- },
- resize : function () {
- var e = this.baseScale;
- 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)) : (this.baseScale = this.width / this.defaultWidth, this.baseTransY = Math.abs(this.height - this.defaultHeight * this.baseScale) / (2 * this.baseScale)),
- this.scale *= this.baseScale / e,
- this.transX *= this.baseScale / e,
- this.transY *= this.baseScale / e
- },
- setSize : function () {
- this.width = this.container.width(),
- this.height = this.container.height(),
- this.resize(),
- this.canvas.setSize(this.width, this.height),
- this.applyTransform()
- },
- reset : function () {
- var e,
- t;
- for (e in this.series)
- for (t = 0; t < this.series[e].length; t++)
- this.series[e][t].clear();
- this.scale = this.baseScale,
- this.transX = this.baseTransX,
- this.transY = this.baseTransY,
- this.applyTransform()
- },
- applyTransform : function () {
- var e,
- t,
- n,
- r;
- this.defaultWidth * this.scale <= this.width ? (e = (this.width - this.defaultWidth * this.scale) / (2 * this.scale), n = (this.width - this.defaultWidth * this.scale) / (2 * this.scale)) : (e = 0, n = (this.width - this.defaultWidth * this.scale) / this.scale),
- this.defaultHeight * this.scale <= this.height ? (t = (this.height - this.defaultHeight * this.scale) / (2 * this.scale), r = (this.height - this.defaultHeight * this.scale) / (2 * this.scale)) : (t = 0, r = (this.height - this.defaultHeight * this.scale) / this.scale),
- this.transY > t ? this.transY = t : this.transY < r && (this.transY = r),
- this.transX > e ? this.transX = e : this.transX < n && (this.transX = n),
- this.canvas.applyTransformParams(this.scale, this.transX, this.transY),
- this.markers && this.repositionMarkers()
- this.container.trigger("viewportChange", [this.scale / this.baseScale, this.transX, this.transY])
- },
- bindContainerEvents : function () {
- var e = !1,
- t,
- n,
- r = this;
- this.container.mousemove(function (i) {
- return e && (r.transX -= (t - i.pageX) / r.scale, r.transY -= (n - i.pageY) / r.scale, r.applyTransform(), t = i.pageX, n = i.pageY),
- !1
- }).mousedown(function (r) {
- return e = !0,
- t = r.pageX,
- n = r.pageY,
- !1
- }),
- jvm.$("body").mouseup(function () {
- e = !1
- }),
- this.params.zoomOnScroll && this.container.mousewheel(function (e, t, n, i) {
- var s = jvm.$(r.container).offset(),
- o = e.pageX - s.left,
- u = e.pageY - s.top,
- a = Math.pow(1.3, i);
- r.label.hide(),
- r.setScale(r.scale * a, o, u),
- e.preventDefault()
- })
- },
- bindContainerTouchEvents : function () {
- var e,
- t,
- n,
- r = this,
- i,
- s,
- o,
- u;
- jvm.$(this.container).bind("gesturestart", function (i) {
- return e = r.scale,
- t = r.transX,
- n = r.transY,
- !1
- }),
- jvm.$(this.container).bind("gesturechange", function (t) {
- var n = t.originalEvent.scale;
- return r.setScale(e * n, o, u),
- r.label.hide(),
- !1
- }),
- jvm.$(this.container).bind("touchstart", function (e) {
- var t = e.originalEvent.touches;
- t.length == 2 && (t[0].pageX > t[1].pageX ? o = t[1].pageX + (t[0].pageX - t[1].pageX) / 2 : o = t[0].pageX + (t[1].pageX - t[0].pageX) / 2, t[0].pageY > t[1].pageY ? u = t[1].pageY + (t[0].pageY - t[1].pageY) / 2 : u = t[0].pageY + (t[1].pageY - t[0].pageY) / 2),
- i = e.originalEvent.touches[0].pageX,
- s = e.originalEvent.touches[0].pageY
- }),
- jvm.$(this.container).bind("touchmove", function (e) {
- var t;
- if (r.scale != r.baseScale)
- return e.originalEvent.touches.length == 1 && i && s ? (t = e.originalEvent.touches[0], r.transX -= (i - t.pageX) / r.scale, r.transY -= (s - t.pageY) / r.scale, r.applyTransform(), r.label.hide(), i = t.pageX, s = t.pageY) : (i = !1, s = !1), !1
- })
- },
- bindElementEvents : function () {
- var e = this,
- t;
- this.container.mousemove(function () {
- t = !0
- }),
- this.container.delegate("[class~='jvectormap-element']", "mouseover mouseout", function (t) {
- var n = this,
- r = jvm.$(this).attr("class").indexOf("jvectormap-region") === -1 ? "marker" : "region",
- i = r == "region" ? jvm.$(this).attr("data-code") : jvm.$(this).attr("data-index"),
- s = r == "region" ? e.regions[i].element : e.markers[i].element,
- o = r == "region" ? e.mapData.paths[i].name : e.markers[i].config.name || "",
- u = jvm.$.Event(r + "LabelShow.jvectormap"),
- a = jvm.$.Event(r + "Over.jvectormap");
- t.type == "mouseover" ? (e.container.trigger(a, [i]), a.isDefaultPrevented() || s.setHovered(!0), e.label.text(o), e.container.trigger(u, [e.label, i]), u.isDefaultPrevented() || (e.label.show(), e.labelWidth = e.label.width(), e.labelHeight = e.label.height())) : (s.setHovered(!1), e.label.hide(), e.container.trigger(r + "Out.jvectormap", [i]))
- }),
- this.container.delegate("[class~='jvectormap-element']", "mousedown", function (e) {
- t = !1
- }),
- this.container.delegate("[class~='jvectormap-element']", "mouseup", function (n) {
- var r = this,
- i = jvm.$(this).attr("class").indexOf("jvectormap-region") === -1 ? "marker" : "region",
- s = i == "region" ? jvm.$(this).attr("data-code") : jvm.$(this).attr("data-index"),
- o = jvm.$.Event(i + "Click.jvectormap"),
- u = i == "region" ? e.regions[s].element : e.markers[s].element;
- if (!t) {
- e.container.trigger(o, [s]);
- if (i === "region" && e.params.regionsSelectable || i === "marker" && e.params.markersSelectable)
- o.isDefaultPrevented() || (e.params[i + "sSelectableOne"] && e.clearSelected(i + "s"), u.setSelected(!u.isSelected))
- }
- })
- },
- bindZoomButtons : function () {
- var e = this;
- jvm.$("<div/>").addClass("jvectormap-zoomin").text("+").appendTo(this.container),
- jvm.$("<div/>").addClass("jvectormap-zoomout").html("−").appendTo(this.container),
- this.container.find(".jvectormap-zoomin").click(function () {
- e.setScale(e.scale + e.params.zoomStep)
- }),
- this.container.find(".jvectormap-zoomout").click(function () {
- e.setScale(e.scale - e.params.zoomStep)
- })
- this.container.find(".jvectormap-zoomout").hide();
- },
- createLabel : function () {
- var e = this;
- this.label = jvm.$("<div/>").addClass("jvectormap-label").appendTo(jvm.$("body")),
- this.container.mousemove(function (t) {
- var n = t.pageX - 15 - e.labelWidth,
- r = t.pageY - 15 - e.labelHeight;
- n < 350 && (n = t.pageX + 50),
- r < 350 && (r = t.pageY + 50),
- e.label.is(":visible") && e.label.css({
- left : n,
- top : r
- })
- })
- },
- setScale : function (e, t, n, r) {
- var i,
- s = jvm.$.Event("zoom.jvectormap");
- e > this.params.zoomMax * this.baseScale ? e = this.params.zoomMax * this.baseScale : e < this.params.zoomMin * this.baseScale && (e = this.params.zoomMin * this.baseScale),
- typeof t != "undefined" && typeof n != "undefined" && (i = e / this.scale, r ? (this.transX = t + this.defaultWidth * (this.width / (this.defaultWidth * e)) / 2, this.transY = n + this.defaultHeight * (this.height / (this.defaultHeight * e)) / 2) : (this.transX -= (i - 1) / e * t, this.transY -= (i - 1) / e * n)),
- this.scale = e,
- this.applyTransform(),
- this.container.trigger(s, [e / this.baseScale])
- if(e >= this.params.zoomMax-4.5){
- $('.jvectormap-zoomin').hide();
- }else{
- $('.jvectormap-zoomin').show();
- }
- if(e< this.params.zoomMin){
- $('.jvectormap-zoomout').hide();
- //this.removeAllMarkers();
- }else{
- $('.jvectormap-zoomout').show();
- }
- },
- setFocus : function (e, t, n) {
- var r;
- typeof e == "string" && this.regions[e] ? (r = this.regions[e].element.getBBox(), this.setScale(Math.min(this.width / r.width, this.height / r.height), - (r.x + r.width / 2), - (r.y + r.height / 2), !0)) : this.setScale(e, -t * this.defaultWidth, -n * this.defaultHeight, !0)
- },
- getSelected : function (e) {
- var t,
- n = [];
- for (t in this[e])
- this[e][t].element.isSelected && n.push(t);
- return n
- },
- getSelectedRegions : function () {
- return this.getSelected("regions")
- },
- setSelectedRegions : function () {
- return this.getSelected("regions")
- },
- setSelectedRegionStyle : function (r,c) {
- return this.regions[r].element.style.selected.fill = c;
- },
- getSelectedMarkers : function () {
- return this.getSelected("markers")
- },
- setSelected : function (e, t) {
- var n;
- typeof t != "object" && (t = [t]);
- if (jvm.$.isArray(t))
- for (n = 0; n < t.length; n++)
- this[e][t[n]].element.setSelected(!0);
- else
- for (n in t)
- this[e][n].element.setSelected(!!t[n])
- },
- setSelectedRegions : function (e) {
- this.setSelected("regions", e)
- },
- setSelectedMarkers : function (e) {
- this.setSelected("markers", e)
- },
- clearSelected : function (e) {
- var t = {},
- n = this.getSelected(e),
- r;
- for (r = 0; r < n.length; r++)
- t[n[r]] = !1;
- this.setSelected(e, t)
- },
- clearSelectedRegions : function () {
- this.clearSelected("regions")
- },
- clearSelectedMarkers : function () {
- this.clearSelected("markers")
- },
- getMapObject : function () {
- return this
- },
- getRegionName : function (e) {
- return this.mapData.paths[e].name
- },
- createRegions : function () {
- var e,
- t,
- n = this;
- for (e in this.mapData.paths)
- t = this.canvas.addPath({
- d : this.mapData.paths[e].path,
- "data-code" : e
- }, jvm.$.extend(!0, {}, this.params.regionStyle)), jvm.$(t.node).bind("selected", function (e, t) {
- n.container.trigger("regionSelected.jvectormap", [jvm.$(this).attr("data-code"), t, n.getSelectedRegions()])
- }), t.addClass("jvectormap-region jvectormap-element"), this.regions[e] = {
- element : t,
- config : this.mapData.paths[e]
- }
- },
- createMarkers : function (e) {
- var t,
- n,
- r,
- i,
- s,
- o = this;
- this.markersGroup = this.markersGroup || this.canvas.addGroup();
- if (jvm.$.isArray(e)) {
- s = e.slice(),
- e = {};
- for (t = 0; t < s.length; t++)
- e[t] = s[t]
- }
- for (t in e)
- i = e[t]instanceof Array ? {
- latLng : e[t]
- }
- : e[t],
- r = this.latLngToPoint.apply(this, i.latLng || [0, 0]),
- n = this.canvas.addCircle({
- "data-index" : t,
- cx : r.x,
- cy : r.y
- }, jvm.$.extend(!0, {}, this.params.markerStyle, {
- initial : i.style || {}
- }), this.markersGroup),
- n.addClass("jvectormap-marker jvectormap-element"),
- jvm.$(n.node).bind("selected", function (e, t) {
- o.container.trigger("markerSelected.jvectormap", [jvm.$(this).attr("data-index"), t, o.getSelectedMarkers()])
- }),
- this.markers[t] && this.removeMarkers([t]),
- this.markers[t] = {
- element : n,
- config : i
- }
- },
- repositionMarkers : function () {
- var e,
- t;
- for (e in this.markers)
- t = this.latLngToPoint.apply(this, this.markers[e].config.latLng), this.markers[e].element.setStyle({
- cx : t.x,
- cy : t.y
- })
- },
- addMarker : function (e, t, n) {
- var r = {},
- i = [],
- s,
- o;
- r[e] = t;
- for (o = 0; o < n.length; o++)
- s = {},
- s[e] = n[o],
- i.push(s);
- this.addMarkers(r, i)
- },
- addMarkers : function (e, t) {
- var n;
- t = t || [],
- this.createMarkers(e);
- console.log(e);
- for (n = 0; n < t.length; n++)
- this.series.markers[n].setValues(t[n] || {})
- },
- removeMarkers : function (e) {
- var t;
- for (t = 0; t < e.length; t++)
- this.markers[e[t]].element.remove(), delete this.markers[e[t]]
- },
- removeAllMarkers : function () {
- var e,
- t = [];
- for (e in this.markers)
- t.push(e);
- this.removeMarkers(t)
- },
- latLngToPoint : function (e, t) {
- var n,
- r = jvm.WorldMap.maps[this.params.map].projection,
- i = r.centralMeridian,
- s = this.width - this.baseTransX * 2 * this.baseScale,
- o = this.height - this.baseTransY * 2 * this.baseScale,
- u,
- a,
- f = this.scale / this.baseScale;
- return t < -180 + i && (t += 360),
- n = jvm.Proj[r.type](e, t, i),
- u = this.getInsetForPoint(n.x, n.y),
- u ? (a = u.bbox, n.x = (n.x - a[0].x) / (a[1].x - a[0].x) * u.width * this.scale, n.y = (n.y - a[0].y) / (a[1].y - a[0].y) * u.height * this.scale, {
- x : n.x + this.transX * this.scale + u.left * this.scale,
- y : n.y + this.transY * this.scale + u.top * this.scale
- }) : {
- x : 0,
- y : 0
- }
- },
- getInsetForPoint : function (e, t) {
- var n = jvm.WorldMap.maps[this.params.map].insets,
- r,
- i;
- for (r = 0; r < n.length; r++) {
- i = n[r].bbox;
- if (e > i[0].x && e < i[1].x && t > i[0].y && t < i[1].y)
- return n[r]
- }
- },
- createSeries : function () {
- var e,
- t;
- this.series = {
- markers : [],
- regions : []
- };
- for (t in this.params.series)
- for (e = 0; e < this.params.series[t].length; e++)
- this.series[t][e] = new jvm.DataSeries(this.params.series[t][e], this[t])
- },
- remove : function () {
- this.label.remove(),
- this.container.remove(),
- jvm.$(window).unbind("resize", this.onResize)
- }
- }, jvm.WorldMap.maps = {}, jvm.WorldMap.circumference = 6381372 * Math.PI * 2, jvm.WorldMap.defaultParams = {
- map : "world_mill_en",
- backgroundColor : "#505050",
- zoomOnScroll : !0,
- zoomMax : 16,
- zoomMin : 1,
- zoomStep : 1,
- regionsSelectable : !1,
- markersSelectable : !1,
- bindTouchEvents : !0,
- regionStyle : {
- initial : {
- fill : "white",
- "fill-opacity" : 1,
- stroke : "none",
- "stroke-width" : 0,
- "stroke-opacity" : 1
- },
- hover : {
- "fill-opacity" : .8
- },
- selected : {
- fill : "yellow"
- },
- selectedHover : {}
- },
- markerStyle : {
- initial : {
- fill : "grey",
- stroke : "#505050",
- "fill-opacity" : 1,
- "stroke-width" : 1,
- "stroke-opacity" : 1,
- r : 5
- },
- hover : {
- stroke : "black",
- "stroke-width" : 2
- },
- selected : {
- fill : "blue"
- },
- selectedHover : {}
- }
- }, jvm.WorldMap.apiEvents = {
- onRegionLabelShow : "regionLabelShow",
- onRegionOver : "regionOver",
- onRegionOut : "regionOut",
- onRegionClick : "regionClick",
- onRegionSelected : "regionSelected",
- onMarkerLabelShow : "markerLabelShow",
- onMarkerOver : "markerOver",
- onMarkerOut : "markerOut",
- onMarkerClick : "markerClick",
- onMarkerSelected : "markerSelected",
- onZoom : "zoom",
- onViewportChange:"viewportChange"
- };
Add Comment
Please, Sign In to add comment