{"version":3,"sources":["kendo.dataviz.core.js"],"names":["f","define","defined","value","UNDEFINED","round","precision","power","pow","math","p","limitValue","min","max","rad","degrees","DEG_TO_RAD","deg","radians","isNumber","val","isNaN","valueOrDefault","defaultValue","sqr","objectKey","object","key","parts","push","sort","join","hashKey","str","i","hash","length","charCodeAt","hashObject","arrayLimits","arr","MAX_NUM","MIN_NUM","arrayMin","arrayMax","sparseArrayMin","sparseArrayLimits","sparseArrayMax","n","isFinite","undefined","last","array","append","first","second","apply","renderTemplate","text","kendo","template","useWithBlock","paramName","renderAttr","name","renderAllAttr","attrs","output","renderStyle","renderSize","size","renderPos","pos","result","toHyphens","split","isTransparent","color","arabicToRoman","literals",1,10,100,2,20,200,3,30,300,4,40,400,5,50,500,6,60,600,7,70,700,8,80,800,9,90,900,1000,"values","roman","shift","romanToArabic","r","digits","prev","v","toLowerCase","x","l","c","d","m","charAt","memoize","cache","Object","create","id","arguments","this","ucs2decode","string","extra","counter","ucs2encode","map","String","fromCharCode","Math","window","deepExtend","PI","Number","MAX_VALUE","now","Date","getTime","util","drawing","dataviz","amd","a1","a2","a3","$","zeroSize","width","height","baseline","measureText","style","measureBox","TextMetrics","current","measure","loadFonts","fonts","callback","promises","document","font","load","e","logToConsole","Promise","all","then","doc","Class","LRUCache","extend","init","_size","_length","_map","put","lru","entry","_head","_tail","newer","older","get","defaultMeasureBox","options","_cache","_initOptions","baselineMarkerSize","box","styleKey","cacheKey","cachedResult","baselineMarker","_baselineMarker","cloneNode","appendChild","body","offsetWidth","offsetHeight","offsetTop","parentNode","removeChild","jQuery","encodeBase64","input","chr1","chr2","chr3","enc1","enc2","enc3","enc4","encodeUTF8","KEY_STR","inArray","ObserversMixin","observers","_observers","addObserver","element","removeObserver","index","splice","trigger","methodName","event","observer","idx","_suspended","optionsChange","geometryChange","suspend","resume","_observerField","field","mixins","getSpacing","defaultSpacing","spacing","top","right","bottom","left","TOP","RIGHT","BOTTOM","LEFT","createAxisTick","tickOptions","tickX","tickY","position","tick","draw","Path","stroke","vertical","moveTo","lineTo","alignPathToPixel","createAxisGridLine","gridLine","lineStart","lineEnd","line","dashType","autoMajorUnit","scale","relativeValue","scaleMultiplier","diff","DEFAULT_PRECISION","abs","floor","log","rotatePoint","y","cx","cy","angle","theta","Point2D","cos","sin","boxDiff","s","x1","y1","x2","y2","a","b","g","h","Box2D","grep","indexOf","ceil","step","remainderClose","divisor","ratio","remainder","threshold","interpolateValue","start","end","progress","COORD_PRECISION","numericComparer","autoFormat","format","match","FORMAT_REGEX","toString","clockwise","v1","v2","dateComparer","mwDelta","origEvent","originalEvent","delta","wheelDelta","detail","decodeEntities","_element","innerHTML","textContent","innerText","path","offset","support","vml","segments","anchor","translate","innerRadialStops","currentStop","stops","usedSpace","innerRadius","radius","currentStops","rectToBox","rect","origin","bottomRight","eventTargetElement","touch","initialTouch","target","Ring","Sector","ShapeBuilder","ChartElement","RootElement","BoxElement","Text","FloatElement","TextBox","Title","AxisLabel","Axis","Note","ShapeElement","NumericAxis","LogarithmicAxis","ExportMixin","CurveProcessor","geom","geometry","noop","isPlainObject","trim","AXIS_LABEL_CLICK","BLACK","CENTER","CLIP","CIRCLE","CROSS","DEFAULT_FONT","DEFAULT_HEIGHT","DEFAULT_ICON_SIZE","DEFAULT_WIDTH","HEIGHT","COORDINATE_LIMIT","INITIAL_ANIMATION_DURATION","INSIDE","LINEAR","MIN_VALUE","NONE","NOTE_CLICK","NOTE_HOVER","OUTSIDE","RADIAL","TRIANGLE","WIDTH","WHITE","X","Y","ZERO_THRESHOLD","point","fn","prototype","clone","equals","rotate","center","cosT","sinT","multiply","distanceTo","dx","dy","sqrt","onCircle","move","wrap","targetBox","wrapPoint","snapTo","axis","alignTo","targetCenter","shrink","dw","dh","expand","pad","padding","unpad","containsPoint","points","getHash","overlaps","rotation","r1","r2","r3","r4","toRect","Rect","hasSize","align","alignment","c1","c2","sizeFunc","startAngle","ring","ir","middle","newRadius","that","radianAngle","ax","ay","adjacentBox","distance","sector","midAndle","midPoint","hw","hh","sa","ca","endAngle","vector","startPoint","startVector","endPoint","endVector","dist","getBBox","angles","ea","allAngles","saIndex","eaIndex","slice","concat","call","createRing","innerEnd","Point","arc","Arc","radiusX","radiusY","fromArc","close","pointAt","children","reflow","currentChild","destroy","animation","getRoot","parent","getChart","root","chart","translateChildren","childrenCount","renderVisual","visible","createVisual","addVisual","renderChildren","createAnimation","renderComplete","visual","chartElement","appendVisual","Group","zIndex","Animation","childVisual","noclip","clipRoot","stackRoot","stackVisual","sibling","here","visuals","insertAt","traverse","child","closest","matched","hasHighlight","highlight","createHighlight","toggleHighlight","show","highlightOptions","_highlight","customVisual","fill","opacity","highlightVisualArgs","sender","series","dataItem","category","percentage","runningTotal","total","createGradientOverlay","gradientOptions","overlay","createGradient","closed","elements","gradients","background","border","margin","currentBox","createBackground","fromRect","drawingGradient","hashCode","gradient","Gradients","type","LinearGradient","RadialGradient","supportVML","vAlign","shrinkToFit","reflowPaddingBox","paddingBox","borderWidth","contentBox","item","hasSetSize","hasBox","visualStyle","boxElement","cursor","content","opt","topLeft","_initDirection","groupAxis","elementAxis","groupSizeField","elementSizeField","groupSpacing","elementSpacing","vSpacing","reflowChildren","elementStart","groupElementStart","group","groupElements","groupElementsCount","groupIdx","elementBox","elementSize","floatElement","groupOptions","groups","groupsCount","groupsStart","alignStart","groupsSize","groupStart","groupSize","maxGroupElementsSize","maxSize","groupElementsSize","ROWS_SPLIT_REGEX","textbox","_initContainer","rowIdx","rows","textOptions","container","visualBox","visualFn","_boxReflow","visualContext","clippedBBox","normalBox","rotatedBox","transform","rotationTransform","visualOptions","getDefaultVisual","boxCenter","title","buildTitle","defaultOptions","label","context","culture","click","widget","alignRotation","bbox","matrix","rotationMatrix","rotationOrigin","alignAxis","distanceAxis","axisAnchor","topRight","bottomLeft","distanceLeft","distanceRight","alignEnd","alignCenter","transformCopy","fromPoints","labels","majorTickSize","minorTickSize","minorTicks","minorTickType","majorTicks","majorTickType","_deferLabels","createLabels","createTitle","createNotes","mirror","skip","axisCrossingValue","majorGridLines","minorGridLines","reverse","justified","notes","_alignLines","labelsRange","labelsCount","range","labelOptions","autoRotateLabels","createAxisLabel","lineBox","axisX","axisY","lineWidth","titleOptions","visualSize","note","items","data","parseNoteValue","createPlotBands","createLine","gridLinesVisual","gridLines","_gridLines","createTicks","lineGroup","render","tickPositions","skipUnit","count","tickLineOptions","majorUnit","getMajorTickPositions","getMinorTickPositions","minorUnit","_lineGroup","getActualTickSize","tickSize","_backgroundPath","slotX","slotY","from","to","altAxis","plotBands","plotArea","_plotbandGroup","pane","axes","each","bandRect","getSlot","createGridLines","axisLineVisible","linePos","lineOptions","labelSize","sizeFn","titleSize","space","maxLabelSize","rootBox","boxSize","arrangeTitle","arrangeLabels","arrangeNotes","getLabelsTickPositions","labelTickIndex","labelBox","labelY","tickIx","labelPos","firstTickPosition","nextTickPosition","labelX","labelsBetweenTicks","labelOffset","slot","shouldRenderNote","hide","secondAxis","axisLabelText","tmpl","limit","limitRange","rangeSize","icon","marker","noteTemplate","wrapperBox","linePoints","defaultVisual","args","eventArgs","preventDefault","hover","leave","_unsetActivePoint","pointData","getElement","halfWidth","Circle","MultiPath","createElement","seriesMin","seriesMax","initDefaults","startValue","userSetLimits","narrowRange","autoMin","autoAxisMin","autoMax","autoAxisMax","autoOptions","roundToMajorUnit","totalMin","totalMax","totalMajorUnit","narrow","axisMax","axisMin","getDivisions","stepValue","getTickPositions","unit","lineSize","skipStep","divisions","dir","startEdge","positions","p1","p2","valueAxis","slotBox","getValue","valueOffset","translateRange","scaleRange","pan","pointsRange","endValue","zoomRange","newRange","optionsRange","base","logMin","logMax","floorMax","ticks","traverseMajorTicksPositions","tickPosition","traverseMinorTicksPositions","_lineOptions","minorOptions","lineStep","_minorIntervalOptions","minorStep","_throwNegativeValuesError","Error","axisOptions","_autoMax","_autoMin","logMaxRemainder","acceptOptionsRange","acceptNewRange","nextValue","difference","glass","sharpBevel","roundedBevel","roundedGlass","sharpGlass","proto","skipLegacy","exportVisual","exportSVG","exportImage","exportPDF","svg","imageDataURL","Surface","_exportGroup","surface","image","canvas","css","display","appendTo","_rootElement","toDataURL","remove","WEIGHT","EXTREMUM_ALLOWED_DEVIATION","process","dataPoints","p0","controlPoints","initialControlPoint","lastControlPoint","tangent","cp0","cp1","removeDuplicates","Segment","pop","controlOut","firstControlPoint","secondControlPoint","invertAxis","lineFunction","calculateFunction","isLine","monotonic","sign","oldXField","xField","yField","restrict","switchOrientation","allowedDeviation","isMonotonicByField","restrictControlPoint","cp","p3","t1","t2","xValue","yValue","controlPoint"],"mappings":"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","file":"kendo.dataviz.core.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('util/main', ['kendo.core'], f);\n}(function () {\n (function () {\n var math = Math, kendo = window.kendo, deepExtend = kendo.deepExtend;\n var DEG_TO_RAD = math.PI / 180, MAX_NUM = Number.MAX_VALUE, MIN_NUM = -Number.MAX_VALUE, UNDEFINED = 'undefined';\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n function round(value, precision) {\n var power = pow(precision);\n return math.round(value * power) / power;\n }\n function pow(p) {\n if (p) {\n return math.pow(10, p);\n } else {\n return 1;\n }\n }\n function limitValue(value, min, max) {\n return math.max(math.min(value, max), min);\n }\n function rad(degrees) {\n return degrees * DEG_TO_RAD;\n }\n function deg(radians) {\n return radians / DEG_TO_RAD;\n }\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function valueOrDefault(value, defaultValue) {\n return defined(value) ? value : defaultValue;\n }\n function sqr(value) {\n return value * value;\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function hashObject(object) {\n return hashKey(objectKey(object));\n }\n var now = Date.now;\n if (!now) {\n now = function () {\n return new Date().getTime();\n };\n }\n function arrayLimits(arr) {\n var length = arr.length, i, min = MAX_NUM, max = MIN_NUM;\n for (i = 0; i < length; i++) {\n max = math.max(max, arr[i]);\n min = math.min(min, arr[i]);\n }\n return {\n min: min,\n max: max\n };\n }\n function arrayMin(arr) {\n return arrayLimits(arr).min;\n }\n function arrayMax(arr) {\n return arrayLimits(arr).max;\n }\n function sparseArrayMin(arr) {\n return sparseArrayLimits(arr).min;\n }\n function sparseArrayMax(arr) {\n return sparseArrayLimits(arr).max;\n }\n function sparseArrayLimits(arr) {\n var min = MAX_NUM, max = MIN_NUM;\n for (var i = 0, length = arr.length; i < length; i++) {\n var n = arr[i];\n if (n !== null && isFinite(n)) {\n min = math.min(min, n);\n max = math.max(max, n);\n }\n }\n return {\n min: min === MAX_NUM ? undefined : min,\n max: max === MIN_NUM ? undefined : max\n };\n }\n function last(array) {\n if (array) {\n return array[array.length - 1];\n }\n }\n function append(first, second) {\n first.push.apply(first, second);\n return first;\n }\n function renderTemplate(text) {\n return kendo.template(text, {\n useWithBlock: false,\n paramName: 'd'\n });\n }\n function renderAttr(name, value) {\n return defined(value) && value !== null ? ' ' + name + '=\\'' + value + '\\' ' : '';\n }\n function renderAllAttr(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n output += renderAttr(attrs[i][0], attrs[i][1]);\n }\n return output;\n }\n function renderStyle(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n var value = attrs[i][1];\n if (defined(value)) {\n output += attrs[i][0] + ':' + value + ';';\n }\n }\n if (output !== '') {\n return output;\n }\n }\n function renderSize(size) {\n if (typeof size !== 'string') {\n size += 'px';\n }\n return size;\n }\n function renderPos(pos) {\n var result = [];\n if (pos) {\n var parts = kendo.toHyphens(pos).split('-');\n for (var i = 0; i < parts.length; i++) {\n result.push('k-pos-' + parts[i]);\n }\n }\n return result.join(' ');\n }\n function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n function arabicToRoman(n) {\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n function romanToArabic(r) {\n r = r.toLowerCase();\n var digits = {\n i: 1,\n v: 5,\n x: 10,\n l: 50,\n c: 100,\n d: 500,\n m: 1000\n };\n var value = 0, prev = 0;\n for (var i = 0; i < r.length; ++i) {\n var v = digits[r.charAt(i)];\n if (!v) {\n return null;\n }\n value += v;\n if (v > prev) {\n value -= 2 * prev;\n }\n prev = v;\n }\n return value;\n }\n function memoize(f) {\n var cache = Object.create(null);\n return function () {\n var id = '';\n for (var i = arguments.length; --i >= 0;) {\n id += ':' + arguments[i];\n }\n if (id in cache) {\n return cache[id];\n }\n return f.apply(this, arguments);\n };\n }\n function ucs2decode(string) {\n var output = [], counter = 0, length = string.length, value, extra;\n while (counter < length) {\n value = string.charCodeAt(counter++);\n if (value >= 55296 && value <= 56319 && counter < length) {\n extra = string.charCodeAt(counter++);\n if ((extra & 64512) == 56320) {\n output.push(((value & 1023) << 10) + (extra & 1023) + 65536);\n } else {\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n }\n function ucs2encode(array) {\n return array.map(function (value) {\n var output = '';\n if (value > 65535) {\n value -= 65536;\n output += String.fromCharCode(value >>> 10 & 1023 | 55296);\n value = 56320 | value & 1023;\n }\n output += String.fromCharCode(value);\n return output;\n }).join('');\n }\n deepExtend(kendo, {\n util: {\n MAX_NUM: MAX_NUM,\n MIN_NUM: MIN_NUM,\n append: append,\n arrayLimits: arrayLimits,\n arrayMin: arrayMin,\n arrayMax: arrayMax,\n defined: defined,\n deg: deg,\n hashKey: hashKey,\n hashObject: hashObject,\n isNumber: isNumber,\n isTransparent: isTransparent,\n last: last,\n limitValue: limitValue,\n now: now,\n objectKey: objectKey,\n round: round,\n rad: rad,\n renderAttr: renderAttr,\n renderAllAttr: renderAllAttr,\n renderPos: renderPos,\n renderSize: renderSize,\n renderStyle: renderStyle,\n renderTemplate: renderTemplate,\n sparseArrayLimits: sparseArrayLimits,\n sparseArrayMin: sparseArrayMin,\n sparseArrayMax: sparseArrayMax,\n sqr: sqr,\n valueOrDefault: valueOrDefault,\n romanToArabic: romanToArabic,\n arabicToRoman: arabicToRoman,\n memoize: memoize,\n ucs2encode: ucs2encode,\n ucs2decode: ucs2decode\n }\n });\n kendo.drawing.util = kendo.util;\n kendo.dataviz.util = kendo.util;\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/text-metrics', [\n 'kendo.core',\n 'util/main'\n ], f);\n}(function () {\n (function ($) {\n var doc = document, kendo = window.kendo, Class = kendo.Class, util = kendo.util, defined = util.defined;\n var LRUCache = Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var lru = this, map = lru._map, entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!lru._head) {\n lru._head = lru._tail = entry;\n } else {\n lru._tail.newer = entry;\n entry.older = lru._tail;\n lru._tail = entry;\n }\n if (lru._length >= lru._size) {\n map[lru._head.key] = null;\n lru._head = lru._head.newer;\n lru._head.older = null;\n } else {\n lru._length++;\n }\n },\n get: function (key) {\n var lru = this, entry = lru._map[key];\n if (entry) {\n if (entry === lru._head && entry !== lru._tail) {\n lru._head = entry.newer;\n lru._head.older = null;\n }\n if (entry !== lru._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = lru._tail;\n entry.newer = null;\n lru._tail.newer = entry;\n lru._tail = entry;\n }\n return entry.value;\n }\n }\n });\n var defaultMeasureBox = $('
')[0];\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var TextMetrics = Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this._initOptions(options);\n },\n options: { baselineMarkerSize: 1 },\n measure: function (text, style, box) {\n if (!text) {\n return zeroSize();\n }\n var styleKey = util.objectKey(style), cacheKey = util.hashKey(text + styleKey), cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = box ? box : defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (defined(value)) {\n measureBox.style[key] = value;\n }\n }\n $(measureBox).text(text);\n measureBox.appendChild(baselineMarker);\n doc.body.appendChild(measureBox);\n if ((text + '').length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n return $('')[0];\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n function loadFonts(fonts, callback) {\n var promises = [];\n if (fonts.length > 0 && document.fonts) {\n try {\n promises = fonts.map(function (font) {\n return document.fonts.load(font);\n });\n } catch (e) {\n kendo.logToConsole(e);\n }\n Promise.all(promises).then(callback, callback);\n } else {\n callback();\n }\n }\n kendo.util.TextMetrics = TextMetrics;\n kendo.util.LRUCache = LRUCache;\n kendo.util.loadFonts = loadFonts;\n kendo.util.measureText = measureText;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/base64', ['util/main'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, deepExtend = kendo.deepExtend, fromCharCode = String.fromCharCode;\n var KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n function encodeBase64(input) {\n var output = '';\n var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n var i = 0;\n input = encodeUTF8(input);\n while (i < input.length) {\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n enc1 = chr1 >> 2;\n enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n enc4 = chr3 & 63;\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n output = output + KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) + KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n return output;\n }\n function encodeUTF8(input) {\n var output = '';\n for (var i = 0; i < input.length; i++) {\n var c = input.charCodeAt(i);\n if (c < 128) {\n output += fromCharCode(c);\n } else if (c < 2048) {\n output += fromCharCode(192 | c >>> 6);\n output += fromCharCode(128 | c & 63);\n } else if (c < 65536) {\n output += fromCharCode(224 | c >>> 12);\n output += fromCharCode(128 | c >>> 6 & 63);\n output += fromCharCode(128 | c & 63);\n }\n }\n return output;\n }\n deepExtend(kendo.util, {\n encodeBase64: encodeBase64,\n encodeUTF8: encodeUTF8\n });\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('mixins/observers', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var math = Math, kendo = window.kendo, deepExtend = kendo.deepExtend, inArray = $.inArray;\n var ObserversMixin = {\n observers: function () {\n this._observers = this._observers || [];\n return this._observers;\n },\n addObserver: function (element) {\n if (!this._observers) {\n this._observers = [element];\n } else {\n this._observers.push(element);\n }\n return this;\n },\n removeObserver: function (element) {\n var observers = this.observers();\n var index = inArray(element, observers);\n if (index != -1) {\n observers.splice(index, 1);\n }\n return this;\n },\n trigger: function (methodName, event) {\n var observers = this._observers;\n var observer;\n var idx;\n if (observers && !this._suspended) {\n for (idx = 0; idx < observers.length; idx++) {\n observer = observers[idx];\n if (observer[methodName]) {\n observer[methodName](event);\n }\n }\n }\n return this;\n },\n optionsChange: function (e) {\n e = e || {};\n e.element = this;\n this.trigger('optionsChange', e);\n },\n geometryChange: function () {\n this.trigger('geometryChange', { element: this });\n },\n suspend: function () {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n },\n resume: function () {\n this._suspended = math.max((this._suspended || 0) - 1, 0);\n return this;\n },\n _observerField: function (field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n }\n };\n deepExtend(kendo, { mixins: { ObserversMixin: ObserversMixin } });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.core', [\n 'kendo.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.core',\n name: 'Core',\n description: 'The DataViz core functions',\n category: 'dataviz',\n depends: [\n 'core',\n 'drawing'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, util = kendo.util, append = util.append, defined = util.defined, last = util.last, valueOrDefault = util.valueOrDefault, dataviz = kendo.dataviz, geom = dataviz.geometry, draw = dataviz.drawing, measureText = draw.util.measureText, Class = kendo.Class, template = kendo.template, noop = $.noop, indexOf = $.inArray, isPlainObject = $.isPlainObject, trim = $.trim, math = Math, deepExtend = kendo.deepExtend;\n var AXIS_LABEL_CLICK = 'axisLabelClick', BLACK = '#000', BOTTOM = 'bottom', CENTER = 'center', COORD_PRECISION = 3, CLIP = 'clip', CIRCLE = 'circle', CROSS = 'cross', DEFAULT_FONT = '12px sans-serif', DEFAULT_HEIGHT = 400, DEFAULT_ICON_SIZE = 7, DEFAULT_PRECISION = 10, DEFAULT_WIDTH = 600, DEG_TO_RAD = math.PI / 180, FORMAT_REGEX = /\\{\\d+:?/, HEIGHT = 'height', COORDINATE_LIMIT = 100000, INITIAL_ANIMATION_DURATION = 600, INSIDE = 'inside', LEFT = 'left', LINEAR = 'linear', MAX_VALUE = Number.MAX_VALUE, MIN_VALUE = -Number.MAX_VALUE, NONE = 'none', NOTE_CLICK = 'noteClick', NOTE_HOVER = 'noteHover', OUTSIDE = 'outside', RADIAL = 'radial', RIGHT = 'right', TOP = 'top', TRIANGLE = 'triangle', WIDTH = 'width', WHITE = '#fff', X = 'x', Y = 'y', ZERO_THRESHOLD = 0.2;\n function getSpacing(value, defaultSpacing) {\n var spacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n defaultSpacing = defaultSpacing || 0;\n if (typeof value === 'number') {\n spacing[TOP] = spacing[RIGHT] = spacing[BOTTOM] = spacing[LEFT] = value;\n } else {\n spacing[TOP] = value[TOP] || defaultSpacing;\n spacing[RIGHT] = value[RIGHT] || defaultSpacing;\n spacing[BOTTOM] = value[BOTTOM] || defaultSpacing;\n spacing[LEFT] = value[LEFT] || defaultSpacing;\n }\n return spacing;\n }\n var Point2D = function (x, y) {\n var point = this;\n if (!(point instanceof Point2D)) {\n return new Point2D(x, y);\n }\n point.x = x || 0;\n point.y = y || 0;\n };\n Point2D.fn = Point2D.prototype = {\n clone: function () {\n var point = this;\n return new Point2D(point.x, point.y);\n },\n equals: function (point) {\n return point && point.x === this.x && point.y === this.y;\n },\n rotate: function (center, degrees) {\n var point = this, theta = degrees * DEG_TO_RAD, cosT = math.cos(theta), sinT = math.sin(theta), cx = center.x, cy = center.y, x = point.x, y = point.y;\n point.x = round(cx + (x - cx) * cosT + (y - cy) * sinT, COORD_PRECISION);\n point.y = round(cy + (y - cy) * cosT - (x - cx) * sinT, COORD_PRECISION);\n return point;\n },\n multiply: function (a) {\n var point = this;\n point.x *= a;\n point.y *= a;\n return point;\n },\n distanceTo: function (point) {\n var dx = this.x - point.x, dy = this.y - point.y;\n return math.sqrt(dx * dx + dy * dy);\n }\n };\n Point2D.onCircle = function (c, a, r) {\n a *= DEG_TO_RAD;\n return new Point2D(c.x - r * math.cos(a), c.y - r * math.sin(a));\n };\n var Box2D = function (x1, y1, x2, y2) {\n var box = this;\n if (!(box instanceof Box2D)) {\n return new Box2D(x1, y1, x2, y2);\n }\n box.x1 = x1 || 0;\n box.x2 = x2 || 0;\n box.y1 = y1 || 0;\n box.y2 = y2 || 0;\n };\n Box2D.fn = Box2D.prototype = {\n width: function () {\n return this.x2 - this.x1;\n },\n height: function () {\n return this.y2 - this.y1;\n },\n translate: function (dx, dy) {\n var box = this;\n box.x1 += dx;\n box.x2 += dx;\n box.y1 += dy;\n box.y2 += dy;\n return box;\n },\n move: function (x, y) {\n var box = this, height = box.height(), width = box.width();\n if (defined(x)) {\n box.x1 = x;\n box.x2 = box.x1 + width;\n }\n if (defined(y)) {\n box.y1 = y;\n box.y2 = box.y1 + height;\n }\n return box;\n },\n wrap: function (targetBox) {\n var box = this;\n box.x1 = math.min(box.x1, targetBox.x1);\n box.y1 = math.min(box.y1, targetBox.y1);\n box.x2 = math.max(box.x2, targetBox.x2);\n box.y2 = math.max(box.y2, targetBox.y2);\n return box;\n },\n wrapPoint: function (point) {\n this.wrap(new Box2D(point.x, point.y, point.x, point.y));\n return this;\n },\n snapTo: function (targetBox, axis) {\n var box = this;\n if (axis == X || !axis) {\n box.x1 = targetBox.x1;\n box.x2 = targetBox.x2;\n }\n if (axis == Y || !axis) {\n box.y1 = targetBox.y1;\n box.y2 = targetBox.y2;\n }\n return box;\n },\n alignTo: function (targetBox, anchor) {\n var box = this, height = box.height(), width = box.width(), axis = anchor == TOP || anchor == BOTTOM ? Y : X, offset = axis == Y ? height : width;\n if (anchor === CENTER) {\n var targetCenter = targetBox.center();\n var center = box.center();\n box.x1 += targetCenter.x - center.x;\n box.y1 += targetCenter.y - center.y;\n } else if (anchor === TOP || anchor === LEFT) {\n box[axis + 1] = targetBox[axis + 1] - offset;\n } else {\n box[axis + 1] = targetBox[axis + 2];\n }\n box.x2 = box.x1 + width;\n box.y2 = box.y1 + height;\n return box;\n },\n shrink: function (dw, dh) {\n var box = this;\n box.x2 -= dw;\n box.y2 -= dh;\n return box;\n },\n expand: function (dw, dh) {\n this.shrink(-dw, -dh);\n return this;\n },\n pad: function (padding) {\n var box = this, spacing = getSpacing(padding);\n box.x1 -= spacing.left;\n box.x2 += spacing.right;\n box.y1 -= spacing.top;\n box.y2 += spacing.bottom;\n return box;\n },\n unpad: function (padding) {\n var box = this, spacing = getSpacing(padding);\n spacing.left = -spacing.left;\n spacing.top = -spacing.top;\n spacing.right = -spacing.right;\n spacing.bottom = -spacing.bottom;\n return box.pad(spacing);\n },\n clone: function () {\n var box = this;\n return new Box2D(box.x1, box.y1, box.x2, box.y2);\n },\n center: function () {\n var box = this;\n return new Point2D(box.x1 + box.width() / 2, box.y1 + box.height() / 2);\n },\n containsPoint: function (point) {\n var box = this;\n return point.x >= box.x1 && point.x <= box.x2 && point.y >= box.y1 && point.y <= box.y2;\n },\n points: function () {\n var box = this;\n return [\n new Point2D(box.x1, box.y1),\n new Point2D(box.x2, box.y1),\n new Point2D(box.x2, box.y2),\n new Point2D(box.x1, box.y2)\n ];\n },\n getHash: function () {\n var box = this;\n return [\n box.x1,\n box.y1,\n box.x2,\n box.y2\n ].join(',');\n },\n overlaps: function (box) {\n return !(box.y2 < this.y1 || this.y2 < box.y1 || box.x2 < this.x1 || this.x2 < box.x1);\n },\n rotate: function (rotation) {\n var box = this;\n var width = box.width();\n var height = box.height();\n var center = box.center();\n var cx = center.x;\n var cy = center.y;\n var r1 = rotatePoint(0, 0, cx, cy, rotation);\n var r2 = rotatePoint(width, 0, cx, cy, rotation);\n var r3 = rotatePoint(width, height, cx, cy, rotation);\n var r4 = rotatePoint(0, height, cx, cy, rotation);\n width = math.max(r1.x, r2.x, r3.x, r4.x) - math.min(r1.x, r2.x, r3.x, r4.x);\n height = math.max(r1.y, r2.y, r3.y, r4.y) - math.min(r1.y, r2.y, r3.y, r4.y);\n box.x2 = box.x1 + width;\n box.y2 = box.y1 + height;\n return box;\n },\n toRect: function () {\n return new geom.Rect([\n this.x1,\n this.y1\n ], [\n this.width(),\n this.height()\n ]);\n },\n hasSize: function () {\n return this.width() !== 0 && this.height() !== 0;\n },\n align: function (targetBox, axis, alignment) {\n var box = this, c1 = axis + 1, c2 = axis + 2, sizeFunc = axis === X ? WIDTH : HEIGHT, size = box[sizeFunc]();\n if (inArray(alignment, [\n LEFT,\n TOP\n ])) {\n box[c1] = targetBox[c1];\n box[c2] = box[c1] + size;\n } else if (inArray(alignment, [\n RIGHT,\n BOTTOM\n ])) {\n box[c2] = targetBox[c2];\n box[c1] = box[c2] - size;\n } else if (alignment == CENTER) {\n box[c1] = targetBox[c1] + (targetBox[sizeFunc]() - size) / 2;\n box[c2] = box[c1] + size;\n }\n }\n };\n var Ring = Class.extend({\n init: function (center, innerRadius, radius, startAngle, angle) {\n var ring = this;\n ring.c = center;\n ring.ir = innerRadius;\n ring.r = radius;\n ring.startAngle = startAngle;\n ring.angle = angle;\n },\n clone: function () {\n var r = this;\n return new Ring(r.c, r.ir, r.r, r.startAngle, r.angle);\n },\n middle: function () {\n return this.startAngle + this.angle / 2;\n },\n radius: function (newRadius, innerRadius) {\n var that = this;\n if (innerRadius) {\n that.ir = newRadius;\n } else {\n that.r = newRadius;\n }\n return that;\n },\n point: function (angle, innerRadius) {\n var ring = this, radianAngle = angle * DEG_TO_RAD, ax = math.cos(radianAngle), ay = math.sin(radianAngle), radius = innerRadius ? ring.ir : ring.r, x = round(ring.c.x - ax * radius, COORD_PRECISION), y = round(ring.c.y - ay * radius, COORD_PRECISION);\n return new Point2D(x, y);\n },\n adjacentBox: function (distance, width, height) {\n var sector = this.clone().expand(distance), midAndle = sector.middle(), midPoint = sector.point(midAndle), hw = width / 2, hh = height / 2, x = midPoint.x - hw, y = midPoint.y - hh, sa = math.sin(midAndle * DEG_TO_RAD), ca = math.cos(midAndle * DEG_TO_RAD);\n if (math.abs(sa) < 0.9) {\n x += hw * -ca / math.abs(ca);\n }\n if (math.abs(ca) < 0.9) {\n y += hh * -sa / math.abs(sa);\n }\n return new Box2D(x, y, x + width, y + height);\n },\n containsPoint: function (p) {\n var ring = this, c = ring.c, ir = ring.ir, r = ring.r, startAngle = ring.startAngle, endAngle = ring.startAngle + ring.angle, dx = p.x - c.x, dy = p.y - c.y, vector = new Point2D(dx, dy), startPoint = ring.point(startAngle), startVector = new Point2D(startPoint.x - c.x, startPoint.y - c.y), endPoint = ring.point(endAngle), endVector = new Point2D(endPoint.x - c.x, endPoint.y - c.y), dist = round(dx * dx + dy * dy, COORD_PRECISION);\n return (startVector.equals(vector) || clockwise(startVector, vector)) && !clockwise(endVector, vector) && dist >= ir * ir && dist <= r * r;\n },\n getBBox: function () {\n var ring = this, box = new Box2D(MAX_VALUE, MAX_VALUE, MIN_VALUE, MIN_VALUE), sa = round(ring.startAngle % 360), ea = round((sa + ring.angle) % 360), innerRadius = ring.ir, allAngles = [\n 0,\n 90,\n 180,\n 270,\n sa,\n ea\n ].sort(numericComparer), saIndex = indexOf(sa, allAngles), eaIndex = indexOf(ea, allAngles), angles, i, point;\n if (sa == ea) {\n angles = allAngles;\n } else {\n if (saIndex < eaIndex) {\n angles = allAngles.slice(saIndex, eaIndex + 1);\n } else {\n angles = [].concat(allAngles.slice(0, eaIndex + 1), allAngles.slice(saIndex, allAngles.length));\n }\n }\n for (i = 0; i < angles.length; i++) {\n point = ring.point(angles[i]);\n box.wrapPoint(point);\n box.wrapPoint(point, innerRadius);\n }\n if (!innerRadius) {\n box.wrapPoint(ring.c);\n }\n return box;\n },\n expand: function (value) {\n this.r += value;\n return this;\n }\n });\n var Sector = Ring.extend({\n init: function (center, radius, startAngle, angle) {\n Ring.fn.init.call(this, center, 0, radius, startAngle, angle);\n },\n expand: function (value) {\n return Ring.fn.expand.call(this, value);\n },\n clone: function () {\n var sector = this;\n return new Sector(sector.c, sector.r, sector.startAngle, sector.angle);\n },\n radius: function (newRadius) {\n return Ring.fn.radius.call(this, newRadius);\n },\n point: function (angle) {\n return Ring.fn.point.call(this, angle);\n }\n });\n var ShapeBuilder = function () {\n };\n ShapeBuilder.fn = ShapeBuilder.prototype = {\n createRing: function (sector, options) {\n var startAngle = sector.startAngle + 180;\n var endAngle = sector.angle + startAngle;\n var center = new geom.Point(sector.c.x, sector.c.y);\n var radius = math.max(sector.r, 0);\n var innerRadius = math.max(sector.ir, 0);\n var arc = new geom.Arc(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radius,\n radiusY: radius\n });\n var path = draw.Path.fromArc(arc, options).close();\n if (innerRadius) {\n arc.radiusX = arc.radiusY = innerRadius;\n var innerEnd = arc.pointAt(endAngle);\n path.lineTo(innerEnd.x, innerEnd.y);\n path.arc(endAngle, startAngle, innerRadius, innerRadius, true);\n } else {\n path.lineTo(center.x, center.y);\n }\n return path;\n }\n };\n ShapeBuilder.current = new ShapeBuilder();\n var ChartElement = Class.extend({\n init: function (options) {\n var element = this;\n element.children = [];\n element.options = deepExtend({}, element.options, options);\n },\n reflow: function (targetBox) {\n var element = this, children = element.children, box, i, currentChild;\n for (i = 0; i < children.length; i++) {\n currentChild = children[i];\n currentChild.reflow(targetBox);\n box = box ? box.wrap(currentChild.box) : currentChild.box.clone();\n }\n element.box = box || targetBox;\n },\n destroy: function () {\n var element = this, children = element.children, i;\n if (this.animation) {\n this.animation.destroy();\n }\n for (i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n },\n getRoot: function () {\n var parent = this.parent;\n return parent ? parent.getRoot() : null;\n },\n getChart: function () {\n var root = this.getRoot();\n if (root) {\n return root.chart;\n }\n },\n translateChildren: function (dx, dy) {\n var element = this, children = element.children, childrenCount = children.length, i;\n for (i = 0; i < childrenCount; i++) {\n children[i].box.translate(dx, dy);\n }\n },\n append: function () {\n append(this.children, arguments);\n for (var i = 0; i < arguments.length; i++) {\n arguments[i].parent = this;\n }\n },\n renderVisual: function () {\n if (this.options.visible === false) {\n return;\n }\n this.createVisual();\n this.addVisual();\n this.renderChildren();\n this.createAnimation();\n this.renderComplete();\n },\n addVisual: function () {\n if (this.visual) {\n this.visual.chartElement = this;\n if (this.parent) {\n this.parent.appendVisual(this.visual);\n }\n }\n },\n renderChildren: function () {\n var children = this.children;\n for (var i = 0; i < children.length; i++) {\n children[i].renderVisual();\n }\n },\n createVisual: function () {\n this.visual = new dataviz.drawing.Group({\n zIndex: this.options.zIndex,\n visible: valueOrDefault(this.options.visible, true)\n });\n },\n createAnimation: function () {\n if (this.visual) {\n this.animation = draw.Animation.create(this.visual, this.options.animation);\n }\n },\n appendVisual: function (childVisual) {\n if (!childVisual.chartElement) {\n childVisual.chartElement = this;\n }\n if (childVisual.options.noclip) {\n this.clipRoot().visual.append(childVisual);\n } else if (defined(childVisual.options.zIndex)) {\n this.stackRoot().stackVisual(childVisual);\n } else if (this.visual) {\n this.visual.append(childVisual);\n } else {\n this.parent.appendVisual(childVisual);\n }\n },\n clipRoot: function () {\n if (this.parent) {\n return this.parent.clipRoot();\n }\n return this;\n },\n stackRoot: function () {\n if (this.parent) {\n return this.parent.stackRoot();\n }\n return this;\n },\n stackVisual: function (childVisual) {\n var zIndex = childVisual.options.zIndex || 0;\n var visuals = this.visual.children;\n for (var pos = 0; pos < visuals.length; pos++) {\n var sibling = visuals[pos];\n var here = valueOrDefault(sibling.options.zIndex, 0);\n if (here > zIndex) {\n break;\n }\n }\n this.visual.insertAt(childVisual, pos);\n },\n traverse: function (callback) {\n var children = this.children;\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n callback(child);\n if (child.traverse) {\n child.traverse(callback);\n }\n }\n },\n closest: function (match) {\n var element = this;\n var matched = false;\n while (element && !matched) {\n matched = match(element);\n if (!matched) {\n element = element.parent;\n }\n }\n if (matched) {\n return element;\n }\n },\n renderComplete: $.noop,\n hasHighlight: function () {\n var options = (this.options || {}).highlight;\n return !(!this.createHighlight || options && options.visible === false);\n },\n toggleHighlight: function (show) {\n var that = this;\n var highlight = that._highlight;\n var options = (that.options || {}).highlight;\n var customVisual = (options || {}).visual;\n if (!highlight) {\n var highlightOptions = {\n fill: {\n color: WHITE,\n opacity: 0.2\n },\n stroke: {\n color: WHITE,\n width: 1,\n opacity: 0.2\n }\n };\n if (customVisual) {\n highlight = that._highlight = customVisual($.extend(that.highlightVisualArgs(), {\n createVisual: function () {\n return that.createHighlight(highlightOptions);\n },\n sender: that.getChart(),\n series: that.series,\n dataItem: that.dataItem,\n category: that.category,\n value: that.value,\n percentage: that.percentage,\n runningTotal: that.runningTotal,\n total: that.total\n }));\n if (!highlight) {\n return;\n }\n } else {\n highlight = that._highlight = that.createHighlight(highlightOptions);\n }\n highlight.options.zIndex = that.options.zIndex;\n that.appendVisual(highlight);\n }\n highlight.visible(show);\n },\n createGradientOverlay: function (element, options, gradientOptions) {\n var overlay = new draw.Path(deepExtend({\n stroke: { color: NONE },\n fill: this.createGradient(gradientOptions),\n closed: element.options.closed\n }, options));\n overlay.segments.elements(element.segments.elements());\n return overlay;\n },\n createGradient: function (options) {\n if (this.parent) {\n return this.parent.createGradient(options);\n }\n }\n });\n var RootElement = ChartElement.extend({\n init: function (options) {\n var root = this;\n root.gradients = {};\n ChartElement.fn.init.call(root, options);\n },\n options: {\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT,\n background: WHITE,\n border: {\n color: BLACK,\n width: 0\n },\n margin: getSpacing(5),\n zIndex: -2\n },\n reflow: function () {\n var root = this, options = root.options, children = root.children, currentBox = new Box2D(0, 0, options.width, options.height);\n root.box = currentBox.unpad(options.margin);\n for (var i = 0; i < children.length; i++) {\n children[i].reflow(currentBox);\n currentBox = boxDiff(currentBox, children[i].box) || Box2D();\n }\n },\n createVisual: function () {\n this.visual = new draw.Group();\n this.createBackground();\n },\n createBackground: function () {\n var options = this.options;\n var border = options.border || {};\n var box = this.box.clone().pad(options.margin).unpad(border.width);\n var background = draw.Path.fromRect(box.toRect(), {\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n zIndex: -10\n });\n this.visual.append(background);\n },\n getRoot: function () {\n return this;\n },\n createGradient: function (options) {\n var gradients = this.gradients;\n var hashCode = util.objectKey(options);\n var gradient = dataviz.Gradients[options.gradient];\n var drawingGradient;\n if (gradients[hashCode]) {\n drawingGradient = gradients[hashCode];\n } else {\n var gradientOptions = deepExtend({}, gradient, options);\n if (gradient.type == 'linear') {\n drawingGradient = new draw.LinearGradient(gradientOptions);\n } else {\n if (options.innerRadius) {\n gradientOptions.stops = innerRadialStops(gradientOptions);\n }\n drawingGradient = new draw.RadialGradient(gradientOptions);\n drawingGradient.supportVML = gradient.supportVML !== false;\n }\n gradients[hashCode] = drawingGradient;\n }\n return drawingGradient;\n }\n });\n var BoxElement = ChartElement.extend({\n options: {\n align: LEFT,\n vAlign: TOP,\n margin: {},\n padding: {},\n border: {\n color: BLACK,\n width: 0\n },\n background: '',\n shrinkToFit: false,\n width: 0,\n height: 0,\n visible: true\n },\n reflow: function (targetBox) {\n var element = this, box, contentBox, options = element.options, width = options.width, height = options.height, hasSetSize = width && height, shrinkToFit = options.shrinkToFit, margin = getSpacing(options.margin), padding = getSpacing(options.padding), borderWidth = options.border.width, children = element.children, i, item;\n function reflowPaddingBox() {\n element.align(targetBox, X, options.align);\n element.align(targetBox, Y, options.vAlign);\n element.paddingBox = box.clone().unpad(margin).unpad(borderWidth);\n }\n contentBox = targetBox.clone();\n if (hasSetSize) {\n contentBox.x2 = contentBox.x1 + width;\n contentBox.y2 = contentBox.y1 + height;\n }\n if (shrinkToFit) {\n contentBox.unpad(margin).unpad(borderWidth).unpad(padding);\n }\n ChartElement.fn.reflow.call(element, contentBox);\n if (hasSetSize) {\n box = element.box = Box2D(0, 0, width, height);\n } else {\n box = element.box;\n }\n if (shrinkToFit && hasSetSize) {\n reflowPaddingBox();\n contentBox = element.contentBox = element.paddingBox.clone().unpad(padding);\n } else {\n contentBox = element.contentBox = box.clone();\n box.pad(padding).pad(borderWidth).pad(margin);\n reflowPaddingBox();\n }\n element.translateChildren(box.x1 - contentBox.x1 + margin.left + borderWidth + padding.left, box.y1 - contentBox.y1 + margin.top + borderWidth + padding.top);\n for (i = 0; i < children.length; i++) {\n item = children[i];\n item.reflow(item.box);\n }\n },\n align: function (targetBox, axis, alignment) {\n this.box.align(targetBox, axis, alignment);\n },\n hasBox: function () {\n var options = this.options;\n return options.border.width || options.background;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options;\n if (options.visible && this.hasBox()) {\n this.visual.append(draw.Path.fromRect(this.paddingBox.toRect(), this.visualStyle()));\n }\n },\n visualStyle: function () {\n var boxElement = this, options = boxElement.options, border = options.border || {};\n return {\n stroke: {\n width: border.width,\n color: border.color,\n opacity: valueOrDefault(border.opacity, options.opacity),\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n cursor: options.cursor\n };\n }\n });\n var Text = ChartElement.extend({\n init: function (content, options) {\n var text = this;\n ChartElement.fn.init.call(text, options);\n text.content = content;\n text.reflow(Box2D());\n },\n options: {\n font: DEFAULT_FONT,\n color: BLACK,\n align: LEFT,\n vAlign: ''\n },\n reflow: function (targetBox) {\n var text = this, options = text.options, size;\n size = options.size = measureText(text.content, { font: options.font });\n text.baseline = size.baseline;\n text.box = Box2D(targetBox.x1, targetBox.y1, targetBox.x1 + size.width, targetBox.y1 + size.height);\n },\n createVisual: function () {\n var opt = this.options;\n this.visual = new draw.Text(this.content, this.box.toRect().topLeft(), {\n font: opt.font,\n fill: {\n color: opt.color,\n opacity: opt.opacity\n },\n cursor: opt.cursor\n });\n }\n });\n var FloatElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this._initDirection();\n },\n _initDirection: function () {\n var options = this.options;\n if (options.vertical) {\n this.groupAxis = X;\n this.elementAxis = Y;\n this.groupSizeField = WIDTH;\n this.elementSizeField = HEIGHT;\n this.groupSpacing = options.spacing;\n this.elementSpacing = options.vSpacing;\n } else {\n this.groupAxis = Y;\n this.elementAxis = X;\n this.groupSizeField = HEIGHT;\n this.elementSizeField = WIDTH;\n this.groupSpacing = options.vSpacing;\n this.elementSpacing = options.spacing;\n }\n },\n options: {\n vertical: true,\n wrap: true,\n vSpacing: 0,\n spacing: 0\n },\n reflow: function (targetBox) {\n this.box = targetBox.clone();\n this.reflowChildren();\n },\n reflowChildren: function () {\n var floatElement = this;\n var box = floatElement.box;\n var elementAxis = floatElement.elementAxis;\n var groupAxis = floatElement.groupAxis;\n var elementSizeField = floatElement.elementSizeField;\n var groupSizeField = floatElement.groupSizeField;\n var groupOptions = floatElement.groupOptions();\n var groups = groupOptions.groups;\n var groupsCount = groups.length;\n var groupsStart = box[groupAxis + 1] + floatElement.alignStart(groupOptions.groupsSize, box[groupSizeField]());\n var groupStart = groupsStart;\n var elementStart;\n var groupElementStart;\n var group;\n var groupElements;\n var groupElementsCount;\n var idx;\n var groupIdx;\n var element;\n var elementBox;\n var elementSize;\n if (groupsCount) {\n for (groupIdx = 0; groupIdx < groupsCount; groupIdx++) {\n group = groups[groupIdx];\n groupElements = group.groupElements;\n groupElementsCount = groupElements.length;\n elementStart = box[elementAxis + 1];\n for (idx = 0; idx < groupElementsCount; idx++) {\n element = groupElements[idx];\n elementSize = floatElement.elementSize(element);\n groupElementStart = groupStart + floatElement.alignStart(elementSize[groupSizeField], group.groupSize);\n elementBox = Box2D();\n elementBox[groupAxis + 1] = groupElementStart;\n elementBox[groupAxis + 2] = groupElementStart + elementSize[groupSizeField];\n elementBox[elementAxis + 1] = elementStart;\n elementBox[elementAxis + 2] = elementStart + elementSize[elementSizeField];\n element.reflow(elementBox);\n elementStart += elementSize[elementSizeField] + floatElement.elementSpacing;\n }\n groupStart += group.groupSize + floatElement.groupSpacing;\n }\n box[groupAxis + 1] = groupsStart;\n box[groupAxis + 2] = groupsStart + groupOptions.groupsSize;\n box[elementAxis + 2] = box[elementAxis + 1] + groupOptions.maxGroupElementsSize;\n }\n },\n alignStart: function (size, maxSize) {\n var start = 0;\n var align = this.options.align;\n if (align == RIGHT || align == BOTTOM) {\n start = maxSize - size;\n } else if (align == CENTER) {\n start = (maxSize - size) / 2;\n }\n return start;\n },\n groupOptions: function () {\n var floatElement = this;\n var box = floatElement.box;\n var children = floatElement.children;\n var childrenCount = children.length;\n var elementSizeField = this.elementSizeField;\n var groupSizeField = this.groupSizeField;\n var elementSpacing = this.elementSpacing;\n var groupSpacing = this.groupSpacing;\n var maxSize = round(box[elementSizeField]());\n var idx = 0;\n var groupSize = 0;\n var elementSize;\n var element;\n var groupElementsSize = 0;\n var groupsSize = 0;\n var groups = [];\n var groupElements = [];\n var maxGroupElementsSize = 0;\n for (idx = 0; idx < childrenCount; idx++) {\n element = children[idx];\n if (!element.box) {\n element.reflow(box);\n }\n elementSize = this.elementSize(element);\n if (floatElement.options.wrap && round(groupElementsSize + elementSpacing + elementSize[elementSizeField]) > maxSize) {\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSpacing + groupSize;\n groupSize = 0;\n groupElementsSize = 0;\n groupElements = [];\n }\n groupSize = math.max(groupSize, elementSize[groupSizeField]);\n if (groupElementsSize > 0) {\n groupElementsSize += elementSpacing;\n }\n groupElementsSize += elementSize[elementSizeField];\n groupElements.push(element);\n }\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSize;\n return {\n groups: groups,\n groupsSize: groupsSize,\n maxGroupElementsSize: maxGroupElementsSize\n };\n },\n elementSize: function (element) {\n return {\n width: element.box.width(),\n height: element.box.height()\n };\n },\n createVisual: noop\n });\n var TextBox = BoxElement.extend({\n ROWS_SPLIT_REGEX: /\\n|\\\\n/m,\n init: function (content, options) {\n var textbox = this;\n textbox.content = content;\n BoxElement.fn.init.call(textbox, options);\n textbox._initContainer();\n textbox.reflow(Box2D());\n },\n _initContainer: function () {\n var textbox = this;\n var options = textbox.options;\n var rows = (textbox.content + '').split(textbox.ROWS_SPLIT_REGEX);\n var floatElement = new FloatElement({\n vertical: true,\n align: options.align,\n wrap: false\n });\n var textOptions = deepExtend({}, options, {\n opacity: 1,\n animation: null\n });\n var text;\n var rowIdx;\n textbox.container = floatElement;\n textbox.append(floatElement);\n for (rowIdx = 0; rowIdx < rows.length; rowIdx++) {\n text = new Text(trim(rows[rowIdx]), textOptions);\n floatElement.append(text);\n }\n },\n reflow: function (targetBox) {\n var options = this.options;\n var visualFn = options.visual;\n this.container.options.align = options.align;\n if (visualFn && !this._boxReflow) {\n if (!targetBox.hasSize()) {\n this._boxReflow = true;\n this.reflow(targetBox);\n this._boxReflow = false;\n targetBox = this.box;\n }\n this.visual = visualFn(this.visualContext(targetBox));\n var visualBox = targetBox;\n if (this.visual) {\n visualBox = rectToBox(this.visual.clippedBBox() || new geom.Rect());\n this.visual.options.zIndex = options.zIndex;\n this.visual.options.noclip = options.noclip;\n }\n this.box = this.contentBox = this.paddingBox = visualBox;\n } else {\n BoxElement.fn.reflow.call(this, targetBox);\n if (options.rotation) {\n var margin = getSpacing(options.margin);\n var box = this.box.unpad(margin);\n this.targetBox = targetBox;\n this.normalBox = box.clone();\n box = this.rotate();\n box.translate(margin.left - margin.right, margin.top - margin.bottom);\n this.rotatedBox = box.clone();\n box.pad(margin);\n }\n }\n },\n createVisual: function () {\n var options = this.options;\n if (!options.visible) {\n return;\n }\n this.visual = new dataviz.drawing.Group({\n transform: this.rotationTransform(),\n zIndex: options.zIndex,\n noclip: options.noclip\n });\n if (this.hasBox()) {\n var box = draw.Path.fromRect(this.paddingBox.toRect(), this.visualStyle());\n this.visual.append(box);\n }\n },\n renderVisual: function () {\n if (this.options.visual) {\n this.addVisual();\n this.createAnimation();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n },\n visualOptions: function () {\n var options = this.options;\n return {\n background: options.background,\n border: options.border,\n color: options.color,\n font: options.font,\n margin: options.margin,\n padding: options.padding,\n visible: options.visible\n };\n },\n visualContext: function (targetBox) {\n var textbox = this;\n return {\n text: textbox.content,\n rect: targetBox.toRect(),\n sender: this.getChart(),\n options: textbox.visualOptions(),\n createVisual: function () {\n textbox._boxReflow = true;\n textbox.reflow(targetBox);\n textbox._boxReflow = false;\n return textbox.getDefaultVisual();\n }\n };\n },\n getDefaultVisual: function () {\n this.createVisual();\n this.renderChildren();\n var visual = this.visual;\n delete this.visual;\n return visual;\n },\n rotate: function () {\n var options = this.options;\n this.box.rotate(options.rotation);\n this.align(this.targetBox, X, options.align);\n this.align(this.targetBox, Y, options.vAlign);\n return this.box;\n },\n rotationTransform: function () {\n var rotation = this.options.rotation;\n if (!rotation) {\n return null;\n }\n var center = this.normalBox.center();\n var cx = center.x;\n var cy = center.y;\n var boxCenter = this.rotatedBox.center();\n return geom.transform().translate(boxCenter.x - cx, boxCenter.y - cy).rotate(rotation, [\n cx,\n cy\n ]);\n }\n });\n var Title = ChartElement.extend({\n init: function (options) {\n var title = this;\n ChartElement.fn.init.call(title, options);\n options = title.options;\n title.append(new TextBox(options.text, deepExtend({}, options, { vAlign: options.position })));\n },\n options: {\n color: BLACK,\n position: TOP,\n align: CENTER,\n margin: getSpacing(5),\n padding: getSpacing(5)\n },\n reflow: function (targetBox) {\n var title = this;\n ChartElement.fn.reflow.call(title, targetBox);\n title.box.snapTo(targetBox, X);\n }\n });\n Title.buildTitle = function (options, parent, defaultOptions) {\n var title;\n if (typeof options === 'string') {\n options = { text: options };\n }\n options = deepExtend({ visible: true }, defaultOptions, options);\n if (options && options.visible && options.text) {\n title = new Title(options);\n parent.append(title);\n }\n return title;\n };\n var AxisLabel = TextBox.extend({\n init: function (value, text, index, dataItem, options) {\n var label = this;\n label.text = text;\n label.value = value;\n label.index = index;\n label.dataItem = dataItem;\n TextBox.fn.init.call(label, text, options);\n },\n visualContext: function (targetBox) {\n var context = TextBox.fn.visualContext.call(this, targetBox);\n context.value = this.value;\n context.dataItem = this.dataItem;\n context.format = this.options.format;\n context.culture = this.options.culture;\n return context;\n },\n click: function (widget, e) {\n var label = this;\n widget.trigger(AXIS_LABEL_CLICK, {\n element: eventTargetElement(e),\n value: label.value,\n text: label.text,\n index: label.index,\n dataItem: label.dataItem,\n axis: label.parent.options\n });\n },\n rotate: function () {\n if (this.options.alignRotation != CENTER) {\n var box = this.normalBox.toRect();\n var transform = this.rotationTransform();\n this.box = rectToBox(box.bbox(transform.matrix()));\n } else {\n TextBox.fn.rotate.call(this);\n }\n return this.box;\n },\n rotationTransform: function () {\n var options = this.options;\n var rotation = options.rotation;\n if (!rotation) {\n return null;\n }\n if (options.alignRotation == CENTER) {\n return TextBox.fn.rotationTransform.call(this);\n }\n var rotationMatrix = geom.transform().rotate(rotation).matrix();\n var box = this.normalBox.toRect();\n var rect = this.targetBox.toRect();\n var rotationOrigin = options.rotationOrigin || TOP;\n var alignAxis = rotationOrigin == TOP || rotationOrigin == BOTTOM ? X : Y;\n var distanceAxis = rotationOrigin == TOP || rotationOrigin == BOTTOM ? Y : X;\n var axisAnchor = rotationOrigin == TOP || rotationOrigin == LEFT ? rect.origin : rect.bottomRight();\n var topLeft = box.topLeft().transformCopy(rotationMatrix);\n var topRight = box.topRight().transformCopy(rotationMatrix);\n var bottomRight = box.bottomRight().transformCopy(rotationMatrix);\n var bottomLeft = box.bottomLeft().transformCopy(rotationMatrix);\n var rotatedBox = geom.Rect.fromPoints(topLeft, topRight, bottomRight, bottomLeft);\n var translate = {};\n translate[distanceAxis] = rect.origin[distanceAxis] - rotatedBox.origin[distanceAxis];\n var distanceLeft = math.abs(topLeft[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n var distanceRight = math.abs(topRight[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n var alignStart;\n var alignEnd;\n if (round(distanceLeft, DEFAULT_PRECISION) === round(distanceRight, DEFAULT_PRECISION)) {\n alignStart = topLeft;\n alignEnd = topRight;\n } else if (distanceRight < distanceLeft) {\n alignStart = topRight;\n alignEnd = bottomRight;\n } else {\n alignStart = topLeft;\n alignEnd = bottomLeft;\n }\n var alignCenter = alignStart[alignAxis] + (alignEnd[alignAxis] - alignStart[alignAxis]) / 2;\n translate[alignAxis] = rect.center()[alignAxis] - alignCenter;\n return geom.transform().translate(translate.x, translate.y).rotate(rotation);\n }\n });\n function createAxisTick(options, tickOptions) {\n var tickX = options.tickX, tickY = options.tickY, position = options.position;\n var tick = new draw.Path({\n stroke: {\n width: tickOptions.width,\n color: tickOptions.color\n }\n });\n if (options.vertical) {\n tick.moveTo(tickX, position).lineTo(tickX + tickOptions.size, position);\n } else {\n tick.moveTo(position, tickY).lineTo(position, tickY + tickOptions.size);\n }\n alignPathToPixel(tick);\n return tick;\n }\n function createAxisGridLine(options, gridLine) {\n var lineStart = options.lineStart, lineEnd = options.lineEnd, position = options.position;\n var line = new draw.Path({\n stroke: {\n width: gridLine.width,\n color: gridLine.color,\n dashType: gridLine.dashType\n }\n });\n if (options.vertical) {\n line.moveTo(lineStart, position).lineTo(lineEnd, position);\n } else {\n line.moveTo(position, lineStart).lineTo(position, lineEnd);\n }\n alignPathToPixel(line);\n return line;\n }\n var Axis = ChartElement.extend({\n init: function (options) {\n var axis = this;\n ChartElement.fn.init.call(axis, options);\n if (!axis.options.visible) {\n axis.options = deepExtend({}, axis.options, {\n labels: { visible: false },\n line: { visible: false },\n margin: 0,\n majorTickSize: 0,\n minorTickSize: 0\n });\n }\n axis.options.minorTicks = deepExtend({}, {\n color: axis.options.line.color,\n width: axis.options.line.width,\n visible: axis.options.minorTickType != NONE\n }, axis.options.minorTicks, {\n size: axis.options.minorTickSize,\n align: axis.options.minorTickType\n });\n axis.options.majorTicks = deepExtend({}, {\n color: axis.options.line.color,\n width: axis.options.line.width,\n visible: axis.options.majorTickType != NONE\n }, axis.options.majorTicks, {\n size: axis.options.majorTickSize,\n align: axis.options.majorTickType\n });\n if (!this.options._deferLabels) {\n axis.createLabels();\n }\n axis.createTitle();\n axis.createNotes();\n },\n options: {\n labels: {\n visible: true,\n rotation: 0,\n mirror: false,\n step: 1,\n skip: 0\n },\n line: {\n width: 1,\n color: BLACK,\n visible: true\n },\n title: {\n visible: true,\n position: CENTER\n },\n majorTicks: {\n align: OUTSIDE,\n size: 4,\n skip: 0,\n step: 1\n },\n minorTicks: {\n align: OUTSIDE,\n size: 3,\n skip: 0,\n step: 1\n },\n axisCrossingValue: 0,\n majorTickType: OUTSIDE,\n minorTickType: NONE,\n majorGridLines: {\n skip: 0,\n step: 1\n },\n minorGridLines: {\n visible: false,\n width: 1,\n color: BLACK,\n skip: 0,\n step: 1\n },\n margin: 5,\n visible: true,\n reverse: false,\n justified: true,\n notes: { label: { text: '' } },\n _alignLines: true,\n _deferLabels: false\n },\n labelsRange: function () {\n return {\n min: this.options.labels.skip,\n max: this.labelsCount()\n };\n },\n createLabels: function () {\n var axis = this, options = axis.options, align = options.vertical ? RIGHT : CENTER, labelOptions = deepExtend({}, options.labels, {\n align: align,\n zIndex: options.zIndex\n }), step = math.max(1, labelOptions.step);\n axis.children = $.grep(axis.children, function (child) {\n return !(child instanceof AxisLabel);\n });\n axis.labels = [];\n if (labelOptions.visible) {\n var range = axis.labelsRange(), rotation = labelOptions.rotation, label, i;\n if (isPlainObject(rotation)) {\n labelOptions.alignRotation = rotation.align;\n labelOptions.rotation = rotation.angle;\n }\n if (labelOptions.rotation == 'auto') {\n labelOptions.rotation = 0;\n options.autoRotateLabels = true;\n }\n for (i = range.min; i < range.max; i += step) {\n label = axis.createAxisLabel(i, labelOptions);\n if (label) {\n axis.append(label);\n axis.labels.push(label);\n }\n }\n }\n },\n lineBox: function () {\n var axis = this, options = axis.options, box = axis.box, vertical = options.vertical, mirror = options.labels.mirror, axisX = mirror ? box.x1 : box.x2, axisY = mirror ? box.y2 : box.y1, lineWidth = options.line.width || 0;\n return vertical ? Box2D(axisX, box.y1, axisX, box.y2 - lineWidth) : Box2D(box.x1, axisY, box.x2 - lineWidth, axisY);\n },\n createTitle: function () {\n var axis = this, options = axis.options, titleOptions = deepExtend({\n rotation: options.vertical ? -90 : 0,\n text: '',\n zIndex: 1,\n visualSize: true\n }, options.title), title;\n if (titleOptions.visible && titleOptions.text) {\n title = new TextBox(titleOptions.text, titleOptions);\n axis.append(title);\n axis.title = title;\n }\n },\n createNotes: function () {\n var axis = this, options = axis.options, notes = options.notes, items = notes.data || [], i, item, note;\n axis.notes = [];\n for (i = 0; i < items.length; i++) {\n item = deepExtend({}, notes, items[i]);\n item.value = axis.parseNoteValue(item.value);\n note = new Note(item.value, item.label.text, item, null, null, item);\n if (note.options.visible) {\n if (defined(note.options.position)) {\n if (options.vertical && !inArray(note.options.position, [\n LEFT,\n RIGHT\n ])) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else if (!options.vertical && !inArray(note.options.position, [\n TOP,\n BOTTOM\n ])) {\n note.options.position = options.reverse ? BOTTOM : TOP;\n }\n } else {\n if (options.vertical) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else {\n note.options.position = options.reverse ? BOTTOM : TOP;\n }\n }\n axis.append(note);\n axis.notes.push(note);\n }\n }\n },\n parseNoteValue: function (value) {\n return value;\n },\n renderVisual: function () {\n ChartElement.fn.renderVisual.call(this);\n this.createPlotBands();\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n this.createBackground();\n this.createLine();\n },\n gridLinesVisual: function () {\n var gridLines = this._gridLines;\n if (!gridLines) {\n gridLines = this._gridLines = new draw.Group({ zIndex: -2 });\n this.appendVisual(this._gridLines);\n }\n return gridLines;\n },\n createTicks: function (lineGroup) {\n var axis = this, options = axis.options, lineBox = axis.lineBox(), mirror = options.labels.mirror, majorUnit = options.majorTicks.visible ? options.majorUnit : 0, tickLineOptions = { vertical: options.vertical };\n function render(tickPositions, tickOptions, skipUnit) {\n var count = tickPositions.length;\n var step = math.max(1, tickOptions.step);\n if (tickOptions.visible) {\n for (var i = tickOptions.skip; i < count; i += step) {\n if (defined(skipUnit) && i % skipUnit === 0) {\n continue;\n }\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPositions[i];\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n }\n }\n render(axis.getMajorTickPositions(), options.majorTicks);\n render(axis.getMinorTickPositions(), options.minorTicks, majorUnit / options.minorUnit);\n },\n createLine: function () {\n var axis = this, options = axis.options, line = options.line, lineBox = axis.lineBox();\n if (line.width > 0 && line.visible) {\n var path = new draw.Path({\n stroke: {\n width: line.width,\n color: line.color,\n dashType: line.dashType\n }\n });\n path.moveTo(lineBox.x1, lineBox.y1).lineTo(lineBox.x2, lineBox.y2);\n if (options._alignLines) {\n alignPathToPixel(path);\n }\n var group = this._lineGroup = new draw.Group();\n group.append(path);\n this.visual.append(group);\n this.createTicks(group);\n }\n },\n getActualTickSize: function () {\n var axis = this, options = axis.options, tickSize = 0;\n if (options.majorTicks.visible && options.minorTicks.visible) {\n tickSize = math.max(options.majorTicks.size, options.minorTicks.size);\n } else if (options.majorTicks.visible) {\n tickSize = options.majorTicks.size;\n } else if (options.minorTicks.visible) {\n tickSize = options.minorTicks.size;\n }\n return tickSize;\n },\n createBackground: function () {\n var axis = this, options = axis.options, background = options.background, box = axis.box;\n if (background) {\n axis._backgroundPath = draw.Path.fromRect(box.toRect(), {\n fill: { color: background },\n stroke: null\n });\n this.visual.append(axis._backgroundPath);\n }\n },\n createPlotBands: function () {\n var axis = this, options = axis.options, plotBands = options.plotBands || [], vertical = options.vertical, plotArea = axis.plotArea, slotX, slotY, from, to;\n if (plotBands.length === 0) {\n return;\n }\n var group = this._plotbandGroup = new draw.Group({ zIndex: -1 });\n var altAxis = $.grep(axis.pane.axes, function (a) {\n return a.options.vertical !== axis.options.vertical;\n })[0];\n $.each(plotBands, function (i, item) {\n from = valueOrDefault(item.from, MIN_VALUE);\n to = valueOrDefault(item.to, MAX_VALUE);\n if (vertical) {\n slotX = (altAxis || plotArea.axisX).lineBox();\n slotY = axis.getSlot(item.from, item.to, true);\n } else {\n slotX = axis.getSlot(item.from, item.to, true);\n slotY = (altAxis || plotArea.axisY).lineBox();\n }\n if (slotX.width() !== 0 && slotY.height() !== 0) {\n var bandRect = new geom.Rect([\n slotX.x1,\n slotY.y1\n ], [\n slotX.width(),\n slotY.height()\n ]);\n var path = draw.Path.fromRect(bandRect, {\n fill: {\n color: item.color,\n opacity: item.opacity\n },\n stroke: null\n });\n group.append(path);\n }\n });\n axis.appendVisual(group);\n },\n createGridLines: function (altAxis) {\n var axis = this, options = axis.options, axisLineVisible = altAxis.options.line.visible, majorGridLines = options.majorGridLines, majorUnit = majorGridLines.visible ? options.majorUnit : 0, vertical = options.vertical, lineBox = altAxis.lineBox(), linePos = lineBox[vertical ? 'y1' : 'x1'], lineOptions = {\n lineStart: lineBox[vertical ? 'x1' : 'y1'],\n lineEnd: lineBox[vertical ? 'x2' : 'y2'],\n vertical: vertical\n }, pos, majorTicks = [];\n var container = this.gridLinesVisual();\n function render(tickPositions, gridLine, skipUnit) {\n var count = tickPositions.length;\n var step = math.max(1, gridLine.step);\n if (gridLine.visible) {\n for (var i = gridLine.skip; i < count; i += step) {\n pos = round(tickPositions[i]);\n if (!inArray(pos, majorTicks)) {\n if (i % skipUnit !== 0 && (!axisLineVisible || linePos !== pos)) {\n lineOptions.position = pos;\n container.append(createAxisGridLine(lineOptions, gridLine));\n majorTicks.push(pos);\n }\n }\n }\n }\n }\n render(axis.getMajorTickPositions(), options.majorGridLines);\n render(axis.getMinorTickPositions(), options.minorGridLines, majorUnit / options.minorUnit);\n return container.children;\n },\n reflow: function (box) {\n var axis = this, options = axis.options, vertical = options.vertical, labels = axis.labels, count = labels.length, title = axis.title, sizeFn = vertical ? WIDTH : HEIGHT, titleSize = title ? title.box[sizeFn]() : 0, space = axis.getActualTickSize() + options.margin + titleSize, maxLabelSize = 0, rootBox = (this.getRoot() || {}).box || box, boxSize = rootBox[sizeFn](), labelSize, i;\n for (i = 0; i < count; i++) {\n labelSize = labels[i].box[sizeFn]();\n if (labelSize + space <= boxSize) {\n maxLabelSize = math.max(maxLabelSize, labelSize);\n }\n }\n if (vertical) {\n axis.box = Box2D(box.x1, box.y1, box.x1 + maxLabelSize + space, box.y2);\n } else {\n axis.box = Box2D(box.x1, box.y1, box.x2, box.y1 + maxLabelSize + space);\n }\n axis.arrangeTitle();\n axis.arrangeLabels();\n axis.arrangeNotes();\n },\n getLabelsTickPositions: function () {\n return this.getMajorTickPositions();\n },\n labelTickIndex: function (label) {\n return label.index;\n },\n arrangeLabels: function () {\n var axis = this, options = axis.options, labels = axis.labels, labelsBetweenTicks = !options.justified, vertical = options.vertical, lineBox = axis.lineBox(), mirror = options.labels.mirror, tickPositions = axis.getLabelsTickPositions(), labelOffset = axis.getActualTickSize() + options.margin, labelBox, labelY, i;\n for (i = 0; i < labels.length; i++) {\n var label = labels[i], tickIx = axis.labelTickIndex(label), labelSize = vertical ? label.box.height() : label.box.width(), labelPos = tickPositions[tickIx] - labelSize / 2, firstTickPosition, nextTickPosition, middle, labelX;\n if (vertical) {\n if (labelsBetweenTicks) {\n firstTickPosition = tickPositions[tickIx];\n nextTickPosition = tickPositions[tickIx + 1];\n middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\n labelPos = middle - labelSize / 2;\n }\n labelX = lineBox.x2;\n if (mirror) {\n labelX += labelOffset;\n label.options.rotationOrigin = LEFT;\n } else {\n labelX -= labelOffset + label.box.width();\n label.options.rotationOrigin = RIGHT;\n }\n labelBox = label.box.move(labelX, labelPos);\n } else {\n if (labelsBetweenTicks) {\n firstTickPosition = tickPositions[tickIx];\n nextTickPosition = tickPositions[tickIx + 1];\n } else {\n firstTickPosition = labelPos;\n nextTickPosition = labelPos + labelSize;\n }\n labelY = lineBox.y1;\n if (mirror) {\n labelY -= labelOffset + label.box.height();\n label.options.rotationOrigin = BOTTOM;\n } else {\n labelY += labelOffset;\n label.options.rotationOrigin = TOP;\n }\n labelBox = Box2D(firstTickPosition, labelY, nextTickPosition, labelY + label.box.height());\n }\n label.reflow(labelBox);\n }\n },\n autoRotateLabels: function () {\n if (this.options.autoRotateLabels && !this.options.vertical) {\n var tickPositions = this.getMajorTickPositions();\n var labels = this.labels;\n var labelBox, angle, width, idx;\n for (idx = 0; idx < labels.length; idx++) {\n width = tickPositions[idx + 1] - tickPositions[idx];\n labelBox = labels[idx].box;\n if (labelBox.width() > width) {\n if (labelBox.height() > width) {\n angle = -90;\n break;\n }\n angle = -45;\n }\n }\n if (angle) {\n for (idx = 0; idx < labels.length; idx++) {\n labels[idx].options.rotation = angle;\n labels[idx].reflow(Box2D());\n }\n return true;\n }\n }\n },\n arrangeTitle: function () {\n var axis = this, options = axis.options, mirror = options.labels.mirror, vertical = options.vertical, title = axis.title;\n if (title) {\n if (vertical) {\n title.options.align = mirror ? RIGHT : LEFT;\n title.options.vAlign = title.options.position;\n } else {\n title.options.align = title.options.position;\n title.options.vAlign = mirror ? TOP : BOTTOM;\n }\n title.reflow(axis.box);\n }\n },\n arrangeNotes: function () {\n var axis = this, i, item, slot, value;\n for (i = 0; i < axis.notes.length; i++) {\n item = axis.notes[i];\n value = item.options.value;\n if (defined(value)) {\n if (axis.shouldRenderNote(value)) {\n item.show();\n } else {\n item.hide();\n }\n slot = axis.getSlot(value);\n } else {\n item.hide();\n }\n item.reflow(slot || axis.lineBox());\n }\n },\n alignTo: function (secondAxis) {\n var axis = this, lineBox = secondAxis.lineBox(), vertical = axis.options.vertical, pos = vertical ? Y : X;\n axis.box.snapTo(lineBox, pos);\n if (vertical) {\n axis.box.shrink(0, axis.lineBox().height() - lineBox.height());\n } else {\n axis.box.shrink(axis.lineBox().width() - lineBox.width(), 0);\n }\n axis.box[pos + 1] -= axis.lineBox()[pos + 1] - lineBox[pos + 1];\n axis.box[pos + 2] -= axis.lineBox()[pos + 2] - lineBox[pos + 2];\n },\n axisLabelText: function (value, dataItem, options) {\n var text = value;\n if (options.template) {\n var tmpl = template(options.template);\n text = tmpl({\n value: value,\n dataItem: dataItem,\n format: options.format,\n culture: options.culture\n });\n } else if (options.format) {\n if (options.format.match(FORMAT_REGEX)) {\n text = kendo.format(options.format, value);\n } else {\n text = kendo.toString(value, options.format, options.culture);\n }\n }\n return text;\n },\n slot: function (from, to, limit) {\n var slot = this.getSlot(from, to, limit);\n if (slot) {\n return slot.toRect();\n }\n },\n contentBox: function () {\n var box = this.box.clone();\n var labels = this.labels;\n if (labels.length) {\n if (labels[0].options.visible) {\n box.wrap(labels[0].box);\n }\n if (last(labels).options.visible) {\n box.wrap(last(labels).box);\n }\n }\n return box;\n },\n limitRange: function (from, to, min, max, offset) {\n var options = this.options;\n if (from < min && offset < 0 && (!defined(options.min) || options.min <= min) || max < to && offset > 0 && (!defined(options.max) || max <= options.max)) {\n return;\n }\n if (to < min && offset > 0 || max < from && offset < 0) {\n return {\n min: from,\n max: to\n };\n }\n var rangeSize = to - from;\n if (from < min) {\n from = util.limitValue(from, min, max);\n to = util.limitValue(from + rangeSize, min + rangeSize, max);\n } else if (to > max) {\n to = util.limitValue(to, min, max);\n from = util.limitValue(to - rangeSize, min, max - rangeSize);\n }\n return {\n min: from,\n max: to\n };\n }\n });\n var Note = BoxElement.extend({\n init: function (value, text, dataItem, category, series, options) {\n var note = this;\n BoxElement.fn.init.call(note, options);\n note.value = value;\n note.text = text;\n note.dataItem = dataItem;\n note.category = category;\n note.series = series;\n note.render();\n },\n options: {\n icon: {\n visible: true,\n type: CIRCLE\n },\n label: {\n position: INSIDE,\n visible: true,\n align: CENTER,\n vAlign: CENTER\n },\n line: { visible: true },\n visible: true,\n position: TOP,\n zIndex: 2\n },\n hide: function () {\n this.options.visible = false;\n },\n show: function () {\n this.options.visible = true;\n },\n render: function () {\n var note = this, options = note.options, label = options.label, text = note.text, icon = options.icon, size = icon.size, box = Box2D(), marker, width, height, noteTemplate;\n if (options.visible) {\n if (defined(label) && label.visible) {\n if (label.template) {\n noteTemplate = template(label.template);\n text = noteTemplate({\n dataItem: note.dataItem,\n category: note.category,\n value: note.value,\n text: text,\n series: note.series\n });\n } else if (label.format) {\n text = autoFormat(label.format, text);\n }\n note.label = new TextBox(text, deepExtend({}, label));\n if (label.position === INSIDE && !defined(size)) {\n if (icon.type === CIRCLE) {\n size = math.max(note.label.box.width(), note.label.box.height());\n } else {\n width = note.label.box.width();\n height = note.label.box.height();\n }\n box.wrap(note.label.box);\n }\n }\n icon.width = width || size || DEFAULT_ICON_SIZE;\n icon.height = height || size || DEFAULT_ICON_SIZE;\n marker = new ShapeElement(deepExtend({}, icon));\n note.marker = marker;\n note.append(marker);\n if (note.label) {\n note.append(note.label);\n }\n marker.reflow(Box2D());\n note.wrapperBox = box.wrap(marker.box);\n }\n },\n reflow: function (targetBox) {\n var note = this, options = note.options, center = targetBox.center(), wrapperBox = note.wrapperBox, length = options.line.length, position = options.position, label = note.label, marker = note.marker, lineStart, box, contentBox;\n if (options.visible) {\n if (inArray(position, [\n LEFT,\n RIGHT\n ])) {\n if (position === LEFT) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(-length, targetBox.center().y - wrapperBox.center().y);\n if (options.line.visible) {\n lineStart = [\n targetBox.x1,\n center.y\n ];\n note.linePoints = [\n lineStart,\n [\n contentBox.x2,\n center.y\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n } else {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(length, targetBox.center().y - wrapperBox.center().y);\n if (options.line.visible) {\n lineStart = [\n targetBox.x2,\n center.y\n ];\n note.linePoints = [\n lineStart,\n [\n contentBox.x1,\n center.y\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n } else {\n if (position === BOTTOM) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, length);\n if (options.line.visible) {\n lineStart = [\n center.x,\n targetBox.y2\n ];\n note.linePoints = [\n lineStart,\n [\n center.x,\n contentBox.y1\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n } else {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, -length);\n if (options.line.visible) {\n lineStart = [\n center.x,\n targetBox.y1\n ];\n note.linePoints = [\n lineStart,\n [\n center.x,\n contentBox.y2\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n }\n if (marker) {\n marker.reflow(contentBox);\n }\n if (label) {\n label.reflow(contentBox);\n if (marker) {\n if (options.label.position === OUTSIDE) {\n label.box.alignTo(marker.box, position);\n }\n label.reflow(label.box);\n }\n }\n note.contentBox = contentBox;\n note.targetBox = targetBox;\n note.box = box || contentBox;\n }\n },\n createVisual: function () {\n BoxElement.fn.createVisual.call(this);\n if (this.options.visible) {\n this.createLine();\n }\n },\n renderVisual: function () {\n var that = this;\n var options = that.options;\n var customVisual = options.visual;\n if (options.visible && customVisual) {\n that.visual = customVisual({\n dataItem: that.dataItem,\n category: that.category,\n value: that.value,\n text: that.text,\n sender: that.getChart(),\n series: that.series,\n rect: that.targetBox.toRect(),\n options: {\n background: options.background,\n border: options.background,\n icon: options.icon,\n label: options.label,\n line: options.line,\n position: options.position,\n visible: options.visible\n },\n createVisual: function () {\n that.createVisual();\n that.renderChildren();\n var defaultVisual = that.visual;\n delete that.visual;\n return defaultVisual;\n }\n });\n that.addVisual();\n } else {\n BoxElement.fn.renderVisual.call(that);\n }\n },\n createLine: function () {\n var options = this.options.line;\n if (this.linePoints) {\n var path = draw.Path.fromPoints(this.linePoints, {\n stroke: {\n color: options.color,\n width: options.width,\n dashType: options.dashType\n }\n });\n alignPathToPixel(path);\n this.visual.append(path);\n }\n },\n click: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(NOTE_CLICK, args)) {\n e.preventDefault();\n }\n },\n hover: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(NOTE_HOVER, args)) {\n e.preventDefault();\n }\n },\n leave: function (widget) {\n widget._unsetActivePoint();\n },\n eventArgs: function (e) {\n var note = this, options = note.options;\n return {\n element: eventTargetElement(e),\n text: defined(options.label) ? options.label.text : '',\n dataItem: note.dataItem,\n series: note.series,\n value: note.value,\n category: note.category,\n visual: note.visual\n };\n }\n });\n var ShapeElement = BoxElement.extend({\n init: function (options, pointData) {\n this.pointData = pointData;\n BoxElement.fn.init.call(this, options);\n },\n options: {\n type: CIRCLE,\n align: CENTER,\n vAlign: CENTER\n },\n getElement: function () {\n var marker = this, options = marker.options, type = options.type, rotation = options.rotation, box = marker.paddingBox, element, center = box.center(), halfWidth = box.width() / 2;\n if (!options.visible || !marker.hasBox()) {\n return;\n }\n var style = marker.visualStyle();\n if (type === CIRCLE) {\n element = new draw.Circle(new geom.Circle([\n round(box.x1 + halfWidth, COORD_PRECISION),\n round(box.y1 + box.height() / 2, COORD_PRECISION)\n ], halfWidth), style);\n } else if (type === TRIANGLE) {\n element = draw.Path.fromPoints([\n [\n box.x1 + halfWidth,\n box.y1\n ],\n [\n box.x1,\n box.y2\n ],\n [\n box.x2,\n box.y2\n ]\n ], style).close();\n } else if (type === CROSS) {\n element = new draw.MultiPath(style);\n element.moveTo(box.x1, box.y1).lineTo(box.x2, box.y2);\n element.moveTo(box.x1, box.y2).lineTo(box.x2, box.y1);\n } else {\n element = draw.Path.fromRect(box.toRect(), style);\n }\n if (rotation) {\n element.transform(geom.transform().rotate(-rotation, [\n center.x,\n center.y\n ]));\n }\n element.options.zIndex = this.options.zIndex;\n return element;\n },\n createElement: function () {\n var that = this;\n var customVisual = that.options.visual;\n var pointData = that.pointData || {};\n var visual;\n if (customVisual) {\n visual = customVisual({\n value: pointData.value,\n dataItem: pointData.dataItem,\n sender: that.getChart(),\n series: pointData.series,\n category: pointData.category,\n rect: that.paddingBox.toRect(),\n options: that.visualOptions(),\n createVisual: function () {\n return that.getElement();\n }\n });\n } else {\n visual = that.getElement();\n }\n return visual;\n },\n visualOptions: function () {\n var options = this.options;\n return {\n background: options.background,\n border: options.border,\n margin: options.margin,\n padding: options.padding,\n type: options.type,\n size: options.width,\n visible: options.visible\n };\n },\n createVisual: function () {\n this.visual = this.createElement();\n }\n });\n var NumericAxis = Axis.extend({\n init: function (seriesMin, seriesMax, options) {\n var axis = this, defaultOptions = axis.initDefaults(seriesMin, seriesMax, options);\n Axis.fn.init.call(axis, defaultOptions);\n },\n startValue: function () {\n return 0;\n },\n options: {\n type: 'numeric',\n min: 0,\n max: 1,\n vertical: true,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: { format: '#.####################' },\n zIndex: 1\n },\n initDefaults: function (seriesMin, seriesMax, options) {\n var axis = this, narrowRange = options.narrowRange, autoMin = axis.autoAxisMin(seriesMin, seriesMax, narrowRange), autoMax = axis.autoAxisMax(seriesMin, seriesMax, narrowRange), majorUnit = autoMajorUnit(autoMin, autoMax), autoOptions = { majorUnit: majorUnit }, userSetLimits;\n if (options.roundToMajorUnit !== false) {\n if (autoMin < 0 && remainderClose(autoMin, majorUnit, 1 / 3)) {\n autoMin -= majorUnit;\n }\n if (autoMax > 0 && remainderClose(autoMax, majorUnit, 1 / 3)) {\n autoMax += majorUnit;\n }\n }\n autoOptions.min = floor(autoMin, majorUnit);\n autoOptions.max = ceil(autoMax, majorUnit);\n this.totalMin = defined(options.min) ? math.min(autoOptions.min, options.min) : autoOptions.min;\n this.totalMax = defined(options.max) ? math.max(autoOptions.max, options.max) : autoOptions.max;\n this.totalMajorUnit = majorUnit;\n if (options) {\n userSetLimits = defined(options.min) || defined(options.max);\n if (userSetLimits) {\n if (options.min === options.max) {\n if (options.min > 0) {\n options.min = 0;\n } else {\n options.max = 1;\n }\n }\n }\n if (options.majorUnit) {\n autoOptions.min = floor(autoOptions.min, options.majorUnit);\n autoOptions.max = ceil(autoOptions.max, options.majorUnit);\n } else if (userSetLimits) {\n options = deepExtend(autoOptions, options);\n autoOptions.majorUnit = autoMajorUnit(options.min, options.max);\n }\n }\n autoOptions.minorUnit = (options.majorUnit || autoOptions.majorUnit) / 5;\n return deepExtend(autoOptions, options);\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n autoAxisMax: function (min, max, narrow) {\n var axisMax, diff;\n if (!min && !max) {\n return 1;\n }\n if (min <= 0 && max <= 0) {\n max = min == max ? 0 : max;\n diff = math.abs((max - min) / max);\n if (narrow === false || !narrow && diff > ZERO_THRESHOLD) {\n return 0;\n }\n axisMax = math.min(0, max - (min - max) / 2);\n } else {\n min = min == max ? 0 : min;\n axisMax = max;\n }\n return axisMax;\n },\n autoAxisMin: function (min, max, narrow) {\n var axisMin, diff;\n if (!min && !max) {\n return 0;\n }\n if (min >= 0 && max >= 0) {\n min = min == max ? 0 : min;\n diff = (max - min) / max;\n if (narrow === false || !narrow && diff > ZERO_THRESHOLD) {\n return 0;\n }\n axisMin = math.max(0, min - (max - min) / 2);\n } else {\n max = min == max ? 0 : max;\n axisMin = min;\n }\n return axisMin;\n },\n getDivisions: function (stepValue) {\n if (stepValue === 0) {\n return 1;\n }\n var options = this.options, range = options.max - options.min;\n return math.floor(round(range / stepValue, COORD_PRECISION)) + 1;\n },\n getTickPositions: function (unit, skipUnit) {\n var axis = this, options = axis.options, vertical = options.vertical, reverse = options.reverse, lineBox = axis.lineBox(), lineSize = vertical ? lineBox.height() : lineBox.width(), range = options.max - options.min, scale = lineSize / range, step = unit * scale, skipStep = 0, divisions = axis.getDivisions(unit), dir = (vertical ? -1 : 1) * (reverse ? -1 : 1), startEdge = dir === 1 ? 1 : 2, pos = lineBox[(vertical ? Y : X) + startEdge], positions = [], i;\n if (skipUnit) {\n skipStep = skipUnit / unit;\n }\n for (i = 0; i < divisions; i++) {\n if (i % skipStep !== 0) {\n positions.push(round(pos, COORD_PRECISION));\n }\n pos = pos + step * dir;\n }\n return positions;\n },\n getMajorTickPositions: function () {\n var axis = this;\n return axis.getTickPositions(axis.options.majorUnit);\n },\n getMinorTickPositions: function () {\n var axis = this;\n return axis.getTickPositions(axis.options.minorUnit);\n },\n getSlot: function (a, b, limit) {\n var axis = this, options = axis.options, reverse = options.reverse, vertical = options.vertical, valueAxis = vertical ? Y : X, lineBox = axis.lineBox(), lineStart = lineBox[valueAxis + (reverse ? 2 : 1)], lineSize = vertical ? lineBox.height() : lineBox.width(), dir = reverse ? -1 : 1, step = dir * (lineSize / (options.max - options.min)), p1, p2, slotBox = new Box2D(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n if (!defined(a)) {\n a = b || 0;\n }\n if (!defined(b)) {\n b = a || 0;\n }\n if (limit) {\n a = math.max(math.min(a, options.max), options.min);\n b = math.max(math.min(b, options.max), options.min);\n }\n if (vertical) {\n p1 = options.max - math.max(a, b);\n p2 = options.max - math.min(a, b);\n } else {\n p1 = math.min(a, b) - options.min;\n p2 = math.max(a, b) - options.min;\n }\n slotBox[valueAxis + 1] = math.max(math.min(lineStart + step * (reverse ? p2 : p1), COORDINATE_LIMIT), -COORDINATE_LIMIT);\n slotBox[valueAxis + 2] = math.max(math.min(lineStart + step * (reverse ? p1 : p2), COORDINATE_LIMIT), -COORDINATE_LIMIT);\n return slotBox;\n },\n getValue: function (point) {\n var axis = this, options = axis.options, reverse = options.reverse, vertical = options.vertical, max = options.max * 1, min = options.min * 1, valueAxis = vertical ? Y : X, lineBox = axis.lineBox(), lineStart = lineBox[valueAxis + (reverse ? 2 : 1)], lineSize = vertical ? lineBox.height() : lineBox.width(), dir = reverse ? -1 : 1, offset = dir * (point[valueAxis] - lineStart), step = (max - min) / lineSize, valueOffset = offset * step, value;\n if (offset < 0 || offset > lineSize) {\n return null;\n }\n value = vertical ? max - valueOffset : min + valueOffset;\n return round(value, DEFAULT_PRECISION);\n },\n translateRange: function (delta) {\n var axis = this, options = axis.options, lineBox = axis.lineBox(), vertical = options.vertical, reverse = options.reverse, size = vertical ? lineBox.height() : lineBox.width(), range = options.max - options.min, scale = size / range, offset = round(delta / scale, DEFAULT_PRECISION);\n if ((vertical || reverse) && !(vertical && reverse)) {\n offset = -offset;\n }\n return {\n min: options.min + offset,\n max: options.max + offset\n };\n },\n scaleRange: function (delta) {\n var axis = this, options = axis.options, offset = -delta * options.majorUnit;\n return {\n min: options.min - offset,\n max: options.max + offset\n };\n },\n labelsCount: function () {\n return this.getDivisions(this.options.majorUnit);\n },\n createAxisLabel: function (index, labelOptions) {\n var axis = this, options = axis.options, value = round(options.min + index * options.majorUnit, DEFAULT_PRECISION), text = axis.axisLabelText(value, null, labelOptions);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax);\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = math.min(startValue, endValue);\n var max = math.max(startValue, endValue);\n return {\n min: min,\n max: max\n };\n },\n zoomRange: function (delta) {\n var newRange = this.scaleRange(delta);\n var totalMax = this.totalMax;\n var totalMin = this.totalMin;\n var min = util.limitValue(newRange.min, totalMin, totalMax);\n var max = util.limitValue(newRange.max, totalMin, totalMax);\n var optionsRange = this.options.max - this.options.min;\n if (optionsRange < this.totalMajorUnit || max - min >= this.totalMajorUnit) {\n return {\n min: min,\n max: max\n };\n }\n }\n });\n var LogarithmicAxis = Axis.extend({\n init: function (seriesMin, seriesMax, options) {\n this.options = this._initOptions(seriesMin, seriesMax, options);\n Axis.fn.init.call(this, options);\n },\n startValue: function () {\n return this.options.min;\n },\n options: {\n type: 'log',\n majorUnit: 10,\n minorUnit: 1,\n axisCrossingValue: 1,\n vertical: true,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n zIndex: 1\n },\n getSlot: function (a, b, limit) {\n var axis = this, options = axis.options, reverse = options.reverse, vertical = options.vertical, valueAxis = vertical ? Y : X, lineBox = axis.lineBox(), lineStart = lineBox[valueAxis + (reverse ? 2 : 1)], lineSize = vertical ? lineBox.height() : lineBox.width(), dir = reverse ? -1 : 1, base = options.majorUnit, logMin = axis.logMin, logMax = axis.logMax, step = dir * (lineSize / (logMax - logMin)), p1, p2, slotBox = new Box2D(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n if (!defined(a)) {\n a = b || 1;\n }\n if (!defined(b)) {\n b = a || 1;\n }\n if (a <= 0 || b <= 0) {\n return;\n }\n if (limit) {\n a = math.max(math.min(a, options.max), options.min);\n b = math.max(math.min(b, options.max), options.min);\n }\n a = log(a, base);\n b = log(b, base);\n if (vertical) {\n p1 = logMax - math.max(a, b);\n p2 = logMax - math.min(a, b);\n } else {\n p1 = math.min(a, b) - logMin;\n p2 = math.max(a, b) - logMin;\n }\n slotBox[valueAxis + 1] = lineStart + step * (reverse ? p2 : p1);\n slotBox[valueAxis + 2] = lineStart + step * (reverse ? p1 : p2);\n return slotBox;\n },\n getValue: function (point) {\n var axis = this, options = axis.options, reverse = options.reverse, vertical = options.vertical, lineBox = axis.lineBox(), base = options.majorUnit, logMin = axis.logMin, logMax = axis.logMax, dir = vertical === reverse ? 1 : -1, startEdge = dir === 1 ? 1 : 2, lineSize = vertical ? lineBox.height() : lineBox.width(), step = (logMax - logMin) / lineSize, valueAxis = vertical ? Y : X, lineStart = lineBox[valueAxis + startEdge], offset = dir * (point[valueAxis] - lineStart), valueOffset = offset * step, value;\n if (offset < 0 || offset > lineSize) {\n return null;\n }\n value = logMin + valueOffset;\n return round(math.pow(base, value), DEFAULT_PRECISION);\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n scaleRange: function (delta) {\n var axis = this, options = axis.options, base = options.majorUnit, offset = -delta;\n return {\n min: math.pow(base, axis.logMin - offset),\n max: math.pow(base, axis.logMax + offset)\n };\n },\n translateRange: function (delta) {\n var axis = this, options = axis.options, base = options.majorUnit, lineBox = axis.lineBox(), vertical = options.vertical, reverse = options.reverse, size = vertical ? lineBox.height() : lineBox.width(), scale = size / (axis.logMax - axis.logMin), offset = round(delta / scale, DEFAULT_PRECISION);\n if ((vertical || reverse) && !(vertical && reverse)) {\n offset = -offset;\n }\n return {\n min: math.pow(base, axis.logMin + offset),\n max: math.pow(base, axis.logMax + offset)\n };\n },\n labelsCount: function () {\n var axis = this, floorMax = math.floor(axis.logMax), count = math.floor(floorMax - axis.logMin) + 1;\n return count;\n },\n getMajorTickPositions: function () {\n var axis = this, ticks = [];\n axis.traverseMajorTicksPositions(function (position) {\n ticks.push(position);\n }, {\n step: 1,\n skip: 0\n });\n return ticks;\n },\n createTicks: function (lineGroup) {\n var axis = this, ticks = [], options = axis.options, lineBox = axis.lineBox(), mirror = options.labels.mirror, majorTicks = options.majorTicks, minorTicks = options.minorTicks, tickLineOptions = { vertical: options.vertical };\n function render(tickPosition, tickOptions) {\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPosition;\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n if (majorTicks.visible) {\n axis.traverseMajorTicksPositions(render, majorTicks);\n }\n if (minorTicks.visible) {\n axis.traverseMinorTicksPositions(render, minorTicks);\n }\n return ticks;\n },\n createGridLines: function (altAxis) {\n var axis = this, options = axis.options, majorGridLines = options.majorGridLines, minorGridLines = options.minorGridLines, vertical = options.vertical, lineBox = altAxis.lineBox(), lineOptions = {\n lineStart: lineBox[vertical ? 'x1' : 'y1'],\n lineEnd: lineBox[vertical ? 'x2' : 'y2'],\n vertical: vertical\n }, majorTicks = [];\n var container = this.gridLinesVisual();\n function render(tickPosition, gridLine) {\n if (!inArray(tickPosition, majorTicks)) {\n lineOptions.position = tickPosition;\n container.append(createAxisGridLine(lineOptions, gridLine));\n majorTicks.push(tickPosition);\n }\n }\n if (majorGridLines.visible) {\n axis.traverseMajorTicksPositions(render, majorGridLines);\n }\n if (minorGridLines.visible) {\n axis.traverseMinorTicksPositions(render, minorGridLines);\n }\n return container.children;\n },\n traverseMajorTicksPositions: function (callback, tickOptions) {\n var axis = this, lineOptions = axis._lineOptions(), lineStart = lineOptions.lineStart, step = lineOptions.step, logMin = axis.logMin, logMax = axis.logMax, power, position;\n for (power = math.ceil(logMin) + tickOptions.skip; power <= logMax; power += tickOptions.step) {\n position = round(lineStart + step * (power - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n },\n traverseMinorTicksPositions: function (callback, tickOptions) {\n var axis = this, options = axis.options, lineOptions = axis._lineOptions(), lineStart = lineOptions.lineStart, lineStep = lineOptions.step, base = options.majorUnit, logMin = axis.logMin, logMax = axis.logMax, start = math.floor(logMin), max = options.max, min = options.min, minorUnit = options.minorUnit, power, value, position, minorOptions;\n for (power = start; power < logMax; power++) {\n minorOptions = axis._minorIntervalOptions(power);\n for (var idx = tickOptions.skip; idx < minorUnit; idx += tickOptions.step) {\n value = minorOptions.value + idx * minorOptions.minorStep;\n if (value > max) {\n break;\n }\n if (value >= min) {\n position = round(lineStart + lineStep * (log(value, base) - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n }\n }\n },\n createAxisLabel: function (index, labelOptions) {\n var axis = this, options = axis.options, power = math.ceil(axis.logMin + index), value = Math.pow(options.majorUnit, power), text = axis.axisLabelText(value, null, labelOptions);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n _throwNegativeValuesError: function () {\n throw new Error('Non positive values cannot be used for a logarithmic axis');\n },\n _initOptions: function (seriesMin, seriesMax, options) {\n var axis = this, axisOptions = deepExtend({}, axis.options, {\n min: seriesMin,\n max: seriesMax\n }, options), min = axisOptions.min, max = axisOptions.max, base = axisOptions.majorUnit, autoMax = this._autoMax(seriesMax, base), autoMin = this._autoMin(seriesMin, seriesMax, axisOptions);\n if (axisOptions.axisCrossingValue <= 0) {\n axis._throwNegativeValuesError();\n }\n if (!defined(options.max)) {\n max = autoMax;\n } else if (options.max <= 0) {\n axis._throwNegativeValuesError();\n }\n if (!defined(options.min)) {\n min = autoMin;\n } else if (options.min <= 0) {\n axis._throwNegativeValuesError();\n }\n this.totalMin = defined(options.min) ? math.min(autoMin, options.min) : autoMin;\n this.totalMax = defined(options.max) ? math.max(autoMax, options.max) : autoMax;\n axis.logMin = round(log(min, base), DEFAULT_PRECISION);\n axis.logMax = round(log(max, base), DEFAULT_PRECISION);\n axisOptions.max = max;\n axisOptions.min = min;\n axisOptions.minorUnit = options.minorUnit || round(base - 1, DEFAULT_PRECISION);\n return axisOptions;\n },\n _autoMin: function (min, max, options) {\n var autoMin = min;\n var base = options.majorUnit;\n if (min <= 0) {\n autoMin = max <= 1 ? math.pow(base, -2) : 1;\n } else if (!options.narrowRange) {\n autoMin = math.pow(base, math.floor(log(min, base)));\n }\n return autoMin;\n },\n _autoMax: function (max, base) {\n var logMaxRemainder = round(log(max, base), DEFAULT_PRECISION) % 1;\n var autoMax;\n if (max <= 0) {\n autoMax = base;\n } else if (logMaxRemainder !== 0 && (logMaxRemainder < 0.3 || logMaxRemainder > 0.9)) {\n autoMax = math.pow(base, log(max, base) + 0.2);\n } else {\n autoMax = math.pow(base, math.ceil(log(max, base)));\n }\n return autoMax;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, -delta);\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = math.min(startValue, endValue);\n var max = math.max(startValue, endValue);\n return {\n min: min,\n max: max\n };\n },\n zoomRange: function (delta) {\n var options = this.options;\n var newRange = this.scaleRange(delta);\n var totalMax = this.totalMax;\n var totalMin = this.totalMin;\n var min = util.limitValue(newRange.min, totalMin, totalMax);\n var max = util.limitValue(newRange.max, totalMin, totalMax);\n var base = options.majorUnit;\n var acceptOptionsRange = max > min && options.min && options.max && round(log(options.max, base) - log(options.min, base), DEFAULT_PRECISION) < 1;\n var acceptNewRange = !(options.min === totalMin && options.max === totalMax) && round(log(max, base) - log(min, base), DEFAULT_PRECISION) >= 1;\n if (acceptOptionsRange || acceptNewRange) {\n return {\n min: min,\n max: max\n };\n }\n },\n _minorIntervalOptions: function (power) {\n var base = this.options.majorUnit, value = math.pow(base, power), nextValue = math.pow(base, power + 1), difference = nextValue - value, minorStep = difference / this.options.minorUnit;\n return {\n value: value,\n minorStep: minorStep\n };\n },\n _lineOptions: function () {\n var axis = this, options = axis.options, reverse = options.reverse, vertical = options.vertical, valueAxis = vertical ? Y : X, lineBox = axis.lineBox(), dir = vertical === reverse ? 1 : -1, startEdge = dir === 1 ? 1 : 2, lineSize = vertical ? lineBox.height() : lineBox.width(), step = dir * (lineSize / (axis.logMax - axis.logMin)), lineStart = lineBox[valueAxis + startEdge];\n return {\n step: step,\n lineStart: lineStart,\n lineBox: lineBox\n };\n }\n });\n dataviz.Gradients = {\n glass: {\n type: LINEAR,\n rotation: 0,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.25,\n color: WHITE,\n opacity: 0.3\n },\n {\n offset: 1,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n sharpBevel: {\n type: RADIAL,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0.55\n },\n {\n offset: 0.65,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.95,\n color: WHITE,\n opacity: 0.25\n }\n ]\n },\n roundedBevel: {\n type: RADIAL,\n stops: [\n {\n offset: 0.33,\n color: WHITE,\n opacity: 0.06\n },\n {\n offset: 0.83,\n color: WHITE,\n opacity: 0.2\n },\n {\n offset: 0.95,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n roundedGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.5,\n color: WHITE,\n opacity: 0.3\n },\n {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n sharpGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0.2\n },\n {\n offset: 0.15,\n color: WHITE,\n opacity: 0.15\n },\n {\n offset: 0.17,\n color: WHITE,\n opacity: 0.35\n },\n {\n offset: 0.85,\n color: WHITE,\n opacity: 0.05\n },\n {\n offset: 0.87,\n color: WHITE,\n opacity: 0.15\n },\n {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n }\n ]\n }\n };\n var ExportMixin = {\n extend: function (proto, skipLegacy) {\n if (!proto.exportVisual) {\n throw new Error('Mixin target has no exportVisual method defined.');\n }\n proto.exportSVG = this.exportSVG;\n proto.exportImage = this.exportImage;\n proto.exportPDF = this.exportPDF;\n if (!skipLegacy) {\n proto.svg = this.svg;\n proto.imageDataURL = this.imageDataURL;\n }\n },\n exportSVG: function (options) {\n return draw.exportSVG(this.exportVisual(), options);\n },\n exportImage: function (options) {\n return draw.exportImage(this.exportVisual(options), options);\n },\n exportPDF: function (options) {\n return draw.exportPDF(this.exportVisual(), options);\n },\n svg: function () {\n if (draw.svg.Surface) {\n return draw.svg._exportGroup(this.exportVisual());\n } else {\n throw new Error('SVG Export failed. Unable to export instantiate kendo.drawing.svg.Surface');\n }\n },\n imageDataURL: function () {\n if (!kendo.support.canvas) {\n return null;\n }\n if (draw.canvas.Surface) {\n var container = $('').css({\n display: 'none',\n width: this.element.width(),\n height: this.element.height()\n }).appendTo(document.body);\n var surface = new draw.canvas.Surface(container);\n surface.draw(this.exportVisual());\n var image = surface._rootElement.toDataURL();\n surface.destroy();\n container.remove();\n return image;\n } else {\n throw new Error('Image Export failed. Unable to export instantiate kendo.drawing.canvas.Surface');\n }\n }\n };\n function autoMajorUnit(min, max) {\n var diff = round(max - min, DEFAULT_PRECISION - 1);\n if (diff === 0) {\n if (max === 0) {\n return 0.1;\n }\n diff = math.abs(max);\n }\n var scale = math.pow(10, math.floor(math.log(diff) / math.log(10))), relativeValue = round(diff / scale, DEFAULT_PRECISION), scaleMultiplier = 1;\n if (relativeValue < 1.904762) {\n scaleMultiplier = 0.2;\n } else if (relativeValue < 4.761904) {\n scaleMultiplier = 0.5;\n } else if (relativeValue < 9.523809) {\n scaleMultiplier = 1;\n } else {\n scaleMultiplier = 2;\n }\n return round(scale * scaleMultiplier, DEFAULT_PRECISION);\n }\n function rotatePoint(x, y, cx, cy, angle) {\n var theta = angle * DEG_TO_RAD;\n return new Point2D(cx + (x - cx) * math.cos(theta) + (y - cy) * math.sin(theta), cy - (x - cx) * math.sin(theta) + (y - cy) * math.cos(theta));\n }\n function boxDiff(r, s) {\n if (r.x1 == s.x1 && r.y1 == s.y1 && r.x2 == s.x2 && r.y2 == s.y2) {\n return s;\n }\n var a = math.min(r.x1, s.x1), b = math.max(r.x1, s.x1), c = math.min(r.x2, s.x2), d = math.max(r.x2, s.x2), e = math.min(r.y1, s.y1), f = math.max(r.y1, s.y1), g = math.min(r.y2, s.y2), h = math.max(r.y2, s.y2), result = [];\n result[0] = Box2D(b, e, c, f);\n result[1] = Box2D(a, f, b, g);\n result[2] = Box2D(c, f, d, g);\n result[3] = Box2D(b, g, c, h);\n if (r.x1 == a && r.y1 == e || s.x1 == a && s.y1 == e) {\n result[4] = Box2D(a, e, b, f);\n result[5] = Box2D(c, g, d, h);\n } else {\n result[4] = Box2D(c, e, d, f);\n result[5] = Box2D(a, g, b, h);\n }\n return $.grep(result, function (box) {\n return box.height() > 0 && box.width() > 0;\n })[0];\n }\n function inArray(value, array) {\n return indexOf(value, array) != -1;\n }\n function ceil(value, step) {\n return round(math.ceil(value / step) * step, DEFAULT_PRECISION);\n }\n function floor(value, step) {\n return round(math.floor(value / step) * step, DEFAULT_PRECISION);\n }\n function round(value, precision) {\n var power = math.pow(10, precision || 0);\n return math.round(value * power) / power;\n }\n function log(y, x) {\n return math.log(y) / math.log(x);\n }\n function remainderClose(value, divisor, ratio) {\n var remainder = round(math.abs(value % divisor), DEFAULT_PRECISION), threshold = divisor * (1 - ratio);\n return remainder === 0 || remainder > threshold;\n }\n function interpolateValue(start, end, progress) {\n return round(start + (end - start) * progress, COORD_PRECISION);\n }\n function numericComparer(a, b) {\n return a - b;\n }\n function autoFormat(format, value) {\n if (format.match(FORMAT_REGEX)) {\n return kendo.format.apply(this, arguments);\n }\n return kendo.toString(value, format);\n }\n function clockwise(v1, v2) {\n return -v1.x * v2.y + v1.y * v2.x < 0;\n }\n function dateComparer(a, b) {\n if (a && b) {\n return a.getTime() - b.getTime();\n }\n return -1;\n }\n var CurveProcessor = function (closed) {\n this.closed = closed;\n };\n CurveProcessor.prototype = CurveProcessor.fn = {\n WEIGHT: 0.333,\n EXTREMUM_ALLOWED_DEVIATION: 0.01,\n process: function (dataPoints) {\n var that = this, closed = that.closed, points = dataPoints.slice(0), length = points.length, segments = [], p0, p1, p2, controlPoints, initialControlPoint, lastControlPoint, tangent;\n if (length > 2) {\n that.removeDuplicates(0, points);\n length = points.length;\n }\n if (length < 2 || length == 2 && points[0].equals(points[1])) {\n return segments;\n }\n p0 = points[0];\n p1 = points[1];\n p2 = points[2];\n segments.push(new draw.Segment(p0));\n while (p0.equals(points[length - 1])) {\n closed = true;\n points.pop();\n length--;\n }\n if (length == 2) {\n tangent = that.tangent(p0, p1, X, Y);\n last(segments).controlOut(that.firstControlPoint(tangent, p0, p1, X, Y));\n segments.push(new draw.Segment(p1, that.secondControlPoint(tangent, p0, p1, X, Y)));\n return segments;\n }\n if (closed) {\n p0 = points[length - 1];\n p1 = points[0];\n p2 = points[1];\n controlPoints = that.controlPoints(p0, p1, p2);\n initialControlPoint = controlPoints[1];\n lastControlPoint = controlPoints[0];\n } else {\n tangent = that.tangent(p0, p1, X, Y);\n initialControlPoint = that.firstControlPoint(tangent, p0, p1, X, Y);\n }\n var cp0 = initialControlPoint;\n for (var idx = 0; idx <= length - 3; idx++) {\n that.removeDuplicates(idx, points);\n length = points.length;\n if (idx + 3 <= length) {\n p0 = points[idx];\n p1 = points[idx + 1];\n p2 = points[idx + 2];\n controlPoints = that.controlPoints(p0, p1, p2);\n last(segments).controlOut(cp0);\n cp0 = controlPoints[1];\n var cp1 = controlPoints[0];\n segments.push(new draw.Segment(p1, cp1));\n }\n }\n if (closed) {\n p0 = points[length - 2];\n p1 = points[length - 1];\n p2 = points[0];\n controlPoints = that.controlPoints(p0, p1, p2);\n last(segments).controlOut(cp0);\n segments.push(new draw.Segment(p1, controlPoints[0]));\n last(segments).controlOut(controlPoints[1]);\n segments.push(new draw.Segment(p2, lastControlPoint));\n } else {\n tangent = that.tangent(p1, p2, X, Y);\n last(segments).controlOut(cp0);\n segments.push(new draw.Segment(p2, that.secondControlPoint(tangent, p1, p2, X, Y)));\n }\n return segments;\n },\n removeDuplicates: function (idx, points) {\n while (points[idx].equals(points[idx + 1]) || points[idx + 1].equals(points[idx + 2])) {\n points.splice(idx + 1, 1);\n }\n },\n invertAxis: function (p0, p1, p2) {\n var that = this, fn, y2, invertAxis = false;\n if (p0.x === p1.x) {\n invertAxis = true;\n } else if (p1.x === p2.x) {\n if (p1.y < p2.y && p0.y <= p1.y || p2.y < p1.y && p1.y <= p0.y) {\n invertAxis = true;\n }\n } else {\n fn = that.lineFunction(p0, p1);\n y2 = that.calculateFunction(fn, p2.x);\n if (!(p0.y <= p1.y && p2.y <= y2) && !(p1.y <= p0.y && p2.y >= y2)) {\n invertAxis = true;\n }\n }\n return invertAxis;\n },\n isLine: function (p0, p1, p2) {\n var that = this, fn = that.lineFunction(p0, p1), y2 = that.calculateFunction(fn, p2.x);\n return p0.x == p1.x && p1.x == p2.x || round(y2, 1) === round(p2.y, 1);\n },\n lineFunction: function (p1, p2) {\n var a = (p2.y - p1.y) / (p2.x - p1.x), b = p1.y - a * p1.x;\n return [\n b,\n a\n ];\n },\n controlPoints: function (p0, p1, p2) {\n var that = this, xField = X, yField = Y, restrict = false, switchOrientation = false, tangent, monotonic, firstControlPoint, secondControlPoint, allowedDeviation = that.EXTREMUM_ALLOWED_DEVIATION;\n if (that.isLine(p0, p1, p2)) {\n tangent = that.tangent(p0, p1, X, Y);\n } else {\n monotonic = {\n x: that.isMonotonicByField(p0, p1, p2, X),\n y: that.isMonotonicByField(p0, p1, p2, Y)\n };\n if (monotonic.x && monotonic.y) {\n tangent = that.tangent(p0, p2, X, Y);\n restrict = true;\n } else {\n if (that.invertAxis(p0, p1, p2)) {\n xField = Y;\n yField = X;\n }\n if (monotonic[xField]) {\n tangent = 0;\n } else {\n var sign;\n if (p2[yField] < p0[yField] && p0[yField] <= p1[yField] || p0[yField] < p2[yField] && p1[yField] <= p0[yField]) {\n sign = that.sign((p2[yField] - p0[yField]) * (p1[xField] - p0[xField]));\n } else {\n sign = -that.sign((p2[xField] - p0[xField]) * (p1[yField] - p0[yField]));\n }\n tangent = allowedDeviation * sign;\n switchOrientation = true;\n }\n }\n }\n secondControlPoint = that.secondControlPoint(tangent, p0, p1, xField, yField);\n if (switchOrientation) {\n var oldXField = xField;\n xField = yField;\n yField = oldXField;\n }\n firstControlPoint = that.firstControlPoint(tangent, p1, p2, xField, yField);\n if (restrict) {\n that.restrictControlPoint(p0, p1, secondControlPoint, tangent);\n that.restrictControlPoint(p1, p2, firstControlPoint, tangent);\n }\n return [\n secondControlPoint,\n firstControlPoint\n ];\n },\n sign: function (x) {\n return x <= 0 ? -1 : 1;\n },\n restrictControlPoint: function (p1, p2, cp, tangent) {\n if (p1.y < p2.y) {\n if (p2.y < cp.y) {\n cp.x = p1.x + (p2.y - p1.y) / tangent;\n cp.y = p2.y;\n } else if (cp.y < p1.y) {\n cp.x = p2.x - (p2.y - p1.y) / tangent;\n cp.y = p1.y;\n }\n } else {\n if (cp.y < p2.y) {\n cp.x = p1.x - (p1.y - p2.y) / tangent;\n cp.y = p2.y;\n } else if (p1.y < cp.y) {\n cp.x = p2.x + (p1.y - p2.y) / tangent;\n cp.y = p1.y;\n }\n }\n },\n tangent: function (p0, p1, xField, yField) {\n var tangent, x = p1[xField] - p0[xField], y = p1[yField] - p0[yField];\n if (x === 0) {\n tangent = 0;\n } else {\n tangent = y / x;\n }\n return tangent;\n },\n isMonotonicByField: function (p0, p1, p2, field) {\n return p2[field] > p1[field] && p1[field] > p0[field] || p2[field] < p1[field] && p1[field] < p0[field];\n },\n firstControlPoint: function (tangent, p0, p3, xField, yField) {\n var that = this, t1 = p0[xField], t2 = p3[xField], distance = (t2 - t1) * that.WEIGHT;\n return that.point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n },\n secondControlPoint: function (tangent, p0, p3, xField, yField) {\n var that = this, t1 = p0[xField], t2 = p3[xField], distance = (t2 - t1) * that.WEIGHT;\n return that.point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n },\n point: function (xValue, yValue, xField, yField) {\n var controlPoint = new geom.Point();\n controlPoint[xField] = xValue;\n controlPoint[yField] = yValue;\n return controlPoint;\n },\n calculateFunction: function (fn, x) {\n var result = 0, length = fn.length;\n for (var i = 0; i < length; i++) {\n result += Math.pow(x, i) * fn[i];\n }\n return result;\n }\n };\n function mwDelta(e) {\n var origEvent = e.originalEvent, delta = 0;\n if (origEvent.wheelDelta) {\n delta = -origEvent.wheelDelta / 120;\n delta = delta > 0 ? math.ceil(delta) : math.floor(delta);\n }\n if (origEvent.detail) {\n delta = round(origEvent.detail / 3);\n }\n return delta;\n }\n function decodeEntities(text) {\n if (!text || !text.indexOf || text.indexOf('&') < 0) {\n return text;\n } else {\n var element = decodeEntities._element;\n element.innerHTML = text;\n return element.textContent || element.innerText;\n }\n }\n function alignPathToPixel(path) {\n if (!kendo.support.vml) {\n var offset = 0.5;\n if (path.options.stroke && defined(path.options.stroke.width)) {\n if (path.options.stroke.width % 2 === 0) {\n offset = 0;\n }\n }\n for (var i = 0; i < path.segments.length; i++) {\n path.segments[i].anchor().round(0).translate(offset, offset);\n }\n }\n return path;\n }\n function innerRadialStops(options) {\n var stops = options.stops, usedSpace = options.innerRadius / options.radius * 100, i, length = stops.length, currentStop, currentStops = [];\n for (i = 0; i < length; i++) {\n currentStop = deepExtend({}, stops[i]);\n currentStop.offset = (currentStop.offset * (100 - usedSpace) + usedSpace) / 100;\n currentStops.push(currentStop);\n }\n return currentStops;\n }\n function rectToBox(rect) {\n var origin = rect.origin;\n var bottomRight = rect.bottomRight();\n return new Box2D(origin.x, origin.y, bottomRight.x, bottomRight.y);\n }\n function eventTargetElement(e) {\n e = e || {};\n var element = $(e.touch ? e.touch.initialTouch : e.target);\n return element;\n }\n decodeEntities._element = document.createElement('span');\n deepExtend(kendo.dataviz, {\n AXIS_LABEL_CLICK: AXIS_LABEL_CLICK,\n COORD_PRECISION: COORD_PRECISION,\n DEFAULT_PRECISION: DEFAULT_PRECISION,\n DEFAULT_WIDTH: DEFAULT_WIDTH,\n DEFAULT_HEIGHT: DEFAULT_HEIGHT,\n DEFAULT_FONT: DEFAULT_FONT,\n INITIAL_ANIMATION_DURATION: INITIAL_ANIMATION_DURATION,\n NOTE_CLICK: NOTE_CLICK,\n NOTE_HOVER: NOTE_HOVER,\n CLIP: CLIP,\n Axis: Axis,\n AxisLabel: AxisLabel,\n Box2D: Box2D,\n BoxElement: BoxElement,\n ChartElement: ChartElement,\n CurveProcessor: CurveProcessor,\n ExportMixin: ExportMixin,\n FloatElement: FloatElement,\n LogarithmicAxis: LogarithmicAxis,\n Note: Note,\n NumericAxis: NumericAxis,\n Point2D: Point2D,\n Ring: Ring,\n RootElement: RootElement,\n Sector: Sector,\n ShapeBuilder: ShapeBuilder,\n ShapeElement: ShapeElement,\n Text: Text,\n TextBox: TextBox,\n Title: Title,\n alignPathToPixel: alignPathToPixel,\n autoFormat: autoFormat,\n autoMajorUnit: autoMajorUnit,\n boxDiff: boxDiff,\n dateComparer: dateComparer,\n decodeEntities: decodeEntities,\n eventTargetElement: eventTargetElement,\n getSpacing: getSpacing,\n inArray: inArray,\n interpolateValue: interpolateValue,\n mwDelta: mwDelta,\n rectToBox: rectToBox,\n rotatePoint: rotatePoint,\n round: round,\n ceil: ceil,\n floor: floor\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"],"sourceRoot":"/source/"}