earthjs
Version:
D3 Earth JS using SVG, Canvas & THREE js, build with some plugins.
1 lines • 120 kB
JavaScript
var earthjs=function(){"use strict";function t(t,e){(arguments.length<2||isNaN(parseFloat(e))||!isFinite(e)||e<0)&&(e=42),THREE.Geometry.call(this);var n,o=[];for(n=0;n<t.vertices.length;n+=2){var r=t.vertices[n],a=t.vertices[n+1],i=.01745329252*+(90-a),s=.01745329252*+(180-r),l=Math.sin(s)*Math.sin(i)*-1,c=Math.cos(s)*Math.sin(i),u=Math.cos(i),d=.25+r/360,h=.5+a/180;this.vertices.push(new THREE.Vector3(l,u,c)),o.push(new THREE.Vector2(d,h))}var f=this.vertices.length;if(e<=1)for(n=0;n<f;n++){var p=this.vertices[n];this.vertices.push(p.clone().multiplyScalar(e))}for(n=0;n<t.triangles.length;n+=3){var v=t.triangles[n],g=t.triangles[n+1],m=t.triangles[n+2];this.faces.push(new THREE.Face3(v,g,m,[this.vertices[v],this.vertices[g],this.vertices[m]])),this.faceVertexUvs[0].push([o[v],o[g],o[m]]),0<e&&e<=1&&(this.faces.push(new THREE.Face3(f+g,f+v,f+m,[this.vertices[g].clone().multiplyScalar(-1),this.vertices[v].clone().multiplyScalar(-1),this.vertices[m].clone().multiplyScalar(-1)])),this.faceVertexUvs[0].push([o[g],o[v],o[m]]))}if(e<1)for(n=0;n<t.polygons.length;n++)for(var y=t.polygons[n],w=0;w<y.length;w++)for(var C=y[w],j=0;j<C.length;j++){var b,v=C[j],g=C[(j+1)%C.length],E=this.vertices[v],_=this.vertices[g],x=this.vertices[f+v];w<1?(b=_.clone().sub(E).cross(x.clone().sub(E)).normalize(),this.faces.push(new THREE.Face3(v,g,f+v,[b,b,b])),this.faceVertexUvs[0].push([o[v],o[g],o[v]]),e>0&&(this.faces.push(new THREE.Face3(g,f+g,f+v,[b,b,b])),this.faceVertexUvs[0].push([o[g],o[g],o[v]]))):(b=x.clone().sub(E).cross(_.clone().sub(E)).normalize(),this.faces.push(new THREE.Face3(g,v,f+v,[b,b,b])),this.faceVertexUvs[0].push([o[g],o[v],o[v]]),e>0&&(this.faces.push(new THREE.Face3(g,f+v,f+g,[b,b,b])),this.faceVertexUvs[0].push([o[g],o[v],o[g]])))}this.computeFaceNormals(),this.boundingSphere=new THREE.Sphere(new THREE.Vector3,1)}var e=function(){function t(t){var e=t[0]/2*h,n=u(e),o=i(e),r=t[1]/2*h,a=u(r),s=i(r),l=t[2]/2*h,c=u(l),d=i(l);return[o*s*d+n*a*c,n*s*d-o*a*c,o*a*d+n*s*c,o*s*c-n*a*d]}function e(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function n(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}var o=Math.acos,r=Math.asin,a=Math.atan2,i=Math.cos,s=Math.max,l=Math.min,c=Math.PI,u=Math.sin,d=Math.sqrt,h=c/180,f=180/c;return t.cartesian=function(t){var e=t[0]*h,n=t[1]*h,o=i(n);return[o*i(e),o*u(e),u(n)]},t.rotation=function(t){return[a(2*(t[0]*t[1]+t[2]*t[3]),1-2*(t[1]*t[1]+t[2]*t[2]))*f,r(s(-1,l(1,2*(t[0]*t[2]-t[3]*t[1]))))*f,a(2*(t[0]*t[3]+t[1]*t[2]),1-2*(t[2]*t[2]+t[3]*t[3]))*f]},t.delta=function(t,r){var a=e(t,r),c=d(n(a,a));if(!c)return[1,0,0,0];var h=o(s(-1,l(1,n(t,r))))/2,f=u(h);return[i(h),a[2]/c*f,-a[1]/c*f,a[0]/c*f]},t.multiply=function(t,e){return[t[0]*e[0]-t[1]*e[1]-t[2]*e[2]-t[3]*e[3],t[0]*e[1]+t[1]*e[0]+t[2]*e[3]-t[3]*e[2],t[0]*e[2]-t[1]*e[3]+t[2]*e[0]+t[3]*e[1],t[0]*e[3]+t[1]*e[2]-t[2]*e[1]+t[3]*e[0]]},t}(),n=function t(){function n(t,e,n){a[e][n]=t[e],a[e+"Keys"]=Object.keys(a[e]),a[e+"Vals"]=a[e+"Keys"].map(function(t){return a[e][t]})}function o(t,e,o){t[e]&&(u[o].__on__[e]=t[e],n(t,e,o))}var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};cancelAnimationFrame(t.ticker),r=Object.assign({svgCanvasSelector:".ej-svg,.ej-canvas",selector:"#earth-js",rotate:[130,-33,-11],transparent:!1,map:!1,padding:0},r);var a={onCreate:{},onCreateCall:0,onCreateVals:[],onRefresh:{},onRefreshVals:[],onResize:{},onResizeVals:[],onInterval:{},onIntervalVals:[],onTween:{},onTweenVals:[],ready:null,plugins:[],promeses:[],loadingData:null,recreateSvgOrCanvas:function(t){if(t?u.__plugins().forEach(function(t){t.__on__.onCreate.call(u)}):a.onCreateVals.forEach(function(t){t.call(u)}),0===a.onCreateCall){var e=Object.keys(a.onCreate).map(function(t){return u[t]}).filter(function(t){return t.__name__.match(/^((?!threejs).)*$/i)});a.onCreate={},e.forEach(function(t){return a.onCreate[t.name]=t.__on__.onCreate}),a.onCreateVals=Object.keys(a.onCreate).map(function(t){return a.onCreate[t]})}return a.onCreateCall++,u}};window._=a;var i=d3.selectAll(r.selector),s=+i.attr("width"),l=+i.attr("height");s&&l||(s=r.width||700,l=r.height||500,i.attr("width",s).attr("height",l)),d3.selectAll(r.svgCanvasSelector).attr("width",s).attr("height",l);var c=[s/2,l/2];Object.defineProperty(r,"width",{get:function(){return s},set:function(t){s=t,c[0]=t/2}}),Object.defineProperty(r,"height",{get:function(){return l},set:function(t){l=t,c[1]=t/2}});var u={_:{svg:i,drag:!1,versor:e,center:c,options:r},$slc:{},ready:function(t){if(t){if(u._.readyFn=t,u._.promeses=a.promeses,a.promeses.length>0){var e=d3.queue();a.loadingData=!0,a.promeses.forEach(function(t){t.urls.forEach(function(t){var n=t.split(".").pop();"geojson"===n&&(n="json"),e.defer(d3[n],t)})}),e.await(function(){var e=[].slice.call(arguments),n=e.shift();a.promeses.forEach(function(t){var o=t.urls.length,r=e.slice(0,o),a=u[t.name].ready;r.unshift(n),a?a.apply(u,r):t.onReady.apply(u,r),e=e.slice(o)}),a.loadingData=!1,t.called=!0,t.call(u)})}}else if(0===arguments.length)return a.loadingData},register:function(t,e){var n={name:e||t.name,__name__:t.name,__on__:{}};return a.plugins.push(n),u[n.name]=n,Object.keys(t).forEach(function(e){-1===["urls","onReady","onInit","onTween","onCreate","onResize","onRefresh","onInterval"].indexOf(e)&&"function"==typeof t[e]&&(n[e]=function(){return t[e].apply(u,arguments)})}),t.onInit&&t.onInit.call(u,n),o(t,"onTween",n.name),o(t,"onCreate",n.name),o(t,"onResize",n.name),o(t,"onRefresh",n.name),o(t,"onInterval",n.name),t.urls&&t.onReady&&a.promeses.push({name:n.name,urls:t.urls,onReady:t.onReady}),u}};Object.defineProperty(u,"loading",{get:function(){return a.loadingData}});var d=[],h=u._;return u.create=function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return d=t||[],a.recreateSvgOrCanvas(e),d.forEach(function(t){t.create(null)}),d!==[]&&h.ticker(),u},u.$slc.defs=h.svg.append("defs"),h.ticker=function(e){function n(h){if(h-i>e&&(i=h,!a.loadingData&&(o.call(u,h),h-c>e+30)))for(c=h,l=r=d.length;r;)(s=t[l-r])._.interval.call(s,h),r--;for(l=r=a.onTweenVals.length;r;)(f=a.onTweenVals[l-r])&&f.call(u,h),r--;t.ticker=requestAnimationFrame(n)}var o=h.interval;e=e||10;var r=void 0,i=0,s=void 0,l=void 0,c=0,f=void 0;return t.ticker=requestAnimationFrame(n),u},h.scale=function(t){return h.proj.scale(t),h.resize(),h.refresh(),u},h.rotate=function(t){return h.proj.rotate(t),h.refresh(),u},h.interval=function(t){for(var e=a.onIntervalVals.length;e--;)a.onIntervalVals[e].call(u,t);return u},h.refresh=function(t){var e=void 0,n=void 0;if(t)(t?a.onRefreshKeys.filter(function(e){return t.test(e)}):a.onRefreshKeys).forEach(function(t){a.onRefresh[t].call(u)});else for(e=n=a.onRefreshVals.length;n;)a.onRefreshVals[e-n].call(u),n--;return u},h.resize=function(){var t=void 0,e=void 0;for(t=e=a.onResizeVals.length;e;)a.onResizeVals[t-e].call(u),e--;return u},h.projection=function(){var t=h.options,e=t.scale,n=t.width,o=t.height,r=t.padding;if(h.options.map)return e||(e=n/6.279-r),d3.geoEquirectangular().translate(h.center).precision(.1).scale(e);e||(e=d3.min([n,o])/2-r);var a=h.options.rotate;return"number"==typeof a&&(h.options.rotate=[a,-33,-11]),d3.geoOrthographic().rotate(h.options.rotate).translate(h.center).precision(.1).clipAngle(90).scale(e)},h.proj=h.projection(),h.path=d3.geoPath().projection(h.proj),u.__addEventQueue=function(t,e){var o=u[t].__on__;e?n(o,e,t):o&&Object.keys(o).forEach(function(e){return n(o,e,t)})},u.__removeEventQueue=function(t,e){var n=u[t].__on__;n&&(e?(delete a[e][t],a[e+"Keys"]=Object.keys(a[e]),a[e+"Vals"]=a[e+"Keys"].map(function(t){return a[e][t]})):Object.keys(n).forEach(function(e){delete a[e][t],a[e+"Keys"]=Object.keys(a[e]),a[e+"Vals"]=a[e+"Keys"].map(function(t){return a[e][t]})}))},u.__plugins=function(t){return void 0===t?a.plugins:a.plugins.filter(function(e){return e.__name__.match(t)})},u};void 0===window.d3&&(window.d3={}),window.d3.earthjs=n;var o=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)};window.THREE&&(t.prototype=Object.create(THREE.Geometry.prototype));return n.plugins={baseCsv:function(){var t={data:[]},e=arguments;return{name:"baseCsv",urls:Array.prototype.slice.call(e),onReady:function(e,n){t.me.data(n)},onInit:function(e){t.me=e},data:function(e){if(!e)return t.data;t.data=e},message:function(e){t.data=t.data.map(e)},allData:function(e){if(!e)return{data:t.data};t.data=e.data},arrToJson:function(e,n){var o={};return t.data.forEach(function(t){return o[t[e]]=t[n]}),o}}},baseGeoJson:function(t){var e={data:null};return{name:"baseGeoJson",urls:t&&[t],onReady:function(t,n){e.me.data(n)},onInit:function(t){e.me=t},data:function(t){if(!t)return e.data;e.data=t},message:function(t){e.data=e.data.map(t)},allData:function(t){if(!t)return{data:e.data};e.data=t.data}}},worldJson:function(t){var e={world:null,land:null,lakes:{type:"FeatureCollection",features:[]},selected:{type:"FeatureCollection",features:[]},countries:{type:"FeatureCollection",features:[]}};return{name:"worldJson",urls:t&&[t],onReady:function(t,n){e.me.data(n)},onInit:function(t){e.me=t},data:function(t){if(!t)return e.world;e.world=t,e.land=topojson.feature(t,t.objects.land),e.countries.features=topojson.feature(t,t.objects.countries).features,t.objects.ne_110m_lakes&&(e.lakes.features=topojson.feature(t,t.objects.ne_110m_lakes).features)},allData:function(t){if(!t)return{world:e.world,land:e.land,lakes:e.lakes,countries:e.countries};e.world=t.world,e.land=t.land,e.lakes=t.lakes,e.countries=t.countries},countries:function(t){if(!t)return e.countries.features;e.countries.features=t}}},world3dJson:function(){var t={data:{},nm_to_id:{},geometries:[]},e=arguments;return{name:"world3dJson",urls:Array.prototype.slice.call(e),onReady:function(e,n,o){t.me.data(n),o&&t.me.arrayOfGeometry(o)},onInit:function(e){t.me=e},data:function(e){if(!e)return t.data;t.data=e},message:function(e){t.data=t.data.map(e)},allData:function(e){if(!e)return{data:t.data,geometries:t.geometries,nm_to_id:t.nm_to_id};t.data=e.data},arrayOfGeometry:function(e){var n=[];for(var o in t.data){var r=t.data[o],a={cid:e[o.toUpperCase()]};r.properties=a,n.push({properties:a,geometry:r})}t.nm_to_id=e,t.geometries={features:n}}}},choroplethCsv:function(t){function e(t){var e=this;return t.split(".").forEach(function(t){return e=e[t]}),e}function n(t,e){var n=void 0,o=void 0,r=this;t.split(".").forEach(function(t){n=r,o=t,r=r[t]}),n[o]=e}var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"schemeReds",a={cid:null,data:null,color:null,oldData:null,selectedColorId:null,selectedCountryId:null,countries:{type:"FeatureCollection",features:[]}};return{name:"choroplethCsv",urls:t&&[t],onReady:function(t,e){a.me.data(e)},onInit:function(t){a.me=t},data:function(t){if(!t)return a.data;a.data=t,a.oldData=t,a.data.getPath=e,a.data.updatePath=n},filter:function(t){a.data=a.oldData.filter(t)},mergeData:function(t,o){var r=a.data,i=o[0].split(":"),s=o[1].split(":");t.features.forEach(function(t){var o=r.find(function(n){return e.call(t,i[0])===e.call(n,i[1])});if(o){var a=e.call(o,s[1]);n.call(t,s[0],a)}})},colorize:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r,n=arguments[2],i=void 0,s=d3[e][9];if(arguments.length>1){var l=a.data.map(function(e){return+e[t]});l=[].concat(o(new Set(l)));var c=[1,8];a.scheme=e,a.minMax=d3.extent(l),a.range=d3.range.apply(d3,c),a.scale=d3.scaleLinear().domain(a.minMax).rangeRound(c),a.color=d3.scaleThreshold().domain(a.range).range(s),a.colorValues=s.map(function(t,e){return i=Math.floor(a.scale.invert(e+1.45)),{id:e,color:t,value:i,totalValue:0}}),a.data.forEach(function(e){var o=+e[t],r=a.scale(o);if(void 0===n)e.color=a.color(r);else{var i=d3.color(a.color(r));i.opacity=n,e.color=i+""}e.colorId=r-1,a.colorValues[e.colorId].totalValue+=o})}return a.colorValues},colorScale:function(t){return void 0!==t?a.color(a.scale(+t)):{color:a.color,scale:a.scale,minMax:a.minMax}},setCss:function(t,e){var n=void 0;void 0===e&&null!==a.selectedColorId&&(e=a.selectedColorId);var o=a.data.map(function(t){return n=void 0===e||e===t.colorId||e===t.cid?"opacity:1;fill:"+t.color+";stroke:black":"",".countries path.cid-"+t.cid+" {"+n+";}"});t&&(a.targetCss=t),d3.select(a.targetCss).text(o.join("\n"))},setColorcountries:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"body",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".1f",o=a.me.countries(),r=d3.format(n);d3.select(e+" .color-countries").remove();var i=d3.select(e).append("div").attr("class","color-countries");i.append("div").attr("class","color-countries-title");var s=o.filter(function(e){var n=e.properties.value;return a.scale(n)-1===t});s.sort(function(t,e){return e.properties.value-t.properties.value}),i.selectAll("div.color-countries-item").data(s).enter().append("div").attr("data-cid",function(t){return t.properties.cid}).attr("class",function(t){var e=t.properties.cid===a.cid?"selected":"";return"color-countries-item cid-"+t.properties.cid+" "+e}).html(function(t){var e=t.properties,n=e.cid,o=e.name,a=e.value;return o+": "+r(a)+" - "+(n||" - ")}),i.on("mouseover",function(){a.me.setCss(a.targetCss,d3.event.target.dataset.cid)}).on("mouseout",function(){a.me.setCss(a.targetCss)})},setColorRange:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"body",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:".1f",n=a.me.colorize(),o=d3.format(e);n.sort(function(t,e){return e.value-t.value}),d3.select(t+" .color-range").remove();var r=d3.select(t).append("div").attr("class","color-range");r.append("div").attr("class","color-range-title");var i=n.filter(function(t){return 0!==t.totalValue});a.colorItems=r.selectAll("div.color-range-item").data(i).enter().append("div").attr("class",function(t){return"color-range-item s-"+t.id}).style("background",function(t){return t.color}).text(function(t){return o(t.totalValue)}),a.colorItems.on("click",function(t){a.me.setSelectedColor(t.id)}).on("mouseover",function(t){a.me.setCss(a.targetCss,t.id),a.me.setColorcountries(t.id)}).on("mouseout",function(){a.me.setCss(a.targetCss),null===a.selectedColorId?a.me.setColorcountries(-2):a.me.setColorcountries(a.selectedColorId)})},setSelectedColor:function(t){a.colorItems.classed("selected",!1),a.selectedColorId!==t?a.colorItems.filter(".s-"+t).classed("selected",!0):t=null,a.selectedColorId=t,a.me.setColorcountries(t),a.me.setCss(a.targetCss)},countries:function(t){if(!t)return a.countries.features;a.countries.features=t},cid:function(t){a.cid=t}}},countryNamesCsv:function(t){var e={countryNames:null};return{name:"countryNamesCsv",urls:t&&[t],onReady:function(t,n){e.me.data(n)},onInit:function(t){e.me=t},data:function(t){if(!t)return e.countryNames;e.countryNames=t},mergeData:function(t,n){var o=e.countryNames,r=n[0].split(":"),a=n[1].split(":");t.features.forEach(function(t){var e=o.find(function(e){return""+t[r[0]]===e[r[1]]});e&&(t[a[0]]=e[a[1]])})}}},colorScale:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[d3.rgb("#FFAAFF"),d3.rgb("#FF0000")],n={};return{name:"colorScale",onInit:function(e){n.me=e,n.me.data(t)},data:function(t){n.mnMax=d3.extent(t),n.color=d3.scaleLinear().domain(n.mnMax).interpolate(d3.interpolateHcl).range(e)},color:function(t){return n.color(t)},colors:function(t){return t.map(function(t){return n.color(t)})},colorScale:function(t){for(var e=0,o=[[0,n.me.color(0)]],r=n.mnMax[1]/t,a=0;a<t;a++)e+=r,o.push([e,n.me.color(e)]);return o},colorRange:function(t){if(!t)return e;e=t}}},dotRegion:function(t){function e(t){return t.split(",").reduce(function(t,e){return 256*+t+ +e})}function n(t){for(var e=t%256,n=2;n>0;n--)e=(t=Math.floor(t/256))%256+","+e;return e}function o(){var t=[800,400];i.canvas=d3.select("body").append("canvas").attr("class","ej-hidden").attr("width",1600).attr("height",800).node(),i.context=i.canvas.getContext("2d"),i.proj=d3.geoEquirectangular().translate(t).scale(t[1]/1.2),i.path=d3.geoPath().projection(i.proj).context(i.context)}function r(){if(i.recreate){i.recreate=!1,i.context.clearRect(0,0,1024,512);for(var t=i.dataDots.features,e=0;e<t.length;e++){i.context.beginPath();var o=i.proj(t[e].geometry.coordinates);i.context.arc(o[0],o[1],a,0,2*Math.PI),i.context.fillStyle="rgb("+n(e+2)+")",i.context.fill()}}}var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1.5,i={recreate:!0};return{name:"dotRegion",urls:t&&[t],onReady:function(t,e){i.me.data(e)},onInit:function(t){i.me=t,o.call(this)},onCreate:function(){r.call(this)},data:function(t){if(!t)return i.dataDots;i.dataDots=t},detect:function(t){var n=i.proj(t);if(n[0]>0){var o=i.context.getImageData(n[0],n[1],1,1).data,r=i.dataDots.features[e(o.slice(0,3).join(","))-2];if(r){var a=r.geometry.coordinates;if(Math.floor(a[0])===Math.floor(t[0])&&Math.floor(a[1])===Math.floor(t[1]))return r}}}}},hoverCanvas:function(){function t(){if(this.worldCanvas){var t=this.worldCanvas.data();t&&(n.world=t,n.countries=topojson.feature(t,t.objects.countries))}var o=this._,r=this;n.hoverHandler=function(t,a){var i=this;if(!o.drag&&t){t.sourceEvent&&(t=t.sourceEvent);var s=[t.clientX,t.clientY],l=o.proj.invert(a);n.pos=l,n.dot=null,n.mouse=s,n.country=null,o.options.showDots&&n.onCircleVals.forEach(function(e){n.dot=e.call(i,t,l)}),o.options.showLand&&n.countries&&!n.dot&&(o.drag||(r.countryCanvas?n.country=r.countryCanvas.detectCountry(l):n.country=e(l),n.ocountry!==n.country&&r.canvasThreejs&&(n.ocountry=n.country,r.canvasThreejs.refresh())),n.onCountryVals.forEach(function(e){e.tooltips?e.call(i,t,n.country):n.ocountry2!==n.country&&e.call(i,t,n.country)}),n.ocountry2=n.country)}},n.svg.on("mousemove",function(){n.hoverHandler.call(this,d3.event,d3.mouse(this))})}function e(t){return n.countries.features.find(function(e){return e.geometry.coordinates.find(function(e){return d3.polygonContains(e,t)||e.find(function(e){return d3.polygonContains(e,t)})})})}var n={svg:null,mouse:null,country:null,ocountry:null,countries:null,hoverHandler:null,onCircle:{},onCircleVals:[],onCountry:{},onCountryVals:[]};return{name:"hoverCanvas",onInit:function(e){n.me=e,n.svg=this._.svg,this._.options.showSelectedCountry=!1,t.call(this)},selectAll:function(e){return e&&(n.q=e,n.svg.on("mousemove",null),n.svg=d3.selectAll(e),t.call(this)),n.svg},onCreate:function(){this.worldJson&&!n.world&&n.me.data(this.worldJson.data())},onCircle:function(t){Object.assign(n.onCircle,t),n.onCircleVals=Object.keys(n.onCircle).map(function(t){return n.onCircle[t]})},onCountry:function(t){Object.assign(n.onCountry,t),n.onCountryVals=Object.keys(n.onCountry).map(function(t){return n.onCountry[t]})},data:function(t){if(!t)return n.world;n.world=t,n.countries=topojson.feature(t,t.objects.countries)},allData:function(t){if(!t)return{world:n.world,countries:n.countries};n.world=t.world,n.countries=t.countries},states:function(){return{pos:n.pos,dot:n.dot,mouse:n.mouse,country:n.country}}}},clickCanvas:function(){function t(){if(this.worldCanvas){var t=this.worldCanvas.data();t&&(n.world=t,n.countries=topojson.feature(t,t.objects.countries))}var o=this._,r=this,a=this.mousePlugin||this.inertiaPlugin;a&&a.onClick({clickCanvas:function(t,a){var i=this;if(t){t.sourceEvent&&(t=t.sourceEvent);var s=[t.clientX,t.clientY],l=o.proj.invert(a);n.pos=l,n.dot=null,n.mouse=s,n.country=null,o.options.showDots&&n.onCircleVals.forEach(function(e){n.dot=e.call(i,t,l)}),o.options.showLand&&!n.dot&&(o.drag||(r.countryCanvas?n.country=r.countryCanvas.detectCountry(l):n.country=e(l)),n.onCountryVals.forEach(function(e){e.call(i,t,n.country)}))}}}),o.options.showLand=!0}function e(t){return n.countries.features.find(function(e){return e.geometry.coordinates.find(function(e){return d3.polygonContains(e,t)||e.find(function(e){return d3.polygonContains(e,t)})})})}var n={mouse:null,country:null,countries:null,onCircle:{},onCircleVals:[],onCountry:{},onCountryVals:[]};return{name:"clickCanvas",onInit:function(e){n.me=e,t.call(this)},onCreate:function(){this.worldJson&&!n.world&&n.me.data(this.worldJson.data())},onCircle:function(t){Object.assign(n.onCircle,t),n.onCircleVals=Object.keys(n.onCircle).map(function(t){return n.onCircle[t]})},onCountry:function(t){Object.assign(n.onCountry,t),n.onCountryVals=Object.keys(n.onCountry).map(function(t){return n.onCountry[t]})},data:function(t){if(!t)return n.world;n.world=t,n.countries=topojson.feature(t,t.objects.countries)},allData:function(t){if(!t)return{world:n.world,countries:n.countries};n.world=t.world,n.countries=t.countries},state:function(){return{pos:n.pos,dot:n.dot,mouse:n.mouse,country:n.country}}}},mousePlugin:function(){function t(){c.onClickVals.forEach(function(t){t.call(c._this,c.event,c.mouse)})}function e(){c.onDblClickVals.forEach(function(t){t.call(c._this,c.event,c.mouse)})}function n(t){var e=t.versor,n=e.cartesian(t.proj.rotate(d).invert(c.mouse)),o=e.multiply(h,e.delta(u,n));c.r=e.rotation(o)}function o(t){var e=this;n(t),t.rotate(c.r),c.onDragVals.forEach(function(t){t.call(e,c.event,c.mouse)})}function r(){function r(t){var e=t[0]-d[0];t[0]=e+this._.proj.rotate()[0],t[0]>=180&&(t[0]-=360),this._.rotate(t)}var a=this._,i=a.versor,f=a.proj.scale(),p=[a.options.width,a.options.height];c.scale=d3.scaleLinear().domain([30,a.proj.scale()]).range([.1,1]),c.svg.call(d3.drag().on("start",function(){var t=this,e=d3.mouse(this);u=i.cartesian(a.proj.invert(e)),d=a.proj.rotate(),h=i(d),a.drag=null,c.onDragStartVals.forEach(function(n){return n.call(t,c.event,e)}),c.onDragVals.forEach(function(n){return n.call(t,c.event,e)}),a.refresh(),c.mouse=e,c._this=this,c.t1=0,c.t2=0}).on("drag",function(){a.drag=!0,c._this=this,c.mouse=d3.mouse(this),!l&&o(a)}).on("end",function(){var o=this,i=a.drag;a.drag=!1,null===i?(c.event=d3.event,a.options.spin?t():c.wait?(c.wait=null,e()):null===c.wait&&(c.wait=setTimeout(function(){c.wait&&(c.wait=!1)},250))):i&&(n(a),a.rotate(c.r),c.onDragVals.forEach(function(t){return t.call(c._this,c.event,c.mouse)}),c.sync.forEach(function(t){return r.call(t,c.r)})),c.onDragEndVals.forEach(function(t){return t.call(o,c.event,c.mouse)}),a.refresh()})),c.zoom=d3.zoom().on("zoom",function(){var t=s,e=f*d3.event.transform.k;e>=t[0]&&e<=t[1]&&(a.scale(e),c.sync.forEach(function(t){return t._.scale(e)}))}).scaleExtent([.1,160]).translateExtent([[0,0],p]).filter(function(){var t=d3.event,e=t.touches;return"wheel"===t.type||e}),c.svg.call(c.zoom)}function a(){var e=this._;e.drag&&l?c.oMouse[0]!==c.mouse[0]&&c.oMouse[1]!==c.mouse[1]&&(c.oMouse=c.mouse,o(e)):!1===c.wait&&(c.wait=null,t())}var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{zoomScale:[0,5e4]},s=i.zoomScale,l=i.intervalDrag,c={svg:null,wait:null,zoom:null,mouse:null,q:null,sync:[],onDrag:{},onDragVals:[],onDragStart:{},onDragStartVals:[],onDragEnd:{},onDragEndVals:[],onClick:{},onClickVals:[],onDblClick:{},onDblClickVals:[]};window._mouse=c,void 0===s&&(s=[0,5e4]);var u=void 0,d=void 0,h=void 0;return{name:"mousePlugin",onInit:function(t){c.me=t,c.oMouse=[],c.svg=this._.svg,r.call(this)},onInterval:function(){a.call(this)},selectAll:function(t){return t&&(c.q=t,c.svg.call(d3.drag().on("start",null).on("drag",null).on("end",null)),c.svg.call(d3.zoom().on("zoom",null)),c.svg=d3.selectAll(t),r.call(this),this.hoverCanvas&&this.hoverCanvas.selectAll(t)),c.svg},sync:function(t){c.sync=t},zoom:function(t){c.zoom.scaleTo(c.svg,t?c.scale(t):1)},mouse:function(){return c.mouse},onDrag:function(t){Object.assign(c.onDrag,t),c.onDragVals=Object.keys(c.onDrag).map(function(t){return c.onDrag[t]})},onDragStart:function(t){Object.assign(c.onDragStart,t),c.onDragStartVals=Object.keys(c.onDragStart).map(function(t){return c.onDragStart[t]})},onDragEnd:function(t){Object.assign(c.onDragEnd,t),c.onDragEndVals=Object.keys(c.onDragEnd).map(function(t){return c.onDragEnd[t]})},onClick:function(t){Object.assign(c.onClick,t),c.onClickVals=Object.keys(c.onClick).map(function(t){return c.onClick[t]})},onDblClick:function(t){Object.assign(c.onDblClick,t),c.onDblClickVals=Object.keys(c.onDblClick).map(function(t){return c.onDblClick[t]})}}},canvasPlugin:function(){function t(){var t=this._;t.options.showCanvas=!0,o.path=d3.geoPath().projection(t.proj)}function e(){var t=this._;if(t.options.showCanvas){if(!o.canvas){r.g=t.svg.append("g").attr("class",o.me.name);var e=r.g.append("foreignObject").attr("x",0).attr("y",0).attr("width",t.options.width).attr("height",t.options.height).append("xhtml:body").style("margin","0px").style("padding","0px").style("background-color","none").style("width",t.options.width+"px").style("height",t.options.height+"px");o.canvas=e.append("canvas")}o.canvas.attr("x",0).attr("y",0).attr("width",t.options.width).attr("height",t.options.height),o.contexts=o.canvas.nodes().map(function(t){return t.getContext("2d")})}o.canvas&&n.call(this)}function n(){for(var t=this._.options,e=t.width,n=t.height,r=o.contexts.length;r--;)o.contexts[r].clearRect(0,0,e,n)}var o={contexts:[],canvas:null,path:null,q:null},r={};return{name:"canvasPlugin",onInit:function(e){o.me=e,t.call(this)},onCreate:function(){e.call(this)},onRefresh:function(){n.call(this)},selectAll:function(t){return t&&(o.q=t,o.canvas=d3.selectAll(t)),o.canvas},render:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=this._;if(r.options.showCanvas){var a=!1,i=r.proj,s=i.rotate(),l=this;o.canvas.each(function(r,c){if(!e||e.indexOf(c)>-1){var u=n[c]||{};u.rotate?(a=!0,i.rotate([s[0]+u.rotate,s[1],s[2]])):a&&(a=!1,i.rotate(s));var d=this.getContext("2d");t.call(l,d,o.path.context(d))}}),a&&(a=!1,i.rotate(s))}},flipRender:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=this._,a=r.center[0],i=r.proj.rotate();o.me.render(function(e,n){e.save(),e.translate(a,0),e.scale(-1,1),e.translate(-a,0),r.proj.rotate([i[0]+180,-i[1],-i[2]]),t.call(this,e,n),e.restore(),r.proj.rotate(i)},e,n)}}},inertiaPlugin:function(){function t(){h.onClickVals.forEach(function(t){t.call(h._this,h.event,h.mouse)})}function e(){h.onDblClickVals.forEach(function(t){t.call(h._this,h.event,h.mouse)})}function n(){var t=this;h.this._.drag=!1,h.this._.refresh(),h.onDragEndVals.forEach(function(e){return e.call(t,h.event,h.mouse)})}function o(){var t=this;if(h.onDragVals.forEach(function(e){return e.call(t,h.event,h.mouse)}),!j)return h.removeEventQueue(h.me.name,"onTween"),void n();g*=.99,m*=.9,C&&(g*=h.dragX,m*=h.dragY),p<-100&&(p=-100,m*=-.95),p>100&&(p=100,m*=-.95);var e=[f+=g,p+=m,v[2]],o=h.sync.length;for(h.rotate(e);o--;)h.sync[o]._.rotate(e);C||y.toPrecision(5)!==f.toPrecision(5)||w.toPrecision(5)!==p.toPrecision(5)||(j=!1),y=f,w=p}function r(){h.event=d3.event,h.mouse=d3.mouse(this);var t=h.event.sourceEvent;if(t){var e=t.touches?t.touches[0]:t;return[e.clientX,-e.clientY]}}function a(){var t=this;g=0,m=0,C=!0,j=!0,b=null,x=r.call(this),h.onDragStartVals.forEach(function(e){return e.call(t,h.event,h.mouse)}),h.onDragVals.forEach(function(e){return e.call(t,h.event,h.mouse)}),h.removeEventQueue(h.me.name,"onTween"),h.addEventQueue(h.me.name,"onInterval"),h.this._.drag=null}function i(){C&&(b=!0,T=x,(x=r.call(this))?(v=h.proj.rotate(),f=v[0],p=v[1],g+=x[0]-T[0],m+=x[1]-T[1],o.call(h.this)):x=T,h.this._.drag=!0,h.stalledDrag=0,h._this=this)}function s(){C=!1,h.removeEventQueue(h.me.name,"onInterval"),b?(b=!1,h.addEventQueue(h.me.name,"onTween")):(n(),h.event=d3.event,null===b&&(h.wait?(clearTimeout(h.wait),h.wait=null,e()):h.wait=setTimeout(function(){h.wait=!1,t()},250)))}function l(){var t=this._,e=t.proj.scale(),n=t.options,o=n.width,r=n.height;h.svg.call(d3.zoom().on("start",a).on("zoom",function(){var n=d3.event.sourceEvent,o=n.type,r=n.touches;if("wheel"===o||r&&2===r.length){var a=e*d3.event.transform.k;if(a>=d[0]&&a<=d[1]){var s=h.sync.length;for(t.scale(a);s--;)h.sync[s]._.scale(a)}g=0,m=0}else i.call(this)}).on("end",s).scaleExtent([.1,160]).translateExtent([[0,0],[o,r]]))}function c(){h.proj=this._.proj,h.rotate=this._.rotate,h.addEventQueue=this.__addEventQueue,h.removeEventQueue=this.__removeEventQueue,h.removeEventQueue(h.me.name,"onInterval");var t=h.proj.scale();t=t>200?200:t,h.dragX=E(t),h.dragY=_(t)}function u(){var t=h.proj.scale();t=t>200?200:t,h.dragX=E(t),h.dragY=_(t)}var d=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{zoomScale:[0,5e4]}).zoomScale,h={sync:[],onDrag:{},onDragVals:[],onDragStart:{},onDragStartVals:[],onDragEnd:{},onDragEndVals:[],onClick:{},onClickVals:[],onDblClick:{},onDblClickVals:[],stalledDrag:0},f=0,p=0,v=[],g=0,m=0,y=0,w=0,C=!1,j=!1,b=void 0,E=d3.scaleLinear().domain([65.3,184.5]).range([.6,.25]),_=d3.scaleLinear().domain([65.3,184.5]).range([.55,.2]),x=void 0,T=void 0;return{name:"inertiaPlugin",onInit:function(t){h.me=t,h.this=this,h.svg=this._.svg,l.call(this)},onCreate:function(){c.call(this)},onResize:function(){u.call(this)},selectAll:function(t){return t&&(h.q=t,h.svg.call(d3.zoom().on("start",null).on("zoom",null).on("end",null)),h.svg=d3.selectAll(t),l.call(this),this.hoverCanvas&&this.hoverCanvas.selectAll(t)),h.svg},onInterval:function(){b&&h.stalledDrag++>10&&(h.stalledDrag=0,g=0,m=0)},onTween:function(){o.call(this)},sync:function(t){h.sync=t},onDrag:function(t){Object.assign(h.onDrag,t),h.onDragVals=Object.keys(h.onDrag).map(function(t){return h.onDrag[t]})},onDragStart:function(t){Object.assign(h.onDragStart,t),h.onDragStartVals=Object.keys(h.onDragStart).map(function(t){return h.onDragStart[t]})},onDragEnd:function(t){Object.assign(h.onDragEnd,t),h.onDragEndVals=Object.keys(h.onDragEnd).map(function(t){return h.onDragEnd[t]})},stopDrag:function(){j=!1},onClick:function(t){Object.assign(h.onClick,t),h.onClickVals=Object.keys(h.onClick).map(function(t){return h.onClick[t]})},onDblClick:function(t){Object.assign(h.onDblClick,t),h.onDblClickVals=Object.keys(h.onDblClick).map(function(t){return h.onDblClick[t]})}}},countryCanvas:function(t){function e(){o.canvas=d3.select("body").append("canvas").attr("class","ej-hidden").attr("width","1024").attr("height","512").node(),o.context=o.canvas.getContext("2d"),o.proj=d3.geoEquirectangular().precision(.5).translate([512,256]).scale(163),o.path=d3.geoPath().projection(o.proj).context(o.context)}function n(){if(o.recreate){o.recreate=!1,o.context.clearRect(0,0,1024,512);for(var t=o.countries.features.length;t--;)o.context.beginPath(),o.path(o.countries.features[t]),o.context.fillStyle="rgb("+(t+1)+",0,0)",o.context.fill()}}var o={recreate:!0};return{name:"countryCanvas",urls:t&&[t],onReady:function(t,e){o.me.data(e)},onInit:function(t){o.me=t,e.call(this)},onCreate:function(){this.worldJson&&!o.world&&o.me.data(this.worldJson.data()),n.call(this)},data:function(t){if(!t)return o.world;o.world=t,o.countries=topojson.feature(t,t.objects.countries)},allData:function(t){if(!t)return{world:o.world,countries:o.countries};o.world=t.world,o.countries=t.countries},detectCountry:function(t){var e=o.proj(t);if(e[0]>0){var n=o.context.getImageData(e[0],e[1],1,1).data;return o.countries.features[n[0]-1]}}}},threejsPlugin:function(){function t(t,e){var n=t[0]*Math.PI/180,o=t[1]*Math.PI/180,r=Math.cos(o);return new THREE.Vector3(e*r*Math.cos(n),e*Math.sin(o),-e*r*Math.sin(n))}function e(e,n,o){var r=new THREE.Geometry;return e.coordinates.forEach(function(e){d3.pairs(e.map(function(e){return t(e,o)}),function(t,e){r.vertices.push(t,e)})}),new THREE.LineSegments(r,n)}function n(){var t=this._;u=t.proj.scale();var e=t.options,n=e.width,o=e.height,r=document.getElementById(i);s.scale=d3.scaleLinear().domain([0,u]).range([0,1]),s.camera=new THREE.OrthographicCamera(-n/2,n/2,o/2,-o/2,.1,3e4),s.light=new THREE.PointLight(16777215,0),s.scene=new THREE.Scene,s.group=new THREE.Group,s.node=r,s.camera.position.z=3010,s.camera.name="camera",s.group.name="group",s.light.name="light",s.scene.add(s.camera),s.scene.add(s.group),s.camera.add(s.light),s.renderer=new THREE.WebGLRenderer({antialias:!0,alpha:!0,canvas:r}),s.renderer.setClearColor(0,0),s.renderer.setSize(n,o),s.renderer.sortObjects=!0,this.renderThree=a,window.THREEx&&window.THREEx.DomEvents&&(s.domEvents=new window.THREEx.DomEvents(s.camera,s.renderer.domElement)),Object.defineProperty(s.me,"group",{get:function(){return s.group}}),Object.defineProperty(s.me,"camera",{get:function(){return s.camera}}),Object.defineProperty(s.me,"renderer",{get:function(){return s.renderer}}),Object.defineProperty(s.me,"domEvents",{get:function(){return s.domEvents}})}function o(t){t||(t=s.group);var e=s.scale(this._.proj.scale());t.scale.x=e,t.scale.y=e,t.scale.z=e,a.call(this)}function r(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=this._,r=o.proj.rotate();r[0]-=90;var i=o.versor(r),l=new THREE.Quaternion(-i[2],i[1],i[3],i[0]);(t||s.group).setRotationFromQuaternion(l),a.call(this,e,!1,n)}function a(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments[1];e?(s.renderer.render(s.scene,s.camera),d&&(d=null,clearTimeout(d))):null===d&&(d=setTimeout(function(){n&&n.call(t,s.group),s.renderer.render(s.scene,s.camera),d=null},0))}var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"three-js",s={renderer:null,scene:null,camera:null},l=new THREE.LoadingManager,c=new THREE.TextureLoader(l),u=void 0,d=null;return{name:"threejsPlugin",onInit:function(t){s.me=t,n.call(this)},onCreate:function(){s.group.children=[],r.call(this)},onRefresh:function(){r.call(this,null,!0)},onResize:function(){o.call(this)},addGroup:function(t){var e=this;s.group.add(t),t.name&&this[t.name]&&(this[t.name].add=function(){s.group.add(t),e.__addEventQueue(t.name),a.call(e)},this[t.name].remove=function(){s.group.remove(t),e.__removeEventQueue(t.name),a.call(e)},this[t.name].isAdded=function(){return s.group.children.filter(function(e){return e.name===t.name}).length>0})},emptyGroup:function(){for(var t=s.group.children,e=t.length-1;e>-1;--e){var n=t[e];s.group.remove(n),n.name&&this.__removeEventQueue(n.name),a.call(this)}},scale:function(t){o.call(this,t)},rotate:function(t){r.call(this,t)},vertex:function(e){return t(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:u)},wireframe:function(t,n){return e(t,n,arguments.length>2&&void 0!==arguments[2]?arguments[2]:u)},texture:function(t){var e=this;return c.load(t,function(t){return a.call(e),t})},renderThree:function(){a.call(this)},light:function(){return s.camera.children[0]},node:function(){return s.node},q2rotate:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:s.group.quaternion,e=[t._w,t._y,-t._x,t._z],n=this._.versor.rotation(e);return n[0]+=90,n},light3d:function(){var t=new THREE.Group,e=new THREE.AmbientLight(7829367),n=new THREE.DirectionalLight(16777215),o=new THREE.DirectionalLight(16777215);return n.position.set(1,0,1),o.position.set(-1,0,1),t.add(e),t.add(n),t.add(o),t}}},dblClickCanvas:function(){function t(t){return n.countries.features.find(function(e){return e.geometry.coordinates.find(function(e){return d3.polygonContains(e,t)||e.find(function(e){return d3.polygonContains(e,t)})})})}function e(){if(this.worldCanvas){var e=this.worldCanvas.data();e&&(n.countries=topojson.feature(e,e.objects.countries))}var o=this._,r=this,a=this.mousePlugin||this.inertiaPlugin;a&&a.onDblClick({dblClickCanvas:function(e,a){var i=this;if(e){e.sourceEvent&&(e=e.sourceEvent);var s=[e.clientX,e.clientY],l=o.proj.invert(a);n.pos=l,n.dot=null,n.mouse=s,n.country=null,o.options.showDots&&n.onCircleVals.forEach(function(t){n.dot=t.call(i,e,l)}),o.options.showLand&&!n.dot&&(o.drag||(r.countryCanvas?n.country=r.countryCanvas.detectCountry(l):n.country=t(l)),n.onCountryVals.forEach(function(t){t.call(i,e,n.country)}))}}}),o.options.showLand=!0}var n={mouse:null,country:null,countries:null,onCircle:{},onCircleVals:[],onCountry:{},onCountryVals:[]};return{name:"dblClickCanvas",onInit:function(t){n.me=t,e.call(this)},onCreate:function(){this.worldJson&&!n.world&&n.me.data(this.worldJson.data())},onCircle:function(t){Object.assign(n.onCircle,t),n.onCircleVals=Object.keys(n.onCircle).map(function(t){return n.onCircle[t]})},onCountry:function(t){Object.assign(n.onCountry,t),n.onCountryVals=Object.keys(n.onCountry).map(function(t){return n.onCountry[t]})},data:function(t){if(!t)return n.world;n.world=t,n.countries=topojson.feature(t,t.objects.countries)},allData:function(t){if(!t)return{world:n.world,countries:n.countries};n.world=t.world,n.countries=t.countries},state:function(){return{pos:n.pos,dot:n.dot,mouse:n.mouse,country:n.country}}}},autorotatePlugin:function(){function t(){var t=this._.options;this.clickCanvas&&this.clickCanvas.onCountry({autorotatePlugin:function(e,n){n||(t.spin=!t.spin)}})}function e(t){if(t-a>40){a=t;var e=new Date;if(this._.options.spin&&!1===this._.drag){var o=e-r.lastTick;n.call(this,o),r.sync.forEach(function(t){return n.call(t,o)})}r.lastTick=e}}function n(t){var e=this._.proj.rotate();e[0]+=r.degree*t,this._.rotate(e)}var o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,r={lastTick:new Date,degree:o/1e3,sync:[]},a=0;return{name:"autorotatePlugin",onInit:function(t){r.me=t,this._.options.spin=!0},onCreate:function(){t.call(this)},onInterval:function(t){e.call(this,t)},speed:function(t){r.degree=t/1e3},sync:function(t){r.sync=t},start:function(){this._.options.spin=!0},stop:function(){this._.options.spin=!1},spin:function(t){if(void 0===t)return this._.options.spin;this._.options.spin=t}}},oceanSvg:function(){function t(){var t=this._;this._.options.showOcean=!0,Object.defineProperty(t.options,"oceanColor",{get:function(){return o.oceanColor},set:function(t){o.oceanColor=t}}),o.svg=t.svg}function e(){var t=o.me.name;if(o.svg.selectAll("#ocean,.ocean."+t).remove(),this._.options.showOcean){var e=o.oceanColor,a=this.$slc.defs.append("radialGradient").attr("id","ocean").attr("cx","75%").attr("cy","25%");"string"==typeof e&&(e=[e,e]),a.append("stop").attr("offset","100%").attr("stop-color",e[1]),r.ocean=o.svg.append("g").attr("class","ocean "+t).append("circle").attr("cx",this._.center[0]).attr("cy",this._.center[1]).attr("class","noclicks"),n.call(this)}}function n(){r.ocean&&this._.options.showOcean&&r.ocean.attr("r",this._.proj.scale()+o.scale)}var o={svg:null,q:null,scale:0,oceanColor:["rgba(221, 221, 255, 0.6)","rgba(153, 170, 187,0.8)"]},r={};return{name:"oceanSvg",onInit:function(e){o.me=e,t.call(this)},onCreate:function(){e.call(this)},onResize:function(){n.call(this)},selectAll:function(t){return t&&(o.q=t,o.svg=d3.selectAll(t)),o.svg},scale:function(t){if(!t)return o.scale;o.scale=t,n.call(this)},recreate:function(){e.call(this)},$ocean:function(){return r.ocean}}},sphereSvg:function(){function t(){var t=n.me.name;n.svg.selectAll("#glow,.sphere."+t).remove(),this._.options.showSphere&&(this.$slc.defs.nodes()[0].append("\n<filter id='glow'>\n <feColorMatrix type='matrix'\n values=\n '0 0 0 0 0\n 0 0 0 0.9 0\n 0 0 0 0.9 0\n 0 0 0 1 0'/>\n <feGaussianBlur stdDeviation='5.5' result='coloredBlur'/>\n <feMerge>\n <feMergeNode in='coloredBlur'/>\n <feMergeNode in='SourceGraphic'/>\n </feMerge>\n</filter>\n"),o.sphere=n.svg.append("g").attr("class","sphere "+t).append("circle").attr("cx",this._.center[0]).attr("cy",this._.center[1]).attr("class","noclicks").attr("filter","url(#glow)"),e.call(this))}function e(){o.sphere.attr("r",this._.proj.scale())}var n={svg:null,q:null,sphereColor:0},o={};return{name:"sphereSvg",onInit:function(t){n.me=t,n.svg=this._.svg,this._.options.showSphere=!0},onCreate:function(){t.call(this)},onResize:function(){e.call(this)},selectAll:function(t){return t&&(n.q=t,n.svg=d3.selectAll(t)),n.svg},$sphere:function(){return o.sphere}}},zoomPlugin:function(){function t(){var t=this._,e=t.proj.scale(),n=[t.options.width,t.options.height];t.svg.call(d3.zoom().on("zoom start end",function(){var n=d3.event.transform;t.proj.scale(e*n.k),t.resize(),t.refresh()}).scaleExtent([.1,5]).translateExtent([[0,0],n]))}var e={};return{name:"zoomPlugin",onInit:function(n){e.me=n,t.call(this)}}},fauxGlobeSvg:function(){function t(){var t=this._;t.options.showGlobeShading=!0,t.options.showGlobeHilight=!0,a.svg=t.svg}function e(){n.call(this),o.call(this)}function n(){var t=this._,e=a.me.name;if(a.svg.selectAll("#shading,.shading."+e).remove(),t.options.showGlobeShading){var n=this.$slc.defs.append("radialGradient").attr("id","shading").attr("cx","50%").attr("cy","40%");n.append("stop").attr("offset","50%").attr("stop-color","#9ab").attr("stop-opacity","0"),n.append("stop").attr("offset","100%").attr("stop-color","#3e6184").attr("stop-opacity","0.3"),i.globeShading=a.svg.append("g").attr("class","shading "+e).append("circle").attr("cx",t.center[0]).attr("cy",t.center[1]).attr("r",t.proj.scale()).attr("class","noclicks").style("fill","url(#shading)")}}function o(){var t=this._,e=a.me.name;if(a.svg.selectAll("#hilight,.hilight."+e).remove(),t.options.showGlobeHilight){var n=this.$slc.defs.append("radialGradient").attr("id","hilight").attr("cx","75%").attr("cy","25%");n.append("stop").attr("offset","5%").attr("stop-color","#ffd").attr("stop-opacity","0.6"),n.append("stop").attr("offset","100%").attr("stop-color","#ba9").attr("stop-opacity","0.2"),i.globeHilight=a.svg.append("g").attr("class","hilight "+e).append("circle").attr("cx",t.center[0]).attr("cy",t.center[1]).attr("r",t.proj.scale()).attr("class","noclicks").style("fill","url(#hilight)")}}function r(){var t=this._,e=t.options,n=t.proj.scale();i.globeShading&&e.showGlobeShading&&i.globeShading.attr("r",n),i.globeHilight&&e.showGlobeHilight&&i.globeHilight.attr("r",n)}var a={svg:null,q:null},i={};return{name:"fauxGlobeSvg",onInit:function(e){a.me=e,t.call(this)},onCreate:function(){e.call(this)},onResize:function(){r.call(this)},selectAll:function(t){return t&&(a.q=t,a.svg=d3.selectAll(t)),a.svg},$globeShading:function(){return i.globeShading},$globeHilight:function(){return i.globeHilight}}},graticuleSvg:function(){function t(){var t=this._;t.options.showGraticule=!0,t.options.transparentGraticule=!1,o.svg=t.svg}function e(){var t=o.me.name;o.svg.selectAll(".graticule."+t).remove(),this._.options.showGraticule&&(r.graticule=o.svg.append("g").attr("class","graticule "+t).append("path").datum(o.graticule).attr("class","noclicks"),n.call(this))}function n(){var t=this._;r.graticule&&t.options.showGraticule&&(t.options.transparent||t.options.transparentGraticule?(t.proj.clipAngle(180),r.graticule.attr("d",this._.path),t.proj.clipAngle(90)):r.graticule.attr("d",this._.path))}var o={svg:null,q:null,graticule:d3.geoGraticule()},r={};return{name:"graticuleSvg",onInit:function(e){o.me=e,t.call(this)},onCreate:function(){e.call(this)},onRefresh:function(){n.call(this)},selectAll:function(t){return t&&(o.q=t,o.svg=d3.selectAll(t)),o.svg},$graticule:function(){return r.graticule}}},dropShadowSvg:function(){function t(){var t=this._;t.options.showDropShadow=!0,o.svg=t.svg}function e(){var t=this._,e=o.me.name;if(o.svg.selectAll("#drop_shadow,.drop_shadow."+e).remove(),t.options.showDropShadow){var a=this.$slc.defs.append("radialGradient").attr("id","drop_shadow").attr("cx","50%").attr("cy","50%");a.append("stop").attr("offset","20%").attr("stop-color","#000").attr("stop-opacity",".5"),a.append("stop").attr("offset","100%").attr("stop-color","#000").attr("stop-opacity","0"),r.dropShadow=o.svg.append("g").attr("class","drop_shadow "+e).append("ellipse").attr("cx",t.center[0]).attr("class","noclicks").style("fill","url(#drop_shadow)"),n.call(this)}}function n(){var t=this._.proj.scale();r.dropShadow.attr("cy",t+this._.center[1]).attr("rx",.9*t).attr("ry",.25*t)}var o={svg:null,q:null},r={};return{name:"dropShadowSvg",onInit:function(e){o.me=e,t.call(this)},onCreate:function(){e.call(this)},onResize:function(){r.dropShadow&&this._.options.showDropShadow&&n.call(this)},selectAll:function(t){return t&&(o.q=t,o.svg=d3.selectAll(t)),o.svg},$dropShadow:function(){return r.dropShadow}}},dotTooltipSvg:function(){function t(t,e){var n=t.properties,o=Object.keys(n).map(function(t){return t+": "+n[t]}).join("<br/>");return e.html(o)}function e(){var e=this;this.dotsSvg.$dots().on("mouseover",function(){if(e._.options.showBarTooltip){r.visible=!0,r.mouseXY=[d3.event.pageX+7,d3.event.pageY-15];var o=+this.dataset.index,i=e.dotsSvg.data().features[o];(r.me.show||t)(i,a).style("display","block").style("opacity",1),n()}}).on("mouseout",function(){r.visible=!1,a.style("opacity",0).style("display","none")}).on("mousemove",function(){e._.options.showBarTooltip&&(r.mouseXY=[d3.event.pageX+7,d3.event.pageY-15],n())})}function n(){a.style("left",r.mouseXY[0]+7+"px").style("top",r.mouseXY[1]-15+"px")}function o(){e.call(this),a.style("opacity",0).style("display","none")}var r={mouseXY:[0,0],visible:!1},a=d3.select("body").append("div").attr("class","ej-dot-tooltip");return{name:"dotTooltipSvg",onInit:function(t){r.me=t,this._.options.showBarTooltip=!0},onCreate:function(){e.call(this)},onRefresh:function(){n.call(this)},onResize:function(){o.call(this)},visible:function(){return r.visible}}},dotSelectCanvas:function(){function t(t){var e=null;if(n.dots){var o=this.hoverCanvas.states().mouse;n.dots.forEach(function(n){o&&!e&&d3.geoDistance(n.coordinates,t)<=.02&&(e=n)})}return e}function e(){var e=this;if(this.hoverCanvas){var o=function(o,r){var a=t.call(e,r);return n.onHoverVals.forEach(function(t){t.call(e,o,a)}),a};o.tooltips=!0,this.hoverCanvas.onCircle({dotsCanvas:o})}this.clickCanvas&&this.clickCanvas.onCircle({dotsCanvas:function(o,r){var a=t.call(e,r);return n.onClickVals.forEach(function(t){t.call(e,o,a)}),a}}),this.dblClickCanvas&&this.dblClickCanvas.onCircle({dotsCanvas:function(o,r){var a=t(o,r);return n.onDblClickVals.forEach(function(t){t.call(e,o,a)}),a}})}var n={dataDots:null,dots:null,radiusPath:null,onHover:{},onHoverVals:[],onClick:{},onClickVals:[],onDblClick:{},onDblClickVals:[]};return{name:"dotSelectCanvas",onInit:function(t){n.me=t,e.call(this)},onCreate:function(){this.dotsCanvas&&!n.dots&&n.me.dots(this.dotsCanvas.dots())},onHover:function(t){Object.assign(n.onHover,t),n.onHoverVals=Object.keys(n.onHover).map(function(t){return n.onHover[t]})},onClick:function(t){Object.assign(n.onClick,t),n.onClickVals=Object.keys(n.onClick).map(function(t){return n.onClick[t]})},onDblClick:function(t){Object.assign(n.onDblClick,t),n.onDblClickVals=Object.keys(n.onDblClick).map(function(t){return n.onDblClick[t]})},dots:function(t){n.dots=t}}},graticuleCanvas:function(){function t(){var t=this._;t.options.showGraticule=!0,t.options.transparentGraticule=!1}function e(){var t=this._;t.options.showGraticule&&((t.options.transparent||t.options.transparentGraticule)&&t.proj.clipAngle(180),this.canvasPlugin.render(function(t,e){t.beginPath(),e(n),t.lineWidth=o.style.lineWidth||.4,t.strokeStyle=o.style.line||"rgba(119,119,119,0.6)",t.stroke()},o.drawTo),(t.options.transparent||t.options.transparentGraticule)&&t.proj.clipAngle(90))}var n=d3.geoGraticule()(),o={style:{},drawTo:null};return{name:"graticuleCanvas",onInit:function(e){o.me=e,t.call(this)},onCreate:function(){e.call(this)},onRefresh:function(){e.call(this)},drawTo:function(t){o.drawTo=t},style:function(t){return t&&(o.style=t),o.style}}},dotTooltipCanvas:function(){function t(t,e){var n=t.properties,o=Object.keys(n).map(function(t){return t+": "+n[t]}).join("<br/>");return e.html(o)}function e(e,n){var o=[e.clientX,e.clientY];(r.me.show||t)(n,a).style("display","block").style("opacity",1).style("left",o[0]+7+"px").style("top",o[1]-15+"px"),r.oldData=n,r.hidden=!1}function n(){r.hidden||(r.hidden=!0,a.style("opacity",0).style("display","none"))}function o(){var t=this;this.dotSelectCanvas.onHover({dotTooltipCanvas:function(o,r){r&&null!==t._.drag?e(o,r):n()}})}var r={hidden:null},a=d3.select("body").append("div").attr("class","ej-dot-tooltip");return{name:"dotTooltipCanvas",onInit:function(t){r.me=t,o.call(this)}}},countrySelectCanvas:function(){function t(){var t=this;this.hoverCanvas&&this.hoverCanvas.onCountry({countrySelectCanvas:function(e,o){return n.onHoverVals.forEach(function(n){n.call(t,e,o)}),o}}),this.clickCanvas&&this.clickCanvas.onCountry({countrySelectCanvas:function(e,o){return n.onClickVals.forEach(function(n){n.call(t,e,o)}),o}}),this.dblClickCanvas&&this.dblClickCanvas.onCountry({countrySelectCanvas:function(e,o){return n.onDblClickVals.forEach(function(n){n.call(t,e,o)}),o}})}function e(){if(this.worldCanvas&&!n.countries){var t=this.worldCanvas.data();t&&(n.world=t,n.countries=topojson.feature(t,t.objects.countries))}}var n={countries:null,onHover:{},onHoverVals:[],onClick:{},onClickVals:[],onDblClick:{},onDblClickVals:[]};return{name:"countrySelectCanvas",onInit:function(e){n.me=e,t.call(this)},onCreate:function(){e.call(this)},onHover:function(t){Object.assign(n.onHover,t),n.onHoverVals=Object.keys(n.onHover).map(function(t){return n.onHover[t]})},onClick:function(t){Object.assign(n.onClick,t),n.onClickVals=Object.keys(n.onClick).map(function(t){return n.onClick[t]})},onDblClick:function(t){Object.assign(n.onDblClick,t),n.onDblClickVals=Object.keys(n.onDblClick).map(function(t){return n.onDblClick[t]})},data:function(t){if(!t)return n.world;n.world=t,n.countries=topojson.feature(t,t.objects.countries)}}},countryTooltipCanvas:function(t){function e(t){var e="";return s.countryNames&&(e=s.countryNames.find(function(e){return e.id==t.id})),e}function n(t){return l.style("left",t[0]+7+"px").style("top",t[1]-15+"px")}function o(t,e){var n=Object.keys(t).map(function(e){return e+": "+t[e]}).join("<br/>");return e.html(n)}function r(t,e){n([t.clientX,t.clientY]),(s.me.show||o)(e,l).style("display","block").style("opacity",1),s.hidden=!1}function a(){s.hidden||(s.hidden=!0,l.style("opacity",0).style("display","none"))}function i(){var t=this,n=function(n,o){if(s.mouse=[n.clientX,n.clientY],null!==t._.drag&&o&&t._.options.showCountryTooltip){var i=e(o);!i||t.barTooltipSvg&&t.barTooltipSvg.visible()?a():r(n,i)}else a()};n.tooltips=!0,thi