{"version":3,"file":"kendo.dataviz.map.min.js","names":["factory","define","amd","kendo","Widget","template","util","valueOrDefault","defined","Attribution","window","deepExtend","now","Date","getTime","renderPos","pos","result","parts","toHyphens","split","i","length","push","join","renderSize","size","sqr","value","romanToArabic","r","toLowerCase","digits","v","x","l","c","d","m","prev","charAt","arabicToRoman","n","literals","values","roman","shift","memoize","f","cache","Object","create","arguments$1","arguments","id","apply","this","isUnicodeLetter","ch","RX_UNICODE_LETTER","test","withExit","obj","call","Return","ex","RegExp","$","undefined$1","math","Math","abs","atan","atan2","cos","max","min","sin","tan","Class","dataviz","drawing","deg","rad","round","Location","extend","init","lat","lng","DISTANCE_ITERATIONS","DISTANCE_CONVERGENCE","DISTANCE_PRECISION","FORMAT","toArray","equals","loc","clone","precision","wrap","distanceTo","dest","datum","greatCircleTo","distance","destination","bearing","map","datums","WGS84","fromLat","fromLng","dToR","a","asin","azimuthFrom","azimuthTo","prevLambda","sinLambda","cosLambda","sino","cosA2","coso","cos2om","sigma","b","L","U1","sinU1","cosU1","U2","sinU2","cosU2","lambda","converged","sqrt","sinA","C","u2","A","B","deltao","fn","toString","format","fromLngLat","ll","fromLatLng","Extent","nw","se","contains","center","containsAny","locs","include","includeAll","edges","ne","sw","overlaps","extent","World","jQuery","ui","element","options","_initOptions","items","addClass","name","separator","itemTemplate","filter","zoom","_extent","_zoom","_render","add","item","text","remove","clear","empty","_itemText","append","show","hide","inZoomLevel","_inZoomLevel","minZoom","maxZoom","inArea","_inArea","Number","MAX_VALUE","area","plugin","keys","button","dir","BUTTONS","Navigator","on","_click","bind","parentElement","parent","closest","attr","_keyroot","_tabindex","_keydown","panStep","events","dispose","off","_pan","y","trigger","e","currentTarget","is","preventDefault","which","UP","DOWN","RIGHT","LEFT","iconClass","ZoomControl","zoomStep","_change","delta","NUMPAD_PLUS","NUMPAD_MINUS","exp","pow","log","g","geometry","Point","limit","limitValue","PI","PI_DIV_2","PI_DIV_4","DEG_TO_RAD","Mercator","MAX_LNG","MAX_LAT","INVERSE_ITERATIONS","INVERSE_CONVERGENCE","centralMeridian","forward","clamp","proj","lng0","_projectLat","ecc","ts","con","p","inverse","point","_inverseY","ecch","phi","dphi","SphericalMercator","Equirectangular","EPSG3857","_proj","_tm","transform","translate","scale","_itm","toPoint","toLocation","crs","EPSG3395","EPSG4326","projections","layers","Layer","css","zIndex","opacity","appendTo","scrollElement","_beforeReset","_reset","_resize","_panEnd","_activate","_updateAttribution","destroy","_deactivate","reset","_applyExtent","_setVisibility","noop","matchMinZoom","matchMaxZoom","inside","visible","unbind","attribution","DataSource","data","Group","last","ShapeLayer","surface","Surface","width","height","_initRoot","movable","Movable","_markers","_handler","_mouseenter","_mouseleave","_initDataSource","autoBind","dataSource","_dataChange","setDataSource","fetch","_translateSurface","_data","_load","_root","draw","dsOptions","sender","view","_clearMarkers","_loader","GeoJSONLoader","style","container","shape","parse","shapeCreated","cancelled","Circle","_createMarker","args","layer","featureCreated","marker","markers","location","dataItem","_panning","suspendTracking","resumeTracking","locationToView","moveTo","event","originalEvent","locator","defaultStyle","observer","root","unwrap","type","_loadGeometryTo","_featureCreated","children","_shapeCreated","group","properties","path","coords","coordinates","_loadPolygon","_setLineFill","_loadPoint","segments","anchor","fill","_loadShape","rings","_buildPolygon","MultiPath","Path","j","lineTo","circle","schemas","geojson","features","geometries","transports","read","dataType","getter","BubbleLayer","locationField","valueField","minSize","maxSize","symbol","opt","getValue","slice","sort","scaleType","_scaleType","_createSymbol","_drawSymbol","isFunction","scales","symbols","SqrtScale","domain","range","_domain","_range","domainRange","outputRange","_ratio","rel","bubble","geo","square","halfSize","close","drawingUtil","TileLayer","subdomains","viewType","_viewType","_view","origin","locationToLayer","viewOrigin","tileTitle","_updateView","TileView","support","mobileOS","throttle","extentToPoint","render","pool","TilePool","tileSize","urlTemplate","_center","_viewOrigin","pointToTileIndex","floor","tileCount","firstTileIndex","indexToPoint","ceil","diff","index","subdomainText","subdomainIndex","_tileTitle","tile","createTile","currentIndex","tileOptions","get","wrapIndex","offset","roundPoint","subdomain","errorUrlTemplate","boundary","wrapValue","remainder","ImageTile","createElement","errorUrl","target","setAttribute","removeAttribute","top","left","url","visibility","urlResult","urlOptions","z","s","quadkey","q","culture","_items","_remove","_create","hashKey","maxDist","dist","splice","BingLayer","baseUrl","_scheme","_onMetadata","_fetchMetadata","imagerySet","key","Error","ajax","output","uriScheme","jsonp","success","proto","protocol","replace","resourceSets","resource","resources","imageUrl","imageUrlSubdomains","zoomMin","zoomMax","_addAttribution","BingView","imageryProviders","coverageAreas","bbox","tileQuadKey","digit","mask","quadKey","bing","doc","document","indexOf","inArray","Tooltip","MarkerLayer","_markerClick","titleField","arg","Array","isArray","_addOne","update","showAt","Marker","addTo","getLocation","getTitle","title","tooltip","popup","_position","attributes","renderTooltip","contentTemplate","content","contentUrl","defaults","Map","_getOrigin","_initScroller","_initMarkers","_initControls","_initLayers","_mousewheel","controls","navigator","layerDefaults","color","stroke","position","markerDefaults","wraparound","messages","scroller","zoomControl","level","_setExtent","_getExtent","setOptions","_layerSize","layerToLocation","translateWith","viewToLocation","eventOffset","field","pageX","clientX","pageY","clientY","eventToView","cursor","eventToLayer","eventToLocation","viewSize","exportVisual","_setOrigin","topLeft","_origin","invalidate","raw","bottomRight","layerWidth","layerHeight","_zoomAround","pivot","_createAttribution","_createNavigator","_createZoomControl","_createControlElement","defaultPos","posSelector","_navigatorPan","_navigatorCenter","scrollLeft","scrollTop","bounds","_virtualSize","one","_scrollEnd","scrollTo","_zoomControlChange","friction","zoomable","mobile","Scroller","velocityMultiplier","mousewheelScrolling","supportDoubleTap","_scroll","userEvents","_scaleStart","_scale","_doubleTap","_tap","defs","impl","_scrollOffset","_panComplete","_panEndTS","touch","touches","cancel","_scaleToZoom","gestureCenter","centerLocation","originPoint","scaleDelta","tiles","_resetScroller","dimensions","forcedMinScale","maxScale","xBounds","yBounds","pannable","makeVirtual","virtualSize","_renderLayers","scrollWrap","toZoom","mwDelta","fromZoom"],"sources":["kendo.dataviz.map.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.data', 'kendo.userevents', 'kendo.tooltip', 'kendo.mobile.scroller', 'kendo.draganddrop', 'kendo.dataviz.core', 'kendo.drawing', 'kendo.core'], factory) :\n factory();\n})((function () {\n (function () {\r\n // Imports ================================================================\r\n var kendo = window.kendo,\r\n deepExtend = kendo.deepExtend;\r\n\r\n function sqr(value) {\r\n return value * value;\r\n }\r\n\r\n var now = Date.now;\r\n if (!now) {\r\n now = function() {\r\n return new Date().getTime();\r\n };\r\n }\r\n\r\n // Template helpers =======================================================\r\n\r\n function renderSize(size) {\r\n if (typeof size !== \"string\") {\r\n size += \"px\";\r\n }\r\n\r\n return size;\r\n }\r\n\r\n function renderPos(pos) {\r\n var result = [];\r\n\r\n if (pos) {\r\n var parts = kendo.toHyphens(pos).split(\"-\");\r\n\r\n for (var i = 0; i < parts.length; i++) {\r\n result.push(\"k-pos-\" + parts[i]);\r\n }\r\n }\r\n\r\n return result.join(\" \");\r\n }\r\n\r\n function arabicToRoman(n) {\r\n var literals = {\r\n 1 : \"i\", 10 : \"x\", 100 : \"c\",\r\n 2 : \"ii\", 20 : \"xx\", 200 : \"cc\",\r\n 3 : \"iii\", 30 : \"xxx\", 300 : \"ccc\",\r\n 4 : \"iv\", 40 : \"xl\", 400 : \"cd\",\r\n 5 : \"v\", 50 : \"l\", 500 : \"d\",\r\n 6 : \"vi\", 60 : \"lx\", 600 : \"dc\",\r\n 7 : \"vii\", 70 : \"lxx\", 700 : \"dcc\",\r\n 8 : \"viii\", 80 : \"lxxx\", 800 : \"dccc\",\r\n 9 : \"ix\", 90 : \"xc\", 900 : \"cm\",\r\n 1000 : \"m\"\r\n };\r\n var values = [ 1000,\r\n 900 , 800, 700, 600, 500, 400, 300, 200, 100,\r\n 90 , 80 , 70 , 60 , 50 , 40 , 30 , 20 , 10 ,\r\n 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ];\r\n var roman = \"\";\r\n while (n > 0) {\r\n if (n < values[0]) {\r\n values.shift();\r\n } else {\r\n roman += literals[values[0]];\r\n n -= values[0];\r\n }\r\n }\r\n return roman;\r\n }\r\n\r\n function romanToArabic(r) {\r\n r = r.toLowerCase();\r\n var digits = {\r\n i: 1,\r\n v: 5,\r\n x: 10,\r\n l: 50,\r\n c: 100,\r\n d: 500,\r\n m: 1000\r\n };\r\n var value = 0, prev = 0;\r\n for (var i = 0; i < r.length; ++i) {\r\n var v = digits[r.charAt(i)];\r\n if (!v) {\r\n return null;\r\n }\r\n value += v;\r\n if (v > prev) {\r\n value -= 2 * prev;\r\n }\r\n prev = v;\r\n }\r\n return value;\r\n }\r\n\r\n function memoize(f) {\r\n var cache = Object.create(null);\r\n return function() {\n var arguments$1 = arguments;\n\r\n var id = \"\";\r\n for (var i = arguments.length; --i >= 0;) {\r\n id += \":\" + arguments$1[i];\r\n }\r\n return id in cache ? cache[id] : (cache[id] = f.apply(this, arguments));\r\n };\r\n }\r\n\r\n function isUnicodeLetter(ch) {\r\n return RX_UNICODE_LETTER.test(ch);\r\n }\r\n\r\n function withExit(f, obj) {\r\n try {\r\n return f.call(obj, function(value){\r\n throw new Return(value);\r\n });\r\n } catch(ex) {\r\n if (ex instanceof Return) {\r\n return ex.value;\r\n }\r\n throw ex;\r\n }\r\n function Return(value) {\r\n this.value = value;\r\n }\r\n }\r\n\r\n // Exports ================================================================\r\n deepExtend(kendo, {\r\n util: {\r\n now: now,\r\n renderPos: renderPos,\r\n renderSize: renderSize,\r\n sqr: sqr,\r\n romanToArabic: romanToArabic,\r\n arabicToRoman: arabicToRoman,\r\n memoize: memoize,\r\n isUnicodeLetter: isUnicodeLetter,\r\n withExit: withExit\r\n }\r\n });\r\n\r\n var RX_UNICODE_LETTER = new RegExp(\"[\\\\u0041-\\\\u005A\\\\u0061-\\\\u007A\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]\");\r\n\r\n })();\n\n (function($, undefined$1) {\n // Imports ================================================================\n var math = Math,\n abs = math.abs,\n atan = math.atan,\n atan2 = math.atan2,\n cos = math.cos,\n max = math.max,\n min = math.min,\n sin = math.sin,\n tan = math.tan,\n\n kendo = window.kendo,\n Class = kendo.Class,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n util = kendo.drawing.util,\n defined = util.defined,\n deg = util.deg,\n rad = util.rad,\n round = util.round,\n valueOrDefault = util.valueOrDefault,\n\n sqr = kendo.util.sqr;\n\n // Implementation =========================================================\n var Location = Class.extend({\n init: function(lat, lng) {\n if (arguments.length === 1) {\n this.lat = lat[0];\n this.lng = lat[1];\n } else {\n this.lat = lat;\n this.lng = lng;\n }\n },\n\n DISTANCE_ITERATIONS: 100,\n DISTANCE_CONVERGENCE: 1e-12,\n DISTANCE_PRECISION: 2,\n FORMAT: \"{0:N6},{1:N6}\",\n\n toArray: function() {\n return [this.lat, this.lng];\n },\n\n equals: function(loc) {\n return loc && loc.lat === this.lat && loc.lng === this.lng;\n },\n\n clone: function() {\n return new Location(this.lat, this.lng);\n },\n\n round: function(precision) {\n this.lng = round(this.lng, precision);\n this.lat = round(this.lat, precision);\n return this;\n },\n\n wrap: function() {\n this.lng = this.lng % 180;\n this.lat = this.lat % 90;\n return this;\n },\n\n distanceTo: function(dest, datum) {\n return this.greatCircleTo(dest, datum).distance;\n },\n\n destination: function(distance, bearing, datum) {\n bearing = rad(bearing);\n datum = datum || dataviz.map.datums.WGS84;\n\n var fromLat = rad(this.lat);\n var fromLng = rad(this.lng);\n var dToR = distance / kendo.dataviz.map.datums.WGS84.a;\n\n var lat = math.asin(sin(fromLat) * cos(dToR) +\n cos(fromLat) * sin(dToR) * cos(bearing));\n\n var lng = fromLng + atan2(sin(bearing) * sin(dToR) * cos(fromLat),\n cos(dToR) - sin(fromLat) * sin(lat));\n\n return new Location(deg(lat), deg(lng));\n },\n\n greatCircleTo: function(dest, datum) {\n dest = Location.create(dest);\n datum = datum || dataviz.map.datums.WGS84;\n\n if (!dest || this.clone().round(8).equals(dest.clone().round(8))) {\n return {\n distance: 0,\n azimuthFrom: 0,\n azimuthTo: 0\n };\n }\n\n // See http://en.wikipedia.org/wiki/Vincenty's_formulae#Notation\n // o == sigma\n // A == alpha\n var a = datum.a;\n var b = datum.b;\n var f = datum.f;\n\n var L = rad(dest.lng - this.lng);\n\n var U1 = atan((1 - f) * tan(rad(this.lat)));\n var sinU1 = sin(U1);\n var cosU1 = cos(U1);\n\n var U2 = atan((1 - f) * tan(rad(dest.lat)));\n var sinU2 = sin(U2);\n var cosU2 = cos(U2);\n\n var lambda = L;\n var prevLambda;\n\n var i = this.DISTANCE_ITERATIONS;\n var converged = false;\n\n var sinLambda;\n var cosLambda;\n var sino;\n var cosA2;\n var coso;\n var cos2om;\n var sigma;\n\n while (!converged && i-- > 0) {\n sinLambda = sin(lambda);\n cosLambda = cos(lambda);\n sino = math.sqrt(\n sqr(cosU2 * sinLambda) + sqr(cosU1 * sinU2 - sinU1 * cosU2 * cosLambda)\n );\n\n coso = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n sigma = atan2(sino, coso);\n\n var sinA = cosU1 * cosU2 * sinLambda / sino;\n cosA2 = 1 - sqr(sinA);\n cos2om = 0;\n if (cosA2 !== 0) {\n cos2om = coso - 2 * sinU1 * sinU2 / cosA2;\n }\n\n prevLambda = lambda;\n var C = f / 16 * cosA2 * (4 + f * (4 - 3 * cosA2));\n lambda = L + (1 - C) * f * sinA * (\n sigma + C * sino * (cos2om + C * coso * (-1 + 2 * sqr(cos2om)))\n );\n\n converged = abs(lambda - prevLambda) <= this.DISTANCE_CONVERGENCE;\n }\n\n var u2 = cosA2 * (sqr(a) - sqr(b)) / sqr(b);\n var A = 1 + u2 / 16384 * (4096 + u2 * (-768 + u2 * (320 - 175 * u2)));\n var B = u2 / 1024 * (256 + u2 * (-128 + u2 * (74 - 47 * u2)));\n var deltao = B * sino * (cos2om + B / 4 * (\n coso * (-1 + 2 * sqr(cos2om)) - B / 6 * cos2om * (-3 + 4 * sqr(sino)) * (-3 + 4 * sqr(cos2om))\n ));\n\n var azimuthFrom = atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n var azimuthTo = atan2(cosU1 * sinLambda, -sinU1 * cosU2 + cosU1 * sinU2 * cosLambda);\n\n return {\n distance: round(b * A * (sigma - deltao), this.DISTANCE_PRECISION),\n azimuthFrom: deg(azimuthFrom),\n azimuthTo: deg(azimuthTo)\n };\n }\n });\n\n // IE < 9 doesn't allow to override toString on definition\n Location.fn.toString = function() {\n return kendo.format(this.FORMAT, this.lat, this.lng);\n };\n\n Location.fromLngLat = function(ll) {\n return new Location(ll[1], ll[0]);\n };\n\n Location.fromLatLng = function(ll) {\n return new Location(ll[0], ll[1]);\n };\n\n Location.create = function(a, b) {\n if (defined(a)) {\n if (a instanceof Location) {\n return a.clone();\n } else if (arguments.length === 1 && a.length === 2) {\n return Location.fromLatLng(a);\n } else {\n return new Location(a, b);\n }\n }\n };\n\n var Extent = Class.extend({\n init: function(nw, se) {\n nw = Location.create(nw);\n se = Location.create(se);\n\n if (nw.lng + 180 > se.lng + 180 &&\n nw.lat + 90 < se.lat + 90) {\n this.se = nw;\n this.nw = se;\n } else {\n this.se = se;\n this.nw = nw;\n }\n },\n\n contains: function(loc) {\n var nw = this.nw,\n se = this.se,\n lng = valueOrDefault(loc.lng, loc[1]),\n lat = valueOrDefault(loc.lat, loc[0]);\n\n return loc &&\n lng + 180 >= nw.lng + 180 &&\n lng + 180 <= se.lng + 180 &&\n lat + 90 >= se.lat + 90 &&\n lat + 90 <= nw.lat + 90;\n },\n\n center: function() {\n var nw = this.nw;\n var se = this.se;\n\n var lng = nw.lng + (se.lng - nw.lng) / 2;\n var lat = nw.lat + (se.lat - nw.lat) / 2;\n return new Location(lat, lng);\n },\n\n containsAny: function(locs) {\n var result = false;\n for (var i = 0; i < locs.length; i++) {\n result = result || this.contains(locs[i]);\n }\n\n return result;\n },\n\n include: function(loc) {\n var nw = this.nw,\n se = this.se,\n lng = valueOrDefault(loc.lng, loc[1]),\n lat = valueOrDefault(loc.lat, loc[0]);\n\n nw.lng = min(nw.lng, lng);\n nw.lat = max(nw.lat, lat);\n\n se.lng = max(se.lng, lng);\n se.lat = min(se.lat, lat);\n },\n\n includeAll: function(locs) {\n for (var i = 0; i < locs.length; i++) {\n this.include(locs[i]);\n }\n },\n\n edges: function() {\n var nw = this.nw,\n se = this.se;\n\n return { nw: this.nw, ne: new Location(nw.lat, se.lng),\n se: this.se, sw: new Location(se.lat, nw.lng) };\n },\n\n toArray: function() {\n var nw = this.nw,\n se = this.se;\n\n return [nw, new Location(nw.lat, se.lng),\n se, new Location(se.lat, nw.lng)];\n },\n\n overlaps: function(extent) {\n return this.containsAny(extent.toArray()) ||\n extent.containsAny(this.toArray());\n }\n });\n\n Extent.World = new Extent([90, -180], [-90, 180]);\n\n Extent.create = function(a, b) {\n if (a instanceof Extent) {\n return a;\n } else if (a && b) {\n return new Extent(a, b);\n } else if (a && a.length === 4 && !b) {\n return new Extent([a[0], a[1]], [a[2], a[3]]);\n }\n };\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n Extent: Extent,\n Location: Location\n }\n });\n\n })(window.kendo.jQuery);\n\n (function() {\n var kendo = window.kendo,\n Widget = kendo.ui.Widget,\n template = kendo.template,\n\n util = kendo.drawing.util,\n valueOrDefault = util.valueOrDefault,\n defined = util.defined;\n\n var Attribution = Widget.extend({\n init: function(element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.items = [];\n this.element.addClass(\"k-widget k-attribution\");\n },\n\n options: {\n name: \"Attribution\",\n separator: \" | \",\n itemTemplate: \"#= text #\"\n },\n\n filter: function(extent, zoom) {\n this._extent = extent;\n this._zoom = zoom;\n this._render();\n },\n\n add: function(item) {\n if (defined(item)) {\n if (typeof item === \"string\") {\n item = { text: item };\n }\n\n this.items.push(item);\n this._render();\n }\n },\n\n remove: function(text) {\n var result = [];\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n if (item.text !== text) {\n result.push(item);\n }\n }\n\n this.items = result;\n\n this._render();\n },\n\n clear: function() {\n this.items = [];\n this.element.empty();\n },\n\n _render: function() {\n var result = [];\n var itemTemplate = template(this.options.itemTemplate);\n\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n var text = this._itemText(item);\n if (text !== \"\") {\n result.push(itemTemplate({\n text: text\n }));\n }\n }\n\n if (result.length > 0) {\n this.element.empty()\n .append(result.join(this.options.separator))\n .show();\n } else {\n this.element.hide();\n }\n },\n\n _itemText: function(item) {\n var text = \"\";\n var inZoomLevel = this._inZoomLevel(item.minZoom, item.maxZoom);\n var inArea = this._inArea(item.extent);\n\n if (inZoomLevel && inArea) {\n text += item.text;\n }\n\n return text;\n },\n\n _inZoomLevel: function(min, max) {\n var result = true;\n min = valueOrDefault(min, -Number.MAX_VALUE);\n max = valueOrDefault(max, Number.MAX_VALUE);\n\n result = this._zoom > min && this._zoom < max;\n\n return result;\n },\n\n _inArea: function(area) {\n var result = true;\n\n if (area) {\n result = area.contains(this._extent);\n }\n\n return result;\n }\n });\n\n kendo.dataviz.ui.plugin(Attribution);\n })(window.kendo.jQuery);\n\n (function($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n\n var NS = \".kendoNavigator\";\n\n // Helper functions =======================================================\n function button(dir) {\n return kendo.format(\n '', dir);\n }\n\n var BUTTONS = button(\"up\") + button(\"right\") + button(\"down\") + button(\"left\");\n\n var Navigator = Widget.extend({\n init: function(element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n\n this.element.addClass(\"k-widget k-navigator\")\n .append(BUTTONS)\n .on(\"click\" + NS, \".k-button\", this._click.bind(this));\n\n var parentElement = this.element.parent().closest(\"[\" + kendo.attr(\"role\") + \"]\");\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n this._tabindex(this._keyroot);\n\n this._keydown = this._keydown.bind(this);\n this._keyroot.on(\"keydown\", this._keydown);\n },\n\n options: {\n name: \"Navigator\",\n panStep: 1\n },\n\n events: [\n \"pan\"\n ],\n\n dispose: function() {\n this._keyroot.off(\"keydown\", this._keydown);\n },\n\n _pan: function(x, y) {\n var panStep = this.options.panStep;\n this.trigger(\"pan\", {\n x: x * panStep,\n y: y * panStep\n });\n },\n\n _click: function(e) {\n var x = 0;\n var y = 0;\n var button = $(e.currentTarget);\n\n if (button.is(\".k-navigator-up\")) {\n y = 1;\n } else if (button.is(\".k-navigator-down\")) {\n y = -1;\n } else if (button.is(\".k-navigator-right\")) {\n x = 1;\n } else if (button.is(\".k-navigator-left\")) {\n x = -1;\n }\n\n this._pan(x, y);\n e.preventDefault();\n },\n\n _keydown: function(e) {\n switch (e.which) {\n case keys.UP:\n this._pan(0, 1);\n e.preventDefault();\n break;\n\n case keys.DOWN:\n this._pan(0, -1);\n e.preventDefault();\n break;\n\n case keys.RIGHT:\n this._pan(1, 0);\n e.preventDefault();\n break;\n\n case keys.LEFT:\n this._pan(-1, 0);\n e.preventDefault();\n break;\n }\n }\n });\n\n // Exports ================================================================\n kendo.dataviz.ui.plugin(Navigator);\n\n })(window.kendo.jQuery);\n\n (function($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n\n // Helper functions =======================================================\n function button(dir, iconClass) {\n return kendo.format(\n '',\n dir, iconClass);\n }\n\n var NS = \".kendoZoomControl\";\n var BUTTONS = button(\"in\", \"k-i-plus\") + button(\"out\", \"k-i-minus\");\n\n var PLUS = 187;\n var MINUS = 189;\n var FF_PLUS = 61;\n var FF_MINUS = 173;\n\n\n var ZoomControl = Widget.extend({\n init: function(element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n\n this.element.addClass(\"k-widget k-zoom-control k-button-group k-group-horizontal\")\n .append(BUTTONS)\n .on(\"click\" + NS, \".k-button\", this._click.bind(this));\n\n var parentElement = this.element.parent().closest(\"[\" + kendo.attr(\"role\") + \"]\");\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n\n this._tabindex(this._keyroot);\n\n this._keydown = this._keydown.bind(this);\n this._keyroot.on(\"keydown\", this._keydown);\n },\n\n options: {\n name: \"ZoomControl\",\n zoomStep: 1\n },\n\n events: [\n \"change\"\n ],\n\n _change: function(dir) {\n var zoomStep = this.options.zoomStep;\n this.trigger(\"change\", {\n delta: dir * zoomStep\n });\n },\n\n _click: function(e) {\n var button = $(e.currentTarget);\n var dir = 1;\n\n if (button.is(\".k-zoom-out\")) {\n dir = -1;\n }\n\n this._change(dir);\n e.preventDefault();\n },\n\n _keydown: function(e) {\n switch (e.which) {\n case keys.NUMPAD_PLUS:\n case PLUS:\n case FF_PLUS:\n this._change(1);\n break;\n\n case keys.NUMPAD_MINUS:\n case MINUS:\n case FF_MINUS:\n this._change(-1);\n break;\n }\n }\n });\n\n\n // Exports ================================================================\n kendo.dataviz.ui.plugin(ZoomControl);\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var math = Math,\n atan = math.atan,\n exp = math.exp,\n pow = math.pow,\n sin = math.sin,\n log = math.log,\n tan = math.tan,\n\n kendo = window.kendo,\n Class = kendo.Class,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n g = kendo.geometry,\n Point = g.Point,\n\n map = dataviz.map,\n Location = map.Location,\n\n util = kendo.drawing.util,\n rad = util.rad,\n deg = util.deg,\n limit = util.limitValue;\n\n // Constants ==============================================================\n var PI = math.PI,\n PI_DIV_2 = PI / 2,\n PI_DIV_4 = PI / 4,\n DEG_TO_RAD = PI / 180;\n\n // Coordinate reference systems ===========================================\n var WGS84 = {\n a: 6378137, // Semi-major radius\n b: 6356752.314245179, // Semi-minor radius\n f: 0.0033528106647474805, // Flattening\n e: 0.08181919084262149 // Eccentricity\n };\n\n // WGS 84 / World Mercator\n var Mercator = Class.extend({\n init: function(options) {\n this._initOptions(options);\n },\n\n MAX_LNG: 180,\n MAX_LAT: 85.0840590501,\n INVERSE_ITERATIONS: 15,\n INVERSE_CONVERGENCE: 1e-12,\n\n options: {\n centralMeridian: 0,\n datum: WGS84\n },\n\n forward: function(loc, clamp) {\n var proj = this,\n options = proj.options,\n datum = options.datum,\n r = datum.a,\n lng0 = options.centralMeridian,\n lat = limit(loc.lat, -proj.MAX_LAT, proj.MAX_LAT),\n lng = clamp ? limit(loc.lng, -proj.MAX_LNG, proj.MAX_LNG) : loc.lng,\n x = rad(lng - lng0) * r,\n y = proj._projectLat(lat);\n\n return new Point(x, y);\n },\n\n _projectLat: function(lat) {\n var datum = this.options.datum,\n ecc = datum.e,\n r = datum.a,\n y = rad(lat),\n ts = tan(PI_DIV_4 + y / 2),\n con = ecc * sin(y),\n p = pow((1 - con) / (1 + con), ecc / 2);\n\n // See:\n // http://en.wikipedia.org/wiki/Mercator_projection#Generalization_to_the_ellipsoid\n return r * log(ts * p);\n },\n\n inverse: function(point, clamp) {\n var proj = this,\n options = proj.options,\n datum = options.datum,\n r = datum.a,\n lng0 = options.centralMeridian,\n lng = point.x / (DEG_TO_RAD * r) + lng0,\n lat = limit(proj._inverseY(point.y), -proj.MAX_LAT, proj.MAX_LAT);\n\n if (clamp) {\n lng = limit(lng, -proj.MAX_LNG, proj.MAX_LNG);\n }\n\n return new Location(lat, lng);\n },\n\n _inverseY: function(y) {\n var proj = this,\n datum = proj.options.datum,\n r = datum.a,\n ecc = datum.e,\n ecch = ecc / 2,\n ts = exp(-y / r),\n phi = PI_DIV_2 - 2 * atan(ts),\n i;\n\n for (i = 0; i <= proj.INVERSE_ITERATIONS; i++) {\n var con = ecc * sin(phi),\n p = pow((1 - con) / (1 + con), ecch),\n dphi = PI_DIV_2 - 2 * atan(ts * p) - phi;\n\n phi += dphi;\n\n if (math.abs(dphi) <= proj.INVERSE_CONVERGENCE) {\n break;\n }\n }\n\n return deg(phi);\n }\n });\n\n // WGS 84 / Pseudo-Mercator\n // Used by Google Maps, Bing, OSM, etc.\n // Spherical projection of ellipsoidal coordinates.\n var SphericalMercator = Mercator.extend({\n MAX_LAT: 85.0511287798,\n\n _projectLat: function(lat) {\n var r = this.options.datum.a,\n y = rad(lat),\n ts = tan(PI_DIV_4 + y / 2);\n\n return r * log(ts);\n },\n\n _inverseY: function(y) {\n var r = this.options.datum.a,\n ts = exp(-y / r);\n\n return deg(PI_DIV_2 - (2 * atan(ts)));\n }\n });\n\n var Equirectangular = Class.extend({\n forward: function(loc) {\n return new Point(loc.lng, loc.lat);\n },\n\n inverse: function(point) {\n return new Location(point.y, point.x);\n }\n });\n\n // TODO: Better (less cryptic name) for this class(es)\n var EPSG3857 = Class.extend({\n init: function() {\n var crs = this,\n proj = crs._proj = new SphericalMercator();\n\n var c = this.c = 2 * PI * proj.options.datum.a;\n\n // Scale circumference to 1, mirror Y and shift origin to top left\n this._tm = g.transform().translate(0.5, 0.5).scale(1 / c, -1 / c);\n\n // Inverse transform matrix\n this._itm = g.transform().scale(c, -c).translate(-0.5, -0.5);\n },\n\n // Location <-> Point (screen coordinates for a given scale)\n toPoint: function(loc, scale, clamp) {\n var point = this._proj.forward(loc, clamp);\n\n return point\n .transform(this._tm)\n .scale(scale || 1);\n },\n\n toLocation: function(point, scale, clamp) {\n point = point\n .clone()\n .scale(1 / (scale || 1))\n .transform(this._itm);\n\n return this._proj.inverse(point, clamp);\n }\n });\n\n var EPSG3395 = Class.extend({\n init: function() {\n this._proj = new Mercator();\n },\n\n toPoint: function(loc) {\n return this._proj.forward(loc);\n },\n\n toLocation: function(point) {\n return this._proj.inverse(point);\n }\n });\n\n // WGS 84\n var EPSG4326 = Class.extend({\n init: function() {\n this._proj = new Equirectangular();\n },\n\n toPoint: function(loc) {\n return this._proj.forward(loc);\n },\n\n toLocation: function(point) {\n return this._proj.inverse(point);\n }\n });\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n crs: {\n EPSG3395: EPSG3395,\n EPSG3857: EPSG3857,\n EPSG4326: EPSG4326\n },\n datums: {\n WGS84: WGS84\n },\n projections: {\n Equirectangular: Equirectangular,\n Mercator: Mercator,\n SphericalMercator: SphericalMercator\n }\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var kendo = window.kendo,\n Class = kendo.Class,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n Extent = dataviz.map.Extent,\n\n util = kendo.drawing.util,\n defined = util.defined;\n\n // Implementation =========================================================\n var Layer = Class.extend({\n init: function(map, options) {\n this._initOptions(options);\n this.map = map;\n\n this.element = $(\"
\")\n .css({\n \"zIndex\": this.options.zIndex,\n \"opacity\": this.options.opacity\n })\n .appendTo(map.scrollElement);\n\n this._beforeReset = this._beforeReset.bind(this);\n this._reset = this._reset.bind(this);\n this._resize = this._resize.bind(this);\n this._panEnd = this._panEnd.bind(this);\n this._activate();\n\n this._updateAttribution();\n },\n\n destroy: function() {\n this._deactivate();\n },\n\n show: function() {\n this.reset();\n this._activate();\n this._applyExtent(true);\n },\n\n hide: function() {\n this._deactivate();\n this._setVisibility(false);\n },\n\n reset: function() {\n this._beforeReset();\n this._reset();\n },\n\n _reset: function() {\n this._applyExtent();\n },\n\n _beforeReset: $.noop,\n\n _resize: $.noop,\n\n _panEnd: function() {\n this._applyExtent();\n },\n\n _applyExtent: function() {\n var options = this.options;\n\n var zoom = this.map.zoom();\n var matchMinZoom = !defined(options.minZoom) || zoom >= options.minZoom;\n var matchMaxZoom = !defined(options.maxZoom) || zoom <= options.maxZoom;\n\n var extent = Extent.create(options.extent);\n var inside = !extent || extent.overlaps(this.map.extent());\n\n this._setVisibility(matchMinZoom && matchMaxZoom && inside);\n },\n\n _setVisibility: function(visible) {\n this.element.css(\"display\", visible ? \"\" : \"none\");\n },\n\n _activate: function() {\n var map = this.map;\n this._deactivate();\n map.bind(\"beforeReset\", this._beforeReset);\n map.bind(\"reset\", this._reset);\n map.bind(\"resize\", this._resize);\n map.bind(\"panEnd\", this._panEnd);\n },\n\n _deactivate: function() {\n var map = this.map;\n map.unbind(\"beforeReset\", this._beforeReset);\n map.unbind(\"reset\", this._reset);\n map.unbind(\"resize\", this._resize);\n map.unbind(\"panEnd\", this._panEnd);\n },\n\n _updateAttribution: function() {\n var attr = this.map.attribution;\n\n if (attr) {\n attr.add(this.options.attribution);\n }\n }\n });\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n layers: {\n Layer: Layer\n }\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var kendo = window.kendo,\n Class = kendo.Class,\n DataSource = kendo.data.DataSource,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n g = kendo.geometry,\n\n d = kendo.drawing,\n Group = d.Group,\n\n last = d.util.last,\n defined = d.util.defined,\n\n map = dataviz.map,\n Location = map.Location,\n Layer = map.layers.Layer;\n\n // Implementation =========================================================\n var ShapeLayer = Layer.extend({\n init: function(map, options) {\n\n this._pan = this._pan.bind(this);\n\n Layer.fn.init.call(this, map, options);\n\n this.surface = d.Surface.create(this.element, {\n width: map.scrollElement.width(),\n height: map.scrollElement.height()\n });\n\n this._initRoot();\n\n this.movable = new kendo.ui.Movable(this.surface.element);\n this._markers = [];\n\n this._click = this._handler(\"shapeClick\");\n this.surface.bind(\"click\", this._click);\n\n this._mouseenter = this._handler(\"shapeMouseEnter\");\n this.surface.bind(\"mouseenter\", this._mouseenter);\n\n this._mouseleave = this._handler(\"shapeMouseLeave\");\n this.surface.bind(\"mouseleave\", this._mouseleave);\n\n this._initDataSource();\n },\n\n options: {\n autoBind: true\n },\n\n destroy: function() {\n Layer.fn.destroy.call(this);\n\n this.surface.destroy();\n this.dataSource.unbind(\"change\", this._dataChange);\n },\n\n setDataSource: function(dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind(\"change\", this._dataChange);\n }\n\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind(\"change\", this._dataChange);\n\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n\n _reset: function() {\n Layer.fn._reset.call(this);\n this._translateSurface();\n\n if (this._data) {\n this._load(this._data);\n }\n },\n\n _initRoot: function() {\n this._root = new Group();\n this.surface.draw(this._root);\n },\n\n _beforeReset: function() {\n this.surface.clear();\n this._initRoot();\n },\n\n _resize: function() {\n this.surface.size(this.map.size());\n },\n\n _initDataSource: function() {\n var dsOptions = this.options.dataSource;\n this._dataChange = this._dataChange.bind(this);\n this.dataSource = DataSource\n .create(dsOptions)\n .bind(\"change\", this._dataChange);\n\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n\n _dataChange: function(e) {\n this._data = e.sender.view();\n this._load(this._data);\n },\n\n _load: function(data) {\n this._clearMarkers();\n\n if (!this._loader) {\n this._loader = new GeoJSONLoader(this.map, this.options.style, this);\n }\n\n var container = new Group();\n for (var i = 0; i < data.length; i++) {\n var shape = this._loader.parse(data[i]);\n if (shape) {\n container.append(shape);\n }\n }\n\n this._root.clear();\n this._root.append(container);\n },\n\n shapeCreated: function(shape) {\n var cancelled = false;\n if (shape instanceof d.Circle) {\n cancelled = defined(this._createMarker(shape));\n }\n\n if (!cancelled) {\n var args = { layer: this, shape: shape };\n cancelled = this.map.trigger(\"shapeCreated\", args);\n }\n\n return cancelled;\n },\n\n featureCreated: function(e) {\n e.layer = this;\n this.map.trigger(\"shapeFeatureCreated\", e);\n },\n\n _createMarker: function(shape) {\n var marker = this.map.markers.bind({\n location: shape.location\n }, shape.dataItem);\n\n if (marker) {\n this._markers.push(marker);\n }\n\n return marker;\n },\n\n _clearMarkers: function() {\n for (var i = 0; i < this._markers.length; i++) {\n this.map.markers.remove(this._markers[i]);\n }\n this._markers = [];\n },\n\n _pan: function() {\n if (!this._panning) {\n this._panning = true;\n this.surface.suspendTracking();\n }\n },\n\n _panEnd: function(e) {\n Layer.fn._panEnd.call(this, e);\n this._translateSurface();\n this.surface.resumeTracking();\n this._panning = false;\n },\n\n _translateSurface: function() {\n var map = this.map;\n var nw = map.locationToView(map.extent().nw);\n\n if (this.surface.translate) {\n this.surface.translate(nw);\n this.movable.moveTo({ x: nw.x, y: nw.y });\n }\n },\n\n _handler: function(event) {\n var layer = this;\n return function(e) {\n if (e.element) {\n var args = {\n layer: layer,\n shape: e.element,\n originalEvent: e.originalEvent\n };\n\n layer.map.trigger(event, args);\n }\n };\n },\n\n _activate: function() {\n Layer.fn._activate.call(this);\n\n this.map.bind(\"pan\", this._pan);\n },\n\n _deactivate: function() {\n Layer.fn._deactivate.call(this);\n\n this.map.unbind(\"pan\", this._pan);\n }\n });\n\n var GeoJSONLoader = Class.extend({\n init: function(locator, defaultStyle, observer) {\n this.observer = observer;\n this.locator = locator;\n this.style = defaultStyle;\n },\n\n parse: function(item) {\n var root = new Group();\n var unwrap = true;\n\n if (item.type === \"Feature\") {\n unwrap = false;\n this._loadGeometryTo(root, item.geometry, item);\n this._featureCreated(root, item);\n } else {\n this._loadGeometryTo(root, item, item);\n }\n\n if (unwrap && root.children.length < 2) {\n root = root.children[0];\n }\n\n return root;\n },\n\n _shapeCreated: function(shape) {\n var cancelled = false;\n\n if (this.observer && this.observer.shapeCreated) {\n cancelled = this.observer.shapeCreated(shape);\n }\n\n return cancelled;\n },\n\n _featureCreated: function(group, dataItem) {\n if (this.observer && this.observer.featureCreated) {\n this.observer.featureCreated({\n group: group,\n dataItem: dataItem,\n properties: dataItem.properties\n });\n }\n },\n\n _loadGeometryTo: function(container, geometry, dataItem) {\n var coords = geometry.coordinates;\n var i;\n var path;\n\n switch (geometry.type) {\n case \"LineString\":\n path = this._loadPolygon(container, [coords], dataItem);\n this._setLineFill(path);\n break;\n\n case \"MultiLineString\":\n for (i = 0; i < coords.length; i++) {\n path = this._loadPolygon(container, [coords[i]], dataItem);\n this._setLineFill(path);\n }\n break;\n\n case \"Polygon\":\n this._loadPolygon(container, coords, dataItem);\n break;\n\n case \"MultiPolygon\":\n for (i = 0; i < coords.length; i++) {\n this._loadPolygon(container, coords[i], dataItem);\n }\n break;\n\n case \"Point\":\n this._loadPoint(container, coords, dataItem);\n break;\n\n case \"MultiPoint\":\n for (i = 0; i < coords.length; i++) {\n this._loadPoint(container, coords[i], dataItem);\n }\n break;\n }\n },\n\n _setLineFill: function(path) {\n var segments = path.segments;\n if (segments.length < 4 || !segments[0].anchor().equals(last(segments).anchor())) {\n path.options.fill = null;\n }\n },\n\n _loadShape: function(container, shape) {\n if (!this._shapeCreated(shape)) {\n container.append(shape);\n }\n\n return shape;\n },\n\n _loadPolygon: function(container, rings, dataItem) {\n var shape = this._buildPolygon(rings);\n shape.dataItem = dataItem;\n\n return this._loadShape(container, shape);\n },\n\n _buildPolygon: function(rings) {\n var type = rings.length > 1 ? d.MultiPath : d.Path;\n var path = new type(this.style);\n\n for (var i = 0; i < rings.length; i++) {\n for (var j = 0; j < rings[i].length; j++) {\n var point = this.locator.locationToView(\n Location.fromLngLat(rings[i][j])\n );\n\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n }\n }\n\n return path;\n },\n\n _loadPoint: function(container, coords, dataItem) {\n var location = Location.fromLngLat(coords);\n var point = this.locator.locationToView(location);\n\n var circle = new g.Circle(point, 10);\n var shape = new d.Circle(circle, this.style);\n shape.dataItem = dataItem;\n shape.location = location;\n\n return this._loadShape(container, shape);\n }\n });\n\n // Exports ================================================================\n deepExtend(kendo.data, {\n schemas: {\n geojson: {\n type: \"json\",\n data: function(data) {\n if (data.type === \"FeatureCollection\") {\n return data.features;\n }\n\n if (data.type === \"GeometryCollection\") {\n return data.geometries;\n }\n\n return data;\n }\n }\n },\n transports: {\n geojson: {\n read: {\n dataType: \"json\"\n }\n }\n }\n });\n\n deepExtend(dataviz, {\n map: {\n layers: {\n shape: ShapeLayer,\n ShapeLayer: ShapeLayer\n },\n GeoJSONLoader: GeoJSONLoader\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var kendo = window.kendo,\n getter = kendo.getter,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n g = kendo.geometry,\n d = kendo.drawing,\n\n util = d.util,\n defined = util.defined,\n\n map = dataviz.map,\n Location = map.Location,\n ShapeLayer = map.layers.ShapeLayer;\n\n // Implementation =========================================================\n var BubbleLayer = ShapeLayer.extend({\n options: {\n autoBind: true,\n locationField: \"location\",\n valueField: \"value\",\n minSize: 0,\n maxSize: 100,\n scale: \"sqrt\",\n symbol: \"circle\"\n },\n\n _load: function(data) {\n this.surface.clear();\n\n if (data.length === 0) {\n return;\n }\n\n var opt = this.options;\n var getValue = getter(opt.valueField);\n\n data = data.slice(0);\n data.sort(function(a, b) {\n return getValue(b) - getValue(a);\n });\n\n var scaleType = this._scaleType();\n var scale;\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n var location = getter(opt.locationField)(dataItem);\n var value = getter(opt.valueField)(dataItem);\n\n if (defined(location) && defined(value)) {\n if (!scale) {\n scale = new scaleType([0, value], [opt.minSize, opt.maxSize]);\n }\n\n location = Location.create(location);\n var center = this.map.locationToView(location);\n var size = scale.map(value);\n\n var symbol = this._createSymbol({\n center: center,\n size: size,\n style: opt.style,\n dataItem: dataItem,\n location: location\n });\n\n symbol.dataItem = dataItem;\n symbol.location = location;\n symbol.value = value;\n\n this._drawSymbol(symbol);\n }\n }\n },\n\n _scaleType: function() {\n var scale = this.options.scale;\n\n if (kendo.isFunction(scale)) {\n return scale;\n }\n\n return dataviz.map.scales[scale];\n },\n\n _createSymbol: function(args) {\n var symbol = this.options.symbol;\n if (!kendo.isFunction(symbol)) {\n symbol = dataviz.map.symbols[symbol];\n }\n\n return symbol(args);\n },\n\n _drawSymbol: function(shape) {\n var args = { layer: this, shape: shape };\n var cancelled = this.map.trigger(\"shapeCreated\", args);\n if (!cancelled) {\n this.surface.draw(shape);\n }\n }\n });\n\n var SqrtScale = kendo.Class.extend({\n init: function(domain, range) {\n this._domain = domain;\n this._range = range;\n\n var domainRange = Math.sqrt(domain[1]) - Math.sqrt(domain[0]);\n var outputRange = range[1] - range[0];\n this._ratio = outputRange / domainRange;\n },\n\n map: function(value) {\n var rel = (Math.sqrt(value) - Math.sqrt(this._domain[0])) * this._ratio;\n return this._range[0] + rel;\n }\n });\n\n var Symbols = {\n circle: function(args) {\n var geo = new g.Circle(args.center, args.size / 2);\n return new d.Circle(geo, args.style);\n },\n\n square: function(args) {\n var path = new d.Path(args.style);\n var halfSize = args.size / 2;\n var center = args.center;\n\n path.moveTo(center.x - halfSize, center.y - halfSize)\n .lineTo(center.x + halfSize, center.y - halfSize)\n .lineTo(center.x + halfSize, center.y + halfSize)\n .lineTo(center.x - halfSize, center.y + halfSize)\n .close();\n\n return path;\n }\n };\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n layers: {\n bubble: BubbleLayer,\n BubbleLayer: BubbleLayer\n },\n scales: {\n sqrt: SqrtScale\n },\n symbols: Symbols\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var math = Math,\n\n kendo = window.kendo,\n Class = kendo.Class,\n template = kendo.template,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n g = kendo.geometry,\n Point = g.Point,\n\n Layer = dataviz.map.layers.Layer,\n\n util = kendo.util,\n renderSize = util.renderSize,\n\n drawingUtil = kendo.drawing.util,\n round = drawingUtil.round,\n limit = drawingUtil.limitValue;\n\n // Image tile layer =============================================================\n var TileLayer = Layer.extend({\n init: function(map, options) {\n Layer.fn.init.call(this, map, options);\n\n if (typeof this.options.subdomains === \"string\") {\n this.options.subdomains = this.options.subdomains.split(\"\");\n }\n\n var viewType = this._viewType();\n this._view = new viewType(this.element, this.options);\n },\n\n destroy: function() {\n Layer.fn.destroy.call(this);\n\n this._view.destroy();\n this._view = null;\n },\n\n _beforeReset: function() {\n var map = this.map;\n var origin = map.locationToLayer(map.extent().nw).round();\n this._view.viewOrigin(origin);\n },\n\n _reset: function(e) {\n var tileTitle;\n\n if (e) {\n tileTitle = e.tileTitle;\n } else {\n tileTitle = \"\";\n }\n\n Layer.fn._reset.call(this);\n this._updateView();\n this._view.reset(tileTitle);\n },\n\n _viewType: function() {\n return TileView;\n },\n\n _activate: function() {\n Layer.fn._activate.call(this);\n\n if (!kendo.support.mobileOS) {\n if (!this._pan) {\n this._pan = kendo.throttle(\n this._render.bind(this),\n 100\n );\n }\n\n this.map.bind(\"pan\", this._pan);\n }\n },\n\n _deactivate: function() {\n Layer.fn._deactivate.call(this);\n\n if (this._pan) {\n this.map.unbind(\"pan\", this._pan);\n }\n },\n\n _updateView: function() {\n var view = this._view,\n map = this.map,\n extent = map.extent(),\n extentToPoint = {\n nw: map.locationToLayer(extent.nw).round(),\n se: map.locationToLayer(extent.se).round()\n };\n\n view.center(map.locationToLayer(map.center()));\n view.extent(extentToPoint);\n view.zoom(map.zoom());\n },\n\n _resize: function() {\n this._render();\n },\n\n _panEnd: function(e) {\n Layer.fn._panEnd.call(this, e);\n this._render();\n },\n\n _render: function() {\n this._updateView();\n this._view.render();\n }\n });\n\n var TileView = Class.extend({\n init: function(element, options) {\n this.element = element;\n this._initOptions(options);\n\n this.pool = new TilePool();\n },\n\n options: {\n tileSize: 256,\n subdomains: [\"a\", \"b\", \"c\"],\n urlTemplate: \"\"\n },\n\n center: function(center) {\n this._center = center;\n },\n\n extent: function(extent) {\n this._extent = extent;\n },\n\n viewOrigin: function(origin) {\n this._viewOrigin = origin;\n },\n\n zoom: function(zoom) {\n this._zoom = zoom;\n },\n\n pointToTileIndex: function(point) {\n return new Point(\n math.floor(point.x / this.options.tileSize),\n math.floor(point.y / this.options.tileSize)\n );\n },\n\n tileCount: function() {\n var size = this.size(),\n firstTileIndex = this.pointToTileIndex(this._extent.nw),\n nw = this._extent.nw,\n point = this.indexToPoint(firstTileIndex).translate(-nw.x, -nw.y);\n\n return {\n x: math.ceil((math.abs(point.x) + size.width) / this.options.tileSize),\n y: math.ceil((math.abs(point.y) + size.height) / this.options.tileSize)\n };\n },\n\n size: function() {\n var nw = this._extent.nw,\n se = this._extent.se,\n diff = se.clone().translate(-nw.x, -nw.y);\n\n return {\n width: diff.x,\n height: diff.y\n };\n },\n\n indexToPoint: function(index) {\n var x = index.x, y = index.y;\n\n return new Point(\n x * this.options.tileSize,\n y * this.options.tileSize\n );\n },\n\n subdomainText: function() {\n var subdomains = this.options.subdomains;\n\n return subdomains[this.subdomainIndex++ % subdomains.length];\n },\n\n destroy: function() {\n this.element.empty();\n this.pool.empty();\n },\n\n reset: function(tileTitle) {\n this._tileTitle = tileTitle;\n this.pool.reset();\n this.subdomainIndex = 0;\n this.render();\n },\n\n render: function() {\n var size = this.tileCount(),\n firstTileIndex = this.pointToTileIndex(this._extent.nw),\n tile, x, y;\n\n for (x = 0; x < size.x; x++) {\n for (y = 0; y < size.y; y++) {\n tile = this.createTile({\n x: firstTileIndex.x + x,\n y: firstTileIndex.y + y\n });\n\n if (!tile.visible) {\n tile.show();\n }\n }\n }\n },\n\n createTile: function(currentIndex) {\n var options = this.tileOptions(currentIndex);\n var tile = this.pool.get(this._center, options);\n if (tile.element.parent().length === 0) {\n this.element.append(tile.element);\n }\n\n return tile;\n },\n\n tileOptions: function(currentIndex) {\n var index = this.wrapIndex(currentIndex),\n point = this.indexToPoint(currentIndex),\n origin = this._viewOrigin,\n offset = point.clone().translate(-origin.x, -origin.y);\n\n return {\n index: index,\n currentIndex: currentIndex,\n point: point,\n offset: roundPoint(offset),\n zoom: this._zoom,\n size: this.options.tileSize,\n subdomain: this.subdomainText(),\n urlTemplate: this.options.urlTemplate,\n errorUrlTemplate: this.options.errorUrlTemplate,\n tileTitle: this._tileTitle\n };\n },\n\n wrapIndex: function(index) {\n var boundary = math.pow(2, this._zoom);\n return {\n x: this.wrapValue(index.x, boundary),\n y: limit(index.y, 0, boundary - 1)\n };\n },\n\n wrapValue: function(value, boundary) {\n var remainder = (math.abs(value) % boundary);\n if (value >= 0) {\n value = remainder;\n } else {\n value = boundary - (remainder === 0 ? boundary : remainder);\n }\n\n return value;\n }\n });\n\n var ImageTile = Class.extend({\n init: function(id, options) {\n this.id = id;\n this.visible = true;\n\n this._initOptions(options);\n this.createElement();\n this.show();\n },\n\n options: {\n urlTemplate: \"\",\n errorUrlTemplate: \"\"\n },\n\n createElement: function() {\n this.element = $(\"\")\n .css({ width: this.options.size, height: this.options.size })\n .on(\"error\", (function(e) {\n if (this.errorUrl()) {\n e.target.setAttribute(\"src\", this.errorUrl());\n } else {\n e.target.removeAttribute(\"src\");\n }\n }).bind(this));\n },\n\n show: function() {\n var element = this.element[0];\n element.style.top = renderSize(this.options.offset.y);\n element.style.left = renderSize(this.options.offset.x);\n\n var url = this.url();\n if (url) {\n element.setAttribute(\"src\", url);\n }\n\n element.style.visibility = \"visible\";\n this.visible = true;\n },\n\n hide: function() {\n this.element[0].style.visibility = \"hidden\";\n this.visible = false;\n },\n\n url: function() {\n var urlResult = template(this.options.urlTemplate);\n\n return urlResult(this.urlOptions());\n },\n\n errorUrl: function() {\n var urlResult = template(this.options.errorUrlTemplate);\n\n return urlResult(this.urlOptions());\n },\n\n urlOptions: function() {\n var options = this.options;\n return {\n zoom: options.zoom,\n subdomain: options.subdomain,\n z: options.zoom,\n x: options.index.x,\n y: options.index.y,\n s: options.subdomain,\n quadkey: options.quadkey,\n q: options.quadkey,\n culture: options.culture,\n c: options.culture\n };\n },\n\n destroy: function() {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n }\n });\n\n var TilePool = Class.extend({\n init: function() {\n this._items = [];\n },\n\n options: {\n maxSize: 100\n },\n\n get: function(center, options) {\n if (this._items.length >= this.options.maxSize) {\n this._remove(center);\n }\n\n return this._create(options);\n },\n\n empty: function() {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].destroy();\n }\n\n this._items = [];\n },\n\n reset: function() {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].hide();\n }\n },\n\n _create: function(options) {\n var items = this._items;\n var tile;\n\n // Build an unique token for the image\n // This normally would be the URL, but we don't care about subdomains\n var id = util.hashKey(\n options.point.toString() +\n options.offset.toString() +\n options.zoom +\n options.urlTemplate\n );\n\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === id) {\n tile = items[i];\n break;\n }\n }\n\n if (tile) {\n tile.show();\n } else {\n tile = new ImageTile(id, options);\n this._items.push(tile);\n }\n\n return tile;\n },\n\n _remove: function(center) {\n var items = this._items;\n var maxDist = -1;\n var index = -1;\n\n for (var i = 0; i < items.length; i++) {\n var dist = items[i].options.point.distanceTo(center);\n if (dist > maxDist && !items[i].visible) {\n index = i;\n maxDist = dist;\n }\n }\n\n if (index !== -1) {\n items[index].destroy();\n items.splice(index, 1);\n }\n }\n });\n\n // Methods ================================================================\n function roundPoint(point) {\n return new Point(round(point.x), round(point.y));\n }\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n layers: {\n tile: TileLayer,\n TileLayer: TileLayer,\n\n ImageTile: ImageTile,\n TilePool: TilePool,\n TileView: TileView\n }\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var kendo = window.kendo,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n defined = kendo.drawing.util.defined,\n\n Extent = dataviz.map.Extent,\n Location = dataviz.map.Location,\n TileLayer = dataviz.map.layers.TileLayer,\n TileView = dataviz.map.layers.TileView;\n\n // Bing tile layer =============================================================\n var BingLayer = TileLayer.extend({\n init: function(map, options) {\n this.options.baseUrl =\n this._scheme() +\n \"://dev.virtualearth.net/REST/v1/Imagery/Metadata/\";\n\n TileLayer.fn.init.call(this, map, options);\n\n this._onMetadata = this._onMetadata.bind(this);\n this._fetchMetadata();\n },\n\n options: {\n imagerySet: \"road\"\n },\n\n _fetchMetadata: function() {\n var options = this.options;\n\n if (!options.key) {\n throw new Error(\"Bing tile layer: API key is required\");\n }\n\n $.ajax({\n url: options.baseUrl + options.imagerySet,\n data: {\n output: \"json\",\n include: \"ImageryProviders\",\n key: options.key,\n uriScheme: this._scheme()\n },\n type: \"get\",\n dataType: \"jsonp\",\n jsonp: \"jsonp\",\n success: this._onMetadata\n });\n },\n\n _scheme: function(proto) {\n proto = proto || window.location.protocol;\n return proto.replace(\":\", \"\") === \"https\" ? \"https\" : \"http\";\n },\n\n _onMetadata: function(data) {\n if (data && data.resourceSets.length) {\n var resource = this.resource = data.resourceSets[0].resources[0];\n\n deepExtend(this._view.options, {\n urlTemplate: resource.imageUrl\n .replace(\"{subdomain}\", \"#= subdomain #\")\n .replace(\"{quadkey}\", \"#= quadkey #\")\n .replace(\"{culture}\", \"#= culture #\"),\n subdomains: resource.imageUrlSubdomains\n });\n\n var options = this.options;\n if (!defined(options.minZoom)) {\n options.minZoom = resource.zoomMin;\n }\n if (!defined(options.maxZoom)) {\n options.maxZoom = resource.zoomMax;\n }\n\n this._addAttribution();\n\n if (this.element.css(\"display\") !== \"none\") {\n this._reset();\n }\n }\n },\n\n _viewType: function() {\n return BingView;\n },\n\n _addAttribution: function() {\n var attr = this.map.attribution;\n if (attr) {\n var items = this.resource.imageryProviders;\n if (items) {\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n for (var y = 0; y < item.coverageAreas.length; y++) {\n var area = item.coverageAreas[y];\n attr.add({\n text: item.attribution,\n minZoom: area.zoomMin,\n maxZoom: area.zoomMax,\n extent: new Extent(\n new Location(area.bbox[2], area.bbox[1]),\n new Location(area.bbox[0], area.bbox[3])\n )\n });\n }\n }\n }\n }\n },\n\n imagerySet: function(value) {\n if (value) {\n this.options.imagerySet = value;\n this.map.attribution.clear();\n this._fetchMetadata();\n } else {\n return this.options.imagerySet;\n }\n }\n });\n\n var BingView = TileView.extend({\n options: {\n culture: \"en-US\"\n },\n\n tileOptions: function(currentIndex) {\n var options = TileView.fn.tileOptions.call(this, currentIndex);\n\n options.culture = this.options.culture;\n options.quadkey = this.tileQuadKey(this.wrapIndex(currentIndex));\n\n return options;\n },\n\n tileQuadKey: function(index) {\n var quadKey = \"\",\n digit, mask, i;\n\n for (i = this._zoom; i > 0; i--) {\n digit = 0;\n mask = 1 << (i - 1);\n\n if ((index.x & mask) !== 0) {\n digit++;\n }\n\n if ((index.y & mask) !== 0) {\n digit += 2;\n }\n\n quadKey += digit;\n }\n\n return quadKey;\n }\n });\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n layers: {\n bing: BingLayer,\n BingLayer: BingLayer,\n BingView: BingView\n }\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var doc = document,\n math = Math,\n indexOf = $.inArray,\n\n kendo = window.kendo,\n Class = kendo.Class,\n DataSource = kendo.data.DataSource,\n Tooltip = kendo.ui.Tooltip,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n map = dataviz.map,\n Location = map.Location,\n Layer = map.layers.Layer;\n\n // Implementation =========================================================\n var MarkerLayer = Layer.extend({\n init: function(map, options) {\n Layer.fn.init.call(this, map, options);\n\n this._markerClick = this._markerClick.bind(this);\n this.element.on(\"click\", \".k-marker\", this._markerClick);\n\n this.items = [];\n this._initDataSource();\n },\n\n destroy: function() {\n Layer.fn.destroy.call(this);\n\n this.element.off(\"click\", \".k-marker\", this._markerClick);\n\n this.dataSource.unbind(\"change\", this._dataChange);\n this.clear();\n },\n\n options: {\n zIndex: 1000,\n autoBind: true,\n dataSource: {},\n locationField: \"location\",\n titleField: \"title\"\n },\n\n add: function(arg) {\n if (Array.isArray(arg)) {\n for (var i = 0; i < arg.length; i++) {\n this._addOne(arg[i]);\n }\n } else {\n return this._addOne(arg);\n }\n },\n\n remove: function(marker) {\n marker.destroy();\n\n var index = indexOf(marker, this.items);\n if (index > -1) {\n this.items.splice(index, 1);\n }\n },\n\n clear: function() {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n\n this.items = [];\n },\n\n update: function(marker) {\n var loc = marker.location();\n if (loc) {\n marker.showAt(this.map.locationToView(loc));\n\n var args = { marker: marker, layer: this };\n this.map.trigger(\"markerActivate\", args);\n }\n },\n\n _reset: function() {\n Layer.fn._reset.call(this);\n var items = this.items;\n for (var i = 0; i < items.length; i++) {\n this.update(items[i]);\n }\n },\n\n bind: function(options, dataItem) {\n var marker = map.Marker.create(options, this.options);\n marker.dataItem = dataItem;\n\n var args = { marker: marker, layer: this };\n var cancelled = this.map.trigger(\"markerCreated\", args);\n if (!cancelled) {\n this.add(marker);\n return marker;\n }\n },\n\n setDataSource: function(dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind(\"change\", this._dataChange);\n }\n\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind(\"change\", this._dataChange);\n\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n\n _addOne: function(arg) {\n var marker = Marker.create(arg, this.options);\n marker.addTo(this);\n\n return marker;\n },\n\n _initDataSource: function() {\n var dsOptions = this.options.dataSource;\n this._dataChange = this._dataChange.bind(this);\n this.dataSource = DataSource\n .create(dsOptions)\n .bind(\"change\", this._dataChange);\n\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n\n _dataChange: function(e) {\n this._load(e.sender.view());\n },\n\n _load: function(data) {\n this._data = data;\n this.clear();\n\n var getLocation = kendo.getter(this.options.locationField);\n var getTitle = kendo.getter(this.options.titleField);\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n this.bind({\n location: getLocation(dataItem),\n title: getTitle(dataItem)\n }, dataItem);\n }\n },\n\n _markerClick: function(e) {\n var args = { marker: $(e.target).data(\"kendoMarker\"), layer: this };\n this.map.trigger(\"markerClick\", args);\n }\n });\n\n var Marker = Class.extend({\n init: function(options) {\n this.options = options || {};\n },\n\n addTo: function(parent) {\n this.layer = parent.markers || parent;\n this.layer.items.push(this);\n this.layer.update(this);\n },\n\n location: function(value) {\n if (value) {\n this.options.location = Location.create(value).toArray();\n\n if (this.layer) {\n this.layer.update(this);\n }\n\n return this;\n } else {\n return Location.create(this.options.location);\n }\n },\n\n showAt: function(point) {\n this.render();\n this.element.css({\n left: math.round(point.x),\n top: math.round(point.y)\n });\n\n if (this.tooltip && this.tooltip.popup) {\n // TODO: Expose popup/tooltip updatePosition? method\n this.tooltip.popup._position();\n }\n },\n\n hide: function() {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n\n if (this.tooltip) {\n this.tooltip.destroy();\n this.tooltip = null;\n }\n },\n\n destroy: function() {\n this.layer = null;\n this.hide();\n },\n\n render: function() {\n if (!this.element) {\n var options = this.options;\n var layer = this.layer;\n\n this.element = $(doc.createElement(\"span\"))\n .addClass(\"k-marker k-icon k-i-marker-\" + kendo.toHyphens(options.shape || \"pin\"))\n .attr(\"title\", options.title)\n .attr(options.attributes || {})\n .data(\"kendoMarker\", this)\n .css(\"zIndex\", options.zIndex);\n\n if (layer) {\n layer.element.append(this.element);\n }\n\n this.renderTooltip();\n }\n },\n\n renderTooltip: function() {\n var marker = this;\n var title = marker.options.title;\n var options = marker.options.tooltip || {};\n\n if (options && Tooltip) {\n var template = options.template;\n if (template) {\n var contentTemplate = kendo.template(template);\n options.content = function(e) {\n e.location = marker.location();\n e.marker = marker;\n return contentTemplate(e);\n };\n }\n\n if (title || options.content || options.contentUrl) {\n this.tooltip = new Tooltip(this.element, options);\n this.tooltip.marker = this;\n }\n }\n }\n });\n\n Marker.create = function(arg, defaults) {\n if (arg instanceof Marker) {\n return arg;\n }\n\n return new Marker(deepExtend({}, defaults, arg));\n };\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n layers: {\n marker: MarkerLayer,\n MarkerLayer: MarkerLayer\n },\n Marker: Marker\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var doc = document,\n math = Math,\n min = math.min,\n pow = math.pow,\n\n kendo = window.kendo,\n Widget = kendo.ui.Widget,\n deepExtend = kendo.deepExtend,\n\n dataviz = kendo.dataviz,\n ui = dataviz.ui,\n\n g = kendo.geometry,\n Point = g.Point,\n\n map = dataviz.map,\n Extent = map.Extent,\n Location = map.Location,\n EPSG3857 = map.crs.EPSG3857,\n\n util = kendo.util,\n renderPos = util.renderPos,\n\n drawingUtil = kendo.drawing.util,\n\n defined = drawingUtil.defined,\n limit = drawingUtil.limitValue,\n valueOrDefault = drawingUtil.valueOrDefault;\n\n // Constants ==============================================================\n var CSS_PREFIX = \"k-\",\n FRICTION = 0.90,\n FRICTION_MOBILE = 0.93,\n MOUSEWHEEL = \"DOMMouseScroll mousewheel\",\n VELOCITY_MULTIPLIER = 5,\n DEFAULT_ZOOM_RATE = 1;\n\n // Map widget =============================================================\n var Map = Widget.extend({\n init: function(element, options) {\n kendo.destroy(element);\n Widget.fn.init.call(this, element);\n\n this._initOptions(options);\n this.bind(this.events, options);\n\n this.crs = new EPSG3857();\n\n this.element\n .addClass(CSS_PREFIX + this.options.name.toLowerCase())\n .css(\"position\", \"relative\")\n .empty()\n .append(doc.createElement(\"div\"));\n\n this._viewOrigin = this._getOrigin();\n this._initScroller();\n this._initMarkers();\n this._initControls();\n this._initLayers();\n this._reset();\n\n this._mousewheel = this._mousewheel.bind(this);\n this.element.on(MOUSEWHEEL, this._mousewheel);\n },\n\n options: {\n name: \"Map\",\n controls: {\n attribution: true,\n navigator: {\n panStep: 100\n },\n zoom: true\n },\n layers: [],\n layerDefaults: {\n shape: {\n style: {\n fill: {\n color: \"#fff\"\n },\n stroke: {\n color: \"#aaa\",\n width: 0.5\n }\n }\n },\n bubble: {\n style: {\n fill: {\n color: \"#fff\",\n opacity: 0.5\n },\n stroke: {\n color: \"#aaa\",\n width: 0.5\n }\n }\n },\n marker: {\n shape: \"pinTarget\",\n tooltip: {\n position: \"top\"\n }\n }\n },\n center: [0, 0],\n zoom: 3,\n minSize: 256,\n minZoom: 1,\n maxZoom: 19,\n markers: [],\n markerDefaults: {\n shape: \"pinTarget\",\n tooltip: {\n position: \"top\"\n }\n },\n wraparound: true,\n messages: {\n tileTitle: \"Map tile\"\n }\n },\n\n events: [\n \"beforeReset\",\n \"click\",\n \"markerActivate\",\n \"markerClick\",\n \"markerCreated\",\n \"pan\",\n \"panEnd\",\n \"reset\",\n \"shapeClick\",\n \"shapeCreated\",\n \"shapeFeatureCreated\",\n \"shapeMouseEnter\",\n \"shapeMouseLeave\",\n \"zoomEnd\",\n \"zoomStart\"\n ],\n\n destroy: function() {\n this.scroller.destroy();\n\n if (this.navigator) {\n this.navigator.destroy();\n }\n\n if (this.attribution) {\n this.attribution.destroy();\n }\n\n if (this.zoomControl) {\n this.zoomControl.destroy();\n }\n\n this.markers.destroy();\n\n for (var i = 0; i < this.layers.length; i++) {\n this.layers[i].destroy();\n }\n\n Widget.fn.destroy.call(this);\n },\n\n zoom: function(level) {\n var options = this.options;\n\n if (defined(level)) {\n level = math.round(limit(level, options.minZoom, options.maxZoom));\n if (options.zoom !== level) {\n options.zoom = level;\n this._reset();\n }\n\n return this;\n } else {\n return options.zoom;\n }\n },\n\n center: function(center) {\n if (center) {\n this.options.center = Location.create(center).toArray();\n this._reset();\n\n return this;\n } else {\n return Location.create(this.options.center);\n }\n },\n\n extent: function(extent) {\n if (extent) {\n this._setExtent(extent);\n return this;\n } else {\n return this._getExtent();\n }\n },\n\n setOptions: function(options) {\n Widget.fn.setOptions.call(this, options);\n this._reset();\n },\n\n locationToLayer: function(location, zoom) {\n var clamp = !this.options.wraparound;\n location = Location.create(location);\n return this.crs.toPoint(location, this._layerSize(zoom), clamp);\n },\n\n layerToLocation: function(point, zoom) {\n var clamp = !this.options.wraparound;\n point = Point.create(point);\n return this.crs.toLocation(point, this._layerSize(zoom), clamp);\n },\n\n locationToView: function(location) {\n location = Location.create(location);\n var origin = this.locationToLayer(this._viewOrigin);\n var point = this.locationToLayer(location);\n\n return point.translateWith(origin.scale(-1));\n },\n\n viewToLocation: function(point, zoom) {\n var origin = this.locationToLayer(this._getOrigin(), zoom);\n point = Point.create(point);\n point = point.clone().translateWith(origin);\n return this.layerToLocation(point, zoom);\n },\n\n eventOffset: function(e) {\n var point;\n var x;\n var y;\n var offset = this.element.offset();\n\n if (e.x || e.y) {\n var field = \"location\";\n x = e.x[field] - offset.left;\n y = e.y[field] - offset.top;\n point = new g.Point(x, y);\n } else {\n var event = e.originalEvent || e;\n x = valueOrDefault(event.pageX, event.clientX) - offset.left;\n y = valueOrDefault(event.pageY, event.clientY) - offset.top;\n point = new g.Point(x, y);\n }\n\n return point;\n },\n\n eventToView: function(e) {\n var cursor = this.eventOffset(e);\n return this.locationToView(this.viewToLocation(cursor));\n },\n\n eventToLayer: function(e) {\n return this.locationToLayer(this.eventToLocation(e));\n },\n\n eventToLocation: function(e) {\n var cursor = this.eventOffset(e);\n return this.viewToLocation(cursor);\n },\n\n viewSize: function() {\n var element = this.element;\n var scale = this._layerSize();\n var width = element.width();\n\n if (!this.options.wraparound) {\n width = min(scale, width);\n }\n return {\n width: width,\n height: min(scale, element.height())\n };\n },\n\n exportVisual: function() {\n this._reset();\n return false;\n },\n\n _setOrigin: function(origin, zoom) {\n var size = this.viewSize(),\n topLeft;\n\n origin = this._origin = Location.create(origin);\n topLeft = this.locationToLayer(origin, zoom);\n topLeft.x += size.width / 2;\n topLeft.y += size.height / 2;\n\n this.options.center = this.layerToLocation(topLeft, zoom).toArray();\n\n return this;\n },\n\n _getOrigin: function(invalidate) {\n var size = this.viewSize(),\n topLeft;\n\n if (invalidate || !this._origin) {\n topLeft = this.locationToLayer(this.center());\n topLeft.x -= size.width / 2;\n topLeft.y -= size.height / 2;\n\n this._origin = this.layerToLocation(topLeft);\n }\n\n return this._origin;\n },\n\n _setExtent: function(extent) {\n var raw = Extent.create(extent);\n var se = raw.se.clone();\n if (this.options.wraparound && se.lng < 0 && extent.nw.lng > 0) {\n se.lng = 180 + (180 + se.lng);\n }\n\n extent = new Extent(raw.nw, se);\n this.center(extent.center());\n\n var width = this.element.width();\n var height = this.element.height();\n for (var zoom = this.options.maxZoom; zoom >= this.options.minZoom; zoom--) {\n var topLeft = this.locationToLayer(extent.nw, zoom);\n var bottomRight = this.locationToLayer(extent.se, zoom);\n\n var layerWidth = math.abs(bottomRight.x - topLeft.x);\n var layerHeight = math.abs(bottomRight.y - topLeft.y);\n\n if (layerWidth <= width && layerHeight <= height) {\n break;\n }\n }\n\n this.zoom(zoom);\n },\n\n _getExtent: function() {\n var nw = this._getOrigin();\n var bottomRight = this.locationToLayer(nw);\n var size = this.viewSize();\n\n bottomRight.x += size.width;\n bottomRight.y += size.height;\n\n var se = this.layerToLocation(bottomRight);\n return new Extent(nw, se);\n },\n\n _zoomAround: function(pivot, level) {\n this._setOrigin(this.layerToLocation(pivot, level), level);\n this.zoom(level);\n },\n\n _initControls: function() {\n var controls = this.options.controls;\n\n if (ui.Attribution && controls.attribution) {\n this._createAttribution(controls.attribution);\n }\n\n if (!kendo.support.mobileOS) {\n if (ui.Navigator && controls.navigator) {\n this._createNavigator(controls.navigator);\n }\n\n if (ui.ZoomControl && controls.zoom) {\n this._createZoomControl(controls.zoom);\n }\n }\n },\n\n _createControlElement: function(options, defaultPos) {\n var pos = options.position || defaultPos;\n var posSelector = \".\" + renderPos(pos).replace(\" \", \".\");\n var wrap = $(\".k-map-controls\" + posSelector, this.element);\n if (wrap.length === 0) {\n wrap = $(\"