{"version":3,"sources":["obcinegraphs.js","kendo.datavizchart.js"],"names":["drawPopulationPyramid","_isRegion","_culture","_id","_divLeft","_divRight","urlWebService","virtualDirectory","$","ajax","type","url","contentType","dataType","success","_chartWrapper","fillGraph","Series","Title","Categories","_graphDivId","_width","_height","_titleGraph","_arrayOfSeriesWrapper","_categories","_reverse","_yAxisTitleVisible","kendoChart","legend","position","orientation","height","valueAxes","name","ValueAxisTitle","title","font","text","min","max","reverse","axisCrossingValues","categoryAxes","CategoryAxisTitle","rotation","visible","categories","concat","majorGridLines","margin","padding","labels","chart","data","chartOptions","options","i","length","series","push","TypeOfGraph","Values","color","SeriesColor","axis","tooltip","format","refresh","f","define","window","undefined","Class","compilePart","part","stringPart","split","join","replace","first","charAt","rest","substring","pad","number","digits","end","zeros","getShadows","element","shadow","css","kendo","support","transitions","radius","match","boxShadowRegExp","blur","math","left","right","bottom","wrap","autosize","percentage","browser","isRtl","parent","hasClass","wrapper","wrapperStyle","style","is","show","percentRegExp","test","width","outerWidth","outerHeight","boxSizing","mozBoxSizing","webkitBoxSizing","shadows","percentWidth","percentHeight","opera","addClass","marginLeft","paddingLeft","paddingRight","paddingBottom","msie","floor","version","zoom","children","deepExtend","destination","arguments","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","LazyObservableArray","DataSource","HierarchicalDataSource","OBJECT","constructor","Array","Date","getTime","isFunction","clone","UNDEFINED","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toLowerCase","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","each","idx","value","getPropertyValue","currentStyle","size","isScrollable","overflow","obj","key","result","getOffset","positioned","mobileOS","pointers","msPointers","top","pageYOffset","documentElement","scrollTop","pageXOffset","scrollLeft","parseEffects","input","effects","this","fx","Element","prepareAnimationOptions","duration","complete","STRING","BOOLEAN","extend","init","noop","teardown","hide","completeCallback","animate","instance","queue","promise","toggleClass","classes","add","htmlEncode","ampRegExp","ltRegExp","gtRegExp","quoteRegExp","aposRegExp","parseOption","option","indexOf","dashRegExp","getAttribute","ns","numberRegExp","parseFloat","jsonRegExp","jsonFormatRegExp","Function","parseOptions","templateRegExp","template","html","containmentComparer","a","b","contains","resizableWidget","widget","inArray","attr","focusable","isTabIndexNotNaN","nodeName","disabled","href","parents","addBack","filter","expr","filters","hidden","kendoJQuery","selector","context","fn","Template","cultures","isArray","proxy","Math","JSON","formatRegExp","FUNCTION","NUMBER","NULL","getterCache","setterCache","slice","globalize","Globalize","proto","member","base","that","subclass","apply","prototype","Object","_initOptions","preventDefault","_defaultPrevented","isDefaultPrevented","Observable","_events","bind","eventName","handlers","one","original","handler","events","eventNames","handlersIsFunction","unbind","unshift","trigger","e","sender","call","splice","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","paramName","useWithBlock","render","compile","parts","settings","argumentName","functionBody","_slotCount","Error","quote","string","escapable","lastIndex","c","meta","charCodeAt","toString","holder","k","v","partial","mind","gap","toJSON","rep","isFinite","String","indent","\b","\t","\n","\f","\r","\"","\\","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","stringify","replacer","space","findCulture","culture","numberFormat","getCulture","current","expandNumberFormat","groupSizes","groupSize","percent","currency","formatDate","date","calendar","calendars","standard","days","months","patterns","dateFormatRegExp","minutes","sign","getDate","namesAbbr","getDay","names","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","AM","PM","getTimezoneOffset","abs","formatNumber","symbol","isCurrency","isPercent","customPrecision","formatAndPrecision","integer","fraction","integerLength","fractionLength","ch","hasGroup","hasNegativeFormat","decimalIndex","sharpIndex","zeroIndex","hasZero","hasSharp","percentIndex","currencyIndex","startZeroIndex","groupSeparator","COMMA","decimal","POINT","precision","decimals","pattern","literals","negative","replacement","EMPTY","start","toLocaleString","standardFormatRegExp","exec","toExponential","round","literalRegExp","quoteChar","literal","PLACEHOLDER","SHARP","ZERO","commaRegExp","lastIndexOf","EN","objectToString",",",".","namesShort","d","D","F","G","m","M","s","t","T","u","y","Y","/",":","firstDay","twoDigitYearMax","cultureName","load","toFixed","fmt","isPlainObject","values","index","placeholderFormat","parseInt","_extractFormat","_activeElement","activeElement","_round","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","adjustDST","hours","setHours","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","hasTime","lookAhead","getNumber","rg","RegExp","substr","valueIdx","getIndexByName","lower","nameLength","subValue","checkLiteral","year","month","day","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","pow","longTimeZoneRegExp","shortTimeZoneRegExp","isNaN","setFullYear","parseMicrosoftFormatOffset","offset","nonBreakingSpaceRegExp","exponentRegExp","dateRegExp","offsetRegExp","formatsSequence",2,3,4,"parseDate","formats","tzoffset","timezone","convert","percentSymbol","_scrollbar","scrollbar","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","scrollWidth","removeChild","closest","table","tbodyInnerHtml","touch","MSPointerEvent","PointerEvent","transforms","elementProto","HTMLElement","hasHW3D","WebKitCSSMatrix","prefix","hasTransitions","lowPrefix","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","chrome","webkit","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","kineticScrollNeeded","hasNativeScrolling","mouseAndTouchPresent","detectBrowser","safari","mozilla","documentMode","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","clientWidth","cssBorderSpacing","borderSpacing","cssClass","docElement","eventCapture","addEventListener","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","threshold","sorted","field","sort","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","nodeList","querySelectorAll","parentNode","pushState","history","hashChange","directions","down","up","in","out","enabled","display","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","kendoRemoveClass","kendoToggleClass","toggle","eventTarget","target","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","mousedown","mouseup","mousemove","mousecancel","click","resize","wrapExpression","members","localUrlRe","ui","mobile","dataviz","keys","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","LEFT","UP","RIGHT","DOWN","END","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","isLocalUrl","expression","safe","getter","setter","accessor","get","set","guid","random","id","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","logToConsole","message","console","suppressLog","log","Widget","jQuery","angular","dataSource","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","DataBoundWidget","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","initWidget","roles","fullPath","widgetKeyRegExp","nodeType","widgetKey","isEmptyObject","rolesFromNamespaces","namespaces","find","widgets","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","prependTo","remove","plugin","register","args","method","ContainerNullObject","nullObject","MobileWidget","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","appLevelNativeScrolling","application","themes","views","touchScroller","Scroller","kendoMobileScroller","suites","onResize","setTimeout","on","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","MOUSE_EVENTS","EXCLUDE_BUST_CLICK_SELECTOR","MouseEventNormalizer","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","eventMap","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","getEventMap","eventRegEx","applyEventMap","rootjQuery","pop","search","touchstart","touchend","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","findZone","zones","zoneRules","until","zoneAndRule","info","abbr","fromOffset","toOffset","fromLocalOffset","toLocalOffset","toLocalDate","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","lastDayOfMonth","last","timeOffset","toUtcTime","isInTimeRange","msValue","msMin","msMax","MS_PER_DAY","isInDateRange","addDays","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","toInvariantTime","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","createNodeIterator","iterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","child","nodeValue","animationFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","animationQueue","queueAnimation","runNextAnimation","shift","parseQueryStringParams","queryString","params","paramParts","decodeURIComponent","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","VERTICAL_AXIS","throttle","delay","timeout","lastExecTime","throttled","elapsed","caret","rangeElement","isPosition","selectionStart","focus","setSelectionRange","selectionEnd","selection","createTextRange","collapse","moveStart","moveEnd","select","rangeDuplicated","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","el","firstElement","lastElement","keyCode","shiftKey","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","base64","appendTo","submit","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","fileSaver","download","createEvent","initMouseEvent","dispatchEvent","downloadAttribute","saveAs","save","forceProxy","toOdataFilter","useOdataFour","operator","ignoreCase","logic","odataFilters","odataFiltersVersionFour","stripMetadata","neq","gt","gte","lt","lte","doesnotcontain","endswith","startswith","mappers","pageSize","page","useVersionFour","$filter","orderby","order","$orderby","skip","$skip","take","$top","defaultDataType","read","schemas","odata","results","total","transports","jsonp","update","create","parameterMap","$inlinecount","$format","odata-v4","$count","XmlDataReader","model","parse","errors","serialize","modelBase","Model","fields","idField","xpathToMember","modelInstance","evaluate","record","_parse","xmlParse","xml","parseDOM","parsedNode","attribute","attributes","attributeCount","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","eventHandler","CHANGE","_notifyChange","equal","xtype","ytype","getFieldByName","fieldName","Query","normalizeSort","descriptor","descriptors","normalizeOperator","operatorMap","normalizeFilter","normalizeAggregate","expressions","normalizeGroup","aggregates","groupValueComparer","calculateAggregate","accumulator","item","state","aggr","functionName","len","aggregate","functions","isNumber","val","isDate","serializeRecords","getters","originalFieldNames","fieldNames","originalName","convertRecords","convertGroup","hasSubgroups","wrapDataAccess","originalFunction","converter","mergeGroups","dest","group","flattenGroups","itemIndex","at","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","observable","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","removeModel","uid","indexOfPristineModel","indexOfModel","comparer","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","inferSelect","optgroup","firstField","secondField","label","specified","inferTable","fieldIndex","cells","cell","empty","tbody","tBodies","rows","fieldCount","dataMethod","_data","_attachBubbleHandlers","inferList","list","collection","textChild","className","textField","urlField","spriteCssClassField","imageUrlField","_loaded","prop","hasChildren","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","newLineRegExp","ObservableObject","wrapAll","json","object","howMany","forEach","reduce","initialValue","reduceRight","every","some","_parent","shouldSerialize","_set","composite","paths","path","isObservableArray","isDataSource","parsers","boolean","default","defaultValues","defaults","_initializers","dirty","_defaultId","editable","initiator","accept","isNew","functionFields","nullable","defaultValue","Comparer","compare","localeCompare","combine","comparers","StableComparer","asc","valueA","valueB","__position","desc","operators","op","ignore","filterExpr","and","or","fieldFunctions","operatorFunctions","==","equals","isequalto","equalto","!=","ne","notequals","isnotequalto","notequalto","notequal","<","islessthan","lessthan","less","<=","le","islessthanorequalto","lessthanequal",">","isgreaterthan","greaterthan","greater",">=","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","toArray","range","orderBy","orderByDescending","compiled","predicate","allData","groupBy","currentValue","_sortForGrouping","groupValue","sum","average","process","query","filterCallback","LocalTransport","RemoteTransport","Cache","setup","error","parameters","operation","_store","clear","store","inmemory","DataReader","schema","dataFunction","_dataAccessFunction","groupsFunction","groups","serializeFunction","serializeGetters","fromName","_map","_prefetch","_pristineData","_ranges","_view","_pristineTotal","_destroyed","_pageSize","_page","_sort","_filter","_group","_aggregate","_total","_shouldDetachObservableParents","transport","Transport","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","batch","online","sync","Deferred","resolve","offlineData","_isServerGrouped","_push","_readData","_flatData","getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","pushed","autoSync","pristine","_updatePristineForModel","_removeItems","destroyed","found","_eachItem","_removePristineForModel","hasGroups","_removeModelFromRanges","_updateRangesLength","created","updated","promises","_sendSubmit","_send","when","then","_accept","_change","cancelChanges","_cancelModel","hasChanges","models","response","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","__state__","_submit","status","reject","deferred","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","_aggregateResult","itemIds","updatePristine","_skip","timestamp","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","arrayType","_changeHandler","_calculateAggregates","_take","_queryProcess","_mergeState","remote","fetch","_query","next","totalPages","prev","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","_skipRequestsInProgress","_timeStamp","_currentRequestTimeStamp","pageSkip","paging","sorting","filtering","_rangeExists","prefetch","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","_mergeGroups","prevGroup","temp","_prefetchSuccessHandler","_timeout","_multiplePrefetch","rangeLength","startOffset","transportOptions","Node","childrenField","childrenOptions","_childrenOptions","_initChildren","_updateChildrenField","append","loaded","level","_childrenLoaded","_find","_dataSource","Buffer","viewSize","disablePrefetch","_prefetching","_reset","_syncWithDataSource","setViewSize","_recalculate","itemPresent","useRanges","dataOffset","prefetchThreshold","midPageThreshold","nextMidRange","nextPageThreshold","nextFullRange","pullBackThreshold","previousMidRange","previousFullRange","_goToRange","nextRange","syncDataSource","prefetchOffset","expanding","_expanding","_syncPending","_firstItemUid","BatchBuffer","batchSize","batchBuffer","endreached","prefetching","prefetched","reset","touchDelta","touch1","touch2","x1","y1","x2","y2","dx","dy","center","distance","sqrt","getTouches","currentTarget","api","identifier","pointerId","withEachUpEvent","downEvents","now","OS","invalidZeroEvents","DEFAULT_MIN_HOLD","DEFAULT_THRESHOLD","PRESS","HOLD","SELECT","START","MOVE","CANCEL","TAP","RELEASE","GESTURESTART","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","mouse","pointer","ENABLE_GLOBAL_SURFACE","TouchAxis","_updateLocationData","startLocation","velocity","timeStamp","timeDelta","initialDelta","Touch","userEvents","touchInfo","initialTouch","pressEvent","_moved","_finished","press","_holdTimeout","minHold","_trigger","_hold","_withinIgnoreThreshold","UserEvents","dispose","_start","endTime","activeTouches","isMoved","startTime","xDelta","yDelta","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","eventNS","surface","global","pressed","preventDragEvent","root","surfaceElement","preventIfMovingProxy","preventIfMoving","_isMoved","removeEventListener","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","methodName","matchingTouch","dict","pageX","pageY","defaultThreshold","parseColor","nothrow","_Color","namedColorRegexp","_RGB","Color","namedColors","_Bytes","hex","n","re","processor","channels","resolveColor","r","normalizeByte","toHex","padDigit","brightness","percBrightness","aqua","azure","beige","black","blue","brown","coral","cyan","darkblue","darkcyan","darkgray","darkgreen","darkorange","darkred","dimgray","fuchsia","gold","goldenrod","gray","green","greenyellow","indigo","ivory","khaki","lightblue","lightgrey","lightgreen","lightpink","lightyellow","lime","limegreen","linen","magenta","maroon","mediumblue","navy","olive","orange","orangered","orchid","pink","plum","purple","red","royalblue","salmon","silver","skyblue","slateblue","slategray","snow","steelblue","tan","teal","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","toHSV","toRGB","toBytes","toCss","toCssRgba","rgb","toDisplay","diff","c2","NaN","c1","h","_HSV","p","q","fromBytes","fromRGB","fromHSV","defined","power","limitValue","rad","degrees","DEG_TO_RAD","deg","radians","valueOrDefault","sqr","objectKey","hashKey","hash","hashObject","arrayLimits","arr","MAX_NUM","MIN_NUM","arrayMin","arrayMax","sparseArrayMin","sparseArrayLimits","sparseArrayMax","second","renderTemplate","renderAttr","renderAllAttr","attrs","output","renderStyle","renderSize","renderPos","pos","isTransparent","PI","MAX_VALUE","util","encodeBase64","chr1","chr2","chr3","enc1","enc2","enc3","enc4","encodeUTF8","KEY_STR","fromCharCode","ObserversMixin","observers","_observers","addObserver","removeObserver","observer","_suspended","optionsChange","geometryChange","suspend","resume","_observerField","mixins","transform","matrix","Transformation","toMatrix","ellipseExtremeAngles","ry","extremeX","extremeY","atan2","bboxStartAngle","angle","defineAccessors","capitalized","setAccessor","getAccessor","elipseAngle","swipe","alpha","calculateAngle","cx","cy","cos","sin","normalizeArcParameters","largeArc","cx1","cy1","x21","y21","rx2","ry2","yk2","l","Point","startAngle","endAngle","PI_DIV_2","other","rotate","origin","translate","translateWith","point","scale","scaleX","scaleY","scaleCopy","transformation","mx","transformCopy","distanceTo","doRound","separator","arg0","arg1","minX","minY","pt","p0","p1","maxX","maxY","minPoint","maxPoint","Size","Rect","setOrigin","getOrigin","topLeft","bottomRight","topRight","bottomLeft","bbox","tl","tr","br","bl","fromPoints","union","intersect","Circle","setCenter","setRadius","getCenter","pointAt","_pointAt","extremeAngles","currentPointX","currentPointY","currentPoint","Arc","radiusX","radiusY","anticlockwise","MAX_INTERVAL","radian","curvePoints","currentAngle","interval","_arcInterval","intervalAngle","subIntervalsCount","subIntervalAngle","nextAngle","points","_intervalCurvePoints","cp1","cp2","p2","arc","endPoint","currentAngleX","currentAngleY","oldStart","p1Derivative","_derivativeAt","p2Derivative","arcParameters","Matrix","multiplyCopy","invert","det","unit","IDENTITY","_matrix","_optionsChange","multiply","geometry","Surface","_click","_handler","_mouseenter","_mouseleave","_visual","drawing","Group","draw","exportVisual","domNode","_kendoNode","srcElement","SurfaceFactory","BaseNode","observe","insertAt","removeSelf","invalidate","childrenChange","OptionsStore","_wrap","_clear","_items","entry","preferred","DASH_ARRAYS","dot","dash","longdash","dashdot","longdashdot","longdashdotdot","GRADIENT","Paintable","fill","stroke","opacity","newFill","Traversable","traverse","measureText","TextMetrics","measure","doc","BASELINE_MARKER_SIZE","LRUCache","_length","put","lru","_head","_tail","newer","older","_cache","styleKey","cacheKey","cachedResult","baseline","measureBox","_measureBox","baselineMarker","_baselineMarker","cloneNode","offsetTop","elementsBoundingBox","applyTransform","boundingBox","elementBoundingBox","rawBBox","elementsClippedBoundingBox","clippedBBox","expandRect","rect","defineGeometryAccessors","geometryAccessor","definePointAccessors","pointAccessor","defineOptionsAccessors","optionsAccessor","generateDefinitionId","defId","align","alignment","alignElements","vAlign","stack","stackElements","getStackElements","vStack","wrapElements","vWrap","otherAxis","sizeField","startElement","elementIdx","stacks","getStacks","translateToPoint","fit","elementSize","rectSize","maxSize","stackSize","addElementToStack","stackAxis","previousBBox","alignStart","transofrm","HORIZONTAL","clip","parentTransform","parentMatrix","currentTransform","combinedMatrix","elementTransform","elementMatrix","box","_clippedBBox","ElementsArray","_splice","_add","_remove","_clearObserver","_setObserver","_reparent","removeAt","newParent","Text","content","metrics","_geometry","strokeWidth","toPath","Path","moveTo","curveTo","GeometryElementsArray","Segment","anchor","controlIn","controlOut","bboxTo","toSegment","segmentAnchor","toSegmentAnchor","_curveBoundingBox","_lineBoundingBox","extremesX","_curveExtremesFor","extremesY","xLimits","yLimits","extremes","_curveExtremes","_calculateCurveAt","t1","x3","x4","t2","segments","lineJoin","lineTo","segment","lastSegment","_addArcSegments","arcTo","close","closed","_bbox","segmentBox","fromRect","fromArc","MultiPath","Image","src","_rect","GradientStop","arg","StopsArray","Gradient","stops","_createStops","_userSpace","userSpace","addStop","removeStop","LinearGradient","RadialGradient","_radius","_fallbackFill","fallbackFill","Layout","_defaults","_fieldMap","alignContent","justifyContent","alignItems","spacing","lineSpacing","_initMap","fieldMap","groupsSizeField","groupAxis","groupsAxis","reflow","elementStart","groupBox","groupOptions","_initGroups","groupsSize","groupStart","groupOrigin","elementOrigin","groupIdx","lineSize","bboxes","scaledStart","scaledSize","newStart","_newGroup","addGroup","_addToGroup","parseParameters","SPLIT_REGEX","toLineParamaters","isVertical","insertPosition","reflectionPoint","quadraticToCubicControlPoints","controlPoint","third","SEGMENT_REGEX","CLOSE","PathParser","previousCommand","multiPath","closePath","command","isRelative","ShapeMap","lastControlIn","cubicControlPoints","alignToScreen","ctm","getScreenCTM","baseUrl","getElementsByTagName","hashIndex","refUrl","exportGroup","RootNode","encodeText","exportRoot","svg","SVG_NS","exportSVG","isDefinition","decodeEntities","_element","innerText","BUTT","NONE","NS","SOLID","SPACE","TRANSFORM","_root","renderSVG","_template","_rootElement","firstElementChild","attachTo","viewBox","_offset","visual","definitions","clearDefinitions","childNode","nodeMap","createDefinitions","insertBefore","setElement","childElement","nodes","renderChildren","DefinitionMap","updateDefinition","allAttr","allCss","removeAttribute","mapTransform","renderTransform","transformChange","mapStyle","cursor","renderOpacity","definition","hasDefinitions","definitionChange","renderDefinitions","mapDefinitions","defs","DefinitionNode","definitionMap","addDefinitions","removeDefinitions","createDefinition","ClipNode","LinearGradientNode","RadialGradientNode","addDefinition","mapItem","removeDefinition","GroupNode","PathNode","renderData","mapFill","mapStroke","attributeMap","fill.opacity","stroke.color","stroke.width","stroke.opacity","printPath","segmentType","currentType","printPoints","segmentStart","segmentEnd","renderLinecap","dashType","renderDashType","renderStroke","dashArray","lineCap","renderFill","ArcNode","MultiPathNode","CircleNode","TextNode","setY","ImageNode","mapPosition","mapSource","renderPosition","renderSource","GradientStopNode","renderOffset","GradientNode","loadStops","stopNode","mapCoordinates","renderCoordinates","mapSpace","testFragment","testContainer","hasParser","DOMParser","namespaceURI","parser","chartDoc","parseFromString","importedDoc","adoptNode","implementation","hasFeature","_exportGroup","exportImage","cors","image","always","addGradientStops","gradient","addColorStop","FRAME_DELAY","canvas","rootElement","loadingStates","loading","defer","done","_invalidate","toDataURL","fail","initClip","clearClip","setClip","ctx","beginPath","renderPoints","setTransform","setOpacity","globalAlpha","renderTo","restore","getContext","clearRect","setLineDash","setLineCap","setLineJoin","setFill","setStroke","hasFill","setGradientFill","fillStyle","createLinearGradient","createRadialGradient","strokeStyle","lineWidth","mozDash","webkitLineDash","seg","prevSeg","prevOut","bezierCurveTo","fillText","strokeText","onLoad","onError","img","crossOrigin","onload","onerror","drawImage","enableVML","kvml","stylesheet","styleSheets","createStyleSheet","addRule","createElementVML","COORDINATE_MULTIPLE","open","fillField","stopColor","baseColor","baseOpacity","blendColors","overlay","overlayColor","blendChannel","COORDINATE_SIZE","TRANSFORM_PRECISION","attachReference","combinedTransform","currentOpacity","setStyle","mapOpacityTo","multiplier","ClipObserver","ObserverNode","clipRect","EMPTY_CLIP","clipBBox","_attachTo","frag","createDocumentFragment","refreshTransform","refreshOpacity","StrokeNode","FillNode","mapGradient","mapFillColor","mapLinearGradient","supportVML","mapRadialGradient","addColors","focusx","focusy","stopColors","colorsField","colors","color2","TransformNode","transformOrigin","ShapeNode","createFillNode","createTransformNode","setCoordsize","PathDataNode","setPathData","pathData","createDataNode","MultiPathDataNode","CircleTransformNode","originX","originY","diameter","ArcDataNode","TextPathDataNode","TextPathNode","setString","ImagePathDataNode","ImageFillNode","setSrc","rawbbox","rawcenter","fillOrigin","fillSize","sx","sy","ax","ay","vml","drawDOM","doOne","getBoundingClientRect","nodeInfo","_clipbox","geo","_stackingContext","renderElement","removeClass","makeTemplate","handlePageBreaks","forceBreak","pageWidth","pageHeight","doPageBreak","pages","splitElement","copy","makePage","pageNum","cacheImages","bottomPadding","bottomBorder","saveAdjust","adjust","isFirst","jqel","breakAtElement","fall","fallsOnMargin","splitText","firstInParent","setStartBefore","setEndBefore","extractContents","pageClassName","thing","available","selectNodeContents","nextnode","findEOP","setEnd","endOffset","ownerDocument","beforePageBreak","pdf","defineFont","getFontFaces","forcePageBreak","hasPaperSize","paperSize","paperOptions","getPaperOptions","def","multiPage","canceled","doStylesheet","ss","cssRules","ex","addRules","findFonts","splitProperty","getFontURL","styleSheet","family","bold","italic","getCounter","getAllCounters","getPrototypeOf","incCounter","inc","resetCounter","doCounters","IMAGE_CACHE","urls","dive","parseBackgroundImage","bg","romanNumeral",1,10,100,20,200,30,300,40,400,5,50,500,6,60,600,7,70,700,8,80,800,9,90,900,1000,"roman","alphaNumeral","pushNodeInfo","decoration","createsStackingContext","popNodeInfo","updateClipbox","emptyClipbox","cb","pseudoElt","pleaseSetPropertyValue","important","setProperty","actuallyGetRangeBoundingRect","getClientRects","getBorder","side","saveStyle","getBorderRadius","sanitizeRadius","getContentBox","innerBox","wt","wr","wb","wl","getTransform","radiansToDegrees","parseAngle","num","shape","setClipping","clipPath","addArcToPath","adjustBorderRadiusForBox","rTL","rTR","rBR","rBL","tl_x","tl_y","tr_x","tr_y","br_x","br_y","bl_x","bl_y","elementRoundBox","bt","bb","pr","pb","pl","roundBox","rTL0","rTR0","rBR0","rBL0","tmp","formatCounter","evalPseudoElementContent","displayCounter","getCssText","_renderWithPseudoElements","pseudo","kind","place","psel","KENDO_PSEUDO_ELEMENT","fake","_renderElement","adjustBoxes","boxes","tableBorderLeft","tableBorderTop","tableBox","firstCell","firstCellBox","drawEdge","Wtop","Wleft","Wright","rl","rr","drawRoundCorner","ri","edge","drawBackground","background","_pdfLink","backgroundColor","backgroundImage","drawOneBackground","backgroundRepeat","backgroundPosition","backgroundOrigin","backgroundSize","drawBackgroundImage","img_width","img_height","renderBG","rewX","rewY","repeatX","aspect_ratio","orgBox","gradientRenderer","drawBullet","_drawBullet","bullet","listStylePosition","textAlign","elementIndex","listStyleType","fontSize","lineHeight","fontFamily","disc","circle","square","drawOneBox","isLast","inv","shouldDrawLeft","shouldDrawRight","innerbox","clipit","isFormField","maybeRenderWidget","renderContents","pxlen","scaledAngle","atan","implicit","exportDOMVisual","renderImage","zIndexSort","sa","sb","za","zb","pa","getSelectedOption","selectedOptions","selectedIndex","renderFormField","tag","whiteSpace","multiple","blocks","floats","inline","renderText","floating","doChunk","origStart","setStart","isJustified","findEOL","eol","estimateLineLength","cc","code","drawText","TextRect","decorate","line","ypos","groupInStackingContext","zIndex","main","_dom_zIndex","counterReset","counterIncrement","visibility","mmul","a1","b1","d1","e1","f1","a2","b2","d2","e2","f2","_pdfRect","skip_ws","tok_whitespace","token","read_stop","tok_length","tok_percent","read_linear_gradient","propName","to1","to2","tok_popen","tok_angle","tok_comma","tok_keyword","tok_pclose","read_url","tok_content","cache1","tok","tok_linear_gradient","tok_url","cache2","looking_at","in_paren","in_string","Animation","anim","easing","step","play","finish","abort","loop","_stopped","wallTime","easingPos","AnimationFactory","getSpacing","defaultSpacing","TOP","BOTTOM","createAxisTick","tickOptions","tickX","tickY","tick","vertical","alignPathToPixel","createAxisGridLine","gridLine","lineStart","lineEnd","autoMajorUnit","DEFAULT_PRECISION","relativeValue","scaleMultiplier","rotatePoint","theta","Point2D","boxDiff","Box2D","remainderClose","divisor","ratio","remainder","interpolateValue","COORD_PRECISION","numericComparer","autoFormat","FORMAT_REGEX","clockwise","v1","v2","dateComparer","mwDelta","origEvent","innerRadialStops","currentStop","usedSpace","innerRadius","currentStops","rectToBox","geom","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","NOTE_CLICK","NOTE_HOVER","OUTSIDE","RADIAL","TRIANGLE","WIDTH","WHITE","X","ZERO_THRESHOLD","cosT","sinT","onCircle","targetBox","wrapPoint","snapTo","alignTo","targetCenter","shrink","dw","dh","expand","unpad","containsPoint","getHash","overlaps","r1","r2","r3","r4","toRect","hasSize","sizeFunc","Ring","ring","ir","middle","newRadius","radianAngle","adjacentBox","sector","midAndle","midPoint","hw","hh","ca","vector","startPoint","startVector","endVector","dist","getBBox","angles","ea","allAngles","saIndex","eaIndex","Sector","ShapeBuilder","createRing","innerEnd","ChartElement","currentChild","getRoot","animation","translateChildren","childrenCount","renderVisual","createVisual","addVisual","createAnimation","renderComplete","chartElement","appendVisual","childVisual","noclip","clipRoot","stackRoot","stackVisual","visuals","sibling","here","matched","hasHighlight","highlight","createHighlight","toggleHighlight","_highlight","customVisual","highlightOptions","highlightVisualArgs","category","runningTotal","createGradientOverlay","gradientOptions","createGradient","RootElement","gradients","border","currentBox","createBackground","drawingGradient","hashCode","Gradients","BoxElement","shrinkToFit","reflowPaddingBox","paddingBox","borderWidth","contentBox","hasSetSize","hasBox","visualStyle","boxElement","opt","FloatElement","_initDirection","elementAxis","groupSizeField","elementSizeField","groupSpacing","elementSpacing","vSpacing","reflowChildren","groupElementStart","groupElements","groupElementsCount","elementBox","floatElement","groupsCount","groupsStart","maxGroupElementsSize","groupElementsSize","TextBox","ROWS_SPLIT_REGEX","textbox","_initContainer","rowIdx","textOptions","visualFn","_boxReflow","visualContext","visualBox","normalBox","rotatedBox","rotationTransform","visualOptions","getDefaultVisual","boxCenter","buildTitle","defaultOptions","AxisLabel","alignRotation","rotationMatrix","rotationOrigin","alignAxis","distanceAxis","axisAnchor","alignEnd","distanceLeft","distanceRight","alignCenter","Axis","majorTickSize","minorTickSize","minorTicks","minorTickType","majorTicks","majorTickType","_deferLables","createLabels","createTitle","createNotes","mirror","axisCrossingValue","minorGridLines","justified","notes","_alignLines","_deferLabels","labelOptions","labelsCount","autoRotateLabels","createAxisLabel","lineBox","axisX","axisY","titleOptions","visualSize","note","parseNoteValue","Note","createPlotBands","createLine","gridLinesVisual","gridLines","_gridLines","createTicks","lineGroup","tickPositions","skipUnit","tickLineOptions","majorUnit","getMajorTickPositions","getMinorTickPositions","minorUnit","_lineGroup","getActualTickSize","tickSize","_backgroundPath","slotX","slotY","plotBands","plotArea","_plotbandGroup","altAxis","pane","axes","getSlot","bandRect","createGridLines","axisLineVisible","linePos","lineOptions","labelSize","sizeFn","titleSize","maxLabelSize","rootBox","boxSize","arrangeTitle","arrangeLabels","arrangeNotes","labelBox","labelY","labelsBetweenTicks","labelOffset","firstTickPosition","nextTickPosition","labelX","tickIx","labelPos","slot","shouldRenderNote","secondAxis","axisLabelText","tmpl","icon","marker","noteTemplate","ShapeElement","wrapperBox","linePoints","targetPoint","defaultVisual","eventArgs","hover","leave","_unsetActivePoint","pointData","getElement","halfWidth","NumericAxis","seriesMin","seriesMax","initDefaults","startValue","userSetLimits","narrowRange","autoMin","autoAxisMin","autoMax","autoAxisMax","autoOptions","roundToMajorUnit","narrow","axisMax","axisMin","getDivisions","stepValue","getTickPositions","skipStep","divisions","startEdge","positions","limit","valueAxis","slotBox","getValue","valueOffset","translateRange","scaleRange","LogarithmicAxis","logMin","logMax","floorMax","ticks","traverseMajorTicksPositions","tickPosition","traverseMinorTicksPositions","_lineOptions","minorOptions","lineStep","_minorIntervalOptions","minorStep","_throwNegativeValuesError","logMaxRemainder","axisOptions","nextValue","glass","sharpBevel","roundedBevel","roundedGlass","sharpGlass","ExportMixin","skipLegacy","exportPDF","imageDataURL","CurveProcessor","WEIGHT","EXTREMUM_ALLOWED_DEVIATION","dataPoints","controlPoints","initialControlPoint","lastControlPoint","tangent","removeDuplicates","firstControlPoint","secondControlPoint","cp0","invertAxis","lineFunction","calculateFunction","isLine","monotonic","xField","yField","restrict","switchOrientation","allowedDeviation","isMonotonicByField","oldXField","restrictControlPoint","cp","p3","xValue","yValue","fuse","arr1","arr2","BAR_GAP","BAR_SPACING","SANS","SANS11","SANS12","SANS16","chartBaseTheme","seriesDefaults","donut","vericalLine","scatterLine","area","markers","verticalArea","radarLine","radarArea","candlestick","_brightness","downColor","ohlc","bubble","bar","column","rangeColumn","rangeBar","waterfall","horizontalWaterfall","verticalBullet","boxPlot","outliersField","meanField","whiskers","mean","median","funnel","categoryAxis","axisDefaults","crosshair","gaugeBaseTheme","diagramBaseTheme","shapeDefaults","handles","selectable","connectionDefaults","tools","registerTheme","themeName","gauge","diagram","treeMap","verticalLine","polarArea","polarLine","inactiveItems","errorBars","pie","scatter","chartArea","seriesColors","rangePlaceholderColor","connectorDefaults","thumb","connectors","noteStyle","AXIS","TEXT","INACTIVE","INACTIVE_SHAPE","AXIS_MINOR","SERIES","SERIES_LIGHT","PRIMARY","DIAGRAM_HOVER","DefaultAggregates","intersection","ua_t","u_b","applySeriesDefaults","themeOptions","seriesType","seriesLength","commonDefaults","themeSeriesDefaults","commonThemeDefaults","cleanupNestedSeriesDefaults","baseOptions","applySeriesColors","currentSeries","seriesColor","resolveAxisAliases","alias","CATEGORY","VALUE","applyAxisDefaults","themeAxisDefaults","axisName","axisColor","categoriesCount","seriesCount","getField","row","getDateField","toDate","toTime","addDuration","weekStartDay","YEARS","MONTHS","WEEKS","startOfWeek","DAYS","HOURS","dateEquals","MINUTES","TIME_PER_MINUTE","setSeconds","SECONDS","TIME_PER_SECOND","setMilliseconds","daysToSubtract","addTicks","TIME_PER_DAY","floorDate","ceilDate","dateDiff","offsetDiff","tzOffsetBefore","tzOffsetDiff","TIME_PER_UNIT","singleItemOrArray","axisGroupBox","axisBox","equalsIgnoreCase","appendIfNotNull","lteDateIndex","sortedDates","currentDate","low","high","countNumbers","areNumbers","axisRanges","evalOptions","dryRun","excluded","depth","needsEval","MAX_EXPAND_DEPTH","isFn","groupSeries","nameTemplate","groupIx","seriesClone","legacyTemplate","groupNameTemplate","dataLength","visibleInLegend","_groupIx","filterSeriesByType","sortDates","dates","uniqueDates","srcDates","isDateAxis","sampleCategory","dateCategory","DATE","transpose","rowIx","colIx","colCount","rowCount","ensureTree","seriesTotal","SeriesBinder","bindPoint","valueFields","hasGradientOverlay","returnSelf","anyHasZIndex","pointByCategoryName","hasValue","interpolate","ABOVE","AREA","AUTO","FIT","BAR","BAR_ALIGN_MIN_WIDTH","BAR_BORDER_BRIGHTNESS","BELOW","BOTH","BOX_PLOT","BUBBLE","BULLET","CANDLESTICK","CONTEXTMENU_NS","COLOR","COLUMN","CSS_PREFIX","CUSTOM","DATABOUND","DEFAULT_ERROR_BAR_WIDTH","DONUT","DONUT_SECTOR_ANIM_DELAY","DRAG","DRAG_END","DRAG_START","ERROR_LOW_FIELD","ERROR_HIGH_FIELD","X_ERROR_LOW_FIELD","X_ERROR_HIGH_FIELD","Y_ERROR_LOW_FIELD","Y_ERROR_HIGH_FIELD","FADEIN","FIRST","FROM","FUNNEL","GLASS","HORIZONTAL_WATERFALL","INSIDE_BASE","INSIDE_END","INTERPOLATE","LEAVE","LEGEND_ITEM_CLICK","LEGEND_ITEM_HOVER","LINE","LINE_MARKER_SIZE","LOGARITHMIC","MAX","MIN","MOUSELEAVE_NS","MOUSEMOVE_TRACKING","MOUSEOVER_NS","MOUSEOUT_NS","MOUSEMOVE_NS","MOUSEMOVE_DELAY","MOUSEWHEEL_DELAY","MOUSEWHEEL_NS","NOTE_TEXT","OHLC","OUTSIDE_END","PIE","PIE_SECTOR_ANIM_DELAY","PLOT_AREA_CLICK","POINTER","RANGE_BAR","RANGE_COLUMN","RENDER","ROUNDED_BEVEL","ROUNDED_GLASS","SCATTER","SCATTER_LINE","SELECT_START","SELECT_END","SERIES_CLICK","SERIES_HOVER","START_SCALE","STEP","SMOOTH","STD_ERR","STD_DEV","SUMMARY_FIELD","TIME_PER_HOUR","TIME_PER_WEEK","TIME_PER_MONTH","TIME_PER_YEAR","years","weeks","TO","TOOLTIP_ANIMATION_DURATION","TOOLTIP_OFFSET","TOOLTIP_SHOW_DELAY","TOOLTIP_HIDE_DELAY","TOOLTIP_INVERSE","VERTICAL_AREA","VERTICAL_BULLET","VERTICAL_LINE","WATERFALL","ZOOM_ACCELERATION","ZOOM_START","ZOOM","ZOOM_END","BASE_UNITS","EQUALLY_SPACED_SERIES","DateLabelFormats","Chart","userOptions","_originalOptions","_initTheme","_initSurface","_initDataSource","theme","seriesCopies","_applyDefaults","_dataChangeHandler","_onDataChanged","_bindCategories","_hasDataSource","_redraw","_attachEvents","autoBind","setDataSource","_hasData","renderAs","negativeValues","xAxis","yAxis","panes","_bindSeries","redraw","paneName","_model","_plotArea","findPane","getAxis","ChartAxis","seriesName","categoryName","firstSeries","srcSeries","pointsBySeriesName","charts","togglePointHighlight","_surfaceWrap","_getModel","_destroyView","_tooltip","_createTooltip","Highlight","_setupSelection","_sharedTooltip","CategoricalPlotArea","shared","SharedTooltip","Tooltip","_tooltipleave","hideCrosshairs","_modelOptions","_createPlotArea","Legend","skipSeries","PlotAreaFactory","selections","_selections","_selectStartHandler","_selectStart","_selectHandler","_selectEndHandler","_selectEnd","CategoryAxis","DateCategoryAxis","baseUnit","Selection","_mouseover","_mouseout","_mousewheel","_mousemove","_shouldAttachMouseMove","_userEvents","tap","_tap","_getChartElement","_startNavigation","currentAxis","_navState","_endNavigation","prevented","totalDelta","_mwTimeout","chartEvent","coords","_eventCoordinates","findPointPane","inAxis","backgroundBox","_suppressHover","aliasFor","isTouch","_toModelCoordinates","paddingTop","win","_activePoint","_startHover","tooltipOptions","isHighlighted","tooltipTracking","_mouseMoveTracking","seriesPoint","getNearestPoint","seriesIx","_trackCrosshairs","_trackSharedTooltip","crosshairs","showAt","pointCategoryIndex","_tooltipCategoryIx","pointsByCategoryIndex","pointArgs","hoverArgs","categoryPoints","_sourceSeries","grouped","processedSeries","_isBindable","_deferRedraw","_clearRedrawTimeout","_redrawTimeout","clearInterval","seriesData","axisIx","categoriesData","_bindCategoryAxis","categoryIx","_bindCategoryAxisFromSeries","onAxis","dataIx","dataRow","getFn","dateAxis","uniqueCategories","categoryField","_legendItemClick","seriesIndex","pointIndex","transitionsState","originalSeries","_legendItemHover","pointsBySeriesIndex","PDFMixin","_registry","seriesTypes","registry","_valueFields","_otherFields","_nullValue","_undefinedValue","otherFields","binder","_makeValue","canonicalFields","pointIx","fieldData","srcValueFields","srcPointFields","_bindFromArray","sourceFields","_bindFromObject","srcFields","srcFieldName","sourceFieldName","BarLabel","barLabel","textBox","aboveAxis","alignToClipBox","clipBox","parentBox","LegendItem","createContainer","createMarker","createLabel","markerOptions","markerColor","eventSink","_itemOverlay","active","LegendLayout","legendItem","createItems","offsetX","offsetY","userAlign","innerElement","hasItems","containerCustomReflow","containerReflow","containerBox","alignTarget","_ticks","itemsCount","intervals","dim","getTicks","_hash","slotSize","singleSlot","tickPos","nextTickPos","getCategory","categoryIndex","useDefault","roundToBaseUnit","defaultBaseUnit","baseUnitStep","autoBaseUnit","groupCategories","dateFormats","autoBaseUnitSteps","maxDateGroups","rounds","cat","lastCat","minDiff","_categoryRange","_range","autoUnit","categoryLimits","minCategory","maxCategory","_srcMaxDate","unitSteps","nextStep","autoUnitIx","span","units","totalUnits","_timeScale","timeRange","_collapse","timePos","endEdge","startPos","endPos","nextDate","srcCategories","unitFormat","roundedDate","equalsRoundedMax","DateValueAxis","applyDefaults","timeUnits","baseUnitTime","userMajorUnit","actualUnits","unitsToAdd","head","tail","ClusterLayout","childBox","cluster","slots","StackWrap","positionAxis","PointEventsMixin","NoteMixin","createNote","noteText","Bar","_rendered","errorBar","labelText","labelTemplate","formatValue","owner","formatPointValue","rectVisual","createRect","strokeOpacity","getBorderColor","highlightVisual","borderColor","tooltipAnchor","tooltipWidth","tooltipHeight","isStacked","BarChartAnimation","fromScale","FadeInAnimation","fadeTo","ErrorRangeCalculator","errorValue","initGlobalRanges","percentRegex","standardDeviationRegex","deviationMatch","valueGetter","createValueGetter","getAverage","deviation","getStandardDeviation","errorRange","globalRange","standardError","getStandardError","getErrorRange","pointValue","percentValue","isSample","squareDifferenceSum","CategoricalChart","seriesCategoryAxis","valueAxisRanges","seriesPoints","seriesOptions","_evalSeries","invertAxes","traverseDataPoints","addValue","pointOptions","pointType","plotValue","isStacked100","categoryPts","categorySum","otherValues","otherStack","plotRange","positive","prevValue","isStackedBar","otherValue","seriesValueAxis","categoryAxisCrossingValue","stackLimits","stackName","pIx","updateStackRange","limits","chartSeries","limitsCache","errorTotals","addErrorBar","lowValue","highValue","seriesErrorRanges","addPointErrorBar","stackedErrorRange","updateRange","CategoricalErrorBar","createPoint","evalPointOptions","doEval","axisRange","namedValueAxes","categorySlots","chartPoints","categorySlot","valueSlot","pointSlot","reflowPoint","reflowCategories","crossingValues","axisIndex","currentCategory","_bindPoint","_bindCache","bindCache","BarChart","clusterType","stackType","negativeColor","stackWrap","getStackWrap","stackGroup","wraps","_stackGroup","zeroSlot","childrenLength","_setAnimationOptions","_setChildrenAnimation","pointVisual","RangeBar","fromOptions","toOptions","labelFrom","_createLabel","labelTo","RangeBarChart","plotLimits","BulletChart","wrapData","seriesItem","bulletOptions","Bullet","Target","targetSlot","targetValueSlot","targetSlotX","targetSlotY","bodyVisual","ErrorBarBase","endCaps","valueBox","centerBox","capsWidth","getCapsWidth","capValue","capStart","capEnd","createDefaultVisual","ScatterErrorBar","seriesAxes","LinePoint","markerBorder","markerBox","_childBox","reflowLabel","noteTargetBox","defaultColor","halfSize","showTooltip","Bubble","LineSegment","visualPoints","LineChartMixin","renderSegments","sortedPoints","pointCount","_segments","sortPoints","seriesMissingValues","createSegment","_addSegment","missingValues","assumeZero","nearestPoint","allPoints","nearestPointDistance","pointBox","pointDistance","ClipAnimationMixin","ClipAnimation","animationPoints","LineChart","StepLineSegment","SplineSegment","pointsIdx","_setEnd","setX","calculateStepPoints","prevPoint","prevMarkerBoxCenter","markerBoxCenter","isInterpolate","revDir","curveProcessor","curve","AreaSegmentMixin","firstPoint","lastPoint","valueAxisLineBox","categoryAxisLineBox","stackPoints","_linePoints","createArea","AreaSegment","AreaChart","prevSegment","SplineAreaSegment","StepAreaSegment","strokeSegments","_strokeSegments","createFill","createStroke","fillSegments","prevStrokeSegments","prevAnchor","stackSegments","firstAnchor","closeFill","fillPath","ScatterChart","xAxisRanges","yAxisRanges","valueErrorField","lowField","highField","createMissingValue","xAxisName","yAxisName","xAxisRange","yAxisRange","namedXAxes","namedYAxes","currentSeriesPoints","ScatterLineChart","missingValue","BubbleChart","_maxSize","updateBubblesSize","pointsCount","animationOptions","minSize","minR","maxR","minArea","maxArea","areaRange","areaRatio","baseZIndex","Candlestick","mid","ocSlot","lhSlot","realBody","lines","reflowNote","_mainVisual","mainVisual","createOverlay","createBody","createLines","drawLines","lineStyle","normalColor","CandlestickChart","valueParts","splitValue","OHLCPoint","oSlot","cSlot","oPoints","cPoints","lhPoints","OHLCChart","BoxPlotChart","BoxPlot","q1","q3","upper","filterOutliers","outliers","whiskerSlot","boxSlot","medianSlot","meanSlot","meanPoints","whiskerPoints","medianPoints","renderOutliers","markersBorder","outlierValue","outerFence","reflowOutliers","centerX","PieSegment","animationDelay","lp","labelWidth","labelHeight","labelsOptions","labelsDistance","borderOptions","singleSegment","PieChartMixin","createLegendItem","itemLabelOptions","pointVisible","legendOptions","inactiveItemsLabels","legendItems","PieChart","anglePerValue","explode","colorsCount","evalSegmentOptions","segmentOptions","seriesConfig","minWidth","halfMinWidth","defaultPadding","newBox","newBoxCenter","seriesConfigs","leftSideLabels","rightSideLabels","labelComparator","leftLabelsReflow","rightLabelsReflow","distances","distanceBetweenLabels","distributeLabels","secondBox","firstBox","lr","remaining","_takeDistance","reflowLabels","amount","boxX","labelDistance","boxY","hAlignLabel","connectorLine","_connectorLines","seriesId","sr","crossing","centerPoint","pointInCircle","originalX","direction","DonutSegment","DonutChart","holeSize","totalSize","seriesWithoutSize","WaterfallChart","createSegments","totalCategories","summary","WaterfallSegment","fromBox","toBox","Pane","chartContainer","ChartContainer","appendAxis","appendChart","removeAxis","removeChart","j","allAxes","vGridLines","hGridLines","shouldClip","_clipBox","axisValueField","unclipLabels","PlotAreaBase","initSeries","createPanes","createCrosshairs","currentPane","paneOptions","panesLength","paneIndex","currentCrosshair","Crosshair","removeCrosshairs","matchingPane","axisToRemove","filteredAxes","chartToRemove","filteredCharts","addToLegend","seriesVisible","groupAxes","paneAxes","paneIx","xAxes","yAxes","any","groupSeriesByPane","seriesByPane","seriesPaneName","filterVisibleSeries","reflowPanes","reflowAxes","reflowCharts","crossingAxes","valuesToAdd","alignAxisTo","targetAxis","crossingValue","targetCrossingValue","slotEdge","targetEdge","alignAxes","paneId","xAnchor","yAnchor","xAnchorCrossings","yAnchorCrossings","leftAnchors","rightAnchors","topAnchors","bottomAnchors","_overlap","_mirrored","shrinkAxisWidth","overflowX","shrinkAxisHeight","overflowY","shrinked","fitAxes","paneBox","reflowPaneAxes","autoRotateAxisLabels","groupedAxes","rotated","chartPane","percents","remainingHeight","remainingPanes","autoHeightPanes","axisA","axisB","axesCount","bgBox","_bgVisual","paneByPoint","namedCategoryAxes","valueAxisRangeTracker","AxisGroupRangeTracker","stack100","createCategoryAxes","aggregateCategories","createCategoryAxesLabels","createCharts","createValueAxes","paneSeries","visibleSeries","groupSeriesByCategoryAxis","createChartGroup","createAreaChart","createBarChart","createRangeBarChart","createBulletChart","createCandlestickChart","createBoxPlotChart","createOHLCChart","createWaterfallChart","createLineChart","axisPane","aggregateSeries","aggregator","srcData","srcPoints","aggregatorSeries","SeriesAggregator","aggregatePoints","categoriesToAdd","defaultPaneName","stackableChartOptions","unique","axisSeries","barChart","rangeColumnChart","bulletChart","lineChart","areaChart","waterfallChart","axisRequiresRounding","categoryAxisName","categoryAxisIndex","seriesAxis","centeredSeries","primaryAxis","axisType","defaultAxisRange","tracker","defaultRange","pointPane","chartAxisRanges","chartRange","XYPlotArea","xAxisRangeTracker","yAxisRangeTracker","filteredSeries","createScatterChart","createScatterLineChart","createBubbleChart","createAxes","xAxisOptions","yAxisOptions","createXYAxis","seriesAxisName","firstPointValue","inferredDate","namedAxes","isLog","typeSamples","xAxesOptions","yAxesOptions","xValues","yValues","PiePlotArea","createPieChart","pieChart","DonutPlotArea","createDonutChart","donutChart","PieAnimation","BubbleAnimation","_points","toggleHandler","BaseTooltip","padding-top","padding-right","padding-bottom","padding-left","mobileScrollerSelector","_mobileScroller","_clearShowTimeout","_ensureElement","showTimeout","_padding","_chartPadding","_measure","chartPadding","chartOffset","viewport","movable","_fit","pointColor","_hideElement","fadeOut","_pointContent","tooltipTemplate","xLow","xHigh","yLow","yHigh","_pointAnchor","viewPortSize","sharedTemplate","categoryFormat","_content","_slotAnchor","hCenter","categoryText","stickyMode","moveLine","CrosshairTooltip","getBox","axisLineBox","getAnchor","halfHeight","Aggregates","sumOrNull","avg","getValueAxis","selectorPrefix","_dateAxis","leftMask","rightMask","leftHandle","rightHandle","_index","gesturestart","_gesturechange","gesturechange","mousewheel","_state","_rangeEventArgs","_value","moveTarget","oldRange","rightClick","_slot","leftMaskWidth","rightMaskWidth","zDir","defaultAggregates","seriesFields","_seriesFields","rootAggregate","_series","_binder","fieldAggregate","canonicalName","srcValues","_bindPoints","firstDataItem","_bindField","_axis","easeOutElastic","asin","errorLow","errorHigh","amd","_"],"mappings":"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","file":"ObcineGraphsBundle.js","sourcesContent":["function drawPopulationPyramid(_isRegion, _culture, _id, _divLeft, _divRight) {\r\n var urlWebService = \"\";\r\n if (_isRegion)\r\n {\r\n urlWebService = virtualDirectory + \"/\" + _culture + \"/Region/GetPopPyramidData/\" + _id;\r\n } // if\r\n else\r\n {\r\n urlWebService = virtualDirectory + \"/\" + _culture + \"/Municip/GetPopPyramidData/\" + _id;\r\n } // else\r\n\r\n $.ajax({\r\n type: \"get\",\r\n url: urlWebService,\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (_chartWrapper) {\r\n fillGraph(_divLeft, 200, 300, _chartWrapper.Series[0].Title,\r\n [_chartWrapper.Series[0], _chartWrapper.Series[1]],\r\n _chartWrapper.Categories, true, false);\r\n fillGraph(_divRight, 200, 300, _chartWrapper.Series[2].Title,\r\n [_chartWrapper.Series[2], _chartWrapper.Series[3]],\r\n _chartWrapper.Categories, false, false);\r\n } // success\r\n }); // ajax\r\n} // drawPopulationPyramidRegion\r\n\r\n\r\n\r\nfunction fillGraph(_graphDivId, _width, _height, _titleGraph,\r\n _arrayOfSeriesWrapper, _categories, _reverse, _yAxisTitleVisible)\r\n{\r\n if (_arrayOfSeriesWrapper == null)\r\n return;\r\n\r\n $(\"#\" + _graphDivId).kendoChart({\r\n //chartArea: {\r\n // height: _height,\r\n // width: _width\r\n //}, // chartArea\r\n legend: {\r\n position: \"custom\",\r\n orientation: \"vertical\",\r\n height: 100\r\n }, // legend\r\n //seriesDefaults: {\r\n // missingValues: 'gap'\r\n //},\r\n valueAxes: [{\r\n name: _arrayOfSeriesWrapper[0].ValueAxisTitle,\r\n title: {\r\n font: \"12px Arial\",\r\n text: _arrayOfSeriesWrapper[0].ValueAxisTitle\r\n },\r\n min: 0,\r\n max: 7,\r\n reverse: _reverse,\r\n axisCrossingValues: [0,1000]\r\n }],\r\n categoryAxes: [\r\n {\r\n reverse: true,\r\n axisCrossingValues: [-1000]\r\n },\r\n {\r\n title: {\r\n font: \"12px Arial\",\r\n text: _arrayOfSeriesWrapper[0].CategoryAxisTitle,\r\n rotation: -90,\r\n visible: _yAxisTitleVisible\r\n },\r\n categories: _categories.concat(_arrayOfSeriesWrapper[0].CategoryAxisTitle),\r\n reverse: true,\r\n axisCrossingValues: [-1000],\r\n majorGridLines: {\r\n visible: true\r\n }\r\n }],\r\n legend: {\r\n visible: true,\r\n position: \"bottom\",\r\n margin: 0,\r\n padding: 0,\r\n labels: {\r\n font: \"12px Arial\"\r\n } // labels\r\n } // legend\r\n }); // kendoChart\r\n\r\n var chart = $(\"#\" + _graphDivId).data(\"kendoChart\");\r\n if (chart == null)\r\n return;\r\n\r\n var chartOptions = chart.options;\r\n for (var i = 0; i < _arrayOfSeriesWrapper.length; i++) {\r\n chartOptions.series.push({\r\n name: _arrayOfSeriesWrapper[i].Title,\r\n type: _arrayOfSeriesWrapper[i].TypeOfGraph,\r\n data: _arrayOfSeriesWrapper[i].Values.concat(0),\r\n color: _arrayOfSeriesWrapper[i].SeriesColor,\r\n axis: _arrayOfSeriesWrapper[i].ValueAxisTitle,\r\n tooltip: {\r\n visible: true,\r\n format: \"{0:N2}\" + \"%\",\r\n color: \"#fff\"\r\n } // tooltip\r\n }); // chartOptions.series.push\r\n } // for\r\n chart.refresh();\r\n} // fillGraph\r\n","(function(f, define){\r\n define([], f);\r\n})(function(){\r\n\r\n(function($, window, undefined) {\r\n var kendo = window.kendo = window.kendo || { cultures: {} },\r\n extend = $.extend,\r\n each = $.each,\r\n isArray = $.isArray,\r\n proxy = $.proxy,\r\n noop = $.noop,\r\n math = Math,\r\n Template,\r\n JSON = window.JSON || {},\r\n support = {},\r\n percentRegExp = /%/,\r\n formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g,\r\n boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i,\r\n numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/,\r\n FUNCTION = \"function\",\r\n STRING = \"string\",\r\n NUMBER = \"number\",\r\n OBJECT = \"object\",\r\n NULL = \"null\",\r\n BOOLEAN = \"boolean\",\r\n UNDEFINED = \"undefined\",\r\n getterCache = {},\r\n setterCache = {},\r\n slice = [].slice,\r\n globalize = window.Globalize;\r\n\r\n kendo.version = \"2015.2.624\";\r\n\r\n function Class() {}\r\n\r\n Class.extend = function(proto) {\r\n var base = function() {},\r\n member,\r\n that = this,\r\n subclass = proto && proto.init ? proto.init : function () {\r\n that.apply(this, arguments);\r\n },\r\n fn;\r\n\r\n base.prototype = that.prototype;\r\n fn = subclass.fn = subclass.prototype = new base();\r\n\r\n for (member in proto) {\r\n if (proto[member] != null && proto[member].constructor === Object) {\r\n // Merge object members\r\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\r\n } else {\r\n fn[member] = proto[member];\r\n }\r\n }\r\n\r\n fn.constructor = subclass;\r\n subclass.extend = that.extend;\r\n\r\n return subclass;\r\n };\r\n\r\n Class.prototype._initOptions = function(options) {\r\n this.options = deepExtend({}, this.options, options);\r\n };\r\n\r\n var isFunction = kendo.isFunction = function(fn) {\r\n return typeof fn === \"function\";\r\n };\r\n\r\n var preventDefault = function() {\r\n this._defaultPrevented = true;\r\n };\r\n\r\n var isDefaultPrevented = function() {\r\n return this._defaultPrevented === true;\r\n };\r\n\r\n var Observable = Class.extend({\r\n init: function() {\r\n this._events = {};\r\n },\r\n\r\n bind: function(eventName, handlers, one) {\r\n var that = this,\r\n idx,\r\n eventNames = typeof eventName === STRING ? [eventName] : eventName,\r\n length,\r\n original,\r\n handler,\r\n handlersIsFunction = typeof handlers === FUNCTION,\r\n events;\r\n\r\n if (handlers === undefined) {\r\n for (idx in eventName) {\r\n that.bind(idx, eventName[idx]);\r\n }\r\n return that;\r\n }\r\n\r\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\r\n eventName = eventNames[idx];\r\n\r\n handler = handlersIsFunction ? handlers : handlers[eventName];\r\n\r\n if (handler) {\r\n if (one) {\r\n original = handler;\r\n handler = function() {\r\n that.unbind(eventName, handler);\r\n original.apply(that, arguments);\r\n };\r\n handler.original = original;\r\n }\r\n events = that._events[eventName] = that._events[eventName] || [];\r\n events.push(handler);\r\n }\r\n }\r\n\r\n return that;\r\n },\r\n\r\n one: function(eventNames, handlers) {\r\n return this.bind(eventNames, handlers, true);\r\n },\r\n\r\n first: function(eventName, handlers) {\r\n var that = this,\r\n idx,\r\n eventNames = typeof eventName === STRING ? [eventName] : eventName,\r\n length,\r\n handler,\r\n handlersIsFunction = typeof handlers === FUNCTION,\r\n events;\r\n\r\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\r\n eventName = eventNames[idx];\r\n\r\n handler = handlersIsFunction ? handlers : handlers[eventName];\r\n\r\n if (handler) {\r\n events = that._events[eventName] = that._events[eventName] || [];\r\n events.unshift(handler);\r\n }\r\n }\r\n\r\n return that;\r\n },\r\n\r\n trigger: function(eventName, e) {\r\n var that = this,\r\n events = that._events[eventName],\r\n idx,\r\n length;\r\n\r\n if (events) {\r\n e = e || {};\r\n\r\n e.sender = that;\r\n\r\n e._defaultPrevented = false;\r\n\r\n e.preventDefault = preventDefault;\r\n\r\n e.isDefaultPrevented = isDefaultPrevented;\r\n\r\n events = events.slice();\r\n\r\n for (idx = 0, length = events.length; idx < length; idx++) {\r\n events[idx].call(that, e);\r\n }\r\n\r\n return e._defaultPrevented === true;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n unbind: function(eventName, handler) {\r\n var that = this,\r\n events = that._events[eventName],\r\n idx;\r\n\r\n if (eventName === undefined) {\r\n that._events = {};\r\n } else if (events) {\r\n if (handler) {\r\n for (idx = events.length - 1; idx >= 0; idx--) {\r\n if (events[idx] === handler || events[idx].original === handler) {\r\n events.splice(idx, 1);\r\n }\r\n }\r\n } else {\r\n that._events[eventName] = [];\r\n }\r\n }\r\n\r\n return that;\r\n }\r\n });\r\n\r\n\r\n function compilePart(part, stringPart) {\r\n if (stringPart) {\r\n return \"'\" +\r\n part.split(\"'\").join(\"\\\\'\")\r\n .split('\\\\\"').join('\\\\\\\\\\\\\"')\r\n .replace(/\\n/g, \"\\\\n\")\r\n .replace(/\\r/g, \"\\\\r\")\r\n .replace(/\\t/g, \"\\\\t\") + \"'\";\r\n } else {\r\n var first = part.charAt(0),\r\n rest = part.substring(1);\r\n\r\n if (first === \"=\") {\r\n return \"+(\" + rest + \")+\";\r\n } else if (first === \":\") {\r\n return \"+$kendoHtmlEncode(\" + rest + \")+\";\r\n } else {\r\n return \";\" + part + \";$kendoOutput+=\";\r\n }\r\n }\r\n }\r\n\r\n var argumentNameRegExp = /^\\w+/,\r\n encodeRegExp = /\\$\\{([^}]*)\\}/g,\r\n escapedCurlyRegExp = /\\\\\\}/g,\r\n curlyRegExp = /__CURLY__/g,\r\n escapedSharpRegExp = /\\\\#/g,\r\n sharpRegExp = /__SHARP__/g,\r\n zeros = [\"\", \"0\", \"00\", \"000\", \"0000\"];\r\n\r\n Template = {\r\n paramName: \"data\", // name of the parameter of the generated template\r\n useWithBlock: true, // whether to wrap the template in a with() block\r\n render: function(template, data) {\r\n var idx,\r\n length,\r\n html = \"\";\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n html += template(data[idx]);\r\n }\r\n\r\n return html;\r\n },\r\n compile: function(template, options) {\r\n var settings = extend({}, this, options),\r\n paramName = settings.paramName,\r\n argumentName = paramName.match(argumentNameRegExp)[0],\r\n useWithBlock = settings.useWithBlock,\r\n functionBody = \"var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;\",\r\n fn,\r\n parts,\r\n idx;\r\n\r\n if (isFunction(template)) {\r\n return template;\r\n }\r\n\r\n functionBody += useWithBlock ? \"with(\" + paramName + \"){\" : \"\";\r\n\r\n functionBody += \"$kendoOutput=\";\r\n\r\n parts = template\r\n .replace(escapedCurlyRegExp, \"__CURLY__\")\r\n .replace(encodeRegExp, \"#=$kendoHtmlEncode($1)#\")\r\n .replace(curlyRegExp, \"}\")\r\n .replace(escapedSharpRegExp, \"__SHARP__\")\r\n .split(\"#\");\r\n\r\n for (idx = 0; idx < parts.length; idx ++) {\r\n functionBody += compilePart(parts[idx], idx % 2 === 0);\r\n }\r\n\r\n functionBody += useWithBlock ? \";}\" : \";\";\r\n\r\n functionBody += \"return $kendoOutput;\";\r\n\r\n functionBody = functionBody.replace(sharpRegExp, \"#\");\r\n\r\n try {\r\n fn = new Function(argumentName, functionBody);\r\n fn._slotCount = Math.floor(parts.length / 2);\r\n return fn;\r\n } catch(e) {\r\n throw new Error(kendo.format(\"Invalid template:'{0}' Generated code:'{1}'\", template, functionBody));\r\n }\r\n }\r\n };\r\n\r\nfunction pad(number, digits, end) {\r\n number = number + \"\";\r\n digits = digits || 2;\r\n end = digits - number.length;\r\n\r\n if (end) {\r\n return zeros[digits].substring(0, end) + number;\r\n }\r\n\r\n return number;\r\n}\r\n\r\n //JSON stringify\r\n(function() {\r\n var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\r\n gap,\r\n indent,\r\n meta = {\r\n \"\\b\": \"\\\\b\",\r\n \"\\t\": \"\\\\t\",\r\n \"\\n\": \"\\\\n\",\r\n \"\\f\": \"\\\\f\",\r\n \"\\r\": \"\\\\r\",\r\n \"\\\"\" : '\\\\\"',\r\n \"\\\\\": \"\\\\\\\\\"\r\n },\r\n rep,\r\n toString = {}.toString;\r\n\r\n\r\n if (typeof Date.prototype.toJSON !== FUNCTION) {\r\n\r\n Date.prototype.toJSON = function () {\r\n var that = this;\r\n\r\n return isFinite(that.valueOf()) ?\r\n pad(that.getUTCFullYear(), 4) + \"-\" +\r\n pad(that.getUTCMonth() + 1) + \"-\" +\r\n pad(that.getUTCDate()) + \"T\" +\r\n pad(that.getUTCHours()) + \":\" +\r\n pad(that.getUTCMinutes()) + \":\" +\r\n pad(that.getUTCSeconds()) + \"Z\" : null;\r\n };\r\n\r\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\r\n return this.valueOf();\r\n };\r\n }\r\n\r\n function quote(string) {\r\n escapable.lastIndex = 0;\r\n return escapable.test(string) ? \"\\\"\" + string.replace(escapable, function (a) {\r\n var c = meta[a];\r\n return typeof c === STRING ? c :\r\n \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\r\n }) + \"\\\"\" : \"\\\"\" + string + \"\\\"\";\r\n }\r\n\r\n function str(key, holder) {\r\n var i,\r\n k,\r\n v,\r\n length,\r\n mind = gap,\r\n partial,\r\n value = holder[key],\r\n type;\r\n\r\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\r\n value = value.toJSON(key);\r\n }\r\n\r\n if (typeof rep === FUNCTION) {\r\n value = rep.call(holder, key, value);\r\n }\r\n\r\n type = typeof value;\r\n if (type === STRING) {\r\n return quote(value);\r\n } else if (type === NUMBER) {\r\n return isFinite(value) ? String(value) : NULL;\r\n } else if (type === BOOLEAN || type === NULL) {\r\n return String(value);\r\n } else if (type === OBJECT) {\r\n if (!value) {\r\n return NULL;\r\n }\r\n gap += indent;\r\n partial = [];\r\n if (toString.apply(value) === \"[object Array]\") {\r\n length = value.length;\r\n for (i = 0; i < length; i++) {\r\n partial[i] = str(i, value) || NULL;\r\n }\r\n v = partial.length === 0 ? \"[]\" : gap ?\r\n \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\" :\r\n \"[\" + partial.join(\",\") + \"]\";\r\n gap = mind;\r\n return v;\r\n }\r\n if (rep && typeof rep === OBJECT) {\r\n length = rep.length;\r\n for (i = 0; i < length; i++) {\r\n if (typeof rep[i] === STRING) {\r\n k = rep[i];\r\n v = str(k, value);\r\n if (v) {\r\n partial.push(quote(k) + (gap ? \": \" : \":\") + v);\r\n }\r\n }\r\n }\r\n } else {\r\n for (k in value) {\r\n if (Object.hasOwnProperty.call(value, k)) {\r\n v = str(k, value);\r\n if (v) {\r\n partial.push(quote(k) + (gap ? \": \" : \":\") + v);\r\n }\r\n }\r\n }\r\n }\r\n\r\n v = partial.length === 0 ? \"{}\" : gap ?\r\n \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\" :\r\n \"{\" + partial.join(\",\") + \"}\";\r\n gap = mind;\r\n return v;\r\n }\r\n }\r\n\r\n if (typeof JSON.stringify !== FUNCTION) {\r\n JSON.stringify = function (value, replacer, space) {\r\n var i;\r\n gap = \"\";\r\n indent = \"\";\r\n\r\n if (typeof space === NUMBER) {\r\n for (i = 0; i < space; i += 1) {\r\n indent += \" \";\r\n }\r\n\r\n } else if (typeof space === STRING) {\r\n indent = space;\r\n }\r\n\r\n rep = replacer;\r\n if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\r\n throw new Error(\"JSON.stringify\");\r\n }\r\n\r\n return str(\"\", {\"\": value});\r\n };\r\n }\r\n})();\r\n\r\n// Date and Number formatting\r\n(function() {\r\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g,\r\n standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i,\r\n literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g,\r\n commaRegExp = /\\,/g,\r\n EMPTY = \"\",\r\n POINT = \".\",\r\n COMMA = \",\",\r\n SHARP = \"#\",\r\n ZERO = \"0\",\r\n PLACEHOLDER = \"??\",\r\n EN = \"en-US\",\r\n objectToString = {}.toString;\r\n\r\n //cultures\r\n kendo.cultures[\"en-US\"] = {\r\n name: EN,\r\n numberFormat: {\r\n pattern: [\"-n\"],\r\n decimals: 2,\r\n \",\": \",\",\r\n \".\": \".\",\r\n groupSize: [3],\r\n percent: {\r\n pattern: [\"-n %\", \"n %\"],\r\n decimals: 2,\r\n \",\": \",\",\r\n \".\": \".\",\r\n groupSize: [3],\r\n symbol: \"%\"\r\n },\r\n currency: {\r\n pattern: [\"($n)\", \"$n\"],\r\n decimals: 2,\r\n \",\": \",\",\r\n \".\": \".\",\r\n groupSize: [3],\r\n symbol: \"$\"\r\n }\r\n },\r\n calendars: {\r\n standard: {\r\n days: {\r\n names: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\r\n namesAbbr: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\r\n namesShort: [ \"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\" ]\r\n },\r\n months: {\r\n names: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\r\n namesAbbr: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\r\n },\r\n AM: [ \"AM\", \"am\", \"AM\" ],\r\n PM: [ \"PM\", \"pm\", \"PM\" ],\r\n patterns: {\r\n d: \"M/d/yyyy\",\r\n D: \"dddd, MMMM dd, yyyy\",\r\n F: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\r\n g: \"M/d/yyyy h:mm tt\",\r\n G: \"M/d/yyyy h:mm:ss tt\",\r\n m: \"MMMM dd\",\r\n M: \"MMMM dd\",\r\n s: \"yyyy'-'MM'-'ddTHH':'mm':'ss\",\r\n t: \"h:mm tt\",\r\n T: \"h:mm:ss tt\",\r\n u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\r\n y: \"MMMM, yyyy\",\r\n Y: \"MMMM, yyyy\"\r\n },\r\n \"/\": \"/\",\r\n \":\": \":\",\r\n firstDay: 0,\r\n twoDigitYearMax: 2029\r\n }\r\n }\r\n };\r\n\r\n\r\n function findCulture(culture) {\r\n if (culture) {\r\n if (culture.numberFormat) {\r\n return culture;\r\n }\r\n\r\n if (typeof culture === STRING) {\r\n var cultures = kendo.cultures;\r\n return cultures[culture] || cultures[culture.split(\"-\")[0]] || null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function getCulture(culture) {\r\n if (culture) {\r\n culture = findCulture(culture);\r\n }\r\n\r\n return culture || kendo.cultures.current;\r\n }\r\n\r\n function expandNumberFormat(numberFormat) {\r\n numberFormat.groupSizes = numberFormat.groupSize;\r\n numberFormat.percent.groupSizes = numberFormat.percent.groupSize;\r\n numberFormat.currency.groupSizes = numberFormat.currency.groupSize;\r\n }\r\n\r\n kendo.culture = function(cultureName) {\r\n var cultures = kendo.cultures, culture;\r\n\r\n if (cultureName !== undefined) {\r\n culture = findCulture(cultureName) || cultures[EN];\r\n culture.calendar = culture.calendars.standard;\r\n cultures.current = culture;\r\n\r\n if (globalize && !globalize.load) {\r\n expandNumberFormat(culture.numberFormat);\r\n }\r\n\r\n } else {\r\n return cultures.current;\r\n }\r\n };\r\n\r\n kendo.findCulture = findCulture;\r\n kendo.getCulture = getCulture;\r\n\r\n //set current culture to en-US.\r\n kendo.culture(EN);\r\n\r\n function formatDate(date, format, culture) {\r\n culture = getCulture(culture);\r\n\r\n var calendar = culture.calendars.standard,\r\n days = calendar.days,\r\n months = calendar.months;\r\n\r\n format = calendar.patterns[format] || format;\r\n\r\n return format.replace(dateFormatRegExp, function (match) {\r\n var minutes;\r\n var result;\r\n var sign;\r\n\r\n if (match === \"d\") {\r\n result = date.getDate();\r\n } else if (match === \"dd\") {\r\n result = pad(date.getDate());\r\n } else if (match === \"ddd\") {\r\n result = days.namesAbbr[date.getDay()];\r\n } else if (match === \"dddd\") {\r\n result = days.names[date.getDay()];\r\n } else if (match === \"M\") {\r\n result = date.getMonth() + 1;\r\n } else if (match === \"MM\") {\r\n result = pad(date.getMonth() + 1);\r\n } else if (match === \"MMM\") {\r\n result = months.namesAbbr[date.getMonth()];\r\n } else if (match === \"MMMM\") {\r\n result = months.names[date.getMonth()];\r\n } else if (match === \"yy\") {\r\n result = pad(date.getFullYear() % 100);\r\n } else if (match === \"yyyy\") {\r\n result = pad(date.getFullYear(), 4);\r\n } else if (match === \"h\" ) {\r\n result = date.getHours() % 12 || 12;\r\n } else if (match === \"hh\") {\r\n result = pad(date.getHours() % 12 || 12);\r\n } else if (match === \"H\") {\r\n result = date.getHours();\r\n } else if (match === \"HH\") {\r\n result = pad(date.getHours());\r\n } else if (match === \"m\") {\r\n result = date.getMinutes();\r\n } else if (match === \"mm\") {\r\n result = pad(date.getMinutes());\r\n } else if (match === \"s\") {\r\n result = date.getSeconds();\r\n } else if (match === \"ss\") {\r\n result = pad(date.getSeconds());\r\n } else if (match === \"f\") {\r\n result = math.floor(date.getMilliseconds() / 100);\r\n } else if (match === \"ff\") {\r\n result = date.getMilliseconds();\r\n if (result > 99) {\r\n result = math.floor(result / 10);\r\n }\r\n result = pad(result);\r\n } else if (match === \"fff\") {\r\n result = pad(date.getMilliseconds(), 3);\r\n } else if (match === \"tt\") {\r\n result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\r\n } else if (match === \"zzz\") {\r\n minutes = date.getTimezoneOffset();\r\n sign = minutes < 0;\r\n\r\n result = math.abs(minutes / 60).toString().split(\".\")[0];\r\n minutes = math.abs(minutes) - (result * 60);\r\n\r\n result = (sign ? \"+\" : \"-\") + pad(result);\r\n result += \":\" + pad(minutes);\r\n } else if (match === \"zz\" || match === \"z\") {\r\n result = date.getTimezoneOffset() / 60;\r\n sign = result < 0;\r\n\r\n result = math.abs(result).toString().split(\".\")[0];\r\n result = (sign ? \"+\" : \"-\") + (match === \"zz\" ? pad(result) : result);\r\n }\r\n\r\n return result !== undefined ? result : match.slice(1, match.length - 1);\r\n });\r\n }\r\n\r\n //number formatting\r\n function formatNumber(number, format, culture) {\r\n culture = getCulture(culture);\r\n\r\n var numberFormat = culture.numberFormat,\r\n groupSize = numberFormat.groupSize[0],\r\n groupSeparator = numberFormat[COMMA],\r\n decimal = numberFormat[POINT],\r\n precision = numberFormat.decimals,\r\n pattern = numberFormat.pattern[0],\r\n literals = [],\r\n symbol,\r\n isCurrency, isPercent,\r\n customPrecision,\r\n formatAndPrecision,\r\n negative = number < 0,\r\n integer,\r\n fraction,\r\n integerLength,\r\n fractionLength,\r\n replacement = EMPTY,\r\n value = EMPTY,\r\n idx,\r\n length,\r\n ch,\r\n hasGroup,\r\n hasNegativeFormat,\r\n decimalIndex,\r\n sharpIndex,\r\n zeroIndex,\r\n hasZero, hasSharp,\r\n percentIndex,\r\n currencyIndex,\r\n startZeroIndex,\r\n start = -1,\r\n end;\r\n\r\n //return empty string if no number\r\n if (number === undefined) {\r\n return EMPTY;\r\n }\r\n\r\n if (!isFinite(number)) {\r\n return number;\r\n }\r\n\r\n //if no format then return number.toString() or number.toLocaleString() if culture.name is not defined\r\n if (!format) {\r\n return culture.name.length ? number.toLocaleString() : number.toString();\r\n }\r\n\r\n formatAndPrecision = standardFormatRegExp.exec(format);\r\n\r\n // standard formatting\r\n if (formatAndPrecision) {\r\n format = formatAndPrecision[1].toLowerCase();\r\n\r\n isCurrency = format === \"c\";\r\n isPercent = format === \"p\";\r\n\r\n if (isCurrency || isPercent) {\r\n //get specific number format information if format is currency or percent\r\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\r\n groupSize = numberFormat.groupSize[0];\r\n groupSeparator = numberFormat[COMMA];\r\n decimal = numberFormat[POINT];\r\n precision = numberFormat.decimals;\r\n symbol = numberFormat.symbol;\r\n pattern = numberFormat.pattern[negative ? 0 : 1];\r\n }\r\n\r\n customPrecision = formatAndPrecision[2];\r\n\r\n if (customPrecision) {\r\n precision = +customPrecision;\r\n }\r\n\r\n //return number in exponential format\r\n if (format === \"e\") {\r\n return customPrecision ? number.toExponential(precision) : number.toExponential(); // toExponential() and toExponential(undefined) differ in FF #653438.\r\n }\r\n\r\n // multiply if format is percent\r\n if (isPercent) {\r\n number *= 100;\r\n }\r\n\r\n number = round(number, precision);\r\n negative = number < 0;\r\n number = number.split(POINT);\r\n\r\n integer = number[0];\r\n fraction = number[1];\r\n\r\n //exclude \"-\" if number is negative.\r\n if (negative) {\r\n integer = integer.substring(1);\r\n }\r\n\r\n value = integer;\r\n integerLength = integer.length;\r\n\r\n //add group separator to the number if it is longer enough\r\n if (integerLength >= groupSize) {\r\n value = EMPTY;\r\n for (idx = 0; idx < integerLength; idx++) {\r\n if (idx > 0 && (integerLength - idx) % groupSize === 0) {\r\n value += groupSeparator;\r\n }\r\n value += integer.charAt(idx);\r\n }\r\n }\r\n\r\n if (fraction) {\r\n value += decimal + fraction;\r\n }\r\n\r\n if (format === \"n\" && !negative) {\r\n return value;\r\n }\r\n\r\n number = EMPTY;\r\n\r\n for (idx = 0, length = pattern.length; idx < length; idx++) {\r\n ch = pattern.charAt(idx);\r\n\r\n if (ch === \"n\") {\r\n number += value;\r\n } else if (ch === \"$\" || ch === \"%\") {\r\n number += symbol;\r\n } else {\r\n number += ch;\r\n }\r\n }\r\n\r\n return number;\r\n }\r\n\r\n //custom formatting\r\n //\r\n //separate format by sections.\r\n\r\n //make number positive\r\n if (negative) {\r\n number = -number;\r\n }\r\n\r\n if (format.indexOf(\"'\") > -1 || format.indexOf(\"\\\"\") > -1 || format.indexOf(\"\\\\\") > -1) {\r\n format = format.replace(literalRegExp, function (match) {\r\n var quoteChar = match.charAt(0).replace(\"\\\\\", \"\"),\r\n literal = match.slice(1).replace(quoteChar, \"\");\r\n\r\n literals.push(literal);\r\n\r\n return PLACEHOLDER;\r\n });\r\n }\r\n\r\n format = format.split(\";\");\r\n if (negative && format[1]) {\r\n //get negative format\r\n format = format[1];\r\n hasNegativeFormat = true;\r\n } else if (number === 0) {\r\n //format for zeros\r\n format = format[2] || format[0];\r\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\r\n //return format if it is string constant.\r\n return format;\r\n }\r\n } else {\r\n format = format[0];\r\n }\r\n\r\n percentIndex = format.indexOf(\"%\");\r\n currencyIndex = format.indexOf(\"$\");\r\n\r\n isPercent = percentIndex != -1;\r\n isCurrency = currencyIndex != -1;\r\n\r\n //multiply number if the format has percent\r\n if (isPercent) {\r\n number *= 100;\r\n }\r\n\r\n if (isCurrency && format[currencyIndex - 1] === \"\\\\\") {\r\n format = format.split(\"\\\\\").join(\"\");\r\n isCurrency = false;\r\n }\r\n\r\n if (isCurrency || isPercent) {\r\n //get specific number format information if format is currency or percent\r\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\r\n groupSize = numberFormat.groupSize[0];\r\n groupSeparator = numberFormat[COMMA];\r\n decimal = numberFormat[POINT];\r\n precision = numberFormat.decimals;\r\n symbol = numberFormat.symbol;\r\n }\r\n\r\n hasGroup = format.indexOf(COMMA) > -1;\r\n if (hasGroup) {\r\n format = format.replace(commaRegExp, EMPTY);\r\n }\r\n\r\n decimalIndex = format.indexOf(POINT);\r\n length = format.length;\r\n\r\n if (decimalIndex != -1) {\r\n fraction = number.toString().split(\"e\");\r\n if (fraction[1]) {\r\n fraction = round(number, Math.abs(fraction[1]));\r\n } else {\r\n fraction = fraction[0];\r\n }\r\n fraction = fraction.split(POINT)[1] || EMPTY;\r\n zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\r\n sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\r\n hasZero = zeroIndex > -1;\r\n hasSharp = sharpIndex > -1;\r\n idx = fraction.length;\r\n\r\n if (!hasZero && !hasSharp) {\r\n format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\r\n length = format.length;\r\n decimalIndex = -1;\r\n idx = 0;\r\n } if (hasZero && zeroIndex > sharpIndex) {\r\n idx = zeroIndex;\r\n } else if (sharpIndex > zeroIndex) {\r\n if (hasSharp && idx > sharpIndex) {\r\n idx = sharpIndex;\r\n } else if (hasZero && idx < zeroIndex) {\r\n idx = zeroIndex;\r\n }\r\n }\r\n\r\n if (idx > -1) {\r\n number = round(number, idx);\r\n }\r\n } else {\r\n number = round(number);\r\n }\r\n\r\n sharpIndex = format.indexOf(SHARP);\r\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\r\n\r\n //define the index of the first digit placeholder\r\n if (sharpIndex == -1 && zeroIndex != -1) {\r\n start = zeroIndex;\r\n } else if (sharpIndex != -1 && zeroIndex == -1) {\r\n start = sharpIndex;\r\n } else {\r\n start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\r\n }\r\n\r\n sharpIndex = format.lastIndexOf(SHARP);\r\n zeroIndex = format.lastIndexOf(ZERO);\r\n\r\n //define the index of the last digit placeholder\r\n if (sharpIndex == -1 && zeroIndex != -1) {\r\n end = zeroIndex;\r\n } else if (sharpIndex != -1 && zeroIndex == -1) {\r\n end = sharpIndex;\r\n } else {\r\n end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\r\n }\r\n\r\n if (start == length) {\r\n end = start;\r\n }\r\n\r\n if (start != -1) {\r\n value = number.toString().split(POINT);\r\n integer = value[0];\r\n fraction = value[1] || EMPTY;\r\n\r\n integerLength = integer.length;\r\n fractionLength = fraction.length;\r\n\r\n if (negative && (number * -1) >= 0) {\r\n negative = false;\r\n }\r\n\r\n //add group separator to the number if it is longer enough\r\n if (hasGroup) {\r\n if (integerLength === groupSize && integerLength < decimalIndex - startZeroIndex) {\r\n integer = groupSeparator + integer;\r\n } else if (integerLength > groupSize) {\r\n value = EMPTY;\r\n for (idx = 0; idx < integerLength; idx++) {\r\n if (idx > 0 && (integerLength - idx) % groupSize === 0) {\r\n value += groupSeparator;\r\n }\r\n value += integer.charAt(idx);\r\n }\r\n\r\n integer = value;\r\n }\r\n }\r\n\r\n number = format.substring(0, start);\r\n\r\n if (negative && !hasNegativeFormat) {\r\n number += \"-\";\r\n }\r\n\r\n for (idx = start; idx < length; idx++) {\r\n ch = format.charAt(idx);\r\n\r\n if (decimalIndex == -1) {\r\n if (end - idx < integerLength) {\r\n number += integer;\r\n break;\r\n }\r\n } else {\r\n if (zeroIndex != -1 && zeroIndex < idx) {\r\n replacement = EMPTY;\r\n }\r\n\r\n if ((decimalIndex - idx) <= integerLength && decimalIndex - idx > -1) {\r\n number += integer;\r\n idx = decimalIndex;\r\n }\r\n\r\n if (decimalIndex === idx) {\r\n number += (fraction ? decimal : EMPTY) + fraction;\r\n idx += end - decimalIndex + 1;\r\n continue;\r\n }\r\n }\r\n\r\n if (ch === ZERO) {\r\n number += ch;\r\n replacement = ch;\r\n } else if (ch === SHARP) {\r\n number += replacement;\r\n }\r\n }\r\n\r\n if (end >= start) {\r\n number += format.substring(end + 1);\r\n }\r\n\r\n //replace symbol placeholders\r\n if (isCurrency || isPercent) {\r\n value = EMPTY;\r\n for (idx = 0, length = number.length; idx < length; idx++) {\r\n ch = number.charAt(idx);\r\n value += (ch === \"$\" || ch === \"%\") ? symbol : ch;\r\n }\r\n number = value;\r\n }\r\n\r\n length = literals.length;\r\n\r\n if (length) {\r\n for (idx = 0; idx < length; idx++) {\r\n number = number.replace(PLACEHOLDER, literals[idx]);\r\n }\r\n }\r\n }\r\n\r\n return number;\r\n }\r\n\r\n var round = function(value, precision) {\r\n precision = precision || 0;\r\n\r\n value = value.toString().split('e');\r\n value = Math.round(+(value[0] + 'e' + (value[1] ? (+value[1] + precision) : precision)));\r\n\r\n value = value.toString().split('e');\r\n value = +(value[0] + 'e' + (value[1] ? (+value[1] - precision) : -precision));\r\n\r\n return value.toFixed(precision);\r\n };\r\n\r\n var toString = function(value, fmt, culture) {\r\n if (fmt) {\r\n if (objectToString.call(value) === \"[object Date]\") {\r\n return formatDate(value, fmt, culture);\r\n } else if (typeof value === NUMBER) {\r\n return formatNumber(value, fmt, culture);\r\n }\r\n }\r\n\r\n return value !== undefined ? value : \"\";\r\n };\r\n\r\n if (globalize && !globalize.load) {\r\n toString = function(value, format, culture) {\r\n if ($.isPlainObject(culture)) {\r\n culture = culture.name;\r\n }\r\n\r\n return globalize.format(value, format, culture);\r\n };\r\n }\r\n\r\n kendo.format = function(fmt) {\r\n var values = arguments;\r\n\r\n return fmt.replace(formatRegExp, function(match, index, placeholderFormat) {\r\n var value = values[parseInt(index, 10) + 1];\r\n\r\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : \"\");\r\n });\r\n };\r\n\r\n kendo._extractFormat = function (format) {\r\n if (format.slice(0,3) === \"{0:\") {\r\n format = format.slice(3, format.length - 1);\r\n }\r\n\r\n return format;\r\n };\r\n\r\n kendo._activeElement = function() {\r\n try {\r\n return document.activeElement;\r\n } catch(e) {\r\n return document.documentElement.activeElement;\r\n }\r\n };\r\n\r\n kendo._round = round;\r\n kendo.toString = toString;\r\n})();\r\n\r\n\r\n(function() {\r\n var nonBreakingSpaceRegExp = /\\u00A0/g,\r\n exponentRegExp = /[eE][\\-+]?[0-9]+/,\r\n shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/,\r\n longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/,\r\n dateRegExp = /^\\/Date\\((.*?)\\)\\/$/,\r\n offsetRegExp = /[+-]\\d*/,\r\n formatsSequence = [\"G\", \"g\", \"d\", \"F\", \"D\", \"y\", \"m\", \"T\", \"t\"],\r\n numberRegExp = {\r\n 2: /^\\d{1,2}/,\r\n 3: /^\\d{1,3}/,\r\n 4: /^\\d{4}/\r\n },\r\n objectToString = {}.toString;\r\n\r\n function outOfRange(value, start, end) {\r\n return !(value >= start && value <= end);\r\n }\r\n\r\n function designatorPredicate(designator) {\r\n return designator.charAt(0);\r\n }\r\n\r\n function mapDesignators(designators) {\r\n return $.map(designators, designatorPredicate);\r\n }\r\n\r\n //if date's day is different than the typed one - adjust\r\n function adjustDST(date, hours) {\r\n if (!hours && date.getHours() === 23) {\r\n date.setHours(date.getHours() + 2);\r\n }\r\n }\r\n\r\n function lowerArray(data) {\r\n var idx = 0,\r\n length = data.length,\r\n array = [];\r\n\r\n for (; idx < length; idx++) {\r\n array[idx] = (data[idx] + \"\").toLowerCase();\r\n }\r\n\r\n return array;\r\n }\r\n\r\n function lowerLocalInfo(localInfo) {\r\n var newLocalInfo = {}, property;\r\n\r\n for (property in localInfo) {\r\n newLocalInfo[property] = lowerArray(localInfo[property]);\r\n }\r\n\r\n return newLocalInfo;\r\n }\r\n\r\n function parseExact(value, format, culture) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n var lookAhead = function (match) {\r\n var i = 0;\r\n while (format[idx] === match) {\r\n i++;\r\n idx++;\r\n }\r\n if (i > 0) {\r\n idx -= 1;\r\n }\r\n return i;\r\n },\r\n getNumber = function(size) {\r\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'),\r\n match = value.substr(valueIdx, size).match(rg);\r\n\r\n if (match) {\r\n match = match[0];\r\n valueIdx += match.length;\r\n return parseInt(match, 10);\r\n }\r\n return null;\r\n },\r\n getIndexByName = function (names, lower) {\r\n var i = 0,\r\n length = names.length,\r\n name, nameLength,\r\n subValue;\r\n\r\n for (; i < length; i++) {\r\n name = names[i];\r\n nameLength = name.length;\r\n subValue = value.substr(valueIdx, nameLength);\r\n\r\n if (lower) {\r\n subValue = subValue.toLowerCase();\r\n }\r\n\r\n if (subValue == name) {\r\n valueIdx += nameLength;\r\n return i + 1;\r\n }\r\n }\r\n return null;\r\n },\r\n checkLiteral = function() {\r\n var result = false;\r\n if (value.charAt(valueIdx) === format[idx]) {\r\n valueIdx++;\r\n result = true;\r\n }\r\n return result;\r\n },\r\n calendar = culture.calendars.standard,\r\n year = null,\r\n month = null,\r\n day = null,\r\n hours = null,\r\n minutes = null,\r\n seconds = null,\r\n milliseconds = null,\r\n idx = 0,\r\n valueIdx = 0,\r\n literal = false,\r\n date = new Date(),\r\n twoDigitYearMax = calendar.twoDigitYearMax || 2029,\r\n defaultYear = date.getFullYear(),\r\n ch, count, length, pattern,\r\n pmHour, UTC, matches,\r\n amDesignators, pmDesignators,\r\n hoursOffset, minutesOffset,\r\n hasTime, match;\r\n\r\n if (!format) {\r\n format = \"d\"; //shord date format\r\n }\r\n\r\n //if format is part of the patterns get real format\r\n pattern = calendar.patterns[format];\r\n if (pattern) {\r\n format = pattern;\r\n }\r\n\r\n format = format.split(\"\");\r\n length = format.length;\r\n\r\n for (; idx < length; idx++) {\r\n ch = format[idx];\r\n\r\n if (literal) {\r\n if (ch === \"'\") {\r\n literal = false;\r\n } else {\r\n checkLiteral();\r\n }\r\n } else {\r\n if (ch === \"d\") {\r\n count = lookAhead(\"d\");\r\n if (!calendar._lowerDays) {\r\n calendar._lowerDays = lowerLocalInfo(calendar.days);\r\n }\r\n\r\n if (day !== null && count > 2) {\r\n continue;\r\n }\r\n\r\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? \"namesAbbr\" : \"names\"], true);\r\n\r\n if (day === null || outOfRange(day, 1, 31)) {\r\n return null;\r\n }\r\n } else if (ch === \"M\") {\r\n count = lookAhead(\"M\");\r\n if (!calendar._lowerMonths) {\r\n calendar._lowerMonths = lowerLocalInfo(calendar.months);\r\n }\r\n month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\r\n\r\n if (month === null || outOfRange(month, 1, 12)) {\r\n return null;\r\n }\r\n month -= 1; //because month is zero based\r\n } else if (ch === \"y\") {\r\n count = lookAhead(\"y\");\r\n year = getNumber(count);\r\n\r\n if (year === null) {\r\n return null;\r\n }\r\n\r\n if (count == 2) {\r\n if (typeof twoDigitYearMax === \"string\") {\r\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\r\n }\r\n\r\n year = (defaultYear - defaultYear % 100) + year;\r\n if (year > twoDigitYearMax) {\r\n year -= 100;\r\n }\r\n }\r\n } else if (ch === \"h\" ) {\r\n lookAhead(\"h\");\r\n hours = getNumber(2);\r\n if (hours == 12) {\r\n hours = 0;\r\n }\r\n if (hours === null || outOfRange(hours, 0, 11)) {\r\n return null;\r\n }\r\n } else if (ch === \"H\") {\r\n lookAhead(\"H\");\r\n hours = getNumber(2);\r\n if (hours === null || outOfRange(hours, 0, 23)) {\r\n return null;\r\n }\r\n } else if (ch === \"m\") {\r\n lookAhead(\"m\");\r\n minutes = getNumber(2);\r\n if (minutes === null || outOfRange(minutes, 0, 59)) {\r\n return null;\r\n }\r\n } else if (ch === \"s\") {\r\n lookAhead(\"s\");\r\n seconds = getNumber(2);\r\n if (seconds === null || outOfRange(seconds, 0, 59)) {\r\n return null;\r\n }\r\n } else if (ch === \"f\") {\r\n count = lookAhead(\"f\");\r\n\r\n match = value.substr(valueIdx, count).match(numberRegExp[3]);\r\n milliseconds = getNumber(count);\r\n\r\n if (milliseconds !== null) {\r\n match = match[0].length;\r\n\r\n if (match < 3) {\r\n milliseconds *= Math.pow(10, (3 - match));\r\n }\r\n\r\n if (count > 3) {\r\n milliseconds = parseInt(milliseconds.toString().substring(0, 3), 10);\r\n }\r\n }\r\n\r\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\r\n return null;\r\n }\r\n\r\n } else if (ch === \"t\") {\r\n count = lookAhead(\"t\");\r\n amDesignators = calendar.AM;\r\n pmDesignators = calendar.PM;\r\n\r\n if (count === 1) {\r\n amDesignators = mapDesignators(amDesignators);\r\n pmDesignators = mapDesignators(pmDesignators);\r\n }\r\n\r\n pmHour = getIndexByName(pmDesignators);\r\n if (!pmHour && !getIndexByName(amDesignators)) {\r\n return null;\r\n }\r\n }\r\n else if (ch === \"z\") {\r\n UTC = true;\r\n count = lookAhead(\"z\");\r\n\r\n if (value.substr(valueIdx, 1) === \"Z\") {\r\n checkLiteral();\r\n continue;\r\n }\r\n\r\n matches = value.substr(valueIdx, 6)\r\n .match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\r\n\r\n if (!matches) {\r\n return null;\r\n }\r\n\r\n matches = matches[0].split(\":\");\r\n\r\n hoursOffset = matches[0];\r\n minutesOffset = matches[1];\r\n\r\n if (!minutesOffset && hoursOffset.length > 3) { //(+|-)[hh][mm] format is used\r\n valueIdx = hoursOffset.length - 2;\r\n minutesOffset = hoursOffset.substring(valueIdx);\r\n hoursOffset = hoursOffset.substring(0, valueIdx);\r\n }\r\n\r\n hoursOffset = parseInt(hoursOffset, 10);\r\n if (outOfRange(hoursOffset, -12, 13)) {\r\n return null;\r\n }\r\n\r\n if (count > 2) {\r\n minutesOffset = parseInt(minutesOffset, 10);\r\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, 0, 59)) {\r\n return null;\r\n }\r\n }\r\n } else if (ch === \"'\") {\r\n literal = true;\r\n checkLiteral();\r\n } else if (!checkLiteral()) {\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n hasTime = hours !== null || minutes !== null || seconds || null;\r\n\r\n if (year === null && month === null && day === null && hasTime) {\r\n year = defaultYear;\r\n month = date.getMonth();\r\n day = date.getDate();\r\n } else {\r\n if (year === null) {\r\n year = defaultYear;\r\n }\r\n\r\n if (day === null) {\r\n day = 1;\r\n }\r\n }\r\n\r\n if (pmHour && hours < 12) {\r\n hours += 12;\r\n }\r\n\r\n if (UTC) {\r\n if (hoursOffset) {\r\n hours += -hoursOffset;\r\n }\r\n\r\n if (minutesOffset) {\r\n minutes += -minutesOffset;\r\n }\r\n\r\n value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\r\n } else {\r\n value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\r\n adjustDST(value, hours);\r\n }\r\n\r\n if (year < 100) {\r\n value.setFullYear(year);\r\n }\r\n\r\n if (value.getDate() !== day && UTC === undefined) {\r\n return null;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function parseMicrosoftFormatOffset(offset) {\r\n var sign = offset.substr(0, 1) === \"-\" ? -1 : 1;\r\n\r\n offset = offset.substring(1);\r\n offset = (parseInt(offset.substr(0, 2), 10) * 60) + parseInt(offset.substring(2), 10);\r\n\r\n return sign * offset;\r\n }\r\n\r\n kendo.parseDate = function(value, formats, culture) {\r\n if (objectToString.call(value) === \"[object Date]\") {\r\n return value;\r\n }\r\n\r\n var idx = 0;\r\n var date = null;\r\n var length, patterns;\r\n var tzoffset;\r\n var sign;\r\n\r\n if (value && value.indexOf(\"/D\") === 0) {\r\n date = dateRegExp.exec(value);\r\n if (date) {\r\n date = date[1];\r\n tzoffset = offsetRegExp.exec(date.substring(1));\r\n\r\n date = new Date(parseInt(date, 10));\r\n\r\n if (tzoffset) {\r\n tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\r\n date = kendo.timezone.apply(date, 0);\r\n date = kendo.timezone.convert(date, 0, -1 * tzoffset);\r\n }\r\n\r\n return date;\r\n }\r\n }\r\n\r\n culture = kendo.getCulture(culture);\r\n\r\n if (!formats) {\r\n formats = [];\r\n patterns = culture.calendar.patterns;\r\n length = formatsSequence.length;\r\n\r\n for (; idx < length; idx++) {\r\n formats[idx] = patterns[formatsSequence[idx]];\r\n }\r\n\r\n idx = 0;\r\n\r\n formats = [\r\n \"yyyy/MM/dd HH:mm:ss\",\r\n \"yyyy/MM/dd HH:mm\",\r\n \"yyyy/MM/dd\",\r\n \"ddd MMM dd yyyy HH:mm:ss\",\r\n \"yyyy-MM-ddTHH:mm:ss.fffffffzzz\",\r\n \"yyyy-MM-ddTHH:mm:ss.fffzzz\",\r\n \"yyyy-MM-ddTHH:mm:sszzz\",\r\n \"yyyy-MM-ddTHH:mm:ss.fffffff\",\r\n \"yyyy-MM-ddTHH:mm:ss.fff\",\r\n \"yyyy-MM-ddTHH:mmzzz\",\r\n \"yyyy-MM-ddTHH:mmzz\",\r\n \"yyyy-MM-ddTHH:mm:ss\",\r\n \"yyyy-MM-ddTHH:mm\",\r\n \"yyyy-MM-dd HH:mm:ss\",\r\n \"yyyy-MM-dd HH:mm\",\r\n \"yyyy-MM-dd\",\r\n \"HH:mm:ss\",\r\n \"HH:mm\"\r\n ].concat(formats);\r\n }\r\n\r\n formats = isArray(formats) ? formats: [formats];\r\n length = formats.length;\r\n\r\n for (; idx < length; idx++) {\r\n date = parseExact(value, formats[idx], culture);\r\n if (date) {\r\n return date;\r\n }\r\n }\r\n\r\n return date;\r\n };\r\n\r\n kendo.parseInt = function(value, culture) {\r\n var result = kendo.parseFloat(value, culture);\r\n if (result) {\r\n result = result | 0;\r\n }\r\n return result;\r\n };\r\n\r\n kendo.parseFloat = function(value, culture, format) {\r\n if (!value && value !== 0) {\r\n return null;\r\n }\r\n\r\n if (typeof value === NUMBER) {\r\n return value;\r\n }\r\n\r\n value = value.toString();\r\n culture = kendo.getCulture(culture);\r\n\r\n var number = culture.numberFormat,\r\n percent = number.percent,\r\n currency = number.currency,\r\n symbol = currency.symbol,\r\n percentSymbol = percent.symbol,\r\n negative = value.indexOf(\"-\"),\r\n parts, isPercent;\r\n\r\n //handle exponential number\r\n if (exponentRegExp.test(value)) {\r\n value = parseFloat(value.replace(number[\".\"], \".\"));\r\n if (isNaN(value)) {\r\n value = null;\r\n }\r\n return value;\r\n }\r\n\r\n if (negative > 0) {\r\n return null;\r\n } else {\r\n negative = negative > -1;\r\n }\r\n\r\n if (value.indexOf(symbol) > -1 || (format && format.toLowerCase().indexOf(\"c\") > -1)) {\r\n number = currency;\r\n parts = number.pattern[0].replace(\"$\", symbol).split(\"n\");\r\n if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\r\n value = value.replace(parts[0], \"\").replace(parts[1], \"\");\r\n negative = true;\r\n }\r\n } else if (value.indexOf(percentSymbol) > -1) {\r\n isPercent = true;\r\n number = percent;\r\n symbol = percentSymbol;\r\n }\r\n\r\n value = value.replace(\"-\", \"\")\r\n .replace(symbol, \"\")\r\n .replace(nonBreakingSpaceRegExp, \" \")\r\n .split(number[\",\"].replace(nonBreakingSpaceRegExp, \" \")).join(\"\")\r\n .replace(number[\".\"], \".\");\r\n\r\n value = parseFloat(value);\r\n\r\n if (isNaN(value)) {\r\n value = null;\r\n } else if (negative) {\r\n value *= -1;\r\n }\r\n\r\n if (value && isPercent) {\r\n value /= 100;\r\n }\r\n\r\n return value;\r\n };\r\n\r\n if (globalize && !globalize.load) {\r\n kendo.parseDate = function (value, format, culture) {\r\n if (objectToString.call(value) === \"[object Date]\") {\r\n return value;\r\n }\r\n\r\n return globalize.parseDate(value, format, culture);\r\n };\r\n\r\n kendo.parseFloat = function (value, culture) {\r\n if (typeof value === NUMBER) {\r\n return value;\r\n }\r\n\r\n if (value === undefined || value === null) {\r\n return null;\r\n }\r\n\r\n if ($.isPlainObject(culture)) {\r\n culture = culture.name;\r\n }\r\n\r\n value = globalize.parseFloat(value, culture);\r\n\r\n return isNaN(value) ? null : value;\r\n };\r\n }\r\n})();\r\n\r\n function getShadows(element) {\r\n var shadow = element.css(kendo.support.transitions.css + \"box-shadow\") || element.css(\"box-shadow\"),\r\n radius = shadow ? shadow.match(boxShadowRegExp) || [ 0, 0, 0, 0, 0 ] : [ 0, 0, 0, 0, 0 ],\r\n blur = math.max((+radius[3]), +(radius[4] || 0));\r\n\r\n return {\r\n left: (-radius[1]) + blur,\r\n right: (+radius[1]) + blur,\r\n bottom: (+radius[2]) + blur\r\n };\r\n }\r\n\r\n function wrap(element, autosize) {\r\n var browser = support.browser,\r\n percentage,\r\n isRtl = element.css(\"direction\") == \"rtl\";\r\n\r\n if (!element.parent().hasClass(\"k-animation-container\")) {\r\n var shadows = getShadows(element),\r\n width = element[0].style.width,\r\n height = element[0].style.height,\r\n percentWidth = percentRegExp.test(width),\r\n percentHeight = percentRegExp.test(height);\r\n\r\n if (browser.opera) { // Box shadow can't be retrieved in Opera\r\n shadows.left = shadows.right = shadows.bottom = 5;\r\n }\r\n\r\n percentage = percentWidth || percentHeight;\r\n\r\n if (!percentWidth && (!autosize || (autosize && width))) { width = element.outerWidth(); }\r\n if (!percentHeight && (!autosize || (autosize && height))) { height = element.outerHeight(); }\r\n\r\n element.wrap(\r\n $(\"<div/>\")\r\n .addClass(\"k-animation-container\")\r\n .css({\r\n width: width,\r\n height: height,\r\n marginLeft: shadows.left * (isRtl ? 1 : -1),\r\n paddingLeft: shadows.left,\r\n paddingRight: shadows.right,\r\n paddingBottom: shadows.bottom\r\n }));\r\n\r\n if (percentage) {\r\n element.css({\r\n width: \"100%\",\r\n height: \"100%\",\r\n boxSizing: \"border-box\",\r\n mozBoxSizing: \"border-box\",\r\n webkitBoxSizing: \"border-box\"\r\n });\r\n }\r\n } else {\r\n var wrapper = element.parent(\".k-animation-container\"),\r\n wrapperStyle = wrapper[0].style;\r\n\r\n if (wrapper.is(\":hidden\")) {\r\n wrapper.show();\r\n }\r\n\r\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\r\n\r\n if (!percentage) {\r\n wrapper.css({\r\n width: element.outerWidth(),\r\n height: element.outerHeight(),\r\n boxSizing: \"content-box\",\r\n mozBoxSizing: \"content-box\",\r\n webkitBoxSizing: \"content-box\"\r\n });\r\n }\r\n }\r\n\r\n if (browser.msie && math.floor(browser.version) <= 7) {\r\n element.css({ zoom: 1 });\r\n element.children(\".k-menu\").width(element.width());\r\n }\r\n\r\n return element.parent();\r\n }\r\n\r\n function deepExtend(destination) {\r\n var i = 1,\r\n length = arguments.length;\r\n\r\n for (i = 1; i < length; i++) {\r\n deepExtendOne(destination, arguments[i]);\r\n }\r\n\r\n return destination;\r\n }\r\n\r\n function deepExtendOne(destination, source) {\r\n var ObservableArray = kendo.data.ObservableArray,\r\n LazyObservableArray = kendo.data.LazyObservableArray,\r\n DataSource = kendo.data.DataSource,\r\n HierarchicalDataSource = kendo.data.HierarchicalDataSource,\r\n property,\r\n propValue,\r\n propType,\r\n propInit,\r\n destProp;\r\n\r\n for (property in source) {\r\n propValue = source[property];\r\n propType = typeof propValue;\r\n\r\n if (propType === OBJECT && propValue !== null) {\r\n propInit = propValue.constructor;\r\n } else {\r\n propInit = null;\r\n }\r\n\r\n if (propInit &&\r\n propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray &&\r\n propInit !== DataSource && propInit !== HierarchicalDataSource) {\r\n\r\n if (propValue instanceof Date) {\r\n destination[property] = new Date(propValue.getTime());\r\n } else if (isFunction(propValue.clone)) {\r\n destination[property] = propValue.clone();\r\n } else {\r\n destProp = destination[property];\r\n if (typeof (destProp) === OBJECT) {\r\n destination[property] = destProp || {};\r\n } else {\r\n destination[property] = {};\r\n }\r\n deepExtendOne(destination[property], propValue);\r\n }\r\n } else if (propType !== UNDEFINED) {\r\n destination[property] = propValue;\r\n }\r\n }\r\n\r\n return destination;\r\n }\r\n\r\n function testRx(agent, rxs, dflt) {\r\n for (var rx in rxs) {\r\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\r\n return rx;\r\n }\r\n }\r\n return dflt !== undefined ? dflt : agent;\r\n }\r\n\r\n function toHyphens(str) {\r\n return str.replace(/([a-z][A-Z])/g, function (g) {\r\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\r\n });\r\n }\r\n\r\n function toCamelCase(str) {\r\n return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\r\n return g1.toUpperCase();\r\n });\r\n }\r\n\r\n function getComputedStyles(element, properties) {\r\n var styles = {}, computedStyle;\r\n\r\n if (document.defaultView && document.defaultView.getComputedStyle) {\r\n computedStyle = document.defaultView.getComputedStyle(element, \"\");\r\n\r\n if (properties) {\r\n $.each(properties, function(idx, value) {\r\n styles[value] = computedStyle.getPropertyValue(value);\r\n });\r\n }\r\n } else {\r\n computedStyle = element.currentStyle;\r\n\r\n if (properties) {\r\n $.each(properties, function(idx, value) {\r\n styles[value] = computedStyle[toCamelCase(value)];\r\n });\r\n }\r\n }\r\n\r\n if (!kendo.size(styles)) {\r\n styles = computedStyle;\r\n }\r\n\r\n return styles;\r\n }\r\n\r\n function isScrollable(element) {\r\n return getComputedStyles(element, [\"overflow\"]).overflow != \"visible\";\r\n }\r\n\r\n (function () {\r\n support._scrollbar = undefined;\r\n\r\n support.scrollbar = function (refresh) {\r\n if (!isNaN(support._scrollbar) && !refresh) {\r\n return support._scrollbar;\r\n } else {\r\n var div = document.createElement(\"div\"),\r\n result;\r\n\r\n div.style.cssText = \"overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block\";\r\n div.innerHTML = \" \";\r\n document.body.appendChild(div);\r\n\r\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\r\n\r\n document.body.removeChild(div);\r\n\r\n return result;\r\n }\r\n };\r\n\r\n support.isRtl = function(element) {\r\n return $(element).closest(\".k-rtl\").length > 0;\r\n };\r\n\r\n var table = document.createElement(\"table\");\r\n\r\n // Internet Explorer does not support setting the innerHTML of TBODY and TABLE elements\r\n try {\r\n table.innerHTML = \"<tr><td></td></tr>\";\r\n\r\n support.tbodyInnerHtml = true;\r\n } catch (e) {\r\n support.tbodyInnerHtml = false;\r\n }\r\n\r\n support.touch = \"ontouchstart\" in window;\r\n support.msPointers = window.MSPointerEvent;\r\n support.pointers = window.PointerEvent;\r\n\r\n var transitions = support.transitions = false,\r\n transforms = support.transforms = false,\r\n elementProto = \"HTMLElement\" in window ? HTMLElement.prototype : [];\r\n\r\n support.hasHW3D = (\"WebKitCSSMatrix\" in window && \"m11\" in new window.WebKitCSSMatrix()) || \"MozPerspective\" in document.documentElement.style || \"msPerspective\" in document.documentElement.style;\r\n\r\n each([ \"Moz\", \"webkit\", \"O\", \"ms\" ], function () {\r\n var prefix = this.toString(),\r\n hasTransitions = typeof table.style[prefix + \"Transition\"] === STRING;\r\n\r\n if (hasTransitions || typeof table.style[prefix + \"Transform\"] === STRING) {\r\n var lowPrefix = prefix.toLowerCase();\r\n\r\n transforms = {\r\n css: (lowPrefix != \"ms\") ? \"-\" + lowPrefix + \"-\" : \"\",\r\n prefix: prefix,\r\n event: (lowPrefix === \"o\" || lowPrefix === \"webkit\") ? lowPrefix : \"\"\r\n };\r\n\r\n if (hasTransitions) {\r\n transitions = transforms;\r\n transitions.event = transitions.event ? transitions.event + \"TransitionEnd\" : \"transitionend\";\r\n }\r\n\r\n return false;\r\n }\r\n });\r\n\r\n table = null;\r\n\r\n support.transforms = transforms;\r\n support.transitions = transitions;\r\n\r\n support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\r\n\r\n try {\r\n support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\r\n support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\r\n } catch(e) {\r\n //window.outerWidth throws error when in IE showModalDialog.\r\n support.screenWidth = window.screen.availWidth;\r\n support.screenHeight = window.screen.availHeight;\r\n }\r\n\r\n support.detectOS = function (ua) {\r\n var os = false, minorVersion, match = [],\r\n notAndroidPhone = !/mobile safari/i.test(ua),\r\n agentRxs = {\r\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\r\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\r\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\r\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\r\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\r\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\r\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\r\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\r\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\r\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\r\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\r\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\r\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\r\n },\r\n osRxs = {\r\n ios: /^i(phone|pad|pod)$/i,\r\n android: /^android|fire$/i,\r\n blackberry: /^blackberry|playbook/i,\r\n windows: /windows/,\r\n wp: /wp/,\r\n flat: /sailfish|ffos|tizen/i,\r\n meego: /meego/\r\n },\r\n formFactorRxs = {\r\n tablet: /playbook|ipad|fire/i\r\n },\r\n browserRxs = {\r\n omini: /Opera\\sMini/i,\r\n omobile: /Opera\\sMobi/i,\r\n firefox: /Firefox|Fennec/i,\r\n mobilesafari: /version\\/.*safari/i,\r\n ie: /MSIE|Windows\\sPhone/i,\r\n chrome: /chrome|crios/i,\r\n webkit: /webkit/i\r\n };\r\n\r\n for (var agent in agentRxs) {\r\n if (agentRxs.hasOwnProperty(agent)) {\r\n match = ua.match(agentRxs[agent]);\r\n if (match) {\r\n if (agent == \"windows\" && \"plugins\" in navigator) { return false; } // Break if not Metro/Mobile Windows\r\n\r\n os = {};\r\n os.device = agent;\r\n os.tablet = testRx(agent, formFactorRxs, false);\r\n os.browser = testRx(ua, browserRxs, \"default\");\r\n os.name = testRx(agent, osRxs);\r\n os[os.name] = true;\r\n os.majorVersion = match[2];\r\n os.minorVersion = match[3].replace(\"_\", \".\");\r\n minorVersion = os.minorVersion.replace(\".\", \"\").substr(0, 2);\r\n os.flatVersion = os.majorVersion + minorVersion + (new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join(\"0\"));\r\n os.cordova = typeof window.PhoneGap !== UNDEFINED || typeof window.cordova !== UNDEFINED; // Use file protocol to detect appModes.\r\n os.appMode = window.navigator.standalone || (/file|local|wmapp/).test(window.location.protocol) || os.cordova; // Use file protocol to detect appModes.\r\n\r\n if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\r\n os.tablet = agent;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n return os;\r\n };\r\n\r\n var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\r\n\r\n support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\r\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\r\n\r\n support.hasNativeScrolling = false;\r\n\r\n if (mobileOS.ios || (mobileOS.android && mobileOS.majorVersion > 2) || mobileOS.wp) {\r\n support.hasNativeScrolling = mobileOS;\r\n }\r\n\r\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\r\n\r\n support.detectBrowser = function(ua) {\r\n var browser = false, match = [],\r\n browserRxs = {\r\n webkit: /(chrome)[ \\/]([\\w.]+)/i,\r\n safari: /(webkit)[ \\/]([\\w.]+)/i,\r\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\r\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\r\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\r\n };\r\n\r\n for (var agent in browserRxs) {\r\n if (browserRxs.hasOwnProperty(agent)) {\r\n match = ua.match(browserRxs[agent]);\r\n if (match) {\r\n browser = {};\r\n browser[agent] = true;\r\n browser[match[1].toLowerCase().split(\" \")[0].split(\"/\")[0]] = true;\r\n browser.version = parseInt(document.documentMode || match[2], 10);\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return browser;\r\n };\r\n\r\n support.browser = support.detectBrowser(navigator.userAgent);\r\n\r\n support.zoomLevel = function() {\r\n try {\r\n var browser = support.browser;\r\n var ie11WidthCorrection = 0;\r\n var docEl = document.documentElement;\r\n\r\n if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {\r\n ie11WidthCorrection = support.scrollbar();\r\n }\r\n\r\n return support.touch ? (docEl.clientWidth / window.innerWidth) :\r\n browser.msie && browser.version >= 10 ? (((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth) : 1;\r\n } catch(e) {\r\n return 1;\r\n }\r\n };\r\n\r\n support.cssBorderSpacing = typeof document.documentElement.style.borderSpacing != \"undefined\" && !(support.browser.msie && support.browser.version < 8);\r\n\r\n (function(browser) {\r\n // add browser-specific CSS class\r\n var cssClass = \"\",\r\n docElement = $(document.documentElement),\r\n majorVersion = parseInt(browser.version, 10);\r\n\r\n if (browser.msie) {\r\n cssClass = \"ie\";\r\n } else if (browser.mozilla) {\r\n cssClass = \"ff\";\r\n } else if (browser.safari) {\r\n cssClass = \"safari\";\r\n } else if (browser.webkit) {\r\n cssClass = \"webkit\";\r\n } else if (browser.opera) {\r\n cssClass = \"opera\";\r\n }\r\n\r\n if (cssClass) {\r\n cssClass = \"k-\" + cssClass + \" k-\" + cssClass + majorVersion;\r\n }\r\n if (support.mobileOS) {\r\n cssClass += \" k-mobile\";\r\n }\r\n\r\n docElement.addClass(cssClass);\r\n })(support.browser);\r\n\r\n support.eventCapture = document.documentElement.addEventListener;\r\n\r\n var input = document.createElement(\"input\");\r\n\r\n support.placeholder = \"placeholder\" in input;\r\n support.propertyChangeEvent = \"onpropertychange\" in input;\r\n\r\n support.input = (function() {\r\n var types = [\"number\", \"date\", \"time\", \"month\", \"week\", \"datetime\", \"datetime-local\"];\r\n var length = types.length;\r\n var value = \"test\";\r\n var result = {};\r\n var idx = 0;\r\n var type;\r\n\r\n for (;idx < length; idx++) {\r\n type = types[idx];\r\n input.setAttribute(\"type\", type);\r\n input.value = value;\r\n\r\n result[type.replace(\"-\", \"\")] = input.type !== \"text\" && input.value !== value;\r\n }\r\n\r\n return result;\r\n })();\r\n\r\n input.style.cssText = \"float:left;\";\r\n\r\n support.cssFloat = !!input.style.cssFloat;\r\n\r\n input = null;\r\n\r\n support.stableSort = (function() {\r\n // Chrome sort is not stable for more than *10* items\r\n // IE9+ sort is not stable for than *512* items\r\n var threshold = 513;\r\n\r\n var sorted = [{\r\n index: 0,\r\n field: \"b\"\r\n }];\r\n\r\n for (var i = 1; i < threshold; i++) {\r\n sorted.push({\r\n index: i,\r\n field: \"a\"\r\n });\r\n }\r\n\r\n sorted.sort(function(a, b) {\r\n return a.field > b.field ? 1 : (a.field < b.field ? -1 : 0);\r\n });\r\n\r\n return sorted[0].index === 1;\r\n })();\r\n\r\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector ||\r\n elementProto.msMatchesSelector || elementProto.oMatchesSelector ||\r\n elementProto.matchesSelector || elementProto.matches ||\r\n function( selector ) {\r\n var nodeList = document.querySelectorAll ? ( this.parentNode || document ).querySelectorAll( selector ) || [] : $(selector),\r\n i = nodeList.length;\r\n\r\n while (i--) {\r\n if (nodeList[i] == this) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n support.pushState = window.history && window.history.pushState;\r\n\r\n var documentMode = document.documentMode;\r\n\r\n support.hashChange = (\"onhashchange\" in window) && !(support.browser.msie && (!documentMode || documentMode <= 8)); // old IE detection\r\n })();\r\n\r\n\r\n function size(obj) {\r\n var result = 0, key;\r\n for (key in obj) {\r\n if (obj.hasOwnProperty(key) && key != \"toJSON\") { // Ignore fake IE7 toJSON.\r\n result++;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function getOffset(element, type, positioned) {\r\n if (!type) {\r\n type = \"offset\";\r\n }\r\n\r\n var result = element[type](),\r\n mobileOS = support.mobileOS;\r\n\r\n // IE10 touch zoom is living in a separate viewport\r\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\r\n result.top -= (window.pageYOffset - document.documentElement.scrollTop);\r\n result.left -= (window.pageXOffset - document.documentElement.scrollLeft);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n var directions = {\r\n left: { reverse: \"right\" },\r\n right: { reverse: \"left\" },\r\n down: { reverse: \"up\" },\r\n up: { reverse: \"down\" },\r\n top: { reverse: \"bottom\" },\r\n bottom: { reverse: \"top\" },\r\n \"in\": { reverse: \"out\" },\r\n out: { reverse: \"in\" }\r\n };\r\n\r\n function parseEffects(input) {\r\n var effects = {};\r\n\r\n each((typeof input === \"string\" ? input.split(\" \") : input), function(idx) {\r\n effects[idx] = this;\r\n });\r\n\r\n return effects;\r\n }\r\n\r\n function fx(element) {\r\n return new kendo.effects.Element(element);\r\n }\r\n\r\n var effects = {};\r\n\r\n $.extend(effects, {\r\n enabled: true,\r\n Element: function(element) {\r\n this.element = $(element);\r\n },\r\n\r\n promise: function(element, options) {\r\n if (!element.is(\":visible\")) {\r\n element.css({ display: element.data(\"olddisplay\") || \"block\" }).css(\"display\");\r\n }\r\n\r\n if (options.hide) {\r\n element.data(\"olddisplay\", element.css(\"display\")).hide();\r\n }\r\n\r\n if (options.init) {\r\n options.init();\r\n }\r\n\r\n if (options.completeCallback) {\r\n options.completeCallback(element); // call the external complete callback with the element\r\n }\r\n\r\n element.dequeue();\r\n },\r\n\r\n disable: function() {\r\n this.enabled = false;\r\n this.promise = this.promiseShim;\r\n },\r\n\r\n enable: function() {\r\n this.enabled = true;\r\n this.promise = this.animatedPromise;\r\n }\r\n });\r\n\r\n effects.promiseShim = effects.promise;\r\n\r\n function prepareAnimationOptions(options, duration, reverse, complete) {\r\n if (typeof options === STRING) {\r\n // options is the list of effect names separated by space e.g. animate(element, \"fadeIn slideDown\")\r\n\r\n // only callback is provided e.g. animate(element, options, function() {});\r\n if (isFunction(duration)) {\r\n complete = duration;\r\n duration = 400;\r\n reverse = false;\r\n }\r\n\r\n if (isFunction(reverse)) {\r\n complete = reverse;\r\n reverse = false;\r\n }\r\n\r\n if (typeof duration === BOOLEAN){\r\n reverse = duration;\r\n duration = 400;\r\n }\r\n\r\n options = {\r\n effects: options,\r\n duration: duration,\r\n reverse: reverse,\r\n complete: complete\r\n };\r\n }\r\n\r\n return extend({\r\n //default options\r\n effects: {},\r\n duration: 400, //jQuery default duration\r\n reverse: false,\r\n init: noop,\r\n teardown: noop,\r\n hide: false\r\n }, options, { completeCallback: options.complete, complete: noop }); // Move external complete callback, so deferred.resolve can be always executed.\r\n\r\n }\r\n\r\n function animate(element, options, duration, reverse, complete) {\r\n var idx = 0,\r\n length = element.length,\r\n instance;\r\n\r\n for (; idx < length; idx ++) {\r\n instance = $(element[idx]);\r\n instance.queue(function() {\r\n effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\r\n });\r\n }\r\n\r\n return element;\r\n }\r\n\r\n function toggleClass(element, classes, options, add) {\r\n if (classes) {\r\n classes = classes.split(\" \");\r\n\r\n each(classes, function(idx, value) {\r\n element.toggleClass(value, add);\r\n });\r\n }\r\n\r\n return element;\r\n }\r\n\r\n if (!(\"kendoAnimate\" in $.fn)) {\r\n extend($.fn, {\r\n kendoStop: function(clearQueue, gotoEnd) {\r\n return this.stop(clearQueue, gotoEnd);\r\n },\r\n\r\n kendoAnimate: function(options, duration, reverse, complete) {\r\n return animate(this, options, duration, reverse, complete);\r\n },\r\n\r\n kendoAddClass: function(classes, options){\r\n return kendo.toggleClass(this, classes, options, true);\r\n },\r\n\r\n kendoRemoveClass: function(classes, options){\r\n return kendo.toggleClass(this, classes, options, false);\r\n },\r\n kendoToggleClass: function(classes, options, toggle){\r\n return kendo.toggleClass(this, classes, options, toggle);\r\n }\r\n });\r\n }\r\n\r\n var ampRegExp = /&/g,\r\n ltRegExp = /</g,\r\n quoteRegExp = /\"/g,\r\n aposRegExp = /'/g,\r\n gtRegExp = />/g;\r\n function htmlEncode(value) {\r\n return (\"\" + value).replace(ampRegExp, \"&\").replace(ltRegExp, \"<\").replace(gtRegExp, \">\").replace(quoteRegExp, \""\").replace(aposRegExp, \"'\");\r\n }\r\n\r\n var eventTarget = function (e) {\r\n return e.target;\r\n };\r\n\r\n if (support.touch) {\r\n\r\n eventTarget = function(e) {\r\n var touches = \"originalEvent\" in e ? e.originalEvent.changedTouches : \"changedTouches\" in e ? e.changedTouches : null;\r\n\r\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\r\n };\r\n\r\n each([\"swipe\", \"swipeLeft\", \"swipeRight\", \"swipeUp\", \"swipeDown\", \"doubleTap\", \"tap\"], function(m, value) {\r\n $.fn[value] = function(callback) {\r\n return this.bind(value, callback);\r\n };\r\n });\r\n }\r\n\r\n if (support.touch) {\r\n if (!support.mobileOS) {\r\n support.mousedown = \"mousedown touchstart\";\r\n support.mouseup = \"mouseup touchend\";\r\n support.mousemove = \"mousemove touchmove\";\r\n support.mousecancel = \"mouseleave touchcancel\";\r\n support.click = \"click\";\r\n support.resize = \"resize\";\r\n } else {\r\n support.mousedown = \"touchstart\";\r\n support.mouseup = \"touchend\";\r\n support.mousemove = \"touchmove\";\r\n support.mousecancel = \"touchcancel\";\r\n support.click = \"touchend\";\r\n support.resize = \"orientationchange\";\r\n }\r\n } else if (support.pointers) {\r\n support.mousemove = \"pointermove\";\r\n support.mousedown = \"pointerdown\";\r\n support.mouseup = \"pointerup\";\r\n support.mousecancel = \"pointercancel\";\r\n support.click = \"pointerup\";\r\n support.resize = \"orientationchange resize\";\r\n } else if (support.msPointers) {\r\n support.mousemove = \"MSPointerMove\";\r\n support.mousedown = \"MSPointerDown\";\r\n support.mouseup = \"MSPointerUp\";\r\n support.mousecancel = \"MSPointerCancel\";\r\n support.click = \"MSPointerUp\";\r\n support.resize = \"orientationchange resize\";\r\n } else {\r\n support.mousemove = \"mousemove\";\r\n support.mousedown = \"mousedown\";\r\n support.mouseup = \"mouseup\";\r\n support.mousecancel = \"mouseleave\";\r\n support.click = \"click\";\r\n support.resize = \"resize\";\r\n }\r\n\r\n var wrapExpression = function(members, paramName) {\r\n var result = paramName || \"d\",\r\n index,\r\n idx,\r\n length,\r\n member,\r\n count = 1;\r\n\r\n for (idx = 0, length = members.length; idx < length; idx++) {\r\n member = members[idx];\r\n if (member !== \"\") {\r\n index = member.indexOf(\"[\");\r\n\r\n if (index !== 0) {\r\n if (index == -1) {\r\n member = \".\" + member;\r\n } else {\r\n count++;\r\n member = \".\" + member.substring(0, index) + \" || {})\" + member.substring(index);\r\n }\r\n }\r\n\r\n count++;\r\n result += member + ((idx < length - 1) ? \" || {})\" : \")\");\r\n }\r\n }\r\n return new Array(count).join(\"(\") + result;\r\n },\r\n localUrlRe = /^([a-z]+:)?\\/\\//i;\r\n\r\n extend(kendo, {\r\n ui: kendo.ui || {},\r\n fx: kendo.fx || fx,\r\n effects: kendo.effects || effects,\r\n mobile: kendo.mobile || { },\r\n data: kendo.data || {},\r\n dataviz: kendo.dataviz || {},\r\n keys: {\r\n INSERT: 45,\r\n DELETE: 46,\r\n BACKSPACE: 8,\r\n TAB: 9,\r\n ENTER: 13,\r\n ESC: 27,\r\n LEFT: 37,\r\n UP: 38,\r\n RIGHT: 39,\r\n DOWN: 40,\r\n END: 35,\r\n HOME: 36,\r\n SPACEBAR: 32,\r\n PAGEUP: 33,\r\n PAGEDOWN: 34,\r\n F2: 113,\r\n F10: 121,\r\n F12: 123,\r\n NUMPAD_PLUS: 107,\r\n NUMPAD_MINUS: 109,\r\n NUMPAD_DOT: 110\r\n },\r\n support: kendo.support || support,\r\n animate: kendo.animate || animate,\r\n ns: \"\",\r\n attr: function(value) {\r\n return \"data-\" + kendo.ns + value;\r\n },\r\n getShadows: getShadows,\r\n wrap: wrap,\r\n deepExtend: deepExtend,\r\n getComputedStyles: getComputedStyles,\r\n isScrollable: isScrollable,\r\n size: size,\r\n toCamelCase: toCamelCase,\r\n toHyphens: toHyphens,\r\n getOffset: kendo.getOffset || getOffset,\r\n parseEffects: kendo.parseEffects || parseEffects,\r\n toggleClass: kendo.toggleClass || toggleClass,\r\n directions: kendo.directions || directions,\r\n Observable: Observable,\r\n Class: Class,\r\n Template: Template,\r\n template: proxy(Template.compile, Template),\r\n render: proxy(Template.render, Template),\r\n stringify: proxy(JSON.stringify, JSON),\r\n eventTarget: eventTarget,\r\n htmlEncode: htmlEncode,\r\n isLocalUrl: function(url) {\r\n return url && !localUrlRe.test(url);\r\n },\r\n\r\n expr: function(expression, safe, paramName) {\r\n expression = expression || \"\";\r\n\r\n if (typeof safe == STRING) {\r\n paramName = safe;\r\n safe = false;\r\n }\r\n\r\n paramName = paramName || \"d\";\r\n\r\n if (expression && expression.charAt(0) !== \"[\") {\r\n expression = \".\" + expression;\r\n }\r\n\r\n if (safe) {\r\n expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g,'\"$1_$DOT$_$2\"');\r\n expression = expression.replace(/'([^.]*)\\.([^']*)'/g,\"'$1_$DOT$_$2'\");\r\n expression = wrapExpression(expression.split(\".\"), paramName);\r\n expression = expression.replace(/_\\$DOT\\$_/g, \".\");\r\n } else {\r\n expression = paramName + expression;\r\n }\r\n\r\n return expression;\r\n },\r\n\r\n getter: function(expression, safe) {\r\n var key = expression + safe;\r\n return getterCache[key] = getterCache[key] || new Function(\"d\", \"return \" + kendo.expr(expression, safe));\r\n },\r\n\r\n setter: function(expression) {\r\n return setterCache[expression] = setterCache[expression] || new Function(\"d,value\", kendo.expr(expression) + \"=value\");\r\n },\r\n\r\n accessor: function(expression) {\r\n return {\r\n get: kendo.getter(expression),\r\n set: kendo.setter(expression)\r\n };\r\n },\r\n\r\n guid: function() {\r\n var id = \"\", i, random;\r\n\r\n for (i = 0; i < 32; i++) {\r\n random = math.random() * 16 | 0;\r\n\r\n if (i == 8 || i == 12 || i == 16 || i == 20) {\r\n id += \"-\";\r\n }\r\n id += (i == 12 ? 4 : (i == 16 ? (random & 3 | 8) : random)).toString(16);\r\n }\r\n\r\n return id;\r\n },\r\n\r\n roleSelector: function(role) {\r\n return role.replace(/(\\S+)/g, \"[\" + kendo.attr(\"role\") + \"=$1],\").slice(0, -1);\r\n },\r\n\r\n directiveSelector: function(directives) {\r\n var selectors = directives.split(\" \");\r\n\r\n if (selectors) {\r\n for (var i = 0; i < selectors.length; i++) {\r\n if (selectors[i] != \"view\") {\r\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, \"$1-$2\");\r\n }\r\n }\r\n }\r\n\r\n return selectors.join(\" \").replace(/(\\S+)/g, \"kendo-mobile-$1,\").slice(0, -1);\r\n },\r\n\r\n triggeredByInput: function(e) {\r\n return (/^(label|input|textarea|select)$/i).test(e.target.tagName);\r\n },\r\n\r\n logToConsole: function(message) {\r\n var console = window.console;\r\n\r\n if (!kendo.suppressLog && typeof(console) != \"undefined\" && console.log) {\r\n console.log(message);\r\n }\r\n }\r\n });\r\n\r\n var Widget = Observable.extend( {\r\n init: function(element, options) {\r\n var that = this;\r\n\r\n that.element = kendo.jQuery(element).handler(that);\r\n\r\n that.angular(\"init\", options);\r\n\r\n Observable.fn.init.call(that);\r\n\r\n var dataSource = options ? options.dataSource : null;\r\n\r\n if (dataSource) {\r\n // avoid deep cloning the data source\r\n options = extend({}, options, { dataSource: {} });\r\n }\r\n\r\n options = that.options = extend(true, {}, that.options, options);\r\n\r\n if (dataSource) {\r\n options.dataSource = dataSource;\r\n }\r\n\r\n if (!that.element.attr(kendo.attr(\"role\"))) {\r\n that.element.attr(kendo.attr(\"role\"), (options.name || \"\").toLowerCase());\r\n }\r\n\r\n that.element.data(\"kendo\" + options.prefix + options.name, that);\r\n\r\n that.bind(that.events, options);\r\n },\r\n\r\n events: [],\r\n\r\n options: {\r\n prefix: \"\"\r\n },\r\n\r\n _hasBindingTarget: function() {\r\n return !!this.element[0].kendoBindingTarget;\r\n },\r\n\r\n _tabindex: function(target) {\r\n target = target || this.wrapper;\r\n\r\n var element = this.element,\r\n TABINDEX = \"tabindex\",\r\n tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\r\n\r\n element.removeAttr(TABINDEX);\r\n\r\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\r\n },\r\n\r\n setOptions: function(options) {\r\n this._setEvents(options);\r\n $.extend(this.options, options);\r\n },\r\n\r\n _setEvents: function(options) {\r\n var that = this,\r\n idx = 0,\r\n length = that.events.length,\r\n e;\r\n\r\n for (; idx < length; idx ++) {\r\n e = that.events[idx];\r\n if (that.options[e] && options[e]) {\r\n that.unbind(e, that.options[e]);\r\n }\r\n }\r\n\r\n that.bind(that.events, options);\r\n },\r\n\r\n resize: function(force) {\r\n var size = this.getSize(),\r\n currentSize = this._size;\r\n\r\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\r\n this._size = size;\r\n this._resize(size, force);\r\n this.trigger(\"resize\", size);\r\n }\r\n },\r\n\r\n getSize: function() {\r\n return kendo.dimensions(this.element);\r\n },\r\n\r\n size: function(size) {\r\n if (!size) {\r\n return this.getSize();\r\n } else {\r\n this.setSize(size);\r\n }\r\n },\r\n\r\n setSize: $.noop,\r\n _resize: $.noop,\r\n\r\n destroy: function() {\r\n var that = this;\r\n\r\n that.element.removeData(\"kendo\" + that.options.prefix + that.options.name);\r\n that.element.removeData(\"handler\");\r\n that.unbind();\r\n },\r\n\r\n angular: function(){}\r\n });\r\n\r\n var DataBoundWidget = Widget.extend({\r\n // Angular consumes these.\r\n dataItems: function() {\r\n return this.dataSource.flatView();\r\n },\r\n\r\n _angularItems: function(cmd) {\r\n var that = this;\r\n that.angular(cmd, function(){\r\n return {\r\n elements: that.items(),\r\n data: $.map(that.dataItems(), function(dataItem){\r\n return { dataItem: dataItem };\r\n })\r\n };\r\n });\r\n }\r\n });\r\n\r\n kendo.dimensions = function(element, dimensions) {\r\n var domElement = element[0];\r\n\r\n if (dimensions) {\r\n element.css(dimensions);\r\n }\r\n\r\n return { width: domElement.offsetWidth, height: domElement.offsetHeight };\r\n };\r\n\r\n kendo.notify = noop;\r\n\r\n var templateRegExp = /template$/i,\r\n jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/,\r\n jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]*\\]$/,\r\n dashRegExp = /([A-Z])/g;\r\n\r\n function parseOption(element, option) {\r\n var value;\r\n\r\n if (option.indexOf(\"data\") === 0) {\r\n option = option.substring(4);\r\n option = option.charAt(0).toLowerCase() + option.substring(1);\r\n }\r\n\r\n option = option.replace(dashRegExp, \"-$1\");\r\n value = element.getAttribute(\"data-\" + kendo.ns + option);\r\n\r\n if (value === null) {\r\n value = undefined;\r\n } else if (value === \"null\") {\r\n value = null;\r\n } else if (value === \"true\") {\r\n value = true;\r\n } else if (value === \"false\") {\r\n value = false;\r\n } else if (numberRegExp.test(value)) {\r\n value = parseFloat(value);\r\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\r\n value = new Function(\"return (\" + value + \")\")();\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function parseOptions(element, options) {\r\n var result = {},\r\n option,\r\n value;\r\n\r\n for (option in options) {\r\n value = parseOption(element, option);\r\n\r\n if (value !== undefined) {\r\n\r\n if (templateRegExp.test(option)) {\r\n value = kendo.template($(\"#\" + value).html());\r\n }\r\n\r\n result[option] = value;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n kendo.initWidget = function(element, options, roles) {\r\n var result,\r\n option,\r\n widget,\r\n idx,\r\n length,\r\n role,\r\n value,\r\n dataSource,\r\n fullPath,\r\n widgetKeyRegExp;\r\n\r\n // Preserve backwards compatibility with (element, options, namespace) signature, where namespace was kendo.ui\r\n if (!roles) {\r\n roles = kendo.ui.roles;\r\n } else if (roles.roles) {\r\n roles = roles.roles;\r\n }\r\n\r\n element = element.nodeType ? element : element[0];\r\n\r\n role = element.getAttribute(\"data-\" + kendo.ns + \"role\");\r\n\r\n if (!role) {\r\n return;\r\n }\r\n\r\n fullPath = role.indexOf(\".\") === -1;\r\n\r\n // look for any widget that may be already instantiated based on this role.\r\n // The prefix used is unknown, hence the regexp\r\n //\r\n\r\n if (fullPath) {\r\n widget = roles[role];\r\n } else { // full namespace path - like kendo.ui.Widget\r\n widget = kendo.getter(role)(window);\r\n }\r\n\r\n var data = $(element).data(),\r\n widgetKey = widget ? \"kendo\" + widget.fn.options.prefix + widget.fn.options.name : \"\";\r\n\r\n if (fullPath) {\r\n widgetKeyRegExp = new RegExp(\"^kendo.*\" + role + \"$\", \"i\");\r\n } else { // full namespace path - like kendo.ui.Widget\r\n widgetKeyRegExp = new RegExp(\"^\" + widgetKey + \"$\", \"i\");\r\n }\r\n\r\n for(var key in data) {\r\n if (key.match(widgetKeyRegExp)) {\r\n // we have detected a widget of the same kind - save its reference, we will set its options\r\n if (key === widgetKey) {\r\n result = data[key];\r\n } else {\r\n return data[key];\r\n }\r\n }\r\n }\r\n\r\n if (!widget) {\r\n return;\r\n }\r\n\r\n dataSource = parseOption(element, \"dataSource\");\r\n\r\n options = $.extend({}, parseOptions(element, widget.fn.options), options);\r\n\r\n if (dataSource) {\r\n if (typeof dataSource === STRING) {\r\n options.dataSource = kendo.getter(dataSource)(window);\r\n } else {\r\n options.dataSource = dataSource;\r\n }\r\n }\r\n\r\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\r\n option = widget.fn.events[idx];\r\n\r\n value = parseOption(element, option);\r\n\r\n if (value !== undefined) {\r\n options[option] = kendo.getter(value)(window);\r\n }\r\n }\r\n\r\n if (!result) {\r\n result = new widget(element, options);\r\n } else if (!$.isEmptyObject(options)) {\r\n result.setOptions(options);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n kendo.rolesFromNamespaces = function(namespaces) {\r\n var roles = [],\r\n idx,\r\n length;\r\n\r\n if (!namespaces[0]) {\r\n namespaces = [kendo.ui, kendo.dataviz.ui];\r\n }\r\n\r\n for (idx = 0, length = namespaces.length; idx < length; idx ++) {\r\n roles[idx] = namespaces[idx].roles;\r\n }\r\n\r\n return extend.apply(null, [{}].concat(roles.reverse()));\r\n };\r\n\r\n kendo.init = function(element) {\r\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\r\n\r\n $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function(){\r\n kendo.initWidget(this, {}, roles);\r\n });\r\n };\r\n\r\n kendo.destroy = function(element) {\r\n $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function(){\r\n var data = $(this).data();\r\n\r\n for (var key in data) {\r\n if (key.indexOf(\"kendo\") === 0 && typeof data[key].destroy === FUNCTION) {\r\n data[key].destroy();\r\n }\r\n }\r\n });\r\n };\r\n\r\n function containmentComparer(a, b) {\r\n return $.contains(a, b) ? -1 : 1;\r\n }\r\n\r\n function resizableWidget() {\r\n var widget = $(this);\r\n return ($.inArray(widget.attr(\"data-\" + kendo.ns + \"role\"), [\"slider\", \"rangeslider\"]) > -1) || widget.is(\":visible\");\r\n }\r\n\r\n kendo.resize = function(element, force) {\r\n var widgets = $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().filter(resizableWidget);\r\n\r\n if (!widgets.length) {\r\n return;\r\n }\r\n\r\n // sort widgets based on their parent-child relation\r\n var widgetsArray = $.makeArray(widgets);\r\n widgetsArray.sort(containmentComparer);\r\n\r\n // resize widgets\r\n $.each(widgetsArray, function () {\r\n var widget = kendo.widgetInstance($(this));\r\n if (widget) {\r\n widget.resize(force);\r\n }\r\n });\r\n };\r\n\r\n kendo.parseOptions = parseOptions;\r\n\r\n extend(kendo.ui, {\r\n Widget: Widget,\r\n DataBoundWidget: DataBoundWidget,\r\n roles: {},\r\n progress: function(container, toggle) {\r\n var mask = container.find(\".k-loading-mask\"),\r\n support = kendo.support,\r\n browser = support.browser,\r\n isRtl, leftRight, webkitCorrection, containerScrollLeft;\r\n\r\n if (toggle) {\r\n if (!mask.length) {\r\n isRtl = support.isRtl(container);\r\n leftRight = isRtl ? \"right\" : \"left\";\r\n containerScrollLeft = container.scrollLeft();\r\n webkitCorrection = browser.webkit ? (!isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft) : 0;\r\n\r\n mask = $(\"<div class='k-loading-mask'><span class='k-loading-text'>Loading...</span><div class='k-loading-image'/><div class='k-loading-color'/></div>\")\r\n .width(\"100%\").height(\"100%\")\r\n .css(\"top\", container.scrollTop())\r\n .css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection)\r\n .prependTo(container);\r\n }\r\n } else if (mask) {\r\n mask.remove();\r\n }\r\n },\r\n plugin: function(widget, register, prefix) {\r\n var name = widget.fn.options.name,\r\n getter;\r\n\r\n register = register || kendo.ui;\r\n prefix = prefix || \"\";\r\n\r\n register[name] = widget;\r\n\r\n register.roles[name.toLowerCase()] = widget;\r\n\r\n getter = \"getKendo\" + prefix + name;\r\n name = \"kendo\" + prefix + name;\r\n\r\n $.fn[name] = function(options) {\r\n var value = this,\r\n args;\r\n\r\n if (typeof options === STRING) {\r\n args = slice.call(arguments, 1);\r\n\r\n this.each(function(){\r\n var widget = $.data(this, name),\r\n method,\r\n result;\r\n\r\n if (!widget) {\r\n throw new Error(kendo.format(\"Cannot call method '{0}' of {1} before it is initialized\", options, name));\r\n }\r\n\r\n method = widget[options];\r\n\r\n if (typeof method !== FUNCTION) {\r\n throw new Error(kendo.format(\"Cannot find method '{0}' of {1}\", options, name));\r\n }\r\n\r\n result = method.apply(widget, args);\r\n\r\n if (result !== undefined) {\r\n value = result;\r\n return false;\r\n }\r\n });\r\n } else {\r\n this.each(function() {\r\n new widget(this, options);\r\n });\r\n }\r\n\r\n return value;\r\n };\r\n\r\n $.fn[name].widget = widget;\r\n\r\n $.fn[getter] = function() {\r\n return this.data(name);\r\n };\r\n }\r\n });\r\n\r\n var ContainerNullObject = { bind: function () { return this; }, nullObject: true, options: {} };\r\n\r\n var MobileWidget = Widget.extend({\r\n init: function(element, options) {\r\n Widget.fn.init.call(this, element, options);\r\n this.element.autoApplyNS();\r\n this.wrapper = this.element;\r\n this.element.addClass(\"km-widget\");\r\n },\r\n\r\n destroy: function() {\r\n Widget.fn.destroy.call(this);\r\n this.element.kendoDestroy();\r\n },\r\n\r\n options: {\r\n prefix: \"Mobile\"\r\n },\r\n\r\n events: [],\r\n\r\n view: function() {\r\n var viewElement = this.element.closest(kendo.roleSelector(\"view splitview modalview drawer\"));\r\n return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;\r\n },\r\n\r\n viewHasNativeScrolling: function() {\r\n var view = this.view();\r\n return view && view.options.useNativeScrolling;\r\n },\r\n\r\n container: function() {\r\n var element = this.element.closest(kendo.roleSelector(\"view layout modalview drawer splitview\"));\r\n return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;\r\n }\r\n });\r\n\r\n extend(kendo.mobile, {\r\n init: function(element) {\r\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\r\n },\r\n\r\n appLevelNativeScrolling: function() {\r\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\r\n },\r\n\r\n roles: {},\r\n\r\n ui: {\r\n Widget: MobileWidget,\r\n DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),\r\n roles: {},\r\n plugin: function(widget) {\r\n kendo.ui.plugin(widget, kendo.mobile.ui, \"Mobile\");\r\n }\r\n }\r\n });\r\n\r\n deepExtend(kendo.dataviz, {\r\n init: function(element) {\r\n kendo.init(element, kendo.dataviz.ui);\r\n },\r\n ui: {\r\n roles: {},\r\n themes: {},\r\n views: [],\r\n plugin: function(widget) {\r\n kendo.ui.plugin(widget, kendo.dataviz.ui);\r\n }\r\n },\r\n roles: {}\r\n });\r\n\r\n kendo.touchScroller = function(elements, options) {\r\n // return the first touch scroller\r\n return $(elements).map(function(idx, element) {\r\n element = $(element);\r\n if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data(\"kendoMobileScroller\")) {\r\n element.kendoMobileScroller(options);\r\n return element.data(\"kendoMobileScroller\");\r\n } else {\r\n return false;\r\n }\r\n })[0];\r\n };\r\n\r\n kendo.preventDefault = function(e) {\r\n e.preventDefault();\r\n };\r\n\r\n kendo.widgetInstance = function(element, suites) {\r\n var role = element.data(kendo.ns + \"role\"),\r\n widgets = [], i, length;\r\n\r\n if (role) {\r\n // HACK!!! mobile view scroller widgets are instantiated on data-role=\"content\" elements. We need to discover them when resizing.\r\n if (role === \"content\") {\r\n role = \"scroller\";\r\n }\r\n\r\n if (suites) {\r\n if (suites[0]) {\r\n for (i = 0, length = suites.length; i < length; i ++) {\r\n widgets.push(suites[i].roles[role]);\r\n }\r\n } else {\r\n widgets.push(suites.roles[role]);\r\n }\r\n }\r\n else {\r\n widgets = [ kendo.ui.roles[role], kendo.dataviz.ui.roles[role], kendo.mobile.ui.roles[role] ];\r\n }\r\n\r\n if (role.indexOf(\".\") >= 0) {\r\n widgets = [ kendo.getter(role)(window) ];\r\n }\r\n\r\n for (i = 0, length = widgets.length; i < length; i ++) {\r\n var widget = widgets[i];\r\n if (widget) {\r\n var instance = element.data(\"kendo\" + widget.fn.options.prefix + widget.fn.options.name);\r\n if (instance) {\r\n return instance;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n kendo.onResize = function(callback) {\r\n var handler = callback;\r\n if (support.mobileOS.android) {\r\n handler = function() { setTimeout(callback, 600); };\r\n }\r\n\r\n $(window).on(support.resize, handler);\r\n return handler;\r\n };\r\n\r\n kendo.unbindResize = function(callback) {\r\n $(window).off(support.resize, callback);\r\n };\r\n\r\n kendo.attrValue = function(element, key) {\r\n return element.data(kendo.ns + key);\r\n };\r\n\r\n kendo.days = {\r\n Sunday: 0,\r\n Monday: 1,\r\n Tuesday: 2,\r\n Wednesday: 3,\r\n Thursday: 4,\r\n Friday: 5,\r\n Saturday: 6\r\n };\r\n\r\n function focusable(element, isTabIndexNotNaN) {\r\n var nodeName = element.nodeName.toLowerCase();\r\n\r\n return (/input|select|textarea|button|object/.test(nodeName) ?\r\n !element.disabled :\r\n \"a\" === nodeName ?\r\n element.href || isTabIndexNotNaN :\r\n isTabIndexNotNaN\r\n ) &&\r\n visible(element);\r\n }\r\n\r\n function visible(element) {\r\n return !$(element).parents().addBack().filter(function() {\r\n return $.css(this,\"visibility\") === \"hidden\" || $.expr.filters.hidden(this);\r\n }).length;\r\n }\r\n\r\n $.extend($.expr[ \":\" ], {\r\n kendoFocusable: function(element) {\r\n var idx = $.attr(element, \"tabindex\");\r\n return focusable(element, !isNaN(idx) && idx > -1);\r\n }\r\n });\r\n\r\n var MOUSE_EVENTS = [\"mousedown\", \"mousemove\", \"mouseenter\", \"mouseleave\", \"mouseover\", \"mouseout\", \"mouseup\", \"click\"];\r\n var EXCLUDE_BUST_CLICK_SELECTOR = \"label, input, [data-rel=external]\";\r\n\r\n var MouseEventNormalizer = {\r\n setupMouseMute: function() {\r\n var idx = 0,\r\n length = MOUSE_EVENTS.length,\r\n element = document.documentElement;\r\n\r\n if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\r\n return;\r\n }\r\n\r\n MouseEventNormalizer.mouseTrap = true;\r\n\r\n MouseEventNormalizer.bustClick = false;\r\n MouseEventNormalizer.captureMouse = false;\r\n\r\n var handler = function(e) {\r\n if (MouseEventNormalizer.captureMouse) {\r\n if (e.type === \"click\") {\r\n if (MouseEventNormalizer.bustClick && !$(e.target).is(EXCLUDE_BUST_CLICK_SELECTOR)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n } else {\r\n e.stopPropagation();\r\n }\r\n }\r\n };\r\n\r\n for (; idx < length; idx++) {\r\n element.addEventListener(MOUSE_EVENTS[idx], handler, true);\r\n }\r\n },\r\n\r\n muteMouse: function(e) {\r\n MouseEventNormalizer.captureMouse = true;\r\n if (e.data.bustClick) {\r\n MouseEventNormalizer.bustClick = true;\r\n }\r\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\r\n },\r\n\r\n unMuteMouse: function() {\r\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\r\n MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function() {\r\n MouseEventNormalizer.captureMouse = false;\r\n MouseEventNormalizer.bustClick = false;\r\n }, 400);\r\n }\r\n };\r\n\r\n var eventMap = {\r\n down: \"touchstart mousedown\",\r\n move: \"mousemove touchmove\",\r\n up: \"mouseup touchend touchcancel\",\r\n cancel: \"mouseleave touchcancel\"\r\n };\r\n\r\n if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\r\n eventMap = {\r\n down: \"touchstart\",\r\n move: \"touchmove\",\r\n up: \"touchend touchcancel\",\r\n cancel: \"touchcancel\"\r\n };\r\n } else if (support.pointers) {\r\n eventMap = {\r\n down: \"pointerdown\",\r\n move: \"pointermove\",\r\n up: \"pointerup\",\r\n cancel: \"pointercancel pointerleave\"\r\n };\r\n } else if (support.msPointers) {\r\n eventMap = {\r\n down: \"MSPointerDown\",\r\n move: \"MSPointerMove\",\r\n up: \"MSPointerUp\",\r\n cancel: \"MSPointerCancel MSPointerLeave\"\r\n };\r\n }\r\n\r\n if (support.msPointers && !(\"onmspointerenter\" in window)) { // IE10\r\n // Create MSPointerEnter/MSPointerLeave events using mouseover/out and event-time checks\r\n $.each({\r\n MSPointerEnter: \"MSPointerOver\",\r\n MSPointerLeave: \"MSPointerOut\"\r\n }, function( orig, fix ) {\r\n $.event.special[ orig ] = {\r\n delegateType: fix,\r\n bindType: fix,\r\n\r\n handle: function( event ) {\r\n var ret,\r\n target = this,\r\n related = event.relatedTarget,\r\n handleObj = event.handleObj;\r\n\r\n // For mousenter/leave call the handler if related is outside the target.\r\n // NB: No relatedTarget if the mouse left/entered the browser window\r\n if ( !related || (related !== target && !$.contains( target, related )) ) {\r\n event.type = handleObj.origType;\r\n ret = handleObj.handler.apply( this, arguments );\r\n event.type = fix;\r\n }\r\n return ret;\r\n }\r\n };\r\n });\r\n }\r\n\r\n\r\n var getEventMap = function(e) { return (eventMap[e] || e); },\r\n eventRegEx = /([^ ]+)/g;\r\n\r\n kendo.applyEventMap = function(events, ns) {\r\n events = events.replace(eventRegEx, getEventMap);\r\n\r\n if (ns) {\r\n events = events.replace(eventRegEx, \"$1.\" + ns);\r\n }\r\n\r\n return events;\r\n };\r\n\r\n var on = $.fn.on;\r\n\r\n function kendoJQuery(selector, context) {\r\n return new kendoJQuery.fn.init(selector, context);\r\n }\r\n\r\n extend(true, kendoJQuery, $);\r\n\r\n kendoJQuery.fn = kendoJQuery.prototype = new $();\r\n\r\n kendoJQuery.fn.constructor = kendoJQuery;\r\n\r\n kendoJQuery.fn.init = function(selector, context) {\r\n if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\r\n context = kendoJQuery(context);\r\n }\r\n\r\n return $.fn.init.call(this, selector, context, rootjQuery);\r\n };\r\n\r\n kendoJQuery.fn.init.prototype = kendoJQuery.fn;\r\n\r\n var rootjQuery = kendoJQuery(document);\r\n\r\n extend(kendoJQuery.fn, {\r\n handler: function(handler) {\r\n this.data(\"handler\", handler);\r\n return this;\r\n },\r\n\r\n autoApplyNS: function(ns) {\r\n this.data(\"kendoNS\", ns || kendo.guid());\r\n return this;\r\n },\r\n\r\n on: function() {\r\n var that = this,\r\n ns = that.data(\"kendoNS\");\r\n\r\n // support for event map signature\r\n if (arguments.length === 1) {\r\n return on.call(that, arguments[0]);\r\n }\r\n\r\n var context = that,\r\n args = slice.call(arguments);\r\n\r\n if (typeof args[args.length -1] === UNDEFINED) {\r\n args.pop();\r\n }\r\n\r\n var callback = args[args.length - 1],\r\n events = kendo.applyEventMap(args[0], ns);\r\n\r\n // setup mouse trap\r\n if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\r\n MouseEventNormalizer.setupMouseMute();\r\n\r\n var selector = args.length === 2 ? null : args[1],\r\n bustClick = events.indexOf(\"click\") > -1 && events.indexOf(\"touchend\") > -1;\r\n\r\n on.call(this,\r\n {\r\n touchstart: MouseEventNormalizer.muteMouse,\r\n touchend: MouseEventNormalizer.unMuteMouse\r\n },\r\n selector,\r\n {\r\n bustClick: bustClick\r\n });\r\n }\r\n\r\n if (typeof callback === STRING) {\r\n context = that.data(\"handler\");\r\n callback = context[callback];\r\n\r\n args[args.length - 1] = function(e) {\r\n callback.call(context, e);\r\n };\r\n }\r\n\r\n args[0] = events;\r\n\r\n on.apply(that, args);\r\n\r\n return that;\r\n },\r\n\r\n kendoDestroy: function(ns) {\r\n ns = ns || this.data(\"kendoNS\");\r\n\r\n if (ns) {\r\n this.off(\".\" + ns);\r\n }\r\n\r\n return this;\r\n }\r\n });\r\n\r\n kendo.jQuery = kendoJQuery;\r\n kendo.eventMap = eventMap;\r\n\r\n kendo.timezone = (function(){\r\n var months = { Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5, Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11 };\r\n var days = { Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, Sat: 6 };\r\n\r\n function ruleToDate(year, rule) {\r\n var date;\r\n var targetDay;\r\n var ourDay;\r\n var month = rule[3];\r\n var on = rule[4];\r\n var time = rule[5];\r\n var cache = rule[8];\r\n\r\n if (!cache) {\r\n rule[8] = cache = {};\r\n }\r\n\r\n if (cache[year]) {\r\n return cache[year];\r\n }\r\n\r\n if (!isNaN(on)) {\r\n date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));\r\n } else if (on.indexOf(\"last\") === 0) {\r\n date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));\r\n\r\n targetDay = days[on.substr(4, 3)];\r\n ourDay = date.getUTCDay();\r\n\r\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\r\n } else if (on.indexOf(\">=\") >= 0) {\r\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\r\n\r\n targetDay = days[on.substr(0, 3)];\r\n ourDay = date.getUTCDay();\r\n\r\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\r\n }\r\n\r\n return cache[year] = date;\r\n }\r\n\r\n function findRule(utcTime, rules, zone) {\r\n rules = rules[zone];\r\n\r\n if (!rules) {\r\n var time = zone.split(\":\");\r\n var offset = 0;\r\n\r\n if (time.length > 1) {\r\n offset = time[0] * 60 + Number(time[1]);\r\n }\r\n\r\n return [-1000000, 'max', '-', 'Jan', 1, [0, 0, 0], offset, '-'];\r\n }\r\n\r\n var year = new Date(utcTime).getUTCFullYear();\r\n\r\n rules = jQuery.grep(rules, function(rule) {\r\n var from = rule[0];\r\n var to = rule[1];\r\n\r\n return from <= year && (to >= year || (from == year && to == \"only\") || to == \"max\");\r\n });\r\n\r\n rules.push(utcTime);\r\n\r\n rules.sort(function(a, b) {\r\n if (typeof a != \"number\") {\r\n a = Number(ruleToDate(year, a));\r\n }\r\n\r\n if (typeof b != \"number\") {\r\n b = Number(ruleToDate(year, b));\r\n }\r\n\r\n return a - b;\r\n });\r\n\r\n var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\r\n\r\n return isNaN(rule) ? rule : null;\r\n }\r\n\r\n function findZone(utcTime, zones, timezone) {\r\n var zoneRules = zones[timezone];\r\n\r\n if (typeof zoneRules === \"string\") {\r\n zoneRules = zones[zoneRules];\r\n }\r\n\r\n if (!zoneRules) {\r\n throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\r\n }\r\n\r\n for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\r\n var until = zoneRules[idx][3];\r\n\r\n if (until && utcTime > until) {\r\n break;\r\n }\r\n }\r\n\r\n var zone = zoneRules[idx + 1];\r\n\r\n if (!zone) {\r\n throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + \".\");\r\n }\r\n\r\n return zone;\r\n }\r\n\r\n function zoneAndRule(utcTime, zones, rules, timezone) {\r\n if (typeof utcTime != NUMBER) {\r\n utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(),\r\n utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(),\r\n utcTime.getSeconds(), utcTime.getMilliseconds());\r\n }\r\n\r\n var zone = findZone(utcTime, zones, timezone);\r\n\r\n return {\r\n zone: zone,\r\n rule: findRule(utcTime, rules, zone[1])\r\n };\r\n }\r\n\r\n function offset(utcTime, timezone) {\r\n if (timezone == \"Etc/UTC\" || timezone == \"Etc/GMT\") {\r\n return 0;\r\n }\r\n\r\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\r\n var zone = info.zone;\r\n var rule = info.rule;\r\n\r\n return kendo.parseFloat(rule? zone[0] - rule[6] : zone[0]);\r\n }\r\n\r\n function abbr(utcTime, timezone) {\r\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\r\n var zone = info.zone;\r\n var rule = info.rule;\r\n\r\n var base = zone[2];\r\n\r\n if (base.indexOf(\"/\") >= 0) {\r\n return base.split(\"/\")[rule && +rule[6] ? 1 : 0];\r\n } else if (base.indexOf(\"%s\") >= 0) {\r\n return base.replace(\"%s\", (!rule || rule[7] == \"-\") ? '' : rule[7]);\r\n }\r\n\r\n return base;\r\n }\r\n\r\n function convert(date, fromOffset, toOffset) {\r\n if (typeof fromOffset == STRING) {\r\n fromOffset = this.offset(date, fromOffset);\r\n }\r\n\r\n if (typeof toOffset == STRING) {\r\n toOffset = this.offset(date, toOffset);\r\n }\r\n\r\n var fromLocalOffset = date.getTimezoneOffset();\r\n\r\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\r\n\r\n var toLocalOffset = date.getTimezoneOffset();\r\n\r\n return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\r\n }\r\n\r\n function apply(date, timezone) {\r\n return this.convert(date, date.getTimezoneOffset(), timezone);\r\n }\r\n\r\n function remove(date, timezone) {\r\n return this.convert(date, timezone, date.getTimezoneOffset());\r\n }\r\n\r\n function toLocalDate(time) {\r\n return this.apply(new Date(time), \"Etc/UTC\");\r\n }\r\n\r\n return {\r\n zones: {},\r\n rules: {},\r\n offset: offset,\r\n convert: convert,\r\n apply: apply,\r\n remove: remove,\r\n abbr: abbr,\r\n toLocalDate: toLocalDate\r\n };\r\n })();\r\n\r\n kendo.date = (function(){\r\n var MS_PER_MINUTE = 60000,\r\n MS_PER_DAY = 86400000;\r\n\r\n function adjustDST(date, hours) {\r\n if (hours === 0 && date.getHours() === 23) {\r\n date.setHours(date.getHours() + 2);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function setDayOfWeek(date, day, dir) {\r\n var hours = date.getHours();\r\n\r\n dir = dir || 1;\r\n day = ((day - date.getDay()) + (7 * dir)) % 7;\r\n\r\n date.setDate(date.getDate() + day);\r\n adjustDST(date, hours);\r\n }\r\n\r\n function dayOfWeek(date, day, dir) {\r\n date = new Date(date);\r\n setDayOfWeek(date, day, dir);\r\n return date;\r\n }\r\n\r\n function firstDayOfMonth(date) {\r\n return new Date(\r\n date.getFullYear(),\r\n date.getMonth(),\r\n 1\r\n );\r\n }\r\n\r\n function lastDayOfMonth(date) {\r\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0),\r\n first = firstDayOfMonth(date),\r\n timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\r\n\r\n if (timeOffset) {\r\n last.setHours(first.getHours() + (timeOffset / 60));\r\n }\r\n\r\n return last;\r\n }\r\n\r\n function getDate(date) {\r\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\r\n adjustDST(date, 0);\r\n return date;\r\n }\r\n\r\n function toUtcTime(date) {\r\n return Date.UTC(date.getFullYear(), date.getMonth(),\r\n date.getDate(), date.getHours(), date.getMinutes(),\r\n date.getSeconds(), date.getMilliseconds());\r\n }\r\n\r\n function getMilliseconds(date) {\r\n return date.getTime() - getDate(date);\r\n }\r\n\r\n function isInTimeRange(value, min, max) {\r\n var msMin = getMilliseconds(min),\r\n msMax = getMilliseconds(max),\r\n msValue;\r\n\r\n if (!value || msMin == msMax) {\r\n return true;\r\n }\r\n\r\n if (min >= max) {\r\n max += MS_PER_DAY;\r\n }\r\n\r\n msValue = getMilliseconds(value);\r\n\r\n if (msMin > msValue) {\r\n msValue += MS_PER_DAY;\r\n }\r\n\r\n if (msMax < msMin) {\r\n msMax += MS_PER_DAY;\r\n }\r\n\r\n return msValue >= msMin && msValue <= msMax;\r\n }\r\n\r\n function isInDateRange(value, min, max) {\r\n var msMin = min.getTime(),\r\n msMax = max.getTime(),\r\n msValue;\r\n\r\n if (msMin >= msMax) {\r\n msMax += MS_PER_DAY;\r\n }\r\n\r\n msValue = value.getTime();\r\n\r\n return msValue >= msMin && msValue <= msMax;\r\n }\r\n\r\n function addDays(date, offset) {\r\n var hours = date.getHours();\r\n date = new Date(date);\r\n\r\n setTime(date, offset * MS_PER_DAY);\r\n adjustDST(date, hours);\r\n return date;\r\n }\r\n\r\n function setTime(date, milliseconds, ignoreDST) {\r\n var offset = date.getTimezoneOffset();\r\n var difference;\r\n\r\n date.setTime(date.getTime() + milliseconds);\r\n\r\n if (!ignoreDST) {\r\n difference = date.getTimezoneOffset() - offset;\r\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\r\n }\r\n }\r\n\r\n function today() {\r\n return getDate(new Date());\r\n }\r\n\r\n function isToday(date) {\r\n return getDate(date).getTime() == today().getTime();\r\n }\r\n\r\n function toInvariantTime(date) {\r\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\r\n\r\n if (date) {\r\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\r\n }\r\n\r\n return staticDate;\r\n }\r\n\r\n return {\r\n adjustDST: adjustDST,\r\n dayOfWeek: dayOfWeek,\r\n setDayOfWeek: setDayOfWeek,\r\n getDate: getDate,\r\n isInDateRange: isInDateRange,\r\n isInTimeRange: isInTimeRange,\r\n isToday: isToday,\r\n nextDay: function(date) {\r\n return addDays(date, 1);\r\n },\r\n previousDay: function(date) {\r\n return addDays(date, -1);\r\n },\r\n toUtcTime: toUtcTime,\r\n MS_PER_DAY: MS_PER_DAY,\r\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\r\n MS_PER_MINUTE: MS_PER_MINUTE,\r\n setTime: setTime,\r\n addDays: addDays,\r\n today: today,\r\n toInvariantTime: toInvariantTime,\r\n firstDayOfMonth: firstDayOfMonth,\r\n lastDayOfMonth: lastDayOfMonth,\r\n getMilliseconds: getMilliseconds\r\n //TODO methods: combine date portion and time portion from arguments - date1, date 2\r\n };\r\n })();\r\n\r\n\r\n kendo.stripWhitespace = function(element) {\r\n if (document.createNodeIterator) {\r\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function(node) {\r\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\r\n }, false);\r\n\r\n while (iterator.nextNode()) {\r\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\r\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\r\n }\r\n }\r\n } else { // IE7/8 support\r\n for (var i = 0; i < element.childNodes.length; i++) {\r\n var child = element.childNodes[i];\r\n\r\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\r\n element.removeChild(child);\r\n i--;\r\n }\r\n\r\n if (child.nodeType == 1) {\r\n kendo.stripWhitespace(child);\r\n }\r\n }\r\n }\r\n };\r\n\r\n var animationFrame = window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n window.msRequestAnimationFrame ||\r\n function(callback){ setTimeout(callback, 1000 / 60); };\r\n\r\n kendo.animationFrame = function(callback) {\r\n animationFrame.call(window, callback);\r\n };\r\n\r\n var animationQueue = [];\r\n\r\n kendo.queueAnimation = function(callback) {\r\n animationQueue[animationQueue.length] = callback;\r\n if (animationQueue.length === 1) {\r\n kendo.runNextAnimation();\r\n }\r\n };\r\n\r\n kendo.runNextAnimation = function() {\r\n kendo.animationFrame(function() {\r\n if (animationQueue[0]) {\r\n animationQueue.shift()();\r\n if (animationQueue[0]) {\r\n kendo.runNextAnimation();\r\n }\r\n }\r\n });\r\n };\r\n\r\n kendo.parseQueryStringParams = function(url) {\r\n var queryString = url.split('?')[1] || \"\",\r\n params = {},\r\n paramParts = queryString.split(/&|=/),\r\n length = paramParts.length,\r\n idx = 0;\r\n\r\n for (; idx < length; idx += 2) {\r\n if(paramParts[idx] !== \"\") {\r\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\r\n }\r\n }\r\n\r\n return params;\r\n };\r\n\r\n kendo.elementUnderCursor = function(e) {\r\n if (typeof e.x.client != \"undefined\") {\r\n return document.elementFromPoint(e.x.client, e.y.client);\r\n }\r\n };\r\n\r\n kendo.wheelDeltaY = function(jQueryEvent) {\r\n var e = jQueryEvent.originalEvent,\r\n deltaY = e.wheelDeltaY,\r\n delta;\r\n\r\n if (e.wheelDelta) { // Webkit and IE\r\n if (deltaY === undefined || deltaY) { // IE does not have deltaY, thus always scroll (horizontal scrolling is treated as vertical)\r\n delta = e.wheelDelta;\r\n }\r\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) { // Firefox and Opera\r\n delta = (-e.detail) * 10;\r\n }\r\n\r\n return delta;\r\n };\r\n\r\n kendo.throttle = function(fn, delay) {\r\n var timeout;\r\n var lastExecTime = 0;\r\n\r\n if (!delay || delay <= 0) {\r\n return fn;\r\n }\r\n\r\n var throttled = function() {\r\n var that = this;\r\n var elapsed = +new Date() - lastExecTime;\r\n var args = arguments;\r\n\r\n function exec() {\r\n fn.apply(that, args);\r\n lastExecTime = +new Date();\r\n }\r\n\r\n // first execution\r\n if (!lastExecTime) {\r\n return exec();\r\n }\r\n\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n }\r\n\r\n if (elapsed > delay) {\r\n exec();\r\n } else {\r\n timeout = setTimeout(exec, delay - elapsed);\r\n }\r\n };\r\n\r\n throttled.cancel = function() {\r\n clearTimeout(timeout);\r\n };\r\n\r\n return throttled;\r\n };\r\n\r\n\r\n kendo.caret = function (element, start, end) {\r\n var rangeElement;\r\n var isPosition = start !== undefined;\r\n\r\n if (end === undefined) {\r\n end = start;\r\n }\r\n\r\n if (element[0]) {\r\n element = element[0];\r\n }\r\n\r\n if (isPosition && element.disabled) {\r\n return;\r\n }\r\n\r\n try {\r\n if (element.selectionStart !== undefined) {\r\n if (isPosition) {\r\n element.focus();\r\n element.setSelectionRange(start, end);\r\n } else {\r\n start = [element.selectionStart, element.selectionEnd];\r\n }\r\n } else if (document.selection) {\r\n if ($(element).is(\":visible\")) {\r\n element.focus();\r\n }\r\n\r\n rangeElement = element.createTextRange();\r\n\r\n if (isPosition) {\r\n rangeElement.collapse(true);\r\n rangeElement.moveStart(\"character\", start);\r\n rangeElement.moveEnd(\"character\", end - start);\r\n rangeElement.select();\r\n } else {\r\n var rangeDuplicated = rangeElement.duplicate(),\r\n selectionStart, selectionEnd;\r\n\r\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\r\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\r\n selectionStart = rangeDuplicated.text.length;\r\n selectionEnd = selectionStart + rangeElement.text.length;\r\n\r\n start = [selectionStart, selectionEnd];\r\n }\r\n }\r\n } catch(e) {\r\n /* element is not focused or it is not in the DOM */\r\n start = [];\r\n }\r\n\r\n return start;\r\n };\r\n\r\n kendo.compileMobileDirective = function(element, scope) {\r\n var angular = window.angular;\r\n\r\n element.attr(\"data-\" + kendo.ns + \"role\", element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\r\n\r\n angular.element(element).injector().invoke([\"$compile\", function($compile) {\r\n $compile(element)(scope);\r\n\r\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\r\n scope.$digest();\r\n }\r\n }]);\r\n\r\n return kendo.widgetInstance(element, kendo.mobile.ui);\r\n };\r\n\r\n kendo.antiForgeryTokens = function() {\r\n var tokens = { },\r\n csrf_token = $(\"meta[name=csrf-token],meta[name=_csrf]\").attr(\"content\"),\r\n csrf_param = $(\"meta[name=csrf-param],meta[name=_csrf_header]\").attr(\"content\");\r\n\r\n $(\"input[name^='__RequestVerificationToken']\").each(function() {\r\n tokens[this.name] = this.value;\r\n });\r\n\r\n if (csrf_param !== undefined && csrf_token !== undefined) {\r\n tokens[csrf_param] = csrf_token;\r\n }\r\n\r\n return tokens;\r\n };\r\n\r\n kendo.cycleForm = function(form) {\r\n var firstElement = form.find(\"input, .k-widget\").first();\r\n var lastElement = form.find(\"button, .k-button\").last();\r\n\r\n function focus(el) {\r\n var widget = kendo.widgetInstance(el);\r\n\r\n if (widget && widget.focus) {\r\n widget.focus();\r\n } else {\r\n el.focus();\r\n }\r\n }\r\n\r\n lastElement.on(\"keydown\", function(e) {\r\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\r\n e.preventDefault();\r\n focus(firstElement);\r\n }\r\n });\r\n\r\n firstElement.on(\"keydown\", function(e) {\r\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\r\n e.preventDefault();\r\n focus(lastElement);\r\n }\r\n });\r\n };\r\n\r\n // kendo.saveAs -----------------------------------------------\r\n (function() {\r\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\r\n var form = $(\"<form>\").attr({\r\n action: proxyURL,\r\n method: \"POST\",\r\n target: proxyTarget\r\n });\r\n\r\n var data = kendo.antiForgeryTokens();\r\n data.fileName = fileName;\r\n\r\n var parts = dataURI.split(\";base64,\");\r\n data.contentType = parts[0].replace(\"data:\", \"\");\r\n data.base64 = parts[1];\r\n\r\n for (var name in data) {\r\n if (data.hasOwnProperty(name)) {\r\n $('<input>').attr({\r\n value: data[name],\r\n name: name,\r\n type: \"hidden\"\r\n }).appendTo(form);\r\n }\r\n }\r\n\r\n form.appendTo(\"body\").submit().remove();\r\n }\r\n\r\n var fileSaver = document.createElement(\"a\");\r\n var downloadAttribute = \"download\" in fileSaver;\r\n\r\n function saveAsBlob(dataURI, fileName) {\r\n var blob = dataURI; // could be a Blob object\r\n\r\n if (typeof dataURI == \"string\") {\r\n var parts = dataURI.split(\";base64,\");\r\n var contentType = parts[0];\r\n var base64 = atob(parts[1]);\r\n var array = new Uint8Array(base64.length);\r\n\r\n for (var idx = 0; idx < base64.length; idx++) {\r\n array[idx] = base64.charCodeAt(idx);\r\n }\r\n blob = new Blob([array.buffer], { type: contentType });\r\n }\r\n\r\n navigator.msSaveBlob(blob, fileName);\r\n }\r\n\r\n function saveAsDataURI(dataURI, fileName) {\r\n if (window.Blob && dataURI instanceof Blob) {\r\n dataURI = URL.createObjectURL(dataURI);\r\n }\r\n\r\n fileSaver.download = fileName;\r\n fileSaver.href = dataURI;\r\n\r\n var e = document.createEvent(\"MouseEvents\");\r\n e.initMouseEvent(\"click\", true, false, window,\r\n 0, 0, 0, 0, 0, false, false, false, false, 0, null);\r\n\r\n fileSaver.dispatchEvent(e);\r\n }\r\n\r\n kendo.saveAs = function(options) {\r\n var save = postToProxy;\r\n\r\n if (!options.forceProxy) {\r\n if (downloadAttribute) {\r\n save = saveAsDataURI;\r\n } else if (navigator.msSaveBlob) {\r\n save = saveAsBlob;\r\n }\r\n }\r\n\r\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\r\n };\r\n })();\r\n})(jQuery, window);\r\n\r\n\r\n\r\n(function($, undefined) {\r\n var kendo = window.kendo,\r\n extend = $.extend,\r\n odataFilters = {\r\n eq: \"eq\",\r\n neq: \"ne\",\r\n gt: \"gt\",\r\n gte: \"ge\",\r\n lt: \"lt\",\r\n lte: \"le\",\r\n contains : \"substringof\",\r\n doesnotcontain: \"substringof\",\r\n endswith: \"endswith\",\r\n startswith: \"startswith\"\r\n },\r\n odataFiltersVersionFour = extend({}, odataFilters, {\r\n contains: \"contains\"\r\n }),\r\n mappers = {\r\n pageSize: $.noop,\r\n page: $.noop,\r\n filter: function(params, filter, useVersionFour) {\r\n if (filter) {\r\n filter = toOdataFilter(filter, useVersionFour);\r\n if (filter) {\r\n params.$filter = filter;\r\n }\r\n }\r\n },\r\n sort: function(params, orderby) {\r\n var expr = $.map(orderby, function(value) {\r\n var order = value.field.replace(/\\./g, \"/\");\r\n\r\n if (value.dir === \"desc\") {\r\n order += \" desc\";\r\n }\r\n\r\n return order;\r\n }).join(\",\");\r\n\r\n if (expr) {\r\n params.$orderby = expr;\r\n }\r\n },\r\n skip: function(params, skip) {\r\n if (skip) {\r\n params.$skip = skip;\r\n }\r\n },\r\n take: function(params, take) {\r\n if (take) {\r\n params.$top = take;\r\n }\r\n }\r\n },\r\n defaultDataType = {\r\n read: {\r\n dataType: \"jsonp\"\r\n }\r\n };\r\n\r\n function toOdataFilter(filter, useOdataFour) {\r\n var result = [],\r\n logic = filter.logic || \"and\",\r\n idx,\r\n length,\r\n field,\r\n type,\r\n format,\r\n operator,\r\n value,\r\n ignoreCase,\r\n filters = filter.filters;\r\n\r\n for (idx = 0, length = filters.length; idx < length; idx++) {\r\n filter = filters[idx];\r\n field = filter.field;\r\n value = filter.value;\r\n operator = filter.operator;\r\n\r\n if (filter.filters) {\r\n filter = toOdataFilter(filter, useOdataFour);\r\n } else {\r\n ignoreCase = filter.ignoreCase;\r\n field = field.replace(/\\./g, \"/\");\r\n filter = odataFilters[operator];\r\n if (useOdataFour) {\r\n filter = odataFiltersVersionFour[operator];\r\n }\r\n\r\n if (filter && value !== undefined) {\r\n type = $.type(value);\r\n if (type === \"string\") {\r\n format = \"'{1}'\";\r\n value = value.replace(/'/g, \"''\");\r\n\r\n if (ignoreCase === true) {\r\n field = \"tolower(\" + field + \")\";\r\n }\r\n\r\n } else if (type === \"date\") {\r\n if (useOdataFour) {\r\n format = \"{1:yyyy-MM-ddTHH:mm:ss+00:00}\";\r\n } else {\r\n format = \"datetime'{1:yyyy-MM-ddTHH:mm:ss}'\";\r\n }\r\n } else {\r\n format = \"{1}\";\r\n }\r\n\r\n if (filter.length > 3) {\r\n if (filter !== \"substringof\") {\r\n format = \"{0}({2},\" + format + \")\";\r\n } else {\r\n format = \"{0}(\" + format + \",{2})\";\r\n if (operator === \"doesnotcontain\") {\r\n if (useOdataFour) {\r\n format = \"{0}({2},'{1}') eq -1\";\r\n filter = \"indexof\";\r\n } else {\r\n format += \" eq false\";\r\n }\r\n }\r\n }\r\n } else {\r\n format = \"{2} {0} \" + format;\r\n }\r\n\r\n filter = kendo.format(format, filter, value, field);\r\n }\r\n }\r\n\r\n result.push(filter);\r\n }\r\n\r\n filter = result.join(\" \" + logic + \" \");\r\n\r\n if (result.length > 1) {\r\n filter = \"(\" + filter + \")\";\r\n }\r\n\r\n return filter;\r\n }\r\n\r\n function stripMetadata(obj) {\r\n for (var name in obj) {\r\n if(name.indexOf(\"@odata\") === 0) {\r\n delete obj[name];\r\n }\r\n }\r\n }\r\n\r\n extend(true, kendo.data, {\r\n schemas: {\r\n odata: {\r\n type: \"json\",\r\n data: function(data) {\r\n return data.d.results || [data.d];\r\n },\r\n total: \"d.__count\"\r\n }\r\n },\r\n transports: {\r\n odata: {\r\n read: {\r\n cache: true, // to prevent jQuery from adding cache buster\r\n dataType: \"jsonp\",\r\n jsonp: \"$callback\"\r\n },\r\n update: {\r\n cache: true,\r\n dataType: \"json\",\r\n contentType: \"application/json\", // to inform the server the the request body is JSON encoded\r\n type: \"PUT\" // can be PUT or MERGE\r\n },\r\n create: {\r\n cache: true,\r\n dataType: \"json\",\r\n contentType: \"application/json\",\r\n type: \"POST\" // must be POST to create new entity\r\n },\r\n destroy: {\r\n cache: true,\r\n dataType: \"json\",\r\n type: \"DELETE\"\r\n },\r\n parameterMap: function(options, type, useVersionFour) {\r\n var params,\r\n value,\r\n option,\r\n dataType;\r\n\r\n options = options || {};\r\n type = type || \"read\";\r\n dataType = (this.options || defaultDataType)[type];\r\n dataType = dataType ? dataType.dataType : \"json\";\r\n\r\n if (type === \"read\") {\r\n params = {\r\n $inlinecount: \"allpages\"\r\n };\r\n\r\n if (dataType != \"json\") {\r\n params.$format = \"json\";\r\n }\r\n\r\n for (option in options) {\r\n if (mappers[option]) {\r\n mappers[option](params, options[option], useVersionFour);\r\n } else {\r\n params[option] = options[option];\r\n }\r\n }\r\n } else {\r\n if (dataType !== \"json\") {\r\n throw new Error(\"Only json dataType can be used for \" + type + \" operation.\");\r\n }\r\n\r\n if (type !== \"destroy\") {\r\n for (option in options) {\r\n value = options[option];\r\n if (typeof value === \"number\") {\r\n options[option] = value + \"\";\r\n }\r\n }\r\n\r\n params = kendo.stringify(options);\r\n }\r\n }\r\n\r\n return params;\r\n }\r\n }\r\n }\r\n });\r\n\r\n extend(true, kendo.data, {\r\n schemas: {\r\n \"odata-v4\": {\r\n type: \"json\",\r\n data: function(data) {\r\n data = $.extend({}, data);\r\n stripMetadata(data);\r\n\r\n if (data.value) {\r\n return data.value;\r\n }\r\n return [data];\r\n },\r\n total: function(data) {\r\n return data[\"@odata.count\"];\r\n }\r\n }\r\n },\r\n transports: {\r\n \"odata-v4\": {\r\n read: {\r\n cache: true, // to prevent jQuery from adding cache buster\r\n dataType: \"json\"\r\n },\r\n update: {\r\n cache: true,\r\n dataType: \"json\",\r\n contentType: \"application/json;IEEE754Compatible=true\", // to inform the server the the request body is JSON encoded\r\n type: \"PUT\" // can be PUT or MERGE\r\n },\r\n create: {\r\n cache: true,\r\n dataType: \"json\",\r\n contentType: \"application/json;IEEE754Compatible=true\",\r\n type: \"POST\" // must be POST to create new entity\r\n },\r\n destroy: {\r\n cache: true,\r\n dataType: \"json\",\r\n type: \"DELETE\"\r\n },\r\n parameterMap: function(options, type) {\r\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\r\n if (type == \"read\") {\r\n result.$count = true;\r\n delete result.$inlinecount;\r\n }\r\n\r\n return result;\r\n }\r\n }\r\n }\r\n });\r\n\r\n})(window.kendo.jQuery);\r\n\r\n\r\n\r\n(function($, undefined) {\r\n var kendo = window.kendo,\r\n isArray = $.isArray,\r\n isPlainObject = $.isPlainObject,\r\n map = $.map,\r\n each = $.each,\r\n extend = $.extend,\r\n getter = kendo.getter,\r\n Class = kendo.Class;\r\n\r\n var XmlDataReader = Class.extend({\r\n init: function(options) {\r\n var that = this,\r\n total = options.total,\r\n model = options.model,\r\n parse = options.parse,\r\n errors = options.errors,\r\n serialize = options.serialize,\r\n data = options.data;\r\n\r\n if (model) {\r\n if (isPlainObject(model)) {\r\n var base = options.modelBase || kendo.data.Model;\r\n\r\n if (model.fields) {\r\n each(model.fields, function(field, value) {\r\n if (isPlainObject(value) && value.field) {\r\n if (!$.isFunction(value.field)) {\r\n value = extend(value, { field: that.getter(value.field) });\r\n }\r\n } else {\r\n value = { field: that.getter(value) };\r\n }\r\n model.fields[field] = value;\r\n });\r\n }\r\n\r\n var id = model.id;\r\n if (id) {\r\n var idField = {};\r\n\r\n idField[that.xpathToMember(id, true)] = { field : that.getter(id) };\r\n model.fields = extend(idField, model.fields);\r\n model.id = that.xpathToMember(id);\r\n }\r\n model = base.define(model);\r\n }\r\n\r\n that.model = model;\r\n }\r\n\r\n if (total) {\r\n if (typeof total == \"string\") {\r\n total = that.getter(total);\r\n that.total = function(data) {\r\n return parseInt(total(data), 10);\r\n };\r\n } else if (typeof total == \"function\"){\r\n that.total = total;\r\n }\r\n }\r\n\r\n if (errors) {\r\n if (typeof errors == \"string\") {\r\n errors = that.getter(errors);\r\n that.errors = function(data) {\r\n return errors(data) || null;\r\n };\r\n } else if (typeof errors == \"function\"){\r\n that.errors = errors;\r\n }\r\n }\r\n\r\n if (data) {\r\n if (typeof data == \"string\") {\r\n data = that.xpathToMember(data);\r\n that.data = function(value) {\r\n var result = that.evaluate(value, data),\r\n modelInstance;\r\n\r\n result = isArray(result) ? result : [result];\r\n\r\n if (that.model && model.fields) {\r\n modelInstance = new that.model();\r\n\r\n return map(result, function(value) {\r\n if (value) {\r\n var record = {}, field;\r\n\r\n for (field in model.fields) {\r\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\r\n }\r\n\r\n return record;\r\n }\r\n });\r\n }\r\n\r\n return result;\r\n };\r\n } else if (typeof data == \"function\") {\r\n that.data = data;\r\n }\r\n }\r\n\r\n if (typeof parse == \"function\") {\r\n var xmlParse = that.parse;\r\n\r\n that.parse = function(data) {\r\n var xml = parse.call(that, data);\r\n return xmlParse.call(that, xml);\r\n };\r\n }\r\n\r\n if (typeof serialize == \"function\") {\r\n that.serialize = serialize;\r\n }\r\n },\r\n total: function(result) {\r\n return this.data(result).length;\r\n },\r\n errors: function(data) {\r\n return data ? data.errors : null;\r\n },\r\n serialize: function(data) {\r\n return data;\r\n },\r\n parseDOM: function(element) {\r\n var result = {},\r\n parsedNode,\r\n node,\r\n nodeType,\r\n nodeName,\r\n member,\r\n attribute,\r\n attributes = element.attributes,\r\n attributeCount = attributes.length,\r\n idx;\r\n\r\n for (idx = 0; idx < attributeCount; idx++) {\r\n attribute = attributes[idx];\r\n result[\"@\" + attribute.nodeName] = attribute.nodeValue;\r\n }\r\n\r\n for (node = element.firstChild; node; node = node.nextSibling) {\r\n nodeType = node.nodeType;\r\n\r\n if (nodeType === 3 || nodeType === 4) {\r\n // text nodes or CDATA are stored as #text field\r\n result[\"#text\"] = node.nodeValue;\r\n } else if (nodeType === 1) {\r\n // elements are stored as fields\r\n parsedNode = this.parseDOM(node);\r\n\r\n nodeName = node.nodeName;\r\n\r\n member = result[nodeName];\r\n\r\n if (isArray(member)) {\r\n // elements of same nodeName are stored as array\r\n member.push(parsedNode);\r\n } else if (member !== undefined) {\r\n member = [member, parsedNode];\r\n } else {\r\n member = parsedNode;\r\n }\r\n\r\n result[nodeName] = member;\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n evaluate: function(value, expression) {\r\n var members = expression.split(\".\"),\r\n member,\r\n result,\r\n length,\r\n intermediateResult,\r\n idx;\r\n\r\n while (member = members.shift()) {\r\n value = value[member];\r\n\r\n if (isArray(value)) {\r\n result = [];\r\n expression = members.join(\".\");\r\n\r\n for (idx = 0, length = value.length; idx < length; idx++) {\r\n intermediateResult = this.evaluate(value[idx], expression);\r\n\r\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\r\n\r\n result.push.apply(result, intermediateResult);\r\n }\r\n\r\n return result;\r\n }\r\n }\r\n\r\n return value;\r\n },\r\n\r\n parse: function(xml) {\r\n var documentElement,\r\n tree,\r\n result = {};\r\n\r\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\r\n\r\n tree = this.parseDOM(documentElement);\r\n\r\n result[documentElement.nodeName] = tree;\r\n\r\n return result;\r\n },\r\n\r\n xpathToMember: function(member, raw) {\r\n if (!member) {\r\n return \"\";\r\n }\r\n\r\n member = member.replace(/^\\//, \"\") // remove the first \"/\"\r\n .replace(/\\//g, \".\"); // replace all \"/\" with \".\"\r\n\r\n if (member.indexOf(\"@\") >= 0) {\r\n // replace @attribute with '[\"@attribute\"]'\r\n return member.replace(/\\.?(@.*)/, raw? '$1':'[\"$1\"]');\r\n }\r\n\r\n if (member.indexOf(\"text()\") >= 0) {\r\n // replace \".text()\" with '[\"#text\"]'\r\n return member.replace(/(\\.?text\\(\\))/, raw? '#text':'[\"#text\"]');\r\n }\r\n\r\n return member;\r\n },\r\n getter: function(member) {\r\n return getter(this.xpathToMember(member), true);\r\n }\r\n });\r\n\r\n $.extend(true, kendo.data, {\r\n XmlDataReader: XmlDataReader,\r\n readers: {\r\n xml: XmlDataReader\r\n }\r\n });\r\n})(window.kendo.jQuery);\r\n\r\n\r\n\r\n(function($, undefined) {\r\n var extend = $.extend,\r\n proxy = $.proxy,\r\n isPlainObject = $.isPlainObject,\r\n isEmptyObject = $.isEmptyObject,\r\n isArray = $.isArray,\r\n grep = $.grep,\r\n ajax = $.ajax,\r\n map,\r\n each = $.each,\r\n noop = $.noop,\r\n kendo = window.kendo,\r\n isFunction = kendo.isFunction,\r\n Observable = kendo.Observable,\r\n Class = kendo.Class,\r\n STRING = \"string\",\r\n FUNCTION = \"function\",\r\n CREATE = \"create\",\r\n READ = \"read\",\r\n UPDATE = \"update\",\r\n DESTROY = \"destroy\",\r\n CHANGE = \"change\",\r\n SYNC = \"sync\",\r\n GET = \"get\",\r\n ERROR = \"error\",\r\n REQUESTSTART = \"requestStart\",\r\n PROGRESS = \"progress\",\r\n REQUESTEND = \"requestEnd\",\r\n crud = [CREATE, READ, UPDATE, DESTROY],\r\n identity = function(o) { return o; },\r\n getter = kendo.getter,\r\n stringify = kendo.stringify,\r\n math = Math,\r\n push = [].push,\r\n join = [].join,\r\n pop = [].pop,\r\n splice = [].splice,\r\n shift = [].shift,\r\n slice = [].slice,\r\n unshift = [].unshift,\r\n toString = {}.toString,\r\n stableSort = kendo.support.stableSort,\r\n dateRegExp = /^\\/Date\\((.*?)\\)\\/$/,\r\n newLineRegExp = /(\\r+|\\n+)/g,\r\n quoteRegExp = /(?=['\\\\])/g;\r\n\r\n var ObservableArray = Observable.extend({\r\n init: function(array, type) {\r\n var that = this;\r\n\r\n that.type = type || ObservableObject;\r\n\r\n Observable.fn.init.call(that);\r\n\r\n that.length = array.length;\r\n\r\n that.wrapAll(array, that);\r\n },\r\n\r\n at: function(index) {\r\n return this[index];\r\n },\r\n\r\n toJSON: function() {\r\n var idx, length = this.length, value, json = new Array(length);\r\n\r\n for (idx = 0; idx < length; idx++){\r\n value = this[idx];\r\n\r\n if (value instanceof ObservableObject) {\r\n value = value.toJSON();\r\n }\r\n\r\n json[idx] = value;\r\n }\r\n\r\n return json;\r\n },\r\n\r\n parent: noop,\r\n\r\n wrapAll: function(source, target) {\r\n var that = this,\r\n idx,\r\n length,\r\n parent = function() {\r\n return that;\r\n };\r\n\r\n target = target || [];\r\n\r\n for (idx = 0, length = source.length; idx < length; idx++) {\r\n target[idx] = that.wrap(source[idx], parent);\r\n }\r\n\r\n return target;\r\n },\r\n\r\n wrap: function(object, parent) {\r\n var that = this,\r\n observable;\r\n\r\n if (object !== null && toString.call(object) === \"[object Object]\") {\r\n observable = object instanceof that.type || object instanceof Model;\r\n\r\n if (!observable) {\r\n object = object instanceof ObservableObject ? object.toJSON() : object;\r\n object = new that.type(object);\r\n }\r\n\r\n object.parent = parent;\r\n\r\n object.bind(CHANGE, function(e) {\r\n that.trigger(CHANGE, {\r\n field: e.field,\r\n node: e.node,\r\n index: e.index,\r\n items: e.items || [this],\r\n action: e.node ? (e.action || \"itemloaded\") : \"itemchange\"\r\n });\r\n });\r\n }\r\n\r\n return object;\r\n },\r\n\r\n push: function() {\r\n var index = this.length,\r\n items = this.wrapAll(arguments),\r\n result;\r\n\r\n result = push.apply(this, items);\r\n\r\n this.trigger(CHANGE, {\r\n action: \"add\",\r\n index: index,\r\n items: items\r\n });\r\n\r\n return result;\r\n },\r\n\r\n slice: slice,\r\n\r\n sort: [].sort,\r\n\r\n join: join,\r\n\r\n pop: function() {\r\n var length = this.length, result = pop.apply(this);\r\n\r\n if (length) {\r\n this.trigger(CHANGE, {\r\n action: \"remove\",\r\n index: length - 1,\r\n items:[result]\r\n });\r\n }\r\n\r\n return result;\r\n },\r\n\r\n splice: function(index, howMany, item) {\r\n var items = this.wrapAll(slice.call(arguments, 2)),\r\n result, i, len;\r\n\r\n result = splice.apply(this, [index, howMany].concat(items));\r\n\r\n if (result.length) {\r\n this.trigger(CHANGE, {\r\n action: \"remove\",\r\n index: index,\r\n items: result\r\n });\r\n\r\n for (i = 0, len = result.length; i < len; i++) {\r\n if (result[i] && result[i].children) {\r\n result[i].unbind(CHANGE);\r\n }\r\n }\r\n }\r\n\r\n if (item) {\r\n this.trigger(CHANGE, {\r\n action: \"add\",\r\n index: index,\r\n items: items\r\n });\r\n }\r\n return result;\r\n },\r\n\r\n shift: function() {\r\n var length = this.length, result = shift.apply(this);\r\n\r\n if (length) {\r\n this.trigger(CHANGE, {\r\n action: \"remove\",\r\n index: 0,\r\n items:[result]\r\n });\r\n }\r\n\r\n return result;\r\n },\r\n\r\n unshift: function() {\r\n var items = this.wrapAll(arguments),\r\n result;\r\n\r\n result = unshift.apply(this, items);\r\n\r\n this.trigger(CHANGE, {\r\n action: \"add\",\r\n index: 0,\r\n items: items\r\n });\r\n\r\n return result;\r\n },\r\n\r\n indexOf: function(item) {\r\n var that = this,\r\n idx,\r\n length;\r\n\r\n for (idx = 0, length = that.length; idx < length; idx++) {\r\n if (that[idx] === item) {\r\n return idx;\r\n }\r\n }\r\n return -1;\r\n },\r\n\r\n forEach: function(callback) {\r\n var idx = 0,\r\n length = this.length;\r\n\r\n for (; idx < length; idx++) {\r\n callback(this[idx], idx, this);\r\n }\r\n },\r\n\r\n map: function(callback) {\r\n var idx = 0,\r\n result = [],\r\n length = this.length;\r\n\r\n for (; idx < length; idx++) {\r\n result[idx] = callback(this[idx], idx, this);\r\n }\r\n\r\n return result;\r\n },\r\n\r\n reduce: function(callback, initialValue) {\r\n var idx = 0,\r\n result,\r\n length = this.length;\r\n\r\n if (arguments.length == 2) {\r\n result = arguments[1];\r\n } else if (idx < length) {\r\n result = this[idx++];\r\n }\r\n\r\n for (; idx < length; idx++) {\r\n result = callback(result, this[idx], idx, this);\r\n }\r\n\r\n return result;\r\n },\r\n\r\n reduceRight: function(callback, initialValue) {\r\n var idx = this.length - 1,\r\n result;\r\n\r\n if (arguments.length == 2) {\r\n result = arguments[1];\r\n } else if (idx > 0) {\r\n result = this[idx--];\r\n }\r\n\r\n for (; idx >= 0; idx--) {\r\n result = callback(result, this[idx], idx, this);\r\n }\r\n\r\n return result;\r\n },\r\n\r\n filter: function(callback) {\r\n var idx = 0,\r\n result = [],\r\n item,\r\n length = this.length;\r\n\r\n for (; idx < length; idx++) {\r\n item = this[idx];\r\n if (callback(item, idx, this)) {\r\n result[result.length] = item;\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n find: function(callback) {\r\n var idx = 0,\r\n item,\r\n length = this.length;\r\n\r\n for (; idx < length; idx++) {\r\n item = this[idx];\r\n if (callback(item, idx, this)) {\r\n return item;\r\n }\r\n }\r\n },\r\n\r\n every: function(callback) {\r\n var idx = 0,\r\n item,\r\n length = this.length;\r\n\r\n for (; idx < length; idx++) {\r\n item = this[idx];\r\n if (!callback(item, idx, this)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n some: function(callback) {\r\n var idx = 0,\r\n item,\r\n length = this.length;\r\n\r\n for (; idx < length; idx++) {\r\n item = this[idx];\r\n if (callback(item, idx, this)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n // non-standard collection methods\r\n remove: function(item) {\r\n var idx = this.indexOf(item);\r\n\r\n if (idx !== -1) {\r\n this.splice(idx, 1);\r\n }\r\n },\r\n\r\n empty: function() {\r\n this.splice(0, this.length);\r\n }\r\n });\r\n\r\n var LazyObservableArray = ObservableArray.extend({\r\n init: function(data, type) {\r\n Observable.fn.init.call(this);\r\n\r\n this.type = type || ObservableObject;\r\n\r\n for (var idx = 0; idx < data.length; idx++) {\r\n this[idx] = data[idx];\r\n }\r\n\r\n this.length = idx;\r\n this._parent = proxy(function() { return this; }, this);\r\n },\r\n at: function(index) {\r\n var item = this[index];\r\n\r\n if (!(item instanceof this.type)) {\r\n item = this[index] = this.wrap(item, this._parent);\r\n } else {\r\n item.parent = this._parent;\r\n }\r\n\r\n return item;\r\n }\r\n });\r\n\r\n function eventHandler(context, type, field, prefix) {\r\n return function(e) {\r\n var event = {}, key;\r\n\r\n for (key in e) {\r\n event[key] = e[key];\r\n }\r\n\r\n if (prefix) {\r\n event.field = field + \".\" + e.field;\r\n } else {\r\n event.field = field;\r\n }\r\n\r\n if (type == CHANGE && context._notifyChange) {\r\n context._notifyChange(event);\r\n }\r\n\r\n context.trigger(type, event);\r\n };\r\n }\r\n\r\n var ObservableObject = Observable.extend({\r\n init: function(value) {\r\n var that = this,\r\n member,\r\n field,\r\n parent = function() {\r\n return that;\r\n };\r\n\r\n Observable.fn.init.call(this);\r\n\r\n for (field in value) {\r\n member = value[field];\r\n\r\n if (typeof member === \"object\" && member && !member.getTime && field.charAt(0) != \"_\") {\r\n member = that.wrap(member, field, parent);\r\n }\r\n\r\n that[field] = member;\r\n }\r\n\r\n that.uid = kendo.guid();\r\n },\r\n\r\n shouldSerialize: function(field) {\r\n return this.hasOwnProperty(field) && field !== \"_events\" && typeof this[field] !== FUNCTION && field !== \"uid\";\r\n },\r\n\r\n forEach: function(f) {\r\n for (var i in this) {\r\n if (this.shouldSerialize(i)) {\r\n f(this[i], i);\r\n }\r\n }\r\n },\r\n\r\n toJSON: function() {\r\n var result = {}, value, field;\r\n\r\n for (field in this) {\r\n if (this.shouldSerialize(field)) {\r\n value = this[field];\r\n\r\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\r\n value = value.toJSON();\r\n }\r\n\r\n result[field] = value;\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n get: function(field) {\r\n var that = this, result;\r\n\r\n that.trigger(GET, { field: field });\r\n\r\n if (field === \"this\") {\r\n result = that;\r\n } else {\r\n result = kendo.getter(field, true)(that);\r\n }\r\n\r\n return result;\r\n },\r\n\r\n _set: function(field, value) {\r\n var that = this;\r\n var composite = field.indexOf(\".\") >= 0;\r\n\r\n if (composite) {\r\n var paths = field.split(\".\"),\r\n path = \"\";\r\n\r\n while (paths.length > 1) {\r\n path += paths.shift();\r\n var obj = kendo.getter(path, true)(that);\r\n if (obj instanceof ObservableObject) {\r\n obj.set(paths.join(\".\"), value);\r\n return composite;\r\n }\r\n path += \".\";\r\n }\r\n }\r\n\r\n kendo.setter(field)(that, value);\r\n\r\n return composite;\r\n },\r\n\r\n set: function(field, value) {\r\n var that = this,\r\n composite = field.indexOf(\".\") >= 0,\r\n current = kendo.getter(field, true)(that);\r\n\r\n if (current !== value) {\r\n\r\n if (!that.trigger(\"set\", { field: field, value: value })) {\r\n if (!composite) {\r\n value = that.wrap(value, field, function() { return that; });\r\n }\r\n if (!that._set(field, value) || field.indexOf(\"(\") >= 0 || field.indexOf(\"[\") >= 0) {\r\n that.trigger(CHANGE, { field: field });\r\n }\r\n }\r\n }\r\n },\r\n\r\n parent: noop,\r\n\r\n wrap: function(object, field, parent) {\r\n var that = this,\r\n type = toString.call(object);\r\n\r\n if (object != null && (type === \"[object Object]\" || type === \"[object Array]\")) {\r\n var isObservableArray = object instanceof ObservableArray;\r\n var isDataSource = object instanceof DataSource;\r\n\r\n if (type === \"[object Object]\" && !isDataSource && !isObservableArray) {\r\n if (!(object instanceof ObservableObject)) {\r\n object = new ObservableObject(object);\r\n }\r\n\r\n if (object.parent() != parent()) {\r\n object.bind(GET, eventHandler(that, GET, field, true));\r\n object.bind(CHANGE, eventHandler(that, CHANGE, field, true));\r\n }\r\n } else if (type === \"[object Array]\" || isObservableArray || isDataSource) {\r\n if (!isObservableArray && !isDataSource) {\r\n object = new ObservableArray(object);\r\n }\r\n\r\n if (object.parent() != parent()) {\r\n object.bind(CHANGE, eventHandler(that, CHANGE, field, false));\r\n }\r\n }\r\n\r\n object.parent = parent;\r\n }\r\n\r\n return object;\r\n }\r\n });\r\n\r\n function equal(x, y) {\r\n if (x === y) {\r\n return true;\r\n }\r\n\r\n var xtype = $.type(x), ytype = $.type(y), field;\r\n\r\n if (xtype !== ytype) {\r\n return false;\r\n }\r\n\r\n if (xtype === \"date\") {\r\n return x.getTime() === y.getTime();\r\n }\r\n\r\n if (xtype !== \"object\" && xtype !== \"array\") {\r\n return false;\r\n }\r\n\r\n for (field in x) {\r\n if (!equal(x[field], y[field])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n var parsers = {\r\n \"number\": function(value) {\r\n return kendo.parseFloat(value);\r\n },\r\n\r\n \"date\": function(value) {\r\n return kendo.parseDate(value);\r\n },\r\n\r\n \"boolean\": function(value) {\r\n if (typeof value === STRING) {\r\n return value.toLowerCase() === \"true\";\r\n }\r\n return value != null ? !!value : value;\r\n },\r\n\r\n \"string\": function(value) {\r\n return value != null ? (value + \"\") : value;\r\n },\r\n\r\n \"default\": function(value) {\r\n return value;\r\n }\r\n };\r\n\r\n var defaultValues = {\r\n \"string\": \"\",\r\n \"number\": 0,\r\n \"date\": new Date(),\r\n \"boolean\": false,\r\n \"default\": \"\"\r\n };\r\n\r\n function getFieldByName(obj, name) {\r\n var field,\r\n fieldName;\r\n\r\n for (fieldName in obj) {\r\n field = obj[fieldName];\r\n if (isPlainObject(field) && field.field && field.field === name) {\r\n return field;\r\n } else if (field === name) {\r\n return field;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n var Model = ObservableObject.extend({\r\n init: function(data) {\r\n var that = this;\r\n\r\n if (!data || $.isEmptyObject(data)) {\r\n data = $.extend({}, that.defaults, data);\r\n\r\n if (that._initializers) {\r\n for (var idx = 0; idx < that._initializers.length; idx++) {\r\n var name = that._initializers[idx];\r\n data[name] = that.defaults[name]();\r\n }\r\n }\r\n }\r\n\r\n ObservableObject.fn.init.call(that, data);\r\n\r\n that.dirty = false;\r\n\r\n if (that.idField) {\r\n that.id = that.get(that.idField);\r\n\r\n if (that.id === undefined) {\r\n that.id = that._defaultId;\r\n }\r\n }\r\n },\r\n\r\n shouldSerialize: function(field) {\r\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== \"uid\" && !(this.idField !== \"id\" && field === \"id\") && field !== \"dirty\" && field !== \"_accessors\";\r\n },\r\n\r\n _parse: function(field, value) {\r\n var that = this,\r\n fieldName = field,\r\n fields = (that.fields || {}),\r\n parse;\r\n\r\n field = fields[field];\r\n if (!field) {\r\n field = getFieldByName(fields, fieldName);\r\n }\r\n if (field) {\r\n parse = field.parse;\r\n if (!parse && field.type) {\r\n parse = parsers[field.type.toLowerCase()];\r\n }\r\n }\r\n\r\n return parse ? parse(value) : value;\r\n },\r\n\r\n _notifyChange: function(e) {\r\n var action = e.action;\r\n\r\n if (action == \"add\" || action == \"remove\") {\r\n this.dirty = true;\r\n }\r\n },\r\n\r\n editable: function(field) {\r\n field = (this.fields || {})[field];\r\n return field ? field.editable !== false : true;\r\n },\r\n\r\n set: function(field, value, initiator) {\r\n var that = this;\r\n\r\n if (that.editable(field)) {\r\n value = that._parse(field, value);\r\n\r\n if (!equal(value, that.get(field))) {\r\n that.dirty = true;\r\n ObservableObject.fn.set.call(that, field, value, initiator);\r\n }\r\n }\r\n },\r\n\r\n accept: function(data) {\r\n var that = this,\r\n parent = function() { return that; },\r\n field;\r\n\r\n for (field in data) {\r\n var value = data[field];\r\n\r\n if (field.charAt(0) != \"_\") {\r\n value = that.wrap(data[field], field, parent);\r\n }\r\n\r\n that._set(field, value);\r\n }\r\n\r\n if (that.idField) {\r\n that.id = that.get(that.idField);\r\n }\r\n\r\n that.dirty = false;\r\n },\r\n\r\n isNew: function() {\r\n return this.id === this._defaultId;\r\n }\r\n });\r\n\r\n Model.define = function(base, options) {\r\n if (options === undefined) {\r\n options = base;\r\n base = Model;\r\n }\r\n\r\n var model,\r\n proto = extend({ defaults: {} }, options),\r\n name,\r\n field,\r\n type,\r\n value,\r\n idx,\r\n length,\r\n fields = {},\r\n originalName,\r\n id = proto.id,\r\n functionFields = [];\r\n\r\n if (id) {\r\n proto.idField = id;\r\n }\r\n\r\n if (proto.id) {\r\n delete proto.id;\r\n }\r\n\r\n if (id) {\r\n proto.defaults[id] = proto._defaultId = \"\";\r\n }\r\n\r\n if (toString.call(proto.fields) === \"[object Array]\") {\r\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\r\n field = proto.fields[idx];\r\n if (typeof field === STRING) {\r\n fields[field] = {};\r\n } else if (field.field) {\r\n fields[field.field] = field;\r\n }\r\n }\r\n proto.fields = fields;\r\n }\r\n\r\n for (name in proto.fields) {\r\n field = proto.fields[name];\r\n type = field.type || \"default\";\r\n value = null;\r\n originalName = name;\r\n\r\n name = typeof (field.field) === STRING ? field.field : name;\r\n\r\n if (!field.nullable) {\r\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\r\n\r\n if (typeof value === \"function\") {\r\n functionFields.push(name);\r\n }\r\n }\r\n\r\n if (options.id === name) {\r\n proto._defaultId = value;\r\n }\r\n\r\n proto.defaults[originalName !== name ? originalName : name] = value;\r\n\r\n field.parse = field.parse || parsers[type];\r\n }\r\n\r\n if (functionFields.length > 0) {\r\n proto._initializers = functionFields;\r\n }\r\n\r\n model = base.extend(proto);\r\n model.define = function(options) {\r\n return Model.define(model, options);\r\n };\r\n\r\n if (proto.fields) {\r\n model.fields = proto.fields;\r\n model.idField = proto.idField;\r\n }\r\n\r\n return model;\r\n };\r\n\r\n var Comparer = {\r\n selector: function(field) {\r\n return isFunction(field) ? field : getter(field);\r\n },\r\n\r\n compare: function(field) {\r\n var selector = this.selector(field);\r\n return function (a, b) {\r\n a = selector(a);\r\n b = selector(b);\r\n\r\n if (a == null && b == null) {\r\n return 0;\r\n }\r\n\r\n if (a == null) {\r\n return -1;\r\n }\r\n\r\n if (b == null) {\r\n return 1;\r\n }\r\n\r\n if (a.localeCompare) {\r\n return a.localeCompare(b);\r\n }\r\n\r\n return a > b ? 1 : (a < b ? -1 : 0);\r\n };\r\n },\r\n\r\n create: function(sort) {\r\n var compare = sort.compare || this.compare(sort.field);\r\n\r\n if (sort.dir == \"desc\") {\r\n return function(a, b) {\r\n return compare(b, a, true);\r\n };\r\n }\r\n\r\n return compare;\r\n },\r\n\r\n combine: function(comparers) {\r\n return function(a, b) {\r\n var result = comparers[0](a, b),\r\n idx,\r\n length;\r\n\r\n for (idx = 1, length = comparers.length; idx < length; idx ++) {\r\n result = result || comparers[idx](a, b);\r\n }\r\n\r\n return result;\r\n };\r\n }\r\n };\r\n\r\n var StableComparer = extend({}, Comparer, {\r\n asc: function(field) {\r\n var selector = this.selector(field);\r\n return function (a, b) {\r\n var valueA = selector(a);\r\n var valueB = selector(b);\r\n\r\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\r\n valueA = valueA.getTime();\r\n valueB = valueB.getTime();\r\n }\r\n\r\n if (valueA === valueB) {\r\n return a.__position - b.__position;\r\n }\r\n\r\n if (valueA == null) {\r\n return -1;\r\n }\r\n\r\n if (valueB == null) {\r\n return 1;\r\n }\r\n\r\n if (valueA.localeCompare) {\r\n return valueA.localeCompare(valueB);\r\n }\r\n\r\n return valueA > valueB ? 1 : -1;\r\n };\r\n },\r\n\r\n desc: function(field) {\r\n var selector = this.selector(field);\r\n return function (a, b) {\r\n var valueA = selector(a);\r\n var valueB = selector(b);\r\n\r\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\r\n valueA = valueA.getTime();\r\n valueB = valueB.getTime();\r\n }\r\n\r\n if (valueA === valueB) {\r\n return a.__position - b.__position;\r\n }\r\n\r\n if (valueA == null) {\r\n return 1;\r\n }\r\n\r\n if (valueB == null) {\r\n return -1;\r\n }\r\n\r\n if (valueB.localeCompare) {\r\n return valueB.localeCompare(valueA);\r\n }\r\n\r\n return valueA < valueB ? 1 : -1;\r\n };\r\n },\r\n create: function(sort) {\r\n return this[sort.dir](sort.field);\r\n }\r\n });\r\n\r\n map = function (array, callback) {\r\n var idx, length = array.length, result = new Array(length);\r\n\r\n for (idx = 0; idx < length; idx++) {\r\n result[idx] = callback(array[idx], idx, array);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n var operators = (function(){\r\n\r\n function quote(value) {\r\n return value.replace(quoteRegExp, \"\\\\\").replace(newLineRegExp, \"\");\r\n }\r\n\r\n function operator(op, a, b, ignore) {\r\n var date;\r\n\r\n if (b != null) {\r\n if (typeof b === STRING) {\r\n b = quote(b);\r\n date = dateRegExp.exec(b);\r\n if (date) {\r\n b = new Date(+date[1]);\r\n } else if (ignore) {\r\n b = \"'\" + b.toLowerCase() + \"'\";\r\n a = \"(\" + a + \" || '').toLowerCase()\";\r\n } else {\r\n b = \"'\" + b + \"'\";\r\n }\r\n }\r\n\r\n if (b.getTime) {\r\n //b looks like a Date\r\n a = \"(\" + a + \"?\" + a + \".getTime():\" + a + \")\";\r\n b = b.getTime();\r\n }\r\n }\r\n\r\n return a + \" \" + op + \" \" + b;\r\n }\r\n\r\n return {\r\n quote: function(value) {\r\n if (value && value.getTime) {\r\n return \"new Date(\" + value.getTime() + \")\";\r\n }\r\n\r\n if (typeof value == \"string\") {\r\n return \"'\" + quote(value) + \"'\";\r\n }\r\n\r\n return \"\" + value;\r\n },\r\n eq: function(a, b, ignore) {\r\n return operator(\"==\", a, b, ignore);\r\n },\r\n neq: function(a, b, ignore) {\r\n return operator(\"!=\", a, b, ignore);\r\n },\r\n gt: function(a, b, ignore) {\r\n return operator(\">\", a, b, ignore);\r\n },\r\n gte: function(a, b, ignore) {\r\n return operator(\">=\", a, b, ignore);\r\n },\r\n lt: function(a, b, ignore) {\r\n return operator(\"<\", a, b, ignore);\r\n },\r\n lte: function(a, b, ignore) {\r\n return operator(\"<=\", a, b, ignore);\r\n },\r\n startswith: function(a, b, ignore) {\r\n if (ignore) {\r\n a = \"(\" + a + \" || '').toLowerCase()\";\r\n if (b) {\r\n b = b.toLowerCase();\r\n }\r\n }\r\n\r\n if (b) {\r\n b = quote(b);\r\n }\r\n\r\n return a + \".lastIndexOf('\" + b + \"', 0) == 0\";\r\n },\r\n endswith: function(a, b, ignore) {\r\n if (ignore) {\r\n a = \"(\" + a + \" || '').toLowerCase()\";\r\n if (b) {\r\n b = b.toLowerCase();\r\n }\r\n }\r\n\r\n if (b) {\r\n b = quote(b);\r\n }\r\n\r\n return a + \".indexOf('\" + b + \"', \" + a + \".length - \" + (b || \"\").length + \") >= 0\";\r\n },\r\n contains: function(a, b, ignore) {\r\n if (ignore) {\r\n a = \"(\" + a + \" || '').toLowerCase()\";\r\n if (b) {\r\n b = b.toLowerCase();\r\n }\r\n }\r\n\r\n if (b) {\r\n b = quote(b);\r\n }\r\n\r\n return a + \".indexOf('\" + b + \"') >= 0\";\r\n },\r\n doesnotcontain: function(a, b, ignore) {\r\n if (ignore) {\r\n a = \"(\" + a + \" || '').toLowerCase()\";\r\n if (b) {\r\n b = b.toLowerCase();\r\n }\r\n }\r\n\r\n if (b) {\r\n b = quote(b);\r\n }\r\n\r\n return a + \".indexOf('\" + b + \"') == -1\";\r\n }\r\n };\r\n })();\r\n\r\n function Query(data) {\r\n this.data = data || [];\r\n }\r\n\r\n Query.filterExpr = function(expression) {\r\n var expressions = [],\r\n logic = { and: \" && \", or: \" || \" },\r\n idx,\r\n length,\r\n filter,\r\n expr,\r\n fieldFunctions = [],\r\n operatorFunctions = [],\r\n field,\r\n operator,\r\n filters = expression.filters;\r\n\r\n for (idx = 0, length = filters.length; idx < length; idx++) {\r\n filter = filters[idx];\r\n field = filter.field;\r\n operator = filter.operator;\r\n\r\n if (filter.filters) {\r\n expr = Query.filterExpr(filter);\r\n //Nested function fields or operators - update their index e.g. __o[0] -> __o[1]\r\n filter = expr.expression\r\n .replace(/__o\\[(\\d+)\\]/g, function(match, index) {\r\n index = +index;\r\n return \"__o[\" + (operatorFunctions.length + index) + \"]\";\r\n })\r\n .replace(/__f\\[(\\d+)\\]/g, function(match, index) {\r\n index = +index;\r\n return \"__f[\" + (fieldFunctions.length + index) + \"]\";\r\n });\r\n\r\n operatorFunctions.push.apply(operatorFunctions, expr.operators);\r\n fieldFunctions.push.apply(fieldFunctions, expr.fields);\r\n } else {\r\n if (typeof field === FUNCTION) {\r\n expr = \"__f[\" + fieldFunctions.length +\"](d)\";\r\n fieldFunctions.push(field);\r\n } else {\r\n expr = kendo.expr(field);\r\n }\r\n\r\n if (typeof operator === FUNCTION) {\r\n filter = \"__o[\" + operatorFunctions.length + \"](\" + expr + \", \" + operators.quote(filter.value) + \")\";\r\n operatorFunctions.push(operator);\r\n } else {\r\n filter = operators[(operator || \"eq\").toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined? filter.ignoreCase : true);\r\n }\r\n }\r\n\r\n expressions.push(filter);\r\n }\r\n\r\n return { expression: \"(\" + expressions.join(logic[expression.logic]) + \")\", fields: fieldFunctions, operators: operatorFunctions };\r\n };\r\n\r\n function normalizeSort(field, dir) {\r\n if (field) {\r\n var descriptor = typeof field === STRING ? { field: field, dir: dir } : field,\r\n descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined ? [descriptor] : []);\r\n\r\n return grep(descriptors, function(d) { return !!d.dir; });\r\n }\r\n }\r\n\r\n var operatorMap = {\r\n \"==\": \"eq\",\r\n equals: \"eq\",\r\n isequalto: \"eq\",\r\n equalto: \"eq\",\r\n equal: \"eq\",\r\n \"!=\": \"neq\",\r\n ne: \"neq\",\r\n notequals: \"neq\",\r\n isnotequalto: \"neq\",\r\n notequalto: \"neq\",\r\n notequal: \"neq\",\r\n \"<\": \"lt\",\r\n islessthan: \"lt\",\r\n lessthan: \"lt\",\r\n less: \"lt\",\r\n \"<=\": \"lte\",\r\n le: \"lte\",\r\n islessthanorequalto: \"lte\",\r\n lessthanequal: \"lte\",\r\n \">\": \"gt\",\r\n isgreaterthan: \"gt\",\r\n greaterthan: \"gt\",\r\n greater: \"gt\",\r\n \">=\": \"gte\",\r\n isgreaterthanorequalto: \"gte\",\r\n greaterthanequal: \"gte\",\r\n ge: \"gte\",\r\n notsubstringof: \"doesnotcontain\"\r\n };\r\n\r\n function normalizeOperator(expression) {\r\n var idx,\r\n length,\r\n filter,\r\n operator,\r\n filters = expression.filters;\r\n\r\n if (filters) {\r\n for (idx = 0, length = filters.length; idx < length; idx++) {\r\n filter = filters[idx];\r\n operator = filter.operator;\r\n\r\n if (operator && typeof operator === STRING) {\r\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\r\n }\r\n\r\n normalizeOperator(filter);\r\n }\r\n }\r\n }\r\n\r\n function normalizeFilter(expression) {\r\n if (expression && !isEmptyObject(expression)) {\r\n if (isArray(expression) || !expression.filters) {\r\n expression = {\r\n logic: \"and\",\r\n filters: isArray(expression) ? expression : [expression]\r\n };\r\n }\r\n\r\n normalizeOperator(expression);\r\n\r\n return expression;\r\n }\r\n }\r\n\r\n Query.normalizeFilter = normalizeFilter;\r\n\r\n function normalizeAggregate(expressions) {\r\n return isArray(expressions) ? expressions : [expressions];\r\n }\r\n\r\n function normalizeGroup(field, dir) {\r\n var descriptor = typeof field === STRING ? { field: field, dir: dir } : field,\r\n descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined ? [descriptor] : []);\r\n\r\n return map(descriptors, function(d) { return { field: d.field, dir: d.dir || \"asc\", aggregates: d.aggregates }; });\r\n }\r\n\r\n Query.prototype = {\r\n toArray: function () {\r\n return this.data;\r\n },\r\n range: function(index, count) {\r\n return new Query(this.data.slice(index, index + count));\r\n },\r\n skip: function (count) {\r\n return new Query(this.data.slice(count));\r\n },\r\n take: function (count) {\r\n return new Query(this.data.slice(0, count));\r\n },\r\n select: function (selector) {\r\n return new Query(map(this.data, selector));\r\n },\r\n order: function(selector, dir) {\r\n var sort = { dir: dir };\r\n\r\n if (selector) {\r\n if (selector.compare) {\r\n sort.compare = selector.compare;\r\n } else {\r\n sort.field = selector;\r\n }\r\n }\r\n\r\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\r\n },\r\n orderBy: function(selector) {\r\n return this.order(selector, \"asc\");\r\n },\r\n orderByDescending: function(selector) {\r\n return this.order(selector, \"desc\");\r\n },\r\n sort: function(field, dir, comparer) {\r\n var idx,\r\n length,\r\n descriptors = normalizeSort(field, dir),\r\n comparers = [];\r\n\r\n comparer = comparer || Comparer;\r\n\r\n if (descriptors.length) {\r\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\r\n comparers.push(comparer.create(descriptors[idx]));\r\n }\r\n\r\n return this.orderBy({ compare: comparer.combine(comparers) });\r\n }\r\n\r\n return this;\r\n },\r\n\r\n filter: function(expressions) {\r\n var idx,\r\n current,\r\n length,\r\n compiled,\r\n predicate,\r\n data = this.data,\r\n fields,\r\n operators,\r\n result = [],\r\n filter;\r\n\r\n expressions = normalizeFilter(expressions);\r\n\r\n if (!expressions || expressions.filters.length === 0) {\r\n return this;\r\n }\r\n\r\n compiled = Query.filterExpr(expressions);\r\n fields = compiled.fields;\r\n operators = compiled.operators;\r\n\r\n predicate = filter = new Function(\"d, __f, __o\", \"return \" + compiled.expression);\r\n\r\n if (fields.length || operators.length) {\r\n filter = function(d) {\r\n return predicate(d, fields, operators);\r\n };\r\n }\r\n\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n current = data[idx];\r\n\r\n if (filter(current)) {\r\n result.push(current);\r\n }\r\n }\r\n\r\n return new Query(result);\r\n },\r\n\r\n group: function(descriptors, allData) {\r\n descriptors = normalizeGroup(descriptors || []);\r\n allData = allData || this.data;\r\n\r\n var that = this,\r\n result = new Query(that.data),\r\n descriptor;\r\n\r\n if (descriptors.length > 0) {\r\n descriptor = descriptors[0];\r\n result = result.groupBy(descriptor).select(function(group) {\r\n var data = new Query(allData).filter([ { field: group.field, operator: \"eq\", value: group.value, ignoreCase: false } ]);\r\n return {\r\n field: group.field,\r\n value: group.value,\r\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\r\n hasSubgroups: descriptors.length > 1,\r\n aggregates: data.aggregate(descriptor.aggregates)\r\n };\r\n });\r\n }\r\n return result;\r\n },\r\n\r\n groupBy: function(descriptor) {\r\n if (isEmptyObject(descriptor) || !this.data.length) {\r\n return new Query([]);\r\n }\r\n\r\n var field = descriptor.field,\r\n sorted = this._sortForGrouping(field, descriptor.dir || \"asc\"),\r\n accessor = kendo.accessor(field),\r\n item,\r\n groupValue = accessor.get(sorted[0], field),\r\n group = {\r\n field: field,\r\n value: groupValue,\r\n items: []\r\n },\r\n currentValue,\r\n idx,\r\n len,\r\n result = [group];\r\n\r\n for(idx = 0, len = sorted.length; idx < len; idx++) {\r\n item = sorted[idx];\r\n currentValue = accessor.get(item, field);\r\n if(!groupValueComparer(groupValue, currentValue)) {\r\n groupValue = currentValue;\r\n group = {\r\n field: field,\r\n value: groupValue,\r\n items: []\r\n };\r\n result.push(group);\r\n }\r\n group.items.push(item);\r\n }\r\n return new Query(result);\r\n },\r\n\r\n _sortForGrouping: function(field, dir) {\r\n var idx, length,\r\n data = this.data;\r\n\r\n if (!stableSort) {\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n data[idx].__position = idx;\r\n }\r\n\r\n data = new Query(data).sort(field, dir, StableComparer).toArray();\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n delete data[idx].__position;\r\n }\r\n return data;\r\n }\r\n return this.sort(field, dir).toArray();\r\n },\r\n\r\n aggregate: function (aggregates) {\r\n var idx,\r\n len,\r\n result = {},\r\n state = {};\r\n\r\n if (aggregates && aggregates.length) {\r\n for(idx = 0, len = this.data.length; idx < len; idx++) {\r\n calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\r\n }\r\n }\r\n return result;\r\n }\r\n };\r\n\r\n function groupValueComparer(a, b) {\r\n if (a && a.getTime && b && b.getTime) {\r\n return a.getTime() === b.getTime();\r\n }\r\n return a === b;\r\n }\r\n\r\n function calculateAggregate(accumulator, aggregates, item, index, length, state) {\r\n aggregates = aggregates || [];\r\n var idx,\r\n aggr,\r\n functionName,\r\n len = aggregates.length;\r\n\r\n for (idx = 0; idx < len; idx++) {\r\n aggr = aggregates[idx];\r\n functionName = aggr.aggregate;\r\n var field = aggr.field;\r\n accumulator[field] = accumulator[field] || {};\r\n state[field] = state[field] || {};\r\n state[field][functionName] = state[field][functionName] || {};\r\n accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\r\n }\r\n }\r\n\r\n var functions = {\r\n sum: function(accumulator, item, accessor) {\r\n var value = accessor.get(item);\r\n\r\n if (!isNumber(accumulator)) {\r\n accumulator = value;\r\n } else if (isNumber(value)) {\r\n accumulator += value;\r\n }\r\n\r\n return accumulator;\r\n },\r\n count: function(accumulator) {\r\n return (accumulator || 0) + 1;\r\n },\r\n average: function(accumulator, item, accessor, index, length, state) {\r\n var value = accessor.get(item);\r\n\r\n if (state.count === undefined) {\r\n state.count = 0;\r\n }\r\n\r\n if (!isNumber(accumulator)) {\r\n accumulator = value;\r\n } else if (isNumber(value)) {\r\n accumulator += value;\r\n }\r\n\r\n if (isNumber(value)) {\r\n state.count++;\r\n }\r\n\r\n if(index == length - 1 && isNumber(accumulator)) {\r\n accumulator = accumulator / state.count;\r\n }\r\n return accumulator;\r\n },\r\n max: function(accumulator, item, accessor) {\r\n var value = accessor.get(item);\r\n\r\n if (!isNumber(accumulator) && !isDate(accumulator)) {\r\n accumulator = value;\r\n }\r\n\r\n if(accumulator < value && (isNumber(value) || isDate(value))) {\r\n accumulator = value;\r\n }\r\n return accumulator;\r\n },\r\n min: function(accumulator, item, accessor) {\r\n var value = accessor.get(item);\r\n\r\n if (!isNumber(accumulator) && !isDate(accumulator)) {\r\n accumulator = value;\r\n }\r\n\r\n if(accumulator > value && (isNumber(value) || isDate(value))) {\r\n accumulator = value;\r\n }\r\n return accumulator;\r\n }\r\n };\r\n\r\n function isNumber(val) {\r\n return typeof val === \"number\" && !isNaN(val);\r\n }\r\n\r\n function isDate(val) {\r\n return val && val.getTime;\r\n }\r\n\r\n function toJSON(array) {\r\n var idx, length = array.length, result = new Array(length);\r\n\r\n for (idx = 0; idx < length; idx++) {\r\n result[idx] = array[idx].toJSON();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n Query.process = function(data, options) {\r\n options = options || {};\r\n\r\n var query = new Query(data),\r\n group = options.group,\r\n sort = normalizeGroup(group || []).concat(normalizeSort(options.sort || [])),\r\n total,\r\n filterCallback = options.filterCallback,\r\n filter = options.filter,\r\n skip = options.skip,\r\n take = options.take;\r\n\r\n if (filter) {\r\n query = query.filter(filter);\r\n\r\n if (filterCallback) {\r\n query = filterCallback(query);\r\n }\r\n\r\n total = query.toArray().length;\r\n }\r\n\r\n if (sort) {\r\n query = query.sort(sort);\r\n\r\n if (group) {\r\n data = query.toArray();\r\n }\r\n }\r\n\r\n if (skip !== undefined && take !== undefined) {\r\n query = query.range(skip, take);\r\n }\r\n\r\n if (group) {\r\n query = query.group(group, data);\r\n }\r\n\r\n return {\r\n total: total,\r\n data: query.toArray()\r\n };\r\n };\r\n\r\n var LocalTransport = Class.extend({\r\n init: function(options) {\r\n this.data = options.data;\r\n },\r\n\r\n read: function(options) {\r\n options.success(this.data);\r\n },\r\n update: function(options) {\r\n options.success(options.data);\r\n },\r\n create: function(options) {\r\n options.success(options.data);\r\n },\r\n destroy: function(options) {\r\n options.success(options.data);\r\n }\r\n });\r\n\r\n var RemoteTransport = Class.extend( {\r\n init: function(options) {\r\n var that = this, parameterMap;\r\n\r\n options = that.options = extend({}, that.options, options);\r\n\r\n each(crud, function(index, type) {\r\n if (typeof options[type] === STRING) {\r\n options[type] = {\r\n url: options[type]\r\n };\r\n }\r\n });\r\n\r\n that.cache = options.cache? Cache.create(options.cache) : {\r\n find: noop,\r\n add: noop\r\n };\r\n\r\n parameterMap = options.parameterMap;\r\n\r\n if (isFunction(options.push)) {\r\n that.push = options.push;\r\n }\r\n\r\n if (!that.push) {\r\n that.push = identity;\r\n }\r\n\r\n that.parameterMap = isFunction(parameterMap) ? parameterMap : function(options) {\r\n var result = {};\r\n\r\n each(options, function(option, value) {\r\n if (option in parameterMap) {\r\n option = parameterMap[option];\r\n if (isPlainObject(option)) {\r\n value = option.value(value);\r\n option = option.key;\r\n }\r\n }\r\n\r\n result[option] = value;\r\n });\r\n\r\n return result;\r\n };\r\n },\r\n\r\n options: {\r\n parameterMap: identity\r\n },\r\n\r\n create: function(options) {\r\n return ajax(this.setup(options, CREATE));\r\n },\r\n\r\n read: function(options) {\r\n var that = this,\r\n success,\r\n error,\r\n result,\r\n cache = that.cache;\r\n\r\n options = that.setup(options, READ);\r\n\r\n success = options.success || noop;\r\n error = options.error || noop;\r\n\r\n result = cache.find(options.data);\r\n\r\n if(result !== undefined) {\r\n success(result);\r\n } else {\r\n options.success = function(result) {\r\n cache.add(options.data, result);\r\n\r\n success(result);\r\n };\r\n\r\n $.ajax(options);\r\n }\r\n },\r\n\r\n update: function(options) {\r\n return ajax(this.setup(options, UPDATE));\r\n },\r\n\r\n destroy: function(options) {\r\n return ajax(this.setup(options, DESTROY));\r\n },\r\n\r\n setup: function(options, type) {\r\n options = options || {};\r\n\r\n var that = this,\r\n parameters,\r\n operation = that.options[type],\r\n data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\r\n\r\n options = extend(true, {}, operation, options);\r\n parameters = extend(true, {}, data, options.data);\r\n\r\n options.data = that.parameterMap(parameters, type);\r\n\r\n if (isFunction(options.url)) {\r\n options.url = options.url(parameters);\r\n }\r\n\r\n return options;\r\n }\r\n });\r\n\r\n var Cache = Class.extend({\r\n init: function() {\r\n this._store = {};\r\n },\r\n add: function(key, data) {\r\n if(key !== undefined) {\r\n this._store[stringify(key)] = data;\r\n }\r\n },\r\n find: function(key) {\r\n return this._store[stringify(key)];\r\n },\r\n clear: function() {\r\n this._store = {};\r\n },\r\n remove: function(key) {\r\n delete this._store[stringify(key)];\r\n }\r\n });\r\n\r\n Cache.create = function(options) {\r\n var store = {\r\n \"inmemory\": function() { return new Cache(); }\r\n };\r\n\r\n if (isPlainObject(options) && isFunction(options.find)) {\r\n return options;\r\n }\r\n\r\n if (options === true) {\r\n return new Cache();\r\n }\r\n\r\n return store[options]();\r\n };\r\n\r\n function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\r\n var record,\r\n getter,\r\n originalName,\r\n idx,\r\n length;\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n record = data[idx];\r\n for (getter in getters) {\r\n originalName = fieldNames[getter];\r\n\r\n if (originalName && originalName !== getter) {\r\n record[originalName] = getters[getter](record);\r\n delete record[getter];\r\n }\r\n }\r\n }\r\n }\r\n\r\n function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\r\n var record,\r\n getter,\r\n originalName,\r\n idx,\r\n length;\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n record = data[idx];\r\n for (getter in getters) {\r\n record[getter] = modelInstance._parse(getter, getters[getter](record));\r\n\r\n originalName = fieldNames[getter];\r\n if (originalName && originalName !== getter) {\r\n delete record[originalName];\r\n }\r\n }\r\n }\r\n }\r\n\r\n function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\r\n var record,\r\n idx,\r\n fieldName,\r\n length;\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n record = data[idx];\r\n\r\n fieldName = originalFieldNames[record.field];\r\n if (fieldName && fieldName != record.field) {\r\n record.field = fieldName;\r\n }\r\n\r\n record.value = modelInstance._parse(record.field, record.value);\r\n\r\n if (record.hasSubgroups) {\r\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\r\n } else {\r\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\r\n }\r\n }\r\n }\r\n\r\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\r\n return function(data) {\r\n data = originalFunction(data);\r\n\r\n if (data && !isEmptyObject(getters)) {\r\n if (toString.call(data) !== \"[object Array]\" && !(data instanceof ObservableArray)) {\r\n data = [data];\r\n }\r\n\r\n converter(data, getters, new model(), originalFieldNames, fieldNames);\r\n }\r\n\r\n return data || [];\r\n };\r\n }\r\n\r\n var DataReader = Class.extend({\r\n init: function(schema) {\r\n var that = this, member, get, model, base;\r\n\r\n schema = schema || {};\r\n\r\n for (member in schema) {\r\n get = schema[member];\r\n\r\n that[member] = typeof get === STRING ? getter(get) : get;\r\n }\r\n\r\n base = schema.modelBase || Model;\r\n\r\n if (isPlainObject(that.model)) {\r\n that.model = model = base.define(that.model);\r\n }\r\n\r\n var dataFunction = proxy(that.data, that);\r\n\r\n that._dataAccessFunction = dataFunction;\r\n\r\n if (that.model) {\r\n var groupsFunction = proxy(that.groups, that),\r\n serializeFunction = proxy(that.serialize, that),\r\n originalFieldNames = {},\r\n getters = {},\r\n serializeGetters = {},\r\n fieldNames = {},\r\n shouldSerialize = false,\r\n fieldName;\r\n\r\n model = that.model;\r\n\r\n if (model.fields) {\r\n each(model.fields, function(field, value) {\r\n var fromName;\r\n\r\n fieldName = field;\r\n\r\n if (isPlainObject(value) && value.field) {\r\n fieldName = value.field;\r\n } else if (typeof value === STRING) {\r\n fieldName = value;\r\n }\r\n\r\n if (isPlainObject(value) && value.from) {\r\n fromName = value.from;\r\n }\r\n\r\n shouldSerialize = shouldSerialize || (fromName && fromName !== field) || fieldName !== field;\r\n\r\n getters[field] = getter(fromName || fieldName);\r\n serializeGetters[field] = getter(field);\r\n originalFieldNames[fromName || fieldName] = field;\r\n fieldNames[field] = fromName || fieldName;\r\n });\r\n\r\n if (!schema.serialize && shouldSerialize) {\r\n that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\r\n }\r\n }\r\n\r\n that._dataAccessFunction = dataFunction;\r\n that.data = wrapDataAccess(dataFunction, model, convertRecords, getters, originalFieldNames, fieldNames);\r\n that.groups = wrapDataAccess(groupsFunction, model, convertGroup, getters, originalFieldNames, fieldNames);\r\n }\r\n },\r\n errors: function(data) {\r\n return data ? data.errors : null;\r\n },\r\n parse: identity,\r\n data: identity,\r\n total: function(data) {\r\n return data.length;\r\n },\r\n groups: identity,\r\n aggregates: function() {\r\n return {};\r\n },\r\n serialize: function(data) {\r\n return data;\r\n }\r\n });\r\n\r\n function mergeGroups(target, dest, skip, take) {\r\n var group,\r\n idx = 0,\r\n items;\r\n\r\n while (dest.length && take) {\r\n group = dest[idx];\r\n items = group.items;\r\n\r\n var length = items.length;\r\n\r\n if (target && target.field === group.field && target.value === group.value) {\r\n if (target.hasSubgroups && target.items.length) {\r\n mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\r\n } else {\r\n items = items.slice(skip, skip + take);\r\n target.items = target.items.concat(items);\r\n }\r\n dest.splice(idx--, 1);\r\n } else if (group.hasSubgroups && items.length) {\r\n mergeGroups(group, items, skip, take);\r\n if (!group.items.length) {\r\n dest.splice(idx--, 1);\r\n }\r\n } else {\r\n items = items.slice(skip, skip + take);\r\n group.items = items;\r\n\r\n if (!group.items.length) {\r\n dest.splice(idx--, 1);\r\n }\r\n }\r\n\r\n if (items.length === 0) {\r\n skip -= length;\r\n } else {\r\n skip = 0;\r\n take -= items.length;\r\n }\r\n\r\n if (++idx >= dest.length) {\r\n break;\r\n }\r\n }\r\n\r\n if (idx < dest.length) {\r\n dest.splice(idx, dest.length - idx);\r\n }\r\n }\r\n\r\n function flattenGroups(data) {\r\n var idx,\r\n result = [],\r\n length,\r\n items,\r\n itemIndex;\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n var group = data.at(idx);\r\n if (group.hasSubgroups) {\r\n result = result.concat(flattenGroups(group.items));\r\n } else {\r\n items = group.items;\r\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\r\n result.push(items.at(itemIndex));\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n function wrapGroupItems(data, model) {\r\n var idx, length, group, items;\r\n if (model) {\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n group = data.at(idx);\r\n\r\n if (group.hasSubgroups) {\r\n wrapGroupItems(group.items, model);\r\n } else {\r\n group.items = new LazyObservableArray(group.items, model);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function eachGroupItems(data, func) {\r\n for (var idx = 0, length = data.length; idx < length; idx++) {\r\n if (data[idx].hasSubgroups) {\r\n if (eachGroupItems(data[idx].items, func)) {\r\n return true;\r\n }\r\n } else if (func(data[idx].items, data[idx])) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n function replaceInRanges(ranges, data, item, observable) {\r\n for (var idx = 0; idx < ranges.length; idx++) {\r\n if (ranges[idx].data === data) {\r\n break;\r\n }\r\n if (replaceInRange(ranges[idx].data, item, observable)) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n function replaceInRange(items, item, observable) {\r\n for (var idx = 0, length = items.length; idx < length; idx++) {\r\n if (items[idx] && items[idx].hasSubgroups) {\r\n return replaceInRange(items[idx].items, item, observable);\r\n } else if (items[idx] === item || items[idx] === observable) {\r\n items[idx] = observable;\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n function replaceWithObservable(view, data, ranges, type, serverGrouping) {\r\n for (var viewIndex = 0, length = view.length; viewIndex < length; viewIndex++) {\r\n var item = view[viewIndex];\r\n\r\n if (!item || item instanceof type) {\r\n continue;\r\n }\r\n\r\n if (item.hasSubgroups !== undefined && !serverGrouping) {\r\n replaceWithObservable(item.items, data, ranges, type, serverGrouping);\r\n } else {\r\n for (var idx = 0; idx < data.length; idx++) {\r\n if (data[idx] === item) {\r\n view[viewIndex] = data.at(idx);\r\n replaceInRanges(ranges, data, item, view[viewIndex]);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function removeModel(data, model) {\r\n var idx, length;\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n var dataItem = data.at(idx);\r\n if (dataItem.uid == model.uid) {\r\n data.splice(idx, 1);\r\n return dataItem;\r\n }\r\n }\r\n }\r\n\r\n function indexOfPristineModel(data, model) {\r\n if (model) {\r\n return indexOf(data, function(item) {\r\n if (item.uid) {\r\n return item.uid == model.uid;\r\n }\r\n\r\n return item[model.idField] === model.id;\r\n });\r\n }\r\n return -1;\r\n }\r\n\r\n function indexOfModel(data, model) {\r\n if (model) {\r\n return indexOf(data, function(item) {\r\n return item.uid == model.uid;\r\n });\r\n }\r\n return -1;\r\n }\r\n\r\n function indexOf(data, comparer) {\r\n var idx, length;\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n if (comparer(data[idx])) {\r\n return idx;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n function fieldNameFromModel(fields, name) {\r\n if (fields && !isEmptyObject(fields)) {\r\n var descriptor = fields[name];\r\n var fieldName;\r\n if (isPlainObject(descriptor)) {\r\n fieldName = descriptor.from || descriptor.field || name;\r\n } else {\r\n fieldName = fields[name] || name;\r\n }\r\n\r\n if (isFunction(fieldName)) {\r\n return name;\r\n }\r\n\r\n return fieldName;\r\n }\r\n return name;\r\n }\r\n\r\n function convertFilterDescriptorsField(descriptor, model) {\r\n var idx,\r\n length,\r\n target = {};\r\n\r\n for (var field in descriptor) {\r\n if (field !== \"filters\") {\r\n target[field] = descriptor[field];\r\n }\r\n }\r\n\r\n if (descriptor.filters) {\r\n target.filters = [];\r\n for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\r\n target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\r\n }\r\n } else {\r\n target.field = fieldNameFromModel(model.fields, target.field);\r\n }\r\n return target;\r\n }\r\n\r\n function convertDescriptorsField(descriptors, model) {\r\n var idx,\r\n length,\r\n result = [],\r\n target,\r\n descriptor;\r\n\r\n for (idx = 0, length = descriptors.length; idx < length; idx ++) {\r\n target = {};\r\n\r\n descriptor = descriptors[idx];\r\n\r\n for (var field in descriptor) {\r\n target[field] = descriptor[field];\r\n }\r\n\r\n target.field = fieldNameFromModel(model.fields, target.field);\r\n\r\n if (target.aggregates && isArray(target.aggregates)) {\r\n target.aggregates = convertDescriptorsField(target.aggregates, model);\r\n }\r\n result.push(target);\r\n }\r\n return result;\r\n }\r\n\r\n var DataSource = Observable.extend({\r\n init: function(options) {\r\n var that = this, model, data;\r\n\r\n if (options) {\r\n data = options.data;\r\n }\r\n\r\n options = that.options = extend({}, that.options, options);\r\n\r\n that._map = {};\r\n that._prefetch = {};\r\n that._data = [];\r\n that._pristineData = [];\r\n that._ranges = [];\r\n that._view = [];\r\n that._pristineTotal = 0;\r\n that._destroyed = [];\r\n that._pageSize = options.pageSize;\r\n that._page = options.page || (options.pageSize ? 1 : undefined);\r\n that._sort = normalizeSort(options.sort);\r\n that._filter = normalizeFilter(options.filter);\r\n that._group = normalizeGroup(options.group);\r\n that._aggregate = options.aggregate;\r\n that._total = options.total;\r\n\r\n that._shouldDetachObservableParents = true;\r\n\r\n Observable.fn.init.call(that);\r\n\r\n that.transport = Transport.create(options, data, that);\r\n\r\n if (isFunction(that.transport.push)) {\r\n that.transport.push({\r\n pushCreate: proxy(that._pushCreate, that),\r\n pushUpdate: proxy(that._pushUpdate, that),\r\n pushDestroy: proxy(that._pushDestroy, that)\r\n });\r\n }\r\n\r\n if (options.offlineStorage != null) {\r\n if (typeof options.offlineStorage == \"string\") {\r\n var key = options.offlineStorage;\r\n\r\n that._storage = {\r\n getItem: function() {\r\n return JSON.parse(localStorage.getItem(key));\r\n },\r\n setItem: function(item) {\r\n localStorage.setItem(key, stringify(that.reader.serialize(item)));\r\n }\r\n };\r\n } else {\r\n that._storage = options.offlineStorage;\r\n }\r\n }\r\n\r\n that.reader = new kendo.data.readers[options.schema.type || \"json\" ](options.schema);\r\n\r\n model = that.reader.model || {};\r\n\r\n that._detachObservableParents();\r\n\r\n that._data = that._observe(that._data);\r\n that._online = true;\r\n\r\n that.bind([\"push\", ERROR, CHANGE, REQUESTSTART, SYNC, REQUESTEND, PROGRESS], options);\r\n },\r\n\r\n options: {\r\n data: null,\r\n schema: {\r\n modelBase: Model\r\n },\r\n offlineStorage: null,\r\n serverSorting: false,\r\n serverPaging: false,\r\n serverFiltering: false,\r\n serverGrouping: false,\r\n serverAggregates: false,\r\n batch: false\r\n },\r\n\r\n online: function(value) {\r\n if (value !== undefined) {\r\n if (this._online != value) {\r\n this._online = value;\r\n\r\n if (value) {\r\n return this.sync();\r\n }\r\n }\r\n\r\n return $.Deferred().resolve().promise();\r\n } else {\r\n return this._online;\r\n }\r\n },\r\n\r\n offlineData: function(state) {\r\n if (this.options.offlineStorage == null) {\r\n return null;\r\n }\r\n\r\n if (state !== undefined) {\r\n return this._storage.setItem(state);\r\n }\r\n\r\n return this._storage.getItem() || {};\r\n },\r\n\r\n _isServerGrouped: function() {\r\n var group = this.group() || [];\r\n\r\n return this.options.serverGrouping && group.length;\r\n },\r\n\r\n _pushCreate: function(result) {\r\n this._push(result, \"pushCreate\");\r\n },\r\n\r\n _pushUpdate: function(result) {\r\n this._push(result, \"pushUpdate\");\r\n },\r\n\r\n _pushDestroy: function(result) {\r\n this._push(result, \"pushDestroy\");\r\n },\r\n\r\n _push: function(result, operation) {\r\n var data = this._readData(result);\r\n\r\n if (!data) {\r\n data = result;\r\n }\r\n\r\n this[operation](data);\r\n },\r\n\r\n _flatData: function(data, skip) {\r\n if (data) {\r\n if (this._isServerGrouped()) {\r\n return flattenGroups(data);\r\n }\r\n\r\n if (!skip) {\r\n for (var idx = 0; idx < data.length; idx++) {\r\n data.at(idx);\r\n }\r\n }\r\n }\r\n\r\n return data;\r\n },\r\n\r\n parent: noop,\r\n\r\n get: function(id) {\r\n var idx, length, data = this._flatData(this._data);\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n if (data[idx].id == id) {\r\n return data[idx];\r\n }\r\n }\r\n },\r\n\r\n getByUid: function(id) {\r\n var idx, length, data = this._flatData(this._data);\r\n\r\n if (!data) {\r\n return;\r\n }\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n if (data[idx].uid == id) {\r\n return data[idx];\r\n }\r\n }\r\n },\r\n\r\n indexOf: function(model) {\r\n return indexOfModel(this._data, model);\r\n },\r\n\r\n at: function(index) {\r\n return this._data.at(index);\r\n },\r\n\r\n data: function(value) {\r\n var that = this;\r\n if (value !== undefined) {\r\n that._detachObservableParents();\r\n that._data = this._observe(value);\r\n\r\n that._pristineData = value.slice(0);\r\n\r\n that._storeData();\r\n\r\n that._ranges = [];\r\n that.trigger(\"reset\");\r\n that._addRange(that._data);\r\n\r\n that._total = that._data.length;\r\n that._pristineTotal = that._total;\r\n\r\n that._process(that._data);\r\n } else {\r\n if (that._data) {\r\n for (var idx = 0; idx < that._data.length; idx++) {\r\n that._data.at(idx);\r\n }\r\n }\r\n\r\n return that._data;\r\n }\r\n },\r\n\r\n view: function(value) {\r\n if (value === undefined) {\r\n return this._view;\r\n } else {\r\n this._view = this._observeView(value);\r\n }\r\n },\r\n\r\n _observeView: function(data) {\r\n var that = this;\r\n replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\r\n\r\n var view = new LazyObservableArray(data, that.reader.model);\r\n view.parent = function() { return that.parent(); };\r\n return view;\r\n },\r\n\r\n flatView: function() {\r\n var groups = this.group() || [];\r\n\r\n if (groups.length) {\r\n return flattenGroups(this._view);\r\n } else {\r\n return this._view;\r\n }\r\n },\r\n\r\n add: function(model) {\r\n return this.insert(this._data.length, model);\r\n },\r\n\r\n _createNewModel: function(model) {\r\n if (this.reader.model) {\r\n return new this.reader.model(model);\r\n }\r\n\r\n if (model instanceof ObservableObject) {\r\n return model;\r\n }\r\n\r\n return new ObservableObject(model);\r\n },\r\n\r\n insert: function(index, model) {\r\n if (!model) {\r\n model = index;\r\n index = 0;\r\n }\r\n\r\n if (!(model instanceof Model)) {\r\n model = this._createNewModel(model);\r\n }\r\n\r\n if (this._isServerGrouped()) {\r\n this._data.splice(index, 0, this._wrapInEmptyGroup(model));\r\n } else {\r\n this._data.splice(index, 0, model);\r\n }\r\n\r\n return model;\r\n },\r\n\r\n pushCreate: function(items) {\r\n if (!isArray(items)) {\r\n items = [items];\r\n }\r\n\r\n var pushed = [];\r\n var autoSync = this.options.autoSync;\r\n this.options.autoSync = false;\r\n\r\n try {\r\n for (var idx = 0; idx < items.length; idx ++) {\r\n var item = items[idx];\r\n\r\n var result = this.add(item);\r\n\r\n pushed.push(result);\r\n\r\n var pristine = result.toJSON();\r\n\r\n if (this._isServerGrouped()) {\r\n pristine = this._wrapInEmptyGroup(pristine);\r\n }\r\n\r\n this._pristineData.push(pristine);\r\n }\r\n } finally {\r\n this.options.autoSync = autoSync;\r\n }\r\n\r\n if (pushed.length) {\r\n this.trigger(\"push\", {\r\n type: \"create\",\r\n items: pushed\r\n });\r\n }\r\n },\r\n\r\n pushUpdate: function(items) {\r\n if (!isArray(items)) {\r\n items = [items];\r\n }\r\n\r\n var pushed = [];\r\n\r\n for (var idx = 0; idx < items.length; idx ++) {\r\n var item = items[idx];\r\n var model = this._createNewModel(item);\r\n\r\n var target = this.get(model.id);\r\n\r\n if (target) {\r\n pushed.push(target);\r\n\r\n target.accept(item);\r\n\r\n target.trigger(CHANGE);\r\n\r\n this._updatePristineForModel(target, item);\r\n } else {\r\n this.pushCreate(item);\r\n }\r\n }\r\n\r\n if (pushed.length) {\r\n this.trigger(\"push\", {\r\n type: \"update\",\r\n items: pushed\r\n });\r\n }\r\n },\r\n\r\n pushDestroy: function(items) {\r\n var pushed = this._removeItems(items);\r\n\r\n if (pushed.length) {\r\n this.trigger(\"push\", {\r\n type: \"destroy\",\r\n items: pushed\r\n });\r\n }\r\n },\r\n\r\n _removeItems: function(items) {\r\n if (!isArray(items)) {\r\n items = [items];\r\n }\r\n\r\n var destroyed = [];\r\n var autoSync = this.options.autoSync;\r\n this.options.autoSync = false;\r\n try {\r\n for (var idx = 0; idx < items.length; idx ++) {\r\n var item = items[idx];\r\n var model = this._createNewModel(item);\r\n var found = false;\r\n\r\n this._eachItem(this._data, function(items){\r\n for (var idx = 0; idx < items.length; idx++) {\r\n var item = items.at(idx);\r\n if (item.id === model.id) {\r\n destroyed.push(item);\r\n items.splice(idx, 1);\r\n found = true;\r\n break;\r\n }\r\n }\r\n });\r\n\r\n if (found) {\r\n this._removePristineForModel(model);\r\n this._destroyed.pop();\r\n }\r\n }\r\n } finally {\r\n this.options.autoSync = autoSync;\r\n }\r\n\r\n return destroyed;\r\n },\r\n\r\n remove: function(model) {\r\n var result,\r\n that = this,\r\n hasGroups = that._isServerGrouped();\r\n\r\n this._eachItem(that._data, function(items) {\r\n result = removeModel(items, model);\r\n if (result && hasGroups) {\r\n if (!result.isNew || !result.isNew()) {\r\n that._destroyed.push(result);\r\n }\r\n return true;\r\n }\r\n });\r\n\r\n this._removeModelFromRanges(model);\r\n\r\n this._updateRangesLength();\r\n\r\n return model;\r\n },\r\n\r\n destroyed: function() {\r\n return this._destroyed;\r\n },\r\n\r\n created: function() {\r\n var idx,\r\n length,\r\n result = [],\r\n data = this._flatData(this._data);\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n if (data[idx].isNew && data[idx].isNew()) {\r\n result.push(data[idx]);\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n updated: function() {\r\n var idx,\r\n length,\r\n result = [],\r\n data = this._flatData(this._data);\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n if ((data[idx].isNew && !data[idx].isNew()) && data[idx].dirty) {\r\n result.push(data[idx]);\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n sync: function() {\r\n var that = this,\r\n idx,\r\n length,\r\n created = [],\r\n updated = [],\r\n destroyed = that._destroyed,\r\n data = that._flatData(that._data);\r\n\r\n var promise = $.Deferred().resolve().promise();\r\n\r\n if (that.online()) {\r\n\r\n if (!that.reader.model) {\r\n return promise;\r\n }\r\n\r\n created = that.created();\r\n updated = that.updated();\r\n\r\n var promises = [];\r\n\r\n if (that.options.batch && that.transport.submit) {\r\n promises = that._sendSubmit(created, updated, destroyed);\r\n } else {\r\n promises.push.apply(promises, that._send(\"create\", created));\r\n promises.push.apply(promises, that._send(\"update\", updated));\r\n promises.push.apply(promises, that._send(\"destroy\", destroyed));\r\n }\r\n\r\n promise = $.when\r\n .apply(null, promises)\r\n .then(function() {\r\n var idx, length;\r\n\r\n for (idx = 0, length = arguments.length; idx < length; idx++){\r\n that._accept(arguments[idx]);\r\n }\r\n\r\n that._storeData(true);\r\n\r\n that._change({ action: \"sync\" });\r\n\r\n that.trigger(SYNC);\r\n });\r\n } else {\r\n that._storeData(true);\r\n\r\n that._change({ action: \"sync\" });\r\n }\r\n\r\n return promise;\r\n },\r\n\r\n cancelChanges: function(model) {\r\n var that = this;\r\n\r\n if (model instanceof kendo.data.Model) {\r\n that._cancelModel(model);\r\n } else {\r\n that._destroyed = [];\r\n that._detachObservableParents();\r\n that._data = that._observe(that._pristineData);\r\n if (that.options.serverPaging) {\r\n that._total = that._pristineTotal;\r\n }\r\n\r\n that._ranges = [];\r\n that._addRange(that._data);\r\n\r\n that._change();\r\n }\r\n },\r\n\r\n hasChanges: function() {\r\n var idx,\r\n length,\r\n data = this._flatData(this._data);\r\n\r\n if (this._destroyed.length) {\r\n return true;\r\n }\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n if ((data[idx].isNew && data[idx].isNew()) || data[idx].dirty) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n _accept: function(result) {\r\n var that = this,\r\n models = result.models,\r\n response = result.response,\r\n idx = 0,\r\n serverGroup = that._isServerGrouped(),\r\n pristine = that._pristineData,\r\n type = result.type,\r\n length;\r\n\r\n that.trigger(REQUESTEND, { response: response, type: type });\r\n\r\n if (response && !isEmptyObject(response)) {\r\n response = that.reader.parse(response);\r\n\r\n if (that._handleCustomErrors(response)) {\r\n return;\r\n }\r\n\r\n response = that.reader.data(response);\r\n\r\n if (!isArray(response)) {\r\n response = [response];\r\n }\r\n } else {\r\n response = $.map(models, function(model) { return model.toJSON(); } );\r\n }\r\n\r\n if (type === \"destroy\") {\r\n that._destroyed = [];\r\n }\r\n\r\n for (idx = 0, length = models.length; idx < length; idx++) {\r\n if (type !== \"destroy\") {\r\n models[idx].accept(response[idx]);\r\n\r\n if (type === \"create\") {\r\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx]) : response[idx]);\r\n } else if (type === \"update\") {\r\n that._updatePristineForModel(models[idx], response[idx]);\r\n }\r\n } else {\r\n that._removePristineForModel(models[idx]);\r\n }\r\n }\r\n },\r\n\r\n _updatePristineForModel: function(model, values) {\r\n this._executeOnPristineForModel(model, function(index, items) {\r\n kendo.deepExtend(items[index], values);\r\n });\r\n },\r\n\r\n _executeOnPristineForModel: function(model, callback) {\r\n this._eachPristineItem(\r\n function(items) {\r\n var index = indexOfPristineModel(items, model);\r\n if (index > -1) {\r\n callback(index, items);\r\n return true;\r\n }\r\n });\r\n },\r\n\r\n _removePristineForModel: function(model) {\r\n this._executeOnPristineForModel(model, function(index, items) {\r\n items.splice(index, 1);\r\n });\r\n },\r\n\r\n _readData: function(data) {\r\n var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\r\n return read.call(this.reader, data);\r\n },\r\n\r\n _eachPristineItem: function(callback) {\r\n this._eachItem(this._pristineData, callback);\r\n },\r\n\r\n _eachItem: function(data, callback) {\r\n if (data && data.length) {\r\n if (this._isServerGrouped()) {\r\n eachGroupItems(data, callback);\r\n } else {\r\n callback(data);\r\n }\r\n }\r\n },\r\n\r\n _pristineForModel: function(model) {\r\n var pristine,\r\n idx,\r\n callback = function(items) {\r\n idx = indexOfPristineModel(items, model);\r\n if (idx > -1) {\r\n pristine = items[idx];\r\n return true;\r\n }\r\n };\r\n\r\n this._eachPristineItem(callback);\r\n\r\n return pristine;\r\n },\r\n\r\n _cancelModel: function(model) {\r\n var pristine = this._pristineForModel(model);\r\n\r\n this._eachItem(this._data, function(items) {\r\n var idx = indexOfModel(items, model);\r\n if (idx >= 0) {\r\n if (pristine && (!model.isNew() || pristine.__state__)) {\r\n items[idx].accept(pristine);\r\n } else {\r\n items.splice(idx, 1);\r\n }\r\n }\r\n });\r\n },\r\n\r\n _submit: function(promises, data) {\r\n var that = this;\r\n\r\n that.trigger(REQUESTSTART, { type: \"submit\" });\r\n\r\n that.transport.submit(extend({\r\n success: function(response, type) {\r\n var promise = $.grep(promises, function(x) {\r\n return x.type == type;\r\n })[0];\r\n\r\n if (promise) {\r\n promise.resolve({\r\n response: response,\r\n models: promise.models,\r\n type: type\r\n });\r\n }\r\n },\r\n error: function(response, status, error) {\r\n for (var idx = 0; idx < promises.length; idx++) {\r\n promises[idx].reject(response);\r\n }\r\n\r\n that.error(response, status, error);\r\n }\r\n }, data));\r\n },\r\n\r\n _sendSubmit: function(created, updated, destroyed) {\r\n var that = this,\r\n promises = [];\r\n\r\n if (that.options.batch) {\r\n if (created.length) {\r\n promises.push($.Deferred(function(deferred) {\r\n deferred.type = \"create\";\r\n deferred.models = created;\r\n }));\r\n }\r\n\r\n if (updated.length) {\r\n promises.push($.Deferred(function(deferred) {\r\n deferred.type = \"update\";\r\n deferred.models = updated;\r\n }));\r\n }\r\n\r\n if (destroyed.length) {\r\n promises.push($.Deferred(function(deferred) {\r\n deferred.type = \"destroy\";\r\n deferred.models = destroyed;\r\n }));\r\n }\r\n\r\n that._submit(promises, {\r\n data: {\r\n created: that.reader.serialize(toJSON(created)),\r\n updated: that.reader.serialize(toJSON(updated)),\r\n destroyed: that.reader.serialize(toJSON(destroyed))\r\n }\r\n });\r\n }\r\n\r\n return promises;\r\n },\r\n\r\n _promise: function(data, models, type) {\r\n var that = this;\r\n\r\n return $.Deferred(function(deferred) {\r\n that.trigger(REQUESTSTART, { type: type });\r\n\r\n that.transport[type].call(that.transport, extend({\r\n success: function(response) {\r\n deferred.resolve({\r\n response: response,\r\n models: models,\r\n type: type\r\n });\r\n },\r\n error: function(response, status, error) {\r\n deferred.reject(response);\r\n that.error(response, status, error);\r\n }\r\n }, data));\r\n }).promise();\r\n },\r\n\r\n _send: function(method, data) {\r\n var that = this,\r\n idx,\r\n length,\r\n promises = [],\r\n converted = that.reader.serialize(toJSON(data));\r\n\r\n if (that.options.batch) {\r\n if (data.length) {\r\n promises.push(that._promise( { data: { models: converted } }, data , method));\r\n }\r\n } else {\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n promises.push(that._promise( { data: converted[idx] }, [ data[idx] ], method));\r\n }\r\n }\r\n\r\n return promises;\r\n },\r\n\r\n read: function(data) {\r\n var that = this, params = that._params(data);\r\n var deferred = $.Deferred();\r\n\r\n that._queueRequest(params, function() {\r\n var isPrevented = that.trigger(REQUESTSTART, { type: \"read\" });\r\n if (!isPrevented) {\r\n that.trigger(PROGRESS);\r\n\r\n that._ranges = [];\r\n that.trigger(\"reset\");\r\n if (that.online()) {\r\n that.transport.read({\r\n data: params,\r\n success: function(data) {\r\n that.success(data, params);\r\n\r\n deferred.resolve();\r\n },\r\n error: function() {\r\n var args = slice.call(arguments);\r\n\r\n that.error.apply(that, args);\r\n\r\n deferred.reject.apply(deferred, args);\r\n }\r\n });\r\n } else if (that.options.offlineStorage != null){\r\n that.success(that.offlineData(), params);\r\n\r\n deferred.resolve();\r\n }\r\n } else {\r\n that._dequeueRequest();\r\n\r\n deferred.resolve(isPrevented);\r\n }\r\n });\r\n\r\n return deferred.promise();\r\n },\r\n\r\n _readAggregates: function(data) {\r\n return this.reader.aggregates(data);\r\n },\r\n\r\n success: function(data) {\r\n var that = this,\r\n options = that.options;\r\n\r\n that.trigger(REQUESTEND, { response: data, type: \"read\" });\r\n\r\n if (that.online()) {\r\n data = that.reader.parse(data);\r\n\r\n if (that._handleCustomErrors(data)) {\r\n that._dequeueRequest();\r\n return;\r\n }\r\n\r\n that._total = that.reader.total(data);\r\n\r\n if (that._aggregate && options.serverAggregates) {\r\n that._aggregateResult = that._readAggregates(data);\r\n }\r\n\r\n data = that._readData(data);\r\n } else {\r\n data = that._readData(data);\r\n\r\n var items = [];\r\n var itemIds = {};\r\n var model = that.reader.model;\r\n var idField = model ? model.idField : \"id\";\r\n var idx;\r\n\r\n for (idx = 0; idx < this._destroyed.length; idx++) {\r\n var id = this._destroyed[idx][idField];\r\n itemIds[id] = id;\r\n }\r\n\r\n for (idx = 0; idx < data.length; idx++) {\r\n var item = data[idx];\r\n var state = item.__state__;\r\n if (state == \"destroy\") {\r\n if (!itemIds[item[idField]]) {\r\n this._destroyed.push(this._createNewModel(item));\r\n }\r\n } else {\r\n items.push(item);\r\n }\r\n }\r\n\r\n data = items;\r\n\r\n that._total = data.length;\r\n }\r\n\r\n that._pristineTotal = that._total;\r\n\r\n that._pristineData = data.slice(0);\r\n\r\n that._detachObservableParents();\r\n\r\n that._data = that._observe(data);\r\n\r\n if (that.options.offlineStorage != null) {\r\n that._eachItem(that._data, function(items) {\r\n for (var idx = 0; idx < items.length; idx++) {\r\n var item = items.at(idx);\r\n if (item.__state__ == \"update\") {\r\n item.dirty = true;\r\n }\r\n }\r\n });\r\n }\r\n\r\n that._storeData();\r\n\r\n that._addRange(that._data);\r\n\r\n that._process(that._data);\r\n\r\n that._dequeueRequest();\r\n },\r\n\r\n _detachObservableParents: function() {\r\n if (this._data && this._shouldDetachObservableParents) {\r\n for (var idx = 0; idx < this._data.length; idx++) {\r\n if (this._data[idx].parent) {\r\n this._data[idx].parent = noop;\r\n }\r\n }\r\n }\r\n },\r\n\r\n _storeData: function(updatePristine) {\r\n var serverGrouping = this._isServerGrouped();\r\n var model = this.reader.model;\r\n\r\n function items(data) {\r\n var state = [];\r\n\r\n for (var idx = 0; idx < data.length; idx++) {\r\n var dataItem = data.at(idx);\r\n var item = dataItem.toJSON();\r\n\r\n if (serverGrouping && dataItem.items) {\r\n item.items = items(dataItem.items);\r\n } else {\r\n item.uid = dataItem.uid;\r\n\r\n if (model) {\r\n if (dataItem.isNew()) {\r\n item.__state__ = \"create\";\r\n } else if (dataItem.dirty) {\r\n item.__state__ = \"update\";\r\n }\r\n }\r\n }\r\n state.push(item);\r\n }\r\n\r\n return state;\r\n }\r\n\r\n if (this.options.offlineStorage != null) {\r\n var state = items(this._data);\r\n\r\n for (var idx = 0; idx < this._destroyed.length; idx++) {\r\n var item = this._destroyed[idx].toJSON();\r\n item.__state__ = \"destroy\";\r\n state.push(item);\r\n }\r\n\r\n this.offlineData(state);\r\n\r\n if (updatePristine) {\r\n this._pristineData = state;\r\n }\r\n }\r\n },\r\n\r\n _addRange: function(data) {\r\n var that = this,\r\n start = that._skip || 0,\r\n end = start + that._flatData(data, true).length;\r\n\r\n that._ranges.push({ start: start, end: end, data: data, timestamp: new Date().getTime() });\r\n that._ranges.sort( function(x, y) { return x.start - y.start; } );\r\n },\r\n\r\n error: function(xhr, status, errorThrown) {\r\n this._dequeueRequest();\r\n this.trigger(REQUESTEND, { });\r\n this.trigger(ERROR, { xhr: xhr, status: status, errorThrown: errorThrown });\r\n },\r\n\r\n _params: function(data) {\r\n var that = this,\r\n options = extend({\r\n take: that.take(),\r\n skip: that.skip(),\r\n page: that.page(),\r\n pageSize: that.pageSize(),\r\n sort: that._sort,\r\n filter: that._filter,\r\n group: that._group,\r\n aggregate: that._aggregate\r\n }, data);\r\n\r\n if (!that.options.serverPaging) {\r\n delete options.take;\r\n delete options.skip;\r\n delete options.page;\r\n delete options.pageSize;\r\n }\r\n\r\n if (!that.options.serverGrouping) {\r\n delete options.group;\r\n } else if (that.reader.model && options.group) {\r\n options.group = convertDescriptorsField(options.group, that.reader.model);\r\n }\r\n\r\n if (!that.options.serverFiltering) {\r\n delete options.filter;\r\n } else if (that.reader.model && options.filter) {\r\n options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\r\n }\r\n\r\n if (!that.options.serverSorting) {\r\n delete options.sort;\r\n } else if (that.reader.model && options.sort) {\r\n options.sort = convertDescriptorsField(options.sort, that.reader.model);\r\n }\r\n\r\n if (!that.options.serverAggregates) {\r\n delete options.aggregate;\r\n } else if (that.reader.model && options.aggregate) {\r\n options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\r\n }\r\n\r\n return options;\r\n },\r\n\r\n _queueRequest: function(options, callback) {\r\n var that = this;\r\n if (!that._requestInProgress) {\r\n that._requestInProgress = true;\r\n that._pending = undefined;\r\n callback();\r\n } else {\r\n that._pending = { callback: proxy(callback, that), options: options };\r\n }\r\n },\r\n\r\n _dequeueRequest: function() {\r\n var that = this;\r\n that._requestInProgress = false;\r\n if (that._pending) {\r\n that._queueRequest(that._pending.options, that._pending.callback);\r\n }\r\n },\r\n\r\n _handleCustomErrors: function(response) {\r\n if (this.reader.errors) {\r\n var errors = this.reader.errors(response);\r\n if (errors) {\r\n this.trigger(ERROR, { xhr: null, status: \"customerror\", errorThrown: \"custom error\", errors: errors });\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n\r\n _shouldWrap: function(data) {\r\n var model = this.reader.model;\r\n\r\n if (model && data.length) {\r\n return !(data[0] instanceof model);\r\n }\r\n\r\n return false;\r\n },\r\n\r\n _observe: function(data) {\r\n var that = this,\r\n model = that.reader.model,\r\n wrap = false;\r\n\r\n that._shouldDetachObservableParents = true;\r\n\r\n if (data instanceof ObservableArray) {\r\n that._shouldDetachObservableParents = false;\r\n if (that._shouldWrap(data)) {\r\n data.type = that.reader.model;\r\n data.wrapAll(data, data);\r\n }\r\n } else {\r\n var arrayType = that.pageSize() && !that.options.serverPaging ? LazyObservableArray : ObservableArray;\r\n data = new arrayType(data, that.reader.model);\r\n data.parent = function() { return that.parent(); };\r\n }\r\n\r\n if (that._isServerGrouped()) {\r\n wrapGroupItems(data, model);\r\n }\r\n\r\n if (that._changeHandler && that._data && that._data instanceof ObservableArray) {\r\n that._data.unbind(CHANGE, that._changeHandler);\r\n } else {\r\n that._changeHandler = proxy(that._change, that);\r\n }\r\n\r\n return data.bind(CHANGE, that._changeHandler);\r\n },\r\n\r\n _change: function(e) {\r\n var that = this, idx, length, action = e ? e.action : \"\";\r\n\r\n if (action === \"remove\") {\r\n for (idx = 0, length = e.items.length; idx < length; idx++) {\r\n if (!e.items[idx].isNew || !e.items[idx].isNew()) {\r\n that._destroyed.push(e.items[idx]);\r\n }\r\n }\r\n }\r\n\r\n if (that.options.autoSync && (action === \"add\" || action === \"remove\" || action === \"itemchange\")) {\r\n that.sync();\r\n } else {\r\n var total = parseInt(that._total, 10);\r\n if (!isNumber(that._total)) {\r\n total = parseInt(that._pristineTotal, 10);\r\n }\r\n if (action === \"add\") {\r\n total += e.items.length;\r\n } else if (action === \"remove\") {\r\n total -= e.items.length;\r\n } else if (action !== \"itemchange\" && action !== \"sync\" && !that.options.serverPaging) {\r\n total = that._pristineTotal;\r\n } else if (action === \"sync\") {\r\n total = that._pristineTotal = parseInt(that._total, 10);\r\n }\r\n\r\n that._total = total;\r\n\r\n that._process(that._data, e);\r\n }\r\n },\r\n\r\n _calculateAggregates: function (data, options) {\r\n options = options || {};\r\n\r\n var query = new Query(data),\r\n aggregates = options.aggregate,\r\n filter = options.filter;\r\n\r\n if (filter) {\r\n query = query.filter(filter);\r\n }\r\n\r\n return query.aggregate(aggregates);\r\n },\r\n\r\n _process: function (data, e) {\r\n var that = this,\r\n options = {},\r\n result;\r\n\r\n if (that.options.serverPaging !== true) {\r\n options.skip = that._skip;\r\n options.take = that._take || that._pageSize;\r\n\r\n if(options.skip === undefined && that._page !== undefined && that._pageSize !== undefined) {\r\n options.skip = (that._page - 1) * that._pageSize;\r\n }\r\n }\r\n\r\n if (that.options.serverSorting !== true) {\r\n options.sort = that._sort;\r\n }\r\n\r\n if (that.options.serverFiltering !== true) {\r\n options.filter = that._filter;\r\n }\r\n\r\n if (that.options.serverGrouping !== true) {\r\n options.group = that._group;\r\n }\r\n\r\n if (that.options.serverAggregates !== true) {\r\n options.aggregate = that._aggregate;\r\n that._aggregateResult = that._calculateAggregates(data, options);\r\n }\r\n\r\n result = that._queryProcess(data, options);\r\n\r\n that.view(result.data);\r\n\r\n if (result.total !== undefined && !that.options.serverFiltering) {\r\n that._total = result.total;\r\n }\r\n\r\n e = e || {};\r\n\r\n e.items = e.items || that._view;\r\n\r\n that.trigger(CHANGE, e);\r\n },\r\n\r\n _queryProcess: function(data, options) {\r\n return Query.process(data, options);\r\n },\r\n\r\n _mergeState: function(options) {\r\n var that = this;\r\n\r\n if (options !== undefined) {\r\n that._pageSize = options.pageSize;\r\n that._page = options.page;\r\n that._sort = options.sort;\r\n that._filter = options.filter;\r\n that._group = options.group;\r\n that._aggregate = options.aggregate;\r\n that._skip = options.skip;\r\n that._take = options.take;\r\n\r\n if(that._skip === undefined) {\r\n that._skip = that.skip();\r\n options.skip = that.skip();\r\n }\r\n\r\n if(that._take === undefined && that._pageSize !== undefined) {\r\n that._take = that._pageSize;\r\n options.take = that._take;\r\n }\r\n\r\n if (options.sort) {\r\n that._sort = options.sort = normalizeSort(options.sort);\r\n }\r\n\r\n if (options.filter) {\r\n that._filter = options.filter = normalizeFilter(options.filter);\r\n }\r\n\r\n if (options.group) {\r\n that._group = options.group = normalizeGroup(options.group);\r\n }\r\n if (options.aggregate) {\r\n that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\r\n }\r\n }\r\n return options;\r\n },\r\n\r\n query: function(options) {\r\n var result;\r\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\r\n\r\n if (remote || ((this._data === undefined || this._data.length === 0) && !this._destroyed.length)) {\r\n return this.read(this._mergeState(options));\r\n }\r\n\r\n var isPrevented = this.trigger(REQUESTSTART, { type: \"read\" });\r\n if (!isPrevented) {\r\n this.trigger(PROGRESS);\r\n\r\n result = this._queryProcess(this._data, this._mergeState(options));\r\n\r\n if (!this.options.serverFiltering) {\r\n if (result.total !== undefined) {\r\n this._total = result.total;\r\n } else {\r\n this._total = this._data.length;\r\n }\r\n }\r\n\r\n this._aggregateResult = this._calculateAggregates(this._data, options);\r\n this.view(result.data);\r\n this.trigger(REQUESTEND, { type: \"read\" });\r\n this.trigger(CHANGE, { items: result.data });\r\n }\r\n\r\n return $.Deferred().resolve(isPrevented).promise();\r\n },\r\n\r\n fetch: function(callback) {\r\n var that = this;\r\n var fn = function(isPrevented) {\r\n if (isPrevented !== true && isFunction(callback)) {\r\n callback.call(that);\r\n }\r\n };\r\n\r\n return this._query().then(fn);\r\n },\r\n\r\n _query: function(options) {\r\n var that = this;\r\n\r\n return that.query(extend({}, {\r\n page: that.page(),\r\n pageSize: that.pageSize(),\r\n sort: that.sort(),\r\n filter: that.filter(),\r\n group: that.group(),\r\n aggregate: that.aggregate()\r\n }, options));\r\n },\r\n\r\n next: function(options) {\r\n var that = this,\r\n page = that.page(),\r\n total = that.total();\r\n\r\n options = options || {};\r\n\r\n if (!page || (total && page + 1 > that.totalPages())) {\r\n return;\r\n }\r\n\r\n that._skip = page * that.take();\r\n\r\n page += 1;\r\n options.page = page;\r\n\r\n that._query(options);\r\n\r\n return page;\r\n },\r\n\r\n prev: function(options) {\r\n var that = this,\r\n page = that.page();\r\n\r\n options = options || {};\r\n\r\n if (!page || page === 1) {\r\n return;\r\n }\r\n\r\n that._skip = that._skip - that.take();\r\n\r\n page -= 1;\r\n options.page = page;\r\n\r\n that._query(options);\r\n\r\n return page;\r\n },\r\n\r\n page: function(val) {\r\n var that = this,\r\n skip;\r\n\r\n if(val !== undefined) {\r\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\r\n that._query({ page: val });\r\n return;\r\n }\r\n skip = that.skip();\r\n\r\n return skip !== undefined ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined;\r\n },\r\n\r\n pageSize: function(val) {\r\n var that = this;\r\n\r\n if(val !== undefined) {\r\n that._query({ pageSize: val, page: 1 });\r\n return;\r\n }\r\n\r\n return that.take();\r\n },\r\n\r\n sort: function(val) {\r\n var that = this;\r\n\r\n if(val !== undefined) {\r\n that._query({ sort: val });\r\n return;\r\n }\r\n\r\n return that._sort;\r\n },\r\n\r\n filter: function(val) {\r\n var that = this;\r\n\r\n if (val === undefined) {\r\n return that._filter;\r\n }\r\n\r\n that._query({ filter: val, page: 1 });\r\n that.trigger(\"reset\");\r\n },\r\n\r\n group: function(val) {\r\n var that = this;\r\n\r\n if(val !== undefined) {\r\n that._query({ group: val });\r\n return;\r\n }\r\n\r\n return that._group;\r\n },\r\n\r\n total: function() {\r\n return parseInt(this._total || 0, 10);\r\n },\r\n\r\n aggregate: function(val) {\r\n var that = this;\r\n\r\n if(val !== undefined) {\r\n that._query({ aggregate: val });\r\n return;\r\n }\r\n\r\n return that._aggregate;\r\n },\r\n\r\n aggregates: function() {\r\n var result = this._aggregateResult;\r\n\r\n if (isEmptyObject(result)) {\r\n result = this._emptyAggregates(this.aggregate());\r\n }\r\n\r\n return result;\r\n },\r\n\r\n _emptyAggregates: function(aggregates) {\r\n var result = {};\r\n\r\n if (!isEmptyObject(aggregates)) {\r\n var aggregate = {};\r\n\r\n if (!isArray(aggregates)){\r\n aggregates = [aggregates];\r\n }\r\n\r\n for (var idx = 0; idx <aggregates.length; idx++) {\r\n aggregate[aggregates[idx].aggregate] = 0;\r\n result[aggregates[idx].field] = aggregate;\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n _wrapInEmptyGroup: function(model) {\r\n var groups = this.group(),\r\n parent,\r\n group,\r\n idx,\r\n length;\r\n\r\n for (idx = groups.length-1, length = 0; idx >= length; idx--) {\r\n group = groups[idx];\r\n parent = {\r\n value: model.get(group.field),\r\n field: group.field,\r\n items: parent ? [parent] : [model],\r\n hasSubgroups: !!parent,\r\n aggregates: this._emptyAggregates(group.aggregates)\r\n };\r\n }\r\n\r\n return parent;\r\n },\r\n\r\n totalPages: function() {\r\n var that = this,\r\n pageSize = that.pageSize() || that.total();\r\n\r\n return math.ceil((that.total() || 0) / pageSize);\r\n },\r\n\r\n inRange: function(skip, take) {\r\n var that = this,\r\n end = math.min(skip + take, that.total());\r\n\r\n if (!that.options.serverPaging && that._data.length > 0) {\r\n return true;\r\n }\r\n\r\n return that._findRange(skip, end).length > 0;\r\n },\r\n\r\n lastRange: function() {\r\n var ranges = this._ranges;\r\n return ranges[ranges.length - 1] || { start: 0, end: 0, data: [] };\r\n },\r\n\r\n firstItemUid: function() {\r\n var ranges = this._ranges;\r\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\r\n },\r\n\r\n enableRequestsInProgress: function() {\r\n this._skipRequestsInProgress = false;\r\n },\r\n\r\n _timeStamp: function() {\r\n return new Date().getTime();\r\n },\r\n\r\n range: function(skip, take) {\r\n this._currentRequestTimeStamp = this._timeStamp();\r\n this._skipRequestsInProgress = true;\r\n\r\n skip = math.min(skip || 0, this.total());\r\n\r\n var that = this,\r\n pageSkip = math.max(math.floor(skip / take), 0) * take,\r\n size = math.min(pageSkip + take, that.total()),\r\n data;\r\n\r\n data = that._findRange(skip, math.min(skip + take, that.total()));\r\n\r\n if (data.length) {\r\n\r\n that._pending = undefined;\r\n\r\n that._skip = skip > that.skip() ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\r\n\r\n that._take = take;\r\n\r\n var paging = that.options.serverPaging;\r\n var sorting = that.options.serverSorting;\r\n var filtering = that.options.serverFiltering;\r\n var aggregates = that.options.serverAggregates;\r\n try {\r\n that.options.serverPaging = true;\r\n if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\r\n that.options.serverSorting = true;\r\n }\r\n that.options.serverFiltering = true;\r\n that.options.serverPaging = true;\r\n that.options.serverAggregates = true;\r\n\r\n if (paging) {\r\n that._detachObservableParents();\r\n that._data = data = that._observe(data);\r\n }\r\n that._process(data);\r\n } finally {\r\n that.options.serverPaging = paging;\r\n that.options.serverSorting = sorting;\r\n that.options.serverFiltering = filtering;\r\n that.options.serverAggregates = aggregates;\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (take !== undefined) {\r\n if (!that._rangeExists(pageSkip, size)) {\r\n that.prefetch(pageSkip, take, function() {\r\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\r\n that.prefetch(size, take, function() {\r\n that.range(skip, take);\r\n });\r\n } else {\r\n that.range(skip, take);\r\n }\r\n });\r\n } else if (pageSkip < skip) {\r\n that.prefetch(size, take, function() {\r\n that.range(skip, take);\r\n });\r\n }\r\n }\r\n },\r\n\r\n _findRange: function(start, end) {\r\n var that = this,\r\n ranges = that._ranges,\r\n range,\r\n data = [],\r\n skipIdx,\r\n takeIdx,\r\n startIndex,\r\n endIndex,\r\n rangeData,\r\n rangeEnd,\r\n processed,\r\n options = that.options,\r\n remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates,\r\n flatData,\r\n count,\r\n length;\r\n\r\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\r\n range = ranges[skipIdx];\r\n if (start >= range.start && start <= range.end) {\r\n count = 0;\r\n\r\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\r\n range = ranges[takeIdx];\r\n flatData = that._flatData(range.data, true);\r\n\r\n if (flatData.length && start + count >= range.start) {\r\n rangeData = range.data;\r\n rangeEnd = range.end;\r\n\r\n if (!remote) {\r\n var sort = normalizeGroup(that.group() || []).concat(normalizeSort(that.sort() || []));\r\n processed = that._queryProcess(range.data, { sort: sort, filter: that.filter() });\r\n flatData = rangeData = processed.data;\r\n\r\n if (processed.total !== undefined) {\r\n rangeEnd = processed.total;\r\n }\r\n }\r\n\r\n startIndex = 0;\r\n if (start + count > range.start) {\r\n startIndex = (start + count) - range.start;\r\n }\r\n endIndex = flatData.length;\r\n if (rangeEnd > end) {\r\n endIndex = endIndex - (rangeEnd - end);\r\n }\r\n count += endIndex - startIndex;\r\n data = that._mergeGroups(data, rangeData, startIndex, endIndex);\r\n\r\n if (end <= range.end && count == end - start) {\r\n return data;\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n return [];\r\n },\r\n\r\n _mergeGroups: function(data, range, skip, take) {\r\n if (this._isServerGrouped()) {\r\n var temp = range.toJSON(),\r\n prevGroup;\r\n\r\n if (data.length) {\r\n prevGroup = data[data.length - 1];\r\n }\r\n\r\n mergeGroups(prevGroup, temp, skip, take);\r\n\r\n return data.concat(temp);\r\n }\r\n return data.concat(range.slice(skip, take));\r\n },\r\n\r\n skip: function() {\r\n var that = this;\r\n\r\n if (that._skip === undefined) {\r\n return (that._page !== undefined ? (that._page - 1) * (that.take() || 1) : undefined);\r\n }\r\n return that._skip;\r\n },\r\n\r\n take: function() {\r\n return this._take || this._pageSize;\r\n },\r\n\r\n _prefetchSuccessHandler: function (skip, size, callback, force) {\r\n var that = this;\r\n var timestamp = that._timeStamp();\r\n\r\n return function(data) {\r\n var found = false,\r\n range = { start: skip, end: size, data: [], timestamp: that._timeStamp() },\r\n idx,\r\n length,\r\n temp;\r\n\r\n that._dequeueRequest();\r\n\r\n that.trigger(REQUESTEND, { response: data, type: \"read\" });\r\n\r\n data = that.reader.parse(data);\r\n\r\n temp = that._readData(data);\r\n\r\n if (temp.length) {\r\n\r\n for (idx = 0, length = that._ranges.length; idx < length; idx++) {\r\n if (that._ranges[idx].start === skip) {\r\n found = true;\r\n range = that._ranges[idx];\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n that._ranges.push(range);\r\n }\r\n }\r\n\r\n range.data = that._observe(temp);\r\n range.end = range.start + that._flatData(range.data, true).length;\r\n that._ranges.sort( function(x, y) { return x.start - y.start; } );\r\n that._total = that.reader.total(data);\r\n\r\n if (force || (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress)) {\r\n if (callback && temp.length) {\r\n callback();\r\n } else {\r\n that.trigger(CHANGE, {});\r\n }\r\n }\r\n };\r\n },\r\n\r\n prefetch: function(skip, take, callback) {\r\n var that = this,\r\n size = math.min(skip + take, that.total()),\r\n options = {\r\n take: take,\r\n skip: skip,\r\n page: skip / take + 1,\r\n pageSize: take,\r\n sort: that._sort,\r\n filter: that._filter,\r\n group: that._group,\r\n aggregate: that._aggregate\r\n };\r\n\r\n if (!that._rangeExists(skip, size)) {\r\n clearTimeout(that._timeout);\r\n\r\n that._timeout = setTimeout(function() {\r\n that._queueRequest(options, function() {\r\n if (!that.trigger(REQUESTSTART, { type: \"read\" })) {\r\n that.transport.read({\r\n data: that._params(options),\r\n success: that._prefetchSuccessHandler(skip, size, callback),\r\n error: function() {\r\n var args = slice.call(arguments);\r\n that.error.apply(that, args);\r\n }\r\n });\r\n } else {\r\n that._dequeueRequest();\r\n }\r\n });\r\n }, 100);\r\n } else if (callback) {\r\n callback();\r\n }\r\n },\r\n\r\n _multiplePrefetch: function(skip, take, callback) {\r\n var that = this,\r\n size = math.min(skip + take, that.total()),\r\n options = {\r\n take: take,\r\n skip: skip,\r\n page: skip / take + 1,\r\n pageSize: take,\r\n sort: that._sort,\r\n filter: that._filter,\r\n group: that._group,\r\n aggregate: that._aggregate\r\n };\r\n\r\n if (!that._rangeExists(skip, size)) {\r\n if (!that.trigger(REQUESTSTART, { type: \"read\" })) {\r\n that.transport.read({\r\n data: that._params(options),\r\n success: that._prefetchSuccessHandler(skip, size, callback, true)\r\n });\r\n }\r\n } else if (callback) {\r\n callback();\r\n }\r\n },\r\n\r\n _rangeExists: function(start, end) {\r\n var that = this,\r\n ranges = that._ranges,\r\n idx,\r\n length;\r\n\r\n for (idx = 0, length = ranges.length; idx < length; idx++) {\r\n if (ranges[idx].start <= start && ranges[idx].end >= end) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n\r\n _removeModelFromRanges: function(model) {\r\n var result,\r\n found,\r\n range;\r\n\r\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\r\n range = this._ranges[idx];\r\n\r\n this._eachItem(range.data, function(items) {\r\n result = removeModel(items, model);\r\n if (result) {\r\n found = true;\r\n }\r\n });\r\n\r\n if (found) {\r\n break;\r\n }\r\n }\r\n },\r\n\r\n _updateRangesLength: function() {\r\n var startOffset = 0,\r\n range,\r\n rangeLength;\r\n\r\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\r\n range = this._ranges[idx];\r\n range.start = range.start - startOffset;\r\n\r\n rangeLength = this._flatData(range.data, true).length;\r\n startOffset = range.end - rangeLength;\r\n range.end = range.start + rangeLength;\r\n }\r\n }\r\n });\r\n\r\n var Transport = {};\r\n\r\n Transport.create = function(options, data, dataSource) {\r\n var transport,\r\n transportOptions = options.transport;\r\n\r\n if (transportOptions) {\r\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\r\n\r\n if (dataSource) {\r\n transportOptions.dataSource = dataSource;\r\n }\r\n\r\n if (options.type) {\r\n kendo.data.transports = kendo.data.transports || {};\r\n kendo.data.schemas = kendo.data.schemas || {};\r\n\r\n if (kendo.data.transports[options.type] && !isPlainObject(kendo.data.transports[options.type])) {\r\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\r\n } else {\r\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\r\n }\r\n\r\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\r\n }\r\n\r\n if (!transport) {\r\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\r\n }\r\n } else {\r\n transport = new LocalTransport({ data: options.data || [] });\r\n }\r\n return transport;\r\n };\r\n\r\n DataSource.create = function(options) {\r\n if (isArray(options) || options instanceof ObservableArray) {\r\n options = { data: options };\r\n }\r\n\r\n var dataSource = options || {},\r\n data = dataSource.data,\r\n fields = dataSource.fields,\r\n table = dataSource.table,\r\n select = dataSource.select,\r\n idx,\r\n length,\r\n model = {},\r\n field;\r\n\r\n if (!data && fields && !dataSource.transport) {\r\n if (table) {\r\n data = inferTable(table, fields);\r\n } else if (select) {\r\n data = inferSelect(select, fields);\r\n\r\n if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\r\n dataSource.group = \"optgroup\";\r\n }\r\n }\r\n }\r\n\r\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\r\n for (idx = 0, length = fields.length; idx < length; idx++) {\r\n field = fields[idx];\r\n if (field.type) {\r\n model[field.field] = field;\r\n }\r\n }\r\n\r\n if (!isEmptyObject(model)) {\r\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\r\n }\r\n }\r\n\r\n dataSource.data = data;\r\n\r\n select = null;\r\n dataSource.select = null;\r\n table = null;\r\n dataSource.table = null;\r\n\r\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\r\n };\r\n\r\n function inferSelect(select, fields) {\r\n select = $(select)[0];\r\n var options = select.options;\r\n var firstField = fields[0];\r\n var secondField = fields[1];\r\n\r\n var data = [];\r\n var idx, length;\r\n var optgroup;\r\n var option;\r\n var record;\r\n var value;\r\n\r\n for (idx = 0, length = options.length; idx < length; idx++) {\r\n record = {};\r\n option = options[idx];\r\n optgroup = option.parentNode;\r\n\r\n if (optgroup === select) {\r\n optgroup = null;\r\n }\r\n\r\n if (option.disabled || (optgroup && optgroup.disabled)) {\r\n continue;\r\n }\r\n\r\n if (optgroup) {\r\n record.optgroup = optgroup.label;\r\n }\r\n\r\n record[firstField.field] = option.text;\r\n\r\n value = option.attributes.value;\r\n\r\n if (value && value.specified) {\r\n value = option.value;\r\n } else {\r\n value = option.text;\r\n }\r\n\r\n record[secondField.field] = value;\r\n\r\n data.push(record);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n function inferTable(table, fields) {\r\n var tbody = $(table)[0].tBodies[0],\r\n rows = tbody ? tbody.rows : [],\r\n idx,\r\n length,\r\n fieldIndex,\r\n fieldCount = fields.length,\r\n data = [],\r\n cells,\r\n record,\r\n cell,\r\n empty;\r\n\r\n for (idx = 0, length = rows.length; idx < length; idx++) {\r\n record = {};\r\n empty = true;\r\n cells = rows[idx].cells;\r\n\r\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\r\n cell = cells[fieldIndex];\r\n if(cell.nodeName.toLowerCase() !== \"th\") {\r\n empty = false;\r\n record[fields[fieldIndex].field] = cell.innerHTML;\r\n }\r\n }\r\n if(!empty) {\r\n data.push(record);\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n\r\n var Node = Model.define({\r\n idField: \"id\",\r\n\r\n init: function(value) {\r\n var that = this,\r\n hasChildren = that.hasChildren || value && value.hasChildren,\r\n childrenField = \"items\",\r\n childrenOptions = {};\r\n\r\n kendo.data.Model.fn.init.call(that, value);\r\n\r\n if (typeof that.children === STRING) {\r\n childrenField = that.children;\r\n }\r\n\r\n childrenOptions = {\r\n schema: {\r\n data: childrenField,\r\n model: {\r\n hasChildren: hasChildren,\r\n id: that.idField,\r\n fields: that.fields\r\n }\r\n }\r\n };\r\n\r\n if (typeof that.children !== STRING) {\r\n extend(childrenOptions, that.children);\r\n }\r\n\r\n childrenOptions.data = value;\r\n\r\n if (!hasChildren) {\r\n hasChildren = childrenOptions.schema.data;\r\n }\r\n\r\n if (typeof hasChildren === STRING) {\r\n hasChildren = kendo.getter(hasChildren);\r\n }\r\n\r\n if (isFunction(hasChildren)) {\r\n that.hasChildren = !!hasChildren.call(that, that);\r\n }\r\n\r\n that._childrenOptions = childrenOptions;\r\n\r\n if (that.hasChildren) {\r\n that._initChildren();\r\n }\r\n\r\n that._loaded = !!(value && (value[childrenField] || value._loaded));\r\n },\r\n\r\n _initChildren: function() {\r\n var that = this;\r\n var children, transport, parameterMap;\r\n\r\n if (!(that.children instanceof HierarchicalDataSource)) {\r\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\r\n\r\n transport = children.transport;\r\n parameterMap = transport.parameterMap;\r\n\r\n transport.parameterMap = function(data, type) {\r\n data[that.idField || \"id\"] = that.id;\r\n\r\n if (parameterMap) {\r\n data = parameterMap(data, type);\r\n }\r\n\r\n return data;\r\n };\r\n\r\n children.parent = function(){\r\n return that;\r\n };\r\n\r\n children.bind(CHANGE, function(e){\r\n e.node = e.node || that;\r\n that.trigger(CHANGE, e);\r\n });\r\n\r\n children.bind(ERROR, function(e){\r\n var collection = that.parent();\r\n\r\n if (collection) {\r\n e.node = e.node || that;\r\n collection.trigger(ERROR, e);\r\n }\r\n });\r\n\r\n that._updateChildrenField();\r\n }\r\n },\r\n\r\n append: function(model) {\r\n this._initChildren();\r\n this.loaded(true);\r\n this.children.add(model);\r\n },\r\n\r\n hasChildren: false,\r\n\r\n level: function() {\r\n var parentNode = this.parentNode(),\r\n level = 0;\r\n\r\n while (parentNode && parentNode.parentNode) {\r\n level++;\r\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\r\n }\r\n\r\n return level;\r\n },\r\n\r\n _updateChildrenField: function() {\r\n var fieldName = this._childrenOptions.schema.data;\r\n\r\n this[fieldName || \"items\"] = this.children.data();\r\n },\r\n\r\n _childrenLoaded: function() {\r\n this._loaded = true;\r\n\r\n this._updateChildrenField();\r\n },\r\n\r\n load: function() {\r\n var options = {};\r\n var method = \"_query\";\r\n var children, promise;\r\n\r\n if (this.hasChildren) {\r\n this._initChildren();\r\n\r\n children = this.children;\r\n\r\n options[this.idField || \"id\"] = this.id;\r\n\r\n if (!this._loaded) {\r\n children._data = undefined;\r\n method = \"read\";\r\n }\r\n\r\n children.one(CHANGE, proxy(this._childrenLoaded, this));\r\n\r\n promise = children[method](options);\r\n } else {\r\n this.loaded(true);\r\n }\r\n\r\n return promise || $.Deferred().resolve().promise();\r\n },\r\n\r\n parentNode: function() {\r\n var array = this.parent();\r\n\r\n return array.parent();\r\n },\r\n\r\n loaded: function(value) {\r\n if (value !== undefined) {\r\n this._loaded = value;\r\n } else {\r\n return this._loaded;\r\n }\r\n },\r\n\r\n shouldSerialize: function(field) {\r\n return Model.fn.shouldSerialize.call(this, field) &&\r\n field !== \"children\" &&\r\n field !== \"_loaded\" &&\r\n field !== \"hasChildren\" &&\r\n field !== \"_childrenOptions\";\r\n }\r\n });\r\n\r\n function dataMethod(name) {\r\n return function() {\r\n var data = this._data,\r\n result = DataSource.fn[name].apply(this, slice.call(arguments));\r\n\r\n if (this._data != data) {\r\n this._attachBubbleHandlers();\r\n }\r\n\r\n return result;\r\n };\r\n }\r\n\r\n var HierarchicalDataSource = DataSource.extend({\r\n init: function(options) {\r\n var node = Node.define({\r\n children: options\r\n });\r\n\r\n DataSource.fn.init.call(this, extend(true, {}, { schema: { modelBase: node, model: node } }, options));\r\n\r\n this._attachBubbleHandlers();\r\n },\r\n\r\n _attachBubbleHandlers: function() {\r\n var that = this;\r\n\r\n that._data.bind(ERROR, function(e) {\r\n that.trigger(ERROR, e);\r\n });\r\n },\r\n\r\n remove: function(node){\r\n var parentNode = node.parentNode(),\r\n dataSource = this,\r\n result;\r\n\r\n if (parentNode && parentNode._initChildren) {\r\n dataSource = parentNode.children;\r\n }\r\n\r\n result = DataSource.fn.remove.call(dataSource, node);\r\n\r\n if (parentNode && !dataSource.data().length) {\r\n parentNode.hasChildren = false;\r\n }\r\n\r\n return result;\r\n },\r\n\r\n success: dataMethod(\"success\"),\r\n\r\n data: dataMethod(\"data\"),\r\n\r\n insert: function(index, model) {\r\n var parentNode = this.parent();\r\n\r\n if (parentNode && parentNode._initChildren) {\r\n parentNode.hasChildren = true;\r\n parentNode._initChildren();\r\n }\r\n\r\n return DataSource.fn.insert.call(this, index, model);\r\n },\r\n\r\n _find: function(method, value) {\r\n var idx, length, node, data, children;\r\n\r\n node = DataSource.fn[method].call(this, value);\r\n\r\n if (node) {\r\n return node;\r\n }\r\n\r\n data = this._flatData(this._data);\r\n\r\n if (!data) {\r\n return;\r\n }\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n children = data[idx].children;\r\n\r\n if (!(children instanceof HierarchicalDataSource)) {\r\n continue;\r\n }\r\n\r\n node = children[method](value);\r\n\r\n if (node) {\r\n return node;\r\n }\r\n }\r\n },\r\n\r\n get: function(id) {\r\n return this._find(\"get\", id);\r\n },\r\n\r\n getByUid: function(uid) {\r\n return this._find(\"getByUid\", uid);\r\n }\r\n });\r\n\r\n function inferList(list, fields) {\r\n var items = $(list).children(),\r\n idx,\r\n length,\r\n data = [],\r\n record,\r\n textField = fields[0].field,\r\n urlField = fields[1] && fields[1].field,\r\n spriteCssClassField = fields[2] && fields[2].field,\r\n imageUrlField = fields[3] && fields[3].field,\r\n item,\r\n id,\r\n textChild,\r\n className,\r\n children;\r\n\r\n function elements(collection, tagName) {\r\n return collection.filter(tagName).add(collection.find(tagName));\r\n }\r\n\r\n for (idx = 0, length = items.length; idx < length; idx++) {\r\n record = { _loaded: true };\r\n item = items.eq(idx);\r\n\r\n textChild = item[0].firstChild;\r\n children = item.children();\r\n list = children.filter(\"ul\");\r\n children = children.filter(\":not(ul)\");\r\n\r\n id = item.attr(\"data-id\");\r\n\r\n if (id) {\r\n record.id = id;\r\n }\r\n\r\n if (textChild) {\r\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\r\n }\r\n\r\n if (urlField) {\r\n record[urlField] = elements(children, \"a\").attr(\"href\");\r\n }\r\n\r\n if (imageUrlField) {\r\n record[imageUrlField] = elements(children, \"img\").attr(\"src\");\r\n }\r\n\r\n if (spriteCssClassField) {\r\n className = elements(children, \".k-sprite\").prop(\"className\");\r\n record[spriteCssClassField] = className && $.trim(className.replace(\"k-sprite\", \"\"));\r\n }\r\n\r\n if (list.length) {\r\n record.items = inferList(list.eq(0), fields);\r\n }\r\n\r\n if (item.attr(\"data-hasChildren\") == \"true\") {\r\n record.hasChildren = true;\r\n }\r\n\r\n data.push(record);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n HierarchicalDataSource.create = function(options) {\r\n options = options && options.push ? { data: options } : options;\r\n\r\n var dataSource = options || {},\r\n data = dataSource.data,\r\n fields = dataSource.fields,\r\n list = dataSource.list;\r\n\r\n if (data && data._dataSource) {\r\n return data._dataSource;\r\n }\r\n\r\n if (!data && fields && !dataSource.transport) {\r\n if (list) {\r\n data = inferList(list, fields);\r\n }\r\n }\r\n\r\n dataSource.data = data;\r\n\r\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\r\n };\r\n\r\n var Buffer = kendo.Observable.extend({\r\n init: function(dataSource, viewSize, disablePrefetch) {\r\n kendo.Observable.fn.init.call(this);\r\n\r\n this._prefetching = false;\r\n this.dataSource = dataSource;\r\n this.prefetch = !disablePrefetch;\r\n\r\n var buffer = this;\r\n\r\n dataSource.bind(\"change\", function() {\r\n buffer._change();\r\n });\r\n\r\n dataSource.bind(\"reset\", function() {\r\n buffer._reset();\r\n });\r\n\r\n this._syncWithDataSource();\r\n\r\n this.setViewSize(viewSize);\r\n },\r\n\r\n setViewSize: function(viewSize) {\r\n this.viewSize = viewSize;\r\n this._recalculate();\r\n },\r\n\r\n at: function(index) {\r\n var pageSize = this.pageSize,\r\n item,\r\n itemPresent = true,\r\n changeTo;\r\n\r\n if (index >= this.total()) {\r\n this.trigger(\"endreached\", {index: index });\r\n return null;\r\n }\r\n\r\n if (!this.useRanges) {\r\n return this.dataSource.view()[index];\r\n }\r\n if (this.useRanges) {\r\n // out of range request\r\n if (index < this.dataOffset || index >= this.skip + pageSize) {\r\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\r\n }\r\n\r\n // prefetch\r\n if (index === this.prefetchThreshold) {\r\n this._prefetch();\r\n }\r\n\r\n // mid-range jump - prefetchThreshold and nextPageThreshold may be equal, do not change to else if\r\n if (index === this.midPageThreshold) {\r\n this.range(this.nextMidRange, true);\r\n }\r\n // next range jump\r\n else if (index === this.nextPageThreshold) {\r\n this.range(this.nextFullRange);\r\n }\r\n // pull-back\r\n else if (index === this.pullBackThreshold) {\r\n if (this.offset === this.skip) { // from full range to mid range\r\n this.range(this.previousMidRange);\r\n } else { // from mid range to full range\r\n this.range(this.previousFullRange);\r\n }\r\n }\r\n\r\n if (itemPresent) {\r\n return this.dataSource.at(index - this.dataOffset);\r\n } else {\r\n this.trigger(\"endreached\", { index: index });\r\n return null;\r\n }\r\n }\r\n },\r\n\r\n indexOf: function(item) {\r\n return this.dataSource.data().indexOf(item) + this.dataOffset;\r\n },\r\n\r\n total: function() {\r\n return parseInt(this.dataSource.total(), 10);\r\n },\r\n\r\n next: function() {\r\n var buffer = this,\r\n pageSize = buffer.pageSize,\r\n offset = buffer.skip - buffer.viewSize + pageSize,\r\n pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\r\n\r\n this.offset = offset;\r\n this.dataSource.prefetch(pageSkip, pageSize, function() {\r\n buffer._goToRange(offset, true);\r\n });\r\n },\r\n\r\n range: function(offset, nextRange) {\r\n if (this.offset === offset) {\r\n return true;\r\n }\r\n\r\n var buffer = this,\r\n pageSize = this.pageSize,\r\n pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize,\r\n dataSource = this.dataSource;\r\n\r\n if (nextRange) {\r\n pageSkip += pageSize;\r\n }\r\n\r\n if (dataSource.inRange(offset, pageSize)) {\r\n this.offset = offset;\r\n this._recalculate();\r\n this._goToRange(offset);\r\n return true;\r\n } else if (this.prefetch) {\r\n dataSource.prefetch(pageSkip, pageSize, function() {\r\n buffer.offset = offset;\r\n buffer._recalculate();\r\n buffer._goToRange(offset, true);\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n },\r\n\r\n syncDataSource: function() {\r\n var offset = this.offset;\r\n this.offset = null;\r\n this.range(offset);\r\n },\r\n\r\n destroy: function() {\r\n this.unbind();\r\n },\r\n\r\n _prefetch: function() {\r\n var buffer = this,\r\n pageSize = this.pageSize,\r\n prefetchOffset = this.skip + pageSize,\r\n dataSource = this.dataSource;\r\n\r\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\r\n this._prefetching = true;\r\n this.trigger(\"prefetching\", { skip: prefetchOffset, take: pageSize });\r\n\r\n dataSource.prefetch(prefetchOffset, pageSize, function() {\r\n buffer._prefetching = false;\r\n buffer.trigger(\"prefetched\", { skip: prefetchOffset, take: pageSize });\r\n });\r\n }\r\n },\r\n\r\n _goToRange: function(offset, expanding) {\r\n if (this.offset !== offset) {\r\n return;\r\n }\r\n\r\n this.dataOffset = offset;\r\n this._expanding = expanding;\r\n this.dataSource.range(offset, this.pageSize);\r\n this.dataSource.enableRequestsInProgress();\r\n },\r\n\r\n _reset: function() {\r\n this._syncPending = true;\r\n },\r\n\r\n _change: function() {\r\n var dataSource = this.dataSource;\r\n\r\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\r\n\r\n if (this._syncPending) {\r\n this._syncWithDataSource();\r\n this._recalculate();\r\n this._syncPending = false;\r\n this.trigger(\"reset\", { offset: this.offset });\r\n }\r\n\r\n this.trigger(\"resize\");\r\n\r\n if (this._expanding) {\r\n this.trigger(\"expand\");\r\n }\r\n\r\n delete this._expanding;\r\n },\r\n\r\n _syncWithDataSource: function() {\r\n var dataSource = this.dataSource;\r\n\r\n this._firstItemUid = dataSource.firstItemUid();\r\n this.dataOffset = this.offset = dataSource.skip() || 0;\r\n this.pageSize = dataSource.pageSize();\r\n this.useRanges = dataSource.options.serverPaging;\r\n },\r\n\r\n _recalculate: function() {\r\n var pageSize = this.pageSize,\r\n offset = this.offset,\r\n viewSize = this.viewSize,\r\n skip = Math.ceil(offset / pageSize) * pageSize;\r\n\r\n this.skip = skip;\r\n this.midPageThreshold = skip + pageSize - 1;\r\n this.nextPageThreshold = skip + viewSize - 1;\r\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\r\n this.pullBackThreshold = this.offset - 1;\r\n\r\n this.nextMidRange = skip + pageSize - viewSize;\r\n this.nextFullRange = skip;\r\n this.previousMidRange = offset - viewSize;\r\n this.previousFullRange = skip - pageSize;\r\n }\r\n });\r\n\r\n var BatchBuffer = kendo.Observable.extend({\r\n init: function(dataSource, batchSize) {\r\n var batchBuffer = this;\r\n\r\n kendo.Observable.fn.init.call(batchBuffer);\r\n\r\n this.dataSource = dataSource;\r\n this.batchSize = batchSize;\r\n this._total = 0;\r\n\r\n this.buffer = new Buffer(dataSource, batchSize * 3);\r\n\r\n this.buffer.bind({\r\n \"endreached\": function (e) {\r\n batchBuffer.trigger(\"endreached\", { index: e.index });\r\n },\r\n \"prefetching\": function (e) {\r\n batchBuffer.trigger(\"prefetching\", { skip: e.skip, take: e.take });\r\n },\r\n \"prefetched\": function (e) {\r\n batchBuffer.trigger(\"prefetched\", { skip: e.skip, take: e.take });\r\n },\r\n \"reset\": function () {\r\n batchBuffer._total = 0;\r\n batchBuffer.trigger(\"reset\");\r\n },\r\n \"resize\": function () {\r\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\r\n batchBuffer.trigger(\"resize\", { total: batchBuffer.total(), offset: this.offset });\r\n }\r\n });\r\n },\r\n\r\n syncDataSource: function() {\r\n this.buffer.syncDataSource();\r\n },\r\n\r\n at: function(index) {\r\n var buffer = this.buffer,\r\n skip = index * this.batchSize,\r\n take = this.batchSize,\r\n view = [],\r\n item;\r\n\r\n if (buffer.offset > skip) {\r\n buffer.at(buffer.offset - 1);\r\n }\r\n\r\n for (var i = 0; i < take; i++) {\r\n item = buffer.at(skip + i);\r\n\r\n if (item === null) {\r\n break;\r\n }\r\n\r\n view.push(item);\r\n }\r\n\r\n return view;\r\n },\r\n\r\n total: function() {\r\n return this._total;\r\n },\r\n\r\n destroy: function() {\r\n this.buffer.destroy();\r\n this.unbind();\r\n }\r\n });\r\n\r\n extend(true, kendo.data, {\r\n readers: {\r\n json: DataReader\r\n },\r\n Query: Query,\r\n DataSource: DataSource,\r\n HierarchicalDataSource: HierarchicalDataSource,\r\n Node: Node,\r\n ObservableObject: ObservableObject,\r\n ObservableArray: ObservableArray,\r\n LazyObservableArray: LazyObservableArray,\r\n LocalTransport: LocalTransport,\r\n RemoteTransport: RemoteTransport,\r\n Cache: Cache,\r\n DataReader: DataReader,\r\n Model: Model,\r\n Buffer: Buffer,\r\n BatchBuffer: BatchBuffer\r\n });\r\n})(window.kendo.jQuery);\r\n\r\n\r\n\r\n(function ($, undefined) {\r\n var kendo = window.kendo,\r\n support = kendo.support,\r\n document = window.document,\r\n Class = kendo.Class,\r\n Observable = kendo.Observable,\r\n now = $.now,\r\n extend = $.extend,\r\n OS = support.mobileOS,\r\n invalidZeroEvents = OS && OS.android,\r\n DEFAULT_MIN_HOLD = 800,\r\n DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, // WP8 and W8 are very sensitive and always report move.\r\n\r\n // UserEvents events\r\n PRESS = \"press\",\r\n HOLD = \"hold\",\r\n SELECT = \"select\",\r\n START = \"start\",\r\n MOVE = \"move\",\r\n END = \"end\",\r\n CANCEL = \"cancel\",\r\n TAP = \"tap\",\r\n RELEASE = \"release\",\r\n GESTURESTART = \"gesturestart\",\r\n GESTURECHANGE = \"gesturechange\",\r\n GESTUREEND = \"gestureend\",\r\n GESTURETAP = \"gesturetap\";\r\n\r\n var THRESHOLD = {\r\n \"api\": 0,\r\n \"touch\": 0,\r\n \"mouse\": 9,\r\n \"pointer\": 9\r\n };\r\n\r\n var ENABLE_GLOBAL_SURFACE = (!support.touch || support.mouseAndTouchPresent);\r\n\r\n function touchDelta(touch1, touch2) {\r\n var x1 = touch1.x.location,\r\n y1 = touch1.y.location,\r\n x2 = touch2.x.location,\r\n y2 = touch2.y.location,\r\n dx = x1 - x2,\r\n dy = y1 - y2;\r\n\r\n return {\r\n center: {\r\n x: (x1 + x2) / 2,\r\n y: (y1 + y2) / 2\r\n },\r\n\r\n distance: Math.sqrt(dx*dx + dy*dy)\r\n };\r\n }\r\n\r\n function getTouches(e) {\r\n var touches = [],\r\n originalEvent = e.originalEvent,\r\n currentTarget = e.currentTarget,\r\n idx = 0, length,\r\n changedTouches,\r\n touch;\r\n\r\n if (e.api) {\r\n touches.push({\r\n id: 2, // hardcoded ID for API call;\r\n event: e,\r\n target: e.target,\r\n currentTarget: e.target,\r\n location: e,\r\n type: \"api\"\r\n });\r\n }\r\n else if (e.type.match(/touch/)) {\r\n changedTouches = originalEvent ? originalEvent.changedTouches : [];\r\n for (length = changedTouches.length; idx < length; idx ++) {\r\n touch = changedTouches[idx];\r\n touches.push({\r\n location: touch,\r\n event: e,\r\n target: touch.target,\r\n currentTarget: currentTarget,\r\n id: touch.identifier,\r\n type: \"touch\"\r\n });\r\n }\r\n }\r\n else if (support.pointers || support.msPointers) {\r\n touches.push({\r\n location: originalEvent,\r\n event: e,\r\n target: e.target,\r\n currentTarget: currentTarget,\r\n id: originalEvent.pointerId,\r\n type: \"pointer\"\r\n });\r\n } else {\r\n touches.push({\r\n id: 1, // hardcoded ID for mouse event;\r\n event: e,\r\n target: e.target,\r\n currentTarget: currentTarget,\r\n location: e,\r\n type: \"mouse\"\r\n });\r\n }\r\n\r\n return touches;\r\n }\r\n\r\n var TouchAxis = Class.extend({\r\n init: function(axis, location) {\r\n var that = this;\r\n\r\n that.axis = axis;\r\n\r\n that._updateLocationData(location);\r\n\r\n that.startLocation = that.location;\r\n that.velocity = that.delta = 0;\r\n that.timeStamp = now();\r\n },\r\n\r\n move: function(location) {\r\n var that = this,\r\n offset = location[\"page\" + that.axis],\r\n timeStamp = now(),\r\n timeDelta = (timeStamp - that.timeStamp) || 1; // Firing manually events in tests can make this 0;\r\n\r\n if (!offset && invalidZeroEvents) {\r\n return;\r\n }\r\n\r\n that.delta = offset - that.location;\r\n\r\n that._updateLocationData(location);\r\n\r\n that.initialDelta = offset - that.startLocation;\r\n that.velocity = that.delta / timeDelta;\r\n that.timeStamp = timeStamp;\r\n },\r\n\r\n _updateLocationData: function(location) {\r\n var that = this, axis = that.axis;\r\n\r\n that.location = location[\"page\" + axis];\r\n that.client = location[\"client\" + axis];\r\n that.screen = location[\"screen\" + axis];\r\n }\r\n });\r\n\r\n var Touch = Class.extend({\r\n init: function(userEvents, target, touchInfo) {\r\n extend(this, {\r\n x: new TouchAxis(\"X\", touchInfo.location),\r\n y: new TouchAxis(\"Y\", touchInfo.location),\r\n type: touchInfo.type,\r\n threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\r\n userEvents: userEvents,\r\n target: target,\r\n currentTarget: touchInfo.currentTarget,\r\n initialTouch: touchInfo.target,\r\n id: touchInfo.id,\r\n pressEvent: touchInfo,\r\n _moved: false,\r\n _finished: false\r\n });\r\n },\r\n\r\n press: function() {\r\n this._holdTimeout = setTimeout($.proxy(this, \"_hold\"), this.userEvents.minHold);\r\n this._trigger(PRESS, this.pressEvent);\r\n },\r\n\r\n _hold: function() {\r\n this._trigger(HOLD, this.pressEvent);\r\n },\r\n\r\n move: function(touchInfo) {\r\n var that = this;\r\n\r\n if (that._finished) { return; }\r\n\r\n that.x.move(touchInfo.location);\r\n that.y.move(touchInfo.location);\r\n\r\n if (!that._moved) {\r\n if (that._withinIgnoreThreshold()) {\r\n return;\r\n }\r\n\r\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\r\n that._start(touchInfo);\r\n } else {\r\n return that.dispose();\r\n }\r\n }\r\n\r\n // Event handlers may cancel the drag in the START event handler, hence the double check for pressed.\r\n if (!that._finished) {\r\n that._trigger(MOVE, touchInfo);\r\n }\r\n },\r\n\r\n end: function(touchInfo) {\r\n var that = this;\r\n\r\n that.endTime = now();\r\n\r\n if (that._finished) { return; }\r\n\r\n // Mark the object as finished if there are blocking operations in the event handlers (alert/confirm)\r\n that._finished = true;\r\n\r\n that._trigger(RELEASE, touchInfo); // Release should be fired before TAP (as click is after mouseup/touchend)\r\n\r\n if (that._moved) {\r\n that._trigger(END, touchInfo);\r\n } else {\r\n that._trigger(TAP, touchInfo);\r\n }\r\n\r\n clearTimeout(that._holdTimeout);\r\n\r\n that.dispose();\r\n },\r\n\r\n dispose: function() {\r\n var userEvents = this.userEvents,\r\n activeTouches = userEvents.touches;\r\n\r\n this._finished = true;\r\n this.pressEvent = null;\r\n clearTimeout(this._holdTimeout);\r\n\r\n activeTouches.splice($.inArray(this, activeTouches), 1);\r\n },\r\n\r\n skip: function() {\r\n this.dispose();\r\n },\r\n\r\n cancel: function() {\r\n this.dispose();\r\n },\r\n\r\n isMoved: function() {\r\n return this._moved;\r\n },\r\n\r\n _start: function(touchInfo) {\r\n clearTimeout(this._holdTimeout);\r\n\r\n this.startTime = now();\r\n this._moved = true;\r\n this._trigger(START, touchInfo);\r\n },\r\n\r\n _trigger: function(name, touchInfo) {\r\n var that = this,\r\n jQueryEvent = touchInfo.event,\r\n data = {\r\n touch: that,\r\n x: that.x,\r\n y: that.y,\r\n target: that.target,\r\n event: jQueryEvent\r\n };\r\n\r\n if(that.userEvents.notify(name, data)) {\r\n jQueryEvent.preventDefault();\r\n }\r\n },\r\n\r\n _withinIgnoreThreshold: function() {\r\n var xDelta = this.x.initialDelta,\r\n yDelta = this.y.initialDelta;\r\n\r\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\r\n }\r\n });\r\n\r\n function withEachUpEvent(callback) {\r\n var downEvents = kendo.eventMap.up.split(\" \"),\r\n idx = 0,\r\n length = downEvents.length;\r\n\r\n for(; idx < length; idx ++) {\r\n callback(downEvents[idx]);\r\n }\r\n }\r\n\r\n var UserEvents = Observable.extend({\r\n init: function(element, options) {\r\n var that = this,\r\n filter,\r\n ns = kendo.guid();\r\n\r\n options = options || {};\r\n filter = that.filter = options.filter;\r\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\r\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\r\n that.touches = [];\r\n that._maxTouches = options.multiTouch ? 2 : 1;\r\n that.allowSelection = options.allowSelection;\r\n that.captureUpIfMoved = options.captureUpIfMoved;\r\n that.eventNS = ns;\r\n\r\n element = $(element).handler(that);\r\n Observable.fn.init.call(that);\r\n\r\n extend(that, {\r\n element: element,\r\n // the touch events lock to the element anyway, so no need for the global setting\r\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(document.documentElement) : $(options.surface || element),\r\n stopPropagation: options.stopPropagation,\r\n pressed: false\r\n });\r\n\r\n that.surface.handler(that)\r\n .on(kendo.applyEventMap(\"move\", ns), \"_move\")\r\n .on(kendo.applyEventMap(\"up cancel\", ns), \"_end\");\r\n\r\n element.on(kendo.applyEventMap(\"down\", ns), filter, \"_start\");\r\n\r\n if (support.pointers || support.msPointers) {\r\n element.css(\"-ms-touch-action\", \"pinch-zoom double-tap-zoom\");\r\n }\r\n\r\n if (options.preventDragEvent) {\r\n element.on(kendo.applyEventMap(\"dragstart\", ns), kendo.preventDefault);\r\n }\r\n\r\n element.on(kendo.applyEventMap(\"mousedown\", ns), filter, { root: element }, \"_select\");\r\n\r\n if (that.captureUpIfMoved && support.eventCapture) {\r\n var surfaceElement = that.surface[0],\r\n preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\r\n\r\n withEachUpEvent(function(eventName) {\r\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\r\n });\r\n }\r\n\r\n that.bind([\r\n PRESS,\r\n HOLD,\r\n TAP,\r\n START,\r\n MOVE,\r\n END,\r\n RELEASE,\r\n CANCEL,\r\n GESTURESTART,\r\n GESTURECHANGE,\r\n GESTUREEND,\r\n GESTURETAP,\r\n SELECT\r\n ], options);\r\n },\r\n\r\n preventIfMoving: function(e) {\r\n if (this._isMoved()) {\r\n e.preventDefault();\r\n }\r\n },\r\n\r\n destroy: function() {\r\n var that = this;\r\n\r\n if (that._destroyed) {\r\n return;\r\n }\r\n\r\n that._destroyed = true;\r\n\r\n if (that.captureUpIfMoved && support.eventCapture) {\r\n var surfaceElement = that.surface[0];\r\n withEachUpEvent(function(eventName) {\r\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\r\n });\r\n }\r\n\r\n that.element.kendoDestroy(that.eventNS);\r\n that.surface.kendoDestroy(that.eventNS);\r\n that.element.removeData(\"handler\");\r\n that.surface.removeData(\"handler\");\r\n that._disposeAll();\r\n\r\n that.unbind();\r\n delete that.surface;\r\n delete that.element;\r\n delete that.currentTarget;\r\n },\r\n\r\n capture: function() {\r\n UserEvents.current = this;\r\n },\r\n\r\n cancel: function() {\r\n this._disposeAll();\r\n this.trigger(CANCEL);\r\n },\r\n\r\n notify: function(eventName, data) {\r\n var that = this,\r\n touches = that.touches;\r\n\r\n if (this._isMultiTouch()) {\r\n switch(eventName) {\r\n case MOVE:\r\n eventName = GESTURECHANGE;\r\n break;\r\n case END:\r\n eventName = GESTUREEND;\r\n break;\r\n case TAP:\r\n eventName = GESTURETAP;\r\n break;\r\n }\r\n\r\n extend(data, {touches: touches}, touchDelta(touches[0], touches[1]));\r\n }\r\n\r\n return this.trigger(eventName, extend(data, {type: eventName}));\r\n },\r\n\r\n // API\r\n press: function(x, y, target) {\r\n this._apiCall(\"_start\", x, y, target);\r\n },\r\n\r\n move: function(x, y) {\r\n this._apiCall(\"_move\", x, y);\r\n },\r\n\r\n end: function(x, y) {\r\n this._apiCall(\"_end\", x, y);\r\n },\r\n\r\n _isMultiTouch: function() {\r\n return this.touches.length > 1;\r\n },\r\n\r\n _maxTouchesReached: function() {\r\n return this.touches.length >= this._maxTouches;\r\n },\r\n\r\n _disposeAll: function() {\r\n var touches = this.touches;\r\n while (touches.length > 0) {\r\n touches.pop().dispose();\r\n }\r\n },\r\n\r\n _isMoved: function() {\r\n return $.grep(this.touches, function(touch) {\r\n return touch.isMoved();\r\n }).length;\r\n },\r\n\r\n _select: function(e) {\r\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\r\n e.preventDefault();\r\n }\r\n },\r\n\r\n _start: function(e) {\r\n var that = this,\r\n idx = 0,\r\n filter = that.filter,\r\n target,\r\n touches = getTouches(e),\r\n length = touches.length,\r\n touch,\r\n which = e.which;\r\n\r\n if ((which && which > 1) || (that._maxTouchesReached())){\r\n return;\r\n }\r\n\r\n UserEvents.current = null;\r\n\r\n that.currentTarget = e.currentTarget;\r\n\r\n if (that.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n\r\n for (; idx < length; idx ++) {\r\n if (that._maxTouchesReached()) {\r\n break;\r\n }\r\n\r\n touch = touches[idx];\r\n\r\n if (filter) {\r\n target = $(touch.currentTarget); // target.is(filter) ? target : target.closest(filter, that.element);\r\n } else {\r\n target = that.element;\r\n }\r\n\r\n if (!target.length) {\r\n continue;\r\n }\r\n\r\n touch = new Touch(that, target, touch);\r\n that.touches.push(touch);\r\n touch.press();\r\n\r\n if (that._isMultiTouch()) {\r\n that.notify(\"gesturestart\", {});\r\n }\r\n }\r\n },\r\n\r\n _move: function(e) {\r\n this._eachTouch(\"move\", e);\r\n },\r\n\r\n _end: function(e) {\r\n this._eachTouch(\"end\", e);\r\n },\r\n\r\n _eachTouch: function(methodName, e) {\r\n var that = this,\r\n dict = {},\r\n touches = getTouches(e),\r\n activeTouches = that.touches,\r\n idx,\r\n touch,\r\n touchInfo,\r\n matchingTouch;\r\n\r\n for (idx = 0; idx < activeTouches.length; idx ++) {\r\n touch = activeTouches[idx];\r\n dict[touch.id] = touch;\r\n }\r\n\r\n for (idx = 0; idx < touches.length; idx ++) {\r\n touchInfo = touches[idx];\r\n matchingTouch = dict[touchInfo.id];\r\n\r\n if (matchingTouch) {\r\n matchingTouch[methodName](touchInfo);\r\n }\r\n }\r\n },\r\n\r\n _apiCall: function(type, x, y, target) {\r\n this[type]({\r\n api: true,\r\n pageX: x,\r\n pageY: y,\r\n clientX: x,\r\n clientY: y,\r\n target: $(target || this.element)[0],\r\n stopPropagation: $.noop,\r\n preventDefault: $.noop\r\n });\r\n }\r\n });\r\n\r\n UserEvents.defaultThreshold = function(value) {\r\n DEFAULT_THRESHOLD = value;\r\n };\r\n\r\n UserEvents.minHold = function(value) {\r\n DEFAULT_MIN_HOLD = value;\r\n };\r\n\r\n kendo.getTouches = getTouches;\r\n kendo.touchDelta = touchDelta;\r\n kendo.UserEvents = UserEvents;\r\n })(window.kendo.jQuery);\r\n\r\n\r\n\r\n(function ($, parseFloat, parseInt) {\r\n var Color = function(value) {\r\n var color = this,\r\n formats = Color.formats,\r\n re,\r\n processor,\r\n parts,\r\n i,\r\n channels;\r\n\r\n if (arguments.length === 1) {\r\n value = color.resolveColor(value);\r\n\r\n for (i = 0; i < formats.length; i++) {\r\n re = formats[i].re;\r\n processor = formats[i].process;\r\n parts = re.exec(value);\r\n\r\n if (parts) {\r\n channels = processor(parts);\r\n color.r = channels[0];\r\n color.g = channels[1];\r\n color.b = channels[2];\r\n }\r\n }\r\n } else {\r\n color.r = arguments[0];\r\n color.g = arguments[1];\r\n color.b = arguments[2];\r\n }\r\n\r\n color.r = color.normalizeByte(color.r);\r\n color.g = color.normalizeByte(color.g);\r\n color.b = color.normalizeByte(color.b);\r\n };\r\n\r\n Color.prototype = {\r\n toHex: function() {\r\n var color = this,\r\n pad = color.padDigit,\r\n r = color.r.toString(16),\r\n g = color.g.toString(16),\r\n b = color.b.toString(16);\r\n\r\n return \"#\" + pad(r) + pad(g) + pad(b);\r\n },\r\n\r\n resolveColor: function(value) {\r\n value = value || \"black\";\r\n\r\n if (value.charAt(0) == \"#\") {\r\n value = value.substr(1, 6);\r\n }\r\n\r\n value = value.replace(/ /g, \"\");\r\n value = value.toLowerCase();\r\n value = Color.namedColors[value] || value;\r\n\r\n return value;\r\n },\r\n\r\n normalizeByte: function(value) {\r\n return (value < 0 || isNaN(value)) ? 0 : ((value > 255) ? 255 : value);\r\n },\r\n\r\n padDigit: function(value) {\r\n return (value.length === 1) ? \"0\" + value : value;\r\n },\r\n\r\n brightness: function(value) {\r\n var color = this,\r\n round = Math.round;\r\n\r\n color.r = round(color.normalizeByte(color.r * value));\r\n color.g = round(color.normalizeByte(color.g * value));\r\n color.b = round(color.normalizeByte(color.b * value));\r\n\r\n return color;\r\n },\r\n\r\n percBrightness: function() {\r\n var color = this;\r\n\r\n return Math.sqrt(0.241 * color.r * color.r + 0.691 * color.g * color.g + 0.068 * color.b * color.b);\r\n }\r\n };\r\n\r\n Color.formats = [{\r\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\r\n process: function(parts) {\r\n return [\r\n parseInt(parts[1], 10), parseInt(parts[2], 10), parseInt(parts[3], 10)\r\n ];\r\n }\r\n }, {\r\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\r\n process: function(parts) {\r\n return [\r\n parseInt(parts[1], 16), parseInt(parts[2], 16), parseInt(parts[3], 16)\r\n ];\r\n }\r\n }, {\r\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\r\n process: function(parts) {\r\n return [\r\n parseInt(parts[1] + parts[1], 16),\r\n parseInt(parts[2] + parts[2], 16),\r\n parseInt(parts[3] + parts[3], 16)\r\n ];\r\n }\r\n }\r\n ];\r\n\r\n Color.namedColors = {\r\n aqua: \"00ffff\", azure: \"f0ffff\", beige: \"f5f5dc\",\r\n black: \"000000\", blue: \"0000ff\", brown: \"a52a2a\",\r\n coral: \"ff7f50\", cyan: \"00ffff\", darkblue: \"00008b\",\r\n darkcyan: \"008b8b\", darkgray: \"a9a9a9\", darkgreen: \"006400\",\r\n darkorange: \"ff8c00\", darkred: \"8b0000\", dimgray: \"696969\",\r\n fuchsia: \"ff00ff\", gold: \"ffd700\", goldenrod: \"daa520\",\r\n gray: \"808080\", green: \"008000\", greenyellow: \"adff2f\",\r\n indigo: \"4b0082\", ivory: \"fffff0\", khaki: \"f0e68c\",\r\n lightblue: \"add8e6\", lightgrey: \"d3d3d3\", lightgreen: \"90ee90\",\r\n lightpink: \"ffb6c1\", lightyellow: \"ffffe0\", lime: \"00ff00\",\r\n limegreen: \"32cd32\", linen: \"faf0e6\", magenta: \"ff00ff\",\r\n maroon: \"800000\", mediumblue: \"0000cd\", navy: \"000080\",\r\n olive: \"808000\", orange: \"ffa500\", orangered: \"ff4500\",\r\n orchid: \"da70d6\", pink: \"ffc0cb\", plum: \"dda0dd\",\r\n purple: \"800080\", red: \"ff0000\", royalblue: \"4169e1\",\r\n salmon: \"fa8072\", silver: \"c0c0c0\", skyblue: \"87ceeb\",\r\n slateblue: \"6a5acd\", slategray: \"708090\", snow: \"fffafa\",\r\n steelblue: \"4682b4\", tan: \"d2b48c\", teal: \"008080\",\r\n tomato: \"ff6347\", turquoise: \"40e0d0\", violet: \"ee82ee\",\r\n wheat: \"f5deb3\", white: \"ffffff\", whitesmoke: \"f5f5f5\",\r\n yellow: \"ffff00\", yellowgreen: \"9acd32\"\r\n };\r\n\r\n // Tools from ColorPicker =================================================\r\n\r\n var namedColorRegexp = [ \"transparent\" ];\r\n for (var i in Color.namedColors) {\r\n if (Color.namedColors.hasOwnProperty(i)) {\r\n namedColorRegexp.push(i);\r\n }\r\n }\r\n namedColorRegexp = new RegExp(\"^(\" + namedColorRegexp.join(\"|\") + \")(\\\\W|$)\", \"i\");\r\n\r\n /*jshint eqnull:true */\r\n\r\n function parseColor(color, nothrow) {\r\n var m, ret;\r\n if (color == null || color == \"none\") {\r\n return null;\r\n }\r\n if (color instanceof _Color) {\r\n return color;\r\n }\r\n color = color.toLowerCase();\r\n if ((m = namedColorRegexp.exec(color))) {\r\n if (m[1] == \"transparent\") {\r\n color = new _RGB(1, 1, 1, 0);\r\n }\r\n else {\r\n color = parseColor(Color.namedColors[m[1]], nothrow);\r\n }\r\n color.match = [ m[1] ];\r\n return color;\r\n }\r\n if ((m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color))) {\r\n ret = new _Bytes(parseInt(m[1], 16),\r\n parseInt(m[2], 16),\r\n parseInt(m[3], 16), 1);\r\n }\r\n else if ((m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color))) {\r\n ret = new _Bytes(parseInt(m[1] + m[1], 16),\r\n parseInt(m[2] + m[2], 16),\r\n parseInt(m[3] + m[3], 16), 1);\r\n }\r\n else if ((m = /^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/.exec(color))) {\r\n ret = new _Bytes(parseInt(m[1], 10),\r\n parseInt(m[2], 10),\r\n parseInt(m[3], 10), 1);\r\n }\r\n else if ((m = /^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color))) {\r\n ret = new _Bytes(parseInt(m[1], 10),\r\n parseInt(m[2], 10),\r\n parseInt(m[3], 10), parseFloat(m[4]));\r\n }\r\n else if ((m = /^rgb\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*\\)/.exec(color))) {\r\n ret = new _RGB(parseFloat(m[1]) / 100,\r\n parseFloat(m[2]) / 100,\r\n parseFloat(m[3]) / 100, 1);\r\n }\r\n else if ((m = /^rgba\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color))) {\r\n ret = new _RGB(parseFloat(m[1]) / 100,\r\n parseFloat(m[2]) / 100,\r\n parseFloat(m[3]) / 100, parseFloat(m[4]));\r\n }\r\n if (ret) {\r\n ret.match = m;\r\n } else if (!nothrow) {\r\n throw new Error(\"Cannot parse color: \" + color);\r\n }\r\n return ret;\r\n }\r\n\r\n function hex(n, width, pad) {\r\n if (!pad) { pad = \"0\"; }\r\n n = n.toString(16);\r\n while (width > n.length) {\r\n n = \"0\" + n;\r\n }\r\n return n;\r\n }\r\n\r\n var _Color = kendo.Class.extend({\r\n toHSV: function() { return this; },\r\n toRGB: function() { return this; },\r\n toHex: function() { return this.toBytes().toHex(); },\r\n toBytes: function() { return this; },\r\n toCss: function() { return \"#\" + this.toHex(); },\r\n toCssRgba: function() {\r\n var rgb = this.toBytes();\r\n return \"rgba(\" + rgb.r + \", \" + rgb.g + \", \" + rgb.b + \", \" + parseFloat((+this.a).toFixed(3)) + \")\";\r\n },\r\n toDisplay: function() {\r\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\r\n return this.toCss(); // no RGBA support; does it support any opacity in colors?\r\n }\r\n return this.toCssRgba();\r\n },\r\n equals: function(c) { return c === this || c !== null && this.toCssRgba() == parseColor(c).toCssRgba(); },\r\n diff: function(c2) {\r\n if (c2 == null) {\r\n return NaN;\r\n }\r\n var c1 = this.toBytes();\r\n c2 = c2.toBytes();\r\n return Math.sqrt(Math.pow((c1.r - c2.r) * 0.30, 2) +\r\n Math.pow((c1.g - c2.g) * 0.59, 2) +\r\n Math.pow((c1.b - c2.b) * 0.11, 2));\r\n },\r\n clone: function() {\r\n var c = this.toBytes();\r\n if (c === this) {\r\n c = new _Bytes(c.r, c.g, c.b, c.a);\r\n }\r\n return c;\r\n }\r\n });\r\n\r\n var _RGB = _Color.extend({\r\n init: function(r, g, b, a) {\r\n this.r = r; this.g = g; this.b = b; this.a = a;\r\n },\r\n toHSV: function() {\r\n var min, max, delta, h, s, v;\r\n var r = this.r, g = this.g, b = this.b;\r\n min = Math.min(r, g, b);\r\n max = Math.max(r, g, b);\r\n v = max;\r\n delta = max - min;\r\n if (delta === 0) {\r\n return new _HSV(0, 0, v, this.a);\r\n }\r\n if (max !== 0) {\r\n s = delta / max;\r\n if (r == max) {\r\n h = (g - b) / delta;\r\n } else if (g == max) {\r\n h = 2 + (b - r) / delta;\r\n } else {\r\n h = 4 + (r - g) / delta;\r\n }\r\n h *= 60;\r\n if (h < 0) {\r\n h += 360;\r\n }\r\n } else {\r\n s = 0;\r\n h = -1;\r\n }\r\n return new _HSV(h, s, v, this.a);\r\n },\r\n toBytes: function() {\r\n return new _Bytes(this.r * 255, this.g * 255, this.b * 255, this.a);\r\n }\r\n });\r\n\r\n var _Bytes = _RGB.extend({\r\n init: function(r, g, b, a) {\r\n this.r = Math.round(r); this.g = Math.round(g); this.b = Math.round(b); this.a = a;\r\n },\r\n toRGB: function() {\r\n return new _RGB(this.r / 255, this.g / 255, this.b / 255, this.a);\r\n },\r\n toHSV: function() {\r\n return this.toRGB().toHSV();\r\n },\r\n toHex: function() {\r\n return hex(this.r, 2) + hex(this.g, 2) + hex(this.b, 2);\r\n },\r\n toBytes: function() {\r\n return this;\r\n }\r\n });\r\n\r\n var _HSV = _Color.extend({\r\n init: function(h, s, v, a) {\r\n this.h = h; this.s = s; this.v = v; this.a = a;\r\n },\r\n toRGB: function() {\r\n var h = this.h, s = this.s, v = this.v;\r\n var i, r, g, b, f, p, q, t;\r\n if (s === 0) {\r\n r = g = b = v;\r\n } else {\r\n h /= 60;\r\n i = Math.floor(h);\r\n f = h - i;\r\n p = v * (1 - s);\r\n q = v * (1 - s * f);\r\n t = v * (1 - s * (1 - f));\r\n switch (i) {\r\n case 0 : r = v; g = t; b = p; break;\r\n case 1 : r = q; g = v; b = p; break;\r\n case 2 : r = p; g = v; b = t; break;\r\n case 3 : r = p; g = q; b = v; break;\r\n case 4 : r = t; g = p; b = v; break;\r\n default : r = v; g = p; b = q; break;\r\n }\r\n }\r\n return new _RGB(r, g, b, this.a);\r\n },\r\n toBytes: function() {\r\n return this.toRGB().toBytes();\r\n }\r\n });\r\n\r\n Color.fromBytes = function(r, g, b, a) {\r\n return new _Bytes(r, g, b, a != null ? a : 1);\r\n };\r\n\r\n Color.fromRGB = function(r, g, b, a) {\r\n return new _RGB(r, g, b, a != null ? a : 1);\r\n };\r\n\r\n Color.fromHSV = function(h, s, v, a) {\r\n return new _HSV(h, s, v, a != null ? a : 1);\r\n };\r\n\r\n // Exports ================================================================\r\n kendo.Color = Color;\r\n kendo.parseColor = parseColor;\r\n\r\n})(window.kendo.jQuery, parseFloat, parseInt);\r\n\r\n\r\n\r\n(function ($) {\r\n // Imports ================================================================\r\n var math = Math,\r\n kendo = window.kendo,\r\n deepExtend = kendo.deepExtend,\r\n dataviz = kendo.dataviz;\r\n\r\n // Constants\r\n var DEG_TO_RAD = math.PI / 180,\r\n MAX_NUM = Number.MAX_VALUE,\r\n MIN_NUM = -Number.MAX_VALUE,\r\n UNDEFINED = \"undefined\",\r\n inArray = $.inArray,\r\n push = [].push,\r\n pop = [].pop,\r\n splice = [].splice,\r\n shift = [].shift,\r\n slice = [].slice,\r\n unshift = [].unshift;\r\n\r\n // Generic utility functions ==============================================\r\n function defined(value) {\r\n return typeof value !== UNDEFINED;\r\n }\r\n\r\n function round(value, precision) {\r\n var power = pow(precision);\r\n return math.round(value * power) / power;\r\n }\r\n\r\n // Extracted from round to get on the V8 \"fast path\"\r\n function pow(p) {\r\n if (p) {\r\n return math.pow(10, p);\r\n } else {\r\n return 1;\r\n }\r\n }\r\n\r\n function limitValue(value, min, max) {\r\n return math.max(math.min(value, max), min);\r\n }\r\n\r\n function rad(degrees) {\r\n return degrees * DEG_TO_RAD;\r\n }\r\n\r\n function deg(radians) {\r\n return radians / DEG_TO_RAD;\r\n }\r\n\r\n function isNumber(val) {\r\n return typeof val === \"number\" && !isNaN(val);\r\n }\r\n\r\n function valueOrDefault(value, defaultValue) {\r\n return defined(value) ? value : defaultValue;\r\n }\r\n\r\n function sqr(value) {\r\n return value * value;\r\n }\r\n\r\n function objectKey(object) {\r\n var parts = [];\r\n for (var key in object) {\r\n parts.push(key + object[key]);\r\n }\r\n\r\n return parts.sort().join(\"\");\r\n }\r\n\r\n // Computes FNV-1 hash\r\n // See http://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function\r\n function hashKey(str) {\r\n // 32-bit FNV-1 offset basis\r\n // See http://isthe.com/chongo/tech/comp/fnv/#FNV-param\r\n var hash = 0x811C9DC5;\r\n\r\n for (var i = 0; i < str.length; ++i)\r\n {\r\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\r\n hash ^= str.charCodeAt(i);\r\n }\r\n\r\n return hash >>> 0;\r\n }\r\n\r\n function hashObject(object) {\r\n return hashKey(objectKey(object));\r\n }\r\n\r\n var now = Date.now;\r\n if (!now) {\r\n now = function() {\r\n return new Date().getTime();\r\n }\r\n }\r\n\r\n // Array helpers ==========================================================\r\n function arrayLimits(arr) {\r\n var length = arr.length,\r\n i,\r\n min = MAX_NUM,\r\n max = MIN_NUM;\r\n\r\n for (i = 0; i < length; i ++) {\r\n max = math.max(max, arr[i]);\r\n min = math.min(min, arr[i]);\r\n }\r\n\r\n return {\r\n min: min,\r\n max: max\r\n };\r\n }\r\n\r\n function arrayMin(arr) {\r\n return arrayLimits(arr).min;\r\n }\r\n\r\n function arrayMax(arr) {\r\n return arrayLimits(arr).max;\r\n }\r\n\r\n function sparseArrayMin(arr) {\r\n return sparseArrayLimits(arr).min;\r\n }\r\n\r\n function sparseArrayMax(arr) {\r\n return sparseArrayLimits(arr).max;\r\n }\r\n\r\n function sparseArrayLimits(arr) {\r\n var min = MAX_NUM,\r\n max = MIN_NUM;\r\n\r\n for (var i = 0, length = arr.length; i < length; i++) {\r\n var n = arr[i];\r\n if (n !== null && isFinite(n)) {\r\n min = math.min(min, n);\r\n max = math.max(max, n);\r\n }\r\n }\r\n\r\n return {\r\n min: min === MAX_NUM ? undefined : min,\r\n max: max === MIN_NUM ? undefined : max\r\n };\r\n }\r\n\r\n function last(array) {\r\n if (array) {\r\n return array[array.length - 1];\r\n }\r\n }\r\n\r\n function append(first, second) {\r\n first.push.apply(first, second);\r\n return first;\r\n }\r\n\r\n // Template helpers =======================================================\r\n function renderTemplate(text) {\r\n return kendo.template(text, { useWithBlock: false, paramName: \"d\" });\r\n }\r\n\r\n function renderAttr(name, value) {\r\n return (defined(value) && value !== null) ? \" \" + name + \"='\" + value + \"' \" : \"\";\r\n }\r\n\r\n function renderAllAttr(attrs) {\r\n var output = \"\";\r\n for (var i = 0; i < attrs.length; i++) {\r\n output += renderAttr(attrs[i][0], attrs[i][1]);\r\n }\r\n\r\n return output;\r\n }\r\n\r\n function renderStyle(attrs) {\r\n var output = \"\";\r\n for (var i = 0; i < attrs.length; i++) {\r\n var value = attrs[i][1];\r\n if (defined(value)) {\r\n output += attrs[i][0] + \":\" + value + \";\";\r\n }\r\n }\r\n\r\n if (output !== \"\") {\r\n return output;\r\n }\r\n }\r\n\r\n function renderSize(size) {\r\n if (typeof size !== \"string\") {\r\n size += \"px\";\r\n }\r\n\r\n return size;\r\n }\r\n\r\n function renderPos(pos) {\r\n var result = [];\r\n\r\n if (pos) {\r\n var parts = kendo.toHyphens(pos).split(\"-\");\r\n\r\n for (var i = 0; i < parts.length; i++) {\r\n result.push(\"k-pos-\" + parts[i]);\r\n }\r\n }\r\n\r\n return result.join(\" \");\r\n }\r\n\r\n function isTransparent(color) {\r\n return color === \"\" || color === null || color === \"none\" || color === \"transparent\" || !defined(color);\r\n }\r\n\r\n // Exports ================================================================\r\n deepExtend(kendo, {\r\n util: {\r\n MAX_NUM: MAX_NUM,\r\n MIN_NUM: MIN_NUM,\r\n\r\n append: append,\r\n arrayLimits: arrayLimits,\r\n arrayMin: arrayMin,\r\n arrayMax: arrayMax,\r\n defined: defined,\r\n deg: deg,\r\n hashKey: hashKey,\r\n hashObject: hashObject,\r\n isNumber: isNumber,\r\n isTransparent: isTransparent,\r\n last: last,\r\n limitValue: limitValue,\r\n now: now,\r\n objectKey: objectKey,\r\n round: round,\r\n rad: rad,\r\n renderAttr: renderAttr,\r\n renderAllAttr: renderAllAttr,\r\n renderPos: renderPos,\r\n renderSize: renderSize,\r\n renderStyle: renderStyle,\r\n renderTemplate: renderTemplate,\r\n sparseArrayLimits: sparseArrayLimits,\r\n sparseArrayMin: sparseArrayMin,\r\n sparseArrayMax: sparseArrayMax,\r\n sqr: sqr,\r\n valueOrDefault: valueOrDefault\r\n }\r\n });\r\n\r\n kendo.dataviz.util = kendo.util;\r\n\r\n})(window.kendo.jQuery);\r\n\r\n\r\n\r\n(function ($) {\r\n // Imports ================================================================\r\n var kendo = window.kendo,\r\n deepExtend = kendo.deepExtend,\r\n fromCharCode = String.fromCharCode;\r\n\r\n // Constants\r\n var KEY_STR = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n\r\n // Generic utility functions ==============================================\r\n function encodeBase64(input) {\r\n var output = \"\";\r\n var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\r\n var i = 0;\r\n\r\n input = encodeUTF8(input);\r\n\r\n while (i < input.length) {\r\n\r\n chr1 = input.charCodeAt(i++);\r\n chr2 = input.charCodeAt(i++);\r\n chr3 = input.charCodeAt(i++);\r\n\r\n enc1 = chr1 >> 2;\r\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\r\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\r\n enc4 = chr3 & 63;\r\n\r\n if (isNaN(chr2)) {\r\n enc3 = enc4 = 64;\r\n }\r\n else if (isNaN(chr3)) {\r\n enc4 = 64;\r\n }\r\n\r\n output = output +\r\n KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) +\r\n KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\r\n }\r\n\r\n return output;\r\n }\r\n\r\n function encodeUTF8(input) {\r\n var output = \"\";\r\n\r\n for (var i = 0; i < input.length; i++) {\r\n var c = input.charCodeAt(i);\r\n\r\n if (c < 0x80) {\r\n // One byte\r\n output += fromCharCode(c);\r\n }\r\n else if(c < 0x800) {\r\n // Two bytes\r\n output += fromCharCode(0xC0 | (c >>> 6));\r\n output += fromCharCode(0x80 | (c & 0x3f));\r\n }\r\n else if (c < 0x10000) {\r\n // Three bytes\r\n output += fromCharCode(0xE0 | (c >>> 12));\r\n output += fromCharCode(0x80 | (c >>> 6 & 0x3f));\r\n output += fromCharCode(0x80 | (c & 0x3f));\r\n }\r\n }\r\n\r\n return output;\r\n }\r\n\r\n // Exports ================================================================\r\n deepExtend(kendo.util, {\r\n encodeBase64: encodeBase64,\r\n encodeUTF8: encodeUTF8\r\n });\r\n\r\n})(window.kendo.jQuery);\r\n\r\n\r\n\r\n(function ($) {\r\n // Imports ================================================================\r\n var math = Math,\r\n kendo = window.kendo,\r\n deepExtend = kendo.deepExtend,\r\n inArray = $.inArray;\r\n\r\n // Mixins =================================================================\r\n var ObserversMixin = {\r\n observers: function() {\r\n this._observers = this._observers || [];\r\n return this._observers;\r\n },\r\n\r\n addObserver: function(element) {\r\n if (!this._observers) {\r\n this._observers = [element];\r\n } else {\r\n this._observers.push(element);\r\n }\r\n return this;\r\n },\r\n\r\n removeObserver: function(element) {\r\n var observers = this.observers();\r\n var index = inArray(element, observers);\r\n if (index != -1) {\r\n observers.splice(index, 1);\r\n }\r\n return this;\r\n },\r\n\r\n trigger: function(methodName, event) {\r\n var observers = this._observers;\r\n var observer;\r\n var idx;\r\n\r\n if (observers && !this._suspended) {\r\n for (idx = 0; idx < observers.length; idx++) {\r\n observer = observers[idx];\r\n if (observer[methodName]) {\r\n observer[methodName](event);\r\n }\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n optionsChange: function(e) {\r\n this.trigger(\"optionsChange\", e);\r\n },\r\n\r\n geometryChange: function(e) {\r\n this.trigger(\"geometryChange\", e);\r\n },\r\n\r\n suspend: function() {\r\n this._suspended = (this._suspended || 0) + 1;\r\n return this;\r\n },\r\n\r\n resume: function() {\r\n this._suspended = math.max((this._suspended || 0) - 1, 0);\r\n return this;\r\n },\r\n\r\n _observerField: function(field, value) {\r\n if (this[field]) {\r\n this[field].removeObserver(this);\r\n }\r\n this[field] = value;\r\n value.addObserver(this);\r\n }\r\n };\r\n\r\n // Exports ================================================================\r\n deepExtend(kendo, {\r\n mixins: {\r\n ObserversMixin: ObserversMixin\r\n }\r\n });\r\n\r\n})(window.kendo.jQuery);\r\n\r\n\r\n\r\n(function ($) {\r\n // Imports ================================================================\r\n var math = Math,\r\n pow = math.pow,\r\n inArray = $.inArray,\r\n\r\n kendo = window.kendo,\r\n Class = kendo.Class,\r\n deepExtend = kendo.deepExtend,\r\n ObserversMixin = kendo.mixins.ObserversMixin,\r\n\r\n util = kendo.util,\r\n defined = util.defined,\r\n rad = util.rad,\r\n deg = util.deg,\r\n round = util.round;\r\n\r\n var PI_DIV_2 = math.PI / 2,\r\n MIN_NUM = util.MIN_NUM,\r\n MAX_NUM = util.MAX_NUM;\r\n\r\n // Geometrical primitives =================================================\r\n var Point = Class.extend({\r\n init: function(x, y) {\r\n this.x = x || 0;\r\n this.y = y || 0;\r\n },\r\n\r\n equals: function(other) {\r\n return other && other.x === this.x && other.y === this.y;\r\n },\r\n\r\n clone: function() {\r\n return new Point(this.x, this.y);\r\n },\r\n\r\n rotate: function(angle, origin) {\r\n return this.transform(\r\n transform().rotate(angle, origin)\r\n );\r\n },\r\n\r\n translate: function(x, y) {\r\n this.x += x;\r\n this.y += y;\r\n\r\n this.geometryChange();\r\n\r\n return this;\r\n },\r\n\r\n translateWith: function(point) {\r\n return this.translate(point.x, point.y);\r\n },\r\n\r\n move: function(x, y) {\r\n this.x = this.y = 0;\r\n return this.translate(x, y);\r\n },\r\n\r\n scale: function(scaleX, scaleY) {\r\n if (!defined(scaleY)) {\r\n scaleY = scaleX;\r\n }\r\n\r\n this.x *= scaleX;\r\n this.y *= scaleY;\r\n\r\n this.geometryChange();\r\n\r\n return this;\r\n },\r\n\r\n scaleCopy: function(scaleX, scaleY) {\r\n return this.clone().scale(scaleX, scaleY);\r\n },\r\n\r\n transform: function(transformation) {\r\n var mx = toMatrix(transformation),\r\n x = this.x,\r\n y = this.y;\r\n\r\n this.x = mx.a * x + mx.c * y + mx.e;\r\n this.y = mx.b * x + mx.d * y + mx.f;\r\n\r\n this.geometryChange();\r\n\r\n return this;\r\n },\r\n\r\n transformCopy: function(transformation) {\r\n var point = this.clone();\r\n\r\n if (transformation) {\r\n point.transform(transformation);\r\n }\r\n\r\n return point;\r\n },\r\n\r\n distanceTo: function(point) {\r\n var dx = this.x - point.x;\r\n var dy = this.y - point.y;\r\n\r\n return math.sqrt(dx * dx + dy * dy);\r\n },\r\n\r\n round: function(digits) {\r\n this.x = round(this.x, digits);\r\n this.y = round(this.y, digits);\r\n\r\n this.geometryChange();\r\n\r\n return this;\r\n },\r\n\r\n toArray: function(digits) {\r\n var doRound = defined(digits);\r\n var x = doRound ? round(this.x, digits) : this.x;\r\n var y = doRound ? round(this.y, digits) : this.y;\r\n\r\n return [x, y];\r\n }\r\n });\r\n defineAccessors(Point.fn, [\"x\", \"y\"]);\r\n deepExtend(Point.fn, ObserversMixin);\r\n\r\n // IE < 9 doesn't allow to override toString on definition\r\n Point.fn.toString = function(digits, separator) {\r\n var x = this.x,\r\n y = this.y;\r\n\r\n if (defined(digits)) {\r\n x = round(x, digits);\r\n y = round(y, digits);\r\n }\r\n\r\n separator = separator || \" \";\r\n return x + separator + y;\r\n };\r\n\r\n Point.create = function(arg0, arg1) {\r\n if (defined(arg0)) {\r\n if (arg0 instanceof Point) {\r\n return arg0;\r\n } else if (arguments.length === 1 && arg0.length === 2) {\r\n return new Point(arg0[0], arg0[1]);\r\n } else {\r\n return new Point(arg0, arg1);\r\n }\r\n }\r\n };\r\n\r\n Point.min = function() {\r\n var minX = util.MAX_NUM;\r\n var minY = util.MAX_NUM;\r\n\r\n for (var i = 0; i < arguments.length; i++) {\r\n var pt = arguments[i];\r\n minX = math.min(pt.x, minX);\r\n minY = math.min(pt.y, minY);\r\n }\r\n\r\n return new Point(minX, minY);\r\n };\r\n\r\n Point.max = function(p0, p1) {\r\n var maxX = util.MIN_NUM;\r\n var maxY = util.MIN_NUM;\r\n\r\n for (var i = 0; i < arguments.length; i++) {\r\n var pt = arguments[i];\r\n maxX = math.max(pt.x, maxX);\r\n maxY = math.max(pt.y, maxY);\r\n }\r\n\r\n return new Point(maxX, maxY);\r\n };\r\n\r\n Point.minPoint = function() {\r\n return new Point(MIN_NUM, MIN_NUM);\r\n };\r\n\r\n Point.maxPoint = function() {\r\n return new Point(MAX_NUM, MAX_NUM);\r\n };\r\n\r\n Point.ZERO = new Point(0, 0);\r\n\r\n var Size = Class.extend({\r\n init: function(width, height) {\r\n this.width = width || 0;\r\n this.height = height || 0;\r\n },\r\n\r\n equals: function(other) {\r\n return other && other.width === this.width && other.height === this.height;\r\n },\r\n\r\n clone: function() {\r\n return new Size(this.width, this.height);\r\n },\r\n\r\n toArray: function(digits) {\r\n var doRound = defined(digits);\r\n var width = doRound ? round(this.width, digits) : this.width;\r\n var height = doRound ? round(this.height, digits) : this.height;\r\n\r\n return [width, height];\r\n }\r\n });\r\n defineAccessors(Size.fn, [\"width\", \"height\"]);\r\n deepExtend(Size.fn, ObserversMixin);\r\n\r\n Size.create = function(arg0, arg1) {\r\n if (defined(arg0)) {\r\n if (arg0 instanceof Size) {\r\n return arg0;\r\n } else if (arguments.length === 1 && arg0.length === 2) {\r\n return new Size(arg0[0], arg0[1]);\r\n } else {\r\n return new Size(arg0, arg1);\r\n }\r\n }\r\n };\r\n\r\n Size.ZERO = new Size(0, 0);\r\n\r\n var Rect = Class.extend({\r\n init: function(origin, size) {\r\n this.setOrigin(origin || new Point());\r\n this.setSize(size || new Size());\r\n },\r\n\r\n clone: function() {\r\n return new Rect(\r\n this.origin.clone(),\r\n this.size.clone()\r\n );\r\n },\r\n\r\n equals: function(other) {\r\n return other &&\r\n other.origin.equals(this.origin) &&\r\n other.size.equals(this.size);\r\n },\r\n\r\n setOrigin: function(value) {\r\n this._observerField(\"origin\", Point.create(value));\r\n this.geometryChange();\r\n return this;\r\n },\r\n\r\n getOrigin: function() {\r\n return this.origin;\r\n },\r\n\r\n setSize: function(value) {\r\n this._observerField(\"size\", Size.create(value));\r\n this.geometryChange();\r\n return this;\r\n },\r\n\r\n getSize: function() {\r\n return this.size;\r\n },\r\n\r\n width: function() {\r\n return this.size.width;\r\n },\r\n\r\n height: function() {\r\n return this.size.height;\r\n },\r\n\r\n topLeft: function() {\r\n return this.origin.clone();\r\n },\r\n\r\n bottomRight: function() {\r\n return this.origin.clone().translate(this.width(), this.height());\r\n },\r\n\r\n topRight: function() {\r\n return this.origin.clone().translate(this.width(), 0);\r\n },\r\n\r\n bottomLeft: function() {\r\n return this.origin.clone().translate(0, this.height());\r\n },\r\n\r\n center: function() {\r\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\r\n },\r\n\r\n bbox: function(matrix) {\r\n var tl = this.topLeft().transformCopy(matrix);\r\n var tr = this.topRight().transformCopy(matrix);\r\n var br = this.bottomRight().transformCopy(matrix);\r\n var bl = this.bottomLeft().transformCopy(matrix);\r\n\r\n return Rect.fromPoints(tl, tr, br, bl);\r\n },\r\n\r\n transformCopy: function(m) {\r\n return Rect.fromPoints(\r\n this.topLeft().transform(m),\r\n this.bottomRight().transform(m)\r\n );\r\n }\r\n });\r\n\r\n deepExtend(Rect.fn, ObserversMixin);\r\n\r\n Rect.fromPoints = function() {\r\n var topLeft = Point.min.apply(this, arguments);\r\n var bottomRight = Point.max.apply(this, arguments);\r\n var size = new Size(\r\n bottomRight.x - topLeft.x,\r\n bottomRight.y - topLeft.y\r\n );\r\n\r\n return new Rect(topLeft, size);\r\n };\r\n\r\n Rect.union = function(a, b) {\r\n return Rect.fromPoints(\r\n Point.min(a.topLeft(), b.topLeft()),\r\n Point.max(a.bottomRight(), b.bottomRight())\r\n );\r\n };\r\n\r\n Rect.intersect = function(a, b) {\r\n a = { left : a.topLeft().x,\r\n top : a.topLeft().y,\r\n right : a.bottomRight().x,\r\n bottom : a.bottomRight().y };\r\n\r\n b = { left : b.topLeft().x,\r\n top : b.topLeft().y,\r\n right : b.bottomRight().x,\r\n bottom : b.bottomRight().y };\r\n\r\n if (a.left <= b.right &&\r\n b.left <= a.right &&\r\n a.top <= b.bottom &&\r\n b.top <= a.bottom)\r\n {\r\n return Rect.fromPoints(\r\n new Point(math.max(a.left, b.left), math.max(a.top, b.top)),\r\n new Point(math.min(a.right, b.right), math.min(a.bottom, b.bottom))\r\n );\r\n }\r\n };\r\n\r\n var Circle = Class.extend({\r\n init: function(center, radius) {\r\n this.setCenter(center || new Point());\r\n this.setRadius(radius || 0);\r\n },\r\n\r\n setCenter: function(value) {\r\n this._observerField(\"center\", Point.create(value));\r\n this.geometryChange();\r\n return this;\r\n },\r\n\r\n getCenter: function() {\r\n return this.center;\r\n },\r\n\r\n equals: function(other) {\r\n return other &&\r\n other.center.equals(this.center) &&\r\n other.radius === this.radius;\r\n },\r\n\r\n clone: function() {\r\n return new Circle(this.center.clone(), this.radius);\r\n },\r\n\r\n pointAt: function(angle) {\r\n return this._pointAt(rad(angle));\r\n },\r\n\r\n bbox: function(matrix) {\r\n var minPoint = Point.maxPoint();\r\n var maxPoint = Point.minPoint();\r\n var extremeAngles = ellipseExtremeAngles(this.center, this.radius, this.radius, matrix);\r\n\r\n for (var i = 0; i < 4; i++) {\r\n var currentPointX = this._pointAt(extremeAngles.x + i * PI_DIV_2).transformCopy(matrix);\r\n var currentPointY = this._pointAt(extremeAngles.y + i * PI_DIV_2).transformCopy(matrix);\r\n var currentPoint = new Point(currentPointX.x, currentPointY.y);\r\n\r\n minPoint = Point.min(minPoint, currentPoint);\r\n maxPoint = Point.max(maxPoint, currentPoint);\r\n }\r\n\r\n // TODO: Let fromPoints figure out the min/max\r\n return Rect.fromPoints(minPoint, maxPoint);\r\n },\r\n\r\n _pointAt: function(angle) {\r\n var c = this.center;\r\n var r = this.radius;\r\n\r\n return new Point(\r\n c.x - r * math.cos(angle),\r\n c.y - r * math.sin(angle)\r\n );\r\n }\r\n });\r\n defineAccessors(Circle.fn, [\"radius\"]);\r\n deepExtend(Circle.fn, ObserversMixin);\r\n\r\n var Arc = Class.extend({\r\n init: function(center, options) {\r\n this.setCenter(center || new Point());\r\n\r\n options = options || {};\r\n this.radiusX = options.radiusX;\r\n this.radiusY = options.radiusY || options.radiusX;\r\n this.startAngle = options.startAngle;\r\n this.endAngle = options.endAngle;\r\n this.anticlockwise = options.anticlockwise || false;\r\n },\r\n\r\n // TODO: clone, equals\r\n clone: function() {\r\n return new Arc(this.center, {\r\n radiusX: this.radiusX,\r\n radiusY: this.radiusY,\r\n startAngle: this.startAngle,\r\n endAngle: this.endAngle,\r\n anticlockwise: this.anticlockwise\r\n });\r\n },\r\n\r\n setCenter: function(value) {\r\n this._observerField(\"center\", Point.create(value));\r\n this.geometryChange();\r\n return this;\r\n },\r\n\r\n getCenter: function() {\r\n return this.center;\r\n },\r\n\r\n MAX_INTERVAL: 45,\r\n\r\n pointAt: function(angle) {\r\n var center = this.center;\r\n var radian = rad(angle);\r\n\r\n return new Point(\r\n center.x + this.radiusX * math.cos(radian),\r\n center.y + this.radiusY * math.sin(radian)\r\n );\r\n },\r\n\r\n // TODO: Review, document\r\n curvePoints: function() {\r\n var startAngle = this.startAngle;\r\n var endAngle = this.endAngle;\r\n var dir = this.anticlockwise ? -1 : 1;\r\n var curvePoints = [this.pointAt(startAngle)];\r\n var currentAngle = startAngle;\r\n var interval = this._arcInterval();\r\n var intervalAngle = interval.endAngle - interval.startAngle;\r\n var subIntervalsCount = math.ceil(intervalAngle / this.MAX_INTERVAL);\r\n var subIntervalAngle = intervalAngle / subIntervalsCount;\r\n\r\n for (var i = 1; i <= subIntervalsCount; i++) {\r\n var nextAngle = currentAngle + dir * subIntervalAngle;\r\n var points = this._intervalCurvePoints(currentAngle, nextAngle);\r\n\r\n curvePoints.push(points.cp1, points.cp2, points.p2);\r\n currentAngle = nextAngle;\r\n }\r\n\r\n return curvePoints;\r\n },\r\n\r\n bbox: function(matrix) {\r\n var arc = this;\r\n var interval = arc._arcInterval();\r\n var startAngle = interval.startAngle;\r\n var endAngle = interval.endAngle;\r\n var extremeAngles = ellipseExtremeAngles(this.center, this.radiusX, this.radiusY, matrix);\r\n var extremeX = deg(extremeAngles.x);\r\n var extremeY = deg(extremeAngles.y);\r\n var currentPoint = arc.pointAt(startAngle).transformCopy(matrix);\r\n var endPoint = arc.pointAt(endAngle).transformCopy(matrix);\r\n var minPoint = Point.min(currentPoint, endPoint);\r\n var maxPoint = Point.max(currentPoint, endPoint);\r\n var currentAngleX = bboxStartAngle(extremeX, startAngle);\r\n var currentAngleY = bboxStartAngle(extremeY, startAngle);\r\n\r\n while (currentAngleX < endAngle || currentAngleY < endAngle) {\r\n var currentPointX;\r\n if (currentAngleX < endAngle) {\r\n currentPointX = arc.pointAt(currentAngleX).transformCopy(matrix);\r\n currentAngleX += 90;\r\n }\r\n\r\n var currentPointY;\r\n if (currentAngleY < endAngle) {\r\n currentPointY = arc.pointAt(currentAngleY).transformCopy(matrix);\r\n currentAngleY += 90;\r\n }\r\n\r\n currentPoint = new Point(currentPointX.x, currentPointY.y);\r\n minPoint = Point.min(minPoint, currentPoint);\r\n maxPoint = Point.max(maxPoint, currentPoint);\r\n }\r\n\r\n // TODO: Let fromPoints figure out the min/max\r\n return Rect.fromPoints(minPoint, maxPoint);\r\n },\r\n\r\n _arcInterval: function() {\r\n var startAngle = this.startAngle;\r\n var endAngle = this.endAngle;\r\n var anticlockwise = this.anticlockwise;\r\n\r\n if (anticlockwise) {\r\n var oldStart = startAngle;\r\n startAngle = endAngle;\r\n endAngle = oldStart;\r\n }\r\n\r\n if (startAngle > endAngle || (anticlockwise && startAngle === endAngle)) {\r\n endAngle += 360;\r\n }\r\n\r\n return {\r\n startAngle: startAngle,\r\n endAngle: endAngle\r\n };\r\n },\r\n\r\n _intervalCurvePoints: function(startAngle, endAngle) {\r\n var arc = this;\r\n var p1 = arc.pointAt(startAngle);\r\n var p2 = arc.pointAt(endAngle);\r\n var p1Derivative = arc._derivativeAt(startAngle);\r\n var p2Derivative = arc._derivativeAt(endAngle);\r\n var t = (rad(endAngle) - rad(startAngle)) / 3;\r\n var cp1 = new Point(p1.x + t * p1Derivative.x, p1.y + t * p1Derivative.y);\r\n var cp2 = new Point(p2.x - t * p2Derivative.x, p2.y - t * p2Derivative.y);\r\n\r\n return {\r\n p1: p1,\r\n cp1: cp1,\r\n cp2: cp2,\r\n p2: p2\r\n };\r\n },\r\n\r\n _derivativeAt: function(angle) {\r\n var arc = this;\r\n var radian = rad(angle);\r\n\r\n return new Point(-arc.radiusX * math.sin(radian), arc.radiusY * math.cos(radian));\r\n }\r\n });\r\n defineAccessors(Arc.fn, [\"radiusX\", \"radiusY\", \"startAngle\", \"endAngle\", \"anticlockwise\"]);\r\n deepExtend(Arc.fn, ObserversMixin);\r\n\r\n Arc.fromPoints = function(start, end, rx, ry, largeArc, swipe) {\r\n var arcParameters = normalizeArcParameters(start.x, start.y, end.x, end.y, rx, ry, largeArc, swipe);\r\n return new Arc(arcParameters.center, {\r\n startAngle: arcParameters.startAngle,\r\n endAngle: arcParameters.endAngle,\r\n radiusX: rx,\r\n radiusY: ry,\r\n anticlockwise: swipe === 0\r\n });\r\n };\r\n\r\n var Matrix = Class.extend({\r\n init: function (a, b, c, d, e, f) {\r\n this.a = a || 0;\r\n this.b = b || 0;\r\n this.c = c || 0;\r\n this.d = d || 0;\r\n this.e = e || 0;\r\n this.f = f || 0;\r\n },\r\n\r\n multiplyCopy: function (m) {\r\n return new Matrix(\r\n this.a * m.a + this.c * m.b,\r\n this.b * m.a + this.d * m.b,\r\n this.a * m.c + this.c * m.d,\r\n this.b * m.c + this.d * m.d,\r\n this.a * m.e + this.c * m.f + this.e,\r\n this.b * m.e + this.d * m.f + this.f\r\n );\r\n },\r\n\r\n // Invert function for general 3x3 matrixes, based on\r\n // http://en.wikipedia.org/wiki/Invertible_matrix#Inversion_of_3.C3.973_matrices\r\n // (simplified below for transformation matrixes, where the\r\n // last col is constant, but let's keep this commented here)\r\n //\r\n // invert: function() {\r\n // var a = this.a, b = this.b, c = 0;\r\n // var d = this.c, e = this.d, f = 0;\r\n // var g = this.e, h = this.f, i = 1;\r\n //\r\n // var A = (e*i - f*h), D = -(b*i - c*h), G = (b*f - c*e);\r\n // var B = -(d*i - f*g), E = (a*i - c*g), H = -(a*f - c*d);\r\n // var C = (d*h - e*g), F = -(a*h - b*g), I = (a*e - b*d);\r\n //\r\n // var det = a*A + b*B + c*C;\r\n // if (det === 0) {\r\n // return null;\r\n // }\r\n //\r\n // return new Matrix(A/det, D/det, B/det, E/det, C/det, F/det);\r\n // },\r\n\r\n invert: function() {\r\n var a = this.a, b = this.b;\r\n var d = this.c, e = this.d;\r\n var g = this.e, h = this.f;\r\n\r\n var det = a*e - b*d;\r\n if (det === 0) {\r\n return null;\r\n }\r\n\r\n return new Matrix(e/det, -b/det, -d/det, a/det,\r\n (d*h - e*g)/det, (b*g - a*h)/det);\r\n },\r\n\r\n clone: function() {\r\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\r\n },\r\n\r\n equals: function(other) {\r\n if (!other) {\r\n return false;\r\n }\r\n\r\n return this.a === other.a && this.b === other.b &&\r\n this.c === other.c && this.d === other.d &&\r\n this.e === other.e && this.f === other.f;\r\n },\r\n\r\n round: function(precision) {\r\n this.a = round(this.a, precision);\r\n this.b = round(this.b, precision);\r\n this.c = round(this.c, precision);\r\n this.d = round(this.d, precision);\r\n this.e = round(this.e, precision);\r\n this.f = round(this.f, precision);\r\n\r\n return this;\r\n },\r\n\r\n toArray: function(precision) {\r\n var arr = [this.a, this.b, this.c, this.d, this.e, this.f];\r\n\r\n if (defined(precision)) {\r\n for (var i = 0; i < arr.length; i++) {\r\n arr[i] = round(arr[i], precision);\r\n }\r\n }\r\n\r\n return arr;\r\n }\r\n });\r\n\r\n Matrix.fn.toString = function(precision, separator) {\r\n return this.toArray(precision).join(separator || \",\");\r\n };\r\n\r\n Matrix.translate = function (x, y) {\r\n return new Matrix(1, 0, 0, 1, x, y);\r\n };\r\n\r\n Matrix.unit = function () {\r\n return new Matrix(1, 0, 0, 1, 0, 0);\r\n };\r\n\r\n Matrix.rotate = function (angle, x, y) {\r\n var m = new Matrix();\r\n m.a = math.cos(rad(angle));\r\n m.b = math.sin(rad(angle));\r\n m.c = -m.b;\r\n m.d = m.a;\r\n m.e = (x - x * m.a + y * m.b) || 0;\r\n m.f = (y - y * m.a - x * m.b) || 0;\r\n\r\n return m;\r\n };\r\n\r\n Matrix.scale = function (scaleX, scaleY) {\r\n return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\r\n };\r\n\r\n Matrix.IDENTITY = Matrix.unit();\r\n\r\n var Transformation = Class.extend({\r\n init: function(matrix) {\r\n this._matrix = matrix || Matrix.unit();\r\n },\r\n\r\n clone: function() {\r\n return new Transformation(\r\n this._matrix.clone()\r\n );\r\n },\r\n\r\n equals: function(other) {\r\n return other &&\r\n other._matrix.equals(this._matrix);\r\n },\r\n\r\n _optionsChange: function() {\r\n this.optionsChange({\r\n field: \"transform\",\r\n value: this\r\n });\r\n },\r\n\r\n translate: function(x, y) {\r\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\r\n\r\n this._optionsChange();\r\n return this;\r\n },\r\n\r\n scale: function(scaleX, scaleY, origin) {\r\n if (!defined(scaleY)) {\r\n scaleY = scaleX;\r\n }\r\n\r\n if (origin) {\r\n origin = Point.create(origin);\r\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(origin.x, origin.y));\r\n }\r\n\r\n this._matrix = this._matrix.multiplyCopy(Matrix.scale(scaleX, scaleY));\r\n\r\n if (origin) {\r\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(-origin.x, -origin.y));\r\n }\r\n\r\n this._optionsChange();\r\n return this;\r\n },\r\n\r\n rotate: function(angle, origin) {\r\n origin = Point.create(origin) || Point.ZERO;\r\n\r\n this._matrix = this._matrix.multiplyCopy(Matrix.rotate(angle, origin.x, origin.y));\r\n\r\n this._optionsChange();\r\n return this;\r\n },\r\n\r\n multiply: function(transformation) {\r\n var matrix = toMatrix(transformation);\r\n\r\n this._matrix = this._matrix.multiplyCopy(matrix);\r\n\r\n this._optionsChange();\r\n return this;\r\n },\r\n\r\n matrix: function() {\r\n return this._matrix;\r\n }\r\n });\r\n\r\n deepExtend(Transformation.fn, ObserversMixin);\r\n\r\n function transform(matrix) {\r\n if (matrix === null) {\r\n return null;\r\n }\r\n\r\n if (matrix instanceof Transformation) {\r\n return matrix;\r\n }\r\n\r\n return new Transformation(matrix);\r\n }\r\n\r\n function toMatrix(value) {\r\n if (value && kendo.isFunction(value.matrix)) {\r\n return value.matrix();\r\n }\r\n\r\n return value;\r\n }\r\n\r\n // Helper functions =======================================================\r\n function ellipseExtremeAngles(center, rx, ry, matrix) {\r\n var extremeX = 0,\r\n extremeY = 0;\r\n\r\n if (matrix) {\r\n extremeX = math.atan2(matrix.c * ry, matrix.a * rx);\r\n if (matrix.b !== 0) {\r\n extremeY = math.atan2(matrix.d * ry, matrix.b * rx);\r\n }\r\n }\r\n\r\n return {\r\n x: extremeX,\r\n y: extremeY\r\n };\r\n }\r\n\r\n function bboxStartAngle(angle, start) {\r\n while(angle < start) {\r\n angle += 90;\r\n }\r\n\r\n return angle;\r\n }\r\n\r\n function defineAccessors(fn, fields) {\r\n for (var i = 0; i < fields.length; i++) {\r\n var name = fields[i];\r\n var capitalized = name.charAt(0).toUpperCase() +\r\n name.substring(1, name.length);\r\n\r\n fn[\"set\" + capitalized] = setAccessor(name);\r\n fn[\"get\" + capitalized] = getAccessor(name);\r\n }\r\n }\r\n\r\n function setAccessor(field) {\r\n return function(value) {\r\n if (this[field] !== value) {\r\n this[field] = value;\r\n this.geometryChange();\r\n }\r\n\r\n return this;\r\n };\r\n }\r\n\r\n function getAccessor(field) {\r\n return function() {\r\n return this[field];\r\n };\r\n }\r\n\r\n\r\n function elipseAngle(start, end, swipe) {\r\n if (start > end) {\r\n end += 360;\r\n }\r\n\r\n var alpha = math.abs(end - start);\r\n if (!swipe) {\r\n alpha = 360 - alpha;\r\n }\r\n\r\n return alpha;\r\n }\r\n\r\n function calculateAngle(cx, cy, rx, ry, x, y) {\r\n var cos = round((x - cx) / rx, 3);\r\n var sin = round((y - cy) / ry, 3);\r\n\r\n return round(deg(math.atan2(sin, cos)));\r\n }\r\n\r\n function normalizeArcParameters(x1, y1, x2, y2, rx, ry, largeArc, swipe) {\r\n var cx, cy;\r\n var cx1, cy1;\r\n var a, b, c, sqrt;\r\n\r\n if (y1 !== y2) {\r\n var x21 = x2 - x1;\r\n var y21 = y2 - y1;\r\n var rx2 = pow(rx, 2), ry2 = pow(ry, 2);\r\n var k = (ry2 * x21 * (x1 + x2) + rx2 * y21 * (y1 + y2)) / (2 * rx2 * y21);\r\n var yk2 = k - y2;\r\n var l = -(x21 * ry2) / (rx2 * y21);\r\n\r\n a = 1 / rx2 + pow(l, 2) / ry2;\r\n b = 2 * ((l * yk2) / ry2 - x2 / rx2);\r\n c = pow(x2, 2) / rx2 + pow(yk2, 2) / ry2 - 1;\r\n sqrt = math.sqrt(pow(b, 2) - 4 * a * c);\r\n\r\n cx = (-b - sqrt) / (2 * a);\r\n cy = k + l * cx;\r\n cx1 = (-b + sqrt) / (2 * a);\r\n cy1 = k + l * cx1;\r\n } else if (x1 !== x2) {\r\n b = - 2 * y2;\r\n c = pow(((x2 - x1) * ry) / (2 * rx), 2) + pow(y2, 2) - pow(ry, 2);\r\n sqrt = math.sqrt(pow(b, 2) - 4 * c);\r\n\r\n cx = cx1 = (x1 + x2) / 2;\r\n cy = (-b - sqrt) / 2;\r\n cy1 = (-b + sqrt) / 2;\r\n } else {\r\n return false;\r\n }\r\n\r\n var start = calculateAngle(cx, cy, rx, ry, x1, y1);\r\n var end = calculateAngle(cx, cy, rx, ry, x2, y2);\r\n var alpha = elipseAngle(start, end, swipe);\r\n\r\n if ((largeArc && alpha <= 180) || (!largeArc && alpha > 180)) {\r\n cx = cx1; cy = cy1;\r\n start = calculateAngle(cx, cy, rx, ry, x1, y1);\r\n end = calculateAngle(cx, cy, rx, ry, x2, y2);\r\n }\r\n\r\n return {\r\n center: new Point(cx, cy),\r\n startAngle: start,\r\n endAngle: end\r\n };\r\n }\r\n\r\n\r\n // Exports ================================================================\r\n deepExtend(kendo, {\r\n geometry: {\r\n Arc: Arc,\r\n Circle: Circle,\r\n Matrix: Matrix,\r\n Point: Point,\r\n Rect: Rect,\r\n Size: Size,\r\n Transformation: Transformation,\r\n transform: transform,\r\n toMatrix: toMatrix\r\n }\r\n });\r\n\r\n kendo.dataviz.geometry = kendo.geometry;\r\n\r\n})(window.kendo.jQuery);\r\n\r\n\r\n\r\n(function ($) {\r\n\r\n // Imports ================================================================\r\n var doc = document,\r\n noop = $.noop,\r\n toString = Object.prototype.toString,\r\n\r\n kendo = window.kendo,\r\n Class = kendo.Class,\r\n Widget = kendo.ui.Widget,\r\n deepExtend = kendo.deepExtend,\r\n\r\n util = kendo.util,\r\n defined = util.defined;\r\n\r\n // Base drawing surface ==================================================\r\n var Surface = Widget.extend({\r\n init: function(element, options) {\r\n this.options = deepExtend({}, this.options, options);\r\n\r\n Widget.fn.init.call(this, element, this.options);\r\n\r\n this._click = this._handler(\"click\");\r\n this._mouseenter = this._handler(\"mouseenter\");\r\n this._mouseleave = this._handler(\"mouseleave\");\r\n\r\n this._visual = new kendo.drawing.Group();\r\n\r\n if (this.options.width) {\r\n this.element.css(\"width\", this.options.width);\r\n }\r\n\r\n if (this.options.height) {\r\n this.element.css(\"height\", this.options.height);\r\n }\r\n },\r\n\r\n options: {\r\n name: \"Surface\"\r\n },\r\n\r\n events: [\r\n \"click\",\r\n \"mouseenter\",\r\n \"mouseleave\",\r\n \"resize\"\r\n ],\r\n\r\n draw: function(element) {\r\n this._visual.children.push(element);\r\n },\r\n\r\n clear: function() {\r\n this._visual.children = [];\r\n },\r\n\r\n destroy: function() {\r\n this._visual = null;\r\n Widget.fn.destroy.call(this);\r\n },\r\n\r\n exportVisual: function() {\r\n return this._visual;\r\n },\r\n\r\n getSize: function() {\r\n return {\r\n width: this.element.width(),\r\n height: this.element.height()\r\n };\r\n },\r\n\r\n setSize: function(size) {\r\n this.element.css({\r\n width: size.width,\r\n height: size.height\r\n });\r\n\r\n this._size = size;\r\n this._resize();\r\n },\r\n\r\n eventTarget: function(e) {\r\n var domNode = $(e.touch ? e.touch.initialTouch : e.target);\r\n var node;\r\n\r\n while (!node && domNode.length > 0) {\r\n node = domNode[0]._kendoNode;\r\n if (domNode.is(this.element) || domNode.length === 0) {\r\n break;\r\n }\r\n\r\n domNode = domNode.parent();\r\n }\r\n\r\n if (node) {\r\n return node.srcElement;\r\n }\r\n },\r\n\r\n _resize: noop,\r\n\r\n _handler: function(event) {\r\n var surface = this;\r\n\r\n return function(e) {\r\n var node = surface.eventTarget(e);\r\n if (node) {\r\n surface.trigger(event, {\r\n element: node,\r\n originalEvent: e\r\n });\r\n }\r\n };\r\n }\r\n });\r\n\r\n kendo.ui.plugin(Surface);\r\n\r\n Surface.create = function(element, options) {\r\n return SurfaceFactory.current.create(element, options);\r\n };\r\n\r\n // Base surface node =====================================================\r\n var BaseNode = Class.extend({\r\n init: function(srcElement) {\r\n this.childNodes = [];\r\n this.parent = null;\r\n\r\n if (srcElement) {\r\n this.srcElement = srcElement;\r\n this.observe();\r\n }\r\n },\r\n\r\n destroy: function() {\r\n if (this.srcElement) {\r\n this.srcElement.removeObserver(this);\r\n }\r\n\r\n var children = this.childNodes;\r\n for (var i = 0; i < children.length; i++) {\r\n this.childNodes[i].destroy();\r\n }\r\n\r\n this.parent = null;\r\n },\r\n\r\n load: noop,\r\n\r\n observe: function() {\r\n if (this.srcElement) {\r\n this.srcElement.addObserver(this);\r\n }\r\n },\r\n\r\n append: function(node) {\r\n this.childNodes.push(node);\r\n node.parent = this;\r\n },\r\n\r\n insertAt: function(node, pos) {\r\n this.childNodes.splice(pos, 0, node);\r\n node.parent = this;\r\n },\r\n\r\n remove: function(index, count) {\r\n var end = index + count;\r\n for (var i = index; i < end; i++) {\r\n this.childNodes[i].removeSelf();\r\n }\r\n this.childNodes.splice(index, count);\r\n },\r\n\r\n removeSelf: function() {\r\n this.clear();\r\n this.destroy();\r\n },\r\n\r\n clear: function() {\r\n this.remove(0, this.childNodes.length);\r\n },\r\n\r\n invalidate: function() {\r\n if (this.parent) {\r\n this.parent.invalidate();\r\n }\r\n },\r\n\r\n geometryChange: function() {\r\n this.invalidate();\r\n },\r\n\r\n optionsChange: function() {\r\n this.invalidate();\r\n },\r\n\r\n childrenChange: function(e) {\r\n if (e.action === \"add\") {\r\n this.load(e.items, e.index);\r\n } else if (e.action === \"remove\") {\r\n this.remove(e.index, e.items.length);\r\n }\r\n\r\n this.invalidate();\r\n }\r\n });\r\n\r\n // Options storage with optional observer =============================\r\n var OptionsStore = Class.extend({\r\n init: function(options, prefix) {\r\n var field,\r\n member;\r\n\r\n this.prefix = prefix || \"\";\r\n\r\n for (field in options) {\r\n member = options[field];\r\n member = this._wrap(member, field);\r\n this[field] = member;\r\n }\r\n },\r\n\r\n get: function(field) {\r\n return kendo.getter(field, true)(this);\r\n },\r\n\r\n set: function(field, value) {\r\n var current = kendo.getter(field, true)(this);\r\n\r\n if (current !== value) {\r\n var composite = this._set(field, this._wrap(value, field));\r\n if (!composite) {\r\n this.optionsChange({\r\n field: this.prefix + field,\r\n value: value\r\n });\r\n }\r\n }\r\n },\r\n\r\n _set: function(field, value) {\r\n var composite = field.indexOf(\".\") >= 0;\r\n\r\n if (composite) {\r\n var parts = field.split(\".\"),\r\n path = \"\",\r\n obj;\r\n\r\n while (parts.length > 1) {\r\n path += parts.shift();\r\n obj = kendo.getter(path, true)(this);\r\n\r\n if (!obj) {\r\n obj = new OptionsStore({}, path + \".\");\r\n obj.addObserver(this);\r\n this[path] = obj;\r\n }\r\n\r\n if (obj instanceof OptionsStore) {\r\n obj.set(parts.join(\".\"), value);\r\n return composite;\r\n }\r\n\r\n path += \".\";\r\n }\r\n }\r\n\r\n this._clear(field);\r\n kendo.setter(field)(this, value);\r\n\r\n return composite;\r\n },\r\n\r\n _clear: function(field) {\r\n var current = kendo.getter(field, true)(this);\r\n if (current && current.removeObserver) {\r\n current.removeObserver(this);\r\n }\r\n },\r\n\r\n _wrap: function(object, field) {\r\n var type = toString.call(object);\r\n\r\n if (object !== null && defined(object) && type === \"[object Object]\") {\r\n if (!(object instanceof OptionsStore) && !(object instanceof Class)) {\r\n object = new OptionsStore(object, this.prefix + field + \".\");\r\n }\r\n\r\n object.addObserver(this);\r\n }\r\n\r\n return object;\r\n }\r\n });\r\n deepExtend(OptionsStore.fn, kendo.mixins.ObserversMixin);\r\n\r\n var SurfaceFactory = function() {\r\n this._items = [];\r\n };\r\n\r\n SurfaceFactory.prototype = {\r\n register: function(name, type, order) {\r\n var items = this._items,\r\n first = items[0],\r\n entry = {\r\n name: name,\r\n type: type,\r\n order: order\r\n };\r\n\r\n if (!first || order < first.order) {\r\n items.unshift(entry);\r\n } else {\r\n items.push(entry);\r\n }\r\n },\r\n\r\n create: function(element, options) {\r\n var items = this._items,\r\n match = items[0];\r\n\r\n if (options && options.type) {\r\n var preferred = options.type.toLowerCase();\r\n for (var i = 0; i < items.length; i++) {\r\n if (items[i].name === preferred) {\r\n match = items[i];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (match) {\r\n return new match.type(element, options);\r\n }\r\n\r\n kendo.logToConsole(\r\n \"Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\\n\" +\r\n \"- The browser does not support SVG, VML and Canvas. User agent: \" + navigator.userAgent + \"\\n\" +\r\n \"- The Kendo UI scripts are not fully loaded\");\r\n }\r\n };\r\n\r\n SurfaceFactory.current = new SurfaceFactory();\r\n\r\n // Exports ================================================================\r\n deepExtend(kendo, {\r\n drawing: {\r\n DASH_ARRAYS: {\r\n dot: [1.5, 3.5],\r\n dash: [4, 3.5],\r\n longdash: [8, 3.5],\r\n dashdot: [3.5, 3.5, 1.5, 3.5],\r\n longdashdot: [8, 3.5, 1.5, 3.5],\r\n longdashdotdot: [8, 3.5, 1.5, 3.5, 1.5, 3.5]\r\n },\r\n\r\n Color: kendo.Color,\r\n BaseNode: BaseNode,\r\n OptionsStore: OptionsStore,\r\n Surface: Surface,\r\n SurfaceFactory: SurfaceFactory\r\n }\r\n });\r\n\r\n kendo.dataviz.drawing = kendo.drawing;\r\n\r\n})(window.kendo.jQuery);\r\n\r\n(function ($) {\r\n\r\n // Imports ================================================================\r\n var kendo = window.kendo,\r\n deepExtend = kendo.deepExtend,\r\n defined = kendo.util.defined;\r\n\r\n // Constants ==============================================================\r\n var GRADIENT = \"gradient\";\r\n\r\n // Mixins =================================================================\r\n var Paintable = {\r\n extend: function(proto) {\r\n proto.fill = this.fill;\r\n proto.stroke = this.stroke;\r\n },\r\n\r\n fill: function(color, opacity) {\r\n var options = this.options;\r\n\r\n if (defined(color)) {\r\n if (color && color.nodeType != GRADIENT) {\r\n var newFill = {\r\n color: color\r\n };\r\n if (defined(opacity)) {\r\n newFill.opacity = opacity;\r\n }\r\n options.set(\"fill\", newFill);\r\n } else {\r\n options.set(\"fill\", color);\r\n }\r\n\r\n return this;\r\n } else {\r\n return options.get(\"fill\");\r\n }\r\n },\r\n\r\n stroke: function(color, width, opacity) {\r\n if (defined(color)) {\r\n this.options.set(\"stroke.color\", color);\r\n\r\n if (defined(width)) {\r\n this.options.set(\"stroke.width\", width);\r\n }\r\n\r\n if (defined(opacity)) {\r\n this.options.set(\"stroke.opacity\", opacity);\r\n }\r\n\r\n return this;\r\n } else {\r\n return this.options.get(\"stroke\");\r\n }\r\n }\r\n };\r\n\r\n var Traversable = {\r\n extend: function(proto, childrenField) {\r\n proto.traverse = function(callback) {\r\n var children = this[childrenField];\r\n\r\n for (var i = 0; i < children.length; i++) {\r\n var child = children[i];\r\n\r\n if (child.traverse) {\r\n child.traverse(callback);\r\n } else {\r\n callback(child);\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n }\r\n };\r\n\r\n // Exports ================================================================\r\n deepExtend(kendo.drawing, {\r\n mixins: {\r\n Paintable: Paintable,\r\n Traversable: Traversable\r\n }\r\n });\r\n\r\n})(window.kendo.jQuery);\r\n\r\n(function ($) {\r\n\r\n // Imports =================================================================\r\n var doc = document,\r\n\r\n kendo = window.kendo,\r\n Class = kendo.Class,\r\n deepExtend = kendo.deepExtend,\r\n\r\n util = kendo.util,\r\n defined = util.defined;\r\n\r\n // Constants ===============================================================\r\n var BASELINE_MARKER_SIZE = 1;\r\n\r\n // Text metrics calculations ===============================================\r\n var LRUCache = Class.extend({\r\n init: function(size) {\r\n this._size = size;\r\n this._length = 0;\r\n this._map = {};\r\n },\r\n\r\n put: function(key, value) {\r\n var lru = this,\r\n map = lru._map,\r\n entry = { key: key, value: value };\r\n\r\n map[key] = entry;\r\n\r\n if (!lru._head) {\r\n lru._head = lru._tail = entry;\r\n } else {\r\n lru._tail.newer = entry;\r\n entry.older = lru._tail;\r\n lru._tail = entry;\r\n }\r\n\r\n if (lru._length >= lru._size) {\r\n map[lru._head.key] = null;\r\n lru._head = lru._head.newer;\r\n lru._head.older = null;\r\n } else {\r\n lru._length++;\r\n }\r\n },\r\n\r\n get: function(key) {\r\n var lru = this,\r\n entry = lru._map[key];\r\n\r\n if (entry) {\r\n if (entry === lru._head && entry !== lru._tail) {\r\n lru._head = entry.newer;\r\n lru._head.older = null;\r\n }\r\n\r\n if (entry !== lru._tail) {\r\n if (entry.older) {\r\n entry.older.newer = entry.newer;\r\n entry.newer.older = entry.older;\r\n }\r\n\r\n entry.older = lru._tail;\r\n entry.newer = null;\r\n\r\n lru._tail.newer = entry;\r\n lru._tail = entry;\r\n }\r\n\r\n return entry.value;\r\n }\r\n }\r\n });\r\n\r\n var TextMetrics = Class.extend({\r\n init: function() {\r\n this._cache = new LRUCache(1000);\r\n },\r\n\r\n measure: function(text, style) {\r\n var styleKey = util.objectKey(style),\r\n cacheKey = util.hashKey(text + styleKey),\r\n cachedResult = this._cache.get(cacheKey);\r\n\r\n if (cachedResult) {\r\n return cachedResult;\r\n }\r\n\r\n var size = { width: 0, height: 0, baseline: 0 };\r\n\r\n var measureBox = this._measureBox,\r\n baselineMarker = this._baselineMarker.cloneNode(false);\r\n\r\n for (var key in style) {\r\n var value = style[key];\r\n if (defined(value)) {\r\n measureBox.style[key] = value;\r\n }\r\n }\r\n\r\n $(measureBox).text(text);\r\n measureBox.appendChild(baselineMarker);\r\n doc.body.appendChild(measureBox);\r\n\r\n if ((text + \"\").length) {\r\n size.width = measureBox.offsetWidth - BASELINE_MARKER_SIZE;\r\n size.height = measureBox.offsetHeight;\r\n size.baseline = baselineMarker.offsetTop + BASELINE_MARKER_SIZE;\r\n }\r\n\r\n this._cache.put(cacheKey, size);\r\n\r\n measureBox.parentNode.removeChild(measureBox);\r\n\r\n return size;\r\n }\r\n });\r\n\r\n TextMetrics.fn._baselineMarker =\r\n $(\"<div class='k-baseline-marker' \" +\r\n \"style='display: inline-block; vertical-align: baseline;\" +\r\n \"width: \" + BASELINE_MARKER_SIZE + \"px; height: \" + BASELINE_MARKER_SIZE + \"px;\" +\r\n \"overflow: hidden;' />\")[0];\r\n\r\n TextMetrics.fn._measureBox =\r\n $(\"<div style='position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;\" +\r\n \"padding: 0 !important; margin: 0 !important; border: 0 !important;\" +\r\n \"line-height: normal !important; visibility: hidden !important; white-space:nowrap !important;' />\")[0];\r\n\r\n TextMetrics.current = new TextMetrics();\r\n\r\n function measureText(text, style) {\r\n return TextMetrics.current.measure(text, style);\r\n }\r\n\r\n // Exports ================================================================\r\n deepExtend(kendo.drawing, {\r\n util: {\r\n TextMetrics: TextMetrics,\r\n LRUCache: LRUCache,\r\n\r\n measureText: measureText\r\n }\r\n });\r\n\r\n})(window.kendo.jQuery);\r\n\r\n(function ($) {\r\n\r\n // Imports ================================================================\r\n var kendo = window.kendo,\r\n Class = kendo.Class,\r\n deepExtend = kendo.deepExtend,\r\n\r\n g = kendo.geometry,\r\n Point = g.Point,\r\n Rect = g.Rect,\r\n Size = g.Size,\r\n Matrix = g.Matrix,\r\n toMatrix = g.toMatrix,\r\n\r\n drawing = kendo.drawing,\r\n OptionsStore = drawing.OptionsStore,\r\n\r\n math = Math,\r\n pow = math.pow,\r\n\r\n util = kendo.util,\r\n append = util.append,\r\n arrayLimits = util.arrayLimits,\r\n defined = util.defined,\r\n last = util.last,\r\n valueOrDefault = util.valueOrDefault,\r\n ObserversMixin = kendo.mixins.ObserversMixin,\r\n\r\n inArray = $.inArray,\r\n push = [].push,\r\n pop = [].pop,\r\n splice = [].splice,\r\n shift = [].shift,\r\n slice = [].slice,\r\n unshift = [].unshift,\r\n defId = 1,\r\n\r\n START = \"start\",\r\n END = \"end\",\r\n HORIZONTAL = \"horizontal\";\r\n\r\n // Drawing primitives =====================================================\r\n var Element = Class.extend({\r\n nodeType: \"Element\",\r\n\r\n init: function(options) {\r\n this._initOptions(options);\r\n },\r\n\r\n _initOptions: function(options) {\r\n options = options || {};\r\n\r\n var transform = options.transform;\r\n var clip = options.clip;\r\n\r\n if (transform) {\r\n options.transform = g.transform(transform);\r\n }\r\n\r\n if (clip && !clip.id) {\r\n clip.id = generateDefinitionId();\r\n }\r\n\r\n this.options = new OptionsStore(options);\r\n this.options.addObserver(this);\r\n },\r\n\r\n transform: function(transform) {\r\n if (defined(transform)) {\r\n this.options.set(\"transform\", g.transform(transform));\r\n } else {\r\n return this.options.get(\"transform\");\r\n }\r\n },\r\n\r\n parentTransform: function() {\r\n var element = this,\r\n transformation,\r\n matrix,\r\n parentMatrix;\r\n\r\n while (element.parent) {\r\n element = element.parent;\r\n transformation = element.transform();\r\n if (transformation) {\r\n parentMatrix = transformation.matrix().multiplyCopy(parentMatrix || Matrix.unit());\r\n }\r\n }\r\n\r\n if (parentMatrix) {\r\n return g.transform(parentMatrix);\r\n }\r\n },\r\n\r\n currentTransform: function(parentTransform) {\r\n var elementTransform = this.transform(),\r\n elementMatrix = toMatrix(elementTransform),\r\n parentMatrix,\r\n combinedMatrix;\r\n\r\n if (!defined(parentTransform)) {\r\n parentTransform = this.parentTransform();\r\n }\r\n\r\n parentMatrix = toMatrix(parentTransform);\r\n\r\n if (elementMatrix && parentMatrix) {\r\n combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\r\n } else {\r\n combinedMatrix = elementMatrix || parentMatrix;\r\n }\r\n\r\n if (combinedMatrix) {\r\n return g.transform(combinedMatrix);\r\n }\r\n },\r\n\r\n visible: function(visible) {\r\n if (defined(visible)) {\r\n this.options.set(\"visible\", visible);\r\n return this;\r\n } else {\r\n return this.options.get(\"visible\") !== false;\r\n }\r\n },\r\n\r\n clip: function(clip) {\r\n var options = this.options;\r\n if (defined(clip)) {\r\n if (clip && !clip.id) {\r\n clip.id = generateDefinitionId();\r\n }\r\n options.set(\"clip\", clip);\r\n return this;\r\n } else {\r\n return options.get(\"clip\");\r\n }\r\n },\r\n\r\n opacity: function(value) {\r\n if (defined(value)) {\r\n this.options.set(\"opacity\", value);\r\n return this;\r\n } else {\r\n return valueOrDefault(this.options.get(\"opacity\"), 1);\r\n }\r\n },\r\n\r\n clippedBBox: function(transformation) {\r\n var box = this._clippedBBox(transformation);\r\n if (box) {\r\n var clip = this.clip();\r\n return clip ? Rect.intersect(box, clip.bbox(transformation)) : box;\r\n }\r\n },\r\n\r\n _clippedBBox: function(transformation) {\r\n return this.bbox(transformation);\r\n }\r\n });\r\n\r\n deepExtend(Element.fn, ObserversMixin);\r\n\r\n var ElementsArray = Class.extend({\r\n init: function(array) {\r\n array = array || [];\r\n\r\n this.length = 0;\r\n this._splice(0, array.length, array);\r\n },\r\n\r\n elements: function(elements) {\r\n if (elements) {\r\n this._splice(0, this.length, elements);\r\n\r\n this._change();\r\n return this;\r\n } else {\r\n return this.slice(0);\r\n }\r\n },\r\n\r\n push: function() {\r\n var elements = arguments;\r\n var result = push.apply(this, elements);\r\n\r\n this._add(elements);\r\n\r\n return result;\r\n },\r\n\r\n slice: slice,\r\n\r\n pop: function() {\r\n var length = this.length;\r\n var result = pop.apply(this);\r\n\r\n if (length) {\r\n this._remove([result]);\r\n }\r\n\r\n return result;\r\n },\r\n\r\n splice: function(index, howMany) {\r\n var elements = slice.call(arguments, 2);\r\n var result = this._splice(index, howMany, elements);\r\n\r\n this._change();\r\n\r\n return result;\r\n },\r\n\r\n shift: function() {\r\n var length = this.length;\r\n var result = shift.apply(this);\r\n\r\n if (length) {\r\n this._remove([result]);\r\n }\r\n\r\n return result;\r\n },\r\n\r\n unshift: function() {\r\n var elements = arguments;\r\n var result = unshift.apply(this, elements);\r\n\r\n this._add(elements);\r\n\r\n return result;\r\n },\r\n\r\n indexOf: function(element) {\r\n var that = this;\r\n var idx;\r\n var length;\r\n\r\n for (idx = 0, length = that.length; idx < length; idx++) {\r\n if (that[idx] === element) {\r\n return idx;\r\n }\r\n }\r\n return -1;\r\n },\r\n\r\n _splice: function(index, howMany, elements) {\r\n var result = splice.apply(this, [index, howMany].concat(elements));\r\n\r\n this._clearObserver(result);\r\n this._setObserver(elements);\r\n\r\n return result;\r\n },\r\n\r\n _add: function(elements) {\r\n this._setObserver(elements);\r\n this._change();\r\n },\r\n\r\n _remove: function(elements) {\r\n this._clearObserver(elements);\r\n this._change();\r\n },\r\n\r\n _setObserver: function(elements) {\r\n for (var idx = 0; idx < elements.length; idx++) {\r\n elements[idx].addObserver(this);\r\n }\r\n },\r\n\r\n _clearObserver: function(elements) {\r\n for (var idx = 0; idx < elements.length; idx++) {\r\n elements[idx].removeObserver(this);\r\n }\r\n },\r\n\r\n _change: function() {}\r\n });\r\n\r\n deepExtend(ElementsArray.fn, ObserversMixin);\r\n\r\n var Group = Element.extend({\r\n nodeType: \"Group\",\r\n\r\n init: function(options) {\r\n Element.fn.init.call(this, options);\r\n this.children = [];\r\n },\r\n\r\n childrenChange: function(action, items, index) {\r\n this.trigger(\"childrenChange\",{\r\n action: action,\r\n items: items,\r\n index: index\r\n });\r\n },\r\n\r\n append: function() {\r\n append(this.children, arguments);\r\n this._reparent(arguments, this);\r\n\r\n this.childrenChange(\"add\", arguments);\r\n\r\n return this;\r\n },\r\n\r\n insertAt: function(element, index) {\r\n this.children.splice(index, 0, element);\r\n element.parent = this;\r\n\r\n this.childrenChange(\"add\", [element], index);\r\n\r\n return this;\r\n },\r\n\r\n remove: function(element) {\r\n var index = inArray(element, this.children);\r\n if (index >= 0) {\r\n this.children.splice(index, 1);\r\n element.parent = null;\r\n this.childrenChange(\"remove\", [element], index);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n removeAt: function(index) {\r\n if (0 <= index && index < this.children.length) {\r\n var element = this.children[index];\r\n this.children.splice(index, 1);\r\n element.parent = null;\r\n this.childrenChange(\"remove\", [element], index);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n clear: function() {\r\n var items = this.children;\r\n this.children = [];\r\n this._reparent(items, null);\r\n\r\n this.childrenChange(\"remove\", items, 0);\r\n\r\n return this;\r\n },\r\n\r\n bbox: function(transformation) {\r\n return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\r\n },\r\n\r\n rawBBox: function() {\r\n return elementsBoundingBox(this.children, false);\r\n },\r\n\r\n _clippedBBox: function(transformation) {\r\n return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\r\n },\r\n\r\n currentTransform: function(transformation) {\r\n return Element.fn.currentTransform.call(this, transformation) || null;\r\n },\r\n\r\n _reparent: function(elements, newParent) {\r\n for (var i = 0; i < elements.length; i++) {\r\n var child = elements[i];\r\n var parent = child.parent;\r\n if (parent && parent != this && parent.remove) {\r\n parent.remove(child);\r\n }\r\n\r\n child.parent = newParent;\r\n }\r\n }\r\n });\r\n drawing.mixins.Traversable.extend(Group.fn, \"children\");\r\n\r\n var Text = Element.extend({\r\n nodeType: \"Text\",\r\n\r\n init: function(content, position, options) {\r\n Element.fn.init.call(this, options);\r\n\r\n this.content(content);\r\n this.position(position || new g.Point());\r\n\r\n if (!this.options.font) {\r\n this.options.font = \"12px sans-serif\";\r\n }\r\n\r\n if (!defined(this.options.fill)) {\r\n this.fill(\"#000\");\r\n }\r\n },\r\n\r\n content: function(value) {\r\n if (defined(value)) {\r\n this.options.set(\"content\", value);\r\n return this;\r\n } else {\r\n return this.options.get(\"content\");\r\n }\r\n },\r\n\r\n measure: function() {\r\n var metrics = drawing.util.measureText(this.content(), {\r\n font: this.options.get(\"font\")\r\n });\r\n\r\n return metrics;\r\n },\r\n\r\n rect: function() {\r\n var size = this.measure();\r\n var pos = this.position().clone();\r\n return new g.Rect(pos, [size.width, size.height]);\r\n },\r\n\r\n bbox: function(transformation) {\r\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\r\n return this.rect().bbox(combinedMatrix);\r\n },\r\n\r\n rawBBox: function() {\r\n return this.rect().bbox();\r\n }\r\n });\r\n drawing.mixins.Paintable.extend(Text.fn);\r\n definePointAccessors(Text.fn, [\"position\"]);\r\n\r\n var Circle = Element.extend({\r\n nodeType: \"Circle\",\r\n\r\n init: function(geometry, options) {\r\n Element.fn.init.call(this, options);\r\n this.geometry(geometry || new g.Circle());\r\n\r\n if (!defined(this.options.stroke)) {\r\n this.stroke(\"#000\");\r\n }\r\n },\r\n\r\n bbox: function(transformation) {\r\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\r\n var rect = this._geometry.bbox(combinedMatrix);\r\n var strokeWidth = this.options.get(\"stroke.width\");\r\n if (strokeWidth) {\r\n expandRect(rect, strokeWidth / 2);\r\n }\r\n\r\n return rect;\r\n },\r\n\r\n rawBBox: function() {\r\n return this._geometry.bbox();\r\n }\r\n });\r\n drawing.mixins.Paintable.extend(Circle.fn);\r\n defineGeometryAccessors(Circle.fn, [\"geometry\"]);\r\n\r\n var Arc = Element.extend({\r\n nodeType: \"Arc\",\r\n\r\n init: function(geometry, options) {\r\n Element.fn.init.call(this, options);\r\n this.geometry(geometry || new g.Arc());\r\n\r\n if (!defined(this.options.stroke)) {\r\n this.stroke(\"#000\");\r\n }\r\n },\r\n\r\n bbox: function(transformation) {\r\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\r\n var rect = this.geometry().bbox(combinedMatrix);\r\n var strokeWidth = this.options.get(\"stroke.width\");\r\n\r\n if (strokeWidth) {\r\n expandRect(rect, strokeWidth / 2);\r\n }\r\n\r\n return rect;\r\n },\r\n\r\n rawBBox: function() {\r\n return this.geometry().bbox();\r\n },\r\n\r\n toPath: function() {\r\n var path = new Path();\r\n var curvePoints = this.geometry().curvePoints();\r\n\r\n if (curvePoints.length > 0) {\r\n path.moveTo(curvePoints[0].x, curvePoints[0].y);\r\n\r\n for (var i = 1; i < curvePoints.length; i+=3) {\r\n path.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\r\n }\r\n }\r\n\r\n return path;\r\n }\r\n });\r\n drawing.mixins.Paintable.extend(Arc.fn);\r\n defineGeometryAccessors(Arc.fn, [\"geometry\"]);\r\n\r\n var GeometryElementsArray = ElementsArray.extend({\r\n _change: function() {\r\n this.geometryChange();\r\n }\r\n });\r\n\r\n var Segment = Class.extend({\r\n init: function(anchor, controlIn, controlOut) {\r\n this.anchor(anchor || new Point());\r\n this.controlIn(controlIn);\r\n this.controlOut(controlOut);\r\n },\r\n\r\n bboxTo: function(toSegment, matrix) {\r\n var rect;\r\n var segmentAnchor = this.anchor().transformCopy(matrix);\r\n var toSegmentAnchor = toSegment.anchor().transformCopy(matrix);\r\n\r\n if (this.controlOut() && toSegment.controlIn()) {\r\n rect = this._curveBoundingBox(\r\n segmentAnchor, this.controlOut().transformCopy(matrix),\r\n toSegment.controlIn().transformCopy(matrix), toSegmentAnchor\r\n );\r\n } else {\r\n rect = this._lineBoundingBox(segmentAnchor, toSegmentAnchor);\r\n }\r\n\r\n return rect;\r\n },\r\n\r\n _lineBoundingBox: function(p1, p2) {\r\n return Rect.fromPoints(p1, p2);\r\n },\r\n\r\n _curveBoundingBox: function(p1, cp1, cp2, p2) {\r\n var points = [p1, cp1, cp2, p2],\r\n extremesX = this._curveExtremesFor(points, \"x\"),\r\n extremesY = this._curveExtremesFor(points, \"y\"),\r\n xLimits = arrayLimits([extremesX.min, extremesX.max, p1.x, p2.x]),\r\n yLimits = arrayLimits([extremesY.min, extremesY.max, p1.y, p2.y]);\r\n\r\n return Rect.fromPoints(new Point(xLimits.min, yLimits.min), new Point(xLimits.max, yLimits.max));\r\n },\r\n\r\n _curveExtremesFor: function(points, field) {\r\n var extremes = this._curveExtremes(\r\n points[0][field], points[1][field],\r\n points[2][field], points[3][field]\r\n );\r\n\r\n return {\r\n min: this._calculateCurveAt(extremes.min, field, points),\r\n max: this._calculateCurveAt(extremes.max, field, points)\r\n };\r\n },\r\n\r\n _calculateCurveAt: function (t, field, points) {\r\n var t1 = 1- t;\r\n\r\n return pow(t1, 3) * points[0][field] +\r\n 3 * pow(t1, 2) * t * points[1][field] +\r\n 3 * pow(t, 2) * t1 * points[2][field] +\r\n pow(t, 3) * points[3][field];\r\n },\r\n\r\n _curveExtremes: function (x1, x2, x3, x4) {\r\n var a = x1 - 3 * x2 + 3 * x3 - x4;\r\n var b = - 2 * (x1 - 2 * x2 + x3);\r\n var c = x1 - x2;\r\n var sqrt = math.sqrt(b * b - 4 * a * c);\r\n var t1 = 0;\r\n var t2 = 1;\r\n\r\n if (a === 0) {\r\n if (b !== 0) {\r\n t1 = t2 = -c / b;\r\n }\r\n } else if (!isNaN(sqrt)) {\r\n t1 = (- b + sqrt) / (2 * a);\r\n t2 = (- b - sqrt) / (2 * a);\r\n }\r\n\r\n var min = math.max(math.min(t1, t2), 0);\r\n if (min < 0 || min > 1) {\r\n min = 0;\r\n }\r\n\r\n var max = math.min(math.max(t1, t2), 1);\r\n if (max > 1 || max < 0) {\r\n max = 1;\r\n }\r\n\r\n return {\r\n min: min,\r\n max: max\r\n };\r\n }\r\n });\r\n definePointAccessors(Segment.fn, [\"anchor\", \"controlIn\", \"controlOut\"]);\r\n deepExtend(Segment.fn, ObserversMixin);\r\n\r\n var Path = Element.extend({\r\n nodeType: \"Path\",\r\n\r\n init: function(options) {\r\n Element.fn.init.call(this, options);\r\n this.segments = new GeometryElementsArray();\r\n this.segments.addObserver(this);\r\n\r\n if (!defined(this.options.stroke)) {\r\n this.stroke(\"#000\");\r\n\r\n if (!defined(this.options.stroke.lineJoin)) {\r\n this.options.set(\"stroke.lineJoin\", \"miter\");\r\n }\r\n }\r\n },\r\n\r\n moveTo: function(x, y) {\r\n this.suspend();\r\n this.segments.elements([]);\r\n this.resume();\r\n\r\n this.lineTo(x, y);\r\n\r\n return this;\r\n },\r\n\r\n lineTo: function(x, y) {\r\n var point = defined(y) ? new Point(x, y) : x,\r\n segment = new Segment(point);\r\n\r\n this.segments.push(segment);\r\n\r\n return this;\r\n },\r\n\r\n curveTo: function(controlOut, controlIn, point) {\r\n if (this.segments.length > 0) {\r\n var lastSegment = last(this.segments);\r\n var segment = new Segment(point, controlIn);\r\n this.suspend();\r\n lastSegment.controlOut(controlOut);\r\n this.resume();\r\n\r\n this.segments.push(segment);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n arc: function(startAngle, endAngle, radiusX, radiusY, anticlockwise) {\r\n if (this.segments.length > 0) {\r\n var lastSegment = last(this.segments);\r\n var anchor = lastSegment.anchor();\r\n var start = util.rad(startAngle);\r\n var center = new Point(anchor.x - radiusX * math.cos(start),\r\n anchor.y - radiusY * math.sin(start));\r\n var arc = new g.Arc(center, {\r\n startAngle: startAngle,\r\n endAngle: endAngle,\r\n radiusX: radiusX,\r\n radiusY: radiusY,\r\n anticlockwise: anticlockwise\r\n });\r\n\r\n this._addArcSegments(arc);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n arcTo: function(end, rx, ry, largeArc, swipe) {\r\n if (this.segments.length > 0) {\r\n var lastSegment = last(this.segments);\r\n var anchor = lastSegment.anchor();\r\n var arc = g.Arc.fromPoints(anchor, end, rx, ry, largeArc, swipe);\r\n\r\n this._addArcSegments(arc);\r\n }\r\n return this;\r\n },\r\n\r\n _addArcSegments: function(arc) {\r\n this.suspend();\r\n var curvePoints = arc.curvePoints();\r\n for (var i = 1; i < curvePoints.length; i+=3) {\r\n this.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\r\n }\r\n this.resume();\r\n this.geometryChange();\r\n },\r\n\r\n close: function() {\r\n this.options.closed = true;\r\n this.geometryChange();\r\n\r\n return this;\r\n },\r\n\r\n bbox: function(transformation) {\r\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\r\n var boundingBox = this._bbox(combinedMatrix);\r\n var strokeWidth = this.options.get(\"stroke.width\");\r\n if (strokeWidth) {\r\n expandRect(boundingBox, strokeWidth / 2);\r\n }\r\n return boundingBox;\r\n },\r\n\r\n rawBBox: function() {\r\n return this._bbox();\r\n },\r\n\r\n _bbox: function(matrix) {\r\n var segments = this.segments;\r\n var length = segments.length;\r\n var boundingBox;\r\n\r\n if (length === 1) {\r\n var anchor = segments[0].anchor().transformCopy(matrix);\r\n boundingBox = new Rect(anchor, Size.ZERO);\r\n } else if (length > 0) {\r\n for (var i = 1; i < length; i++) {\r\n var segmentBox = segments[i - 1].bboxTo(segments[i], matrix);\r\n if (boundingBox) {\r\n boundingBox = Rect.union(boundingBox, segmentBox);\r\n } else {\r\n boundingBox = segmentBox;\r\n }\r\n }\r\n }\r\n\r\n return boundingBox;\r\n }\r\n });\r\n drawing.mixins.Paintable.extend(Path.fn);\r\n\r\n Path.fromRect = function(rect, options) {\r\n return new Path(options)\r\n .moveTo(rect.topLeft())\r\n .lineTo(rect.topRight())\r\n .lineTo(rect.bottomRight())\r\n .lineTo(rect.bottomLeft())\r\n .close();\r\n };\r\n\r\n Path.fromPoints = function(points, options) {\r\n if (points) {\r\n var path = new Path(options);\r\n\r\n for (var i = 0; i < points.length; i++) {\r\n var pt = Point.create(points[i]);\r\n if (pt) {\r\n if (i === 0) {\r\n path.moveTo(pt);\r\n } else {\r\n path.lineTo(pt);\r\n }\r\n }\r\n }\r\n\r\n return path;\r\n }\r\n };\r\n\r\n Path.fromArc = function(arc, options) {\r\n var path = new Path(options);\r\n var startAngle = arc.startAngle;\r\n var start = arc.pointAt(startAngle);\r\n path.moveTo(start.x, start.y);\r\n path.arc(startAngle, arc.endAngle, arc.radiusX, arc.radiusY, arc.anticlockwise);\r\n return path;\r\n };\r\n\r\n var MultiPath = Element.extend({\r\n nodeType: \"MultiPath\",\r\n\r\n init: function(options) {\r\n Element.fn.init.call(this, options);\r\n this.paths = new GeometryElementsArray();\r\n this.paths.addObserver(this);\r\n\r\n if (!defined(this.options.stroke)) {\r\n this.stroke(\"#000\");\r\n }\r\n },\r\n\r\n moveTo: function(x, y) {\r\n var path = new Path();\r\n path.moveTo(x, y);\r\n\r\n this.paths.push(path);\r\n\r\n return this;\r\n },\r\n\r\n lineTo: function(x, y) {\r\n if (this.paths.length > 0) {\r\n last(this.paths).lineTo(x, y);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n curveTo: function(controlOut, controlIn, point) {\r\n if (this.paths.length > 0) {\r\n last(this.paths).curveTo(controlOut, controlIn, point);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n arc: function(startAngle, endAngle, radiusX, radiusY, anticlockwise) {\r\n if (this.paths.length > 0) {\r\n last(this.paths).arc(startAngle, endAngle, radiusX, radiusY, anticlockwise);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n arcTo: function(end, rx, ry, largeArc, swipe) {\r\n if (this.paths.length > 0) {\r\n last(this.paths).arcTo(end, rx, ry, largeArc, swipe);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n close: function() {\r\n if (this.paths.length > 0) {\r\n last(this.paths).close();\r\n }\r\n\r\n return this;\r\n },\r\n\r\n bbox: function(transformation) {\r\n return elementsBoundingBox(this.paths, true, this.currentTransform(transformation));\r\n },\r\n\r\n rawBBox: function() {\r\n return elementsBoundingBox(this.paths, false);\r\n },\r\n\r\n _clippedBBox: function(transformation) {\r\n return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\r\n }\r\n });\r\n drawing.mixins.Paintable.extend(MultiPath.fn);\r\n\r\n var Image = Element.extend({\r\n nodeType: \"Image\",\r\n\r\n init: function(src, rect, options) {\r\n Element.fn.init.call(this, options);\r\n\r\n this.src(src);\r\n this.rect(rect || new g.Rect());\r\n },\r\n\r\n src: function(value) {\r\n if (defined(value)) {\r\n this.options.set(\"src\", value);\r\n return this;\r\n } else {\r\n return this.options.get(\"src\");\r\n }\r\n },\r\n\r\n bbox: function(transformation) {\r\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\r\n return this._rect.bbox(combinedMatrix);\r\n },\r\n\r\n rawBBox: function() {\r\n return this._rect.bbox();\r\n }\r\n });\r\n defineGeometryAccessors(Image.fn, [\"rect\"]);\r\n\r\n var GradientStop = Class.extend({\r\n init: function(offset, color, opacity) {\r\n this.options = new OptionsStore({\r\n offset: offset,\r\n color: color,\r\n opacity: defined(opacity) ? opacity : 1\r\n });\r\n this.options.addObserver(this);\r\n }\r\n });\r\n\r\n defineOptionsAccessors(GradientStop.fn, [\"offset\", \"color\", \"opacity\"]);\r\n deepExtend(GradientStop.fn, ObserversMixin);\r\n\r\n GradientStop.create = function(arg) {\r\n if (defined(arg)) {\r\n var stop;\r\n if (arg instanceof GradientStop) {\r\n stop = arg;\r\n } else if (arg.length > 1) {\r\n stop = new GradientStop(arg[0], arg[1], arg[2]);\r\n } else {\r\n stop = new GradientStop(arg.offset, arg.color, arg.opacity);\r\n }\r\n\r\n return stop;\r\n }\r\n };\r\n\r\n var StopsArray = ElementsArray.extend({\r\n _change: function() {\r\n this.optionsChange({\r\n field: \"stops\"\r\n });\r\n }\r\n });\r\n\r\n var Gradient = Class.extend({\r\n nodeType: \"gradient\",\r\n\r\n init: function(options) {\r\n this.stops = new StopsArray(this._createStops(options.stops));\r\n this.stops.addObserver(this);\r\n this._userSpace = options.userSpace;\r\n this.id = generateDefinitionId();\r\n },\r\n\r\n userSpace: function(value) {\r\n if (defined(value)) {\r\n this._userSpace = value;\r\n this.optionsChange();\r\n return this;\r\n } else {\r\n return this._userSpace;\r\n }\r\n },\r\n\r\n _createStops: function(stops) {\r\n var result = [];\r\n var idx;\r\n stops = stops || [];\r\n for (idx = 0; idx < stops.length; idx++) {\r\n result.push(GradientStop.create(stops[idx]));\r\n }\r\n\r\n return result;\r\n },\r\n\r\n addStop: function(offset, color, opacity) {\r\n this.stops.push(new GradientStop(offset, color, opacity));\r\n },\r\n\r\n removeStop: function(stop) {\r\n var index = this.stops.indexOf(stop);\r\n if (index >= 0) {\r\n this.stops.splice(index, 1);\r\n }\r\n }\r\n });\r\n\r\n deepExtend(Gradient.fn, ObserversMixin, {\r\n optionsChange: function(e) {\r\n this.trigger(\"optionsChange\", {\r\n field: \"gradient\" + (e ? \".\" + e.field : \"\"),\r\n value: this\r\n });\r\n },\r\n\r\n geometryChange: function() {\r\n this.optionsChange();\r\n }\r\n });\r\n\r\n var LinearGradient = Gradient.extend({\r\n init: function(options) {\r\n options = options || {};\r\n Gradient.fn.init.call(this, options);\r\n\r\n this.start(options.start || new Point());\r\n\r\n this.end(options.end || new Point(1, 0));\r\n }\r\n });\r\n\r\n definePointAccessors(LinearGradient.fn, [\"start\", \"end\"]);\r\n\r\n var RadialGradient = Gradient.extend({\r\n init: function(options) {\r\n options = options || {};\r\n Gradient.fn.init.call(this, options);\r\n\r\n this.center(options.center || new Point());\r\n this._radius = defined(options.radius) ? options.radius : 1;\r\n this._fallbackFill = options.fallbackFill;\r\n },\r\n\r\n radius: function(value) {\r\n if (defined(value)) {\r\n this._radius = value;\r\n this.geometryChange();\r\n return this;\r\n } else {\r\n return this._radius;\r\n }\r\n },\r\n\r\n fallbackFill: function(value) {\r\n if (defined(value)) {\r\n this._fallbackFill = value;\r\n this.optionsChange();\r\n return this;\r\n } else {\r\n return this._fallbackFill;\r\n }\r\n }\r\n });\r\n\r\n definePointAccessors(RadialGradient.fn, [\"center\"]);\r\n\r\n var Layout = Group.extend({\r\n init: function(rect, options) {\r\n Group.fn.init.call(this, kendo.deepExtend({}, this._defaults, options));\r\n this._rect = rect;\r\n this._fieldMap = {};\r\n },\r\n\r\n _defaults: {\r\n alignContent: START,\r\n justifyContent: START,\r\n alignItems: START,\r\n spacing: 0,\r\n orientation: HORIZONTAL,\r\n lineSpacing: 0,\r\n wrap: true\r\n },\r\n\r\n rect: function(value) {\r\n if (value) {\r\n this._rect = value;\r\n return this;\r\n } else {\r\n return this._rect;\r\n }\r\n },\r\n\r\n _initMap: function() {\r\n var options = this.options;\r\n var fieldMap = this._fieldMap;\r\n if (options.orientation == HORIZONTAL) {\r\n fieldMap.sizeField = \"width\";\r\n fieldMap.groupsSizeField = \"height\";\r\n fieldMap.groupAxis = \"x\";\r\n fieldMap.groupsAxis = \"y\";\r\n } else {\r\n fieldMap.sizeField = \"height\";\r\n fieldMap.groupsSizeField = \"width\";\r\n fieldMap.groupAxis = \"y\";\r\n fieldMap.groupsAxis = \"x\";\r\n }\r\n },\r\n\r\n reflow: function() {\r\n if (!this._rect || this.children.length === 0) {\r\n return;\r\n }\r\n this._initMap();\r\n\r\n if (this.options.transform) {\r\n this.transform(null);\r\n }\r\n\r\n var options = this.options;\r\n var fieldMap = this._fieldMap;\r\n var rect = this._rect;\r\n var groupOptions = this._initGroups();\r\n var groups = groupOptions.groups;\r\n var groupsSize = groupOptions.groupsSize;\r\n var sizeField = fieldMap.sizeField;\r\n var groupsSizeField = fieldMap.groupsSizeField;\r\n var groupAxis = fieldMap.groupAxis;\r\n var groupsAxis = fieldMap.groupsAxis;\r\n var groupStart = alignStart(groupsSize, rect, options.alignContent, groupsAxis, groupsSizeField);\r\n var groupOrigin = new Point();\r\n var elementOrigin = new Point();\r\n var size = new g.Size();\r\n var elementStart, bbox, element, group, groupBox;\r\n\r\n for (var groupIdx = 0; groupIdx < groups.length; groupIdx++) {\r\n group = groups[groupIdx];\r\n groupOrigin[groupAxis] = elementStart = alignStart(group.size, rect, options.justifyContent, groupAxis, sizeField);\r\n groupOrigin[groupsAxis] = groupStart;\r\n size[sizeField] = group.size;\r\n size[groupsSizeField] = group.lineSize;\r\n groupBox = new Rect(groupOrigin, size);\r\n for (var idx = 0; idx < group.bboxes.length; idx++) {\r\n element = group.elements[idx];\r\n bbox = group.bboxes[idx];\r\n elementOrigin[groupAxis] = elementStart;\r\n elementOrigin[groupsAxis] = alignStart(bbox.size[groupsSizeField], groupBox, options.alignItems, groupsAxis, groupsSizeField);\r\n translateToPoint(elementOrigin, bbox, element);\r\n elementStart+= bbox.size[sizeField] + options.spacing;\r\n }\r\n groupStart += group.lineSize + options.lineSpacing;\r\n }\r\n\r\n if (!options.wrap && group.size > rect.size[sizeField]) {\r\n var scale = rect.size[sizeField] / groupBox.size[sizeField];\r\n var scaledStart = groupBox.topLeft().scale(scale, scale);\r\n var scaledSize = groupBox.size[groupsSizeField] * scale;\r\n var newStart = alignStart(scaledSize, rect, options.alignContent, groupsAxis, groupsSizeField)\r\n var transform = g.transform();\r\n if (groupAxis === \"x\") {\r\n transform.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\r\n } else {\r\n transform.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\r\n }\r\n transform.scale(scale, scale);\r\n\r\n this.transform(transform);\r\n }\r\n },\r\n\r\n _initGroups: function() {\r\n var options = this.options;\r\n var children = this.children;\r\n var lineSpacing = options.lineSpacing;\r\n var sizeField = this._fieldMap.sizeField;\r\n var groupsSize = -lineSpacing;\r\n var groups = [];\r\n var group = this._newGroup();\r\n var addGroup = function() {\r\n groups.push(group);\r\n groupsSize+= group.lineSize + lineSpacing;\r\n };\r\n var bbox, element;\r\n\r\n for (var idx = 0; idx < children.length; idx++) {\r\n element = children[idx];\r\n bbox = children[idx].clippedBBox();\r\n if (element.visible() && bbox) {\r\n if (options.wrap && group.size + bbox.size[sizeField] + options.spacing > this._rect.size[sizeField]) {\r\n if (group.bboxes.length === 0) {\r\n this._addToGroup(group, bbox, element);\r\n addGroup();\r\n group = this._newGroup();\r\n } else {\r\n addGroup();\r\n group = this._newGroup();\r\n this._addToGroup(group, bbox, element);\r\n }\r\n } else {\r\n this._addToGroup(group, bbox, element);\r\n }\r\n }\r\n }\r\n\r\n if (group.bboxes.length) {\r\n addGroup();\r\n }\r\n\r\n return {\r\n groups: groups,\r\n groupsSize: groupsSize\r\n };\r\n },\r\n\r\n _addToGroup: function(group, bbox, element) {\r\n group.size += bbox.size[this._fieldMap.sizeField] + this.options.spacing;\r\n group.lineSize = Math.max(bbox.size[this._fieldMap.groupsSizeField], group.lineSize);\r\n group.bboxes.push(bbox);\r\n group.elements.push(element);\r\n },\r\n\r\n _newGroup: function() {\r\n return {\r\n lineSize: 0,\r\n size: -this.options.spacing,\r\n bboxes: [],\r\n elements: []\r\n };\r\n }\r\n });\r\n\r\n // Helper functions ===========================================\r\n function elementsBoundingBox(elements, applyTransform, transformation) {\r\n var boundingBox;\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n var element = elements[i];\r\n if (element.visible()) {\r\n var elementBoundingBox = applyTransform ? element.bbox(transformation) : element.rawBBox();\r\n if (elementBoundingBox) {\r\n if (boundingBox) {\r\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\r\n } else {\r\n boundingBox = elementBoundingBox;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return boundingBox;\r\n }\r\n\r\n function elementsClippedBoundingBox(elements, transformation) {\r\n var boundingBox;\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n var element = elements[i];\r\n if (element.visible()) {\r\n var elementBoundingBox = element.clippedBBox(transformation);\r\n if (elementBoundingBox) {\r\n if (boundingBox) {\r\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\r\n } else {\r\n boundingBox = elementBoundingBox;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return boundingBox;\r\n }\r\n\r\n function expandRect(rect, value) {\r\n rect.origin.x -= value;\r\n rect.origin.y -= value;\r\n rect.size.width += value * 2;\r\n rect.size.height += value * 2;\r\n }\r\n\r\n function defineGeometryAccessors(fn, names) {\r\n for (var i = 0; i < names.length; i++) {\r\n fn[names[i]] = geometryAccessor(names[i]);\r\n }\r\n }\r\n\r\n function geometryAccessor(name) {\r\n var fieldName = \"_\" + name;\r\n return function(value) {\r\n if (defined(value)) {\r\n this._observerField(fieldName, value);\r\n this.geometryChange();\r\n return this;\r\n } else {\r\n return this[fieldName];\r\n }\r\n };\r\n }\r\n\r\n function definePointAccessors(fn, names) {\r\n for (var i = 0; i < names.length; i++) {\r\n fn[names[i]] = pointAccessor(names[i]);\r\n }\r\n }\r\n\r\n function pointAccessor(name) {\r\n var fieldName = \"_\" + name;\r\n return function(value) {\r\n if (defined(value)) {\r\n this._observerField(fieldName, Point.create(value));\r\n this.geometryChange();\r\n return this;\r\n } else {\r\n return this[fieldName];\r\n }\r\n };\r\n }\r\n\r\n function defineOptionsAccessors(fn, names) {\r\n for (var i = 0; i < names.length; i++) {\r\n fn[names[i]] = optionsAccessor(names[i]);\r\n }\r\n }\r\n\r\n function optionsAccessor(name) {\r\n return function(value) {\r\n if (defined(value)) {\r\n this.options.set(name, value);\r\n return this;\r\n } else {\r\n return this.options.get(name);\r\n }\r\n };\r\n }\r\n\r\n function generateDefinitionId() {\r\n return \"kdef\" + defId++;\r\n }\r\n\r\n function align(elements, rect, alignment) {\r\n alignElements(elements, rect, alignment, \"x\", \"width\");\r\n }\r\n\r\n function vAlign(elements, rect, alignment) {\r\n alignElements(elements, rect, alignment, \"y\", \"height\");\r\n }\r\n\r\n function stack(elements) {\r\n stackElements(getStackElements(elements), \"x\", \"y\", \"width\");\r\n }\r\n\r\n function vStack(elements) {\r\n stackElements(getStackElements(elements), \"y\", \"x\", \"height\");\r\n }\r\n\r\n function wrap(elements, rect) {\r\n return wrapElements(elements, rect, \"x\", \"y\", \"width\");\r\n }\r\n\r\n function vWrap(elements, rect) {\r\n return wrapElements(elements, rect, \"y\", \"x\", \"height\");\r\n }\r\n\r\n function wrapElements(elements, rect, axis, otherAxis, sizeField) {\r\n var result = [];\r\n var stacks = getStacks(elements, rect, sizeField);\r\n var origin = rect.origin.clone();\r\n var startElement;\r\n var elementIdx;\r\n var stack;\r\n var idx;\r\n\r\n for (idx = 0; idx < stacks.length; idx++) {\r\n stack = stacks[idx];\r\n startElement = stack[0];\r\n origin[otherAxis] = startElement.bbox.origin[otherAxis];\r\n translateToPoint(origin, startElement.bbox, startElement.element);\r\n startElement.bbox.origin[axis] = origin[axis];\r\n stackElements(stack, axis, otherAxis, sizeField);\r\n result.push([]);\r\n for (elementIdx = 0; elementIdx < stack.length; elementIdx++) {\r\n result[idx].push(stack[elementIdx].element);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n function fit (element, rect) {\r\n var bbox = element.clippedBBox();\r\n var elementSize = bbox.size;\r\n var rectSize = rect.size;\r\n if (rectSize.width < elementSize.width || rectSize.height < elementSize.height) {\r\n var scale = math.min(rectSize.width / elementSize.width, rectSize.height / elementSize.height);\r\n var transform = element.transform() || g.transform();\r\n transform.scale(scale, scale);\r\n element.transform(transform);\r\n }\r\n }\r\n\r\n //TO DO: consider using same function for the layout with callbacks\r\n function getStacks(elements, rect, sizeField) {\r\n var maxSize = rect.size[sizeField];\r\n var stackSize = 0;\r\n var stacks = [];\r\n var stack = [];\r\n var element;\r\n var size;\r\n var bbox;\r\n\r\n var addElementToStack = function() {\r\n stack.push({\r\n element: element,\r\n bbox: bbox\r\n });\r\n };\r\n for (var idx = 0; idx < elements.length; idx++) {\r\n element = elements[idx];\r\n bbox = element.clippedBBox();\r\n if (bbox) {\r\n size = bbox.size[sizeField];\r\n if (stackSize + size > maxSize) {\r\n if (stack.length) {\r\n stacks.push(stack);\r\n stack = [];\r\n addElementToStack();\r\n stackSize = size;\r\n } else {\r\n addElementToStack();\r\n stacks.push(stack);\r\n stack = [];\r\n stackSize = 0;\r\n }\r\n } else {\r\n addElementToStack();\r\n stackSize += size;\r\n }\r\n }\r\n }\r\n\r\n if (stack.length) {\r\n stacks.push(stack);\r\n }\r\n\r\n return stacks;\r\n }\r\n\r\n function getStackElements(elements) {\r\n var stackElements = [];\r\n var element;\r\n var bbox;\r\n for (var idx = 0; idx < elements.length; idx++) {\r\n element = elements[idx];\r\n bbox = element.clippedBBox();\r\n if (bbox) {\r\n stackElements.push({\r\n element: element,\r\n bbox: bbox\r\n });\r\n }\r\n }\r\n\r\n return stackElements;\r\n }\r\n\r\n function stackElements(elements, stackAxis, otherAxis, sizeField) {\r\n if (elements.length > 1) {\r\n var previousBBox = elements[0].bbox;\r\n var origin = new Point();\r\n var element;\r\n var bbox;\r\n\r\n for (var idx = 1; idx < elements.length; idx++) {\r\n element = elements[idx].element;\r\n bbox = elements[idx].bbox;\r\n origin[stackAxis] = previousBBox.origin[stackAxis] + previousBBox.size[sizeField];\r\n origin[otherAxis] = bbox.origin[otherAxis];\r\n translateToPoint(origin, bbox, element);\r\n bbox.origin[stackAxis] = origin[stackAxis];\r\n previousBBox = bbox;\r\n }\r\n }\r\n }\r\n\r\n function alignElements(elements, rect, alignment, axis, sizeField) {\r\n var bbox, start, point;\r\n alignment = alignment || \"start\";\r\n\r\n for (var idx = 0; idx < elements.length; idx++) {\r\n bbox = elements[idx].clippedBBox();\r\n if (bbox) {\r\n point = bbox.origin.clone();\r\n point[axis] = alignStart(bbox.size[sizeField], rect, alignment, axis, sizeField);\r\n translateToPoint(point, bbox, elements[idx]);\r\n }\r\n }\r\n }\r\n\r\n function alignStart(size, rect, align, axis, sizeField) {\r\n var start;\r\n if (align == START) {\r\n start = rect.origin[axis];\r\n } else if (align == END) {\r\n start = rect.origin[axis] + rect.size[sizeField] - size;\r\n } else {\r\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\r\n }\r\n\r\n return start;\r\n }\r\n\r\n function translate(x, y, element) {\r\n var transofrm = element.transform() || g.transform();\r\n var matrix = transofrm.matrix();\r\n matrix.e += x;\r\n matrix.f += y;\r\n element.transform(transofrm);\r\n }\r\n\r\n function translateToPoint(point, bbox, element) {\r\n translate(point.x - bbox.origin.x, point.y - bbox.origin.y, element);\r\n }\r\n\r\n // Exports ================================================================\r\n deepExtend(drawing, {\r\n align: align,\r\n Arc: Arc,\r\n Circle: Circle,\r\n Element: Element,\r\n ElementsArray: ElementsArray,\r\n fit: fit,\r\n Gradient: Gradient,\r\n GradientStop: GradientStop,\r\n Group: Group,\r\n Image: Image,\r\n Layout: Layout,\r\n LinearGradient: LinearGradient,\r\n MultiPath: MultiPath,\r\n Path: Path,\r\n RadialGradient: RadialGradient,\r\n Segment: Segment,\r\n stack: stack,\r\n Text: Text,\r\n vAlign: vAlign,\r\n vStack: vStack,\r\n vWrap: vWrap,\r\n wrap: wrap\r\n });\r\n\r\n})(window.kendo.jQuery);\r\n\r\n(function ($) {\r\n\r\n var kendo = window.kendo,\r\n drawing = kendo.drawing,\r\n geometry = kendo.geometry,\r\n\r\n Class = kendo.Class,\r\n Point = geometry.Point,\r\n deepExtend = kendo.deepExtend,\r\n trim = $.trim,\r\n util = kendo.util,\r\n deg = util.deg,\r\n last = util.last,\r\n round = util.round;\r\n\r\n var SEGMENT_REGEX = /([a-z]{1})([^a-z]*)(z)?/gi,\r\n SPLIT_REGEX = /[,\\s]?(-?(?:\\d+\\.)?\\d+)/g,\r\n MOVE = \"m\",\r\n CLOSE = \"z\";\r\n\r\n var PathParser = Class.extend({\r\n parse: function(str, options) {\r\n var parser = this;\r\n var multiPath = new drawing.MultiPath(options);\r\n var position = new Point();\r\n var previousCommand;\r\n\r\n str.replace(SEGMENT_REGEX, function(match, element, params, closePath) {\r\n var command = element.toLowerCase();\r\n var isRelative = command === element;\r\n var parameters = parseParameters(trim(params));\r\n\r\n if (command === MOVE) {\r\n if (isRelative) {\r\n position.x += parameters[0];\r\n position.y += parameters[1];\r\n } else {\r\n position.x = parameters[0];\r\n position.y = parameters[1];\r\n }\r\n\r\n multiPath.moveTo(position.x, position.y);\r\n\r\n if (parameters.length > 2) {\r\n command = \"l\";\r\n parameters.splice(0, 2);\r\n }\r\n }\r\n\r\n if (ShapeMap[command]) {\r\n ShapeMap[command](\r\n multiPath, {\r\n parameters: parameters,\r\n position: position,\r\n isRelative: isRelative,\r\n previousCommand: previousCommand\r\n }\r\n );\r\n\r\n if (closePath && closePath.toLowerCase() === CLOSE) {\r\n multiPath.close();\r\n }\r\n } else if (command !== MOVE) {\r\n throw new Error(\"Error while parsing SVG path. Unsupported command: \" + command);\r\n }\r\n\r\n previousCommand = command;\r\n });\r\n\r\n return multiPath;\r\n }\r\n });\r\n\r\n var ShapeMap = {\r\n l: function(path, options) {\r\n var parameters = options.parameters;\r\n var position = options.position;\r\n for (var i = 0; i < parameters.length; i+=2){\r\n var point = new Point(parameters[i], parameters[i + 1]);\r\n\r\n if (options.isRelative) {\r\n point.translateWith(position);\r\n }\r\n\r\n path.lineTo(point.x, point.y);\r\n\r\n position.x = point.x;\r\n position.y = point.y;\r\n }\r\n },\r\n\r\n c: function(path, options) {\r\n var parameters = options.parameters;\r\n var position = options.position;\r\n var controlOut, controlIn, point;\r\n\r\n for (var i = 0; i < parameters.length; i += 6) {\r\n controlOut = new Point(parameters[i], parameters[i + 1]);\r\n controlIn = new Point(parameters[i + 2], parameters[i + 3]);\r\n point = new Point(parameters[i + 4], parameters[i + 5]);\r\n if (options.isRelative) {\r\n controlIn.translateWith(position);\r\n controlOut.translateWith(position);\r\n point.translateWith(position);\r\n }\r\n\r\n path.curveTo(controlOut, controlIn, point);\r\n\r\n position.x = point.x;\r\n position.y = point.y;\r\n }\r\n },\r\n\r\n v: function(path, options) {\r\n var value = options.isRelative ? 0 : options.position.x;\r\n\r\n toLineParamaters(options.parameters, true, value);\r\n this.l(path, options);\r\n },\r\n\r\n h: function(path, options) {\r\n var value = options.isRelative ? 0 : options.position.y;\r\n\r\n toLineParamaters(options.parameters, false, value);\r\n this.l(path, options);\r\n },\r\n\r\n a: function(path, options) {\r\n var parameters = options.parameters;\r\n var position = options.position;\r\n for (var i = 0; i < parameters.length; i += 7) {\r\n var radiusX = parameters[i];\r\n var radiusY = parameters[i + 1];\r\n var largeArc = parameters[i + 3];\r\n var swipe = parameters[i + 4];\r\n var endPoint = new Point(parameters[i + 5], parameters[i + 6]);\r\n\r\n if (options.isRelative) {\r\n endPoint.translateWith(position);\r\n }\r\n\r\n path.arcTo(endPoint, radiusX, radiusY, largeArc, swipe);\r\n\r\n position.x = endPoint.x;\r\n position.y = endPoint.y;\r\n }\r\n },\r\n\r\n s: function(path, options) {\r\n var parameters = options.parameters;\r\n var position = options.position;\r\n var previousCommand = options.previousCommand;\r\n var controlOut, endPoint, controlIn, lastControlIn;\r\n\r\n if (previousCommand == \"s\" || previousCommand == \"c\") {\r\n lastControlIn = last(last(path.paths).segments).controlIn();\r\n }\r\n\r\n for (var i = 0; i < parameters.length; i += 4) {\r\n controlIn = new Point(parameters[i], parameters[i + 1]);\r\n endPoint = new Point(parameters[i + 2], parameters[i + 3]);\r\n if (options.isRelative) {\r\n controlIn.translateWith(position);\r\n endPoint.translateWith(position);\r\n }\r\n\r\n if (lastControlIn) {\r\n controlOut = reflectionPoint(lastControlIn, position);\r\n } else {\r\n controlOut = position.clone();\r\n }\r\n lastControlIn = controlIn;\r\n\r\n path.curveTo(controlOut, controlIn, endPoint);\r\n\r\n position.x = endPoint.x;\r\n position.y = endPoint.y;\r\n }\r\n },\r\n\r\n q: function(path, options) {\r\n var parameters = options.parameters;\r\n var position = options.position;\r\n var cubicControlPoints, endPoint, controlPoint;\r\n for (var i = 0; i < parameters.length; i += 4) {\r\n controlPoint = new Point(parameters[i], parameters[i + 1]);\r\n endPoint = new Point(parameters[i + 2], parameters[i + 3]);\r\n if (options.isRelative) {\r\n controlPoint.translateWith(position);\r\n endPoint.translateWith(position);\r\n }\r\n cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\r\n\r\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\r\n\r\n position.x = endPoint.x;\r\n position.y = endPoint.y;\r\n }\r\n },\r\n\r\n t: function(path, options) {\r\n var parameters = options.parameters;\r\n var position = options.position;\r\n var previousCommand = options.previousCommand;\r\n var cubicControlPoints, controlPoint, endPoint;\r\n\r\n if (previousCommand == \"q\" || previousCommand == \"t\") {\r\n var lastSegment = last(last(path.paths).segments);\r\n controlPoint = lastSegment.controlIn().clone()\r\n .translateWith(position.scaleCopy(-1 / 3))\r\n .scale(3 / 2);\r\n }\r\n\r\n for (var i = 0; i < parameters.length; i += 2) {\r\n endPoint = new Point(parameters[i], parameters[i + 1]);\r\n if (options.isRelative) {\r\n endPoint.translateWith(position);\r\n }\r\n\r\n if (controlPoint) {\r\n controlPoint = reflectionPoint(controlPoint, position);\r\n } else {\r\n controlPoint = position.clone();\r\n }\r\n\r\n cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\r\n\r\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\r\n\r\n position.x = endPoint.x;\r\n position.y = endPoint.y;\r\n }\r\n }\r\n };\r\n\r\n // Helper functions =======================================================\r\n\r\n function parseParameters(str) {\r\n var parameters = [];\r\n str.replace(SPLIT_REGEX, function(match, number) {\r\n parameters.push(parseFloat(number));\r\n });\r\n return parameters;\r\n }\r\n\r\n function toLineParamaters(parameters, isVertical, value) {\r\n var insertPosition = isVertical ? 0 : 1;\r\n\r\n for (var i = 0; i < parameters.length; i+=2) {\r\n parameters.splice(i + insertPosition, 0, value);\r\n }\r\n }\r\n\r\n function reflectionPoint(point, center) {\r\n if (point && center) {\r\n return center.scaleCopy(2).translate(-point.x, -point.y);\r\n }\r\n }\r\n\r\n function quadraticToCubicControlPoints(position, controlPoint, endPoint) {\r\n var third = 1 / 3;\r\n controlPoint = controlPoint.clone().scale(2 / 3);\r\n return {\r\n controlOut: controlPoint.clone().translateWith(position.scaleCopy(third)),\r\n controlIn: controlPoint.translateWith(endPoint.scaleCopy(third))\r\n };\r\n }\r\n\r\n // Exports ================================================================\r\n PathParser.current = new PathParser();\r\n\r\n drawing.Path.parse = function(str, options) {\r\n return PathParser.current.parse(str, options);\r\n };\r\n\r\n deepExtend(drawing, {\r\n PathParser: PathParser\r\n });\r\n\r\n})(window.kendo.jQuery);\r\n\r\n(function ($) {\r\n\r\n // Imports ================================================================\r\n var doc = document,\r\n\r\n kendo = window.kendo,\r\n deepExtend = kendo.deepExtend,\r\n\r\n g = kendo.geometry,\r\n d = kendo.drawing,\r\n BaseNode = d.BaseNode,\r\n\r\n util = kendo.util,\r\n defined = util.defined,\r\n isTransparent = util.isTransparent,\r\n renderAttr = util.renderAttr,\r\n renderAllAttr = util.renderAllAttr,\r\n renderSize = util.renderSize,\r\n renderTemplate = util.renderTemplate,\r\n inArray = $.inArray;\r\n\r\n // Constants ==============================================================\r\n var BUTT = \"butt\",\r\n DASH_ARRAYS = d.DASH_ARRAYS,\r\n GRADIENT = \"gradient\",\r\n NONE = \"none\",\r\n NS = \".kendo\",\r\n SOLID = \"solid\",\r\n SPACE = \" \",\r\n SQUARE = \"square\",\r\n SVG_NS = \"http://www.w3.org/2000/svg\",\r\n TRANSFORM = \"transform\",\r\n UNDEFINED = \"undefined\";\r\n\r\n // SVG rendering surface ==================================================\r\n var Surface = d.Surface.extend({\r\n init: function(element, options) {\r\n d.Surface.fn.init.call(this, element, options);\r\n\r\n this._root = new RootNode(this.options);\r\n\r\n renderSVG(this.element[0], this._template(this));\r\n this._rootElement = this.element[0].firstElementChild;\r\n alignToScreen(this._rootElement);\r\n\r\n this._root.attachTo(this._rootElement);\r\n\r\n this.element.on(\"click\" + NS, this._click);\r\n this.element.on(\"mouseover\" + NS, this._mouseenter);\r\n this.element.on(\"mouseout\" + NS, this._mouseleave);\r\n\r\n this.resize();\r\n },\r\n\r\n type: \"svg\",\r\n\r\n destroy: function() {\r\n if (this._root) {\r\n this._root.destroy();\r\n this._root = null;\r\n this._rootElement = null;\r\n this.element.off(NS);\r\n }\r\n d.Surface.fn.destroy.call(this);\r\n },\r\n\r\n translate: function(offset) {\r\n var viewBox = kendo.format(\r\n \"{0} {1} {2} {3}\",\r\n Math.round(offset.x), Math.round(offset.y),\r\n this._size.width, this._size.height);\r\n\r\n this._offset = offset;\r\n this._rootElement.setAttribute(\"viewBox\", viewBox);\r\n },\r\n\r\n draw: function(element) {\r\n d.Surface.fn.draw.call(this, element);\r\n this._root.load([element]);\r\n },\r\n\r\n clear: function() {\r\n d.Surface.fn.clear.call(this);\r\n this._root.clear();\r\n },\r\n\r\n svg: function() {\r\n return \"<?xml version='1.0' ?>\" + this._template(this);\r\n },\r\n\r\n exportVisual: function() {\r\n var visual = this._visual;\r\n\r\n var offset = this._offset;\r\n if (offset) {\r\n var wrap = new d.Group();\r\n wrap.children.push(visual);\r\n\r\n wrap.transform(\r\n g.transform().translate(-offset.x, -offset.y)\r\n );\r\n\r\n visual = wrap;\r\n }\r\n\r\n return visual;\r\n },\r\n\r\n _resize: function() {\r\n if (this._offset) {\r\n this.translate(this._offset);\r\n }\r\n },\r\n\r\n _template: renderTemplate(\r\n \"<svg style='width: 100%; height: 100%; overflow: hidden;' \" +\r\n \"xmlns='\" + SVG_NS + \"' \" + \"xmlns:xlink='http://www.w3.org/1999/xlink' \" +\r\n \"version='1.1'>#= d._root.render() #</svg>\"\r\n )\r\n });\r\n\r\n // SVG Node ================================================================\r\n var Node = BaseNode.extend({\r\n init: function(srcElement) {\r\n BaseNode.fn.init.call(this, srcElement);\r\n this.definitions = {};\r\n },\r\n\r\n destroy: function() {\r\n if (this.element) {\r\n this.element._kendoNode = null;\r\n this.element = null;\r\n }\r\n\r\n this.clearDefinitions();\r\n BaseNode.fn.destroy.call(this);\r\n },\r\n\r\n load: function(elements, pos) {\r\n var node = this,\r\n element = node.element,\r\n childNode,\r\n srcElement,\r\n children,\r\n i;\r\n\r\n for (i = 0; i < elements.length; i++) {\r\n srcElement = elements[i];\r\n children = srcElement.children;\r\n\r\n childNode = new nodeMap[srcElement.nodeType](srcElement);\r\n\r\n if (defined(pos)) {\r\n node.insertAt(childNode, pos);\r\n } else {\r\n node.append(childNode);\r\n }\r\n\r\n childNode.createDefinitions();\r\n\r\n if (children && children.length > 0) {\r\n childNode.load(children);\r\n }\r\n\r\n if (element) {\r\n childNode.attachTo(element, pos);\r\n }\r\n }\r\n },\r\n\r\n root: function() {\r\n var root = this;\r\n\r\n while (root.parent) {\r\n root = root.parent;\r\n }\r\n\r\n return root;\r\n },\r\n\r\n attachTo: function(domElement, pos) {\r\n var container = doc.createElement(\"div\");\r\n renderSVG(container,\r\n \"<svg xmlns='\" + SVG_NS + \"' version='1.1'>\" +\r\n this.render() +\r\n \"</svg>\"\r\n );\r\n\r\n var element = container.firstChild.firstChild;\r\n if (element) {\r\n if (defined(pos)) {\r\n domElement.insertBefore(element, domElement.childNodes[pos] || null);\r\n } else {\r\n domElement.appendChild(element);\r\n }\r\n this.setElement(element);\r\n }\r\n },\r\n\r\n setElement: function(element) {\r\n var nodes = this.childNodes,\r\n childElement,\r\n i;\r\n\r\n if (this.element) {\r\n this.element._kendoNode = null;\r\n }\r\n\r\n this.element = element;\r\n this.element._kendoNode = this;\r\n\r\n for (i = 0; i < nodes.length; i++) {\r\n childElement = element.childNodes[i];\r\n nodes[i].setElement(childElement);\r\n }\r\n },\r\n\r\n clear: function() {\r\n this.clearDefinitions();\r\n\r\n if (this.element) {\r\n this.element.innerHTML = \"\";\r\n }\r\n\r\n var children = this.childNodes;\r\n for (var i = 0; i < children.length; i++) {\r\n children[i].destroy();\r\n }\r\n\r\n this.childNodes = [];\r\n },\r\n\r\n removeSelf: function() {\r\n if (this.element) {\r\n var parentNode = this.element.parentNode;\r\n if (parentNode) {\r\n parentNode.removeChild(this.element);\r\n }\r\n this.element = null;\r\n }\r\n\r\n BaseNode.fn.removeSelf.call(this);\r\n },\r\n\r\n template: renderTemplate(\r\n \"#= d.renderChildren() #\"\r\n ),\r\n\r\n render: function() {\r\n return this.template(this);\r\n },\r\n\r\n renderChildren: function() {\r\n var nodes = this.childNodes,\r\n output = \"\",\r\n i;\r\n\r\n for (i = 0; i < nodes.length; i++) {\r\n output += nodes[i].render();\r\n }\r\n\r\n return output;\r\n },\r\n\r\n optionsChange: function(e) {\r\n var field = e.field;\r\n var value = e.value;\r\n\r\n if (field === \"visible\") {\r\n this.css(\"display\", value ? \"\" : NONE);\r\n } else if (DefinitionMap[field] && isDefinition(field, value)) {\r\n this.updateDefinition(field, value);\r\n } else if (field === \"opacity\") {\r\n this.attr(\"opacity\", value);\r\n }\r\n\r\n BaseNode.fn.optionsChange.call(this, e);\r\n },\r\n\r\n attr: function(name, value) {\r\n if (this.element) {\r\n this.element.setAttribute(name, value);\r\n }\r\n },\r\n\r\n allAttr: function(attrs) {\r\n for (var i = 0; i < attrs.length; i++) {\r\n this.attr(attrs[i][0], attrs[i][1]);\r\n }\r\n },\r\n\r\n css: function(name, value) {\r\n if (this.element) {\r\n this.element.style[name] = value;\r\n }\r\n },\r\n\r\n allCss: function(styles) {\r\n for (var i = 0; i < styles.length; i++) {\r\n this.css(styles[i][0], styles[i][1]);\r\n }\r\n },\r\n\r\n removeAttr: function(name) {\r\n if (this.element) {\r\n this.element.removeAttribute(name);\r\n }\r\n },\r\n\r\n mapTransform: function(transform) {\r\n var attrs = [];\r\n if (transform) {\r\n attrs.push([\r\n TRANSFORM,\r\n \"matrix(\" + transform.matrix().toString(6) + \")\"\r\n ]);\r\n }\r\n\r\n return attrs;\r\n },\r\n\r\n renderTransform: function() {\r\n return renderAllAttr(\r\n this.mapTransform(this.srcElement.transform())\r\n );\r\n },\r\n\r\n transformChange: function(value) {\r\n if (value) {\r\n this.allAttr(this.mapTransform(value));\r\n } else {\r\n this.removeAttr(TRANSFORM);\r\n }\r\n },\r\n\r\n mapStyle: function() {\r\n var options = this.srcElement.options;\r\n var style = [[\"cursor\", options.cursor]];\r\n\r\n if (options.visible === false) {\r\n style.push([\"display\", NONE]);\r\n }\r\n\r\n return style;\r\n },\r\n\r\n renderStyle: function() {\r\n return renderAttr(\"style\", util.renderStyle(this.mapStyle()));\r\n },\r\n\r\n renderOpacity: function() {\r\n return renderAttr(\"opacity\", this.srcElement.options.opacity);\r\n },\r\n\r\n createDefinitions: function() {\r\n var srcElement = this.srcElement;\r\n var definitions = this.definitions;\r\n var definition, field, options, hasDefinitions;\r\n if (srcElement) {\r\n options = srcElement.options;\r\n\r\n for (field in DefinitionMap) {\r\n definition = options.get(field);\r\n if (definition && isDefinition(field, definition)) {\r\n definitions[field] = definition;\r\n hasDefinitions = true;\r\n }\r\n }\r\n if (hasDefinitions) {\r\n this.definitionChange({\r\n action: \"add\",\r\n definitions: definitions\r\n });\r\n }\r\n }\r\n },\r\n\r\n definitionChange: function(e) {\r\n if (this.parent) {\r\n this.parent.definitionChange(e);\r\n }\r\n },\r\n\r\n updateDefinition: function(type, value) {\r\n var definitions = this.definitions;\r\n var current = definitions[type];\r\n var attr = DefinitionMap[type];\r\n var definition = {};\r\n if (current) {\r\n definition[type] = current;\r\n this.definitionChange({\r\n action: \"remove\",\r\n definitions: definition\r\n });\r\n delete definitions[type];\r\n }\r\n\r\n if (!value) {\r\n if (current) {\r\n this.removeAttr(attr);\r\n }\r\n } else {\r\n definition[type] = value;\r\n this.definitionChange({\r\n action: \"add\",\r\n definitions: definition\r\n });\r\n definitions[type] = value;\r\n this.attr(attr, refUrl(value.id));\r\n }\r\n },\r\n\r\n clearDefinitions: function() {\r\n var definitions = this.definitions;\r\n var field;\r\n\r\n for (field in definitions) {\r\n this.definitionChange({\r\n action: \"remove\",\r\n definitions: definitions\r\n });\r\n this.definitions = {};\r\n break;\r\n }\r\n },\r\n\r\n renderDefinitions: function() {\r\n return renderAllAttr(this.mapDefinitions());\r\n },\r\n\r\n mapDefinitions: function() {\r\n var definitions = this.definitions;\r\n var attrs = [];\r\n var field;\r\n for (field in definitions) {\r\n attrs.push([DefinitionMap[field], refUrl(definitions[field].id)]);\r\n }\r\n\r\n return attrs;\r\n }\r\n });\r\n\r\n var RootNode = Node.extend({\r\n init: function(options) {\r\n Node.fn.init.call(this);\r\n this.options = options;\r\n this.defs = new DefinitionNode();\r\n },\r\n\r\n attachTo: function(domElement) {\r\n this.element = domElement;\r\n this.defs.attachTo(domElement.firstElementChild);\r\n },\r\n\r\n clear: function() {\r\n BaseNode.fn.clear.call(this);\r\n },\r\n\r\n template: renderTemplate(\r\n \"#=d.defs.render()##= d.renderChildren() #\"\r\n ),\r\n\r\n definitionChange: function(e) {\r\n this.defs.definitionChange(e);\r\n }\r\n });\r\n\r\n var DefinitionNode = Node.extend({\r\n init: function() {\r\n Node.fn.init.call(this);\r\n this.definitionMap = {};\r\n },\r\n\r\n attachTo: function(domElement) {\r\n this.element = domElement;\r\n },\r\n\r\n template: renderTemplate(\r\n \"<defs>#= d.renderChildren()#</defs>\"\r\n ),\r\n\r\n definitionChange: function(e) {\r\n var definitions = e.definitions;\r\n var action = e.action;\r\n\r\n if (action == \"add\") {\r\n this.addDefinitions(definitions);\r\n } else if (action == \"remove\") {\r\n this.removeDefinitions(definitions);\r\n }\r\n },\r\n\r\n createDefinition: function(type, item) {\r\n var nodeType;\r\n if (type == \"clip\") {\r\n nodeType = ClipNode;\r\n } else if (type == \"fill\") {\r\n if (item instanceof d.LinearGradient) {\r\n nodeType = LinearGradientNode;\r\n } else if (item instanceof d.RadialGradient) {\r\n nodeType = RadialGradientNode;\r\n }\r\n }\r\n return new nodeType(item);\r\n },\r\n\r\n addDefinitions: function(definitions) {\r\n for (var field in definitions) {\r\n this.addDefinition(field, definitions[field]);\r\n }\r\n },\r\n\r\n addDefinition: function(type, srcElement) {\r\n var definitionMap = this.definitionMap;\r\n var id = srcElement.id;\r\n var element = this.element;\r\n var node, mapItem;\r\n\r\n mapItem = definitionMap[id];\r\n if (!mapItem) {\r\n node = this.createDefinition(type, srcElement);\r\n definitionMap[id] = {\r\n element: node,\r\n count: 1\r\n };\r\n this.append(node);\r\n if (element) {\r\n node.attachTo(this.element);\r\n }\r\n } else {\r\n mapItem.count++;\r\n }\r\n },\r\n\r\n removeDefinitions: function(definitions) {\r\n for (var field in definitions) {\r\n this.removeDefinition(definitions[field]);\r\n }\r\n },\r\n\r\n removeDefinition: function(srcElement) {\r\n var definitionMap = this.definitionMap;\r\n var id = srcElement.id;\r\n var mapItem;\r\n\r\n mapItem = definitionMap[id];\r\n if (mapItem) {\r\n mapItem.count--;\r\n if (mapItem.count === 0) {\r\n this.remove(inArray(mapItem.element, this.childNodes), 1);\r\n delete definitionMap[id];\r\n }\r\n }\r\n }\r\n });\r\n\r\n var ClipNode = Node.extend({\r\n init: function(srcElement) {\r\n Node.fn.init.call(this);\r\n\r\n this.srcElement = srcElement;\r\n this.id = srcElement.id;\r\n\r\n this.load([srcElement]);\r\n },\r\n\r\n template: renderTemplate(\r\n \"<clipPath id='#=d.id#'>#= d.renderChildren()#</clipPath>\"\r\n )\r\n });\r\n\r\n var GroupNode = Node.extend({\r\n template: renderTemplate(\r\n \"<g#= d.renderTransform() + d.renderStyle() + d.renderOpacity() + d.renderDefinitions()#>#= d.renderChildren() #</g>\"\r\n ),\r\n\r\n optionsChange: function(e) {\r\n if (e.field == TRANSFORM) {\r\n this.transformChange(e.value);\r\n }\r\n\r\n Node.fn.optionsChange.call(this, e);\r\n }\r\n });\r\n\r\n var PathNode = Node.extend({\r\n geometryChange: function() {\r\n this.attr(\"d\", this.renderData());\r\n this.invalidate();\r\n },\r\n\r\n optionsChange: function(e) {\r\n switch(e.field) {\r\n case \"fill\":\r\n if (e.value) {\r\n this.allAttr(this.mapFill(e.value));\r\n } else {\r\n this.removeAttr(\"fill\");\r\n }\r\n break;\r\n\r\n case \"fill.color\":\r\n this.allAttr(this.mapFill({ color: e.value }));\r\n break;\r\n\r\n case \"stroke\":\r\n if (e.value) {\r\n this.allAttr(this.mapStroke(e.value));\r\n } else {\r\n this.removeAttr(\"stroke\");\r\n }\r\n break;\r\n\r\n case TRANSFORM:\r\n this.transformChange(e.value);\r\n break;\r\n\r\n default:\r\n var name = this.attributeMap[e.field];\r\n if (name) {\r\n this.attr(name, e.value);\r\n }\r\n break;\r\n }\r\n\r\n Node.fn.optionsChange.call(this, e);\r\n },\r\n\r\n attributeMap: {\r\n \"fill.opacity\": \"fill-opacity\",\r\n \"stroke.color\": \"stroke\",\r\n \"stroke.width\": \"stroke-width\",\r\n \"stroke.opacity\": \"stroke-opacity\"\r\n },\r\n\r\n content: function(value) {\r\n if (this.element) {\r\n this.element.textContent = this.srcElement.content();\r\n }\r\n },\r\n\r\n renderData: function() {\r\n return this.printPath(this.srcElement);\r\n },\r\n\r\n printPath: function(path) {\r\n var segments = path.segments,\r\n length = segments.length;\r\n if (length > 0) {\r\n var parts = [],\r\n output,\r\n segmentType,\r\n currentType,\r\n i;\r\n\r\n for (i = 1; i < length; i++) {\r\n segmentType = this.segmentType(segments[i - 1], segments[i]);\r\n if (segmentType !== currentType) {\r\n currentType = segmentType;\r\n parts.push(segmentType);\r\n }\r\n\r\n if (segmentType === \"L\") {\r\n parts.push(this.printPoints(segments[i].anchor()));\r\n } else {\r\n parts.push(this.printPoints(segments[i - 1].controlOut(), segments[i].controlIn(), segments[i].anchor()));\r\n }\r\n }\r\n\r\n output = \"M\" + this.printPoints(segments[0].anchor()) + SPACE + parts.join(SPACE);\r\n if (path.options.closed) {\r\n output += \"Z\";\r\n }\r\n\r\n return output;\r\n }\r\n },\r\n\r\n printPoints: function() {\r\n var points = arguments,\r\n length = points.length,\r\n i, result = [];\r\n\r\n for (i = 0; i < length; i++) {\r\n result.push(points[i].toString(3));\r\n }\r\n\r\n return result.join(SPACE);\r\n },\r\n\r\n segmentType: function(segmentStart, segmentEnd) {\r\n return segmentStart.controlOut() && segmentEnd.controlIn() ? \"C\" : \"L\";\r\n },\r\n\r\n mapStroke: function(stroke) {\r\n var attrs = [];\r\n\r\n if (stroke && !isTransparent(stroke.color)) {\r\n attrs.push([\"stroke\", stroke.color]);\r\n attrs.push([\"stroke-width\", stroke.width]);\r\n attrs.push([\"stroke-linecap\", this.renderLinecap(stroke)]);\r\n attrs.push([\"stroke-linejoin\", stroke.lineJoin]);\r\n\r\n if (defined(stroke.opacity)) {\r\n attrs.push([\"stroke-opacity\", stroke.opacity]);\r\n }\r\n\r\n if (defined(stroke.dashType)) {\r\n attrs.push([\"stroke-dasharray\", this.renderDashType(stroke)]);\r\n }\r\n } else {\r\n attrs.push([\"stroke\", NONE]);\r\n }\r\n\r\n return attrs;\r\n },\r\n\r\n renderStroke: function() {\r\n return renderAllAttr(\r\n this.mapStroke(this.srcElement.options.stroke)\r\n );\r\n },\r\n\r\n renderDashType: function (stroke) {\r\n var width = stroke.width || 1,\r\n dashType = stroke.dashType;\r\n\r\n if (dashType && dashType != SOLID) {\r\n var dashArray = DASH_ARRAYS[dashType.toLowerCase()],\r\n result = [],\r\n i;\r\n\r\n for (i = 0; i < dashArray.length; i++) {\r\n result.push(dashArray[i] * width);\r\n }\r\n\r\n return result.join(\" \");\r\n }\r\n },\r\n\r\n renderLinecap: function(stroke) {\r\n var dashType = stroke.dashType,\r\n lineCap = stroke.lineCap;\r\n\r\n return (dashType && dashType != SOLID) ? BUTT : lineCap;\r\n },\r\n\r\n mapFill: function(fill) {\r\n var attrs = [];\r\n if (!(fill && fill.nodeType == GRADIENT)) {\r\n if (fill && !isTransparent(fill.color)) {\r\n attrs.push([\"fill\", fill.color]);\r\n\r\n if (defined(fill.opacity)) {\r\n attrs.push([\"fill-opacity\", fill.opacity]);\r\n }\r\n } else {\r\n attrs.push([\"fill\", NONE]);\r\n }\r\n }\r\n\r\n return attrs;\r\n },\r\n\r\n renderFill: function() {\r\n return renderAllAttr(\r\n this.mapFill(this.srcElement.options.fill)\r\n );\r\n },\r\n\r\n template: renderTemplate(\r\n \"<path #= d.renderStyle() # #= d.renderOpacity() # \" +\r\n \"#= kendo.util.renderAttr('d', d.renderData()) # \" +\r\n \"#= d.renderStroke() # \" +\r\n \"#= d.renderFill() # \" +\r\n \"#= d.renderDefinitions() # \" +\r\n \"#= d.renderTransform() #></path>\"\r\n )\r\n });\r\n\r\n var ArcNode = PathNode.extend({\r\n renderData: function() {\r\n return this.printPath(this.srcElement.toPath());\r\n }\r\n });\r\n\r\n var MultiPathNode = PathNode .extend({\r\n renderData: function() {\r\n var paths = this.srcElement.paths;\r\n\r\n if (paths.length > 0) {\r\n var result = [],\r\n i;\r\n\r\n for (i = 0; i < paths.length; i++) {\r\n result.push(this.printPath(paths[i]));\r\n }\r\n\r\n return result.join(\" \");\r\n }\r\n }\r\n });\r\n\r\n var CircleNode = PathNode.extend({\r\n geometryChange: function() {\r\n var center = this.center();\r\n this.attr(\"cx\", center.x);\r\n this.attr(\"cy\", center.y);\r\n this.attr(\"r\", this.radius());\r\n this.invalidate();\r\n },\r\n\r\n center: function() {\r\n return this.srcElement.geometry().center;\r\n },\r\n\r\n radius: function() {\r\n return this.srcElement.geometry().radius;\r\n },\r\n\r\n template: renderTemplate(\r\n \"<circle #= d.renderStyle() # #= d.renderOpacity() # \" +\r\n \"cx='#= d.center().x #' cy='#= d.center().y #' \" +\r\n \"r='#= d.radius() #' \" +\r\n \"#= d.renderStroke() # \" +\r\n \"#= d.renderFill() # \" +\r\n \"#= d.renderDefinitions() # \" +\r\n \"#= d.renderTransform() # ></circle>\"\r\n )\r\n });\r\n\r\n var TextNode = PathNode.extend({\r\n geometryChange: function() {\r\n var pos = this.pos();\r\n this.attr(\"x\", pos.x);\r\n this.attr(\"y\", pos.y);\r\n this.invalidate();\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (e.field === \"font\") {\r\n this.attr(\"style\", util.renderStyle(this.mapStyle()));\r\n this.geometryChange();\r\n } else if (e.field === \"content\") {\r\n PathNode.fn.content.call(this, this.srcElement.content());\r\n }\r\n\r\n PathNode.fn.optionsChange.call(this, e);\r\n },\r\n\r\n mapStyle: function() {\r\n var style = PathNode.fn.mapStyle.call(this);\r\n var font = this.srcElement.options.font;\r\n\r\n style.push([\"font\", kendo.htmlEncode(font)]);\r\n\r\n return style;\r\n },\r\n\r\n pos: function() {\r\n var pos = this.srcElement.position();\r\n var size = this.srcElement.measure();\r\n return pos.clone().setY(pos.y + size.baseline);\r\n },\r\n\r\n content: function() {\r\n var content = this.srcElement.content();\r\n\r\n var options = this.root().options;\r\n if (options && options.encodeText) {\r\n content = decodeEntities(content);\r\n content = kendo.htmlEncode(content);\r\n }\r\n\r\n return content;\r\n },\r\n\r\n template: renderTemplate(\r\n \"<text #= d.renderStyle() # #= d.renderOpacity() # \" +\r\n \"x='#= this.pos().x #' y='#= this.pos().y #' \" +\r\n \"#= d.renderStroke() # \" +\r\n \"#= d.renderTransform() # \" +\r\n \"#= d.renderDefinitions() # \" +\r\n \"#= d.renderFill() #>#= d.content() #</text>\"\r\n )\r\n });\r\n\r\n var ImageNode = PathNode.extend({\r\n geometryChange: function() {\r\n this.allAttr(this.mapPosition());\r\n this.invalidate();\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (e.field === \"src\") {\r\n this.allAttr(this.mapSource());\r\n }\r\n\r\n PathNode.fn.optionsChange.call(this, e);\r\n },\r\n\r\n mapPosition: function() {\r\n var rect = this.srcElement.rect();\r\n var tl = rect.topLeft();\r\n\r\n return [\r\n [\"x\", tl.x],\r\n [\"y\", tl.y],\r\n [\"width\", rect.width() + \"px\"],\r\n [\"height\", rect.height() + \"px\"]\r\n ];\r\n },\r\n\r\n renderPosition: function() {\r\n return renderAllAttr(this.mapPosition());\r\n },\r\n\r\n mapSource: function() {\r\n return [[\"xlink:href\", this.srcElement.src()]];\r\n },\r\n\r\n renderSource: function() {\r\n return renderAllAttr(this.mapSource());\r\n },\r\n\r\n template: renderTemplate(\r\n \"<image preserveAspectRatio='none' #= d.renderStyle() # #= d.renderTransform()# #= d.renderOpacity() # \" +\r\n \"#= d.renderPosition() # #= d.renderSource() # #= d.renderDefinitions()#>\" +\r\n \"</image>\"\r\n )\r\n });\r\n\r\n var GradientStopNode = Node.extend({\r\n template: renderTemplate(\r\n \"<stop #=d.renderOffset()# #=d.renderStyle()# />\"\r\n ),\r\n\r\n renderOffset: function() {\r\n return renderAttr(\"offset\", this.srcElement.offset());\r\n },\r\n\r\n mapStyle: function() {\r\n var srcElement = this.srcElement;\r\n return [\r\n [\"stop-color\", srcElement.color()],\r\n [\"stop-opacity\", srcElement.opacity()]\r\n ];\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (e.field == \"offset\") {\r\n this.attr(e.field, e.value);\r\n } else if (e.field == \"color\" || e.field == \"opacity\") {\r\n this.css(\"stop-\" + e.field, e.value);\r\n }\r\n }\r\n });\r\n\r\n var GradientNode = Node.extend({\r\n init: function(srcElement) {\r\n Node.fn.init.call(this, srcElement);\r\n\r\n this.id = srcElement.id;\r\n\r\n this.loadStops();\r\n },\r\n\r\n loadStops: function() {\r\n var srcElement = this.srcElement;\r\n var stops = srcElement.stops;\r\n var element = this.element;\r\n var stopNode;\r\n var idx;\r\n for (idx = 0; idx < stops.length; idx++) {\r\n stopNode = new GradientStopNode(stops[idx]);\r\n this.append(stopNode);\r\n if (element) {\r\n stopNode.attachTo(element);\r\n }\r\n }\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (e.field == \"gradient.stops\") {\r\n BaseNode.fn.clear.call(this);\r\n this.loadStops();\r\n } else if (e.field == GRADIENT){\r\n this.allAttr(this.mapCoordinates());\r\n }\r\n },\r\n\r\n renderCoordinates: function() {\r\n return renderAllAttr(this.mapCoordinates());\r\n },\r\n\r\n mapSpace: function() {\r\n return [\"gradientUnits\", this.srcElement.userSpace() ? \"userSpaceOnUse\" : \"objectBoundingBox\"];\r\n }\r\n });\r\n\r\n var LinearGradientNode = GradientNode.extend({\r\n template: renderTemplate(\r\n \"<linearGradient id='#=d.id#' #=d.renderCoordinates()#>\" +\r\n \"#= d.renderChildren()#\" +\r\n \"</linearGradient>\"\r\n ),\r\n\r\n mapCoordinates: function() {\r\n var srcElement = this.srcElement;\r\n var start = srcElement.start();\r\n var end = srcElement.end();\r\n var attrs = [\r\n [\"x1\", start.x],\r\n [\"y1\", start.y],\r\n [\"x2\", end.x],\r\n [\"y2\", end.y],\r\n this.mapSpace()\r\n ];\r\n\r\n return attrs;\r\n }\r\n });\r\n\r\n var RadialGradientNode = GradientNode.extend({\r\n template: renderTemplate(\r\n \"<radialGradient id='#=d.id#' #=d.renderCoordinates()#>\" +\r\n \"#= d.renderChildren()#\" +\r\n \"</radialGradient>\"\r\n ),\r\n\r\n mapCoordinates: function() {\r\n var srcElement = this.srcElement;\r\n var center = srcElement.center();\r\n var radius = srcElement.radius();\r\n var attrs = [\r\n [\"cx\", center.x],\r\n [\"cy\", center.y],\r\n [\"r\", radius],\r\n this.mapSpace()\r\n ];\r\n return attrs;\r\n }\r\n });\r\n\r\n var nodeMap = {\r\n Group: GroupNode,\r\n Text: TextNode,\r\n Path: PathNode,\r\n MultiPath: MultiPathNode,\r\n Circle: CircleNode,\r\n Arc: ArcNode,\r\n Image: ImageNode\r\n };\r\n\r\n // Helpers ================================================================\r\n var renderSVG = function(container, svg) {\r\n container.innerHTML = svg;\r\n };\r\n\r\n (function() {\r\n var testFragment = \"<svg xmlns='\" + SVG_NS + \"'></svg>\",\r\n testContainer = doc.createElement(\"div\"),\r\n hasParser = typeof DOMParser != UNDEFINED;\r\n\r\n testContainer.innerHTML = testFragment;\r\n\r\n if (hasParser && testContainer.firstChild.namespaceURI != SVG_NS) {\r\n renderSVG = function(container, svg) {\r\n var parser = new DOMParser(),\r\n chartDoc = parser.parseFromString(svg, \"text/xml\"),\r\n importedDoc = doc.adoptNode(chartDoc.documentElement);\r\n\r\n container.innerHTML = \"\";\r\n container.appendChild(importedDoc);\r\n };\r\n }\r\n })();\r\n\r\n function alignToScreen(element) {\r\n var ctm;\r\n\r\n try {\r\n ctm = element.getScreenCTM ? element.getScreenCTM() : null;\r\n } catch (e) { }\r\n\r\n if (ctm) {\r\n var left = - ctm.e % 1,\r\n top = - ctm.f % 1,\r\n style = element.style;\r\n\r\n if (left !== 0 || top !== 0) {\r\n style.left = left + \"px\";\r\n style.top = top + \"px\";\r\n }\r\n }\r\n }\r\n\r\n function baseUrl() {\r\n var base = document.getElementsByTagName(\"base\")[0],\r\n url = \"\",\r\n href = document.location.href,\r\n hashIndex = href.indexOf(\"#\");\r\n\r\n if (base && !kendo.support.browser.msie) {\r\n if (hashIndex !== -1) {\r\n href = href.substring(0, hashIndex);\r\n }\r\n\r\n url = href;\r\n }\r\n\r\n return url;\r\n }\r\n\r\n function refUrl(id) {\r\n return \"url(\" + baseUrl() + \"#\" + id + \")\";\r\n }\r\n\r\n function exportGroup(group) {\r\n var root = new RootNode({ encodeText: true });\r\n\r\n var bbox = group.clippedBBox();\r\n if (bbox) {\r\n var origin = bbox.getOrigin();\r\n var exportRoot = new d.Group();\r\n exportRoot.transform(g.transform().translate(-origin.x, -origin.y));\r\n exportRoot.children.push(group);\r\n group = exportRoot;\r\n }\r\n\r\n root.load([group]);\r\n\r\n var svg = \"<?xml version='1.0' ?>\" +\r\n \"<svg style='width: 100%; height: 100%; overflow: hidden;' \" +\r\n \"xmlns='\" + SVG_NS + \"' \" + \"xmlns:xlink='http://www.w3.org/1999/xlink' \" +\r\n \"version='1.1'>\" + root.render() + \"</svg>\";\r\n\r\n root.destroy();\r\n\r\n return svg;\r\n }\r\n\r\n function exportSVG(group, options) {\r\n var svg = exportGroup(group);\r\n\r\n if (!options || !options.raw) {\r\n svg = \"data:image/svg+xml;base64,\" + util.encodeBase64(svg);\r\n }\r\n\r\n return $.Deferred().resolve(svg).promise();\r\n }\r\n\r\n function isDefinition(type, value) {\r\n return type == \"clip\" || (type == \"fill\" && (!value || value.nodeType == GRADIENT));\r\n }\r\n\r\n // Mappings ===============================================================\r\n\r\n function decodeEntities(text) {\r\n if (!text || !text.indexOf || text.indexOf(\"&\") < 0) {\r\n return text;\r\n } else {\r\n var element = decodeEntities._element;\r\n element.innerHTML = text;\r\n return element.textContent || element.innerText;\r\n }\r\n }\r\n\r\n decodeEntities._element = document.createElement(\"span\");\r\n\r\n // Mappings ===============================================================\r\n var DefinitionMap = {\r\n clip: \"clip-path\",\r\n fill: \"fill\"\r\n };\r\n\r\n // Exports ================================================================\r\n kendo.support.svg = (function() {\r\n return doc.implementation.hasFeature(\r\n \"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\");\r\n })();\r\n\r\n if (kendo.support.svg) {\r\n d.SurfaceFactory.current.register(\"svg\", Surface, 10);\r\n }\r\n\r\n deepExtend(d, {\r\n exportSVG: exportSVG,\r\n\r\n svg: {\r\n ArcNode: ArcNode,\r\n CircleNode: CircleNode,\r\n ClipNode: ClipNode,\r\n DefinitionNode: DefinitionNode,\r\n GradientStopNode: GradientStopNode,\r\n GroupNode: GroupNode,\r\n ImageNode: ImageNode,\r\n LinearGradientNode: LinearGradientNode,\r\n MultiPathNode: MultiPathNode,\r\n Node: Node,\r\n PathNode: PathNode,\r\n RadialGradientNode: RadialGradientNode,\r\n RootNode: RootNode,\r\n Surface: Surface,\r\n TextNode: TextNode,\r\n _exportGroup: exportGroup\r\n }\r\n });\r\n\r\n})(window.kendo.jQuery);\r\n\r\n(function ($) {\r\n\r\n // Imports ================================================================\r\n var noop = $.noop,\r\n doc = document,\r\n\r\n kendo = window.kendo,\r\n deepExtend = kendo.deepExtend,\r\n\r\n util = kendo.util,\r\n defined = util.defined,\r\n isTransparent = util.isTransparent,\r\n renderTemplate = util.renderTemplate,\r\n valueOrDefault = util.valueOrDefault,\r\n\r\n g = kendo.geometry,\r\n d = kendo.drawing,\r\n BaseNode = d.BaseNode;\r\n\r\n // Constants ==============================================================\r\n var BUTT = \"butt\",\r\n DASH_ARRAYS = d.DASH_ARRAYS,\r\n FRAME_DELAY = 1000 / 60,\r\n NONE = \"none\",\r\n SOLID = \"solid\";\r\n\r\n // Canvas Surface ==========================================================\r\n var Surface = d.Surface.extend({\r\n init: function(element, options) {\r\n d.Surface.fn.init.call(this, element, options);\r\n\r\n this.element[0].innerHTML = this._template(this);\r\n var canvas = this.element[0].firstElementChild;\r\n canvas.width = $(element).width();\r\n canvas.height = $(element).height();\r\n this._rootElement = canvas;\r\n\r\n this._root = new RootNode(canvas);\r\n },\r\n\r\n destroy: function() {\r\n d.Surface.fn.destroy.call(this);\r\n\r\n if (this._root) {\r\n this._root.destroy();\r\n this._root = null;\r\n }\r\n },\r\n\r\n type: \"canvas\",\r\n\r\n draw: function(element) {\r\n d.Surface.fn.draw.call(this, element);\r\n this._root.load([element], undefined, this.options.cors);\r\n },\r\n\r\n clear: function() {\r\n d.Surface.fn.clear.call(this);\r\n this._root.clear();\r\n },\r\n\r\n image: function() {\r\n var root = this._root;\r\n var rootElement = this._rootElement;\r\n\r\n var loadingStates = [];\r\n root.traverse(function(childNode) {\r\n if (childNode.loading) {\r\n loadingStates.push(childNode.loading);\r\n }\r\n });\r\n\r\n var defer = $.Deferred();\r\n $.when.apply($, loadingStates).done(function() {\r\n root._invalidate();\r\n\r\n try {\r\n var data = rootElement.toDataURL();\r\n defer.resolve(data);\r\n } catch (e) {\r\n defer.reject(e);\r\n }\r\n }).fail(function(e) {\r\n defer.reject(e);\r\n });\r\n\r\n return defer.promise();\r\n },\r\n\r\n _resize: function() {\r\n this._rootElement.width = this._size.width;\r\n this._rootElement.height = this._size.height;\r\n\r\n this._root.invalidate();\r\n },\r\n\r\n _template: renderTemplate(\r\n \"<canvas style='width: 100%; height: 100%;'></canvas>\"\r\n )\r\n });\r\n\r\n // Nodes ===================================================================\r\n var Node = BaseNode.extend({\r\n init: function(srcElement) {\r\n BaseNode.fn.init.call(this, srcElement);\r\n if (srcElement) {\r\n this.initClip();\r\n }\r\n },\r\n\r\n initClip: function() {\r\n var clip = this.srcElement.clip();\r\n if (clip) {\r\n this.clip = clip;\r\n clip.addObserver(this);\r\n }\r\n },\r\n\r\n clear: function() {\r\n if (this.srcElement) {\r\n this.srcElement.removeObserver(this);\r\n }\r\n\r\n this.clearClip();\r\n\r\n BaseNode.fn.clear.call(this);\r\n },\r\n\r\n clearClip: function() {\r\n if (this.clip) {\r\n this.clip.removeObserver(this);\r\n delete this.clip;\r\n }\r\n },\r\n\r\n setClip: function(ctx) {\r\n if (this.clip) {\r\n ctx.beginPath();\r\n PathNode.fn.renderPoints(ctx, this.clip);\r\n ctx.clip();\r\n }\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (e.field == \"clip\") {\r\n this.clearClip();\r\n this.initClip();\r\n }\r\n\r\n BaseNode.fn.optionsChange.call(this, e);\r\n },\r\n\r\n setTransform: function(ctx) {\r\n if (this.srcElement) {\r\n var transform = this.srcElement.transform();\r\n if (transform) {\r\n ctx.transform.apply(ctx, transform.matrix().toArray(6));\r\n }\r\n }\r\n },\r\n\r\n load: function(elements, pos, cors) {\r\n var node = this,\r\n childNode,\r\n srcElement,\r\n children,\r\n i;\r\n\r\n for (i = 0; i < elements.length; i++) {\r\n srcElement = elements[i];\r\n children = srcElement.children;\r\n\r\n childNode = new nodeMap[srcElement.nodeType](srcElement, cors);\r\n\r\n if (children && children.length > 0) {\r\n childNode.load(children, pos, cors);\r\n }\r\n\r\n if (defined(pos)) {\r\n node.insertAt(childNode, pos);\r\n } else {\r\n node.append(childNode);\r\n }\r\n }\r\n\r\n node.invalidate();\r\n },\r\n\r\n setOpacity: function(ctx) {\r\n if (this.srcElement) {\r\n var opacity = this.srcElement.opacity();\r\n if (defined(opacity)) {\r\n this.globalAlpha(ctx, opacity);\r\n }\r\n }\r\n },\r\n\r\n globalAlpha: function(ctx, value) {\r\n if (value && ctx.globalAlpha) {\r\n value *= ctx.globalAlpha;\r\n }\r\n ctx.globalAlpha = value;\r\n },\r\n\r\n visible: function() {\r\n var src = this.srcElement;\r\n return !src || (src && src.options.visible !== false);\r\n }\r\n });\r\n\r\n var GroupNode = Node.extend({\r\n renderTo: function(ctx) {\r\n if (!this.visible()) {\r\n return;\r\n }\r\n\r\n ctx.save();\r\n\r\n this.setTransform(ctx);\r\n this.setClip(ctx);\r\n this.setOpacity(ctx);\r\n\r\n var childNodes = this.childNodes;\r\n for (var i = 0; i < childNodes.length; i++) {\r\n var child = childNodes[i];\r\n if (child.visible()) {\r\n child.renderTo(ctx);\r\n }\r\n }\r\n\r\n ctx.restore();\r\n }\r\n });\r\n d.mixins.Traversable.extend(GroupNode.fn, \"childNodes\");\r\n\r\n var RootNode = GroupNode.extend({\r\n init: function(canvas) {\r\n GroupNode.fn.init.call(this);\r\n\r\n this.canvas = canvas;\r\n this.ctx = canvas.getContext(\"2d\");\r\n\r\n this.invalidate = kendo.throttle(\r\n $.proxy(this._invalidate, this),\r\n FRAME_DELAY\r\n );\r\n },\r\n\r\n destroy: function() {\r\n GroupNode.fn.destroy.call(this);\r\n this.canvas = null;\r\n this.ctx = null;\r\n },\r\n\r\n _invalidate: function() {\r\n if (!this.ctx) {\r\n return;\r\n }\r\n\r\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n this.renderTo(this.ctx);\r\n }\r\n });\r\n d.mixins.Traversable.extend(RootNode.fn, \"childNodes\");\r\n\r\n var PathNode = Node.extend({\r\n renderTo: function(ctx) {\r\n ctx.save();\r\n\r\n this.setTransform(ctx);\r\n this.setClip(ctx);\r\n this.setOpacity(ctx);\r\n\r\n ctx.beginPath();\r\n\r\n this.renderPoints(ctx, this.srcElement);\r\n\r\n this.setLineDash(ctx);\r\n this.setLineCap(ctx);\r\n this.setLineJoin(ctx);\r\n\r\n this.setFill(ctx);\r\n this.setStroke(ctx);\r\n\r\n ctx.restore();\r\n },\r\n\r\n setFill: function(ctx) {\r\n var fill = this.srcElement.options.fill;\r\n var hasFill = false;\r\n\r\n if (fill) {\r\n if (fill.nodeType == \"gradient\") {\r\n this.setGradientFill(ctx, fill);\r\n hasFill = true;\r\n } else if (!isTransparent(fill.color)) {\r\n ctx.fillStyle = fill.color;\r\n\r\n ctx.save();\r\n this.globalAlpha(ctx, fill.opacity);\r\n ctx.fill();\r\n ctx.restore();\r\n\r\n hasFill = true;\r\n }\r\n }\r\n\r\n return hasFill;\r\n },\r\n\r\n setGradientFill: function(ctx, fill) {\r\n var bbox = this.srcElement.rawBBox();\r\n var gradient;\r\n\r\n if (fill instanceof d.LinearGradient) {\r\n var start = fill.start();\r\n var end = fill.end();\r\n gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\r\n } else if (fill instanceof d.RadialGradient) {\r\n var center = fill.center();\r\n gradient = ctx.createRadialGradient(center.x, center.y, 0, center.x, center.y, fill.radius());\r\n }\r\n\r\n addGradientStops(gradient, fill.stops);\r\n\r\n ctx.save();\r\n\r\n if (!fill.userSpace()) {\r\n ctx.transform(bbox.width(), 0, 0, bbox.height(), bbox.origin.x, bbox.origin.y);\r\n }\r\n ctx.fillStyle = gradient;\r\n ctx.fill();\r\n\r\n ctx.restore();\r\n },\r\n\r\n setStroke: function(ctx) {\r\n var stroke = this.srcElement.options.stroke;\r\n if (stroke && !isTransparent(stroke.color) && stroke.width > 0) {\r\n ctx.strokeStyle = stroke.color;\r\n ctx.lineWidth = valueOrDefault(stroke.width, 1);\r\n\r\n ctx.save();\r\n this.globalAlpha(ctx, stroke.opacity);\r\n ctx.stroke();\r\n ctx.restore();\r\n\r\n return true;\r\n }\r\n },\r\n\r\n dashType: function() {\r\n var stroke = this.srcElement.options.stroke;\r\n if (stroke && stroke.dashType) {\r\n return stroke.dashType.toLowerCase();\r\n }\r\n },\r\n\r\n setLineDash: function(ctx) {\r\n var dashType = this.dashType();\r\n if (dashType && dashType != SOLID) {\r\n var dashArray = DASH_ARRAYS[dashType];\r\n if (ctx.setLineDash) {\r\n ctx.setLineDash(dashArray);\r\n } else {\r\n ctx.mozDash = dashArray;\r\n ctx.webkitLineDash = dashArray;\r\n }\r\n }\r\n },\r\n\r\n setLineCap: function(ctx) {\r\n var dashType = this.dashType();\r\n var stroke = this.srcElement.options.stroke;\r\n if (dashType && dashType !== SOLID) {\r\n ctx.lineCap = BUTT;\r\n } else if (stroke && stroke.lineCap) {\r\n ctx.lineCap = stroke.lineCap;\r\n }\r\n },\r\n\r\n setLineJoin: function(ctx) {\r\n var stroke = this.srcElement.options.stroke;\r\n if (stroke && stroke.lineJoin) {\r\n ctx.lineJoin = stroke.lineJoin;\r\n }\r\n },\r\n\r\n renderPoints: function(ctx, path) {\r\n var segments = path.segments;\r\n\r\n if (segments.length === 0) {\r\n return;\r\n }\r\n\r\n var seg = segments[0];\r\n var anchor = seg.anchor();\r\n ctx.moveTo(anchor.x, anchor.y);\r\n\r\n for (var i = 1; i < segments.length; i++) {\r\n seg = segments[i];\r\n anchor = seg.anchor();\r\n\r\n var prevSeg = segments[i - 1];\r\n var prevOut = prevSeg.controlOut();\r\n var controlIn = seg.controlIn();\r\n\r\n if (prevOut && controlIn) {\r\n ctx.bezierCurveTo(prevOut.x, prevOut.y,\r\n controlIn.x, controlIn.y,\r\n anchor.x, anchor.y);\r\n } else {\r\n ctx.lineTo(anchor.x, anchor.y);\r\n }\r\n }\r\n\r\n if (path.options.closed) {\r\n ctx.closePath();\r\n }\r\n }\r\n });\r\n\r\n var MultiPathNode = PathNode.extend({\r\n renderPoints: function(ctx) {\r\n var paths = this.srcElement.paths;\r\n for (var i = 0; i < paths.length; i++) {\r\n PathNode.fn.renderPoints(ctx, paths[i]);\r\n }\r\n }\r\n });\r\n\r\n var CircleNode = PathNode.extend({\r\n renderPoints: function(ctx) {\r\n var geometry = this.srcElement.geometry();\r\n var c = geometry.center;\r\n var r = geometry.radius;\r\n\r\n ctx.arc(c.x, c.y, r, 0, Math.PI * 2);\r\n }\r\n });\r\n\r\n var ArcNode = PathNode.extend({\r\n renderPoints: function(ctx) {\r\n var path = this.srcElement.toPath();\r\n PathNode.fn.renderPoints.call(this, ctx, path);\r\n }\r\n });\r\n\r\n var TextNode = PathNode.extend({\r\n renderTo: function(ctx) {\r\n var text = this.srcElement;\r\n var pos = text.position();\r\n var size = text.measure();\r\n\r\n ctx.save();\r\n\r\n this.setTransform(ctx);\r\n this.setClip(ctx);\r\n this.setOpacity(ctx);\r\n\r\n ctx.beginPath();\r\n\r\n ctx.font = text.options.font;\r\n if (this.setFill(ctx)) {\r\n ctx.fillText(text.content(), pos.x, pos.y + size.baseline);\r\n }\r\n\r\n if (this.setStroke(ctx)) {\r\n this.setLineDash(ctx);\r\n ctx.strokeText(text.content(), pos.x, pos.y + size.baseline);\r\n }\r\n\r\n ctx.restore();\r\n }\r\n });\r\n\r\n var ImageNode = PathNode.extend({\r\n init: function(srcElement, cors) {\r\n PathNode.fn.init.call(this, srcElement);\r\n\r\n this.onLoad = $.proxy(this.onLoad, this);\r\n this.onError = $.proxy(this.onError, this);\r\n this.loading = $.Deferred();\r\n\r\n var img = this.img = new Image();\r\n\r\n if (cors && !(/^data:/i.test(srcElement.src()))) {\r\n img.crossOrigin = cors;\r\n }\r\n\r\n var src = img.src = srcElement.src();\r\n\r\n if (img.complete) {\r\n this.onLoad();\r\n } else {\r\n img.onload = this.onLoad;\r\n img.onerror = this.onError;\r\n }\r\n },\r\n\r\n renderTo: function(ctx) {\r\n if (this.loading.state() === \"resolved\") {\r\n ctx.save();\r\n\r\n this.setTransform(ctx);\r\n this.setClip(ctx);\r\n\r\n this.drawImage(ctx);\r\n\r\n ctx.restore();\r\n }\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (e.field === \"src\") {\r\n this.loading = $.Deferred();\r\n this.img.src = this.srcElement.src();\r\n } else {\r\n PathNode.fn.optionsChange.call(this, e);\r\n }\r\n },\r\n\r\n onLoad: function() {\r\n this.loading.resolve();\r\n this.invalidate();\r\n },\r\n\r\n onError: function() {\r\n this.loading.reject(new Error(\r\n \"Unable to load image '\" + this.img.src +\r\n \"'. Check for connectivity and verify CORS headers.\"\r\n ));\r\n },\r\n\r\n drawImage: function(ctx) {\r\n var rect = this.srcElement.rect();\r\n var tl = rect.topLeft();\r\n\r\n ctx.drawImage(\r\n this.img, tl.x, tl.y, rect.width(), rect.height()\r\n );\r\n }\r\n });\r\n\r\n function exportImage(group, options) {\r\n var defaults = {\r\n width: \"800px\", height: \"600px\",\r\n cors: \"Anonymous\"\r\n };\r\n\r\n var bbox = group.clippedBBox();\r\n if (bbox) {\r\n var origin = bbox.getOrigin();\r\n var exportRoot = new d.Group();\r\n exportRoot.transform(g.transform().translate(-origin.x, -origin.y));\r\n exportRoot.children.push(group);\r\n group = exportRoot;\r\n\r\n var size = bbox.getSize();\r\n defaults.width = size.width + \"px\";\r\n defaults.height = size.height + \"px\";\r\n }\r\n\r\n options = deepExtend(defaults, options);\r\n\r\n var container = $(\"<div />\").css({\r\n display: \"none\",\r\n width: options.width,\r\n height: options.height\r\n }).appendTo(document.body);\r\n\r\n var surface = new Surface(container, options);\r\n surface.draw(group);\r\n\r\n var promise = surface.image();\r\n promise.always(function() {\r\n surface.destroy();\r\n container.remove();\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n var nodeMap = {\r\n Group: GroupNode,\r\n Text: TextNode,\r\n Path: PathNode,\r\n MultiPath: MultiPathNode,\r\n Circle: CircleNode,\r\n Arc: ArcNode,\r\n Image: ImageNode\r\n };\r\n\r\n // Helpers ================================================================\r\n function addGradientStops(gradient, stops) {\r\n var color, stop, idx;\r\n\r\n for (idx = 0; idx < stops.length; idx++) {\r\n stop = stops[idx];\r\n color = kendo.parseColor(stop.color());\r\n color.a *= stop.opacity();\r\n gradient.addColorStop(stop.offset(), color.toCssRgba());\r\n }\r\n }\r\n\r\n // Exports ================================================================\r\n kendo.support.canvas = (function() {\r\n return !!doc.createElement(\"canvas\").getContext;\r\n })();\r\n\r\n if (kendo.support.canvas) {\r\n d.SurfaceFactory.current.register(\"canvas\", Surface, 20);\r\n }\r\n\r\n deepExtend(kendo.drawing, {\r\n exportImage: exportImage,\r\n\r\n canvas: {\r\n ArcNode: ArcNode,\r\n CircleNode: CircleNode,\r\n GroupNode: GroupNode,\r\n ImageNode: ImageNode,\r\n MultiPathNode: MultiPathNode,\r\n Node: Node,\r\n PathNode: PathNode,\r\n RootNode: RootNode,\r\n Surface: Surface,\r\n TextNode: TextNode\r\n }\r\n });\r\n\r\n})(window.kendo.jQuery);\r\n\r\n(function ($) {\r\n\r\n // Imports ================================================================\r\n var doc = document,\r\n math = Math,\r\n atan2 = math.atan2,\r\n ceil = math.ceil,\r\n sqrt = math.sqrt,\r\n\r\n kendo = window.kendo,\r\n deepExtend = kendo.deepExtend,\r\n noop = $.noop,\r\n\r\n d = kendo.drawing,\r\n BaseNode = d.BaseNode,\r\n\r\n g = kendo.geometry,\r\n toMatrix = g.toMatrix,\r\n\r\n Color = kendo.Color,\r\n\r\n util = kendo.util,\r\n isTransparent = util.isTransparent,\r\n defined = util.defined,\r\n deg = util.deg,\r\n renderTemplate = util.renderTemplate,\r\n round = util.round,\r\n valueOrDefault = util.valueOrDefault;\r\n\r\n // Constants ==============================================================\r\n var NONE = \"none\",\r\n NS = \".kendo\",\r\n COORDINATE_MULTIPLE = 100,\r\n COORDINATE_SIZE = COORDINATE_MULTIPLE * COORDINATE_MULTIPLE,\r\n GRADIENT = \"gradient\",\r\n TRANSFORM_PRECISION = 4;\r\n\r\n // VML rendering surface ==================================================\r\n var Surface = d.Surface.extend({\r\n init: function(element, options) {\r\n d.Surface.fn.init.call(this, element, options);\r\n\r\n enableVML();\r\n\r\n this.element.empty();\r\n\r\n this._root = new RootNode();\r\n this._root.attachTo(this.element[0]);\r\n\r\n this.element.on(\"click\" + NS, this._click);\r\n this.element.on(\"mouseover\" + NS, this._mouseenter);\r\n this.element.on(\"mouseout\" + NS, this._mouseleave);\r\n },\r\n\r\n type: \"vml\",\r\n\r\n destroy: function() {\r\n if (this._root) {\r\n this._root.destroy();\r\n this._root = null;\r\n\r\n this.element.off(NS);\r\n }\r\n\r\n d.Surface.fn.destroy.call(this);\r\n },\r\n\r\n draw: function(element) {\r\n d.Surface.fn.draw.call(this, element);\r\n this._root.load([element], undefined, null);\r\n },\r\n\r\n clear: function() {\r\n d.Surface.fn.clear.call(this);\r\n this._root.clear();\r\n }\r\n });\r\n\r\n // VML Node ================================================================\r\n var Node = BaseNode.extend({\r\n init: function(srcElement) {\r\n BaseNode.fn.init.call(this, srcElement);\r\n\r\n this.createElement();\r\n this.attachReference();\r\n },\r\n\r\n observe: noop,\r\n\r\n destroy: function() {\r\n if (this.element) {\r\n this.element._kendoNode = null;\r\n this.element = null;\r\n }\r\n\r\n BaseNode.fn.destroy.call(this);\r\n },\r\n\r\n clear: function() {\r\n if (this.element) {\r\n this.element.innerHTML = \"\";\r\n }\r\n\r\n var children = this.childNodes;\r\n for (var i = 0; i < children.length; i++) {\r\n children[i].destroy();\r\n }\r\n\r\n this.childNodes = [];\r\n },\r\n\r\n removeSelf: function() {\r\n if (this.element) {\r\n this.element.parentNode.removeChild(this.element);\r\n this.element = null;\r\n }\r\n\r\n BaseNode.fn.removeSelf.call(this);\r\n },\r\n\r\n createElement: function() {\r\n this.element = doc.createElement(\"div\");\r\n },\r\n\r\n attachReference: function() {\r\n this.element._kendoNode = this;\r\n },\r\n\r\n load: function(elements, pos, transform, opacity) {\r\n opacity = valueOrDefault(opacity, 1);\r\n if (this.srcElement) {\r\n opacity *= valueOrDefault(this.srcElement.options.opacity, 1);\r\n }\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n var srcElement = elements[i];\r\n var children = srcElement.children;\r\n var combinedTransform = srcElement.currentTransform(transform);\r\n var currentOpacity = opacity * valueOrDefault(srcElement.options.opacity, 1);\r\n\r\n var childNode = new nodeMap[srcElement.nodeType](srcElement, combinedTransform, currentOpacity);\r\n\r\n if (children && children.length > 0) {\r\n childNode.load(children, pos, combinedTransform, opacity);\r\n }\r\n\r\n if (defined(pos)) {\r\n this.insertAt(childNode, pos);\r\n } else {\r\n this.append(childNode);\r\n }\r\n\r\n childNode.attachTo(this.element, pos);\r\n }\r\n },\r\n\r\n attachTo: function(domElement, pos) {\r\n if (defined(pos)) {\r\n domElement.insertBefore(this.element, domElement.children[pos] || null);\r\n } else {\r\n domElement.appendChild(this.element);\r\n }\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (e.field == \"visible\") {\r\n this.css(\"display\", e.value !== false ? \"\" : NONE);\r\n }\r\n },\r\n\r\n setStyle: function() {\r\n this.allCss(this.mapStyle());\r\n },\r\n\r\n mapStyle: function() {\r\n var style = [];\r\n\r\n if (this.srcElement && this.srcElement.options.visible === false) {\r\n style.push([ \"display\", NONE ]);\r\n }\r\n\r\n return style;\r\n },\r\n\r\n mapOpacityTo: function(attrs, multiplier) {\r\n var opacity = valueOrDefault(this.opacity, 1);\r\n\r\n opacity *= valueOrDefault(multiplier, 1);\r\n attrs.push([\"opacity\", opacity]);\r\n },\r\n\r\n attr: function(name, value) {\r\n if (this.element) {\r\n this.element[name] = value;\r\n }\r\n },\r\n\r\n allAttr: function(attrs) {\r\n for (var i = 0; i < attrs.length; i++) {\r\n this.attr(attrs[i][0], attrs[i][1]);\r\n }\r\n },\r\n\r\n css: function(name, value) {\r\n if (this.element) {\r\n this.element.style[name] = value;\r\n }\r\n },\r\n\r\n allCss: function(styles) {\r\n for (var i = 0; i < styles.length; i++) {\r\n this.css(styles[i][0], styles[i][1]);\r\n }\r\n }\r\n });\r\n\r\n var RootNode = Node.extend({\r\n createElement: function() {\r\n Node.fn.createElement.call(this);\r\n\r\n this.allCss([\r\n [\"width\", \"100%\"],\r\n [\"height\", \"100%\"],\r\n [\"position\", \"relative\"],\r\n [\"visibility\", \"visible\"]\r\n ]);\r\n },\r\n\r\n attachReference: noop\r\n });\r\n\r\n var ClipObserver = kendo.Class.extend({\r\n init: function(srcElement, observer) {\r\n this.srcElement = srcElement;\r\n this.observer = observer;\r\n\r\n srcElement.addObserver(this);\r\n },\r\n\r\n geometryChange: function() {\r\n this.observer.optionsChange({\r\n field: \"clip\",\r\n value: this.srcElement\r\n });\r\n },\r\n\r\n clear: function() {\r\n this.srcElement.removeObserver(this);\r\n }\r\n });\r\n\r\n var ObserverNode = Node.extend({\r\n init: function(srcElement) {\r\n Node.fn.init.call(this, srcElement);\r\n\r\n if (srcElement) {\r\n this.initClip();\r\n }\r\n },\r\n\r\n observe: function() {\r\n BaseNode.fn.observe.call(this);\r\n },\r\n\r\n mapStyle: function() {\r\n var style = Node.fn.mapStyle.call(this);\r\n if (this.srcElement && this.srcElement.clip()) {\r\n style.push([\"clip\", this.clipRect()]);\r\n }\r\n return style;\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (e.field == \"clip\") {\r\n this.clearClip();\r\n this.initClip();\r\n this.setClip();\r\n }\r\n\r\n Node.fn.optionsChange.call(this, e);\r\n },\r\n\r\n clear: function() {\r\n this.clearClip();\r\n\r\n Node.fn.clear.call(this);\r\n },\r\n\r\n initClip: function() {\r\n if (this.srcElement.clip()) {\r\n this.clip = new ClipObserver(this.srcElement.clip(), this);\r\n this.clip.observer = this;\r\n }\r\n },\r\n\r\n clearClip: function() {\r\n if (this.clip) {\r\n this.clip.clear();\r\n this.clip = null;\r\n this.css(\"clip\", this.clipRect());\r\n }\r\n },\r\n\r\n setClip: function() {\r\n if (this.clip) {\r\n this.css(\"clip\", this.clipRect());\r\n }\r\n },\r\n\r\n clipRect: function() {\r\n var clipRect = EMPTY_CLIP;\r\n var clip = this.srcElement.clip();\r\n if (clip) {\r\n var bbox = this.clipBBox(clip);\r\n var topLeft = bbox.topLeft();\r\n var bottomRight = bbox.bottomRight();\r\n clipRect = kendo.format(\"rect({0}px {1}px {2}px {3}px)\",\r\n topLeft.y,\r\n bottomRight.x,\r\n bottomRight.y,\r\n topLeft.x);\r\n }\r\n return clipRect;\r\n },\r\n\r\n clipBBox: function(clip) {\r\n var topLeft = this.srcElement.rawBBox().topLeft();\r\n var clipBBox = clip.rawBBox();\r\n clipBBox.origin.translate(-topLeft.x, -topLeft.y);\r\n\r\n return clipBBox;\r\n }\r\n });\r\n\r\n var GroupNode = ObserverNode.extend({\r\n createElement: function() {\r\n Node.fn.createElement.call(this);\r\n this.setStyle();\r\n },\r\n\r\n attachTo: function(domElement, pos) {\r\n this.css(\"display\", NONE);\r\n\r\n Node.fn.attachTo.call(this, domElement, pos);\r\n\r\n if (this.srcElement.options.visible !== false) {\r\n this.css(\"display\", \"\");\r\n }\r\n },\r\n\r\n _attachTo: function(domElement) {\r\n var frag = document.createDocumentFragment();\r\n frag.appendChild(this.element);\r\n\r\n domElement.appendChild(frag);\r\n },\r\n\r\n mapStyle: function() {\r\n var style = ObserverNode.fn.mapStyle.call(this);\r\n style.push([\"position\", \"absolute\"]);\r\n style.push([\"white-space\", \"nowrap\"]);\r\n\r\n return style;\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (e.field === \"transform\") {\r\n this.refreshTransform();\r\n }\r\n\r\n if (e.field === \"opacity\") {\r\n this.refreshOpacity();\r\n }\r\n\r\n ObserverNode.fn.optionsChange.call(this, e);\r\n },\r\n\r\n refreshTransform: function(transform) {\r\n var currentTransform = this.srcElement.currentTransform(transform),\r\n children = this.childNodes,\r\n length = children.length,\r\n i;\r\n\r\n this.setClip();\r\n for (i = 0; i < length; i++) {\r\n children[i].refreshTransform(currentTransform);\r\n }\r\n },\r\n\r\n currentOpacity: function() {\r\n var opacity = valueOrDefault(this.srcElement.options.opacity, 1);\r\n\r\n if (this.parent && this.parent.currentOpacity) {\r\n opacity *= this.parent.currentOpacity();\r\n }\r\n\r\n return opacity;\r\n },\r\n\r\n refreshOpacity: function() {\r\n var children = this.childNodes,\r\n length = children.length,\r\n i;\r\n\r\n var opacity = this.currentOpacity();\r\n for (i = 0; i < length; i++) {\r\n children[i].refreshOpacity(opacity);\r\n }\r\n },\r\n\r\n initClip: function() {\r\n ObserverNode.fn.initClip.call(this);\r\n\r\n if (this.clip) {\r\n var bbox = this.clip.srcElement.bbox(this.srcElement.currentTransform());\r\n if (bbox) {\r\n this.css(\"width\", bbox.width() + bbox.origin.x);\r\n this.css(\"height\", bbox.height() + bbox.origin.y);\r\n }\r\n }\r\n },\r\n\r\n clipBBox: function(clip) {\r\n return clip.bbox(this.srcElement.currentTransform());\r\n },\r\n\r\n clearClip: function() {\r\n ObserverNode.fn.clearClip.call(this);\r\n }\r\n });\r\n\r\n var StrokeNode = Node.extend({\r\n init: function(srcElement, opacity) {\r\n this.opacity = opacity;\r\n Node.fn.init.call(this, srcElement);\r\n },\r\n\r\n createElement: function() {\r\n this.element = createElementVML(\"stroke\");\r\n this.setOpacity();\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (e.field.indexOf(\"stroke\") === 0) {\r\n this.setStroke();\r\n }\r\n },\r\n\r\n refreshOpacity: function(opacity) {\r\n this.opacity = opacity;\r\n this.setStroke();\r\n },\r\n\r\n setStroke: function() {\r\n this.allAttr(this.mapStroke());\r\n },\r\n\r\n setOpacity: function() {\r\n this.setStroke();\r\n },\r\n\r\n mapStroke: function() {\r\n var stroke = this.srcElement.options.stroke;\r\n var attrs = [];\r\n\r\n if (stroke && !isTransparent(stroke.color) && stroke.width !== 0) {\r\n attrs.push([\"on\", \"true\"]);\r\n attrs.push([\"color\", stroke.color]);\r\n attrs.push([\"weight\", (stroke.width || 1) + \"px\"]);\r\n\r\n this.mapOpacityTo(attrs, stroke.opacity);\r\n\r\n if (defined(stroke.dashType)) {\r\n attrs.push([\"dashstyle\", stroke.dashType]);\r\n }\r\n\r\n if (defined(stroke.lineJoin)) {\r\n attrs.push([\"joinstyle\", stroke.lineJoin]);\r\n }\r\n\r\n if (defined(stroke.lineCap)) {\r\n var lineCap = stroke.lineCap.toLowerCase();\r\n if (lineCap === \"butt\") {\r\n lineCap = lineCap === \"butt\" ? \"flat\" : lineCap;\r\n }\r\n attrs.push([\"endcap\", lineCap]);\r\n }\r\n } else {\r\n attrs.push([\"on\", \"false\"]);\r\n }\r\n\r\n return attrs;\r\n }\r\n });\r\n\r\n var FillNode = Node.extend({\r\n init: function(srcElement, transform, opacity) {\r\n this.opacity = opacity;\r\n Node.fn.init.call(this, srcElement);\r\n },\r\n\r\n createElement: function() {\r\n this.element = createElementVML(\"fill\");\r\n this.setFill();\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (fillField(e.field)) {\r\n this.setFill();\r\n }\r\n },\r\n\r\n refreshOpacity: function(opacity) {\r\n this.opacity = opacity;\r\n this.setOpacity();\r\n },\r\n\r\n setFill: function() {\r\n this.allAttr(this.mapFill());\r\n },\r\n\r\n setOpacity: function() {\r\n this.setFill();\r\n },\r\n\r\n attr: function(name, value) {\r\n var element = this.element;\r\n if (element) {\r\n var fields = name.split(\".\");\r\n\r\n while (fields.length > 1) {\r\n element = element[fields.shift()];\r\n }\r\n element[fields[0]] = value;\r\n }\r\n },\r\n\r\n mapFill: function() {\r\n var fill = this.srcElement.fill();\r\n var attrs = [\r\n [\"on\", \"false\"]\r\n ];\r\n\r\n if (fill) {\r\n if (fill.nodeType == GRADIENT) {\r\n attrs = this.mapGradient(fill);\r\n } else if (!isTransparent(fill.color)) {\r\n attrs = this.mapFillColor(fill);\r\n }\r\n }\r\n\r\n return attrs;\r\n },\r\n\r\n mapFillColor: function(fill) {\r\n var attrs = [\r\n [\"on\", \"true\"],\r\n [\"color\", fill.color]\r\n ];\r\n\r\n this.mapOpacityTo(attrs, fill.opacity);\r\n\r\n return attrs;\r\n },\r\n\r\n mapGradient: function(fill) {\r\n var options = this.srcElement.options;\r\n var fallbackFill = options.fallbackFill || (fill.fallbackFill && fill.fallbackFill());\r\n var attrs;\r\n if (fill instanceof d.LinearGradient) {\r\n attrs = this.mapLinearGradient(fill);\r\n } else if (fill instanceof d.RadialGradient && fill.supportVML) {\r\n attrs = this.mapRadialGradient(fill);\r\n } else if (fallbackFill) {\r\n attrs = this.mapFillColor(fallbackFill);\r\n } else {\r\n attrs = [[\"on\", \"false\"]];\r\n }\r\n\r\n return attrs;\r\n },\r\n\r\n mapLinearGradient: function(fill) {\r\n var start = fill.start();\r\n var end = fill.end();\r\n var stops = fill.stops;\r\n var angle = util.deg(atan2(end.y - start.y, end.x - start.x));\r\n\r\n var attrs = [\r\n [\"on\", \"true\"],\r\n [\"type\", GRADIENT],\r\n [\"focus\", 0],\r\n [\"method\", \"none\"],\r\n [\"angle\", 270 - angle]\r\n ];\r\n this.addColors(attrs);\r\n return attrs;\r\n },\r\n\r\n mapRadialGradient: function(fill) {\r\n var bbox = this.srcElement.rawBBox();\r\n var center = fill.center();\r\n var stops = fill.stops;\r\n var focusx = (center.x - bbox.origin.x) / bbox.width();\r\n var focusy = (center.y - bbox.origin.y) / bbox.height();\r\n var attrs = [\r\n [\"on\", \"true\"],\r\n [\"type\", \"gradienttitle\"],\r\n [\"focus\", \"100%\"],\r\n [\"focusposition\", focusx + \" \" + focusy],\r\n [\"method\", \"none\"]\r\n ];\r\n this.addColors(attrs);\r\n\r\n return attrs;\r\n },\r\n\r\n addColors: function(attrs) {\r\n var options = this.srcElement.options;\r\n var opacity = valueOrDefault(this.opacity, 1);\r\n var stopColors = [];\r\n var stops = options.fill.stops;\r\n var baseColor = options.baseColor;\r\n var colorsField = this.element.colors ? \"colors.value\" : \"colors\";\r\n var color = stopColor(baseColor, stops[0], opacity);\r\n var color2 = stopColor(baseColor, stops[stops.length - 1], opacity);\r\n var stop;\r\n\r\n for (var idx = 0; idx < stops.length; idx++) {\r\n stop = stops[idx];\r\n\r\n stopColors.push(\r\n math.round(stop.offset() * 100) + \"% \" +\r\n stopColor(baseColor, stop, opacity)\r\n );\r\n }\r\n\r\n attrs.push([colorsField, stopColors.join(\",\")],\r\n [\"color\", color],\r\n [\"color2\", color2]\r\n );\r\n }\r\n });\r\n\r\n var TransformNode = Node.extend({\r\n init: function(srcElement, transform) {\r\n this.transform = transform;\r\n\r\n Node.fn.init.call(this, srcElement);\r\n },\r\n\r\n createElement: function() {\r\n this.element = createElementVML(\"skew\");\r\n this.setTransform();\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (e.field === \"transform\") {\r\n this.refresh(this.srcElement.currentTransform());\r\n }\r\n },\r\n\r\n refresh: function(transform) {\r\n this.transform = transform;\r\n this.setTransform();\r\n },\r\n\r\n transformOrigin: function() {\r\n return \"-0.5,-0.5\";\r\n },\r\n\r\n setTransform: function() {\r\n this.allAttr(this.mapTransform());\r\n },\r\n\r\n mapTransform: function() {\r\n var transform = this.transform;\r\n\r\n var attrs = [],\r\n a, b, c, d,\r\n matrix = toMatrix(transform);\r\n\r\n if (matrix) {\r\n matrix.round(TRANSFORM_PRECISION);\r\n attrs.push(\r\n [\"on\", \"true\"],\r\n [\"matrix\", [matrix.a, matrix.c, matrix.b, matrix.d, 0, 0].join(\",\")],\r\n [\"offset\", matrix.e + \"px,\" + matrix.f + \"px\"],\r\n [\"origin\", this.transformOrigin()]\r\n );\r\n } else {\r\n attrs.push([\"on\", \"false\"]);\r\n }\r\n\r\n return attrs;\r\n }\r\n });\r\n\r\n var ShapeNode = ObserverNode.extend({\r\n init: function(srcElement, transform, opacity) {\r\n this.fill = this.createFillNode(srcElement, transform, opacity);\r\n this.stroke = new StrokeNode(srcElement, opacity);\r\n this.transform = this.createTransformNode(srcElement, transform);\r\n\r\n ObserverNode.fn.init.call(this, srcElement);\r\n },\r\n\r\n attachTo: function(domElement, pos) {\r\n this.fill.attachTo(this.element);\r\n this.stroke.attachTo(this.element);\r\n this.transform.attachTo(this.element);\r\n\r\n Node.fn.attachTo.call(this, domElement, pos);\r\n },\r\n\r\n createFillNode: function(srcElement, transform, opacity) {\r\n return new FillNode(srcElement, transform, opacity);\r\n },\r\n\r\n createTransformNode: function(srcElement, transform) {\r\n return new TransformNode(srcElement, transform);\r\n },\r\n\r\n createElement: function() {\r\n this.element = createElementVML(\"shape\");\r\n this.setCoordsize();\r\n this.setStyle();\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (fillField(e.field)) {\r\n this.fill.optionsChange(e);\r\n } else if (e.field.indexOf(\"stroke\") === 0) {\r\n this.stroke.optionsChange(e);\r\n } else if (e.field === \"transform\") {\r\n this.transform.optionsChange(e);\r\n } else if (e.field === \"opacity\") {\r\n this.fill.setOpacity();\r\n this.stroke.setOpacity();\r\n }\r\n\r\n ObserverNode.fn.optionsChange.call(this, e);\r\n },\r\n\r\n refreshTransform: function(transform) {\r\n this.transform.refresh(this.srcElement.currentTransform(transform));\r\n },\r\n\r\n refreshOpacity: function(opacity) {\r\n opacity *= valueOrDefault(this.srcElement.options.opacity, 1);\r\n\r\n this.fill.refreshOpacity(opacity);\r\n this.stroke.refreshOpacity(opacity);\r\n },\r\n\r\n mapStyle: function(width, height) {\r\n var styles = ObserverNode.fn.mapStyle.call(this);\r\n\r\n if (!width || !height) {\r\n width = height = COORDINATE_MULTIPLE;\r\n }\r\n\r\n styles.push(\r\n [\"position\", \"absolute\"],\r\n [\"width\", width + \"px\"],\r\n [\"height\", height + \"px\"]\r\n );\r\n\r\n var cursor = this.srcElement.options.cursor;\r\n if (cursor) {\r\n styles.push([\"cursor\", cursor]);\r\n }\r\n\r\n return styles;\r\n },\r\n\r\n setCoordsize: function() {\r\n this.allAttr([\r\n [\"coordorigin\", \"0 0\"],\r\n [\"coordsize\", COORDINATE_SIZE + \" \" + COORDINATE_SIZE]\r\n ]);\r\n }\r\n });\r\n\r\n var PathDataNode = Node.extend({\r\n createElement: function() {\r\n this.element = createElementVML(\"path\");\r\n this.setPathData();\r\n },\r\n\r\n geometryChange: function() {\r\n this.setPathData();\r\n },\r\n\r\n setPathData: function() {\r\n this.attr(\"v\", this.renderData());\r\n },\r\n\r\n renderData: function() {\r\n return printPath(this.srcElement);\r\n }\r\n });\r\n\r\n var PathNode = ShapeNode.extend({\r\n init: function(srcElement, transform, opacity) {\r\n this.pathData = this.createDataNode(srcElement);\r\n\r\n ShapeNode.fn.init.call(this, srcElement, transform, opacity);\r\n },\r\n\r\n attachTo: function(domElement, pos) {\r\n this.pathData.attachTo(this.element);\r\n ShapeNode.fn.attachTo.call(this, domElement, pos);\r\n },\r\n\r\n createDataNode: function(srcElement) {\r\n return new PathDataNode(srcElement);\r\n },\r\n\r\n geometryChange: function() {\r\n this.pathData.geometryChange();\r\n ShapeNode.fn.geometryChange.call(this);\r\n }\r\n });\r\n\r\n var MultiPathDataNode = PathDataNode.extend({\r\n renderData: function() {\r\n var paths = this.srcElement.paths;\r\n\r\n if (paths.length > 0) {\r\n var result = [],\r\n i,\r\n open;\r\n\r\n for (i = 0; i < paths.length; i++) {\r\n open = i < paths.length - 1;\r\n result.push(printPath(paths[i], open));\r\n }\r\n\r\n return result.join(\" \");\r\n }\r\n }\r\n });\r\n\r\n var MultiPathNode = PathNode.extend({\r\n createDataNode: function(srcElement) {\r\n return new MultiPathDataNode(srcElement);\r\n }\r\n });\r\n\r\n var CircleTransformNode = TransformNode.extend({\r\n transformOrigin: function() {\r\n var boundingBox = this.srcElement.geometry().bbox(),\r\n center = boundingBox.center(),\r\n originX = -ceil(center.x) / ceil(boundingBox.width()),\r\n originY = -ceil(center.y) / ceil(boundingBox.height());\r\n\r\n return originX + \",\" + originY;\r\n }\r\n });\r\n\r\n var CircleNode = ShapeNode.extend({\r\n createElement: function() {\r\n this.element = createElementVML(\"oval\");\r\n this.setStyle();\r\n },\r\n\r\n createTransformNode: function(srcElement, transform) {\r\n return new CircleTransformNode(srcElement, transform);\r\n },\r\n\r\n geometryChange: function() {\r\n ShapeNode.fn.geometryChange.call(this);\r\n\r\n this.setStyle();\r\n this.refreshTransform();\r\n },\r\n\r\n mapStyle: function() {\r\n var geometry = this.srcElement.geometry();\r\n var radius = geometry.radius;\r\n var center = geometry.center;\r\n var diameter = ceil(radius * 2);\r\n\r\n var styles = ShapeNode.fn.mapStyle.call(this, diameter, diameter);\r\n styles.push(\r\n [\"left\", ceil(center.x - radius) + \"px\"],\r\n [\"top\", ceil(center.y - radius) + \"px\"]\r\n );\r\n\r\n return styles;\r\n }\r\n });\r\n\r\n var ArcDataNode = PathDataNode.extend({\r\n renderData: function() {\r\n return printPath(this.srcElement.toPath());\r\n }\r\n });\r\n\r\n var ArcNode = PathNode.extend({\r\n createDataNode: function(srcElement) {\r\n return new ArcDataNode(srcElement);\r\n }\r\n });\r\n\r\n var TextPathDataNode = PathDataNode.extend({\r\n createElement: function() {\r\n PathDataNode.fn.createElement.call(this);\r\n\r\n this.attr(\"textpathok\", true);\r\n },\r\n\r\n renderData: function() {\r\n var rect = this.srcElement.rect();\r\n var center = rect.center();\r\n return \"m \" + printPoints([new g.Point(rect.topLeft().x, center.y)]) +\r\n \" l \" + printPoints([new g.Point(rect.bottomRight().x, center.y)]);\r\n }\r\n });\r\n\r\n var TextPathNode = Node.extend({\r\n createElement: function() {\r\n this.element = createElementVML(\"textpath\");\r\n\r\n this.attr(\"on\", true);\r\n this.attr(\"fitpath\", false);\r\n this.setStyle();\r\n this.setString();\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (e.field === \"content\") {\r\n this.setString();\r\n } else {\r\n this.setStyle();\r\n }\r\n\r\n Node.fn.optionsChange.call(this, e);\r\n },\r\n\r\n mapStyle: function() {\r\n return [[\"font\", this.srcElement.options.font]];\r\n },\r\n\r\n setString: function() {\r\n this.attr(\"string\", this.srcElement.content());\r\n }\r\n });\r\n\r\n var TextNode = PathNode.extend({\r\n init: function(srcElement, transform, opacity) {\r\n this.path = new TextPathNode(srcElement);\r\n\r\n PathNode.fn.init.call(this, srcElement, transform, opacity);\r\n },\r\n\r\n createDataNode: function(srcElement) {\r\n return new TextPathDataNode(srcElement);\r\n },\r\n\r\n attachTo: function(domElement, pos) {\r\n this.path.attachTo(this.element);\r\n PathNode.fn.attachTo.call(this, domElement, pos);\r\n },\r\n\r\n optionsChange: function(e) {\r\n if(e.field === \"font\" || e.field === \"content\") {\r\n this.path.optionsChange(e);\r\n this.pathData.geometryChange(e);\r\n }\r\n\r\n PathNode.fn.optionsChange.call(this, e);\r\n }\r\n });\r\n\r\n var ImagePathDataNode = PathDataNode.extend({\r\n renderData: function() {\r\n var rect = this.srcElement.rect();\r\n var path = new d.Path().moveTo(rect.topLeft())\r\n .lineTo(rect.topRight())\r\n .lineTo(rect.bottomRight())\r\n .lineTo(rect.bottomLeft())\r\n .close();\r\n\r\n return printPath(path);\r\n }\r\n });\r\n\r\n var ImageFillNode = TransformNode.extend({\r\n init: function(srcElement, transform, opacity) {\r\n this.opacity = opacity;\r\n TransformNode.fn.init.call(this, srcElement, transform);\r\n },\r\n\r\n createElement: function() {\r\n this.element = createElementVML(\"fill\");\r\n\r\n this.attr(\"type\", \"frame\");\r\n this.attr(\"rotate\", true);\r\n this.setOpacity();\r\n this.setSrc();\r\n this.setTransform();\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (e.field === \"src\") {\r\n this.setSrc();\r\n }\r\n\r\n TransformNode.fn.optionsChange.call(this, e);\r\n },\r\n\r\n geometryChange: function() {\r\n this.refresh();\r\n },\r\n\r\n refreshOpacity: function(opacity) {\r\n this.opacity = opacity;\r\n this.setOpacity();\r\n },\r\n\r\n setOpacity: function() {\r\n var attrs = [];\r\n this.mapOpacityTo(attrs, this.srcElement.options.opacity);\r\n this.allAttr(attrs);\r\n },\r\n\r\n setSrc: function() {\r\n this.attr(\"src\", this.srcElement.src());\r\n },\r\n\r\n mapTransform: function() {\r\n var img = this.srcElement;\r\n var rawbbox = img.rawBBox();\r\n var rawcenter = rawbbox.center();\r\n\r\n var fillOrigin = COORDINATE_MULTIPLE / 2;\r\n var fillSize = COORDINATE_MULTIPLE;\r\n\r\n var x;\r\n var y;\r\n var width = rawbbox.width() / fillSize;\r\n var height = rawbbox.height() / fillSize;\r\n var angle = 0;\r\n\r\n var transform = this.transform;\r\n if (transform) {\r\n var matrix = toMatrix(transform);\r\n var sx = sqrt(matrix.a * matrix.a + matrix.b * matrix.b);\r\n var sy = sqrt(matrix.c * matrix.c + matrix.d * matrix.d);\r\n\r\n width *= sx;\r\n height *= sy;\r\n\r\n var ax = deg(atan2(matrix.b, matrix.d));\r\n var ay = deg(atan2(-matrix.c, matrix.a));\r\n angle = (ax + ay) / 2;\r\n\r\n if (angle !== 0) {\r\n var center = img.bbox().center();\r\n x = (center.x - fillOrigin) / fillSize;\r\n y = (center.y - fillOrigin) / fillSize;\r\n } else {\r\n x = (rawcenter.x * sx + matrix.e - fillOrigin) / fillSize;\r\n y = (rawcenter.y * sy + matrix.f - fillOrigin) / fillSize;\r\n }\r\n } else {\r\n x = (rawcenter.x - fillOrigin) / fillSize;\r\n y = (rawcenter.y - fillOrigin) / fillSize;\r\n }\r\n\r\n width = round(width, TRANSFORM_PRECISION);\r\n height = round(height, TRANSFORM_PRECISION);\r\n x = round(x, TRANSFORM_PRECISION);\r\n y = round(y, TRANSFORM_PRECISION);\r\n angle = round(angle, TRANSFORM_PRECISION);\r\n\r\n return [\r\n [\"size\", width + \",\" + height],\r\n [\"position\", x + \",\" + y],\r\n [\"angle\", angle]\r\n ];\r\n }\r\n });\r\n\r\n var ImageNode = PathNode.extend({\r\n createFillNode: function(srcElement, transform, opacity) {\r\n return new ImageFillNode(srcElement, transform, opacity);\r\n },\r\n\r\n createDataNode: function(srcElement) {\r\n return new ImagePathDataNode(srcElement);\r\n },\r\n\r\n optionsChange: function(e) {\r\n if (e.field === \"src\" || e.field === \"transform\") {\r\n this.fill.optionsChange(e);\r\n }\r\n\r\n PathNode.fn.optionsChange.call(this, e);\r\n },\r\n\r\n geometryChange: function() {\r\n this.fill.geometryChange();\r\n PathNode.fn.geometryChange.call(this);\r\n },\r\n\r\n refreshTransform: function(transform) {\r\n PathNode.fn.refreshTransform.call(this, transform);\r\n this.fill.refresh(this.srcElement.currentTransform(transform));\r\n }\r\n });\r\n\r\n var nodeMap = {\r\n Group: GroupNode,\r\n Text: TextNode,\r\n Path: PathNode,\r\n MultiPath: MultiPathNode,\r\n Circle: CircleNode,\r\n Arc: ArcNode,\r\n Image: ImageNode\r\n };\r\n\r\n // Helper functions =======================================================\r\n function enableVML() {\r\n if (doc.namespaces && !doc.namespaces.kvml) {\r\n doc.namespaces.add(\"kvml\", \"urn:schemas-microsoft-com:vml\");\r\n\r\n var stylesheet = doc.styleSheets.length > 30 ? doc.styleSheets[0] : doc.createStyleSheet();\r\n stylesheet.addRule(\".kvml\", \"behavior:url(#default#VML)\");\r\n }\r\n }\r\n\r\n function createElementVML(type) {\r\n var element = doc.createElement(\"kvml:\" + type);\r\n element.className = \"kvml\";\r\n\r\n return element;\r\n }\r\n\r\n function printPoints(points) {\r\n var length = points.length;\r\n var result = [];\r\n\r\n for (var i = 0; i < length; i++) {\r\n result.push(points[i]\r\n .scaleCopy(COORDINATE_MULTIPLE)\r\n .toString(0, \",\")\r\n );\r\n }\r\n\r\n return result.join(\" \");\r\n }\r\n\r\n function printPath(path, open) {\r\n var segments = path.segments,\r\n length = segments.length;\r\n\r\n if (length > 0) {\r\n var parts = [],\r\n output,\r\n type,\r\n currentType,\r\n i;\r\n\r\n for (i = 1; i < length; i++) {\r\n type = segmentType(segments[i - 1], segments[i]);\r\n if (type !== currentType) {\r\n currentType = type;\r\n parts.push(type);\r\n }\r\n\r\n if (type === \"l\") {\r\n parts.push(printPoints([segments[i].anchor()]));\r\n } else {\r\n parts.push(printPoints([\r\n segments[i - 1].controlOut(),\r\n segments[i].controlIn(),\r\n segments[i].anchor()\r\n ]));\r\n }\r\n }\r\n\r\n output = \"m \" + printPoints([segments[0].anchor()]) + \" \" + parts.join(\" \");\r\n if (path.options.closed) {\r\n output += \" x\";\r\n }\r\n\r\n if (open !== true) {\r\n output += \" e\";\r\n }\r\n\r\n return output;\r\n }\r\n }\r\n\r\n function segmentType(segmentStart, segmentEnd) {\r\n return segmentStart.controlOut() && segmentEnd.controlIn() ? \"c\" : \"l\";\r\n }\r\n\r\n function fillField(field) {\r\n return field.indexOf(\"fill\") === 0 || field.indexOf(GRADIENT) === 0;\r\n }\r\n\r\n function stopColor(baseColor, stop, baseOpacity) {\r\n var opacity = baseOpacity * valueOrDefault(stop.opacity(), 1);\r\n var color;\r\n\r\n if (baseColor) {\r\n color = blendColors(baseColor, stop.color(), opacity);\r\n } else {\r\n color = blendColors(stop.color(), \"#fff\", 1 - opacity);\r\n }\r\n return color;\r\n }\r\n\r\n function blendColors(base, overlay, alpha) {\r\n var baseColor = new Color(base),\r\n overlayColor = new Color(overlay),\r\n r = blendChannel(baseColor.r, overlayColor.r, alpha),\r\n g = blendChannel(baseColor.g, overlayColor.g, alpha),\r\n b = blendChannel(baseColor.b, overlayColor.b, alpha);\r\n\r\n return new Color(r, g, b).toHex();\r\n }\r\n\r\n function blendChannel(a, b, alpha) {\r\n return math.round(alpha * b + (1 - alpha) * a);\r\n }\r\n\r\n // Exports ================================================================\r\n kendo.support.vml = (function() {\r\n var browser = kendo.support.browser;\r\n return browser.msie && browser.version < 9;\r\n })();\r\n\r\n\r\n var EMPTY_CLIP = \"inherit\";\r\n if (kendo.support.browser.msie && kendo.support.browser.version < 8) {\r\n EMPTY_CLIP = \"rect(auto auto auto auto)\";\r\n }\r\n\r\n if (kendo.support.vml) {\r\n d.SurfaceFactory.current.register(\"vml\", Surface, 30);\r\n }\r\n\r\n deepExtend(d, {\r\n vml: {\r\n ArcDataNode: ArcDataNode,\r\n ArcNode: ArcNode,\r\n CircleTransformNode: CircleTransformNode,\r\n CircleNode: CircleNode,\r\n FillNode: FillNode,\r\n GroupNode: GroupNode,\r\n ImageNode: ImageNode,\r\n ImageFillNode: ImageFillNode,\r\n ImagePathDataNode: ImagePathDataNode,\r\n MultiPathDataNode: MultiPathDataNode,\r\n MultiPathNode: MultiPathNode,\r\n Node: Node,\r\n PathDataNode: PathDataNode,\r\n PathNode: PathNode,\r\n RootNode: RootNode,\r\n StrokeNode: StrokeNode,\r\n Surface: Surface,\r\n TextNode: TextNode,\r\n TextPathNode: TextPathNode,\r\n TextPathDataNode: TextPathDataNode,\r\n TransformNode: TransformNode\r\n }\r\n });\r\n\r\n})(window.kendo.jQuery);\r\n\r\n(function($, parseFloat, Math){\r\n\r\n \"use strict\";\r\n\r\n /* jshint eqnull:true */\r\n /* jshint -W069 */\r\n\r\n /* -----[ local vars ]----- */\r\n\r\n var drawing = kendo.drawing;\r\n var geo = kendo.geometry;\r\n var slice = Array.prototype.slice;\r\n var browser = kendo.support.browser;\r\n\r\n var KENDO_PSEUDO_ELEMENT = \"KENDO-PSEUDO-ELEMENT\";\r\n\r\n var IMAGE_CACHE = {};\r\n\r\n var nodeInfo = {};\r\n nodeInfo._root = nodeInfo;\r\n\r\n /* -----[ Custom Text node to speed up rendering in PDF ]----- */\r\n\r\n var TextRect = drawing.Text.extend({\r\n nodeType: \"Text\",\r\n init: function(str, rect, options) {\r\n drawing.Text.fn.init.call(this, str, rect.getOrigin(), options);\r\n this._pdfRect = rect;\r\n },\r\n rect: function() {\r\n // this is the crux of it: we can avoid a call to\r\n // measure(), which is what the base class does, since we\r\n // already know the rect. measure() is s-l-o-w.\r\n return this._pdfRect;\r\n },\r\n rawBBox: function() {\r\n // also let's avoid creating a new rectangle.\r\n return this._pdfRect;\r\n }\r\n });\r\n\r\n /* -----[ exports ]----- */\r\n\r\n function drawDOM(element, options) {\r\n if (!options) {\r\n options = {};\r\n }\r\n var defer = $.Deferred();\r\n element = $(element)[0];\r\n\r\n if (!element) {\r\n return defer.reject(\"No element to export\");\r\n }\r\n\r\n if (typeof window.getComputedStyle != \"function\") {\r\n throw new Error(\"window.getComputedStyle is missing. You are using an unsupported browser, or running in IE8 compatibility mode. Drawing HTML is supported in Chrome, Firefox, Safari and IE9+.\");\r\n }\r\n\r\n if (kendo.pdf) {\r\n kendo.pdf.defineFont(getFontFaces(element.ownerDocument));\r\n }\r\n\r\n function doOne(element) {\r\n var group = new drawing.Group();\r\n\r\n // translate to start of page\r\n var pos = element.getBoundingClientRect();\r\n setTransform(group, [ 1, 0, 0, 1, -pos.left, -pos.top ]);\r\n\r\n nodeInfo._clipbox = false;\r\n nodeInfo._matrix = geo.Matrix.unit();\r\n nodeInfo._stackingContext = {\r\n element: element,\r\n group: group\r\n };\r\n\r\n $(element).addClass(\"k-pdf-export\");\r\n renderElement(element, group);\r\n $(element).removeClass(\"k-pdf-export\");\r\n\r\n return group;\r\n }\r\n\r\n cacheImages(element, function(){\r\n var forceBreak = options && options.forcePageBreak;\r\n var hasPaperSize = options && options.paperSize && options.paperSize != \"auto\";\r\n var paperOptions = hasPaperSize && kendo.pdf.getPaperOptions(function(key, def){\r\n return key in options ? options[key] : def;\r\n });\r\n var pageWidth = hasPaperSize && paperOptions.paperSize[0];\r\n var pageHeight = hasPaperSize && paperOptions.paperSize[1];\r\n var margin = options.margin && paperOptions.margin;\r\n if (forceBreak || pageHeight) {\r\n if (!margin) {\r\n margin = { left: 0, top: 0, right: 0, bottom: 0 };\r\n }\r\n var group = new drawing.Group({\r\n pdf: {\r\n multiPage : true,\r\n paperSize : hasPaperSize ? paperOptions.paperSize : \"auto\"\r\n }\r\n });\r\n handlePageBreaks(\r\n function(x) {\r\n if (options.progress) {\r\n var canceled = false, pageNum = 0;\r\n (function next(){\r\n if (pageNum < x.pages.length) {\r\n group.append(doOne(x.pages[pageNum]));\r\n options.progress({\r\n pageNum: ++pageNum,\r\n totalPages: x.pages.length,\r\n cancel: function() {\r\n canceled = true;\r\n }\r\n });\r\n if (!canceled) {\r\n setTimeout(next);\r\n } else {\r\n // XXX: should we also fail() the deferred object?\r\n x.container.parentNode.removeChild(x.container);\r\n }\r\n } else {\r\n x.container.parentNode.removeChild(x.container);\r\n defer.resolve(group);\r\n }\r\n })();\r\n } else {\r\n x.pages.forEach(function(page){\r\n group.append(doOne(page));\r\n });\r\n x.container.parentNode.removeChild(x.container);\r\n defer.resolve(group);\r\n }\r\n },\r\n element,\r\n forceBreak,\r\n pageWidth ? pageWidth - margin.left - margin.right : null,\r\n pageHeight ? pageHeight - margin.top - margin.bottom : null,\r\n margin,\r\n options\r\n );\r\n } else {\r\n defer.resolve(doOne(element));\r\n }\r\n });\r\n\r\n function makeTemplate(template) {\r\n if (template != null) {\r\n if (typeof template == \"string\") {\r\n template = kendo.template(template.replace(/^\\s+|\\s+$/g, \"\"));\r\n }\r\n if (typeof template == \"function\") {\r\n return function(data) {\r\n var el = template(data);\r\n if (el) {\r\n return $(el)[0];\r\n }\r\n };\r\n }\r\n // assumed jQuery object or DOM element\r\n return function() {\r\n return $(template).clone()[0];\r\n };\r\n }\r\n }\r\n\r\n function handlePageBreaks(callback, element, forceBreak, pageWidth, pageHeight, margin, options) {\r\n var template = makeTemplate(options.template);\r\n var doc = element.ownerDocument;\r\n var pages = [];\r\n var copy = $(element).clone(true, true)[0];\r\n var container = doc.createElement(\"KENDO-PDF-DOCUMENT\");\r\n var adjust = 0;\r\n\r\n $(container).css({\r\n display : \"block\",\r\n position : \"absolute\",\r\n boxSizing : \"content-box\",\r\n left : \"-10000px\",\r\n top : \"-10000px\"\r\n });\r\n\r\n if (pageWidth) {\r\n // subtle: if we don't set the width *and* margins here, the layout in this\r\n // container will be different from the one in our final page elements, and we'll\r\n // split at the wrong places.\r\n $(container).css({\r\n width : pageWidth,\r\n paddingLeft : margin.left,\r\n paddingRight : margin.right\r\n });\r\n\r\n // when the first element has a margin-top (i.e. a <h1>) the page will be\r\n // inadvertently enlarged by that number (the browser will report the container's\r\n // bounding box top to start at the element's top, rather than including its\r\n // margin). Adding overflow: hidden seems to fix it.\r\n //\r\n // to understand the difference, try the following snippets in your browser:\r\n //\r\n // 1. <div style=\"background: yellow\">\r\n // <h1 style=\"margin: 3em\">Foo</h1>\r\n // </div>\r\n //\r\n // 2. <div style=\"background: yellow; overflow: hidden\">\r\n // <h1 style=\"margin: 3em\">Foo</h1>\r\n // </div>\r\n //\r\n // this detail is not important when automatic page breaking is not requested, hence\r\n // doing it only if pageWidth is defined.\r\n $(copy).css({ overflow: \"hidden\" });\r\n }\r\n\r\n container.appendChild(copy);\r\n element.parentNode.insertBefore(container, element);\r\n\r\n // we need the timeouts here, so that images dimensions are\r\n // properly computed in DOM when we start our thing.\r\n if (options.beforePageBreak) {\r\n setTimeout(function(){\r\n options.beforePageBreak(container, doPageBreak);\r\n }, 15);\r\n } else {\r\n setTimeout(doPageBreak, 15);\r\n }\r\n\r\n function doPageBreak() {\r\n if (forceBreak != \"-\" || pageHeight) {\r\n splitElement(copy);\r\n }\r\n\r\n // XXX: can contain only text nodes. better risk producing\r\n // an empty page than truncating the content.\r\n // if (!(pages.length > 0 && copy.children.length === 0)) {\r\n var page = makePage();\r\n copy.parentNode.insertBefore(page, copy);\r\n page.appendChild(copy);\r\n // }\r\n\r\n if (template) {\r\n var count = pages.length;\r\n pages.forEach(function(page, i){\r\n var el = template({\r\n element : page,\r\n pageNum : i + 1,\r\n totalPages : pages.length\r\n });\r\n if (el) {\r\n page.appendChild(el);\r\n cacheImages(el, function(){\r\n if (--count === 0) {\r\n next();\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n next();\r\n }\r\n\r\n function next() {\r\n // allow another timeout here to make sure the images\r\n // are rendered in the new DOM nodes.\r\n setTimeout(function(){\r\n callback({ pages: pages, container: container });\r\n }, 10);\r\n }\r\n }\r\n\r\n function splitElement(element) {\r\n var style = getComputedStyle(element);\r\n var bottomPadding = parseFloat(getPropertyValue(style, \"padding-bottom\"));\r\n var bottomBorder = parseFloat(getPropertyValue(style, \"border-bottom-width\"));\r\n var saveAdjust = adjust;\r\n adjust += bottomPadding + bottomBorder;\r\n var isFirst = true;\r\n for (var el = element.firstChild; el; el = el.nextSibling) {\r\n if (el.nodeType == 1 /* Element */) {\r\n isFirst = false;\r\n var jqel = $(el);\r\n if (jqel.is(forceBreak)) {\r\n breakAtElement(el);\r\n continue;\r\n }\r\n if (!pageHeight) {\r\n // we're in \"manual breaks mode\"\r\n splitElement(el);\r\n continue;\r\n }\r\n if (!/^(?:static|relative)$/.test(getPropertyValue(getComputedStyle(el), \"position\"))) {\r\n continue;\r\n }\r\n var fall = fallsOnMargin(el);\r\n if (fall == 1) {\r\n // element starts on next page, break before anyway.\r\n breakAtElement(el);\r\n }\r\n else if (fall) {\r\n // elements ends up on next page, or possibly doesn't fit on a page at\r\n // all. break before it anyway if it's an <img> or <tr>, otherwise\r\n // attempt to split.\r\n if (jqel.data(\"kendoChart\") || /^(?:img|tr|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(el.tagName)) {\r\n breakAtElement(el);\r\n } else {\r\n splitElement(el);\r\n }\r\n }\r\n else {\r\n splitElement(el);\r\n }\r\n }\r\n else if (el.nodeType == 3 /* Text */ && pageHeight) {\r\n splitText(el, isFirst);\r\n isFirst = false;\r\n }\r\n }\r\n adjust = saveAdjust;\r\n }\r\n\r\n function firstInParent(el) {\r\n var p = el.parentNode, first = p.firstChild;\r\n if (el === first) {\r\n return true;\r\n }\r\n if (el === p.children[0]) {\r\n if (first.nodeType == 7 /* comment */ ||\r\n first.nodeType == 8 /* processing instruction */) {\r\n return true;\r\n }\r\n if (first.nodeType == 3 /* text */) {\r\n // if whitespace only we can probably consider it's first\r\n return !/\\S/.test(first.data);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n function breakAtElement(el) {\r\n if (el.nodeType == 1 && el !== copy && firstInParent(el)) {\r\n return breakAtElement(el.parentNode);\r\n }\r\n var page = makePage();\r\n var range = doc.createRange();\r\n range.setStartBefore(copy);\r\n range.setEndBefore(el);\r\n page.appendChild(range.extractContents());\r\n copy.parentNode.insertBefore(page, copy);\r\n }\r\n\r\n function makePage() {\r\n var page = doc.createElement(\"KENDO-PDF-PAGE\");\r\n $(page).css({\r\n display : \"block\",\r\n boxSizing: \"content-box\",\r\n width : pageWidth || \"auto\",\r\n padding : (margin.top + \"px \" +\r\n margin.right + \"px \" +\r\n margin.bottom + \"px \" +\r\n margin.left + \"px\"),\r\n\r\n // allow absolutely positioned elements to be relative to current page\r\n position : \"relative\",\r\n\r\n // without the following we might affect layout of subsequent pages\r\n height : pageHeight || \"auto\",\r\n overflow : pageHeight || pageWidth ? \"hidden\" : \"visible\",\r\n clear : \"both\"\r\n });\r\n\r\n // debug\r\n // $(\"<div>\").css({\r\n // position : \"absolute\",\r\n // left : margin.left,\r\n // top : margin.top,\r\n // width : pageWidth,\r\n // height : pageHeight,\r\n // boxSizing : \"border-box\",\r\n // background: \"rgba(255, 255, 0, 0.5)\"\r\n // //border : \"1px solid red\"\r\n // }).appendTo(page);\r\n\r\n if (options && options.pageClassName) {\r\n page.className = options.pageClassName;\r\n }\r\n pages.push(page);\r\n return page;\r\n }\r\n\r\n function fallsOnMargin(thing) {\r\n var box = thing.getBoundingClientRect();\r\n if (box.width === 0 || box.height === 0) {\r\n // I'd say an element with dimensions zero fits on current page.\r\n return 0;\r\n }\r\n var top = copy.getBoundingClientRect().top;\r\n var available = pageHeight - adjust;\r\n return (box.height > available) ? 3\r\n : (box.top - top > available) ? 1\r\n : (box.bottom - top > available) ? 2\r\n : 0;\r\n }\r\n\r\n function splitText(node, isFirst) {\r\n if (!/\\S/.test(node.data)) {\r\n return;\r\n }\r\n\r\n var len = node.data.length;\r\n var range = doc.createRange();\r\n range.selectNodeContents(node);\r\n var fall = fallsOnMargin(range);\r\n if (!fall) {\r\n return; // the whole text fits on current page\r\n }\r\n\r\n var nextnode = node;\r\n if (fall == 1) {\r\n // starts on next page, break before anyway.\r\n if (isFirst) {\r\n // avoid leaving an empty <p>, <li>, etc. on previous page.\r\n breakAtElement(node.parentNode);\r\n } else {\r\n breakAtElement(node);\r\n }\r\n }\r\n else {\r\n (function findEOP(min, pos, max) {\r\n range.setEnd(node, pos);\r\n if (min == pos || pos == max) {\r\n return pos;\r\n }\r\n if (fallsOnMargin(range)) {\r\n return findEOP(min, (min + pos) >> 1, pos);\r\n } else {\r\n return findEOP(pos, (pos + max) >> 1, max);\r\n }\r\n })(0, len >> 1, len);\r\n\r\n if (!/\\S/.test(range.toString()) && isFirst) {\r\n // avoid leaving an empty <p>, <li>, etc. on previous page.\r\n breakAtElement(node.parentNode);\r\n } else {\r\n // This is only needed for IE, but it feels cleaner to do it anyway. Without\r\n // it, IE will truncate a very long text (playground/pdf-long-text-2.html).\r\n nextnode = node.splitText(range.endOffset);\r\n\r\n var page = makePage();\r\n range.setStartBefore(copy);\r\n page.appendChild(range.extractContents());\r\n copy.parentNode.insertBefore(page, copy);\r\n }\r\n }\r\n\r\n splitText(nextnode);\r\n }\r\n }\r\n\r\n return defer.promise();\r\n }\r\n\r\n drawing.drawDOM = drawDOM;\r\n\r\n drawDOM.getFontFaces = getFontFaces;\r\n\r\n var parseBackgroundImage = (function(){\r\n var tok_linear_gradient = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\\s*)\\(/;\r\n var tok_radial_gradient = /^((-webkit-|-moz-|-o-|-ms-)?radial-gradient\\s*)\\(/;\r\n var tok_percent = /^([-0-9.]+%)/;\r\n var tok_length = /^([-0-9.]+px)/;\r\n var tok_keyword = /^(left|right|top|bottom|to|center)\\W/;\r\n var tok_angle = /^([-0-9.]+(deg|grad|rad|turn))/;\r\n var tok_whitespace = /^(\\s+)/;\r\n var tok_popen = /^(\\()/;\r\n var tok_pclose = /^(\\))/;\r\n var tok_comma = /^(,)/;\r\n var tok_url = /^(url)\\(/;\r\n var tok_content = /^(.*?)\\)/;\r\n\r\n var cache1 = {}, cache2 = {};\r\n\r\n function parse(input) {\r\n var orig = input;\r\n if (hasOwnProperty(cache1, orig)) {\r\n return cache1[orig];\r\n }\r\n function skip_ws() {\r\n var m = tok_whitespace.exec(input);\r\n if (m) {\r\n input = input.substr(m[1].length);\r\n }\r\n }\r\n function read(token) {\r\n skip_ws();\r\n var m = token.exec(input);\r\n if (m) {\r\n input = input.substr(m[1].length);\r\n return m[1];\r\n }\r\n }\r\n\r\n function read_stop() {\r\n // XXX: do NOT use the parseColor (defined later) here.\r\n // kendo.parseColor leaves the `match` data in the\r\n // object, that would be lost after .toRGB().\r\n var color = kendo.parseColor(input, true);\r\n var length, percent;\r\n if (color) {\r\n input = input.substr(color.match[0].length);\r\n color = color.toRGB();\r\n if (!(length = read(tok_length))) {\r\n percent = read(tok_percent);\r\n }\r\n return { color: color, length: length, percent: percent };\r\n }\r\n }\r\n\r\n function read_linear_gradient(propName) {\r\n var angle;\r\n var to1, to2;\r\n var stops = [];\r\n var reverse = false;\r\n\r\n if (read(tok_popen)) {\r\n // 1. [ <angle> || to <side-or-corner>, ]?\r\n angle = read(tok_angle);\r\n if (angle) {\r\n angle = parseAngle(angle);\r\n read(tok_comma);\r\n }\r\n else {\r\n to1 = read(tok_keyword);\r\n if (to1 == \"to\") {\r\n to1 = read(tok_keyword);\r\n } else if (to1 && /^-/.test(propName)) {\r\n reverse = true;\r\n }\r\n to2 = read(tok_keyword);\r\n read(tok_comma);\r\n }\r\n\r\n if (/-moz-/.test(propName) && angle == null && to1 == null) {\r\n var x = read(tok_percent), y = read(tok_percent);\r\n reverse = true;\r\n if (x == \"0%\") {\r\n to1 = \"left\";\r\n } else if (x == \"100%\") {\r\n to1 = \"right\";\r\n }\r\n if (y == \"0%\") {\r\n to2 = \"top\";\r\n } else if (y == \"100%\") {\r\n to2 = \"bottom\";\r\n }\r\n read(tok_comma);\r\n }\r\n\r\n // 2. color stops\r\n while (input && !read(tok_pclose)) {\r\n var stop = read_stop();\r\n if (!stop) {\r\n break;\r\n }\r\n stops.push(stop);\r\n read(tok_comma);\r\n }\r\n\r\n return {\r\n type : \"linear\",\r\n angle : angle,\r\n to : to1 && to2 ? to1 + \" \" + to2 : to1 ? to1 : to2 ? to2 : null,\r\n stops : stops,\r\n reverse : reverse\r\n };\r\n }\r\n }\r\n\r\n function read_url() {\r\n if (read(tok_popen)) {\r\n var url = read(tok_content);\r\n url = url.replace(/^['\"]+|[\"']+$/g, \"\");\r\n read(tok_pclose);\r\n return { type: \"url\", url: url };\r\n }\r\n }\r\n\r\n var tok;\r\n\r\n if ((tok = read(tok_linear_gradient))) {\r\n tok = read_linear_gradient(tok);\r\n }\r\n else if ((tok = read(tok_url))) {\r\n tok = read_url();\r\n }\r\n\r\n return (cache1[orig] = tok || { type: \"none\" });\r\n }\r\n\r\n return function(input) {\r\n if (hasOwnProperty(cache2, input)) {\r\n return cache2[input];\r\n }\r\n return (cache2[input] = splitProperty(input).map(parse));\r\n };\r\n })();\r\n\r\n var splitProperty = (function(){\r\n var cache = {};\r\n return function(input, separator) {\r\n if (!separator) {\r\n separator = /^\\s*,\\s*/;\r\n }\r\n\r\n var cacheKey = input + separator;\r\n\r\n if (hasOwnProperty(cache, cacheKey)) {\r\n return cache[cacheKey];\r\n }\r\n\r\n var ret = [];\r\n var last = 0, pos = 0;\r\n var in_paren = 0;\r\n var in_string = false;\r\n var m;\r\n\r\n function looking_at(rx) {\r\n return (m = rx.exec(input.substr(pos)));\r\n }\r\n\r\n function trim(str) {\r\n return str.replace(/^\\s+|\\s+$/g, \"\");\r\n }\r\n\r\n while (pos < input.length) {\r\n if (!in_string && looking_at(/^[\\(\\[\\{]/)) {\r\n in_paren++;\r\n pos++;\r\n }\r\n else if (!in_string && looking_at(/^[\\)\\]\\}]/)) {\r\n in_paren--;\r\n pos++;\r\n }\r\n else if (!in_string && looking_at(/^[\\\"\\']/)) {\r\n in_string = m[0];\r\n pos++;\r\n }\r\n else if (in_string == \"'\" && looking_at(/^\\\\\\'/)) {\r\n pos += 2;\r\n }\r\n else if (in_string == '\"' && looking_at(/^\\\\\\\"/)) {\r\n pos += 2;\r\n }\r\n else if (in_string == \"'\" && looking_at(/^\\'/)) {\r\n in_string = false;\r\n pos++;\r\n }\r\n else if (in_string == '\"' && looking_at(/^\\\"/)) {\r\n in_string = false;\r\n pos++;\r\n }\r\n else if (looking_at(separator)) {\r\n if (!in_string && !in_paren && pos > last) {\r\n ret.push(trim(input.substring(last, pos)));\r\n last = pos + m[0].length;\r\n }\r\n pos += m[0].length;\r\n }\r\n else {\r\n pos++;\r\n }\r\n }\r\n if (last < pos) {\r\n ret.push(trim(input.substring(last, pos)));\r\n }\r\n return (cache[cacheKey] = ret);\r\n };\r\n })();\r\n\r\n var getFontURL = (function(){\r\n var cache = {};\r\n return function(el){\r\n // XXX: for IE we get here the whole cssText of the rule,\r\n // because the computedStyle.src is empty. Next time we need\r\n // to fix these regexps we better write a CSS parser. :-\\\r\n var url = cache[el];\r\n if (!url) {\r\n var m;\r\n if ((m = /url\\((['\"]?)([^'\")]*?)\\1\\)\\s+format\\((['\"]?)truetype\\3\\)/.exec(el))) {\r\n url = cache[el] = m[2];\r\n } else if ((m = /url\\((['\"]?)([^'\")]*?\\.ttf)\\1\\)/.exec(el))) {\r\n url = cache[el] = m[2];\r\n }\r\n }\r\n return url;\r\n };\r\n })();\r\n\r\n function getFontFaces(doc) {\r\n if (doc == null) {\r\n doc = document;\r\n }\r\n var result = {};\r\n for (var i = 0; i < doc.styleSheets.length; ++i) {\r\n doStylesheet(doc.styleSheets[i]);\r\n }\r\n return result;\r\n function doStylesheet(ss) {\r\n if (ss) {\r\n var rules = null;\r\n try {\r\n rules = ss.cssRules;\r\n } catch(ex) {}\r\n if (rules) {\r\n addRules(ss, rules);\r\n }\r\n }\r\n }\r\n function findFonts(rule) {\r\n var src = getPropertyValue(rule.style, \"src\");\r\n if (src) {\r\n return splitProperty(src).reduce(function(a, el){\r\n var font = getFontURL(el);\r\n if (font) {\r\n a.push(font);\r\n }\r\n return a;\r\n }, []);\r\n } else {\r\n // Internet Explorer\r\n // XXX: this is gross. should work though for valid CSS.\r\n var font = getFontURL(rule.cssText);\r\n return font ? [ font ] : [];\r\n }\r\n }\r\n function addRules(styleSheet, rules) {\r\n for (var i = 0; i < rules.length; ++i) {\r\n var r = rules[i];\r\n switch (r.type) {\r\n case 3: // CSSImportRule\r\n doStylesheet(r.styleSheet);\r\n break;\r\n case 5: // CSSFontFaceRule\r\n var style = r.style;\r\n var family = splitProperty(getPropertyValue(style, \"font-family\"));\r\n var bold = /^(400|bold)$/i.test(getPropertyValue(style, \"font-weight\"));\r\n var italic = \"italic\" == getPropertyValue(style, \"font-style\");\r\n var src = findFonts(r);\r\n if (src.length > 0) {\r\n addRule(styleSheet, family, bold, italic, src[0]);\r\n }\r\n }\r\n }\r\n }\r\n function addRule(styleSheet, names, bold, italic, url) {\r\n // We get full resolved absolute URLs in Chrome, but sadly\r\n // not in Firefox.\r\n if (!(/^data:/i.test(url))) {\r\n if (!(/^[^\\/:]+:\\/\\//.test(url) || /^\\//.test(url))) {\r\n url = String(styleSheet.href).replace(/[^\\/]*$/, \"\") + url;\r\n }\r\n }\r\n names.forEach(function(name){\r\n name = name.replace(/^(['\"]?)(.*?)\\1$/, \"$2\"); // it's quoted\r\n if (bold) {\r\n name += \"|bold\";\r\n }\r\n if (italic) {\r\n name += \"|italic\";\r\n }\r\n result[name] = url;\r\n });\r\n }\r\n }\r\n\r\n function hasOwnProperty(obj, key) {\r\n return Object.prototype.hasOwnProperty.call(obj, key);\r\n }\r\n\r\n function getCounter(name) {\r\n name = \"_counter_\" + name;\r\n return nodeInfo[name];\r\n }\r\n\r\n function getAllCounters(name) {\r\n var values = [], p = nodeInfo;\r\n name = \"_counter_\" + name;\r\n while (p) {\r\n if (hasOwnProperty(p, name)) {\r\n values.push(p[name]);\r\n }\r\n p = Object.getPrototypeOf(p);\r\n }\r\n return values.reverse();\r\n }\r\n\r\n function incCounter(name, inc) {\r\n var p = nodeInfo;\r\n name = \"_counter_\" + name;\r\n while (p && !hasOwnProperty(p, name)) {\r\n p = Object.getPrototypeOf(p);\r\n }\r\n if (!p) {\r\n p = nodeInfo._root;\r\n }\r\n p[name] = (p[name] || 0) + (inc == null ? 1 : inc);\r\n }\r\n\r\n function resetCounter(name, val) {\r\n name = \"_counter_\" + name;\r\n nodeInfo[name] = val == null ? 0 : val;\r\n }\r\n\r\n function doCounters(a, f, def) {\r\n for (var i = 0; i < a.length;) {\r\n var name = a[i++];\r\n var val = parseFloat(a[i]);\r\n if (isNaN(val)) {\r\n f(name, def);\r\n } else {\r\n f(name, val);\r\n ++i;\r\n }\r\n }\r\n }\r\n\r\n function parseColor(str, css) {\r\n var color = kendo.parseColor(str);\r\n if (color) {\r\n color = color.toRGB();\r\n if (css) {\r\n color = color.toCssRgba();\r\n } else if (color.a === 0) {\r\n color = null;\r\n }\r\n }\r\n return color;\r\n }\r\n\r\n function cacheImages(element, callback) {\r\n var urls = [];\r\n function add(url) {\r\n if (!IMAGE_CACHE[url]) {\r\n IMAGE_CACHE[url] = true;\r\n urls.push(url);\r\n }\r\n }\r\n (function dive(element){\r\n if (/^img$/i.test(element.tagName)) {\r\n add(element.src);\r\n }\r\n parseBackgroundImage(\r\n getPropertyValue(\r\n getComputedStyle(element), \"background-image\"\r\n )\r\n ).forEach(function(bg){\r\n if (bg.type == \"url\") {\r\n add(bg.url);\r\n }\r\n });\r\n slice.call(element.children).forEach(dive);\r\n })(element);\r\n var count = urls.length;\r\n function next() {\r\n if (--count <= 0) {\r\n callback();\r\n }\r\n }\r\n if (count === 0) {\r\n next();\r\n }\r\n urls.forEach(function(url){\r\n var img = IMAGE_CACHE[url] = new Image();\r\n if (!(/^data:/i.test(url))) {\r\n img.crossOrigin = \"Anonymous\";\r\n }\r\n img.src = url;\r\n if (img.complete) {\r\n next();\r\n } else {\r\n img.onload = next;\r\n img.onerror = function() {\r\n IMAGE_CACHE[url] = null;\r\n next();\r\n };\r\n }\r\n });\r\n }\r\n\r\n function romanNumeral(n) {\r\n var literals = {\r\n 1 : \"i\", 10 : \"x\", 100 : \"c\",\r\n 2 : \"ii\", 20 : \"xx\", 200 : \"cc\",\r\n 3 : \"iii\", 30 : \"xxx\", 300 : \"ccc\",\r\n 4 : \"iv\", 40 : \"xl\", 400 : \"cd\",\r\n 5 : \"v\", 50 : \"l\", 500 : \"d\",\r\n 6 : \"vi\", 60 : \"lx\", 600 : \"dc\",\r\n 7 : \"vii\", 70 : \"lxx\", 700 : \"dcc\",\r\n 8 : \"viii\", 80 : \"lxxx\", 800 : \"dccc\",\r\n 9 : \"ix\", 90 : \"xc\", 900 : \"cm\",\r\n 1000 : \"m\"\r\n };\r\n var values = [ 1000,\r\n 900 , 800, 700, 600, 500, 400, 300, 200, 100,\r\n 90 , 80 , 70 , 60 , 50 , 40 , 30 , 20 , 10 ,\r\n 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ];\r\n var roman = \"\";\r\n while (n > 0) {\r\n if (n < values[0]) {\r\n values.shift();\r\n } else {\r\n roman += literals[values[0]];\r\n n -= values[0];\r\n }\r\n }\r\n return roman;\r\n }\r\n\r\n function alphaNumeral(n) {\r\n var result = \"\";\r\n do {\r\n var r = n % 26;\r\n result = String.fromCharCode(97 + r) + result;\r\n n = Math.floor(n / 26);\r\n } while (n > 0);\r\n return result;\r\n }\r\n\r\n function pushNodeInfo(element, style, group) {\r\n nodeInfo = Object.create(nodeInfo);\r\n nodeInfo[element.tagName.toLowerCase()] = {\r\n element: element,\r\n style: style\r\n };\r\n var decoration = getPropertyValue(style, \"text-decoration\");\r\n if (decoration && decoration != \"none\") {\r\n var color = getPropertyValue(style, \"color\");\r\n decoration.split(/\\s+/g).forEach(function(name){\r\n if (!nodeInfo[name]) {\r\n nodeInfo[name] = color;\r\n }\r\n });\r\n }\r\n\r\n if (createsStackingContext(style)) {\r\n nodeInfo._stackingContext = {\r\n element: element,\r\n group: group\r\n };\r\n }\r\n }\r\n\r\n function popNodeInfo() {\r\n nodeInfo = Object.getPrototypeOf(nodeInfo);\r\n }\r\n\r\n function updateClipbox(path) {\r\n if (nodeInfo._clipbox != null) {\r\n var box = path.bbox(nodeInfo._matrix);\r\n if (nodeInfo._clipbox) {\r\n nodeInfo._clipbox = geo.Rect.intersect(nodeInfo._clipbox, box);\r\n } else {\r\n nodeInfo._clipbox = box;\r\n }\r\n }\r\n }\r\n\r\n function emptyClipbox() {\r\n var cb = nodeInfo._clipbox;\r\n if (cb == null) {\r\n return true;\r\n }\r\n if (cb) {\r\n return cb.width() === 0 || cb.height() === 0;\r\n }\r\n }\r\n\r\n function createsStackingContext(style) {\r\n function prop(name) { return getPropertyValue(style, name); }\r\n if (prop(\"transform\") != \"none\" ||\r\n (prop(\"position\") != \"static\" && prop(\"z-index\") != \"auto\") ||\r\n (prop(\"opacity\") < 1)) {\r\n return true;\r\n }\r\n }\r\n\r\n function getComputedStyle(element, pseudoElt) {\r\n return window.getComputedStyle(element, pseudoElt || null);\r\n }\r\n\r\n function getPropertyValue(style, prop) {\r\n return style.getPropertyValue(prop) ||\r\n ( browser.webkit && style.getPropertyValue(\"-webkit-\" + prop )) ||\r\n ( browser.mozilla && style.getPropertyValue(\"-moz-\" + prop )) ||\r\n ( browser.opera && style.getPropertyValue(\"-o-\" + prop)) ||\r\n ( browser.msie && style.getPropertyValue(\"-ms-\" + prop))\r\n ;\r\n }\r\n\r\n function pleaseSetPropertyValue(style, prop, value, important) {\r\n style.setProperty(prop, value, important);\r\n if (browser.webkit) {\r\n style.setProperty(\"-webkit-\" + prop, value, important);\r\n } else if (browser.mozilla) {\r\n style.setProperty(\"-moz-\" + prop, value, important);\r\n } else if (browser.opera) {\r\n style.setProperty(\"-o-\" + prop, value, important);\r\n } else if (browser.msie) {\r\n style.setProperty(\"-ms-\" + prop, value, important);\r\n prop = \"ms\" + prop.replace(/(^|-)([a-z])/g, function(s, p1, p2){\r\n return p1 + p2.toUpperCase();\r\n });\r\n style[prop] = value;\r\n }\r\n }\r\n\r\n function actuallyGetRangeBoundingRect(range) {\r\n if (browser.msie) {\r\n var a = range.getClientRects();\r\n if (a.length == 2 && a[1].width === 0) {\r\n return a[0];\r\n }\r\n }\r\n return range.getBoundingClientRect();\r\n }\r\n\r\n function getBorder(style, side) {\r\n side = \"border-\" + side;\r\n return {\r\n width: parseFloat(getPropertyValue(style, side + \"-width\")),\r\n style: getPropertyValue(style, side + \"-style\"),\r\n color: parseColor(getPropertyValue(style, side + \"-color\"), true)\r\n };\r\n }\r\n\r\n function saveStyle(element, func) {\r\n var prev = element.style.cssText;\r\n var result = func();\r\n element.style.cssText = prev;\r\n return result;\r\n }\r\n\r\n function getBorderRadius(style, side) {\r\n var r = getPropertyValue(style, \"border-\" + side + \"-radius\").split(/\\s+/g).map(parseFloat);\r\n if (r.length == 1) {\r\n r.push(r[0]);\r\n }\r\n return sanitizeRadius({ x: r[0], y: r[1] });\r\n }\r\n\r\n function getContentBox(element) {\r\n var box = element.getBoundingClientRect();\r\n box = innerBox(box, \"border-*-width\", element);\r\n box = innerBox(box, \"padding-*\", element);\r\n return box;\r\n }\r\n\r\n function innerBox(box, prop, element) {\r\n var style, wt, wr, wb, wl;\r\n if (typeof prop == \"string\") {\r\n style = getComputedStyle(element);\r\n wt = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"top\")));\r\n wr = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"right\")));\r\n wb = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"bottom\")));\r\n wl = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"left\")));\r\n }\r\n else if (typeof prop == \"number\") {\r\n wt = wr = wb = wl = prop;\r\n }\r\n return {\r\n top : box.top + wt,\r\n right : box.right - wr,\r\n bottom : box.bottom - wb,\r\n left : box.left + wl,\r\n width : box.right - box.left - wr - wl,\r\n height : box.bottom - box.top - wb - wt\r\n };\r\n }\r\n\r\n function getTransform(style) {\r\n var transform = getPropertyValue(style, \"transform\");\r\n if (transform == \"none\") {\r\n return null;\r\n }\r\n var matrix = /^\\s*matrix\\(\\s*(.*?)\\s*\\)\\s*$/.exec(transform);\r\n if (matrix) {\r\n var origin = getPropertyValue(style, \"transform-origin\");\r\n matrix = matrix[1].split(/\\s*,\\s*/g).map(parseFloat);\r\n origin = origin.split(/\\s+/g).map(parseFloat);\r\n return {\r\n matrix: matrix,\r\n origin: origin\r\n };\r\n }\r\n }\r\n\r\n function radiansToDegrees(radians) {\r\n return ((180 * radians) / Math.PI) % 360;\r\n }\r\n\r\n function parseAngle(angle) {\r\n var num = parseFloat(angle);\r\n if (/grad$/.test(angle)) {\r\n return Math.PI * num / 200;\r\n }\r\n else if (/rad$/.test(angle)) {\r\n return num;\r\n }\r\n else if (/turn$/.test(angle)) {\r\n return Math.PI * num * 2;\r\n }\r\n else if (/deg$/.test(angle)) {\r\n return Math.PI * num / 180;\r\n }\r\n }\r\n\r\n function setTransform(shape, m) {\r\n m = new geo.Matrix(m[0], m[1], m[2], m[3], m[4], m[5]);\r\n shape.transform(m);\r\n return m;\r\n }\r\n\r\n function setClipping(shape, clipPath) {\r\n shape.clip(clipPath);\r\n }\r\n\r\n function addArcToPath(path, x, y, options) {\r\n var points = new geo.Arc([ x, y ], options).curvePoints(), i = 1;\r\n while (i < points.length) {\r\n path.curveTo(points[i++], points[i++], points[i++]);\r\n }\r\n }\r\n\r\n function sanitizeRadius(r) {\r\n if (r.x <= 0 || r.y <= 0) {\r\n r.x = r.y = 0;\r\n }\r\n return r;\r\n }\r\n\r\n function adjustBorderRadiusForBox(box, rTL, rTR, rBR, rBL) {\r\n // adjust border radiuses such that the sum of adjacent\r\n // radiuses is not bigger than the length of the side.\r\n // seems the correct algorithm is variant (3) from here:\r\n // http://www.w3.org/Style/CSS/Tracker/issues/29?changelog\r\n var tl_x = Math.max(0, rTL.x), tl_y = Math.max(0, rTL.y);\r\n var tr_x = Math.max(0, rTR.x), tr_y = Math.max(0, rTR.y);\r\n var br_x = Math.max(0, rBR.x), br_y = Math.max(0, rBR.y);\r\n var bl_x = Math.max(0, rBL.x), bl_y = Math.max(0, rBL.y);\r\n\r\n var f = Math.min(\r\n box.width / (tl_x + tr_x),\r\n box.height / (tr_y + br_y),\r\n box.width / (br_x + bl_x),\r\n box.height / (bl_y + tl_y)\r\n );\r\n\r\n if (f < 1) {\r\n tl_x *= f; tl_y *= f;\r\n tr_x *= f; tr_y *= f;\r\n br_x *= f; br_y *= f;\r\n bl_x *= f; bl_y *= f;\r\n }\r\n\r\n return {\r\n tl: { x: tl_x, y: tl_y },\r\n tr: { x: tr_x, y: tr_y },\r\n br: { x: br_x, y: br_y },\r\n bl: { x: bl_x, y: bl_y }\r\n };\r\n }\r\n\r\n function elementRoundBox(element, box, type) {\r\n var style = getComputedStyle(element);\r\n\r\n var rTL = getBorderRadius(style, \"top-left\");\r\n var rTR = getBorderRadius(style, \"top-right\");\r\n var rBL = getBorderRadius(style, \"bottom-left\");\r\n var rBR = getBorderRadius(style, \"bottom-right\");\r\n\r\n if (type == \"padding\" || type == \"content\") {\r\n var bt = getBorder(style, \"top\");\r\n var br = getBorder(style, \"right\");\r\n var bb = getBorder(style, \"bottom\");\r\n var bl = getBorder(style, \"left\");\r\n rTL.x -= bl.width; rTL.y -= bt.width;\r\n rTR.x -= br.width; rTR.y -= bt.width;\r\n rBR.x -= br.width; rBR.y -= bb.width;\r\n rBL.x -= bl.width; rBL.y -= bb.width;\r\n if (type == \"content\") {\r\n var pt = parseFloat(getPropertyValue(style, \"padding-top\"));\r\n var pr = parseFloat(getPropertyValue(style, \"padding-right\"));\r\n var pb = parseFloat(getPropertyValue(style, \"padding-bottom\"));\r\n var pl = parseFloat(getPropertyValue(style, \"padding-left\"));\r\n rTL.x -= pl; rTL.y -= pt;\r\n rTR.x -= pr; rTR.y -= pt;\r\n rBR.x -= pr; rBR.y -= pb;\r\n rBL.x -= pl; rBL.y -= pb;\r\n }\r\n }\r\n\r\n if (typeof type == \"number\") {\r\n rTL.x -= type; rTL.y -= type;\r\n rTR.x -= type; rTR.y -= type;\r\n rBR.x -= type; rBR.y -= type;\r\n rBL.x -= type; rBL.y -= type;\r\n }\r\n\r\n return roundBox(box, rTL, rTR, rBR, rBL);\r\n }\r\n\r\n // Create a drawing.Path for a rounded rectangle. Receives the\r\n // bounding box and the border-radiuses in CSS order (top-left,\r\n // top-right, bottom-right, bottom-left). The radiuses must be\r\n // objects containing x (horiz. radius) and y (vertical radius).\r\n function roundBox(box, rTL0, rTR0, rBR0, rBL0) {\r\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\r\n var rTL = tmp.tl;\r\n var rTR = tmp.tr;\r\n var rBR = tmp.br;\r\n var rBL = tmp.bl;\r\n var path = new drawing.Path({ fill: null, stroke: null });\r\n path.moveTo(box.left, box.top + rTL.y);\r\n if (rTL.x) {\r\n addArcToPath(path, box.left + rTL.x, box.top + rTL.y, {\r\n startAngle: -180,\r\n endAngle: -90,\r\n radiusX: rTL.x,\r\n radiusY: rTL.y\r\n });\r\n }\r\n path.lineTo(box.right - rTR.x, box.top);\r\n if (rTR.x) {\r\n addArcToPath(path, box.right - rTR.x, box.top + rTR.y, {\r\n startAngle: -90,\r\n endAngle: 0,\r\n radiusX: rTR.x,\r\n radiusY: rTR.y\r\n });\r\n }\r\n path.lineTo(box.right, box.bottom - rBR.y);\r\n if (rBR.x) {\r\n addArcToPath(path, box.right - rBR.x, box.bottom - rBR.y, {\r\n startAngle: 0,\r\n endAngle: 90,\r\n radiusX: rBR.x,\r\n radiusY: rBR.y\r\n });\r\n }\r\n path.lineTo(box.left + rBL.x, box.bottom);\r\n if (rBL.x) {\r\n addArcToPath(path, box.left + rBL.x, box.bottom - rBL.y, {\r\n startAngle: 90,\r\n endAngle: 180,\r\n radiusX: rBL.x,\r\n radiusY: rBL.y\r\n });\r\n }\r\n return path.close();\r\n }\r\n\r\n function formatCounter(val, style) {\r\n var str = parseFloat(val) + \"\";\r\n switch (style) {\r\n case \"decimal-leading-zero\":\r\n if (str.length < 2) {\r\n str = \"0\" + str;\r\n }\r\n return str;\r\n case \"lower-roman\":\r\n return romanNumeral(val);\r\n case \"upper-roman\":\r\n return romanNumeral(val).toUpperCase();\r\n case \"lower-latin\":\r\n case \"lower-alpha\":\r\n return alphaNumeral(val - 1);\r\n case \"upper-latin\":\r\n case \"upper-alpha\":\r\n return alphaNumeral(val - 1).toUpperCase();\r\n default:\r\n return str;\r\n }\r\n }\r\n\r\n function evalPseudoElementContent(element, content) {\r\n function displayCounter(name, style, separator) {\r\n if (!separator) {\r\n return formatCounter(getCounter(name) || 0, style);\r\n }\r\n separator = separator.replace(/^\\s*([\"'])(.*)\\1\\s*$/, \"$2\");\r\n return getAllCounters(name).map(function(val){\r\n return formatCounter(val, style);\r\n }).join(separator);\r\n }\r\n var a = splitProperty(content, /^\\s+/);\r\n var result = [], m;\r\n a.forEach(function(el){\r\n var tmp;\r\n if ((m = /^\\s*([\"'])(.*)\\1\\s*$/.exec(el))) {\r\n result.push(m[2].replace(/\\\\([0-9a-f]{4})/gi, function(s, p){\r\n return String.fromCharCode(parseInt(p, 16));\r\n }));\r\n }\r\n else if ((m = /^\\s*counter\\((.*?)\\)\\s*$/.exec(el))) {\r\n tmp = splitProperty(m[1]);\r\n result.push(displayCounter(tmp[0], tmp[1]));\r\n }\r\n else if ((m = /^\\s*counters\\((.*?)\\)\\s*$/.exec(el))) {\r\n tmp = splitProperty(m[1]);\r\n result.push(displayCounter(tmp[0], tmp[2], tmp[1]));\r\n }\r\n else if ((m = /^\\s*attr\\((.*?)\\)\\s*$/.exec(el))) {\r\n result.push(element.getAttribute(m[1]) || \"\");\r\n }\r\n else {\r\n result.push(el);\r\n }\r\n });\r\n return result.join(\"\");\r\n }\r\n\r\n function getCssText(style) {\r\n if (style.cssText) {\r\n return style.cssText;\r\n }\r\n // Status: NEW. Report year: 2002. Current year: 2014.\r\n // Nice played, Mozillians.\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=137687\r\n var result = [];\r\n for (var i = 0; i < style.length; ++i) {\r\n result.push(style[i] + \": \" + getPropertyValue(style, style[i]));\r\n }\r\n return result.join(\";\\n\");\r\n }\r\n\r\n function _renderWithPseudoElements(element, group) {\r\n if (element.tagName == KENDO_PSEUDO_ELEMENT) {\r\n _renderElement(element, group);\r\n return;\r\n }\r\n var fake = [];\r\n function pseudo(kind, place) {\r\n var style = getComputedStyle(element, kind);\r\n if (style.content && style.content != \"normal\" && style.content != \"none\" && style.width != \"0px\") {\r\n var psel = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\r\n psel.style.cssText = getCssText(style);\r\n psel.textContent = evalPseudoElementContent(element, style.content);\r\n element.insertBefore(psel, place);\r\n if (kind == \":before\" && !(/absolute|fixed/.test(getPropertyValue(psel.style, \"position\")))) {\r\n // we need to shift the \"pseudo element\" to the left by its width, because we\r\n // created it as a real node and it'll overlap the host element position.\r\n psel.style.marginLeft = parseFloat(getPropertyValue(psel.style, \"margin-left\")) - psel.offsetWidth + \"px\";\r\n }\r\n fake.push(psel);\r\n }\r\n }\r\n pseudo(\":before\", element.firstChild);\r\n pseudo(\":after\", null);\r\n _renderElement(element, group);\r\n fake.forEach(function(el){ element.removeChild(el); });\r\n }\r\n\r\n function _renderElement(element, group) {\r\n var style = getComputedStyle(element);\r\n\r\n var top = getBorder(style, \"top\");\r\n var right = getBorder(style, \"right\");\r\n var bottom = getBorder(style, \"bottom\");\r\n var left = getBorder(style, \"left\");\r\n\r\n var rTL0 = getBorderRadius(style, \"top-left\");\r\n var rTR0 = getBorderRadius(style, \"top-right\");\r\n var rBL0 = getBorderRadius(style, \"bottom-left\");\r\n var rBR0 = getBorderRadius(style, \"bottom-right\");\r\n\r\n var dir = getPropertyValue(style, \"direction\");\r\n\r\n var backgroundColor = getPropertyValue(style, \"background-color\");\r\n backgroundColor = parseColor(backgroundColor);\r\n\r\n var backgroundImage = parseBackgroundImage( getPropertyValue(style, \"background-image\") );\r\n var backgroundRepeat = splitProperty( getPropertyValue(style, \"background-repeat\") );\r\n var backgroundPosition = splitProperty( getPropertyValue(style, \"background-position\") );\r\n var backgroundOrigin = splitProperty( getPropertyValue(style, \"background-origin\") );\r\n var backgroundSize = splitProperty( getPropertyValue(style, \"background-size\") );\r\n\r\n if (browser.msie && browser.version < 10) {\r\n // IE9 hacks. getPropertyValue won't return the correct\r\n // value. Sucks that we have to do it here, I'd prefer to\r\n // move it in getPropertyValue, but we don't have the\r\n // element.\r\n backgroundPosition = splitProperty(element.currentStyle.backgroundPosition);\r\n }\r\n\r\n var innerbox = innerBox(element.getBoundingClientRect(), \"border-*-width\", element);\r\n\r\n // CSS \"clip\" property - if present, replace the group with a\r\n // new one which is clipped. This must happen before drawing\r\n // the borders and background.\r\n (function(){\r\n var clip = getPropertyValue(style, \"clip\");\r\n var m = /^\\s*rect\\((.*)\\)\\s*$/.exec(clip);\r\n if (m) {\r\n var a = m[1].split(/[ ,]+/g);\r\n var top = a[0] == \"auto\" ? innerbox.top : parseFloat(a[0]) + innerbox.top;\r\n var right = a[1] == \"auto\" ? innerbox.right : parseFloat(a[1]) + innerbox.left;\r\n var bottom = a[2] == \"auto\" ? innerbox.bottom : parseFloat(a[2]) + innerbox.top;\r\n var left = a[3] == \"auto\" ? innerbox.left : parseFloat(a[3]) + innerbox.left;\r\n var tmp = new drawing.Group();\r\n var clipPath = new drawing.Path()\r\n .moveTo(left, top)\r\n .lineTo(right, top)\r\n .lineTo(right, bottom)\r\n .lineTo(left, bottom)\r\n .close();\r\n setClipping(tmp, clipPath);\r\n group.append(tmp);\r\n group = tmp;\r\n updateClipbox(clipPath);\r\n }\r\n })();\r\n\r\n var boxes = element.getClientRects();\r\n if (boxes.length == 1) {\r\n // Workaround the missing borders in Chrome! getClientRects() boxes contains values\r\n // rounded to integer. getBoundingClientRect() appears to work fine. We still need\r\n // getClientRects() to support cases where there are more boxes (continued inline\r\n // elements that might have border/background).\r\n boxes = [ element.getBoundingClientRect() ];\r\n }\r\n\r\n // This function workarounds another Chrome bug, where boxes returned for a table with\r\n // border-collapse: collapse will overlap the table border. Our rendering is not perfect in\r\n // such case anyway, but with this is better than without it.\r\n boxes = adjustBoxes(boxes);\r\n\r\n for (var i = 0; i < boxes.length; ++i) {\r\n drawOneBox(boxes[i], i === 0, i == boxes.length - 1);\r\n }\r\n\r\n if (boxes.length > 0 && getPropertyValue(style, \"display\") == \"list-item\") {\r\n drawBullet(boxes[0]);\r\n }\r\n\r\n // overflow: hidden/auto - if present, replace the group with\r\n // a new one clipped by the inner box.\r\n (function(){\r\n function clipit() {\r\n var clipPath = elementRoundBox(element, innerbox, \"padding\");\r\n var tmp = new drawing.Group();\r\n setClipping(tmp, clipPath);\r\n group.append(tmp);\r\n group = tmp;\r\n updateClipbox(clipPath);\r\n }\r\n if (isFormField(element)) {\r\n clipit();\r\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, \"overflow\"))) {\r\n clipit();\r\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, \"overflow-x\"))) {\r\n clipit();\r\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, \"overflow-y\"))) {\r\n clipit();\r\n }\r\n })();\r\n\r\n if (!maybeRenderWidget(element, group)) {\r\n renderContents(element, group);\r\n }\r\n\r\n return group; // only utility functions after this line.\r\n\r\n function adjustBoxes(boxes) {\r\n if (/^td$/i.test(element.tagName)) {\r\n var table = nodeInfo.table;\r\n if (table && getPropertyValue(table.style, \"border-collapse\") == \"collapse\") {\r\n var tableBorderLeft = getBorder(table.style, \"left\").width;\r\n var tableBorderTop = getBorder(table.style, \"top\").width;\r\n // check if we need to adjust\r\n if (tableBorderLeft === 0 && tableBorderTop === 0) {\r\n return boxes; // nope\r\n }\r\n var tableBox = table.element.getBoundingClientRect();\r\n var firstCell = table.element.rows[0].cells[0];\r\n var firstCellBox = firstCell.getBoundingClientRect();\r\n if (firstCellBox.top == tableBox.top || firstCellBox.left == tableBox.left) {\r\n return slice.call(boxes).map(function(box){\r\n return {\r\n left : box.left + tableBorderLeft,\r\n top : box.top + tableBorderTop,\r\n right : box.right + tableBorderLeft,\r\n bottom : box.bottom + tableBorderTop,\r\n height : box.height,\r\n width : box.width\r\n };\r\n });\r\n }\r\n }\r\n }\r\n return boxes;\r\n }\r\n\r\n // this function will be called to draw each border. it\r\n // draws starting at origin and the resulted path must be\r\n // translated/rotated to be placed in the proper position.\r\n //\r\n // arguments are named as if it draws the top border:\r\n //\r\n // - `len` the length of the edge\r\n // - `Wtop` the width of the edge (i.e. border-top-width)\r\n // - `Wleft` the width of the left edge (border-left-width)\r\n // - `Wright` the width of the right edge\r\n // - `rl` and `rl` -- the border radius on the left and right\r\n // (objects containing x and y, for horiz/vertical radius)\r\n // - `transform` -- transformation to apply\r\n //\r\n function drawEdge(color, len, Wtop, Wleft, Wright, rl, rr, transform) {\r\n if (Wtop <= 0) {\r\n return;\r\n }\r\n\r\n var path, edge = new drawing.Group();\r\n setTransform(edge, transform);\r\n group.append(edge);\r\n\r\n sanitizeRadius(rl);\r\n sanitizeRadius(rr);\r\n\r\n // draw main border. this is the area without the rounded corners\r\n path = new drawing.Path({\r\n fill: { color: color },\r\n stroke: null\r\n });\r\n edge.append(path);\r\n path.moveTo(rl.x ? Math.max(rl.x, Wleft) : 0, 0)\r\n .lineTo(len - (rr.x ? Math.max(rr.x, Wright) : 0), 0)\r\n .lineTo(len - Math.max(rr.x, Wright), Wtop)\r\n .lineTo(Math.max(rl.x, Wleft), Wtop)\r\n .close();\r\n\r\n if (rl.x) {\r\n drawRoundCorner(Wleft, rl, [ -1, 0, 0, 1, rl.x, 0 ]);\r\n }\r\n\r\n if (rr.x) {\r\n drawRoundCorner(Wright, rr, [ 1, 0, 0, 1, len - rr.x, 0 ]);\r\n }\r\n\r\n // draws one round corner, starting at origin (needs to be\r\n // translated/rotated to be placed properly).\r\n function drawRoundCorner(Wright, r, transform) {\r\n var angle = Math.PI/2 * Wright / (Wright + Wtop);\r\n\r\n // not sanitizing this one, because negative values\r\n // are useful to fill the box correctly.\r\n var ri = {\r\n x: r.x - Wright,\r\n y: r.y - Wtop\r\n };\r\n\r\n var path = new drawing.Path({\r\n fill: { color: color },\r\n stroke: null\r\n }).moveTo(0, 0);\r\n\r\n setTransform(path, transform);\r\n\r\n addArcToPath(path, 0, r.y, {\r\n startAngle: -90,\r\n endAngle: -radiansToDegrees(angle),\r\n radiusX: r.x,\r\n radiusY: r.y\r\n });\r\n\r\n if (ri.x > 0 && ri.y > 0) {\r\n path.lineTo(ri.x * Math.cos(angle), r.y - ri.y * Math.sin(angle));\r\n addArcToPath(path, 0, r.y, {\r\n startAngle: -radiansToDegrees(angle),\r\n endAngle: -90,\r\n radiusX: ri.x,\r\n radiusY: ri.y,\r\n anticlockwise: true\r\n });\r\n }\r\n else if (ri.x > 0) {\r\n path.lineTo(ri.x, Wtop)\r\n .lineTo(0, Wtop);\r\n }\r\n else {\r\n path.lineTo(ri.x, Wtop)\r\n .lineTo(ri.x, 0);\r\n }\r\n\r\n edge.append(path.close());\r\n }\r\n }\r\n\r\n function drawBackground(box) {\r\n var background = new drawing.Group();\r\n setClipping(background, roundBox(box, rTL0, rTR0, rBR0, rBL0));\r\n group.append(background);\r\n\r\n if (element.tagName == \"A\" && element.href && !/^#?$/.test($(element).attr(\"href\"))) {\r\n background._pdfLink = {\r\n url : element.href,\r\n top : box.top,\r\n right : box.right,\r\n bottom : box.bottom,\r\n left : box.left\r\n };\r\n }\r\n\r\n if (backgroundColor) {\r\n var path = new drawing.Path({\r\n fill: { color: backgroundColor.toCssRgba() },\r\n stroke: null\r\n });\r\n path.moveTo(box.left, box.top)\r\n .lineTo(box.right, box.top)\r\n .lineTo(box.right, box.bottom)\r\n .lineTo(box.left, box.bottom)\r\n .close();\r\n background.append(path);\r\n }\r\n\r\n for (var i = backgroundImage.length; --i >= 0;) {\r\n drawOneBackground(\r\n background, box,\r\n backgroundImage[i],\r\n backgroundRepeat[i % backgroundRepeat.length],\r\n backgroundPosition[i % backgroundPosition.length],\r\n backgroundOrigin[i % backgroundOrigin.length],\r\n backgroundSize[i % backgroundSize.length]\r\n );\r\n }\r\n }\r\n\r\n function drawOneBackground(group, box, background, backgroundRepeat, backgroundPosition, backgroundOrigin, backgroundSize) {\r\n if (!background || (background == \"none\")) {\r\n return;\r\n }\r\n\r\n if (background.type == \"url\") {\r\n // SVG taints the canvas, can't draw it.\r\n if (/^url\\(\\\"data:image\\/svg/i.test(background.url)) {\r\n return;\r\n }\r\n var img = IMAGE_CACHE[background.url];\r\n if (img && img.width > 0 && img.height > 0) {\r\n drawBackgroundImage(group, box, img.width, img.height, function(group, rect){\r\n group.append(new drawing.Image(background.url, rect));\r\n });\r\n }\r\n } else if (background.type == \"linear\") {\r\n drawBackgroundImage(group, box, box.width, box.height, gradientRenderer(background));\r\n } else {\r\n return;\r\n }\r\n\r\n function drawBackgroundImage(group, box, img_width, img_height, renderBG) {\r\n var aspect_ratio = img_width / img_height;\r\n\r\n // for background-origin: border-box the box is already appropriate\r\n var orgBox = box;\r\n if (backgroundOrigin == \"content-box\") {\r\n orgBox = innerBox(orgBox, \"border-*-width\", element);\r\n orgBox = innerBox(orgBox, \"padding-*\", element);\r\n } else if (backgroundOrigin == \"padding-box\") {\r\n orgBox = innerBox(orgBox, \"border-*-width\", element);\r\n }\r\n\r\n if (!/^\\s*auto(\\s+auto)?\\s*$/.test(backgroundSize)) {\r\n var size = backgroundSize.split(/\\s+/g);\r\n // compute width\r\n if (/%$/.test(size[0])) {\r\n img_width = orgBox.width * parseFloat(size[0]) / 100;\r\n } else {\r\n img_width = parseFloat(size[0]);\r\n }\r\n // compute height\r\n if (size.length == 1 || size[1] == \"auto\") {\r\n img_height = img_width / aspect_ratio;\r\n } else if (/%$/.test(size[1])) {\r\n img_height = orgBox.height * parseFloat(size[1]) / 100;\r\n } else {\r\n img_height = parseFloat(size[1]);\r\n }\r\n }\r\n\r\n var pos = (backgroundPosition+\"\").split(/\\s+/);\r\n if (pos.length == 1) {\r\n pos[1] = \"50%\";\r\n }\r\n\r\n if (/%$/.test(pos[0])) {\r\n pos[0] = parseFloat(pos[0]) / 100 * (orgBox.width - img_width);\r\n } else {\r\n pos[0] = parseFloat(pos[0]);\r\n }\r\n if (/%$/.test(pos[1])) {\r\n pos[1] = parseFloat(pos[1]) / 100 * (orgBox.height - img_height);\r\n } else {\r\n pos[1] = parseFloat(pos[1]);\r\n }\r\n\r\n var rect = new geo.Rect([ orgBox.left + pos[0], orgBox.top + pos[1] ], [ img_width, img_height ]);\r\n\r\n // XXX: background-repeat could be implemented more\r\n // efficiently as a fill pattern (at least for PDF\r\n // output, probably SVG too).\r\n\r\n function rewX() {\r\n while (rect.origin.x > box.left) {\r\n rect.origin.x -= img_width;\r\n }\r\n }\r\n\r\n function rewY() {\r\n while (rect.origin.y > box.top) {\r\n rect.origin.y -= img_height;\r\n }\r\n }\r\n\r\n function repeatX() {\r\n while (rect.origin.x < box.right) {\r\n renderBG(group, rect.clone());\r\n rect.origin.x += img_width;\r\n }\r\n }\r\n\r\n if (backgroundRepeat == \"no-repeat\") {\r\n renderBG(group, rect);\r\n }\r\n else if (backgroundRepeat == \"repeat-x\") {\r\n rewX();\r\n repeatX();\r\n }\r\n else if (backgroundRepeat == \"repeat-y\") {\r\n rewY();\r\n while (rect.origin.y < box.bottom) {\r\n renderBG(group, rect.clone());\r\n rect.origin.y += img_height;\r\n }\r\n }\r\n else if (backgroundRepeat == \"repeat\") {\r\n rewX();\r\n rewY();\r\n var origin = rect.origin.clone();\r\n while (rect.origin.y < box.bottom) {\r\n rect.origin.x = origin.x;\r\n repeatX();\r\n rect.origin.y += img_height;\r\n }\r\n }\r\n }\r\n }\r\n\r\n function drawBullet(box) {\r\n var listStyleType = getPropertyValue(style, \"list-style-type\");\r\n if (listStyleType == \"none\") {\r\n return;\r\n }\r\n var listStyleImage = getPropertyValue(style, \"list-style-image\");\r\n var listStylePosition = getPropertyValue(style, \"list-style-position\");\r\n\r\n function _drawBullet(f) {\r\n saveStyle(element, function(){\r\n element.style.position = \"relative\";\r\n var bullet = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\r\n bullet.style.position = \"absolute\";\r\n bullet.style.boxSizing = \"border-box\";\r\n if (listStylePosition == \"outside\") {\r\n bullet.style.width = \"6em\";\r\n bullet.style.left = \"-6.8em\";\r\n bullet.style.textAlign = \"right\";\r\n } else {\r\n bullet.style.left = \"0px\";\r\n }\r\n f(bullet);\r\n element.insertBefore(bullet, element.firstChild);\r\n renderElement(bullet, group);\r\n element.removeChild(bullet);\r\n });\r\n }\r\n\r\n function elementIndex(f) {\r\n var a = element.parentNode.children;\r\n for (var i = 0; i < a.length; ++i) {\r\n if (a[i] === element) {\r\n return f(i, a.length);\r\n }\r\n }\r\n }\r\n\r\n switch (listStyleType) {\r\n case \"circle\":\r\n case \"disc\":\r\n case \"square\":\r\n _drawBullet(function(bullet){\r\n // XXX: the science behind these values is called \"trial and error\".\r\n bullet.style.fontSize = \"60%\";\r\n bullet.style.lineHeight = \"200%\";\r\n bullet.style.paddingRight = \"0.5em\";\r\n bullet.style.fontFamily = \"DejaVu Serif\";\r\n bullet.innerHTML = {\r\n \"disc\" : \"\\u25cf\",\r\n \"circle\" : \"\\u25ef\",\r\n \"square\" : \"\\u25a0\"\r\n }[listStyleType];\r\n });\r\n break;\r\n\r\n case \"decimal\":\r\n case \"decimal-leading-zero\":\r\n _drawBullet(function(bullet){\r\n elementIndex(function(idx, len){\r\n ++idx;\r\n if (listStyleType == \"decimal-leading-zero\" && (idx+\"\").length < 2) {\r\n idx = \"0\" + idx;\r\n }\r\n bullet.innerHTML = idx + \".\";\r\n });\r\n });\r\n break;\r\n\r\n case \"lower-roman\":\r\n case \"upper-roman\":\r\n _drawBullet(function(bullet){\r\n elementIndex(function(idx, len){\r\n idx = romanNumeral(idx + 1);\r\n if (listStyleType == \"upper-roman\") {\r\n idx = idx.toUpperCase();\r\n }\r\n bullet.innerHTML = idx + \".\";\r\n });\r\n });\r\n break;\r\n\r\n case \"lower-latin\":\r\n case \"lower-alpha\":\r\n case \"upper-latin\":\r\n case \"upper-alpha\":\r\n _drawBullet(function(bullet){\r\n elementIndex(function(idx, len){\r\n idx = alphaNumeral(idx);\r\n if (/^upper/i.test(listStyleType)) {\r\n idx = idx.toUpperCase();\r\n }\r\n bullet.innerHTML = idx + \".\";\r\n });\r\n });\r\n break;\r\n }\r\n }\r\n\r\n // draws a single border box\r\n function drawOneBox(box, isFirst, isLast) {\r\n if (box.width === 0 || box.height === 0) {\r\n return;\r\n }\r\n\r\n drawBackground(box);\r\n\r\n var shouldDrawLeft = (left.width > 0 && ((isFirst && dir == \"ltr\") || (isLast && dir == \"rtl\")));\r\n var shouldDrawRight = (right.width > 0 && ((isLast && dir == \"ltr\") || (isFirst && dir == \"rtl\")));\r\n\r\n // The most general case is that the 4 borders have different widths and border\r\n // radiuses. The way that is handled is by drawing 3 Paths for each border: the\r\n // straight line, and two round corners which represent half of the entire rounded\r\n // corner. To simplify code those shapes are drawed at origin (by the drawEdge\r\n // function), then translated/rotated into the right position.\r\n //\r\n // However, this leads to poor results due to rounding in the simpler cases where\r\n // borders are straight lines. Therefore we handle a few such cases separately with\r\n // straight lines. C^wC^wC^w -- nope, scratch that. poor rendering was because of a bug\r\n // in Chrome (getClientRects() returns rounded integer values rather than exact floats.\r\n // web dev is still a ghetto.)\r\n\r\n // first, just in case there is no border...\r\n if (top.width === 0 && left.width === 0 && right.width === 0 && bottom.width === 0) {\r\n return;\r\n }\r\n\r\n if (true) { // so that it's easy to comment out.. uglifyjs will drop the spurious if.\r\n\r\n // if all borders have equal colors...\r\n if (top.color == right.color && top.color == bottom.color && top.color == left.color) {\r\n\r\n // if same widths too, we can draw the whole border by stroking a single path.\r\n if (top.width == right.width && top.width == bottom.width && top.width == left.width)\r\n {\r\n if (shouldDrawLeft && shouldDrawRight) {\r\n // reduce box by half the border width, so we can draw it by stroking.\r\n box = innerBox(box, top.width/2);\r\n\r\n // adjust the border radiuses, again by top.width/2, and make the path element.\r\n var path = elementRoundBox(element, box, top.width/2);\r\n path.options.stroke = {\r\n color: top.color,\r\n width: top.width\r\n };\r\n group.append(path);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // if border radiuses are zero and widths are at most one pixel, we can again use simple\r\n // paths.\r\n if (rTL0.x === 0 && rTR0.x === 0 && rBR0.x === 0 && rBL0.x === 0) {\r\n // alright, 1.9px will do as well. the difference in color blending should not be\r\n // noticeable.\r\n if (top.width < 2 && left.width < 2 && right.width < 2 && bottom.width < 2) {\r\n // top border\r\n if (top.width > 0) {\r\n group.append(\r\n new drawing.Path({\r\n stroke: { width: top.width, color: top.color }\r\n })\r\n .moveTo(box.left, box.top + top.width/2)\r\n .lineTo(box.right, box.top + top.width/2)\r\n );\r\n }\r\n\r\n // bottom border\r\n if (bottom.width > 0) {\r\n group.append(\r\n new drawing.Path({\r\n stroke: { width: bottom.width, color: bottom.color }\r\n })\r\n .moveTo(box.left, box.bottom - bottom.width/2)\r\n .lineTo(box.right, box.bottom - bottom.width/2)\r\n );\r\n }\r\n\r\n // left border\r\n if (shouldDrawLeft) {\r\n group.append(\r\n new drawing.Path({\r\n stroke: { width: left.width, color: left.color }\r\n })\r\n .moveTo(box.left + left.width/2, box.top)\r\n .lineTo(box.left + left.width/2, box.bottom)\r\n );\r\n }\r\n\r\n // right border\r\n if (shouldDrawRight) {\r\n group.append(\r\n new drawing.Path({\r\n stroke: { width: right.width, color: right.color }\r\n })\r\n .moveTo(box.right - right.width/2, box.top)\r\n .lineTo(box.right - right.width/2, box.bottom)\r\n );\r\n }\r\n\r\n return;\r\n }\r\n }\r\n\r\n }\r\n\r\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\r\n var rTL = tmp.tl;\r\n var rTR = tmp.tr;\r\n var rBR = tmp.br;\r\n var rBL = tmp.bl;\r\n\r\n // top border\r\n drawEdge(top.color,\r\n box.width, top.width, left.width, right.width,\r\n rTL, rTR,\r\n [ 1, 0, 0, 1, box.left, box.top ]);\r\n\r\n // bottom border\r\n drawEdge(bottom.color,\r\n box.width, bottom.width, right.width, left.width,\r\n rBR, rBL,\r\n [ -1, 0, 0, -1, box.right, box.bottom ]);\r\n\r\n // for left/right borders we need to invert the border-radiuses\r\n function inv(p) {\r\n return { x: p.y, y: p.x };\r\n }\r\n\r\n // left border\r\n drawEdge(left.color,\r\n box.height, left.width, bottom.width, top.width,\r\n inv(rBL), inv(rTL),\r\n [ 0, -1, 1, 0, box.left, box.bottom ]);\r\n\r\n // right border\r\n drawEdge(right.color,\r\n box.height, right.width, top.width, bottom.width,\r\n inv(rTR), inv(rBR),\r\n [ 0, 1, -1, 0, box.right, box.top ]);\r\n }\r\n }\r\n\r\n function gradientRenderer(gradient) {\r\n return function(group, rect) {\r\n var width = rect.width(), height = rect.height(), tl = rect.topLeft();\r\n\r\n switch (gradient.type) {\r\n case \"linear\":\r\n\r\n // figure out the angle.\r\n var angle = gradient.angle != null ? gradient.angle : Math.PI;\r\n switch (gradient.to) {\r\n case \"top\":\r\n angle = 0;\r\n break;\r\n case \"left\":\r\n angle = -Math.PI / 2;\r\n break;\r\n case \"bottom\":\r\n angle = Math.PI;\r\n break;\r\n case \"right\":\r\n angle = Math.PI / 2;\r\n break;\r\n case \"top left\": case \"left top\":\r\n angle = -Math.atan2(height, width);\r\n break;\r\n case \"top right\": case \"right top\":\r\n angle = Math.atan2(height, width);\r\n break;\r\n case \"bottom left\": case \"left bottom\":\r\n angle = Math.PI + Math.atan2(height, width);\r\n break;\r\n case \"bottom right\": case \"right bottom\":\r\n angle = Math.PI - Math.atan2(height, width);\r\n break;\r\n }\r\n\r\n if (gradient.reverse) {\r\n angle -= Math.PI;\r\n }\r\n\r\n // limit the angle between 0..2PI\r\n angle %= 2 * Math.PI;\r\n if (angle < 0) {\r\n angle += 2 * Math.PI;\r\n }\r\n\r\n // compute gradient's start/end points. here len is the length of the gradient line\r\n // and x,y is the end point relative to the center of the rectangle in conventional\r\n // (math) axis direction.\r\n\r\n // this is the original (unscaled) length of the gradient line. needed to deal with\r\n // absolutely positioned color stops. formula from the CSS spec:\r\n // http://dev.w3.org/csswg/css-images-3/#linear-gradient-syntax\r\n var pxlen = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\r\n\r\n // The math below is pretty simple, but it took a while to figure out. We compute x\r\n // and y, the *end* of the gradient line. However, we want to transform them into\r\n // element-based coordinates (SVG's gradientUnits=\"objectBoundingBox\"). That means,\r\n // x=0 is the left edge, x=1 is the right edge, y=0 is the top edge and y=1 is the\r\n // bottom edge.\r\n //\r\n // A naive approach would use the original angle for these calculations. Say we'd\r\n // like to draw a gradient angled at 45deg in a 100x400 box. When we use\r\n // objectBoundingBox, the renderer will draw it in a 1x1 *square* box, and then\r\n // scale that to the desired dimensions. The 45deg angle will look more like 70deg\r\n // after scaling. SVG (http://www.w3.org/TR/SVG/pservers.html#LinearGradients) says\r\n // the following:\r\n //\r\n // When gradientUnits=\"objectBoundingBox\" and 'gradientTransform' is the\r\n // identity matrix, the normal of the linear gradient is perpendicular to the\r\n // gradient vector in object bounding box space (i.e., the abstract coordinate\r\n // system where (0,0) is at the top/left of the object bounding box and (1,1) is\r\n // at the bottom/right of the object bounding box). When the object's bounding\r\n // box is not square, the gradient normal which is initially perpendicular to\r\n // the gradient vector within object bounding box space may render\r\n // non-perpendicular relative to the gradient vector in user space. If the\r\n // gradient vector is parallel to one of the axes of the bounding box, the\r\n // gradient normal will remain perpendicular. This transformation is due to\r\n // application of the non-uniform scaling transformation from bounding box space\r\n // to user space.\r\n //\r\n // which is an extremely long and confusing way to tell what I just said above.\r\n //\r\n // For this reason we need to apply the reverse scaling to the original angle, so\r\n // that when it'll finally be rendered it'll actually be at the desired slope. Now\r\n // I'll let you figure out the math yourself.\r\n\r\n var scaledAngle = Math.atan(width * Math.tan(angle) / height);\r\n var sin = Math.sin(scaledAngle), cos = Math.cos(scaledAngle);\r\n var len = Math.abs(sin) + Math.abs(cos);\r\n var x = len/2 * sin;\r\n var y = len/2 * cos;\r\n\r\n // Because of the arctangent, our scaledAngle ends up between -PI/2..PI/2, possibly\r\n // losing the intended direction of the gradient. The following fixes it.\r\n if (angle > Math.PI/2 && angle <= 3*Math.PI/2) {\r\n x = -x;\r\n y = -y;\r\n }\r\n\r\n // compute the color stops.\r\n var implicit = [], right = 0;\r\n var stops = gradient.stops.map(function(s, i){\r\n var offset = s.percent;\r\n if (offset) {\r\n offset = parseFloat(offset) / 100;\r\n } else if (s.length) {\r\n offset = parseFloat(s.length) / pxlen;\r\n } else if (i === 0) {\r\n offset = 0;\r\n } else if (i == gradient.stops.length - 1) {\r\n offset = 1;\r\n }\r\n var stop = {\r\n color: s.color.toCssRgba(),\r\n offset: offset\r\n };\r\n if (offset != null) {\r\n right = offset;\r\n // fix implicit offsets\r\n implicit.forEach(function(s, i){\r\n var stop = s.stop;\r\n stop.offset = s.left + (right - s.left) * (i + 1) / (implicit.length + 1);\r\n });\r\n implicit = [];\r\n } else {\r\n implicit.push({ left: right, stop: stop });\r\n }\r\n return stop;\r\n });\r\n\r\n var start = [ 0.5 - x, 0.5 + y ];\r\n var end = [ 0.5 + x, 0.5 - y ];\r\n\r\n // finally, draw it.\r\n group.append(\r\n drawing.Path.fromRect(rect)\r\n .stroke(null)\r\n .fill(new drawing.LinearGradient({\r\n start : start,\r\n end : end,\r\n stops : stops,\r\n userSpace : false\r\n }))\r\n );\r\n break;\r\n case \"radial\":\r\n // XXX:\r\n if (window.console && window.console.log) {\r\n window.console.log(\"Radial gradients are not yet supported in HTML renderer\");\r\n }\r\n break;\r\n }\r\n };\r\n }\r\n\r\n function maybeRenderWidget(element, group) {\r\n if (element.getAttribute(kendo.attr(\"role\"))) {\r\n var widget = kendo.widgetInstance($(element));\r\n if (widget && (widget.exportDOMVisual || widget.exportVisual)) {\r\n var visual;\r\n if (widget.exportDOMVisual) {\r\n visual = widget.exportDOMVisual();\r\n } else {\r\n visual = widget.exportVisual();\r\n }\r\n\r\n if (!visual) {\r\n return false;\r\n }\r\n\r\n var wrap = new drawing.Group();\r\n wrap.children.push(visual);\r\n\r\n var bbox = element.getBoundingClientRect();\r\n wrap.transform(geo.transform().translate(bbox.left, bbox.top));\r\n\r\n group.append(wrap);\r\n\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n function renderImage(element, url, group) {\r\n var box = getContentBox(element);\r\n var rect = new geo.Rect([ box.left, box.top ], [ box.width, box.height ]);\r\n var image = new drawing.Image(url, rect);\r\n setClipping(image, elementRoundBox(element, box, \"content\"));\r\n group.append(image);\r\n }\r\n\r\n function zIndexSort(a, b) {\r\n var sa = getComputedStyle(a);\r\n var sb = getComputedStyle(b);\r\n var za = parseFloat(getPropertyValue(sa, \"z-index\"));\r\n var zb = parseFloat(getPropertyValue(sb, \"z-index\"));\r\n var pa = getPropertyValue(sa, \"position\");\r\n var pb = getPropertyValue(sb, \"position\");\r\n if (isNaN(za) && isNaN(zb)) {\r\n if ((/static|absolute/.test(pa)) && (/static|absolute/.test(pb))) {\r\n return 0;\r\n }\r\n if (pa == \"static\") {\r\n return -1;\r\n }\r\n if (pb == \"static\") {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n if (isNaN(za)) {\r\n return zb === 0 ? 0 : zb > 0 ? -1 : 1;\r\n }\r\n if (isNaN(zb)) {\r\n return za === 0 ? 0 : za > 0 ? 1 : -1;\r\n }\r\n return parseFloat(za) - parseFloat(zb);\r\n }\r\n\r\n function isFormField(element) {\r\n return /^(?:textarea|select|input)$/i.test(element.tagName);\r\n }\r\n\r\n function getSelectedOption(element) {\r\n if (element.selectedOptions && element.selectedOptions.length > 0) {\r\n return element.selectedOptions[0];\r\n }\r\n return element.options[element.selectedIndex];\r\n }\r\n\r\n function renderFormField(element, group) {\r\n var tag = element.tagName.toLowerCase();\r\n var p = element.parentNode;\r\n var doc = element.ownerDocument;\r\n var el = doc.createElement(KENDO_PSEUDO_ELEMENT);\r\n var option;\r\n el.style.cssText = getCssText(getComputedStyle(element));\r\n el.style.display = \"inline-block\";\r\n if (tag == \"input\") {\r\n el.style.whiteSpace = \"pre\";\r\n }\r\n if (tag == \"select\" || tag == \"textarea\") {\r\n el.style.overflow = \"auto\";\r\n }\r\n if (tag == \"select\") {\r\n if (element.multiple) {\r\n for (var i = 0; i < element.options.length; ++i) {\r\n option = doc.createElement(KENDO_PSEUDO_ELEMENT);\r\n option.style.cssText = getCssText(getComputedStyle(element.options[i]));\r\n option.style.display = \"block\"; // IE9 messes up without this\r\n option.textContent = element.options[i].textContent;\r\n el.appendChild(option);\r\n }\r\n } else {\r\n option = getSelectedOption(element);\r\n if (option) {\r\n el.textContent = option.textContent;\r\n }\r\n }\r\n } else {\r\n el.textContent = element.value;\r\n }\r\n p.insertBefore(el, element);\r\n el.scrollLeft = element.scrollLeft;\r\n el.scrollTop = element.scrollTop;\r\n renderContents(el, group);\r\n p.removeChild(el);\r\n }\r\n\r\n function renderContents(element, group) {\r\n if (nodeInfo._stackingContext.element === element) {\r\n // the group that was set in pushNodeInfo might have\r\n // changed due to clipping/transforms, update it here.\r\n nodeInfo._stackingContext.group = group;\r\n }\r\n switch (element.tagName.toLowerCase()) {\r\n case \"img\":\r\n renderImage(element, element.src, group);\r\n break;\r\n\r\n case \"canvas\":\r\n try {\r\n renderImage(element, element.toDataURL(\"image/png\"), group);\r\n } catch(ex) {\r\n // tainted; can't draw it, ignore.\r\n }\r\n break;\r\n\r\n case \"textarea\":\r\n case \"input\":\r\n case \"select\":\r\n renderFormField(element, group);\r\n break;\r\n\r\n default:\r\n var blocks = [], floats = [], inline = [], positioned = [];\r\n for (var i = element.firstChild; i; i = i.nextSibling) {\r\n switch (i.nodeType) {\r\n case 3: // Text\r\n if (/\\S/.test(i.data)) {\r\n renderText(element, i, group);\r\n }\r\n break;\r\n case 1: // Element\r\n var style = getComputedStyle(i);\r\n var display = getPropertyValue(style, \"display\");\r\n var floating = getPropertyValue(style, \"float\");\r\n var position = getPropertyValue(style, \"position\");\r\n if (position != \"static\") {\r\n positioned.push(i);\r\n }\r\n else if (display != \"inline\") {\r\n if (floating != \"none\") {\r\n floats.push(i);\r\n } else {\r\n blocks.push(i);\r\n }\r\n }\r\n else {\r\n inline.push(i);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n blocks.sort(zIndexSort).forEach(function(el){ renderElement(el, group); });\r\n floats.sort(zIndexSort).forEach(function(el){ renderElement(el, group); });\r\n inline.sort(zIndexSort).forEach(function(el){ renderElement(el, group); });\r\n positioned.sort(zIndexSort).forEach(function(el){ renderElement(el, group); });\r\n }\r\n }\r\n\r\n function renderText(element, node, group) {\r\n if (emptyClipbox()) {\r\n return;\r\n }\r\n var style = getComputedStyle(element);\r\n\r\n if (parseFloat(getPropertyValue(style, \"text-indent\")) < -500) {\r\n // assume it should not be displayed. the slider's\r\n // draggable handle displays a Drag text for some reason,\r\n // having text-indent: -3333px.\r\n return;\r\n }\r\n\r\n var text = node.data;\r\n var start = 0;\r\n var end = text.search(/\\S\\s*$/) + 1;\r\n\r\n if (!end) {\r\n return; // whitespace-only node\r\n }\r\n\r\n var fontSize = getPropertyValue(style, \"font-size\");\r\n var lineHeight = getPropertyValue(style, \"line-height\");\r\n\r\n // simply getPropertyValue(\"font\") doesn't work in Firefox :-\\\r\n var font = [\r\n getPropertyValue(style, \"font-style\"),\r\n getPropertyValue(style, \"font-variant\"),\r\n getPropertyValue(style, \"font-weight\"),\r\n fontSize, // no need for line height here; it breaks layout in FF\r\n getPropertyValue(style, \"font-family\")\r\n ].join(\" \");\r\n\r\n fontSize = parseFloat(fontSize);\r\n lineHeight = parseFloat(lineHeight);\r\n\r\n if (fontSize === 0) {\r\n return;\r\n }\r\n\r\n var color = getPropertyValue(style, \"color\");\r\n var range = element.ownerDocument.createRange();\r\n var align = getPropertyValue(style, \"text-align\");\r\n var isJustified = align == \"justify\";\r\n var whiteSpace = getPropertyValue(style, \"white-space\");\r\n\r\n // A line of 500px, with a font of 12px, contains an average of 80 characters, but since we\r\n // err, we'd like to guess a bigger number rather than a smaller one. Multiplying by 5\r\n // seems to be a good option.\r\n var estimateLineLength = element.getBoundingClientRect().width / fontSize * 5;\r\n if (estimateLineLength === 0) {\r\n estimateLineLength = 500;\r\n }\r\n\r\n while (!doChunk()) {}\r\n\r\n return; // only function declarations after this line\r\n\r\n // Render a chunk of text, typically one line (but for justified text we render each word as\r\n // a separate Text object, because spacing is variable). Returns true when it finished the\r\n // current node. After each chunk it updates `start` to just after the last rendered\r\n // character.\r\n function doChunk() {\r\n var origStart = start;\r\n var box, pos = text.substr(start).search(/\\S/);\r\n start += pos;\r\n if (pos < 0 || start >= end) {\r\n return true;\r\n }\r\n\r\n // Select a single character to determine the height of a line of text. The box.bottom\r\n // will be essential for us to figure out where the next line begins.\r\n range.setStart(node, start);\r\n range.setEnd(node, start + 1);\r\n box = range.getBoundingClientRect();\r\n\r\n // for justified text we must split at each space, because space has variable width.\r\n var found = false;\r\n if (isJustified) {\r\n pos = text.substr(start).search(/\\s/);\r\n if (pos >= 0) {\r\n // we can only split there if it's on the same line, otherwise we'll fall back\r\n // to the default mechanism (see findEOL below).\r\n range.setEnd(node, start + pos);\r\n var r = range.getBoundingClientRect();\r\n if (r.bottom == box.bottom) {\r\n box = r;\r\n found = true;\r\n start += pos;\r\n }\r\n }\r\n }\r\n\r\n if (!found) {\r\n // This code does three things: (1) it selects one line of text in `range`, (2) it\r\n // leaves the bounding rect of that line in `box` and (3) it returns the position\r\n // just after the EOL. We know where the line starts (`start`) but we don't know\r\n // where it ends. To figure this out, we select a piece of text and look at the\r\n // bottom of the bounding box. If it changes, we have more than one line selected\r\n // and should retry with a smaller selection.\r\n //\r\n // To speed things up, we first try to select all text in the node (`start` ->\r\n // `end`). If there's more than one line there, then select only half of it. And\r\n // so on. When we find a value for `end` that fits in one line, we try increasing\r\n // it (also in halves) until we get to the next line. The algorithm stops when the\r\n // right side of the bounding box does not change.\r\n //\r\n // One more thing to note is that everything happens in a single Text DOM node.\r\n // There's no other tags inside it, therefore the left/top coordinates of the\r\n // bounding box will not change.\r\n pos = (function findEOL(min, eol, max){\r\n range.setEnd(node, eol);\r\n var r = actuallyGetRangeBoundingRect(range);\r\n if (r.bottom != box.bottom && min < eol) {\r\n return findEOL(min, (min + eol) >> 1, eol);\r\n } else if (r.right != box.right) {\r\n box = r;\r\n if (eol < max) {\r\n return findEOL(eol, (eol + max) >> 1, max);\r\n } else {\r\n return eol;\r\n }\r\n } else {\r\n return eol;\r\n }\r\n })(start, Math.min(end, start + estimateLineLength), end);\r\n\r\n if (pos == start) {\r\n // if EOL is at the start, then no more text fits on this line. Skip the\r\n // remainder of this node entirely to avoid a stack overflow.\r\n return true;\r\n }\r\n start = pos;\r\n\r\n pos = range.toString().search(/\\s+$/);\r\n if (pos === 0) {\r\n return; // whitespace only; we should not get here.\r\n }\r\n if (pos > 0) {\r\n // eliminate trailing whitespace\r\n range.setEnd(node, range.startOffset + pos);\r\n box = range.getBoundingClientRect();\r\n }\r\n }\r\n\r\n // another workaround for IE: if we rely on getBoundingClientRect() we'll overlap with the bullet for LI\r\n // elements. Calling getClientRects() and using the *first* rect appears to give us the correct location.\r\n // Note: not to be used in Chrome as it randomly returns a zero-width rectangle from the previous line.\r\n if (browser.msie) {\r\n box = range.getClientRects()[0];\r\n }\r\n\r\n var str = range.toString();\r\n if (!/^(?:pre|pre-wrap)$/i.test(whiteSpace)) {\r\n // node with non-significant space -- collapse whitespace.\r\n str = str.replace(/\\s+/g, \" \");\r\n }\r\n else if (/\\t/.test(str)) {\r\n // with significant whitespace we need to do something about literal TAB characters.\r\n // There's no TAB glyph in a font so they would be rendered in PDF as an empty box,\r\n // and the whole text will stretch to fill the original width. The core PDF lib\r\n // does not have sufficient context to deal with it.\r\n\r\n // calculate the starting column here, since we initially discarded any whitespace.\r\n var cc = 0;\r\n for (pos = origStart; pos < range.startOffset; ++pos) {\r\n var code = text.charCodeAt(pos);\r\n if (code == 9) {\r\n // when we meet a TAB we must round up to the next tab stop.\r\n // in all browsers TABs seem to be 8 characters.\r\n cc += 8 - cc % 8;\r\n } else if (code == 10 || code == 13) {\r\n // just in case we meet a newline we must restart.\r\n cc = 0;\r\n } else {\r\n // ordinary character --> advance one column\r\n cc++;\r\n }\r\n }\r\n\r\n // based on starting column, replace any TAB characters in the string we actually\r\n // have to display with spaces so that they align to columns multiple of 8.\r\n while ((pos = str.search(\"\\t\")) >= 0) {\r\n var indent = \" \".substr(0, 8 - (cc + pos) % 8);\r\n str = str.substr(0, pos) + indent + str.substr(pos + 1);\r\n }\r\n }\r\n\r\n drawText(str, box);\r\n }\r\n\r\n function drawText(str, box) {\r\n // In IE the box height will be approximately lineHeight, while in\r\n // other browsers it'll (correctly) be the height of the bounding\r\n // box for the current text/font. Which is to say, IE sucks again.\r\n // The only good solution I can think of is to measure the text\r\n // ourselves and center the bounding box.\r\n if (browser.msie && !isNaN(lineHeight)) {\r\n var size = drawing.util.measureText(str, { font: font });\r\n var top = (box.top + box.bottom - size.height) / 2;\r\n box = {\r\n top : top,\r\n right : box.right,\r\n bottom : top + size.height,\r\n left : box.left,\r\n height : size.height,\r\n width : box.right - box.left\r\n };\r\n }\r\n\r\n // var path = new drawing.Path({ stroke: { color: \"red\" }});\r\n // path.moveTo(box.left, box.top)\r\n // .lineTo(box.right, box.top)\r\n // .lineTo(box.right, box.bottom)\r\n // .lineTo(box.left, box.bottom)\r\n // .close();\r\n // group.append(path);\r\n\r\n var text = new TextRect(\r\n str, new geo.Rect([ box.left, box.top ],\r\n [ box.width, box.height ]),\r\n {\r\n font: font,\r\n fill: { color: color }\r\n }\r\n );\r\n group.append(text);\r\n decorate(box);\r\n }\r\n\r\n function decorate(box) {\r\n line(nodeInfo[\"underline\"], box.bottom);\r\n line(nodeInfo[\"line-through\"], box.bottom - box.height / 2.7);\r\n line(nodeInfo[\"overline\"], box.top);\r\n function line(color, ypos) {\r\n if (color) {\r\n var width = fontSize / 12;\r\n var path = new drawing.Path({ stroke: {\r\n width: width,\r\n color: color\r\n }});\r\n\r\n ypos -= width;\r\n path.moveTo(box.left, ypos)\r\n .lineTo(box.right, ypos);\r\n group.append(path);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function groupInStackingContext(element, group, zIndex) {\r\n var main;\r\n if (zIndex != \"auto\") {\r\n // use the current stacking context\r\n main = nodeInfo._stackingContext.group;\r\n zIndex = parseFloat(zIndex);\r\n } else {\r\n // normal flow — use given container. we still have to\r\n // figure out where should we insert this element with the\r\n // assumption that its z-index is zero, as the group might\r\n // already contain elements with higher z-index.\r\n main = group;\r\n zIndex = 0;\r\n }\r\n var a = main.children;\r\n for (var i = 0; i < a.length; ++i) {\r\n if (a[i]._dom_zIndex != null && a[i]._dom_zIndex > zIndex) {\r\n break;\r\n }\r\n }\r\n\r\n var tmp = new drawing.Group();\r\n main.insertAt(tmp, i);\r\n tmp._dom_zIndex = zIndex;\r\n\r\n if (main !== group) {\r\n // console.log(\"Placing\", element, \"in\", nodeInfo._stackingContext.element, \"at position\", i, \" / \", a.length);\r\n // console.log(a.slice(i+1));\r\n\r\n // if (nodeInfo._matrix) {\r\n // tmp.transform(nodeInfo._matrix);\r\n // }\r\n if (nodeInfo._clipbox) {\r\n var m = nodeInfo._matrix.invert();\r\n var r = nodeInfo._clipbox.transformCopy(m);\r\n setClipping(tmp, drawing.Path.fromRect(r));\r\n // console.log(r);\r\n // tmp.append(drawing.Path.fromRect(r));\r\n // tmp.append(new drawing.Text(element.className || element.id, r.topLeft()));\r\n }\r\n }\r\n\r\n return tmp;\r\n }\r\n\r\n function renderElement(element, container) {\r\n var style = getComputedStyle(element);\r\n\r\n var counterReset = getPropertyValue(style, \"counter-reset\");\r\n if (counterReset) {\r\n doCounters(splitProperty(counterReset, /^\\s+/), resetCounter, 0);\r\n }\r\n\r\n var counterIncrement = getPropertyValue(style, \"counter-increment\");\r\n if (counterIncrement) {\r\n doCounters(splitProperty(counterIncrement, /^\\s+/), incCounter, 1);\r\n }\r\n\r\n if (/^(style|script|link|meta|iframe|svg|col|colgroup)$/i.test(element.tagName)) {\r\n return;\r\n }\r\n\r\n if (nodeInfo._clipbox == null) {\r\n return;\r\n }\r\n\r\n var opacity = parseFloat(getPropertyValue(style, \"opacity\"));\r\n var visibility = getPropertyValue(style, \"visibility\");\r\n var display = getPropertyValue(style, \"display\");\r\n\r\n if (opacity === 0 || visibility == \"hidden\" || display == \"none\") {\r\n return;\r\n }\r\n\r\n var tr = getTransform(style);\r\n var group;\r\n\r\n var zIndex = getPropertyValue(style, \"z-index\");\r\n if ((tr || opacity < 1) && zIndex == \"auto\") {\r\n zIndex = 0;\r\n }\r\n group = groupInStackingContext(element, container, zIndex);\r\n\r\n // XXX: remove at some point\r\n // group._pdfElement = element;\r\n // group.options._pdfDebug = \"\";\r\n // if (element.id) {\r\n // group.options._pdfDebug = \"#\" + element.id;\r\n // }\r\n // if (element.className) {\r\n // group.options._pdfDebug += \".\" + element.className.split(\" \").join(\".\");\r\n // }\r\n\r\n if (opacity < 1) {\r\n group.opacity(opacity * group.opacity());\r\n }\r\n\r\n pushNodeInfo(element, style, group);\r\n\r\n if (!tr) {\r\n _renderWithPseudoElements(element, group);\r\n }\r\n else {\r\n saveStyle(element, function(){\r\n // must clear transform, so getBoundingClientRect returns correct values.\r\n pleaseSetPropertyValue(element.style, \"transform\", \"none\", \"important\");\r\n\r\n // must also clear transitions, so correct values are returned *immediately*\r\n pleaseSetPropertyValue(element.style, \"transition\", \"none\", \"important\");\r\n\r\n // the presence of any transform makes it behave like it had position: relative,\r\n // because why not.\r\n // http://meyerweb.com/eric/thoughts/2011/09/12/un-fixing-fixed-elements-with-css-transforms/\r\n if (getPropertyValue(style, \"position\") == \"static\") {\r\n // but only if it's not already positioned. :-/\r\n pleaseSetPropertyValue(element.style, \"position\", \"relative\", \"important\");\r\n }\r\n\r\n // must translate to origin before applying the CSS\r\n // transformation, then translate back.\r\n var bbox = element.getBoundingClientRect();\r\n var x = bbox.left + tr.origin[0];\r\n var y = bbox.top + tr.origin[1];\r\n var m = [ 1, 0, 0, 1, -x, -y ];\r\n m = mmul(m, tr.matrix);\r\n m = mmul(m, [ 1, 0, 0, 1, x, y ]);\r\n m = setTransform(group, m);\r\n\r\n nodeInfo._matrix = nodeInfo._matrix.multiplyCopy(m);\r\n\r\n _renderWithPseudoElements(element, group);\r\n });\r\n }\r\n\r\n popNodeInfo();\r\n\r\n //drawDebugBox(element.getBoundingClientRect(), container);\r\n }\r\n\r\n // function drawDebugBox(box, group) {\r\n // var path = drawing.Path.fromRect(new geo.Rect([ box.left, box.top ], [ box.width, box.height ]));\r\n // group.append(path);\r\n // }\r\n\r\n // function dumpTextNode(node) {\r\n // var txt = node.data.replace(/^\\s+/, \"\");\r\n // if (txt.length < 100) {\r\n // console.log(node.data.length + \": |\" + txt);\r\n // } else {\r\n // console.log(node.data.length + \": |\" + txt.substr(0, 50) + \"|...|\" + txt.substr(-50));\r\n // }\r\n // }\r\n\r\n function mmul(a, b) {\r\n var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\r\n var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\r\n return [\r\n a1*a2 + b1*c2, a1*b2 + b1*d2,\r\n c1*a2 + d1*c2, c1*b2 + d1*d2,\r\n e1*a2 + f1*c2 + e2, e1*b2 + f1*d2 + f2\r\n ];\r\n }\r\n\r\n})(window.kendo.jQuery, parseFloat, Math);\r\n\r\n(function ($, Math) {\r\n // Imports ================================================================\r\n var doc = document,\r\n noop = $.noop,\r\n\r\n kendo = window.kendo,\r\n Class = kendo.Class,\r\n util = kendo.util,\r\n\r\n animationFrame = kendo.animationFrame,\r\n deepExtend = kendo.deepExtend;\r\n\r\n // Base element animation ================================================\r\n var Animation = Class.extend({\r\n init: function(element, options) {\r\n var anim = this;\r\n\r\n anim.options = deepExtend({}, anim.options, options);\r\n anim.element = element;\r\n },\r\n\r\n options: {\r\n duration: 500,\r\n easing: \"swing\"\r\n },\r\n\r\n setup: noop,\r\n step: noop,\r\n\r\n play: function() {\r\n var anim = this,\r\n options = anim.options,\r\n easing = $.easing[options.easing],\r\n duration = options.duration,\r\n delay = options.delay || 0,\r\n start = util.now() + delay,\r\n finish = start + duration;\r\n\r\n if (duration === 0) {\r\n anim.step(1);\r\n anim.abort();\r\n } else {\r\n setTimeout(function() {\r\n var loop = function() {\r\n if (anim._stopped) {\r\n return;\r\n }\r\n\r\n var wallTime = util.now();\r\n\r\n var time = util.limitValue(wallTime - start, 0, duration);\r\n var pos = time / duration;\r\n var easingPos = easing(pos, time, 0, 1, duration);\r\n\r\n anim.step(easingPos);\r\n\r\n if (wallTime < finish) {\r\n animationFrame(loop);\r\n } else {\r\n anim.abort();\r\n }\r\n };\r\n\r\n loop();\r\n }, delay);\r\n }\r\n },\r\n\r\n abort: function() {\r\n this._stopped = true;\r\n },\r\n\r\n destroy: function() {\r\n this.abort();\r\n }\r\n });\r\n\r\n // Animation factory =====================================================\r\n var AnimationFactory = function() {\r\n this._items = [];\r\n };\r\n\r\n AnimationFactory.prototype = {\r\n register: function(name, type) {\r\n this._items.push({\r\n name: name,\r\n type: type\r\n });\r\n },\r\n\r\n create: function(element, options) {\r\n var items = this._items;\r\n var match;\r\n\r\n if (options && options.type) {\r\n var type = options.type.toLowerCase();\r\n for (var i = 0; i < items.length; i++) {\r\n if (items[i].name.toLowerCase() === type) {\r\n match = items[i];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (match) {\r\n return new match.type(element, options);\r\n }\r\n }\r\n };\r\n\r\n AnimationFactory.current = new AnimationFactory();\r\n\r\n Animation.create = function(type, element, options) {\r\n return AnimationFactory.current.create(type, element, options);\r\n };\r\n\r\n // Exports ================================================================\r\n deepExtend(kendo.drawing, {\r\n Animation: Animation,\r\n AnimationFactory: AnimationFactory\r\n });\r\n\r\n})(window.kendo.jQuery, Math);\r\n\r\n\r\n\r\n(function ($, undefined) {\r\n\r\n // Imports ================================================================\r\n var doc = document,\r\n kendo = window.kendo,\r\n\r\n util = kendo.util,\r\n append = util.append,\r\n defined = util.defined,\r\n last = util.last,\r\n limitValue = util.limitValue,\r\n valueOrDefault = util.valueOrDefault,\r\n\r\n dataviz = kendo.dataviz,\r\n geom = dataviz.geometry,\r\n draw = dataviz.drawing,\r\n measureText = draw.util.measureText,\r\n Matrix = geom.Matrix,\r\n Class = kendo.Class,\r\n template = kendo.template,\r\n map = $.map,\r\n noop = $.noop,\r\n indexOf = $.inArray,\r\n isPlainObject = $.isPlainObject,\r\n trim = $.trim,\r\n math = Math,\r\n deepExtend = kendo.deepExtend;\r\n\r\n var CSS_PREFIX = \"k-\";\r\n\r\n // Constants ==============================================================\r\n var ANIMATION_STEP = 10,\r\n AXIS_LABEL_CLICK = \"axisLabelClick\",\r\n BASELINE_MARKER_SIZE = 1,\r\n BLACK = \"#000\",\r\n BOTTOM = \"bottom\",\r\n CENTER = \"center\",\r\n COORD_PRECISION = 3,\r\n CLIP = \"clip\",\r\n CIRCLE = \"circle\",\r\n CROSS = \"cross\",\r\n DEFAULT_FONT = \"12px sans-serif\",\r\n DEFAULT_HEIGHT = 400,\r\n DEFAULT_ICON_SIZE = 7,\r\n DEFAULT_PRECISION = 6,\r\n DEFAULT_WIDTH = 600,\r\n DEG_TO_RAD = math.PI / 180,\r\n FADEIN = \"fadeIn\",\r\n FORMAT_REGEX = /\\{\\d+:?/,\r\n HEIGHT = \"height\",\r\n ID_PREFIX = \"k\",\r\n ID_POOL_SIZE = 1000,\r\n ID_START = 10000,\r\n COORDINATE_LIMIT = 100000,\r\n INITIAL_ANIMATION_DURATION = 600,\r\n INSIDE = \"inside\",\r\n LEFT = \"left\",\r\n LINEAR = \"linear\",\r\n MAX_VALUE = Number.MAX_VALUE,\r\n MIN_VALUE = -Number.MAX_VALUE,\r\n NONE = \"none\",\r\n NOTE_CLICK = \"noteClick\",\r\n NOTE_HOVER = \"noteHover\",\r\n OUTSIDE = \"outside\",\r\n RADIAL = \"radial\",\r\n RIGHT = \"right\",\r\n SWING = \"swing\",\r\n TOP = \"top\",\r\n TRIANGLE = \"triangle\",\r\n UNDEFINED = \"undefined\",\r\n UPPERCASE_REGEX = /([A-Z])/g,\r\n WIDTH = \"width\",\r\n WHITE = \"#fff\",\r\n X = \"x\",\r\n Y = \"y\",\r\n ZERO_THRESHOLD = 0.2;\r\n\r\n function getSpacing(value, defaultSpacing) {\r\n var spacing = { top: 0, right: 0, bottom: 0, left: 0 };\r\n\r\n defaultSpacing = defaultSpacing || 0;\r\n\r\n if (typeof(value) === \"number\") {\r\n spacing[TOP] = spacing[RIGHT] = spacing[BOTTOM] = spacing[LEFT] = value;\r\n } else {\r\n spacing[TOP] = value[TOP] || defaultSpacing;\r\n spacing[RIGHT] = value[RIGHT] || defaultSpacing;\r\n spacing[BOTTOM] = value[BOTTOM] || defaultSpacing;\r\n spacing[LEFT] = value[LEFT] || defaultSpacing;\r\n }\r\n\r\n return spacing;\r\n }\r\n\r\n // Geometric primitives ===================================================\r\n var Point2D = function(x, y) {\r\n var point = this;\r\n if (!(point instanceof Point2D)) {\r\n return new Point2D(x, y);\r\n }\r\n\r\n point.x = x || 0;\r\n point.y = y || 0;\r\n };\r\n\r\n Point2D.fn = Point2D.prototype = {\r\n clone: function() {\r\n var point = this;\r\n\r\n return new Point2D(point.x, point.y);\r\n },\r\n\r\n equals: function(point) {\r\n return point && point.x === this.x && point.y === this.y;\r\n },\r\n\r\n rotate: function(center, degrees) {\r\n var point = this,\r\n theta = degrees * DEG_TO_RAD,\r\n cosT = math.cos(theta),\r\n sinT = math.sin(theta),\r\n cx = center.x,\r\n cy = center.y,\r\n x = point.x,\r\n y = point.y;\r\n\r\n point.x = round(\r\n cx + (x - cx) * cosT + (y - cy) * sinT,\r\n COORD_PRECISION\r\n );\r\n\r\n point.y = round(\r\n cy + (y - cy) * cosT - (x - cx) * sinT,\r\n COORD_PRECISION\r\n );\r\n\r\n return point;\r\n },\r\n\r\n multiply: function(a) {\r\n var point = this;\r\n\r\n point.x *= a;\r\n point.y *= a;\r\n\r\n return point;\r\n },\r\n\r\n distanceTo: function(point) {\r\n var dx = this.x - point.x,\r\n dy = this.y - point.y;\r\n\r\n return math.sqrt(dx * dx + dy * dy);\r\n }\r\n };\r\n\r\n // Clock-wise, 0 points left\r\n Point2D.onCircle = function(c, a, r) {\r\n a *= DEG_TO_RAD;\r\n\r\n return new Point2D(\r\n c.x - r * math.cos(a),\r\n c.y - r * math.sin(a)\r\n );\r\n };\r\n\r\n var Box2D = function(x1, y1, x2, y2) {\r\n var box = this;\r\n\r\n if (!(box instanceof Box2D)) {\r\n return new Box2D(x1, y1, x2, y2);\r\n }\r\n\r\n box.x1 = x1 || 0;\r\n box.x2 = x2 || 0;\r\n box.y1 = y1 || 0;\r\n box.y2 = y2 || 0;\r\n };\r\n\r\n Box2D.fn = Box2D.prototype = {\r\n width: function() {\r\n return this.x2 - this.x1;\r\n },\r\n\r\n height: function() {\r\n return this.y2 - this.y1;\r\n },\r\n\r\n translate: function(dx, dy) {\r\n var box = this;\r\n\r\n box.x1 += dx;\r\n box.x2 += dx;\r\n box.y1 += dy;\r\n box.y2 += dy;\r\n\r\n return box;\r\n },\r\n\r\n // TODO: Accept point!\r\n move: function(x, y) {\r\n var box = this,\r\n height = box.height(),\r\n width = box.width();\r\n\r\n if (defined(x)) {\r\n box.x1 = x;\r\n box.x2 = box.x1 + width;\r\n }\r\n\r\n if (defined(y)) {\r\n box.y1 = y;\r\n box.y2 = box.y1 + height;\r\n }\r\n\r\n return box;\r\n },\r\n\r\n wrap: function(targetBox) {\r\n var box = this;\r\n\r\n box.x1 = math.min(box.x1, targetBox.x1);\r\n box.y1 = math.min(box.y1, targetBox.y1);\r\n box.x2 = math.max(box.x2, targetBox.x2);\r\n box.y2 = math.max(box.y2, targetBox.y2);\r\n\r\n return box;\r\n },\r\n\r\n wrapPoint: function(point) {\r\n this.wrap(new Box2D(point.x, point.y, point.x, point.y));\r\n\r\n return this;\r\n },\r\n\r\n snapTo: function(targetBox, axis) {\r\n var box = this;\r\n\r\n if (axis == X || !axis) {\r\n box.x1 = targetBox.x1;\r\n box.x2 = targetBox.x2;\r\n }\r\n\r\n if (axis == Y || !axis) {\r\n box.y1 = targetBox.y1;\r\n box.y2 = targetBox.y2;\r\n }\r\n\r\n return box;\r\n },\r\n\r\n alignTo: function(targetBox, anchor) {\r\n var box = this,\r\n height = box.height(),\r\n width = box.width(),\r\n axis = anchor == TOP || anchor == BOTTOM ? Y : X,\r\n offset = axis == Y ? height : width;\r\n\r\n if (anchor === CENTER) {\r\n var targetCenter = targetBox.center();\r\n var center = box.center();\r\n\r\n box.x1 += targetCenter.x - center.x;\r\n box.y1 += targetCenter.y - center.y;\r\n } else if (anchor === TOP || anchor === LEFT) {\r\n box[axis + 1] = targetBox[axis + 1] - offset;\r\n } else {\r\n box[axis + 1] = targetBox[axis + 2];\r\n }\r\n\r\n box.x2 = box.x1 + width;\r\n box.y2 = box.y1 + height;\r\n\r\n return box;\r\n },\r\n\r\n shrink: function(dw, dh) {\r\n var box = this;\r\n\r\n box.x2 -= dw;\r\n box.y2 -= dh;\r\n\r\n return box;\r\n },\r\n\r\n expand: function(dw, dh) {\r\n this.shrink(-dw, -dh);\r\n return this;\r\n },\r\n\r\n pad: function(padding) {\r\n var box = this,\r\n spacing = getSpacing(padding);\r\n\r\n box.x1 -= spacing.left;\r\n box.x2 += spacing.right;\r\n box.y1 -= spacing.top;\r\n box.y2 += spacing.bottom;\r\n\r\n return box;\r\n },\r\n\r\n unpad: function(padding) {\r\n var box = this,\r\n spacing = getSpacing(padding);\r\n\r\n spacing.left = -spacing.left;\r\n spacing.top = -spacing.top;\r\n spacing.right = -spacing.right;\r\n spacing.bottom = -spacing.bottom;\r\n\r\n return box.pad(spacing);\r\n },\r\n\r\n clone: function() {\r\n var box = this;\r\n\r\n return new Box2D(box.x1, box.y1, box.x2, box.y2);\r\n },\r\n\r\n center: function() {\r\n var box = this;\r\n\r\n return new Point2D(\r\n box.x1 + box.width() / 2,\r\n box.y1 + box.height() / 2\r\n );\r\n },\r\n\r\n containsPoint: function(point) {\r\n var box = this;\r\n\r\n return point.x >= box.x1 && point.x <= box.x2 &&\r\n point.y >= box.y1 && point.y <= box.y2;\r\n },\r\n\r\n points: function() {\r\n var box = this;\r\n\r\n return [\r\n new Point2D(box.x1, box.y1),\r\n new Point2D(box.x2, box.y1),\r\n new Point2D(box.x2, box.y2),\r\n new Point2D(box.x1, box.y2)\r\n ];\r\n },\r\n\r\n getHash: function() {\r\n var box = this;\r\n\r\n return [box.x1, box.y1, box.x2, box.y2].join(\",\");\r\n },\r\n\r\n overlaps: function(box) {\r\n return !(box.y2 < this.y1 || this.y2 < box.y1 || box.x2 < this.x1 || this.x2 < box.x1);\r\n },\r\n\r\n rotate: function(rotation) {\r\n var box = this;\r\n var width = box.width();\r\n var height = box.height();\r\n var center = box.center();\r\n var cx = center.x;\r\n var cy = center.y;\r\n var r1 = rotatePoint(0, 0, cx, cy, rotation);\r\n var r2 = rotatePoint(width, 0, cx, cy, rotation);\r\n var r3 = rotatePoint(width, height, cx, cy, rotation);\r\n var r4 = rotatePoint(0, height, cx, cy, rotation);\r\n width = math.max(r1.x, r2.x, r3.x, r4.x) - math.min(r1.x, r2.x, r3.x, r4.x);\r\n height = math.max(r1.y, r2.y, r3.y, r4.y) - math.min(r1.y, r2.y, r3.y, r4.y);\r\n box.x2 = box.x1 + width;\r\n box.y2 = box.y1 + height;\r\n\r\n return box;\r\n },\r\n\r\n toRect: function() {\r\n return new geom.Rect([this.x1, this.y1], [this.width(), this.height()]);\r\n },\r\n\r\n hasSize: function() {\r\n return this.width() !== 0 && this.height() !== 0;\r\n },\r\n\r\n align: function(targetBox, axis, alignment) {\r\n var box = this,\r\n c1 = axis + 1,\r\n c2 = axis + 2,\r\n sizeFunc = axis === X ? WIDTH : HEIGHT,\r\n size = box[sizeFunc]();\r\n\r\n if (inArray(alignment, [LEFT, TOP])) {\r\n box[c1] = targetBox[c1];\r\n box[c2] = box[c1] + size;\r\n } else if (inArray(alignment, [RIGHT, BOTTOM])) {\r\n box[c2] = targetBox[c2];\r\n box[c1] = box[c2] - size;\r\n } else if (alignment == CENTER) {\r\n box[c1] = targetBox[c1] + (targetBox[sizeFunc]() - size) / 2;\r\n box[c2] = box[c1] + size;\r\n }\r\n }\r\n };\r\n\r\n var Ring = Class.extend({\r\n init: function(center, innerRadius, radius, startAngle, angle) {\r\n var ring = this;\r\n\r\n ring.c = center;\r\n ring.ir = innerRadius;\r\n ring.r = radius;\r\n ring.startAngle = startAngle;\r\n ring.angle = angle;\r\n },\r\n\r\n clone: function() {\r\n var r = this;\r\n return new Ring(r.c, r.ir, r.r, r.startAngle, r.angle);\r\n },\r\n\r\n // TODO: Rename to midAngle\r\n middle: function() {\r\n return this.startAngle + this.angle / 2;\r\n },\r\n\r\n // TODO: Sounds like a getter\r\n radius: function(newRadius, innerRadius) {\r\n var that = this;\r\n\r\n if (innerRadius) {\r\n that.ir = newRadius;\r\n } else {\r\n that.r = newRadius;\r\n }\r\n\r\n return that;\r\n },\r\n\r\n // TODO: Remove and replace with Point2D.onCircle\r\n point: function(angle, innerRadius) {\r\n var ring = this,\r\n radianAngle = angle * DEG_TO_RAD,\r\n ax = math.cos(radianAngle),\r\n ay = math.sin(radianAngle),\r\n radius = innerRadius ? ring.ir : ring.r,\r\n x = round(ring.c.x - (ax * radius), COORD_PRECISION),\r\n y = round(ring.c.y - (ay * radius), COORD_PRECISION);\r\n\r\n return new Point2D(x, y);\r\n },\r\n\r\n adjacentBox: function(distance, width, height) {\r\n var sector = this.clone().expand(distance),\r\n midAndle = sector.middle(),\r\n midPoint = sector.point(midAndle),\r\n hw = width / 2,\r\n hh = height / 2,\r\n x = midPoint.x - hw,\r\n y = midPoint.y - hh,\r\n sa = math.sin(midAndle * DEG_TO_RAD),\r\n ca = math.cos(midAndle * DEG_TO_RAD);\r\n\r\n if (math.abs(sa) < 0.9) {\r\n x += hw * -ca / math.abs(ca);\r\n }\r\n\r\n if (math.abs(ca) < 0.9) {\r\n y += hh * -sa / math.abs(sa);\r\n }\r\n\r\n return new Box2D(x, y, x + width, y + height);\r\n },\r\n\r\n containsPoint: function(p) {\r\n var ring = this,\r\n c = ring.c,\r\n ir = ring.ir,\r\n r = ring.r,\r\n startAngle = ring.startAngle,\r\n endAngle = ring.startAngle + ring.angle,\r\n dx = p.x - c.x,\r\n dy = p.y - c.y,\r\n vector = new Point2D(dx, dy),\r\n startPoint = ring.point(startAngle),\r\n startVector = new Point2D(startPoint.x - c.x, startPoint.y - c.y),\r\n endPoint = ring.point(endAngle),\r\n endVector = new Point2D(endPoint.x - c.x, endPoint.y - c.y),\r\n dist = round(dx * dx + dy *dy, COORD_PRECISION);\r\n\r\n return (startVector.equals(vector) || clockwise(startVector, vector)) &&\r\n !clockwise(endVector, vector) &&\r\n dist >= ir * ir && dist <= r * r;\r\n },\r\n\r\n getBBox: function() {\r\n var ring = this,\r\n box = new Box2D(MAX_VALUE, MAX_VALUE, MIN_VALUE, MIN_VALUE),\r\n sa = round(ring.startAngle % 360),\r\n ea = round((sa + ring.angle) % 360),\r\n innerRadius = ring.ir,\r\n allAngles = [0, 90, 180, 270, sa, ea].sort(numericComparer),\r\n saIndex = indexOf(sa, allAngles),\r\n eaIndex = indexOf(ea, allAngles),\r\n angles,\r\n i,\r\n point;\r\n\r\n if (sa == ea) {\r\n angles = allAngles;\r\n } else {\r\n if (saIndex < eaIndex) {\r\n angles = allAngles.slice(saIndex, eaIndex + 1);\r\n } else {\r\n angles = [].concat(\r\n allAngles.slice(0, eaIndex + 1),\r\n allAngles.slice(saIndex, allAngles.length)\r\n );\r\n }\r\n }\r\n\r\n for (i = 0; i < angles.length; i++) {\r\n point = ring.point(angles[i]);\r\n box.wrapPoint(point);\r\n box.wrapPoint(point, innerRadius);\r\n }\r\n\r\n if (!innerRadius) {\r\n box.wrapPoint(ring.c);\r\n }\r\n\r\n return box;\r\n },\r\n\r\n expand: function(value) {\r\n this.r += value;\r\n return this;\r\n }\r\n });\r\n\r\n // TODO: Remove, looks like an alias\r\n var Sector = Ring.extend({\r\n init: function(center, radius, startAngle, angle) {\r\n Ring.fn.init.call(this, center, 0, radius, startAngle, angle);\r\n },\r\n\r\n expand: function(value) {\r\n return Ring.fn.expand.call(this, value);\r\n },\r\n\r\n clone: function() {\r\n var sector = this;\r\n return new Sector(sector.c, sector.r, sector.startAngle, sector.angle);\r\n },\r\n\r\n radius: function(newRadius) {\r\n return Ring.fn.radius.call(this, newRadius);\r\n },\r\n\r\n point: function(angle) {\r\n return Ring.fn.point.call(this, angle);\r\n }\r\n });\r\n\r\n var ShapeBuilder = function() {};\r\n ShapeBuilder.fn = ShapeBuilder.prototype = {\r\n createRing: function (sector, options) {\r\n var startAngle = sector.startAngle + 180;\r\n var endAngle = sector.angle + startAngle;\r\n var center = new geom.Point(sector.c.x, sector.c.y);\r\n var radius = math.max(sector.r, 0);\r\n var innerRadius = math.max(sector.ir, 0);\r\n var arc = new geom.Arc(center, {\r\n startAngle: startAngle,\r\n endAngle: endAngle,\r\n radiusX: radius,\r\n radiusY: radius\r\n });\r\n var path = draw.Path.fromArc(arc, options).close();\r\n\r\n if (innerRadius) {\r\n arc.radiusX = arc.radiusY = innerRadius;\r\n var innerEnd = arc.pointAt(endAngle);\r\n path.lineTo(innerEnd.x, innerEnd.y);\r\n path.arc(endAngle, startAngle, innerRadius, innerRadius, true);\r\n } else {\r\n path.lineTo(center.x, center.y);\r\n }\r\n\r\n return path;\r\n }\r\n };\r\n\r\n ShapeBuilder.current = new ShapeBuilder();\r\n\r\n // View-Model primitives ==================================================\r\n var ChartElement = Class.extend({\r\n init: function(options) {\r\n var element = this;\r\n element.children = [];\r\n\r\n element.options = deepExtend({}, element.options, options);\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var element = this,\r\n children = element.children,\r\n box,\r\n i,\r\n currentChild;\r\n\r\n for (i = 0; i < children.length; i++) {\r\n currentChild = children[i];\r\n\r\n currentChild.reflow(targetBox);\r\n box = box ? box.wrap(currentChild.box) : currentChild.box.clone();\r\n }\r\n\r\n element.box = box || targetBox;\r\n },\r\n\r\n destroy: function() {\r\n var element = this,\r\n children = element.children,\r\n root = element.getRoot(),\r\n i;\r\n\r\n if (this.animation) {\r\n this.animation.destroy();\r\n }\r\n\r\n for (i = 0; i < children.length; i++) {\r\n children[i].destroy();\r\n }\r\n },\r\n\r\n getRoot: function() {\r\n var parent = this.parent;\r\n\r\n return parent ? parent.getRoot() : null;\r\n },\r\n\r\n translateChildren: function(dx, dy) {\r\n var element = this,\r\n children = element.children,\r\n childrenCount = children.length,\r\n i;\r\n\r\n for (i = 0; i < childrenCount; i++) {\r\n children[i].box.translate(dx, dy);\r\n }\r\n },\r\n\r\n append: function() {\r\n append(this.children, arguments);\r\n\r\n for (var i = 0; i < arguments.length; i++) {\r\n arguments[i].parent = this;\r\n }\r\n },\r\n\r\n renderVisual: function() {\r\n if (this.options.visible === false) {\r\n return;\r\n }\r\n\r\n this.createVisual();\r\n\r\n this.addVisual();\r\n\r\n this.renderChildren();\r\n\r\n this.createAnimation();\r\n this.renderComplete();\r\n },\r\n\r\n addVisual: function() {\r\n if (this.visual) {\r\n this.visual.chartElement = this;\r\n\r\n if (this.parent) {\r\n this.parent.appendVisual(this.visual);\r\n }\r\n }\r\n },\r\n\r\n renderChildren: function() {\r\n var children = this.children;\r\n for (var i = 0; i < children.length; i++) {\r\n children[i].renderVisual();\r\n }\r\n },\r\n\r\n createVisual: function() {\r\n this.visual = new dataviz.drawing.Group({\r\n zIndex: this.options.zIndex,\r\n visible: valueOrDefault(this.options.visible, true)\r\n });\r\n },\r\n\r\n createAnimation: function() {\r\n if (this.visual) {\r\n this.animation = draw.Animation.create(\r\n this.visual, this.options.animation\r\n );\r\n }\r\n },\r\n\r\n appendVisual: function(childVisual) {\r\n if (!childVisual.chartElement) {\r\n childVisual.chartElement = this;\r\n }\r\n\r\n if (childVisual.options.noclip) {\r\n this.clipRoot().visual.append(childVisual);\r\n } else if (defined(childVisual.options.zIndex)) {\r\n this.stackRoot().stackVisual(childVisual);\r\n } else if (this.visual) {\r\n this.visual.append(childVisual);\r\n } else {\r\n // Allow chart elements without visuals to\r\n // pass through child visuals\r\n this.parent.appendVisual(childVisual);\r\n }\r\n },\r\n\r\n clipRoot: function() {\r\n if (this.parent) {\r\n return this.parent.clipRoot();\r\n }\r\n\r\n return this;\r\n },\r\n\r\n stackRoot: function() {\r\n if (this.parent) {\r\n return this.parent.stackRoot();\r\n }\r\n\r\n return this;\r\n },\r\n\r\n stackVisual: function(childVisual) {\r\n var zIndex = childVisual.options.zIndex || 0;\r\n var visuals = this.visual.children;\r\n for (var pos = 0; pos < visuals.length; pos++) {\r\n var sibling = visuals[pos];\r\n var here = valueOrDefault(sibling.options.zIndex, 0);\r\n if (here > zIndex) {\r\n break;\r\n }\r\n }\r\n\r\n this.visual.insertAt(childVisual, pos);\r\n },\r\n\r\n traverse: function(callback) {\r\n var children = this.children;\r\n\r\n for (var i = 0; i < children.length; i++) {\r\n var child = children[i];\r\n\r\n callback(child);\r\n if (child.traverse) {\r\n child.traverse(callback);\r\n }\r\n }\r\n },\r\n\r\n closest: function(match) {\r\n var element = this;\r\n var matched = false;\r\n\r\n while (element && !matched) {\r\n matched = match(element);\r\n\r\n if (!matched) {\r\n element = element.parent;\r\n }\r\n }\r\n\r\n if (matched) {\r\n return element;\r\n }\r\n },\r\n\r\n renderComplete: $.noop,\r\n\r\n hasHighlight: function() {\r\n var options = (this.options || {}).highlight;\r\n return !(!this.createHighlight || (options && options.visible === false));\r\n },\r\n\r\n toggleHighlight: function(show) {\r\n var that = this;\r\n var highlight = that._highlight;\r\n var options = (that.options || {}).highlight;\r\n var customVisual = (options || {}).visual;\r\n\r\n if (!highlight) {\r\n var highlightOptions = {\r\n fill: {\r\n color: WHITE,\r\n opacity: 0.2\r\n },\r\n stroke : {\r\n color: WHITE,\r\n width: 1,\r\n opacity: 0.2\r\n }\r\n };\r\n if (customVisual) {\r\n highlight = that._highlight = customVisual(deepExtend(that.highlightVisualArgs(), {\r\n createVisual: function() {\r\n return that.createHighlight(highlightOptions);\r\n },\r\n series: that.series,\r\n dataItem: that.dataItem,\r\n category: that.category,\r\n value: that.value,\r\n percentage: that.percentage,\r\n runningTotal: that.runningTotal,\r\n total: that.total\r\n }));\r\n if (!highlight) {\r\n return;\r\n }\r\n } else {\r\n highlight = that._highlight = that.createHighlight(highlightOptions);\r\n }\r\n\r\n highlight.options.zIndex = that.options.zIndex;\r\n that.appendVisual(highlight);\r\n }\r\n\r\n highlight.visible(show);\r\n },\r\n\r\n createGradientOverlay: function(element, options, gradientOptions) {\r\n var overlay = new draw.Path(deepExtend({\r\n stroke: {\r\n color: NONE\r\n },\r\n fill: this.createGradient(gradientOptions),\r\n closed: element.options.closed\r\n }, options));\r\n overlay.segments.elements(element.segments.elements());\r\n\r\n return overlay;\r\n },\r\n\r\n createGradient: function(options) {\r\n if (this.parent) {\r\n return this.parent.createGradient(options);\r\n }\r\n }\r\n });\r\n\r\n var RootElement = ChartElement.extend({\r\n init: function(options) {\r\n var root = this;\r\n\r\n root.gradients = {};\r\n\r\n ChartElement.fn.init.call(root, options);\r\n },\r\n\r\n options: {\r\n width: DEFAULT_WIDTH,\r\n height: DEFAULT_HEIGHT,\r\n background: WHITE,\r\n border: {\r\n color: BLACK,\r\n width: 0\r\n },\r\n margin: getSpacing(5),\r\n zIndex: -2\r\n },\r\n\r\n reflow: function() {\r\n var root = this,\r\n options = root.options,\r\n children = root.children,\r\n currentBox = new Box2D(0, 0, options.width, options.height);\r\n\r\n root.box = currentBox.unpad(options.margin);\r\n\r\n for (var i = 0; i < children.length; i++) {\r\n children[i].reflow(currentBox);\r\n currentBox = boxDiff(currentBox, children[i].box) || Box2D();\r\n }\r\n },\r\n\r\n createVisual: function() {\r\n this.visual = new draw.Group();\r\n this.createBackground();\r\n },\r\n\r\n createBackground: function() {\r\n var options = this.options;\r\n var border = options.border || {};\r\n var box = this.box.clone().pad(options.margin).unpad(border.width);\r\n\r\n var background = draw.Path.fromRect(box.toRect(), {\r\n stroke: {\r\n color: border.width ? border.color : \"\",\r\n width: border.width,\r\n dashType: border.dashType\r\n },\r\n fill: {\r\n color: options.background,\r\n opacity: options.opacity\r\n },\r\n zIndex: -10\r\n });\r\n\r\n this.visual.append(background);\r\n },\r\n\r\n getRoot: function() {\r\n return this;\r\n },\r\n\r\n createGradient: function(options) {\r\n var gradients = this.gradients;\r\n var hashCode = util.objectKey(options);\r\n var gradient = dataviz.Gradients[options.gradient];\r\n var drawingGradient;\r\n if (gradients[hashCode]) {\r\n drawingGradient = gradients[hashCode];\r\n } else {\r\n var gradientOptions = deepExtend({}, gradient, options);\r\n if (gradient.type == \"linear\") {\r\n drawingGradient = new draw.LinearGradient(gradientOptions);\r\n } else {\r\n if (options.innerRadius) {\r\n gradientOptions.stops = innerRadialStops(gradientOptions);\r\n }\r\n drawingGradient = new draw.RadialGradient(gradientOptions);\r\n drawingGradient.supportVML = gradient.supportVML !== false;\r\n }\r\n gradients[hashCode] = drawingGradient;\r\n }\r\n return drawingGradient;\r\n }\r\n });\r\n\r\n var BoxElement = ChartElement.extend({\r\n options: {\r\n align: LEFT,\r\n vAlign: TOP,\r\n margin: {},\r\n padding: {},\r\n border: {\r\n color: BLACK,\r\n width: 0\r\n },\r\n background: \"\",\r\n shrinkToFit: false,\r\n width: 0,\r\n height: 0,\r\n visible: true\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var element = this,\r\n box,\r\n contentBox,\r\n options = element.options,\r\n width = options.width,\r\n height = options.height,\r\n hasSetSize = width && height,\r\n shrinkToFit = options.shrinkToFit,\r\n margin = getSpacing(options.margin),\r\n padding = getSpacing(options.padding),\r\n borderWidth = options.border.width,\r\n children = element.children,\r\n i, item;\r\n\r\n function reflowPaddingBox() {\r\n element.align(targetBox, X, options.align);\r\n element.align(targetBox, Y, options.vAlign);\r\n element.paddingBox = box.clone().unpad(margin).unpad(borderWidth);\r\n }\r\n\r\n contentBox = targetBox.clone();\r\n if (hasSetSize) {\r\n contentBox.x2 = contentBox.x1 + width;\r\n contentBox.y2 = contentBox.y1 + height;\r\n }\r\n\r\n if (shrinkToFit) {\r\n contentBox.unpad(margin).unpad(borderWidth).unpad(padding);\r\n }\r\n\r\n ChartElement.fn.reflow.call(element, contentBox);\r\n\r\n if (hasSetSize) {\r\n box = element.box = Box2D(0, 0, width, height);\r\n } else {\r\n box = element.box;\r\n }\r\n\r\n if (shrinkToFit && hasSetSize) {\r\n reflowPaddingBox();\r\n contentBox = element.contentBox = element.paddingBox.clone().unpad(padding);\r\n } else {\r\n contentBox = element.contentBox = box.clone();\r\n box.pad(padding).pad(borderWidth).pad(margin);\r\n reflowPaddingBox();\r\n }\r\n\r\n element.translateChildren(\r\n box.x1 - contentBox.x1 + margin.left + borderWidth + padding.left,\r\n box.y1 - contentBox.y1 + margin.top + borderWidth + padding.top);\r\n\r\n for (i = 0; i < children.length; i++) {\r\n item = children[i];\r\n item.reflow(item.box);\r\n }\r\n },\r\n\r\n align: function(targetBox, axis, alignment) {\r\n this.box.align(targetBox, axis, alignment);\r\n },\r\n\r\n hasBox: function() {\r\n var options = this.options;\r\n return options.border.width || options.background;\r\n },\r\n\r\n createVisual: function() {\r\n ChartElement.fn.createVisual.call(this);\r\n\r\n var options = this.options;\r\n if (options.visible && this.hasBox()) {\r\n this.visual.append(draw.Path.fromRect(\r\n this.paddingBox.toRect(),\r\n this.visualStyle()\r\n ));\r\n }\r\n },\r\n\r\n visualStyle: function() {\r\n var boxElement = this,\r\n options = boxElement.options,\r\n border = options.border || {};\r\n\r\n return {\r\n stroke: {\r\n width: border.width,\r\n color: border.color,\r\n opacity: valueOrDefault(border.opacity, options.opacity),\r\n dashType: border.dashType\r\n },\r\n fill: {\r\n color: options.background,\r\n opacity: options.opacity\r\n },\r\n cursor: options.cursor\r\n };\r\n }\r\n });\r\n\r\n var Text = ChartElement.extend({\r\n init: function(content, options) {\r\n var text = this;\r\n\r\n ChartElement.fn.init.call(text, options);\r\n\r\n text.content = content;\r\n\r\n // Calculate size\r\n text.reflow(Box2D());\r\n },\r\n\r\n options: {\r\n font: DEFAULT_FONT,\r\n color: BLACK,\r\n align: LEFT,\r\n vAlign: \"\"\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var text = this,\r\n options = text.options,\r\n size,\r\n margin;\r\n\r\n size = options.size =\r\n measureText(text.content, { font: options.font });\r\n\r\n text.baseline = size.baseline;\r\n\r\n text.box = Box2D(targetBox.x1, targetBox.y1,\r\n targetBox.x1 + size.width, targetBox.y1 + size.height);\r\n },\r\n\r\n createVisual: function() {\r\n var opt = this.options;\r\n\r\n this.visual = new draw.Text(this.content, this.box.toRect().topLeft(), {\r\n font: opt.font,\r\n fill: { color: opt.color, opacity: opt.opacity },\r\n cursor: opt.cursor\r\n });\r\n }\r\n });\r\n\r\n var FloatElement = ChartElement.extend({\r\n init: function(options) {\r\n ChartElement.fn.init.call(this, options);\r\n this._initDirection();\r\n },\r\n\r\n _initDirection: function() {\r\n var options = this.options;\r\n if (options.vertical) {\r\n this.groupAxis = X;\r\n this.elementAxis = Y;\r\n this.groupSizeField = WIDTH;\r\n this.elementSizeField = HEIGHT;\r\n this.groupSpacing = options.spacing;\r\n this.elementSpacing = options.vSpacing;\r\n } else {\r\n this.groupAxis = Y;\r\n this.elementAxis = X;\r\n this.groupSizeField = HEIGHT;\r\n this.elementSizeField = WIDTH;\r\n this.groupSpacing = options.vSpacing;\r\n this.elementSpacing = options.spacing;\r\n }\r\n },\r\n\r\n options: {\r\n vertical: true,\r\n wrap: true,\r\n vSpacing: 0,\r\n spacing: 0\r\n },\r\n\r\n reflow: function(targetBox) {\r\n this.box = targetBox.clone();\r\n this.reflowChildren();\r\n },\r\n\r\n reflowChildren: function() {\r\n var floatElement = this;\r\n var box = floatElement.box;\r\n var options = floatElement.options;\r\n var elementSpacing = floatElement.elementSpacing;\r\n var groupSpacing = floatElement.groupSpacing;\r\n\r\n var elementAxis = floatElement.elementAxis;\r\n var groupAxis = floatElement.groupAxis;\r\n var elementSizeField = floatElement.elementSizeField;\r\n var groupSizeField = floatElement.groupSizeField;\r\n\r\n var groupOptions = floatElement.groupOptions();\r\n var groups = groupOptions.groups;\r\n var groupsCount = groups.length;\r\n\r\n var groupsStart = box[groupAxis + 1] +\r\n floatElement.alignStart(groupOptions.groupsSize, box[groupSizeField]());\r\n\r\n var groupStart = groupsStart;\r\n var elementStart;\r\n var groupElementStart;\r\n\r\n var group;\r\n var groupElements;\r\n var groupElementsCount;\r\n\r\n var idx;\r\n var groupIdx;\r\n\r\n var element;\r\n var elementBox;\r\n var elementSize;\r\n\r\n if (groupsCount) {\r\n for (groupIdx = 0; groupIdx < groupsCount; groupIdx++) {\r\n group = groups[groupIdx];\r\n groupElements = group.groupElements;\r\n groupElementsCount = groupElements.length;\r\n elementStart = box[elementAxis + 1];\r\n for (idx = 0; idx < groupElementsCount; idx++) {\r\n element = groupElements[idx];\r\n elementSize = floatElement.elementSize(element);\r\n groupElementStart = groupStart +\r\n floatElement.alignStart(elementSize[groupSizeField], group.groupSize);\r\n\r\n elementBox = Box2D();\r\n elementBox[groupAxis + 1] = groupElementStart;\r\n elementBox[groupAxis + 2] = groupElementStart + elementSize[groupSizeField];\r\n elementBox[elementAxis + 1] = elementStart;\r\n elementBox[elementAxis + 2] = elementStart + elementSize[elementSizeField];\r\n\r\n element.reflow(elementBox);\r\n\r\n elementStart += elementSize[elementSizeField] + floatElement.elementSpacing;\r\n }\r\n groupStart += group.groupSize + floatElement.groupSpacing;\r\n }\r\n box[groupAxis + 1] = groupsStart;\r\n box[groupAxis + 2] = groupsStart + groupOptions.groupsSize;\r\n box[elementAxis + 2] = box[elementAxis + 1] + groupOptions.maxGroupElementsSize;\r\n }\r\n },\r\n\r\n alignStart: function(size, maxSize) {\r\n var start = 0;\r\n var align = this.options.align;\r\n if (align == RIGHT || align == BOTTOM) {\r\n start = maxSize - size;\r\n } else if (align == CENTER){\r\n start = (maxSize - size) / 2;\r\n }\r\n return start;\r\n },\r\n\r\n groupOptions: function() {\r\n var floatElement = this;\r\n var box = floatElement.box;\r\n var children = floatElement.children;\r\n var childrenCount = children.length;\r\n var elementSizeField = this.elementSizeField;\r\n var groupSizeField = this.groupSizeField;\r\n var elementSpacing = this.elementSpacing;\r\n var groupSpacing = this.groupSpacing;\r\n var maxSize = round(box[elementSizeField]());\r\n var idx = 0;\r\n var groupSize = 0;\r\n var elementSize;\r\n var element;\r\n var groupElementsSize = 0;\r\n var groupsSize = 0;\r\n var groups = [];\r\n var groupElements = [];\r\n var maxGroupElementsSize = 0;\r\n\r\n for (idx = 0; idx < childrenCount; idx++) {\r\n element = children[idx];\r\n if (!element.box) {\r\n element.reflow(box);\r\n }\r\n\r\n elementSize = this.elementSize(element);\r\n if (floatElement.options.wrap && round(groupElementsSize + elementSpacing + elementSize[elementSizeField]) > maxSize) {\r\n groups.push({\r\n groupElements: groupElements,\r\n groupSize: groupSize,\r\n groupElementsSize: groupElementsSize\r\n });\r\n maxGroupElementsSize = math.max(maxGroupElementsSize, groupElementsSize);\r\n groupsSize += groupSpacing + groupSize;\r\n groupSize = 0;\r\n groupElementsSize = 0;\r\n groupElements = [];\r\n }\r\n groupSize = math.max(groupSize, elementSize[groupSizeField]);\r\n if (groupElementsSize > 0) {\r\n groupElementsSize += elementSpacing;\r\n }\r\n groupElementsSize += elementSize[elementSizeField];\r\n groupElements.push(element);\r\n }\r\n\r\n groups.push({\r\n groupElements: groupElements,\r\n groupSize: groupSize,\r\n groupElementsSize: groupElementsSize\r\n });\r\n maxGroupElementsSize = math.max(maxGroupElementsSize, groupElementsSize);\r\n groupsSize += groupSize;\r\n\r\n return {\r\n groups: groups,\r\n groupsSize: groupsSize,\r\n maxGroupElementsSize: maxGroupElementsSize\r\n };\r\n },\r\n\r\n elementSize: function(element) {\r\n return {\r\n width: element.box.width(),\r\n height: element.box.height()\r\n };\r\n },\r\n\r\n createVisual: noop\r\n });\r\n\r\n var TextBox = BoxElement.extend({\r\n ROWS_SPLIT_REGEX: /\\n|\\\\n/m,\r\n\r\n init: function(content, options) {\r\n var textbox = this;\r\n textbox.content = content;\r\n\r\n BoxElement.fn.init.call(textbox, options);\r\n\r\n textbox._initContainer();\r\n\r\n textbox.reflow(Box2D());\r\n },\r\n\r\n _initContainer: function() {\r\n var textbox = this;\r\n var options = textbox.options;\r\n var rows = (textbox.content + \"\").split(textbox.ROWS_SPLIT_REGEX);\r\n var floatElement = new FloatElement({vertical: true, align: options.align, wrap: false});\r\n var textOptions = deepExtend({ }, options, { opacity: 1, animation: null });\r\n var hasBox = textbox.hasBox();\r\n var text;\r\n var rowIdx;\r\n\r\n textbox.container = floatElement;\r\n textbox.append(floatElement);\r\n\r\n for (rowIdx = 0; rowIdx < rows.length; rowIdx++) {\r\n text = new Text(trim(rows[rowIdx]), textOptions);\r\n floatElement.append(text);\r\n }\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var options = this.options;\r\n var visualFn = options.visual;\r\n this.container.options.align = options.align;\r\n\r\n if (visualFn && !this._boxReflow) {\r\n if (!targetBox.hasSize()) {\r\n this._boxReflow = true;\r\n this.reflow(targetBox);\r\n this._boxReflow = false;\r\n targetBox = this.box;\r\n }\r\n this.visual = visualFn(this.visualContext(targetBox));\r\n\r\n var visualBox = targetBox;\r\n if (this.visual) {\r\n visualBox = rectToBox(this.visual.clippedBBox() || new geom.Rect());\r\n\r\n this.visual.options.zIndex = options.zIndex;\r\n this.visual.options.noclip = options.noclip;\r\n }\r\n\r\n this.box = this.contentBox = this.paddingBox = visualBox;\r\n } else {\r\n BoxElement.fn.reflow.call(this, targetBox);\r\n\r\n if (options.rotation) {\r\n var margin = getSpacing(options.margin);\r\n var box = this.box.unpad(margin);\r\n this.targetBox = targetBox;\r\n this.normalBox = box.clone();\r\n box = this.rotate();\r\n box.translate(margin.left - margin.right, margin.top - margin.bottom);\r\n this.rotatedBox = box.clone();\r\n box.pad(margin);\r\n }\r\n }\r\n },\r\n\r\n createVisual: function() {\r\n var options = this.options;\r\n\r\n if (!options.visible) {\r\n return;\r\n }\r\n\r\n this.visual = new dataviz.drawing.Group({\r\n transform: this.rotationTransform(),\r\n zIndex: options.zIndex,\r\n noclip: options.noclip\r\n });\r\n\r\n if (this.hasBox()) {\r\n var box = draw.Path.fromRect(this.paddingBox.toRect(), this.visualStyle());\r\n this.visual.append(box);\r\n }\r\n },\r\n\r\n renderVisual: function() {\r\n if (this.options.visual) {\r\n this.addVisual();\r\n this.createAnimation();\r\n } else {\r\n BoxElement.fn.renderVisual.call(this);\r\n }\r\n },\r\n\r\n visualOptions: function() {\r\n var options = this.options;\r\n return {\r\n background: options.background,\r\n border: options.border,\r\n color: options.color,\r\n font: options.font,\r\n margin: options.margin,\r\n padding: options.padding,\r\n visible: options.visible\r\n };\r\n },\r\n\r\n visualContext: function(targetBox) {\r\n var textbox = this;\r\n\r\n return {\r\n text: textbox.content,\r\n rect: targetBox.toRect(),\r\n options: textbox.visualOptions(),\r\n createVisual: function() {\r\n textbox._boxReflow = true;\r\n textbox.reflow(targetBox);\r\n textbox._boxReflow = false;\r\n return textbox.getDefaultVisual();\r\n }\r\n };\r\n },\r\n\r\n getDefaultVisual: function() {\r\n this.createVisual();\r\n this.renderChildren();\r\n var visual = this.visual;\r\n delete this.visual;\r\n return visual;\r\n },\r\n\r\n rotate: function() {\r\n var options = this.options;\r\n this.box.rotate(options.rotation);\r\n this.align(this.targetBox, X, options.align);\r\n this.align(this.targetBox, Y, options.vAlign);\r\n return this.box;\r\n },\r\n\r\n rotationTransform: function() {\r\n var rotation = this.options.rotation;\r\n if (!rotation) {\r\n return null;\r\n }\r\n\r\n var center = this.normalBox.center();\r\n var cx = center.x;\r\n var cy = center.y;\r\n var boxCenter = this.rotatedBox.center();\r\n\r\n return geom.transform()\r\n .translate(boxCenter.x - cx, boxCenter.y - cy)\r\n .rotate(rotation, [cx, cy]);\r\n }\r\n });\r\n\r\n var Title = ChartElement.extend({\r\n init: function(options) {\r\n var title = this;\r\n ChartElement.fn.init.call(title, options);\r\n\r\n options = title.options;\r\n title.append(\r\n new TextBox(options.text, deepExtend({}, options, {\r\n vAlign: options.position\r\n }))\r\n );\r\n },\r\n\r\n options: {\r\n color: BLACK,\r\n position: TOP,\r\n align: CENTER,\r\n margin: getSpacing(5),\r\n padding: getSpacing(5)\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var title = this;\r\n\r\n ChartElement.fn.reflow.call(title, targetBox);\r\n title.box.snapTo(targetBox, X);\r\n }\r\n });\r\n\r\n Title.buildTitle = function(options, parent, defaultOptions) {\r\n var title;\r\n\r\n if (typeof options === \"string\") {\r\n options = { text: options };\r\n }\r\n\r\n options = deepExtend({ visible: true }, defaultOptions, options);\r\n\r\n if (options && options.visible && options.text) {\r\n title = new Title(options);\r\n parent.append(title);\r\n }\r\n\r\n return title;\r\n };\r\n\r\n var AxisLabel = TextBox.extend({\r\n init: function(value, text, index, dataItem, options) {\r\n var label = this;\r\n\r\n label.text = text;\r\n label.value = value;\r\n label.index = index;\r\n label.dataItem = dataItem;\r\n\r\n TextBox.fn.init.call(label, text, options);\r\n },\r\n\r\n visualContext: function(targetBox) {\r\n var context = TextBox.fn.visualContext.call(this, targetBox);\r\n context.value = this.value;\r\n context.dataItem = this.dataItem;\r\n context.format = this.options.format;\r\n context.culture = this.options.culture;\r\n\r\n return context;\r\n },\r\n\r\n click: function(widget, e) {\r\n var label = this;\r\n\r\n widget.trigger(AXIS_LABEL_CLICK, {\r\n element: $(e.target),\r\n value: label.value,\r\n text: label.text,\r\n index: label.index,\r\n dataItem: label.dataItem,\r\n axis: label.parent.options\r\n });\r\n },\r\n\r\n rotate: function() {\r\n if (this.options.alignRotation != CENTER) {\r\n var box = this.normalBox.toRect();\r\n var transform = this.rotationTransform();\r\n this.box = rectToBox(box.bbox(transform.matrix()));\r\n } else {\r\n TextBox.fn.rotate.call(this);\r\n }\r\n return this.box;\r\n },\r\n\r\n rotationTransform: function() {\r\n var options = this.options;\r\n var rotation = options.rotation;\r\n if (!rotation) {\r\n return null;\r\n }\r\n\r\n if (options.alignRotation == CENTER) {\r\n return TextBox.fn.rotationTransform.call(this);\r\n }\r\n\r\n var rotationMatrix = geom.transform().rotate(rotation).matrix();\r\n var box = this.normalBox.toRect();\r\n var rect = this.targetBox.toRect();\r\n\r\n var rotationOrigin = options.rotationOrigin || TOP;\r\n var alignAxis = rotationOrigin == TOP || rotationOrigin == BOTTOM ? X : Y;\r\n var distanceAxis = rotationOrigin == TOP || rotationOrigin == BOTTOM ? Y : X;\r\n var axisAnchor = rotationOrigin == TOP || rotationOrigin == LEFT ? rect.origin : rect.bottomRight();\r\n\r\n var topLeft = box.topLeft().transformCopy(rotationMatrix);\r\n var topRight = box.topRight().transformCopy(rotationMatrix);\r\n var bottomRight = box.bottomRight().transformCopy(rotationMatrix);\r\n var bottomLeft = box.bottomLeft().transformCopy(rotationMatrix);\r\n var rotatedBox = geom.Rect.fromPoints(topLeft, topRight, bottomRight, bottomLeft);\r\n\r\n var translate = {};\r\n translate[distanceAxis] = rect.origin[distanceAxis] - rotatedBox.origin[distanceAxis];\r\n\r\n var distanceLeft = math.abs(topLeft[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\r\n var distanceRight = math.abs(topRight[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\r\n var alignStart;\r\n var alignEnd;\r\n\r\n if (round(distanceLeft, DEFAULT_PRECISION) === round(distanceRight, DEFAULT_PRECISION)) {\r\n alignStart = topLeft;\r\n alignEnd = topRight;\r\n } else if (distanceRight < distanceLeft) {\r\n alignStart = topRight;\r\n alignEnd = bottomRight;\r\n } else {\r\n alignStart = topLeft;\r\n alignEnd = bottomLeft;\r\n }\r\n\r\n var alignCenter = alignStart[alignAxis] + (alignEnd[alignAxis] - alignStart[alignAxis]) / 2;\r\n translate[alignAxis] = rect.center()[alignAxis] - alignCenter;\r\n\r\n return geom.transform()\r\n .translate(translate.x, translate.y)\r\n .rotate(rotation);\r\n }\r\n });\r\n\r\n function createAxisTick(options, tickOptions) {\r\n var tickX = options.tickX,\r\n tickY = options.tickY,\r\n position = options.position;\r\n\r\n var tick = new draw.Path({\r\n stroke: {\r\n width: tickOptions.width,\r\n color: tickOptions.color\r\n }\r\n });\r\n\r\n if (options.vertical) {\r\n tick.moveTo(tickX, position)\r\n .lineTo(tickX + tickOptions.size, position);\r\n } else {\r\n tick.moveTo(position, tickY)\r\n .lineTo(position, tickY + tickOptions.size);\r\n }\r\n\r\n alignPathToPixel(tick);\r\n\r\n return tick;\r\n }\r\n\r\n function createAxisGridLine(options, gridLine) {\r\n var lineStart = options.lineStart,\r\n lineEnd = options.lineEnd,\r\n position = options.position,\r\n start, end;\r\n\r\n var line = new draw.Path({\r\n stroke: {\r\n width: gridLine.width,\r\n color: gridLine.color,\r\n dashType: gridLine.dashType\r\n }\r\n });\r\n\r\n if (options.vertical) {\r\n line.moveTo(lineStart, position)\r\n .lineTo(lineEnd, position);\r\n } else {\r\n line.moveTo(position, lineStart)\r\n .lineTo(position, lineEnd);\r\n }\r\n\r\n alignPathToPixel(line);\r\n\r\n return line;\r\n }\r\n\r\n var Axis = ChartElement.extend({\r\n init: function(options) {\r\n var axis = this;\r\n\r\n ChartElement.fn.init.call(axis, options);\r\n\r\n if (!axis.options.visible) {\r\n axis.options = deepExtend({}, axis.options, {\r\n labels: {\r\n visible: false\r\n },\r\n line: {\r\n visible: false\r\n },\r\n margin: 0,\r\n majorTickSize: 0,\r\n minorTickSize: 0\r\n });\r\n }\r\n\r\n axis.options.minorTicks = deepExtend({}, {\r\n color: axis.options.line.color,\r\n width: axis.options.line.width,\r\n visible: axis.options.minorTickType != NONE\r\n }, axis.options.minorTicks, {\r\n size: axis.options.minorTickSize,\r\n align: axis.options.minorTickType\r\n });\r\n\r\n axis.options.majorTicks = deepExtend({}, {\r\n color: axis.options.line.color,\r\n width: axis.options.line.width,\r\n visible: axis.options.majorTickType != NONE\r\n }, axis.options.majorTicks, {\r\n size: axis.options.majorTickSize,\r\n align: axis.options.majorTickType\r\n });\r\n\r\n if (!this.options._deferLables) {\r\n axis.createLabels();\r\n }\r\n\r\n axis.createTitle();\r\n axis.createNotes();\r\n },\r\n\r\n options: {\r\n labels: {\r\n visible: true,\r\n rotation: 0,\r\n mirror: false,\r\n step: 1,\r\n skip: 0\r\n },\r\n line: {\r\n width: 1,\r\n color: BLACK,\r\n visible: true\r\n },\r\n title: {\r\n visible: true,\r\n position: CENTER\r\n },\r\n majorTicks: {\r\n align: OUTSIDE,\r\n size: 4,\r\n skip: 0,\r\n step: 1\r\n },\r\n minorTicks: {\r\n align: OUTSIDE,\r\n size: 3,\r\n skip: 0,\r\n step: 1\r\n },\r\n axisCrossingValue: 0,\r\n majorTickType: OUTSIDE,\r\n minorTickType: NONE,\r\n majorGridLines: {\r\n skip: 0,\r\n step: 1\r\n },\r\n minorGridLines: {\r\n visible: false,\r\n width: 1,\r\n color: BLACK,\r\n skip: 0,\r\n step: 1\r\n },\r\n // TODO: Move to line or labels options\r\n margin: 5,\r\n visible: true,\r\n reverse: false,\r\n justified: true,\r\n notes: {\r\n label: {\r\n text: \"\"\r\n }\r\n },\r\n\r\n _alignLines: true,\r\n _deferLabels: false\r\n },\r\n\r\n // abstract labelsCount(): Number\r\n // abstract createAxisLabel(index, options): AxisLabel\r\n\r\n createLabels: function() {\r\n var axis = this,\r\n options = axis.options,\r\n align = options.vertical ? RIGHT : CENTER,\r\n labelOptions = deepExtend({ }, options.labels, {\r\n align: align,\r\n zIndex: options.zIndex\r\n }),\r\n step = math.max(1, labelOptions.step);\r\n\r\n axis.children = $.grep(axis.children, function (child) {\r\n return !(child instanceof AxisLabel);\r\n });\r\n\r\n axis.labels = [];\r\n\r\n if (labelOptions.visible) {\r\n var labelsCount = axis.labelsCount(),\r\n rotation = labelOptions.rotation,\r\n label,\r\n i;\r\n\r\n if (isPlainObject(rotation)) {\r\n labelOptions.alignRotation = rotation.align;\r\n labelOptions.rotation = rotation.angle;\r\n }\r\n\r\n if (labelOptions.rotation == \"auto\") {\r\n labelOptions.rotation = 0;\r\n options.autoRotateLabels = true;\r\n }\r\n\r\n for (i = labelOptions.skip; i < labelsCount; i += step) {\r\n label = axis.createAxisLabel(i, labelOptions);\r\n if (label) {\r\n axis.append(label);\r\n axis.labels.push(label);\r\n }\r\n }\r\n }\r\n },\r\n\r\n lineBox: function() {\r\n var axis = this,\r\n options = axis.options,\r\n box = axis.box,\r\n vertical = options.vertical,\r\n labels = axis.labels,\r\n labelSize = vertical ? HEIGHT : WIDTH,\r\n justified = options.justified,\r\n mirror = options.labels.mirror,\r\n axisX = mirror ? box.x1 : box.x2,\r\n axisY = mirror ? box.y2 : box.y1,\r\n lineWidth = options.line.width || 0;\r\n\r\n return vertical ?\r\n Box2D(axisX, box.y1, axisX, box.y2 - lineWidth) :\r\n Box2D(box.x1, axisY, box.x2 - lineWidth, axisY);\r\n },\r\n\r\n createTitle: function() {\r\n var axis = this,\r\n options = axis.options,\r\n titleOptions = deepExtend({\r\n rotation: options.vertical ? -90 : 0,\r\n text: \"\",\r\n zIndex: 1,\r\n visualSize: true\r\n }, options.title),\r\n title;\r\n\r\n if (titleOptions.visible && titleOptions.text) {\r\n title = new TextBox(titleOptions.text, titleOptions);\r\n axis.append(title);\r\n axis.title = title;\r\n }\r\n },\r\n\r\n createNotes: function() {\r\n var axis = this,\r\n options = axis.options,\r\n notes = options.notes,\r\n items = notes.data || [],\r\n noteTemplate, i, text, item, note;\r\n\r\n axis.notes = [];\r\n\r\n for (i = 0; i < items.length; i++) {\r\n item = deepExtend({}, notes, items[i]);\r\n item.value = axis.parseNoteValue(item.value);\r\n\r\n note = new Note(item.value, item.label.text, null, null, null, item);\r\n\r\n if (note.options.visible) {\r\n if (defined(note.options.position)) {\r\n if (options.vertical && !inArray(note.options.position, [LEFT, RIGHT])) {\r\n note.options.position = options.reverse ? LEFT : RIGHT;\r\n } else if (!options.vertical && !inArray(note.options.position, [TOP, BOTTOM])) {\r\n note.options.position = options.reverse ? BOTTOM : TOP;\r\n }\r\n } else {\r\n if (options.vertical) {\r\n note.options.position = options.reverse ? LEFT : RIGHT;\r\n } else {\r\n note.options.position = options.reverse ? BOTTOM : TOP;\r\n }\r\n }\r\n axis.append(note);\r\n axis.notes.push(note);\r\n }\r\n }\r\n },\r\n\r\n parseNoteValue: function(value) {\r\n return value;\r\n },\r\n\r\n renderVisual: function() {\r\n ChartElement.fn.renderVisual.call(this);\r\n\r\n this.createPlotBands();\r\n },\r\n\r\n createVisual: function() {\r\n ChartElement.fn.createVisual.call(this);\r\n\r\n this.createBackground();\r\n this.createLine();\r\n },\r\n\r\n gridLinesVisual: function() {\r\n var gridLines = this._gridLines;\r\n if (!gridLines) {\r\n gridLines = this._gridLines = new draw.Group({\r\n zIndex: -2\r\n });\r\n this.appendVisual(this._gridLines);\r\n }\r\n\r\n return gridLines;\r\n },\r\n\r\n createTicks: function(lineGroup) {\r\n var axis = this,\r\n options = axis.options,\r\n lineBox = axis.lineBox(),\r\n mirror = options.labels.mirror,\r\n majorUnit = options.majorTicks.visible ? options.majorUnit : 0,\r\n tickLineOptions= {\r\n // TODO\r\n // _alignLines: options._alignLines,\r\n vertical: options.vertical\r\n },\r\n start, end;\r\n\r\n function render(tickPositions, tickOptions, skipUnit) {\r\n var i, count = tickPositions.length;\r\n\r\n if (tickOptions.visible) {\r\n for (i = tickOptions.skip; i < count; i += tickOptions.step) {\r\n if (defined(skipUnit) && (i % skipUnit === 0)) {\r\n continue;\r\n }\r\n\r\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\r\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\r\n tickLineOptions.position = tickPositions[i];\r\n\r\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\r\n }\r\n }\r\n }\r\n\r\n render(axis.getMajorTickPositions(), options.majorTicks);\r\n render(axis.getMinorTickPositions(), options.minorTicks, majorUnit / options.minorUnit);\r\n },\r\n\r\n createLine: function() {\r\n var axis = this,\r\n options = axis.options,\r\n line = options.line,\r\n lineBox = axis.lineBox(),\r\n lineOptions;\r\n\r\n if (line.width > 0 && line.visible) {\r\n var path = new draw.Path({\r\n stroke: {\r\n width: line.width,\r\n color: line.color,\r\n dashType: line.dashType\r\n }\r\n\r\n /* TODO\r\n zIndex: line.zIndex,\r\n */\r\n });\r\n\r\n path.moveTo(lineBox.x1, lineBox.y1)\r\n .lineTo(lineBox.x2, lineBox.y2);\r\n\r\n if (options._alignLines) {\r\n alignPathToPixel(path);\r\n }\r\n\r\n var group = this._lineGroup = new draw.Group();\r\n group.append(path);\r\n\r\n this.visual.append(group);\r\n this.createTicks(group);\r\n }\r\n },\r\n\r\n getActualTickSize: function () {\r\n var axis = this,\r\n options = axis.options,\r\n tickSize = 0;\r\n\r\n if (options.majorTicks.visible && options.minorTicks.visible) {\r\n tickSize = math.max(options.majorTicks.size, options.minorTicks.size);\r\n } else if (options.majorTicks.visible) {\r\n tickSize = options.majorTicks.size;\r\n } else if (options.minorTicks.visible) {\r\n tickSize = options.minorTicks.size;\r\n }\r\n\r\n return tickSize;\r\n },\r\n\r\n createBackground: function() {\r\n var axis = this,\r\n options = axis.options,\r\n background = options.background,\r\n box = axis.box;\r\n\r\n if (background) {\r\n axis._backgroundPath = draw.Path.fromRect(box.toRect(), {\r\n fill: {\r\n color: background\r\n },\r\n stroke: null\r\n });\r\n\r\n this.visual.append(axis._backgroundPath);\r\n }\r\n },\r\n\r\n createPlotBands: function() {\r\n var axis = this,\r\n options = axis.options,\r\n plotBands = options.plotBands || [],\r\n vertical = options.vertical,\r\n plotArea = axis.plotArea,\r\n slotX, slotY, from, to;\r\n\r\n if (plotBands.length === 0) {\r\n return;\r\n }\r\n\r\n var group = this._plotbandGroup = new draw.Group({\r\n zIndex: -1\r\n });\r\n\r\n var altAxis = $.grep(axis.pane.axes, function(a) {\r\n return a.options.vertical !== axis.options.vertical;\r\n })[0];\r\n\r\n var range = this.range();\r\n $.each(plotBands, function(i, item) {\r\n from = valueOrDefault(item.from, MIN_VALUE);\r\n to = valueOrDefault(item.to, MAX_VALUE);\r\n var element = [];\r\n\r\n if (vertical) {\r\n slotX = (altAxis || plotArea.axisX).lineBox();\r\n slotY = axis.getSlot(item.from, item.to, true);\r\n } else {\r\n slotX = axis.getSlot(item.from, item.to, true);\r\n slotY = (altAxis || plotArea.axisY).lineBox();\r\n }\r\n\r\n if (slotX.width() !== 0 && slotY.height() !== 0) {\r\n var bandRect = new geom.Rect(\r\n [slotX.x1, slotY.y1],\r\n [slotX.width(), slotY.height()]\r\n );\r\n\r\n var path = draw.Path.fromRect(bandRect, {\r\n fill: {\r\n color: item.color,\r\n opacity: item.opacity\r\n },\r\n stroke: null\r\n });\r\n\r\n group.append(path);\r\n }\r\n });\r\n\r\n axis.appendVisual(group);\r\n },\r\n\r\n createGridLines: function(altAxis) {\r\n var axis = this,\r\n options = axis.options,\r\n axisLineVisible = altAxis.options.line.visible,\r\n majorGridLines = options.majorGridLines,\r\n majorUnit = majorGridLines.visible ? options.majorUnit : 0,\r\n vertical = options.vertical,\r\n lineBox = altAxis.lineBox(),\r\n linePos = lineBox[vertical ? \"y1\" : \"x1\"],\r\n lineOptions = {\r\n lineStart: lineBox[vertical ? \"x1\" : \"y1\"],\r\n lineEnd: lineBox[vertical ? \"x2\" : \"y2\"],\r\n vertical: vertical\r\n },\r\n pos, majorTicks = [];\r\n\r\n var container = this.gridLinesVisual();\r\n function render(tickPositions, gridLine, skipUnit) {\r\n var count = tickPositions.length,\r\n i;\r\n\r\n if (gridLine.visible) {\r\n for (i = gridLine.skip; i < count; i += gridLine.step) {\r\n pos = round(tickPositions[i]);\r\n if (!inArray(pos, majorTicks)) {\r\n if (i % skipUnit !== 0 && (!axisLineVisible || linePos !== pos)) {\r\n lineOptions.position = pos;\r\n container.append(createAxisGridLine(lineOptions, gridLine));\r\n\r\n majorTicks.push(pos);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n render(axis.getMajorTickPositions(), options.majorGridLines);\r\n render(axis.getMinorTickPositions(), options.minorGridLines, majorUnit / options.minorUnit);\r\n\r\n return container.children;\r\n },\r\n\r\n reflow: function(box) {\r\n var axis = this,\r\n options = axis.options,\r\n vertical = options.vertical,\r\n labels = axis.labels,\r\n count = labels.length,\r\n title = axis.title,\r\n sizeFn = vertical ? WIDTH : HEIGHT,\r\n titleSize = title ? title.box[sizeFn]() : 0,\r\n space = axis.getActualTickSize() + options.margin + titleSize,\r\n maxLabelSize = 0,\r\n rootBox = (this.getRoot() || {}).box || box,\r\n boxSize = rootBox[sizeFn](),\r\n labelSize, i;\r\n\r\n for (i = 0; i < count; i++) {\r\n labelSize = labels[i].box[sizeFn]();\r\n if (labelSize + space <= boxSize) {\r\n maxLabelSize = math.max(maxLabelSize, labelSize);\r\n }\r\n }\r\n\r\n if (vertical) {\r\n axis.box = Box2D(\r\n box.x1, box.y1,\r\n box.x1 + maxLabelSize + space, box.y2\r\n );\r\n } else {\r\n axis.box = Box2D(\r\n box.x1, box.y1,\r\n box.x2, box.y1 + maxLabelSize + space\r\n );\r\n }\r\n\r\n axis.arrangeTitle();\r\n axis.arrangeLabels();\r\n axis.arrangeNotes();\r\n },\r\n\r\n arrangeLabels: function() {\r\n var axis = this,\r\n options = axis.options,\r\n labels = axis.labels,\r\n labelsBetweenTicks = !options.justified,\r\n vertical = options.vertical,\r\n lineBox = axis.lineBox(),\r\n mirror = options.labels.mirror,\r\n tickPositions = axis.getMajorTickPositions(),\r\n labelOffset = axis.getActualTickSize() + options.margin,\r\n labelBox, labelY, i;\r\n\r\n for (i = 0; i < labels.length; i++) {\r\n var label = labels[i],\r\n tickIx = label.index,\r\n labelSize = vertical ? label.box.height() : label.box.width(),\r\n labelPos = tickPositions[tickIx] - (labelSize / 2),\r\n firstTickPosition, nextTickPosition, middle, labelX;\r\n\r\n if (vertical) {\r\n if (labelsBetweenTicks) {\r\n firstTickPosition = tickPositions[tickIx];\r\n nextTickPosition = tickPositions[tickIx + 1];\r\n\r\n middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\r\n labelPos = middle - (labelSize / 2);\r\n }\r\n\r\n labelX = lineBox.x2;\r\n\r\n if (mirror) {\r\n labelX += labelOffset;\r\n label.options.rotationOrigin = LEFT;\r\n } else {\r\n labelX -= labelOffset + label.box.width();\r\n label.options.rotationOrigin = RIGHT;\r\n }\r\n\r\n labelBox = label.box.move(labelX, labelPos);\r\n } else {\r\n if (labelsBetweenTicks) {\r\n firstTickPosition = tickPositions[tickIx];\r\n nextTickPosition = tickPositions[tickIx + 1];\r\n } else {\r\n firstTickPosition = labelPos;\r\n nextTickPosition = labelPos + labelSize;\r\n }\r\n\r\n labelY = lineBox.y1;\r\n\r\n if (mirror) {\r\n labelY -= labelOffset + label.box.height();\r\n label.options.rotationOrigin = BOTTOM;\r\n } else {\r\n labelY += labelOffset;\r\n label.options.rotationOrigin = TOP;\r\n }\r\n\r\n labelBox = Box2D(firstTickPosition, labelY,\r\n nextTickPosition, labelY + label.box.height());\r\n }\r\n\r\n label.reflow(labelBox);\r\n }\r\n },\r\n\r\n autoRotateLabels: function() {\r\n if (this.options.autoRotateLabels && !this.options.vertical) {\r\n var tickPositions = this.getMajorTickPositions();\r\n var labels = this.labels;\r\n var labelBox, angle, width, idx;\r\n for (idx = 0; idx < labels.length; idx++) {\r\n width = tickPositions[idx + 1] - tickPositions[idx];\r\n labelBox = labels[idx].box;\r\n if (labelBox.height() > width) {\r\n angle = -90;\r\n break;\r\n }\r\n\r\n if (labelBox.width() > width) {\r\n angle = -45;\r\n }\r\n }\r\n\r\n if (angle) {\r\n for (idx = 0; idx < labels.length; idx++) {\r\n labels[idx].options.rotation = angle;\r\n labels[idx].reflow(Box2D());\r\n }\r\n return true;\r\n }\r\n }\r\n },\r\n\r\n arrangeTitle: function() {\r\n var axis = this,\r\n options = axis.options,\r\n mirror = options.labels.mirror,\r\n vertical = options.vertical,\r\n title = axis.title;\r\n\r\n if (title) {\r\n if (vertical) {\r\n title.options.align = mirror ? RIGHT : LEFT;\r\n title.options.vAlign = title.options.position;\r\n } else {\r\n title.options.align = title.options.position;\r\n title.options.vAlign = mirror ? TOP : BOTTOM;\r\n }\r\n\r\n title.reflow(axis.box);\r\n }\r\n },\r\n\r\n arrangeNotes: function() {\r\n var axis = this,\r\n i, item, slot, value;\r\n\r\n for (i = 0; i < axis.notes.length; i++) {\r\n item = axis.notes[i];\r\n value = item.options.value;\r\n if (defined(value)) {\r\n if (axis.shouldRenderNote(value)) {\r\n item.show();\r\n } else {\r\n item.hide();\r\n }\r\n\r\n slot = axis.getSlot(value);\r\n } else {\r\n item.hide();\r\n }\r\n\r\n item.reflow(slot || axis.lineBox());\r\n }\r\n },\r\n\r\n alignTo: function(secondAxis) {\r\n var axis = this,\r\n lineBox = secondAxis.lineBox(),\r\n vertical = axis.options.vertical,\r\n pos = vertical ? Y : X;\r\n\r\n axis.box.snapTo(lineBox, pos);\r\n if (vertical) {\r\n axis.box.shrink(0, axis.lineBox().height() - lineBox.height());\r\n } else {\r\n axis.box.shrink(axis.lineBox().width() - lineBox.width(), 0);\r\n }\r\n axis.box[pos + 1] -= axis.lineBox()[pos + 1] - lineBox[pos + 1];\r\n axis.box[pos + 2] -= axis.lineBox()[pos + 2] - lineBox[pos + 2];\r\n },\r\n\r\n axisLabelText: function(value, dataItem, options) {\r\n var text = value;\r\n\r\n if (options.template) {\r\n var tmpl = template(options.template);\r\n text = tmpl({ value: value, dataItem: dataItem, format: options.format, culture: options.culture });\r\n } else if (options.format) {\r\n if (options.format.match(FORMAT_REGEX)) {\r\n text = kendo.format(options.format, value);\r\n } else {\r\n text = kendo.toString(value, options.format, options.culture);\r\n }\r\n }\r\n\r\n return text;\r\n },\r\n\r\n slot: function(from , to) {\r\n var slot = this.getSlot(from, to);\r\n if (slot) {\r\n return slot.toRect();\r\n }\r\n },\r\n\r\n contentBox: function() {\r\n var box = this.box.clone();\r\n if (this.labels.length) {\r\n box.wrap(this.labels[0].box).wrap(last(this.labels).box);\r\n }\r\n return box;\r\n }\r\n });\r\n\r\n var Note = BoxElement.extend({\r\n init: function(value, text, dataItem, category, series, options) {\r\n var note = this;\r\n\r\n BoxElement.fn.init.call(note, options);\r\n note.value = value;\r\n note.text = text;\r\n note.dataItem = dataItem;\r\n note.category = category;\r\n note.series = series;\r\n\r\n note.render();\r\n },\r\n\r\n options: {\r\n icon: {\r\n visible: true,\r\n type: CIRCLE\r\n },\r\n label: {\r\n position: INSIDE,\r\n visible: true,\r\n align: CENTER,\r\n vAlign: CENTER\r\n },\r\n line: {\r\n visible: true\r\n },\r\n visible: true,\r\n position: TOP,\r\n zIndex: 2\r\n },\r\n\r\n hide: function() {\r\n this.options.visible = false;\r\n },\r\n\r\n show: function() {\r\n this.options.visible = true;\r\n },\r\n\r\n render: function() {\r\n var note = this,\r\n options = note.options,\r\n label = options.label,\r\n text = note.text,\r\n icon = options.icon,\r\n size = icon.size,\r\n box = Box2D(),\r\n marker, width, height, noteTemplate;\r\n\r\n if (options.visible) {\r\n if (defined(label) && label.visible) {\r\n if (label.template) {\r\n noteTemplate = template(label.template);\r\n text = noteTemplate({\r\n dataItem: note.dataItem,\r\n category: note.category,\r\n value: note.value,\r\n text: text,\r\n series: note.series\r\n });\r\n } else if (label.format) {\r\n text = autoFormat(label.format, text);\r\n }\r\n\r\n note.label = new TextBox(text, deepExtend({}, label));\r\n\r\n if (label.position === INSIDE && !defined(size)) {\r\n if (icon.type === CIRCLE) {\r\n size = math.max(note.label.box.width(), note.label.box.height());\r\n } else {\r\n width = note.label.box.width();\r\n height = note.label.box.height();\r\n }\r\n box.wrap(note.label.box);\r\n }\r\n }\r\n\r\n icon.width = width || size || DEFAULT_ICON_SIZE;\r\n icon.height = height || size || DEFAULT_ICON_SIZE;\r\n\r\n marker = new ShapeElement(deepExtend({}, icon));\r\n\r\n note.marker = marker;\r\n note.append(marker);\r\n\r\n if (note.label) {\r\n note.append(note.label);\r\n }\r\n\r\n marker.reflow(Box2D());\r\n note.wrapperBox = box.wrap(marker.box);\r\n }\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var note = this,\r\n options = note.options,\r\n center = targetBox.center(),\r\n wrapperBox = note.wrapperBox,\r\n length = options.line.length,\r\n position = options.position,\r\n label = note.label,\r\n marker = note.marker,\r\n lineStart, box, contentBox;\r\n\r\n // TODO: Review\r\n if (options.visible) {\r\n if (inArray(position, [LEFT, RIGHT])) {\r\n if (position === LEFT) {\r\n contentBox = wrapperBox.alignTo(targetBox, position).translate(-length, targetBox.center().y - wrapperBox.center().y);\r\n\r\n if (options.line.visible) {\r\n lineStart = [math.floor(targetBox.x1), center.y];\r\n note.linePoints = [\r\n lineStart,\r\n [math.floor(contentBox.x2), center.y]\r\n ];\r\n box = contentBox.clone().wrapPoint(lineStart);\r\n }\r\n } else {\r\n contentBox = wrapperBox.alignTo(targetBox, position).translate(length, targetBox.center().y - wrapperBox.center().y);\r\n\r\n if (options.line.visible) {\r\n lineStart = [math.floor(targetBox.x2), center.y];\r\n note.linePoints = [\r\n lineStart,\r\n [math.floor(contentBox.x1), center.y]\r\n ];\r\n box = contentBox.clone().wrapPoint(lineStart);\r\n }\r\n }\r\n } else {\r\n if (position === BOTTOM) {\r\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, length);\r\n\r\n if (options.line.visible) {\r\n lineStart = [math.floor(center.x), math.floor(targetBox.y2)];\r\n note.linePoints = [\r\n lineStart,\r\n [math.floor(center.x), math.floor(contentBox.y1)]\r\n ];\r\n box = contentBox.clone().wrapPoint(lineStart);\r\n }\r\n } else {\r\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, -length);\r\n\r\n if (options.line.visible) {\r\n lineStart = [math.floor(center.x), math.floor(targetBox.y1)];\r\n note.linePoints = [\r\n lineStart,\r\n [math.floor(center.x), math.floor(contentBox.y2)]\r\n ];\r\n box = contentBox.clone().wrapPoint(lineStart);\r\n }\r\n }\r\n }\r\n\r\n if (marker) {\r\n marker.reflow(contentBox);\r\n }\r\n\r\n if (label) {\r\n label.reflow(contentBox);\r\n if (marker) {\r\n if (options.label.position === OUTSIDE) {\r\n label.box.alignTo(marker.box, position);\r\n }\r\n label.reflow(label.box);\r\n }\r\n }\r\n note.contentBox = contentBox;\r\n note.targetBox = targetBox;\r\n note.box = box || contentBox;\r\n }\r\n },\r\n\r\n createVisual: function() {\r\n BoxElement.fn.createVisual.call(this);\r\n\r\n if (this.options.visible) {\r\n this.createLine();\r\n }\r\n },\r\n\r\n renderVisual: function() {\r\n var that = this;\r\n var options = that.options;\r\n var customVisual = options.visual;\r\n if (options.visible && customVisual) {\r\n var targetPoint = that.targetPoint;\r\n that.visual = customVisual({\r\n dataItem: that.dataItem,\r\n category: that.category,\r\n value: that.value,\r\n text: that.text,\r\n series: that.series,\r\n rect: that.targetBox.toRect(),\r\n options: {\r\n background: options.background,\r\n border: options.background,\r\n icon: options.icon,\r\n label: options.label,\r\n line: options.line,\r\n position: options.position,\r\n visible: options.visible\r\n },\r\n createVisual: function() {\r\n that.createVisual();\r\n that.renderChildren();\r\n var defaultVisual = that.visual;\r\n delete that.visual;\r\n return defaultVisual;\r\n }\r\n });\r\n that.addVisual();\r\n } else {\r\n BoxElement.fn.renderVisual.call(that);\r\n }\r\n },\r\n\r\n createLine: function() {\r\n var options = this.options.line;\r\n\r\n if (this.linePoints) {\r\n var path = draw.Path.fromPoints(this.linePoints, {\r\n stroke: {\r\n color: options.color,\r\n width: options.width,\r\n dashType: options.dashType\r\n }\r\n });\r\n\r\n alignPathToPixel(path);\r\n this.visual.append(path);\r\n }\r\n },\r\n\r\n click: function(widget, e) {\r\n var args = this.eventArgs(e);\r\n\r\n if (!widget.trigger(NOTE_CLICK, args)) {\r\n e.preventDefault();\r\n }\r\n },\r\n\r\n hover: function(widget, e) {\r\n var args = this.eventArgs(e);\r\n\r\n if (!widget.trigger(NOTE_HOVER, args)) {\r\n e.preventDefault();\r\n }\r\n },\r\n\r\n leave: function(widget) {\r\n widget._unsetActivePoint();\r\n },\r\n\r\n eventArgs: function(e) {\r\n var note = this,\r\n options = note.options;\r\n\r\n return {\r\n element: $(e.target),\r\n text: defined(options.label) ? options.label.text : \"\",\r\n dataItem: note.dataItem,\r\n series: note.series,\r\n value: note.value,\r\n category: note.category\r\n };\r\n }\r\n });\r\n\r\n var ShapeElement = BoxElement.extend({\r\n init: function(options, pointData) {\r\n this.pointData = pointData;\r\n BoxElement.fn.init.call(this, options);\r\n },\r\n\r\n options: {\r\n type: CIRCLE,\r\n align: CENTER,\r\n vAlign: CENTER\r\n },\r\n\r\n getElement: function() {\r\n var marker = this,\r\n options = marker.options,\r\n type = options.type,\r\n rotation = options.rotation,\r\n box = marker.paddingBox,\r\n element,\r\n center = box.center(),\r\n halfWidth = box.width() / 2,\r\n points,\r\n i;\r\n\r\n if (!options.visible || !marker.hasBox()) {\r\n return;\r\n }\r\n\r\n var style = marker.visualStyle();\r\n\r\n if (type === CIRCLE) {\r\n element = new draw.Circle(\r\n new geom.Circle([\r\n round(box.x1 + halfWidth, COORD_PRECISION),\r\n round(box.y1 + box.height() / 2, COORD_PRECISION)\r\n ], halfWidth),\r\n style\r\n );\r\n } else if (type === TRIANGLE) {\r\n element = draw.Path.fromPoints([\r\n [box.x1 + halfWidth, box.y1],\r\n [box.x1, box.y2],\r\n [box.x2, box.y2]\r\n ], style).close();\r\n } else if (type === CROSS) {\r\n element = new draw.MultiPath(style);\r\n\r\n element.moveTo(box.x1, box.y1).lineTo(box.x2, box.y2);\r\n element.moveTo(box.x1, box.y2).lineTo(box.x2, box.y1);\r\n } else {\r\n element = draw.Path.fromRect(box.toRect(), style);\r\n }\r\n\r\n if (rotation) {\r\n element.transform(geom.transform()\r\n .rotate(-rotation, [center.x, center.y])\r\n );\r\n }\r\n\r\n element.options.zIndex = this.options.zIndex;\r\n return element;\r\n },\r\n\r\n createElement: function() {\r\n var that = this;\r\n var customVisual = that.options.visual;\r\n var pointData = that.pointData || {};\r\n var visual;\r\n if (customVisual) {\r\n visual = customVisual({\r\n value: pointData.value,\r\n dataItem: pointData.dataItem,\r\n series: pointData.series,\r\n category: pointData.category,\r\n rect: that.paddingBox.toRect(),\r\n options: that.visualOptions(),\r\n createVisual: function() {\r\n return that.getElement();\r\n }\r\n });\r\n } else {\r\n visual = that.getElement();\r\n }\r\n\r\n return visual;\r\n },\r\n\r\n visualOptions: function() {\r\n var options = this.options;\r\n return {\r\n background: options.background,\r\n border: options.border,\r\n margin: options.margin,\r\n padding: options.padding,\r\n type: options.type,\r\n size: options.width,\r\n visible: options.visible\r\n };\r\n },\r\n\r\n createVisual: function() {\r\n this.visual = this.createElement();\r\n }\r\n });\r\n\r\n var NumericAxis = Axis.extend({\r\n init: function(seriesMin, seriesMax, options) {\r\n var axis = this,\r\n defaultOptions = axis.initDefaults(seriesMin, seriesMax, options);\r\n\r\n Axis.fn.init.call(axis, defaultOptions);\r\n },\r\n\r\n startValue: function() {\r\n return 0;\r\n },\r\n\r\n options: {\r\n type: \"numeric\",\r\n min: 0,\r\n max: 1,\r\n vertical: true,\r\n majorGridLines: {\r\n visible: true,\r\n width: 1,\r\n color: BLACK\r\n },\r\n labels: {\r\n format: \"#.####################\"\r\n },\r\n zIndex: 1\r\n },\r\n\r\n initDefaults: function(seriesMin, seriesMax, options) {\r\n var axis = this,\r\n narrowRange = options.narrowRange,\r\n autoMin = axis.autoAxisMin(seriesMin, seriesMax, narrowRange),\r\n autoMax = axis.autoAxisMax(seriesMin, seriesMax, narrowRange),\r\n majorUnit = autoMajorUnit(autoMin, autoMax),\r\n autoOptions = {\r\n majorUnit: majorUnit\r\n },\r\n userSetLimits;\r\n\r\n if (options.roundToMajorUnit !== false) {\r\n if (autoMin < 0 && remainderClose(autoMin, majorUnit, 1/3)) {\r\n autoMin -= majorUnit;\r\n }\r\n\r\n if (autoMax > 0 && remainderClose(autoMax, majorUnit, 1/3)) {\r\n autoMax += majorUnit;\r\n }\r\n }\r\n\r\n autoOptions.min = floor(autoMin, majorUnit);\r\n autoOptions.max = ceil(autoMax, majorUnit);\r\n\r\n if (options) {\r\n userSetLimits = defined(options.min) || defined(options.max);\r\n if (userSetLimits) {\r\n if (options.min === options.max) {\r\n if (options.min > 0) {\r\n options.min = 0;\r\n } else {\r\n options.max = 1;\r\n }\r\n }\r\n }\r\n\r\n if (options.majorUnit) {\r\n autoOptions.min = floor(autoOptions.min, options.majorUnit);\r\n autoOptions.max = ceil(autoOptions.max, options.majorUnit);\r\n } else if (userSetLimits) {\r\n options = deepExtend(autoOptions, options);\r\n\r\n // Determine an auto major unit after min/max have been set\r\n autoOptions.majorUnit = autoMajorUnit(options.min, options.max);\r\n }\r\n }\r\n\r\n autoOptions.minorUnit = (options.majorUnit || autoOptions.majorUnit) / 5;\r\n\r\n return deepExtend(autoOptions, options);\r\n },\r\n\r\n range: function() {\r\n var options = this.options;\r\n return { min: options.min, max: options.max };\r\n },\r\n\r\n autoAxisMax: function(min, max, narrow) {\r\n var axisMax,\r\n diff;\r\n\r\n if (!min && !max) {\r\n return 1;\r\n }\r\n\r\n if (min <= 0 && max <= 0) {\r\n max = min == max ? 0 : max;\r\n\r\n diff = math.abs((max - min) / max);\r\n if(narrow === false || (!narrow && diff > ZERO_THRESHOLD)) {\r\n return 0;\r\n }\r\n\r\n axisMax = math.min(0, max - ((min - max) / 2));\r\n } else {\r\n min = min == max ? 0 : min;\r\n axisMax = max;\r\n }\r\n\r\n return axisMax;\r\n },\r\n\r\n autoAxisMin: function(min, max, narrow) {\r\n var axisMin,\r\n diff;\r\n\r\n if (!min && !max) {\r\n return 0;\r\n }\r\n\r\n if (min >= 0 && max >= 0) {\r\n min = min == max ? 0 : min;\r\n\r\n diff = (max - min) / max;\r\n if(narrow === false || (!narrow && diff > ZERO_THRESHOLD)) {\r\n return 0;\r\n }\r\n\r\n axisMin = math.max(0, min - ((max - min) / 2));\r\n } else {\r\n max = min == max ? 0 : max;\r\n axisMin = min;\r\n }\r\n\r\n return axisMin;\r\n },\r\n\r\n getDivisions: function(stepValue) {\r\n if (stepValue === 0) {\r\n return 1;\r\n }\r\n\r\n var options = this.options,\r\n range = options.max - options.min;\r\n\r\n return math.floor(round(range / stepValue, COORD_PRECISION)) + 1;\r\n },\r\n\r\n getTickPositions: function(unit, skipUnit) {\r\n var axis = this,\r\n options = axis.options,\r\n vertical = options.vertical,\r\n reverse = options.reverse,\r\n lineBox = axis.lineBox(),\r\n lineSize = vertical ? lineBox.height() : lineBox.width(),\r\n range = options.max - options.min,\r\n scale = lineSize / range,\r\n step = unit * scale,\r\n skipStep = 0,\r\n divisions = axis.getDivisions(unit),\r\n dir = (vertical ? -1 : 1) * (reverse ? -1 : 1),\r\n startEdge = dir === 1 ? 1 : 2,\r\n pos = lineBox[(vertical ? Y : X) + startEdge],\r\n positions = [],\r\n i;\r\n\r\n if (skipUnit) {\r\n skipStep = skipUnit / unit;\r\n }\r\n\r\n for (i = 0; i < divisions; i++) {\r\n if (i % skipStep !== 0) {\r\n positions.push(round(pos, COORD_PRECISION));\r\n }\r\n\r\n pos = pos + step * dir;\r\n }\r\n\r\n return positions;\r\n },\r\n\r\n getMajorTickPositions: function() {\r\n var axis = this;\r\n\r\n return axis.getTickPositions(axis.options.majorUnit);\r\n },\r\n\r\n getMinorTickPositions: function() {\r\n var axis = this;\r\n\r\n return axis.getTickPositions(axis.options.minorUnit);\r\n },\r\n\r\n getSlot: function(a, b, limit) {\r\n var axis = this,\r\n options = axis.options,\r\n reverse = options.reverse,\r\n vertical = options.vertical,\r\n valueAxis = vertical ? Y : X,\r\n lineBox = axis.lineBox(),\r\n lineStart = lineBox[valueAxis + (reverse ? 2 : 1)],\r\n lineSize = vertical ? lineBox.height() : lineBox.width(),\r\n dir = reverse ? -1 : 1,\r\n step = dir * (lineSize / (options.max - options.min)),\r\n p1,\r\n p2,\r\n slotBox = new Box2D(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\r\n\r\n if (!defined(a)) {\r\n a = b || 0;\r\n }\r\n\r\n if (!defined(b)) {\r\n b = a || 0;\r\n }\r\n\r\n if (limit) {\r\n a = math.max(math.min(a, options.max), options.min);\r\n b = math.max(math.min(b, options.max), options.min);\r\n }\r\n\r\n if (vertical) {\r\n p1 = options.max - math.max(a, b);\r\n p2 = options.max - math.min(a, b);\r\n } else {\r\n p1 = math.min(a, b) - options.min;\r\n p2 = math.max(a, b) - options.min;\r\n }\r\n\r\n slotBox[valueAxis + 1] = math.max(math.min(lineStart + step * (reverse ? p2 : p1), COORDINATE_LIMIT), -COORDINATE_LIMIT);\r\n slotBox[valueAxis + 2] = math.max(math.min(lineStart + step * (reverse ? p1 : p2), COORDINATE_LIMIT), -COORDINATE_LIMIT);\r\n\r\n return slotBox;\r\n },\r\n\r\n getValue: function(point) {\r\n var axis = this,\r\n options = axis.options,\r\n reverse = options.reverse,\r\n vertical = options.vertical,\r\n max = options.max * 1,\r\n min = options.min * 1,\r\n valueAxis = vertical ? Y : X,\r\n lineBox = axis.lineBox(),\r\n lineStart = lineBox[valueAxis + (reverse ? 2 : 1)],\r\n lineSize = vertical ? lineBox.height() : lineBox.width(),\r\n dir = reverse ? -1 : 1,\r\n offset = dir * (point[valueAxis] - lineStart),\r\n step = (max - min) / lineSize,\r\n valueOffset = offset * step,\r\n value;\r\n\r\n if (offset < 0 || offset > lineSize) {\r\n return null;\r\n }\r\n\r\n value = vertical ?\r\n max - valueOffset :\r\n min + valueOffset;\r\n\r\n return round(value, DEFAULT_PRECISION);\r\n },\r\n\r\n translateRange: function(delta) {\r\n var axis = this,\r\n options = axis.options,\r\n lineBox = axis.lineBox(),\r\n vertical = options.vertical,\r\n reverse = options.reverse,\r\n size = vertical ? lineBox.height() : lineBox.width(),\r\n range = options.max - options.min,\r\n scale = size / range,\r\n offset = round(delta / scale, DEFAULT_PRECISION);\r\n\r\n if ((vertical || reverse) && !(vertical && reverse )) {\r\n offset = -offset;\r\n }\r\n\r\n return {\r\n min: options.min + offset,\r\n max: options.max + offset\r\n };\r\n },\r\n\r\n scaleRange: function(delta) {\r\n var axis = this,\r\n options = axis.options,\r\n offset = -delta * options.majorUnit;\r\n\r\n return {\r\n min: options.min - offset,\r\n max: options.max + offset\r\n };\r\n },\r\n\r\n labelsCount: function() {\r\n return this.getDivisions(this.options.majorUnit);\r\n },\r\n\r\n createAxisLabel: function(index, labelOptions) {\r\n var axis = this,\r\n options = axis.options,\r\n value = round(options.min + (index * options.majorUnit), DEFAULT_PRECISION),\r\n text = axis.axisLabelText(value, null, labelOptions);\r\n\r\n return new AxisLabel(value, text, index, null, labelOptions);\r\n },\r\n\r\n shouldRenderNote: function(value) {\r\n var range = this.range();\r\n return range.min <= value && value <= range.max;\r\n }\r\n });\r\n\r\n var LogarithmicAxis = Axis.extend({\r\n init: function(seriesMin, seriesMax, options) {\r\n this.options = this._initOptions(seriesMin, seriesMax, options);\r\n Axis.fn.init.call(this, options);\r\n },\r\n\r\n startValue: function() {\r\n return this.options.min;\r\n },\r\n\r\n options: {\r\n type: \"log\",\r\n majorUnit: 10,\r\n minorUnit: 1,\r\n axisCrossingValue: 1,\r\n vertical: true,\r\n majorGridLines: {\r\n visible: true,\r\n width: 1,\r\n color: BLACK\r\n },\r\n zIndex: 1\r\n },\r\n\r\n getSlot: function(a, b, limit) {\r\n var axis = this,\r\n options = axis.options,\r\n reverse = options.reverse,\r\n vertical = options.vertical,\r\n valueAxis = vertical ? Y : X,\r\n lineBox = axis.lineBox(),\r\n lineStart = lineBox[valueAxis + (reverse ? 2 : 1)],\r\n lineSize = vertical ? lineBox.height() : lineBox.width(),\r\n dir = reverse ? -1 : 1,\r\n base = options.majorUnit,\r\n logMin = axis.logMin,\r\n logMax = axis.logMax,\r\n step = dir * (lineSize / (logMax - logMin)),\r\n p1, p2,\r\n slotBox = new Box2D(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\r\n\r\n if (!defined(a)) {\r\n a = b || 1;\r\n }\r\n\r\n if (!defined(b)) {\r\n b = a || 1;\r\n }\r\n\r\n if(a <= 0 || b <= 0) {\r\n return;\r\n }\r\n\r\n if (limit) {\r\n a = math.max(math.min(a, options.max), options.min);\r\n b = math.max(math.min(b, options.max), options.min);\r\n }\r\n\r\n a = log(a, base);\r\n b = log(b, base);\r\n\r\n if (vertical) {\r\n p1 = logMax - math.max(a, b);\r\n p2 = logMax - math.min(a, b);\r\n } else {\r\n p1 = math.min(a, b) - logMin;\r\n p2 = math.max(a, b) - logMin;\r\n }\r\n\r\n slotBox[valueAxis + 1] = lineStart + step * (reverse ? p2 : p1);\r\n slotBox[valueAxis + 2] = lineStart + step * (reverse ? p1 : p2);\r\n\r\n return slotBox;\r\n },\r\n\r\n getValue: function(point) {\r\n var axis = this,\r\n options = axis.options,\r\n reverse = options.reverse,\r\n vertical = options.vertical,\r\n lineBox = axis.lineBox(),\r\n base = options.majorUnit,\r\n logMin = axis.logMin,\r\n logMax = axis.logMax,\r\n dir = vertical === reverse ? 1 : -1,\r\n startEdge = dir === 1 ? 1 : 2,\r\n lineSize = vertical ? lineBox.height() : lineBox.width(),\r\n step = ((logMax - logMin) / lineSize),\r\n valueAxis = vertical ? Y : X,\r\n lineStart = lineBox[valueAxis + startEdge],\r\n offset = dir * (point[valueAxis] - lineStart),\r\n valueOffset = offset * step,\r\n value;\r\n\r\n if (offset < 0 || offset > lineSize) {\r\n return null;\r\n }\r\n\r\n value = logMin + valueOffset;\r\n\r\n return round(math.pow(base, value), DEFAULT_PRECISION);\r\n },\r\n\r\n range: function() {\r\n var options = this.options;\r\n return { min: options.min, max: options.max };\r\n },\r\n\r\n scaleRange: function(delta) {\r\n var axis = this,\r\n options = axis.options,\r\n base = options.majorUnit,\r\n offset = -delta;\r\n\r\n return {\r\n min: math.pow(base, axis.logMin - offset),\r\n max: math.pow(base, axis.logMax + offset)\r\n };\r\n },\r\n\r\n translateRange: function(delta) {\r\n var axis = this,\r\n options = axis.options,\r\n base = options.majorUnit,\r\n lineBox = axis.lineBox(),\r\n vertical = options.vertical,\r\n reverse = options.reverse,\r\n size = vertical ? lineBox.height() : lineBox.width(),\r\n logMin = axis.logMin,\r\n logMax = axis.logMax,\r\n scale = size / (axis.logMax - axis.logMin),\r\n offset = round(delta / scale, DEFAULT_PRECISION);\r\n\r\n if ((vertical || reverse) && !(vertical && reverse )) {\r\n offset = -offset;\r\n }\r\n\r\n return {\r\n min: math.pow(base, axis.logMin + offset),\r\n max: math.pow(base, axis.logMax + offset)\r\n };\r\n },\r\n\r\n labelsCount: function() {\r\n var axis = this,\r\n floorMax = math.floor(axis.logMax),\r\n count = math.floor(floorMax - axis.logMin) + 1;\r\n\r\n return count;\r\n },\r\n\r\n getMajorTickPositions: function() {\r\n var axis = this,\r\n ticks = [];\r\n\r\n axis.traverseMajorTicksPositions(function(position) {\r\n ticks.push(position);\r\n }, {step: 1, skip: 0});\r\n return ticks;\r\n },\r\n\r\n createTicks: function(lineGroup) {\r\n var axis = this,\r\n ticks = [],\r\n options = axis.options,\r\n lineBox = axis.lineBox(),\r\n mirror = options.labels.mirror,\r\n majorTicks = options.majorTicks,\r\n minorTicks = options.minorTicks,\r\n tickLineOptions= {\r\n // TODO\r\n // _alignLines: options._alignLines,\r\n vertical: options.vertical\r\n },\r\n start, end;\r\n\r\n function render(tickPosition, tickOptions) {\r\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\r\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\r\n tickLineOptions.position = tickPosition;\r\n\r\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\r\n }\r\n\r\n if (majorTicks.visible) {\r\n axis.traverseMajorTicksPositions(render, majorTicks);\r\n }\r\n\r\n if (minorTicks.visible) {\r\n axis.traverseMinorTicksPositions(render, minorTicks);\r\n }\r\n\r\n return ticks;\r\n },\r\n\r\n createGridLines: function(altAxis) {\r\n var axis = this,\r\n options = axis.options,\r\n axisLineVisible = altAxis.options.line.visible,\r\n majorGridLines = options.majorGridLines,\r\n minorGridLines = options.minorGridLines,\r\n vertical = options.vertical,\r\n lineBox = altAxis.lineBox(),\r\n lineOptions = {\r\n lineStart: lineBox[vertical ? \"x1\" : \"y1\"],\r\n lineEnd: lineBox[vertical ? \"x2\" : \"y2\"],\r\n vertical: vertical\r\n },\r\n pos, majorTicks = [];\r\n\r\n var container = this.gridLinesVisual();\r\n function render(tickPosition, gridLine) {\r\n if (!inArray(tickPosition, majorTicks)) {\r\n lineOptions.position = tickPosition;\r\n container.append(createAxisGridLine(lineOptions, gridLine));\r\n\r\n majorTicks.push(tickPosition);\r\n }\r\n }\r\n\r\n if (majorGridLines.visible) {\r\n axis.traverseMajorTicksPositions(render, majorGridLines);\r\n }\r\n\r\n if (minorGridLines.visible) {\r\n axis.traverseMinorTicksPositions(render, minorGridLines);\r\n }\r\n\r\n return container.children;\r\n },\r\n\r\n traverseMajorTicksPositions: function(callback, tickOptions) {\r\n var axis = this,\r\n lineOptions = axis._lineOptions(),\r\n lineStart = lineOptions.lineStart,\r\n step = lineOptions.step,\r\n logMin = axis.logMin,\r\n logMax = axis.logMax,\r\n power,\r\n position;\r\n\r\n for (power = math.ceil(logMin) + tickOptions.skip; power <= logMax; power+= tickOptions.step) {\r\n position = round(lineStart + step * (power - logMin), DEFAULT_PRECISION);\r\n callback(position, tickOptions);\r\n }\r\n },\r\n\r\n traverseMinorTicksPositions: function(callback, tickOptions) {\r\n var axis = this,\r\n options = axis.options,\r\n lineOptions = axis._lineOptions(),\r\n lineStart = lineOptions.lineStart,\r\n lineStep = lineOptions.step,\r\n base = options.majorUnit,\r\n logMin = axis.logMin,\r\n logMax = axis.logMax,\r\n start = math.floor(logMin),\r\n max = options.max,\r\n min = options.min,\r\n minorUnit = options.minorUnit,\r\n power,\r\n value,\r\n position,\r\n minorOptions;\r\n\r\n for (power = start; power < logMax; power++) {\r\n minorOptions = axis._minorIntervalOptions(power);\r\n for(var idx = tickOptions.skip; idx < minorUnit; idx+= tickOptions.step) {\r\n value = minorOptions.value + idx * minorOptions.minorStep;\r\n if (value > max) {\r\n break;\r\n }\r\n if (value >= min) {\r\n position = round(lineStart + lineStep * (log(value, base) - logMin), DEFAULT_PRECISION);\r\n callback(position, tickOptions);\r\n }\r\n }\r\n }\r\n },\r\n\r\n createAxisLabel: function(index, labelOptions) {\r\n var axis = this,\r\n options = axis.options,\r\n power = math.ceil(axis.logMin + index),\r\n value = Math.pow(options.majorUnit, power),\r\n text = axis.axisLabelText(value, null, labelOptions);\r\n\r\n return new AxisLabel(value, text, index, null, labelOptions);\r\n },\r\n\r\n shouldRenderNote: function(value) {\r\n var range = this.range();\r\n return range.min <= value && value <= range.max;\r\n },\r\n\r\n _throwNegativeValuesError: function() {\r\n throw new Error(\"Non positive values cannot be used for a logarithmic axis\");\r\n },\r\n\r\n _initOptions: function(seriesMin, seriesMax, options) {\r\n var axis = this,\r\n axisOptions = deepExtend({}, axis.options, {min: seriesMin, max: seriesMax}, options),\r\n min = axisOptions.min,\r\n max = axisOptions.max,\r\n base = axisOptions.majorUnit,\r\n logMaxRemainder;\r\n\r\n if (axisOptions.axisCrossingValue <= 0) {\r\n axis._throwNegativeValuesError();\r\n }\r\n\r\n if (!defined(options.max)) {\r\n logMaxRemainder = round(log(max, base), DEFAULT_PRECISION) % 1;\r\n if (max <= 0) {\r\n max = base;\r\n } else if (logMaxRemainder !== 0 && (logMaxRemainder < 0.3 || logMaxRemainder > 0.9)) {\r\n max = math.pow(base, log(max, base) + 0.2);\r\n } else {\r\n max = math.pow(base, math.ceil(log(max, base)));\r\n }\r\n } else if (options.max <= 0) {\r\n axis._throwNegativeValuesError();\r\n }\r\n\r\n if (!defined(options.min)) {\r\n if (min <= 0) {\r\n min = max <= 1 ? math.pow(base, -2) : 1;\r\n } else if (!options.narrowRange) {\r\n min = math.pow(base, math.floor(log(min, base)));\r\n }\r\n } else if (options.min <= 0) {\r\n axis._throwNegativeValuesError();\r\n }\r\n\r\n axis.logMin = round(log(min, base), DEFAULT_PRECISION);\r\n axis.logMax = round(log(max, base), DEFAULT_PRECISION);\r\n axisOptions.max = max;\r\n axisOptions.min = min;\r\n axisOptions.minorUnit = options.minorUnit || round(base - 1, DEFAULT_PRECISION);\r\n\r\n return axisOptions;\r\n },\r\n\r\n _minorIntervalOptions: function(power) {\r\n var base = this.options.majorUnit,\r\n value = math.pow(base, power),\r\n nextValue = math.pow(base, power + 1),\r\n difference = nextValue - value,\r\n minorStep = difference / this.options.minorUnit;\r\n return {\r\n value: value,\r\n minorStep: minorStep\r\n };\r\n },\r\n\r\n _lineOptions: function() {\r\n var axis = this,\r\n options = axis.options,\r\n reverse = options.reverse,\r\n vertical = options.vertical,\r\n valueAxis = vertical ? Y : X,\r\n lineBox = axis.lineBox(),\r\n dir = vertical === reverse ? 1 : -1,\r\n startEdge = dir === 1 ? 1 : 2,\r\n lineSize = vertical ? lineBox.height() : lineBox.width(),\r\n step = dir * (lineSize / (axis.logMax - axis.logMin)),\r\n lineStart = lineBox[valueAxis + startEdge];\r\n\r\n return {\r\n step: step,\r\n lineStart: lineStart,\r\n lineBox: lineBox\r\n };\r\n }\r\n });\r\n\r\n dataviz.Gradients = {\r\n glass: {\r\n type: LINEAR,\r\n rotation: 0,\r\n stops: [{\r\n offset: 0,\r\n color: WHITE,\r\n opacity: 0\r\n }, {\r\n offset: 0.25,\r\n color: WHITE,\r\n opacity: 0.3\r\n }, {\r\n offset: 1,\r\n color: WHITE,\r\n opacity: 0\r\n }]\r\n },\r\n sharpBevel: {\r\n type: RADIAL,\r\n stops: [{\r\n offset: 0,\r\n color: WHITE,\r\n opacity: 0.55\r\n }, {\r\n offset: 0.65,\r\n color: WHITE,\r\n opacity: 0\r\n }, {\r\n offset: 0.95,\r\n color: WHITE,\r\n opacity: 0.25\r\n }]\r\n },\r\n roundedBevel: {\r\n type: RADIAL,\r\n stops: [{\r\n offset: 0.33,\r\n color: WHITE,\r\n opacity: 0.06\r\n }, {\r\n offset: 0.83,\r\n color: WHITE,\r\n opacity: 0.2\r\n }, {\r\n offset: 0.95,\r\n color: WHITE,\r\n opacity: 0\r\n }]\r\n },\r\n roundedGlass: {\r\n type: RADIAL,\r\n supportVML: false,\r\n stops: [{\r\n offset: 0,\r\n color: WHITE,\r\n opacity: 0\r\n }, {\r\n offset: 0.5,\r\n color: WHITE,\r\n opacity: 0.3\r\n }, {\r\n offset: 0.99,\r\n color: WHITE,\r\n opacity: 0\r\n }]\r\n },\r\n sharpGlass: {\r\n type: RADIAL,\r\n supportVML: false,\r\n stops: [{\r\n offset: 0,\r\n color: WHITE,\r\n opacity: 0.2\r\n }, {\r\n offset: 0.15,\r\n color: WHITE,\r\n opacity: 0.15\r\n }, {\r\n offset: 0.17,\r\n color: WHITE,\r\n opacity: 0.35\r\n }, {\r\n offset: 0.85,\r\n color: WHITE,\r\n opacity: 0.05\r\n }, {\r\n offset: 0.87,\r\n color: WHITE,\r\n opacity: 0.15\r\n }, {\r\n offset: 0.99,\r\n color: WHITE,\r\n opacity: 0\r\n }]\r\n }\r\n };\r\n\r\n // Helper functions========================================================\r\n var ExportMixin = {\r\n extend: function(proto, skipLegacy) {\r\n if (!proto.exportVisual) {\r\n throw new Error(\"Mixin target has no exportVisual method defined.\");\r\n }\r\n\r\n proto.exportSVG = this.exportSVG;\r\n proto.exportImage = this.exportImage;\r\n proto.exportPDF = this.exportPDF;\r\n\r\n if (!skipLegacy) {\r\n proto.svg = this.svg;\r\n proto.imageDataURL = this.imageDataURL;\r\n }\r\n },\r\n\r\n exportSVG: function(options) {\r\n return draw.exportSVG(this.exportVisual(), options);\r\n },\r\n\r\n exportImage: function(options) {\r\n return draw.exportImage(this.exportVisual(), options);\r\n },\r\n\r\n exportPDF: function(options) {\r\n return draw.exportPDF(this.exportVisual(), options);\r\n },\r\n\r\n svg: function() {\r\n if (draw.svg.Surface) {\r\n return draw.svg._exportGroup(this.exportVisual());\r\n } else {\r\n throw new Error(\"SVG Export failed. Unable to export instantiate kendo.drawing.svg.Surface\");\r\n }\r\n },\r\n\r\n imageDataURL: function() {\r\n if (!kendo.support.canvas) {\r\n return null;\r\n }\r\n\r\n if (draw.canvas.Surface) {\r\n var container = $(\"<div />\").css({\r\n display: \"none\",\r\n width: this.element.width(),\r\n height: this.element.height()\r\n }).appendTo(document.body);\r\n\r\n var surface = new draw.canvas.Surface(container);\r\n surface.draw(this.exportVisual());\r\n var image = surface._rootElement.toDataURL();\r\n\r\n surface.destroy();\r\n container.remove();\r\n\r\n return image;\r\n } else {\r\n throw new Error(\"Image Export failed. Unable to export instantiate kendo.drawing.canvas.Surface\");\r\n }\r\n }\r\n };\r\n\r\n function autoMajorUnit(min, max) {\r\n var diff = round(max - min, DEFAULT_PRECISION - 1);\r\n\r\n if (diff === 0) {\r\n if (max === 0) {\r\n return 0.1;\r\n }\r\n\r\n diff = math.abs(max);\r\n }\r\n\r\n var scale = math.pow(10, math.floor(math.log(diff) / math.log(10))),\r\n relativeValue = round((diff / scale), DEFAULT_PRECISION),\r\n scaleMultiplier = 1;\r\n\r\n if (relativeValue < 1.904762) {\r\n scaleMultiplier = 0.2;\r\n } else if (relativeValue < 4.761904) {\r\n scaleMultiplier = 0.5;\r\n } else if (relativeValue < 9.523809) {\r\n scaleMultiplier = 1;\r\n } else {\r\n scaleMultiplier = 2;\r\n }\r\n\r\n return round(scale * scaleMultiplier, DEFAULT_PRECISION);\r\n }\r\n\r\n function getHash(object) {\r\n var hash = [];\r\n for (var key in object) {\r\n hash.push(key + object[key]);\r\n }\r\n\r\n return hash.sort().join(\" \");\r\n }\r\n\r\n // TODO: Replace with Point2D.rotate\r\n function rotatePoint(x, y, cx, cy, angle) {\r\n var theta = angle * DEG_TO_RAD;\r\n\r\n return new Point2D(\r\n cx + (x - cx) * math.cos(theta) + (y - cy) * math.sin(theta),\r\n cy - (x - cx) * math.sin(theta) + (y - cy) * math.cos(theta)\r\n );\r\n }\r\n\r\n function boxDiff(r, s) {\r\n if (r.x1 == s.x1 && r.y1 == s.y1 && r.x2 == s.x2 && r.y2 == s.y2) {\r\n return s;\r\n }\r\n\r\n var a = math.min(r.x1, s.x1),\r\n b = math.max(r.x1, s.x1),\r\n c = math.min(r.x2, s.x2),\r\n d = math.max(r.x2, s.x2),\r\n e = math.min(r.y1, s.y1),\r\n f = math.max(r.y1, s.y1),\r\n g = math.min(r.y2, s.y2),\r\n h = math.max(r.y2, s.y2),\r\n result = [];\r\n\r\n // X = intersection, 0-7 = possible difference areas\r\n // h +-+-+-+\r\n // . |5|6|7|\r\n // g +-+-+-+\r\n // . |3|X|4|\r\n // f +-+-+-+\r\n // . |0|1|2|\r\n // e +-+-+-+\r\n // . a b c d\r\n\r\n // we'll always have rectangles 1, 3, 4 and 6\r\n result[0] = Box2D(b, e, c, f);\r\n result[1] = Box2D(a, f, b, g);\r\n result[2] = Box2D(c, f, d, g);\r\n result[3] = Box2D(b, g, c, h);\r\n\r\n // decide which corners\r\n if ( r.x1 == a && r.y1 == e || s.x1 == a && s.y1 == e )\r\n { // corners 0 and 7\r\n result[4] = Box2D(a, e, b, f);\r\n result[5] = Box2D(c, g, d, h);\r\n }\r\n else\r\n { // corners 2 and 5\r\n result[4] = Box2D(c, e, d, f);\r\n result[5] = Box2D(a, g, b, h);\r\n }\r\n\r\n return $.grep(result, function(box) {\r\n return box.height() > 0 && box.width() > 0;\r\n })[0];\r\n }\r\n\r\n function inArray(value, array) {\r\n return indexOf(value, array) != -1;\r\n }\r\n\r\n function ceil(value, step) {\r\n return round(math.ceil(value / step) * step, DEFAULT_PRECISION);\r\n }\r\n\r\n function floor(value, step) {\r\n return round(math.floor(value / step) * step, DEFAULT_PRECISION);\r\n }\r\n\r\n function round(value, precision) {\r\n var power = math.pow(10, precision || 0);\r\n return math.round(value * power) / power;\r\n }\r\n\r\n function log(y, x) {\r\n return math.log(y) / math.log(x);\r\n }\r\n\r\n function remainderClose(value, divisor, ratio) {\r\n var remainder = round(math.abs(value % divisor), DEFAULT_PRECISION),\r\n threshold = divisor * (1 - ratio);\r\n\r\n return remainder === 0 || remainder > threshold;\r\n }\r\n\r\n function interpolateValue(start, end, progress) {\r\n return round(start + (end - start) * progress, COORD_PRECISION);\r\n }\r\n\r\n function numericComparer(a, b) {\r\n return a - b;\r\n }\r\n\r\n function updateArray(arr, prop, value) {\r\n var i,\r\n length = arr.length;\r\n\r\n for(i = 0; i < length; i++) {\r\n arr[i][prop] = value;\r\n }\r\n }\r\n\r\n function autoFormat(format, value) {\r\n if (format.match(FORMAT_REGEX)) {\r\n return kendo.format.apply(this, arguments);\r\n }\r\n\r\n return kendo.toString(value, format);\r\n }\r\n\r\n function detached(element) {\r\n var parent = element.parentNode;\r\n\r\n while(parent && parent.parentNode) {\r\n parent = parent.parentNode;\r\n }\r\n\r\n return parent !== doc;\r\n }\r\n\r\n function clockwise(v1, v2) {\r\n // True if v2 is clockwise of v1\r\n // assuming angles grow in clock-wise direction\r\n // (as in the pie and radar charts)\r\n return -v1.x * v2.y + v1.y * v2.x < 0;\r\n }\r\n\r\n function dateComparer(a, b) {\r\n if (a && b) {\r\n return a.getTime() - b.getTime();\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n var CurveProcessor = function(closed){\r\n this.closed = closed;\r\n };\r\n\r\n CurveProcessor.prototype = CurveProcessor.fn = {\r\n WEIGHT: 0.333,\r\n EXTREMUM_ALLOWED_DEVIATION: 0.01,\r\n\r\n process: function(dataPoints) {\r\n var that = this,\r\n closed = that.closed,\r\n points = dataPoints.slice(0),\r\n length = points.length,\r\n segments = [],\r\n p0,p1,p2,\r\n controlPoints,\r\n initialControlPoint,\r\n lastControlPoint,\r\n tangent;\r\n\r\n if (length > 2) {\r\n that.removeDuplicates(0, points);\r\n length = points.length;\r\n }\r\n\r\n if (length < 2 || (length == 2 && points[0].equals(points[1]))) {\r\n return segments;\r\n }\r\n\r\n p0 = points[0]; p1 = points[1]; p2 = points[2];\r\n segments.push(new draw.Segment(p0));\r\n\r\n while (p0.equals(points[length - 1])) {\r\n closed = true;\r\n points.pop();\r\n length--;\r\n }\r\n\r\n if (length == 2) {\r\n tangent = that.tangent(p0,p1, X,Y);\r\n\r\n last(segments).controlOut(\r\n that.firstControlPoint(tangent, p0, p1, X, Y)\r\n );\r\n\r\n segments.push(new draw.Segment(\r\n p1,\r\n that.secondControlPoint(tangent, p0, p1, X, Y)\r\n ));\r\n\r\n return segments;\r\n }\r\n\r\n if (closed) {\r\n p0 = points[length - 1]; p1 = points[0]; p2 = points[1];\r\n controlPoints = that.controlPoints(p0, p1, p2);\r\n initialControlPoint = controlPoints[1];\r\n lastControlPoint = controlPoints[0];\r\n } else {\r\n tangent = that.tangent(p0, p1, X,Y);\r\n initialControlPoint = that.firstControlPoint(tangent, p0, p1, X, Y);\r\n }\r\n\r\n var cp0 = initialControlPoint;\r\n for (var idx = 0; idx <= length - 3; idx++) {\r\n that.removeDuplicates(idx, points);\r\n length = points.length;\r\n if (idx + 3 <= length) {\r\n p0 = points[idx]; p1 = points[idx + 1]; p2 = points[idx + 2];\r\n controlPoints = that.controlPoints(p0,p1,p2);\r\n\r\n last(segments).controlOut(cp0);\r\n cp0 = controlPoints[1];\r\n\r\n var cp1 = controlPoints[0];\r\n segments.push(new draw.Segment(p1, cp1));\r\n }\r\n }\r\n\r\n if (closed) {\r\n p0 = points[length - 2]; p1 = points[length - 1]; p2 = points[0];\r\n controlPoints = that.controlPoints(p0, p1, p2);\r\n\r\n last(segments).controlOut(cp0);\r\n segments.push(new draw.Segment(\r\n p1,\r\n controlPoints[0]\r\n ));\r\n\r\n last(segments).controlOut(controlPoints[1]);\r\n segments.push(new draw.Segment(\r\n p2,\r\n lastControlPoint\r\n ));\r\n } else {\r\n tangent = that.tangent(p1, p2, X, Y);\r\n\r\n last(segments).controlOut(cp0);\r\n segments.push(new draw.Segment(\r\n p2,\r\n that.secondControlPoint(tangent, p1, p2, X, Y)\r\n ));\r\n }\r\n\r\n return segments;\r\n },\r\n\r\n removeDuplicates: function(idx, points) {\r\n while (points[idx].equals(points[idx + 1]) || points[idx + 1].equals(points[idx + 2])) {\r\n points.splice(idx + 1, 1);\r\n }\r\n },\r\n\r\n invertAxis: function(p0,p1,p2){\r\n var that = this,\r\n fn, y2,\r\n invertAxis = false;\r\n\r\n if(p0.x === p1.x){\r\n invertAxis = true;\r\n } else if (p1.x === p2.x) {\r\n if ((p1.y < p2.y && p0.y <= p1.y) || (p2.y < p1.y && p1.y <= p0.y)) {\r\n invertAxis = true;\r\n }\r\n } else {\r\n fn = that.lineFunction(p0,p1);\r\n y2 = that.calculateFunction(fn, p2.x);\r\n if (!(p0.y <= p1.y && p2.y <= y2) &&\r\n !(p1.y <= p0.y && p2.y >= y2)) {\r\n invertAxis = true;\r\n }\r\n }\r\n\r\n return invertAxis;\r\n },\r\n\r\n isLine: function(p0,p1,p2) {\r\n var that = this,\r\n fn = that.lineFunction(p0,p1),\r\n y2 = that.calculateFunction(fn, p2.x);\r\n\r\n return (p0.x == p1.x && p1.x == p2.x) || round(y2,1) === round(p2.y,1);\r\n },\r\n\r\n lineFunction: function(p1, p2) {\r\n var a = (p2.y - p1.y) / (p2.x - p1.x),\r\n b = p1.y - a * p1.x;\r\n return [b,a];\r\n },\r\n\r\n controlPoints: function(p0,p1,p2) {\r\n var that = this,\r\n xField = X,\r\n yField = Y,\r\n restrict = false,\r\n switchOrientation = false,\r\n tangent,\r\n monotonic,\r\n firstControlPoint,\r\n secondControlPoint,\r\n allowedDeviation = that.EXTREMUM_ALLOWED_DEVIATION;\r\n\r\n if (that.isLine(p0,p1,p2)) {\r\n tangent = that.tangent(p0,p1, X,Y);\r\n } else {\r\n monotonic = {\r\n x: that.isMonotonicByField(p0,p1,p2,X),\r\n y: that.isMonotonicByField(p0,p1,p2,Y)\r\n };\r\n\r\n if (monotonic.x && monotonic.y) {\r\n tangent = that.tangent(p0,p2, X, Y);\r\n restrict = true;\r\n } else {\r\n if (that.invertAxis(p0,p1,p2)) {\r\n xField = Y;\r\n yField = X;\r\n }\r\n\r\n if (monotonic[xField]) {\r\n tangent = 0;\r\n } else {\r\n var sign;\r\n if ((p2[yField] < p0[yField] && p0[yField] <= p1[yField]) ||\r\n (p0[yField] < p2[yField] && p1[yField] <= p0[yField])) {\r\n sign = that.sign((p2[yField] - p0[yField]) * (p1[xField] - p0[xField]));\r\n } else {\r\n sign = -that.sign((p2[xField] - p0[xField]) * (p1[yField] - p0[yField]));\r\n }\r\n\r\n tangent = allowedDeviation * sign;\r\n switchOrientation = true;\r\n }\r\n }\r\n }\r\n\r\n secondControlPoint = that.secondControlPoint(tangent, p0, p1, xField, yField);\r\n\r\n if (switchOrientation) {\r\n var oldXField = xField;\r\n xField = yField;\r\n yField = oldXField;\r\n }\r\n\r\n firstControlPoint = that.firstControlPoint(tangent, p1, p2, xField, yField);\r\n\r\n if (restrict) {\r\n that.restrictControlPoint(p0, p1, secondControlPoint, tangent);\r\n that.restrictControlPoint(p1, p2, firstControlPoint, tangent);\r\n }\r\n\r\n return [secondControlPoint, firstControlPoint];\r\n },\r\n\r\n sign: function(x){\r\n return x <= 0 ? -1 : 1;\r\n },\r\n\r\n restrictControlPoint: function(p1,p2, cp, tangent) {\r\n if (p1.y < p2.y) {\r\n if (p2.y < cp.y) {\r\n cp.x = p1.x + (p2.y - p1.y) / tangent;\r\n cp.y = p2.y;\r\n } else if (cp.y < p1.y) {\r\n cp.x = p2.x - (p2.y - p1.y) / tangent;\r\n cp.y = p1.y;\r\n }\r\n } else {\r\n if (cp.y < p2.y) {\r\n cp.x = p1.x - (p1.y - p2.y) / tangent;\r\n cp.y = p2.y;\r\n } else if (p1.y < cp.y) {\r\n cp.x = p2.x + (p1.y - p2.y) / tangent;\r\n cp.y = p1.y;\r\n }\r\n }\r\n },\r\n\r\n tangent: function(p0,p1, xField, yField) {\r\n var tangent,\r\n x = p1[xField] - p0[xField],\r\n y = p1[yField] - p0[yField];\r\n if (x === 0) {\r\n tangent = 0;\r\n } else {\r\n tangent = y/x;\r\n }\r\n\r\n return tangent;\r\n },\r\n\r\n isMonotonicByField: function(p0,p1,p2,field) {\r\n return (p2[field] > p1[field] && p1[field] > p0[field]) ||\r\n (p2[field] < p1[field] && p1[field] < p0[field]);\r\n },\r\n\r\n firstControlPoint: function(tangent, p0,p3, xField, yField) {\r\n var that = this,\r\n t1 = p0[xField],\r\n t2 = p3[xField],\r\n distance = (t2 - t1) * that.WEIGHT;\r\n\r\n return that.point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\r\n },\r\n\r\n secondControlPoint: function(tangent, p0,p3, xField, yField) {\r\n var that = this,\r\n t1 = p0[xField],\r\n t2 = p3[xField],\r\n distance = (t2 - t1) * that.WEIGHT;\r\n\r\n return that.point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\r\n },\r\n\r\n point: function (xValue, yValue, xField, yField) {\r\n var controlPoint = new geom.Point();\r\n controlPoint[xField] = xValue;\r\n controlPoint[yField] = yValue;\r\n\r\n return controlPoint;\r\n },\r\n\r\n calculateFunction: function(fn,x) {\r\n var result = 0,\r\n length = fn.length;\r\n for (var i = 0; i < length; i++) {\r\n result += Math.pow(x,i) * fn[i];\r\n }\r\n return result;\r\n }\r\n };\r\n\r\n function mwDelta(e) {\r\n var origEvent = e.originalEvent,\r\n delta = 0;\r\n\r\n if (origEvent.wheelDelta) {\r\n delta = -origEvent.wheelDelta / 120;\r\n delta = delta > 0 ? math.ceil(delta) : math.floor(delta);\r\n }\r\n\r\n if (origEvent.detail) {\r\n delta = round(origEvent.detail / 3);\r\n }\r\n\r\n return delta;\r\n }\r\n\r\n function decodeEntities(text) {\r\n if (!text || !text.indexOf || text.indexOf(\"&\") < 0) {\r\n return text;\r\n } else {\r\n var element = decodeEntities._element;\r\n element.innerHTML = text;\r\n return element.textContent || element.innerText;\r\n }\r\n }\r\n\r\n function alignPathToPixel(path) {\r\n if (!kendo.support.vml) {\r\n for (var i = 0; i < path.segments.length; i++) {\r\n path.segments[i].anchor().round(0).translate(0.5, 0.5);\r\n }\r\n }\r\n\r\n return path;\r\n }\r\n\r\n function innerRadialStops(options) {\r\n var gradient = this,\r\n stops = options.stops,\r\n usedSpace = ((options.innerRadius / options.radius) * 100),\r\n i,\r\n length = stops.length,\r\n currentStop,\r\n currentStops = [];\r\n\r\n for (i = 0; i < length; i++) {\r\n currentStop = deepExtend({}, stops[i]);\r\n currentStop.offset = (currentStop.offset * (100 - usedSpace) + usedSpace) / 100;\r\n currentStops.push(currentStop);\r\n }\r\n\r\n return currentStops;\r\n }\r\n\r\n function rectToBox(rect) {\r\n var origin = rect.origin;\r\n var bottomRight = rect.bottomRight();\r\n return new Box2D(origin.x, origin.y, bottomRight.x, bottomRight.y);\r\n }\r\n\r\n decodeEntities._element = document.createElement(\"span\");\r\n\r\n // Exports ================================================================\r\n deepExtend(kendo.dataviz, {\r\n AXIS_LABEL_CLICK: AXIS_LABEL_CLICK,\r\n COORD_PRECISION: COORD_PRECISION,\r\n DEFAULT_PRECISION: DEFAULT_PRECISION,\r\n DEFAULT_WIDTH: DEFAULT_WIDTH,\r\n DEFAULT_HEIGHT: DEFAULT_HEIGHT,\r\n DEFAULT_FONT: DEFAULT_FONT,\r\n INITIAL_ANIMATION_DURATION: INITIAL_ANIMATION_DURATION,\r\n NOTE_CLICK: NOTE_CLICK,\r\n NOTE_HOVER: NOTE_HOVER,\r\n CLIP: CLIP,\r\n\r\n Axis: Axis,\r\n AxisLabel: AxisLabel,\r\n Box2D: Box2D,\r\n BoxElement: BoxElement,\r\n ChartElement: ChartElement,\r\n CurveProcessor: CurveProcessor,\r\n ExportMixin: ExportMixin,\r\n FloatElement: FloatElement,\r\n LogarithmicAxis: LogarithmicAxis,\r\n Note: Note,\r\n NumericAxis: NumericAxis,\r\n Point2D: Point2D,\r\n Ring: Ring,\r\n RootElement: RootElement,\r\n Sector: Sector,\r\n ShapeBuilder: ShapeBuilder,\r\n ShapeElement: ShapeElement,\r\n Text: Text,\r\n TextBox: TextBox,\r\n Title: Title,\r\n\r\n alignPathToPixel: alignPathToPixel,\r\n autoFormat: autoFormat,\r\n autoMajorUnit: autoMajorUnit,\r\n boxDiff: boxDiff,\r\n dateComparer: dateComparer,\r\n decodeEntities: decodeEntities,\r\n getSpacing: getSpacing,\r\n inArray: inArray,\r\n interpolateValue: interpolateValue,\r\n mwDelta: mwDelta,\r\n rectToBox: rectToBox,\r\n rotatePoint: rotatePoint,\r\n round: round,\r\n ceil: ceil,\r\n floor: floor\r\n });\r\n\r\n})(window.kendo.jQuery);\r\n\r\n\r\n\r\n(function ($) {\r\n\r\n // Imports ================================================================\r\n var kendo = window.kendo,\r\n ui = kendo.dataviz.ui,\r\n deepExtend = kendo.deepExtend;\r\n\r\n // Constants ==============================================================\r\n var BAR_GAP = 1.5,\r\n BAR_SPACING = 0.4,\r\n BLACK = \"#000\",\r\n SANS = \"Arial,Helvetica,sans-serif\",\r\n SANS11 = \"11px \" + SANS,\r\n SANS12 = \"12px \" + SANS,\r\n SANS16 = \"16px \" + SANS,\r\n WHITE = \"#fff\";\r\n\r\n var chartBaseTheme = {\r\n title: {\r\n font: SANS16\r\n },\r\n legend: {\r\n labels: {\r\n font: SANS12\r\n }\r\n },\r\n seriesDefaults: {\r\n visible: true,\r\n labels: {\r\n font: SANS11\r\n },\r\n donut: {\r\n margin: 1\r\n },\r\n line: {\r\n width: 2\r\n },\r\n vericalLine: {\r\n width: 2\r\n },\r\n scatterLine: {\r\n width: 1\r\n },\r\n area: {\r\n opacity: 0.4,\r\n markers: {\r\n visible: false,\r\n size: 6\r\n },\r\n highlight: {\r\n markers: {\r\n border: {\r\n color: \"#fff\",\r\n opacity: 1,\r\n width: 1\r\n }\r\n }\r\n },\r\n line: {\r\n opacity: 1,\r\n width: 0\r\n }\r\n },\r\n verticalArea: {\r\n opacity: 0.4,\r\n markers: {\r\n visible: false,\r\n size: 6\r\n },\r\n line: {\r\n opacity: 1,\r\n width: 0\r\n }\r\n },\r\n radarLine: {\r\n width: 2,\r\n markers: {\r\n visible: false\r\n }\r\n },\r\n radarArea: {\r\n opacity: 0.5,\r\n markers: {\r\n visible: false,\r\n size: 6\r\n },\r\n line: {\r\n opacity: 1,\r\n width: 0\r\n }\r\n },\r\n candlestick: {\r\n line: {\r\n width: 1,\r\n color: BLACK\r\n },\r\n border: {\r\n width: 1,\r\n _brightness: 0.8\r\n },\r\n gap: 1,\r\n spacing: 0.3,\r\n downColor: WHITE,\r\n highlight: {\r\n line: {\r\n width: 2\r\n },\r\n border: {\r\n width: 2,\r\n opacity: 1\r\n }\r\n }\r\n },\r\n ohlc: {\r\n line: {\r\n width: 1\r\n },\r\n gap: 1,\r\n spacing: 0.3,\r\n highlight: {\r\n line: {\r\n width: 3,\r\n opacity: 1\r\n }\r\n }\r\n },\r\n bubble: {\r\n opacity: 0.6,\r\n border: {\r\n width: 0\r\n },\r\n labels: {\r\n background: \"transparent\"\r\n }\r\n },\r\n bar: {\r\n gap: BAR_GAP,\r\n spacing: BAR_SPACING\r\n },\r\n column: {\r\n gap: BAR_GAP,\r\n spacing: BAR_SPACING\r\n },\r\n rangeColumn: {\r\n gap: BAR_GAP,\r\n spacing: BAR_SPACING\r\n },\r\n rangeBar: {\r\n gap: BAR_GAP,\r\n spacing: BAR_SPACING\r\n },\r\n waterfall: {\r\n gap: 0.5,\r\n spacing: BAR_SPACING,\r\n line: {\r\n width: 1,\r\n color: BLACK\r\n }\r\n },\r\n horizontalWaterfall: {\r\n gap: 0.5,\r\n spacing: BAR_SPACING,\r\n line: {\r\n width: 1,\r\n color: BLACK\r\n }\r\n },\r\n bullet: {\r\n gap: BAR_GAP,\r\n spacing: BAR_SPACING,\r\n target: {\r\n color: \"#ff0000\"\r\n }\r\n },\r\n verticalBullet: {\r\n gap: BAR_GAP,\r\n spacing: BAR_SPACING,\r\n target: {\r\n color: \"#ff0000\"\r\n }\r\n },\r\n boxPlot: {\r\n outliersField: \"\",\r\n meanField: \"\",\r\n whiskers: {\r\n width: 1,\r\n color: BLACK\r\n },\r\n mean: {\r\n width: 1,\r\n color: BLACK\r\n },\r\n median: {\r\n width: 1,\r\n color: BLACK\r\n },\r\n border: {\r\n width: 1,\r\n _brightness: 0.8\r\n },\r\n gap: 1,\r\n spacing: 0.3,\r\n downColor: WHITE,\r\n highlight: {\r\n whiskers: {\r\n width: 2\r\n },\r\n border: {\r\n width: 2,\r\n opacity: 1\r\n }\r\n }\r\n },\r\n funnel: {\r\n labels: {\r\n color:\"\",\r\n background: \"\"\r\n }\r\n },\r\n notes: {\r\n icon: {\r\n border: {\r\n width: 1\r\n }\r\n },\r\n label: {\r\n padding: 3,\r\n font: SANS12\r\n },\r\n line: {\r\n length: 10,\r\n width: 1\r\n },\r\n visible: true\r\n }\r\n },\r\n categoryAxis: {\r\n majorGridLines: {\r\n visible: true\r\n }\r\n },\r\n axisDefaults: {\r\n labels: {\r\n font: SANS12\r\n },\r\n title: {\r\n font: SANS16,\r\n margin: 5\r\n },\r\n crosshair: {\r\n tooltip: {\r\n font: SANS12\r\n }\r\n },\r\n notes: {\r\n icon: {\r\n size: 7,\r\n border: {\r\n width: 1\r\n }\r\n },\r\n label: {\r\n padding: 3,\r\n font: SANS12\r\n },\r\n line: {\r\n length: 10,\r\n width: 1\r\n },\r\n visible: true\r\n }\r\n },\r\n tooltip: {\r\n font: SANS12\r\n },\r\n navigator: {\r\n pane: {\r\n height: 90,\r\n margin: {\r\n top: 10\r\n }\r\n }\r\n }\r\n };\r\n\r\n var gaugeBaseTheme = {\r\n scale: {\r\n labels: {\r\n font: SANS12\r\n }\r\n }\r\n };\r\n\r\n var diagramBaseTheme = {\r\n shapeDefaults: {\r\n hover: {\r\n opacity: 0.2\r\n },\r\n stroke: {\r\n width: 0\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n width: 7,\r\n height: 7\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n width: 1,\r\n dashType: \"dot\"\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n width: 2\r\n },\r\n selection: {\r\n handles: {\r\n width: 8,\r\n height: 8\r\n }\r\n },\r\n editable: {\r\n tools: [\"edit\", \"delete\"]\r\n }\r\n }\r\n };\r\n\r\n var themes = ui.themes,\r\n registerTheme = ui.registerTheme = function(themeName, options) {\r\n var result = {};\r\n // Apply base theme\r\n result.chart = deepExtend({}, chartBaseTheme, options.chart);\r\n result.gauge = deepExtend({}, gaugeBaseTheme, options.gauge);\r\n result.diagram = deepExtend({}, diagramBaseTheme, options.diagram);\r\n result.treeMap = deepExtend({}, options.treeMap);\r\n\r\n // Copy the line/area chart settings for their vertical counterparts\r\n var defaults = result.chart.seriesDefaults;\r\n defaults.verticalLine = deepExtend({}, defaults.line);\r\n defaults.verticalArea = deepExtend({}, defaults.area);\r\n\r\n defaults.polarArea = deepExtend({}, defaults.radarArea);\r\n defaults.polarLine = deepExtend({}, defaults.radarLine);\r\n\r\n themes[themeName] = result;\r\n };\r\n\r\n registerTheme(\"black\", {\r\n chart: {\r\n title: {\r\n color: WHITE\r\n },\r\n legend: {\r\n labels: {\r\n color: WHITE\r\n },\r\n inactiveItems: {\r\n labels: {\r\n color: \"#919191\"\r\n },\r\n markers: {\r\n color: \"#919191\"\r\n }\r\n }\r\n },\r\n seriesDefaults: {\r\n labels: {\r\n color: WHITE\r\n },\r\n errorBars: {\r\n color: WHITE\r\n },\r\n notes: {\r\n icon: {\r\n background: \"#3b3b3b\",\r\n border: {\r\n color: \"#8e8e8e\"\r\n }\r\n },\r\n label: {\r\n color: WHITE\r\n },\r\n line: {\r\n color: \"#8e8e8e\"\r\n }\r\n },\r\n pie: {\r\n overlay: {\r\n gradient: \"sharpBevel\"\r\n }\r\n },\r\n donut: {\r\n overlay: {\r\n gradient: \"sharpGlass\"\r\n }\r\n },\r\n line: {\r\n markers: {\r\n background: \"#3d3d3d\"\r\n }\r\n },\r\n scatter: {\r\n markers: {\r\n background: \"#3d3d3d\"\r\n }\r\n },\r\n scatterLine: {\r\n markers: {\r\n background: \"#3d3d3d\"\r\n }\r\n },\r\n waterfall: {\r\n line: {\r\n color: \"#8e8e8e\"\r\n }\r\n },\r\n horizontalWaterfall: {\r\n line: {\r\n color: \"#8e8e8e\"\r\n }\r\n },\r\n candlestick: {\r\n downColor: \"#555\",\r\n line: {\r\n color: WHITE\r\n },\r\n border: {\r\n _brightness: 1.5,\r\n opacity: 1\r\n },\r\n highlight: {\r\n border: {\r\n color: WHITE,\r\n opacity: 0.2\r\n }\r\n }\r\n },\r\n ohlc: {\r\n line: {\r\n color: WHITE\r\n }\r\n }\r\n },\r\n chartArea: {\r\n background: \"#3d3d3d\"\r\n },\r\n seriesColors: [\"#0081da\", \"#3aafff\", \"#99c900\", \"#ffeb3d\", \"#b20753\", \"#ff4195\"],\r\n axisDefaults: {\r\n line: {\r\n color: \"#8e8e8e\"\r\n },\r\n labels: {\r\n color: WHITE\r\n },\r\n majorGridLines: {\r\n color: \"#545454\"\r\n },\r\n minorGridLines: {\r\n color: \"#454545\"\r\n },\r\n title: {\r\n color: WHITE\r\n },\r\n crosshair: {\r\n color: \"#8e8e8e\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"#3b3b3b\",\r\n border: {\r\n color: \"#8e8e8e\"\r\n }\r\n },\r\n label: {\r\n color: WHITE\r\n },\r\n line: {\r\n color: \"#8e8e8e\"\r\n }\r\n }\r\n }\r\n },\r\n gauge: {\r\n pointer: {\r\n color: \"#0070e4\"\r\n },\r\n scale: {\r\n rangePlaceholderColor: \"#1d1d1d\",\r\n labels: {\r\n color: WHITE\r\n },\r\n minorTicks: {\r\n color: WHITE\r\n },\r\n majorTicks: {\r\n color: WHITE\r\n },\r\n line: {\r\n color: WHITE\r\n }\r\n }\r\n },\r\n diagram: {\r\n shapeDefaults: {\r\n fill: {\r\n color: \"#0066cc\"\r\n },\r\n connectorDefaults: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#384049\"\r\n },\r\n hover: {\r\n fill: {\r\n color: \"#3d3d3d\"\r\n },\r\n stroke: {\r\n color: \"#efefef\"\r\n }\r\n }\r\n },\r\n content: {\r\n color: WHITE\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n fill: {\r\n color: \"#3d3d3d\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n },\r\n hover: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: WHITE\r\n }\r\n }\r\n }\r\n },\r\n rotate: {\r\n thumb: {\r\n stroke: {\r\n color: WHITE\r\n },\r\n fill: {\r\n color: WHITE\r\n }\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n color: WHITE\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n color: WHITE\r\n },\r\n content: {\r\n color: WHITE\r\n },\r\n selection: {\r\n handles: {\r\n fill: {\r\n color: \"#3d3d3d\"\r\n },\r\n stroke: {\r\n color: \"#efefef\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n treeMap: {\r\n colors: [\r\n [\"#0081da\", \"#314b5c\"],\r\n [\"#3aafff\", \"#3c5464\"],\r\n [\"#99c900\", \"#4f5931\"],\r\n [\"#ffeb3d\", \"#64603d\"],\r\n [\"#b20753\", \"#543241\"],\r\n [\"#ff4195\", \"#643e4f\"]]\r\n }\r\n });\r\n\r\n registerTheme(\"blueopal\", {\r\n chart: {\r\n title: {\r\n color: \"#293135\"\r\n },\r\n legend: {\r\n labels: {\r\n color: \"#293135\"\r\n },\r\n inactiveItems: {\r\n labels: {\r\n color: \"#27A5BA\"\r\n },\r\n markers: {\r\n color: \"#27A5BA\"\r\n }\r\n }\r\n },\r\n seriesDefaults: {\r\n labels: {\r\n color: BLACK,\r\n background: WHITE,\r\n opacity: 0.5\r\n },\r\n errorBars: {\r\n color: \"#293135\"\r\n },\r\n candlestick: {\r\n downColor: \"#c4d0d5\",\r\n line: {\r\n color: \"#9aabb2\"\r\n }\r\n },\r\n waterfall: {\r\n line: {\r\n color: \"#9aabb2\"\r\n }\r\n },\r\n horizontalWaterfall: {\r\n line: {\r\n color: \"#9aabb2\"\r\n }\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#9aabb2\"\r\n }\r\n },\r\n label: {\r\n color: \"#293135\"\r\n },\r\n line: {\r\n color: \"#9aabb2\"\r\n }\r\n }\r\n },\r\n seriesColors: [\"#0069a5\", \"#0098ee\", \"#7bd2f6\", \"#ffb800\", \"#ff8517\", \"#e34a00\"],\r\n axisDefaults: {\r\n line: {\r\n color: \"#9aabb2\"\r\n },\r\n labels: {\r\n color: \"#293135\"\r\n },\r\n majorGridLines: {\r\n color: \"#c4d0d5\"\r\n },\r\n minorGridLines: {\r\n color: \"#edf1f2\"\r\n },\r\n title: {\r\n color: \"#293135\"\r\n },\r\n crosshair: {\r\n color: \"#9aabb2\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#9aabb2\"\r\n }\r\n },\r\n label: {\r\n color: \"#293135\"\r\n },\r\n line: {\r\n color: \"#9aabb2\"\r\n }\r\n }\r\n }\r\n },\r\n gauge: {\r\n pointer: {\r\n color: \"#005c83\"\r\n },\r\n scale: {\r\n rangePlaceholderColor: \"#daecf4\",\r\n\r\n labels: {\r\n color: \"#293135\"\r\n },\r\n minorTicks: {\r\n color: \"#293135\"\r\n },\r\n majorTicks: {\r\n color: \"#293135\"\r\n },\r\n line: {\r\n color: \"#293135\"\r\n }\r\n }\r\n },\r\n diagram: {\r\n shapeDefaults: {\r\n fill: {\r\n color: \"#7ec6e3\"\r\n },\r\n connectorDefaults: {\r\n fill: {\r\n color: \"#003f59\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n },\r\n hover: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#003f59\"\r\n }\r\n }\r\n },\r\n content: {\r\n color: \"#293135\"\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#003f59\"\r\n },\r\n hover: {\r\n fill: {\r\n color: \"#003f59\"\r\n },\r\n stroke: {\r\n color: \"#003f59\"\r\n }\r\n }\r\n }\r\n },\r\n rotate: {\r\n thumb: {\r\n stroke: {\r\n color: \"#003f59\"\r\n },\r\n fill: {\r\n color: \"#003f59\"\r\n }\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n color: \"#003f59\"\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n color: \"#003f59\"\r\n },\r\n content: {\r\n color: \"#293135\"\r\n },\r\n selection: {\r\n handles: {\r\n fill: {\r\n color: \"#3d3d3d\"\r\n },\r\n stroke: {\r\n color: \"#efefef\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n treeMap: {\r\n colors: [\r\n [\"#0069a5\", \"#bad7e7\"],\r\n [\"#0098ee\", \"#b9e0f5\"],\r\n [\"#7bd2f6\", \"#ceeaf6\"],\r\n [\"#ffb800\", \"#e6e3c4\"],\r\n [\"#ff8517\", \"#e4d8c8\"],\r\n [\"#e34a00\", \"#ddccc2\"]\r\n ]\r\n }\r\n });\r\n\r\n registerTheme(\"highcontrast\", {\r\n chart: {\r\n title: {\r\n color: \"#ffffff\"\r\n },\r\n legend: {\r\n labels: {\r\n color: \"#ffffff\"\r\n },\r\n inactiveItems: {\r\n labels: {\r\n color: \"#66465B\"\r\n },\r\n markers: {\r\n color: \"#66465B\"\r\n }\r\n }\r\n },\r\n seriesDefaults: {\r\n labels: {\r\n color: \"#ffffff\"\r\n },\r\n errorBars: {\r\n color: \"#ffffff\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#ffffff\"\r\n }\r\n },\r\n label: {\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#ffffff\"\r\n }\r\n },\r\n pie: {\r\n overlay: {\r\n gradient: \"sharpGlass\"\r\n }\r\n },\r\n donut: {\r\n overlay: {\r\n gradient: \"sharpGlass\"\r\n }\r\n },\r\n line: {\r\n markers: {\r\n background: \"#2c232b\"\r\n }\r\n },\r\n scatter: {\r\n markers: {\r\n background: \"#2c232b\"\r\n }\r\n },\r\n scatterLine: {\r\n markers: {\r\n background: \"#2c232b\"\r\n }\r\n },\r\n area: {\r\n opacity: 0.5\r\n },\r\n waterfall: {\r\n line: {\r\n color: \"#ffffff\"\r\n }\r\n },\r\n horizontalWaterfall: {\r\n line: {\r\n color: \"#ffffff\"\r\n }\r\n },\r\n candlestick: {\r\n downColor: \"#664e62\",\r\n line: {\r\n color: \"#ffffff\"\r\n },\r\n border: {\r\n _brightness: 1.5,\r\n opacity: 1\r\n },\r\n highlight: {\r\n border: {\r\n color: \"#ffffff\",\r\n opacity: 1\r\n }\r\n }\r\n },\r\n ohlc: {\r\n line: {\r\n color: \"#ffffff\"\r\n }\r\n }\r\n },\r\n chartArea: {\r\n background: \"#2c232b\"\r\n },\r\n seriesColors: [\"#a7008f\", \"#ffb800\", \"#3aafff\", \"#99c900\", \"#b20753\", \"#ff4195\"],\r\n axisDefaults: {\r\n line: {\r\n color: \"#ffffff\"\r\n },\r\n labels: {\r\n color: \"#ffffff\"\r\n },\r\n majorGridLines: {\r\n color: \"#664e62\"\r\n },\r\n minorGridLines: {\r\n color: \"#4f394b\"\r\n },\r\n title: {\r\n color: \"#ffffff\"\r\n },\r\n crosshair: {\r\n color: \"#ffffff\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#ffffff\"\r\n }\r\n },\r\n label: {\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#ffffff\"\r\n }\r\n }\r\n }\r\n },\r\n gauge: {\r\n pointer: {\r\n color: \"#a7008f\"\r\n },\r\n scale: {\r\n rangePlaceholderColor: \"#2c232b\",\r\n\r\n labels: {\r\n color: \"#ffffff\"\r\n },\r\n minorTicks: {\r\n color: \"#2c232b\"\r\n },\r\n majorTicks: {\r\n color: \"#664e62\"\r\n },\r\n line: {\r\n color: \"#ffffff\"\r\n }\r\n }\r\n },\r\n diagram: {\r\n shapeDefaults: {\r\n fill: {\r\n color: \"#a7018f\"\r\n },\r\n connectorDefaults: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#2c232b\"\r\n },\r\n hover: {\r\n fill: {\r\n color: \"#2c232b\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n }\r\n }\r\n },\r\n content: {\r\n color: WHITE\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n fill: {\r\n color: \"#2c232b\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n },\r\n hover: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: WHITE\r\n }\r\n }\r\n }\r\n },\r\n rotate: {\r\n thumb: {\r\n stroke: {\r\n color: WHITE\r\n },\r\n fill: {\r\n color: WHITE\r\n }\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n color: WHITE\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n color: WHITE\r\n },\r\n content: {\r\n color: WHITE\r\n },\r\n selection: {\r\n handles: {\r\n fill: {\r\n color: \"#2c232b\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n }\r\n }\r\n }\r\n }\r\n },\r\n treeMap: {\r\n colors: [\r\n [\"#a7008f\", \"#451c3f\"],\r\n [\"#ffb800\", \"#564122\"],\r\n [\"#3aafff\", \"#2f3f55\"],\r\n [\"#99c900\", \"#424422\"],\r\n [\"#b20753\", \"#471d33\"],\r\n [\"#ff4195\", \"#562940\"]\r\n ]\r\n }\r\n });\r\n\r\n registerTheme(\"default\", {\r\n chart: {\r\n title: {\r\n color: \"#8e8e8e\"\r\n },\r\n legend: {\r\n labels: {\r\n color: \"#232323\"\r\n },\r\n inactiveItems: {\r\n labels: {\r\n color: \"#919191\"\r\n },\r\n markers: {\r\n color: \"#919191\"\r\n }\r\n }\r\n },\r\n seriesDefaults: {\r\n labels: {\r\n color: BLACK,\r\n background: WHITE,\r\n opacity: 0.5\r\n },\r\n errorBars: {\r\n color: \"#232323\"\r\n },\r\n candlestick: {\r\n downColor: \"#dedede\",\r\n line: {\r\n color: \"#8d8d8d\"\r\n }\r\n },\r\n waterfall: {\r\n line: {\r\n color: \"#8e8e8e\"\r\n }\r\n },\r\n horizontalWaterfall: {\r\n line: {\r\n color: \"#8e8e8e\"\r\n }\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#8e8e8e\"\r\n }\r\n },\r\n label: {\r\n color: \"#232323\"\r\n },\r\n line: {\r\n color: \"#8e8e8e\"\r\n }\r\n }\r\n },\r\n seriesColors: [\"#ff6800\", \"#a0a700\", \"#ff8d00\", \"#678900\", \"#ffb53c\", \"#396000\"],\r\n axisDefaults: {\r\n line: {\r\n color: \"#8e8e8e\"\r\n },\r\n labels: {\r\n color: \"#232323\"\r\n },\r\n minorGridLines: {\r\n color: \"#f0f0f0\"\r\n },\r\n majorGridLines: {\r\n color: \"#dfdfdf\"\r\n },\r\n title: {\r\n color: \"#232323\"\r\n },\r\n crosshair: {\r\n color: \"#8e8e8e\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#8e8e8e\"\r\n }\r\n },\r\n label: {\r\n color: \"#232323\"\r\n },\r\n line: {\r\n color: \"#8e8e8e\"\r\n }\r\n }\r\n }\r\n },\r\n gauge: {\r\n pointer: {\r\n color: \"#ea7001\"\r\n },\r\n scale: {\r\n rangePlaceholderColor: \"#dedede\",\r\n\r\n labels: {\r\n color: \"#2e2e2e\"\r\n },\r\n minorTicks: {\r\n color: \"#2e2e2e\"\r\n },\r\n majorTicks: {\r\n color: \"#2e2e2e\"\r\n },\r\n line: {\r\n color: \"#2e2e2e\"\r\n }\r\n }\r\n },\r\n diagram: {\r\n shapeDefaults: {\r\n fill: {\r\n color: \"#e15613\"\r\n },\r\n connectorDefaults: {\r\n fill: {\r\n color: \"#282828\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n },\r\n hover: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#282828\"\r\n }\r\n }\r\n },\r\n content: {\r\n color: \"#2e2e2e\"\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#282828\"\r\n },\r\n hover: {\r\n fill: {\r\n color: \"#282828\"\r\n },\r\n stroke: {\r\n color: \"#282828\"\r\n }\r\n }\r\n }\r\n },\r\n rotate: {\r\n thumb: {\r\n stroke: {\r\n color: \"#282828\"\r\n },\r\n fill: {\r\n color: \"#282828\"\r\n }\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n color: \"#a7018f\"\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n color: \"#282828\"\r\n },\r\n content: {\r\n color: \"#2e2e2e\"\r\n },\r\n selection: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#282828\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n treeMap: {\r\n colors: [\r\n [\"#ff6800\", \"#edcfba\"],\r\n [\"#a0a700\", \"#dadcba\"],\r\n [\"#ff8d00\", \"#edd7ba\"],\r\n [\"#678900\", \"#cfd6ba\"],\r\n [\"#ffb53c\", \"#eddfc6\"],\r\n [\"#396000\", \"#c6ceba\"]\r\n ]\r\n }\r\n });\r\n\r\n registerTheme(\"silver\", {\r\n chart: {\r\n title: {\r\n color: \"#4e5968\"\r\n },\r\n legend: {\r\n labels: {\r\n color: \"#4e5968\"\r\n },\r\n inactiveItems: {\r\n labels: {\r\n color: \"#B1BCC8\"\r\n },\r\n markers: {\r\n color: \"#B1BCC8\"\r\n }\r\n }\r\n },\r\n seriesDefaults: {\r\n labels: {\r\n color: \"#293135\",\r\n background: \"#eaeaec\",\r\n opacity: 0.5\r\n },\r\n errorBars: {\r\n color: \"#4e5968\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#4e5968\"\r\n }\r\n },\r\n label: {\r\n color: \"#4e5968\"\r\n },\r\n line: {\r\n color: \"#4e5968\"\r\n }\r\n },\r\n line: {\r\n markers: {\r\n background: \"#eaeaec\"\r\n }\r\n },\r\n scatter: {\r\n markers: {\r\n background: \"#eaeaec\"\r\n }\r\n },\r\n scatterLine: {\r\n markers: {\r\n background: \"#eaeaec\"\r\n }\r\n },\r\n pie: {\r\n connectors: {\r\n color: \"#A6B1C0\"\r\n }\r\n },\r\n donut: {\r\n connectors: {\r\n color: \"#A6B1C0\"\r\n }\r\n },\r\n waterfall: {\r\n line: {\r\n color: \"#a6b1c0\"\r\n }\r\n },\r\n horizontalWaterfall: {\r\n line: {\r\n color: \"#a6b1c0\"\r\n }\r\n },\r\n candlestick: {\r\n downColor: \"#a6afbe\"\r\n }\r\n },\r\n chartArea: {\r\n background: \"#eaeaec\"\r\n },\r\n seriesColors: [\"#007bc3\", \"#76b800\", \"#ffae00\", \"#ef4c00\", \"#a419b7\", \"#430B62\"],\r\n axisDefaults: {\r\n line: {\r\n color: \"#a6b1c0\"\r\n },\r\n labels: {\r\n color: \"#4e5968\"\r\n },\r\n majorGridLines: {\r\n color: \"#dcdcdf\"\r\n },\r\n minorGridLines: {\r\n color: \"#eeeeef\"\r\n },\r\n title: {\r\n color: \"#4e5968\"\r\n },\r\n crosshair: {\r\n color: \"#a6b1c0\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#4e5968\"\r\n }\r\n },\r\n label: {\r\n color: \"#4e5968\"\r\n },\r\n line: {\r\n color: \"#4e5968\"\r\n }\r\n }\r\n }\r\n },\r\n gauge: {\r\n pointer: {\r\n color: \"#0879c0\"\r\n },\r\n scale: {\r\n rangePlaceholderColor: \"#f3f3f4\",\r\n\r\n labels: {\r\n color: \"#515967\"\r\n },\r\n minorTicks: {\r\n color: \"#515967\"\r\n },\r\n majorTicks: {\r\n color: \"#515967\"\r\n },\r\n line: {\r\n color: \"#515967\"\r\n }\r\n }\r\n },\r\n diagram: {\r\n shapeDefaults: {\r\n fill: {\r\n color: \"#1c82c2\"\r\n },\r\n connectorDefaults: {\r\n fill: {\r\n color: \"#515967\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n },\r\n hover: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#282828\"\r\n }\r\n }\r\n },\r\n content: {\r\n color: \"#515967\"\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#515967\"\r\n },\r\n hover: {\r\n fill: {\r\n color: \"#515967\"\r\n },\r\n stroke: {\r\n color: \"#515967\"\r\n }\r\n }\r\n }\r\n },\r\n rotate: {\r\n thumb: {\r\n stroke: {\r\n color: \"#515967\"\r\n },\r\n fill: {\r\n color: \"#515967\"\r\n }\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n color: \"#515967\"\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n color: \"#515967\"\r\n },\r\n content: {\r\n color: \"#515967\"\r\n },\r\n selection: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#515967\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n treeMap: {\r\n colors: [\r\n [\"#007bc3\", \"#c2dbea\"],\r\n [\"#76b800\", \"#dae7c3\"],\r\n [\"#ffae00\", \"#f5e5c3\"],\r\n [\"#ef4c00\", \"#f2d2c3\"],\r\n [\"#a419b7\", \"#e3c7e8\"],\r\n [\"#430b62\", \"#d0c5d7\"]\r\n ]\r\n }\r\n });\r\n\r\n registerTheme(\"metro\", {\r\n chart: {\r\n title: {\r\n color: \"#777777\"\r\n },\r\n legend: {\r\n labels: {\r\n color: \"#777777\"\r\n },\r\n inactiveItems: {\r\n labels: {\r\n color: \"#CBCBCB\"\r\n },\r\n markers: {\r\n color: \"#CBCBCB\"\r\n }\r\n }\r\n },\r\n seriesDefaults: {\r\n labels: {\r\n color: BLACK\r\n },\r\n errorBars: {\r\n color: \"#777777\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#777777\"\r\n }\r\n },\r\n label: {\r\n color: \"#777777\"\r\n },\r\n line: {\r\n color: \"#777777\"\r\n }\r\n },\r\n candlestick: {\r\n downColor: \"#c7c7c7\",\r\n line: {\r\n color: \"#787878\"\r\n }\r\n },\r\n waterfall: {\r\n line: {\r\n color: \"#c7c7c7\"\r\n }\r\n },\r\n horizontalWaterfall: {\r\n line: {\r\n color: \"#c7c7c7\"\r\n }\r\n },\r\n overlay: {\r\n gradient: \"none\"\r\n },\r\n border: {\r\n _brightness: 1\r\n }\r\n },\r\n seriesColors: [\"#8ebc00\", \"#309b46\", \"#25a0da\", \"#ff6900\", \"#e61e26\", \"#d8e404\", \"#16aba9\", \"#7e51a1\", \"#313131\", \"#ed1691\"],\r\n axisDefaults: {\r\n line: {\r\n color: \"#c7c7c7\"\r\n },\r\n labels: {\r\n color: \"#777777\"\r\n },\r\n minorGridLines: {\r\n color: \"#c7c7c7\"\r\n },\r\n majorGridLines: {\r\n color: \"#c7c7c7\"\r\n },\r\n title: {\r\n color: \"#777777\"\r\n },\r\n crosshair: {\r\n color: \"#c7c7c7\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#777777\"\r\n }\r\n },\r\n label: {\r\n color: \"#777777\"\r\n },\r\n line: {\r\n color: \"#777777\"\r\n }\r\n }\r\n }\r\n },\r\n gauge: {\r\n pointer: {\r\n color: \"#8ebc00\"\r\n },\r\n scale: {\r\n rangePlaceholderColor: \"#e6e6e6\",\r\n\r\n labels: {\r\n color: \"#777\"\r\n },\r\n minorTicks: {\r\n color: \"#777\"\r\n },\r\n majorTicks: {\r\n color: \"#777\"\r\n },\r\n line: {\r\n color: \"#777\"\r\n }\r\n }\r\n },\r\n diagram: {\r\n shapeDefaults: {\r\n fill: {\r\n color: \"#8ebc00\"\r\n },\r\n connectorDefaults: {\r\n fill: {\r\n color: BLACK\r\n },\r\n stroke: {\r\n color: WHITE\r\n },\r\n hover: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: BLACK\r\n }\r\n }\r\n },\r\n content: {\r\n color: \"#777\"\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#787878\"\r\n },\r\n hover: {\r\n fill: {\r\n color: \"#787878\"\r\n },\r\n stroke: {\r\n color: \"#787878\"\r\n }\r\n }\r\n }\r\n },\r\n rotate: {\r\n thumb: {\r\n stroke: {\r\n color: \"#787878\"\r\n },\r\n fill: {\r\n color: \"#787878\"\r\n }\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n color: \"#515967\"\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n color: \"#787878\"\r\n },\r\n content: {\r\n color: \"#777\"\r\n },\r\n selection: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#787878\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n treeMap: {\r\n colors: [\r\n [\"#8ebc00\", \"#e8f2cc\"],\r\n [\"#309b46\", \"#d6ebda\"],\r\n [\"#25a0da\", \"#d3ecf8\"],\r\n [\"#ff6900\", \"#ffe1cc\"],\r\n [\"#e61e26\", \"#fad2d4\"],\r\n [\"#d8e404\", \"#f7facd\"],\r\n [\"#16aba9\", \"#d0eeee\"],\r\n [\"#7e51a1\", \"#e5dcec\"],\r\n [\"#313131\", \"#d6d6d6\"],\r\n [\"#ed1691\", \"#fbd0e9\"]\r\n ]\r\n }\r\n });\r\n\r\n registerTheme(\"metroblack\", {\r\n chart: {\r\n title: {\r\n color: \"#ffffff\"\r\n },\r\n legend: {\r\n labels: {\r\n color: \"#ffffff\"\r\n },\r\n inactiveItems: {\r\n labels: {\r\n color: \"#797979\"\r\n },\r\n markers: {\r\n color: \"#797979\"\r\n }\r\n }\r\n },\r\n seriesDefaults: {\r\n border: {\r\n _brightness: 1\r\n },\r\n labels: {\r\n color: \"#ffffff\"\r\n },\r\n errorBars: {\r\n color: \"#ffffff\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#cecece\"\r\n }\r\n },\r\n label: {\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#cecece\"\r\n }\r\n },\r\n line: {\r\n markers: {\r\n background: \"#0e0e0e\"\r\n }\r\n },\r\n bubble: {\r\n opacity: 0.6\r\n },\r\n scatter: {\r\n markers: {\r\n background: \"#0e0e0e\"\r\n }\r\n },\r\n scatterLine: {\r\n markers: {\r\n background: \"#0e0e0e\"\r\n }\r\n },\r\n candlestick: {\r\n downColor: \"#828282\",\r\n line: {\r\n color: \"#ffffff\"\r\n }\r\n },\r\n waterfall: {\r\n line: {\r\n color: \"#cecece\"\r\n }\r\n },\r\n horizontalWaterfall: {\r\n line: {\r\n color: \"#cecece\"\r\n }\r\n },\r\n overlay: {\r\n gradient: \"none\"\r\n }\r\n },\r\n chartArea: {\r\n background: \"#0e0e0e\"\r\n },\r\n seriesColors: [\"#00aba9\", \"#309b46\", \"#8ebc00\", \"#ff6900\", \"#e61e26\", \"#d8e404\", \"#25a0da\", \"#7e51a1\", \"#313131\", \"#ed1691\"],\r\n axisDefaults: {\r\n line: {\r\n color: \"#cecece\"\r\n },\r\n labels: {\r\n color: \"#ffffff\"\r\n },\r\n minorGridLines: {\r\n color: \"#2d2d2d\"\r\n },\r\n majorGridLines: {\r\n color: \"#333333\"\r\n },\r\n title: {\r\n color: \"#ffffff\"\r\n },\r\n crosshair: {\r\n color: \"#cecece\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#cecece\"\r\n }\r\n },\r\n label: {\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#cecece\"\r\n }\r\n }\r\n }\r\n },\r\n gauge: {\r\n pointer: {\r\n color: \"#00aba9\"\r\n },\r\n scale: {\r\n rangePlaceholderColor: \"#2d2d2d\",\r\n\r\n labels: {\r\n color: \"#ffffff\"\r\n },\r\n minorTicks: {\r\n color: \"#333333\"\r\n },\r\n majorTicks: {\r\n color: \"#cecece\"\r\n },\r\n line: {\r\n color: \"#cecece\"\r\n }\r\n }\r\n },\r\n diagram: {\r\n shapeDefaults: {\r\n fill: {\r\n color: \"#00aba9\"\r\n },\r\n connectorDefaults: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#0e0e0e\"\r\n },\r\n hover: {\r\n fill: {\r\n color: \"#0e0e0e\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n }\r\n }\r\n },\r\n content: {\r\n color: WHITE\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n fill: {\r\n color: \"#0e0e0e\"\r\n },\r\n stroke: {\r\n color: \"#787878\"\r\n },\r\n hover: {\r\n fill: {\r\n color: \"#787878\"\r\n },\r\n stroke: {\r\n color: \"#787878\"\r\n }\r\n }\r\n }\r\n },\r\n rotate: {\r\n thumb: {\r\n stroke: {\r\n color: WHITE\r\n },\r\n fill: {\r\n color: WHITE\r\n }\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n color: \"#787878\"\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n color: WHITE\r\n },\r\n content: {\r\n color: WHITE\r\n },\r\n selection: {\r\n handles: {\r\n fill: {\r\n color: \"#0e0e0e\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n }\r\n }\r\n }\r\n }\r\n },\r\n treeMap: {\r\n colors: [\r\n [\"#00aba9\", \"#0b2d2d\"],\r\n [\"#309b46\", \"#152a19\"],\r\n [\"#8ebc00\", \"#28310b\"],\r\n [\"#ff6900\", \"#3e200b\"],\r\n [\"#e61e26\", \"#391113\"],\r\n [\"#d8e404\", \"#36390c\"],\r\n [\"#25a0da\", \"#132b37\"],\r\n [\"#7e51a1\", \"#241b2b\"],\r\n [\"#313131\", \"#151515\"],\r\n [\"#ed1691\", \"#3b1028\"]\r\n ]\r\n }\r\n });\r\n\r\n registerTheme(\"moonlight\", {\r\n chart: {\r\n title: {\r\n color: \"#ffffff\"\r\n },\r\n legend: {\r\n labels: {\r\n color: \"#ffffff\"\r\n },\r\n inactiveItems: {\r\n labels: {\r\n color: \"#A1A7AB\"\r\n },\r\n markers: {\r\n color: \"#A1A7AB\"\r\n }\r\n }\r\n },\r\n seriesDefaults: {\r\n labels: {\r\n color: \"#ffffff\"\r\n },\r\n errorBars: {\r\n color: \"#ffffff\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#8c909e\"\r\n }\r\n },\r\n label: {\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#8c909e\"\r\n }\r\n },\r\n pie: {\r\n overlay: {\r\n gradient: \"sharpBevel\"\r\n }\r\n },\r\n donut: {\r\n overlay: {\r\n gradient: \"sharpGlass\"\r\n }\r\n },\r\n line: {\r\n markers: {\r\n background: \"#212a33\"\r\n }\r\n },\r\n bubble: {\r\n opacity: 0.6\r\n },\r\n scatter: {\r\n markers: {\r\n background: \"#212a33\"\r\n }\r\n },\r\n scatterLine: {\r\n markers: {\r\n background: \"#212a33\"\r\n }\r\n },\r\n area: {\r\n opacity: 0.3\r\n },\r\n candlestick: {\r\n downColor: \"#757d87\",\r\n line: {\r\n color: \"#ea9d06\"\r\n },\r\n border: {\r\n _brightness: 1.5,\r\n opacity: 1\r\n },\r\n highlight: {\r\n border: {\r\n color: WHITE,\r\n opacity: 0.2\r\n }\r\n }\r\n },\r\n waterfall: {\r\n line: {\r\n color: \"#8c909e\"\r\n }\r\n },\r\n horizontalWaterfall: {\r\n line: {\r\n color: \"#8c909e\"\r\n }\r\n },\r\n ohlc: {\r\n line: {\r\n color: \"#ea9d06\"\r\n }\r\n }\r\n },\r\n chartArea: {\r\n background: \"#212a33\"\r\n },\r\n seriesColors: [\"#ffca08\", \"#ff710f\", \"#ed2e24\", \"#ff9f03\", \"#e13c02\", \"#a00201\"],\r\n axisDefaults: {\r\n line: {\r\n color: \"#8c909e\"\r\n },\r\n minorTicks: {\r\n color: \"#8c909e\"\r\n },\r\n majorTicks: {\r\n color: \"#8c909e\"\r\n },\r\n labels: {\r\n color: \"#ffffff\"\r\n },\r\n majorGridLines: {\r\n color: \"#3e424d\"\r\n },\r\n minorGridLines: {\r\n color: \"#2f3640\"\r\n },\r\n title: {\r\n color: \"#ffffff\"\r\n },\r\n crosshair: {\r\n color: \"#8c909e\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#8c909e\"\r\n }\r\n },\r\n label: {\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#8c909e\"\r\n }\r\n }\r\n }\r\n },\r\n gauge: {\r\n pointer: {\r\n color: \"#f4af03\"\r\n },\r\n scale: {\r\n rangePlaceholderColor: \"#2f3640\",\r\n\r\n labels: {\r\n color: WHITE\r\n },\r\n minorTicks: {\r\n color: \"#8c909e\"\r\n },\r\n majorTicks: {\r\n color: \"#8c909e\"\r\n },\r\n line: {\r\n color: \"#8c909e\"\r\n }\r\n }\r\n },\r\n diagram: {\r\n shapeDefaults: {\r\n fill: {\r\n color: \"#f3ae03\"\r\n },\r\n connectorDefaults: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#414550\"\r\n },\r\n hover: {\r\n fill: {\r\n color: \"#414550\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n }\r\n }\r\n },\r\n content: {\r\n color: WHITE\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n fill: {\r\n color: \"#414550\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n },\r\n hover: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: WHITE\r\n }\r\n }\r\n }\r\n },\r\n rotate: {\r\n thumb: {\r\n stroke: {\r\n color: WHITE\r\n },\r\n fill: {\r\n color: WHITE\r\n }\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n color: WHITE\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n color: WHITE\r\n },\r\n content: {\r\n color: WHITE\r\n },\r\n selection: {\r\n handles: {\r\n fill: {\r\n color: \"#414550\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n }\r\n }\r\n }\r\n }\r\n },\r\n treeMap: {\r\n colors: [\r\n [\"#ffca08\", \"#4e4b2b\"],\r\n [\"#ff710f\", \"#4e392d\"],\r\n [\"#ed2e24\", \"#4b2c31\"],\r\n [\"#ff9f03\", \"#4e422a\"],\r\n [\"#e13c02\", \"#482e2a\"],\r\n [\"#a00201\", \"#3b232a\"]\r\n ]\r\n }\r\n });\r\n\r\n registerTheme(\"uniform\", {\r\n chart: {\r\n title: {\r\n color: \"#686868\"\r\n },\r\n legend: {\r\n labels: {\r\n color: \"#686868\"\r\n },\r\n inactiveItems: {\r\n labels: {\r\n color: \"#B6B6B6\"\r\n },\r\n markers: {\r\n color: \"#B6B6B6\"\r\n }\r\n }\r\n },\r\n seriesDefaults: {\r\n labels: {\r\n color: \"#686868\"\r\n },\r\n errorBars: {\r\n color: \"#686868\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#9e9e9e\"\r\n }\r\n },\r\n label: {\r\n color: \"#686868\"\r\n },\r\n line: {\r\n color: \"#9e9e9e\"\r\n }\r\n },\r\n pie: {\r\n overlay: {\r\n gradient: \"sharpBevel\"\r\n }\r\n },\r\n donut: {\r\n overlay: {\r\n gradient: \"sharpGlass\"\r\n }\r\n },\r\n line: {\r\n markers: {\r\n background: \"#ffffff\"\r\n }\r\n },\r\n bubble: {\r\n opacity: 0.6\r\n },\r\n scatter: {\r\n markers: {\r\n background: \"#ffffff\"\r\n }\r\n },\r\n scatterLine: {\r\n markers: {\r\n background: \"#ffffff\"\r\n }\r\n },\r\n area: {\r\n opacity: 0.3\r\n },\r\n candlestick: {\r\n downColor: \"#cccccc\",\r\n line: {\r\n color: \"#cccccc\"\r\n },\r\n border: {\r\n _brightness: 1.5,\r\n opacity: 1\r\n },\r\n highlight: {\r\n border: {\r\n color: \"#cccccc\",\r\n opacity: 0.2\r\n }\r\n }\r\n },\r\n waterfall: {\r\n line: {\r\n color: \"#9e9e9e\"\r\n }\r\n },\r\n horizontalWaterfall: {\r\n line: {\r\n color: \"#9e9e9e\"\r\n }\r\n },\r\n ohlc: {\r\n line: {\r\n color: \"#cccccc\"\r\n }\r\n }\r\n },\r\n chartArea: {\r\n background: \"#ffffff\"\r\n },\r\n seriesColors: [\"#527aa3\", \"#6f91b3\", \"#8ca7c2\", \"#a8bdd1\", \"#c5d3e0\", \"#e2e9f0\"],\r\n axisDefaults: {\r\n line: {\r\n color: \"#9e9e9e\"\r\n },\r\n minorTicks: {\r\n color: \"#aaaaaa\"\r\n },\r\n majorTicks: {\r\n color: \"#888888\"\r\n },\r\n labels: {\r\n color: \"#686868\"\r\n },\r\n majorGridLines: {\r\n color: \"#dadada\"\r\n },\r\n minorGridLines: {\r\n color: \"#e7e7e7\"\r\n },\r\n title: {\r\n color: \"#686868\"\r\n },\r\n crosshair: {\r\n color: \"#9e9e9e\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#9e9e9e\"\r\n }\r\n },\r\n label: {\r\n color: \"#686868\"\r\n },\r\n line: {\r\n color: \"#9e9e9e\"\r\n }\r\n }\r\n }\r\n },\r\n gauge: {\r\n pointer: {\r\n color: \"#527aa3\"\r\n },\r\n scale: {\r\n rangePlaceholderColor: \"#e7e7e7\",\r\n\r\n labels: {\r\n color: \"#686868\"\r\n },\r\n minorTicks: {\r\n color: \"#aaaaaa\"\r\n },\r\n majorTicks: {\r\n color: \"#888888\"\r\n },\r\n line: {\r\n color: \"#9e9e9e\"\r\n }\r\n }\r\n },\r\n diagram: {\r\n shapeDefaults: {\r\n fill: {\r\n color: \"#d1d1d1\"\r\n },\r\n connectorDefaults: {\r\n fill: {\r\n color: \"#686868\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n },\r\n hover: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#686868\"\r\n }\r\n }\r\n },\r\n content: {\r\n color: \"#686868\"\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#686868\"\r\n },\r\n hover: {\r\n fill: {\r\n color: \"#686868\"\r\n },\r\n stroke: {\r\n color: \"#686868\"\r\n }\r\n }\r\n }\r\n },\r\n rotate: {\r\n thumb: {\r\n stroke: {\r\n color: \"#686868\"\r\n },\r\n fill: {\r\n color: \"#686868\"\r\n }\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n color: \"#686868\"\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n color: \"#686868\"\r\n },\r\n content: {\r\n color: \"#686868\"\r\n },\r\n selection: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#686868\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n treeMap: {\r\n colors: [\r\n [\"#527aa3\", \"#d0d8e1\"],\r\n [\"#6f91b3\", \"#d6dde4\"],\r\n [\"#8ca7c2\", \"#dce1e7\"],\r\n [\"#a8bdd1\", \"#e2e6ea\"],\r\n [\"#c5d3e0\", \"#e7eaed\"],\r\n [\"#e2e9f0\", \"#edeff0\"]\r\n ]\r\n }\r\n });\r\n\r\n registerTheme(\"bootstrap\", {\r\n chart: {\r\n title: {\r\n color: \"#333333\"\r\n },\r\n legend: {\r\n labels: {\r\n color: \"#333333\"\r\n },\r\n inactiveItems: {\r\n labels: {\r\n color: \"#999999\"\r\n },\r\n markers: {\r\n color: \"#9A9A9A\"\r\n }\r\n }\r\n },\r\n seriesDefaults: {\r\n labels: {\r\n color: \"#333333\"\r\n },\r\n overlay: {\r\n gradient: \"none\"\r\n },\r\n errorBars: {\r\n color: \"#343434\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"#000000\",\r\n border: {\r\n color: \"#000000\"\r\n }\r\n },\r\n label: {\r\n color: \"#333333\"\r\n },\r\n line: {\r\n color: \"#000000\"\r\n }\r\n },\r\n pie: {\r\n overlay: {\r\n gradient: \"none\"\r\n }\r\n },\r\n donut: {\r\n overlay: {\r\n gradient: \"none\"\r\n }\r\n },\r\n line: {\r\n markers: {\r\n background: \"#ffffff\"\r\n }\r\n },\r\n bubble: {\r\n opacity: 0.6\r\n },\r\n scatter: {\r\n markers: {\r\n background: \"#ffffff\"\r\n }\r\n },\r\n scatterLine: {\r\n markers: {\r\n background: \"#ffffff\"\r\n }\r\n },\r\n area: {\r\n opacity: 0.8\r\n },\r\n candlestick: {\r\n downColor: \"#d0d0d0\",\r\n line: {\r\n color: \"#333333\"\r\n },\r\n border: {\r\n _brightness: 1.5,\r\n opacity: 1\r\n },\r\n highlight: {\r\n border: {\r\n color: \"#b8b8b8\",\r\n opacity: 0.2\r\n }\r\n }\r\n },\r\n waterfall: {\r\n line: {\r\n color: \"#cccccc\"\r\n }\r\n },\r\n horizontalWaterfall: {\r\n line: {\r\n color: \"#cccccc\"\r\n }\r\n },\r\n ohlc: {\r\n line: {\r\n color: \"#333333\"\r\n }\r\n }\r\n },\r\n chartArea: {\r\n background: \"#ffffff\"\r\n },\r\n seriesColors: [\"#428bca\", \"#5bc0de\", \"#5cb85c\", \"#f2b661\", \"#e67d4a\", \"#da3b36\"],\r\n axisDefaults: {\r\n line: {\r\n color: \"#cccccc\"\r\n },\r\n minorTicks: {\r\n color: \"#ebebeb\"\r\n },\r\n majorTicks: {\r\n color: \"#cccccc\"\r\n },\r\n labels: {\r\n color: \"#333333\"\r\n },\r\n majorGridLines: {\r\n color: \"#cccccc\"\r\n },\r\n minorGridLines: {\r\n color: \"#ebebeb\"\r\n },\r\n title: {\r\n color: \"#333333\"\r\n },\r\n crosshair: {\r\n color: \"#000000\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"#000000\",\r\n border: {\r\n color: \"#000000\"\r\n }\r\n },\r\n label: {\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#000000\"\r\n }\r\n }\r\n }\r\n },\r\n gauge: {\r\n pointer: {\r\n color: \"#428bca\"\r\n },\r\n scale: {\r\n rangePlaceholderColor: \"#cccccc\",\r\n labels: {\r\n color: \"#333333\"\r\n },\r\n minorTicks: {\r\n color: \"#ebebeb\"\r\n },\r\n majorTicks: {\r\n color: \"#cccccc\"\r\n },\r\n line: {\r\n color: \"#cccccc\"\r\n }\r\n }\r\n },\r\n diagram: {\r\n shapeDefaults: {\r\n fill: {\r\n color: \"#428bca\"\r\n },\r\n connectorDefaults: {\r\n fill: {\r\n color: \"#333333\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n },\r\n hover: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#333333\"\r\n }\r\n }\r\n },\r\n content: {\r\n color: \"#333333\"\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#333333\"\r\n },\r\n hover: {\r\n fill: {\r\n color: \"#333333\"\r\n },\r\n stroke: {\r\n color: \"#333333\"\r\n }\r\n }\r\n }\r\n },\r\n rotate: {\r\n thumb: {\r\n stroke: {\r\n color: \"#333333\"\r\n },\r\n fill: {\r\n color: \"#333333\"\r\n }\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n color: \"#333333\"\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n color: \"#c4c4c4\"\r\n },\r\n content: {\r\n color: \"#333333\"\r\n },\r\n selection: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#333333\"\r\n }\r\n },\r\n stroke: {\r\n color: \"#333333\"\r\n }\r\n }\r\n }\r\n },\r\n treeMap: {\r\n colors: [\r\n [\"#428bca\", \"#d1e0ec\"],\r\n [\"#5bc0de\", \"#d6eaf0\"],\r\n [\"#5cb85c\", \"#d6e9d6\"],\r\n [\"#5cb85c\", \"#f4e8d7\"],\r\n [\"#e67d4a\", \"#f2ddd3\"],\r\n [\"#da3b36\", \"#f0d0cf\"]\r\n ]\r\n }\r\n });\r\n\r\n registerTheme(\"flat\", {\r\n chart: {\r\n title: {\r\n color: \"#4c5356\"\r\n },\r\n legend: {\r\n labels: {\r\n color: \"#4c5356\"\r\n },\r\n inactiveItems: {\r\n labels: {\r\n color: \"#CBCBCB\"\r\n },\r\n markers: {\r\n color: \"#CBCBCB\"\r\n }\r\n }\r\n },\r\n seriesDefaults: {\r\n labels: {\r\n color: \"#4c5356\"\r\n },\r\n errorBars: {\r\n color: \"#4c5356\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#cdcdcd\"\r\n }\r\n },\r\n label: {\r\n color: \"#4c5356\"\r\n },\r\n line: {\r\n color: \"#cdcdcd\"\r\n }\r\n },\r\n candlestick: {\r\n downColor: \"#c7c7c7\",\r\n line: {\r\n color: \"#787878\"\r\n }\r\n },\r\n area: {\r\n opacity: 0.9\r\n },\r\n waterfall: {\r\n line: {\r\n color: \"#cdcdcd\"\r\n }\r\n },\r\n horizontalWaterfall: {\r\n line: {\r\n color: \"#cdcdcd\"\r\n }\r\n },\r\n overlay: {\r\n gradient: \"none\"\r\n },\r\n border: {\r\n _brightness: 1\r\n }\r\n },\r\n seriesColors: [\"#10c4b2\", \"#ff7663\", \"#ffb74f\", \"#a2df53\", \"#1c9ec4\", \"#ff63a5\", \"#1cc47b\"],\r\n axisDefaults: {\r\n line: {\r\n color: \"#cdcdcd\"\r\n },\r\n labels: {\r\n color: \"#4c5356\"\r\n },\r\n minorGridLines: {\r\n color: \"#cdcdcd\"\r\n },\r\n majorGridLines: {\r\n color: \"#cdcdcd\"\r\n },\r\n title: {\r\n color: \"#4c5356\"\r\n },\r\n crosshair: {\r\n color: \"#cdcdcd\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#cdcdcd\"\r\n }\r\n },\r\n label: {\r\n color: \"#4c5356\"\r\n },\r\n line: {\r\n color: \"#cdcdcd\"\r\n }\r\n }\r\n }\r\n },\r\n gauge: {\r\n pointer: {\r\n color: \"#10c4b2\"\r\n },\r\n scale: {\r\n rangePlaceholderColor: \"#cdcdcd\",\r\n\r\n labels: {\r\n color: \"#4c5356\"\r\n },\r\n minorTicks: {\r\n color: \"#4c5356\"\r\n },\r\n majorTicks: {\r\n color: \"#4c5356\"\r\n },\r\n line: {\r\n color: \"#4c5356\"\r\n }\r\n }\r\n },\r\n diagram: {\r\n shapeDefaults: {\r\n fill: {\r\n color: \"#10c4b2\"\r\n },\r\n connectorDefaults: {\r\n fill: {\r\n color: \"#363940\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n },\r\n hover: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#363940\"\r\n }\r\n }\r\n },\r\n content: {\r\n color: \"#4c5356\"\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#363940\"\r\n },\r\n hover: {\r\n fill: {\r\n color: \"#363940\"\r\n },\r\n stroke: {\r\n color: \"#363940\"\r\n }\r\n }\r\n }\r\n },\r\n rotate: {\r\n thumb: {\r\n stroke: {\r\n color: \"#363940\"\r\n },\r\n fill: {\r\n color: \"#363940\"\r\n }\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n color: \"#363940\"\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n color: \"#cdcdcd\"\r\n },\r\n content: {\r\n color: \"#4c5356\"\r\n },\r\n selection: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#363940\"\r\n }\r\n },\r\n stroke: {\r\n color: \"#363940\"\r\n }\r\n }\r\n }\r\n },\r\n treeMap: {\r\n colors: [\r\n [\"#10c4b2\", \"#cff3f0\"],\r\n [\"#ff7663\", \"#ffe4e0\"],\r\n [\"#ffb74f\", \"#fff1dc\"],\r\n [\"#a2df53\", \"#ecf9dd\"],\r\n [\"#1c9ec4\", \"#d2ecf3\"],\r\n [\"#ff63a5\", \"#ffe0ed\"],\r\n [\"#1cc47b\", \"#d2f3e5\"]\r\n ]\r\n }\r\n });\r\n\r\n\r\n registerTheme(\"material\", {\r\n chart: {\r\n title: {\r\n color: \"#444444\"\r\n },\r\n legend: {\r\n labels: {\r\n color: \"#444444\"\r\n },\r\n inactiveItems: {\r\n labels: {\r\n color: \"#CBCBCB\"\r\n },\r\n markers: {\r\n color: \"#CBCBCB\"\r\n }\r\n }\r\n },\r\n seriesDefaults: {\r\n labels: {\r\n color: \"#444444\"\r\n },\r\n errorBars: {\r\n color: \"#444444\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#e5e5e5\"\r\n }\r\n },\r\n label: {\r\n color: \"#444444\"\r\n },\r\n line: {\r\n color: \"#e5e5e5\"\r\n }\r\n },\r\n candlestick: {\r\n downColor: \"#c7c7c7\",\r\n line: {\r\n color: \"#787878\"\r\n }\r\n },\r\n area: {\r\n opacity: 0.9\r\n },\r\n waterfall: {\r\n line: {\r\n color: \"#e5e5e5\"\r\n }\r\n },\r\n horizontalWaterfall: {\r\n line: {\r\n color: \"#e5e5e5\"\r\n }\r\n },\r\n overlay: {\r\n gradient: \"none\"\r\n },\r\n border: {\r\n _brightness: 1\r\n }\r\n },\r\n seriesColors: [\"#3f51b5\", \"#03a9f4\", \"#4caf50\", \"#f9ce1d\", \"#ff9800\", \"#ff5722\"],\r\n axisDefaults: {\r\n line: {\r\n color: \"#e5e5e5\"\r\n },\r\n labels: {\r\n color: \"#444444\"\r\n },\r\n minorGridLines: {\r\n color: \"#e5e5e5\"\r\n },\r\n majorGridLines: {\r\n color: \"#e5e5e5\"\r\n },\r\n title: {\r\n color: \"#444444\"\r\n },\r\n crosshair: {\r\n color: \"#7f7f7f\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#e5e5e5\"\r\n }\r\n },\r\n label: {\r\n color: \"#444444\"\r\n },\r\n line: {\r\n color: \"#e5e5e5\"\r\n }\r\n }\r\n }\r\n },\r\n gauge: {\r\n pointer: {\r\n color: \"#3f51b5\"\r\n },\r\n scale: {\r\n rangePlaceholderColor: \"#e5e5e5\",\r\n\r\n labels: {\r\n color: \"#444444\"\r\n },\r\n minorTicks: {\r\n color: \"#444444\"\r\n },\r\n majorTicks: {\r\n color: \"#444444\"\r\n },\r\n line: {\r\n color: \"#444444\"\r\n }\r\n }\r\n },\r\n diagram: {\r\n shapeDefaults: {\r\n fill: {\r\n color: \"#3f51b5\"\r\n },\r\n connectorDefaults: {\r\n fill: {\r\n color: \"#7f7f7f\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n },\r\n hover: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#7f7f7f\"\r\n }\r\n }\r\n },\r\n content: {\r\n color: \"#444444\"\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#444444\"\r\n },\r\n hover: {\r\n fill: {\r\n color: \"#444444\"\r\n },\r\n stroke: {\r\n color: \"#444444\"\r\n }\r\n }\r\n }\r\n },\r\n rotate: {\r\n thumb: {\r\n stroke: {\r\n color: \"#444444\"\r\n },\r\n fill: {\r\n color: \"#444444\"\r\n }\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n color: \"#444444\"\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n color: \"#7f7f7f\"\r\n },\r\n content: {\r\n color: \"#444444\"\r\n },\r\n selection: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#444444\"\r\n }\r\n },\r\n stroke: {\r\n color: \"#444444\"\r\n }\r\n }\r\n }\r\n },\r\n treeMap: {\r\n colors: [\r\n [\"#3f51b5\", \"#cff3f0\"],\r\n [\"#03a9f4\", \"#e5f6fe\"],\r\n [\"#4caf50\", \"#edf7ed\"],\r\n [\"#f9ce1d\", \"#fefae8\"],\r\n [\"#ff9800\", \"#fff4e5\"],\r\n [\"#ff5722\", \"#ffeee8\"]\r\n ]\r\n }\r\n });\r\n\r\n registerTheme(\"materialblack\", {\r\n chart: {\r\n title: {\r\n color: \"#fff\"\r\n },\r\n legend: {\r\n labels: {\r\n color: \"#fff\"\r\n },\r\n inactiveItems: {\r\n labels: {\r\n color: \"#CBCBCB\"\r\n },\r\n markers: {\r\n color: \"#CBCBCB\"\r\n }\r\n }\r\n },\r\n seriesDefaults: {\r\n labels: {\r\n color: \"#fff\"\r\n },\r\n errorBars: {\r\n color: \"#fff\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#e5e5e5\"\r\n }\r\n },\r\n label: {\r\n color: \"#fff\"\r\n },\r\n line: {\r\n color: \"#e5e5e5\"\r\n }\r\n },\r\n candlestick: {\r\n downColor: \"#c7c7c7\",\r\n line: {\r\n color: \"#787878\"\r\n }\r\n },\r\n area: {\r\n opacity: 0.9\r\n },\r\n waterfall: {\r\n line: {\r\n color: \"#4d4d4d\"\r\n }\r\n },\r\n horizontalWaterfall: {\r\n line: {\r\n color: \"#4d4d4d\"\r\n }\r\n },\r\n overlay: {\r\n gradient: \"none\"\r\n },\r\n border: {\r\n _brightness: 1\r\n }\r\n },\r\n chartArea: {\r\n background: \"#1c1c1c\"\r\n },\r\n seriesColors: [\"#3f51b5\", \"#03a9f4\", \"#4caf50\", \"#f9ce1d\", \"#ff9800\", \"#ff5722\"],\r\n axisDefaults: {\r\n line: {\r\n color: \"#4d4d4d\"\r\n },\r\n labels: {\r\n color: \"#fff\"\r\n },\r\n minorGridLines: {\r\n color: \"#4d4d4d\"\r\n },\r\n majorGridLines: {\r\n color: \"#4d4d4d\"\r\n },\r\n title: {\r\n color: \"#fff\"\r\n },\r\n crosshair: {\r\n color: \"#7f7f7f\"\r\n },\r\n notes: {\r\n icon: {\r\n background: \"transparent\",\r\n border: {\r\n color: \"#4d4d4d\"\r\n }\r\n },\r\n label: {\r\n color: \"#fff\"\r\n },\r\n line: {\r\n color: \"#4d4d4d\"\r\n }\r\n }\r\n }\r\n },\r\n gauge: {\r\n pointer: {\r\n color: \"#3f51b5\"\r\n },\r\n scale: {\r\n rangePlaceholderColor: \"#4d4d4d\",\r\n\r\n labels: {\r\n color: \"#fff\"\r\n },\r\n minorTicks: {\r\n color: \"#fff\"\r\n },\r\n majorTicks: {\r\n color: \"#fff\"\r\n },\r\n line: {\r\n color: \"#fff\"\r\n }\r\n }\r\n },\r\n diagram: {\r\n shapeDefaults: {\r\n fill: {\r\n color: \"#3f51b5\"\r\n },\r\n connectorDefaults: {\r\n fill: {\r\n color: \"#7f7f7f\"\r\n },\r\n stroke: {\r\n color: WHITE\r\n },\r\n hover: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#7f7f7f\"\r\n }\r\n }\r\n },\r\n content: {\r\n color: \"#fff\"\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#fff\"\r\n },\r\n hover: {\r\n fill: {\r\n color: \"#fff\"\r\n },\r\n stroke: {\r\n color: \"#fff\"\r\n }\r\n }\r\n }\r\n },\r\n rotate: {\r\n thumb: {\r\n stroke: {\r\n color: \"#fff\"\r\n },\r\n fill: {\r\n color: \"#fff\"\r\n }\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n color: \"#fff\"\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n color: \"#7f7f7f\"\r\n },\r\n content: {\r\n color: \"#fff\"\r\n },\r\n selection: {\r\n handles: {\r\n fill: {\r\n color: WHITE\r\n },\r\n stroke: {\r\n color: \"#fff\"\r\n }\r\n },\r\n stroke: {\r\n color: \"#fff\"\r\n }\r\n }\r\n }\r\n },\r\n treeMap: {\r\n colors: [\r\n [\"#3f51b5\", \"#cff3f0\"],\r\n [\"#03a9f4\", \"#e5f6fe\"],\r\n [\"#4caf50\", \"#edf7ed\"],\r\n [\"#f9ce1d\", \"#fefae8\"],\r\n [\"#ff9800\", \"#fff4e5\"],\r\n [\"#ff5722\", \"#ffeee8\"]\r\n ]\r\n }\r\n });\r\n\r\n (function () {\r\n var TEXT = \"#333333\";\r\n var INACTIVE = \"#7f7f7f\";\r\n var INACTIVE_SHAPE = \"#bdbdbd\";\r\n var AXIS = \"#c8c8c8\";\r\n var AXIS_MINOR = \"#dddddd\";\r\n var SERIES = [\"#008fd3\", \"#99d101\", \"#f39b02\", \"#f05662\", \"#c03c53\", \"#acacac\"];\r\n var SERIES_LIGHT = [\"#cbe8f5\", \"#eaf5cb\", \"#fceacc\", \"#fbdcdf\", \"#f2d7dc\", \"#eeeeee\"];\r\n var PRIMARY = SERIES[0];\r\n var DIAGRAM_HOVER = WHITE;\r\n\r\n function noteStyle() {\r\n return {\r\n icon: {\r\n background: \"#007cc0\",\r\n border: {\r\n color: \"#007cc0\"\r\n }\r\n },\r\n label: {\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: AXIS\r\n }\r\n };\r\n }\r\n\r\n registerTheme(\"fiori\", {\r\n chart: {\r\n title: {\r\n color: TEXT\r\n },\r\n legend: {\r\n labels: {\r\n color: TEXT\r\n },\r\n inactiveItems: {\r\n labels: {\r\n color: INACTIVE\r\n },\r\n markers: {\r\n color: INACTIVE\r\n }\r\n }\r\n },\r\n seriesDefaults: {\r\n labels: {\r\n color: TEXT\r\n },\r\n errorBars: {\r\n color: TEXT\r\n },\r\n notes: noteStyle(),\r\n candlestick: {\r\n downColor: AXIS,\r\n line: {\r\n color: INACTIVE_SHAPE\r\n }\r\n },\r\n area: {\r\n opacity: 0.8\r\n },\r\n waterfall: {\r\n line: {\r\n color: AXIS\r\n }\r\n },\r\n horizontalWaterfall: {\r\n line: {\r\n color: AXIS\r\n }\r\n },\r\n overlay: {\r\n gradient: \"none\"\r\n },\r\n border: {\r\n _brightness: 1\r\n }\r\n },\r\n seriesColors: SERIES,\r\n axisDefaults: {\r\n line: {\r\n color: AXIS\r\n },\r\n labels: {\r\n color: TEXT\r\n },\r\n minorGridLines: {\r\n color: AXIS_MINOR\r\n },\r\n majorGridLines: {\r\n color: AXIS\r\n },\r\n title: {\r\n color: TEXT\r\n },\r\n crosshair: {\r\n color: INACTIVE\r\n },\r\n notes: noteStyle()\r\n }\r\n },\r\n gauge: {\r\n pointer: {\r\n color: PRIMARY\r\n },\r\n scale: {\r\n rangePlaceholderColor: AXIS,\r\n labels: {\r\n color: TEXT\r\n },\r\n minorTicks: {\r\n color: TEXT\r\n },\r\n majorTicks: {\r\n color: TEXT\r\n },\r\n line: {\r\n color: TEXT\r\n }\r\n }\r\n },\r\n diagram: {\r\n shapeDefaults: {\r\n fill: {\r\n color: PRIMARY\r\n },\r\n connectorDefaults: {\r\n fill: {\r\n color: TEXT\r\n },\r\n stroke: {\r\n color: DIAGRAM_HOVER\r\n },\r\n hover: {\r\n fill: {\r\n color: DIAGRAM_HOVER\r\n },\r\n stroke: {\r\n color: TEXT\r\n }\r\n }\r\n },\r\n content: {\r\n color: TEXT\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n fill: {\r\n color: DIAGRAM_HOVER\r\n },\r\n stroke: {\r\n color: INACTIVE_SHAPE\r\n },\r\n hover: {\r\n fill: {\r\n color: INACTIVE_SHAPE\r\n },\r\n stroke: {\r\n color: INACTIVE_SHAPE\r\n }\r\n }\r\n }\r\n },\r\n rotate: {\r\n thumb: {\r\n stroke: {\r\n color: INACTIVE_SHAPE\r\n },\r\n fill: {\r\n color: INACTIVE_SHAPE\r\n }\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n color: INACTIVE_SHAPE\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n color: INACTIVE_SHAPE\r\n },\r\n content: {\r\n color: INACTIVE_SHAPE\r\n },\r\n selection: {\r\n handles: {\r\n fill: {\r\n color: DIAGRAM_HOVER\r\n },\r\n stroke: {\r\n color: INACTIVE_SHAPE\r\n }\r\n },\r\n stroke: {\r\n color: INACTIVE_SHAPE\r\n }\r\n }\r\n }\r\n },\r\n treeMap: {\r\n colors: fuse(SERIES, SERIES_LIGHT)\r\n }\r\n });\r\n })();\r\n\r\n (function() {\r\n var TEXT = \"#4e4e4e\";\r\n var INACTIVE = \"#7f7f7f\";\r\n var INACTIVE_SHAPE = \"#bdbdbd\";\r\n var AXIS = \"#c8c8c8\";\r\n var AXIS_MINOR = \"#e5e5e5\";\r\n var SERIES = [\"#0072c6\", \"#5db2ff\", \"#008a17\", \"#82ba00\", \"#ff8f32\", \"#ac193d\"];\r\n var SERIES_LIGHT = [\"#cbe2f3\", \"#deeffe\", \"#cbe7d0\", \"#e5f0cb\", \"#fee8d5\", \"#eed0d7\"];\r\n var PRIMARY = SERIES[0];\r\n var DIAGRAM_HOVER = WHITE;\r\n\r\n function noteStyle() {\r\n return {\r\n icon: {\r\n background: \"#00b0ff\",\r\n border: {\r\n color: \"#00b0ff\"\r\n }\r\n },\r\n label: {\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: AXIS\r\n }\r\n };\r\n }\r\n\r\n registerTheme(\"office365\", {\r\n chart: {\r\n title: {\r\n color: TEXT\r\n },\r\n legend: {\r\n labels: {\r\n color: TEXT\r\n },\r\n inactiveItems: {\r\n labels: {\r\n color: INACTIVE\r\n },\r\n markers: {\r\n color: INACTIVE\r\n }\r\n }\r\n },\r\n seriesDefaults: {\r\n labels: {\r\n color: TEXT\r\n },\r\n errorBars: {\r\n color: TEXT\r\n },\r\n notes: noteStyle(),\r\n candlestick: {\r\n downColor: AXIS,\r\n line: {\r\n color: INACTIVE_SHAPE\r\n }\r\n },\r\n area: {\r\n opacity: 0.8\r\n },\r\n waterfall: {\r\n line: {\r\n color: AXIS\r\n }\r\n },\r\n horizontalWaterfall: {\r\n line: {\r\n color: AXIS\r\n }\r\n },\r\n overlay: {\r\n gradient: \"none\"\r\n },\r\n border: {\r\n _brightness: 1\r\n }\r\n },\r\n seriesColors: SERIES,\r\n axisDefaults: {\r\n line: {\r\n color: AXIS\r\n },\r\n labels: {\r\n color: TEXT\r\n },\r\n minorGridLines: {\r\n color: AXIS_MINOR\r\n },\r\n majorGridLines: {\r\n color: AXIS\r\n },\r\n title: {\r\n color: TEXT\r\n },\r\n crosshair: {\r\n color: INACTIVE\r\n },\r\n notes: noteStyle()\r\n }\r\n },\r\n gauge: {\r\n pointer: {\r\n color: PRIMARY\r\n },\r\n scale: {\r\n rangePlaceholderColor: AXIS,\r\n labels: {\r\n color: TEXT\r\n },\r\n minorTicks: {\r\n color: TEXT\r\n },\r\n majorTicks: {\r\n color: TEXT\r\n },\r\n line: {\r\n color: TEXT\r\n }\r\n }\r\n },\r\n diagram: {\r\n shapeDefaults: {\r\n fill: {\r\n color: PRIMARY\r\n },\r\n connectorDefaults: {\r\n fill: {\r\n color: TEXT\r\n },\r\n stroke: {\r\n color: DIAGRAM_HOVER\r\n },\r\n hover: {\r\n fill: {\r\n color: DIAGRAM_HOVER\r\n },\r\n stroke: {\r\n color: TEXT\r\n }\r\n }\r\n },\r\n content: {\r\n color: TEXT\r\n }\r\n },\r\n editable: {\r\n resize: {\r\n handles: {\r\n fill: {\r\n color: DIAGRAM_HOVER\r\n },\r\n stroke: {\r\n color: INACTIVE_SHAPE\r\n },\r\n hover: {\r\n fill: {\r\n color: INACTIVE_SHAPE\r\n },\r\n stroke: {\r\n color: INACTIVE_SHAPE\r\n }\r\n }\r\n }\r\n },\r\n rotate: {\r\n thumb: {\r\n stroke: {\r\n color: INACTIVE_SHAPE\r\n },\r\n fill: {\r\n color: INACTIVE_SHAPE\r\n }\r\n }\r\n }\r\n },\r\n selectable: {\r\n stroke: {\r\n color: INACTIVE_SHAPE\r\n }\r\n },\r\n connectionDefaults: {\r\n stroke: {\r\n color: INACTIVE_SHAPE\r\n },\r\n content: {\r\n color: INACTIVE_SHAPE\r\n },\r\n selection: {\r\n handles: {\r\n fill: {\r\n color: DIAGRAM_HOVER\r\n },\r\n stroke: {\r\n color: INACTIVE_SHAPE\r\n }\r\n },\r\n stroke: {\r\n color: INACTIVE_SHAPE\r\n }\r\n }\r\n }\r\n },\r\n treeMap: {\r\n colors: fuse(SERIES, SERIES_LIGHT)\r\n }\r\n });\r\n })();\r\n\r\n function fuse(arr1, arr2) {\r\n return $.map(arr1, function(item, index) {\r\n return [\r\n [item, arr2[index]]\r\n ];\r\n });\r\n }\r\n\r\n})(window.kendo.jQuery);\r\n\r\n\r\n\r\n(function ($, undefined) {\r\n // Imports ================================================================\r\n var each = $.each,\r\n isArray = $.isArray,\r\n isPlainObject = $.isPlainObject,\r\n map = $.map,\r\n math = Math,\r\n noop = $.noop,\r\n extend = $.extend,\r\n proxy = $.proxy,\r\n\r\n kendo = window.kendo,\r\n Class = kendo.Class,\r\n Observable = kendo.Observable,\r\n DataSource = kendo.data.DataSource,\r\n Widget = kendo.ui.Widget,\r\n deepExtend = kendo.deepExtend,\r\n getter = kendo.getter,\r\n isFn = kendo.isFunction,\r\n template = kendo.template,\r\n\r\n dataviz = kendo.dataviz,\r\n Axis = dataviz.Axis,\r\n AxisLabel = dataviz.AxisLabel,\r\n Box2D = dataviz.Box2D,\r\n BoxElement = dataviz.BoxElement,\r\n ChartElement = dataviz.ChartElement,\r\n Color = kendo.drawing.Color,\r\n CurveProcessor = dataviz.CurveProcessor,\r\n FloatElement = dataviz.FloatElement,\r\n Note = dataviz.Note,\r\n LogarithmicAxis = dataviz.LogarithmicAxis,\r\n NumericAxis = dataviz.NumericAxis,\r\n Point2D = dataviz.Point2D,\r\n RootElement = dataviz.RootElement,\r\n Ring = dataviz.Ring,\r\n ShapeElement = dataviz.ShapeElement,\r\n ShapeBuilder = dataviz.ShapeBuilder,\r\n Text = dataviz.Text,\r\n TextBox = dataviz.TextBox,\r\n Title = dataviz.Title,\r\n alignPathToPixel = dataviz.alignPathToPixel,\r\n autoFormat = dataviz.autoFormat,\r\n dateComparer = dataviz.dateComparer,\r\n getSpacing = dataviz.getSpacing,\r\n inArray = dataviz.inArray,\r\n interpolate = dataviz.interpolateValue,\r\n mwDelta = dataviz.mwDelta,\r\n round = dataviz.round,\r\n\r\n util = kendo.util,\r\n append = util.append,\r\n defined = util.defined,\r\n last = util.last,\r\n limitValue = util.limitValue,\r\n sparseArrayLimits = util.sparseArrayLimits,\r\n sparseArrayMin = util.sparseArrayMin,\r\n sparseArrayMax = util.sparseArrayMax,\r\n renderTemplate = util.renderTemplate,\r\n valueOrDefault = util.valueOrDefault,\r\n\r\n geom = dataviz.geometry,\r\n draw = dataviz.drawing;\r\n\r\n // Constants ==============================================================\r\n var NS = \".kendoChart\",\r\n ABOVE = \"above\",\r\n AREA = \"area\",\r\n AUTO = \"auto\",\r\n FIT = \"fit\",\r\n AXIS_LABEL_CLICK = dataviz.AXIS_LABEL_CLICK,\r\n BAR = \"bar\",\r\n BAR_ALIGN_MIN_WIDTH = 6,\r\n BAR_BORDER_BRIGHTNESS = 0.8,\r\n BELOW = \"below\",\r\n BLACK = \"#000\",\r\n BOTH = \"both\",\r\n BOTTOM = \"bottom\",\r\n BOX_PLOT = \"boxPlot\",\r\n BUBBLE = \"bubble\",\r\n BULLET = \"bullet\",\r\n CANDLESTICK = \"candlestick\",\r\n CATEGORY = \"category\",\r\n CENTER = \"center\",\r\n CHANGE = \"change\",\r\n CIRCLE = \"circle\",\r\n CONTEXTMENU_NS = \"contextmenu\" + NS,\r\n CLIP = dataviz.CLIP,\r\n COLOR = \"color\",\r\n COLUMN = \"column\",\r\n COORD_PRECISION = dataviz.COORD_PRECISION,\r\n CROSS = \"cross\",\r\n CSS_PREFIX = \"k-\",\r\n CUSTOM = \"custom\",\r\n DATABOUND = \"dataBound\",\r\n DATE = \"date\",\r\n DAYS = \"days\",\r\n DEFAULT_FONT = dataviz.DEFAULT_FONT,\r\n DEFAULT_HEIGHT = dataviz.DEFAULT_HEIGHT,\r\n DEFAULT_PRECISION = dataviz.DEFAULT_PRECISION,\r\n DEFAULT_WIDTH = dataviz.DEFAULT_WIDTH,\r\n DEFAULT_ERROR_BAR_WIDTH = 4,\r\n DONUT = \"donut\",\r\n DONUT_SECTOR_ANIM_DELAY = 50,\r\n DRAG = \"drag\",\r\n DRAG_END = \"dragEnd\",\r\n DRAG_START = \"dragStart\",\r\n ERROR_LOW_FIELD = \"errorLow\",\r\n ERROR_HIGH_FIELD = \"errorHigh\",\r\n X_ERROR_LOW_FIELD = \"xErrorLow\",\r\n X_ERROR_HIGH_FIELD = \"xErrorHigh\",\r\n Y_ERROR_LOW_FIELD = \"yErrorLow\",\r\n Y_ERROR_HIGH_FIELD = \"yErrorHigh\",\r\n FADEIN = \"fadeIn\",\r\n FIRST = \"first\",\r\n FROM = \"from\",\r\n FUNNEL = \"funnel\",\r\n GLASS = \"glass\",\r\n HORIZONTAL = \"horizontal\",\r\n HORIZONTAL_WATERFALL = \"horizontalWaterfall\",\r\n HOURS = \"hours\",\r\n INITIAL_ANIMATION_DURATION = dataviz.INITIAL_ANIMATION_DURATION,\r\n INSIDE_BASE = \"insideBase\",\r\n INSIDE_END = \"insideEnd\",\r\n INTERPOLATE = \"interpolate\",\r\n LEAVE = \"leave\",\r\n LEFT = \"left\",\r\n LEGEND_ITEM_CLICK = \"legendItemClick\",\r\n LEGEND_ITEM_HOVER = \"legendItemHover\",\r\n LINE = \"line\",\r\n LINE_MARKER_SIZE = 8,\r\n LINEAR = \"linear\",\r\n LOGARITHMIC = \"log\",\r\n MAX = \"max\",\r\n MAX_EXPAND_DEPTH = 5,\r\n MAX_VALUE = Number.MAX_VALUE,\r\n MIN = \"min\",\r\n MIN_VALUE = -Number.MAX_VALUE,\r\n MINUTES = \"minutes\",\r\n MONTHS = \"months\",\r\n MOUSELEAVE_NS = \"mouseleave\" + NS,\r\n MOUSEMOVE_TRACKING = \"mousemove.tracking\",\r\n MOUSEOVER_NS = \"mouseover\" + NS,\r\n MOUSEOUT_NS = \"mouseout\" + NS,\r\n MOUSEMOVE_NS = \"mousemove\" + NS,\r\n MOUSEMOVE_DELAY = 20,\r\n MOUSEWHEEL_DELAY = 150,\r\n MOUSEWHEEL_NS = \"DOMMouseScroll\" + NS + \" mousewheel\" + NS,\r\n NOTE_CLICK = dataviz.NOTE_CLICK,\r\n NOTE_HOVER = dataviz.NOTE_HOVER,\r\n NOTE_TEXT = \"noteText\",\r\n OBJECT = \"object\",\r\n OHLC = \"ohlc\",\r\n OUTSIDE_END = \"outsideEnd\",\r\n OUTLINE_SUFFIX = \"_outline\",\r\n PIE = \"pie\",\r\n PIE_SECTOR_ANIM_DELAY = 70,\r\n PLOT_AREA_CLICK = \"plotAreaClick\",\r\n POINTER = \"pointer\",\r\n RANGE_BAR = \"rangeBar\",\r\n RANGE_COLUMN = \"rangeColumn\",\r\n RENDER = \"render\",\r\n RIGHT = \"right\",\r\n ROUNDED_BEVEL = \"roundedBevel\",\r\n ROUNDED_GLASS = \"roundedGlass\",\r\n SCATTER = \"scatter\",\r\n SCATTER_LINE = \"scatterLine\",\r\n SECONDS = \"seconds\",\r\n SELECT_START = \"selectStart\",\r\n SELECT = \"select\",\r\n SELECT_END = \"selectEnd\",\r\n SERIES_CLICK = \"seriesClick\",\r\n SERIES_HOVER = \"seriesHover\",\r\n START_SCALE = 0.001,\r\n STEP = \"step\",\r\n SMOOTH = \"smooth\",\r\n STD_ERR = \"stderr\",\r\n STD_DEV = \"stddev\",\r\n STRING = \"string\",\r\n SUMMARY_FIELD = \"summary\",\r\n TIME_PER_SECOND = 1000,\r\n TIME_PER_MINUTE = 60 * TIME_PER_SECOND,\r\n TIME_PER_HOUR = 60 * TIME_PER_MINUTE,\r\n TIME_PER_DAY = 24 * TIME_PER_HOUR,\r\n TIME_PER_WEEK = 7 * TIME_PER_DAY,\r\n TIME_PER_MONTH = 31 * TIME_PER_DAY,\r\n TIME_PER_YEAR = 365 * TIME_PER_DAY,\r\n TIME_PER_UNIT = {\r\n \"years\": TIME_PER_YEAR,\r\n \"months\": TIME_PER_MONTH,\r\n \"weeks\": TIME_PER_WEEK,\r\n \"days\": TIME_PER_DAY,\r\n \"hours\": TIME_PER_HOUR,\r\n \"minutes\": TIME_PER_MINUTE,\r\n \"seconds\": TIME_PER_SECOND\r\n },\r\n TO = \"to\",\r\n TOP = \"top\",\r\n TOOLTIP_ANIMATION_DURATION = 150,\r\n TOOLTIP_OFFSET = 5,\r\n TOOLTIP_SHOW_DELAY = 100,\r\n TOOLTIP_HIDE_DELAY = 100,\r\n TOOLTIP_INVERSE = \"chart-tooltip-inverse\",\r\n VALUE = \"value\",\r\n VERTICAL = \"vertical\",\r\n VERTICAL_AREA = \"verticalArea\",\r\n VERTICAL_BULLET = \"verticalBullet\",\r\n VERTICAL_LINE = \"verticalLine\",\r\n WATERFALL = \"waterfall\",\r\n WEEKS = \"weeks\",\r\n WHITE = \"#fff\",\r\n X = \"x\",\r\n Y = \"y\",\r\n YEARS = \"years\",\r\n ZERO = \"zero\",\r\n ZOOM_ACCELERATION = 3,\r\n ZOOM_START = \"zoomStart\",\r\n ZOOM = \"zoom\",\r\n ZOOM_END = \"zoomEnd\",\r\n BASE_UNITS = [\r\n SECONDS, MINUTES, HOURS, DAYS, WEEKS, MONTHS, YEARS\r\n ],\r\n EQUALLY_SPACED_SERIES = [\r\n BAR, COLUMN, OHLC, CANDLESTICK, BOX_PLOT, BULLET, RANGE_COLUMN, RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL\r\n ];\r\n\r\n var DateLabelFormats = {\r\n seconds: \"HH:mm:ss\",\r\n minutes: \"HH:mm\",\r\n hours: \"HH:mm\",\r\n days: \"M/d\",\r\n weeks: \"M/d\",\r\n months: \"MMM 'yy\",\r\n years: \"yyyy\"\r\n };\r\n\r\n // Chart ==================================================================\r\n var Chart = Widget.extend({\r\n init: function(element, userOptions) {\r\n var chart = this,\r\n options,\r\n dataSource;\r\n\r\n kendo.destroy(element);\r\n\r\n Widget.fn.init.call(chart, element);\r\n\r\n chart.element\r\n .addClass(CSS_PREFIX + this.options.name.toLowerCase())\r\n .css(\"position\", \"relative\");\r\n\r\n if (userOptions) {\r\n dataSource = userOptions.dataSource;\r\n userOptions.dataSource = undefined;\r\n }\r\n\r\n options = deepExtend({}, chart.options, userOptions);\r\n chart._originalOptions = deepExtend({}, options);\r\n chart._initTheme(options);\r\n\r\n chart._initSurface();\r\n\r\n chart.bind(chart.events, chart.options);\r\n\r\n chart.wrapper = chart.element;\r\n\r\n if (userOptions) {\r\n userOptions.dataSource = dataSource;\r\n }\r\n\r\n chart._initDataSource(userOptions);\r\n\r\n kendo.notify(chart, dataviz.ui);\r\n },\r\n\r\n _initTheme: function(options) {\r\n var chart = this,\r\n themes = dataviz.ui.themes || {},\r\n themeName = options.theme,\r\n theme = themes[themeName] || themes[themeName.toLowerCase()],\r\n themeOptions = themeName && theme ? theme.chart : {},\r\n seriesCopies = [],\r\n series = options.series || [],\r\n i;\r\n\r\n for (i = 0; i < series.length; i++) {\r\n seriesCopies.push($.extend({}, series[i]));\r\n }\r\n options.series = seriesCopies;\r\n\r\n resolveAxisAliases(options);\r\n chart._applyDefaults(options, themeOptions);\r\n\r\n // Clean up default if not overriden by data attributes\r\n if (options.seriesColors === null) {\r\n options.seriesColors = undefined;\r\n }\r\n\r\n chart.options = deepExtend({}, themeOptions, options);\r\n applySeriesColors(chart.options);\r\n },\r\n\r\n _initDataSource: function(userOptions) {\r\n var chart = this,\r\n dataSource = (userOptions || {}).dataSource;\r\n\r\n chart._dataChangeHandler = proxy(chart._onDataChanged, chart);\r\n\r\n chart.dataSource = DataSource\r\n .create(dataSource)\r\n .bind(CHANGE, chart._dataChangeHandler);\r\n\r\n chart._bindCategories();\r\n\r\n if (dataSource) {\r\n chart._hasDataSource = true;\r\n }\r\n\r\n chart._redraw();\r\n chart._attachEvents();\r\n\r\n if (dataSource) {\r\n if (chart.options.autoBind) {\r\n chart.dataSource.fetch();\r\n }\r\n }\r\n },\r\n\r\n setDataSource: function(dataSource) {\r\n var chart = this;\r\n\r\n chart.dataSource.unbind(CHANGE, chart._dataChangeHandler);\r\n chart.dataSource = dataSource = DataSource.create(dataSource);\r\n chart._hasDataSource = true;\r\n chart._hasData = false;\r\n\r\n dataSource.bind(CHANGE, chart._dataChangeHandler);\r\n\r\n if (chart.options.autoBind) {\r\n dataSource.fetch();\r\n }\r\n },\r\n\r\n events:[\r\n DATABOUND,\r\n SERIES_CLICK,\r\n SERIES_HOVER,\r\n AXIS_LABEL_CLICK,\r\n LEGEND_ITEM_CLICK,\r\n LEGEND_ITEM_HOVER,\r\n PLOT_AREA_CLICK,\r\n DRAG_START,\r\n DRAG,\r\n DRAG_END,\r\n ZOOM_START,\r\n ZOOM,\r\n ZOOM_END,\r\n SELECT_START,\r\n SELECT,\r\n SELECT_END,\r\n NOTE_CLICK,\r\n NOTE_HOVER,\r\n RENDER\r\n ],\r\n\r\n items: function() {\r\n return $();\r\n },\r\n\r\n options: {\r\n name: \"Chart\",\r\n renderAs: \"\",\r\n theme: \"default\",\r\n chartArea: {},\r\n legend: {\r\n visible: true,\r\n labels: {}\r\n },\r\n categoryAxis: {},\r\n autoBind: true,\r\n seriesDefaults: {\r\n type: COLUMN,\r\n data: [],\r\n highlight: {\r\n visible: true\r\n },\r\n labels: {},\r\n negativeValues: {\r\n visible: false\r\n }\r\n },\r\n series: [],\r\n seriesColors: null,\r\n tooltip: {\r\n visible: false\r\n },\r\n transitions: true,\r\n valueAxis: {},\r\n plotArea: {},\r\n title: {},\r\n xAxis: {},\r\n yAxis: {},\r\n panes: [{}]\r\n },\r\n\r\n refresh: function() {\r\n var chart = this;\r\n\r\n chart._applyDefaults(chart.options);\r\n\r\n applySeriesColors(chart.options);\r\n\r\n chart._bindSeries();\r\n chart._bindCategories();\r\n\r\n chart.trigger(DATABOUND);\r\n chart._redraw();\r\n },\r\n\r\n getSize: function() {\r\n return kendo.dimensions(this.element);\r\n },\r\n\r\n _resize: function() {\r\n var t = this.options.transitions;\r\n this.options.transitions = false;\r\n\r\n this._redraw();\r\n\r\n this.options.transitions = t;\r\n },\r\n\r\n redraw: function(paneName) {\r\n var chart = this,\r\n pane,\r\n plotArea;\r\n\r\n chart._applyDefaults(chart.options);\r\n applySeriesColors(chart.options);\r\n\r\n if (paneName) {\r\n plotArea = chart._model._plotArea;\r\n pane = plotArea.findPane(paneName);\r\n plotArea.redraw(pane);\r\n } else {\r\n chart._redraw();\r\n }\r\n },\r\n\r\n getAxis: function(name) {\r\n var axes = this._plotArea.axes;\r\n\r\n for (var idx = 0; idx < axes.length; idx++) {\r\n if (axes[idx].options.name === name) {\r\n return new ChartAxis(axes[idx]);\r\n }\r\n }\r\n },\r\n\r\n toggleHighlight: function(show, options) {\r\n var plotArea = this._plotArea;\r\n var highlight = this._highlight;\r\n var firstSeries = (plotArea.srcSeries || plotArea.series || [])[0];\r\n var seriesName, categoryName, points;\r\n\r\n if (isPlainObject(options)) {\r\n seriesName = options.series;\r\n categoryName = options.category;\r\n } else {\r\n seriesName = categoryName = options;\r\n }\r\n\r\n if (firstSeries.type === DONUT) {\r\n points = pointByCategoryName(plotArea.pointsBySeriesName(seriesName), categoryName);\r\n } else if (firstSeries.type === PIE || firstSeries.type === FUNNEL) {\r\n points = pointByCategoryName((plotArea.charts[0] || {}).points, categoryName);\r\n } else {\r\n points = plotArea.pointsBySeriesName(seriesName);\r\n }\r\n\r\n if (points) {\r\n for (var idx = 0; idx < points.length; idx++) {\r\n highlight.togglePointHighlight(points[idx], show);\r\n }\r\n }\r\n },\r\n\r\n _initSurface: function() {\r\n var surface = this.surface;\r\n var wrap = this._surfaceWrap();\r\n\r\n var chartArea = this.options.chartArea;\r\n if (chartArea.width) {\r\n wrap.css(\"width\", chartArea.width);\r\n }\r\n if (chartArea.height) {\r\n wrap.css(\"height\", chartArea.height);\r\n }\r\n\r\n if (!surface || surface.options.type !== this.options.renderAs) {\r\n if (surface) {\r\n surface.destroy();\r\n }\r\n\r\n this.surface = draw.Surface.create(wrap, {\r\n type: this.options.renderAs\r\n });\r\n } else {\r\n this.surface.clear();\r\n this.surface.resize();\r\n }\r\n },\r\n\r\n _surfaceWrap: function() {\r\n return this.element;\r\n },\r\n\r\n _redraw: function() {\r\n var chart = this,\r\n model = chart._getModel(),\r\n view;\r\n\r\n chart._destroyView();\r\n\r\n chart._model = model;\r\n chart._plotArea = model._plotArea;\r\n\r\n model.renderVisual();\r\n\r\n if (this.options.transitions !== false) {\r\n model.traverse(function(element) {\r\n if (element.animation) {\r\n element.animation.setup();\r\n }\r\n });\r\n }\r\n\r\n chart._initSurface();\r\n chart.surface.draw(model.visual);\r\n\r\n if (this.options.transitions !== false) {\r\n model.traverse(function(element) {\r\n if (element.animation) {\r\n element.animation.play();\r\n }\r\n });\r\n }\r\n\r\n chart._tooltip = chart._createTooltip();\r\n chart._highlight = new Highlight(view);\r\n chart._setupSelection();\r\n\r\n if (!chart._hasDataSource || chart._hasData || !chart.options.autoBind) {\r\n chart.trigger(RENDER);\r\n }\r\n },\r\n\r\n exportVisual: function() {\r\n return this.surface.exportVisual();\r\n },\r\n\r\n _sharedTooltip: function() {\r\n var chart = this,\r\n options = chart.options;\r\n\r\n return chart._plotArea instanceof CategoricalPlotArea && options.tooltip.shared;\r\n },\r\n\r\n _createTooltip: function() {\r\n var chart = this,\r\n options = chart.options,\r\n element = chart.element,\r\n tooltip;\r\n\r\n if (chart._sharedTooltip()) {\r\n tooltip = new SharedTooltip(element, chart._plotArea, options.tooltip);\r\n } else {\r\n tooltip = new Tooltip(element, options.tooltip);\r\n }\r\n\r\n tooltip.bind(LEAVE, proxy(chart._tooltipleave, chart));\r\n\r\n return tooltip;\r\n },\r\n\r\n _tooltipleave: function() {\r\n var chart = this,\r\n plotArea = chart._plotArea,\r\n highlight = chart._highlight;\r\n\r\n plotArea.hideCrosshairs();\r\n\r\n highlight.hide();\r\n },\r\n\r\n _applyDefaults: function(options, themeOptions) {\r\n applyAxisDefaults(options, themeOptions);\r\n applySeriesDefaults(options, themeOptions);\r\n },\r\n\r\n _getModel: function() {\r\n var chart = this,\r\n options = chart.options,\r\n model = new RootElement(chart._modelOptions()),\r\n plotArea;\r\n\r\n model.chart = chart;\r\n\r\n Title.buildTitle(options.title, model);\r\n\r\n plotArea = model._plotArea = chart._createPlotArea();\r\n if (options.legend.visible) {\r\n model.append(new Legend(plotArea.options.legend));\r\n }\r\n model.append(plotArea);\r\n model.reflow();\r\n\r\n return model;\r\n },\r\n\r\n _modelOptions: function() {\r\n var chart = this,\r\n options = chart.options,\r\n element = chart.element,\r\n height = math.floor(element.height()),\r\n width = math.floor(element.width());\r\n\r\n chart._size = null;\r\n\r\n return deepExtend({\r\n width: width || DEFAULT_WIDTH,\r\n height: height || DEFAULT_HEIGHT,\r\n transitions: options.transitions\r\n }, options.chartArea);\r\n },\r\n\r\n _createPlotArea: function(skipSeries) {\r\n var chart = this,\r\n options = chart.options;\r\n\r\n return PlotAreaFactory.current.create(skipSeries ? [] : options.series, options);\r\n },\r\n\r\n _setupSelection: function() {\r\n var chart = this,\r\n plotArea = chart._plotArea,\r\n axes = plotArea.axes,\r\n selections = chart._selections = [],\r\n selection, i, axis,\r\n min, max, options;\r\n\r\n if (!chart._selectStartHandler) {\r\n chart._selectStartHandler = proxy(chart._selectStart, chart);\r\n chart._selectHandler = proxy(chart._select, chart);\r\n chart._selectEndHandler = proxy(chart._selectEnd, chart);\r\n }\r\n\r\n for (i = 0; i < axes.length; i++) {\r\n axis = axes[i];\r\n options = axis.options;\r\n if (axis instanceof CategoryAxis && options.select && !options.vertical) {\r\n min = 0;\r\n max = options.categories.length - 1;\r\n\r\n if (axis instanceof DateCategoryAxis) {\r\n min = options.categories[min];\r\n max = options.categories[max];\r\n }\r\n\r\n if (!options.justified) {\r\n if (axis instanceof DateCategoryAxis) {\r\n max = addDuration(max, 1, options.baseUnit, options.weekStartDay);\r\n } else {\r\n max++;\r\n }\r\n }\r\n\r\n selection = new Selection(chart, axis,\r\n deepExtend({ min: min, max: max }, options.select)\r\n );\r\n\r\n selection.bind(SELECT_START, chart._selectStartHandler);\r\n selection.bind(SELECT, chart._selectHandler);\r\n selection.bind(SELECT_END, chart._selectEndHandler);\r\n\r\n selections.push(selection);\r\n }\r\n }\r\n },\r\n\r\n _selectStart: function(e) {\r\n return this.trigger(SELECT_START, e);\r\n },\r\n\r\n _select: function(e) {\r\n return this.trigger(SELECT, e);\r\n },\r\n\r\n _selectEnd: function(e) {\r\n return this.trigger(SELECT_END, e);\r\n },\r\n\r\n _attachEvents: function() {\r\n var chart = this,\r\n element = chart.element;\r\n\r\n element.on(CONTEXTMENU_NS, proxy(chart._click, chart));\r\n element.on(MOUSEOVER_NS, proxy(chart._mouseover, chart));\r\n element.on(MOUSEOUT_NS, proxy(chart._mouseout, chart));\r\n element.on(MOUSEWHEEL_NS, proxy(chart._mousewheel, chart));\r\n element.on(MOUSELEAVE_NS, proxy(chart._mouseleave, chart));\r\n\r\n chart._mousemove = kendo.throttle(\r\n proxy(chart._mousemove, chart),\r\n MOUSEMOVE_DELAY\r\n );\r\n\r\n if (chart._shouldAttachMouseMove()) {\r\n element.on(MOUSEMOVE_NS, chart._mousemove);\r\n }\r\n\r\n if (kendo.UserEvents) {\r\n chart._userEvents = new kendo.UserEvents(element, {\r\n global: true,\r\n filter: \":not(.k-selector)\",\r\n multiTouch: false,\r\n tap: proxy(chart._tap, chart),\r\n start: proxy(chart._start, chart),\r\n move: proxy(chart._move, chart),\r\n end: proxy(chart._end, chart)\r\n });\r\n }\r\n },\r\n\r\n _mouseout: function(e) {\r\n var chart = this,\r\n element = chart._getChartElement(e);\r\n\r\n if (element && element.leave) {\r\n element.leave(chart, e);\r\n }\r\n },\r\n\r\n _start: function(e) {\r\n var chart = this,\r\n events = chart._events;\r\n\r\n if (defined(events[DRAG_START] || events[DRAG] || events[DRAG_END])) {\r\n chart._startNavigation(e, DRAG_START);\r\n }\r\n },\r\n\r\n _move: function(e) {\r\n var chart = this,\r\n state = chart._navState,\r\n axes,\r\n ranges = {},\r\n i, currentAxis, axisName, axis, delta;\r\n\r\n if (state) {\r\n e.preventDefault();\r\n\r\n axes = state.axes;\r\n\r\n for (i = 0; i < axes.length; i++) {\r\n currentAxis = axes[i];\r\n axisName = currentAxis.options.name;\r\n if (axisName) {\r\n axis = currentAxis.options.vertical ? e.y : e.x;\r\n delta = axis.startLocation - axis.location;\r\n\r\n if (delta !== 0) {\r\n ranges[currentAxis.options.name] =\r\n currentAxis.translateRange(delta);\r\n }\r\n }\r\n }\r\n\r\n state.axisRanges = ranges;\r\n chart.trigger(DRAG, {\r\n axisRanges: ranges,\r\n originalEvent: e\r\n });\r\n }\r\n },\r\n\r\n _end: function(e) {\r\n this._endNavigation(e, DRAG_END);\r\n },\r\n\r\n _mousewheel: function(e) {\r\n var chart = this,\r\n origEvent = e.originalEvent,\r\n prevented,\r\n delta = mwDelta(e),\r\n totalDelta,\r\n state = chart._navState,\r\n axes,\r\n i,\r\n currentAxis,\r\n axisName,\r\n ranges = {};\r\n\r\n if (!state) {\r\n prevented = chart._startNavigation(origEvent, ZOOM_START);\r\n if (!prevented) {\r\n state = chart._navState;\r\n }\r\n }\r\n\r\n if (state) {\r\n totalDelta = state.totalDelta || delta;\r\n state.totalDelta = totalDelta + delta;\r\n\r\n axes = chart._navState.axes;\r\n\r\n for (i = 0; i < axes.length; i++) {\r\n currentAxis = axes[i];\r\n axisName = currentAxis.options.name;\r\n if (axisName) {\r\n ranges[axisName] = currentAxis.scaleRange(-totalDelta);\r\n }\r\n }\r\n\r\n chart.trigger(ZOOM, {\r\n delta: delta,\r\n axisRanges: ranges,\r\n originalEvent: e\r\n });\r\n\r\n if (chart._mwTimeout) {\r\n clearTimeout(chart._mwTimeout);\r\n }\r\n\r\n chart._mwTimeout = setTimeout(function() {\r\n chart._endNavigation(e, ZOOM_END);\r\n }, MOUSEWHEEL_DELAY);\r\n }\r\n },\r\n\r\n _startNavigation: function(e, chartEvent) {\r\n var chart = this,\r\n coords = chart._eventCoordinates(e),\r\n plotArea = chart._model._plotArea,\r\n pane = plotArea.findPointPane(coords),\r\n axes = plotArea.axes.slice(0),\r\n i,\r\n currentAxis,\r\n inAxis = false,\r\n prevented;\r\n\r\n if (!pane) {\r\n return;\r\n }\r\n\r\n for (i = 0; i < axes.length; i++) {\r\n currentAxis = axes[i];\r\n if (currentAxis.box.containsPoint(coords)) {\r\n inAxis = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!inAxis && plotArea.backgroundBox().containsPoint(coords)) {\r\n prevented = chart.trigger(chartEvent, {\r\n axisRanges: axisRanges(axes),\r\n originalEvent: e\r\n });\r\n\r\n if (prevented) {\r\n chart._userEvents.cancel();\r\n } else {\r\n chart._suppressHover = true;\r\n chart._unsetActivePoint();\r\n chart._navState = {\r\n pane: pane,\r\n axes: axes\r\n };\r\n }\r\n }\r\n },\r\n\r\n _endNavigation: function(e, chartEvent) {\r\n var chart = this;\r\n\r\n if (chart._navState) {\r\n chart.trigger(chartEvent, {\r\n axisRanges: chart._navState.axisRanges,\r\n originalEvent: e\r\n });\r\n chart._suppressHover = false;\r\n chart._navState = null;\r\n }\r\n },\r\n\r\n _getChartElement: function(e, match) {\r\n var element = this.surface.eventTarget(e);\r\n if (!element) {\r\n return;\r\n }\r\n\r\n var chartElement;\r\n while (element && !chartElement) {\r\n chartElement = element.chartElement;\r\n element = element.parent;\r\n }\r\n\r\n if (chartElement) {\r\n if (chartElement.aliasFor) {\r\n chartElement = chartElement.aliasFor(e, this._eventCoordinates(e));\r\n }\r\n\r\n if (match) {\r\n chartElement = chartElement.closest(match);\r\n }\r\n\r\n return chartElement;\r\n }\r\n },\r\n\r\n _eventCoordinates: function(e) {\r\n var chart = this,\r\n isTouch = defined((e.x || {}).client),\r\n clientX = isTouch ? e.x.client : e.clientX,\r\n clientY = isTouch ? e.y.client : e.clientY;\r\n\r\n return chart._toModelCoordinates(clientX, clientY);\r\n },\r\n\r\n _toModelCoordinates: function(clientX, clientY) {\r\n var element = this.element,\r\n offset = element.offset(),\r\n paddingLeft = parseInt(element.css(\"paddingLeft\"), 10),\r\n paddingTop = parseInt(element.css(\"paddingTop\"), 10),\r\n win = $(window);\r\n\r\n return new Point2D(\r\n clientX - offset.left - paddingLeft + win.scrollLeft(),\r\n clientY - offset.top - paddingTop + win.scrollTop()\r\n );\r\n },\r\n\r\n _tap: function(e) {\r\n var chart = this,\r\n element = chart._getChartElement(e);\r\n\r\n if (chart._activePoint === element) {\r\n chart._click(e);\r\n } else {\r\n if (!chart._startHover(e)) {\r\n chart._unsetActivePoint();\r\n }\r\n\r\n chart._click(e);\r\n }\r\n },\r\n\r\n _click: function(e) {\r\n var chart = this,\r\n element = chart._getChartElement(e);\r\n\r\n while (element) {\r\n if (element.click) {\r\n element.click(chart, e);\r\n }\r\n\r\n element = element.parent;\r\n }\r\n },\r\n\r\n _startHover: function(e) {\r\n var chart = this,\r\n element = chart._getChartElement(e),\r\n tooltip = chart._tooltip,\r\n highlight = chart._highlight,\r\n tooltipOptions = chart.options.tooltip,\r\n point;\r\n\r\n\r\n if (chart._suppressHover || !highlight || highlight.isHighlighted(element) || chart._sharedTooltip()) {\r\n return;\r\n }\r\n\r\n point = chart._getChartElement(e, function(element) {\r\n return element.hover;\r\n });\r\n\r\n if (point && !point.hover(chart, e)) {\r\n chart._activePoint = point;\r\n\r\n tooltipOptions = deepExtend({}, tooltipOptions, point.options.tooltip);\r\n if (tooltipOptions.visible) {\r\n tooltip.show(point);\r\n }\r\n\r\n highlight.show(point);\r\n\r\n return point.tooltipTracking;\r\n }\r\n },\r\n\r\n _mouseover: function(e) {\r\n var chart = this;\r\n\r\n if (chart._startHover(e)) {\r\n $(document).on(MOUSEMOVE_TRACKING, proxy(chart._mouseMoveTracking, chart));\r\n }\r\n },\r\n\r\n _mouseMoveTracking: function(e) {\r\n var chart = this,\r\n options = chart.options,\r\n tooltip = chart._tooltip,\r\n highlight = chart._highlight,\r\n coords = chart._eventCoordinates(e),\r\n point = chart._activePoint,\r\n tooltipOptions, owner, seriesPoint;\r\n\r\n if (chart._plotArea.box.containsPoint(coords)) {\r\n if (point && point.tooltipTracking && point.series && point.parent.getNearestPoint) {\r\n seriesPoint = point.parent.getNearestPoint(coords.x, coords.y, point.seriesIx);\r\n if (seriesPoint && seriesPoint != point) {\r\n seriesPoint.hover(chart, e);\r\n chart._activePoint = seriesPoint;\r\n\r\n tooltipOptions = deepExtend({}, options.tooltip, point.options.tooltip);\r\n if (tooltipOptions.visible) {\r\n tooltip.show(seriesPoint);\r\n }\r\n\r\n highlight.show(seriesPoint);\r\n }\r\n }\r\n } else {\r\n $(document).off(MOUSEMOVE_TRACKING);\r\n chart._unsetActivePoint();\r\n }\r\n },\r\n\r\n _mousemove: function(e) {\r\n var coords = this._eventCoordinates(e);\r\n\r\n this._trackCrosshairs(coords);\r\n\r\n if (this._sharedTooltip()) {\r\n this._trackSharedTooltip(coords, e);\r\n }\r\n },\r\n\r\n _trackCrosshairs: function(coords) {\r\n var crosshairs = this._plotArea.crosshairs,\r\n i,\r\n current;\r\n\r\n for (i = 0; i < crosshairs.length; i++) {\r\n current = crosshairs[i];\r\n\r\n if (current.box.containsPoint(coords)) {\r\n current.showAt(coords);\r\n } else {\r\n current.hide();\r\n }\r\n }\r\n },\r\n\r\n _trackSharedTooltip: function(coords, e) {\r\n var chart = this,\r\n options = chart.options,\r\n plotArea = chart._plotArea,\r\n categoryAxis = plotArea.categoryAxis,\r\n tooltip = chart._tooltip,\r\n tooltipOptions = options.tooltip,\r\n highlight = chart._highlight,\r\n index, points;\r\n\r\n if (plotArea.box.containsPoint(coords)) {\r\n index = categoryAxis.pointCategoryIndex(coords);\r\n if (index !== chart._tooltipCategoryIx) {\r\n points = plotArea.pointsByCategoryIndex(index);\r\n\r\n var pointArgs = $.map(points, function(point) {\r\n return point.eventArgs(e);\r\n });\r\n\r\n var hoverArgs = pointArgs[0] || {};\r\n hoverArgs.categoryPoints = pointArgs;\r\n\r\n if (points.length > 0 && !this.trigger(SERIES_HOVER, hoverArgs)) {\r\n if (tooltipOptions.visible) {\r\n tooltip.showAt(points, coords);\r\n }\r\n\r\n highlight.show(points);\r\n } else {\r\n tooltip.hide();\r\n }\r\n\r\n chart._tooltipCategoryIx = index;\r\n }\r\n }\r\n },\r\n\r\n _mouseleave: function(e) {\r\n var chart = this,\r\n plotArea = chart._plotArea,\r\n tooltip = chart._tooltip,\r\n highlight = chart._highlight,\r\n target = e.relatedTarget;\r\n\r\n if (!(target && $(target).closest(tooltip.element).length)) {\r\n chart._mousemove.cancel();\r\n\r\n plotArea.hideCrosshairs();\r\n\r\n highlight.hide();\r\n\r\n setTimeout(proxy(tooltip.hide, tooltip), TOOLTIP_HIDE_DELAY);\r\n chart._tooltipCategoryIx = null;\r\n }\r\n },\r\n\r\n _unsetActivePoint: function() {\r\n var chart = this,\r\n tooltip = chart._tooltip,\r\n highlight = chart._highlight;\r\n\r\n chart._activePoint = null;\r\n\r\n if (tooltip) {\r\n tooltip.hide();\r\n }\r\n\r\n if (highlight) {\r\n highlight.hide();\r\n }\r\n },\r\n\r\n _onDataChanged: function() {\r\n var chart = this,\r\n options = chart.options,\r\n series = chart._sourceSeries || options.series,\r\n seriesIx,\r\n seriesLength = series.length,\r\n data = chart.dataSource.view(),\r\n grouped = (chart.dataSource.group() || []).length > 0,\r\n processedSeries = [],\r\n currentSeries;\r\n\r\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\r\n currentSeries = series[seriesIx];\r\n\r\n if (chart._isBindable(currentSeries) && grouped) {\r\n append(processedSeries,\r\n groupSeries(currentSeries, data));\r\n } else {\r\n processedSeries.push(currentSeries || []);\r\n }\r\n }\r\n\r\n chart._sourceSeries = series;\r\n options.series = processedSeries;\r\n\r\n applySeriesColors(chart.options);\r\n\r\n chart._bindSeries();\r\n chart._bindCategories();\r\n chart._hasData = true;\r\n\r\n chart._deferRedraw();\r\n },\r\n\r\n _deferRedraw: function() {\r\n var chart = this;\r\n\r\n if (kendo.support.vml) {\r\n chart._clearRedrawTimeout();\r\n chart._redrawTimeout = setTimeout(function() {\r\n if (!chart.surface) {\r\n return;\r\n }\r\n\r\n chart.trigger(DATABOUND);\r\n chart._redraw();\r\n }, 0);\r\n } else {\r\n chart.trigger(DATABOUND);\r\n chart._redraw();\r\n }\r\n },\r\n\r\n _clearRedrawTimeout: function() {\r\n if (this._redrawTimeout) {\r\n clearInterval(this._redrawTimeout);\r\n this._redrawTimeout = null;\r\n }\r\n },\r\n\r\n _bindSeries: function() {\r\n var chart = this,\r\n data = chart.dataSource.view(),\r\n series = chart.options.series,\r\n seriesIx,\r\n seriesLength = series.length,\r\n currentSeries,\r\n groupIx,\r\n seriesData;\r\n\r\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\r\n currentSeries = series[seriesIx];\r\n\r\n if (chart._isBindable(currentSeries)) {\r\n groupIx = currentSeries._groupIx;\r\n seriesData = defined(groupIx) ? (data[groupIx] || {}).items : data;\r\n\r\n if (currentSeries.autoBind !== false) {\r\n currentSeries.data = seriesData;\r\n }\r\n }\r\n }\r\n },\r\n\r\n _bindCategories: function() {\r\n var chart = this,\r\n data = chart.dataSource.view() || [],\r\n grouped = (chart.dataSource.group() || []).length > 0,\r\n categoriesData = data,\r\n options = chart.options,\r\n definitions = [].concat(options.categoryAxis),\r\n axisIx,\r\n axis;\r\n\r\n if (grouped) {\r\n if (data.length) {\r\n categoriesData = data[0].items;\r\n }\r\n }\r\n\r\n for (axisIx = 0; axisIx < definitions.length; axisIx++) {\r\n axis = definitions[axisIx];\r\n if (axis.autoBind !== false) {\r\n chart._bindCategoryAxis(axis, categoriesData, axisIx);\r\n }\r\n }\r\n },\r\n\r\n _bindCategoryAxis: function(axis, data, axisIx) {\r\n var count = (data || []).length,\r\n categoryIx,\r\n category,\r\n row;\r\n\r\n if (axis.field) {\r\n axis.categories = [];\r\n for (categoryIx = 0; categoryIx < count; categoryIx++) {\r\n row = data[categoryIx];\r\n\r\n category = getField(axis.field, row);\r\n if (categoryIx === 0) {\r\n axis.categories = [category];\r\n axis.dataItems = [row];\r\n } else {\r\n axis.categories.push(category);\r\n axis.dataItems.push(row);\r\n }\r\n }\r\n } else {\r\n this._bindCategoryAxisFromSeries(axis, axisIx);\r\n }\r\n },\r\n\r\n _bindCategoryAxisFromSeries: function(axis, axisIx) {\r\n var chart = this,\r\n items = [],\r\n result,\r\n series = chart.options.series,\r\n seriesLength = series.length,\r\n seriesIx,\r\n s,\r\n onAxis,\r\n data,\r\n dataIx,\r\n dataLength,\r\n dataRow,\r\n category,\r\n uniqueCategories = {},\r\n getFn,\r\n dateAxis;\r\n\r\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\r\n s = series[seriesIx];\r\n onAxis = s.categoryAxis === axis.name || (!s.categoryAxis && axisIx === 0);\r\n data = s.data;\r\n dataLength = data.length;\r\n\r\n if (s.categoryField && onAxis && dataLength > 0) {\r\n dateAxis = isDateAxis(axis, getField(s.categoryField, data[0]));\r\n getFn = dateAxis ? getDateField : getField;\r\n\r\n for (dataIx = 0; dataIx < dataLength; dataIx++) {\r\n dataRow = data[dataIx];\r\n category = getFn(s.categoryField, dataRow);\r\n\r\n if (dateAxis || !uniqueCategories[category]) {\r\n items.push([category, dataRow]);\r\n\r\n if (!dateAxis) {\r\n uniqueCategories[category] = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (items.length > 0) {\r\n if (dateAxis) {\r\n items = uniqueDates(items, function(a, b) {\r\n return dateComparer(a[0], b[0]);\r\n });\r\n }\r\n\r\n result = transpose(items);\r\n axis.categories = result[0];\r\n axis.dataItems = result[1];\r\n }\r\n },\r\n\r\n _isBindable: function(series) {\r\n var valueFields = SeriesBinder.current.valueFields(series),\r\n result = true,\r\n field, i;\r\n\r\n for (i = 0; i < valueFields.length; i++) {\r\n field = valueFields[i];\r\n if (field === VALUE) {\r\n field = \"field\";\r\n } else {\r\n field = field + \"Field\";\r\n }\r\n\r\n if (!defined(series[field])) {\r\n result = false;\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n _legendItemClick: function(seriesIndex, pointIndex) {\r\n var chart = this,\r\n plotArea = chart._plotArea,\r\n currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex],\r\n originalSeries = (chart._sourceSeries || [])[seriesIndex] || currentSeries,\r\n transitionsState, visible, point;\r\n\r\n if (inArray(currentSeries.type, [PIE, DONUT,FUNNEL])) {\r\n point = originalSeries.data[pointIndex];\r\n if (!defined(point.visible)) {\r\n visible = false;\r\n } else {\r\n visible = !point.visible;\r\n }\r\n point.visible = visible;\r\n } else {\r\n visible = !originalSeries.visible;\r\n originalSeries.visible = visible;\r\n currentSeries.visible = visible;\r\n }\r\n\r\n if (chart.options.transitions) {\r\n chart.options.transitions = false;\r\n transitionsState = true;\r\n }\r\n chart.redraw();\r\n if (transitionsState) {\r\n chart.options.transitions = true;\r\n }\r\n },\r\n\r\n _legendItemHover: function(seriesIndex, pointIndex) {\r\n var chart = this,\r\n plotArea = chart._plotArea,\r\n highlight = chart._highlight,\r\n currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex],\r\n index, items;\r\n\r\n if (inArray(currentSeries.type, [PIE, DONUT, FUNNEL])) {\r\n index = pointIndex;\r\n } else {\r\n index = seriesIndex;\r\n }\r\n\r\n items = plotArea.pointsBySeriesIndex(index);\r\n highlight.show(items);\r\n },\r\n\r\n _shouldAttachMouseMove: function() {\r\n var chart = this;\r\n\r\n return chart._plotArea.crosshairs.length || (chart._tooltip && chart._sharedTooltip());\r\n },\r\n\r\n setOptions: function(options) {\r\n var chart = this,\r\n dataSource = options.dataSource;\r\n\r\n options.dataSource = undefined;\r\n\r\n chart._originalOptions = deepExtend(chart._originalOptions, options);\r\n chart.options = deepExtend({}, chart._originalOptions);\r\n chart._sourceSeries = null;\r\n $(document).off(MOUSEMOVE_NS);\r\n\r\n Widget.fn._setEvents.call(chart, options);\r\n\r\n chart._initTheme(chart.options);\r\n\r\n if (dataSource) {\r\n chart.setDataSource(dataSource);\r\n }\r\n\r\n if (chart._hasDataSource) {\r\n chart.refresh();\r\n } else {\r\n chart._bindCategories();\r\n chart.redraw();\r\n }\r\n\r\n if (chart._shouldAttachMouseMove()) {\r\n chart.element.on(MOUSEMOVE_NS, chart._mousemove);\r\n }\r\n },\r\n\r\n destroy: function() {\r\n var chart = this,\r\n dataSource = chart.dataSource;\r\n\r\n chart.element.off(NS);\r\n dataSource.unbind(CHANGE, chart._dataChangeHandler);\r\n $(document).off(MOUSEMOVE_TRACKING);\r\n\r\n if (chart._userEvents) {\r\n chart._userEvents.destroy();\r\n }\r\n\r\n chart._destroyView();\r\n\r\n chart.surface.destroy();\r\n chart.surface = null;\r\n\r\n chart._clearRedrawTimeout();\r\n\r\n Widget.fn.destroy.call(chart);\r\n },\r\n\r\n _destroyView: function() {\r\n var chart = this,\r\n model = chart._model,\r\n selections = chart._selections;\r\n\r\n if (model) {\r\n model.destroy();\r\n chart._model = null;\r\n }\r\n\r\n if (selections) {\r\n while (selections.length > 0) {\r\n selections.shift().destroy();\r\n }\r\n }\r\n\r\n chart._unsetActivePoint();\r\n\r\n if (chart._tooltip) {\r\n chart._tooltip.destroy();\r\n }\r\n\r\n if (chart._highlight) {\r\n chart._highlight.destroy();\r\n }\r\n }\r\n });\r\n\r\n dataviz.ExportMixin.extend(Chart.fn);\r\n\r\n if (kendo.PDFMixin) {\r\n kendo.PDFMixin.extend(Chart.fn);\r\n }\r\n\r\n var PlotAreaFactory = Class.extend({\r\n init: function() {\r\n this._registry = [];\r\n },\r\n\r\n register: function(type, seriesTypes) {\r\n this._registry.push({\r\n type: type,\r\n seriesTypes: seriesTypes\r\n });\r\n },\r\n\r\n create: function(srcSeries, options) {\r\n var registry = this._registry,\r\n match = registry[0],\r\n i,\r\n entry,\r\n series;\r\n\r\n for (i = 0; i < registry.length; i++) {\r\n entry = registry[i];\r\n series = filterSeriesByType(srcSeries, entry.seriesTypes);\r\n\r\n if (series.length > 0) {\r\n match = entry;\r\n break;\r\n }\r\n }\r\n\r\n return new match.type(series, options);\r\n }\r\n });\r\n PlotAreaFactory.current = new PlotAreaFactory();\r\n\r\n var SeriesBinder = Class.extend({\r\n init: function() {\r\n this._valueFields = {};\r\n this._otherFields = {};\r\n this._nullValue = {};\r\n this._undefinedValue = {};\r\n },\r\n\r\n register: function(seriesTypes, valueFields, otherFields) {\r\n var binder = this,\r\n i,\r\n type;\r\n\r\n valueFields = valueFields || [VALUE];\r\n\r\n for (i = 0; i < seriesTypes.length; i++) {\r\n type = seriesTypes[i];\r\n\r\n binder._valueFields[type] = valueFields;\r\n binder._otherFields[type] = otherFields;\r\n binder._nullValue[type] = binder._makeValue(valueFields, null);\r\n binder._undefinedValue[type] = binder._makeValue(valueFields, undefined);\r\n }\r\n },\r\n\r\n canonicalFields: function(series) {\r\n return this.valueFields(series).concat(this.otherFields(series));\r\n },\r\n\r\n valueFields: function(series) {\r\n return this._valueFields[series.type] || [VALUE];\r\n },\r\n\r\n otherFields: function(series) {\r\n return this._otherFields[series.type] || [VALUE];\r\n },\r\n\r\n bindPoint: function(series, pointIx) {\r\n var binder = this,\r\n data = series.data,\r\n pointData = data[pointIx],\r\n result = { valueFields: { value: pointData } },\r\n fields, fieldData,\r\n srcValueFields, srcPointFields,\r\n valueFields = binder.valueFields(series),\r\n otherFields = binder._otherFields[series.type],\r\n value;\r\n\r\n if (pointData === null) {\r\n value = binder._nullValue[series.type];\r\n } else if (!defined(pointData)) {\r\n value = binder._undefinedValue[series.type];\r\n } else if (isArray(pointData)) {\r\n fieldData = pointData.slice(valueFields.length);\r\n value = binder._bindFromArray(pointData, valueFields);\r\n fields = binder._bindFromArray(fieldData, otherFields);\r\n } else if (typeof pointData === OBJECT) {\r\n srcValueFields = binder.sourceFields(series, valueFields);\r\n srcPointFields = binder.sourceFields(series, otherFields);\r\n\r\n value = binder._bindFromObject(pointData, valueFields, srcValueFields);\r\n fields = binder._bindFromObject(pointData, otherFields, srcPointFields);\r\n }\r\n\r\n if (defined(value)) {\r\n if (valueFields.length === 1) {\r\n result.valueFields.value = value[valueFields[0]];\r\n } else {\r\n result.valueFields = value;\r\n }\r\n }\r\n\r\n result.fields = fields || {};\r\n\r\n return result;\r\n },\r\n\r\n _makeValue: function(fields, initialValue) {\r\n var value = {},\r\n i,\r\n length = fields.length,\r\n fieldName;\r\n\r\n for (i = 0; i < length; i++) {\r\n fieldName = fields[i];\r\n value[fieldName] = initialValue;\r\n }\r\n\r\n return value;\r\n },\r\n\r\n _bindFromArray: function(array, fields) {\r\n var value = {},\r\n i,\r\n length;\r\n\r\n if (fields) {\r\n length = math.min(fields.length, array.length);\r\n\r\n for (i = 0; i < length; i++) {\r\n value[fields[i]] = array[i];\r\n }\r\n }\r\n\r\n return value;\r\n },\r\n\r\n _bindFromObject: function(object, fields, srcFields) {\r\n var value = {},\r\n i,\r\n length,\r\n fieldName,\r\n srcFieldName;\r\n\r\n if (fields) {\r\n length = fields.length;\r\n srcFields = srcFields || fields;\r\n\r\n for (i = 0; i < length; i++) {\r\n fieldName = fields[i];\r\n srcFieldName = srcFields[i];\r\n value[fieldName] = getField(srcFieldName, object);\r\n }\r\n }\r\n\r\n return value;\r\n },\r\n\r\n sourceFields: function(series, canonicalFields) {\r\n var i, length, fieldName,\r\n sourceFields, sourceFieldName;\r\n\r\n if (canonicalFields) {\r\n length = canonicalFields.length;\r\n sourceFields = [];\r\n\r\n for (i = 0; i < length; i++) {\r\n fieldName = canonicalFields[i];\r\n sourceFieldName = fieldName === VALUE ? \"field\" : fieldName + \"Field\";\r\n\r\n sourceFields.push(series[sourceFieldName] || fieldName);\r\n }\r\n }\r\n\r\n return sourceFields;\r\n }\r\n });\r\n SeriesBinder.current = new SeriesBinder();\r\n\r\n var BarLabel = ChartElement.extend({\r\n init: function(content, options) {\r\n var barLabel = this;\r\n ChartElement.fn.init.call(barLabel, options);\r\n\r\n this.textBox = new TextBox(content, barLabel.options);\r\n barLabel.append(this.textBox);\r\n },\r\n\r\n options: {\r\n position: OUTSIDE_END,\r\n margin: getSpacing(3),\r\n padding: getSpacing(4),\r\n color: BLACK,\r\n background: \"\",\r\n border: {\r\n width: 1,\r\n color: \"\"\r\n },\r\n aboveAxis: true,\r\n vertical: false,\r\n animation: {\r\n type: FADEIN,\r\n delay: INITIAL_ANIMATION_DURATION\r\n },\r\n zIndex: 2\r\n },\r\n\r\n createVisual: function() {\r\n this.textBox.options.noclip = this.options.noclip;\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var barLabel = this,\r\n options = barLabel.options,\r\n vertical = options.vertical,\r\n aboveAxis = options.aboveAxis,\r\n text = barLabel.children[0],\r\n box = text.box,\r\n padding = text.options.padding;\r\n\r\n text.options.align = vertical ? CENTER : LEFT;\r\n text.options.vAlign = vertical ? TOP : CENTER;\r\n\r\n if (options.position == INSIDE_END) {\r\n if (vertical) {\r\n text.options.vAlign = TOP;\r\n\r\n if (!aboveAxis && box.height() < targetBox.height()) {\r\n text.options.vAlign = BOTTOM;\r\n }\r\n } else {\r\n text.options.align = aboveAxis ? RIGHT : LEFT;\r\n }\r\n } else if (options.position == CENTER) {\r\n text.options.vAlign = CENTER;\r\n text.options.align = CENTER;\r\n } else if (options.position == INSIDE_BASE) {\r\n if (vertical) {\r\n text.options.vAlign = aboveAxis ? BOTTOM : TOP;\r\n } else {\r\n text.options.align = aboveAxis ? LEFT : RIGHT;\r\n }\r\n } else if (options.position == OUTSIDE_END) {\r\n if (vertical) {\r\n if (aboveAxis) {\r\n targetBox = new Box2D(\r\n targetBox.x1, targetBox.y1 - box.height(),\r\n targetBox.x2, targetBox.y1\r\n );\r\n } else {\r\n targetBox = new Box2D(\r\n targetBox.x1, targetBox.y2,\r\n targetBox.x2, targetBox.y2 + box.height()\r\n );\r\n }\r\n } else {\r\n text.options.align = CENTER;\r\n if (aboveAxis) {\r\n targetBox = new Box2D(\r\n targetBox.x2, targetBox.y1,\r\n targetBox.x2 + box.width(), targetBox.y2\r\n );\r\n } else {\r\n targetBox = new Box2D(\r\n targetBox.x1 - box.width(), targetBox.y1,\r\n targetBox.x1, targetBox.y2\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (!options.rotation) {\r\n if (vertical) {\r\n padding.left = padding.right =\r\n (targetBox.width() - text.contentBox.width()) / 2;\r\n } else {\r\n padding.top = padding.bottom =\r\n (targetBox.height() - text.contentBox.height()) / 2;\r\n }\r\n }\r\n\r\n text.reflow(targetBox);\r\n },\r\n\r\n alignToClipBox: function(clipBox) {\r\n var barLabel = this,\r\n vertical = barLabel.options.vertical,\r\n field = vertical ? Y : X,\r\n start = field + \"1\",\r\n end = field + \"2\",\r\n text = barLabel.children[0],\r\n parentBox = barLabel.parent.box,\r\n targetBox;\r\n\r\n if (parentBox[start] < clipBox[start] || clipBox[end] < parentBox[end]) {\r\n targetBox = text.paddingBox.clone();\r\n targetBox[start] = math.max(parentBox[start], clipBox[start]);\r\n targetBox[end] = math.min(parentBox[end], clipBox[end]);\r\n\r\n this.reflow(targetBox);\r\n }\r\n }\r\n });\r\n\r\n var LegendItem = BoxElement.extend({\r\n init: function(options) {\r\n var item = this;\r\n\r\n BoxElement.fn.init.call(item, options);\r\n\r\n item.createContainer();\r\n item.createMarker();\r\n item.createLabel();\r\n },\r\n\r\n createContainer: function() {\r\n var item = this;\r\n\r\n item.container = new FloatElement({ vertical: false, wrap: false, align: CENTER });\r\n item.append(item.container);\r\n },\r\n\r\n createMarker: function() {\r\n this.container.append(new ShapeElement(this.markerOptions()));\r\n },\r\n\r\n markerOptions: function() {\r\n var options = this.options;\r\n var markerColor = options.markerColor;\r\n return deepExtend({}, options.markers, {\r\n background: markerColor,\r\n border: {\r\n color: markerColor\r\n }\r\n });\r\n },\r\n\r\n createLabel: function() {\r\n var item = this,\r\n options = item.options,\r\n labelOptions = deepExtend({}, options.labels);\r\n\r\n item.container.append(new TextBox(options.text, labelOptions));\r\n },\r\n\r\n renderComplete: function() {\r\n ChartElement.fn.renderComplete.call(this);\r\n\r\n var cursor = this.options.cursor || {};\r\n var eventSink = this._itemOverlay = draw.Path.fromRect(this.container.box.toRect(), {\r\n fill: {\r\n color: WHITE,\r\n opacity: 0\r\n },\r\n stroke: null,\r\n cursor: cursor.style || cursor\r\n });\r\n\r\n this.appendVisual(eventSink);\r\n },\r\n\r\n click: function(widget, e) {\r\n var args = this.eventArgs(e);\r\n\r\n if (!widget.trigger(LEGEND_ITEM_CLICK, args)) {\r\n e.preventDefault();\r\n widget._legendItemClick(args.seriesIndex, args.pointIndex);\r\n }\r\n },\r\n\r\n hover: function(widget, e) {\r\n var args = this.eventArgs(e);\r\n\r\n if (!widget.trigger(LEGEND_ITEM_HOVER, args)) {\r\n e.preventDefault();\r\n widget._legendItemHover(args.seriesIndex, args.pointIndex);\r\n }\r\n\r\n // Don't trigger point hover for legend items\r\n return true;\r\n },\r\n\r\n leave: function(widget) {\r\n widget._unsetActivePoint();\r\n },\r\n\r\n eventArgs: function(e) {\r\n var options = this.options;\r\n\r\n return {\r\n element: $(e.target),\r\n text: options.text,\r\n series: options.series,\r\n seriesIndex: options.series.index,\r\n pointIndex: options.pointIndex\r\n };\r\n },\r\n\r\n renderVisual: function() {\r\n var that = this;\r\n var options = that.options;\r\n var customVisual = options.visual;\r\n\r\n if (customVisual) {\r\n that.visual = customVisual({\r\n active: options.active,\r\n series: options.series,\r\n options: {\r\n markers: that.markerOptions(),\r\n labels: options.labels\r\n },\r\n createVisual: function() {\r\n ChartElement.fn.renderVisual.call(that);\r\n var defaultVisual = that.visual;\r\n delete that.visual;\r\n return defaultVisual;\r\n }\r\n });\r\n this.addVisual();\r\n } else {\r\n ChartElement.fn.renderVisual.call(that);\r\n }\r\n }\r\n });\r\n\r\n var LegendLayout = ChartElement.extend({\r\n render: function() {\r\n var legendItem, items = this.children;\r\n var options = this.options;\r\n var vertical = options.vertical;\r\n var spacing = options.spacing;\r\n\r\n var visual = this.visual = new draw.Layout(null, {\r\n spacing: vertical ? 0 : options.spacing,\r\n lineSpacing: vertical ? options.spacing : 0,\r\n orientation: vertical ? \"vertical\" : \"horizontal\"\r\n });\r\n\r\n for (var idx = 0; idx < items.length; idx++) {\r\n legendItem = items[idx];\r\n legendItem.reflow(new Box2D());\r\n legendItem.renderVisual();\r\n }\r\n },\r\n\r\n reflow: function(box) {\r\n this.visual.rect(box.toRect());\r\n this.visual.reflow();\r\n var bbox = this.visual.clippedBBox();\r\n if (bbox) {\r\n this.box = dataviz.rectToBox(bbox);\r\n } else {\r\n this.box = new Box2D();\r\n }\r\n },\r\n\r\n renderVisual: function() {\r\n this.addVisual();\r\n },\r\n\r\n createVisual: noop\r\n });\r\n\r\n var Legend = ChartElement.extend({\r\n init: function(options) {\r\n var legend = this;\r\n\r\n ChartElement.fn.init.call(legend, options);\r\n\r\n if (!inArray(legend.options.position, [TOP, RIGHT, BOTTOM, LEFT, CUSTOM])) {\r\n legend.options.position = RIGHT;\r\n }\r\n\r\n legend.createContainer();\r\n\r\n legend.createItems();\r\n },\r\n\r\n options: {\r\n position: RIGHT,\r\n items: [],\r\n labels: {\r\n margin: {\r\n left: 6\r\n }\r\n },\r\n offsetX: 0,\r\n offsetY: 0,\r\n margin: getSpacing(5),\r\n padding: getSpacing(5),\r\n border: {\r\n color: BLACK,\r\n width: 0\r\n },\r\n item: {\r\n cursor: POINTER\r\n },\r\n spacing: 6,\r\n background: \"\",\r\n zIndex: 1,\r\n markers: {\r\n border: {\r\n width: 1\r\n },\r\n width: 7,\r\n height: 7,\r\n type: \"rect\",\r\n align: LEFT,\r\n vAlign: CENTER\r\n }\r\n },\r\n\r\n createContainer: function() {\r\n var legend = this,\r\n options = legend.options,\r\n userAlign = options.align,\r\n position = options.position,\r\n align = position,\r\n vAlign = CENTER;\r\n\r\n if (position == CUSTOM) {\r\n align = LEFT;\r\n } else if (inArray(position, [TOP, BOTTOM])) {\r\n if (userAlign == \"start\") {\r\n align = LEFT;\r\n } else if (userAlign == \"end\") {\r\n align = RIGHT;\r\n } else {\r\n align = CENTER;\r\n }\r\n vAlign = position;\r\n } else if (userAlign) {\r\n if (userAlign == \"start\") {\r\n vAlign = TOP;\r\n } else if (userAlign == \"end\") {\r\n vAlign = BOTTOM;\r\n }\r\n }\r\n\r\n legend.container = new BoxElement({\r\n margin: options.margin,\r\n padding: options.padding,\r\n background: options.background,\r\n border: options.border,\r\n vAlign: vAlign,\r\n align: align,\r\n zIndex: options.zIndex,\r\n shrinkToFit: true\r\n });\r\n\r\n legend.append(legend.container);\r\n },\r\n\r\n createItems: function() {\r\n var legend = this,\r\n options = legend.options,\r\n items = options.items,\r\n count = items.length,\r\n vertical = legend.isVertical(),\r\n innerElement, i, item;\r\n\r\n innerElement = new LegendLayout({\r\n vertical: vertical,\r\n spacing: options.spacing\r\n });\r\n\r\n if (options.reverse) {\r\n items = items.slice(0).reverse();\r\n }\r\n\r\n for (i = 0; i < count; i++) {\r\n item = items[i];\r\n\r\n innerElement.append(new LegendItem(deepExtend({}, {\r\n markers: options.markers,\r\n labels: options.labels\r\n }, options.item, item)));\r\n }\r\n innerElement.render();\r\n\r\n legend.container.append(innerElement);\r\n },\r\n\r\n isVertical: function() {\r\n var legend = this,\r\n options = legend.options,\r\n orientation = options.orientation,\r\n position = options.position,\r\n vertical = (position == CUSTOM && orientation != HORIZONTAL) ||\r\n (defined(orientation) ? orientation != HORIZONTAL : inArray(position, [ LEFT, RIGHT ]));\r\n\r\n return vertical;\r\n },\r\n\r\n hasItems: function() {\r\n return this.container.children[0].children.length > 0;\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var legend = this,\r\n options = legend.options,\r\n container = legend.container;\r\n\r\n targetBox = targetBox.clone();\r\n\r\n if (!legend.hasItems()) {\r\n legend.box = targetBox;\r\n return;\r\n }\r\n\r\n if (options.position === CUSTOM) {\r\n legend.containerCustomReflow(targetBox);\r\n legend.box = targetBox;\r\n } else {\r\n legend.containerReflow(targetBox);\r\n }\r\n },\r\n\r\n containerReflow: function(targetBox) {\r\n var legend = this,\r\n options = legend.options,\r\n position = options.position,\r\n pos = position == TOP || position == BOTTOM ? X : Y,\r\n containerBox = targetBox.clone(),\r\n container = legend.container,\r\n width = options.width,\r\n height = options.height,\r\n vertical = legend.isVertical(),\r\n alignTarget = targetBox.clone(),\r\n box;\r\n\r\n if (position == LEFT || position == RIGHT) {\r\n containerBox.y1 = alignTarget.y1 = 0;\r\n }\r\n\r\n if (vertical && height) {\r\n containerBox.y2 = containerBox.y1 + height;\r\n containerBox.align(alignTarget, Y, container.options.vAlign);\r\n } else if (!vertical && width){\r\n containerBox.x2 = containerBox.x1 + width;\r\n containerBox.align(alignTarget, X, container.options.align);\r\n }\r\n\r\n container.reflow(containerBox);\r\n containerBox = container.box;\r\n box = containerBox.clone();\r\n if (options.offsetX || options.offsetY) {\r\n containerBox.translate(options.offsetX, options.offsetY);\r\n legend.container.reflow(containerBox);\r\n }\r\n\r\n box[pos + 1] = targetBox[pos + 1];\r\n box[pos + 2] = targetBox[pos + 2];\r\n\r\n legend.box = box;\r\n },\r\n\r\n containerCustomReflow: function (targetBox) {\r\n var legend = this,\r\n options = legend.options,\r\n offsetX = options.offsetX,\r\n offsetY = options.offsetY,\r\n container = legend.container,\r\n width = options.width,\r\n height = options.height,\r\n vertical = legend.isVertical(),\r\n containerBox = targetBox.clone();\r\n\r\n if (vertical && height) {\r\n containerBox.y2 = containerBox.y1 + height;\r\n } else if (!vertical && width){\r\n containerBox.x2 = containerBox.x1 + width;\r\n }\r\n container.reflow(containerBox);\r\n containerBox = container.box;\r\n\r\n container.reflow(Box2D(\r\n offsetX, offsetY,\r\n offsetX + containerBox.width(), offsetY + containerBox.height()\r\n ));\r\n },\r\n\r\n renderVisual: function() {\r\n if (this.hasItems()) {\r\n ChartElement.fn.renderVisual.call(this);\r\n }\r\n }\r\n });\r\n\r\n var CategoryAxis = Axis.extend({\r\n init: function(options) {\r\n var axis = this;\r\n\r\n Axis.fn.init.call(axis, options);\r\n\r\n options = axis.options;\r\n options.categories = options.categories.slice(0);\r\n\r\n axis._ticks = {};\r\n },\r\n\r\n options: {\r\n type: CATEGORY,\r\n categories: [],\r\n vertical: false,\r\n majorGridLines: {\r\n visible: false,\r\n width: 1,\r\n color: BLACK\r\n },\r\n labels: {\r\n zIndex: 1\r\n },\r\n justified: false\r\n },\r\n\r\n range: function() {\r\n return { min: 0, max: this.options.categories.length };\r\n },\r\n\r\n getTickPositions: function(itemsCount) {\r\n var axis = this,\r\n options = axis.options,\r\n vertical = options.vertical,\r\n justified = options.justified,\r\n lineBox = axis.lineBox(),\r\n size = vertical ? lineBox.height() : lineBox.width(),\r\n intervals = itemsCount - (justified ? 1 : 0),\r\n step = size / intervals,\r\n dim = vertical ? Y : X,\r\n pos = lineBox[dim + 1],\r\n positions = [],\r\n i;\r\n\r\n for (i = 0; i < itemsCount; i++) {\r\n positions.push(round(pos, COORD_PRECISION));\r\n pos += step;\r\n }\r\n\r\n if (!justified) {\r\n positions.push(lineBox[dim + 2]);\r\n }\r\n\r\n return options.reverse ? positions.reverse() : positions;\r\n },\r\n\r\n getMajorTickPositions: function() {\r\n return this.getTicks().majorTicks;\r\n },\r\n\r\n getMinorTickPositions: function() {\r\n return this.getTicks().minorTicks;\r\n },\r\n\r\n getTicks: function() {\r\n var axis = this,\r\n cache = axis._ticks,\r\n options = axis.options,\r\n count = options.categories.length,\r\n reverse = options.reverse,\r\n justified = options.justified,\r\n lineBox = axis.lineBox(),\r\n hash;\r\n\r\n hash = lineBox.getHash() + count + reverse + justified;\r\n if (cache._hash !== hash) {\r\n cache._hash = hash;\r\n cache.majorTicks = axis.getTickPositions(count);\r\n cache.minorTicks = axis.getTickPositions(count * 2);\r\n }\r\n\r\n return cache;\r\n },\r\n\r\n getSlot: function(from, to) {\r\n var axis = this,\r\n options = axis.options,\r\n majorTicks = axis.getTicks().majorTicks,\r\n reverse = options.reverse,\r\n justified = options.justified,\r\n valueAxis = options.vertical ? Y : X,\r\n lineBox = axis.lineBox(),\r\n lineStart = lineBox[valueAxis + (reverse ? 2 : 1)],\r\n lineEnd = lineBox[valueAxis + (reverse ? 1 : 2)],\r\n slotBox = lineBox.clone(),\r\n intervals = math.max(1, majorTicks.length - (justified ? 0 : 1)),\r\n p1,\r\n p2,\r\n slotSize;\r\n\r\n var singleSlot = !defined(to);\r\n\r\n from = valueOrDefault(from, 0);\r\n to = valueOrDefault(to, from);\r\n from = limitValue(from, 0, intervals);\r\n to = limitValue(to - 1, from, intervals);\r\n // Fixes transient bug caused by iOS 6.0 JIT\r\n // (one can never be too sure)\r\n to = math.max(from, to);\r\n\r\n p1 = from === 0 ? lineStart : (majorTicks[from] || lineEnd);\r\n p2 = justified ? p1 : majorTicks[to];\r\n slotSize = to - from;\r\n\r\n if (slotSize > 0 || (from === to)) {\r\n p2 = majorTicks[to + 1] || lineEnd;\r\n }\r\n\r\n if (singleSlot && justified) {\r\n if (from === intervals) {\r\n p1 = p2;\r\n } else {\r\n p2 = p1;\r\n }\r\n }\r\n\r\n slotBox[valueAxis + 1] = reverse ? p2 : p1;\r\n slotBox[valueAxis + 2] = reverse ? p1 : p2;\r\n\r\n return slotBox;\r\n },\r\n\r\n pointCategoryIndex: function(point) {\r\n var axis = this,\r\n options = axis.options,\r\n reverse = options.reverse,\r\n vertical = options.vertical,\r\n valueAxis = vertical ? Y : X,\r\n lineBox = axis.lineBox(),\r\n lineStart = lineBox[valueAxis + 1],\r\n lineEnd = lineBox[valueAxis + 2],\r\n pos = point[valueAxis],\r\n majorTicks = axis.getMajorTickPositions(),\r\n diff = MAX_VALUE,\r\n tickPos, nextTickPos, i, categoryIx;\r\n\r\n if (pos < lineStart || pos > lineEnd) {\r\n return null;\r\n }\r\n\r\n for (i = 0; i < majorTicks.length; i++) {\r\n tickPos = majorTicks[i];\r\n nextTickPos = majorTicks[i + 1];\r\n\r\n if (!defined(nextTickPos)) {\r\n nextTickPos = reverse ? lineStart : lineEnd;\r\n }\r\n\r\n if (reverse) {\r\n tickPos = nextTickPos;\r\n nextTickPos = majorTicks[i];\r\n }\r\n\r\n if (options.justified) {\r\n if (pos === nextTickPos) {\r\n categoryIx = math.max(0, vertical ? majorTicks.length - i - 1 : i + 1);\r\n break;\r\n }\r\n\r\n if (math.abs(pos - tickPos) < diff) {\r\n diff = pos - tickPos;\r\n categoryIx = i;\r\n }\r\n } else {\r\n if (pos >= tickPos && pos <= nextTickPos) {\r\n categoryIx = i;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return categoryIx;\r\n },\r\n\r\n getCategory: function(point) {\r\n var index = this.pointCategoryIndex(point);\r\n\r\n if (index === null) {\r\n return null;\r\n }\r\n return this.options.categories[index];\r\n },\r\n\r\n categoryIndex: function(value) {\r\n return indexOf(value, this.options.categories);\r\n },\r\n\r\n translateRange: function(delta) {\r\n var axis = this,\r\n options = axis.options,\r\n lineBox = axis.lineBox(),\r\n size = options.vertical ? lineBox.height() : lineBox.width(),\r\n range = options.categories.length,\r\n scale = size / range,\r\n offset = round(delta / scale, DEFAULT_PRECISION);\r\n\r\n return {\r\n min: offset,\r\n max: range + offset\r\n };\r\n },\r\n\r\n scaleRange: function(scale) {\r\n var axis = this,\r\n options = axis.options,\r\n range = options.categories.length,\r\n delta = scale * range;\r\n\r\n return {\r\n min: -delta,\r\n max: range + delta\r\n };\r\n },\r\n\r\n labelsCount: function() {\r\n return this.options.categories.length;\r\n },\r\n\r\n createAxisLabel: function(index, labelOptions) {\r\n var axis = this,\r\n options = axis.options,\r\n dataItem = options.dataItems ? options.dataItems[index] : null,\r\n category = valueOrDefault(options.categories[index], \"\"),\r\n text = axis.axisLabelText(category, dataItem, labelOptions);\r\n\r\n return new AxisLabel(category, text, index, dataItem, labelOptions);\r\n },\r\n\r\n shouldRenderNote: function(value) {\r\n var categories = this.options.categories;\r\n\r\n return categories.length && (categories.length > value && value >= 0);\r\n }\r\n });\r\n\r\n var DateCategoryAxis = CategoryAxis.extend({\r\n init: function(options) {\r\n var axis = this,\r\n baseUnit,\r\n useDefault;\r\n\r\n options = options || {};\r\n\r\n options = deepExtend({\r\n roundToBaseUnit: true\r\n }, options, {\r\n categories: toDate(options.categories),\r\n min: toDate(options.min),\r\n max: toDate(options.max)\r\n });\r\n\r\n if (options.categories && options.categories.length > 0) {\r\n baseUnit = (options.baseUnit || \"\").toLowerCase();\r\n useDefault = baseUnit !== FIT && !inArray(baseUnit, BASE_UNITS);\r\n if (useDefault) {\r\n options.baseUnit = axis.defaultBaseUnit(options);\r\n }\r\n\r\n if (baseUnit === FIT || options.baseUnitStep === AUTO) {\r\n axis.autoBaseUnit(options);\r\n }\r\n\r\n axis.groupCategories(options);\r\n } else {\r\n options.baseUnit = options.baseUnit || DAYS;\r\n }\r\n\r\n CategoryAxis.fn.init.call(axis, options);\r\n },\r\n\r\n options: {\r\n type: DATE,\r\n labels: {\r\n dateFormats: DateLabelFormats\r\n },\r\n autoBaseUnitSteps: {\r\n seconds: [1, 2, 5, 15, 30],\r\n minutes: [1, 2, 5, 15, 30],\r\n hours: [1, 2, 3],\r\n days: [1, 2, 3],\r\n weeks: [1, 2],\r\n months: [1, 2, 3, 6],\r\n years: [1, 2, 3, 5, 10, 25, 50]\r\n },\r\n maxDateGroups: 10\r\n },\r\n\r\n shouldRenderNote: function(value) {\r\n var axis = this,\r\n range = axis.range(),\r\n categories = axis.options.categories || [];\r\n\r\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0 && categories.length;\r\n },\r\n\r\n parseNoteValue: function(value) {\r\n return toDate(value);\r\n },\r\n\r\n translateRange: function(delta) {\r\n var axis = this,\r\n options = axis.options,\r\n baseUnit = options.baseUnit,\r\n weekStartDay = options.weekStartDay,\r\n lineBox = axis.lineBox(),\r\n size = options.vertical ? lineBox.height() : lineBox.width(),\r\n range = axis.range(),\r\n scale = size / (range.max - range.min),\r\n offset = round(delta / scale, DEFAULT_PRECISION),\r\n from,\r\n to;\r\n\r\n if (range.min && range.max) {\r\n from = addTicks(options.min || range.min, offset);\r\n to = addTicks(options.max || range.max, offset);\r\n\r\n range = {\r\n min: addDuration(from, 0, baseUnit, weekStartDay),\r\n max: addDuration(to, 0, baseUnit, weekStartDay)\r\n };\r\n }\r\n\r\n return range;\r\n },\r\n\r\n scaleRange: function(delta) {\r\n var axis = this,\r\n rounds = math.abs(delta),\r\n range = axis.range(),\r\n from = range.min,\r\n to = range.max,\r\n step;\r\n\r\n if (range.min && range.max) {\r\n while (rounds--) {\r\n range = dateDiff(from, to);\r\n step = math.round(range * 0.1);\r\n if (delta < 0) {\r\n from = addTicks(from, step);\r\n to = addTicks(to, -step);\r\n } else {\r\n from = addTicks(from, -step);\r\n to = addTicks(to, step);\r\n }\r\n }\r\n\r\n range = { min: from, max: to };\r\n }\r\n\r\n return range;\r\n },\r\n\r\n defaultBaseUnit: function(options) {\r\n var categories = options.categories,\r\n count = defined(categories) ? categories.length : 0,\r\n categoryIx,\r\n cat,\r\n diff,\r\n minDiff = MAX_VALUE,\r\n lastCat,\r\n unit;\r\n\r\n for (categoryIx = 0; categoryIx < count; categoryIx++) {\r\n cat = categories[categoryIx];\r\n\r\n if (cat && lastCat) {\r\n diff = dateDiff(cat, lastCat);\r\n if (diff > 0) {\r\n minDiff = math.min(minDiff, diff);\r\n\r\n if (minDiff >= TIME_PER_YEAR) {\r\n unit = YEARS;\r\n } else if (minDiff >= TIME_PER_MONTH - TIME_PER_DAY * 3) {\r\n unit = MONTHS;\r\n } else if (minDiff >= TIME_PER_WEEK) {\r\n unit = WEEKS;\r\n } else if (minDiff >= TIME_PER_DAY) {\r\n unit = DAYS;\r\n } else if (minDiff >= TIME_PER_HOUR) {\r\n unit = HOURS;\r\n } else if (minDiff >= TIME_PER_MINUTE) {\r\n unit = MINUTES;\r\n } else {\r\n unit = SECONDS;\r\n }\r\n }\r\n }\r\n\r\n lastCat = cat;\r\n }\r\n\r\n return unit || DAYS;\r\n },\r\n\r\n _categoryRange: function(categories) {\r\n var range = categories._range;\r\n if (!range) {\r\n range = categories._range = sparseArrayLimits(categories);\r\n }\r\n\r\n return range;\r\n },\r\n\r\n range: function(options) {\r\n options = options || this.options;\r\n\r\n var categories = options.categories,\r\n autoUnit = options.baseUnit === FIT,\r\n baseUnit = autoUnit ? BASE_UNITS[0] : options.baseUnit,\r\n baseUnitStep = options.baseUnitStep || 1,\r\n min = toTime(options.min),\r\n max = toTime(options.max),\r\n categoryLimits = this._categoryRange(categories);\r\n\r\n var minCategory = toTime(categoryLimits.min),\r\n maxCategory = toTime(categoryLimits.max);\r\n\r\n if (options.roundToBaseUnit) {\r\n return { min: addDuration(min || minCategory, 0, baseUnit, options.weekStartDay),\r\n max: addDuration(max || maxCategory, baseUnitStep, baseUnit, options.weekStartDay) };\r\n } else {\r\n return { min: toDate(min || minCategory),\r\n max: toDate(max || this._srcMaxDate || maxCategory) };\r\n }\r\n },\r\n\r\n autoBaseUnit: function(options) {\r\n var axis = this,\r\n range = axis.range(deepExtend({}, options, { baseUnitStep: 1 })),\r\n autoUnit = options.baseUnit === FIT,\r\n autoUnitIx = 0,\r\n baseUnit = autoUnit ? BASE_UNITS[autoUnitIx++] : options.baseUnit,\r\n span = range.max - range.min,\r\n units = span / TIME_PER_UNIT[baseUnit],\r\n totalUnits = units,\r\n maxDateGroups = options.maxDateGroups || axis.options.maxDateGroups,\r\n autoBaseUnitSteps = deepExtend(\r\n {}, axis.options.autoBaseUnitSteps, options.autoBaseUnitSteps\r\n ),\r\n unitSteps,\r\n step,\r\n nextStep;\r\n\r\n while (!step || units > maxDateGroups) {\r\n unitSteps = unitSteps || autoBaseUnitSteps[baseUnit].slice(0);\r\n nextStep = unitSteps.shift();\r\n\r\n if (nextStep) {\r\n step = nextStep;\r\n units = totalUnits / step;\r\n } else if (baseUnit === last(BASE_UNITS)) {\r\n step = math.ceil(totalUnits / maxDateGroups);\r\n break;\r\n } else if (autoUnit) {\r\n baseUnit = BASE_UNITS[autoUnitIx++] || last(BASE_UNITS);\r\n totalUnits = span / TIME_PER_UNIT[baseUnit];\r\n unitSteps = null;\r\n } else {\r\n if (units > maxDateGroups) {\r\n step = math.ceil(totalUnits / maxDateGroups);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n options.baseUnitStep = step;\r\n options.baseUnit = baseUnit;\r\n },\r\n\r\n _timeScale: function() {\r\n var axis = this,\r\n range = axis.range(),\r\n options = axis.options,\r\n lineBox = axis.lineBox(),\r\n vertical = options.vertical,\r\n lineSize = vertical ? lineBox.height() : lineBox.width(),\r\n timeRange;\r\n\r\n if (options.justified && options._collapse !== false) {\r\n var categoryLimits = this._categoryRange(options.categories);\r\n var maxCategory = toTime(categoryLimits.max);\r\n timeRange = toDate(maxCategory) - range.min;\r\n } else {\r\n timeRange = range.max - range.min;\r\n }\r\n\r\n return lineSize / timeRange;\r\n },\r\n\r\n getTickPositions: function(count) {\r\n var axis = this,\r\n options = axis.options,\r\n categories = options.categories,\r\n positions = [];\r\n\r\n if (options.roundToBaseUnit || categories.length === 0) {\r\n positions = CategoryAxis.fn.getTickPositions.call(axis, count);\r\n } else {\r\n var vertical = options.vertical,\r\n reverse = options.reverse,\r\n lineBox = axis.lineBox(),\r\n startTime = categories[0].getTime(),\r\n collapse = valueOrDefault(options._collapse, options.justified),\r\n divisions = categories.length - (collapse ? 1 : 0),\r\n scale = axis._timeScale(),\r\n dir = (vertical ? -1 : 1) * (reverse ? -1 : 1),\r\n startEdge = dir === 1 ? 1 : 2,\r\n endEdge = dir === 1 ? 2 : 1,\r\n startPos = lineBox[(vertical ? Y : X) + startEdge],\r\n endPos = lineBox[(vertical ? Y : X) + endEdge],\r\n pos = startPos,\r\n i,\r\n timePos;\r\n\r\n for (i = 0; i < divisions; i++) {\r\n timePos = categories[i] - startTime;\r\n pos = startPos + timePos * scale * dir;\r\n positions.push(round(pos, COORD_PRECISION));\r\n }\r\n\r\n if (last(positions) !== endPos) {\r\n positions.push(endPos);\r\n }\r\n }\r\n\r\n return positions;\r\n },\r\n\r\n groupCategories: function(options) {\r\n var axis = this,\r\n categories = options.categories,\r\n maxCategory = toDate(sparseArrayMax(categories)),\r\n baseUnit = options.baseUnit,\r\n baseUnitStep = options.baseUnitStep || 1,\r\n range = axis.range(options),\r\n max = range.max,\r\n date,\r\n nextDate,\r\n groups = [];\r\n\r\n for (date = range.min; date < max; date = nextDate) {\r\n groups.push(date);\r\n\r\n nextDate = addDuration(date, baseUnitStep, baseUnit, options.weekStartDay);\r\n if (nextDate > maxCategory && !options.max) {\r\n break;\r\n }\r\n }\r\n\r\n if (!options.roundToBaseUnit && !dateEquals(last(groups), max)) {\r\n if (max < nextDate && options._collapse !== false) {\r\n this._srcMaxDate = max;\r\n } else {\r\n groups.push(max);\r\n }\r\n }\r\n\r\n options.srcCategories = categories;\r\n options.categories = groups;\r\n },\r\n\r\n createAxisLabel: function(index, labelOptions) {\r\n var options = this.options,\r\n dataItem = options.dataItems ? options.dataItems[index] : null,\r\n date = options.categories[index],\r\n baseUnit = options.baseUnit,\r\n visible = true,\r\n unitFormat = labelOptions.dateFormats[baseUnit];\r\n\r\n if (options.justified) {\r\n var roundedDate = floorDate(date, baseUnit, options.weekStartDay);\r\n visible = dateEquals(roundedDate, date);\r\n } else if (!options.roundToBaseUnit) {\r\n visible = !dateEquals(this.range().max, date);\r\n }\r\n\r\n if (visible) {\r\n labelOptions.format = labelOptions.format || unitFormat;\r\n var text = this.axisLabelText(date, dataItem, labelOptions);\r\n if (text) {\r\n return new AxisLabel(date, text, index, dataItem, labelOptions);\r\n }\r\n }\r\n },\r\n\r\n categoryIndex: function(value, range) {\r\n var axis = this,\r\n options = axis.options,\r\n categories = options.categories,\r\n equalsRoundedMax,\r\n index;\r\n\r\n value = toDate(value);\r\n range = range || axis.range();\r\n equalsRoundedMax = options.roundToBaseUnit && dateEquals(range.max, value);\r\n if (value && (value > range.max || equalsRoundedMax)) {\r\n return categories.length;\r\n } else if (!value || value < range.min) {\r\n return -1;\r\n }\r\n\r\n index = lteDateIndex(value, categories);\r\n\r\n return index;\r\n },\r\n\r\n getSlot: function(a, b) {\r\n var axis = this;\r\n\r\n if (typeof a === OBJECT) {\r\n a = axis.categoryIndex(a);\r\n }\r\n\r\n if (typeof b === OBJECT) {\r\n b = axis.categoryIndex(b);\r\n }\r\n\r\n return CategoryAxis.fn.getSlot.call(axis, a, b);\r\n }\r\n });\r\n\r\n var DateValueAxis = Axis.extend({\r\n init: function(seriesMin, seriesMax, options) {\r\n var axis = this;\r\n\r\n options = options || {};\r\n\r\n deepExtend(options, {\r\n min: toDate(options.min),\r\n max: toDate(options.max),\r\n axisCrossingValue: toDate(\r\n options.axisCrossingValues || options.axisCrossingValue\r\n )\r\n });\r\n\r\n options = axis.applyDefaults(toDate(seriesMin), toDate(seriesMax), options);\r\n\r\n Axis.fn.init.call(axis, options);\r\n },\r\n\r\n options: {\r\n type: DATE,\r\n majorGridLines: {\r\n visible: true,\r\n width: 1,\r\n color: BLACK\r\n },\r\n labels: {\r\n dateFormats: DateLabelFormats\r\n }\r\n },\r\n\r\n applyDefaults: function(seriesMin, seriesMax, options) {\r\n var axis = this,\r\n min = options.min || seriesMin,\r\n max = options.max || seriesMax,\r\n baseUnit = options.baseUnit || axis.timeUnits(max - min),\r\n baseUnitTime = TIME_PER_UNIT[baseUnit],\r\n autoMin = floorDate(toTime(min) - 1, baseUnit) || toDate(max),\r\n autoMax = ceilDate(toTime(max) + 1, baseUnit),\r\n userMajorUnit = options.majorUnit ? options.majorUnit : undefined,\r\n majorUnit = userMajorUnit || dataviz.ceil(\r\n dataviz.autoMajorUnit(autoMin.getTime(), autoMax.getTime()),\r\n baseUnitTime\r\n ) / baseUnitTime,\r\n actualUnits = duration(autoMin, autoMax, baseUnit),\r\n totalUnits = dataviz.ceil(actualUnits, majorUnit),\r\n unitsToAdd = totalUnits - actualUnits,\r\n head = math.floor(unitsToAdd / 2),\r\n tail = unitsToAdd - head;\r\n\r\n if (!options.baseUnit) {\r\n delete options.baseUnit;\r\n }\r\n\r\n options.baseUnit = options.baseUnit || baseUnit;\r\n options.min = options.min || addDuration(autoMin, -head, baseUnit);\r\n options.max = options.max || addDuration(autoMax, tail, baseUnit);\r\n options.minorUnit = options.minorUnit || majorUnit / 5;\r\n options.majorUnit = majorUnit;\r\n\r\n return options;\r\n },\r\n\r\n range: function() {\r\n var options = this.options;\r\n return { min: options.min, max: options.max };\r\n },\r\n\r\n getDivisions: function(stepValue) {\r\n var options = this.options;\r\n\r\n return math.floor(\r\n duration(options.min, options.max, options.baseUnit) / stepValue + 1\r\n );\r\n },\r\n\r\n getTickPositions: function(step) {\r\n var options = this.options;\r\n var vertical = options.vertical;\r\n var reverse = options.reverse;\r\n\r\n var lineBox = this.lineBox();\r\n var dir = (vertical ? -1 : 1) * (reverse ? -1 : 1);\r\n var startEdge = dir === 1 ? 1 : 2;\r\n var start = lineBox[(vertical ? Y : X) + startEdge];\r\n\r\n var divisions = this.getDivisions(step);\r\n var timeRange = options.max - options.min;\r\n var lineSize = vertical ? lineBox.height() : lineBox.width();\r\n var scale = lineSize / timeRange;\r\n\r\n var positions = [start];\r\n for (var i = 1; i < divisions; i++) {\r\n var date = addDuration(options.min, i * options.majorUnit, options.baseUnit);\r\n var pos = start + (date - options.min) * scale * dir;\r\n\r\n positions.push(round(pos, COORD_PRECISION));\r\n }\r\n\r\n return positions;\r\n },\r\n\r\n getMajorTickPositions: function() {\r\n var axis = this;\r\n\r\n return axis.getTickPositions(axis.options.majorUnit);\r\n },\r\n\r\n getMinorTickPositions: function() {\r\n var axis = this;\r\n\r\n return axis.getTickPositions(axis.options.minorUnit);\r\n },\r\n\r\n getSlot: function(a, b, limit) {\r\n return NumericAxis.fn.getSlot.call(\r\n this, toDate(a), toDate(b), limit\r\n );\r\n },\r\n\r\n getValue: function(point) {\r\n var value = NumericAxis.fn.getValue.call(this, point);\r\n\r\n return value !== null ? toDate(value) : null;\r\n },\r\n\r\n labelsCount: function() {\r\n return this.getDivisions(this.options.majorUnit);\r\n },\r\n\r\n createAxisLabel: function(index, labelOptions) {\r\n var options = this.options;\r\n var offset = index * options.majorUnit;\r\n\r\n var date = options.min;\r\n if (offset > 0) {\r\n date = addDuration(date, offset, options.baseUnit);\r\n }\r\n\r\n var unitFormat = labelOptions.dateFormats[options.baseUnit];\r\n labelOptions.format = labelOptions.format || unitFormat;\r\n\r\n var text = this.axisLabelText(date, null, labelOptions);\r\n return new AxisLabel(date, text, index, null, labelOptions);\r\n },\r\n\r\n timeUnits: function(delta) {\r\n var unit = HOURS;\r\n\r\n if (delta >= TIME_PER_YEAR) {\r\n unit = YEARS;\r\n } else if (delta >= TIME_PER_MONTH) {\r\n unit = MONTHS;\r\n } else if (delta >= TIME_PER_WEEK) {\r\n unit = WEEKS;\r\n } else if (delta >= TIME_PER_DAY) {\r\n unit = DAYS;\r\n }\r\n\r\n return unit;\r\n },\r\n\r\n translateRange: function(delta) {\r\n var axis = this,\r\n options = axis.options,\r\n baseUnit = options.baseUnit,\r\n weekStartDay = options.weekStartDay,\r\n lineBox = axis.lineBox(),\r\n size = options.vertical ? lineBox.height() : lineBox.width(),\r\n range = axis.range(),\r\n scale = size / (range.max - range.min),\r\n offset = round(delta / scale, DEFAULT_PRECISION),\r\n from = addTicks(options.min, offset),\r\n to = addTicks(options.max, offset);\r\n\r\n return {\r\n min: addDuration(from, 0, baseUnit, weekStartDay),\r\n max: addDuration(to, 0, baseUnit, weekStartDay)\r\n };\r\n },\r\n\r\n scaleRange: function(delta) {\r\n var axis = this,\r\n options = axis.options,\r\n rounds = math.abs(delta),\r\n from = options.min,\r\n to = options.max,\r\n range,\r\n step;\r\n\r\n while (rounds--) {\r\n range = dateDiff(from, to);\r\n step = math.round(range * 0.1);\r\n if (delta < 0) {\r\n from = addTicks(from, step);\r\n to = addTicks(to, -step);\r\n } else {\r\n from = addTicks(from, -step);\r\n to = addTicks(to, step);\r\n }\r\n }\r\n\r\n return { min: from, max: to };\r\n },\r\n\r\n shouldRenderNote: function(value) {\r\n var range = this.range();\r\n\r\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0;\r\n }\r\n });\r\n\r\n var ClusterLayout = ChartElement.extend({\r\n options: {\r\n vertical: false,\r\n gap: 0,\r\n spacing: 0\r\n },\r\n\r\n reflow: function(box) {\r\n var cluster = this,\r\n options = cluster.options,\r\n vertical = options.vertical,\r\n axis = vertical ? Y : X,\r\n children = cluster.children,\r\n gap = options.gap,\r\n spacing = options.spacing,\r\n count = children.length,\r\n slots = count + gap + (spacing * (count - 1)),\r\n slotSize = (vertical ? box.height() : box.width()) / slots,\r\n position = box[axis + 1] + slotSize * (gap / 2),\r\n childBox,\r\n i;\r\n\r\n for (i = 0; i < count; i++) {\r\n childBox = (children[i].box || box).clone();\r\n\r\n childBox[axis + 1] = position;\r\n childBox[axis + 2] = position + slotSize;\r\n\r\n children[i].reflow(childBox);\r\n if (i < count - 1) {\r\n position += (slotSize * spacing);\r\n }\r\n\r\n position += slotSize;\r\n }\r\n }\r\n });\r\n\r\n var StackWrap = ChartElement.extend({\r\n options: {\r\n vertical: true\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var options = this.options,\r\n vertical = options.vertical,\r\n positionAxis = vertical ? X : Y,\r\n stackAxis = vertical ? Y : X,\r\n children = this.children,\r\n box = this.box = new Box2D(),\r\n childrenCount = children.length,\r\n i;\r\n\r\n for (i = 0; i < childrenCount; i++) {\r\n var currentChild = children[i],\r\n childBox;\r\n if (currentChild.visible !== false) {\r\n childBox = currentChild.box.clone();\r\n childBox.snapTo(targetBox, positionAxis);\r\n\r\n if (i === 0) {\r\n box = this.box = childBox.clone();\r\n }\r\n\r\n currentChild.reflow(childBox);\r\n box.wrap(childBox);\r\n }\r\n }\r\n }\r\n });\r\n\r\n var PointEventsMixin = {\r\n click: function(chart, e) {\r\n return chart.trigger(\r\n SERIES_CLICK,\r\n this.eventArgs(e)\r\n );\r\n },\r\n\r\n hover: function(chart, e) {\r\n return chart.trigger(\r\n SERIES_HOVER,\r\n this.eventArgs(e)\r\n );\r\n },\r\n\r\n eventArgs: function(e) {\r\n return {\r\n value: this.value,\r\n percentage: this.percentage,\r\n category: this.category,\r\n series: this.series,\r\n dataItem: this.dataItem,\r\n runningTotal: this.runningTotal,\r\n total: this.total,\r\n element: $((e || {}).target),\r\n originalEvent: e,\r\n point: this\r\n };\r\n }\r\n };\r\n\r\n var NoteMixin = {\r\n createNote: function() {\r\n var element = this,\r\n options = element.options.notes,\r\n text = element.noteText || options.label.text;\r\n\r\n if (options.visible !== false && defined(text) && text !== null) {\r\n element.note = new Note(\r\n element.value,\r\n text,\r\n element.dataItem,\r\n element.category,\r\n element.series,\r\n element.options.notes\r\n );\r\n element.append(element.note);\r\n }\r\n }\r\n };\r\n\r\n var Bar = ChartElement.extend({\r\n init: function(value, options) {\r\n var bar = this;\r\n\r\n ChartElement.fn.init.call(bar);\r\n\r\n bar.options = options;\r\n bar.color = options.color || WHITE;\r\n bar.aboveAxis = valueOrDefault(bar.options.aboveAxis, true);\r\n bar.value = value;\r\n },\r\n\r\n defaults: {\r\n border: {\r\n width: 1\r\n },\r\n vertical: true,\r\n overlay: {\r\n gradient: GLASS\r\n },\r\n labels: {\r\n visible: false,\r\n format: \"{0}\"\r\n },\r\n opacity: 1,\r\n notes: {\r\n label: {}\r\n }\r\n },\r\n\r\n render: function() {\r\n if (this._rendered) {\r\n return;\r\n } else {\r\n this._rendered = true;\r\n }\r\n\r\n this.createLabel();\r\n this.createNote();\r\n\r\n if (this.errorBar) {\r\n this.append(this.errorBar);\r\n }\r\n },\r\n\r\n createLabel: function() {\r\n var value = this.value;\r\n var options = this.options;\r\n var labels = options.labels;\r\n var labelText;\r\n\r\n if (labels.visible) {\r\n if (labels.template) {\r\n var labelTemplate = template(labels.template);\r\n labelText = labelTemplate({\r\n dataItem: this.dataItem,\r\n category: this.category,\r\n value: this.value,\r\n percentage: this.percentage,\r\n runningTotal: this.runningTotal,\r\n total: this.total,\r\n series: this.series\r\n });\r\n } else {\r\n labelText = this.formatValue(labels.format);\r\n }\r\n\r\n this.label = new BarLabel(labelText,\r\n deepExtend({\r\n vertical: options.vertical\r\n },\r\n options.labels\r\n ));\r\n this.append(this.label);\r\n }\r\n },\r\n\r\n formatValue: function(format) {\r\n return this.owner.formatPointValue(this, format);\r\n },\r\n\r\n reflow: function(targetBox) {\r\n this.render();\r\n\r\n var bar = this,\r\n options = bar.options,\r\n label = bar.label;\r\n\r\n bar.box = targetBox;\r\n\r\n if (label) {\r\n label.options.aboveAxis = bar.aboveAxis;\r\n label.reflow(targetBox);\r\n }\r\n\r\n if (bar.note) {\r\n bar.note.reflow(targetBox);\r\n }\r\n\r\n if(bar.errorBars){\r\n for(var i = 0; i < bar.errorBars.length;i++){\r\n bar.errorBars[i].reflow(targetBox);\r\n }\r\n }\r\n },\r\n\r\n createVisual: function() {\r\n var bar = this;\r\n var box = bar.box;\r\n var options = bar.options;\r\n var customVisual = options.visual;\r\n\r\n if (bar.visible !== false) {\r\n ChartElement.fn.createVisual.call(bar);\r\n if (customVisual) {\r\n var visual = this.rectVisual = customVisual({\r\n category: bar.category,\r\n dataItem: bar.dataItem,\r\n value: bar.value,\r\n series: bar.series,\r\n percentage: bar.percentage,\r\n runningTotal: bar.runningTotal,\r\n total: bar.total,\r\n rect: box.toRect(),\r\n createVisual: function() {\r\n var group = new draw.Group();\r\n bar.createRect(group);\r\n return group;\r\n },\r\n options: options\r\n });\r\n if (visual) {\r\n bar.visual.append(visual);\r\n }\r\n } else if (box.width() > 0 && box.height() > 0) {\r\n bar.createRect(bar.visual);\r\n }\r\n }\r\n },\r\n\r\n createRect: function(visual) {\r\n var options = this.options;\r\n var border = options.border;\r\n var strokeOpacity = defined(border.opacity) ? border.opacity : options.opacity;\r\n var rect = this.rectVisual = draw.Path.fromRect(this.box.toRect(), {\r\n fill: {\r\n color: this.color,\r\n opacity: options.opacity\r\n },\r\n stroke: {\r\n color: this.getBorderColor(),\r\n width: border.width,\r\n opacity: strokeOpacity,\r\n dashType: border.dashType\r\n }\r\n });\r\n\r\n var width = this.box.width();\r\n var height = this.box.height();\r\n\r\n var size = options.vertical ? width : height;\r\n\r\n if (size > BAR_ALIGN_MIN_WIDTH) {\r\n alignPathToPixel(rect);\r\n //fixes lineJoin issue in firefox when the joined lines are parallel\r\n if (width < 1 || height < 1) {\r\n rect.options.stroke.lineJoin = \"round\";\r\n }\r\n }\r\n\r\n visual.append(rect);\r\n\r\n if (hasGradientOverlay(options)) {\r\n visual.append(this.createGradientOverlay(rect, {\r\n baseColor: this.color\r\n }, deepExtend({\r\n end: !options.vertical ? [0, 1] : undefined\r\n }, options.overlay)\r\n ));\r\n }\r\n },\r\n\r\n createHighlight: function(style) {\r\n var highlight = draw.Path.fromRect(this.box.toRect(), style);\r\n\r\n return alignPathToPixel(highlight);\r\n },\r\n\r\n highlightVisual: function() {\r\n return this.rectVisual;\r\n },\r\n\r\n highlightVisualArgs: function() {\r\n return {\r\n options: this.options,\r\n rect: this.box.toRect(),\r\n visual: this.rectVisual\r\n };\r\n },\r\n\r\n getBorderColor: function() {\r\n var bar = this,\r\n options = bar.options,\r\n color = bar.color,\r\n border = options.border,\r\n borderColor = border.color,\r\n brightness = border._brightness || BAR_BORDER_BRIGHTNESS;\r\n\r\n if (!defined(borderColor)) {\r\n borderColor =\r\n new Color(color).brightness(brightness).toHex();\r\n }\r\n\r\n return borderColor;\r\n },\r\n\r\n tooltipAnchor: function(tooltipWidth, tooltipHeight) {\r\n var bar = this,\r\n options = bar.options,\r\n box = bar.box,\r\n vertical = options.vertical,\r\n aboveAxis = bar.aboveAxis,\r\n clipBox = bar.owner.pane.clipBox() || box,\r\n x,\r\n y;\r\n\r\n if (vertical) {\r\n x = box.x2 + TOOLTIP_OFFSET;\r\n y = aboveAxis ? math.max(box.y1, clipBox.y1) : math.min(box.y2, clipBox.y2) - tooltipHeight;\r\n } else {\r\n var x1 = math.max(box.x1, clipBox.x1),\r\n x2 = math.min(box.x2, clipBox.x2);\r\n if (options.isStacked) {\r\n x = aboveAxis ? x2 - tooltipWidth : x1;\r\n y = box.y1 - tooltipHeight - TOOLTIP_OFFSET;\r\n } else {\r\n x = aboveAxis ? x2 + TOOLTIP_OFFSET : x1 - tooltipWidth - TOOLTIP_OFFSET;\r\n y = box.y1;\r\n }\r\n }\r\n\r\n return new Point2D(x, y);\r\n }\r\n });\r\n deepExtend(Bar.fn, PointEventsMixin);\r\n deepExtend(Bar.fn, NoteMixin);\r\n\r\n var BarChartAnimation = draw.Animation.extend({\r\n options: {\r\n duration: INITIAL_ANIMATION_DURATION\r\n },\r\n\r\n setup: function() {\r\n var element = this.element;\r\n var options = this.options;\r\n\r\n var bbox = element.bbox();\r\n if (bbox) {\r\n var origin = this.origin = options.origin;\r\n\r\n var axis = options.vertical ? Y : X;\r\n\r\n var fromScale = this.fromScale = new geom.Point(1, 1);\r\n fromScale[axis] = START_SCALE;\r\n\r\n element.transform(geom.transform()\r\n .scale(fromScale.x, fromScale.y)\r\n );\r\n } else {\r\n this.abort();\r\n }\r\n },\r\n\r\n step: function(pos) {\r\n var scaleX = interpolate(this.fromScale.x, 1, pos);\r\n var scaleY = interpolate(this.fromScale.y, 1, pos);\r\n\r\n this.element.transform(geom.transform()\r\n .scale(scaleX, scaleY, this.origin)\r\n );\r\n },\r\n\r\n abort: function() {\r\n draw.Animation.fn.abort.call(this);\r\n this.element.transform(null);\r\n }\r\n });\r\n draw.AnimationFactory.current.register(BAR, BarChartAnimation);\r\n\r\n var FadeInAnimation = draw.Animation.extend({\r\n options: {\r\n duration: 200,\r\n easing: LINEAR\r\n },\r\n\r\n setup: function() {\r\n this.fadeTo = this.element.opacity();\r\n this.element.opacity(0);\r\n },\r\n\r\n step: function(pos) {\r\n this.element.opacity(pos * this.fadeTo);\r\n }\r\n });\r\n draw.AnimationFactory.current.register(FADEIN, FadeInAnimation);\r\n\r\n\r\n var ErrorRangeCalculator = function(errorValue, series, field) {\r\n var that = this;\r\n that.initGlobalRanges(errorValue, series, field);\r\n };\r\n\r\n ErrorRangeCalculator.prototype = ErrorRangeCalculator.fn = {\r\n percentRegex: /percent(?:\\w*)\\((\\d+)\\)/,\r\n standardDeviationRegex: new RegExp(\"^\" + STD_DEV + \"(?:\\\\((\\\\d+(?:\\\\.\\\\d+)?)\\\\))?$\"),\r\n\r\n initGlobalRanges: function(errorValue, series, field) {\r\n var that = this,\r\n data = series.data,\r\n deviationMatch = that.standardDeviationRegex.exec(errorValue);\r\n\r\n if (deviationMatch) {\r\n that.valueGetter = that.createValueGetter(series, field);\r\n\r\n var average = that.getAverage(data),\r\n deviation = that.getStandardDeviation(data, average, false),\r\n multiple = deviationMatch[1] ? parseFloat(deviationMatch[1]) : 1,\r\n errorRange = {low: average.value - deviation * multiple, high: average.value + deviation * multiple};\r\n that.globalRange = function() {\r\n return errorRange;\r\n };\r\n } else if (errorValue.indexOf && errorValue.indexOf(STD_ERR) >= 0) {\r\n that.valueGetter = that.createValueGetter(series, field);\r\n var standardError = that.getStandardError(data, that.getAverage(data));\r\n that.globalRange = function(value) {\r\n return {low: value - standardError, high: value + standardError};\r\n };\r\n }\r\n },\r\n\r\n createValueGetter: function(series, field) {\r\n var data = series.data,\r\n binder = SeriesBinder.current,\r\n valueFields = binder.valueFields(series),\r\n item = defined(data[0]) ? data[0] : {},\r\n idx,\r\n srcValueFields,\r\n valueGetter;\r\n\r\n if (isArray(item)) {\r\n idx = field ? indexOf(field, valueFields): 0;\r\n valueGetter = getter(\"[\" + idx + \"]\");\r\n } else if (isNumber(item)) {\r\n valueGetter = getter();\r\n } else if (typeof item === OBJECT) {\r\n srcValueFields = binder.sourceFields(series, valueFields);\r\n valueGetter = getter(srcValueFields[indexOf(field, valueFields)]);\r\n }\r\n\r\n return valueGetter;\r\n },\r\n\r\n getErrorRange: function(pointValue, errorValue) {\r\n var that = this,\r\n low,\r\n high,\r\n value;\r\n\r\n if (!defined(errorValue)) {\r\n return;\r\n }\r\n\r\n if (that.globalRange) {\r\n return that.globalRange(pointValue);\r\n }\r\n\r\n if (isArray(errorValue)) {\r\n low = pointValue - errorValue[0];\r\n high = pointValue + errorValue[1];\r\n } else if (isNumber(value = parseFloat(errorValue))) {\r\n low = pointValue - value;\r\n high = pointValue + value;\r\n } else if ((value = that.percentRegex.exec(errorValue))) {\r\n var percentValue = pointValue * (parseFloat(value[1]) / 100);\r\n low = pointValue - math.abs(percentValue);\r\n high = pointValue + math.abs(percentValue);\r\n } else {\r\n throw new Error(\"Invalid ErrorBar value: \" + errorValue);\r\n }\r\n\r\n return {low: low, high: high};\r\n },\r\n\r\n getStandardError: function(data, average) {\r\n return this.getStandardDeviation(data, average, true) / math.sqrt(average.count);\r\n },\r\n\r\n getStandardDeviation: function(data, average, isSample) {\r\n var squareDifferenceSum = 0,\r\n length = data.length,\r\n total = isSample ? average.count - 1 : average.count,\r\n value;\r\n\r\n for (var i = 0; i < length; i++) {\r\n value = this.valueGetter(data[i]);\r\n if (isNumber(value)) {\r\n squareDifferenceSum += math.pow(value - average.value, 2);\r\n }\r\n }\r\n\r\n return math.sqrt(squareDifferenceSum / total);\r\n },\r\n\r\n getAverage: function(data) {\r\n var sum = 0,\r\n count = 0,\r\n length = data.length,\r\n value;\r\n\r\n for(var i = 0; i < length; i++){\r\n value = this.valueGetter(data[i]);\r\n if (isNumber(value)) {\r\n sum += value;\r\n count++;\r\n }\r\n }\r\n\r\n return {\r\n value: sum / count,\r\n count: count\r\n };\r\n }\r\n };\r\n\r\n var CategoricalChart = ChartElement.extend({\r\n init: function(plotArea, options) {\r\n var chart = this;\r\n\r\n ChartElement.fn.init.call(chart, options);\r\n\r\n chart.plotArea = plotArea;\r\n chart.categoryAxis = plotArea.seriesCategoryAxis(options.series[0]);\r\n\r\n // Value axis ranges grouped by axis name, e.g.:\r\n // primary: { min: 0, max: 1 }\r\n chart.valueAxisRanges = {};\r\n\r\n chart.points = [];\r\n chart.categoryPoints = [];\r\n chart.seriesPoints = [];\r\n chart.seriesOptions = [];\r\n chart._evalSeries = [];\r\n\r\n chart.render();\r\n },\r\n\r\n options: {\r\n series: [],\r\n invertAxes: false,\r\n isStacked: false,\r\n clip: true\r\n },\r\n\r\n render: function() {\r\n var chart = this;\r\n chart.traverseDataPoints(proxy(chart.addValue, chart));\r\n },\r\n\r\n pointOptions: function(series, seriesIx) {\r\n var options = this.seriesOptions[seriesIx];\r\n if (!options) {\r\n var defaults = this.pointType().fn.defaults;\r\n this.seriesOptions[seriesIx] = options = deepExtend({ }, defaults, {\r\n vertical: !this.options.invertAxes\r\n }, series);\r\n }\r\n\r\n return options;\r\n },\r\n\r\n plotValue: function(point) {\r\n if (!point) {\r\n return 0;\r\n }\r\n\r\n if (this.options.isStacked100 && isNumber(point.value)) {\r\n var categoryIx = point.categoryIx;\r\n var categoryPts = this.categoryPoints[categoryIx];\r\n var categorySum = 0;\r\n var otherValues = [];\r\n\r\n for (var i = 0; i < categoryPts.length; i++) {\r\n var other = categoryPts[i];\r\n if (other) {\r\n var stack = point.series.stack;\r\n var otherStack = other.series.stack;\r\n\r\n if ((stack && otherStack) && stack.group !== otherStack.group) {\r\n continue;\r\n }\r\n\r\n if (isNumber(other.value)) {\r\n categorySum += math.abs(other.value);\r\n otherValues.push(math.abs(other.value));\r\n }\r\n }\r\n }\r\n\r\n if (categorySum > 0) {\r\n return point.value / categorySum;\r\n }\r\n }\r\n\r\n return point.value;\r\n },\r\n\r\n plotRange: function(point, startValue) {\r\n var categoryIx = point.categoryIx;\r\n var categoryPts = this.categoryPoints[categoryIx];\r\n\r\n if (this.options.isStacked) {\r\n startValue = startValue || 0;\r\n var plotValue = this.plotValue(point);\r\n var positive = plotValue >= 0;\r\n var prevValue = startValue;\r\n var isStackedBar = false;\r\n\r\n for (var i = 0; i < categoryPts.length; i++) {\r\n var other = categoryPts[i];\r\n\r\n if (point === other) {\r\n break;\r\n }\r\n\r\n var stack = point.series.stack;\r\n var otherStack = other.series.stack;\r\n if (stack && otherStack) {\r\n if (typeof stack === STRING && stack !== otherStack) {\r\n continue;\r\n }\r\n\r\n if (stack.group && stack.group !== otherStack.group) {\r\n continue;\r\n }\r\n }\r\n\r\n var otherValue = this.plotValue(other);\r\n if ((otherValue >= 0 && positive) ||\r\n (otherValue < 0 && !positive)) {\r\n prevValue += otherValue;\r\n plotValue += otherValue;\r\n isStackedBar = true;\r\n\r\n if (this.options.isStacked100) {\r\n plotValue = math.min(plotValue, 1);\r\n }\r\n }\r\n }\r\n\r\n if (isStackedBar) {\r\n prevValue -= startValue;\r\n }\r\n\r\n return [prevValue, plotValue];\r\n }\r\n\r\n var series = point.series;\r\n var valueAxis = this.seriesValueAxis(series);\r\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\r\n\r\n return [axisCrossingValue, point.value || axisCrossingValue];\r\n },\r\n\r\n stackLimits: function(axisName, stackName) {\r\n var min = MAX_VALUE;\r\n var max = MIN_VALUE;\r\n\r\n for (var i = 0; i < this.categoryPoints.length; i++) {\r\n var categoryPts = this.categoryPoints[i];\r\n\r\n for (var pIx = 0; pIx < categoryPts.length; pIx++) {\r\n var point = categoryPts[pIx];\r\n if (point) {\r\n if (point.series.stack === stackName || point.series.axis === axisName) {\r\n var to = this.plotRange(point, 0)[1];\r\n if (defined(to) && isFinite(to)) {\r\n max = math.max(max, to);\r\n min = math.min(min, to);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return { min: min, max: max };\r\n },\r\n\r\n updateStackRange: function() {\r\n var chart = this;\r\n var chartSeries = chart.options.series;\r\n var isStacked = chart.options.isStacked;\r\n var limits;\r\n var limitsCache = {};\r\n\r\n if (isStacked) {\r\n for (var i = 0; i < chartSeries.length; i++) {\r\n var series = chartSeries[i];\r\n var axisName = series.axis;\r\n var key = axisName + series.stack;\r\n\r\n limits = limitsCache[key];\r\n if (!limits) {\r\n limits = chart.stackLimits(axisName, series.stack);\r\n\r\n var errorTotals = chart.errorTotals;\r\n if (errorTotals) {\r\n if (errorTotals.negative.length) {\r\n limits.min = math.min(limits.min, sparseArrayMin(errorTotals.negative));\r\n }\r\n if (errorTotals.positive.length) {\r\n limits.max = math.max(limits.max, sparseArrayMax(errorTotals.positive));\r\n }\r\n }\r\n\r\n if (limits.min !== MAX_VALUE || limits.max !== MIN_VALUE) {\r\n limitsCache[key] = limits;\r\n } else {\r\n limits = null;\r\n }\r\n }\r\n\r\n if (limits) {\r\n chart.valueAxisRanges[axisName] = limits;\r\n }\r\n }\r\n }\r\n },\r\n\r\n addErrorBar: function(point, data, categoryIx) {\r\n var chart = this,\r\n value = point.value,\r\n series = point.series,\r\n seriesIx = point.seriesIx,\r\n errorBars = point.options.errorBars,\r\n errorRange,\r\n lowValue = data.fields[ERROR_LOW_FIELD],\r\n highValue = data.fields[ERROR_HIGH_FIELD];\r\n\r\n if (isNumber(lowValue) &&\r\n isNumber(highValue)) {\r\n errorRange = {low: lowValue, high: highValue};\r\n } else if (errorBars && defined(errorBars.value)) {\r\n chart.seriesErrorRanges = chart.seriesErrorRanges || [];\r\n chart.seriesErrorRanges[seriesIx] = chart.seriesErrorRanges[seriesIx] ||\r\n new ErrorRangeCalculator(errorBars.value, series, VALUE);\r\n\r\n errorRange = chart.seriesErrorRanges[seriesIx].getErrorRange(value, errorBars.value);\r\n }\r\n\r\n if (errorRange) {\r\n point.low = errorRange.low;\r\n point.high = errorRange.high;\r\n chart.addPointErrorBar(point, categoryIx);\r\n }\r\n },\r\n\r\n addPointErrorBar: function(point, categoryIx) {\r\n var chart = this,\r\n series = point.series,\r\n low = point.low,\r\n high = point.high,\r\n isVertical = !chart.options.invertAxes,\r\n options = point.options.errorBars,\r\n errorBar,\r\n stackedErrorRange;\r\n\r\n if (chart.options.isStacked) {\r\n stackedErrorRange = chart.stackedErrorRange(point, categoryIx);\r\n low = stackedErrorRange.low;\r\n high = stackedErrorRange.high;\r\n } else {\r\n var fields = { categoryIx: categoryIx, series: series };\r\n chart.updateRange({value: low}, fields);\r\n chart.updateRange({value: high}, fields);\r\n }\r\n\r\n errorBar = new CategoricalErrorBar(low, high, isVertical, chart, series, options);\r\n point.errorBars = [errorBar];\r\n point.append(errorBar);\r\n },\r\n\r\n stackedErrorRange: function(point, categoryIx) {\r\n var chart = this,\r\n value = point.value,\r\n plotValue = chart.plotRange(point, 0)[1] - point.value,\r\n low = point.low + plotValue,\r\n high = point.high + plotValue;\r\n\r\n chart.errorTotals = chart.errorTotals || {positive: [], negative: []};\r\n\r\n if (low < 0) {\r\n chart.errorTotals.negative[categoryIx] = math.min(chart.errorTotals.negative[categoryIx] || 0, low);\r\n }\r\n\r\n if (high > 0) {\r\n chart.errorTotals.positive[categoryIx] = math.max(chart.errorTotals.positive[categoryIx] || 0, high);\r\n }\r\n\r\n return {low: low, high: high};\r\n },\r\n\r\n addValue: function(data, fields) {\r\n var chart = this;\r\n var categoryIx = fields.categoryIx;\r\n var category = fields.category;\r\n var series = fields.series;\r\n var seriesIx = fields.seriesIx;\r\n\r\n var categoryPoints = chart.categoryPoints[categoryIx];\r\n if (!categoryPoints) {\r\n chart.categoryPoints[categoryIx] = categoryPoints = [];\r\n }\r\n\r\n var seriesPoints = chart.seriesPoints[seriesIx];\r\n if (!seriesPoints) {\r\n chart.seriesPoints[seriesIx] = seriesPoints = [];\r\n }\r\n\r\n var point = chart.createPoint(data, fields);\r\n if (point) {\r\n $.extend(point, fields);\r\n\r\n point.owner = chart;\r\n point.dataItem = series.data[categoryIx];\r\n point.noteText = data.fields.noteText;\r\n chart.addErrorBar(point, data, categoryIx);\r\n }\r\n\r\n chart.points.push(point);\r\n seriesPoints.push(point);\r\n categoryPoints.push(point);\r\n\r\n chart.updateRange(data.valueFields, fields);\r\n },\r\n\r\n evalPointOptions: function(options, value, category, categoryIx, series, seriesIx) {\r\n var state = { defaults: series._defaults, excluded: [\"data\", \"aggregate\", \"_events\", \"tooltip\", \"template\", \"visual\", \"toggle\"] };\r\n\r\n var doEval = this._evalSeries[seriesIx];\r\n if (!defined(doEval)) {\r\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\r\n }\r\n\r\n if (doEval) {\r\n options = deepExtend({}, options);\r\n evalOptions(options, {\r\n value: value,\r\n category: category,\r\n index: categoryIx,\r\n series: series,\r\n dataItem: series.data[categoryIx]\r\n }, state);\r\n }\r\n\r\n return options;\r\n },\r\n\r\n updateRange: function(data, fields) {\r\n var chart = this,\r\n axisName = fields.series.axis,\r\n value = data.value,\r\n axisRange = chart.valueAxisRanges[axisName];\r\n\r\n if (isFinite(value) && value !== null) {\r\n axisRange = chart.valueAxisRanges[axisName] =\r\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\r\n\r\n axisRange.min = math.min(axisRange.min, value);\r\n axisRange.max = math.max(axisRange.max, value);\r\n }\r\n },\r\n\r\n seriesValueAxis: function(series) {\r\n var plotArea = this.plotArea,\r\n axisName = series.axis,\r\n axis = axisName ?\r\n plotArea.namedValueAxes[axisName] :\r\n plotArea.valueAxis;\r\n\r\n if (!axis) {\r\n throw new Error(\"Unable to locate value axis with name \" + axisName);\r\n }\r\n\r\n return axis;\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var chart = this,\r\n pointIx = 0,\r\n categorySlots = chart.categorySlots = [],\r\n chartPoints = chart.points,\r\n categoryAxis = chart.categoryAxis,\r\n value, valueAxis,\r\n point;\r\n\r\n chart.traverseDataPoints(function(data, fields) {\r\n var category = fields.category;\r\n var categoryIx = fields.categoryIx;\r\n var currentSeries = fields.series;\r\n\r\n value = chart.pointValue(data);\r\n\r\n valueAxis = chart.seriesValueAxis(currentSeries);\r\n point = chartPoints[pointIx++];\r\n\r\n var categorySlot = categorySlots[categoryIx];\r\n if (!categorySlot) {\r\n categorySlots[categoryIx] = categorySlot =\r\n chart.categorySlot(categoryAxis, categoryIx, valueAxis);\r\n }\r\n\r\n if (point) {\r\n var plotRange = chart.plotRange(point, valueAxis.startValue());\r\n var valueSlot = valueAxis.getSlot(plotRange[0], plotRange[1], !chart.options.clip);\r\n if (valueSlot) {\r\n var pointSlot = chart.pointSlot(categorySlot, valueSlot);\r\n\r\n point.aboveAxis = chart.aboveAxis(point, valueAxis);\r\n if (chart.options.isStacked100) {\r\n point.percentage = chart.plotValue(point);\r\n }\r\n\r\n chart.reflowPoint(point, pointSlot);\r\n } else {\r\n point.visible = false;\r\n }\r\n }\r\n });\r\n\r\n chart.reflowCategories(categorySlots);\r\n\r\n chart.box = targetBox;\r\n },\r\n\r\n aboveAxis: function(point, valueAxis) {\r\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\r\n var value = point.value;\r\n\r\n return valueAxis.options.reverse ?\r\n value < axisCrossingValue : value >= axisCrossingValue;\r\n },\r\n\r\n categoryAxisCrossingValue: function(valueAxis) {\r\n var categoryAxis = this.categoryAxis,\r\n options = valueAxis.options,\r\n crossingValues = [].concat(\r\n options.axisCrossingValues || options.axisCrossingValue\r\n );\r\n\r\n return crossingValues[categoryAxis.axisIndex || 0] || 0;\r\n },\r\n\r\n reflowPoint: function(point, pointSlot) {\r\n point.reflow(pointSlot);\r\n },\r\n\r\n reflowCategories: function() { },\r\n\r\n pointSlot: function(categorySlot, valueSlot) {\r\n var chart = this,\r\n options = chart.options,\r\n invertAxes = options.invertAxes,\r\n slotX = invertAxes ? valueSlot : categorySlot,\r\n slotY = invertAxes ? categorySlot : valueSlot;\r\n\r\n return new Box2D(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\r\n },\r\n\r\n categorySlot: function(categoryAxis, categoryIx) {\r\n return categoryAxis.getSlot(categoryIx);\r\n },\r\n\r\n traverseDataPoints: function(callback) {\r\n var chart = this,\r\n options = chart.options,\r\n series = options.series,\r\n categories = chart.categoryAxis.options.categories || [],\r\n count = categoriesCount(series),\r\n categoryIx,\r\n seriesIx,\r\n pointData,\r\n currentCategory,\r\n currentSeries,\r\n seriesCount = series.length;\r\n\r\n for (categoryIx = 0; categoryIx < count; categoryIx++) {\r\n for (seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\r\n currentSeries = series[seriesIx];\r\n currentCategory = categories[categoryIx];\r\n pointData = this._bindPoint(currentSeries, seriesIx, categoryIx);\r\n\r\n callback(pointData, {\r\n category: currentCategory,\r\n categoryIx: categoryIx,\r\n series: currentSeries,\r\n seriesIx: seriesIx\r\n });\r\n }\r\n }\r\n },\r\n\r\n _bindPoint: function(series, seriesIx, categoryIx) {\r\n if (!this._bindCache) {\r\n this._bindCache = [];\r\n }\r\n\r\n var bindCache = this._bindCache[seriesIx];\r\n if (!bindCache) {\r\n bindCache = this._bindCache[seriesIx] = [];\r\n }\r\n\r\n var data = bindCache[categoryIx];\r\n if (!data) {\r\n data = bindCache[categoryIx] = SeriesBinder.current.bindPoint(series, categoryIx);\r\n }\r\n\r\n return data;\r\n },\r\n\r\n formatPointValue: function(point, format) {\r\n if (point.value === null) {\r\n return \"\";\r\n }\r\n\r\n return autoFormat(format, point.value);\r\n },\r\n\r\n pointValue: function(data) {\r\n return data.valueFields.value;\r\n }\r\n });\r\n\r\n var BarChart = CategoricalChart.extend({\r\n options: {\r\n animation: {\r\n type: BAR\r\n }\r\n },\r\n\r\n render: function() {\r\n var chart = this;\r\n\r\n CategoricalChart.fn.render.apply(chart);\r\n chart.updateStackRange();\r\n },\r\n\r\n pointType: function() {\r\n return Bar;\r\n },\r\n\r\n clusterType: function() {\r\n return ClusterLayout;\r\n },\r\n\r\n stackType: function() {\r\n return StackWrap;\r\n },\r\n\r\n stackLimits: function(axisName, stackName) {\r\n var limits = CategoricalChart.fn.stackLimits.call(this, axisName, stackName);\r\n\r\n return limits;\r\n },\r\n\r\n createPoint: function(data, fields) {\r\n var chart = this;\r\n var categoryIx = fields.categoryIx;\r\n var category = fields.category;\r\n var series = fields.series;\r\n var seriesIx = fields.seriesIx;\r\n var value = chart.pointValue(data);\r\n var options = chart.options;\r\n var children = chart.children;\r\n var isStacked = chart.options.isStacked;\r\n var point;\r\n var pointType = chart.pointType();\r\n var pointOptions;\r\n var cluster;\r\n var clusterType = chart.clusterType();\r\n\r\n pointOptions = this.pointOptions(series, seriesIx);\r\n\r\n var labelOptions = pointOptions.labels;\r\n if (isStacked) {\r\n if (labelOptions.position == OUTSIDE_END) {\r\n labelOptions.position = INSIDE_END;\r\n }\r\n }\r\n\r\n pointOptions.isStacked = isStacked;\r\n\r\n var color = data.fields.color || series.color;\r\n if (value < 0 && pointOptions.negativeColor) {\r\n color = pointOptions.negativeColor;\r\n }\r\n\r\n pointOptions = chart.evalPointOptions(\r\n pointOptions, value, category, categoryIx, series, seriesIx\r\n );\r\n\r\n if (kendo.isFunction(series.color)) {\r\n color = pointOptions.color;\r\n }\r\n\r\n point = new pointType(value, pointOptions);\r\n point.color = color;\r\n\r\n cluster = children[categoryIx];\r\n if (!cluster) {\r\n cluster = new clusterType({\r\n vertical: options.invertAxes,\r\n gap: options.gap,\r\n spacing: options.spacing\r\n });\r\n chart.append(cluster);\r\n }\r\n\r\n if (isStacked) {\r\n var stackWrap = chart.getStackWrap(series, cluster);\r\n stackWrap.append(point);\r\n } else {\r\n cluster.append(point);\r\n }\r\n\r\n return point;\r\n },\r\n\r\n getStackWrap: function(series, cluster) {\r\n var stack = series.stack;\r\n var stackGroup = stack ? stack.group || stack : stack;\r\n\r\n var wraps = cluster.children;\r\n var stackWrap;\r\n if (typeof stackGroup === STRING) {\r\n for (var i = 0; i < wraps.length; i++) {\r\n if (wraps[i]._stackGroup === stackGroup) {\r\n stackWrap = wraps[i];\r\n break;\r\n }\r\n }\r\n } else {\r\n stackWrap = wraps[0];\r\n }\r\n\r\n if (!stackWrap) {\r\n var stackType = this.stackType();\r\n stackWrap = new stackType({\r\n vertical: !this.options.invertAxes\r\n });\r\n stackWrap._stackGroup = stackGroup;\r\n cluster.append(stackWrap);\r\n }\r\n\r\n return stackWrap;\r\n },\r\n\r\n categorySlot: function(categoryAxis, categoryIx, valueAxis) {\r\n var chart = this,\r\n options = chart.options,\r\n categorySlot = categoryAxis.getSlot(categoryIx),\r\n startValue = valueAxis.startValue(),\r\n stackAxis, zeroSlot;\r\n\r\n if (options.isStacked) {\r\n zeroSlot = valueAxis.getSlot(startValue, startValue, true);\r\n stackAxis = options.invertAxes ? X : Y;\r\n categorySlot[stackAxis + 1] = categorySlot[stackAxis + 2] = zeroSlot[stackAxis + 1];\r\n }\r\n\r\n return categorySlot;\r\n },\r\n\r\n reflowCategories: function(categorySlots) {\r\n var chart = this,\r\n children = chart.children,\r\n childrenLength = children.length,\r\n i;\r\n\r\n for (i = 0; i < childrenLength; i++) {\r\n children[i].reflow(categorySlots[i]);\r\n }\r\n },\r\n\r\n createAnimation: function() {\r\n this._setAnimationOptions();\r\n ChartElement.fn.createAnimation.call(this);\r\n if (anyHasZIndex(this.options.series)) {\r\n this._setChildrenAnimation();\r\n }\r\n },\r\n\r\n _setChildrenAnimation: function() {\r\n var points = this.points;\r\n var point, pointVisual;\r\n\r\n for (var idx = 0; idx < points.length; idx++) {\r\n point = points[idx];\r\n pointVisual = point.visual;\r\n if (pointVisual && defined(pointVisual.options.zIndex)) {\r\n point.options.animation = this.options.animation;\r\n point.createAnimation();\r\n }\r\n }\r\n },\r\n\r\n _setAnimationOptions: function() {\r\n var options = this.options;\r\n var animation = options.animation || {};\r\n var origin;\r\n if (this.options.isStacked) {\r\n var valueAxis = this.seriesValueAxis(options.series[0]);\r\n origin = valueAxis.getSlot(valueAxis.startValue());\r\n } else {\r\n origin = this.categoryAxis.getSlot(0);\r\n }\r\n\r\n animation.origin = new geom.Point(origin.x1, origin.y1);\r\n animation.vertical = !options.invertAxes;\r\n }\r\n });\r\n\r\n var RangeBar = Bar.extend({\r\n defaults: {\r\n labels: {\r\n format: \"{0} - {1}\"\r\n },\r\n tooltip: {\r\n format: \"{1}\"\r\n }\r\n },\r\n\r\n createLabel: function() {\r\n var value = this.value;\r\n var labels = this.options.labels;\r\n var fromOptions = deepExtend({}, labels, labels.from);\r\n var toOptions = deepExtend({}, labels, labels.to);\r\n\r\n if (fromOptions.visible) {\r\n this.labelFrom = this._createLabel(fromOptions);\r\n this.append(this.labelFrom);\r\n }\r\n\r\n if (toOptions.visible) {\r\n this.labelTo = this._createLabel(toOptions);\r\n this.append(this.labelTo);\r\n }\r\n },\r\n\r\n _createLabel: function(options) {\r\n var labelText;\r\n\r\n if (options.template) {\r\n var labelTemplate = template(options.template);\r\n labelText = labelTemplate({\r\n dataItem: this.dataItem,\r\n category: this.category,\r\n value: this.value,\r\n percentage: this.percentage,\r\n runningTotal: this.runningTotal,\r\n total: this.total,\r\n series: this.series\r\n });\r\n } else {\r\n labelText = this.formatValue(options.format);\r\n }\r\n\r\n return new BarLabel(labelText,\r\n deepExtend({\r\n vertical: this.options.vertical\r\n },\r\n options\r\n ));\r\n },\r\n\r\n reflow: function(targetBox) {\r\n this.render();\r\n\r\n var rangeBar = this,\r\n options = rangeBar.options,\r\n labelFrom = rangeBar.labelFrom,\r\n labelTo = rangeBar.labelTo,\r\n value = rangeBar.value;\r\n\r\n rangeBar.box = targetBox;\r\n\r\n if (labelFrom) {\r\n labelFrom.options.aboveAxis = rangeBar.value.from > rangeBar.value.to;\r\n labelFrom.reflow(targetBox);\r\n }\r\n\r\n if (labelTo) {\r\n labelTo.options.aboveAxis = rangeBar.value.to > rangeBar.value.from;\r\n labelTo.reflow(targetBox);\r\n }\r\n\r\n if (rangeBar.note) {\r\n rangeBar.note.reflow(targetBox);\r\n }\r\n }\r\n });\r\n\r\n var RangeBarChart = BarChart.extend({\r\n pointType: function() {\r\n return RangeBar;\r\n },\r\n\r\n pointValue: function(data) {\r\n return data.valueFields;\r\n },\r\n\r\n formatPointValue: function(point, format) {\r\n if (point.value.from === null && point.value.to === null) {\r\n return \"\";\r\n }\r\n\r\n return autoFormat(format, point.value.from, point.value.to);\r\n },\r\n\r\n plotLimits: CategoricalChart.fn.plotLimits,\r\n\r\n plotRange: function(point) {\r\n if (!point) {\r\n return 0;\r\n }\r\n\r\n return [point.value.from, point.value.to];\r\n },\r\n\r\n updateRange: function(value, fields) {\r\n var chart = this,\r\n axisName = fields.series.axis,\r\n from = value.from,\r\n to = value.to,\r\n axisRange = chart.valueAxisRanges[axisName];\r\n\r\n if (value !== null && isNumber(from) && isNumber(to)) {\r\n axisRange = chart.valueAxisRanges[axisName] =\r\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\r\n\r\n axisRange.min = math.min(axisRange.min, from);\r\n axisRange.max = math.max(axisRange.max, from);\r\n\r\n axisRange.min = math.min(axisRange.min, to);\r\n axisRange.max = math.max(axisRange.max, to);\r\n }\r\n },\r\n\r\n aboveAxis: function(point){\r\n var value = point.value;\r\n return value.from < value.to;\r\n }\r\n });\r\n\r\n var BulletChart = CategoricalChart.extend({\r\n init: function(plotArea, options) {\r\n var chart = this;\r\n\r\n chart.wrapData(options);\r\n\r\n CategoricalChart.fn.init.call(chart, plotArea, options);\r\n },\r\n\r\n options: {\r\n animation: {\r\n type: BAR\r\n }\r\n },\r\n\r\n wrapData: function(options) {\r\n var series = options.series,\r\n i, data, seriesItem;\r\n\r\n for (i = 0; i < series.length; i++) {\r\n seriesItem = series[i];\r\n data = seriesItem.data;\r\n if (data && !isArray(data[0]) && typeof(data[0]) != OBJECT) {\r\n seriesItem.data = [data];\r\n }\r\n }\r\n },\r\n\r\n reflowCategories: function(categorySlots) {\r\n var chart = this,\r\n children = chart.children,\r\n childrenLength = children.length,\r\n i;\r\n\r\n for (i = 0; i < childrenLength; i++) {\r\n children[i].reflow(categorySlots[i]);\r\n }\r\n },\r\n\r\n plotRange: function(point) {\r\n var series = point.series;\r\n var valueAxis = this.seriesValueAxis(series);\r\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\r\n\r\n return [axisCrossingValue, point.value.current || axisCrossingValue];\r\n },\r\n\r\n createPoint: function(data, fields) {\r\n var chart = this;\r\n var categoryIx = fields.categoryIx;\r\n var category = fields.category;\r\n var series = fields.series;\r\n var seriesIx = fields.seriesIx;\r\n var value = data.valueFields;\r\n var options = chart.options;\r\n var children = chart.children;\r\n var bullet;\r\n var bulletOptions;\r\n var cluster;\r\n\r\n bulletOptions = deepExtend({\r\n vertical: !options.invertAxes,\r\n overlay: series.overlay,\r\n categoryIx: categoryIx,\r\n invertAxes: options.invertAxes\r\n }, series);\r\n\r\n var color = data.fields.color || series.color;\r\n bulletOptions = chart.evalPointOptions(\r\n bulletOptions, value, category, categoryIx, series, seriesIx\r\n );\r\n\r\n if (kendo.isFunction(series.color)) {\r\n color = bulletOptions.color;\r\n }\r\n\r\n bullet = new Bullet(value, bulletOptions);\r\n bullet.color = color;\r\n\r\n cluster = children[categoryIx];\r\n if (!cluster) {\r\n cluster = new ClusterLayout({\r\n vertical: options.invertAxes,\r\n gap: options.gap,\r\n spacing: options.spacing\r\n });\r\n chart.append(cluster);\r\n }\r\n\r\n cluster.append(bullet);\r\n\r\n return bullet;\r\n },\r\n\r\n updateRange: function(value, fields) {\r\n var chart = this,\r\n axisName = fields.series.axis,\r\n current = value.current,\r\n target = value.target,\r\n axisRange = chart.valueAxisRanges[axisName];\r\n\r\n if (defined(current) && !isNaN(current) && defined(target && !isNaN(target))) {\r\n axisRange = chart.valueAxisRanges[axisName] =\r\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\r\n\r\n axisRange.min = math.min.apply(math, [axisRange.min, current, target]);\r\n axisRange.max = math.max.apply(math, [axisRange.max, current, target]);\r\n }\r\n },\r\n\r\n formatPointValue: function(point, format) {\r\n return autoFormat(format, point.value.current, point.value.target);\r\n },\r\n\r\n pointValue: function(data) {\r\n return data.valueFields.current;\r\n },\r\n\r\n aboveAxis: function(point, valueAxis) {\r\n var value = point.value.current;\r\n\r\n return value > 0;\r\n },\r\n\r\n createAnimation: function() {\r\n var points = this.points;\r\n var point, pointVisual;\r\n\r\n this._setAnimationOptions();\r\n\r\n for (var idx = 0; idx < points.length; idx++) {\r\n point = points[idx];\r\n point.options.animation = this.options.animation;\r\n point.createAnimation();\r\n }\r\n },\r\n\r\n _setAnimationOptions: BarChart.fn._setAnimationOptions\r\n });\r\n\r\n var Bullet = ChartElement.extend({\r\n init: function(value, options) {\r\n var bullet = this;\r\n\r\n ChartElement.fn.init.call(bullet, options);\r\n\r\n bullet.aboveAxis = bullet.options.aboveAxis;\r\n bullet.color = options.color || WHITE;\r\n bullet.value = value;\r\n },\r\n\r\n options: {\r\n border: {\r\n width: 1\r\n },\r\n vertical: false,\r\n opacity: 1,\r\n target: {\r\n shape: \"\",\r\n border: {\r\n width: 0,\r\n color: \"green\"\r\n },\r\n line: {\r\n width: 2\r\n }\r\n },\r\n tooltip: {\r\n format: \"Current: {0}</br>Target: {1}\"\r\n }\r\n },\r\n\r\n render: function() {\r\n var bullet = this,\r\n options = bullet.options;\r\n\r\n if (!bullet._rendered) {\r\n bullet._rendered = true;\r\n\r\n if (defined(bullet.value.target)) {\r\n bullet.target = new Target({\r\n type: options.target.shape,\r\n background: options.target.color || bullet.color,\r\n opacity: options.opacity,\r\n zIndex: options.zIndex,\r\n border: options.target.border,\r\n vAlign: TOP,\r\n align: RIGHT\r\n });\r\n\r\n bullet.append(bullet.target);\r\n }\r\n\r\n bullet.createNote();\r\n }\r\n },\r\n\r\n reflow: function(box) {\r\n this.render();\r\n\r\n var bullet = this,\r\n options = bullet.options,\r\n chart = bullet.owner,\r\n target = bullet.target,\r\n invertAxes = options.invertAxes,\r\n valueAxis = chart.seriesValueAxis(bullet.options),\r\n categorySlot = chart.categorySlot(chart.categoryAxis, options.categoryIx, valueAxis),\r\n targetValueSlot = valueAxis.getSlot(bullet.value.target),\r\n targetSlotX = invertAxes ? targetValueSlot : categorySlot,\r\n targetSlotY = invertAxes ? categorySlot : targetValueSlot,\r\n targetSlot;\r\n\r\n if (target) {\r\n targetSlot = new Box2D(\r\n targetSlotX.x1, targetSlotY.y1,\r\n targetSlotX.x2, targetSlotY.y2\r\n );\r\n target.options.height = invertAxes ? targetSlot.height() : options.target.line.width;\r\n target.options.width = invertAxes ? options.target.line.width : targetSlot.width();\r\n target.reflow(targetSlot);\r\n }\r\n\r\n if (bullet.note) {\r\n bullet.note.reflow(box);\r\n }\r\n\r\n bullet.box = box;\r\n },\r\n\r\n createVisual: function() {\r\n ChartElement.fn.createVisual.call(this);\r\n\r\n var options = this.options;\r\n var body = draw.Path.fromRect(this.box.toRect(), {\r\n fill: {\r\n color: this.color,\r\n opacity: options.opacity\r\n },\r\n stroke: null\r\n });\r\n\r\n if (options.border.width > 0) {\r\n body.options.set(\"stroke\", {\r\n color: options.border.color || this.color,\r\n width: options.border.width,\r\n dashType: options.border.dashType,\r\n opacity: valueOrDefault(options.border.opacity, options.opacity)\r\n });\r\n }\r\n\r\n this.bodyVisual = body;\r\n\r\n alignPathToPixel(body);\r\n this.visual.append(body);\r\n },\r\n\r\n createAnimation: function() {\r\n if (this.bodyVisual) {\r\n this.animation = draw.Animation.create(\r\n this.bodyVisual, this.options.animation\r\n );\r\n }\r\n },\r\n\r\n tooltipAnchor: function(tooltipWidth, tooltipHeight) {\r\n var bar = this,\r\n options = bar.options,\r\n box = bar.box,\r\n vertical = options.vertical,\r\n aboveAxis = bar.aboveAxis,\r\n clipBox = bar.owner.pane.clipBox() || box,\r\n x,\r\n y;\r\n\r\n if (vertical) {\r\n x = box.x2 + TOOLTIP_OFFSET;\r\n y = aboveAxis ? math.max(box.y1, clipBox.y1) : math.min(box.y2, clipBox.y2) - tooltipHeight;\r\n } else {\r\n var x1 = math.max(box.x1, clipBox.x1),\r\n x2 = math.min(box.x2, clipBox.x2);\r\n if (options.isStacked) {\r\n x = aboveAxis ? x2 - tooltipWidth : x1;\r\n y = box.y1 - tooltipHeight - TOOLTIP_OFFSET;\r\n } else {\r\n x = aboveAxis ? x2 + TOOLTIP_OFFSET : x1 - tooltipWidth - TOOLTIP_OFFSET;\r\n y = box.y1;\r\n }\r\n }\r\n\r\n return new Point2D(x, y);\r\n },\r\n\r\n createHighlight: function(style) {\r\n return draw.Path.fromRect(this.box.toRect(), style);\r\n },\r\n\r\n highlightVisual: function() {\r\n return this.bodyVisual;\r\n },\r\n\r\n highlightVisualArgs: function() {\r\n var options = this.options;\r\n return {\r\n rect: this.box.toRect(),\r\n visual: this.bodyVisual,\r\n options: this.options\r\n };\r\n },\r\n\r\n formatValue: function(format) {\r\n var bullet = this;\r\n\r\n return bullet.owner.formatPointValue(bullet, format);\r\n }\r\n });\r\n deepExtend(Bullet.fn, PointEventsMixin);\r\n deepExtend(Bullet.fn, NoteMixin);\r\n\r\n var Target = ShapeElement.extend();\r\n deepExtend(Target.fn, PointEventsMixin);\r\n\r\n var ErrorBarBase = ChartElement.extend({\r\n init: function(low, high, isVertical, chart, series, options) {\r\n var errorBar = this;\r\n errorBar.low = low;\r\n errorBar.high = high;\r\n errorBar.isVertical = isVertical;\r\n errorBar.chart = chart;\r\n errorBar.series = series;\r\n\r\n ChartElement.fn.init.call(errorBar, options);\r\n },\r\n\r\n options: {\r\n animation: {\r\n type: FADEIN,\r\n delay: INITIAL_ANIMATION_DURATION\r\n },\r\n endCaps: true,\r\n line: {\r\n width: 1\r\n },\r\n zIndex: 1\r\n },\r\n\r\n getAxis: function(){},\r\n\r\n reflow: function(targetBox) {\r\n var linePoints,\r\n errorBar = this,\r\n endCaps = errorBar.options.endCaps,\r\n isVertical = errorBar.isVertical,\r\n axis = errorBar.getAxis(),\r\n valueBox = axis.getSlot(errorBar.low, errorBar.high),\r\n centerBox = targetBox.center(),\r\n capsWidth = errorBar.getCapsWidth(targetBox, isVertical),\r\n capValue = isVertical ? centerBox.x: centerBox.y,\r\n capStart = capValue - capsWidth,\r\n capEnd = capValue + capsWidth;\r\n\r\n if (isVertical) {\r\n linePoints = [\r\n Point2D(centerBox.x, valueBox.y1),\r\n Point2D(centerBox.x, valueBox.y2)\r\n ];\r\n if (endCaps) {\r\n linePoints.push(Point2D(capStart, valueBox.y1),\r\n Point2D(capEnd, valueBox.y1),\r\n Point2D(capStart, valueBox.y2),\r\n Point2D(capEnd, valueBox.y2));\r\n }\r\n errorBar.box = Box2D(capStart, valueBox.y1, capEnd, valueBox.y2);\r\n } else {\r\n linePoints = [\r\n Point2D(valueBox.x1, centerBox.y),\r\n Point2D(valueBox.x2, centerBox.y)\r\n ];\r\n if (endCaps) {\r\n linePoints.push(Point2D(valueBox.x1, capStart),\r\n Point2D(valueBox.x1, capEnd),\r\n Point2D(valueBox.x2, capStart),\r\n Point2D(valueBox.x2, capEnd));\r\n }\r\n errorBar.box = Box2D(valueBox.x1, capStart, valueBox.x2, capEnd);\r\n }\r\n\r\n errorBar.linePoints = linePoints;\r\n },\r\n\r\n getCapsWidth: function(box, isVertical) {\r\n var boxSize = isVertical ? box.width() : box.height(),\r\n capsWidth = math.min(math.floor(boxSize / 2), DEFAULT_ERROR_BAR_WIDTH) || DEFAULT_ERROR_BAR_WIDTH;\r\n\r\n return capsWidth;\r\n },\r\n\r\n createVisual: function() {\r\n var that = this;\r\n var options = that.options;\r\n var visual = options.visual;\r\n\r\n if (visual) {\r\n that.visual = visual({\r\n low: that.low,\r\n high: that.high,\r\n rect: that.box.toRect(),\r\n options: {\r\n endCaps: options.endCaps,\r\n color: options.color,\r\n line: options.line\r\n },\r\n createVisual: function() {\r\n that.createDefaultVisual();\r\n var defaultVisual = that.visual;\r\n delete that.visual;\r\n return defaultVisual;\r\n }\r\n });\r\n } else {\r\n that.createDefaultVisual();\r\n }\r\n },\r\n\r\n createDefaultVisual: function() {\r\n var errorBar = this,\r\n options = errorBar.options,\r\n parent = errorBar.parent,\r\n lineOptions = {\r\n stroke: {\r\n color: options.color,\r\n width: options.line.width,\r\n dashType: options.line.dashType\r\n }\r\n },\r\n linePoints = errorBar.linePoints;\r\n\r\n ChartElement.fn.createVisual.call(this);\r\n\r\n for (var idx = 0; idx < linePoints.length; idx+=2) {\r\n var line = new draw.Path(lineOptions)\r\n .moveTo(linePoints[idx].x, linePoints[idx].y)\r\n .lineTo(linePoints[idx + 1].x, linePoints[idx + 1].y);\r\n\r\n this.visual.append(line);\r\n }\r\n }\r\n });\r\n\r\n var CategoricalErrorBar = ErrorBarBase.extend({\r\n getAxis: function() {\r\n var errorBar = this,\r\n chart = errorBar.chart,\r\n series = errorBar.series,\r\n axis = chart.seriesValueAxis(series);\r\n\r\n return axis;\r\n }\r\n });\r\n\r\n var ScatterErrorBar = ErrorBarBase.extend({\r\n getAxis: function() {\r\n var errorBar = this,\r\n chart = errorBar.chart,\r\n series = errorBar.series,\r\n axes = chart.seriesAxes(series),\r\n axis = errorBar.isVertical ? axes.y : axes.x;\r\n return axis;\r\n }\r\n });\r\n\r\n var LinePoint = ChartElement.extend({\r\n init: function(value, options) {\r\n var point = this;\r\n\r\n ChartElement.fn.init.call(point);\r\n\r\n point.value = value;\r\n point.options = options;\r\n point.aboveAxis = valueOrDefault(point.options.aboveAxis, true);\r\n point.tooltipTracking = true;\r\n },\r\n\r\n defaults: {\r\n vertical: true,\r\n markers: {\r\n visible: true,\r\n background: WHITE,\r\n size: LINE_MARKER_SIZE,\r\n type: CIRCLE,\r\n border: {\r\n width: 2\r\n },\r\n opacity: 1\r\n },\r\n labels: {\r\n visible: false,\r\n position: ABOVE,\r\n margin: getSpacing(3),\r\n padding: getSpacing(4),\r\n animation: {\r\n type: FADEIN,\r\n delay: INITIAL_ANIMATION_DURATION\r\n }\r\n },\r\n notes: {\r\n label: {}\r\n },\r\n highlight: {\r\n markers: {\r\n border: {}\r\n }\r\n }\r\n },\r\n\r\n render: function() {\r\n var point = this,\r\n options = point.options,\r\n markers = options.markers,\r\n labels = options.labels,\r\n labelText = point.value;\r\n\r\n if (point._rendered) {\r\n return;\r\n } else {\r\n point._rendered = true;\r\n }\r\n\r\n if (markers.visible && markers.size) {\r\n point.marker = point.createMarker();\r\n point.append(point.marker);\r\n }\r\n\r\n if (labels.visible) {\r\n if (labels.template) {\r\n var labelTemplate = template(labels.template);\r\n labelText = labelTemplate({\r\n dataItem: point.dataItem,\r\n category: point.category,\r\n value: point.value,\r\n percentage: point.percentage,\r\n series: point.series\r\n });\r\n } else if (labels.format) {\r\n labelText = point.formatValue(labels.format);\r\n }\r\n point.label = new TextBox(labelText,\r\n deepExtend({\r\n align: CENTER,\r\n vAlign: CENTER,\r\n margin: {\r\n left: 5,\r\n right: 5\r\n },\r\n zIndex: valueOrDefault(labels.zIndex, this.series.zIndex)\r\n }, labels)\r\n );\r\n point.append(point.label);\r\n }\r\n\r\n point.createNote();\r\n\r\n if (point.errorBar) {\r\n point.append(point.errorBar);\r\n }\r\n },\r\n\r\n markerBorder: function() {\r\n var options = this.options.markers;\r\n var background = options.background;\r\n var border = deepExtend({ color: this.color }, options.border);\r\n\r\n if (!defined(border.color)) {\r\n border.color =\r\n new Color(background).brightness(BAR_BORDER_BRIGHTNESS).toHex();\r\n }\r\n\r\n return border;\r\n },\r\n\r\n createVisual: noop,\r\n\r\n createMarker: function() {\r\n var options = this.options.markers;\r\n var marker = new ShapeElement({\r\n type: options.type,\r\n width: options.size,\r\n height: options.size,\r\n rotation: options.rotation,\r\n background: options.background,\r\n border: this.markerBorder(),\r\n opacity: options.opacity,\r\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex),\r\n animation: options.animation,\r\n visual: options.visual\r\n }, {\r\n dataItem: this.dataItem,\r\n value: this.value,\r\n series: this.series,\r\n category: this.category\r\n });\r\n\r\n return marker;\r\n },\r\n\r\n markerBox: function() {\r\n if (!this.marker) {\r\n this.marker = this.createMarker();\r\n this.marker.reflow(this._childBox);\r\n }\r\n\r\n return this.marker.box;\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var point = this,\r\n options = point.options,\r\n vertical = options.vertical,\r\n aboveAxis = point.aboveAxis,\r\n childBox, center;\r\n\r\n point.render();\r\n\r\n point.box = targetBox;\r\n childBox = targetBox.clone();\r\n\r\n if (vertical) {\r\n if (aboveAxis) {\r\n childBox.y1 -= childBox.height();\r\n } else {\r\n childBox.y2 += childBox.height();\r\n }\r\n } else {\r\n if (aboveAxis) {\r\n childBox.x1 += childBox.width();\r\n } else {\r\n childBox.x2 -= childBox.width();\r\n }\r\n }\r\n\r\n point._childBox = childBox;\r\n if (point.marker) {\r\n point.marker.reflow(childBox);\r\n }\r\n\r\n point.reflowLabel(childBox);\r\n\r\n if (point.errorBars) {\r\n for(var i = 0; i < point.errorBars.length; i++){\r\n point.errorBars[i].reflow(childBox);\r\n }\r\n }\r\n\r\n if (point.note) {\r\n var noteTargetBox = point.markerBox();\r\n\r\n if (!point.marker) {\r\n center = noteTargetBox.center();\r\n noteTargetBox = Box2D(center.x, center.y, center.x, center.y);\r\n }\r\n\r\n point.note.reflow(noteTargetBox);\r\n }\r\n },\r\n\r\n reflowLabel: function(box) {\r\n var point = this,\r\n options = point.options,\r\n label = point.label,\r\n anchor = options.labels.position;\r\n\r\n if (label) {\r\n anchor = anchor === ABOVE ? TOP : anchor;\r\n anchor = anchor === BELOW ? BOTTOM : anchor;\r\n\r\n label.reflow(box);\r\n label.box.alignTo(point.markerBox(), anchor);\r\n label.reflow(label.box);\r\n }\r\n },\r\n\r\n createHighlight: function() {\r\n var highlight = this.options.highlight;\r\n var markers = highlight.markers;\r\n var defaultColor = this.markerBorder().color;\r\n var options = this.options.markers;\r\n\r\n var shadow = new ShapeElement({\r\n type: options.type,\r\n width: options.size,\r\n height: options.size,\r\n rotation: options.rotation,\r\n background: markers.color || defaultColor,\r\n border: {\r\n color: markers.border.color,\r\n width: markers.border.width,\r\n opacity: valueOrDefault(markers.border.opacity, 1)\r\n },\r\n opacity: valueOrDefault(markers.opacity, 1)\r\n });\r\n shadow.reflow(this._childBox);\r\n\r\n return shadow.getElement();\r\n },\r\n\r\n highlightVisual: function() {\r\n return (this.marker || {}).visual;\r\n },\r\n\r\n highlightVisualArgs: function() {\r\n var marker = this.marker;\r\n var visual;\r\n var rect;\r\n if (marker) {\r\n rect = marker.paddingBox.toRect();\r\n visual = marker.visual;\r\n } else {\r\n var size = this.options.markers.size;\r\n var halfSize = size / 2;\r\n var center = this.box.center();\r\n rect = new geom.Rect([center.x - halfSize, center.y - halfSize], [size, size]);\r\n }\r\n\r\n return {\r\n options: this.options,\r\n rect: rect,\r\n visual: visual\r\n };\r\n },\r\n\r\n tooltipAnchor: function(tooltipWidth, tooltipHeight) {\r\n var point = this,\r\n markerBox = point.markerBox(),\r\n options = point.options,\r\n aboveAxis = point.aboveAxis,\r\n x = markerBox.x2 + TOOLTIP_OFFSET,\r\n y = aboveAxis ? markerBox.y1 - tooltipHeight : markerBox.y2,\r\n clipBox = point.owner.pane.clipBox(),\r\n showTooltip = !clipBox || clipBox.overlaps(markerBox);\r\n\r\n if (showTooltip) {\r\n return Point2D(x, y);\r\n }\r\n },\r\n\r\n formatValue: function(format) {\r\n var point = this;\r\n\r\n return point.owner.formatPointValue(point, format);\r\n }\r\n });\r\n deepExtend(LinePoint.fn, PointEventsMixin);\r\n deepExtend(LinePoint.fn, NoteMixin);\r\n\r\n var Bubble = LinePoint.extend({\r\n init: function(value, options) {\r\n var point = this;\r\n\r\n LinePoint.fn.init.call(point, value, options);\r\n\r\n point.category = value.category;\r\n },\r\n\r\n defaults: {\r\n labels: {\r\n position: CENTER\r\n },\r\n highlight: {\r\n opacity: 1,\r\n border: {\r\n width: 1,\r\n opacity: 1\r\n }\r\n }\r\n },\r\n\r\n createHighlight: function() {\r\n var highlight = this.options.highlight;\r\n var border = highlight.border;\r\n var markers = this.options.markers;\r\n var center = this.box.center();\r\n var radius = markers.size / 2 - border.width / 2;\r\n var overlay = new draw.Circle(new geom.Circle([center.x, center.y], radius), {\r\n stroke: {\r\n color: border.color ||\r\n new Color(markers.background).brightness(BAR_BORDER_BRIGHTNESS).toHex(),\r\n width: border.width,\r\n opacity: border.opacity\r\n },\r\n fill: {\r\n color: markers.background,\r\n opacity: highlight.opacity\r\n }\r\n });\r\n\r\n return overlay;\r\n }\r\n });\r\n\r\n var LineSegment = ChartElement.extend({\r\n init: function(linePoints, series, seriesIx) {\r\n var segment = this;\r\n\r\n ChartElement.fn.init.call(segment);\r\n\r\n segment.linePoints = linePoints;\r\n segment.series = series;\r\n segment.seriesIx = seriesIx;\r\n },\r\n\r\n options: {\r\n closed: false\r\n },\r\n\r\n points: function(visualPoints) {\r\n var segment = this,\r\n linePoints = segment.linePoints.concat(visualPoints || []),\r\n points = [];\r\n\r\n for (var i = 0, length = linePoints.length; i < length; i++) {\r\n if (linePoints[i].visible !== false) {\r\n points.push(linePoints[i]._childBox.toRect().center());\r\n }\r\n }\r\n\r\n return points;\r\n },\r\n\r\n createVisual: function() {\r\n var options = this.options;\r\n var series = this.series;\r\n var defaults = series._defaults;\r\n var color = series.color;\r\n\r\n if (isFn(color) && defaults) {\r\n color = defaults.color;\r\n }\r\n\r\n var line = draw.Path.fromPoints(this.points(), {\r\n stroke: {\r\n color: color,\r\n width: series.width,\r\n opacity: series.opacity,\r\n dashType: series.dashType\r\n },\r\n zIndex: series.zIndex\r\n });\r\n\r\n if (options.closed) {\r\n line.close();\r\n }\r\n\r\n this.visual = line;\r\n },\r\n\r\n aliasFor: function(e, coords) {\r\n var segment = this,\r\n seriesIx = segment.seriesIx;\r\n\r\n return segment.parent.getNearestPoint(coords.x, coords.y, seriesIx);\r\n }\r\n });\r\n\r\n var LineChartMixin = {\r\n renderSegments: function() {\r\n var chart = this,\r\n options = chart.options,\r\n series = options.series,\r\n seriesPoints = chart.seriesPoints,\r\n currentSeries, seriesIx,\r\n seriesCount = seriesPoints.length,\r\n sortedPoints, linePoints,\r\n point, pointIx, pointCount,\r\n lastSegment;\r\n\r\n this._segments = [];\r\n\r\n for (seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\r\n currentSeries = series[seriesIx];\r\n sortedPoints = chart.sortPoints(seriesPoints[seriesIx]);\r\n pointCount = sortedPoints.length;\r\n linePoints = [];\r\n\r\n for (pointIx = 0; pointIx < pointCount; pointIx++) {\r\n point = sortedPoints[pointIx];\r\n if (point) {\r\n linePoints.push(point);\r\n } else if (chart.seriesMissingValues(currentSeries) !== INTERPOLATE) {\r\n if (linePoints.length > 1) {\r\n lastSegment = chart.createSegment(\r\n linePoints, currentSeries, seriesIx, lastSegment\r\n );\r\n this._addSegment(lastSegment);\r\n }\r\n linePoints = [];\r\n }\r\n }\r\n\r\n if (linePoints.length > 1) {\r\n lastSegment = chart.createSegment(\r\n linePoints, currentSeries, seriesIx, lastSegment\r\n );\r\n this._addSegment(lastSegment);\r\n }\r\n }\r\n\r\n this.children.unshift.apply(this.children, this._segments);\r\n },\r\n\r\n _addSegment: function(segment) {\r\n this._segments.push(segment);\r\n segment.parent = this;\r\n },\r\n\r\n sortPoints: function(points) {\r\n return points;\r\n },\r\n\r\n seriesMissingValues: function(series) {\r\n var missingValues = series.missingValues,\r\n assumeZero = !missingValues && this.options.isStacked;\r\n\r\n return assumeZero ? ZERO : missingValues || INTERPOLATE;\r\n },\r\n\r\n getNearestPoint: function(x, y, seriesIx) {\r\n var target = new Point2D(x, y);\r\n var allPoints = this.seriesPoints[seriesIx];\r\n var nearestPointDistance = MAX_VALUE;\r\n var nearestPoint;\r\n\r\n for (var i = 0; i < allPoints.length; i++) {\r\n var point = allPoints[i];\r\n\r\n if (point && defined(point.value) && point.value !== null && point.visible !== false) {\r\n var pointBox = point.box;\r\n var pointDistance = pointBox.center().distanceTo(target);\r\n\r\n if (pointDistance < nearestPointDistance) {\r\n nearestPoint = point;\r\n nearestPointDistance = pointDistance;\r\n }\r\n }\r\n }\r\n\r\n return nearestPoint;\r\n }\r\n };\r\n\r\n var ClipAnimationMixin = {\r\n createAnimation: function() {\r\n var root = this.getRoot();\r\n if (root && (root.options || {}).transitions !== false) {\r\n var box = root.box;\r\n var clipPath = draw.Path.fromRect(box.toRect());\r\n this.visual.clip(clipPath);\r\n this.animation = new ClipAnimation(clipPath, {\r\n box: box\r\n });\r\n if (anyHasZIndex(this.options.series)) {\r\n this._setChildrenAnimation(clipPath);\r\n }\r\n }\r\n },\r\n\r\n _setChildrenAnimation: function(clipPath) {\r\n var points = this.animationPoints();\r\n var point, pointVisual;\r\n\r\n for (var idx = 0; idx < points.length; idx++) {\r\n point = points[idx];\r\n pointVisual = point.visual;\r\n if (pointVisual && defined(pointVisual.options.zIndex)) {\r\n pointVisual.clip(clipPath);\r\n }\r\n }\r\n }\r\n };\r\n\r\n var LineChart = CategoricalChart.extend({\r\n render: function() {\r\n var chart = this;\r\n\r\n CategoricalChart.fn.render.apply(chart);\r\n\r\n chart.updateStackRange();\r\n chart.renderSegments();\r\n },\r\n\r\n pointType: function() {\r\n return LinePoint;\r\n },\r\n\r\n createPoint: function(data, fields) {\r\n var chart = this;\r\n var categoryIx = fields.categoryIx;\r\n var category = fields.category;\r\n var series = fields.series;\r\n var seriesIx = fields.seriesIx;\r\n var value = data.valueFields.value;\r\n var options = chart.options;\r\n var isStacked = options.isStacked;\r\n var categoryPoints = chart.categoryPoints[categoryIx];\r\n var missingValues = chart.seriesMissingValues(series);\r\n var stackPoint;\r\n var plotValue = 0;\r\n var point;\r\n var pointOptions;\r\n\r\n if (!defined(value) || value === null) {\r\n if (missingValues === ZERO) {\r\n value = 0;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n pointOptions = this.pointOptions(series, seriesIx);\r\n pointOptions = chart.evalPointOptions(\r\n pointOptions, value, category, categoryIx, series, seriesIx\r\n );\r\n\r\n var color = data.fields.color || series.color;\r\n if (kendo.isFunction(series.color)) {\r\n color = pointOptions.color;\r\n }\r\n\r\n point = new LinePoint(value, pointOptions);\r\n point.color = color;\r\n\r\n chart.append(point);\r\n\r\n return point;\r\n },\r\n\r\n plotRange: function(point) {\r\n var plotValue = this.plotValue(point);\r\n\r\n if (this.options.isStacked) {\r\n var categoryIx = point.categoryIx;\r\n var categoryPts = this.categoryPoints[categoryIx];\r\n\r\n for (var i = 0; i < categoryPts.length; i++) {\r\n var other = categoryPts[i];\r\n\r\n if (point === other) {\r\n break;\r\n }\r\n\r\n plotValue += this.plotValue(other);\r\n }\r\n\r\n }\r\n\r\n return [plotValue, plotValue];\r\n },\r\n\r\n createSegment: function(linePoints, currentSeries, seriesIx) {\r\n var pointType,\r\n style = currentSeries.style;\r\n\r\n if (style === STEP) {\r\n pointType = StepLineSegment;\r\n } else if (style === SMOOTH) {\r\n pointType = SplineSegment;\r\n } else {\r\n pointType = LineSegment;\r\n }\r\n\r\n return new pointType(linePoints, currentSeries, seriesIx);\r\n },\r\n\r\n animationPoints: function() {\r\n var series = this.seriesOptions;\r\n var points = [];\r\n var seriesPoints;\r\n var pointsIdx, idx;\r\n for (idx = 0; idx < series.length; idx++) {\r\n if (series[idx].markers.visible) {\r\n seriesPoints = this.seriesPoints[idx];\r\n for (pointsIdx = 0; pointsIdx < seriesPoints.length; pointsIdx++) {\r\n points.push(seriesPoints[pointsIdx].marker);\r\n }\r\n }\r\n }\r\n return points.concat(this._segments);\r\n }\r\n });\r\n deepExtend(LineChart.fn, LineChartMixin, ClipAnimationMixin);\r\n\r\n var ClipAnimation = draw.Animation.extend({\r\n options: {\r\n duration: INITIAL_ANIMATION_DURATION\r\n },\r\n\r\n setup: function() {\r\n this._setEnd(this.options.box.x1);\r\n },\r\n\r\n step: function(pos) {\r\n var box = this.options.box;\r\n this._setEnd(interpolate(box.x1, box.x2, pos));\r\n },\r\n\r\n _setEnd: function(x) {\r\n var element = this.element;\r\n var segments = element.segments;\r\n var topRight = segments[1].anchor();\r\n var bottomRight = segments[2].anchor();\r\n element.suspend();\r\n topRight.setX(x);\r\n element.resume();\r\n bottomRight.setX(x);\r\n }\r\n });\r\n draw.AnimationFactory.current.register(CLIP, ClipAnimation);\r\n\r\n var StepLineSegment = LineSegment.extend({\r\n points: function(visualPoints) {\r\n var segment = this,\r\n points;\r\n\r\n points = segment.calculateStepPoints(segment.linePoints);\r\n\r\n if (visualPoints && visualPoints.length) {\r\n points = points.concat(segment.calculateStepPoints(visualPoints).reverse());\r\n }\r\n\r\n return points;\r\n },\r\n\r\n calculateStepPoints: function(points) {\r\n var segment = this,\r\n chart = segment.parent,\r\n plotArea = chart.plotArea,\r\n categoryAxis = plotArea.seriesCategoryAxis(segment.series),\r\n isInterpolate = chart.seriesMissingValues(segment.series) === INTERPOLATE,\r\n length = points.length,\r\n reverse = categoryAxis.options.reverse,\r\n vertical = categoryAxis.options.vertical,\r\n dir = reverse ? 2 : 1,\r\n revDir = reverse ? 1 : 2,\r\n prevPoint, point, i,\r\n prevMarkerBoxCenter, markerBoxCenter,\r\n result = [];\r\n\r\n for (i = 1; i < length; i++) {\r\n prevPoint = points[i - 1];\r\n point = points[i];\r\n prevMarkerBoxCenter = prevPoint.markerBox().center();\r\n markerBoxCenter = point.markerBox().center();\r\n if (categoryAxis.options.justified) {\r\n result.push(new geom.Point(prevMarkerBoxCenter.x, prevMarkerBoxCenter.y));\r\n if (vertical) {\r\n result.push(new geom.Point(prevMarkerBoxCenter.x, markerBoxCenter.y));\r\n } else {\r\n result.push(new geom.Point(markerBoxCenter.x, prevMarkerBoxCenter.y));\r\n }\r\n result.push(new geom.Point(markerBoxCenter.x, markerBoxCenter.y));\r\n } else {\r\n if (vertical) {\r\n result.push(new geom.Point(prevMarkerBoxCenter.x, prevPoint.box[Y + dir]));\r\n result.push(new geom.Point(prevMarkerBoxCenter.x, prevPoint.box[Y + revDir]));\r\n if (isInterpolate) {\r\n result.push(new geom.Point(prevMarkerBoxCenter.x, point.box[Y + dir]));\r\n }\r\n result.push(new geom.Point(markerBoxCenter.x, point.box[Y + dir]));\r\n result.push(new geom.Point(markerBoxCenter.x, point.box[Y + revDir]));\r\n } else {\r\n result.push(new geom.Point(prevPoint.box[X + dir], prevMarkerBoxCenter.y));\r\n result.push(new geom.Point(prevPoint.box[X + revDir], prevMarkerBoxCenter.y));\r\n if (isInterpolate) {\r\n result.push(new geom.Point(point.box[X + dir], prevMarkerBoxCenter.y));\r\n }\r\n result.push(new geom.Point(point.box[X + dir], markerBoxCenter.y));\r\n result.push(new geom.Point(point.box[X + revDir], markerBoxCenter.y));\r\n }\r\n }\r\n }\r\n\r\n return result || [];\r\n }\r\n });\r\n\r\n var SplineSegment = LineSegment.extend({\r\n createVisual: function() {\r\n var options = this.options;\r\n var series = this.series;\r\n var defaults = series._defaults;\r\n var color = series.color;\r\n\r\n if (isFn(color) && defaults) {\r\n color = defaults.color;\r\n }\r\n\r\n var curveProcessor = new CurveProcessor(this.options.closed);\r\n var segments = curveProcessor.process(this.points());\r\n var curve = new draw.Path({\r\n stroke: {\r\n color: color,\r\n width: series.width,\r\n opacity: series.opacity,\r\n dashType: series.dashType\r\n },\r\n zIndex: series.zIndex\r\n });\r\n\r\n curve.segments.push.apply(curve.segments, segments);\r\n\r\n this.visual = curve;\r\n }\r\n });\r\n\r\n var AreaSegmentMixin = {\r\n points: function() {\r\n var segment = this,\r\n chart = segment.parent,\r\n plotArea = chart.plotArea,\r\n invertAxes = chart.options.invertAxes,\r\n valueAxis = chart.seriesValueAxis(segment.series),\r\n valueAxisLineBox = valueAxis.lineBox(),\r\n categoryAxis = plotArea.seriesCategoryAxis(segment.series),\r\n categoryAxisLineBox = categoryAxis.lineBox(),\r\n end = invertAxes ? categoryAxisLineBox.x1 : categoryAxisLineBox.y1,\r\n stackPoints = segment.stackPoints,\r\n points = segment._linePoints(stackPoints),\r\n pos = invertAxes ? X : Y,\r\n firstPoint, lastPoint;\r\n\r\n end = limitValue(end, valueAxisLineBox[pos + 1], valueAxisLineBox[pos + 2]);\r\n if (!segment.stackPoints && points.length > 1) {\r\n firstPoint = points[0];\r\n lastPoint = last(points);\r\n\r\n if (invertAxes) {\r\n points.unshift(new geom.Point(end, firstPoint.y));\r\n points.push(new geom.Point(end, lastPoint.y));\r\n } else {\r\n points.unshift(new geom.Point(firstPoint.x, end));\r\n points.push(new geom.Point(lastPoint.x, end));\r\n }\r\n }\r\n\r\n return points;\r\n },\r\n\r\n createVisual: function() {\r\n var options = this.options;\r\n var series = this.series;\r\n var defaults = series._defaults;\r\n var color = series.color;\r\n\r\n if (isFn(color) && defaults) {\r\n color = defaults.color;\r\n }\r\n\r\n this.visual = new draw.Group({\r\n zIndex: series.zIndex\r\n });\r\n\r\n this.createArea(color);\r\n this.createLine(color);\r\n },\r\n\r\n createLine: function(color) {\r\n var series = this.series;\r\n var lineOptions = deepExtend({\r\n color: color,\r\n opacity: series.opacity\r\n }, series.line\r\n );\r\n\r\n if (lineOptions.visible !== false && lineOptions.width > 0) {\r\n var line = draw.Path.fromPoints(this._linePoints(), {\r\n stroke: {\r\n color: lineOptions.color,\r\n width: lineOptions.width,\r\n opacity: lineOptions.opacity,\r\n dashType: lineOptions.dashType,\r\n lineCap: \"butt\"\r\n }\r\n });\r\n\r\n this.visual.append(line);\r\n }\r\n },\r\n\r\n createArea: function(color) {\r\n var series = this.series;\r\n\r\n var area = draw.Path.fromPoints(this.points(), {\r\n fill: {\r\n color: color,\r\n opacity: series.opacity\r\n },\r\n stroke: null\r\n });\r\n\r\n this.visual.append(area);\r\n }\r\n };\r\n\r\n var AreaSegment = LineSegment.extend({\r\n init: function(linePoints, stackPoints, currentSeries, seriesIx) {\r\n var segment = this;\r\n\r\n segment.stackPoints = stackPoints;\r\n\r\n LineSegment.fn.init.call(segment, linePoints, currentSeries, seriesIx);\r\n },\r\n\r\n _linePoints: LineSegment.fn.points\r\n });\r\n deepExtend(AreaSegment.fn, AreaSegmentMixin);\r\n\r\n var AreaChart = LineChart.extend({\r\n createSegment: function(linePoints, currentSeries, seriesIx, prevSegment) {\r\n var chart = this,\r\n options = chart.options,\r\n isStacked = options.isStacked,\r\n stackPoints, pointType,\r\n style = (currentSeries.line || {}).style;\r\n\r\n if (isStacked && seriesIx > 0 && prevSegment) {\r\n stackPoints = prevSegment.linePoints;\r\n if (style !== STEP) {\r\n stackPoints = stackPoints.slice(0).reverse();\r\n }\r\n }\r\n\r\n if (style === SMOOTH) {\r\n return new SplineAreaSegment(linePoints, prevSegment, isStacked, currentSeries, seriesIx);\r\n }\r\n\r\n if (style === STEP) {\r\n pointType = StepAreaSegment;\r\n } else {\r\n pointType = AreaSegment;\r\n }\r\n\r\n return new pointType(linePoints, stackPoints, currentSeries, seriesIx);\r\n },\r\n\r\n seriesMissingValues: function(series) {\r\n return series.missingValues || ZERO;\r\n }\r\n });\r\n\r\n var SplineAreaSegment = AreaSegment.extend({\r\n init: function(linePoints, prevSegment, isStacked, currentSeries, seriesIx) {\r\n var segment = this;\r\n\r\n segment.prevSegment = prevSegment;\r\n segment.isStacked = isStacked;\r\n LineSegment.fn.init.call(segment, linePoints, currentSeries, seriesIx);\r\n },\r\n\r\n strokeSegments: function() {\r\n var segments = this._strokeSegments;\r\n\r\n if (!segments) {\r\n var curveProcessor = new CurveProcessor(this.options.closed);\r\n var linePoints = LineSegment.fn.points.call(this);\r\n segments = this._strokeSegments = curveProcessor.process(linePoints);\r\n }\r\n\r\n return segments;\r\n },\r\n\r\n createVisual: function() {\r\n var options = this.options;\r\n var series = this.series;\r\n var defaults = series._defaults;\r\n var color = series.color;\r\n\r\n if (isFn(color) && defaults) {\r\n color = defaults.color;\r\n }\r\n\r\n this.visual = new draw.Group({\r\n zIndex: series.zIndex\r\n });\r\n\r\n this.createFill({\r\n fill: {\r\n color: color,\r\n opacity: series.opacity\r\n },\r\n stroke: null\r\n });\r\n\r\n this.createStroke({\r\n stroke: deepExtend({\r\n color: color,\r\n opacity: series.opacity,\r\n lineCap: \"butt\"\r\n }, series.line)\r\n });\r\n },\r\n\r\n createFill: function(style) {\r\n var strokeSegments = this.strokeSegments();\r\n var fillSegments = strokeSegments.slice(0);\r\n var prevSegment = this.prevSegment;\r\n\r\n if (this.isStacked && prevSegment) {\r\n var prevStrokeSegments = prevSegment.strokeSegments();\r\n var prevAnchor = last(prevStrokeSegments).anchor();\r\n\r\n fillSegments.push(new draw.Segment(\r\n prevAnchor,\r\n prevAnchor,\r\n last(strokeSegments).anchor()\r\n ));\r\n\r\n var stackSegments = $.map(prevStrokeSegments, function(segment) {\r\n return new draw.Segment(\r\n segment.anchor(),\r\n segment.controlOut(),\r\n segment.controlIn()\r\n );\r\n }).reverse();\r\n\r\n append(fillSegments, stackSegments);\r\n\r\n var firstAnchor = fillSegments[0].anchor();\r\n fillSegments.push(new draw.Segment(\r\n firstAnchor,\r\n firstAnchor,\r\n last(stackSegments).anchor()\r\n ));\r\n }\r\n\r\n var fill = new draw.Path(style);\r\n fill.segments.push.apply(fill.segments, fillSegments);\r\n this.closeFill(fill);\r\n\r\n this.visual.append(fill);\r\n },\r\n\r\n closeFill: function(fillPath) {\r\n var segment = this,\r\n chart = segment.parent,\r\n prevSegment = segment.prevSegment,\r\n plotArea = chart.plotArea,\r\n invertAxes = chart.options.invertAxes,\r\n valueAxis = chart.seriesValueAxis(segment.series),\r\n valueAxisLineBox = valueAxis.lineBox(),\r\n categoryAxis = plotArea.seriesCategoryAxis(segment.series),\r\n categoryAxisLineBox = categoryAxis.lineBox(),\r\n end = invertAxes ? categoryAxisLineBox.x1 : categoryAxisLineBox.y1,\r\n pos = invertAxes ? X : Y,\r\n segments = segment.strokeSegments(),\r\n firstPoint = segments[0].anchor(),\r\n lastPoint = last(segments).anchor();\r\n\r\n end = limitValue(end, valueAxisLineBox[pos + 1], valueAxisLineBox[pos + 2]);\r\n if (!(chart.options.isStacked && prevSegment) && segments.length > 1) {\r\n if (invertAxes) {\r\n fillPath.lineTo(end, lastPoint.y)\r\n .lineTo(end, firstPoint.y);\r\n } else {\r\n fillPath.lineTo(lastPoint.x, end)\r\n .lineTo(firstPoint.x, end);\r\n }\r\n }\r\n },\r\n\r\n createStroke: function(style) {\r\n if (style.stroke.width > 0) {\r\n var stroke = new draw.Path(style);\r\n stroke.segments.push.apply(stroke.segments, this.strokeSegments());\r\n\r\n this.visual.append(stroke);\r\n }\r\n }\r\n });\r\n\r\n var StepAreaSegment = StepLineSegment.extend({\r\n init: function(linePoints, stackPoints, currentSeries, seriesIx) {\r\n var segment = this;\r\n\r\n segment.stackPoints = stackPoints;\r\n\r\n StepLineSegment.fn.init.call(segment, linePoints, currentSeries, seriesIx);\r\n },\r\n\r\n _linePoints: StepLineSegment.fn.points\r\n });\r\n deepExtend(StepAreaSegment.fn, AreaSegmentMixin);\r\n\r\n var ScatterChart = ChartElement.extend({\r\n init: function(plotArea, options) {\r\n var chart = this;\r\n\r\n ChartElement.fn.init.call(chart, options);\r\n\r\n chart.plotArea = plotArea;\r\n\r\n // X and Y axis ranges grouped by name, e.g.:\r\n // primary: { min: 0, max: 1 }\r\n chart.xAxisRanges = {};\r\n chart.yAxisRanges = {};\r\n\r\n chart.points = [];\r\n chart.seriesPoints = [];\r\n chart.seriesOptions = [];\r\n chart._evalSeries = [];\r\n\r\n chart.render();\r\n },\r\n\r\n options: {\r\n series: [],\r\n tooltip: {\r\n format: \"{0}, {1}\"\r\n },\r\n labels: {\r\n format: \"{0}, {1}\"\r\n },\r\n clip: true\r\n },\r\n\r\n render: function() {\r\n var chart = this;\r\n\r\n chart.traverseDataPoints(proxy(chart.addValue, chart));\r\n },\r\n\r\n addErrorBar: function(point, field, fields){\r\n var errorRange,\r\n chart = this,\r\n value = point.value[field],\r\n valueErrorField = field + \"Value\",\r\n lowField = field + \"ErrorLow\",\r\n highField = field + \"ErrorHigh\",\r\n seriesIx = fields.seriesIx,\r\n series = fields.series,\r\n errorBars = point.options.errorBars,\r\n lowValue = fields[lowField],\r\n highValue = fields[highField];\r\n\r\n if (isNumber(value)) {\r\n if (isNumber(lowValue) && isNumber(highValue)) {\r\n errorRange = {low: lowValue, high: highValue};\r\n }\r\n\r\n if (errorBars && defined(errorBars[valueErrorField])) {\r\n chart.seriesErrorRanges = chart.seriesErrorRanges || {x: [], y: []};\r\n chart.seriesErrorRanges[field][seriesIx] = chart.seriesErrorRanges[field][seriesIx] ||\r\n new ErrorRangeCalculator(errorBars[valueErrorField], series, field);\r\n\r\n errorRange = chart.seriesErrorRanges[field][seriesIx].getErrorRange(value, errorBars[valueErrorField]);\r\n }\r\n\r\n if (errorRange) {\r\n chart.addPointErrorBar(errorRange, point, field);\r\n }\r\n }\r\n },\r\n\r\n addPointErrorBar: function(errorRange, point, field){\r\n var chart = this,\r\n low = errorRange.low,\r\n high = errorRange.high,\r\n series = point.series,\r\n isVertical = field === Y,\r\n options = point.options.errorBars,\r\n item = {},\r\n errorBar;\r\n\r\n point[field + \"Low\"] = low;\r\n point[field + \"High\"] = high;\r\n\r\n point.errorBars = point.errorBars || [];\r\n errorBar = new ScatterErrorBar(low, high, isVertical, chart, series, options);\r\n point.errorBars.push(errorBar);\r\n point.append(errorBar);\r\n\r\n item[field] = low;\r\n chart.updateRange(item, series);\r\n item[field] = high;\r\n chart.updateRange(item, series);\r\n },\r\n\r\n addValue: function(value, fields) {\r\n var chart = this,\r\n point,\r\n x = value.x,\r\n y = value.y,\r\n seriesIx = fields.seriesIx,\r\n series = this.options.series[seriesIx],\r\n missingValues = this.seriesMissingValues(series),\r\n seriesPoints = chart.seriesPoints[seriesIx],\r\n missingValue;\r\n\r\n if (!(hasValue(x) && hasValue(y))) {\r\n value = this.createMissingValue(value, missingValues);\r\n }\r\n\r\n if (value) {\r\n point = chart.createPoint(value, fields);\r\n if (point) {\r\n extend(point, fields);\r\n chart.addErrorBar(point, X, fields);\r\n chart.addErrorBar(point, Y, fields);\r\n }\r\n chart.updateRange(value, fields.series);\r\n }\r\n\r\n chart.points.push(point);\r\n seriesPoints.push(point);\r\n },\r\n\r\n seriesMissingValues: function(series) {\r\n return series.missingValues;\r\n },\r\n\r\n createMissingValue: noop,\r\n\r\n updateRange: function(value, series) {\r\n var chart = this,\r\n x = value.x,\r\n y = value.y,\r\n xAxisName = series.xAxis,\r\n yAxisName = series.yAxis,\r\n xAxisRange = chart.xAxisRanges[xAxisName],\r\n yAxisRange = chart.yAxisRanges[yAxisName];\r\n\r\n if (hasValue(x)) {\r\n xAxisRange = chart.xAxisRanges[xAxisName] =\r\n xAxisRange || { min: MAX_VALUE, max: MIN_VALUE };\r\n\r\n if (typeof(x) === STRING) {\r\n x = toDate(x);\r\n }\r\n\r\n xAxisRange.min = math.min(xAxisRange.min, x);\r\n xAxisRange.max = math.max(xAxisRange.max, x);\r\n }\r\n\r\n if (hasValue(y)) {\r\n yAxisRange = chart.yAxisRanges[yAxisName] =\r\n yAxisRange || { min: MAX_VALUE, max: MIN_VALUE };\r\n\r\n if (typeof(y) === STRING) {\r\n y = toDate(y);\r\n }\r\n\r\n yAxisRange.min = math.min(yAxisRange.min, y);\r\n yAxisRange.max = math.max(yAxisRange.max, y);\r\n }\r\n },\r\n\r\n evalPointOptions: function(options, value, fields) {\r\n var series = fields.series;\r\n var seriesIx = fields.seriesIx;\r\n var state = { defaults: series._defaults, excluded: [\"data\", \"tooltip\", \"tempate\", \"visual\", \"toggle\"] };\r\n\r\n var doEval = this._evalSeries[seriesIx];\r\n if (!defined(doEval)) {\r\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\r\n }\r\n\r\n if (doEval) {\r\n options = deepExtend({}, options);\r\n evalOptions(options, {\r\n value: value,\r\n series: series,\r\n dataItem: fields.dataItem\r\n }, state);\r\n }\r\n\r\n return options;\r\n },\r\n\r\n pointType: function() {\r\n return LinePoint;\r\n },\r\n\r\n pointOptions: function(series, seriesIx) {\r\n var options = this.seriesOptions[seriesIx];\r\n if (!options) {\r\n var defaults = this.pointType().fn.defaults;\r\n this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, {\r\n markers: {\r\n opacity: series.opacity\r\n },\r\n tooltip: {\r\n format: this.options.tooltip.format\r\n },\r\n labels: {\r\n format: this.options.labels.format\r\n }\r\n }, series);\r\n }\r\n\r\n return options;\r\n },\r\n\r\n createPoint: function(value, fields) {\r\n var chart = this,\r\n series = fields.series,\r\n point;\r\n\r\n var pointOptions = this.pointOptions(series, fields.seriesIx);\r\n var color = fields.color || series.color;\r\n\r\n pointOptions = chart.evalPointOptions(pointOptions, value, fields);\r\n\r\n if (kendo.isFunction(series.color)) {\r\n color = pointOptions.color;\r\n }\r\n\r\n point = new LinePoint(value, pointOptions);\r\n point.color = color;\r\n\r\n chart.append(point);\r\n\r\n return point;\r\n },\r\n\r\n seriesAxes: function(series) {\r\n var plotArea = this.plotArea,\r\n xAxisName = series.xAxis,\r\n xAxis = xAxisName ?\r\n plotArea.namedXAxes[xAxisName] :\r\n plotArea.axisX,\r\n yAxisName = series.yAxis,\r\n yAxis = yAxisName ?\r\n plotArea.namedYAxes[yAxisName] :\r\n plotArea.axisY;\r\n\r\n if (!xAxis) {\r\n throw new Error(\"Unable to locate X axis with name \" + xAxisName);\r\n }\r\n\r\n if (!yAxis) {\r\n throw new Error(\"Unable to locate Y axis with name \" + yAxisName);\r\n }\r\n\r\n return {\r\n x: xAxis,\r\n y: yAxis\r\n };\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var chart = this,\r\n chartPoints = chart.points,\r\n pointIx = 0,\r\n point,\r\n seriesAxes,\r\n clip = chart.options.clip,\r\n limit = !chart.options.clip;\r\n\r\n chart.traverseDataPoints(function(value, fields) {\r\n point = chartPoints[pointIx++];\r\n seriesAxes = chart.seriesAxes(fields.series);\r\n\r\n var slotX = seriesAxes.x.getSlot(value.x, value.x, limit),\r\n slotY = seriesAxes.y.getSlot(value.y, value.y, limit),\r\n pointSlot;\r\n\r\n if (point) {\r\n if (slotX && slotY) {\r\n pointSlot = chart.pointSlot(slotX, slotY);\r\n point.reflow(pointSlot);\r\n } else {\r\n point.visible = false;\r\n }\r\n }\r\n });\r\n\r\n chart.box = targetBox;\r\n },\r\n\r\n pointSlot: function(slotX, slotY) {\r\n return new Box2D(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\r\n },\r\n\r\n traverseDataPoints: function(callback) {\r\n var chart = this,\r\n options = chart.options,\r\n series = options.series,\r\n seriesPoints = chart.seriesPoints,\r\n pointIx,\r\n seriesIx,\r\n currentSeries,\r\n currentSeriesPoints,\r\n pointData,\r\n value,\r\n fields;\r\n\r\n for (seriesIx = 0; seriesIx < series.length; seriesIx++) {\r\n currentSeries = series[seriesIx];\r\n currentSeriesPoints = seriesPoints[seriesIx];\r\n if (!currentSeriesPoints) {\r\n seriesPoints[seriesIx] = [];\r\n }\r\n\r\n for (pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\r\n pointData = this._bindPoint(currentSeries, seriesIx, pointIx);\r\n value = pointData.valueFields;\r\n fields = pointData.fields;\r\n\r\n callback(value, deepExtend({\r\n pointIx: pointIx,\r\n series: currentSeries,\r\n seriesIx: seriesIx,\r\n dataItem: currentSeries.data[pointIx],\r\n owner: chart\r\n }, fields));\r\n }\r\n }\r\n },\r\n\r\n _bindPoint: CategoricalChart.fn._bindPoint,\r\n\r\n formatPointValue: function(point, format) {\r\n var value = point.value;\r\n return autoFormat(format, value.x, value.y);\r\n },\r\n\r\n animationPoints: function() {\r\n var seriesPoints = this.points;\r\n var points = [];\r\n var idx;\r\n\r\n for (idx = 0; idx < seriesPoints.length; idx++) {\r\n if (seriesPoints[idx].marker) {\r\n points.push(seriesPoints[idx].marker);\r\n }\r\n }\r\n return points;\r\n }\r\n });\r\n\r\n deepExtend(ScatterChart.fn, ClipAnimationMixin);\r\n\r\n var ScatterLineChart = ScatterChart.extend({\r\n render: function() {\r\n var chart = this;\r\n\r\n ScatterChart.fn.render.call(chart);\r\n\r\n chart.renderSegments();\r\n },\r\n\r\n createSegment: function(linePoints, currentSeries, seriesIx) {\r\n var pointType,\r\n style = currentSeries.style;\r\n\r\n if (style === SMOOTH) {\r\n pointType = SplineSegment;\r\n } else {\r\n pointType = LineSegment;\r\n }\r\n\r\n return new pointType(linePoints, currentSeries, seriesIx);\r\n },\r\n\r\n animationPoints: function() {\r\n var points = ScatterChart.fn.animationPoints.call(this);\r\n return points.concat(this._segments);\r\n },\r\n\r\n createMissingValue: function(value, missingValues) {\r\n if (missingValues === ZERO) {\r\n var missingValue = {\r\n x: value.x,\r\n y: value.y\r\n };\r\n if (!hasValue(missingValue.x)) {\r\n missingValue.x = 0;\r\n }\r\n if (!hasValue(missingValue.y)) {\r\n missingValue.y = 0;\r\n }\r\n return missingValue;\r\n }\r\n }\r\n });\r\n deepExtend(ScatterLineChart.fn, LineChartMixin);\r\n\r\n var BubbleChart = ScatterChart.extend({\r\n init: function(plotArea, options) {\r\n this._maxSize = MIN_VALUE;\r\n ScatterChart.fn.init.call(this, plotArea, options);\r\n },\r\n\r\n options: {\r\n tooltip: {\r\n format: \"{3}\"\r\n },\r\n labels: {\r\n format: \"{3}\"\r\n }\r\n },\r\n\r\n addValue: function(value, fields) {\r\n if ((value.size !== null && value.size >= 0) || fields.series.negativeValues.visible) {\r\n this._maxSize = math.max(this._maxSize, math.abs(value.size));\r\n ScatterChart.fn.addValue.call(this, value, fields);\r\n }\r\n },\r\n\r\n reflow: function(box) {\r\n var chart = this;\r\n\r\n chart.updateBubblesSize(box);\r\n ScatterChart.fn.reflow.call(chart, box);\r\n },\r\n\r\n pointType: function() {\r\n return Bubble;\r\n },\r\n\r\n createPoint: function(value, fields) {\r\n var chart = this,\r\n series = fields.series,\r\n seriesColors = chart.plotArea.options.seriesColors || [],\r\n pointsCount = series.data.length,\r\n delay = fields.pointIx * (INITIAL_ANIMATION_DURATION / pointsCount),\r\n animationOptions = {\r\n delay: delay,\r\n duration: INITIAL_ANIMATION_DURATION - delay,\r\n type: BUBBLE\r\n },\r\n point, pointOptions;\r\n\r\n var color = fields.color || series.color;\r\n if (value.size < 0 && series.negativeValues.visible) {\r\n color = valueOrDefault(\r\n series.negativeValues.color, color\r\n );\r\n }\r\n\r\n pointOptions = deepExtend({\r\n labels: {\r\n animation: {\r\n delay: delay,\r\n duration: INITIAL_ANIMATION_DURATION - delay\r\n }\r\n }\r\n }, this.pointOptions(series, fields.seriesIx), {\r\n markers: {\r\n type: CIRCLE,\r\n border: series.border,\r\n opacity: series.opacity,\r\n animation: animationOptions\r\n }\r\n });\r\n\r\n pointOptions = chart.evalPointOptions(pointOptions, value, fields);\r\n if (kendo.isFunction(series.color)) {\r\n color = pointOptions.color;\r\n }\r\n\r\n pointOptions.markers.background = color;\r\n\r\n point = new Bubble(value, pointOptions);\r\n point.color = color;\r\n\r\n chart.append(point);\r\n\r\n return point;\r\n },\r\n\r\n updateBubblesSize: function(box) {\r\n var chart = this,\r\n options = chart.options,\r\n series = options.series,\r\n boxSize = math.min(box.width(), box.height()),\r\n seriesIx,\r\n pointIx;\r\n\r\n for (seriesIx = 0; seriesIx < series.length; seriesIx++) {\r\n var currentSeries = series[seriesIx],\r\n seriesPoints = chart.seriesPoints[seriesIx],\r\n minSize = currentSeries.minSize || math.max(boxSize * 0.02, 10),\r\n maxSize = currentSeries.maxSize || boxSize * 0.2,\r\n minR = minSize / 2,\r\n maxR = maxSize / 2,\r\n minArea = math.PI * minR * minR,\r\n maxArea = math.PI * maxR * maxR,\r\n areaRange = maxArea - minArea,\r\n areaRatio = areaRange / chart._maxSize;\r\n\r\n for (pointIx = 0; pointIx < seriesPoints.length; pointIx++) {\r\n var point = seriesPoints[pointIx],\r\n area = math.abs(point.value.size) * areaRatio,\r\n r = math.sqrt((minArea + area) / math.PI),\r\n baseZIndex = valueOrDefault(point.options.zIndex, 0),\r\n zIndex = baseZIndex + (1 - r / maxR);\r\n\r\n deepExtend(point.options, {\r\n zIndex: zIndex,\r\n markers: {\r\n size: r * 2,\r\n zIndex: zIndex\r\n },\r\n labels: {\r\n zIndex: zIndex + 1\r\n }\r\n });\r\n }\r\n }\r\n },\r\n\r\n formatPointValue: function(point, format) {\r\n var value = point.value;\r\n return autoFormat(format, value.x, value.y, value.size, point.category);\r\n },\r\n\r\n createAnimation: noop,\r\n createVisual: noop\r\n });\r\n\r\n var Candlestick = ChartElement.extend({\r\n init: function(value, options) {\r\n ChartElement.fn.init.call(this, options);\r\n this.value = value;\r\n },\r\n\r\n options: {\r\n border: {\r\n _brightness: 0.8\r\n },\r\n line: {\r\n width: 2\r\n },\r\n overlay: {\r\n gradient: GLASS\r\n },\r\n tooltip: {\r\n format: \"<table style='text-align: left;'>\" +\r\n \"<th colspan='2'>{4:d}</th>\" +\r\n \"<tr><td>Open:</td><td>{0:C}</td></tr>\" +\r\n \"<tr><td>High:</td><td>{1:C}</td></tr>\" +\r\n \"<tr><td>Low:</td><td>{2:C}</td></tr>\" +\r\n \"<tr><td>Close:</td><td>{3:C}</td></tr>\" +\r\n \"</table>\"\r\n },\r\n highlight: {\r\n opacity: 1,\r\n border: {\r\n width: 1,\r\n opacity: 1\r\n },\r\n line: {\r\n width: 1,\r\n opacity: 1\r\n }\r\n },\r\n notes: {\r\n visible: true,\r\n label: {}\r\n }\r\n },\r\n\r\n reflow: function(box) {\r\n var point = this,\r\n options = point.options,\r\n chart = point.owner,\r\n value = point.value,\r\n valueAxis = chart.seriesValueAxis(options),\r\n points = [], mid, ocSlot, lhSlot;\r\n\r\n ocSlot = valueAxis.getSlot(value.open, value.close);\r\n lhSlot = valueAxis.getSlot(value.low, value.high);\r\n\r\n ocSlot.x1 = lhSlot.x1 = box.x1;\r\n ocSlot.x2 = lhSlot.x2 = box.x2;\r\n\r\n point.realBody = ocSlot;\r\n\r\n mid = lhSlot.center().x;\r\n points.push([ [mid, lhSlot.y1], [mid, ocSlot.y1] ]);\r\n points.push([ [mid, ocSlot.y2], [mid, lhSlot.y2] ]);\r\n\r\n point.lines = points;\r\n\r\n point.box = lhSlot.clone().wrap(ocSlot);\r\n\r\n if (!point._rendered) {\r\n point._rendered = true;\r\n point.createNote();\r\n }\r\n\r\n point.reflowNote();\r\n },\r\n\r\n reflowNote: function() {\r\n var point = this;\r\n\r\n if (point.note) {\r\n point.note.reflow(point.box);\r\n }\r\n },\r\n\r\n createVisual: function() {\r\n ChartElement.fn.createVisual.call(this);\r\n this._mainVisual = this.mainVisual(this.options);\r\n this.visual.append(\r\n this._mainVisual\r\n );\r\n\r\n this.createOverlay();\r\n },\r\n\r\n mainVisual: function(options) {\r\n var group = new draw.Group();\r\n\r\n this.createBody(group, options);\r\n this.createLines(group, options);\r\n\r\n return group;\r\n },\r\n\r\n createBody: function(container, options) {\r\n var body = draw.Path.fromRect(this.realBody.toRect(), {\r\n fill: {\r\n color: this.color,\r\n opacity: options.opacity\r\n },\r\n stroke: null\r\n });\r\n\r\n if (options.border.width > 0) {\r\n body.options.set(\"stroke\", {\r\n color: this.getBorderColor(),\r\n width: options.border.width,\r\n dashType: options.border.dashType,\r\n opacity: valueOrDefault(options.border.opacity, options.opacity)\r\n });\r\n }\r\n\r\n alignPathToPixel(body);\r\n container.append(body);\r\n\r\n if (hasGradientOverlay(options)) {\r\n container.append(this.createGradientOverlay(body, {\r\n baseColor: this.color\r\n },\r\n deepExtend({}, options.overlay)\r\n ));\r\n }\r\n },\r\n\r\n createLines: function(container, options) {\r\n this.drawLines(container, options, this.lines, options.line);\r\n },\r\n\r\n drawLines: function(container, options, lines, lineOptions) {\r\n if (!lines) {\r\n return;\r\n }\r\n\r\n var lineStyle = {\r\n stroke: {\r\n color: lineOptions.color || this.color,\r\n opacity: valueOrDefault(lineOptions.opacity, options.opacity),\r\n width: lineOptions.width,\r\n dashType: lineOptions.dashType,\r\n lineCap: \"butt\"\r\n }\r\n };\r\n\r\n for (var i = 0; i < lines.length; i++) {\r\n var line = draw.Path.fromPoints(lines[i], lineStyle);\r\n alignPathToPixel(line);\r\n container.append(line);\r\n }\r\n },\r\n\r\n getBorderColor: function() {\r\n var point = this,\r\n options = point.options,\r\n border = options.border,\r\n borderColor = border.color;\r\n\r\n if (!defined(borderColor)) {\r\n borderColor =\r\n new Color(point.color).brightness(border._brightness).toHex();\r\n }\r\n\r\n return borderColor;\r\n },\r\n\r\n createOverlay: function() {\r\n var overlay = draw.Path.fromRect(this.box.toRect(), {\r\n fill: {\r\n color: WHITE,\r\n opacity: 0\r\n },\r\n stroke: null\r\n });\r\n\r\n this.visual.append(overlay);\r\n },\r\n\r\n createHighlight: function() {\r\n var highlight = this.options.highlight;\r\n var normalColor = this.color;\r\n\r\n this.color = highlight.color || this.color;\r\n var overlay = this.mainVisual(\r\n deepExtend({}, this.options, {\r\n line: {\r\n color: this.getBorderColor()\r\n }\r\n }, highlight)\r\n );\r\n this.color = normalColor;\r\n\r\n return overlay;\r\n },\r\n\r\n highlightVisual: function() {\r\n return this._mainVisual;\r\n },\r\n\r\n highlightVisualArgs: function() {\r\n return {\r\n options: this.options,\r\n rect: this.box.toRect(),\r\n visual: this._mainVisual\r\n };\r\n },\r\n\r\n tooltipAnchor: function() {\r\n var point = this,\r\n box = point.box,\r\n clipBox = point.owner.pane.clipBox() || box;\r\n\r\n return new Point2D(box.x2 + TOOLTIP_OFFSET, math.max(box.y1, clipBox.y1) + TOOLTIP_OFFSET);\r\n },\r\n\r\n formatValue: function(format) {\r\n var point = this;\r\n return point.owner.formatPointValue(point, format);\r\n }\r\n });\r\n deepExtend(Candlestick.fn, PointEventsMixin);\r\n deepExtend(Candlestick.fn, NoteMixin);\r\n\r\n var CandlestickChart = CategoricalChart.extend({\r\n options: {},\r\n\r\n reflowCategories: function(categorySlots) {\r\n var chart = this,\r\n children = chart.children,\r\n childrenLength = children.length,\r\n i;\r\n\r\n for (i = 0; i < childrenLength; i++) {\r\n children[i].reflow(categorySlots[i]);\r\n }\r\n },\r\n\r\n addValue: function(data, fields) {\r\n var chart = this;\r\n var categoryIx = fields.categoryIx;\r\n var category = fields.category;\r\n var series = fields.series;\r\n var seriesIx = fields.seriesIx;\r\n var options = chart.options;\r\n var value = data.valueFields;\r\n var children = chart.children;\r\n var valueParts = chart.splitValue(value);\r\n var hasValue = areNumbers(valueParts);\r\n var categoryPoints = chart.categoryPoints[categoryIx];\r\n var dataItem = series.data[categoryIx];\r\n var point, cluster;\r\n\r\n if (!categoryPoints) {\r\n chart.categoryPoints[categoryIx] = categoryPoints = [];\r\n }\r\n\r\n if (hasValue) {\r\n point = chart.createPoint(data, fields);\r\n }\r\n\r\n cluster = children[categoryIx];\r\n if (!cluster) {\r\n cluster = new ClusterLayout({\r\n vertical: options.invertAxes,\r\n gap: options.gap,\r\n spacing: options.spacing\r\n });\r\n chart.append(cluster);\r\n }\r\n\r\n if (point) {\r\n chart.updateRange(value, fields);\r\n\r\n cluster.append(point);\r\n\r\n point.categoryIx = categoryIx;\r\n point.category = category;\r\n point.series = series;\r\n point.seriesIx = seriesIx;\r\n point.owner = chart;\r\n point.dataItem = dataItem;\r\n point.noteText = data.fields.noteText;\r\n }\r\n\r\n chart.points.push(point);\r\n categoryPoints.push(point);\r\n },\r\n\r\n pointType: function() {\r\n return Candlestick;\r\n },\r\n\r\n createPoint: function(data, fields) {\r\n var chart = this;\r\n var categoryIx = fields.categoryIx;\r\n var category = fields.category;\r\n var series = fields.series;\r\n var seriesIx = fields.seriesIx;\r\n var value = data.valueFields;\r\n var pointOptions = deepExtend({}, series);\r\n var pointType = chart.pointType();\r\n var color = data.fields.color || series.color;\r\n\r\n pointOptions = chart.evalPointOptions(\r\n pointOptions, value, category, categoryIx, series, seriesIx\r\n );\r\n\r\n if (series.type == CANDLESTICK) {\r\n if (value.open > value.close) {\r\n color = data.fields.downColor || series.downColor || series.color;\r\n }\r\n }\r\n\r\n if (kendo.isFunction(series.color)) {\r\n color = pointOptions.color;\r\n }\r\n\r\n var point = new pointType(value, pointOptions);\r\n point.color = color;\r\n\r\n return point;\r\n },\r\n\r\n splitValue: function(value) {\r\n return [value.low, value.open, value.close, value.high];\r\n },\r\n\r\n updateRange: function(value, fields) {\r\n var chart = this,\r\n axisName = fields.series.axis,\r\n axisRange = chart.valueAxisRanges[axisName],\r\n parts = chart.splitValue(value);\r\n\r\n axisRange = chart.valueAxisRanges[axisName] =\r\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\r\n\r\n axisRange = chart.valueAxisRanges[axisName] = {\r\n min: math.min.apply(math, parts.concat([axisRange.min])),\r\n max: math.max.apply(math, parts.concat([axisRange.max]))\r\n };\r\n },\r\n\r\n formatPointValue: function(point, format) {\r\n var value = point.value;\r\n\r\n return autoFormat(format,\r\n value.open, value.high,\r\n value.low, value.close, point.category\r\n );\r\n },\r\n\r\n animationPoints: function() {\r\n return this.points;\r\n }\r\n });\r\n\r\n deepExtend(CandlestickChart.fn, ClipAnimationMixin);\r\n\r\n var OHLCPoint = Candlestick.extend({\r\n reflow: function(box) {\r\n var point = this,\r\n options = point.options,\r\n chart = point.owner,\r\n value = point.value,\r\n valueAxis = chart.seriesValueAxis(options),\r\n oPoints = [], cPoints = [], lhPoints = [],\r\n mid, oSlot, cSlot, lhSlot;\r\n\r\n lhSlot = valueAxis.getSlot(value.low, value.high);\r\n oSlot = valueAxis.getSlot(value.open, value.open);\r\n cSlot = valueAxis.getSlot(value.close, value.close);\r\n\r\n oSlot.x1 = cSlot.x1 = lhSlot.x1 = box.x1;\r\n oSlot.x2 = cSlot.x2 = lhSlot.x2 = box.x2;\r\n\r\n mid = lhSlot.center().x;\r\n\r\n oPoints.push([oSlot.x1, oSlot.y1]);\r\n oPoints.push([mid, oSlot.y1]);\r\n cPoints.push([mid, cSlot.y1]);\r\n cPoints.push([cSlot.x2, cSlot.y1]);\r\n lhPoints.push([mid, lhSlot.y1]);\r\n lhPoints.push([mid, lhSlot.y2]);\r\n\r\n point.lines = [\r\n oPoints, cPoints, lhPoints\r\n ];\r\n\r\n point.box = lhSlot.clone().wrap(oSlot.clone().wrap(cSlot));\r\n\r\n point.reflowNote();\r\n },\r\n\r\n createBody: $.noop\r\n });\r\n\r\n var OHLCChart = CandlestickChart.extend({\r\n pointType: function() {\r\n return OHLCPoint;\r\n }\r\n });\r\n\r\n var BoxPlotChart = CandlestickChart.extend({\r\n addValue: function(data, fields) {\r\n var chart = this;\r\n var categoryIx = fields.categoryIx;\r\n var category = fields.category;\r\n var series = fields.series;\r\n var seriesIx = fields.seriesIx;\r\n var options = chart.options;\r\n var children = chart.children;\r\n var value = data.valueFields;\r\n var valueParts = chart.splitValue(value);\r\n var hasValue = areNumbers(valueParts);\r\n var categoryPoints = chart.categoryPoints[categoryIx];\r\n var dataItem = series.data[categoryIx];\r\n var point, cluster;\r\n\r\n if (!categoryPoints) {\r\n chart.categoryPoints[categoryIx] = categoryPoints = [];\r\n }\r\n\r\n if (hasValue) {\r\n point = chart.createPoint(data, fields);\r\n }\r\n\r\n cluster = children[categoryIx];\r\n if (!cluster) {\r\n cluster = new ClusterLayout({\r\n vertical: options.invertAxes,\r\n gap: options.gap,\r\n spacing: options.spacing\r\n });\r\n chart.append(cluster);\r\n }\r\n\r\n if (point) {\r\n chart.updateRange(value, fields);\r\n\r\n cluster.append(point);\r\n\r\n point.categoryIx = categoryIx;\r\n point.category = category;\r\n point.series = series;\r\n point.seriesIx = seriesIx;\r\n point.owner = chart;\r\n point.dataItem = dataItem;\r\n }\r\n\r\n chart.points.push(point);\r\n categoryPoints.push(point);\r\n },\r\n\r\n pointType: function() {\r\n return BoxPlot;\r\n },\r\n\r\n splitValue: function(value) {\r\n return [\r\n value.lower, value.q1, value.median,\r\n value.q3, value.upper\r\n ];\r\n },\r\n\r\n updateRange: function(value, fields) {\r\n var chart = this,\r\n axisName = fields.series.axis,\r\n axisRange = chart.valueAxisRanges[axisName],\r\n parts = chart.splitValue(value).concat(\r\n chart.filterOutliers(value.outliers));\r\n\r\n if (defined(value.mean)) {\r\n parts = parts.concat(value.mean);\r\n }\r\n\r\n axisRange = chart.valueAxisRanges[axisName] =\r\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\r\n\r\n axisRange = chart.valueAxisRanges[axisName] = {\r\n min: math.min.apply(math, parts.concat([axisRange.min])),\r\n max: math.max.apply(math, parts.concat([axisRange.max]))\r\n };\r\n },\r\n\r\n formatPointValue: function(point, format) {\r\n var value = point.value;\r\n\r\n return autoFormat(format,\r\n value.lower, value.q1, value.median,\r\n value.q3, value.upper, value.mean, point.category\r\n );\r\n },\r\n\r\n filterOutliers: function(items) {\r\n var length = (items || []).length,\r\n result = [],\r\n i, item;\r\n\r\n for (i = 0; i < length; i++) {\r\n item = items[i];\r\n if (defined(item)) {\r\n appendIfNotNull(result, item);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n });\r\n\r\n var BoxPlot = Candlestick.extend({\r\n init: function(value, options) {\r\n var point = this;\r\n\r\n ChartElement.fn.init.call(point, options);\r\n point.value = value;\r\n\r\n point.createNote();\r\n },\r\n\r\n options: {\r\n border: {\r\n _brightness: 0.8\r\n },\r\n line: {\r\n width: 2\r\n },\r\n mean: {\r\n width: 2,\r\n dashType: \"dash\"\r\n },\r\n overlay: {\r\n gradient: GLASS\r\n },\r\n tooltip: {\r\n format: \"<table style='text-align: left;'>\" +\r\n \"<th colspan='2'>{6:d}</th>\" +\r\n \"<tr><td>Lower:</td><td>{0:C}</td></tr>\" +\r\n \"<tr><td>Q1:</td><td>{1:C}</td></tr>\" +\r\n \"<tr><td>Median:</td><td>{2:C}</td></tr>\" +\r\n \"<tr><td>Mean:</td><td>{5:C}</td></tr>\" +\r\n \"<tr><td>Q3:</td><td>{3:C}</td></tr>\" +\r\n \"<tr><td>Upper:</td><td>{4:C}</td></tr>\" +\r\n \"</table>\"\r\n },\r\n highlight: {\r\n opacity: 1,\r\n border: {\r\n width: 1,\r\n opacity: 1\r\n },\r\n line: {\r\n width: 1,\r\n opacity: 1\r\n }\r\n },\r\n notes: {\r\n visible: true,\r\n label: {}\r\n },\r\n outliers: {\r\n visible: true,\r\n size: LINE_MARKER_SIZE,\r\n type: CROSS,\r\n background: WHITE,\r\n border: {\r\n width: 2,\r\n opacity: 1\r\n },\r\n opacity: 0\r\n },\r\n extremes: {\r\n visible: true,\r\n size: LINE_MARKER_SIZE,\r\n type: CIRCLE,\r\n background: WHITE,\r\n border: {\r\n width: 2,\r\n opacity: 1\r\n },\r\n opacity: 0\r\n }\r\n },\r\n\r\n reflow: function(box) {\r\n var point = this,\r\n options = point.options,\r\n chart = point.owner,\r\n value = point.value,\r\n valueAxis = chart.seriesValueAxis(options),\r\n mid, whiskerSlot, boxSlot, medianSlot, meanSlot;\r\n\r\n boxSlot = valueAxis.getSlot(value.q1, value.q3);\r\n point.boxSlot = boxSlot;\r\n\r\n whiskerSlot = valueAxis.getSlot(value.lower, value.upper);\r\n medianSlot = valueAxis.getSlot(value.median);\r\n\r\n boxSlot.x1 = whiskerSlot.x1 = box.x1;\r\n boxSlot.x2 = whiskerSlot.x2 = box.x2;\r\n\r\n point.realBody = boxSlot;\r\n\r\n if (value.mean) {\r\n meanSlot = valueAxis.getSlot(value.mean);\r\n point.meanPoints = [\r\n [[box.x1, meanSlot.y1], [box.x2, meanSlot.y1]]\r\n ];\r\n }\r\n\r\n mid = whiskerSlot.center().x;\r\n point.whiskerPoints = [[\r\n [mid - 5, whiskerSlot.y1], [mid + 5, whiskerSlot.y1],\r\n [mid, whiskerSlot.y1], [mid, boxSlot.y1]\r\n ], [\r\n [mid - 5, whiskerSlot.y2], [mid + 5, whiskerSlot.y2],\r\n [mid, whiskerSlot.y2], [mid, boxSlot.y2]\r\n ]];\r\n\r\n point.medianPoints = [\r\n [[box.x1, medianSlot.y1], [box.x2, medianSlot.y1]]\r\n ];\r\n\r\n point.box = whiskerSlot.clone().wrap(boxSlot);\r\n\r\n point.reflowNote();\r\n },\r\n\r\n renderOutliers: function(options) {\r\n var point = this,\r\n markers = options.markers || {},\r\n value = point.value,\r\n outliers = value.outliers || [],\r\n valueAxis = point.owner.seriesValueAxis(options),\r\n outerFence = math.abs(value.q3 - value.q1) * 3,\r\n markersBorder, markerBox, shape, outlierValue, i;\r\n\r\n var elements = [];\r\n\r\n for (i = 0; i < outliers.length; i++) {\r\n outlierValue = outliers[i];\r\n if (outlierValue < value.q3 + outerFence && outlierValue > value.q1 - outerFence) {\r\n markers = options.outliers;\r\n } else {\r\n markers = options.extremes;\r\n }\r\n markersBorder = deepExtend({}, markers.border);\r\n\r\n if (!defined(markersBorder.color)) {\r\n if (defined(point.color)) {\r\n markersBorder.color = point.color;\r\n } else {\r\n markersBorder.color =\r\n new Color(markers.background).brightness(BAR_BORDER_BRIGHTNESS).toHex();\r\n }\r\n }\r\n\r\n shape = new ShapeElement({\r\n type: markers.type,\r\n width: markers.size,\r\n height: markers.size,\r\n rotation: markers.rotation,\r\n background: markers.background,\r\n border: markersBorder,\r\n opacity: markers.opacity\r\n });\r\n\r\n shape.value = outlierValue;\r\n\r\n elements.push(shape);\r\n }\r\n\r\n this.reflowOutliers(elements);\r\n return elements;\r\n },\r\n\r\n reflowOutliers: function(outliers) {\r\n var valueAxis = this.owner.seriesValueAxis(this.options);\r\n var centerX = this.box.center().x;\r\n\r\n for (var i = 0; i < outliers.length; i++) {\r\n var outlierValue = outliers[i].value;\r\n var markerBox = valueAxis.getSlot(outlierValue).move(centerX);\r\n\r\n this.box = this.box.wrap(markerBox);\r\n outliers[i].reflow(markerBox);\r\n }\r\n },\r\n\r\n mainVisual: function(options) {\r\n var group = Candlestick.fn.mainVisual.call(this, options);\r\n\r\n var outliers = this.renderOutliers(options);\r\n for (var i = 0; i < outliers.length; i++) {\r\n var element = outliers[i].getElement();\r\n if (element) {\r\n group.append(element);\r\n }\r\n }\r\n\r\n return group;\r\n },\r\n\r\n createLines: function(container, options) {\r\n this.drawLines(container, options, this.whiskerPoints, options.line);\r\n this.drawLines(container, options, this.medianPoints, options.median);\r\n this.drawLines(container, options, this.meanPoints, options.mean);\r\n },\r\n\r\n getBorderColor: function() {\r\n if (this.color) {\r\n return this.color;\r\n }\r\n\r\n return Candlestick.getBorderColor.call(this);\r\n }\r\n });\r\n deepExtend(BoxPlot.fn, PointEventsMixin);\r\n\r\n // TODO: Rename to Segment?\r\n var PieSegment = ChartElement.extend({\r\n init: function(value, sector, options) {\r\n var segment = this;\r\n\r\n segment.value = value;\r\n segment.sector = sector;\r\n\r\n ChartElement.fn.init.call(segment, options);\r\n },\r\n\r\n options: {\r\n color: WHITE,\r\n overlay: {\r\n gradient: ROUNDED_BEVEL\r\n },\r\n border: {\r\n width: 0.5\r\n },\r\n labels: {\r\n visible: false,\r\n distance: 35,\r\n font: DEFAULT_FONT,\r\n margin: getSpacing(0.5),\r\n align: CIRCLE,\r\n zIndex: 1,\r\n position: OUTSIDE_END\r\n },\r\n animation: {\r\n type: PIE\r\n },\r\n highlight: {\r\n visible: true,\r\n border: {\r\n width: 1\r\n }\r\n },\r\n visible: true\r\n },\r\n\r\n render: function() {\r\n var segment = this,\r\n options = segment.options,\r\n labels = options.labels,\r\n labelText = segment.value,\r\n labelTemplate;\r\n\r\n if (segment._rendered || segment.visible === false) {\r\n return;\r\n } else {\r\n segment._rendered = true;\r\n }\r\n\r\n if (labels.template) {\r\n labelTemplate = template(labels.template);\r\n labelText = labelTemplate({\r\n dataItem: segment.dataItem,\r\n category: segment.category,\r\n value: segment.value,\r\n series: segment.series,\r\n percentage: segment.percentage\r\n });\r\n } else if (labels.format) {\r\n labelText = autoFormat(labels.format, labelText);\r\n }\r\n\r\n if (labels.visible && labelText) {\r\n segment.label = new TextBox(labelText, deepExtend({}, labels, {\r\n align: CENTER,\r\n vAlign: \"\",\r\n animation: {\r\n type: FADEIN,\r\n delay: segment.animationDelay\r\n }\r\n }));\r\n\r\n segment.append(segment.label);\r\n }\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var segment = this;\r\n\r\n segment.render();\r\n segment.box = targetBox;\r\n segment.reflowLabel();\r\n },\r\n\r\n reflowLabel: function() {\r\n var segment = this,\r\n sector = segment.sector.clone(),\r\n options = segment.options,\r\n label = segment.label,\r\n labelsOptions = options.labels,\r\n labelsDistance = labelsOptions.distance,\r\n angle = sector.middle(),\r\n lp, x1, labelWidth, labelHeight;\r\n\r\n if (label) {\r\n labelHeight = label.box.height();\r\n labelWidth = label.box.width();\r\n if (labelsOptions.position == CENTER) {\r\n sector.r = math.abs((sector.r - labelHeight) / 2) + labelHeight;\r\n lp = sector.point(angle);\r\n label.reflow(Box2D(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\r\n } else if (labelsOptions.position == INSIDE_END) {\r\n sector.r = sector.r - labelHeight / 2;\r\n lp = sector.point(angle);\r\n label.reflow(Box2D(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\r\n } else {\r\n lp = sector.clone().expand(labelsDistance).point(angle);\r\n if (lp.x >= sector.c.x) {\r\n x1 = lp.x + labelWidth;\r\n label.orientation = RIGHT;\r\n } else {\r\n x1 = lp.x - labelWidth;\r\n label.orientation = LEFT;\r\n }\r\n label.reflow(Box2D(x1, lp.y - labelHeight, lp.x, lp.y));\r\n }\r\n }\r\n },\r\n\r\n createVisual: function() {\r\n var segment = this,\r\n sector = segment.sector,\r\n options = segment.options,\r\n borderOptions = options.border || {},\r\n border = borderOptions.width > 0 ? {\r\n stroke: {\r\n color: borderOptions.color,\r\n width: borderOptions.width,\r\n opacity: borderOptions.opacity,\r\n dashType: borderOptions.dashType\r\n }\r\n } : {},\r\n elements = [],\r\n color = options.color,\r\n fill = {\r\n color: color,\r\n opacity: options.opacity\r\n },\r\n visual;\r\n\r\n ChartElement.fn.createVisual.call(this);\r\n if (segment.value) {\r\n visual = segment.createSegment(sector, deepExtend({\r\n fill: fill,\r\n stroke: {\r\n opacity: options.opacity\r\n },\r\n zIndex: options.zIndex\r\n }, border));\r\n\r\n this.visual.append(visual);\r\n\r\n if (hasGradientOverlay(options)) {\r\n this.visual.append(this.createGradientOverlay(visual, {\r\n baseColor: color,\r\n fallbackFill: fill\r\n }, deepExtend({\r\n center: [sector.c.x, sector.c.y],\r\n innerRadius: sector.ir,\r\n radius: sector.r,\r\n userSpace: true\r\n }, options.overlay)\r\n ));\r\n }\r\n }\r\n },\r\n\r\n createSegment: function(sector, options) {\r\n if (options.singleSegment) {\r\n return new draw.Circle(new geom.Circle(new geom.Point(sector.c.x, sector.c.y), sector.r), options);\r\n } else {\r\n return ShapeBuilder.current.createRing(sector, options);\r\n }\r\n },\r\n\r\n createAnimation: function() {\r\n var options = this.options;\r\n\r\n var center = this.sector.c;\r\n deepExtend(options, {\r\n animation: {\r\n center: [center.x, center.y],\r\n delay: this.animationDelay\r\n }\r\n });\r\n\r\n ChartElement.fn.createAnimation.call(this);\r\n },\r\n\r\n createHighlight: function(options) {\r\n var segment = this,\r\n highlight = segment.options.highlight || {},\r\n border = highlight.border || {};\r\n\r\n return segment.createSegment(segment.sector, deepExtend({}, options, {\r\n fill: {\r\n color: highlight.color,\r\n opacity: highlight.opacity\r\n },\r\n stroke: {\r\n opacity: border.opacity,\r\n width: border.width,\r\n color: border.color\r\n }\r\n }));\r\n },\r\n\r\n highlightVisual: function() {\r\n return this.visual.children[0];\r\n },\r\n\r\n highlightVisualArgs: function() {\r\n var sector = this.sector;\r\n\r\n return {\r\n options: this.options,\r\n radius: sector.r,\r\n innerRadius: sector.ir,\r\n center: new geom.Point(sector.c.x, sector.c.y),\r\n startAngle: sector.startAngle,\r\n endAngle: sector.angle + sector.startAngle,\r\n visual: this.visual\r\n };\r\n },\r\n\r\n tooltipAnchor: function(width, height) {\r\n var point = this,\r\n box = point.sector.adjacentBox(TOOLTIP_OFFSET, width, height);\r\n\r\n return new Point2D(box.x1, box.y1);\r\n },\r\n\r\n formatValue: function(format) {\r\n var point = this;\r\n\r\n return point.owner.formatPointValue(point, format);\r\n }\r\n });\r\n deepExtend(PieSegment.fn, PointEventsMixin);\r\n\r\n var PieChartMixin = {\r\n createLegendItem: function(value, point, options) {\r\n var chart = this,\r\n legendOptions = chart.options.legend || {},\r\n labelsOptions = legendOptions.labels || {},\r\n inactiveItems = legendOptions.inactiveItems || {},\r\n inactiveItemsLabels = inactiveItems.labels || {},\r\n text, labelTemplate, markerColor, itemLabelOptions,\r\n pointVisible;\r\n\r\n if (options && options.visibleInLegend !== false) {\r\n pointVisible = options.visible !== false;\r\n text = options.category || \"\";\r\n labelTemplate = pointVisible ? labelsOptions.template :\r\n (inactiveItemsLabels.template || labelsOptions.template);\r\n\r\n if (labelTemplate) {\r\n text = template(labelTemplate)({\r\n text: text,\r\n series: options.series,\r\n dataItem: options.dataItem,\r\n percentage: options.percentage,\r\n value: value\r\n });\r\n }\r\n\r\n if (pointVisible) {\r\n itemLabelOptions = {};\r\n markerColor = point.color;\r\n } else {\r\n itemLabelOptions = {\r\n color: inactiveItemsLabels.color,\r\n font: inactiveItemsLabels.font\r\n };\r\n markerColor = (inactiveItems.markers || {}).color;\r\n }\r\n\r\n if (text) {\r\n chart.legendItems.push({\r\n pointIndex: options.index,\r\n text: text,\r\n series: options.series,\r\n markerColor: markerColor,\r\n labels: itemLabelOptions\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n var PieChart = ChartElement.extend({\r\n init: function(plotArea, options) {\r\n var chart = this;\r\n\r\n ChartElement.fn.init.call(chart, options);\r\n\r\n chart.plotArea = plotArea;\r\n chart.points = [];\r\n chart.legendItems = [];\r\n chart.render();\r\n },\r\n\r\n options: {\r\n startAngle: 90,\r\n connectors: {\r\n width: 1,\r\n color: \"#939393\",\r\n padding: 4\r\n },\r\n inactiveItems: {\r\n markers: {},\r\n labels: {}\r\n }\r\n },\r\n\r\n render: function() {\r\n var chart = this;\r\n\r\n chart.traverseDataPoints(proxy(chart.addValue, chart));\r\n },\r\n\r\n traverseDataPoints: function(callback) {\r\n var chart = this,\r\n options = chart.options,\r\n colors = chart.plotArea.options.seriesColors || [],\r\n colorsCount = colors.length,\r\n series = options.series,\r\n seriesCount = series.length,\r\n currentSeries, pointData, fields, seriesIx,\r\n angle, data, anglePerValue, value, plotValue, explode,\r\n total, currentAngle, i, pointIx = 0;\r\n\r\n for (seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\r\n currentSeries = series[seriesIx];\r\n data = currentSeries.data;\r\n total = seriesTotal(currentSeries);\r\n anglePerValue = 360 / total;\r\n\r\n if (defined(currentSeries.startAngle)) {\r\n currentAngle = currentSeries.startAngle;\r\n } else {\r\n currentAngle = options.startAngle;\r\n }\r\n\r\n if (seriesIx != seriesCount - 1) {\r\n if (currentSeries.labels.position == OUTSIDE_END) {\r\n currentSeries.labels.position = CENTER;\r\n }\r\n }\r\n\r\n for (i = 0; i < data.length; i++) {\r\n pointData = SeriesBinder.current.bindPoint(currentSeries, i);\r\n value = pointData.valueFields.value;\r\n plotValue = math.abs(value);\r\n fields = pointData.fields;\r\n angle = plotValue * anglePerValue;\r\n explode = data.length != 1 && !!fields.explode;\r\n if (!isFn(currentSeries.color)) {\r\n currentSeries.color = fields.color || colors[i % colorsCount];\r\n }\r\n\r\n callback(value, new Ring(null, 0, 0, currentAngle, angle), {\r\n owner: chart,\r\n category: fields.category || \"\",\r\n index: pointIx,\r\n series: currentSeries,\r\n seriesIx: seriesIx,\r\n dataItem: data[i],\r\n percentage: total !== 0 ? plotValue / total : 0,\r\n explode: explode,\r\n visibleInLegend: fields.visibleInLegend,\r\n visible: fields.visible,\r\n zIndex: seriesCount - seriesIx,\r\n animationDelay: chart.animationDelay(i, seriesIx, seriesCount)\r\n });\r\n\r\n if (pointData.fields.visible !== false) {\r\n currentAngle += angle;\r\n }\r\n pointIx++;\r\n }\r\n pointIx = 0;\r\n }\r\n },\r\n\r\n evalSegmentOptions: function(options, value, fields) {\r\n var series = fields.series;\r\n\r\n evalOptions(options, {\r\n value: value,\r\n series: series,\r\n dataItem: fields.dataItem,\r\n category: fields.category,\r\n percentage: fields.percentage\r\n }, { defaults: series._defaults, excluded: [\"data\", \"template\", \"visual\", \"toggle\"] });\r\n },\r\n\r\n addValue: function(value, sector, fields) {\r\n var chart = this,\r\n segment;\r\n\r\n var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\r\n chart.evalSegmentOptions(segmentOptions, value, fields);\r\n\r\n chart.createLegendItem(value, segmentOptions, fields);\r\n\r\n if (fields.visible === false) {\r\n return;\r\n }\r\n\r\n segment = new PieSegment(value, sector, segmentOptions);\r\n extend(segment, fields);\r\n chart.append(segment);\r\n chart.points.push(segment);\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var chart = this,\r\n options = chart.options,\r\n box = targetBox.clone(),\r\n space = 5,\r\n minWidth = math.min(box.width(), box.height()),\r\n halfMinWidth = minWidth / 2,\r\n defaultPadding = minWidth - minWidth * 0.85,\r\n padding = valueOrDefault(options.padding, defaultPadding),\r\n newBox = Box2D(box.x1, box.y1,\r\n box.x1 + minWidth, box.y1 + minWidth),\r\n newBoxCenter = newBox.center(),\r\n seriesConfigs = chart.seriesConfigs || [],\r\n boxCenter = box.center(),\r\n points = chart.points,\r\n count = points.length,\r\n seriesCount = options.series.length,\r\n leftSideLabels = [],\r\n rightSideLabels = [],\r\n seriesConfig, seriesIndex, label,\r\n segment, sector, r, i, c;\r\n\r\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\r\n newBox.translate(boxCenter.x - newBoxCenter.x, boxCenter.y - newBoxCenter.y);\r\n r = halfMinWidth - padding;\r\n c = Point2D(\r\n r + newBox.x1 + padding,\r\n r + newBox.y1 + padding\r\n );\r\n\r\n for (i = 0; i < count; i++) {\r\n segment = points[i];\r\n\r\n sector = segment.sector;\r\n sector.r = r;\r\n sector.c = c;\r\n seriesIndex = segment.seriesIx;\r\n if (seriesConfigs.length) {\r\n seriesConfig = seriesConfigs[seriesIndex];\r\n sector.ir = seriesConfig.ir;\r\n sector.r = seriesConfig.r;\r\n }\r\n\r\n if (seriesIndex == seriesCount - 1 && segment.explode) {\r\n sector.c = sector.clone().radius(sector.r * 0.15).point(sector.middle());\r\n }\r\n\r\n segment.reflow(newBox);\r\n\r\n label = segment.label;\r\n if (label) {\r\n if (label.options.position === OUTSIDE_END) {\r\n if (seriesIndex == seriesCount - 1) {\r\n if (label.orientation === RIGHT) {\r\n rightSideLabels.push(label);\r\n } else {\r\n leftSideLabels.push(label);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (leftSideLabels.length > 0) {\r\n leftSideLabels.sort(chart.labelComparator(true));\r\n chart.leftLabelsReflow(leftSideLabels);\r\n }\r\n\r\n if (rightSideLabels.length > 0) {\r\n rightSideLabels.sort(chart.labelComparator(false));\r\n chart.rightLabelsReflow(rightSideLabels);\r\n }\r\n\r\n chart.box = newBox;\r\n },\r\n\r\n leftLabelsReflow: function(labels) {\r\n var chart = this,\r\n distances = chart.distanceBetweenLabels(labels);\r\n\r\n chart.distributeLabels(distances, labels);\r\n },\r\n\r\n rightLabelsReflow: function(labels) {\r\n var chart = this,\r\n distances = chart.distanceBetweenLabels(labels);\r\n\r\n chart.distributeLabels(distances, labels);\r\n },\r\n\r\n distanceBetweenLabels: function(labels) {\r\n var chart = this,\r\n points = chart.points,\r\n segment = points[points.length - 1],\r\n sector = segment.sector,\r\n firstBox = labels[0].box,\r\n count = labels.length - 1,\r\n lr = sector.r + segment.options.labels.distance,\r\n distances = [],\r\n secondBox, distance, i;\r\n\r\n distance = round(firstBox.y1 - (sector.c.y - lr - firstBox.height() - firstBox.height() / 2));\r\n distances.push(distance);\r\n for (i = 0; i < count; i++) {\r\n firstBox = labels[i].box;\r\n secondBox = labels[i + 1].box;\r\n distance = round(secondBox.y1 - firstBox.y2);\r\n distances.push(distance);\r\n }\r\n distance = round(sector.c.y + lr - labels[count].box.y2 - labels[count].box.height() / 2);\r\n distances.push(distance);\r\n\r\n return distances;\r\n },\r\n\r\n distributeLabels: function(distances, labels) {\r\n var chart = this,\r\n count = distances.length,\r\n remaining, left, right, i;\r\n\r\n for (i = 0; i < count; i++) {\r\n left = right = i;\r\n remaining = -distances[i];\r\n while (remaining > 0 && (left >= 0 || right < count)) {\r\n remaining = chart._takeDistance(distances, i, --left, remaining);\r\n remaining = chart._takeDistance(distances, i, ++right, remaining);\r\n }\r\n }\r\n\r\n chart.reflowLabels(distances, labels);\r\n },\r\n\r\n _takeDistance: function(distances, anchor, position, amount) {\r\n if (distances[position] > 0) {\r\n var available = math.min(distances[position], amount);\r\n amount -= available;\r\n distances[position] -= available;\r\n distances[anchor] += available;\r\n }\r\n\r\n return amount;\r\n },\r\n\r\n reflowLabels: function(distances, labels) {\r\n var chart = this,\r\n points = chart.points,\r\n segment = points[points.length - 1],\r\n sector = segment.sector,\r\n labelsCount = labels.length,\r\n labelOptions = segment.options.labels,\r\n labelDistance = labelOptions.distance,\r\n boxY = sector.c.y - (sector.r + labelDistance) - labels[0].box.height(),\r\n label, boxX, box, i;\r\n\r\n distances[0] += 2;\r\n for (i = 0; i < labelsCount; i++) {\r\n label = labels[i];\r\n boxY += distances[i];\r\n box = label.box;\r\n boxX = chart.hAlignLabel(\r\n box.x2,\r\n sector.clone().expand(labelDistance),\r\n boxY,\r\n boxY + box.height(),\r\n label.orientation == RIGHT);\r\n\r\n if (label.orientation == RIGHT) {\r\n if (labelOptions.align !== CIRCLE) {\r\n boxX = sector.r + sector.c.x + labelDistance;\r\n }\r\n label.reflow(Box2D(boxX + box.width(), boxY,\r\n boxX, boxY));\r\n } else {\r\n if (labelOptions.align !== CIRCLE) {\r\n boxX = sector.c.x - sector.r - labelDistance;\r\n }\r\n label.reflow(Box2D(boxX - box.width(), boxY,\r\n boxX, boxY));\r\n }\r\n\r\n boxY += box.height();\r\n }\r\n },\r\n\r\n createVisual: function() {\r\n var chart = this,\r\n options = chart.options,\r\n connectors = options.connectors,\r\n points = chart.points,\r\n connectorLine,\r\n count = points.length,\r\n space = 4,\r\n sector, angle, segment,\r\n seriesIx, label, i;\r\n\r\n ChartElement.fn.createVisual.call(this);\r\n this._connectorLines = [];\r\n for (i = 0; i < count; i++) {\r\n segment = points[i];\r\n sector = segment.sector;\r\n angle = sector.middle();\r\n label = segment.label;\r\n seriesIx = { seriesId: segment.seriesIx };\r\n\r\n if (label) {\r\n connectorLine = new draw.Path({\r\n stroke: {\r\n color: connectors.color,\r\n width: connectors.width\r\n },\r\n animation: {\r\n type: FADEIN,\r\n delay: segment.animationDelay\r\n }\r\n });\r\n if (label.options.position === OUTSIDE_END && segment.value !== 0) {\r\n var box = label.box,\r\n centerPoint = sector.c,\r\n start = sector.point(angle),\r\n middle = Point2D(box.x1, box.center().y),\r\n sr, end, crossing;\r\n\r\n start = sector.clone().expand(connectors.padding).point(angle);\r\n connectorLine.moveTo(start.x, start.y);\r\n // TODO: Extract into a method to remove duplication\r\n if (label.orientation == RIGHT) {\r\n end = Point2D(box.x1 - connectors.padding, box.center().y);\r\n crossing = intersection(centerPoint, start, middle, end);\r\n middle = Point2D(end.x - space, end.y);\r\n crossing = crossing || middle;\r\n crossing.x = math.min(crossing.x, middle.x);\r\n\r\n if (chart.pointInCircle(crossing, sector.c, sector.r + space) ||\r\n crossing.x < sector.c.x) {\r\n sr = sector.c.x + sector.r + space;\r\n if (segment.options.labels.align !== COLUMN) {\r\n if (sr < middle.x) {\r\n connectorLine.lineTo(sr, start.y);\r\n } else {\r\n connectorLine.lineTo(start.x + space * 2, start.y);\r\n }\r\n } else {\r\n connectorLine.lineTo(sr, start.y);\r\n }\r\n connectorLine.lineTo(middle.x, end.y);\r\n } else {\r\n crossing.y = end.y;\r\n connectorLine.lineTo(crossing.x, crossing.y);\r\n }\r\n } else {\r\n end = Point2D(box.x2 + connectors.padding, box.center().y);\r\n crossing = intersection(centerPoint, start, middle, end);\r\n middle = Point2D(end.x + space, end.y);\r\n crossing = crossing || middle;\r\n crossing.x = math.max(crossing.x, middle.x);\r\n\r\n if (chart.pointInCircle(crossing, sector.c, sector.r + space) ||\r\n crossing.x > sector.c.x) {\r\n sr = sector.c.x - sector.r - space;\r\n if (segment.options.labels.align !== COLUMN) {\r\n if (sr > middle.x) {\r\n connectorLine.lineTo(sr, start.y);\r\n } else {\r\n connectorLine.lineTo(start.x - space * 2, start.y);\r\n }\r\n } else {\r\n connectorLine.lineTo(sr, start.y);\r\n }\r\n connectorLine.lineTo(middle.x, end.y);\r\n } else {\r\n crossing.y = end.y;\r\n connectorLine.lineTo(crossing.x, crossing.y);\r\n }\r\n }\r\n\r\n connectorLine.lineTo(end.x, end.y);\r\n\r\n this._connectorLines.push(connectorLine);\r\n this.visual.append(connectorLine);\r\n }\r\n }\r\n }\r\n },\r\n\r\n labelComparator: function (reverse) {\r\n reverse = (reverse) ? -1 : 1;\r\n\r\n return function(a, b) {\r\n a = (a.parent.sector.middle() + 270) % 360;\r\n b = (b.parent.sector.middle() + 270) % 360;\r\n return (a - b) * reverse;\r\n };\r\n },\r\n\r\n hAlignLabel: function(originalX, sector, y1, y2, direction) {\r\n var cx = sector.c.x,\r\n cy = sector.c.y,\r\n r = sector.r,\r\n t = math.min(math.abs(cy - y1), math.abs(cy - y2));\r\n\r\n if (t > r) {\r\n return originalX;\r\n } else {\r\n return cx + math.sqrt((r * r) - (t * t)) * (direction ? 1 : -1);\r\n }\r\n },\r\n\r\n pointInCircle: function(point, c, r) {\r\n return sqr(c.x - point.x) + sqr(c.y - point.y) < sqr(r);\r\n },\r\n\r\n formatPointValue: function(point, format) {\r\n return autoFormat(format, point.value);\r\n },\r\n\r\n animationDelay: function(categoryIndex) {\r\n return categoryIndex * PIE_SECTOR_ANIM_DELAY;\r\n }\r\n });\r\n\r\n deepExtend(PieChart.fn, PieChartMixin);\r\n\r\n var DonutSegment = PieSegment.extend({\r\n options: {\r\n overlay: {\r\n gradient: ROUNDED_GLASS\r\n },\r\n labels: {\r\n position: CENTER\r\n },\r\n animation: {\r\n type: PIE\r\n }\r\n },\r\n\r\n reflowLabel: function() {\r\n var segment = this,\r\n sector = segment.sector.clone(),\r\n options = segment.options,\r\n label = segment.label,\r\n labelsOptions = options.labels,\r\n lp,\r\n angle = sector.middle(),\r\n labelHeight;\r\n\r\n if (label) {\r\n labelHeight = label.box.height();\r\n if (labelsOptions.position == CENTER) {\r\n sector.r -= (sector.r - sector.ir) / 2;\r\n lp = sector.point(angle);\r\n label.reflow(new Box2D(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\r\n } else {\r\n PieSegment.fn.reflowLabel.call(segment);\r\n }\r\n }\r\n },\r\n\r\n createSegment: function(sector, options) {\r\n return ShapeBuilder.current.createRing(sector, options);\r\n }\r\n });\r\n deepExtend(DonutSegment.fn, PointEventsMixin);\r\n\r\n var DonutChart = PieChart.extend({\r\n options: {\r\n startAngle: 90,\r\n connectors: {\r\n width: 1,\r\n color: \"#939393\",\r\n padding: 4\r\n }\r\n },\r\n\r\n addValue: function(value, sector, fields) {\r\n var chart = this,\r\n segment;\r\n\r\n var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\r\n chart.evalSegmentOptions(segmentOptions, value, fields);\r\n\r\n chart.createLegendItem(value, segmentOptions, fields);\r\n\r\n if (!value || fields.visible === false) {\r\n return;\r\n }\r\n\r\n segment = new DonutSegment(value, sector, segmentOptions);\r\n extend(segment, fields);\r\n chart.append(segment);\r\n chart.points.push(segment);\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var chart = this,\r\n options = chart.options,\r\n box = targetBox.clone(),\r\n space = 5,\r\n minWidth = math.min(box.width(), box.height()),\r\n halfMinWidth = minWidth / 2,\r\n defaultPadding = minWidth - minWidth * 0.85,\r\n padding = valueOrDefault(options.padding, defaultPadding),\r\n series = options.series,\r\n currentSeries,\r\n seriesCount = series.length,\r\n seriesWithoutSize = 0,\r\n holeSize, totalSize, size,\r\n margin = 0, i, r, ir = 0,\r\n currentSize = 0;\r\n\r\n chart.seriesConfigs = [];\r\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\r\n totalSize = halfMinWidth - padding;\r\n\r\n for (i = 0; i < seriesCount; i++) {\r\n currentSeries = series[i];\r\n if (i === 0) {\r\n if (defined(currentSeries.holeSize)) {\r\n holeSize = currentSeries.holeSize;\r\n totalSize -= currentSeries.holeSize;\r\n }\r\n }\r\n\r\n if (defined(currentSeries.size)) {\r\n totalSize -= currentSeries.size;\r\n } else {\r\n seriesWithoutSize++;\r\n }\r\n\r\n if (defined(currentSeries.margin) && i != seriesCount - 1) {\r\n totalSize -= currentSeries.margin;\r\n }\r\n }\r\n\r\n if (!defined(holeSize)) {\r\n currentSize = (halfMinWidth - padding) / (seriesCount + 0.75);\r\n holeSize = currentSize * 0.75;\r\n totalSize -= holeSize;\r\n }\r\n\r\n ir = holeSize;\r\n\r\n for (i = 0; i < seriesCount; i++) {\r\n currentSeries = series[i];\r\n size = valueOrDefault(currentSeries.size, totalSize / seriesWithoutSize);\r\n ir += margin;\r\n r = ir + size;\r\n chart.seriesConfigs.push({ ir: ir, r: r });\r\n margin = currentSeries.margin || 0;\r\n ir = r;\r\n }\r\n\r\n PieChart.fn.reflow.call(chart, targetBox);\r\n },\r\n\r\n animationDelay: function(categoryIndex, seriesIndex, seriesCount) {\r\n return categoryIndex * DONUT_SECTOR_ANIM_DELAY +\r\n (INITIAL_ANIMATION_DURATION * (seriesIndex + 1) / (seriesCount + 1));\r\n }\r\n });\r\n\r\n var WaterfallChart = BarChart.extend({\r\n render: function() {\r\n BarChart.fn.render.call(this);\r\n this.createSegments();\r\n },\r\n\r\n traverseDataPoints: function(callback) {\r\n var series = this.options.series;\r\n var categories = this.categoryAxis.options.categories || [];\r\n var totalCategories = categoriesCount(series);\r\n var isVertical = !this.options.invertAxes;\r\n\r\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\r\n var currentSeries = series[seriesIx];\r\n var total = 0;\r\n var runningTotal = 0;\r\n\r\n for (var categoryIx = 0; categoryIx < totalCategories; categoryIx++) {\r\n var data = SeriesBinder.current.bindPoint(currentSeries, categoryIx);\r\n var value = data.valueFields.value;\r\n var summary = data.fields.summary;\r\n\r\n var from = total;\r\n var to;\r\n if (summary) {\r\n if (summary.toLowerCase() === \"total\") {\r\n data.valueFields.value = total;\r\n from = 0;\r\n to = total;\r\n } else {\r\n data.valueFields.value = runningTotal;\r\n to = from - runningTotal;\r\n runningTotal = 0;\r\n }\r\n } else if (isNumber(value)) {\r\n runningTotal += value;\r\n total += value;\r\n to = total;\r\n }\r\n\r\n callback(data, {\r\n category: categories[categoryIx],\r\n categoryIx: categoryIx,\r\n series: currentSeries,\r\n seriesIx: seriesIx,\r\n total: total,\r\n runningTotal: runningTotal,\r\n from: from,\r\n to: to,\r\n isVertical: isVertical\r\n });\r\n }\r\n }\r\n },\r\n\r\n updateRange: function(value, fields) {\r\n BarChart.fn.updateRange.call(this, { value: fields.to }, fields);\r\n },\r\n\r\n aboveAxis: function(point) {\r\n return point.value >= 0;\r\n },\r\n\r\n plotRange: function(point) {\r\n return [point.from, point.to];\r\n },\r\n\r\n createSegments: function() {\r\n var series = this.options.series;\r\n var seriesPoints = this.seriesPoints;\r\n var segments = this.segments = [];\r\n\r\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\r\n var currentSeries = series[seriesIx];\r\n var points = seriesPoints[seriesIx];\r\n\r\n if (points) {\r\n var prevPoint;\r\n for (var pointIx = 0; pointIx < points.length; pointIx++) {\r\n var point = points[pointIx];\r\n\r\n if (point && prevPoint) {\r\n var segment = new WaterfallSegment(prevPoint, point, currentSeries);\r\n segments.push(segment);\r\n this.append(segment);\r\n }\r\n\r\n prevPoint = point;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n var WaterfallSegment = ChartElement.extend({\r\n init: function(from, to, series) {\r\n var segment = this;\r\n\r\n ChartElement.fn.init.call(segment);\r\n\r\n segment.from = from;\r\n segment.to = to;\r\n segment.series = series;\r\n },\r\n\r\n options: {\r\n animation: {\r\n type: FADEIN,\r\n delay: INITIAL_ANIMATION_DURATION\r\n }\r\n },\r\n\r\n linePoints: function() {\r\n var points = [];\r\n var from = this.from;\r\n var fromBox = from.box;\r\n var toBox = this.to.box;\r\n\r\n if (from.isVertical) {\r\n var y = from.aboveAxis ? fromBox.y1 : fromBox.y2;\r\n points.push(\r\n [fromBox.x1, y],\r\n [toBox.x2, y]\r\n );\r\n } else {\r\n var x = from.aboveAxis ? fromBox.x2 : fromBox.x1;\r\n points.push(\r\n [x, fromBox.y1],\r\n [x, toBox.y2]\r\n );\r\n }\r\n\r\n return points;\r\n },\r\n\r\n createVisual: function() {\r\n ChartElement.fn.createVisual.call(this);\r\n\r\n var options = this.options;\r\n var line = this.series.line || {};\r\n\r\n var path = draw.Path.fromPoints(this.linePoints(), {\r\n stroke: {\r\n color: line.color,\r\n width: line.width,\r\n opacity: line.opacity,\r\n dashType: line.dashType\r\n }\r\n });\r\n\r\n alignPathToPixel(path);\r\n this.visual.append(path);\r\n }\r\n });\r\n\r\n var Pane = BoxElement.extend({\r\n init: function(options) {\r\n var pane = this;\r\n\r\n BoxElement.fn.init.call(pane, options);\r\n\r\n options = pane.options;\r\n pane.id = kendo.guid();\r\n\r\n pane.createTitle();\r\n\r\n pane.content = new ChartElement();\r\n\r\n pane.chartContainer = new ChartContainer({}, pane);\r\n pane.append(pane.content);\r\n\r\n pane.axes = [];\r\n pane.charts = [];\r\n },\r\n\r\n options: {\r\n zIndex: -1,\r\n shrinkToFit: true,\r\n title: {\r\n align: LEFT\r\n },\r\n visible: true\r\n },\r\n\r\n createTitle: function() {\r\n var pane = this;\r\n var titleOptions = pane.options.title;\r\n if (typeof titleOptions === OBJECT) {\r\n titleOptions = deepExtend({}, titleOptions, {\r\n align: titleOptions.position,\r\n position: TOP\r\n });\r\n }\r\n pane.title = Title.buildTitle(titleOptions, pane, Pane.fn.options.title);\r\n },\r\n\r\n appendAxis: function(axis) {\r\n var pane = this;\r\n\r\n pane.content.append(axis);\r\n pane.axes.push(axis);\r\n axis.pane = pane;\r\n },\r\n\r\n appendChart: function(chart) {\r\n var pane = this;\r\n if (pane.chartContainer.parent !== pane.content) {\r\n pane.content.append(pane.chartContainer);\r\n }\r\n pane.charts.push(chart);\r\n pane.chartContainer.append(chart);\r\n chart.pane = pane;\r\n },\r\n\r\n empty: function() {\r\n var pane = this,\r\n plotArea = pane.parent,\r\n i;\r\n\r\n if (plotArea) {\r\n for (i = 0; i < pane.axes.length; i++) {\r\n plotArea.removeAxis(pane.axes[i]);\r\n }\r\n\r\n for (i = 0; i < pane.charts.length; i++) {\r\n plotArea.removeChart(pane.charts[i]);\r\n }\r\n }\r\n\r\n pane.axes = [];\r\n pane.charts = [];\r\n\r\n pane.content.destroy();\r\n pane.content.children = [];\r\n pane.chartContainer.children = [];\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var pane = this;\r\n\r\n // Content (such as charts) is rendered, but excluded from reflows\r\n var content;\r\n if (last(pane.children) === pane.content) {\r\n content = pane.children.pop();\r\n }\r\n\r\n BoxElement.fn.reflow.call(pane, targetBox);\r\n\r\n if (content) {\r\n pane.children.push(content);\r\n }\r\n\r\n if (pane.title) {\r\n pane.contentBox.y1 += pane.title.box.height();\r\n }\r\n },\r\n\r\n visualStyle: function() {\r\n var style = BoxElement.fn.visualStyle.call(this);\r\n style.zIndex = -10;\r\n\r\n return style;\r\n },\r\n\r\n renderComplete: function() {\r\n if (this.options.visible) {\r\n this.createGridLines();\r\n }\r\n },\r\n\r\n stackRoot: returnSelf,\r\n\r\n clipRoot: returnSelf,\r\n\r\n createGridLines: function() {\r\n var pane = this,\r\n axes = pane.axes,\r\n allAxes = axes.concat(pane.parent.axes),\r\n vGridLines = [],\r\n hGridLines = [],\r\n gridLines, i, j, axis,\r\n vertical, altAxis;\r\n\r\n // TODO\r\n // Is full combination really necessary?\r\n for (i = 0; i < axes.length; i++) {\r\n axis = axes[i];\r\n vertical = axis.options.vertical;\r\n gridLines = vertical ? vGridLines : hGridLines;\r\n for (j = 0; j < allAxes.length; j++) {\r\n if (gridLines.length === 0) {\r\n altAxis = allAxes[j];\r\n if (vertical !== altAxis.options.vertical) {\r\n append(gridLines, axis.createGridLines(altAxis));\r\n }\r\n }\r\n }\r\n }\r\n },\r\n\r\n refresh: function() {\r\n this.visual.clear();\r\n\r\n this.content.parent = null;\r\n this.content.createGradient = $.proxy(this.createGradient, this);\r\n this.content.renderVisual();\r\n this.content.parent = this;\r\n\r\n if (this.title) {\r\n this.visual.append(this.title.visual);\r\n }\r\n\r\n this.visual.append(this.content.visual);\r\n\r\n this.renderComplete();\r\n },\r\n\r\n clipBox: function() {\r\n return this.chartContainer.clipBox;\r\n }\r\n });\r\n\r\n var ChartContainer = ChartElement.extend({\r\n init: function(options, pane) {\r\n var container = this;\r\n ChartElement.fn.init.call(container, options);\r\n container.pane = pane;\r\n },\r\n\r\n shouldClip: function () {\r\n var container = this,\r\n children = container.children,\r\n length = children.length,\r\n i;\r\n\r\n for (i = 0; i < length; i++) {\r\n if (children[i].options.clip === true) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n\r\n _clipBox: function() {\r\n var container = this,\r\n pane = container.pane,\r\n axes = pane.axes,\r\n length = axes.length,\r\n clipBox = pane.box.clone(),\r\n axisValueField, idx,\r\n lineBox, axis;\r\n\r\n for (idx = 0; idx < length; idx++) {\r\n axis = axes[idx];\r\n axisValueField = axis.options.vertical ? Y : X;\r\n lineBox = axis.lineBox();\r\n clipBox[axisValueField + 1] = lineBox[axisValueField + 1];\r\n clipBox[axisValueField + 2] = lineBox[axisValueField + 2];\r\n }\r\n\r\n return clipBox;\r\n },\r\n\r\n createVisual: function() {\r\n this.visual = new draw.Group({\r\n zIndex: 0\r\n });\r\n\r\n if (this.shouldClip()) {\r\n var clipBox = this.clipBox = this._clipBox();\r\n\r\n var clipRect = clipBox.toRect();\r\n var clipPath = draw.Path.fromRect(clipRect);\r\n this.visual.clip(clipPath);\r\n\r\n this.unclipLabels();\r\n }\r\n },\r\n\r\n stackRoot: returnSelf,\r\n\r\n unclipLabels: function() {\r\n var container = this,\r\n charts = container.children,\r\n clipBox = container.clipBox,\r\n points, point,\r\n i, j, length;\r\n for (i = 0; i < charts.length; i++) {\r\n points = charts[i].points || {};\r\n length = points.length;\r\n\r\n for (j = 0; j < length; j++) {\r\n point = points[j];\r\n if (point && point.label && point.label.options.visible) {\r\n if (point.box.overlaps(clipBox)) {\r\n if (point.label.alignToClipBox) {\r\n point.label.alignToClipBox(clipBox);\r\n }\r\n point.label.options.noclip = true;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n\r\n destroy: function() {\r\n ChartElement.fn.destroy.call(this);\r\n delete this.parent;\r\n }\r\n });\r\n\r\n var PlotAreaBase = ChartElement.extend({\r\n init: function(series, options) {\r\n var plotArea = this;\r\n\r\n ChartElement.fn.init.call(plotArea, options);\r\n\r\n plotArea.series = series;\r\n plotArea.initSeries();\r\n plotArea.charts = [];\r\n plotArea.options.legend.items = [];\r\n plotArea.axes = [];\r\n plotArea.crosshairs = [];\r\n\r\n plotArea.createPanes();\r\n plotArea.render();\r\n plotArea.createCrosshairs();\r\n },\r\n\r\n options: {\r\n series: [],\r\n plotArea: {\r\n margin: {}\r\n },\r\n background: \"\",\r\n border: {\r\n color: BLACK,\r\n width: 0\r\n },\r\n legend: {\r\n inactiveItems: {\r\n labels: {\r\n color: \"#919191\"\r\n },\r\n markers: {\r\n color: \"#919191\"\r\n }\r\n }\r\n }\r\n },\r\n\r\n initSeries: function() {\r\n var series = this.series,\r\n i, currentSeries;\r\n\r\n for (i = 0; i < series.length; i++) {\r\n currentSeries = series[i];\r\n currentSeries.index = i;\r\n }\r\n },\r\n\r\n createPanes: function() {\r\n var plotArea = this,\r\n panes = [],\r\n paneOptions = plotArea.options.panes || [],\r\n i,\r\n panesLength = math.max(paneOptions.length, 1),\r\n currentPane;\r\n\r\n for (i = 0; i < panesLength; i++) {\r\n currentPane = new Pane(paneOptions[i]);\r\n currentPane.paneIndex = i;\r\n\r\n panes.push(currentPane);\r\n plotArea.append(currentPane);\r\n }\r\n\r\n plotArea.panes = panes;\r\n },\r\n\r\n createCrosshairs: function(panes) {\r\n var plotArea = this,\r\n i, j, pane, axis, currentCrosshair;\r\n\r\n panes = panes || plotArea.panes;\r\n for (i = 0; i < panes.length; i++) {\r\n pane = panes[i];\r\n for (j = 0; j < pane.axes.length; j++) {\r\n axis = pane.axes[j];\r\n if (axis.options.crosshair && axis.options.crosshair.visible) {\r\n currentCrosshair = new Crosshair(axis, axis.options.crosshair);\r\n\r\n plotArea.crosshairs.push(currentCrosshair);\r\n pane.content.append(currentCrosshair);\r\n }\r\n }\r\n }\r\n },\r\n\r\n removeCrosshairs: function(pane) {\r\n var plotArea = this,\r\n crosshairs = plotArea.crosshairs,\r\n axes = pane.axes,\r\n i, j;\r\n\r\n for (i = crosshairs.length - 1; i >= 0; i--) {\r\n for (j = 0; j < axes.length; j++) {\r\n if (crosshairs[i].axis === axes[j]) {\r\n crosshairs.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n },\r\n\r\n hideCrosshairs: function() {\r\n var crosshairs = this.crosshairs;\r\n for (var idx = 0; idx < crosshairs.length; idx++) {\r\n crosshairs[idx].hide();\r\n }\r\n },\r\n\r\n findPane: function(name) {\r\n var plotArea = this,\r\n panes = plotArea.panes,\r\n i, matchingPane;\r\n\r\n for (i = 0; i < panes.length; i++) {\r\n if (panes[i].options.name === name) {\r\n matchingPane = panes[i];\r\n break;\r\n }\r\n }\r\n\r\n return matchingPane || panes[0];\r\n },\r\n\r\n findPointPane: function(point) {\r\n var plotArea = this,\r\n panes = plotArea.panes,\r\n i, matchingPane;\r\n\r\n for (i = 0; i < panes.length; i++) {\r\n if (panes[i].box.containsPoint(point)) {\r\n matchingPane = panes[i];\r\n break;\r\n }\r\n }\r\n\r\n return matchingPane;\r\n },\r\n\r\n appendAxis: function(axis) {\r\n var plotArea = this,\r\n pane = plotArea.findPane(axis.options.pane);\r\n\r\n pane.appendAxis(axis);\r\n plotArea.axes.push(axis);\r\n axis.plotArea = plotArea;\r\n },\r\n\r\n removeAxis: function(axisToRemove) {\r\n var plotArea = this,\r\n i, axis,\r\n filteredAxes = [];\r\n\r\n for (i = 0; i < plotArea.axes.length; i++) {\r\n axis = plotArea.axes[i];\r\n if (axisToRemove !== axis) {\r\n filteredAxes.push(axis);\r\n } else {\r\n axis.destroy();\r\n }\r\n }\r\n\r\n plotArea.axes = filteredAxes;\r\n },\r\n\r\n appendChart: function(chart, pane) {\r\n var plotArea = this;\r\n\r\n plotArea.charts.push(chart);\r\n if (pane) {\r\n pane.appendChart(chart);\r\n } else {\r\n plotArea.append(chart);\r\n }\r\n },\r\n\r\n removeChart: function(chartToRemove) {\r\n var plotArea = this,\r\n i, chart,\r\n filteredCharts = [];\r\n\r\n for (i = 0; i < plotArea.charts.length; i++) {\r\n chart = plotArea.charts[i];\r\n if (chart !== chartToRemove) {\r\n filteredCharts.push(chart);\r\n } else {\r\n chart.destroy();\r\n }\r\n }\r\n\r\n plotArea.charts = filteredCharts;\r\n },\r\n\r\n addToLegend: function(series) {\r\n var count = series.length,\r\n data = [],\r\n i, currentSeries, text,\r\n legend = this.options.legend,\r\n labels = legend.labels || {},\r\n inactiveItems = legend.inactiveItems || {},\r\n inactiveItemsLabels = inactiveItems.labels || {},\r\n color, itemLabelOptions, markerColor,\r\n defaults, seriesVisible, labelTemplate;\r\n\r\n for (i = 0; i < count; i++) {\r\n currentSeries = series[i];\r\n seriesVisible = currentSeries.visible !== false;\r\n if (currentSeries.visibleInLegend === false) {\r\n continue;\r\n }\r\n\r\n text = currentSeries.name || \"\";\r\n labelTemplate = seriesVisible ? labels.template :\r\n (inactiveItemsLabels.template || labels.template);\r\n if (labelTemplate) {\r\n text = template(labelTemplate)({\r\n text: text,\r\n series: currentSeries\r\n });\r\n }\r\n\r\n color = currentSeries.color;\r\n defaults = currentSeries._defaults;\r\n if (isFn(color) && defaults) {\r\n color = defaults.color;\r\n }\r\n\r\n if (seriesVisible) {\r\n itemLabelOptions = {};\r\n markerColor = color;\r\n } else {\r\n itemLabelOptions = {\r\n color: inactiveItemsLabels.color,\r\n font: inactiveItemsLabels.font\r\n };\r\n markerColor = inactiveItems.markers.color;\r\n }\r\n\r\n if (text) {\r\n data.push({\r\n text: text,\r\n labels: itemLabelOptions,\r\n markerColor: markerColor,\r\n series: currentSeries,\r\n active: seriesVisible\r\n });\r\n }\r\n }\r\n\r\n append(legend.items, data);\r\n },\r\n\r\n groupAxes: function(panes) {\r\n var xAxes = [],\r\n yAxes = [],\r\n paneAxes, axis, paneIx, axisIx;\r\n\r\n for (paneIx = 0; paneIx < panes.length; paneIx++) {\r\n paneAxes = panes[paneIx].axes;\r\n for (axisIx = 0; axisIx < paneAxes.length; axisIx++) {\r\n axis = paneAxes[axisIx];\r\n if (axis.options.vertical) {\r\n yAxes.push(axis);\r\n } else {\r\n xAxes.push(axis);\r\n }\r\n }\r\n }\r\n\r\n return { x: xAxes, y: yAxes, any: xAxes.concat(yAxes) };\r\n },\r\n\r\n groupSeriesByPane: function() {\r\n var plotArea = this,\r\n series = plotArea.series,\r\n seriesByPane = {},\r\n i, pane, currentSeries;\r\n\r\n for (i = 0; i < series.length; i++) {\r\n currentSeries = series[i];\r\n pane = plotArea.seriesPaneName(currentSeries);\r\n\r\n if (seriesByPane[pane]) {\r\n seriesByPane[pane].push(currentSeries);\r\n } else {\r\n seriesByPane[pane] = [currentSeries];\r\n }\r\n }\r\n\r\n return seriesByPane;\r\n },\r\n\r\n filterVisibleSeries: function(series) {\r\n var i, currentSeries,\r\n result = [];\r\n\r\n for (i = 0; i < series.length; i++) {\r\n currentSeries = series[i];\r\n if (currentSeries.visible !== false) {\r\n result.push(currentSeries);\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n reflow: function(targetBox) {\r\n var plotArea = this,\r\n options = plotArea.options.plotArea,\r\n panes = plotArea.panes,\r\n margin = getSpacing(options.margin);\r\n\r\n plotArea.box = targetBox.clone().unpad(margin);\r\n plotArea.reflowPanes();\r\n\r\n plotArea.reflowAxes(panes);\r\n plotArea.reflowCharts(panes);\r\n },\r\n\r\n redraw: function(panes) {\r\n var plotArea = this,\r\n i;\r\n\r\n panes = [].concat(panes);\r\n this.initSeries();\r\n\r\n for (i = 0; i < panes.length; i++) {\r\n plotArea.removeCrosshairs(panes[i]);\r\n panes[i].empty();\r\n }\r\n\r\n plotArea.render(panes);\r\n plotArea.reflowAxes(plotArea.panes);\r\n plotArea.reflowCharts(panes);\r\n\r\n plotArea.createCrosshairs(panes);\r\n\r\n for (i = 0; i < panes.length; i++) {\r\n panes[i].refresh();\r\n }\r\n },\r\n\r\n axisCrossingValues: function(axis, crossingAxes) {\r\n var options = axis.options,\r\n crossingValues = [].concat(\r\n options.axisCrossingValues || options.axisCrossingValue\r\n ),\r\n valuesToAdd = crossingAxes.length - crossingValues.length,\r\n defaultValue = crossingValues[0] || 0,\r\n i;\r\n\r\n for (i = 0; i < valuesToAdd; i++) {\r\n crossingValues.push(defaultValue);\r\n }\r\n\r\n return crossingValues;\r\n },\r\n\r\n alignAxisTo: function(axis, targetAxis, crossingValue, targetCrossingValue) {\r\n var slot = axis.getSlot(crossingValue, crossingValue, true),\r\n slotEdge = axis.options.reverse ? 2 : 1,\r\n targetSlot = targetAxis.getSlot(targetCrossingValue, targetCrossingValue, true),\r\n targetEdge = targetAxis.options.reverse ? 2 : 1,\r\n axisBox = axis.box.translate(\r\n targetSlot[X + targetEdge] - slot[X + slotEdge],\r\n targetSlot[Y + targetEdge] - slot[Y + slotEdge]\r\n );\r\n\r\n if (axis.pane !== targetAxis.pane) {\r\n axisBox.translate(0, axis.pane.box.y1 - targetAxis.pane.box.y1);\r\n }\r\n\r\n axis.reflow(axisBox);\r\n },\r\n\r\n alignAxes: function(xAxes, yAxes) {\r\n var plotArea = this,\r\n xAnchor = xAxes[0],\r\n yAnchor = yAxes[0],\r\n xAnchorCrossings = plotArea.axisCrossingValues(xAnchor, yAxes),\r\n yAnchorCrossings = plotArea.axisCrossingValues(yAnchor, xAxes),\r\n leftAnchors = {},\r\n rightAnchors = {},\r\n topAnchors = {},\r\n bottomAnchors = {},\r\n pane, paneId, axis, i;\r\n\r\n for (i = 0; i < yAxes.length; i++) {\r\n axis = yAxes[i];\r\n pane = axis.pane;\r\n paneId = pane.id;\r\n plotArea.alignAxisTo(axis, xAnchor, yAnchorCrossings[i], xAnchorCrossings[i]);\r\n\r\n if (axis.options._overlap) {\r\n continue;\r\n }\r\n\r\n if (round(axis.lineBox().x1) === round(xAnchor.lineBox().x1)) {\r\n if (leftAnchors[paneId]) {\r\n axis.reflow(axis.box\r\n .alignTo(leftAnchors[paneId].box, LEFT)\r\n .translate(-axis.options.margin, 0)\r\n );\r\n }\r\n\r\n leftAnchors[paneId] = axis;\r\n }\r\n\r\n if (round(axis.lineBox().x2) === round(xAnchor.lineBox().x2)) {\r\n if (!axis._mirrored) {\r\n axis.options.labels.mirror = !axis.options.labels.mirror;\r\n axis._mirrored = true;\r\n }\r\n plotArea.alignAxisTo(axis, xAnchor, yAnchorCrossings[i], xAnchorCrossings[i]);\r\n\r\n if (rightAnchors[paneId]) {\r\n axis.reflow(axis.box\r\n .alignTo(rightAnchors[paneId].box, RIGHT)\r\n .translate(axis.options.margin, 0)\r\n );\r\n }\r\n\r\n rightAnchors[paneId] = axis;\r\n }\r\n\r\n if (i !== 0 && yAnchor.pane === axis.pane) {\r\n axis.alignTo(yAnchor);\r\n axis.reflow(axis.box);\r\n }\r\n }\r\n\r\n for (i = 0; i < xAxes.length; i++) {\r\n axis = xAxes[i];\r\n pane = axis.pane;\r\n paneId = pane.id;\r\n plotArea.alignAxisTo(axis, yAnchor, xAnchorCrossings[i], yAnchorCrossings[i]);\r\n\r\n if (axis.options._overlap) {\r\n continue;\r\n }\r\n\r\n if (round(axis.lineBox().y1) === round(yAnchor.lineBox().y1)) {\r\n if (!axis._mirrored) {\r\n axis.options.labels.mirror = !axis.options.labels.mirror;\r\n axis._mirrored = true;\r\n }\r\n plotArea.alignAxisTo(axis, yAnchor, xAnchorCrossings[i], yAnchorCrossings[i]);\r\n\r\n if (topAnchors[paneId]) {\r\n axis.reflow(axis.box\r\n .alignTo(topAnchors[paneId].box, TOP)\r\n .translate(0, -axis.options.margin)\r\n );\r\n }\r\n\r\n topAnchors[paneId] = axis;\r\n }\r\n\r\n if (round(axis.lineBox().y2, COORD_PRECISION) === round(yAnchor.lineBox().y2, COORD_PRECISION)) {\r\n if (bottomAnchors[paneId]) {\r\n axis.reflow(axis.box\r\n .alignTo(bottomAnchors[paneId].box, BOTTOM)\r\n .translate(0, axis.options.margin)\r\n );\r\n }\r\n\r\n bottomAnchors[paneId] = axis;\r\n }\r\n\r\n if (i !== 0) {\r\n axis.alignTo(xAnchor);\r\n axis.reflow(axis.box);\r\n }\r\n }\r\n },\r\n\r\n shrinkAxisWidth: function(panes) {\r\n var plotArea = this,\r\n axes = plotArea.groupAxes(panes).any,\r\n axisBox = axisGroupBox(axes),\r\n overflowX = 0,\r\n i, currentPane, currentAxis;\r\n\r\n for (i = 0; i < panes.length; i++) {\r\n currentPane = panes[i];\r\n\r\n if (currentPane.axes.length > 0) {\r\n overflowX = math.max(\r\n overflowX,\r\n axisBox.width() - currentPane.contentBox.width()\r\n );\r\n }\r\n }\r\n\r\n if (overflowX !== 0) {\r\n for (i = 0; i < axes.length; i++) {\r\n currentAxis = axes[i];\r\n\r\n if (!currentAxis.options.vertical) {\r\n currentAxis.reflow(currentAxis.box.shrink(overflowX, 0));\r\n }\r\n }\r\n }\r\n },\r\n\r\n shrinkAxisHeight: function(panes) {\r\n var i, currentPane, axes,\r\n overflowY, j, currentAxis,\r\n shrinked;\r\n\r\n for (i = 0; i < panes.length; i++) {\r\n currentPane = panes[i];\r\n axes = currentPane.axes;\r\n overflowY = math.max(\r\n 0,\r\n axisGroupBox(axes).height() - currentPane.contentBox.height()\r\n );\r\n\r\n if (overflowY !== 0) {\r\n for (j = 0; j < axes.length; j++) {\r\n currentAxis = axes[j];\r\n\r\n if (currentAxis.options.vertical) {\r\n currentAxis.reflow(\r\n currentAxis.box.shrink(0, overflowY)\r\n );\r\n }\r\n }\r\n shrinked = true;\r\n }\r\n }\r\n\r\n return shrinked;\r\n },\r\n\r\n fitAxes: function(panes) {\r\n var plotArea = this,\r\n axes = plotArea.groupAxes(panes).any,\r\n offsetX = 0,\r\n paneAxes, paneBox, axisBox, offsetY,\r\n currentPane, currentAxis, i, j;\r\n\r\n for (i = 0; i < panes.length; i++) {\r\n currentPane = panes[i];\r\n paneAxes = currentPane.axes;\r\n paneBox = currentPane.contentBox;\r\n\r\n if (paneAxes.length > 0) {\r\n axisBox = axisGroupBox(paneAxes);\r\n\r\n // OffsetX is calculated and applied globally\r\n offsetX = math.max(offsetX, paneBox.x1 - axisBox.x1);\r\n\r\n // OffsetY is calculated and applied per pane\r\n offsetY = math.max(paneBox.y1 - axisBox.y1, paneBox.y2 - axisBox.y2);\r\n\r\n for (j = 0; j < paneAxes.length; j++) {\r\n currentAxis = paneAxes[j];\r\n\r\n currentAxis.reflow(\r\n currentAxis.box.translate(0, offsetY)\r\n );\r\n }\r\n }\r\n }\r\n\r\n for (i = 0; i < axes.length; i++) {\r\n currentAxis = axes[i];\r\n\r\n currentAxis.reflow(\r\n currentAxis.box.translate(offsetX, 0)\r\n );\r\n }\r\n },\r\n\r\n reflowAxes: function(panes) {\r\n var plotArea = this,\r\n i,\r\n axes = plotArea.groupAxes(panes);\r\n\r\n for (i = 0; i < panes.length; i++) {\r\n plotArea.reflowPaneAxes(panes[i]);\r\n }\r\n\r\n if (axes.x.length > 0 && axes.y.length > 0) {\r\n plotArea.alignAxes(axes.x, axes.y);\r\n plotArea.shrinkAxisWidth(panes);\r\n\r\n plotArea.autoRotateAxisLabels(axes);\r\n\r\n plotArea.alignAxes(axes.x, axes.y);\r\n if (plotArea.shrinkAxisWidth(panes)) {\r\n plotArea.alignAxes(axes.x, axes.y);\r\n }\r\n\r\n plotArea.shrinkAxisHeight(panes);\r\n plotArea.alignAxes(axes.x, axes.y);\r\n\r\n if (plotArea.shrinkAxisHeight(panes)) {\r\n plotArea.alignAxes(axes.x, axes.y);\r\n }\r\n\r\n plotArea.fitAxes(panes);\r\n }\r\n },\r\n\r\n autoRotateAxisLabels: function(groupedAxes) {\r\n var axes = this.axes;\r\n var panes = this.panes;\r\n var axis, idx, rotated;\r\n\r\n for (idx = 0; idx < axes.length; idx++) {\r\n axis = axes[idx];\r\n if (axis.autoRotateLabels()) {\r\n rotated = true;\r\n }\r\n }\r\n\r\n if (rotated) {\r\n for (idx = 0; idx < panes.length; idx++) {\r\n this.reflowPaneAxes(panes[idx]);\r\n }\r\n\r\n if (groupedAxes.x.length > 0 && groupedAxes.y.length > 0) {\r\n this.alignAxes(groupedAxes.x, groupedAxes.y);\r\n this.shrinkAxisWidth(panes);\r\n }\r\n }\r\n },\r\n\r\n reflowPaneAxes: function(pane) {\r\n var axes = pane.axes,\r\n i,\r\n length = axes.length;\r\n\r\n if (length > 0) {\r\n for (i = 0; i < length; i++) {\r\n axes[i].reflow(pane.contentBox);\r\n }\r\n }\r\n },\r\n\r\n reflowCharts: function(panes) {\r\n var plotArea = this,\r\n charts = plotArea.charts,\r\n count = charts.length,\r\n box = plotArea.box,\r\n chartPane, i;\r\n\r\n for (i = 0; i < count; i++) {\r\n chartPane = charts[i].pane;\r\n if (!chartPane || inArray(chartPane, panes)) {\r\n charts[i].reflow(box);\r\n }\r\n }\r\n },\r\n\r\n reflowPanes: function() {\r\n var plotArea = this,\r\n box = plotArea.box,\r\n panes = plotArea.panes,\r\n panesLength = panes.length,\r\n i, currentPane, paneBox,\r\n remainingHeight = box.height(),\r\n remainingPanes = panesLength,\r\n autoHeightPanes = 0,\r\n top = box.y1,\r\n height, percents;\r\n\r\n for (i = 0; i < panesLength; i++) {\r\n currentPane = panes[i];\r\n height = currentPane.options.height;\r\n\r\n currentPane.options.width = box.width();\r\n\r\n if (!currentPane.options.height) {\r\n autoHeightPanes++;\r\n } else {\r\n if (height.indexOf && height.indexOf(\"%\")) {\r\n percents = parseInt(height, 10) / 100;\r\n currentPane.options.height = percents * box.height();\r\n }\r\n\r\n currentPane.reflow(box.clone());\r\n\r\n remainingHeight -= currentPane.options.height;\r\n }\r\n }\r\n\r\n for (i = 0; i < panesLength; i++) {\r\n currentPane = panes[i];\r\n\r\n if (!currentPane.options.height) {\r\n currentPane.options.height = remainingHeight / autoHeightPanes;\r\n }\r\n }\r\n\r\n for (i = 0; i < panesLength; i++) {\r\n currentPane = panes[i];\r\n\r\n paneBox = box\r\n .clone()\r\n .move(box.x1, top);\r\n\r\n currentPane.reflow(paneBox);\r\n\r\n remainingPanes--;\r\n top += currentPane.options.height;\r\n }\r\n },\r\n\r\n backgroundBox: function() {\r\n var plotArea = this,\r\n axes = plotArea.axes,\r\n axesCount = axes.length,\r\n lineBox, box, i, j, axisA, axisB;\r\n\r\n for (i = 0; i < axesCount; i++) {\r\n axisA = axes[i];\r\n\r\n for (j = 0; j < axesCount; j++) {\r\n axisB = axes[j];\r\n\r\n if (axisA.options.vertical !== axisB.options.vertical) {\r\n lineBox = axisA.lineBox().clone().wrap(axisB.lineBox());\r\n\r\n if (!box) {\r\n box = lineBox;\r\n } else {\r\n box = box.wrap(lineBox);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return box || plotArea.box;\r\n },\r\n\r\n createVisual: function() {\r\n ChartElement.fn.createVisual.call(this);\r\n\r\n var bgBox = this.backgroundBox();\r\n var options = this.options.plotArea;\r\n var border = options.border || {};\r\n\r\n var background = options.background;\r\n var opacity = options.opacity;\r\n if (util.isTransparent(background)) {\r\n background = WHITE;\r\n opacity = 0;\r\n }\r\n\r\n var bg = this._bgVisual = draw.Path.fromRect(bgBox.toRect(), {\r\n fill: {\r\n color: background,\r\n opacity: opacity\r\n },\r\n stroke: {\r\n color: border.width ? border.color : \"\",\r\n width: border.width,\r\n dashType: border.dashType\r\n },\r\n zIndex: -1\r\n });\r\n\r\n this.appendVisual(bg);\r\n },\r\n\r\n pointsByCategoryIndex: function(categoryIndex) {\r\n var charts = this.charts,\r\n result = [],\r\n i, j, points, point, chart;\r\n\r\n if (categoryIndex !== null) {\r\n for (i = 0; i < charts.length; i++) {\r\n chart = charts[i];\r\n if (chart.pane.options.name === \"_navigator\") {\r\n continue;\r\n }\r\n\r\n points = charts[i].categoryPoints[categoryIndex];\r\n if (points && points.length) {\r\n for (j = 0; j < points.length; j++) {\r\n point = points[j];\r\n if (point && defined(point.value) && point.value !== null) {\r\n result.push(point);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n pointsBySeriesIndex: function(seriesIndex) {\r\n var charts = this.charts,\r\n result = [],\r\n points, point, i, j, chart;\r\n\r\n for (i = 0; i < charts.length; i++) {\r\n chart = charts[i];\r\n points = chart.points;\r\n for (j = 0; j < points.length; j++) {\r\n point = points[j];\r\n if (point && point.options.index === seriesIndex) {\r\n result.push(point);\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n pointsBySeriesName: function(name) {\r\n var charts = this.charts,\r\n result = [],\r\n points, point, i, j, chart;\r\n\r\n for (i = 0; i < charts.length; i++) {\r\n chart = charts[i];\r\n points = chart.points;\r\n for (j = 0; j < points.length; j++) {\r\n point = points[j];\r\n if (point && point.series.name === name) {\r\n result.push(point);\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n paneByPoint: function(point) {\r\n var plotArea = this,\r\n panes = plotArea.panes,\r\n pane, i;\r\n\r\n for (i = 0; i < panes.length; i++) {\r\n pane = panes[i];\r\n if (pane.box.containsPoint(point)) {\r\n return pane;\r\n }\r\n }\r\n }\r\n });\r\n\r\n var CategoricalPlotArea = PlotAreaBase.extend({\r\n init: function(series, options) {\r\n var plotArea = this;\r\n\r\n plotArea.namedCategoryAxes = {};\r\n plotArea.namedValueAxes = {};\r\n plotArea.valueAxisRangeTracker = new AxisGroupRangeTracker();\r\n\r\n if (series.length > 0) {\r\n plotArea.invertAxes = inArray(\r\n series[0].type, [BAR, BULLET, VERTICAL_LINE, VERTICAL_AREA, RANGE_BAR, HORIZONTAL_WATERFALL]\r\n );\r\n\r\n for (var i = 0; i < series.length; i++) {\r\n var stack = series[i].stack;\r\n if (stack && stack.type === \"100%\") {\r\n plotArea.stack100 = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n PlotAreaBase.fn.init.call(plotArea, series, options);\r\n },\r\n\r\n options: {\r\n categoryAxis: {\r\n categories: []\r\n },\r\n valueAxis: {}\r\n },\r\n\r\n render: function(panes) {\r\n var plotArea = this;\r\n\r\n panes = panes || plotArea.panes;\r\n\r\n plotArea.createCategoryAxes(panes);\r\n plotArea.aggregateCategories(panes);\r\n plotArea.createCategoryAxesLabels(panes);\r\n plotArea.createCharts(panes);\r\n plotArea.createValueAxes(panes);\r\n },\r\n\r\n removeAxis: function(axis) {\r\n var plotArea = this,\r\n axisName = axis.options.name;\r\n\r\n PlotAreaBase.fn.removeAxis.call(plotArea, axis);\r\n\r\n if (axis instanceof CategoryAxis) {\r\n delete plotArea.namedCategoryAxes[axisName];\r\n } else {\r\n plotArea.valueAxisRangeTracker.reset(axisName);\r\n delete plotArea.namedValueAxes[axisName];\r\n }\r\n\r\n if (axis === plotArea.categoryAxis) {\r\n delete plotArea.categoryAxis;\r\n }\r\n\r\n if (axis === plotArea.valueAxis) {\r\n delete plotArea.valueAxis;\r\n }\r\n },\r\n\r\n createCharts: function(panes) {\r\n var plotArea = this,\r\n seriesByPane = this.groupSeriesByPane();\r\n\r\n for (var i = 0; i < panes.length; i++) {\r\n var pane = panes[i];\r\n var paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\r\n this.addToLegend(paneSeries);\r\n\r\n var visibleSeries = this.filterVisibleSeries(paneSeries);\r\n if (!visibleSeries) {\r\n continue;\r\n }\r\n\r\n var groups = this.groupSeriesByCategoryAxis(visibleSeries);\r\n for (var groupIx = 0; groupIx < groups.length; groupIx++) {\r\n this.createChartGroup(groups[groupIx], pane);\r\n }\r\n }\r\n },\r\n\r\n createChartGroup: function(series, pane) {\r\n this.createAreaChart(\r\n filterSeriesByType(series, [AREA, VERTICAL_AREA]), pane\r\n );\r\n\r\n this.createBarChart(\r\n filterSeriesByType(series, [COLUMN, BAR]), pane\r\n );\r\n\r\n this.createRangeBarChart(\r\n filterSeriesByType(series, [RANGE_COLUMN, RANGE_BAR]), pane\r\n );\r\n\r\n this.createBulletChart(\r\n filterSeriesByType(series, [BULLET, VERTICAL_BULLET]), pane\r\n );\r\n\r\n this.createCandlestickChart(\r\n filterSeriesByType(series, CANDLESTICK), pane\r\n );\r\n\r\n this.createBoxPlotChart(\r\n filterSeriesByType(series, BOX_PLOT), pane\r\n );\r\n\r\n this.createOHLCChart(\r\n filterSeriesByType(series, OHLC), pane\r\n );\r\n\r\n this.createWaterfallChart(\r\n filterSeriesByType(series, [WATERFALL, HORIZONTAL_WATERFALL]), pane\r\n );\r\n\r\n this.createLineChart(\r\n filterSeriesByType(series, [LINE, VERTICAL_LINE]), pane\r\n );\r\n },\r\n\r\n aggregateCategories: function(panes) {\r\n var plotArea = this,\r\n series = plotArea.srcSeries || plotArea.series,\r\n processedSeries = [],\r\n i, currentSeries,\r\n categoryAxis, axisPane, dateAxis;\r\n\r\n for (i = 0; i < series.length; i++) {\r\n currentSeries = series[i];\r\n categoryAxis = plotArea.seriesCategoryAxis(currentSeries);\r\n axisPane = plotArea.findPane(categoryAxis.options.pane);\r\n dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\r\n\r\n if ((dateAxis || currentSeries.categoryField) && inArray(axisPane, panes)) {\r\n currentSeries = plotArea.aggregateSeries(currentSeries, categoryAxis);\r\n }\r\n\r\n processedSeries.push(currentSeries);\r\n }\r\n\r\n plotArea.srcSeries = series;\r\n plotArea.series = processedSeries;\r\n },\r\n\r\n aggregateSeries: function(series, categoryAxis) {\r\n var axisOptions = categoryAxis.options,\r\n dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE),\r\n categories = axisOptions.categories,\r\n srcCategories = axisOptions.srcCategories || categories,\r\n srcData = series.data,\r\n srcPoints = [],\r\n range = categoryAxis.range(),\r\n result = deepExtend({}, series),\r\n aggregatorSeries = deepExtend({}, series),\r\n i, category, categoryIx,\r\n data,\r\n aggregator,\r\n getFn = getField;\r\n\r\n result.data = data = [];\r\n\r\n if (dateAxis) {\r\n getFn = getDateField;\r\n }\r\n\r\n for (i = 0; i < srcData.length; i++) {\r\n if (series.categoryField) {\r\n category = getFn(series.categoryField, srcData[i]);\r\n } else {\r\n category = srcCategories[i];\r\n }\r\n\r\n categoryIx = categoryAxis.categoryIndex(category, range);\r\n if (categoryIx > -1) {\r\n srcPoints[categoryIx] = srcPoints[categoryIx] || [];\r\n srcPoints[categoryIx].push(i);\r\n }\r\n }\r\n\r\n aggregator = new SeriesAggregator(\r\n aggregatorSeries, SeriesBinder.current, DefaultAggregates.current\r\n );\r\n\r\n for (i = 0; i < categories.length; i++) {\r\n data[i] = aggregator.aggregatePoints(\r\n srcPoints[i], categories[i]\r\n );\r\n }\r\n\r\n categoryAxis.options.dataItems = data;\r\n\r\n return result;\r\n },\r\n\r\n appendChart: function(chart, pane) {\r\n var plotArea = this,\r\n series = chart.options.series,\r\n categoryAxis = plotArea.seriesCategoryAxis(series[0]),\r\n categories = categoryAxis.options.categories,\r\n categoriesToAdd = math.max(0, categoriesCount(series) - categories.length);\r\n\r\n while (categoriesToAdd--) {\r\n categories.push(\"\");\r\n }\r\n\r\n plotArea.valueAxisRangeTracker.update(chart.valueAxisRanges);\r\n\r\n PlotAreaBase.fn.appendChart.call(plotArea, chart, pane);\r\n },\r\n\r\n // TODO: Refactor, optionally use series.pane option\r\n seriesPaneName: function(series) {\r\n var plotArea = this,\r\n options = plotArea.options,\r\n axisName = series.axis,\r\n axisOptions = [].concat(options.valueAxis),\r\n axis = $.grep(axisOptions, function(a) { return a.name === axisName; })[0],\r\n panes = options.panes || [{}],\r\n defaultPaneName = (panes[0] || {}).name || \"default\",\r\n paneName = (axis || {}).pane || defaultPaneName;\r\n\r\n return paneName;\r\n },\r\n\r\n seriesCategoryAxis: function(series) {\r\n var plotArea = this,\r\n axisName = series.categoryAxis,\r\n axis = axisName ?\r\n plotArea.namedCategoryAxes[axisName] :\r\n plotArea.categoryAxis;\r\n\r\n if (!axis) {\r\n throw new Error(\"Unable to locate category axis with name \" + axisName);\r\n }\r\n\r\n return axis;\r\n },\r\n\r\n stackableChartOptions: function(firstSeries, pane) {\r\n var stack = firstSeries.stack,\r\n isStacked100 = stack && stack.type === \"100%\",\r\n clip;\r\n if (defined(pane.options.clip)) {\r\n clip = pane.options.clip;\r\n } else if (isStacked100){\r\n clip = false;\r\n }\r\n return {\r\n isStacked: stack,\r\n isStacked100: isStacked100,\r\n clip: clip\r\n };\r\n },\r\n\r\n groupSeriesByCategoryAxis: function(series, callback) {\r\n var unique = {};\r\n var categoryAxes = $.map(series, function(s) {\r\n var name = s.categoryAxis || \"$$default$$\";\r\n if (!unique.hasOwnProperty(name)) {\r\n unique[name] = true;\r\n return name;\r\n }\r\n });\r\n\r\n function groupSeries(axis, axisIx) {\r\n return $.grep(series, function(s) {\r\n return (axisIx === 0 && !s.categoryAxis) || (s.categoryAxis == axis);\r\n });\r\n }\r\n\r\n var groups = [];\r\n for (var axisIx = 0; axisIx < categoryAxes.length; axisIx++) {\r\n var axis = categoryAxes[axisIx];\r\n var axisSeries = groupSeries(axis, axisIx);\r\n if (axisSeries.length === 0) {\r\n continue;\r\n }\r\n\r\n groups.push(axisSeries);\r\n }\r\n\r\n return groups;\r\n },\r\n\r\n createBarChart: function(series, pane) {\r\n if (series.length === 0) {\r\n return;\r\n }\r\n\r\n var plotArea = this,\r\n firstSeries = series[0],\r\n barChart = new BarChart(plotArea, extend({\r\n series: series,\r\n invertAxes: plotArea.invertAxes,\r\n gap: firstSeries.gap,\r\n spacing: firstSeries.spacing\r\n }, plotArea.stackableChartOptions(firstSeries, pane)));\r\n\r\n plotArea.appendChart(barChart, pane);\r\n },\r\n\r\n createRangeBarChart: function(series, pane) {\r\n if (series.length === 0) {\r\n return;\r\n }\r\n\r\n var plotArea = this,\r\n firstSeries = series[0],\r\n rangeColumnChart = new RangeBarChart(plotArea, {\r\n series: series,\r\n invertAxes: plotArea.invertAxes,\r\n gap: firstSeries.gap,\r\n spacing: firstSeries.spacing\r\n });\r\n\r\n plotArea.appendChart(rangeColumnChart, pane);\r\n },\r\n\r\n createBulletChart: function(series, pane) {\r\n if (series.length === 0) {\r\n return;\r\n }\r\n\r\n var plotArea = this,\r\n firstSeries = series[0],\r\n bulletChart = new BulletChart(plotArea, {\r\n series: series,\r\n invertAxes: plotArea.invertAxes,\r\n gap: firstSeries.gap,\r\n spacing: firstSeries.spacing,\r\n clip: pane.options.clip\r\n });\r\n\r\n plotArea.appendChart(bulletChart, pane);\r\n },\r\n\r\n createLineChart: function(series, pane) {\r\n if (series.length === 0) {\r\n return;\r\n }\r\n\r\n var plotArea = this,\r\n firstSeries = series[0],\r\n lineChart = new LineChart(plotArea, extend({\r\n invertAxes: plotArea.invertAxes,\r\n series: series\r\n }, plotArea.stackableChartOptions(firstSeries, pane)));\r\n\r\n plotArea.appendChart(lineChart, pane);\r\n },\r\n\r\n createAreaChart: function(series, pane) {\r\n if (series.length === 0) {\r\n return;\r\n }\r\n\r\n var plotArea = this,\r\n firstSeries = series[0],\r\n areaChart = new AreaChart(plotArea, extend({\r\n invertAxes: plotArea.invertAxes,\r\n series: series\r\n }, plotArea.stackableChartOptions(firstSeries, pane)));\r\n\r\n plotArea.appendChart(areaChart, pane);\r\n },\r\n\r\n createOHLCChart: function(series, pane) {\r\n if (series.length === 0) {\r\n return;\r\n }\r\n\r\n var plotArea = this,\r\n firstSeries = series[0],\r\n chart = new OHLCChart(plotArea, {\r\n invertAxes: plotArea.invertAxes,\r\n gap: firstSeries.gap,\r\n series: series,\r\n spacing: firstSeries.spacing,\r\n clip: pane.options.clip\r\n });\r\n\r\n plotArea.appendChart(chart, pane);\r\n },\r\n\r\n createCandlestickChart: function(series, pane) {\r\n if (series.length === 0) {\r\n return;\r\n }\r\n\r\n var plotArea = this,\r\n firstSeries = series[0],\r\n chart = new CandlestickChart(plotArea, {\r\n invertAxes: plotArea.invertAxes,\r\n gap: firstSeries.gap,\r\n series: series,\r\n spacing: firstSeries.spacing,\r\n clip: pane.options.clip\r\n });\r\n\r\n plotArea.appendChart(chart, pane);\r\n },\r\n\r\n createBoxPlotChart: function(series, pane) {\r\n if (series.length === 0) {\r\n return;\r\n }\r\n\r\n var plotArea = this,\r\n firstSeries = series[0],\r\n chart = new BoxPlotChart(plotArea, {\r\n invertAxes: plotArea.invertAxes,\r\n gap: firstSeries.gap,\r\n series: series,\r\n spacing: firstSeries.spacing,\r\n clip: pane.options.clip\r\n });\r\n\r\n plotArea.appendChart(chart, pane);\r\n },\r\n\r\n createWaterfallChart: function(series, pane) {\r\n if (series.length === 0) {\r\n return;\r\n }\r\n\r\n var plotArea = this,\r\n firstSeries = series[0],\r\n waterfallChart = new WaterfallChart(plotArea, {\r\n series: series,\r\n invertAxes: plotArea.invertAxes,\r\n gap: firstSeries.gap,\r\n spacing: firstSeries.spacing\r\n });\r\n\r\n plotArea.appendChart(waterfallChart, pane);\r\n },\r\n\r\n axisRequiresRounding: function(categoryAxisName, categoryAxisIndex) {\r\n var plotArea = this,\r\n centeredSeries = filterSeriesByType(plotArea.series, EQUALLY_SPACED_SERIES),\r\n seriesIx,\r\n seriesAxis;\r\n\r\n for (seriesIx = 0; seriesIx < plotArea.series.length; seriesIx++) {\r\n var currentSeries = plotArea.series[seriesIx];\r\n if (currentSeries.type === LINE || currentSeries.type === AREA) {\r\n var line = currentSeries.line;\r\n if (line && line.style === STEP) {\r\n centeredSeries.push(currentSeries);\r\n }\r\n }\r\n }\r\n\r\n for (seriesIx = 0; seriesIx < centeredSeries.length; seriesIx++) {\r\n seriesAxis = centeredSeries[seriesIx].categoryAxis || \"\";\r\n if (seriesAxis === categoryAxisName || (!seriesAxis && categoryAxisIndex === 0)) {\r\n return true;\r\n }\r\n }\r\n },\r\n\r\n createCategoryAxesLabels: function() {\r\n var axes = this.axes;\r\n for (var i = 0; i < axes.length; i++) {\r\n if (axes[i] instanceof CategoryAxis) {\r\n axes[i].createLabels();\r\n }\r\n }\r\n },\r\n\r\n createCategoryAxes: function(panes) {\r\n var plotArea = this,\r\n invertAxes = plotArea.invertAxes,\r\n definitions = [].concat(plotArea.options.categoryAxis),\r\n i, axisOptions, axisPane,\r\n categories, type, name,\r\n categoryAxis, axes = [],\r\n primaryAxis;\r\n\r\n for (i = 0; i < definitions.length; i++) {\r\n axisOptions = definitions[i];\r\n axisPane = plotArea.findPane(axisOptions.pane);\r\n\r\n if (inArray(axisPane, panes)) {\r\n name = axisOptions.name;\r\n categories = axisOptions.categories || [];\r\n type = axisOptions.type || \"\";\r\n axisOptions = deepExtend({\r\n vertical: invertAxes,\r\n axisCrossingValue: invertAxes ? MAX_VALUE : 0,\r\n _deferLabels: true\r\n }, axisOptions);\r\n\r\n if (!defined(axisOptions.justified)) {\r\n axisOptions.justified = plotArea.isJustified();\r\n }\r\n\r\n if (plotArea.axisRequiresRounding(name, i)) {\r\n axisOptions.justified = false;\r\n axisOptions.roundToBaseUnit = true;\r\n }\r\n\r\n if (isDateAxis(axisOptions, categories[0])) {\r\n categoryAxis = new DateCategoryAxis(axisOptions);\r\n } else {\r\n categoryAxis = new CategoryAxis(axisOptions);\r\n }\r\n\r\n if (name) {\r\n if (plotArea.namedCategoryAxes[name]) {\r\n throw new Error(\r\n \"Category axis with name \" + name + \" is already defined\"\r\n );\r\n }\r\n plotArea.namedCategoryAxes[name] = categoryAxis;\r\n }\r\n\r\n categoryAxis.axisIndex = i;\r\n axes.push(categoryAxis);\r\n plotArea.appendAxis(categoryAxis);\r\n }\r\n }\r\n\r\n primaryAxis = plotArea.categoryAxis || axes[0];\r\n plotArea.categoryAxis = primaryAxis;\r\n\r\n if (invertAxes) {\r\n plotArea.axisY = primaryAxis;\r\n } else {\r\n plotArea.axisX = primaryAxis;\r\n }\r\n },\r\n\r\n isJustified: function() {\r\n var plotArea = this,\r\n series = plotArea.series,\r\n i, currentSeries;\r\n\r\n for (i = 0; i < series.length; i++) {\r\n currentSeries = series[i];\r\n if (!inArray(currentSeries.type, [AREA, VERTICAL_AREA])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n createValueAxes: function(panes) {\r\n var plotArea = this,\r\n tracker = plotArea.valueAxisRangeTracker,\r\n defaultRange = tracker.query(),\r\n definitions = [].concat(plotArea.options.valueAxis),\r\n invertAxes = plotArea.invertAxes,\r\n baseOptions = { vertical: !invertAxes },\r\n axisOptions, axisPane, valueAxis,\r\n primaryAxis, axes = [], range,\r\n axisType, defaultAxisRange,\r\n name, i;\r\n\r\n if (plotArea.stack100) {\r\n baseOptions.roundToMajorUnit = false;\r\n baseOptions.labels = { format: \"P0\" };\r\n }\r\n\r\n for (i = 0; i < definitions.length; i++) {\r\n axisOptions = definitions[i];\r\n axisPane = plotArea.findPane(axisOptions.pane);\r\n\r\n if (inArray(axisPane, panes)) {\r\n name = axisOptions.name;\r\n defaultAxisRange = equalsIgnoreCase(axisOptions.type, LOGARITHMIC) ? {min: 0.1, max: 1} : { min: 0, max: 1 };\r\n range = tracker.query(name) || defaultRange || defaultAxisRange;\r\n\r\n if (i === 0 && range && defaultRange) {\r\n range.min = math.min(range.min, defaultRange.min);\r\n range.max = math.max(range.max, defaultRange.max);\r\n }\r\n\r\n if (equalsIgnoreCase(axisOptions.type, LOGARITHMIC)) {\r\n axisType = LogarithmicAxis;\r\n } else {\r\n axisType = NumericAxis;\r\n }\r\n\r\n valueAxis = new axisType(range.min, range.max,\r\n deepExtend({}, baseOptions, axisOptions)\r\n );\r\n\r\n if (name) {\r\n if (plotArea.namedValueAxes[name]) {\r\n throw new Error(\r\n \"Value axis with name \" + name + \" is already defined\"\r\n );\r\n }\r\n plotArea.namedValueAxes[name] = valueAxis;\r\n }\r\n valueAxis.axisIndex = i;\r\n\r\n axes.push(valueAxis);\r\n plotArea.appendAxis(valueAxis);\r\n }\r\n }\r\n\r\n primaryAxis = plotArea.valueAxis || axes[0];\r\n plotArea.valueAxis = primaryAxis;\r\n\r\n if (invertAxes) {\r\n plotArea.axisX = primaryAxis;\r\n } else {\r\n plotArea.axisY = primaryAxis;\r\n }\r\n },\r\n\r\n click: function(chart, e) {\r\n var plotArea = this,\r\n coords = chart._eventCoordinates(e),\r\n point = new Point2D(coords.x, coords.y),\r\n pane = plotArea.pointPane(point),\r\n allAxes,\r\n i,\r\n axis,\r\n categories = [],\r\n values = [];\r\n\r\n if (!pane) {\r\n return;\r\n }\r\n\r\n allAxes = pane.axes;\r\n for (i = 0; i < allAxes.length; i++) {\r\n axis = allAxes[i];\r\n if (axis.getValue) {\r\n appendIfNotNull(values, axis.getValue(point));\r\n } else {\r\n appendIfNotNull(categories, axis.getCategory(point));\r\n }\r\n }\r\n\r\n if (categories.length === 0) {\r\n appendIfNotNull(\r\n categories, plotArea.categoryAxis.getCategory(point)\r\n );\r\n }\r\n\r\n if (categories.length > 0 && values.length > 0) {\r\n chart.trigger(PLOT_AREA_CLICK, {\r\n element: $(e.target),\r\n originalEvent: e,\r\n category: singleItemOrArray(categories),\r\n value: singleItemOrArray(values)\r\n });\r\n }\r\n },\r\n\r\n pointPane: function(point) {\r\n var plotArea = this,\r\n panes = plotArea.panes,\r\n currentPane,\r\n i;\r\n\r\n for (i = 0; i < panes.length; i++) {\r\n currentPane = panes[i];\r\n if (currentPane.contentBox.containsPoint(point)) {\r\n return currentPane;\r\n }\r\n }\r\n }\r\n });\r\n\r\n var AxisGroupRangeTracker = Class.extend({\r\n init: function() {\r\n var tracker = this;\r\n\r\n tracker.axisRanges = {};\r\n },\r\n\r\n update: function(chartAxisRanges) {\r\n var tracker = this,\r\n axisRanges = tracker.axisRanges,\r\n range,\r\n chartRange,\r\n axisName;\r\n\r\n for (axisName in chartAxisRanges) {\r\n range = axisRanges[axisName];\r\n chartRange = chartAxisRanges[axisName];\r\n axisRanges[axisName] = range =\r\n range || { min: MAX_VALUE, max: MIN_VALUE };\r\n\r\n range.min = math.min(range.min, chartRange.min);\r\n range.max = math.max(range.max, chartRange.max);\r\n }\r\n },\r\n\r\n reset: function(axisName) {\r\n this.axisRanges[axisName] = undefined;\r\n },\r\n\r\n query: function(axisName) {\r\n return this.axisRanges[axisName];\r\n }\r\n });\r\n\r\n var XYPlotArea = PlotAreaBase.extend({\r\n init: function(series, options) {\r\n var plotArea = this;\r\n\r\n plotArea.namedXAxes = {};\r\n plotArea.namedYAxes = {};\r\n\r\n plotArea.xAxisRangeTracker = new AxisGroupRangeTracker();\r\n plotArea.yAxisRangeTracker = new AxisGroupRangeTracker();\r\n\r\n PlotAreaBase.fn.init.call(plotArea, series, options);\r\n },\r\n\r\n options: {\r\n xAxis: {},\r\n yAxis: {}\r\n },\r\n\r\n render: function(panes) {\r\n var plotArea = this,\r\n seriesByPane = plotArea.groupSeriesByPane(),\r\n i, pane, paneSeries, filteredSeries;\r\n\r\n panes = panes || plotArea.panes;\r\n\r\n for (i = 0; i < panes.length; i++) {\r\n pane = panes[i];\r\n paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\r\n plotArea.addToLegend(paneSeries);\r\n filteredSeries = plotArea.filterVisibleSeries(paneSeries);\r\n\r\n if (!filteredSeries) {\r\n continue;\r\n }\r\n\r\n plotArea.createScatterChart(\r\n filterSeriesByType(filteredSeries, SCATTER),\r\n pane\r\n );\r\n\r\n plotArea.createScatterLineChart(\r\n filterSeriesByType(filteredSeries, SCATTER_LINE),\r\n pane\r\n );\r\n\r\n plotArea.createBubbleChart(\r\n filterSeriesByType(filteredSeries, BUBBLE),\r\n pane\r\n );\r\n }\r\n\r\n plotArea.createAxes(panes);\r\n },\r\n\r\n appendChart: function(chart, pane) {\r\n var plotArea = this;\r\n\r\n plotArea.xAxisRangeTracker.update(chart.xAxisRanges);\r\n plotArea.yAxisRangeTracker.update(chart.yAxisRanges);\r\n\r\n PlotAreaBase.fn.appendChart.call(plotArea, chart, pane);\r\n },\r\n\r\n removeAxis: function(axis) {\r\n var plotArea = this,\r\n axisName = axis.options.name;\r\n\r\n PlotAreaBase.fn.removeAxis.call(plotArea, axis);\r\n\r\n if (axis.options.vertical) {\r\n plotArea.yAxisRangeTracker.reset(axisName);\r\n delete plotArea.namedYAxes[axisName];\r\n } else {\r\n plotArea.xAxisRangeTracker.reset(axisName);\r\n delete plotArea.namedXAxes[axisName];\r\n }\r\n\r\n if (axis === plotArea.axisX) {\r\n delete plotArea.axisX;\r\n }\r\n\r\n if (axis === plotArea.axisY) {\r\n delete plotArea.axisY;\r\n }\r\n },\r\n\r\n // TODO: Refactor, optionally use series.pane option\r\n seriesPaneName: function(series) {\r\n var plotArea = this,\r\n options = plotArea.options,\r\n xAxisName = series.xAxis,\r\n xAxisOptions = [].concat(options.xAxis),\r\n xAxis = $.grep(xAxisOptions, function(a) { return a.name === xAxisName; })[0],\r\n yAxisName = series.yAxis,\r\n yAxisOptions = [].concat(options.yAxis),\r\n yAxis = $.grep(yAxisOptions, function(a) { return a.name === yAxisName; })[0],\r\n panes = options.panes || [{}],\r\n defaultPaneName = panes[0].name || \"default\",\r\n paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\r\n\r\n return paneName;\r\n },\r\n\r\n createScatterChart: function(series, pane) {\r\n var plotArea = this;\r\n\r\n if (series.length > 0) {\r\n plotArea.appendChart(\r\n new ScatterChart(plotArea, { series: series, clip: pane.options.clip }),\r\n pane\r\n );\r\n }\r\n },\r\n\r\n createScatterLineChart: function(series, pane) {\r\n var plotArea = this;\r\n\r\n if (series.length > 0) {\r\n plotArea.appendChart(\r\n new ScatterLineChart(plotArea, { series: series, clip: pane.options.clip }),\r\n pane\r\n );\r\n }\r\n },\r\n\r\n createBubbleChart: function(series, pane) {\r\n var plotArea = this;\r\n\r\n if (series.length > 0) {\r\n plotArea.appendChart(\r\n new BubbleChart(plotArea, { series: series, clip: pane.options.clip }),\r\n pane\r\n );\r\n }\r\n },\r\n\r\n createXYAxis: function(options, vertical, axisIndex) {\r\n var plotArea = this,\r\n axisName = options.name,\r\n namedAxes = vertical ? plotArea.namedYAxes : plotArea.namedXAxes,\r\n tracker = vertical ? plotArea.yAxisRangeTracker : plotArea.xAxisRangeTracker,\r\n axisOptions = deepExtend({}, options, { vertical: vertical }),\r\n isLog = equalsIgnoreCase(axisOptions.type, LOGARITHMIC),\r\n defaultRange = tracker.query(),\r\n defaultAxisRange = isLog ? {min: 0.1, max: 1} : { min: 0, max: 1 },\r\n range = tracker.query(axisName) || defaultRange || defaultAxisRange,\r\n axis,\r\n axisType,\r\n seriesIx,\r\n series = plotArea.series,\r\n currentSeries,\r\n seriesAxisName,\r\n firstPointValue,\r\n typeSamples = [axisOptions.min, axisOptions.max],\r\n inferredDate,\r\n i;\r\n\r\n for (seriesIx = 0; seriesIx < series.length; seriesIx++) {\r\n currentSeries = series[seriesIx];\r\n seriesAxisName = currentSeries[vertical ? \"yAxis\" : \"xAxis\"];\r\n if ((seriesAxisName == axisOptions.name) || (axisIndex === 0 && !seriesAxisName)) {\r\n firstPointValue = SeriesBinder.current.bindPoint(currentSeries, 0).valueFields;\r\n typeSamples.push(firstPointValue[vertical ? \"y\" : \"x\"]);\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (axisIndex === 0 && defaultRange) {\r\n range.min = math.min(range.min, defaultRange.min);\r\n range.max = math.max(range.max, defaultRange.max);\r\n }\r\n\r\n for (i = 0; i < typeSamples.length; i++) {\r\n if (typeSamples[i] instanceof Date) {\r\n inferredDate = true;\r\n break;\r\n }\r\n }\r\n\r\n if (equalsIgnoreCase(axisOptions.type, DATE) || (!axisOptions.type && inferredDate)) {\r\n axisType = DateValueAxis;\r\n } else if (isLog){\r\n axisType = LogarithmicAxis;\r\n } else {\r\n axisType = NumericAxis;\r\n }\r\n\r\n axis = new axisType(range.min, range.max, axisOptions);\r\n\r\n if (axisName) {\r\n if (namedAxes[axisName]) {\r\n throw new Error(\r\n (vertical ? \"Y\" : \"X\") +\r\n \" axis with name \" + axisName + \" is already defined\"\r\n );\r\n }\r\n namedAxes[axisName] = axis;\r\n }\r\n\r\n plotArea.appendAxis(axis);\r\n\r\n return axis;\r\n },\r\n\r\n createAxes: function(panes) {\r\n var plotArea = this,\r\n options = plotArea.options,\r\n axisPane,\r\n xAxesOptions = [].concat(options.xAxis),\r\n xAxes = [],\r\n yAxesOptions = [].concat(options.yAxis),\r\n yAxes = [];\r\n\r\n each(xAxesOptions, function(i) {\r\n axisPane = plotArea.findPane(this.pane);\r\n if (inArray(axisPane, panes)) {\r\n xAxes.push(plotArea.createXYAxis(this, false, i));\r\n }\r\n });\r\n\r\n each(yAxesOptions, function(i) {\r\n axisPane = plotArea.findPane(this.pane);\r\n if (inArray(axisPane, panes)) {\r\n yAxes.push(plotArea.createXYAxis(this, true, i));\r\n }\r\n });\r\n\r\n plotArea.axisX = plotArea.axisX || xAxes[0];\r\n plotArea.axisY = plotArea.axisY || yAxes[0];\r\n },\r\n\r\n click: function(chart, e) {\r\n var plotArea = this,\r\n coords = chart._eventCoordinates(e),\r\n point = new Point2D(coords.x, coords.y),\r\n allAxes = plotArea.axes,\r\n i,\r\n length = allAxes.length,\r\n axis,\r\n xValues = [],\r\n yValues = [],\r\n currentValue,\r\n values;\r\n\r\n for (i = 0; i < length; i++) {\r\n axis = allAxes[i];\r\n values = axis.options.vertical ? yValues : xValues;\r\n currentValue = axis.getValue(point);\r\n if (currentValue !== null) {\r\n values.push(currentValue);\r\n }\r\n }\r\n\r\n if (xValues.length > 0 && yValues.length > 0) {\r\n chart.trigger(PLOT_AREA_CLICK, {\r\n element: $(e.target),\r\n originalEvent: e,\r\n x: singleItemOrArray(xValues),\r\n y: singleItemOrArray(yValues)\r\n });\r\n }\r\n }\r\n });\r\n\r\n var PiePlotArea = PlotAreaBase.extend({\r\n render: function() {\r\n var plotArea = this,\r\n series = plotArea.series;\r\n\r\n plotArea.createPieChart(series);\r\n },\r\n\r\n createPieChart: function(series) {\r\n var plotArea = this,\r\n firstSeries = series[0],\r\n pieChart = new PieChart(plotArea, {\r\n series: series,\r\n padding: firstSeries.padding,\r\n startAngle: firstSeries.startAngle,\r\n connectors: firstSeries.connectors,\r\n legend: plotArea.options.legend\r\n });\r\n\r\n plotArea.appendChart(pieChart);\r\n },\r\n\r\n appendChart: function(chart, pane) {\r\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\r\n append(this.options.legend.items, chart.legendItems);\r\n }\r\n });\r\n\r\n var DonutPlotArea = PiePlotArea.extend({\r\n render: function() {\r\n var plotArea = this,\r\n series = plotArea.series;\r\n\r\n plotArea.createDonutChart(series);\r\n },\r\n\r\n createDonutChart: function(series) {\r\n var plotArea = this,\r\n firstSeries = series[0],\r\n donutChart = new DonutChart(plotArea, {\r\n series: series,\r\n padding: firstSeries.padding,\r\n connectors: firstSeries.connectors,\r\n legend: plotArea.options.legend\r\n });\r\n\r\n plotArea.appendChart(donutChart);\r\n }\r\n });\r\n\r\n var PieAnimation = draw.Animation.extend({\r\n options: {\r\n easing: \"easeOutElastic\",\r\n duration: INITIAL_ANIMATION_DURATION\r\n },\r\n\r\n setup: function() {\r\n this.element.transform(geom.transform()\r\n .scale(START_SCALE, START_SCALE, this.options.center)\r\n );\r\n },\r\n\r\n step: function(pos) {\r\n this.element.transform(geom.transform()\r\n .scale(pos, pos, this.options.center)\r\n );\r\n }\r\n });\r\n draw.AnimationFactory.current.register(PIE, PieAnimation);\r\n\r\n var BubbleAnimation = draw.Animation.extend({\r\n options: {\r\n easing: \"easeOutElastic\"\r\n },\r\n\r\n setup: function() {\r\n var center = this.center = this.element.bbox().center();\r\n this.element.transform(geom.transform()\r\n .scale(START_SCALE, START_SCALE, center)\r\n );\r\n },\r\n\r\n step: function(pos) {\r\n this.element.transform(geom.transform()\r\n .scale(pos, pos, this.center)\r\n );\r\n }\r\n });\r\n draw.AnimationFactory.current.register(BUBBLE, BubbleAnimation);\r\n\r\n var Highlight = Class.extend({\r\n init: function() {\r\n this._points = [];\r\n },\r\n\r\n destroy: function() {\r\n this._points = [];\r\n },\r\n\r\n show: function(points) {\r\n points = [].concat(points);\r\n this.hide();\r\n\r\n for (var i = 0; i < points.length; i++) {\r\n var point = points[i];\r\n if (point && point.toggleHighlight && point.hasHighlight()) {\r\n this.togglePointHighlight(point, true);\r\n this._points.push(point);\r\n }\r\n }\r\n },\r\n\r\n togglePointHighlight: function(point, show) {\r\n var toggleHandler = (point.options.highlight || {}).toggle;\r\n if (toggleHandler) {\r\n var eventArgs = {\r\n category: point.category,\r\n series: point.series,\r\n dataItem: point.dataItem,\r\n value: point.value,\r\n preventDefault: preventDefault,\r\n visual: point.highlightVisual(),\r\n show: show\r\n };\r\n toggleHandler(eventArgs);\r\n if (!eventArgs._defaultPrevented) {\r\n point.toggleHighlight(show);\r\n }\r\n } else {\r\n point.toggleHighlight(show);\r\n }\r\n },\r\n\r\n hide: function() {\r\n var points = this._points;\r\n while (points.length) {\r\n this.togglePointHighlight(points.pop(), false);\r\n }\r\n },\r\n\r\n isHighlighted: function(element) {\r\n var points = this._points;\r\n\r\n for (var i = 0; i < points.length; i++) {\r\n var point = points[i];\r\n if (element == point) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n });\r\n\r\n var BaseTooltip = Observable.extend({\r\n init: function(chartElement, options) {\r\n var tooltip = this;\r\n\r\n Observable.fn.init.call(tooltip);\r\n\r\n tooltip.options = deepExtend({}, tooltip.options, options);\r\n\r\n tooltip.chartElement = chartElement;\r\n\r\n tooltip.template = BaseTooltip.template;\r\n if (!tooltip.template) {\r\n tooltip.template = BaseTooltip.template = renderTemplate(\r\n \"<div class='\" + CSS_PREFIX + \"tooltip \" + CSS_PREFIX + \"chart-tooltip' \" +\r\n \"style='display:none; position: absolute; font: #= d.font #;\" +\r\n \"border: #= d.border.width #px solid;\" +\r\n \"opacity: #= d.opacity #; filter: alpha(opacity=#= d.opacity * 100 #);'>\" +\r\n \"</div>\"\r\n );\r\n }\r\n\r\n var padding = getSpacing(tooltip.options.padding || {}, \"auto\");\r\n tooltip.element = $(tooltip.template(tooltip.options)).css({\r\n \"padding-top\": padding.top, \"padding-right\": padding.right,\r\n \"padding-bottom\": padding.bottom, \"padding-left\": padding.left\r\n });\r\n\r\n tooltip.move = proxy(tooltip.move, tooltip);\r\n tooltip._mouseleave = proxy(tooltip._mouseleave, tooltip);\r\n\r\n var mobileScrollerSelector = kendo.format(\"[{0}='content'],[{0}='scroller']\", kendo.attr(\"role\"));\r\n tooltip._mobileScroller = chartElement.closest(mobileScrollerSelector).data(\"kendoMobileScroller\");\r\n },\r\n\r\n destroy: function() {\r\n this._clearShowTimeout();\r\n\r\n if (this.element) {\r\n this.element.off(MOUSELEAVE_NS).remove();\r\n this.element = null;\r\n }\r\n },\r\n\r\n options: {\r\n border: {\r\n width: 1\r\n },\r\n opacity: 1,\r\n animation: {\r\n duration: TOOLTIP_ANIMATION_DURATION\r\n }\r\n },\r\n\r\n move: function() {\r\n var tooltip = this,\r\n options = tooltip.options,\r\n element = tooltip.element,\r\n offset;\r\n\r\n if (!tooltip.anchor || !tooltip.element) {\r\n return;\r\n }\r\n\r\n offset = tooltip._offset();\r\n if (!tooltip.visible) {\r\n element.css({ top: offset.top, left: offset.left });\r\n }\r\n\r\n tooltip.visible = true;\r\n tooltip._ensureElement(document.body);\r\n element\r\n .stop(true, true)\r\n .show()\r\n .animate({\r\n left: offset.left,\r\n top: offset.top\r\n }, options.animation.duration);\r\n },\r\n\r\n _clearShowTimeout: function() {\r\n if (this.showTimeout) {\r\n clearTimeout(this.showTimeout);\r\n this.showTimeout = null;\r\n }\r\n },\r\n\r\n _padding: function() {\r\n if (!this._chartPadding) {\r\n var chartElement = this.chartElement;\r\n this._chartPadding = {\r\n top: parseInt(chartElement.css(\"paddingTop\"), 10),\r\n left: parseInt(chartElement.css(\"paddingLeft\"), 10)\r\n };\r\n }\r\n\r\n return this._chartPadding;\r\n },\r\n\r\n _offset: function() {\r\n var tooltip = this,\r\n size = tooltip._measure(),\r\n anchor = tooltip.anchor,\r\n chartPadding = tooltip._padding(),\r\n chartOffset = tooltip.chartElement.offset(),\r\n top = round(anchor.y + chartPadding.top + chartOffset.top),\r\n left = round(anchor.x + chartPadding.left + chartOffset.left),\r\n zoomLevel = kendo.support.zoomLevel(),\r\n viewport = $(window),\r\n scrollTop = window.pageYOffset || document.documentElement.scrollTop || 0,\r\n scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || 0,\r\n movable = (this._mobileScroller || {}).movable;\r\n\r\n if (!movable || movable.scale === 1) {\r\n top += tooltip._fit(top - scrollTop, size.height, viewport.outerHeight() / zoomLevel);\r\n left += tooltip._fit(left - scrollLeft, size.width, viewport.outerWidth() / zoomLevel);\r\n } else {\r\n var transform = geom.transform().scale(movable.scale, movable.scale, [movable.x, movable.y]);\r\n var point = new geom.Point(left, top).transform(transform);\r\n left = point.x;\r\n top = point.y;\r\n }\r\n\r\n return {\r\n top: top,\r\n left: left\r\n };\r\n },\r\n\r\n setStyle: function(options, point) {\r\n var background = options.background;\r\n var border = options.border.color;\r\n\r\n if (point) {\r\n var pointColor = point.color || point.options.color;\r\n background = valueOrDefault(background, pointColor);\r\n border = valueOrDefault(border, pointColor);\r\n }\r\n\r\n if (!defined(options.color)) {\r\n var brightness = new Color(background).percBrightness();\r\n\r\n this.element.toggleClass(\r\n CSS_PREFIX + TOOLTIP_INVERSE,\r\n brightness > 180\r\n );\r\n }\r\n\r\n this.element.css({\r\n backgroundColor: background,\r\n borderColor: border,\r\n font: options.font,\r\n color: options.color,\r\n opacity: options.opacity,\r\n borderWidth: options.border.width\r\n });\r\n },\r\n\r\n show: function() {\r\n this._clearShowTimeout();\r\n this.showTimeout = setTimeout(this.move, TOOLTIP_SHOW_DELAY);\r\n },\r\n\r\n hide: function() {\r\n var tooltip = this;\r\n\r\n clearTimeout(tooltip.showTimeout);\r\n tooltip._hideElement();\r\n\r\n if (tooltip.visible) {\r\n tooltip.point = null;\r\n tooltip.visible = false;\r\n tooltip.index = null;\r\n }\r\n },\r\n\r\n _measure: function() {\r\n this._ensureElement();\r\n\r\n var size = {\r\n width: this.element.outerWidth(),\r\n height: this.element.outerHeight()\r\n };\r\n\r\n return size;\r\n },\r\n\r\n _ensureElement: function() {\r\n if (this.element) {\r\n this.element\r\n .appendTo(document.body)\r\n .on(MOUSELEAVE_NS, this._mouseleave);\r\n }\r\n },\r\n\r\n _mouseleave: function(e) {\r\n var target = e.relatedTarget;\r\n var chart = this.chartElement[0];\r\n if (target && target !== chart && !$.contains(chart, target)) {\r\n this.trigger(LEAVE);\r\n this.hide();\r\n }\r\n },\r\n\r\n _hideElement: function() {\r\n var tooltip = this;\r\n var element = this.element;\r\n if (element) {\r\n element.fadeOut({\r\n always: function(){\r\n if (!tooltip.visible) {\r\n element.off(MOUSELEAVE_NS).remove();\r\n }\r\n }\r\n });\r\n }\r\n },\r\n\r\n _pointContent: function(point) {\r\n var tooltip = this,\r\n options = deepExtend({}, tooltip.options, point.options.tooltip),\r\n content, tooltipTemplate;\r\n\r\n if (defined(point.value)) {\r\n content = point.value.toString();\r\n }\r\n\r\n if (options.template) {\r\n tooltipTemplate = template(options.template);\r\n content = tooltipTemplate({\r\n value: point.value,\r\n category: point.category,\r\n series: point.series,\r\n dataItem: point.dataItem,\r\n percentage: point.percentage,\r\n runningTotal: point.runningTotal,\r\n total: point.total,\r\n low: point.low,\r\n high: point.high,\r\n xLow: point.xLow,\r\n xHigh: point.xHigh,\r\n yLow: point.yLow,\r\n yHigh: point.yHigh\r\n });\r\n } else if (options.format) {\r\n content = point.formatValue(options.format);\r\n }\r\n\r\n return content;\r\n },\r\n\r\n _pointAnchor: function(point) {\r\n var size = this._measure();\r\n\r\n return point.tooltipAnchor(size.width, size.height);\r\n },\r\n\r\n _fit: function(offset, size, viewPortSize) {\r\n var output = 0;\r\n\r\n if (offset + size > viewPortSize) {\r\n output = viewPortSize - (offset + size);\r\n }\r\n\r\n if (offset < 0) {\r\n output = -offset;\r\n }\r\n\r\n return output;\r\n }\r\n });\r\n\r\n var Tooltip = BaseTooltip.extend({\r\n show: function(point) {\r\n var tooltip = this,\r\n options = deepExtend({}, tooltip.options, point.options.tooltip);\r\n\r\n if (!point || !point.tooltipAnchor || !tooltip.element) {\r\n return;\r\n }\r\n\r\n tooltip.element.html(tooltip._pointContent(point));\r\n tooltip.anchor = tooltip._pointAnchor(point);\r\n\r\n if (tooltip.anchor) {\r\n tooltip.setStyle(options, point);\r\n BaseTooltip.fn.show.call(tooltip, point);\r\n } else {\r\n tooltip.hide();\r\n }\r\n }\r\n });\r\n\r\n var SharedTooltip = BaseTooltip.extend({\r\n init: function(element, plotArea, options) {\r\n var tooltip = this;\r\n\r\n BaseTooltip.fn.init.call(tooltip, element, options);\r\n\r\n tooltip.plotArea = plotArea;\r\n },\r\n\r\n options: {\r\n sharedTemplate:\r\n \"<table>\" +\r\n \"<th colspan='2'>#= categoryText #</th>\" +\r\n \"# for(var i = 0; i < points.length; i++) { #\" +\r\n \"# var point = points[i]; #\" +\r\n \"<tr>\" +\r\n \"# if(point.series.name) { # \" +\r\n \"<td> #= point.series.name #:</td>\" +\r\n \"# } #\" +\r\n \"<td>#= content(point) #</td>\" +\r\n \"</tr>\" +\r\n \"# } #\" +\r\n \"</table>\",\r\n categoryFormat: \"{0:d}\"\r\n },\r\n\r\n showAt: function(points, coords) {\r\n var tooltip = this,\r\n options = tooltip.options,\r\n plotArea = tooltip.plotArea,\r\n axis = plotArea.categoryAxis,\r\n index = axis.pointCategoryIndex(coords),\r\n category = axis.getCategory(coords),\r\n slot = axis.getSlot(index),\r\n content;\r\n\r\n points = $.grep(points, function(p) {\r\n var tooltip = p.series.tooltip,\r\n excluded = tooltip && tooltip.visible === false;\r\n\r\n return !excluded;\r\n });\r\n\r\n if (points.length > 0) {\r\n content = tooltip._content(points, category);\r\n tooltip.element.html(content);\r\n tooltip.anchor = tooltip._slotAnchor(coords, slot);\r\n tooltip.setStyle(options, points[0]);\r\n\r\n BaseTooltip.fn.show.call(tooltip);\r\n }\r\n },\r\n\r\n _slotAnchor: function(point, slot) {\r\n var tooltip = this,\r\n plotArea = tooltip.plotArea,\r\n axis = plotArea.categoryAxis,\r\n anchor,\r\n size = this._measure(),\r\n hCenter = point.y - size.height / 2;\r\n\r\n if (axis.options.vertical) {\r\n anchor = Point2D(point.x, hCenter);\r\n } else {\r\n anchor = Point2D(slot.center().x, hCenter);\r\n }\r\n\r\n return anchor;\r\n },\r\n\r\n _content: function(points, category) {\r\n var tooltip = this,\r\n template,\r\n content;\r\n\r\n template = kendo.template(tooltip.options.sharedTemplate);\r\n content = template({\r\n points: points,\r\n category: category,\r\n categoryText: autoFormat(tooltip.options.categoryFormat, category),\r\n content: tooltip._pointContent\r\n });\r\n\r\n return content;\r\n }\r\n });\r\n\r\n var Crosshair = ChartElement.extend({\r\n init: function(axis, options) {\r\n ChartElement.fn.init.call(this, options);\r\n\r\n this.axis = axis;\r\n this.stickyMode = axis instanceof CategoryAxis;\r\n },\r\n\r\n options: {\r\n color: BLACK,\r\n width: 1,\r\n zIndex: -1,\r\n tooltip: {\r\n visible: false\r\n }\r\n },\r\n\r\n showAt: function(point) {\r\n var crosshair = this;\r\n\r\n this.point = point;\r\n this.moveLine();\r\n this.line.visible(true);\r\n\r\n var tooltipOptions = this.options.tooltip;\r\n if (tooltipOptions.visible) {\r\n if (!this.tooltip) {\r\n this.tooltip = new CrosshairTooltip(this,\r\n deepExtend({}, tooltipOptions, { stickyMode: this.stickyMode })\r\n );\r\n }\r\n this.tooltip.showAt(point);\r\n }\r\n },\r\n\r\n hide: function() {\r\n this.line.visible(false);\r\n\r\n if (this.tooltip) {\r\n this.tooltip.hide();\r\n }\r\n },\r\n\r\n moveLine: function() {\r\n var crosshair = this,\r\n axis = crosshair.axis,\r\n vertical = axis.options.vertical,\r\n box = crosshair.getBox(),\r\n point = crosshair.point,\r\n dim = vertical ? Y : X,\r\n slot, lineStart, lineEnd;\r\n\r\n lineStart = new geom.Point(box.x1, box.y1);\r\n if (vertical) {\r\n lineEnd = new geom.Point(box.x2, box.y1);\r\n } else {\r\n lineEnd = new geom.Point(box.x1, box.y2);\r\n }\r\n\r\n if (point) {\r\n if (crosshair.stickyMode) {\r\n slot = axis.getSlot(axis.pointCategoryIndex(point));\r\n lineStart[dim] = lineEnd[dim] = slot.center()[dim];\r\n } else {\r\n lineStart[dim] = lineEnd[dim] = point[dim];\r\n }\r\n }\r\n\r\n crosshair.box = box;\r\n\r\n this.line.moveTo(lineStart).lineTo(lineEnd);\r\n },\r\n\r\n getBox: function() {\r\n var crosshair = this,\r\n axis = crosshair.axis,\r\n axes = axis.pane.axes,\r\n length = axes.length,\r\n vertical = axis.options.vertical,\r\n box = axis.lineBox().clone(),\r\n dim = vertical ? X : Y,\r\n axisLineBox, currentAxis, i;\r\n\r\n for (i = 0; i < length; i++) {\r\n currentAxis = axes[i];\r\n if (currentAxis.options.vertical != vertical) {\r\n if (!axisLineBox) {\r\n axisLineBox = currentAxis.lineBox().clone();\r\n } else {\r\n axisLineBox.wrap(currentAxis.lineBox());\r\n }\r\n }\r\n }\r\n\r\n box[dim + 1] = axisLineBox[dim + 1];\r\n box[dim + 2] = axisLineBox[dim + 2];\r\n\r\n return box;\r\n },\r\n\r\n createVisual: function() {\r\n ChartElement.fn.createVisual.call(this);\r\n\r\n var options = this.options;\r\n this.line = new draw.Path({\r\n stroke: {\r\n color: options.color,\r\n width: options.width,\r\n opacity: options.opacity,\r\n dashType: options.dashType\r\n },\r\n visible: false\r\n });\r\n\r\n this.moveLine();\r\n this.visual.append(this.line);\r\n },\r\n\r\n destroy: function() {\r\n var crosshair = this;\r\n if (crosshair.tooltip) {\r\n crosshair.tooltip.destroy();\r\n }\r\n\r\n ChartElement.fn.destroy.call(crosshair);\r\n }\r\n });\r\n\r\n var CrosshairTooltip = BaseTooltip.extend({\r\n init: function(crosshair, options) {\r\n var tooltip = this,\r\n chartElement = crosshair.axis.getRoot().chart.element;\r\n\r\n tooltip.crosshair = crosshair;\r\n\r\n BaseTooltip.fn.init.call(tooltip, chartElement, deepExtend({},\r\n tooltip.options, {\r\n background: crosshair.axis.plotArea.options.seriesColors[0]\r\n },\r\n options));\r\n\r\n tooltip.setStyle(tooltip.options);\r\n },\r\n\r\n options: {\r\n padding: 10\r\n },\r\n\r\n showAt: function(point) {\r\n var tooltip = this,\r\n element = tooltip.element;\r\n\r\n if (element) {\r\n tooltip.point = point;\r\n tooltip.element.html(tooltip.content(point));\r\n tooltip.anchor = tooltip.getAnchor();\r\n\r\n tooltip.move();\r\n }\r\n },\r\n\r\n move: function() {\r\n var tooltip = this,\r\n element = tooltip.element,\r\n offset = tooltip._offset();\r\n\r\n tooltip._ensureElement();\r\n element.css({ top: offset.top, left: offset.left }).show();\r\n },\r\n\r\n content: function(point) {\r\n var tooltip = this,\r\n options = tooltip.options,\r\n axis = tooltip.crosshair.axis,\r\n axisOptions = axis.options,\r\n content, value, tooltipTemplate;\r\n\r\n value = content = axis[options.stickyMode ? \"getCategory\" : \"getValue\"](point);\r\n\r\n if (options.template) {\r\n tooltipTemplate = template(options.template);\r\n content = tooltipTemplate({\r\n value: value\r\n });\r\n } else if (options.format) {\r\n content = autoFormat(options.format, value);\r\n } else {\r\n if (axisOptions.type === DATE) {\r\n content = autoFormat(axisOptions.labels.dateFormats[axisOptions.baseUnit], value);\r\n }\r\n }\r\n\r\n return content;\r\n },\r\n\r\n getAnchor: function() {\r\n var tooltip = this,\r\n options = tooltip.options,\r\n position = options.position,\r\n crosshair = this.crosshair,\r\n vertical = !crosshair.axis.options.vertical,\r\n lineBox = crosshair.line.bbox(),\r\n size = this._measure(),\r\n halfWidth = size.width / 2,\r\n halfHeight = size.height / 2,\r\n padding = options.padding,\r\n anchor;\r\n\r\n if (vertical) {\r\n if (position === BOTTOM) {\r\n anchor = lineBox.bottomLeft()\r\n .translate(-halfWidth, padding);\r\n } else {\r\n anchor = lineBox.topLeft()\r\n .translate(-halfWidth, -size.height - padding);\r\n }\r\n } else {\r\n if (position === LEFT) {\r\n anchor = lineBox.topLeft()\r\n .translate(-size.width - padding, -halfHeight);\r\n } else {\r\n anchor = lineBox.topRight()\r\n .translate(padding, -halfHeight);\r\n }\r\n }\r\n\r\n return anchor;\r\n },\r\n\r\n hide: function() {\r\n this.element.hide();\r\n this.point = null;\r\n },\r\n\r\n destroy: function() {\r\n BaseTooltip.fn.destroy.call(this);\r\n\r\n this.point = null;\r\n }\r\n });\r\n\r\n var Aggregates = {\r\n min: function(values) {\r\n var min = MAX_VALUE,\r\n length = values.length,\r\n i, n;\r\n\r\n for (i = 0; i < length; i++) {\r\n n = values[i];\r\n if (isNumber(n)) {\r\n min = math.min(min, n);\r\n }\r\n }\r\n\r\n return min === MAX_VALUE ? values[0] : min;\r\n },\r\n\r\n max: function(values) {\r\n var max = MIN_VALUE,\r\n length = values.length,\r\n i, n;\r\n\r\n for (i = 0; i < length; i++) {\r\n n = values[i];\r\n if (isNumber(n)) {\r\n max = math.max(max, n);\r\n }\r\n }\r\n\r\n return max === MIN_VALUE ? values[0] : max;\r\n },\r\n\r\n sum: function(values) {\r\n var length = values.length,\r\n sum = 0,\r\n i, n;\r\n\r\n for (i = 0; i < length; i++) {\r\n n = values[i];\r\n if (isNumber(n)) {\r\n sum += n;\r\n }\r\n }\r\n\r\n return sum;\r\n },\r\n\r\n sumOrNull: function(values) {\r\n var result = null;\r\n\r\n if (countNumbers(values)) {\r\n result = Aggregates.sum(values);\r\n }\r\n\r\n return result;\r\n },\r\n\r\n count: function(values) {\r\n var length = values.length,\r\n count = 0,\r\n i, val;\r\n\r\n for (i = 0; i < length; i++) {\r\n val = values[i];\r\n if (val !== null && defined(val)) {\r\n count++;\r\n }\r\n }\r\n\r\n return count;\r\n },\r\n\r\n avg: function(values) {\r\n var result = values[0],\r\n count = countNumbers(values);\r\n\r\n if (count > 0) {\r\n result = Aggregates.sum(values) / count;\r\n }\r\n\r\n return result;\r\n },\r\n\r\n first: function(values) {\r\n var length = values.length,\r\n i,\r\n val;\r\n\r\n for (i = 0; i < length; i++) {\r\n val = values[i];\r\n if (val !== null && defined(val)) {\r\n return val;\r\n }\r\n }\r\n\r\n return values[0];\r\n }\r\n };\r\n\r\n function DefaultAggregates() {\r\n this._defaults = {};\r\n }\r\n\r\n DefaultAggregates.prototype = {\r\n register: function(seriesTypes, aggregates) {\r\n for (var i = 0; i < seriesTypes.length; i++) {\r\n this._defaults[seriesTypes[i]] = aggregates;\r\n }\r\n },\r\n\r\n query: function(seriesType) {\r\n return this._defaults[seriesType];\r\n }\r\n };\r\n\r\n DefaultAggregates.current = new DefaultAggregates();\r\n\r\n var Selection = Observable.extend({\r\n init: function(chart, categoryAxis, options) {\r\n var that = this,\r\n chartElement = chart.element,\r\n categoryAxisLineBox = categoryAxis.lineBox(),\r\n valueAxis = that.getValueAxis(categoryAxis),\r\n valueAxisLineBox = valueAxis.lineBox(),\r\n selectorPrefix = \".\" + CSS_PREFIX,\r\n wrapper, padding;\r\n\r\n Observable.fn.init.call(that);\r\n\r\n that.options = deepExtend({}, that.options, options);\r\n options = that.options;\r\n that.chart = chart;\r\n that.chartElement = chartElement;\r\n that.categoryAxis = categoryAxis;\r\n that._dateAxis = that.categoryAxis instanceof DateCategoryAxis;\r\n that.valueAxis = valueAxis;\r\n\r\n if (that._dateAxis) {\r\n deepExtend(options, {\r\n min: toDate(options.min),\r\n max: toDate(options.max),\r\n from: toDate(options.from),\r\n to: toDate(options.to)\r\n });\r\n }\r\n\r\n that.template = Selection.template;\r\n if (!that.template) {\r\n that.template = Selection.template = renderTemplate(\r\n \"<div class='\" + CSS_PREFIX + \"selector' \" +\r\n \"style='width: #= d.width #px; height: #= d.height #px;\" +\r\n \" top: #= d.offset.top #px; left: #= d.offset.left #px;'>\" +\r\n \"<div class='\" + CSS_PREFIX + \"mask'></div>\" +\r\n \"<div class='\" + CSS_PREFIX + \"mask'></div>\" +\r\n \"<div class='\" + CSS_PREFIX + \"selection'>\" +\r\n \"<div class='\" + CSS_PREFIX + \"selection-bg'></div>\" +\r\n \"<div class='\" + CSS_PREFIX + \"handle \" + CSS_PREFIX + \"leftHandle'><div></div></div>\" +\r\n \"<div class='\" + CSS_PREFIX + \"handle \" + CSS_PREFIX + \"rightHandle'><div></div></div>\" +\r\n \"</div></div>\"\r\n );\r\n }\r\n\r\n padding = {\r\n left: parseInt(chartElement.css(\"paddingLeft\"), 10),\r\n right: parseInt(chartElement.css(\"paddingTop\"), 10)\r\n };\r\n\r\n that.options = deepExtend({}, {\r\n width: categoryAxisLineBox.width(),\r\n height: valueAxisLineBox.height(),\r\n padding: padding,\r\n offset: {\r\n left: valueAxisLineBox.x2 + padding.left,\r\n top: valueAxisLineBox.y1 + padding.right\r\n },\r\n from: options.min,\r\n to: options.max\r\n }, options);\r\n\r\n if (that.options.visible) {\r\n that.wrapper = wrapper = $(that.template(that.options)).appendTo(chartElement);\r\n\r\n that.selection = wrapper.find(selectorPrefix + \"selection\");\r\n that.leftMask = wrapper.find(selectorPrefix + \"mask\").first();\r\n that.rightMask = wrapper.find(selectorPrefix + \"mask\").last();\r\n that.leftHandle = wrapper.find(selectorPrefix + \"leftHandle\");\r\n that.rightHandle = wrapper.find(selectorPrefix + \"rightHandle\");\r\n that.options.selection = {\r\n border: {\r\n left: parseFloat(that.selection.css(\"border-left-width\"), 10),\r\n right: parseFloat(that.selection.css(\"border-right-width\"), 10)\r\n }\r\n };\r\n\r\n that.leftHandle.css(\"top\", (that.selection.height() - that.leftHandle.height()) / 2);\r\n that.rightHandle.css(\"top\", (that.selection.height() - that.rightHandle.height()) / 2);\r\n\r\n that.set(that._index(options.from), that._index(options.to));\r\n\r\n that.bind(that.events, that.options);\r\n that.wrapper[0].style.cssText = that.wrapper[0].style.cssText;\r\n\r\n that.wrapper.on(MOUSEWHEEL_NS, proxy(that._mousewheel, that));\r\n\r\n if (kendo.UserEvents) {\r\n that.userEvents = new kendo.UserEvents(that.wrapper, {\r\n global: true,\r\n stopPropagation: true,\r\n multiTouch: true,\r\n start: proxy(that._start, that),\r\n move: proxy(that._move, that),\r\n end: proxy(that._end, that),\r\n tap: proxy(that._tap, that),\r\n gesturestart: proxy(that._gesturechange, that),\r\n gesturechange: proxy(that._gesturechange, that)\r\n });\r\n } else {\r\n that.leftHandle.add(that.rightHandle).removeClass(CSS_PREFIX + \"handle\");\r\n }\r\n }\r\n },\r\n\r\n events: [\r\n SELECT_START,\r\n SELECT,\r\n SELECT_END\r\n ],\r\n\r\n options: {\r\n visible: true,\r\n mousewheel: {\r\n zoom: BOTH\r\n },\r\n min: MIN_VALUE,\r\n max: MAX_VALUE\r\n },\r\n\r\n destroy: function() {\r\n var that = this,\r\n userEvents = that.userEvents;\r\n\r\n if (userEvents) {\r\n userEvents.destroy();\r\n }\r\n\r\n clearTimeout(that._mwTimeout);\r\n that._state = null;\r\n\r\n that.wrapper.remove();\r\n },\r\n\r\n _rangeEventArgs: function(range) {\r\n var that = this;\r\n\r\n return {\r\n axis: that.categoryAxis.options,\r\n from: that._value(range.from),\r\n to: that._value(range.to)\r\n };\r\n },\r\n\r\n _start: function(e) {\r\n var that = this,\r\n options = that.options,\r\n target = $(e.event.target),\r\n args;\r\n\r\n if (that._state || !target) {\r\n return;\r\n }\r\n\r\n that.chart._unsetActivePoint();\r\n that._state = {\r\n moveTarget: target.parents(\".k-handle\").add(target).first(),\r\n startLocation: e.x ? e.x.location : 0,\r\n range: {\r\n from: that._index(options.from),\r\n to: that._index(options.to)\r\n }\r\n };\r\n\r\n args = that._rangeEventArgs({\r\n from: that._index(options.from),\r\n to: that._index(options.to)\r\n });\r\n\r\n if (that.trigger(SELECT_START, args)) {\r\n that.userEvents.cancel();\r\n that._state = null;\r\n }\r\n },\r\n\r\n _move: function(e) {\r\n if (!this._state) {\r\n return;\r\n }\r\n\r\n var that = this,\r\n state = that._state,\r\n options = that.options,\r\n categories = that.categoryAxis.options.categories,\r\n from = that._index(options.from),\r\n to = that._index(options.to),\r\n min = that._index(options.min),\r\n max = that._index(options.max),\r\n delta = state.startLocation - e.x.location,\r\n range = state.range,\r\n oldRange = { from: range.from, to: range.to },\r\n span = range.to - range.from,\r\n target = state.moveTarget,\r\n scale = that.wrapper.width() / (categories.length - 1),\r\n offset = math.round(delta / scale);\r\n\r\n if (!target) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n\r\n if (target.is(\".k-selection, .k-selection-bg\")) {\r\n range.from = math.min(\r\n math.max(min, from - offset),\r\n max - span\r\n );\r\n range.to = math.min(\r\n range.from + span,\r\n max\r\n );\r\n } else if (target.is(\".k-leftHandle\")) {\r\n range.from = math.min(\r\n math.max(min, from - offset),\r\n max - 1\r\n );\r\n range.to = math.max(range.from + 1, range.to);\r\n } else if (target.is(\".k-rightHandle\")) {\r\n range.to = math.min(\r\n math.max(min + 1, to - offset),\r\n max\r\n );\r\n range.from = math.min(range.to - 1, range.from);\r\n }\r\n\r\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\r\n that.move(range.from, range.to);\r\n that.trigger(SELECT, that._rangeEventArgs(range));\r\n }\r\n },\r\n\r\n _end: function() {\r\n var that = this,\r\n range = that._state.range;\r\n\r\n delete that._state;\r\n that.set(range.from, range.to);\r\n that.trigger(SELECT_END, that._rangeEventArgs(range));\r\n },\r\n\r\n _gesturechange: function(e) {\r\n if (!this._state) {\r\n return;\r\n }\r\n\r\n var that = this,\r\n chart = that.chart,\r\n state = that._state,\r\n options = that.options,\r\n categoryAxis = that.categoryAxis,\r\n range = state.range,\r\n p0 = chart._toModelCoordinates(e.touches[0].x.location).x,\r\n p1 = chart._toModelCoordinates(e.touches[1].x.location).x,\r\n left = math.min(p0, p1),\r\n right = math.max(p0, p1);\r\n\r\n e.preventDefault();\r\n state.moveTarget = null;\r\n\r\n range.from =\r\n categoryAxis.pointCategoryIndex(new dataviz.Point2D(left)) ||\r\n options.min;\r\n\r\n range.to =\r\n categoryAxis.pointCategoryIndex(new dataviz.Point2D(right)) ||\r\n options.max;\r\n\r\n that.move(range.from, range.to);\r\n },\r\n\r\n _tap: function(e) {\r\n var that = this,\r\n options = that.options,\r\n coords = that.chart._eventCoordinates(e),\r\n categoryAxis = that.categoryAxis,\r\n categoryIx = categoryAxis.pointCategoryIndex(\r\n new dataviz.Point2D(coords.x, categoryAxis.box.y1)\r\n ),\r\n from = that._index(options.from),\r\n to = that._index(options.to),\r\n min = that._index(options.min),\r\n max = that._index(options.max),\r\n span = to - from,\r\n mid = from + span / 2,\r\n offset = math.round(mid - categoryIx),\r\n range = {},\r\n rightClick = e.event.which === 3;\r\n\r\n if (that._state || rightClick) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n that.chart._unsetActivePoint();\r\n\r\n if (!categoryAxis.options.justified) {\r\n offset--;\r\n }\r\n\r\n range.from = math.min(\r\n math.max(min, from - offset),\r\n max - span\r\n );\r\n\r\n range.to = math.min(range.from + span, max);\r\n\r\n that._start(e);\r\n if (that._state) {\r\n that._state.range = range;\r\n that.trigger(SELECT, that._rangeEventArgs(range));\r\n that._end();\r\n }\r\n },\r\n\r\n _mousewheel: function(e) {\r\n var that = this,\r\n options = that.options,\r\n delta = mwDelta(e);\r\n\r\n that._start({ event: { target: that.selection } });\r\n\r\n if (that._state) {\r\n var range = that._state.range;\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (math.abs(delta) > 1) {\r\n delta *= ZOOM_ACCELERATION;\r\n }\r\n\r\n if (options.mousewheel.reverse) {\r\n delta *= -1;\r\n }\r\n\r\n if (that.expand(delta)) {\r\n that.trigger(SELECT, {\r\n axis: that.categoryAxis.options,\r\n delta: delta,\r\n originalEvent: e,\r\n from: that._value(range.from),\r\n to: that._value(range.to)\r\n });\r\n }\r\n\r\n if (that._mwTimeout) {\r\n clearTimeout(that._mwTimeout);\r\n }\r\n\r\n that._mwTimeout = setTimeout(function() {\r\n that._end();\r\n }, MOUSEWHEEL_DELAY);\r\n }\r\n },\r\n\r\n _index: function(value) {\r\n var that = this,\r\n categoryAxis = that.categoryAxis,\r\n categories = categoryAxis.options.categories,\r\n index = value;\r\n\r\n if (value instanceof Date) {\r\n index = lteDateIndex(value, categories);\r\n if (!categoryAxis.options.justified && value > last(categories)) {\r\n index += 1;\r\n }\r\n }\r\n\r\n return index;\r\n },\r\n\r\n _value: function(index) {\r\n var that = this,\r\n categoryAxis = this.categoryAxis,\r\n categories = categoryAxis.options.categories,\r\n value = index;\r\n\r\n if (that._dateAxis) {\r\n if (index > categories.length - 1) {\r\n value = that.options.max;\r\n } else {\r\n value = categories[index];\r\n }\r\n }\r\n\r\n return value;\r\n },\r\n\r\n _slot: function(value) {\r\n var that = this,\r\n categoryAxis = this.categoryAxis;\r\n\r\n return categoryAxis.getSlot(that._index(value));\r\n },\r\n\r\n move: function(from, to) {\r\n var that = this,\r\n options = that.options,\r\n offset = options.offset,\r\n padding = options.padding,\r\n border = options.selection.border,\r\n leftMaskWidth,\r\n rightMaskWidth,\r\n box,\r\n distance;\r\n\r\n box = that._slot(from);\r\n leftMaskWidth = round(box.x1 - offset.left + padding.left);\r\n that.leftMask.width(leftMaskWidth);\r\n that.selection.css(\"left\", leftMaskWidth);\r\n\r\n box = that._slot(to);\r\n rightMaskWidth = round(options.width - (box.x1 - offset.left + padding.left));\r\n that.rightMask.width(rightMaskWidth);\r\n distance = options.width - rightMaskWidth;\r\n if (distance != options.width) {\r\n distance += border.right;\r\n }\r\n\r\n that.rightMask.css(\"left\", distance);\r\n that.selection.width(math.max(\r\n options.width - (leftMaskWidth + rightMaskWidth) - border.right,\r\n 0\r\n ));\r\n },\r\n\r\n set: function(from, to) {\r\n var that = this,\r\n options = that.options,\r\n min = that._index(options.min),\r\n max = that._index(options.max);\r\n\r\n from = limitValue(that._index(from), min, max);\r\n to = limitValue(that._index(to), from + 1, max);\r\n\r\n if (options.visible) {\r\n that.move(from, to);\r\n }\r\n\r\n options.from = that._value(from);\r\n options.to = that._value(to);\r\n },\r\n\r\n expand: function(delta) {\r\n var that = this,\r\n options = that.options,\r\n min = that._index(options.min),\r\n max = that._index(options.max),\r\n zDir = options.mousewheel.zoom,\r\n from = that._index(options.from),\r\n to = that._index(options.to),\r\n range = { from: from, to: to },\r\n oldRange = deepExtend({}, range);\r\n\r\n if (that._state) {\r\n range = that._state.range;\r\n }\r\n\r\n if (zDir !== RIGHT) {\r\n range.from = limitValue(\r\n limitValue(from - delta, 0, to - 1),\r\n min, max\r\n );\r\n }\r\n\r\n if (zDir !== LEFT) {\r\n range.to = limitValue(\r\n limitValue(to + delta, range.from + 1, max),\r\n min,\r\n max\r\n );\r\n }\r\n\r\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\r\n that.set(range.from, range.to);\r\n return true;\r\n }\r\n },\r\n\r\n getValueAxis: function(categoryAxis) {\r\n var axes = categoryAxis.pane.axes,\r\n axesCount = axes.length,\r\n i, axis;\r\n\r\n for (i = 0; i < axesCount; i++) {\r\n axis = axes[i];\r\n\r\n if (axis.options.vertical !== categoryAxis.options.vertical) {\r\n return axis;\r\n }\r\n }\r\n }\r\n });\r\n\r\n var SeriesAggregator = function(series, binder, defaultAggregates) {\r\n var sa = this,\r\n canonicalFields = binder.canonicalFields(series),\r\n valueFields = binder.valueFields(series),\r\n sourceFields = binder.sourceFields(series, canonicalFields),\r\n seriesFields = sa._seriesFields = [],\r\n defaults = defaultAggregates.query(series.type),\r\n rootAggregate = series.aggregate || defaults,\r\n i;\r\n\r\n sa._series = series;\r\n sa._binder = binder;\r\n\r\n for (i = 0; i < canonicalFields.length; i++) {\r\n var field = canonicalFields[i],\r\n fieldAggregate;\r\n\r\n if (typeof rootAggregate === OBJECT) {\r\n fieldAggregate = rootAggregate[field];\r\n } else if (i === 0 || inArray(field, valueFields)) {\r\n fieldAggregate = rootAggregate;\r\n } else {\r\n break;\r\n }\r\n\r\n if (fieldAggregate) {\r\n seriesFields.push({\r\n canonicalName: field,\r\n name: sourceFields[i],\r\n transform: isFn(fieldAggregate) ?\r\n fieldAggregate : Aggregates[fieldAggregate]\r\n });\r\n }\r\n }\r\n };\r\n\r\n SeriesAggregator.prototype = {\r\n aggregatePoints: function(srcPoints, group) {\r\n var sa = this,\r\n data = sa._bindPoints(srcPoints || []),\r\n series = sa._series,\r\n seriesFields = sa._seriesFields,\r\n i,\r\n field,\r\n srcValues,\r\n value,\r\n firstDataItem = data.dataItems[0],\r\n result = {};\r\n\r\n if (firstDataItem && !isNumber(firstDataItem) && !isArray(firstDataItem)) {\r\n var fn = function() {};\r\n fn.prototype = firstDataItem;\r\n result = new fn();\r\n }\r\n\r\n for (i = 0; i < seriesFields.length; i++) {\r\n field = seriesFields[i];\r\n srcValues = sa._bindField(data.values, field.canonicalName);\r\n value = field.transform(srcValues, series, data.dataItems, group);\r\n\r\n if (value !== null && typeof value === OBJECT && !defined(value.length)) {\r\n result = value;\r\n break;\r\n } else {\r\n if (defined(value)) {\r\n ensureTree(field.name, result);\r\n kendo.setter(field.name)(result, value);\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n _bindPoints: function(points) {\r\n var sa = this,\r\n binder = sa._binder,\r\n series = sa._series,\r\n values = [],\r\n dataItems = [],\r\n i,\r\n pointIx;\r\n\r\n for (i = 0; i < points.length; i++) {\r\n pointIx = points[i];\r\n\r\n values.push(binder.bindPoint(series, pointIx));\r\n dataItems.push(series.data[pointIx]);\r\n }\r\n\r\n return {\r\n values: values,\r\n dataItems: dataItems\r\n };\r\n },\r\n\r\n _bindField: function(data, field) {\r\n var values = [],\r\n count = data.length,\r\n i, item, value, valueFields;\r\n\r\n for (i = 0; i < count; i++) {\r\n item = data[i];\r\n valueFields = item.valueFields;\r\n\r\n if (defined(valueFields[field])) {\r\n value = valueFields[field];\r\n } else {\r\n value = item.fields[field];\r\n }\r\n\r\n values.push(value);\r\n }\r\n\r\n return values;\r\n }\r\n };\r\n\r\n var ChartAxis = Class.extend({\r\n init: function(axis) {\r\n this._axis = axis;\r\n },\r\n\r\n slot: function(from, to) {\r\n return this._axis.slot(from, to);\r\n },\r\n\r\n range: function() {\r\n return this._axis.range();\r\n }\r\n });\r\n\r\n function intersection(a1, a2, b1, b2) {\r\n var result,\r\n ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x),\r\n u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y),\r\n ua;\r\n\r\n if (u_b !== 0) {\r\n ua = (ua_t / u_b);\r\n\r\n result = new Point2D(\r\n a1.x + ua * (a2.x - a1.x),\r\n a1.y + ua * (a2.y - a1.y)\r\n );\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function applySeriesDefaults(options, themeOptions) {\r\n var series = options.series,\r\n i,\r\n seriesLength = series.length,\r\n seriesType,\r\n seriesDefaults = options.seriesDefaults,\r\n commonDefaults = deepExtend({}, options.seriesDefaults),\r\n themeSeriesDefaults = themeOptions ? deepExtend({}, themeOptions.seriesDefaults) : {},\r\n commonThemeDefaults = deepExtend({}, themeSeriesDefaults);\r\n\r\n cleanupNestedSeriesDefaults(commonDefaults);\r\n cleanupNestedSeriesDefaults(commonThemeDefaults);\r\n\r\n for (i = 0; i < seriesLength; i++) {\r\n\r\n seriesType = series[i].type || options.seriesDefaults.type;\r\n\r\n var baseOptions = deepExtend(\r\n { data: [] },\r\n commonThemeDefaults,\r\n themeSeriesDefaults[seriesType],\r\n { tooltip: options.tooltip },\r\n commonDefaults,\r\n seriesDefaults[seriesType]\r\n );\r\n\r\n series[i]._defaults = baseOptions;\r\n series[i] = deepExtend({}, baseOptions, series[i]);\r\n }\r\n }\r\n\r\n function cleanupNestedSeriesDefaults(seriesDefaults) {\r\n delete seriesDefaults.bar;\r\n delete seriesDefaults.column;\r\n delete seriesDefaults.rangeColumn;\r\n delete seriesDefaults.line;\r\n delete seriesDefaults.verticalLine;\r\n delete seriesDefaults.pie;\r\n delete seriesDefaults.donut;\r\n delete seriesDefaults.area;\r\n delete seriesDefaults.verticalArea;\r\n delete seriesDefaults.scatter;\r\n delete seriesDefaults.scatterLine;\r\n delete seriesDefaults.bubble;\r\n delete seriesDefaults.candlestick;\r\n delete seriesDefaults.ohlc;\r\n delete seriesDefaults.boxPlot;\r\n delete seriesDefaults.bullet;\r\n delete seriesDefaults.verticalBullet;\r\n delete seriesDefaults.polarArea;\r\n delete seriesDefaults.polarLine;\r\n delete seriesDefaults.radarArea;\r\n delete seriesDefaults.radarLine;\r\n delete seriesDefaults.waterfall;\r\n }\r\n\r\n function applySeriesColors(options) {\r\n var series = options.series,\r\n colors = options.seriesColors || [],\r\n i,\r\n currentSeries,\r\n seriesColor,\r\n defaults;\r\n\r\n for (i = 0; i < series.length; i++) {\r\n currentSeries = series[i];\r\n seriesColor = colors[i % colors.length];\r\n currentSeries.color = currentSeries.color || seriesColor;\r\n\r\n defaults = currentSeries._defaults;\r\n if (defaults) {\r\n defaults.color = defaults.color || seriesColor;\r\n }\r\n }\r\n }\r\n\r\n function resolveAxisAliases(options) {\r\n var alias;\r\n\r\n each([CATEGORY, VALUE, X, Y], function() {\r\n alias = this + \"Axes\";\r\n if (options[alias]) {\r\n options[this + \"Axis\"] = options[alias];\r\n delete options[alias];\r\n }\r\n });\r\n }\r\n\r\n function applyAxisDefaults(options, themeOptions) {\r\n var themeAxisDefaults = ((themeOptions || {}).axisDefaults) || {};\r\n\r\n each([CATEGORY, VALUE, X, Y], function() {\r\n var axisName = this + \"Axis\",\r\n axes = [].concat(options[axisName]),\r\n axisDefaults = options.axisDefaults || {};\r\n\r\n axes = $.map(axes, function(axisOptions) {\r\n var axisColor = (axisOptions || {}).color;\r\n var result = deepExtend({},\r\n themeAxisDefaults,\r\n themeAxisDefaults[axisName],\r\n axisDefaults,\r\n axisDefaults[axisName],\r\n {\r\n line: { color: axisColor },\r\n labels: { color: axisColor },\r\n title: { color: axisColor }\r\n },\r\n axisOptions\r\n );\r\n\r\n delete result[axisName];\r\n\r\n return result;\r\n });\r\n\r\n options[axisName] = axes.length > 1 ? axes : axes[0];\r\n });\r\n }\r\n\r\n function categoriesCount(series) {\r\n var seriesCount = series.length,\r\n categories = 0,\r\n i;\r\n\r\n for (i = 0; i < seriesCount; i++) {\r\n categories = math.max(categories, series[i].data.length);\r\n }\r\n\r\n return categories;\r\n }\r\n\r\n function sqr(value) {\r\n return value * value;\r\n }\r\n\r\n extend($.easing, {\r\n easeOutElastic: function (n, d, first, diff) {\r\n var s = 1.70158,\r\n p = 0,\r\n a = diff;\r\n\r\n if ( n === 0 ) {\r\n return first;\r\n }\r\n\r\n if ( n === 1) {\r\n return first + diff;\r\n }\r\n\r\n if (!p) {\r\n p = 0.5;\r\n }\r\n\r\n if (a < math.abs(diff)) {\r\n a=diff;\r\n s = p / 4;\r\n } else {\r\n s = p / (2 * math.PI) * math.asin(diff / a);\r\n }\r\n\r\n return a * math.pow(2,-10 * n) *\r\n math.sin((n * 1 - s) * (1.1 * math.PI) / p) +\r\n diff + first;\r\n }\r\n });\r\n\r\n function getField(field, row) {\r\n if (row === null) {\r\n return row;\r\n }\r\n\r\n var get = getter(field, true);\r\n return get(row);\r\n }\r\n\r\n function getDateField(field, row) {\r\n if (row === null) {\r\n return row;\r\n }\r\n\r\n var key = \"_date_\" + field,\r\n value = row[key];\r\n\r\n if (!value) {\r\n value = toDate(getter(field, true)(row));\r\n row[key] = value;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function toDate(value) {\r\n var result,\r\n i;\r\n\r\n if (value instanceof Date) {\r\n result = value;\r\n } else if (typeof value === STRING) {\r\n result = kendo.parseDate(value) || new Date(value);\r\n } else if (value) {\r\n if (isArray(value)) {\r\n result = [];\r\n for (i = 0; i < value.length; i++) {\r\n result.push(toDate(value[i]));\r\n }\r\n } else {\r\n result = new Date(value);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function toTime(value) {\r\n if (isArray(value)) {\r\n return map(value, toTime);\r\n } else if (value) {\r\n return toDate(value).getTime();\r\n }\r\n }\r\n\r\n function addDuration(date, value, unit, weekStartDay) {\r\n var result = date,\r\n hours;\r\n\r\n if (date) {\r\n date = toDate(date);\r\n hours = date.getHours();\r\n\r\n if (unit === YEARS) {\r\n result = new Date(date.getFullYear() + value, 0, 1);\r\n kendo.date.adjustDST(result, 0);\r\n } else if (unit === MONTHS) {\r\n result = new Date(date.getFullYear(), date.getMonth() + value, 1);\r\n kendo.date.adjustDST(result, hours);\r\n } else if (unit === WEEKS) {\r\n result = addDuration(startOfWeek(date, weekStartDay), value * 7, DAYS);\r\n kendo.date.adjustDST(result, hours);\r\n } else if (unit === DAYS) {\r\n result = new Date(date.getFullYear(), date.getMonth(), date.getDate() + value);\r\n kendo.date.adjustDST(result, hours);\r\n } else if (unit === HOURS) {\r\n result = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours() + value);\r\n if (value > 0 && dateEquals(date, result)) {\r\n result = addDuration(date, value + 1, unit, weekStartDay);\r\n }\r\n } else if (unit === MINUTES) {\r\n result = new Date(date.getTime() + value * TIME_PER_MINUTE);\r\n\r\n if (result.getSeconds() > 0) {\r\n result.setSeconds(0);\r\n }\r\n } else if (unit === SECONDS) {\r\n result = new Date(date.getTime() + value * TIME_PER_SECOND);\r\n }\r\n\r\n if (result.getMilliseconds() > 0) {\r\n result.setMilliseconds(0);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function startOfWeek(date, weekStartDay) {\r\n var day = date.getDay(),\r\n daysToSubtract = 0;\r\n\r\n if (!isNaN(day)) {\r\n weekStartDay = weekStartDay || 0;\r\n while (day !== weekStartDay) {\r\n if (day === 0) {\r\n day = 6;\r\n } else {\r\n day--;\r\n }\r\n\r\n daysToSubtract++;\r\n }\r\n }\r\n\r\n return addTicks(date, -daysToSubtract * TIME_PER_DAY);\r\n }\r\n\r\n function floorDate(date, unit, weekStartDay) {\r\n date = toDate(date);\r\n\r\n return addDuration(date, 0, unit, weekStartDay);\r\n }\r\n\r\n function ceilDate(date, unit, weekStartDay) {\r\n date = toDate(date);\r\n\r\n if (date && floorDate(date, unit, weekStartDay).getTime() === date.getTime()) {\r\n return date;\r\n }\r\n\r\n return addDuration(date, 1, unit, weekStartDay);\r\n }\r\n\r\n function dateDiff(a, b) {\r\n var diff = a.getTime() - b,\r\n offsetDiff = a.getTimezoneOffset() - b.getTimezoneOffset();\r\n\r\n return diff - (offsetDiff * TIME_PER_MINUTE);\r\n }\r\n\r\n function addTicks(date, ticks) {\r\n var tzOffsetBefore = date.getTimezoneOffset(),\r\n result = new Date(date.getTime() + ticks),\r\n tzOffsetDiff = result.getTimezoneOffset() - tzOffsetBefore;\r\n\r\n return new Date(result.getTime() + tzOffsetDiff * TIME_PER_MINUTE);\r\n }\r\n\r\n function duration(a, b, unit) {\r\n var diff;\r\n\r\n if (unit === YEARS) {\r\n diff = b.getFullYear() - a.getFullYear();\r\n } else if (unit === MONTHS) {\r\n diff = duration(a, b, YEARS) * 12 + b.getMonth() - a.getMonth();\r\n } else if (unit === DAYS) {\r\n diff = math.floor(dateDiff(b, a) / TIME_PER_DAY);\r\n } else {\r\n diff = math.floor((b - a) / TIME_PER_UNIT[unit]);\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n function singleItemOrArray(array) {\r\n return array.length === 1 ? array[0] : array;\r\n }\r\n\r\n function axisGroupBox(axes) {\r\n var length = axes.length,\r\n box, i, axisBox;\r\n\r\n if (length > 0) {\r\n for (i = 0; i < length; i++) {\r\n axisBox = axes[i].contentBox();\r\n\r\n if (!box) {\r\n box = axisBox.clone();\r\n } else {\r\n box.wrap(axisBox);\r\n }\r\n }\r\n }\r\n\r\n return box || Box2D();\r\n }\r\n\r\n function equalsIgnoreCase(a, b) {\r\n if (a && b) {\r\n return a.toLowerCase() === b.toLowerCase();\r\n }\r\n\r\n return a === b;\r\n }\r\n\r\n function dateEquals(a, b) {\r\n if (a && b) {\r\n return toTime(a) === toTime(b);\r\n }\r\n\r\n return a === b;\r\n }\r\n\r\n function lastValue(array) {\r\n var i = array.length,\r\n value;\r\n\r\n while (i--) {\r\n value = array[i];\r\n if (defined(value) && value !== null) {\r\n return value;\r\n }\r\n }\r\n }\r\n\r\n function appendIfNotNull(array, element) {\r\n if (element !== null) {\r\n array.push(element);\r\n }\r\n }\r\n\r\n function lteDateIndex(date, sortedDates) {\r\n var low = 0,\r\n high = sortedDates.length - 1,\r\n i,\r\n currentDate;\r\n\r\n while (low <= high) {\r\n i = math.floor((low + high) / 2);\r\n currentDate = sortedDates[i];\r\n\r\n if (currentDate < date) {\r\n low = i + 1;\r\n continue;\r\n }\r\n\r\n if (currentDate > date) {\r\n high = i - 1;\r\n continue;\r\n }\r\n\r\n while (dateEquals(sortedDates[i - 1], date)) {\r\n i--;\r\n }\r\n\r\n return i;\r\n }\r\n\r\n if (sortedDates[i] <= date) {\r\n return i;\r\n } else {\r\n return i - 1;\r\n }\r\n }\r\n\r\n function isNumber(val) {\r\n return typeof val === \"number\" && !isNaN(val);\r\n }\r\n\r\n function countNumbers(values) {\r\n var length = values.length,\r\n count = 0,\r\n i,\r\n num;\r\n\r\n for (i = 0; i < length; i++) {\r\n num = values[i];\r\n if (isNumber(num)) {\r\n count++;\r\n }\r\n }\r\n\r\n return count;\r\n }\r\n\r\n function areNumbers(values) {\r\n return countNumbers(values) === values.length;\r\n }\r\n\r\n function axisRanges(axes) {\r\n var i,\r\n axis,\r\n axisName,\r\n ranges = {};\r\n\r\n for (i = 0; i < axes.length; i++) {\r\n axis = axes[i];\r\n axisName = axis.options.name;\r\n if (axisName) {\r\n ranges[axisName] = axis.range();\r\n }\r\n }\r\n\r\n return ranges;\r\n }\r\n\r\n function evalOptions(options, context, state, dryRun) {\r\n var property,\r\n propValue,\r\n excluded,\r\n defaults,\r\n depth,\r\n needsEval = false;\r\n\r\n state = state || {};\r\n excluded = state.excluded = state.excluded || [];\r\n defaults = state.defaults = state.defaults || {};\r\n depth = state.depth = state.depth || 0;\r\n\r\n if (depth > MAX_EXPAND_DEPTH) {\r\n return;\r\n }\r\n\r\n for (property in options) {\r\n if (!inArray(property, state.excluded)&&options.hasOwnProperty(property)) {\r\n propValue = options[property];\r\n if (isFn(propValue)) {\r\n needsEval = true;\r\n if (!dryRun) {\r\n options[property] = valueOrDefault(propValue(context), defaults[property]);\r\n }\r\n } else if (typeof propValue === OBJECT) {\r\n state.defaults = defaults[property];\r\n state.depth++;\r\n needsEval = evalOptions(propValue, context, state, dryRun) || needsEval;\r\n state.depth--;\r\n }\r\n }\r\n }\r\n\r\n return needsEval;\r\n }\r\n\r\n function groupSeries(series, data) {\r\n var result = [],\r\n nameTemplate,\r\n legacyTemplate = series.groupNameTemplate,\r\n groupIx,\r\n dataLength = data.length,\r\n seriesClone;\r\n\r\n if (dataLength === 0) {\r\n seriesClone = deepExtend({}, series);\r\n seriesClone.visibleInLegend = false;\r\n return [seriesClone];\r\n }\r\n\r\n if (defined(legacyTemplate)) {\r\n kendo.logToConsole(\r\n \"'groupNameTemplate' is obsolete and will be removed in future versions. \" +\r\n \"Specify the group name template as 'series.name'\"\r\n );\r\n\r\n if (legacyTemplate) {\r\n nameTemplate = template(legacyTemplate);\r\n }\r\n } else {\r\n nameTemplate = template(series.name || \"\");\r\n if (nameTemplate._slotCount === 0) {\r\n nameTemplate = template(defined(series.name) ?\r\n \"#= group.value #: #= series.name #\" :\r\n \"#= group.value #\"\r\n );\r\n }\r\n }\r\n\r\n for (groupIx = 0; groupIx < dataLength; groupIx++) {\r\n seriesClone = deepExtend({}, series);\r\n\r\n if (!isFn(seriesClone.color)) {\r\n seriesClone.color = undefined;\r\n }\r\n\r\n seriesClone._groupIx = groupIx;\r\n result.push(seriesClone);\r\n\r\n if (nameTemplate) {\r\n seriesClone.name = nameTemplate({\r\n series: seriesClone, group: data[groupIx]\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function filterSeriesByType(series, types) {\r\n var i, currentSeries,\r\n result = [];\r\n\r\n types = [].concat(types);\r\n for (i = 0; i < series.length; i++) {\r\n currentSeries = series[i];\r\n if (inArray(currentSeries.type, types)) {\r\n result.push(currentSeries);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function indexOf(item, arr) {\r\n if (item instanceof Date) {\r\n for (var i = 0, length = arr.length; i < length; i++) {\r\n if (dateEquals(arr[i], item)) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n } else {\r\n return $.inArray(item, arr);\r\n }\r\n }\r\n\r\n function sortDates(dates, comparer) {\r\n comparer = comparer || dateComparer;\r\n\r\n for (var i = 1, length = dates.length; i < length; i++) {\r\n if (comparer(dates[i], dates[i - 1]) < 0) {\r\n dates.sort(comparer);\r\n break;\r\n }\r\n }\r\n\r\n return dates;\r\n }\r\n\r\n // Will mutate srcDates, not cloned for performance\r\n function uniqueDates(srcDates, comparer) {\r\n var i,\r\n dates = sortDates(srcDates, comparer),\r\n length = dates.length,\r\n result = length > 0 ? [dates[0]] : [];\r\n\r\n comparer = comparer || dateComparer;\r\n\r\n for (i = 1; i < length; i++) {\r\n if (comparer(dates[i], last(result)) !== 0) {\r\n result.push(dates[i]);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function isDateAxis(axisOptions, sampleCategory) {\r\n var type = axisOptions.type,\r\n dateCategory = sampleCategory instanceof Date;\r\n\r\n return (!type && dateCategory) || equalsIgnoreCase(type, DATE);\r\n }\r\n\r\n function transpose(rows) {\r\n var result = [],\r\n rowCount = rows.length,\r\n rowIx,\r\n row,\r\n colIx,\r\n colCount;\r\n\r\n for (rowIx = 0; rowIx < rowCount; rowIx++) {\r\n row = rows[rowIx];\r\n colCount = row.length;\r\n for (colIx = 0; colIx < colCount; colIx++) {\r\n result[colIx] = result[colIx] || [];\r\n result[colIx].push(row[colIx]);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function ensureTree(fieldName, target) {\r\n if (fieldName.indexOf(\".\") > -1) {\r\n var parts = fieldName.split(\".\"),\r\n path = \"\",\r\n val;\r\n\r\n while (parts.length > 1) {\r\n path += parts.shift();\r\n val = kendo.getter(path)(target) || {};\r\n kendo.setter(path)(target, val);\r\n path += \".\";\r\n }\r\n }\r\n }\r\n\r\n function seriesTotal(series) {\r\n var data = series.data;\r\n var sum = 0;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var pointData = SeriesBinder.current.bindPoint(series, i);\r\n var value = pointData.valueFields.value;\r\n\r\n if (typeof value === STRING) {\r\n value = parseFloat(value);\r\n }\r\n\r\n if (isNumber(value) && pointData.fields.visible !== false) {\r\n sum += math.abs(value);\r\n }\r\n }\r\n\r\n return sum;\r\n }\r\n\r\n function hasGradientOverlay(options) {\r\n var overlay = options.overlay;\r\n return overlay && overlay.gradient && overlay.gradient != \"none\";\r\n }\r\n\r\n function returnSelf() {\r\n return this;\r\n }\r\n\r\n function anyHasZIndex(elements) {\r\n for (var idx = 0; idx < elements.length; idx++) {\r\n if (defined(elements[idx].zIndex)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n function preventDefault() {\r\n this._defaultPrevented = true;\r\n }\r\n\r\n function pointByCategoryName(points, name) {\r\n if (points) {\r\n for (var idx = 0; idx < points.length; idx++) {\r\n if (points[idx].category === name) {\r\n return [points[idx]];\r\n }\r\n }\r\n }\r\n }\r\n\r\n function hasValue(value) {\r\n return defined(value) && value !== null;\r\n }\r\n\r\n // Exports ================================================================\r\n dataviz.ui.plugin(Chart);\r\n\r\n PlotAreaFactory.current.register(CategoricalPlotArea, [\r\n BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA,\r\n CANDLESTICK, OHLC, BULLET, VERTICAL_BULLET, BOX_PLOT,\r\n RANGE_COLUMN, RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL\r\n ]);\r\n\r\n PlotAreaFactory.current.register(XYPlotArea, [\r\n SCATTER, SCATTER_LINE, BUBBLE\r\n ]);\r\n\r\n PlotAreaFactory.current.register(PiePlotArea, [PIE]);\r\n PlotAreaFactory.current.register(DonutPlotArea, [DONUT]);\r\n\r\n SeriesBinder.current.register(\r\n [BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA],\r\n [VALUE], [CATEGORY, COLOR, NOTE_TEXT, ERROR_LOW_FIELD, ERROR_HIGH_FIELD]\r\n );\r\n\r\n SeriesBinder.current.register(\r\n [RANGE_COLUMN, RANGE_BAR],\r\n [FROM, TO], [CATEGORY, COLOR, NOTE_TEXT]\r\n );\r\n\r\n SeriesBinder.current.register(\r\n [WATERFALL, HORIZONTAL_WATERFALL],\r\n [VALUE], [CATEGORY, COLOR, NOTE_TEXT, SUMMARY_FIELD]\r\n );\r\n\r\n DefaultAggregates.current.register(\r\n [BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA, WATERFALL, HORIZONTAL_WATERFALL],\r\n { value: MAX, color: FIRST, noteText: FIRST, errorLow: MIN, errorHigh: MAX }\r\n );\r\n\r\n DefaultAggregates.current.register(\r\n [RANGE_COLUMN, RANGE_BAR],\r\n { from: MIN, to: MAX, color: FIRST, noteText: FIRST }\r\n );\r\n\r\n SeriesBinder.current.register(\r\n [SCATTER, SCATTER_LINE, BUBBLE],\r\n [X, Y], [COLOR, NOTE_TEXT, X_ERROR_LOW_FIELD, X_ERROR_HIGH_FIELD, Y_ERROR_LOW_FIELD, Y_ERROR_HIGH_FIELD]\r\n );\r\n\r\n SeriesBinder.current.register(\r\n [BUBBLE], [X, Y, \"size\"], [COLOR, CATEGORY, NOTE_TEXT]\r\n );\r\n\r\n SeriesBinder.current.register(\r\n [CANDLESTICK, OHLC],\r\n [\"open\", \"high\", \"low\", \"close\"], [CATEGORY, COLOR, \"downColor\", NOTE_TEXT]\r\n );\r\n\r\n DefaultAggregates.current.register(\r\n [CANDLESTICK, OHLC],\r\n { open: MAX, high: MAX, low: MIN, close: MAX,\r\n color: FIRST, downColor: FIRST, noteText: FIRST }\r\n );\r\n\r\n SeriesBinder.current.register(\r\n [BOX_PLOT],\r\n [\"lower\", \"q1\", \"median\", \"q3\", \"upper\", \"mean\", \"outliers\"], [CATEGORY, COLOR, NOTE_TEXT]\r\n );\r\n\r\n DefaultAggregates.current.register(\r\n [BOX_PLOT],\r\n { lower: MAX, q1: MAX, median: MAX, q3: MAX, upper: MAX, mean: MAX, outliers: FIRST,\r\n color: FIRST, noteText: FIRST }\r\n );\r\n\r\n SeriesBinder.current.register(\r\n [BULLET, VERTICAL_BULLET],\r\n [\"current\", \"target\"], [CATEGORY, COLOR, \"visibleInLegend\", NOTE_TEXT]\r\n );\r\n\r\n DefaultAggregates.current.register(\r\n [BULLET, VERTICAL_BULLET],\r\n { current: MAX, target: MAX, color: FIRST, noteText: FIRST }\r\n );\r\n\r\n SeriesBinder.current.register(\r\n [PIE, DONUT],\r\n [VALUE], [CATEGORY, COLOR, \"explode\", \"visibleInLegend\", \"visible\"]\r\n );\r\n\r\n deepExtend(dataviz, {\r\n EQUALLY_SPACED_SERIES: EQUALLY_SPACED_SERIES,\r\n\r\n Aggregates: Aggregates,\r\n AreaChart: AreaChart,\r\n AreaSegment: AreaSegment,\r\n AxisGroupRangeTracker: AxisGroupRangeTracker,\r\n Bar: Bar,\r\n BarChart: BarChart,\r\n BarLabel: BarLabel,\r\n BubbleChart: BubbleChart,\r\n Bullet: Bullet,\r\n BulletChart: BulletChart,\r\n CandlestickChart: CandlestickChart,\r\n Candlestick: Candlestick,\r\n CategoricalChart: CategoricalChart,\r\n CategoricalErrorBar: CategoricalErrorBar,\r\n CategoricalPlotArea: CategoricalPlotArea,\r\n CategoryAxis: CategoryAxis,\r\n ChartAxis: ChartAxis,\r\n ChartContainer: ChartContainer,\r\n ClipAnimation: ClipAnimation,\r\n ClusterLayout: ClusterLayout,\r\n Crosshair: Crosshair,\r\n CrosshairTooltip: CrosshairTooltip,\r\n DateCategoryAxis: DateCategoryAxis,\r\n DateValueAxis: DateValueAxis,\r\n DefaultAggregates: DefaultAggregates,\r\n DonutChart: DonutChart,\r\n DonutPlotArea: DonutPlotArea,\r\n DonutSegment: DonutSegment,\r\n ErrorBarBase: ErrorBarBase,\r\n ErrorRangeCalculator: ErrorRangeCalculator,\r\n Highlight: Highlight,\r\n SharedTooltip: SharedTooltip,\r\n Legend: Legend,\r\n LegendItem: LegendItem,\r\n LegendLayout: LegendLayout,\r\n LineChart: LineChart,\r\n LinePoint: LinePoint,\r\n LineSegment: LineSegment,\r\n Pane: Pane,\r\n PieAnimation: PieAnimation,\r\n PieChart: PieChart,\r\n PieChartMixin: PieChartMixin,\r\n PiePlotArea: PiePlotArea,\r\n PieSegment: PieSegment,\r\n PlotAreaBase: PlotAreaBase,\r\n PlotAreaFactory: PlotAreaFactory,\r\n PointEventsMixin: PointEventsMixin,\r\n RangeBar: RangeBar,\r\n RangeBarChart: RangeBarChart,\r\n ScatterChart: ScatterChart,\r\n ScatterErrorBar: ScatterErrorBar,\r\n ScatterLineChart: ScatterLineChart,\r\n Selection: Selection,\r\n SeriesAggregator: SeriesAggregator,\r\n SeriesBinder: SeriesBinder,\r\n ShapeElement: ShapeElement,\r\n SplineSegment: SplineSegment,\r\n SplineAreaSegment: SplineAreaSegment,\r\n StackWrap: StackWrap,\r\n Tooltip: Tooltip,\r\n OHLCChart: OHLCChart,\r\n OHLCPoint: OHLCPoint,\r\n WaterfallChart: WaterfallChart,\r\n WaterfallSegment: WaterfallSegment,\r\n XYPlotArea: XYPlotArea,\r\n\r\n addDuration: addDuration,\r\n areNumbers: areNumbers,\r\n axisGroupBox: axisGroupBox,\r\n categoriesCount: categoriesCount,\r\n ceilDate: ceilDate,\r\n countNumbers: countNumbers,\r\n duration: duration,\r\n ensureTree: ensureTree,\r\n indexOf: indexOf,\r\n isNumber: isNumber,\r\n floorDate: floorDate,\r\n filterSeriesByType: filterSeriesByType,\r\n hasValue: hasValue,\r\n lteDateIndex: lteDateIndex,\r\n evalOptions: evalOptions,\r\n seriesTotal: seriesTotal,\r\n singleItemOrArray: singleItemOrArray,\r\n sortDates: sortDates,\r\n startOfWeek: startOfWeek,\r\n transpose: transpose,\r\n toDate: toDate,\r\n toTime: toTime,\r\n uniqueDates: uniqueDates\r\n });\r\n\r\n})(window.kendo.jQuery);\r\n\r\n\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });"],"sourceRoot":"/source/"}